| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108 |
- /*
- * Copyright (c) 2012-2025 Daniele Bartolini et al.
- * SPDX-License-Identifier: GPL-3.0-or-later
- */
- namespace Crown
- {
- public class LevelLayersTreeView : Gtk.Box
- {
- public enum ItemFlags
- {
- VISIBLE = 1,
- LOCKED = 2
- }
- // Data
- public Level _level;
- public Database _db;
- // Widgets
- public EntrySearch _filter_entry;
- public Gtk.ListStore _list_store;
- public Gtk.TreeModelFilter _tree_filter;
- public Gtk.TreeView _tree_view;
- public Gtk.GestureMultiPress _tree_view_gesture_click;
- public Gtk.TreeSelection _tree_selection;
- public Gtk.ScrolledWindow _scrolled_window;
- public LevelLayersTreeView(Database db, Level level)
- {
- Object(orientation: Gtk.Orientation.VERTICAL, spacing: 0);
- // Data
- _level = level;
- _db = db;
- // Widgets
- _filter_entry = new EntrySearch();
- _filter_entry.set_placeholder_text("Search...");
- _filter_entry.search_changed.connect(on_filter_entry_text_changed);
- _list_store = new Gtk.ListStore(3, typeof(string), typeof(string), typeof(string));
- _list_store.insert_with_values(null, -1
- , 0, "layer-visible"
- , 1, "layer-locked"
- , 2, "Background"
- , -1
- );
- _list_store.insert_with_values(null, -1
- , 0, "layer-visible"
- , 1, "layer-locked"
- , 2, "Default"
- , -1
- );
- _tree_filter = new Gtk.TreeModelFilter(_list_store, null);
- _tree_filter.set_visible_func(filter_tree);
- _tree_view = new Gtk.TreeView();
- _tree_view.insert_column_with_attributes(-1, "Visible", new Gtk.CellRendererPixbuf(), "icon-name", 0, null);
- _tree_view.insert_column_with_attributes(-1, "Locked", new Gtk.CellRendererPixbuf(), "icon-name", 1, null);
- _tree_view.insert_column_with_attributes(-1, "Name", new Gtk.CellRendererText(), "text", 2, null);
- _tree_view.headers_clickable = false;
- _tree_view.headers_visible = false;
- _tree_view.model = _tree_filter;
- _tree_view_gesture_click = new Gtk.GestureMultiPress(_tree_view);
- _tree_view_gesture_click.set_button(0);
- _tree_view_gesture_click.pressed.connect(on_button_pressed);
- _tree_selection = _tree_view.get_selection();
- _tree_selection.set_mode(Gtk.SelectionMode.MULTIPLE);
- _scrolled_window = new Gtk.ScrolledWindow(null, null);
- _scrolled_window.add(_tree_view);
- this.pack_start(_filter_entry, false, true, 0);
- this.pack_start(_scrolled_window, true, true, 0);
- }
- public void on_button_pressed(int n_press, double x, double y)
- {
- return;
- }
- public bool filter_tree(Gtk.TreeModel model, Gtk.TreeIter iter)
- {
- Value val;
- model.get_value(iter, 2, out val);
- _tree_view.expand_all();
- string layer_name = ((string)val).down();
- string filter_text = _filter_entry.text.down();
- if (filter_text == "" || layer_name.index_of(filter_text) > -1)
- return true;
- return false;
- }
- public void on_filter_entry_text_changed()
- {
- _tree_filter.refilter();
- }
- }
- } /* namespace Crown */
|