diff options
Diffstat (limited to 'examples/pygtk-demo/demos/stock_browser.py')
-rw-r--r-- | examples/pygtk-demo/demos/stock_browser.py | 270 |
1 files changed, 0 insertions, 270 deletions
diff --git a/examples/pygtk-demo/demos/stock_browser.py b/examples/pygtk-demo/demos/stock_browser.py deleted file mode 100644 index 1689230f..00000000 --- a/examples/pygtk-demo/demos/stock_browser.py +++ /dev/null @@ -1,270 +0,0 @@ -#!/usr/bin/env python -'''Stock Item and Icon Browser - -This source code for this demo doesn't demonstrate anything particularly -useful in applications. The purpose of the "demo" is just to provide a -handy place to browse the available stock icons and stock items. -''' -# pygtk version: Maik Hertha <maik.hertha@berlin.de> - -import gobject -import gtk -import re - -def id_to_macro(stock_id): - if stock_id == '': - return '' - if stock_id.startswith('gtk'): - # gtk-foo-bar -> gtk.STOCK_FOO_BAR - macro = 'gtk.STOCK' + \ - re.sub('-([^-]+)', lambda m:('_' + m.group(1).upper()), stock_id[3:]) - - else: - # demo-gtk-logo -> DEMO_GTK_LOGO as with custom icon-factories - macro = re.sub('([^-]+)-?', lambda m:('_' + m.group(1).upper()), stock_id) - macro = macro[1:] # there is a leading '_' always - - return macro - - -class StockItemInfo(object): - def __init__(self, stock_id=''): - self.stock_id = stock_id - self.stock_item = None - self.small_icon = None - self.macro = id_to_macro(stock_id) - self.accel_str = '' - -class StockItemDisplay(object): - def __init__(self): - self.type_label = None - self.macro_label = None - self.id_label = None - self.label_accel_label = None - self.icon_image = None - - -def get_largest_size(stockid): - ''' Finds the largest size at which the given image stock id is - available. This would not be useful for a normal application. - ''' - set = gtk.icon_factory_lookup_default(stockid) - best_size = gtk.ICON_SIZE_INVALID - best_pixels = 0 - - sizes = set.get_sizes() - n_sizes = len(sizes) - - i = 0 - while(i < n_sizes): - width, height = gtk.icon_size_lookup(sizes[i]) - - if(width * height > best_pixels): - best_size = sizes[i] - best_pixels = width * height - - i += 1 - - return best_size - - -def macro_set_func_text(tree_column, cell, model, iter): - info = model.get_value(iter, 0) - cell.set_property("text", info.macro) - -def id_set_func(tree_column, cell, model, iter): - info = model.get_value(iter, 0) - cell.set_property("text", info.stock_id) - -def accel_set_func(tree_column, cell, model, iter): - info = model.get_value(iter, 0) - cell.set_property("text", info.accel_str) - -def label_set_func(tree_column, cell, model, iter): - info = model.get_value(iter, 0) - cell.set_property("text", info.stock_item[1]) - - -class StockItemAndIconBrowserDemo(gtk.Window): - def __init__(self, parent=None): - gtk.Window.__init__(self) - try: - self.set_screen(parent.get_screen()) - except AttributeError: - self.connect('destroy', lambda *w: gtk.main_quit()) - - self.set_title(self.__class__.__name__) - self.set_default_size(-1, 500) - self.set_border_width(8) - - hbox = gtk.HBox(False, 8) - self.add(hbox) - - sw = gtk.ScrolledWindow() - sw.set_shadow_type(gtk.SHADOW_ETCHED_IN) - sw.set_policy(gtk.POLICY_NEVER, gtk.POLICY_AUTOMATIC) - hbox.pack_start(sw, False, False, 0) - - model = self.__create_model() - treeview = gtk.TreeView(model) - sw.add(treeview) - - column = gtk.TreeViewColumn() - column.set_title("Macro") - - cell_renderer = gtk.CellRendererPixbuf() - column.pack_start(cell_renderer, False) - column.set_attributes(cell_renderer, stock_id=1) - - cell_renderer = gtk.CellRendererText() - column.pack_start(cell_renderer, True) - column.set_cell_data_func(cell_renderer, macro_set_func_text) - - treeview.append_column(column) - - cell_renderer = gtk.CellRendererText() - treeview.insert_column_with_data_func(-1, "Label", cell_renderer, label_set_func) - - cell_renderer = gtk.CellRendererText() - treeview.insert_column_with_data_func(-1, "Accel", cell_renderer, accel_set_func) - - cell_renderer = gtk.CellRendererText() - treeview.insert_column_with_data_func(-1, "ID", cell_renderer, id_set_func) - - align = gtk.Alignment(0.5, 0.0, 0.0, 0.0) - hbox.pack_end(align, False, False, 0) - - frame = gtk.Frame("Selected Item") - align.add(frame) - - vbox = gtk.VBox(False, 8) - vbox.set_border_width(4) - frame.add(vbox) - - display = StockItemDisplay() - treeview.set_data("stock-display", display) - - display.type_label = gtk.Label() - display.macro_label = gtk.Label() - display.id_label = gtk.Label() - display.label_accel_label = gtk.Label() - display.icon_image = gtk.Image(); # empty image - - vbox.pack_start(display.type_label, False, False, 0) - vbox.pack_start(display.icon_image, False, False, 0) - vbox.pack_start(display.label_accel_label, False, False, 0) - vbox.pack_start(display.macro_label, False, False, 0) - vbox.pack_start(display.id_label, False, False, 0) - - selection = treeview.get_selection() - selection.set_mode(gtk.SELECTION_SINGLE) - - selection.connect("changed", self.on_selection_changed) - - self.show_all() - - def __create_model(self): - store = gtk.ListStore( - gobject.TYPE_PYOBJECT, - gobject.TYPE_STRING) - - ids = gtk.stock_list_ids() - ids.sort() - - for data in ids: - info = StockItemInfo(stock_id=data) - stock_item = gtk.stock_lookup(data) - - if stock_item: - info.stock_item = stock_item - else: - # stock_id, label, modifier, keyval, translation_domain - info.stock_item =('', '', 0, 0, '') - - # only show icons for stock IDs that have default icons - icon_set = gtk.icon_factory_lookup_default(info.stock_id) - if icon_set is None: - info.small_icon = None - else: - # See what sizes this stock icon really exists at - sizes = icon_set.get_sizes() - n_sizes = len(sizes) - - # Use menu size if it exists, otherwise first size found - size = sizes[0]; - i = 0; - while(i < n_sizes): - if(sizes[i] == gtk.ICON_SIZE_MENU): - size = gtk.ICON_SIZE_MENU - break - i += 1 - - info.small_icon = self.render_icon(info.stock_id, size) - - if(size != gtk.ICON_SIZE_MENU): - # Make the result the proper size for our thumbnail - w, h = gtk.icon_size_lookup(gtk.ICON_SIZE_MENU) - - scaled = info.small_icon.scale_simple(w, h, 'bilinear') - info.small_icon = scaled - - if info.stock_item[3] == 0: - info.accel_str = "" - else: - info.accel_str = \ - gtk.accelerator_name(info.stock_item[3], info.stock_item[2]) - - iter = store.append() - store.set(iter, 0, info, 1, info.stock_id) - - return store - - def on_selection_changed(self, selection): - treeview = selection.get_tree_view() - display = treeview.get_data("stock-display") - - model, iter = selection.get_selected() - if iter: - info = model.get_value(iter, 0) - - if(info.small_icon and info.stock_item[1]): - display.type_label.set_text("Icon and Item") - - elif(info.small_icon): - display.type_label.set_text("Icon Only") - - elif(info.stock_item[1]): - display.type_label.set_text("Item Only") - - else: - display.type_label.set_text("???????") - - display.macro_label.set_text(info.macro) - display.id_label.set_text(info.stock_id) - - if(info.stock_item[1]): - s = "%s %s" % (info.stock_item[1], info.accel_str) - display.label_accel_label.set_text_with_mnemonic(s) - - else: - display.label_accel_label.set_text("") - - if(info.small_icon): - display.icon_image.set_from_stock(info.stock_id, - get_largest_size(info.stock_id)) - else: - display.icon_image.set_from_pixbuf(None) - - else: - display.type_label.set_text("No selected item") - display.macro_label.set_text("") - display.id_label.set_text("") - display.label_accel_label.set_text("") - display.icon_image.set_from_pixbuf(None) - -def main(): - StockItemAndIconBrowserDemo() - gtk.main() - -if __name__ == '__main__': - main() |