make GtkView accept adjustments for use in scrolled window.
This commit is contained in:
parent
40d102c003
commit
d8b8566df9
@ -186,7 +186,28 @@ class ViewTestCase(unittest.TestCase):
|
|||||||
assert not box._matrix_v2i.has_key(view)
|
assert not box._matrix_v2i.has_key(view)
|
||||||
|
|
||||||
|
|
||||||
|
def test_scroll_adjustments_signal(self):
|
||||||
|
def handler(self, hadj, vadj):
|
||||||
|
self.handled = True
|
||||||
|
|
||||||
|
sc = gtk.ScrolledWindow()
|
||||||
|
view = GtkView(Canvas())
|
||||||
|
view.connect('set-scroll-adjustments', handler)
|
||||||
|
sc.add(view)
|
||||||
|
|
||||||
|
assert view.handled
|
||||||
|
|
||||||
|
|
||||||
|
def test_scroll_adjustments(self):
|
||||||
|
sc = gtk.ScrolledWindow()
|
||||||
|
view = GtkView(Canvas())
|
||||||
|
sc.add(view)
|
||||||
|
|
||||||
|
print sc.get_hadjustment(), view.hadjustment
|
||||||
|
assert sc.get_hadjustment() is view.hadjustment
|
||||||
|
assert sc.get_vadjustment() is view.vadjustment
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
unittest.main()
|
unittest.main()
|
||||||
|
|
||||||
|
@ -375,6 +375,8 @@ class GtkView(gtk.DrawingArea, View):
|
|||||||
|
|
||||||
# Signals: emited after the change takes effect.
|
# Signals: emited after the change takes effect.
|
||||||
__gsignals__ = {
|
__gsignals__ = {
|
||||||
|
'set-scroll-adjustments': (gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE,
|
||||||
|
(gtk.Adjustment, gtk.Adjustment)),
|
||||||
'dropzone-changed': (gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE,
|
'dropzone-changed': (gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE,
|
||||||
(gobject.TYPE_PYOBJECT,)),
|
(gobject.TYPE_PYOBJECT,)),
|
||||||
'hover-changed': (gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE,
|
'hover-changed': (gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE,
|
||||||
@ -406,10 +408,12 @@ class GtkView(gtk.DrawingArea, View):
|
|||||||
| gtk.gdk.KEY_RELEASE_MASK
|
| gtk.gdk.KEY_RELEASE_MASK
|
||||||
| gtk.gdk.SCROLL_MASK)
|
| gtk.gdk.SCROLL_MASK)
|
||||||
|
|
||||||
self._hadjustment = hadjustment or gtk.Adjustment()
|
self._hadjustment = None
|
||||||
self._vadjustment = vadjustment or gtk.Adjustment()
|
self._vadjustment = None
|
||||||
self._hadjustment.connect('value-changed', self.on_adjustment_changed)
|
self._hadjustment_handler_id = None
|
||||||
self._vadjustment.connect('value-changed', self.on_adjustment_changed)
|
self._vadjustment_handler_id = None
|
||||||
|
|
||||||
|
self.emit('set-scroll-adjustments', hadjustment, vadjustment)
|
||||||
|
|
||||||
self._tool = DefaultTool()
|
self._tool = DefaultTool()
|
||||||
|
|
||||||
@ -467,6 +471,27 @@ class GtkView(gtk.DrawingArea, View):
|
|||||||
|
|
||||||
vadjustment = property(lambda s: s._vadjustment)
|
vadjustment = property(lambda s: s._vadjustment)
|
||||||
|
|
||||||
|
|
||||||
|
def do_set_scroll_adjustments(self, hadjustment, vadjustment):
|
||||||
|
print 'do_set_scroll_adjustments', hadjustment, vadjustment
|
||||||
|
if self._hadjustment_handler_id:
|
||||||
|
self._hadjustment.disconnect(self._hadjustment_handler_id)
|
||||||
|
self._hadjustment_handler_id = None
|
||||||
|
if self._vadjustment_handler_id:
|
||||||
|
self._vadjustment.disconnect(self._vadjustment_handler_id)
|
||||||
|
self._vadjustment_handler_id = None
|
||||||
|
|
||||||
|
self._hadjustment = hadjustment or gtk.Adjustment()
|
||||||
|
self._vadjustment = vadjustment or gtk.Adjustment()
|
||||||
|
|
||||||
|
self._hadjustment_handler_id = \
|
||||||
|
self._hadjustment.connect('value-changed',
|
||||||
|
self.on_adjustment_changed)
|
||||||
|
self._vadjustment_handler_id = \
|
||||||
|
self._vadjustment.connect('value-changed',
|
||||||
|
self.on_adjustment_changed)
|
||||||
|
self.update_adjustments()
|
||||||
|
|
||||||
|
|
||||||
def zoom(self, factor):
|
def zoom(self, factor):
|
||||||
"""
|
"""
|
||||||
@ -542,7 +567,7 @@ class GtkView(gtk.DrawingArea, View):
|
|||||||
try:
|
try:
|
||||||
super(GtkView, self).queue_draw_area(int(x), int(y), int(w+1), int(h+1))
|
super(GtkView, self).queue_draw_area(int(x), int(y), int(w+1), int(h+1))
|
||||||
except OverflowError:
|
except OverflowError:
|
||||||
# Okay, now the zoom factr is very large or something
|
# Okay, now the zoom factor is very large or something
|
||||||
a = self.allocation
|
a = self.allocation
|
||||||
super(GtkView, self).queue_draw_area(0, 0, a.width, a.height)
|
super(GtkView, self).queue_draw_area(0, 0, a.width, a.height)
|
||||||
|
|
||||||
@ -753,4 +778,13 @@ class GtkView(gtk.DrawingArea, View):
|
|||||||
self.queue_draw_refresh()
|
self.queue_draw_refresh()
|
||||||
|
|
||||||
|
|
||||||
|
# Set a signal to set adjustments. This way a ScrolledWindow can set its own
|
||||||
|
# Adjustment objects on the View. Otherwise a warning is shown:
|
||||||
|
#
|
||||||
|
# GtkWarning: gtk_scrolled_window_add(): cannot add non scrollable widget use
|
||||||
|
# gtk_scrolled_window_add_with_viewport() instead
|
||||||
|
|
||||||
|
GtkView.set_set_scroll_adjustments_signal("set-scroll-adjustments")
|
||||||
|
|
||||||
|
|
||||||
# vim: sw=4:et:ai
|
# vim: sw=4:et:ai
|
||||||
|
Loading…
x
Reference in New Issue
Block a user