diff options
author | Daniel Drake <dsd@laptop.org> | 2011-02-02 16:27:46 (GMT) |
---|---|---|
committer | Daniel Drake <dsd@laptop.org> | 2011-02-02 16:37:48 (GMT) |
commit | 3bc80c776f7ef2578a4b9fd26028574a12982ea3 (patch) | |
tree | 890aa0ee4a2b07d9c9704883d11f0385e03a2e70 /button.py | |
parent | ca2bbd6d74342247de97cffa150b577246c63107 (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.py | 140 |
1 files changed, 51 insertions, 89 deletions
@@ -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') |