@theia/core
Version:
Theia is a cloud & desktop IDE framework implemented in TypeScript.
119 lines • 4.79 kB
JavaScript
// *****************************************************************************
// Copyright (C) 2019 Red Hat, Inc. and others.
//
// This program and the accompanying materials are made available under the
// terms of the Eclipse Public License v. 2.0 which is available at
// http://www.eclipse.org/legal/epl-2.0.
//
// This Source Code may also be made available under the following Secondary
// Licenses when the conditions for such availability set forth in the Eclipse
// Public License v. 2.0 are satisfied: GNU General Public License, version 2
// with the GNU Classpath Exception which is available at
// https://www.gnu.org/software/classpath/license.html.
//
// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
// *****************************************************************************
Object.defineProperty(exports, "__esModule", { value: true });
exports.ViewColumnService = void 0;
const tslib_1 = require("tslib");
const inversify_1 = require("inversify");
const event_1 = require("../../common/event");
const application_shell_1 = require("./application-shell");
const algorithm_1 = require("@lumino/algorithm");
let ViewColumnService = class ViewColumnService {
constructor(shell) {
this.shell = shell;
this.columnValues = new Map();
this.viewColumnIds = new Map();
this.onViewColumnChangedEmitter = new event_1.Emitter();
let oldColumnValues = new Map();
const update = async () => {
await new Promise((resolve => setTimeout(resolve)));
this.updateViewColumns();
this.viewColumnIds.forEach((ids, viewColumn) => {
ids.forEach((id) => {
if (!oldColumnValues.has(id) || oldColumnValues.get(id) !== viewColumn) {
this.onViewColumnChangedEmitter.fire({ id, viewColumn });
}
});
});
oldColumnValues = new Map(this.columnValues.entries());
};
this.shell.mainPanel.widgetAdded.connect(() => update());
this.shell.mainPanel.widgetRemoved.connect(() => update());
}
get onViewColumnChanged() {
return this.onViewColumnChangedEmitter.event;
}
updateViewColumns() {
this.columnValues.clear();
this.viewColumnIds.clear();
const rows = new Map();
const columns = new Map();
for (const tabBar of (0, algorithm_1.toArray)(this.shell.mainPanel.tabBars())) {
if (!tabBar.node.style.top || !tabBar.node.style.left) {
continue;
}
const top = parseInt(tabBar.node.style.top);
const left = parseInt(tabBar.node.style.left);
const row = rows.get(top) || new Set();
row.add(left);
rows.set(top, row);
const column = columns.get(left) || new Map();
column.set(top, tabBar);
columns.set(left, column);
}
const firstRow = rows.get([...rows.keys()].sort()[0]);
if (!firstRow) {
return;
}
const lefts = [...firstRow.keys()].sort();
for (let i = 0; i < lefts.length; i++) {
const column = columns.get(lefts[i]);
if (!column) {
break;
}
const cellIndexes = [...column.keys()].sort();
let viewColumn = Math.min(i, 2);
for (let j = 0; j < cellIndexes.length; j++) {
const cell = column.get(cellIndexes[j]);
if (!cell) {
break;
}
this.setViewColumn(cell, viewColumn);
if (viewColumn < 7) {
viewColumn += 3;
}
}
}
}
setViewColumn(tabBar, viewColumn) {
const ids = [];
for (const title of tabBar.titles) {
const id = title.owner.id;
ids.push(id);
this.columnValues.set(id, viewColumn);
}
this.viewColumnIds.set(viewColumn, ids);
}
getViewColumnIds(viewColumn) {
return this.viewColumnIds.get(viewColumn) || [];
}
getViewColumn(id) {
return this.columnValues.get(id);
}
hasViewColumn(id) {
return this.columnValues.has(id);
}
viewColumnsSize() {
return this.viewColumnIds.size;
}
};
exports.ViewColumnService = ViewColumnService;
exports.ViewColumnService = ViewColumnService = tslib_1.__decorate([
(0, inversify_1.injectable)(),
tslib_1.__param(0, (0, inversify_1.inject)(application_shell_1.ApplicationShell)),
tslib_1.__metadata("design:paramtypes", [application_shell_1.ApplicationShell])
], ViewColumnService);
//# sourceMappingURL=view-column-service.js.map
;