瀏覽代碼

Support nested groups on contextmenu Move to Group

Leonardo Jeanteur 3 月之前
父節點
當前提交
ffc8faf3a6
共有 2 個文件被更改,包括 22 次插入3 次删除
  1. 4 0
      hide/comp/ContextMenu.hx
  2. 18 3
      hide/comp/cdb/Editor.hx

+ 4 - 0
hide/comp/ContextMenu.hx

@@ -557,6 +557,10 @@ class ContextMenu {
                     menuItem.click();
                 }
                 if (menuItem.menu != null) {
+                    if (menuItem.click != null && !menuItem.stayOpen) {
+                        closeAll();
+                        return;
+                    }
                     if (popupTimer != null) {
                         popupTimer.stop();
                     }

+ 18 - 3
hide/comp/cdb/Editor.hx

@@ -2080,9 +2080,11 @@ class Editor extends Component {
 			}
 
 		var moveSubmenu : Array<hide.comp.ContextMenu.MenuItem> = [];
+		var moveStack : Array<hide.comp.ContextMenu.MenuItem> = [];
 		for( sepIndex => sep in sheet.separators ) {
 			if( sep.title == null )
 				continue;
+			var level = sep.level ?? 0;
 
 			function separatorCount( fromLine : Int ) {
 				var count = 0;
@@ -2110,11 +2112,24 @@ class Editor extends Component {
 			}
 			var delta = lastOfGroup - usedLine.index + separatorCount(usedLine.index);
 			var linesToMove = isSelectedLine ? selectedLines : [usedLine];
-			moveSubmenu.push({
+			var item = {
 				label : sep.title,
 				enabled : true,
-				click : () -> usedLine.table.moveLines(linesToMove, delta)
-			});
+				click : function() {
+					usedLine.table.moveLines(linesToMove, delta);
+				},
+				stayOpen: false,
+			};
+			moveStack[level] = item;
+			moveStack.splice(level + 1, moveStack.length);
+			var arr = moveSubmenu;
+			if (level > 0 && moveStack[level - 1] != null) {
+				var m = moveStack[level - 1];
+				if (m.menu == null)
+					m.menu = [];
+				arr = m.menu;
+			}
+			arr.push(item);
 		}
 
 		var hasLocText = false;