def create_themes_page (self): """Create the "Themes"-tab.""" self.page_themes = gtk.VBox(spacing=5) self.page_themes.set_border_width(10) # create info-text list txt = gtk.Label(_('Themes allow you to easily switch the appearance of your Screenlets. On this page you find a list of all available themes for this Screenlet.')) txt.set_size_request(450, -1) txt.set_line_wrap(True) txt.set_alignment(0.0, 0.0) txt.show() self.page_themes.pack_start(txt, False, True) # create theme-selector list self.tree.set_headers_visible(False) self.tree.connect('cursor-changed', self.__tree_cursor_changed) self.tree.show() col = gtk.TreeViewColumn('') cell = gtk.CellRendererText() col.pack_start(cell, True) #cell.set_property('foreground', 'black') col.set_cell_data_func(cell, self.__render_cell) self.tree.append_column(col) # wrap tree in scrollwin sw = gtk.ScrolledWindow() sw.set_shadow_type(gtk.SHADOW_IN) sw.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) sw.add(self.tree) sw.show() # add vbox and add tree/buttons vbox = gtk.VBox() vbox.pack_start(sw, True, True) vbox.show() # show/add page self.page_themes.add(vbox) self.page_themes.show() self.main_notebook.append_page(self.page_themes, gtk.Label(_('Themes ')))
def generate_widget(self, option, value): """Generate the required widgets and add the label.""" widget = option.generate_widget(value) hbox = gtk.HBox() label = gtk.Label() label.set_alignment(0.0, 0.0) label.set_label(option.label) label.set_size_request(180, 28) label.show() hbox.pack_start(label, 0, 1) if widget: if option.disabled: widget.set_sensitive(False) label.set_sensitive(False) widget.set_tooltip_text(option.desc) widget.show() # check if needs Apply-button if option.realtime == False: but = gtk.Button(_('Apply'), gtk.STOCK_APPLY) but.show() but.connect("clicked", option.has_changed) b = gtk.HBox() b.show() b.pack_start(widget, 0, 0) b.pack_start(but, 0, 0) hbox.pack_start(b, 0, 0) else: hbox.pack_start(widget, 0, 0) return hbox
def __init__ (self, width, height): # call gtk.Dialog.__init__ super(OptionsDialog, self).__init__( _("Edit Options"), flags=gtk.DIALOG_DESTROY_WITH_PARENT | gtk.DIALOG_NO_SEPARATOR, buttons = (#gtk.STOCK_REVERT_TO_SAVED, gtk.RESPONSE_APPLY, gtk.STOCK_CLOSE, gtk.RESPONSE_OK)) # set size self.resize(width, height) self.set_keep_above(True) # to avoid confusion self.set_border_width(10) # create attribs self.page_about = None self.page_options = None self.page_themes = None self.vbox_editor = None self.hbox_about = None self.infotext = None self.infoicon = None # create theme-list self.liststore = gtk.ListStore(object) self.tree = gtk.TreeView(model=self.liststore) # create/add outer notebook self.main_notebook = gtk.Notebook() self.main_notebook.show() self.vbox.add(self.main_notebook) # create/init notebook pages self.create_about_page() self.create_themes_page() self.create_options_page()
def on_import(self, strvalue): """When a integer is imported from the config.""" try: if strvalue[0]=='-': return int(float(strvalue[1:])) * -1 return int(float(strvalue)) except: sys.stderr.write(_("Error during on_import - option: %s.\n") % self.name) return 0 return int(strvalue)
def create_options_page (self): """Create the "Options"-tab.""" self.page_options = gtk.HBox() # create vbox for options-editor self.vbox_editor = gtk.VBox(spacing=3) self.vbox_editor.set_border_width(5) self.vbox_editor.show() self.page_options.add(self.vbox_editor) # show/add page self.page_options.show() self.main_notebook.append_page(self.page_options, gtk.Label(_('Options ')))
def on_import(self, strvalue): """When a integer is imported from the config.""" try: if strvalue[0] == '-': return int(float(strvalue[1:])) * -1 return int(float(strvalue)) except: sys.stderr.write( _("Error during on_import - option: %s.\n") % self.name) return 0 return int(strvalue)
def generate_widget(self, value): """Generate a textbox for a account options""" self.widget = gtk.HBox() vb = gtk.VBox() input_name = gtk.Entry() input_name.set_text(value[0]) input_name.show() input_pass = gtk.Entry() input_pass.set_visibility(False) # password input_pass.set_text(value[1]) input_pass.show() but = gtk.Button(_('Apply'), gtk.STOCK_APPLY) but.show() but.connect("clicked", self.has_changed) vb.add(input_name) vb.add(input_pass) vb.show() but.set_tooltip_text(_('Apply username/password ...')) input_name.set_tooltip_text(_('Enter username here ...')) input_pass.set_tooltip_text(_('Enter password here ...')) self.widget.add(vb) self.widget.add(but) return self.widget
def generate_widget(self, value): """Generate some widgets for a list.""" self._entry = gtk.Entry() self._entry.set_editable(False) self.set_value(value) self._entry.show() img = gtk.Image() img.set_from_stock(gtk.STOCK_EDIT, 1) but = gtk.Button() but.set_image(img) but.show() but.connect("clicked", self.open_listeditor) but.set_tooltip_text(_('Open List-Editor ...')) self._entry.set_tooltip_text(self.desc) self.widget = gtk.HBox() self.widget.add(self._entry) self.widget.add(but) return self.widget
def generate_widget(self, value): """Crazy image opener widget generation.""" # create entry and button (entry is hidden) self._entry = gtk.Entry() self._entry.set_text(value) self._entry.set_editable(False) but = gtk.Button() # load preview image but.set_image(self.create_preview(value)) but.connect('clicked', self.but_callback) # create widget self.widget = gtk.HBox() self.widget.add(self._entry) self.widget.add(but) but.show() self.widget.show() # add tooltips but.set_tooltip_text(_('Select Image ...')) but.set_tooltip_text(self.desc) return self.widget
def create_about_page (self): """Create the "About"-tab.""" self.page_about = gtk.HBox() # create about box self.hbox_about = gtk.HBox() self.hbox_about.show() self.page_about.add(self.hbox_about) # create icon self.infoicon = gtk.Image() self.infoicon.show() self.page_about.pack_start(self.infoicon, 0, 1, 10) # create infotext self.infotext = gtk.Label() self.infotext.use_markup = True self.infotext.set_line_wrap(True) self.infotext.set_alignment(0.0, 0.0) self.infotext.show() self.page_about.pack_start(self.infotext, 1, 1, 5) # add page self.page_about.show() self.main_notebook.append_page(self.page_about, gtk.Label(_('About ')))
def __render_cell(self, tvcolumn, cell, model, iter): """Callback for rendering the cells in the theme-treeview.""" # get attributes-list from Treemodel attrib = model.get_value(iter, 0) # set colors depending on state col = '555555' name_uc = attrib[0][0].upper() + attrib[0][1:] # create markup depending on info if attrib[1] == '-' and attrib[2] == '-': mu = '<b><span weight="ultrabold" size="large">' + name_uc + \ '</span></b> (' + _('no info available') + ')' else: if attrib[1] == None : attrib[1] = '-' if attrib[2] == None : attrib[2] = '-' if attrib[3] == None : attrib[3] = '-' if attrib[4] == None : attrib[4] = '-' mu = '<b><span weight="ultrabold" size="large">' + name_uc + \ '</span></b> v' + attrib[4] + '\n<small><span color="#555555' +\ '">' + attrib[2].replace('\\n', '\n') + \ '</span></small>\n<i><small>by '+str(attrib[3])+'</small></i>' # set markup cell.set_property('markup', mu)
class DirectoryOption(FileOption): """Directory is based on file widgets""" _gtk_file_mode = gtk.FILE_CHOOSER_ACTION_SELECT_FOLDER _opener_title = _("Choose Directory")
class FileOption(Option): """ An Option-subclass for string-values that contain filenames. Adds a patterns-attribute that can contain a list of patterns to be shown in the assigned file selection dialog. The show_pixmaps-attribute can be set to True to make the filedialog show all image-types. supported by gtk.Pixmap. If the directory-attributue is true, the dialog will ony allow directories. XXX - Some of this doen't yet work, unknown reason. """ patterns = [('All Files', ['*'])] image = False _gtk_file_mode = gtk.FILE_CHOOSER_ACTION_OPEN _opener_title = _("Choose File") def on_import(self, strvalue): """When a file is imported from the config.""" return strvalue def on_export(self, value): """When a file is exported to the config.""" return str(value) def generate_widget(self, value): """Generate a special widget for file options""" dlg = self.generate_file_opener() self.widget = gtk.FileChooserButton(dlg) self.widget.set_title(self._opener_title) self.widget.set_size_request(180, 28) self.set_value(value) if self.realtime: self.widget.connect("selection-changed", self.has_changed) return self.widget def generate_file_opener(self): """Generate a file opener widget""" dlg = gtk.FileChooserDialog( action=self._gtk_file_mode, buttons=(gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL, gtk.STOCK_OPEN, gtk.RESPONSE_OK), ) dlg.set_keep_above(True) self.set_filters(dlg) return dlg def set_filters(self, dlg): """Add file filters to the dialog widget""" if self.patterns: for filter in self.patterns: fil = gtk.FileFilter() fil.set_name("%s (%s)" % (filter[0], ','.join(filter[1]))) for pattern in filter[1]: fil.add_pattern(pattern) dlg.add_filter(fil) def set_value(self, value): """Set the file value as required.""" self.widget.set_filename(value) self.value = value def has_changed(self, widget): """Executed when the widget event kicks off.""" self.value = self.widget.get_filename() super(FileOption, self).has_changed()
class ImageOption(FileOption): """Image is based on file widgets""" _opener_title = _("Choose Image") def set_filters(self, dlg): """Add the standard pixbug formats""" flt = gtk.FileFilter() flt.add_pixbuf_formats() dlg.set_filter(flt) def generate_widget(self, value): """Crazy image opener widget generation.""" # create entry and button (entry is hidden) self._entry = gtk.Entry() self._entry.set_text(value) self._entry.set_editable(False) but = gtk.Button() # load preview image but.set_image(self.create_preview(value)) but.connect('clicked', self.but_callback) # create widget self.widget = gtk.HBox() self.widget.add(self._entry) self.widget.add(but) but.show() self.widget.show() # add tooltips but.set_tooltip_text(_('Select Image ...')) but.set_tooltip_text(self.desc) return self.widget def create_preview(self, filename): """Utililty method to reload preview image""" if filename and os.path.isfile(filename): pb = gtk.gdk.pixbuf_new_from_file_at_size(filename, 64, -1) if pb: img = gtk.Image() img.set_from_pixbuf(pb) return img img = gtk.image_new_from_stock(gtk.STOCK_MISSING_IMAGE, gtk.ICON_SIZE_LARGE_TOOLBAR) img.set_size_request(64, 64) return img def but_callback(self, widget): """Create button""" dlg = gtk.FileChooserDialog(buttons=(gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL, gtk.STOCK_OPEN, gtk.RESPONSE_OK)) dlg.set_keep_above(True) dlg.set_filename(self._entry.get_text()) prev = gtk.Image() box = gtk.VBox() box.set_size_request(150, -1) box.add(prev) prev.show() dlg.set_preview_widget_active(True) dlg.connect('selection-changed', self.preview_callback, dlg, prev) dlg.set_preview_widget(box) response = dlg.run() if response == gtk.RESPONSE_OK: fn = dlg.get_filename() if not fn: fn = "" self._entry.set_text(fn) widget.set_image(self.create_preview(dlg.get_filename())) self.has_changed(self.widget) dlg.destroy() def preview_callback(self, widget, dlg, prev): """add preview widget to filechooser""" fname = dlg.get_preview_filename() if fname and os.path.isfile(fname): pb = gtk.gdk.pixbuf_new_from_file_at_size(fname, 150, -1) if pb: prev.set_from_pixbuf(pb) dlg.set_preview_widget_active(True) else: dlg.set_preview_widget_active(False) def has_changed(self, widget): """Executed when the widget event kicks off.""" self.value = self._entry.get_text() super(FileOption, self).has_changed()