* 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). svn: r3259
This commit is contained in:
parent
8dfaa35d11
commit
2cd11d3eae
@ -1,3 +1,9 @@
|
|||||||
|
2004-07-10 Alex Roitman <shura@alex.neuro.umn.edu>
|
||||||
|
* 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 <dallingham@users.sourceforge.net>
|
2004-07-09 Don Allingham <dallingham@users.sourceforge.net>
|
||||||
* src/AddMedia.py: Handle the new file selector
|
* src/AddMedia.py: Handle the new file selector
|
||||||
* src/MediaView.py: redraw list properly
|
* src/MediaView.py: redraw list properly
|
||||||
|
11
NEWS
11
NEWS
@ -1,9 +1,18 @@
|
|||||||
Version 1.1.1 -- the "Rat cake, rat sorbet, rat pudding, or strawberry tart" release
|
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:
|
* Pedigree View has person-dependent submenus in the context menu:
|
||||||
Spouses, Siblings, Children, and Parents.
|
Spouses, Siblings, Children, and Parents.
|
||||||
* Command line arguments handling is back on track.
|
* Command line arguments handling is back on track.
|
||||||
* Sorting improvements.
|
* Sorting improvements.
|
||||||
* Bug fixes.
|
* Numerous bug fixes.
|
||||||
|
|
||||||
Version 1.1.0 -- the "And now for something completely different" release
|
Version 1.1.0 -- the "And now for something completely different" release
|
||||||
* Berkeley database backend!!! Many thanks to Billy Earney for db expertise!
|
* Berkeley database backend!!! Many thanks to Billy Earney for db expertise!
|
||||||
|
111
src/Exporter.py
111
src/Exporter.py
@ -68,8 +68,17 @@ class Exporter:
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
def __init__(self,parent,parent_window):
|
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 = parent
|
||||||
self.parent_window = parent_window
|
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.build_exports()
|
||||||
self.confirm_label = gtk.Label()
|
self.confirm_label = gtk.Label()
|
||||||
@ -99,13 +108,23 @@ class Exporter:
|
|||||||
self.w.show_all()
|
self.w.show_all()
|
||||||
|
|
||||||
def close(self,obj,obj2=None):
|
def close(self,obj,obj2=None):
|
||||||
|
"""
|
||||||
|
Close and delete handler.
|
||||||
|
"""
|
||||||
self.w.destroy()
|
self.w.destroy()
|
||||||
|
|
||||||
def help(self,obj):
|
def help(self,obj):
|
||||||
|
"""
|
||||||
|
Help handler.
|
||||||
|
"""
|
||||||
#FIXME: point to the correct section when it exists
|
#FIXME: point to the correct section when it exists
|
||||||
gnome.help_display('gramps-manual','index')
|
gnome.help_display('gramps-manual','index')
|
||||||
|
|
||||||
def build_info_page(self):
|
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 = gnome.ui.DruidPageEdge(0)
|
||||||
p.set_title(_('Saving your data'))
|
p.set_title(_('Saving your data'))
|
||||||
p.set_title_color(self.fg_color)
|
p.set_title_color(self.fg_color)
|
||||||
@ -126,6 +145,10 @@ class Exporter:
|
|||||||
return p
|
return p
|
||||||
|
|
||||||
def build_last_page(self):
|
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 = gnome.ui.DruidPageEdge(1)
|
||||||
p.set_title_color(self.fg_color)
|
p.set_title_color(self.fg_color)
|
||||||
p.set_bg_color(self.bg_color)
|
p.set_bg_color(self.bg_color)
|
||||||
@ -135,6 +158,12 @@ class Exporter:
|
|||||||
return p
|
return p
|
||||||
|
|
||||||
def build_confirm_page(self):
|
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 = gnome.ui.DruidPageStandard()
|
||||||
p.set_title(_('Final save confirmation'))
|
p.set_title(_('Final save confirmation'))
|
||||||
p.set_title_foreground(self.fg_color)
|
p.set_title_foreground(self.fg_color)
|
||||||
@ -148,10 +177,16 @@ class Exporter:
|
|||||||
return p
|
return p
|
||||||
|
|
||||||
def build_confirm_label(self,obj,obj2):
|
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()
|
filename = self.chooser.get_filename()
|
||||||
name = os.path.split(filename)[1]
|
name = os.path.split(filename)[1]
|
||||||
folder = os.path.split(filename)[0]
|
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(
|
self.confirm_label.set_text(
|
||||||
_('The data will be saved as follows:\n\n'
|
_('The data will be saved as follows:\n\n'
|
||||||
@ -161,16 +196,22 @@ class Exporter:
|
|||||||
self.confirm_label.set_line_wrap(gtk.TRUE)
|
self.confirm_label.set_line_wrap(gtk.TRUE)
|
||||||
|
|
||||||
def save(self,obj,obj2):
|
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()
|
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:
|
if success:
|
||||||
self.last_page.set_title(_('Your data has been saved'))
|
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'
|
'now to continue.\n\n'
|
||||||
'Note: the database opened in your GRAMPS window '
|
'Note: the database currently opened in your GRAMPS '
|
||||||
'is NOT the file you have just saved. Future editing '
|
'window is NOT the file you have just saved. '
|
||||||
'of the currently opened database will not alter the '
|
'Future editing of the currently opened database will '
|
||||||
'copy you have just made. '))
|
'not alter the copy you have just made. '))
|
||||||
else:
|
else:
|
||||||
self.last_page.set_title(_('Saving failed'))
|
self.last_page.set_title(_('Saving failed'))
|
||||||
self.last_page.set_text(_('There was an error '
|
self.last_page.set_text(_('There was an error '
|
||||||
@ -179,6 +220,10 @@ class Exporter:
|
|||||||
'of your data that failed to save.'))
|
'of your data that failed to save.'))
|
||||||
|
|
||||||
def build_format_page(self):
|
def build_format_page(self):
|
||||||
|
"""
|
||||||
|
Build a page with the table of format radio buttons and
|
||||||
|
their descriptions.
|
||||||
|
"""
|
||||||
self.format_buttons = []
|
self.format_buttons = []
|
||||||
|
|
||||||
p = gnome.ui.DruidPageStandard()
|
p = gnome.ui.DruidPageStandard()
|
||||||
@ -203,7 +248,6 @@ class Exporter:
|
|||||||
button = gtk.RadioButton(group,title)
|
button = gtk.RadioButton(group,title)
|
||||||
if not group:
|
if not group:
|
||||||
group = button
|
group = button
|
||||||
button.connect('toggled',self.on_format_toggled)
|
|
||||||
self.format_buttons.append(button)
|
self.format_buttons.append(button)
|
||||||
table.attach(button,0,2,2*ix,2*ix+1)
|
table.attach(button,0,2,2*ix,2*ix+1)
|
||||||
label = gtk.Label(description)
|
label = gtk.Label(description)
|
||||||
@ -212,10 +256,12 @@ class Exporter:
|
|||||||
|
|
||||||
box.add(table)
|
box.add(table)
|
||||||
box.show_all()
|
box.show_all()
|
||||||
|
|
||||||
return p
|
return p
|
||||||
|
|
||||||
def build_file_sel_page(self):
|
def build_file_sel_page(self):
|
||||||
|
"""
|
||||||
|
Build a druid page embedding the FileChooserWidget.
|
||||||
|
"""
|
||||||
p = gnome.ui.DruidPageStandard()
|
p = gnome.ui.DruidPageStandard()
|
||||||
p.set_title(_('Selecting the file name'))
|
p.set_title(_('Selecting the file name'))
|
||||||
p.set_title_foreground(self.fg_color)
|
p.set_title_foreground(self.fg_color)
|
||||||
@ -223,12 +269,41 @@ class Exporter:
|
|||||||
p.set_logo(self.logo)
|
p.set_logo(self.logo)
|
||||||
|
|
||||||
self.chooser = gtk.FileChooserWidget(gtk.FILE_CHOOSER_ACTION_SAVE)
|
self.chooser = gtk.FileChooserWidget(gtk.FILE_CHOOSER_ACTION_SAVE)
|
||||||
self.on_format_toggled(self.format_buttons[0])
|
|
||||||
p.append_item("",self.chooser,"")
|
p.append_item("",self.chooser,"")
|
||||||
|
p.connect('prepare',self.suggest_filename)
|
||||||
return p
|
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):
|
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:
|
try:
|
||||||
shutil.copyfile(database.get_save_path(),filename)
|
shutil.copyfile(database.get_save_path(),filename)
|
||||||
return 1
|
return 1
|
||||||
@ -237,16 +312,12 @@ class Exporter:
|
|||||||
_('System message was: %s') % msg )
|
_('System message was: %s') % msg )
|
||||||
return 0
|
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):
|
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_title = _('GRAMPS _GRDB database')
|
||||||
native_description =_('The GRAMPS GRDB database is a format '
|
native_description =_('The GRAMPS GRDB database is a format '
|
||||||
'that GRAMPS uses to store information. '
|
'that GRAMPS uses to store information. '
|
||||||
|
@ -538,6 +538,7 @@ class GedcomWriter:
|
|||||||
self.restrict = 0
|
self.restrict = 0
|
||||||
self.private = 0
|
self.private = 0
|
||||||
self.copy = 0
|
self.copy = 0
|
||||||
|
self.images = 0
|
||||||
|
|
||||||
for p in self.db.get_person_keys():
|
for p in self.db.get_person_keys():
|
||||||
self.plist[p] = 1
|
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)
|
||||||
|
Loading…
Reference in New Issue
Block a user