GTK3: Working Grampletpane in the GrampletView. For right click, eventbox added

Some Gramplets fixed at same time


svn: r20102
This commit is contained in:
Benny Malengier 2012-07-27 13:39:29 +00:00
parent 1f47ab637f
commit 1682fb6945
4 changed files with 52 additions and 22 deletions

View File

@ -1,16 +1,18 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<interface> <interface>
<!-- interface-requires gtk+ 2.12 --> <!-- interface-requires gtk+ 3.0 -->
<!-- interface-naming-policy project-wide -->
<object class="GtkWindow" id="grampletview"> <object class="GtkWindow" id="grampletview">
<property name="can_focus">False</property>
<property name="events">GDK_BUTTON_PRESS_MASK | GDK_STRUCTURE_MASK</property>
<property name="title" translatable="yes">window2</property> <property name="title" translatable="yes">window2</property>
<child> <child>
<object class="GtkVBox" id="gvgramplet"> <object class="GtkVBox" id="gvgramplet">
<property name="visible">True</property> <property name="visible">True</property>
<property name="events">GDK_BUTTON_PRESS_MASK | GDK_STRUCTURE_MASK</property> <property name="can_focus">False</property>
<child> <child>
<object class="GtkFrame" id="gvframe"> <object class="GtkFrame" id="gvframe">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">False</property>
<property name="events">GDK_BUTTON_PRESS_MASK | GDK_STRUCTURE_MASK</property> <property name="events">GDK_BUTTON_PRESS_MASK | GDK_STRUCTURE_MASK</property>
<property name="border_width">10</property> <property name="border_width">10</property>
<property name="label_xalign">0</property> <property name="label_xalign">0</property>
@ -18,6 +20,7 @@
<child> <child>
<object class="GtkVBox" id="vbox143"> <object class="GtkVBox" id="vbox143">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">False</property>
<child> <child>
<placeholder/> <placeholder/>
</child> </child>
@ -25,8 +28,6 @@
<object class="GtkScrolledWindow" id="gvscrolledwindow"> <object class="GtkScrolledWindow" id="gvscrolledwindow">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">True</property> <property name="can_focus">True</property>
<property name="hscrollbar_policy">automatic</property>
<property name="vscrollbar_policy">automatic</property>
<child> <child>
<object class="GtkTextView" id="gvtextview"> <object class="GtkTextView" id="gvtextview">
<property name="visible">True</property> <property name="visible">True</property>
@ -37,6 +38,8 @@
</child> </child>
</object> </object>
<packing> <packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">1</property> <property name="position">1</property>
</packing> </packing>
</child> </child>
@ -45,15 +48,17 @@
<child type="label"> <child type="label">
<object class="GtkHBox" id="hbox144"> <object class="GtkHBox" id="hbox144">
<property name="visible">True</property> <property name="visible">True</property>
<property name="events">GDK_BUTTON_PRESS_MASK | GDK_STRUCTURE_MASK</property> <property name="can_focus">False</property>
<child> <child>
<object class="GtkButton" id="gvproperties"> <object class="GtkButton" id="gvproperties">
<property name="use_action_appearance">False</property>
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">True</property> <property name="can_focus">True</property>
<property name="receives_default">True</property> <property name="receives_default">True</property>
<property name="has_tooltip">True</property> <property name="has_tooltip">True</property>
<property name="tooltip_markup">Drag to move; click to detach</property> <property name="tooltip_markup">Drag to move; click to detach</property>
<property name="tooltip_text" translatable="yes">Drag to move; click to detach</property> <property name="tooltip_text" translatable="yes">Drag to move; click to detach</property>
<property name="use_action_appearance">False</property>
<child internal-child="accessible"> <child internal-child="accessible">
<object class="AtkObject" id="gvproperties-atkobject"> <object class="AtkObject" id="gvproperties-atkobject">
<property name="AtkObject::accessible-name" translatable="yes">Detach</property> <property name="AtkObject::accessible-name" translatable="yes">Detach</property>
@ -62,6 +67,7 @@
<child> <child>
<object class="GtkImage" id="gvpropertiesimage"> <object class="GtkImage" id="gvpropertiesimage">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">False</property>
<property name="stock">gtk-properties</property> <property name="stock">gtk-properties</property>
<child internal-child="accessible"> <child internal-child="accessible">
<object class="AtkObject" id="gvpropertiesimage-atkobject"> <object class="AtkObject" id="gvpropertiesimage-atkobject">
@ -79,12 +85,14 @@
</child> </child>
<child> <child>
<object class="GtkButton" id="gvstate"> <object class="GtkButton" id="gvstate">
<property name="use_action_appearance">False</property>
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">True</property> <property name="can_focus">True</property>
<property name="receives_default">True</property> <property name="receives_default">True</property>
<property name="has_tooltip">True</property> <property name="has_tooltip">True</property>
<property name="tooltip_markup">Click to expand/collapse</property> <property name="tooltip_markup">Click to expand/collapse</property>
<property name="tooltip_text" translatable="yes">Click to expand/collapse</property> <property name="tooltip_text" translatable="yes">Click to expand/collapse</property>
<property name="use_action_appearance">False</property>
<child internal-child="accessible"> <child internal-child="accessible">
<object class="AtkObject" id="gvstate-atkobject"> <object class="AtkObject" id="gvstate-atkobject">
<property name="AtkObject::accessible-name" translatable="yes">Remove</property> <property name="AtkObject::accessible-name" translatable="yes">Remove</property>
@ -93,6 +101,7 @@
<child> <child>
<object class="GtkImage" id="gvstateimage"> <object class="GtkImage" id="gvstateimage">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">False</property>
<property name="stock">gtk-remove</property> <property name="stock">gtk-remove</property>
<child internal-child="accessible"> <child internal-child="accessible">
<object class="AtkObject" id="gvstateimage-atkobject"> <object class="AtkObject" id="gvstateimage-atkobject">
@ -110,12 +119,14 @@
</child> </child>
<child> <child>
<object class="GtkButton" id="gvclose"> <object class="GtkButton" id="gvclose">
<property name="use_action_appearance">False</property>
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">True</property> <property name="can_focus">True</property>
<property name="receives_default">True</property> <property name="receives_default">True</property>
<property name="has_tooltip">True</property> <property name="has_tooltip">True</property>
<property name="tooltip_markup">Click to delete gramplet from view</property> <property name="tooltip_markup">Click to delete gramplet from view</property>
<property name="tooltip_text" translatable="yes">Click to delete gramplet from view</property> <property name="tooltip_text" translatable="yes">Click to delete gramplet from view</property>
<property name="use_action_appearance">False</property>
<child internal-child="accessible"> <child internal-child="accessible">
<object class="AtkObject" id="gvclose-atkobject"> <object class="AtkObject" id="gvclose-atkobject">
<property name="AtkObject::accessible-name" translatable="yes">Delete</property> <property name="AtkObject::accessible-name" translatable="yes">Delete</property>
@ -124,6 +135,7 @@
<child> <child>
<object class="GtkImage" id="gvcloseimage"> <object class="GtkImage" id="gvcloseimage">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">False</property>
<property name="stock">gtk-close</property> <property name="stock">gtk-close</property>
<child internal-child="accessible"> <child internal-child="accessible">
<object class="AtkObject" id="gvcloseimage-atkobject"> <object class="AtkObject" id="gvcloseimage-atkobject">
@ -142,12 +154,16 @@
<child> <child>
<object class="GtkButton" id="gvtitle"> <object class="GtkButton" id="gvtitle">
<property name="label" translatable="yes">Gramplet</property> <property name="label" translatable="yes">Gramplet</property>
<property name="use_action_appearance">False</property>
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">True</property> <property name="can_focus">True</property>
<property name="receives_default">True</property> <property name="receives_default">True</property>
<property name="use_action_appearance">False</property>
<property name="relief">none</property> <property name="relief">none</property>
</object> </object>
<packing> <packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">3</property> <property name="position">3</property>
</packing> </packing>
</child> </child>
@ -155,6 +171,8 @@
</child> </child>
</object> </object>
<packing> <packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">0</property> <property name="position">0</property>
</packing> </packing>
</child> </child>

View File

@ -292,7 +292,7 @@ class GuiNumberOption(Gtk.SpinButton):
import math import math
decimals = int(math.log10(step) * -1) decimals = int(math.log10(step) * -1)
GObject.GObject.__init__(self, adj, digits=decimals) GObject.GObject.__init__(self, adjustment=adj, climb_rate=1, digits=decimals)
Gtk.SpinButton.set_numeric(self, True) Gtk.SpinButton.set_numeric(self, True)
self.set_value(self.__option.get_value()) self.set_value(self.__option.get_value())

View File

@ -966,7 +966,12 @@ class GrampletPane(Gtk.ScrolledWindow):
msg = _("Right click to add gramplets") msg = _("Right click to add gramplets")
self.set_tooltip_text(msg) self.set_tooltip_text(msg)
self.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC) self.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC)
self.eventb = Gtk.EventBox()
self.hbox = Gtk.HBox(homogeneous=True) self.hbox = Gtk.HBox(homogeneous=True)
self.eventb.add(self.hbox)
self.add_with_viewport(self.eventb)
self.set_kinetic_scrolling(True)
self.set_capture_button_press(True)
# Set up drag and drop # Set up drag and drop
self.drag_dest_set(Gtk.DestDefaults.MOTION | self.drag_dest_set(Gtk.DestDefaults.MOTION |
Gtk.DestDefaults.HIGHLIGHT | Gtk.DestDefaults.HIGHLIGHT |
@ -978,9 +983,8 @@ class GrampletPane(Gtk.ScrolledWindow):
tglist.add(tg[0], tg[1], tg[2]) tglist.add(tg[0], tg[1], tg[2])
self.drag_dest_set_target_list(tglist) self.drag_dest_set_target_list(tglist)
self.connect('drag_drop', self.drop_widget) self.connect('drag_drop', self.drop_widget)
self.connect('button-press-event', self._button_press) self.eventb.connect('button-press-event', self._button_press)
self.add_with_viewport(self.hbox)
# Create the columns: # Create the columns:
self.columns = [] self.columns = []
for i in range(self.column_count): for i in range(self.column_count):
@ -1236,11 +1240,17 @@ class GrampletPane(Gtk.ScrolledWindow):
""" """
This is the destination method for handling drag and drop This is the destination method for handling drag and drop
of a gramplet onto the main scrolled window. of a gramplet onto the main scrolled window.
Also used for adding new gramplets, then context should be GridGramplet
""" """
button = Gtk.drag_get_source_widget(context) button = None
hbox = button.get_parent() if isinstance(context, Gdk.DragContext):
mframe = hbox.get_parent() button = Gtk.drag_get_source_widget(context)
mainframe = mframe.get_parent() # actually a vbox else:
button = context.get_source_widget()
if button:
hbox = button.get_parent()
mframe = hbox.get_parent()
mainframe = mframe.get_parent() # actually a vbox
rect = source.get_allocation() rect = source.get_allocation()
sx, sy = rect.width, rect.height sx, sy = rect.width, rect.height
# first, find column: # first, find column:
@ -1249,9 +1259,10 @@ class GrampletPane(Gtk.ScrolledWindow):
if x < (sx/len(self.columns) * (i + 1)): if x < (sx/len(self.columns) * (i + 1)):
col = i col = i
break break
fromcol = mainframe.get_parent() if button:
if fromcol: fromcol = mainframe.get_parent()
fromcol.remove(mainframe) if fromcol:
fromcol.remove(mainframe)
# now find where to insert in column: # now find where to insert in column:
stack = [] stack = []
current_row = 0 current_row = 0
@ -1369,7 +1380,7 @@ class GrampletPane(Gtk.ScrolledWindow):
else: else:
pos = 0 pos = 0
self.columns[pos].pack_start(gramplet.mainframe, self.columns[pos].pack_start(gramplet.mainframe,
expand=gramplet.expand) gramplet.expand, True, 0)
# set height on gramplet.scrolledwindow here: # set height on gramplet.scrolledwindow here:
gramplet.scrolledwindow.set_size_request(-1, gramplet.height) gramplet.scrolledwindow.set_size_request(-1, gramplet.height)
## now drop it in right place ## now drop it in right place
@ -1413,9 +1424,10 @@ class GrampletPane(Gtk.ScrolledWindow):
add_menuitem(qr_menu, name, None, add_menuitem(qr_menu, name, None,
self.restore_gramplet) self.restore_gramplet)
rg_menu.set_submenu(qr_menu) rg_menu.set_submenu(qr_menu)
menu = uiman.get_widget('/GrampletPopup') self.menu = uiman.get_widget('/GrampletPopup')
if menu: if self.menu:
menu.popup(None, None, None, None, 1, event.time) #GTK3 does not show the popup, workaround: menu as attribute
self.menu.popup(None, None, None, None, event.button, event.time)
return True return True
return False return False

View File

@ -76,8 +76,8 @@ class AgeOnDateGramplet(Gramplet):
button.connect("clicked", self.run) button.connect("clicked", self.run)
##self.filter = ##self.filter =
hbox.pack_start(label, False, True, 0) hbox.pack_start(label, False, True, 0)
hbox.pack_start(self.entry, True) hbox.pack_start(self.entry, True, True, 0)
vbox.pack_start(description, True) vbox.pack_start(description, True, True, 0)
vbox.pack_start(hbox, False, True, 0) vbox.pack_start(hbox, False, True, 0)
vbox.pack_start(button, False, True, 0) vbox.pack_start(button, False, True, 0)
self.gui.get_container_widget().remove(self.gui.textview) self.gui.get_container_widget().remove(self.gui.textview)