Jelajahi Sumber

erge branch 'master' of https://github.com/HeapsIO/hide

LeoVgr 3 minggu lalu
induk
melakukan
5a080b7ccb
2 mengubah file dengan 51 tambahan dan 5 penghapusan
  1. 22 2
      hide/comp/cdb/Editor.hx
  2. 29 3
      hide/view/CdbTable.hx

+ 22 - 2
hide/comp/cdb/Editor.hx

@@ -27,6 +27,7 @@ typedef UndoState = {
 	var separatorsState: Map<String, Bool>;
 	var cursor : Cursor.CursorState;
 	var tables : Array<UndoSheet>;
+	var sheetOrder : Array<String>;
 }
 
 typedef EditorApi = {
@@ -1024,6 +1025,7 @@ class Editor extends Component {
 				}
 				makeParent(tables[i]);
 			}],
+			sheetOrder : cdbTable.sheetsOrder.copy(),
 		};
 	}
 
@@ -1079,6 +1081,7 @@ class Editor extends Component {
 		var state = undoState[0];
 		var newSheet = getCurrentSheet();
 		var newSaparatorsState = separatorsState;
+		var newSheetsOrder = cdbTable.sheetsOrder.copy();
 		currentValue = newValue;
 		save();
 		undo.change(Custom(function(undo) {
@@ -1088,11 +1091,13 @@ class Editor extends Component {
 				currentValue = state.data;
 				currentSheet = state.sheet;
 				separatorsState = state.separatorsState;
+				cdbTable.sheetsOrder = state.sheetOrder;
 			} else {
 				undoState.unshift(state);
 				currentValue = newValue;
 				currentSheet = newSheet;
 				separatorsState = newSaparatorsState;
+				cdbTable.sheetsOrder = newSheetsOrder;
 			}
 			api.load(currentValue);
 			DataFiles.save(true); // save reloaded data
@@ -2413,6 +2418,9 @@ class Editor extends Component {
 		for( s in base.sheets )
 			if( StringTools.startsWith(s.name, old + "@") )
 				s.rename(name + "@" + s.name.substr(old.length + 1));
+		var order = cdbTable.sheetsOrder.indexOf(old);
+		if( order >= 0 )
+			cdbTable.sheetsOrder[order] = name;
 		endChanges();
 		DataFiles.save(true,[ sheet.name => old ]);
 		return true;
@@ -2462,6 +2470,18 @@ class Editor extends Component {
 			return null;
 		}
 		ide.saveDatabase();
+		var orderIndex = -1;
+		if( index == 0 ) {
+			orderIndex = 0;
+		} else if( index > 0 ) {
+			var prevSheetName = base.sheets[index-1]?.name;
+			orderIndex = prevSheetName == null ? -1 : cdbTable.sheetsOrder.findIndex((s) -> s == prevSheetName);
+			if( orderIndex >= 0 )
+				orderIndex += 1;
+		}
+		if( orderIndex >= 0 && orderIndex <= cdbTable.sheetsOrder.length ) {
+			cdbTable.sheetsOrder.insert(orderIndex, s.name);
+		}
 		refreshAll();
 		return s;
 	}
@@ -2477,8 +2497,8 @@ class Editor extends Component {
 		if (withMacro) {
 			content = content.concat([
 				{ label : "Add Sheet", click : function() { beginChanges(); var db = createDBSheet(index+1); endChanges(); if( db != null ) onChange(); } },
-				{ label : "Move Left", click : function() { beginChanges(); base.moveSheet(sheet,-1); endChanges(); onChange(); } },
-				{ label : "Move Right", click : function() { beginChanges(); base.moveSheet(sheet,1); endChanges(); onChange(); } },
+				{ label : "Move Left", click : function() { beginChanges(); cdbTable.moveSheetDisplayOrder(sheet,-1); endChanges(); onChange(); } },
+				{ label : "Move Right", click : function() { beginChanges(); cdbTable.moveSheetDisplayOrder(sheet,1); endChanges(); onChange(); } },
 				{ label : "Rename", click : function() {
 					var name = ide.ask("New name", sheet.name);
 					if( name == null || name == "" || name == sheet.name ) return;

+ 29 - 3
hide/view/CdbTable.hx

@@ -1,7 +1,10 @@
 package hide.view;
 
+using hide.tools.Extensions;
+
 class CdbTable extends hide.ui.View<{}> {
 
+	public var sheetsOrder : Array<String>;
 	var tabContents : Array<Element>;
 	var editor : hide.comp.cdb.Editor;
 	var currentSheet : String;
@@ -23,6 +26,9 @@ class CdbTable extends hide.ui.View<{}> {
 		undoStack[0] = editor.undo;
 		currentSheet = this.config.get("cdb.currentSheet");
 		view = cast this.config.get("cdb.view");
+		saveDisplayKey = "cdb:" + ide.getPath(@:privateAccess ide.databaseFile);
+		sheetsOrder = getDisplayState("sheetsOrder");
+		if( sheetsOrder == null ) sheetsOrder = [];
 	}
 
 	override function destroy() {
@@ -185,7 +191,26 @@ class CdbTable extends hide.ui.View<{}> {
 	}
 
 	public function getSheets() {
-		return [for( s in ide.database.sheets ) if( !s.props.hide && (view == null || view.exists(s.name)) ) s];
+		var arr = [for( s in ide.database.sheets ) if( !s.props.hide && (view == null || view.exists(s.name)) ) s];
+		haxe.ds.ArraySort.sort(arr, (s1, s2) -> sheetsOrder.indexOf(s1.name) - sheetsOrder.indexOf(s2.name));
+		sheetsOrder = arr.map(s -> s.name);
+		saveSheetsOrder();
+		return arr;
+	}
+
+	public function saveSheetsOrder() {
+		saveDisplayState("sheetsOrder", sheetsOrder);
+	}
+
+	public function moveSheetDisplayOrder( s : cdb.Sheet, delta : Int ) {
+		var index = sheetsOrder.findIndex(o -> o == s.name);
+		var newIndex = index + delta;
+		if( index < 0 || newIndex < 0 || newIndex >= sheetsOrder.length )
+			return false;
+		var order = sheetsOrder[index];
+		sheetsOrder.remove(order);
+		sheetsOrder.insert(newIndex, order);
+		return true;
 	}
 
 	function getTabCache() {
@@ -239,7 +264,8 @@ class CdbTable extends hide.ui.View<{}> {
 		if( tabs != null ) {
 			tabs.onTabChange = setEditor;
 			tabs.onTabRightClick = function(index) {
-				editor.popupSheet(true, getSheets()[index], function() {
+				var sheet = getSheets()[index];
+				editor.popupSheet(true, sheet, function() {
 					var newSheets = getSheets();
 					var delta = newSheets.length - sheets.length;
 					var sshow = null;
@@ -248,7 +274,7 @@ class CdbTable extends hide.ui.View<{}> {
 					else if( delta < 0 )
 						sshow = newSheets[index-1];
 					else
-						sshow = newSheets[index]; // rename
+						sshow = sheet; // rename or move display order
 					if( sshow != null )
 						currentSheet = sshow.name;
 					if( getTabCache() != tabCache )