# HG changeset patch # User Erik Grinaker # Date 1091024006 0 # Node ID 8de61fe329a05d45fe58459154e88e7aa7654053 # Parent fe0f16515591ca55e91d59352e437c76d2cfc3bc added widget generation methods to field objects diff -r fe0f16515591ca55e91d59352e437c76d2cfc3bc -r 8de61fe329a05d45fe58459154e88e7aa7654053 ChangeLog --- a/ChangeLog Wed Jul 28 13:31:28 2004 +0000 +++ b/ChangeLog Wed Jul 28 14:13:26 2004 +0000 @@ -7,6 +7,9 @@ * added various separate password dialogs, instead of using a common class + * added generate_display_widget() and generate_edit_widget() + methods to field objects + 2004-07-27 Erik Grinaker * rewrote the app configuration handling diff -r fe0f16515591ca55e91d59352e437c76d2cfc3bc -r 8de61fe329a05d45fe58459154e88e7aa7654053 src/lib/dialog.py --- a/src/lib/dialog.py Wed Jul 28 13:31:28 2004 +0000 +++ b/src/lib/dialog.py Wed Jul 28 14:13:26 2004 +0000 @@ -456,39 +456,15 @@ self.sect_fields.type = type for field in fields: - self.__add_field(self.sect_fields, field) + entry = field.generate_edit_widget() + self.tooltips.set_tip(entry, field.description) + + self.entry_field[field.id] = entry + self.sect_fields.add_inputrow(field.name, entry) self.show_all() - def __add_field(self, section, field): - "Adds an input for a field to a section" - - if field.type == revelation.entry.FIELD_TYPE_PASSWORD: - entry = revelation.widget.PasswordEntry() - - else: - entry = revelation.widget.Entry() - - - entry.set_text(field.value) - self.tooltips.set_tip(entry, field.description) - self.entry_field[field.id] = entry - - - if field.id == revelation.entry.FIELD_GENERIC_PASSWORD: - hbox = revelation.widget.HBox() - hbox.pack_start(entry) - - button = revelation.widget.Button("Generate", lambda w: entry.set_text(revelation.misc.generate_password())) - hbox.pack_start(button, gtk.FALSE, gtk.FALSE) - - section.add_inputrow(field.name, hbox) - - else: - section.add_inputrow(field.name, entry) - - def run(self): "Displays the dialog" diff -r fe0f16515591ca55e91d59352e437c76d2cfc3bc -r 8de61fe329a05d45fe58459154e88e7aa7654053 src/lib/entry.py --- a/src/lib/entry.py Wed Jul 28 13:31:28 2004 +0000 +++ b/src/lib/entry.py Wed Jul 28 14:13:26 2004 +0000 @@ -23,7 +23,7 @@ # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. # -import revelation, gobject, copy, time +import revelation, copy, gobject, gtk, time ENTRY_FOLDER = "folder" @@ -371,6 +371,43 @@ self.description = FIELDDATA[id]["description"] + def generate_display_widget(self): + "Generates a widget for displaying the field" + + if self.type == FIELD_TYPE_EMAIL: + widget = revelation.widget.HRef("mailto:" + self.value, revelation.misc.escape_markup(self.value)) + + elif self.type == FIELD_TYPE_PASSWORD: + widget = revelation.widget.PasswordLabel(revelation.misc.escape_markup(self.value)) + + elif self.type == FIELD_TYPE_URL: + widget = revelation.widget.HRef(self.value, revelation.misc.escape_markup(self.value)) + + else: + widget = revelation.widget.Label(revelation.misc.escape_markup(self.value)) + widget.set_selectable(gtk.TRUE) + + + return widget + + + def generate_edit_widget(self): + "Generates a widget for editing the field" + + if self.id == FIELD_GENERIC_PASSWORD: + entry = revelation.widget.PasswordEntryGenerate() + + elif self.type == FIELD_TYPE_PASSWORD: + entry = revelation.widget.PasswordEntry() + + else: + entry = revelation.widget.Entry() + + entry.set_text(self.value) + + return entry + + def get_entry_list(): "Returns a sorted list of all available entry types" diff -r fe0f16515591ca55e91d59352e437c76d2cfc3bc -r 8de61fe329a05d45fe58459154e88e7aa7654053 src/lib/ui.py --- a/src/lib/ui.py Wed Jul 28 13:31:28 2004 +0000 +++ b/src/lib/ui.py Wed Jul 28 14:13:26 2004 +0000 @@ -77,6 +77,7 @@ rows = [] for field in entry.get_fields(): + if field.value == "": continue @@ -87,20 +88,7 @@ self.size_name.add_widget(label) row.pack_start(label, gtk.FALSE, gtk.FALSE) - - if field.type == revelation.entry.FIELD_TYPE_EMAIL: - widget = revelation.widget.HRef("mailto:" + field.value, revelation.misc.escape_markup(field.value)) - - elif field.type == revelation.entry.FIELD_TYPE_URL: - widget = revelation.widget.HRef(field.value, revelation.misc.escape_markup(field.value)) - - elif field.type == revelation.entry.FIELD_TYPE_PASSWORD: - widget = revelation.widget.PasswordLabel(revelation.misc.escape_markup(field.value)) - - else: - widget = revelation.widget.Label(revelation.misc.escape_markup(field.value)) - widget.set_selectable(gtk.TRUE) - + widget = field.generate_display_widget() self.size_value.add_widget(widget) row.pack_start(widget, gtk.FALSE, gtk.FALSE) diff -r fe0f16515591ca55e91d59352e437c76d2cfc3bc -r 8de61fe329a05d45fe58459154e88e7aa7654053 src/lib/widget.py --- a/src/lib/widget.py Wed Jul 28 13:31:28 2004 +0000 +++ b/src/lib/widget.py Wed Jul 28 14:13:26 2004 +0000 @@ -854,6 +854,26 @@ +class PasswordEntryGenerate(HBox): + "A password entry with a generator button" + + def __init__(self, password = None): + HBox.__init__(self) + + self.entry = PasswordEntry(password) + self.pack_start(self.entry) + + self.button = Button("Generate", lambda w: self.entry.set_text(revelation.misc.generate_password())) + self.pack_start(self.button, gtk.FALSE, gtk.FALSE) + + + def __getattr__(self, name): + "Proxy lookups for missing attributes to the entry" + + return getattr(self.entry, name) + + + class PasswordLabel(Label): "A label which displays a passwords (follows the 'show passwords' preference)"