From 75973296fa523fcce147e86e79280639ca6c1e75 Mon Sep 17 00:00:00 2001 From: Aleksey Lim Date: Tue, 20 Jan 2009 13:55:56 +0000 Subject: ... --- diff --git a/Main.py b/Main.py index f081add..9f9fb8d 100644 --- a/Main.py +++ b/Main.py @@ -160,6 +160,27 @@ class CartoonBuilder: widget.child.set_size_request(size, size) + def imgdown(self, widget, data=None): + #pics = self.getpics(self.imgdir) + if len(pics[self.imgstartindex:]) > FRAME_COUNT: + self.imgstartindex += 2 + self.loadimages() + self.drawmain() + + def imgup(self, widget, data=None): + #pics = self.getpics(self.imgdir) + if self.imgstartindex > 0: + self.imgstartindex -= 2 + self.loadimages() + self.drawmain() + + + + + + + + @@ -214,20 +235,6 @@ class CartoonBuilder: return pics - def imgup(self, widget, data=None): - #pics = self.getpics(self.imgdir) - if self.imgstartindex > 0: - self.imgstartindex -= 2 - self.loadimages() - self.drawmain() - - def imgdown(self, widget, data=None): - #pics = self.getpics(self.imgdir) - if len(pics[self.imgstartindex:]) > FRAME_COUNT: - self.imgstartindex += 2 - self.loadimages() - self.drawmain() - def gettranspixbuf(self, width=50, height=50): transimgpath = os.path.join(self.iconsdir,TRANSIMG) pixbuf = gtk.gdk.pixbuf_new_from_file(transimgpath) @@ -253,6 +260,9 @@ class CartoonBuilder: #self.loadimages() + + + self.tvbox = gtk.VBox() self.tvbox.show() # flow arrows @@ -262,13 +272,20 @@ class CartoonBuilder: yellow_arrow.set_from_file(os.path.join(self.iconsdir, 'yellow_arrow.png')) yellow_arrow.show() flowbox.pack_end(yellow_arrow,True,False,0) + + + topspace = gtk.EventBox() topspace.modify_bg(gtk.STATE_NORMAL,gtk.gdk.color_parse(BACKGROUND)) topspace.show() topspace.set_border_width(15) self.tvbox.pack_start(topspace,False,False,0) + + self.tvbox.pack_start(flowbox,False,False,0) - self.table = gtk.Table(rows=FRAME_COUNT/2, columns=2, homogeneous=False) + + + self.imgbuttons = [] self.images = [] @@ -292,29 +309,9 @@ class CartoonBuilder: self.imgbuttons.append(ib) self.images.append(img) - self.imgupbutton = gtk.Button() - self.imgupbutton.connect('clicked', self.imgup, None) - self.imgupbutton.show() - #upa = gtk.Arrow(gtk.ARROW_UP,gtk.SHADOW_OUT) - #upa.show() - upa = gtk.Image() - upa.set_from_file(os.path.join(self.iconsdir,'big_up_arrow.png')) - #upapixbuf = gtk.gdk.pixbuf_new_from_file(os.path.join(self.iconsdir,'up_arrow.png')) - #scaled_upapixbuf = upapixbuf.scale_simple(42,34,gtk.gdk.INTERP_BILINEAR) - #upa.set_from_pixbuf(scaled_upapixbuf) - upa.show() - - self.imgupbutton.add(upa) - self.iubhbox = gtk.HBox() - self.iubhbox.show() - self.iubhbox.pack_start(self.imgupbutton,True,False,0) - self.tvbox.pack_start(self.iubhbox,False,False,5) - - #for i in range(FRAME_COUNT/2): - # self.table.attach(self.imgbuttons[i*2], 0, 1, i, i+1) - # self.table.attach(self.imgbuttons[i*2+1], 1, 2, i, i+1) - self.table.show() + + self.tableframeborder = gtk.EventBox() self.tableframeborder.modify_bg(gtk.STATE_NORMAL,gtk.gdk.color_parse(YELLOW)) @@ -324,26 +321,21 @@ class CartoonBuilder: self.tableframe.show() self.tableframe.set_border_width(5) self.tableframeborder.add(self.tableframe) - self.tableframe.add(self.table) self.tfhbox = gtk.HBox() self.tfhbox.show() self.tfhbox.pack_start(self.tableframeborder,True,False,20) self.tvbox.pack_start(self.tfhbox,False,False,0) - self.imgdownbutton = gtk.Button() - self.imgdownbutton.connect('clicked', self.imgdown, None) - self.imgdownbutton.show() - #downa = gtk.Arrow(gtk.ARROW_DOWN,gtk.SHADOW_OUT) - #downa.show() - downa = gtk.Image() - downa.set_from_file(os.path.join(self.iconsdir,'big_down_arrow.png')) - downa.show() - self.imgdownbutton.add(downa) - self.idbhbox = gtk.HBox() - self.idbhbox.show() - self.idbhbox.pack_start(self.imgdownbutton,True,False,0) - self.tvbox.pack_start(self.idbhbox,False,False,5) + + + + + + + + + @@ -354,6 +346,31 @@ class CartoonBuilder: self.fgpixbufpaths = [] self.tape = [] + + + + + self.table = gtk.Table(10, columns=2, homogeneous=False) + + + for i in range(100): + b = gtk.Button('foo') + b.show() + self.table.attach(b, 0, 1, i, i+1) + + self.table.show() + + + s = VScrolledBox() + s.show() + s.set_viewport(self.table) + + + + + + + # screen self.screen = FrameWidget() @@ -457,7 +474,7 @@ class CartoonBuilder: cetralbox = gtk.HBox() cetralbox.show() cetralbox.pack_start(screen_alignment, True, True) - cetralbox.pack_start(self.tvbox, False, False) + cetralbox.pack_start(s, False, False) hdesktop = gtk.HBox() hdesktop.show() diff --git a/Utils.py b/Utils.py index e8dcc64..958c2f5 100644 --- a/Utils.py +++ b/Utils.py @@ -17,6 +17,8 @@ import gtk from Theme import * import sugar.graphics from sugar.graphics import style +from sugar.graphics.toolbutton import ToolButton +from sugar.graphics.icon import Icon class FileInstanceVariable: def __init__(self, value = None): @@ -140,3 +142,161 @@ class TempoSlider(gtk.HBox): if self._delayed != 0: self.set_value(self._delayed, True) self._delayed = 0 + +class ScrollButton(gtk.ToolButton): + def __init__(self, icon_name): + gtk.ToolButton.__init__(self) + + icon = Icon(icon_name = icon_name, + icon_size=gtk.ICON_SIZE_SMALL_TOOLBAR) + # The alignment is a hack to work around gtk.ToolButton code + # that sets the icon_size when the icon_widget is a gtk.Image + alignment = gtk.Alignment(0.5, 0.5) + alignment.add(icon) + self.set_icon_widget(alignment) + +class ScrolledBox(gtk.EventBox): + def __init__(self, orientation, arrows_policy = gtk.POLICY_AUTOMATIC): + gtk.EventBox.__init__(self) + self.orientation = orientation + self._viewport = None + self._abox = None + self._aviewport = None + self._aviewport_sig = None + self._arrows_policy = arrows_policy + self._left = None + self._right = None + + if orientation == gtk.ORIENTATION_HORIZONTAL: + box = gtk.HBox() + else: + box = gtk.VBox() + if self._arrows_policy == gtk.POLICY_AUTOMATIC: + box.connect("size-allocate", self._box_allocate_cb) + self.add(box) + + if self._arrows_policy != gtk.POLICY_NEVER: + if orientation == gtk.ORIENTATION_HORIZONTAL: + self._left = ScrollButton('go-left') + else: + self._left = ScrollButton('go-up') + self._left.connect('clicked', self._scroll_cb, 'left') + box.pack_start(self._left, False, False, 0) + + self._scrolled = gtk.ScrolledWindow() + if orientation == gtk.ORIENTATION_HORIZONTAL: + self._scrolled.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_NEVER) + else: + self._scrolled.set_policy(gtk.POLICY_NEVER, gtk.POLICY_AUTOMATIC) + self._scrolled.connect('scroll-event', self._scroll_event_cb) + box.pack_start(self._scrolled, True, True, 0) + + if orientation == gtk.ORIENTATION_HORIZONTAL: + self._adj = self._scrolled.get_hadjustment() + else: + self._adj = self._scrolled.get_vadjustment() + self._adj.connect('changed', self._scroll_changed_cb) + self._adj.connect('value-changed', self._scroll_changed_cb) + + if self._arrows_policy != gtk.POLICY_NEVER: + if orientation == gtk.ORIENTATION_HORIZONTAL: + self._right = ScrollButton('go-right') + else: + self._right = ScrollButton('go-down') + self._right.connect('clicked', self._scroll_cb, 'right') + box.pack_start(self._right, False, False, 0) + + def modify_bg(self, state, bg): + gtk.EventBox.modify_bg(self, state, bg) + self._viewport.get_parent().modify_bg(state, bg) + + def set_viewport(self, widget): + if widget == self._viewport: return + if self._viewport and self._aviewport_sig: + self._viewport.disconnect(self._aviewport_sig) + self._viewport = widget + + if self._arrows_policy == gtk.POLICY_AUTOMATIC: + self._aviewport_sig = self._viewport.connect('size-allocate', + self._viewport_allocate_cb) + + self._scrolled.add_with_viewport(widget) + + def get_viewport_allocation(self): + alloc = self._scrolled.get_allocation() + alloc.x -= self._adj.get_value() + return alloc + + def get_adjustment(self): + return self._adj + + def _box_allocate_cb(self, w, a): + self._abox = a + self._update_arrows() + + def _viewport_allocate_cb(self, w, a): + self._aviewport = a + self._update_arrows() + + def _update_arrows(self): + if not self._abox or not self._aviewport: return + + if self.orientation == gtk.ORIENTATION_HORIZONTAL: + show_flag = self._abox.width < self._aviewport.width + else: + show_flag = self._abox.height < self._aviewport.height + + if show_flag: + self._left.show() + self._right.show() + else: + self._left.hide() + self._right.hide() + + def _scroll_event_cb(self, widget, event): + if self.orientation == gtk.ORIENTATION_HORIZONTAL: + if event.direction == gtk.gdk.SCROLL_UP: + event.direction = gtk.gdk.SCROLL_LEFT + if event.direction == gtk.gdk.SCROLL_DOWN: + event.direction = gtk.gdk.SCROLL_RIGHT + else: + if event.direction == gtk.gdk.SCROLL_LEFT: + event.direction = gtk.gdk.SCROLL_UP + if event.direction == gtk.gdk.SCROLL_RIGHT: + event.direction = gtk.gdk.SCROLL_DOWN + return False + + def _scroll_cb(self, widget, data): + if data == 'left': + val = max(self._adj.get_property('lower'), self._adj.get_value() + - self._adj.get_property('page_increment')) + else: + val = min(self._adj.get_property('upper') + - self._adj.get_property('page_size'), + self._adj.get_value() + + self._adj.get_property('page_increment')) + + self._adj.set_value(val) + + def _scroll_changed_cb(self, widget): + val = self._adj.get_value() + if self._left: + if val == 0: + self._left.set_sensitive(False) + else: + self._left.set_sensitive(True) + + if self._right: + if val >= self._adj.get_property('upper') - \ + self._adj.get_property('page_size'): + self._right.set_sensitive(False) + else: + self._right.set_sensitive(True) + +class HScrolledBox(ScrolledBox): + def __init__(self, *args): + ScrolledBox.__init__(self, gtk.ORIENTATION_HORIZONTAL, *args) + +class VScrolledBox(ScrolledBox): + def __init__(self, *args): + ScrolledBox.__init__(self, gtk.ORIENTATION_VERTICAL, *args) -- cgit v0.9.1