aboutsummaryrefslogtreecommitdiff
path: root/src/layout.ts
diff options
context:
space:
mode:
authorTerry Truong <terry06890@gmail.com>2022-03-12 16:59:26 +1100
committerTerry Truong <terry06890@gmail.com>2022-03-12 17:00:29 +1100
commit8f2b6dff0179eb42831dad42e5a68d1c328df7ff (patch)
treeeac4d914ffa487f9b76c66a69f484baffe725739 /src/layout.ts
parent097e23dde42613a0430f85c087dee9377f2e91af (diff)
Define TreeNode and LayoutNode. Move classes to types.ts.
Diffstat (limited to 'src/layout.ts')
-rw-r--r--src/layout.ts87
1 files changed, 17 insertions, 70 deletions
diff --git a/src/layout.ts b/src/layout.ts
index ab0a886..be30bc4 100644
--- a/src/layout.ts
+++ b/src/layout.ts
@@ -1,5 +1,5 @@
export {staticSqrLayout, staticRectLayout, sweepToSideLayout, layoutInfoHooks};
-export type {TolNode, TreeNode, LayoutNode};
+import {TolNode, TreeNode, LayoutNode, SideArea, LeftoverArea} from './types';
let TILE_SPACING = 5;
let HEADER_SZ = 20;
@@ -10,50 +10,6 @@ let SWEEP_MODE = 'left'; //'left', 'top', 'shorter', 'auto'
let ALLOW_SWEEP_TO_PARENT = true;
let RECT_SPC_SHIFTING = true;
-interface TolNode {
- name: string;
- children: TolNode[];
-}
-interface TreeNode {
- tolNode: TolNode;
- children: TreeNode[];
- x: number;
- y: number;
- w: number;
- h: number;
- headerSz: number;
- sideArea: SideArea | null;
- tileCount: number;
-}
-interface LayoutNode {
- name: string;
- x: number;
- y: number;
- w: number;
- h: number;
- headerSz: number;
- children: LayoutNode[];
- contentW: number;
- contentH: number;
- empSpc: number;
- sideArea: SideArea | null;
-}
-interface SideArea {
- x: number;
- y: number;
- w: number;
- h: number;
- sweptLeft: boolean;
- extraSz: number;
-}
-interface LeftoverArea {
- parentX: number;
- parentY: number;
- w: number;
- h: number;
- sweptLeft: boolean;
-}
-
const layoutInfoHooks = { //made common-across-layout-types for layout inter-usability
initLayoutInfo(tree: TreeNode){
if (tree.children.length > 0){
@@ -129,15 +85,12 @@ function staticSqrLayout(node: TreeNode, x: number, y: number, w: number, h: num
lowestEmp += childLayouts[i].empSpc;
}
}
- return {
- name: node.tolNode.name,
- x: x, y: y, w: w, h: h, headerSz: headerSz,
- children: childLayouts,
+ return new LayoutNode(node.tolNode.name, childLayouts, x, y, w, h, {
+ headerSz,
contentW: numCols * (tileSize + TILE_SPACING) + TILE_SPACING,
contentH: numRows * (tileSize + TILE_SPACING) + TILE_SPACING + headerSz,
empSpc: lowestEmp,
- sideArea: null,
- };
+ });
}
//lays out nodes as rectangles organised into rows, partially using other layouts for children
function staticRectLayout(node: TreeNode, x: number, y: number, w: number, h: number, hideHeader: boolean,
@@ -304,15 +257,9 @@ function staticRectLayout(node: TreeNode, x: number, y: number, w: number, h: nu
//make no-child tiles have width/height fitting their content
childLayouts.filter(l => l.children.length == 0).forEach(l => {l.w = l.contentW; l.h = l.contentH;});
//determine layout
- return {
- name: node.tolNode.name,
- x: x, y: y, w: w, h: h, headerSz: headerSz,
- children: childLayouts,
- contentW: w, //trying to shrink this causes problems with swept-to-parent-area div-alignment
- contentH: h,
- empSpc: lowestEmp,
- sideArea: null,
- };
+ return new LayoutNode(node.tolNode.name, childLayouts, x, y, w, h,
+ {headerSz, contentW: w, contentH: h, empSpc: lowestEmp});
+ //trying to shrink contentW and contentH causes problems with swept-to-parent-area div-alignment
}
//lays out nodes by pushing leaves to one side, partially using other layouts for children
function sweepToSideLayout(node: TreeNode, x: number, y: number, w: number, h: number, hideHeader: boolean,
@@ -443,10 +390,8 @@ function sweepToSideLayout(node: TreeNode, x: number, y: number, w: number, h: n
let layoutsInOldOrder = seq(node.children.length)
.map(i => children.findIndex(n => n == node.children[i]))
.map(i => layouts[i]);
- return {
- name: node.tolNode.name,
- x: x, y: y, w: w, h: h, headerSz: headerSz,
- children: layoutsInOldOrder,
+ return new LayoutNode(node.tolNode.name, layoutsInOldOrder, x, y, w, h, {
+ headerSz,
contentW: usingParentArea ? nonLeavesLayout.contentW : (sweptLeft ?
sweptLayout.contentW + nonLeavesLayout.contentW - TILE_SPACING :
Math.max(sweptLayout.contentW, nonLeavesLayout.contentW)),
@@ -454,12 +399,14 @@ function sweepToSideLayout(node: TreeNode, x: number, y: number, w: number, h: n
Math.max(sweptLayout.contentH, nonLeavesLayout.contentH) + headerSz :
sweptLayout.contentH + nonLeavesLayout.contentH - TILE_SPACING + headerSz),
empSpc: sweptLayout.empSpc + nonLeavesLayout.empSpc,
- sideArea: usingParentArea && parentArea != null ? {
- x: parentArea.parentX, y: parentArea.parentY,
- w: parentArea.w, h: parentArea.h,
- sweptLeft: sweptLeft, extraSz: TILE_SPACING+1,
- }: null,
- };
+ sideArea: (usingParentArea && parentArea != null) ?
+ {
+ x: parentArea.parentX, y: parentArea.parentY,
+ w: parentArea.w, h: parentArea.h,
+ sweptLeft: sweptLeft, extraSz: TILE_SPACING+1,
+ }:
+ null,
+ });
}
}