gtg team mailing list archive
-
gtg team
-
Mailing list archive
-
Message #03971
[Merge] lp:~parthpanchl/gtg/fix-931904 into lp:gtg
Parth Panchal has proposed merging lp:~parthpanchl/gtg/fix-931904 into lp:gtg.
Commit message:
Fixes Bug #931904
Requested reviews:
Gtg developers (gtg)
Related bugs:
Bug #931904 in Getting Things GNOME!: "Scheduling many task"
https://bugs.launchpad.net/gtg/+bug/931904
For more details, see:
https://code.launchpad.net/~parthpanchl/gtg/fix-931904/+merge/209907
Fixes Bug #316922
- Replaces the tasks' context menu entry to directly open calendar widget
to set date for multiple tasks, reducing no. of clicks
- Detaches the calender ui from task editor ui so that opening calendar
widget doesn't need to load whole task editor ui
--
https://code.launchpad.net/~parthpanchl/gtg/fix-931904/+merge/209907
Your team Gtg developers is requested to review the proposed merge of lp:~parthpanchl/gtg/fix-931904 into lp:gtg.
=== modified file 'AUTHORS'
--- AUTHORS 2014-03-01 21:15:24 +0000
+++ AUTHORS 2014-03-07 12:28:35 +0000
@@ -132,4 +132,5 @@
* Sagar Ghuge <ghugesss@xxxxxxxxx>
* Sushant Raikar <sushantthecoder@xxxxxxxxx>
* Atit Anand <atit.anand.cs@xxxxxxxxx>
-* Sara Ribeiro <sara.rmgr@xxxxxxxxx>
+* Parth P. Panchal <parthpanchl@xxxxxxxxx>
+* Sara Ribeiro <sara.rmgr@xxxxxxxxx>
\ No newline at end of file
=== modified file 'CHANGELOG'
--- CHANGELOG 2014-03-01 21:15:24 +0000
+++ CHANGELOG 2014-03-07 12:28:35 +0000
@@ -18,6 +18,7 @@
* Fix for bug #1286491 : RTM sync backend fails to load, by Pawan Hegde
* Fix for bug #1286493 : GTG cannot connect to RTM, by Pawan Hegde
* Fix for bug #1288011 : More intuitive title label for tasks, by Sara Ribeiro
+ * Fix for bug #931904 : Scheduling many task, by Parth Panchal
2013-11-24 Getting Things GNOME! 0.3.1
* Fix for bug #1024473: Have 'Show Main Window' in notification area, by Antonio Roquentin
=== modified file 'GTG/gtk/browser/browser.py'
--- GTG/gtk/browser/browser.py 2014-02-17 12:55:55 +0000
+++ GTG/gtk/browser/browser.py 2014-03-07 12:28:35 +0000
@@ -39,6 +39,7 @@
from GTG.gtk.browser.modifytags_dialog import ModifyTagsDialog
from GTG.gtk.browser.tag_context_menu import TagContextMenu
from GTG.gtk.browser.treeview_factory import TreeviewFactory
+from GTG.gtk.editor.calendar import GTGCalendar
from GTG.tools.dates import Date
from GTG.tools.logger import Log
@@ -180,12 +181,14 @@
def _init_ui_widget(self):
""" Sets the main pane with the tree with active tasks and
- create ModifyTagsDialog """
+ create ModifyTagsDialog & Calendar"""
# The Active tasks treeview
self.main_pane.add(self.vtree_panes['active'])
tag_completion = TagCompletion(self.req.get_tag_tree())
self.modifytags_dialog = ModifyTagsDialog(tag_completion, self.req)
+ self.calendar = GTGCalendar()
+ self.calendar.connect("date-changed", self.on_date_changed)
def init_tags_sidebar(self):
"""
@@ -268,34 +271,10 @@
self.on_mark_as_done,
"on_mark_as_started":
self.on_mark_as_started,
- "on_start_for_tomorrow":
- self.on_start_for_tomorrow,
- "on_start_for_next_week":
- self.on_start_for_next_week,
- "on_start_for_next_month":
- self.on_start_for_next_month,
- "on_start_for_next_year":
- self.on_start_for_next_year,
- "on_start_clear":
- self.on_start_clear,
- "on_set_due_today":
- self.on_set_due_today,
- "on_set_due_tomorrow":
- self.on_set_due_tomorrow,
- "on_set_due_next_week":
- self.on_set_due_next_week,
- "on_set_due_next_month":
- self.on_set_due_next_month,
- "on_set_due_next_year":
- self.on_set_due_next_year,
- "on_set_due_now":
- self.on_set_due_now,
- "on_set_due_soon":
- self.on_set_due_soon,
- "on_set_due_someday":
- self.on_set_due_someday,
- "on_set_due_clear":
- self.on_set_due_clear,
+ "on_start_for_specific_date":
+ self.on_start_for_specific_date,
+ "on_set_due_for_specific_date":
+ self.on_set_due_for_specific_date,
"on_dismiss_task":
self.on_dismiss_task,
"on_move":
@@ -1053,20 +1032,47 @@
def on_mark_as_started(self, widget):
self.update_start_date(widget, "today")
- def on_start_for_tomorrow(self, widget):
- self.update_start_date(widget, "tomorrow")
-
- def on_start_for_next_week(self, widget):
- self.update_start_date(widget, "next week")
-
- def on_start_for_next_month(self, widget):
- self.update_start_date(widget, "next month")
-
- def on_start_for_next_year(self, widget):
- self.update_start_date(widget, "next year")
-
- def on_start_clear(self, widget):
- self.update_start_date(widget, None)
+ def on_start_for_specific_date(self, widget):
+ """ Run Calendar dialog for selected tasks """
+ # Disable widget as drag source
+ widget.drag_source_unset()
+ # Get task from task name
+ task = self.req.get_task(self.get_selected_tasks()[0])
+ date = task.get_start_date()
+ self.calendar.set_date(date, GTGCalendar.DATE_KIND_START)
+ # Shows the calendar just above the mouse on widget's line of symmetry
+ rect = widget.get_allocation()
+ result, x, y = widget.get_window().get_origin()
+ self.calendar.show_at_position(x + rect.x + rect.width,
+ y + rect.y)
+
+ def on_set_due_for_specific_date(self, widget):
+ """ Run Calendar dialog for selected tasks """
+ # Disable widget as drag source
+ widget.drag_source_unset()
+ # Get task from task name
+ task = self.req.get_task(self.get_selected_tasks()[0])
+ if not task.get_due_date():
+ date = task.get_start_date()
+ else:
+ date = task.get_due_date()
+ self.calendar.set_date(date, GTGCalendar.DATE_KIND_DUE)
+ # Shows the calendar just above the mouse on widget's line of symmetry
+ rect = widget.get_allocation()
+ result, x, y = widget.get_window().get_origin()
+ self.calendar.show_at_position(x + rect.x + rect.width,
+ y + rect.y)
+
+ def on_date_changed(self, calendar):
+ # Get tasks' list from task names' list
+ tasks = [self.req.get_task(task) for task in self.get_selected_tasks()]
+ date, date_kind = calendar.get_selected_date()
+ if date_kind == GTGCalendar.DATE_KIND_DUE:
+ for task in tasks:
+ task.set_due_date(date)
+ elif date_kind == GTGCalendar.DATE_KIND_START:
+ for task in tasks:
+ task.set_start_date(date)
def update_due_date(self, widget, new_due_date):
tasks = [self.req.get_task(uid)
@@ -1079,33 +1085,6 @@
for task in tasks:
task.set_due_date(due_date)
- def on_set_due_today(self, widget):
- self.update_due_date(widget, "today")
-
- def on_set_due_tomorrow(self, widget):
- self.update_due_date(widget, "tomorrow")
-
- def on_set_due_next_week(self, widget):
- self.update_due_date(widget, "next week")
-
- def on_set_due_next_month(self, widget):
- self.update_due_date(widget, "next month")
-
- def on_set_due_next_year(self, widget):
- self.update_due_date(widget, "next year")
-
- def on_set_due_now(self, widget):
- self.update_due_date(widget, "now")
-
- def on_set_due_soon(self, widget):
- self.update_due_date(widget, "soon")
-
- def on_set_due_someday(self, widget):
- self.update_due_date(widget, "someday")
-
- def on_set_due_clear(self, widget):
- self.update_due_date(widget, None)
-
def on_modify_tags(self, widget):
""" Run Modify Tags dialog on selected tasks """
tasks = self.get_selected_tasks()
=== modified file 'GTG/gtk/browser/taskbrowser.ui'
--- GTG/gtk/browser/taskbrowser.ui 2013-11-25 02:37:46 +0000
+++ GTG/gtk/browser/taskbrowser.ui 2014-03-07 12:28:35 +0000
@@ -998,201 +998,23 @@
</object>
</child>
<child>
- <object class="GtkImageMenuItem" id="tcm_start_menu">
- <property name="label" translatable="yes">_Set Start Date</property>
+ <object class="GtkImageMenuItem" id="tcm_start_for_specific_date">
+ <property name="label" translatable="yes">Set Start Date...</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="use_underline">True</property>
<property name="use_stock">False</property>
- <child type="submenu">
- <object class="GtkMenu" id="start_for_context_menu">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <child>
- <object class="GtkImageMenuItem" id="tcm_mark_as_started">
- <property name="label" translatable="yes">T_oday</property>
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="use_underline">True</property>
- <property name="use_stock">False</property>
- <signal name="activate" handler="on_mark_as_started" swapped="no"/>
- </object>
- </child>
- <child>
- <object class="GtkImageMenuItem" id="tcm_start_for_tomorrow">
- <property name="label" translatable="yes">_Tomorrow</property>
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="use_underline">True</property>
- <property name="use_stock">False</property>
- <signal name="activate" handler="on_start_for_tomorrow" swapped="no"/>
- </object>
- </child>
- <child>
- <object class="GtkImageMenuItem" id="tcm_start_for_next_week">
- <property name="label" translatable="yes">Next _Week</property>
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="use_underline">True</property>
- <property name="use_stock">False</property>
- <signal name="activate" handler="on_start_for_next_week" swapped="no"/>
- </object>
- </child>
- <child>
- <object class="GtkImageMenuItem" id="tcm_start_for_next_month">
- <property name="label" translatable="yes">Next _Month</property>
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="use_underline">True</property>
- <property name="use_stock">False</property>
- <signal name="activate" handler="on_start_for_next_month" swapped="no"/>
- </object>
- </child>
- <child>
- <object class="GtkImageMenuItem" id="tcm_start_for_next_year">
- <property name="label" translatable="yes">Next _Year</property>
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="use_underline">True</property>
- <property name="use_stock">False</property>
- <signal name="activate" handler="on_start_for_next_year" swapped="no"/>
- </object>
- </child>
- <child>
- <object class="GtkSeparatorMenuItem" id="menuitem1">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- </object>
- </child>
- <child>
- <object class="GtkImageMenuItem" id="tcm_start_clear">
- <property name="label" translatable="yes">_Clear Start Date</property>
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="use_underline">True</property>
- <property name="use_stock">False</property>
- <signal name="activate" handler="on_start_clear" swapped="no"/>
- </object>
- </child>
- </object>
- </child>
+ <signal name="activate" handler="on_start_for_specific_date" swapped="no"/>
</object>
</child>
<child>
- <object class="GtkImageMenuItem" id="tcm_due_menu">
- <property name="label" translatable="yes">Set Due Date</property>
+ <object class="GtkImageMenuItem" id="tcm_due_specific_date">
+ <property name="label" translatable="yes">Set Due Date...</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="use_underline">True</property>
<property name="use_stock">False</property>
- <child type="submenu">
- <object class="GtkMenu" id="due_context_menu">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <child>
- <object class="GtkImageMenuItem" id="tcm_due_today">
- <property name="label" translatable="yes">T_oday</property>
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="use_underline">True</property>
- <property name="use_stock">False</property>
- <signal name="activate" handler="on_set_due_today" swapped="no"/>
- </object>
- </child>
- <child>
- <object class="GtkImageMenuItem" id="tcm_due_tomorrow">
- <property name="label" translatable="yes">_Tomorrow</property>
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="use_underline">True</property>
- <property name="use_stock">False</property>
- <signal name="activate" handler="on_set_due_tomorrow" swapped="no"/>
- </object>
- </child>
- <child>
- <object class="GtkImageMenuItem" id="tcm_due_next_week">
- <property name="label" translatable="yes">Next _Week</property>
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="use_underline">True</property>
- <property name="use_stock">False</property>
- <signal name="activate" handler="on_set_due_next_week" swapped="no"/>
- </object>
- </child>
- <child>
- <object class="GtkImageMenuItem" id="tcm_due_next_month">
- <property name="label" translatable="yes">Next _Month</property>
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="use_underline">True</property>
- <property name="use_stock">False</property>
- <signal name="activate" handler="on_set_due_next_month" swapped="no"/>
- </object>
- </child>
- <child>
- <object class="GtkImageMenuItem" id="tcm_due_next_year">
- <property name="label" translatable="yes">Next _Year</property>
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="use_underline">True</property>
- <property name="use_stock">False</property>
- <signal name="activate" handler="on_set_due_next_year" swapped="no"/>
- </object>
- </child>
- <child>
- <object class="GtkSeparatorMenuItem" id="menuitem2">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- </object>
- </child>
- <child>
- <object class="GtkImageMenuItem" id="tcm_due_now">
- <property name="label" translatable="yes">_Now</property>
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="use_underline">True</property>
- <property name="use_stock">False</property>
- <signal name="activate" handler="on_set_due_now" swapped="no"/>
- </object>
- </child>
- <child>
- <object class="GtkImageMenuItem" id="tcm_due_soon">
- <property name="label" translatable="yes">_Soon</property>
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="use_underline">True</property>
- <property name="use_stock">False</property>
- <signal name="activate" handler="on_set_due_soon" swapped="no"/>
- </object>
- </child>
- <child>
- <object class="GtkImageMenuItem" id="tcm_due_someday">
- <property name="label" translatable="yes">_Someday</property>
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="use_underline">True</property>
- <property name="use_stock">False</property>
- <signal name="activate" handler="on_set_due_someday" swapped="no"/>
- </object>
- </child>
- <child>
- <object class="GtkSeparatorMenuItem" id="menuitem3">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- </object>
- </child>
- <child>
- <object class="GtkImageMenuItem" id="tcm_due_clear">
- <property name="label" translatable="yes">_Clear Due Date</property>
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="use_underline">True</property>
- <property name="use_stock">False</property>
- <signal name="activate" handler="on_set_due_clear" swapped="no"/>
- </object>
- </child>
- </object>
- </child>
+ <signal name="activate" handler="on_set_due_for_specific_date" swapped="no"/>
</object>
</child>
<child>
=== modified file 'GTG/gtk/editor/__init__.py'
--- GTG/gtk/editor/__init__.py 2013-11-25 02:37:46 +0000
+++ GTG/gtk/editor/__init__.py 2014-03-07 12:28:35 +0000
@@ -27,6 +27,7 @@
class GnomeConfig:
current_rep = os.path.dirname(os.path.abspath(__file__))
EDITOR_UI_FILE = os.path.join(current_rep, "taskeditor.ui")
+ CALENDAR_UI_FILE = os.path.join(current_rep, "calendar.ui")
MARK_DONE = _("Mark as Done")
MARK_UNDONE = _("Mark as not Done")
=== modified file 'GTG/gtk/editor/calendar.py'
--- GTG/gtk/editor/calendar.py 2014-02-21 10:03:07 +0000
+++ GTG/gtk/editor/calendar.py 2014-03-07 12:28:35 +0000
@@ -19,8 +19,9 @@
import datetime
-from gi.repository import GObject, Gdk
+from gi.repository import GObject, Gdk, Gtk
+from GTG.gtk.editor import GnomeConfig
from GTG.tools.dates import Date
@@ -39,9 +40,10 @@
__gsignals__ = {'date-changed': __signal_type__, }
- def __init__(self, Gtk_builder):
+ def __init__(self):
super(GTGCalendar, self).__init__()
- self.__builder = Gtk_builder
+ self.__builder = Gtk.Builder()
+ self.__builder.add_from_file(GnomeConfig.CALENDAR_UI_FILE)
self.__date_kind = None
self.__date = Date.no_date()
self.__init_gtk__()
=== added file 'GTG/gtk/editor/calendar.ui'
--- GTG/gtk/editor/calendar.ui 1970-01-01 00:00:00 +0000
+++ GTG/gtk/editor/calendar.ui 2014-03-07 12:28:35 +0000
@@ -0,0 +1,99 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<interface>
+ <!-- interface-requires gtk+ 3.0 -->
+ <object class="GtkWindow" id="calendar">
+ <property name="can_focus">False</property>
+ <property name="events">GDK_STRUCTURE_MASK | GDK_PROXIMITY_OUT_MASK</property>
+ <property name="type">popup</property>
+ <property name="resizable">False</property>
+ <property name="modal">True</property>
+ <property name="destroy_with_parent">True</property>
+ <property name="type_hint">dropdown-menu</property>
+ <property name="skip_taskbar_hint">True</property>
+ <property name="skip_pager_hint">True</property>
+ <property name="transient_for">TaskEditor</property>
+ <child>
+ <object class="GtkBox" id="vbox5">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="orientation">vertical</property>
+ <child>
+ <object class="GtkCalendar" id="calendar1">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkBox" id="fuzzydate_btns">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="homogeneous">True</property>
+ <child>
+ <object class="GtkButton" id="button_now">
+ <property name="label" translatable="yes">Now</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkButton" id="button_soon">
+ <property name="label" translatable="yes">Soon</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkButton" id="button_someday">
+ <property name="label" translatable="yes">Someday</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkButton" id="button_clear">
+ <property name="label">gtk-clear</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="use_stock">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ </object>
+</interface>
\ No newline at end of file
=== modified file 'GTG/gtk/editor/editor.py'
--- GTG/gtk/editor/editor.py 2013-11-25 02:37:46 +0000
+++ GTG/gtk/editor/editor.py 2014-03-07 12:28:35 +0000
@@ -116,7 +116,7 @@
if conf_font_value != "":
self.textview.override_font(Pango.FontDescription(conf_font_value))
# Voila! it's done
- self.calendar = GTGCalendar(self.builder)
+ self.calendar = GTGCalendar()
self.duedate_widget = self.builder.get_object("duedate_entry")
self.startdate_widget = self.builder.get_object("startdate_entry")
self.closeddate_widget = self.builder.get_object("closeddate_entry")
=== modified file 'GTG/gtk/editor/taskeditor.ui'
--- GTG/gtk/editor/taskeditor.ui 2014-02-18 21:25:17 +0000
+++ GTG/gtk/editor/taskeditor.ui 2014-03-07 12:28:35 +0000
@@ -373,99 +373,4 @@
</object>
</child>
</object>
- <object class="GtkWindow" id="calendar">
- <property name="can_focus">False</property>
- <property name="events">GDK_STRUCTURE_MASK | GDK_PROXIMITY_OUT_MASK</property>
- <property name="type">popup</property>
- <property name="resizable">False</property>
- <property name="modal">True</property>
- <property name="destroy_with_parent">True</property>
- <property name="type_hint">dropdown-menu</property>
- <property name="skip_taskbar_hint">True</property>
- <property name="skip_pager_hint">True</property>
- <property name="transient_for">TaskEditor</property>
- <child>
- <object class="GtkBox" id="vbox5">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="orientation">vertical</property>
- <child>
- <object class="GtkCalendar" id="calendar1">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkBox" id="fuzzydate_btns">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="homogeneous">True</property>
- <child>
- <object class="GtkButton" id="button_now">
- <property name="label" translatable="yes">Now</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">True</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkButton" id="button_soon">
- <property name="label" translatable="yes">Soon</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">True</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">1</property>
- </packing>
- </child>
- <child>
- <object class="GtkButton" id="button_someday">
- <property name="label" translatable="yes">Someday</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">True</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">2</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">1</property>
- </packing>
- </child>
- <child>
- <object class="GtkButton" id="button_clear">
- <property name="label">gtk-clear</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">True</property>
- <property name="use_stock">True</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">2</property>
- </packing>
- </child>
- </object>
- </child>
- </object>
</interface>