Explorar el Código

Sort LevelTreeView items by name

Daniele Bartolini hace 9 años
padre
commit
3262d8b54d
Se han modificado 1 ficheros con 23 adiciones y 5 borrados
  1. 23 5
      tools/level_editor/level_tree_view.vala

+ 23 - 5
tools/level_editor/level_tree_view.vala

@@ -26,6 +26,7 @@ namespace Crown
 		private Gtk.Entry _filter_entry;
 		private Gtk.TreeStore _tree_store;
 		private Gtk.TreeModelFilter _tree_filter;
+		private Gtk.TreeModelSort _tree_sort;
 		private Gtk.TreeView _tree_view;
 		private Gtk.TreeSelection _tree_selection;
 		private Gtk.ScrolledWindow _scrolled_window;
@@ -45,16 +46,33 @@ namespace Crown
 			_filter_entry.set_placeholder_text("Search...");
 			_filter_entry.changed.connect(on_filter_entry_text_changed);
 
-			_tree_store = new TreeStore(2, typeof(string), typeof(int));
-			_tree_filter = new TreeModelFilter(_tree_store, null);
+			_tree_store = new Gtk.TreeStore(2, typeof(string), typeof(int));
+
+			_tree_filter = new Gtk.TreeModelFilter(_tree_store, null);
 			_tree_filter.set_visible_func(filter_tree);
 
+			_tree_sort = new Gtk.TreeModelSort.with_model(_tree_filter);
+			_tree_sort.set_default_sort_func((model, iter_a, iter_b) => {
+					Value type_a;
+					Value type_b;
+					model.get_value(iter_a, 1, out type_a);
+					model.get_value(iter_b, 1, out type_b);
+					if ((int)type_a == ItemType.FOLDER || (int)type_b == ItemType.FOLDER)
+						return -1;
+
+					Value id_a;
+					Value id_b;
+					model.get_value(iter_a, 0, out id_a);
+					model.get_value(iter_b, 0, out id_b);
+					return strcmp((string)id_a, (string)id_b);
+				});
+
 			_tree_view = new Gtk.TreeView();
 			_tree_view.insert_column_with_attributes(-1, "Objects", new Gtk.CellRendererText(), "text", 0, null);
 			// _tree_view.insert_column_with_attributes(-1, "Types", new Gtk.CellRendererText(), "text", 1, null); // DEBUG
 			_tree_view.headers_clickable = false;
 			_tree_view.headers_visible = false;
-			_tree_view.model = _tree_filter;
+			_tree_view.model = _tree_sort;
 			_tree_view.button_press_event.connect(on_button_pressed);
 
 			_tree_selection = _tree_view.get_selection();
@@ -154,7 +172,7 @@ namespace Crown
 			_tree_selection.changed.disconnect(on_tree_selection_changed);
 			_tree_selection.unselect_all();
 
-			_tree_filter.foreach ((model, path, iter) => {
+			_tree_sort.foreach ((model, path, iter) => {
 				Value type;
 				model.get_value(iter, 1, out type);
 				if ((int)type == ItemType.FOLDER)
@@ -220,7 +238,7 @@ namespace Crown
 				}
 			}
 
-			_tree_view.model = _tree_filter;
+			_tree_view.model = _tree_sort;
 			_tree_view.expand_all();
 
 			_tree_selection.changed.connect(on_tree_selection_changed);