Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/button.py
diff options
context:
space:
mode:
authorDaniel Drake <dsd@laptop.org>2011-02-02 16:27:46 (GMT)
committer Daniel Drake <dsd@laptop.org>2011-02-02 16:37:48 (GMT)
commit3bc80c776f7ef2578a4b9fd26028574a12982ea3 (patch)
tree890aa0ee4a2b07d9c9704883d11f0385e03a2e70 /button.py
parentca2bbd6d74342247de97cffa150b577246c63107 (diff)
UI rework
This is a rework of the UI that uses a more standard GTK+ principles than previously. There is still a small amount of black magic, kept away inside mediaview.py. The UI/model separation was also refined in places, and a lot of code was simplified. Overall the functionality remains identical, and I tried to keep the UI the same as before (but it is not pixel perfect). As this was quite big there may be some bugs to shake out.
Diffstat (limited to 'button.py')
-rw-r--r--button.py140
1 files changed, 51 insertions, 89 deletions
diff --git a/button.py b/button.py
index 14b9700..e3bcdc6 100644
--- a/button.py
+++ b/button.py
@@ -1,108 +1,70 @@
-import gtk
-import os
import gobject
-import rsvg
-import gc
+import gtk
+from gettext import gettext as _
from sugar.graphics.palette import Palette
from sugar.graphics.tray import TrayButton
-from sugar.graphics.icon import Icon
-from sugar.graphics import style
-from constants import Constants
+import constants
import utils
-class RecdButton(TrayButton, gobject.GObject):
- def __init__(self, ui, recd):
- TrayButton.__init__(self)
- self.ui = ui
- self.recd = recd
-
- img = self.getImg( )
- self.set_icon_widget( img )
-
- self.ACTIVATE_COPY_ID = 0
- self.ACTIVATE_REMOVE_ID = 0
- self.setup_rollover_options( recd.title )
-
-
- def getImg( self ):
- img = gtk.Image()
- ipb = self.recd.getThumbPixbuf()
- xoff = 8
- yoff = 8
- pb = None
- if (self.recd.type == Constants.TYPE_PHOTO):
- if (self.recd.buddy):
- thumbPhotoSvg = utils.loadSvg(Constants.thumbPhotoSvgData, self.recd.colorStroke.hex, self.recd.colorFill.hex)
- pb = thumbPhotoSvg.get_pixbuf()
- else:
- pb = Constants.thumbPhotoSvg.get_pixbuf()
-
- elif (self.recd.type == Constants.TYPE_VIDEO):
- if (self.recd.buddy):
- thumbVideoSvg = utils.loadSvg(Constants.thumbVideoSvgData, self.recd.colorStroke.hex, self.recd.colorFill.hex)
- pb = thumbVideoSvg.get_pixbuf()
- else:
- pb = Constants.thumbVideoSvg.get_pixbuf()
-
- elif (self.recd.type == Constants.TYPE_AUDIO):
- if (self.recd.buddy):
- thumbAudioSvg = utils.loadSvg(Constants.thumbAudioSvgData, self.recd.colorStroke.hex, self.recd.colorFill.hex)
- pb = thumbAudioSvg.get_pixbuf()
- else:
- pb = Constants.thumbAudioSvg.get_pixbuf()
-
- img.set_from_pixbuf(pb)
- img.show()
- ipb.composite(pb, xoff, yoff, ipb.get_width(), ipb.get_height(), xoff, yoff, 1, 1, gtk.gdk.INTERP_BILINEAR, 255)
- img.set_from_pixbuf(pb)
-
- gc.collect()
+class RecdButton(TrayButton):
+ __gsignals__ = {
+ 'remove-requested': (gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, ()),
+ 'copy-clipboard-requested': (gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, ()),
+ }
- return img
-
-
- def setButtClickedId( self, id ):
- self.BUTT_CLICKED_ID = id
+ def __init__(self, recd):
+ super(RecdButton, self).__init__()
+ self._recd = recd
+ self.set_icon_widget(self.get_image())
+ self._copy_menu_item_handler = None
- def getButtClickedId( self ):
- return self.BUTT_CLICKED_ID
-
-
- def setup_rollover_options( self, info ):
- palette = Palette(info)
+ palette = Palette(recd.title)
self.set_palette(palette)
- self.rem_menu_item = gtk.MenuItem( Constants.istrRemove )
- self.ACTIVATE_REMOVE_ID = self.rem_menu_item.connect('activate', self._itemRemoveCb)
- palette.menu.append(self.rem_menu_item)
- self.rem_menu_item.show()
-
- self.addCopyMenuItem()
+ self._rem_menu_item = gtk.MenuItem(_('Remove'))
+ self._rem_menu_item_handler = self._rem_menu_item.connect('activate', self._remove_clicked)
+ palette.menu.append(self._rem_menu_item)
+ self._rem_menu_item.show()
+ self._add_copy_menu_item()
- def addCopyMenuItem( self ):
- if (self.recd.buddy and not self.recd.downloadedFromBuddy):
+ def _add_copy_menu_item( self ):
+ if self._recd.buddy and not self._recd.downloadedFromBuddy:
return
- if (self.ACTIVATE_COPY_ID != 0):
- return
-
- self.copy_menu_item = gtk.MenuItem( Constants.istrCopyToClipboard )
- self.ACTIVATE_COPY_ID = self.copy_menu_item.connect('activate', self._itemCopyToClipboardCb)
- self.get_palette().menu.append(self.copy_menu_item)
- self.copy_menu_item.show()
-
- def cleanUp( self ):
- self.rem_menu_item.disconnect( self.ACTIVATE_REMOVE_ID )
- if (self.ACTIVATE_COPY_ID != 0):
- self.copy_menu_item.disconnect( self.ACTIVATE_COPY_ID )
+ self._copy_menu_item = gtk.MenuItem(_('Copy to clipboard'))
+ self._copy_menu_item_handler = self._copy_menu_item.connect('activate', self._copy_clipboard_clicked)
+ self.get_palette().menu.append(self._copy_menu_item)
+ self._copy_menu_item.show()
+
+ def get_recd(self):
+ return self._recd
+ def get_image(self):
+ img = gtk.Image()
+ ipb = self._recd.getThumbPixbuf()
+ if self._recd.type == constants.TYPE_PHOTO:
+ path = 'object-photo.svg'
+ elif self._recd.type == constants.TYPE_VIDEO:
+ path = 'object-video.svg'
+ elif self._recd.type == constants.TYPE_AUDIO:
+ path = 'object-audio.svg'
+
+ pixbuf = utils.load_colored_svg(path, self._recd.colorStroke, self._recd.colorFill)
+ ipb.composite(pixbuf, 8, 8, ipb.get_width(), ipb.get_height(), 8, 8, 1, 1, gtk.gdk.INTERP_BILINEAR, 255)
+ img.set_from_pixbuf(pixbuf)
+ img.show()
+ return img
- def _itemRemoveCb(self, widget):
- self.ui.deleteThumbSelection( self.recd )
+ def cleanup(self):
+ self._rem_menu_item.disconnect(self._rem_menu_item_handler)
+ if self._copy_menu_item_handler != None:
+ self._copy_menu_item.disconnect(self._copy_menu_item_handler)
+ def _remove_clicked(self, widget):
+ self.emit('remove-requested')
- def _itemCopyToClipboardCb(self, widget):
- self.ui.copyToClipboard( self.recd ) \ No newline at end of file
+ def _copy_clipboard_clicked(self, widget):
+ self.emit('copy-clipboard-requested')