From 1265546eda5b8ba30a5e430c50ad08f15b31c692 Mon Sep 17 00:00:00 2001 From: Daniel Francis Date: Tue, 01 Jan 2013 19:10:09 +0000 Subject: Use own stock Signed-off-by: Daniel Francis --- diff --git a/coloritem.py b/coloritem.py index 1db0e69..03d0955 100644 --- a/coloritem.py +++ b/coloritem.py @@ -1,5 +1,5 @@ """The color item gives the user the posibility to choice a colour.""" -# Copyright (C) 2012 S. Daniel Francis +# Copyright (C) 2012-2013 S. Daniel Francis # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -24,6 +24,7 @@ import gtk from colors import color2string from item import Item +import stock class ColorItem(Item): @@ -58,7 +59,7 @@ class ColorItem(Item): if self.tooltip: title = self.tooltip else: - title = gtk.stock_lookup(self.stock_id)[1] + title = stock.get_title(self.stock_id) dialog = gtk.ColorSelectionDialog(title) dialog.set_transient_for(self.parent) color_selection = dialog.get_color_selection() diff --git a/help.py b/help.py index 7d45790..b5ae931 100644 --- a/help.py +++ b/help.py @@ -1,5 +1,5 @@ """ 'Help' and 'About' information.""" -# Copyright (C) 2012 S. Daniel Francis +# Copyright (C) 2012-2013 S. Daniel Francis # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -41,7 +41,7 @@ class AboutItem(Item): dialog.set_authors(info.authors) dialog.set_license(info.license) dialog.set_wrap_license(True) - dialog.set_logo_icon_name('graph-plotter') + dialog.set_logo_icon_name(info.lower_name) dialog.run() dialog.destroy() @@ -54,9 +54,9 @@ class Help(ItemGroup): """Constructor. box -- sweetener.ItemBox where append it """ - title = gtk.stock_lookup(gtk.STOCK_HELP)[1] + title = stock.get_label(gtk.STOCK_HELP, False) ItemGroup.__init__(self, box, title, 'toolbar-help') - stock.register('sweetener-help-contents', _('Contents'), + stock.register('sweetener-help-contents', title, 'F1', 'gtk-help') contents = Item('sweetener-help-contents') contents.connect('activate', lambda w: gtk.show_uri(None, diff --git a/item.py b/item.py index b2727e4..9291e2d 100644 --- a/item.py +++ b/item.py @@ -1,7 +1,4 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- -# -# Copyright (C) 2012 S. Daniel Francis +# Copyright (C) 2012-2013 S. Daniel Francis # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -53,10 +50,20 @@ class Item(gobject.GObject): def get_menu_item(self): sensitive = self.sensitive - self.menuitem = gtk.ImageMenuItem(self._stock_id) - self.menuitem.set_sensitive(sensitive) - self.menuitem.connect('activate', self.activate_cb) - self.setup_accelerator() + if stock.stock_items[self.stock_id]['has_icon'] is not None: + self.menuitem = gtk.ImageMenuItem() + self.menuitem.set_label(stock.get_label(self.stock_id, False)) + self.menuitem.set_use_underline(True) + self.menuitem.set_sensitive(sensitive) + self.menuitem.connect('activate', self.activate_cb) + self.setup_accelerator() + self.setup_menu_icon() + else: + self.menuitem = gtk.MenuItem(stock.get_label(self.stock_id, False)) + self.menuitem.set_use_underline(True) + self.menuitem.set_sensitive(sensitive) + self.menuitem.connect('activate', self.activate_cb) + self.setup_accelerator() return self.menuitem def activate_cb(self, widget): @@ -71,18 +78,47 @@ class Item(gobject.GObject): gtk.ACCEL_VISIBLE) def get_tool_item(self): - self.toolitem = gtk.ToolButton(self._stock_id) + self.toolitem = gtk.ToolButton() + self.setup_tool_icon() self.toolitem.connect('clicked', self.activate_cb) self.toolitem.set_sensitive(self.sensitive) self.setup_tooltip() return self.toolitem + def setup_menu_icon(self): + mstyle = self.menuitem.get_style() + iconset = stock.stock_items[self.stock_id]['has_icon'] + if iconset is not None: + try: + pixbuf = iconset.render_icon(mstyle, gtk.TEXT_DIR_NONE, + gtk.STATE_NORMAL, + gtk.ICON_SIZE_MENU) + image = gtk.image_new_from_pixbuf(pixbuf) + self.menuitem.set_image(image) + except Exception, err: + logger.debug(self.stock_id) + logger.error(err) + + def setup_tool_icon(self): + mstyle = self.menuitem.get_style() + iconset = stock.stock_items[self.stock_id]['has_icon'] + if iconset is not None: + try: + pixbuf = iconset.render_icon(mstyle, gtk.TEXT_DIR_NONE, + gtk.STATE_NORMAL, + gtk.ICON_SIZE_LARGE_TOOLBAR) + image = gtk.image_new_from_pixbuf(pixbuf) + image.show() + self.toolitem.set_icon_widget(image) + except Exception, err: + logger.debug(self.stock_id) + logger.error(err) + def setup_tooltip(self): if self.tooltip: self.toolitem.set_tooltip_text(self.tooltip) else: - text = gtk.stock_lookup(self.stock_id)[1] - self.toolitem.set_tooltip_text(text.replace('_', '')) + self.toolitem.set_tooltip_text(stock.get_label(self.stock_id)) def emit_signal(self, widget, signal_name): print self.stock_id diff --git a/radioitem.py b/radioitem.py index 20f7b66..87b0e7e 100644 --- a/radioitem.py +++ b/radioitem.py @@ -1,7 +1,4 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- -# -# Copyright (C) 2012 S. Daniel Francis +# Copyright (C) 2012-2013 S. Daniel Francis # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -23,6 +20,8 @@ logger = logging.getLogger('toggleoption') import gtk from toggleitem import ToggleItem +import stock + class RadioItem(ToggleItem): def __init__(self, group, default_value=True, @@ -31,17 +30,19 @@ class RadioItem(ToggleItem): self.group = group def get_menu_item(self): - stock_info = gtk.stock_lookup(self.stock_id) - self.menuitem = gtk.RadioMenuItem(self.group.menuitem if self.group !=\ - None else None, stock_info[1]) + self.menuitem = gtk.RadioMenuItem(self.group.menuitem if self.group != + None else None, + stock.get_label(self.stock_id, + False)) self.menuitem.set_active(self.default_value) self.menuitem.connect('toggled', self.toggled_cb) self.setup_accelerator() return self.menuitem def get_tool_item(self): - self.toolitem = gtk.RadioToolButton(self.group.toolitem if self.group !=\ - None else None, self._stock_id) + self.toolitem = gtk.RadioToolButton(self.group.toolitem + if self.group != None else None) + self.setup_tool_icon() self.toolitem.set_active(self.default_value) self.toolitem.connect('toggled', self.toggled_cb) self.setup_tooltip() diff --git a/settingsitem.py b/settingsitem.py index a690597..f4016ac 100644 --- a/settingsitem.py +++ b/settingsitem.py @@ -1,7 +1,4 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- -# -# Copyright (C) 2012 S. Daniel Francis +# Copyright (C) 2012-2013 S. Daniel Francis # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -43,7 +40,7 @@ class SettingsItem(Item): if self.tooltip: title = self.tooltip else: - title = gtk.stock_lookup(self.stock_id)[1] + title = stock.get_title(self.stock_id) dialog = gtk.Dialog(title, self.parent) dialog.vbox.pack_start(self.content, True, True) self.content.show() diff --git a/shortcontentitem.py b/shortcontentitem.py index 7b4a5f4..1c757c7 100644 --- a/shortcontentitem.py +++ b/shortcontentitem.py @@ -1,7 +1,4 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- -# -# Copyright (C) 2012 S. Daniel Francis +# Copyright (C) 2012-2013 S. Daniel Francis # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -25,6 +22,7 @@ import gobject import gtk from item import Item +import stock class ShortContentItem(Item): @@ -45,7 +43,7 @@ class ShortContentItem(Item): if self.tooltip: title = self.tooltip else: - title = gtk.stock_lookup(self.stock_id)[1].replace('_', '') + title = stock.get_label(self.stock_id) window = gtk.Dialog(title, self.parent) window.set_modal(False) window.set_decorated(True) diff --git a/stock.py b/stock.py index 4f3b213..8e281c9 100644 --- a/stock.py +++ b/stock.py @@ -1,7 +1,4 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- -# -# Copyright (C) 2012 S. Daniel Francis +# Copyright (C) 2012-2013 S. Daniel Francis # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -24,14 +21,10 @@ import gtk icon_factory = gtk.IconFactory() +stock_items = {} + def register(name, label, accelerator, icon_name): - if accelerator == None: - keyval = 0 - mask = 0 - else: - keyval, mask = gtk.accelerator_parse(accelerator) - gtk.stock_add([(name, label, mask, keyval, '')]) if icon_name: icon_source = gtk.IconSource() icon_source.set_icon_name(icon_name) @@ -40,6 +33,12 @@ def register(name, label, accelerator, icon_name): icon_factory.add(name, icon) icon_factory.add_default() + iconset = gtk.icon_factory_lookup_default(name) + + stock_items[name] = {'label': label, + 'accelerator': accelerator, + 'has_icon': iconset or None} + def overwrite_stock(stock_id, new_accelerator): info = list(gtk.stock_lookup(stock_id)) @@ -64,12 +63,25 @@ overwrite_stock(gtk.STOCK_REMOVE, 'Delete') overwrite_stock(gtk.STOCK_SELECT_COLOR, 'L') -def get_label(stock, underline): - text = gtk.stock_lookup(stock)[1] +def get_label(stock, underline=True): + text = stock_items[stock]['label'] if underline: text = text.replace('_', '') return text def get_accelerator(stock): - return gtk.stock_lookup(stock)[2:-1] + accelerator = stock_items[stock]['accelerator'] + return gtk.accelerator_parse(accelerator) if accelerator is not None \ + else (0, 0) + + +for i in gtk.stock_list_ids(): + # I am very noisy + # logger.debug(i) + info = gtk.stock_lookup(i) + iconset = gtk.icon_factory_lookup_default(i) + if info is not None: + stock_items[i] = {'label': info[1], + 'accelerator': gtk.accelerator_name(info[3], info[2]), + 'has_icon': iconset or None} diff --git a/toggleitem.py b/toggleitem.py index d95aec9..80c6096 100644 --- a/toggleitem.py +++ b/toggleitem.py @@ -1,7 +1,4 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- -# -# Copyright (C) 2012 S. Daniel Francis +# Copyright (C) 2012-2013 S. Daniel Francis # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -22,7 +19,9 @@ import logging logger = logging.getLogger('toggleoption') import gobject import gtk + from item import Item +import stock class ToggleItem(Item): @@ -35,8 +34,8 @@ class ToggleItem(Item): self.active = default_value def get_menu_item(self): - stock_info = gtk.stock_lookup(self.stock_id) - self.menuitem = gtk.CheckMenuItem(stock_info[1]) + self.menuitem = gtk.CheckMenuItem(stock.get_label(self.stock_id, + False)) self.menuitem.set_active(self.default_value) self.menuitem.connect('toggled', self.toggled_cb) self.setup_accelerator() @@ -52,7 +51,8 @@ class ToggleItem(Item): self.emit('toggled', active) def get_tool_item(self): - self.toolitem = gtk.ToggleToolButton(self._stock_id) + self.toolitem = gtk.ToggleToolButton() + self.setup_tool_icon() self.toolitem.set_active(self.default_value) self.toolitem.connect('toggled', self.toggled_cb) self.setup_tooltip() -- cgit v0.9.1