add action columns-width-equalize (resolves #22)

This commit is contained in:
Peter Fajdiga
2023-12-01 22:51:40 +01:00
parent 552d2b851f
commit 22e4c47189
4 changed files with 34 additions and 0 deletions

View File

@@ -176,6 +176,12 @@ namespace Actions {
});
},
columnsWidthEqualize: () => {
world.do((clientManager, desktopManager) => {
desktopManager.getCurrentDesktop().equalizeVisibleColumnsWidths();
});
},
gridScrollLeft: () => {
gridScroll(world, -config.manualScrollStep);
},

View File

@@ -125,6 +125,12 @@ const keyBindings: KeyBinding[] = [
"defaultKeySequence": "Meta+Ctrl+-",
"action": "columnWidthDecrease",
},
{
"name": "columns-width-equalize",
"description": "Equalize widths of visible columns",
"defaultKeySequence": "Meta+Ctrl+X",
"action": "columnsWidthEqualize",
},
{
"name": "grid-scroll-focused",
"description": "Center focused window",

View File

@@ -145,6 +145,20 @@ class Desktop {
this.setScroll(this.scrollX, false);
}
public equalizeVisibleColumnsWidths() {
const scrollPos = this.getCurrentScrollPos();
const visibleColumns = Array.from(this.grid.getVisibleColumns(scrollPos, true));
let remainingWidth = this.tilingArea.width - (visibleColumns.length-1) * this.grid.config.gapsInnerHorizontal;
let remainingColumns = visibleColumns.length;
for (const column of visibleColumns) {
const columnWidth = Math.round(remainingWidth / remainingColumns);
column.setWidth(columnWidth, true);
remainingWidth -= columnWidth;
remainingColumns--;
}
}
public arrange() {
// TODO (optimization): only arrange visible windows
this.updateArea();

View File

@@ -113,6 +113,14 @@ class Grid {
return last;
}
public *getVisibleColumns(scrollPos: Desktop.ScrollPos, fullyVisible: boolean) {
for (const column of this.columns.iterator()) {
if (column.isVisible(scrollPos, fullyVisible)) {
yield column;
}
}
}
public getVisibleColumnsWidth(scrollPos: Desktop.ScrollPos, fullyVisible: boolean) {
let width = 0;
let nVisible = 0;