PageRenderTime 35ms CodeModel.GetById 20ms app.highlight 12ms RepoModel.GetById 1ms app.codeStats 0ms

/GUI/Gtk/ScrollableViews.py

https://bitbucket.org/alsh/pygui-mirror
Python | 119 lines | 66 code | 26 blank | 27 comment | 4 complexity | 83f3ef7baa5d476df89e244ca6e56824 MD5 | raw file
  1#
  2#   Python GUI - Scrollable Views - Gtk
  3#
  4
  5import gtk
  6from GScrollableViews import ScrollableView as GScrollableView, \
  7    default_extent, default_line_scroll_amount
  8
  9gtk_scroll_policies = [gtk.POLICY_NEVER, gtk.POLICY_ALWAYS]
 10
 11gtk_dummybar = gtk.VScrollbar()
 12gtk_scrollbar_breadth = gtk_dummybar.size_request()[0]
 13del gtk_dummybar
 14
 15class ScrollableView(GScrollableView):
 16
 17    def __init__(self, extent = default_extent,
 18            line_scroll_amount = default_line_scroll_amount,
 19            **kwds):
 20        gtk_scrolled_window = gtk.ScrolledWindow()
 21        gtk_scrolled_window.show()
 22        GScrollableView.__init__(self, _gtk_outer = gtk_scrolled_window,
 23            extent = extent, line_scroll_amount = line_scroll_amount, **kwds)
 24    
 25    #
 26    #   Properties
 27    #
 28    
 29    def get_content_width(self):
 30        w = self._size[0]
 31        if self.hscrolling:
 32            w -= gtk_scrollbar_breadth
 33        return w
 34    
 35    def get_content_height(self):
 36        h = self._size[1]
 37        if self.vscrolling:
 38            h -= gtk_scrollbar_breadth
 39        return h
 40    
 41    def get_content_size(self):
 42        return self.content_width, self.content_height
 43    
 44    def set_content_size(self, size):
 45        w, h = size
 46        d = gtk_scrollbar_breadth
 47        if self.hscrolling:
 48            w += d
 49        if self.vscrolling:
 50            h += d
 51        self.size = (w, h)
 52
 53    def get_hscrolling(self):
 54        return self._gtk_inner_widget.hscrollbar_policy <> gtk.POLICY_NEVER
 55    
 56    def set_hscrolling(self, value):
 57        self._gtk_inner_widget.hscrollbar_policy = gtk_scroll_policies[value]
 58    
 59    def get_vscrolling(self):
 60        return self._gtk_inner_widget.vscrollbar_policy <> gtk.POLICY_NEVER
 61    
 62    def set_vscrolling(self, value):
 63        self._gtk_inner_widget.vscrollbar_policy = gtk_scroll_policies[value]
 64    
 65#	def get_extent(self):
 66#		l, t = self._extent_origin
 67#		w, h = self._gtk_inner_widget.get_size()
 68#		return (l, t, l + w, t + h)
 69    
 70    def get_extent(self):
 71        return self._gtk_inner_widget.get_size()
 72    
 73#	def set_extent(self, (l, t, r, b)):
 74#		w = r - l
 75#		h = b - t
 76#		self._extent_origin = (l, t)
 77#		self._gtk_inner_widget.set_size(w, h)
 78    
 79    def set_extent(self, (w, h)):
 80        self._gtk_inner_widget.set_size(w, h)
 81
 82    def get_scroll_offset(self):
 83        hadj, vadj = self._gtk_adjustments()
 84        return int(hadj.value), int(vadj.value)
 85
 86#	def set_scroll_offset(self, (x, y)):
 87#		x0, y0 = self._extent_origin
 88#		hadj, vadj = self._gtk_adjustments()
 89#		hadj.set_value(min(float(x - x0), hadj.upper - hadj.page_size))
 90#		vadj.set_value(min(float(y - y0), vadj.upper - vadj.page_size))
 91    
 92    def set_scroll_offset(self, (x, y)):
 93        hadj, vadj = self._gtk_adjustments()
 94        hadj.set_value(min(float(x), hadj.upper - hadj.page_size))
 95        vadj.set_value(min(float(y), vadj.upper - vadj.page_size))
 96
 97#	def get_line_scroll_amount(self):
 98#		x0, y0 = self._extent_origin
 99#		hadj, vadj = self._gtk_adjustments()
100#		return x0 + hadj.step_increment, y0 + vadj.step_increment
101    
102    def get_line_scroll_amount(self):
103        hadj, vadj = self._gtk_adjustments()
104        return hadj.step_increment, vadj.step_increment
105    
106    def set_line_scroll_amount(self, (dx, dy)):
107        hadj, vadj = self._gtk_adjustments()
108        hadj.step_increment = float(dx) # Amazingly, ints are not
109        vadj.step_increment = float(dy) # acceptable here.
110    
111    #
112    #		Internal
113    #
114
115    def _gtk_adjustments(self):
116        gtk_widget = self._gtk_inner_widget
117        hadj = gtk_widget.get_hadjustment()
118        vadj = gtk_widget.get_vadjustment()
119        return hadj, vadj