diff --git a/ChangeLog b/ChangeLog index 18930e436..44df54638 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2007-05-19 Don Allingham + * src/Bookmarks.py: pylint fixes + * src/ColumnOrder.py: pylint fixes + * src/DateEdit.py: pylint fixes + * src/DbLoader.py: pylint fixes + * src/ManagedWindow.py: pylint fixes + 2007-05-19 Don Allingham * src/AutoComp.py: removal of unused functions * src/BaseDoc.py: clean up and add documentation diff --git a/src/Bookmarks.py b/src/Bookmarks.py index f493dde21..cbd8ad033 100644 --- a/src/Bookmarks.py +++ b/src/Bookmarks.py @@ -89,18 +89,34 @@ class Bookmarks : self.dbstate.connect('database-changed', self.db_changed) def db_changed(self, data): + """ + Reconnect the signals on a database changed. + """ self.connect_signals() def connect_signals(self): + """ + Connect the person-delete signal + """ self.dbstate.db.connect('person-delete', self.remove_handles) def update_bookmarks(self, bookmarks): + """ + Assign bookmarks + """ self.bookmarks = bookmarks def display(self): + """ + + Redraw teh display + """ self.redraw() def undisplay(self): + """ + Update the uimanager + """ if self.active != DISABLED: self.uistate.uimanager.remove_ui(self.active) self.uistate.uimanager.remove_action_group(self.action_group) @@ -108,8 +124,8 @@ class Bookmarks : def redraw(self): """Create the pulldown menu""" - f = StringIO() - f.write(_top) + text = StringIO() + text.write(_top) self.undisplay() @@ -117,7 +133,7 @@ class Bookmarks : count = 0 if len(self.bookmarks.get()) > 0: - f.write('') + text.write('') new_list = [] for item in self.bookmarks.get(): @@ -125,26 +141,26 @@ class Bookmarks : label, obj = self.make_label(item) func = self.callback(item) action_id = "BM:%s" % item - actions.append((action_id,None,label,None,None,func)) - f.write('' % action_id) - count +=1 + actions.append((action_id, None, label, None, None, func)) + text.write('' % action_id) + count += 1 new_list.append(item) except AttributeError: pass - f.write('') + text.write('') self.bookmarks.set(new_list) - f.write(_btm) + text.write(_btm) self.action_group.add_actions(actions) - self.uistate.uimanager.insert_action_group(self.action_group,1) - self.active = self.uistate.uimanager.add_ui_from_string(f.getvalue()) + self.uistate.uimanager.insert_action_group(self.action_group, 1) + self.active = self.uistate.uimanager.add_ui_from_string(text.getvalue()) self.uistate.uimanager.ensure_update() - f.close() + text.close() - def make_label(self,handle): + def make_label(self, handle): person = self.dbstate.db.get_person_from_handle(handle) name = NameDisplay.displayer.display(person) - return ("%s [%s]" % (name,person.gramps_id), person) + return ("%s [%s]" % (name, person.gramps_id), person) def callback(self, handle): return make_callback(handle, self.dbstate.change_active_handle) @@ -175,25 +191,25 @@ class Bookmarks : """Draws the bookmark dialog box""" title = "%s - GRAMPS" % _("Edit Bookmarks") self.top = gtk.Dialog(title) - self.top.set_default_size(400,350) + self.top.set_default_size(400, 350) self.top.set_has_separator(False) self.top.vbox.set_spacing(5) label = gtk.Label('%s' % _("Edit Bookmarks")) label.set_use_markup(True) - self.top.vbox.pack_start(label,0,0,5) + self.top.vbox.pack_start(label, 0, 0, 5) box = gtk.HBox() - self.top.vbox.pack_start(box,1,1,5) + self.top.vbox.pack_start(box, 1, 1, 5) - name_titles = [(_('Name'),-1,200),(_('ID'),-1,50),('',-1,0)] + name_titles = [(_('Name'), -1, 200), (_('ID'), -1, 50), ('', -1, 0)] self.namelist = gtk.TreeView() - self.namemodel = ListModel.ListModel(self.namelist,name_titles) + self.namemodel = ListModel.ListModel(self.namelist, name_titles) self.namemodel_cols = len(name_titles) slist = gtk.ScrolledWindow() slist.add_with_viewport(self.namelist) slist.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) - box.pack_start(slist,1,1,5) + box.pack_start(slist, 1, 1, 5) bbox = gtk.VButtonBox() bbox.set_layout(gtk.BUTTONBOX_START) bbox.set_spacing(6) @@ -201,14 +217,14 @@ class Bookmarks : down = gtk.Button(stock=gtk.STOCK_GO_DOWN) delete = gtk.Button(stock=gtk.STOCK_REMOVE) up.connect('clicked', self.up_clicked) - down.connect('clicked',self.down_clicked) - delete.connect('clicked',self.delete_clicked) - self.top.add_button(gtk.STOCK_CLOSE,gtk.RESPONSE_CLOSE) - self.top.add_button(gtk.STOCK_HELP,gtk.RESPONSE_HELP) + down.connect('clicked', self.down_clicked) + delete.connect('clicked', self.delete_clicked) + self.top.add_button(gtk.STOCK_CLOSE, gtk.RESPONSE_CLOSE) + self.top.add_button(gtk.STOCK_HELP, gtk.RESPONSE_HELP) bbox.add(up) bbox.add(down) bbox.add(delete) - box.pack_start(bbox,0,0,5) + box.pack_start(bbox, 0, 0, 5) self.top.show_all() def edit(self): @@ -225,7 +241,7 @@ class Bookmarks : name, obj = self.make_label(handle) if obj: gramps_id = obj.get_gramps_id() - self.namemodel.add([name,gramps_id,handle]) + self.namemodel.add([name, gramps_id, handle]) self.namemodel.connect_model() self.modified = False @@ -236,9 +252,9 @@ class Bookmarks : self.redraw() self.top.destroy() - def delete_clicked(self,obj): + def delete_clicked(self, obj): """Removes the current selection from the list""" - store,the_iter = self.namemodel.get_selected() + store, the_iter = self.namemodel.get_selected() if not the_iter: return row = self.namemodel.get_selected_row() @@ -246,30 +262,30 @@ class Bookmarks : self.namemodel.remove(the_iter) self.modified = True - def up_clicked(self,obj): + def up_clicked(self, obj): """Moves the current selection up one row""" row = self.namemodel.get_selected_row() if not row or row == -1: return - store,the_iter = self.namemodel.get_selected() - data = self.namemodel.get_data(the_iter,range(self.namemodel_cols)) + store, the_iter = self.namemodel.get_selected() + data = self.namemodel.get_data(the_iter, range(self.namemodel_cols)) self.namemodel.remove(the_iter) - self.namemodel.insert(row-1,data,None,1) + self.namemodel.insert(row-1, data, None, 1) handle = self.bookmarks.pop(row) - self.bookmarks.insert(row-1,handle) + self.bookmarks.insert(row-1, handle) self.modified = True - def down_clicked(self,obj): + def down_clicked(self, obj): """Moves the current selection down one row""" row = self.namemodel.get_selected_row() if row + 1 >= self.namemodel.count or row == -1: return - store,the_iter = self.namemodel.get_selected() - data = self.namemodel.get_data(the_iter,range(self.namemodel_cols)) + store, the_iter = self.namemodel.get_selected() + data = self.namemodel.get_data(the_iter, range(self.namemodel_cols)) self.namemodel.remove(the_iter) - self.namemodel.insert(row+1,data,None,1) + self.namemodel.insert(row+1, data, None, 1) handle = self.bookmarks.pop(row) - self.bookmarks.insert(row+1,handle) + self.bookmarks.insert(row+1, handle) self.modified = True def help_clicked(self): @@ -279,7 +295,7 @@ class Bookmarks : class ListBookmarks(Bookmarks): - def __init__(self,dbstate,uistate,bookmarks, goto_handle): + def __init__(self, dbstate, uistate, bookmarks, goto_handle): self.goto_handle = goto_handle Bookmarks.__init__(self, dbstate, uistate, bookmarks) @@ -289,15 +305,14 @@ class ListBookmarks(Bookmarks): def do_callback(self, handle): self.goto_handle(handle) - class FamilyBookmarks(ListBookmarks) : "Handle the bookmarks interface for Gramps" - def __init__(self,dbstate,uistate,bookmarks, goto_handle): + def __init__(self, dbstate, uistate, bookmarks, goto_handle): ListBookmarks.__init__(self, dbstate, uistate, bookmarks, goto_handle) - def make_label(self,handle): + def make_label(self, handle): obj = self.dbstate.db.get_family_from_handle(handle) name = Utils.family_name(obj, self.dbstate.db) return ("%s [%s]" % (name, obj.gramps_id), obj) @@ -308,11 +323,11 @@ class FamilyBookmarks(ListBookmarks) : class EventBookmarks(ListBookmarks) : "Handle the bookmarks interface for Gramps" - def __init__(self,dbstate,uistate,bookmarks, goto_handle): + def __init__(self, dbstate, uistate, bookmarks, goto_handle): ListBookmarks.__init__(self, dbstate, uistate, bookmarks, goto_handle) - def make_label(self,handle): + def make_label(self, handle): obj = self.dbstate.db.get_event_from_handle(handle) if obj.get_description() == "": name = str(obj.get_type()) @@ -325,11 +340,11 @@ class EventBookmarks(ListBookmarks) : class SourceBookmarks(ListBookmarks) : "Handle the bookmarks interface for Gramps" - def __init__(self,dbstate,uistate,bookmarks, goto_handle): + def __init__(self, dbstate, uistate, bookmarks, goto_handle): ListBookmarks.__init__(self, dbstate, uistate, bookmarks, goto_handle) - def make_label(self,handle): + def make_label(self, handle): obj = self.dbstate.db.get_source_from_handle(handle) name = obj.get_title() return ("%s [%s]" % (name, obj.gramps_id), obj) @@ -340,11 +355,11 @@ class SourceBookmarks(ListBookmarks) : class MediaBookmarks(ListBookmarks) : "Handle the bookmarks interface for Gramps" - def __init__(self,dbstate,uistate,bookmarks, goto_handle): + def __init__(self, dbstate, uistate, bookmarks, goto_handle): ListBookmarks.__init__(self, dbstate, uistate, bookmarks, goto_handle) - def make_label(self,handle): + def make_label(self, handle): obj = self.dbstate.db.get_object_from_handle(handle) name = obj.get_description() return ("%s [%s]" % (name, obj.gramps_id), obj) @@ -355,11 +370,11 @@ class MediaBookmarks(ListBookmarks) : class RepoBookmarks(ListBookmarks) : "Handle the bookmarks interface for Gramps" - def __init__(self,dbstate,uistate,bookmarks, goto_handle): + def __init__(self, dbstate, uistate, bookmarks, goto_handle): ListBookmarks.__init__(self, dbstate, uistate, bookmarks, goto_handle) - def make_label(self,handle): + def make_label(self, handle): obj = self.dbstate.db.get_repository_from_handle(handle) name = obj.get_name() return ("%s [%s]" % (name, obj.gramps_id), obj) @@ -370,11 +385,11 @@ class RepoBookmarks(ListBookmarks) : class PlaceBookmarks(ListBookmarks) : "Handle the bookmarks interface for Gramps" - def __init__(self,dbstate,uistate,bookmarks, goto_handle): + def __init__(self, dbstate, uistate, bookmarks, goto_handle): ListBookmarks.__init__(self, dbstate, uistate, bookmarks, goto_handle) - def make_label(self,handle): + def make_label(self, handle): obj = self.dbstate.db.get_place_from_handle(handle) name = obj.get_title() return ("%s [%s]" % (name, obj.gramps_id), obj) @@ -385,11 +400,11 @@ class PlaceBookmarks(ListBookmarks) : class NoteBookmarks(ListBookmarks) : "Handle the bookmarks interface for Gramps" - def __init__(self,dbstate,uistate,bookmarks, goto_handle): + def __init__(self, dbstate, uistate, bookmarks, goto_handle): ListBookmarks.__init__(self, dbstate, uistate, bookmarks, goto_handle) - def make_label(self,handle): + def make_label(self, handle): obj = self.dbstate.db.get_note_from_handle(handle) name = obj.get().replace('\n', ' ') if len(name) > 40: @@ -399,5 +414,5 @@ class NoteBookmarks(ListBookmarks) : def connect_signals(self): self.dbstate.db.connect('note-delete', self.remove_handles) -def make_callback(n,f): +def make_callback(n, f): return lambda x: f(n) diff --git a/src/ColumnOrder.py b/src/ColumnOrder.py index 4b3a6cfbe..3b06577e4 100644 --- a/src/ColumnOrder.py +++ b/src/ColumnOrder.py @@ -18,16 +18,31 @@ # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # +""" +Handle the column ordering +""" + #------------------------------------------------------------------------- # -# GTK/Gnome modules +# python modules +# +#------------------------------------------------------------------------- +from gettext import gettext as _ +import logging + +#------------------------------------------------------------------------- +# +# GTK modules # #------------------------------------------------------------------------- import gtk.glade +#------------------------------------------------------------------------- +# +# GRAMPS modules +# +#------------------------------------------------------------------------- import const -from gettext import gettext as _ - import ManagedWindow #------------------------------------------------------------------------- @@ -35,16 +50,21 @@ import ManagedWindow # set up logging # #------------------------------------------------------------------------- -import logging -log = logging.getLogger(".ColumnOrder") +__LOG = logging.getLogger(".ColumnOrder") + class ColumnOrder(ManagedWindow.ManagedWindow): + """ + Column ordering selection dialog + """ def __init__(self, win_name, uistate, arglist, column_names, callback): - + """ + Create the Column Ordering dialog + """ ManagedWindow.ManagedWindow.__init__(self, uistate, [], self) - self.glade = gtk.glade.XML(const.gladeFile,"columns","gramps") + self.glade = gtk.glade.XML(const.gladeFile, "columns", "gramps") self.set_window(self.glade.get_widget('columns'), None, win_name) @@ -57,7 +77,7 @@ class ColumnOrder(ManagedWindow.ManagedWindow): self.tree.set_model(self.model) checkbox = gtk.CellRendererToggle() - checkbox.connect('toggled', self.toggled, self.model) + checkbox.connect('toggled', __toggled, self.model) renderer = gtk.CellRendererText() column_n = gtk.TreeViewColumn(_('Display'), checkbox, active=0) @@ -81,25 +101,38 @@ class ColumnOrder(ManagedWindow.ManagedWindow): 2, item[1], 3, item) - def build_menu_names(self,obj): + def build_menu_names(self, obj): + """ + Build the information for the Managed Window menu entries + """ return (_('Column Editor'), _('Column Editor')) - def ok_clicked(self,obj): + def ok_clicked(self, obj): + """ + called with the OK button is pressed + """ newlist = [] - for i in range(0,len(self.arglist)): - node = self.model.get_iter((int(i),)) + for i in range(0, len(self.arglist)): + node = self.model.get_iter((int(i), )) enable = self.model.get_value(node, 0) index = self.model.get_value(node, 2) - value = self.model.get_value(node,3) + value = self.model.get_value(node, 3) newlist.append((enable, index, value[2])) self.callback(newlist) self.close() - def cancel_clicked(self,obj): + def cancel_clicked(self, obj): + """ + Called with the Cancel button is pressed. + """ self.close() - def toggled(self, cell, path, model): - node = model.get_iter((int(path),)) - value = not model.get_value(node,0) - model.set(node,0,value) +def __toggled(cell, path, model): + """ + Called when the cell information is changed, updating the + data model so the that change occurs. + """ + node = model.get_iter((int(path), )) + value = not model.get_value(node, 0) + model.set(node, 0, value) diff --git a/src/DateEdit.py b/src/DateEdit.py index 31bb73c95..c759487f2 100644 --- a/src/DateEdit.py +++ b/src/DateEdit.py @@ -49,7 +49,7 @@ from gettext import gettext as _ # #------------------------------------------------------------------------- import logging -log = logging.getLogger(".DateEdit") +__LOG = logging.getLogger(".DateEdit") #------------------------------------------------------------------------- # @@ -125,9 +125,9 @@ class DateEdit: self.button_obj.set_relief(gtk.RELIEF_NORMAL) self.pixmap_obj = button_obj.get_child() - self.text_obj.connect('validate',self.validate) - self.text_obj.connect('content-changed',self.set_date) - self.button_obj.connect('clicked',self.invoke_date_editor) + self.text_obj.connect('validate', self.validate) + self.text_obj.connect('content-changed', self.set_date) + self.button_obj.connect('clicked', self.invoke_date_editor) self.text_obj.set_text(DateHandler.displayer.display(self.date_obj)) self.text_obj.validate() @@ -147,7 +147,7 @@ class DateEdit: if self.date_obj.get_modifier() == Date.MOD_TEXTONLY: return ValidationError(_('Bad Date')) - def invoke_date_editor(self,obj): + def invoke_date_editor(self, obj): """ Invokes Date Editor dialog when the user clicks the Calendar button. If date was in fact built, sets the date_obj to the newly built @@ -157,7 +157,7 @@ class DateEdit: the_date = date_dialog.return_date self.update_after_editor(the_date) - def update_after_editor(self,date_obj): + def update_after_editor(self, date_obj): """ Update text entry and validate it """ @@ -200,7 +200,7 @@ class DateEditorDialog(ManagedWindow.ManagedWindow): self.calendar_box.append_text(name) self.calendar_box.set_active(self.date.get_calendar()) - self.calendar_box.connect('changed',self.switch_calendar) + self.calendar_box.connect('changed', self.switch_calendar) self.quality_box = self.top.get_widget('quality_box') for item_number in range(len(QUAL_TEXT)): @@ -213,7 +213,7 @@ class DateEditorDialog(ManagedWindow.ManagedWindow): self.type_box.append_text(MOD_TEXT[item_number][1]) if self.date.get_modifier() == MOD_TEXT[item_number][0]: self.type_box.set_active(item_number) - self.type_box.connect('changed',self.switch_type) + self.type_box.connect('changed', self.switch_type) self.start_month_box = self.top.get_widget('start_month_box') self.stop_month_box = self.top.get_widget('stop_month_box') @@ -267,8 +267,8 @@ class DateEditorDialog(ManagedWindow.ManagedWindow): return else: if response == gtk.RESPONSE_OK: - (the_quality,the_modifier,the_calendar, - the_value,the_text) = self.build_date_from_ui() + (the_quality, the_modifier, the_calendar, + the_value, the_text) = self.build_date_from_ui() self.return_date = Date(self.date) self.return_date.set( quality=the_quality, @@ -298,12 +298,12 @@ class DateEditorDialog(ManagedWindow.ManagedWindow): text = self.text_entry.get_text() if modifier == Date.MOD_TEXTONLY: - return (Date.QUAL_NONE,Date.MOD_TEXTONLY,Date.CAL_GREGORIAN, + return (Date.QUAL_NONE, Date.MOD_TEXTONLY, Date.CAL_GREGORIAN, Date.EMPTY,text) quality = QUAL_TEXT[self.quality_box.get_active()][0] - if modifier in (Date.MOD_RANGE,Date.MOD_SPAN): + if modifier in (Date.MOD_RANGE, Date.MOD_SPAN): value = ( self.start_day.get_value_as_int(), self.start_month_box.get_active(), @@ -320,9 +320,9 @@ class DateEditorDialog(ManagedWindow.ManagedWindow): self.start_year.get_value_as_int(), False) calendar = self.calendar_box.get_active() - return (quality,modifier,calendar,value,text) + return (quality, modifier, calendar, value, text) - def switch_type(self,obj): + def switch_type(self, obj): """ Disable/enable various date controls depending on the date type selected via the menu. @@ -332,7 +332,7 @@ class DateEditorDialog(ManagedWindow.ManagedWindow): # Disable/enable second date controls based on whether # the type allows compound dates - if the_modifier in (Date.MOD_RANGE,Date.MOD_SPAN): + if the_modifier in (Date.MOD_RANGE, Date.MOD_SPAN): stop_date_sensitivity = 1 else: stop_date_sensitivity = 0 @@ -348,7 +348,7 @@ class DateEditorDialog(ManagedWindow.ManagedWindow): self.calendar_box.set_sensitive(date_sensitivity) self.quality_box.set_sensitive(date_sensitivity) - def switch_calendar(self,obj): + def switch_calendar(self, obj): """ Change month names and convert the date based on the calendar selected via the menu. @@ -357,7 +357,7 @@ class DateEditorDialog(ManagedWindow.ManagedWindow): old_cal = self.date.get_calendar() new_cal = self.calendar_box.get_active() - (the_quality,the_modifier,the_calendar,the_value,the_text) = \ + (the_quality, the_modifier, the_calendar, the_value, the_text) = \ self.build_date_from_ui() self.date.set( quality=the_quality, diff --git a/src/DbLoader.py b/src/DbLoader.py index b2dc166ce..2c560f1ff 100644 --- a/src/DbLoader.py +++ b/src/DbLoader.py @@ -31,10 +31,17 @@ Handling of loading new/existing databases. #------------------------------------------------------------------------- import os import sys -from bsddb.db import DBAccessError, DBRunRecoveryError, DBPageNotFoundError, DBInvalidArgError +from bsddb.db import DBAccessError, DBRunRecoveryError, \ + DBPageNotFoundError, DBInvalidArgError from gettext import gettext as _ import logging -log = logging.getLogger(".") + +#------------------------------------------------------------------------- +# +# Set up logging +# +#------------------------------------------------------------------------- +__LOG = logging.getLogger(".") #------------------------------------------------------------------------- # @@ -68,13 +75,15 @@ _KNOWN_FORMATS = { const.app_gedcom : _('GEDCOM'), } +__OPEN_FORMATS = [const.app_gramps, const.app_gramps_xml, const.app_gedcom] + #------------------------------------------------------------------------- # # DbLoader class # #------------------------------------------------------------------------- class DbLoader: - def __init__(self,dbstate,uistate): + def __init__(self, dbstate, uistate): self.dbstate = dbstate self.uistate = uistate @@ -92,9 +101,7 @@ class DbLoader: add_xml_filter(choose) add_gedcom_filter(choose) - format_list = [const.app_gramps,const.app_gramps_xml,const.app_gedcom] - - (box, type_selector) = format_maker(format_list) + (box, type_selector) = format_maker(__OPEN_FORMATS) choose.set_extra_widget(box) choose.set_current_folder(get_default_dir()) @@ -110,31 +117,29 @@ class DbLoader: filetype = Mime.get_type(filename) (the_path, the_file) = os.path.split(filename) choose.destroy() - if filetype in [const.app_gramps,const.app_gramps_xml, - const.app_gedcom]: - - self.read_file(filename,filetype) + if filetype in __OPEN_FORMATS: + self.read_file(filename, filetype) try: os.chdir(os.path.dirname(filename)) except: - return ('','') - return (filename,filetype) - elif filetype in [const.app_gramps_package,const.app_geneweb]: + return ('', '') + return (filename, filetype) + elif filetype in [const.app_gramps_package, const.app_geneweb]: QuestionDialog.ErrorDialog( _("Could not open file: %s") % filename, _('Files of type "%s" cannot be opened directly.\n\n' 'Please create a new GRAMPS database and import ' 'the file.') % filetype) - return ('','') + return ('', '') else: QuestionDialog.ErrorDialog( _("Could not open file: %s") % filename, _('File type "%s" is unknown to GRAMPS.\n\n' 'Valid types are: GRAMPS database, GRAMPS XML, ' 'GRAMPS package, and GEDCOM.') % filetype) - return ('','') + return ('', '') choose.destroy() - return ('','') + return ('', '') def new_file(self): choose = gtk.FileChooserDialog( @@ -179,19 +184,19 @@ class DbLoader: except: pass - self.read_file(filename,filetype) + self.read_file(filename, filetype) try: os.chdir(os.path.dirname(filename)) except: - return ('','') + return ('', '') self.dbstate.db.db_is_open = True - return (filename,filetype) + return (filename, filetype) else: choose.destroy() - return ('','') + return ('', '') choose.destroy() - return ('','') + return ('', '') def save_as(self): choose = gtk.FileChooserDialog( @@ -208,8 +213,7 @@ class DbLoader: add_xml_filter(choose) add_gedcom_filter(choose) - format_list = [const.app_gramps,const.app_gramps_xml,const.app_gedcom] - (box, type_selector) = format_maker(format_list) + (box, type_selector) = format_maker(__OPEN_FORMATS) choose.set_extra_widget(box) default_dir = get_default_dir() @@ -242,17 +246,15 @@ class DbLoader: str(msg)) return ('','') # First we try our best formats - if filetype not in (const.app_gramps, - const.app_gramps_xml, - const.app_gedcom): + if filetype not in _OPEN_FORMATS: QuestionDialog.ErrorDialog( _("Could not open file: %s") % filename, _("Unknown type: %s") % filetype ) return ('','') choose.destroy() - self.open_saved_as(filename,filetype) - return (filename,filetype) + self.open_saved_as(filename, filetype) + return (filename, filetype) else: choose.destroy() return ('','') @@ -288,7 +290,7 @@ class DbLoader: add_xml_filter(choose) add_gedcom_filter(choose) - format_list = [const.app_gramps,const.app_gramps_xml,const.app_gedcom] + format_list = _OPEN_FORMATS # Add more data type selections if opening existing db for data in import_list: @@ -334,17 +336,15 @@ class DbLoader: return False # First we try our best formats - if filetype in (const.app_gramps, - const.app_gramps_xml, - const.app_gedcom): + if filetype in _OPEN_FORMATS: importer = GrampsDbUtils.gramps_db_reader_factory(filetype) self.do_import(choose, importer, filename) return True # Then we try all the known plugins (the_path, the_file) = os.path.split(filename) - Config.set(Config.RECENT_IMPORT_DIR,the_path) - for (importData,mime_filter,mime_type,native_format,format_name) \ + Config.set(Config.RECENT_IMPORT_DIR, the_path) + for (importData, mime_filter, mime_type, native_format, format_name) \ in import_list: if filetype == mime_type or the_file == mime_type: self.do_import(choose, importData, filename) @@ -360,13 +360,13 @@ class DbLoader: choose.destroy() return False - def check_errors(self,filename): + def check_errors(self, filename): """ This methods runs common error checks and returns True if any found. In this process, warning dialog can pop up. """ - if type(filename) not in (str,unicode): + if type(filename) not in (str, unicode): return True filename = os.path.normpath(os.path.abspath(filename)) @@ -447,31 +447,31 @@ class DbLoader: self.uistate.progress.show() try: - self.dbstate.db.load(filename,self.uistate.pulse_progressbar,mode) + self.dbstate.db.load(filename, self.uistate.pulse_progressbar, mode) self.dbstate.db.set_save_path(filename) try: os.chdir(os.path.dirname(filename)) except: print "could not change directory" except OSError, msg: - QuestionDialog.ErrorDialog( - _("Could not open file: %s") % filename, str(msg)) + QuestionDialog.ErrorDialog( + _("Could not open file: %s") % filename, str(msg)) except DBRunRecoveryError, msg: - QuestionDialog.ErrorDialog( - _("Low level database corruption detected"), - _("GRAMPS has detected a problem in the underlying " - "Berkeley database. Please exit the program, and GRAMPS " - "will attempt to run the recovery repair operation " - "the next time you open this database. If this " - "problem persists, create a new database, import " - "from a backup database, and report the problem to " - "gramps-bugs@lists.sourceforge.net.")) - except (DBAccessError, DBPageNotFoundError,DBInvalidArgError), msg: - QuestionDialog.ErrorDialog( - _("Could not open file: %s") % filename, - str(msg[1])) + QuestionDialog.ErrorDialog( + _("Low level database corruption detected"), + _("GRAMPS has detected a problem in the underlying " + "Berkeley database. Please exit the program, and GRAMPS " + "will attempt to run the recovery repair operation " + "the next time you open this database. If this " + "problem persists, create a new database, import " + "from a backup database, and report the problem to " + "gramps-bugs@lists.sourceforge.net.")) + except (DBAccessError, DBPageNotFoundError, DBInvalidArgError), msg: + QuestionDialog.ErrorDialog( + _("Could not open file: %s") % filename, + str(msg[1])) except Exception: - log.error("Failed to open database.", exc_info=True) + __LOG.error("Failed to open database.", exc_info=True) return True @@ -489,11 +489,11 @@ class DbLoader: self.uistate.progress.show() try: - new_database.load_from(old_database,filename, + new_database.load_from(old_database, filename, self.uistate.pulse_progressbar) old_database.close() except Exception: - log.error("Failed to open database.", exc_info=True) + __LOG.error("Failed to open database.", exc_info=True) return False def do_import(self, dialog, importer, filename): @@ -504,9 +504,9 @@ class DbLoader: try: importer(self.dbstate.db, filename, self.uistate.pulse_progressbar) dirname = os.path.dirname(filename) + os.path.sep - Config.set(Config.RECENT_IMPORT_DIR,dirname) + Config.set(Config.RECENT_IMPORT_DIR, dirname) except Exception: - log.error("Failed to import database.", exc_info=True) + __LOG.error("Failed to import database.", exc_info=True) #------------------------------------------------------------------------- # @@ -549,9 +549,8 @@ def add_gramps_files_filter(chooser): """ mime_filter = gtk.FileFilter() mime_filter.set_name(_('All GRAMPS files')) - mime_filter.add_mime_type(const.app_gramps) - mime_filter.add_mime_type(const.app_gramps_xml) - mime_filter.add_mime_type(const.app_gedcom) + for fmt in __OPEN_FORMATS: + mime_filter.add_mime_type(fmt) chooser.add_filter(mime_filter) def add_grdb_filter(chooser): diff --git a/src/ManagedWindow.py b/src/ManagedWindow.py index 18ca55167..7470419ae 100644 --- a/src/ManagedWindow.py +++ b/src/ManagedWindow.py @@ -20,6 +20,11 @@ # $Id: DisplayState.py 6085 2006-03-05 23:39:20Z dallingham $ +""" +Provides the managed window interface, which allows GRAMPS to track +the create/deletion of dialog windows. +""" + #------------------------------------------------------------------------- # # Standard python modules @@ -77,7 +82,7 @@ class GrampsWindowManager: Lookup can be also done by ID for windows that are identifiable. """ - def __init__(self,uimanager): + def __init__(self, uimanager): # initialize empty tree and lookup dictionary self.uimanager = uimanager self.window_tree = [] @@ -103,31 +108,31 @@ class GrampsWindowManager: self.active = self.uimanager.add_ui_from_string(self.ui) self.uimanager.ensure_update() - def get_item_from_track(self,track): + def get_item_from_track(self, track): # Recursively find an item given track sequence item = self.window_tree for index in track: item = item[index] return item - def get_item_from_id(self,item_id): + def get_item_from_id(self, item_id): # Find an item given its ID # Return None if the ID is not found - return self.id2item.get(item_id,None) + return self.id2item.get(item_id, None) - def close_track(self,track): + def close_track(self, track): # This is called when item needs to be closed # Closes all its children and then removes the item from the tree. try: item = self.get_item_from_track(track) - self.recursive_action(item,self.close_item) + self.recursive_action(item, self.close_item) # This only needs to be run once for the highest level point # to remove. self.remove_item(track) except IndexError: print "Missing item from window manager", track, self.close_item - def recursive_action(self,item,func,*args): + def recursive_action(self, item, func, *args): # This function recursively calls itself over the child items # starting with the given item. # Eventualy, every non-list item (leaf) will be reached @@ -136,23 +141,23 @@ class GrampsWindowManager: # If this item is a branch # close the children except for the first one for sub_item in item[1:]: - self.recursive_action(sub_item,func,*args) + self.recursive_action(sub_item, func, *args) # return the first child last_item = item[0] else: # This item is a leaf -- no children to close # return itself last_item = item - func(last_item,*args) + func(last_item, *args) - def close_item(self,item,*args): + def close_item(self, item, *args): # Given an item, close its window and remove it's ID from the dict if item.window_id: del self.id2item[item.window_id] if item.window: item.window.destroy() - def remove_item(self,track): + def remove_item(self, track): # We need the whole gymnastics below because our item # may actually be a list consisting of a single real # item and empty lists. @@ -166,19 +171,19 @@ class GrampsWindowManager: parent_item.pop(child_in_parent) # Adjust each item following the removed one # so that it's track is down by one on this level - for ix in range(child_in_parent,len(parent_item)): + for ix in range(child_in_parent, len(parent_item)): item = parent_item[ix] - self.recursive_action(item,self.move_item_down,len(track)-1) + self.recursive_action(item, self.move_item_down, len(track)-1) # Rebuild menu self.build_windows_menu() - def move_item_down(self,item,*args): + def move_item_down(self, item, *args): # Given an item and an index, adjust the item's track # by subtracting 1 from that index's level index = args[0] item.track[index] -= 1 - def add_item(self,track,item): + def add_item(self, track, item): # if the item is identifiable then we need to remember # its id so that in the future we recall this window # instead of spawning a new one @@ -208,45 +213,45 @@ class GrampsWindowManager: new_track = track + [len(parent_item)-1] return new_track - def call_back_factory(self,item): + def call_back_factory(self, item): if type(item) != list: - def f(obj): + def func(obj): if item.window_id and self.id2item.get(item.window_id): self.id2item[item.window_id].present() else: - def f(obj): + def func(obj): pass - return f + return func - def generate_id(self,item): + def generate_id(self, item): return str(item.window_id) - def display_menu_list(self,data,action_data,mlist): - if type(mlist) in (list,tuple): + def display_menu_list(self, data, action_data, mlist): + if type(mlist) in (list, tuple): i = mlist[0] idval = self.generate_id(i) data.write('' % idval) - action_data.append(("M:"+idval,None,i.submenu_label, - None,None,None)) + action_data.append(("M:"+idval, None, i.submenu_label, + None, None, None)) else: i = mlist idval = self.generate_id(i) data.write('' % idval) - action_data.append((idval,None,i.menu_label,None,None, + action_data.append((idval, None, i.menu_label, None, None, self.call_back_factory(i))) - if (type(mlist) in (list,tuple)) and (len(mlist) > 1): + if (type(mlist) in (list, tuple)) and (len(mlist) > 1): for i in mlist[1:]: if type(i) == list: - self.display_menu_list(data,action_data,i) + self.display_menu_list(data, action_data, i) else: idval = self.generate_id(i) data.write('' % self.generate_id(i)) - action_data.append((idval,None,i.menu_label,None,None, + action_data.append((idval, None, i.menu_label, None, None, self.call_back_factory(i))) - if type(mlist) in (list,tuple): + if type(mlist) in (list, tuple): data.write('') def build_windows_menu(self): @@ -260,7 +265,7 @@ class GrampsWindowManager: data = StringIO() data.write(_win_top) for i in self.window_tree: - self.display_menu_list(data,action_data,i) + self.display_menu_list(data, action_data, i) data.write(_win_btm) self.ui = data.getvalue() data.close() @@ -307,7 +312,7 @@ class ManagedWindow: """ window_key = self.build_window_key(obj) - menu_label,submenu_label = self.build_menu_names(obj) + menu_label, submenu_label = self.build_menu_names(obj) self._gladeobj = None if uistate.gwm.get_item_from_id(window_key): @@ -318,7 +323,7 @@ class ManagedWindow: self.submenu_label = submenu_label self.menu_label = menu_label self.uistate = uistate - self.track = self.uistate.gwm.add_item(track,self) + self.track = self.uistate.gwm.add_item(track, self) # Work out parent_window if len(self.track) > 1: # We don't belong to the lop level @@ -340,15 +345,15 @@ class ManagedWindow: # On the top level: we use gramps top window self.parent_window = self.uistate.window - def set_window(self,window,title,text,msg=None): + def set_window(self, window, title, text, msg=None): set_titles(window, title, text, msg) self.window = window self.window.connect('delete-event', self.close) - def build_menu_names(self,obj): + def build_menu_names(self, obj): return ('Undefined Menu','Undefined Submenu') - def build_window_key(self,obj): + def build_window_key(self, obj): return id(obj) def define_glade(self, top_module, glade_file=None): @@ -363,7 +368,7 @@ class ManagedWindow: def connect_button(self, button_name, function): assert(self._gladeobj) - self.get_widget(button_name).connect('clicked',function) + self.get_widget(button_name).connect('clicked', function) def show(self): assert self.window, "ManagedWindow: self.window does not exist!" @@ -371,7 +376,7 @@ class ManagedWindow: self.opened = True self.window.show_all() - def close(self,*obj): + def close(self, *obj): """ Close itself. @@ -393,12 +398,12 @@ class ManagedWindow: # Helper functions # #------------------------------------------------------------------------- -def set_titles(window,title,t,msg=None): +def set_titles(window, title, text, msg=None): if title: - title.set_text('%s' % t) + title.set_text('%s' % text) title.set_use_markup(True) if msg: window.set_title('%s - GRAMPS' % msg) else: - window.set_title('%s - GRAMPS' % t) + window.set_title('%s - GRAMPS' % text) window.set_icon_from_file(const.icon)