diff --git a/gramps2/ChangeLog b/gramps2/ChangeLog index 0ac26bfd3..67034c1c1 100644 --- a/gramps2/ChangeLog +++ b/gramps2/ChangeLog @@ -1,3 +1,9 @@ +2004-07-10 Alex Roitman + * NEWS: Update. + * src/Exporter.py: Clean up, add doc strings. + * src/plugins/WriteGedcom.py: Change registration. + Use command-line export for the time being (all defaults). + 2004-07-09 Don Allingham * src/AddMedia.py: Handle the new file selector * src/MediaView.py: redraw list properly diff --git a/gramps2/NEWS b/gramps2/NEWS index ab188d06b..f38ce791a 100644 --- a/gramps2/NEWS +++ b/gramps2/NEWS @@ -1,9 +1,18 @@ Version 1.1.1 -- the "Rat cake, rat sorbet, rat pudding, or strawberry tart" release +* New "Save as" wizard interface: replaces old Export and Save as options. + Note: this is still unfinished at the 1.1.1 release time, please be patient. +* New Find interface for People View. +* Switch to internal IDs. These are universally unique and not user-visible. + The user-visible GRAMPS IDs are kept and are editable now. +* Re-design of Open and Import options. Both will take any format now. + Open will start a new database with the specified data. Import will + incorporate new data into the currently opened database. +* Mime types and icons for gramps package and GEDCOM files. * Pedigree View has person-dependent submenus in the context menu: Spouses, Siblings, Children, and Parents. * Command line arguments handling is back on track. * Sorting improvements. -* Bug fixes. +* Numerous bug fixes. Version 1.1.0 -- the "And now for something completely different" release * Berkeley database backend!!! Many thanks to Billy Earney for db expertise! diff --git a/gramps2/src/Exporter.py b/gramps2/src/Exporter.py index fd567727b..ded379635 100644 --- a/gramps2/src/Exporter.py +++ b/gramps2/src/Exporter.py @@ -68,8 +68,17 @@ class Exporter: """ def __init__(self,parent,parent_window): + """ + Set up the window, the druid, and build all the druid's pages. + Some page elements are left empty, since their contents depends + on the user choices and on the success of the attempted save. + """ self.parent = parent self.parent_window = parent_window + if self.parent.active_person: + self.active_person = self.parent.active_person + else: + self.active_person = self.parent.find_initial_person() self.build_exports() self.confirm_label = gtk.Label() @@ -99,13 +108,23 @@ class Exporter: self.w.show_all() def close(self,obj,obj2=None): + """ + Close and delete handler. + """ self.w.destroy() def help(self,obj): + """ + Help handler. + """ #FIXME: point to the correct section when it exists gnome.help_display('gramps-manual','index') def build_info_page(self): + """ + Build initial druid page with the overall information about the process. + This is a static page, nothing fun here :-) + """ p = gnome.ui.DruidPageEdge(0) p.set_title(_('Saving your data')) p.set_title_color(self.fg_color) @@ -126,6 +145,10 @@ class Exporter: return p def build_last_page(self): + """ + Build the last druid page. The actual text will be added after the + save is performed and the success status us known. + """ p = gnome.ui.DruidPageEdge(1) p.set_title_color(self.fg_color) p.set_bg_color(self.bg_color) @@ -135,6 +158,12 @@ class Exporter: return p def build_confirm_page(self): + """ + Build a save confirmation page. Setting up the actual label + text is deferred until the page is being prepared. This + is necessary, because no choice is made by the user when this + page is set up. + """ p = gnome.ui.DruidPageStandard() p.set_title(_('Final save confirmation')) p.set_title_foreground(self.fg_color) @@ -148,10 +177,16 @@ class Exporter: return p def build_confirm_label(self,obj,obj2): + """ + Build the text of the confirmation label. This should query + the selected options (format, filename) and present the summary + of the proposed action. + """ filename = self.chooser.get_filename() name = os.path.split(filename)[1] folder = os.path.split(filename)[0] - format = self.exports[self.ix][1].replace('_','') + ix = self.get_selected_format_index() + format = self.exports[ix][1].replace('_','') self.confirm_label.set_text( _('The data will be saved as follows:\n\n' @@ -161,16 +196,22 @@ class Exporter: self.confirm_label.set_line_wrap(gtk.TRUE) def save(self,obj,obj2): + """ + Perform the actual Save As/Export operation. + Depending on the success status, set the text for the final page. + """ filename = self.chooser.get_filename() - success = self.exports[self.ix][0](self.parent.db,filename) + ix = self.get_selected_format_index() + success = self.exports[ix][0](self.parent.db,filename) if success: self.last_page.set_title(_('Your data has been saved')) - self.last_page.set_text(_('You may press Apply button ' + self.last_page.set_text(_('The copy of your data has been ' + 'successfully saved. You may press Apply button ' 'now to continue.\n\n' - 'Note: the database opened in your GRAMPS window ' - 'is NOT the file you have just saved. Future editing ' - 'of the currently opened database will not alter the ' - 'copy you have just made. ')) + 'Note: the database currently opened in your GRAMPS ' + 'window is NOT the file you have just saved. ' + 'Future editing of the currently opened database will ' + 'not alter the copy you have just made. ')) else: self.last_page.set_title(_('Saving failed')) self.last_page.set_text(_('There was an error ' @@ -179,6 +220,10 @@ class Exporter: 'of your data that failed to save.')) def build_format_page(self): + """ + Build a page with the table of format radio buttons and + their descriptions. + """ self.format_buttons = [] p = gnome.ui.DruidPageStandard() @@ -203,7 +248,6 @@ class Exporter: button = gtk.RadioButton(group,title) if not group: group = button - button.connect('toggled',self.on_format_toggled) self.format_buttons.append(button) table.attach(button,0,2,2*ix,2*ix+1) label = gtk.Label(description) @@ -212,10 +256,12 @@ class Exporter: box.add(table) box.show_all() - return p def build_file_sel_page(self): + """ + Build a druid page embedding the FileChooserWidget. + """ p = gnome.ui.DruidPageStandard() p.set_title(_('Selecting the file name')) p.set_title_foreground(self.fg_color) @@ -223,12 +269,41 @@ class Exporter: p.set_logo(self.logo) self.chooser = gtk.FileChooserWidget(gtk.FILE_CHOOSER_ACTION_SAVE) - self.on_format_toggled(self.format_buttons[0]) p.append_item("",self.chooser,"") - + p.connect('prepare',self.suggest_filename) return p + def suggest_filename(self,obj,obj2): + """ + Prepare suggested filename and set it in the file chooser. + """ + ix = self.get_selected_format_index() + ext = self.exports[ix][4] + if ext == 'gramps': + new_filename = os.path.expanduser('~/data.gramps') + else: + new_filename = Utils.get_new_filename(ext) + self.chooser.set_filename(new_filename) + self.chooser.set_current_name(os.path.split(new_filename)[1]) + + def get_selected_format_index(self): + """ + Query the format radiobuttons and return the index number + of the selected one. + """ + for ix in range(len(self.format_buttons)): + button = self.format_buttons[ix] + if button.get_active(): + return ix + else: + return 0 + def native_export(self,database,filename): + """ + Native database export. For now, just stupid copying of the present + grdb file under another name. In the future, filter and other + options may be added. + """ try: shutil.copyfile(database.get_save_path(),filename) return 1 @@ -237,16 +312,12 @@ class Exporter: _('System message was: %s') % msg ) return 0 - def on_format_toggled(self,obj): - if not obj.get_active(): - return - self.ix = self.format_buttons.index(obj) - ext = self.exports[self.ix][4] - new_filename = Utils.get_new_filename(ext) - self.chooser.set_filename(new_filename) - self.chooser.set_current_name(os.path.split(new_filename)[1]) - def build_exports(self): + """ + This method builds its own list of available exports. + The list is built from the Plugins._exports list + and from the locally defined exports (i.e. native export defined here). + """ native_title = _('GRAMPS _GRDB database') native_description =_('The GRAMPS GRDB database is a format ' 'that GRAMPS uses to store information. ' diff --git a/gramps2/src/plugins/WriteGedcom.py b/gramps2/src/plugins/WriteGedcom.py index c536a10a7..dc5485c1d 100644 --- a/gramps2/src/plugins/WriteGedcom.py +++ b/gramps2/src/plugins/WriteGedcom.py @@ -538,6 +538,7 @@ class GedcomWriter: self.restrict = 0 self.private = 0 self.copy = 0 + self.images = 0 for p in self.db.get_person_keys(): self.plist[p] = 1 @@ -1230,6 +1231,26 @@ class GedcomWriter: # # #------------------------------------------------------------------------- -from Plugins import register_export +def exportData(database,filename): + ret = 0 + try: + GedcomWriter(database,None,1,filename) + ret = 1 + except: + import DisplayTrace + DisplayTrace.DisplayTrace() + return ret -register_export(writeData,_title_string) +#------------------------------------------------------------------------- +# +# +# +#------------------------------------------------------------------------- +_title = _('GE_DCOM 5.5') +_description = _('GEDCOM is used to transfer data between genealogy programs. ' + 'Nearly all genealogy software will accept a GEDCOM file as input. ') +_config = None +_filename = 'ged' + +from Plugins import register_export +register_export(exportData,_title,_description,_config,_filename)