def open(self): self.model = NamespaceModel(self.event_manager, self.element_factory) self.event_manager.subscribe(self._on_model_refreshed) self.event_manager.subscribe(self._on_diagram_selection_changed) sorted_model = self.model.sorted() def search_func(model, column, key, rowiter): # Note that this function returns `False` for a match! assert column == 0 row = model[rowiter] matched = False # Search in child rows. If any element in the underlying # tree matches, it will expand. for inner in row.iterchildren(): if not search_func(model, column, key, inner.iter): view.expand_to_path(row.path) matched = True element = list(row)[column] s = format(element) if s and key.lower() in s.lower(): matched = True elif not matched: view.collapse_row(row.path) return not matched # False means match found! view = NamespaceView(sorted_model, self.element_factory) view.set_search_equal_func(search_func) scrolled_window = Gtk.ScrolledWindow() scrolled_window.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC) scrolled_window.add(view) scrolled_window.show() view.show() scrolled_window.insert_action_group( "tree-view", create_action_group(self, "tree-view")[0]) view.connect("row-activated", self._on_view_row_activated) view.connect_after("cursor-changed", self._on_view_cursor_changed) view.connect("destroy", self._on_view_destroyed) ctrl = Gtk.GestureMultiPress.new(view) ctrl.set_button(Gdk.BUTTON_SECONDARY) ctrl.connect("pressed", self._on_show_popup) self.ctrl.add(ctrl) ctrl = Gtk.EventControllerKey.new(view) ctrl.connect("key-pressed", self._on_edit_pressed) self.ctrl.add(ctrl) self.view = view self.model.refresh() return scrolled_window
def construct(self): sorted_model = Gtk.TreeModelSort(model=self.model) def sort_func(model, iter_a, iter_b, userdata): a = (model.get_value(iter_a, 0).name or "").lower() b = (model.get_value(iter_b, 0).name or "").lower() if a == b: return 0 if a > b: return 1 return -1 def search_func(model, column, key, rowiter): # Note that this function returns `False` for a match! assert column == 0 row = model[rowiter] matched = False # Search in child rows. If any element in the underlaying # tree matches, it will expand. for inner in row.iterchildren(): if not search_func(model, column, key, inner.iter): view.expand_to_path(row.path) matched = True element = list(row)[column] if element.name and key.lower() in element.name.lower(): matched = True elif not matched: view.collapse_row(row.path) return not matched # False means match found! sorted_model.set_sort_func(0, sort_func, None) sorted_model.set_sort_column_id(0, Gtk.SortType.ASCENDING) view = NamespaceView(sorted_model, self.element_factory) view.set_search_equal_func(search_func) scrolled_window = Gtk.ScrolledWindow() scrolled_window.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC) scrolled_window.set_shadow_type(Gtk.ShadowType.IN) scrolled_window.set_placement(Gtk.CornerType.TOP_RIGHT) scrolled_window.add(view) scrolled_window.show() view.show() scrolled_window.insert_action_group( "tree-view", create_action_group(self, "tree-view")[0] ) view.connect_after("event-after", self._on_view_event) view.connect("row-activated", self._on_view_row_activated) view.connect_after("cursor-changed", self._on_view_cursor_changed) view.connect("destroy", self._on_view_destroyed) self._namespace = view self._on_model_ready() return scrolled_window
def construct(self): """ Create the widget. Returns: the newly created widget. """ assert self.diagram view = GtkView(canvas=self.diagram.canvas) try: view.set_css_name("diagramview") except AttributeError: pass # Gtk.Widget.set_css_name() is added in 3.20 view.drag_dest_set( Gtk.DestDefaults.ALL, DiagramPage.VIEW_DND_TARGETS, Gdk.DragAction.MOVE | Gdk.DragAction.COPY | Gdk.DragAction.LINK, ) scrolled_window = Gtk.ScrolledWindow() scrolled_window.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC) scrolled_window.set_shadow_type(Gtk.ShadowType.IN) scrolled_window.add(view) scrolled_window.show_all() self.widget = scrolled_window view.connect("focus-changed", self._on_view_selection_changed) view.connect("selection-changed", self._on_view_selection_changed) view.connect_after("key-press-event", self._on_key_press_event) view.connect("drag-data-received", self._on_drag_data_received) self.view = view self.widget.action_group = create_action_group(self, "diagram") shortcuts = self.get_toolbox_shortcuts() def shortcut_action(widget, event): action_name = shortcuts.get((event.keyval, event.state)) if action_name: widget.get_toplevel().get_action_group( "diagram").lookup_action("select-tool").change_state( GLib.Variant.new_string(action_name)) self.widget.connect("key-press-event", shortcut_action) self._on_sloppy_lines() self.select_tool("toolbox-pointer") self.set_drawing_style(self.properties.get("diagram.sloppiness", 0)) return self.widget
def create_action_group(self): action_group, accel_group = create_action_group(self, "pref") set_action_state( action_group, "hand-drawn-style", self.properties.get("diagram.sloppiness", 0.0) > 0.0, ) set_action_state( action_group, "reset-tool-after-create", self.properties.get("reset-tool-after-create", True), ) return action_group
def construct(self): """ Create the widget. Returns: the newly created widget. """ assert self.diagram view = GtkView(canvas=self.diagram.canvas) view.drag_dest_set( Gtk.DestDefaults.ALL, DiagramPage.VIEW_DND_TARGETS, Gdk.DragAction.MOVE | Gdk.DragAction.COPY | Gdk.DragAction.LINK, ) self.diagram_css = Gtk.CssProvider.new() view.get_style_context().add_provider(self.diagram_css, Gtk.STYLE_PROVIDER_PRIORITY_USER) scrolled_window = Gtk.ScrolledWindow() scrolled_window.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC) scrolled_window.set_shadow_type(Gtk.ShadowType.IN) scrolled_window.add(view) scrolled_window.show_all() self.widget = scrolled_window view.connect("focus-changed", self._on_view_selection_changed) view.connect("selection-changed", self._on_view_selection_changed) view.connect_after("key-press-event", self._on_key_press_event) view.connect("drag-data-received", self._on_drag_data_received) self.view = view self.widget.action_group = create_action_group(self, "diagram") self.widget.connect_after("key-press-event", self._on_shortcut_action) self.select_tool("toolbox-pointer") self.set_drawing_style() return self.widget
def create_action_group(self): action_group, accel_group = create_action_group(self, "pref") return action_group