[meld/deprecation-cleanup] dirdiff: Migrate to template and resource loading
- From: Kai Willadsen <kaiw src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [meld/deprecation-cleanup] dirdiff: Migrate to template and resource loading
- Date: Sun, 9 Dec 2018 21:32:25 +0000 (UTC)
commit bc873ced4d2b858e54917a291c873b9187b615b7
Author: Kai Willadsen <kai willadsen gmail com>
Date: Sun Dec 9 08:49:54 2018 +1000
dirdiff: Migrate to template and resource loading
data/ui/dirdiff.ui | 536 --------------------------------------
meld/dirdiff.py | 102 +++++++-
meld/resources/meld.gresource.xml | 1 +
meld/resources/ui/dirdiff.ui | 529 +++++++++++++++++++++++++++++++++++++
4 files changed, 620 insertions(+), 548 deletions(-)
---
diff --git a/meld/dirdiff.py b/meld/dirdiff.py
index c3e58d66..8b2abc78 100644
--- a/meld/dirdiff.py
+++ b/meld/dirdiff.py
@@ -42,10 +42,12 @@ from meld.misc import all_same, apply_text_filters, with_focused_pane
from meld.recent import RecentType
from meld.settings import bind_settings, meldsettings, settings
from meld.treehelpers import refocus_deleted_path, tree_path_as_tuple
+from meld.ui._gtktemplate import Template
from meld.ui.cellrenderers import (
CellRendererByteSize, CellRendererDate, CellRendererFileMode)
from meld.ui.emblemcellrenderer import EmblemCellRenderer
-from meld.ui.gnomeglade import Component, ui_file
+from meld.ui.gnomeglade import ui_file
+from meld.ui.util import map_widgets_into_lists
class StatItem(namedtuple('StatItem', 'mode size time')):
@@ -285,11 +287,18 @@ class CanonicalListing:
return element.lower()
-class DirDiff(tree.TreeviewCommon, MeldDoc, Component):
- """Two or three way folder comparison"""
+@Template(resource_path='/org/gnome/meld/ui/dirdiff.ui')
+class DirDiff(Gtk.VBox, tree.TreeviewCommon, MeldDoc):
__gtype_name__ = "DirDiff"
+ close_signal = MeldDoc.close_signal
+ create_diff_signal = MeldDoc.create_diff_signal
+ file_changed_signal = MeldDoc.file_changed_signal
+ label_changed = MeldDoc.label_changed
+ next_diff_changed_signal = MeldDoc.next_diff_changed_signal
+ tab_state_changed = MeldDoc.tab_state_changed
+
__gsettings_bindings__ = (
('folder-ignore-symlinks', 'ignore-symlinks'),
('folder-shallow-comparison', 'shallow-comparison'),
@@ -339,6 +348,33 @@ class DirDiff(tree.TreeviewCommon, MeldDoc, Component):
default=100,
)
+ actiongroup = Template.Child('DirdiffActions')
+
+ treeview0 = Template.Child()
+ treeview1 = Template.Child()
+ treeview2 = Template.Child()
+ fileentry0 = Template.Child()
+ fileentry1 = Template.Child()
+ fileentry2 = Template.Child()
+ scrolledwindow0 = Template.Child()
+ scrolledwindow1 = Template.Child()
+ scrolledwindow2 = Template.Child()
+ diffmap0 = Template.Child()
+ diffmap1 = Template.Child()
+ linkmap0 = Template.Child()
+ linkmap1 = Template.Child()
+ msgarea_mgr0 = Template.Child()
+ msgarea_mgr1 = Template.Child()
+ msgarea_mgr2 = Template.Child()
+ vbox0 = Template.Child()
+ vbox1 = Template.Child()
+ vbox2 = Template.Child()
+ dummy_toolbar_linkmap0 = Template.Child()
+ dummy_toolbar_linkmap1 = Template.Child()
+ file_toolbar0 = Template.Child()
+ file_toolbar1 = Template.Child()
+ file_toolbar2 = Template.Child()
+
"""Dictionary mapping tree states to corresponding difflib-like terms"""
chunk_type_map = {
tree.STATE_NORMAL: None,
@@ -359,12 +395,20 @@ class DirDiff(tree.TreeviewCommon, MeldDoc, Component):
}
def __init__(self, num_panes):
+ super().__init__()
+ # FIXME:
+ # This unimaginable hack exists because GObject (or GTK+?)
+ # doesn't actually correctly chain init calls, even if they're
+ # not to GObjects. As a workaround, we *should* just be able to
+ # put our class first, but because of Gtk.Template we can't do
+ # that if it's a GObject, because GObject doesn't support
+ # multiple inheritance and we need to inherit from our Widget
+ # parent to make Template work.
MeldDoc.__init__(self)
- Component.__init__(self, "dirdiff.ui", "dirdiff", ["DirdiffActions"])
+ self.init_template()
bind_settings(self)
self.ui_file = ui_file("dirdiff-ui.xml")
- self.actiongroup = self.DirdiffActions
self.actiongroup.set_translation_domain("meld")
self.name_filters = []
@@ -378,18 +422,22 @@ class DirDiff(tree.TreeviewCommon, MeldDoc, Component):
self.on_text_filters_changed)
]
- self.map_widgets_into_lists(["treeview", "fileentry", "scrolledwindow",
- "diffmap", "linkmap", "msgarea_mgr",
- "vbox", "dummy_toolbar_linkmap",
- "file_toolbar"])
+ map_widgets_into_lists(
+ self,
+ [
+ "treeview", "fileentry", "scrolledwindow", "diffmap",
+ "linkmap", "msgarea_mgr", "vbox", "dummy_toolbar_linkmap",
+ "file_toolbar",
+ ]
+ )
- self.widget.ensure_style()
+ self.ensure_style()
self.custom_labels = []
self.set_num_panes(num_panes)
- self.widget.connect("style-updated", self.model.on_style_updated)
- self.model.on_style_updated(self.widget)
+ self.connect("style-updated", self.model.on_style_updated)
+ self.model.on_style_updated(self)
self.do_to_others_lock = False
self.focus_in_events = []
@@ -491,6 +539,10 @@ class DirDiff(tree.TreeviewCommon, MeldDoc, Component):
self._scan_in_progress = 0
+ # FIXME: Awful migration hack; this means that we don't have to
+ # address `.pyobject` access before all tab types are updated.
+ self.pyobject = self
+
def queue_draw(self):
for treeview in self.treeview:
treeview.queue_draw()
@@ -522,6 +574,7 @@ class DirDiff(tree.TreeviewCommon, MeldDoc, Component):
last_column = current_column
treeview.set_headers_visible(extra_cols)
+ @Template.Callback()
def on_custom_filter_menu_toggled(self, item):
if item.get_active():
self.custom_popup.connect(
@@ -668,6 +721,7 @@ class DirDiff(tree.TreeviewCommon, MeldDoc, Component):
it = self.model.iter_parent(it)
self._update_diffmaps()
+ @Template.Callback()
def on_fileentry_file_set(self, entry):
files = [e.get_file() for e in self.fileentry[:self.num_panes]]
paths = [f.get_path() for f in files]
@@ -1114,6 +1168,7 @@ class DirDiff(tree.TreeviewCommon, MeldDoc, Component):
act = self.main_actiongroup.get_action("OpenExternal")
act.set_sensitive(False)
+ @Template.Callback()
def on_treeview_cursor_changed(self, *args):
pane = self._get_focused_pane()
if pane is None or len(self.model) == 0:
@@ -1161,6 +1216,16 @@ class DirDiff(tree.TreeviewCommon, MeldDoc, Component):
self.next_diff_changed_signal.emit(*have_next_diffs)
self.current_path = cursor_path
+ @Template.Callback()
+ def on_treeview_popup_menu(self, treeview):
+ tree.TreeviewCommon.on_treeview_popup_menu(self, treeview)
+
+ @Template.Callback()
+ def on_treeview_button_press_event(self, treeview, event):
+ tree.TreeviewCommon.on_treeview_button_press_event(
+ self, treeview, event)
+
+ @Template.Callback()
def on_treeview_key_press_event(self, view, event):
pane = self.treeview.index(view)
tree = None
@@ -1182,6 +1247,7 @@ class DirDiff(tree.TreeviewCommon, MeldDoc, Component):
tree.emit("cursor-changed")
return event.keyval in (Gdk.KEY_Left, Gdk.KEY_Right) # handled
+ @Template.Callback()
def on_treeview_row_activated(self, view, path, column):
pane = self.treeview.index(view)
rows = self.model.value_paths(self.model.get_iter(path))
@@ -1205,6 +1271,7 @@ class DirDiff(tree.TreeviewCommon, MeldDoc, Component):
else:
view.expand_row(path, False)
+ @Template.Callback()
def on_treeview_row_expanded(self, view, it, path):
self.row_expansions.add(str(path))
for row in self.model[path].iterchildren():
@@ -1214,6 +1281,7 @@ class DirDiff(tree.TreeviewCommon, MeldDoc, Component):
self._do_to_others(view, self.treeview, "expand_row", (path, False))
self._update_diffmaps()
+ @Template.Callback()
def on_treeview_row_collapsed(self, view, me, path):
self.row_expansions.discard(str(path))
self._do_to_others(view, self.treeview, "collapse_row", (path,))
@@ -1233,6 +1301,7 @@ class DirDiff(tree.TreeviewCommon, MeldDoc, Component):
for p in row_paths if os.path.exists(p)]
self.create_diff_signal.emit(gfiles, {})
+ @Template.Callback()
def on_button_diff_clicked(self, button):
pane = self._get_focused_pane()
if pane is None:
@@ -1242,6 +1311,7 @@ class DirDiff(tree.TreeviewCommon, MeldDoc, Component):
for row in selected:
self.run_diff_from_iter(self.model.get_iter(row))
+ @Template.Callback()
def on_collapse_recursive_clicked(self, action):
pane = self._get_focused_pane()
if pane is None:
@@ -1262,6 +1332,7 @@ class DirDiff(tree.TreeviewCommon, MeldDoc, Component):
path = filter_model.convert_path_to_child_path(filter_path)
paths_to_collapse.append(path)
+ @Template.Callback()
def on_expand_recursive_clicked(self, action):
pane = self._get_focused_pane()
if pane is None:
@@ -1271,12 +1342,15 @@ class DirDiff(tree.TreeviewCommon, MeldDoc, Component):
for path in paths:
self.treeview[pane].expand_row(path, True)
+ @Template.Callback()
def on_button_copy_left_clicked(self, button):
self.copy_selected(-1)
+ @Template.Callback()
def on_button_copy_right_clicked(self, button):
self.copy_selected(1)
+ @Template.Callback()
def on_button_delete_clicked(self, button):
self.delete_selected()
@@ -1292,9 +1366,11 @@ class DirDiff(tree.TreeviewCommon, MeldDoc, Component):
if files:
self._open_files(files)
+ @Template.Callback()
def on_button_ignore_case_toggled(self, button):
self.refresh()
+ @Template.Callback()
def on_filter_state_toggled(self, button):
active_filters = [
state for state, (_, action_name) in self.state_actions.items()
@@ -1314,6 +1390,7 @@ class DirDiff(tree.TreeviewCommon, MeldDoc, Component):
self.name_filters[idx].active = button.get_active()
self.refresh()
+ @Template.Callback()
def on_filter_hide_current_clicked(self, button):
pane = self._get_focused_pane()
if pane is not None:
@@ -1593,6 +1670,7 @@ class DirDiff(tree.TreeviewCommon, MeldDoc, Component):
self._update_diffmaps()
self.force_cursor_recalculate = True
+ @Template.Callback()
def on_linkmap_scroll_event(self, linkmap, event):
self.next_diff(event.direction)
diff --git a/meld/resources/meld.gresource.xml b/meld/resources/meld.gresource.xml
index 3512d3bd..aae05637 100644
--- a/meld/resources/meld.gresource.xml
+++ b/meld/resources/meld.gresource.xml
@@ -11,6 +11,7 @@
<file>ui/appwindow.ui</file>
<file>ui/column-list.ui</file>
<file>ui/commit-dialog.ui</file>
+ <file>ui/dirdiff.ui</file>
<file>ui/encoding-selector.ui</file>
<file>ui/filter-list.ui</file>
<file>ui/language-selector.ui</file>
diff --git a/meld/resources/ui/dirdiff.ui b/meld/resources/ui/dirdiff.ui
new file mode 100644
index 00000000..9e82e75e
--- /dev/null
+++ b/meld/resources/ui/dirdiff.ui
@@ -0,0 +1,529 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<interface>
+ <!-- interface-requires gtk+ 3.0 -->
+ <!-- interface-requires meld.ui.gladesupport 0.0 -->
+ <object class="GtkActionGroup" id="DirdiffActions">
+ <child>
+ <object class="GtkAction" id="DirCompare">
+ <property name="label" translatable="yes">_Compare</property>
+ <property name="tooltip" translatable="yes">Compare selected files</property>
+ <property name="stock_id">gtk-dialog-info</property>
+ <property name="is_important">True</property>
+ <signal name="activate" handler="on_button_diff_clicked" swapped="no"/>
+ </object>
+ </child>
+ <child>
+ <object class="GtkAction" id="DirCollapseRecursively">
+ <property name="label" translatable="yes">Collapse Recursively</property>
+ <property name="tooltip" translatable="yes">Collapse selected folder and all subfolders</property>
+ <property name="stock_id">gtk-dialog-info</property>
+ <property name="is_important">True</property>
+ <signal name="activate" handler="on_collapse_recursive_clicked" swapped="no"/>
+ </object>
+ </child>
+ <child>
+ <object class="GtkAction" id="DirExpandRecursively">
+ <property name="label" translatable="yes">Expand Recursively</property>
+ <property name="tooltip" translatable="yes">Expand selected folder and all subfolders</property>
+ <property name="stock_id">gtk-dialog-info</property>
+ <property name="is_important">True</property>
+ <signal name="activate" handler="on_expand_recursive_clicked" swapped="no"/>
+ </object>
+ </child>
+ <child>
+ <object class="GtkAction" id="DirCopyLeft">
+ <property name="label" translatable="yes">Copy to _Left</property>
+ <property name="tooltip" translatable="yes">Copy to left</property>
+ <property name="stock_id">gtk-go-back</property>
+ <property name="is_important">True</property>
+ <signal name="activate" handler="on_button_copy_left_clicked" swapped="no"/>
+ </object>
+ <accelerator key="Left" modifiers="GDK_MOD1_MASK"/>
+ </child>
+ <child>
+ <object class="GtkAction" id="DirCopyRight">
+ <property name="label" translatable="yes">Copy to _Right</property>
+ <property name="tooltip" translatable="yes">Copy to right</property>
+ <property name="stock_id">gtk-go-forward</property>
+ <property name="is_important">True</property>
+ <signal name="activate" handler="on_button_copy_right_clicked" swapped="no"/>
+ </object>
+ <accelerator key="Right" modifiers="GDK_MOD1_MASK"/>
+ </child>
+ <child>
+ <object class="GtkAction" id="DirDelete">
+ <property name="tooltip" translatable="yes">Delete selected</property>
+ <property name="stock_id">gtk-delete</property>
+ <property name="is_important">True</property>
+ <signal name="activate" handler="on_button_delete_clicked" swapped="no"/>
+ </object>
+ <accelerator key="Delete"/>
+ </child>
+ <child>
+ <object class="GtkAction" id="Hide">
+ <property name="label" translatable="yes">Hide</property>
+ <property name="tooltip" translatable="yes">Hide selected</property>
+ <property name="stock_id">gtk-no</property>
+ <signal name="activate" handler="on_filter_hide_current_clicked" swapped="no"/>
+ </object>
+ </child>
+ <child>
+ <object class="GtkToggleAction" id="IgnoreCase">
+ <property name="label" translatable="yes">Ignore Filename Case</property>
+ <property name="tooltip" translatable="yes">Consider differently-cased filenames that are
otherwise-identical to be the same</property>
+ <property name="stock_id">gtk-italic</property>
+ <signal name="toggled" handler="on_button_ignore_case_toggled" swapped="no"/>
+ </object>
+ </child>
+ <child>
+ <object class="GtkToggleAction" id="ShowSame">
+ <property name="label" translatable="yes">Same</property>
+ <property name="tooltip" translatable="yes">Show identical</property>
+ <property name="stock_id">gtk-apply</property>
+ <property name="is_important">True</property>
+ <signal name="toggled" handler="on_filter_state_toggled" swapped="no"/>
+ </object>
+ </child>
+ <child>
+ <object class="GtkToggleAction" id="ShowNew">
+ <property name="label" translatable="yes">New</property>
+ <property name="tooltip" translatable="yes">Show new</property>
+ <property name="stock_id">gtk-add</property>
+ <property name="is_important">True</property>
+ <signal name="toggled" handler="on_filter_state_toggled" swapped="no"/>
+ </object>
+ </child>
+ <child>
+ <object class="GtkToggleAction" id="ShowModified">
+ <property name="label" translatable="yes">Modified</property>
+ <property name="tooltip" translatable="yes">Show modified</property>
+ <property name="stock_id">gtk-remove</property>
+ <property name="is_important">True</property>
+ <signal name="toggled" handler="on_filter_state_toggled" swapped="no"/>
+ </object>
+ </child>
+ <child>
+ <object class="GtkToggleAction" id="CustomFilterMenu">
+ <property name="label" translatable="yes">Filters</property>
+ <property name="tooltip" translatable="yes">Set active filters</property>
+ <property name="is_important">True</property>
+ <signal name="toggled" handler="on_custom_filter_menu_toggled" swapped="no"/>
+ </object>
+ </child>
+ </object>
+ <template class="DirDiff" parent="GtkVBox">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <child>
+ <object class="DiffGrid" id="grid">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <child>
+ <object class="GtkToolbar" id="file_toolbar0">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="show-arrow">False</property>
+ <property name="icon-size">1</property>
+ <style>
+ <class name="meld-notebook-toolbar"/>
+ </style>
+ <child>
+ <object class="GtkToolItem" id="fileentry_toolitem0">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="receives_default">False</property>
+ <child>
+ <object class="GtkFileChooserButton" id="fileentry0">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="hexpand">True</property>
+ <property name="action">select-folder</property>
+ <signal name="file-set" handler="on_fileentry_file_set" swapped="no"/>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">True</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="top_attach">0</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkToolbar" id="file_toolbar1">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="show-arrow">False</property>
+ <property name="icon-size">1</property>
+ <style>
+ <class name="meld-notebook-toolbar"/>
+ </style>
+ <child>
+ <object class="GtkToolItem" id="fileentry_toolitem1">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="receives_default">False</property>
+ <child>
+ <object class="GtkFileChooserButton" id="fileentry1">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="hexpand">True</property>
+ <property name="action">select-folder</property>
+ <signal name="file-set" handler="on_fileentry_file_set" swapped="no"/>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">True</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="left_attach">3</property>
+ <property name="top_attach">0</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkToolbar" id="file_toolbar2">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="show-arrow">False</property>
+ <property name="icon-size">1</property>
+ <style>
+ <class name="meld-notebook-toolbar"/>
+ </style>
+ <child>
+ <object class="GtkToolItem" id="fileentry_toolitem2">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="receives_default">False</property>
+ <child>
+ <object class="GtkFileChooserButton" id="fileentry2">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="hexpand">True</property>
+ <property name="action">select-folder</property>
+ <signal name="file-set" handler="on_fileentry_file_set" swapped="no"/>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">True</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="left_attach">5</property>
+ <property name="top_attach">0</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkToolbar" id="dummy_toolbar_diffmap1">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <style>
+ <class name="meld-notebook-toolbar"/>
+ </style>
+ </object>
+ <packing>
+ <property name="left_attach">6</property>
+ <property name="top_attach">0</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="DiffMap" id="diffmap1">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="vexpand">True</property>
+ </object>
+ <packing>
+ <property name="left_attach">6</property>
+ <property name="top_attach">1</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkToolbar" id="dummy_toolbar_linkmap1">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <style>
+ <class name="meld-notebook-toolbar"/>
+ </style>
+ </object>
+ <packing>
+ <property name="left_attach">4</property>
+ <property name="top_attach">0</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="ScrollLinkMap" id="linkmap1">
+ <property name="width_request">50</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="events">GDK_SCROLL_MASK</property>
+ <property name="vexpand">True</property>
+ <signal name="scroll-event" handler="on_linkmap_scroll_event" swapped="no"/>
+ </object>
+ <packing>
+ <property name="left_attach">4</property>
+ <property name="top_attach">1</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkToolbar" id="dummy_toolbar_diffmap0">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <style>
+ <class name="meld-notebook-toolbar"/>
+ </style>
+ </object>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="top_attach">0</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="DiffMap" id="diffmap0">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="vexpand">True</property>
+ </object>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="top_attach">1</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkToolbar" id="dummy_toolbar_linkmap0">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <style>
+ <class name="meld-notebook-toolbar"/>
+ </style>
+ </object>
+ <packing>
+ <property name="left_attach">2</property>
+ <property name="top_attach">0</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="ScrollLinkMap" id="linkmap0">
+ <property name="width_request">50</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="events">GDK_SCROLL_MASK</property>
+ <property name="vexpand">True</property>
+ <signal name="scroll-event" handler="on_linkmap_scroll_event" swapped="no"/>
+ </object>
+ <packing>
+ <property name="left_attach">2</property>
+ <property name="top_attach">1</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkVBox" id="vbox0">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="hexpand">True</property>
+ <child>
+ <object class="MsgAreaController" id="msgarea_mgr0">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <child>
+ <placeholder/>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkScrolledWindow" id="scrolledwindow0">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="vexpand">True</property>
+ <property name="overlay-scrolling">False</property>
+ <property name="window_placement">top-right</property>
+ <property name="window_placement_set">True</property>
+ <child>
+ <object class="GtkTreeView" id="treeview0">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="headers_visible">False</property>
+ <signal name="button-press-event" handler="on_treeview_button_press_event" swapped="no"/>
+ <signal name="cursor-changed" handler="on_treeview_cursor_changed" swapped="no"/>
+ <signal name="row-expanded" handler="on_treeview_row_expanded" swapped="no"/>
+ <signal name="key-press-event" handler="on_treeview_key_press_event" swapped="no"/>
+ <signal name="row-activated" handler="on_treeview_row_activated" swapped="no"/>
+ <signal name="row-collapsed" handler="on_treeview_row_collapsed" swapped="no"/>
+ <signal name="popup-menu" handler="on_treeview_popup_menu" swapped="no"/>
+ <child internal-child="selection">
+ <object class="GtkTreeSelection" id="treeview-selection1"/>
+ </child>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="top_attach">1</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkVBox" id="vbox1">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="hexpand">True</property>
+ <child>
+ <object class="MsgAreaController" id="msgarea_mgr1">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <child>
+ <placeholder/>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkScrolledWindow" id="scrolledwindow1">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="vexpand">True</property>
+ <property name="overlay-scrolling">False</property>
+ <child>
+ <object class="GtkTreeView" id="treeview1">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="headers_visible">False</property>
+ <signal name="button-press-event" handler="on_treeview_button_press_event" swapped="no"/>
+ <signal name="cursor-changed" handler="on_treeview_cursor_changed" swapped="no"/>
+ <signal name="row-expanded" handler="on_treeview_row_expanded" swapped="no"/>
+ <signal name="key-press-event" handler="on_treeview_key_press_event" swapped="no"/>
+ <signal name="row-activated" handler="on_treeview_row_activated" swapped="no"/>
+ <signal name="row-collapsed" handler="on_treeview_row_collapsed" swapped="no"/>
+ <signal name="popup-menu" handler="on_treeview_popup_menu" swapped="no"/>
+ <child internal-child="selection">
+ <object class="GtkTreeSelection" id="treeview-selection2"/>
+ </child>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="left_attach">3</property>
+ <property name="top_attach">1</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkVBox" id="vbox2">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="hexpand">True</property>
+ <child>
+ <object class="MsgAreaController" id="msgarea_mgr2">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <child>
+ <placeholder/>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkScrolledWindow" id="scrolledwindow2">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="vexpand">True</property>
+ <property name="overlay-scrolling">False</property>
+ <child>
+ <object class="GtkTreeView" id="treeview2">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="headers_visible">False</property>
+ <signal name="button-press-event" handler="on_treeview_button_press_event" swapped="no"/>
+ <signal name="cursor-changed" handler="on_treeview_cursor_changed" swapped="no"/>
+ <signal name="row-expanded" handler="on_treeview_row_expanded" swapped="no"/>
+ <signal name="key-press-event" handler="on_treeview_key_press_event" swapped="no"/>
+ <signal name="row-activated" handler="on_treeview_row_activated" swapped="no"/>
+ <signal name="row-collapsed" handler="on_treeview_row_collapsed" swapped="no"/>
+ <signal name="popup-menu" handler="on_treeview_popup_menu" swapped="no"/>
+ <child internal-child="selection">
+ <object class="GtkTreeSelection" id="treeview-selection3"/>
+ </child>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="left_attach">5</property>
+ <property name="top_attach">1</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ <property name="pack_type">end</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ </template>
+</interface>
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]