* src/Plugins.py: Add native_format flag to import plugin registration.

* src/ReadXML.py, src/ReadGedcom.py: Register as native formats
to prevent loading twice on File->Open.
* src/data/gramps.schemas: Add keys for last import and export dirs.
* src/GrampsCfg.py (get_last_import_dir, save_last_import_dir,
get_last_export_dir, save_last_export_dir): Add functions.
* src/Exportder.py (suggest_filename): Try last export and last
import folders before falling back to Home; (save): Save export folder.
* src/Utils.py (get_new_filename): Add optional folder argument.
* src/DbPrompter.py (ExistingDbPrompter.chooser): Only add
importers for non-native formats, the rest is already taken care of;
Try last file, last import, last export, then home folders;
(ImportDbPrompter.chooser): Save import folder; Try last import,
last file, last export, then home folders.
(NewNativeDbPrompter): Try last file, last import, last export folders,
then fall back to home.


svn: r3493
This commit is contained in:
Alex Roitman 2004-08-23 22:05:55 +00:00
parent 0153cf36bc
commit fb8b2ff943
8 changed files with 110 additions and 32 deletions

View File

@ -19,6 +19,23 @@
* src/plugins/WebPage.py: Use gramps ID for naming the files * src/plugins/WebPage.py: Use gramps ID for naming the files
and creating links. and creating links.
* src/Plugins.py: Add native_format flag to import plugin registration.
* src/ReadXML.py, src/ReadGedcom.py: Register as native formats
to prevent loading twice on File->Open.
* src/data/gramps.schemas: Add keys for last import and export dirs.
* src/GrampsCfg.py (get_last_import_dir, save_last_import_dir,
get_last_export_dir, save_last_export_dir): Add functions.
* src/Exportder.py (suggest_filename): Try last export and last
import folders before falling back to Home; (save): Save export folder.
* src/Utils.py (get_new_filename): Add optional folder argument.
* src/DbPrompter.py (ExistingDbPrompter.chooser): Only add
importers for non-native formats, the rest is already taken care of;
Try last file, last import, last export, then home folders;
(ImportDbPrompter.chooser): Save import folder; Try last import,
last file, last export, then home folders.
(NewNativeDbPrompter): Try last file, last import, last export folders,
then fall back to home.
2004-08-23 Tim Waugh <twaugh@redhat.com> 2004-08-23 Tim Waugh <twaugh@redhat.com>
* install-sh: Removed this generated file. * install-sh: Removed this generated file.

View File

@ -51,6 +51,7 @@ import Plugins
import GrampsBSDDB import GrampsBSDDB
import GrampsXMLDB import GrampsXMLDB
import GrampsGEDDB import GrampsGEDDB
import GrampsCfg
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
# #
@ -147,36 +148,54 @@ class ExistingDbPrompter:
# Always add native format filter # Always add native format filter
mime_filter = gtk.FileFilter() mime_filter = gtk.FileFilter()
mime_filter.set_name(_('GEDCOM')) mime_filter.set_name(_('GEDCOM files'))
mime_filter.add_mime_type(const.app_gedcom) mime_filter.add_mime_type(const.app_gedcom)
choose.add_filter(mime_filter) choose.add_filter(mime_filter)
# Add more data type selections if opening existing db # Add more data type selections if opening existing db
for (importData,mime_filter,mime_type) in Plugins._imports: for (importData,mime_filter,mime_type,native_format) in Plugins._imports:
choose.add_filter(mime_filter) if not native_format:
choose.add_filter(mime_filter)
# Suggested folder: try last open file, last import, last export,
# then home.
default_dir = os.path.split(GrampsCfg.get_lastfile())[0] + os.path.sep
if len(default_dir)<=1:
default_dir = GrampsCfg.get_last_import_dir()
if len(default_dir)<=1:
default_dir = GrampsCfg.get_last_export_dir()
if len(default_dir)<=1:
default_dir = '~/'
choose.set_current_folder(default_dir)
response = choose.run() response = choose.run()
if response == gtk.RESPONSE_OK: if response == gtk.RESPONSE_OK:
filename = choose.get_filename() filename = choose.get_filename()
filetype = gnome.vfs.get_mime_type(filename) filetype = gnome.vfs.get_mime_type(filename)
(the_path,the_file) = os.path.split(filename)
GrampsCfg.save_last_import_dir(the_path)
if filetype == const.app_gramps: if filetype == const.app_gramps:
choose.destroy() choose.destroy()
self.parent.db = GrampsBSDDB.GrampsBSDDB() self.parent.db = GrampsBSDDB.GrampsBSDDB()
self.parent.read_file(filename) self.parent.read_file(filename)
return 1 return 1
if filetype == const.app_gramps_xml: elif filetype == const.app_gramps_xml:
choose.destroy() choose.destroy()
self.parent.db = GrampsXMLDB.GrampsXMLDB() self.parent.db = GrampsXMLDB.GrampsXMLDB()
self.parent.read_file(filename) self.parent.read_file(filename)
return 1 return 1
if filetype == const.app_gedcom: elif filetype == const.app_gedcom:
choose.destroy() choose.destroy()
self.parent.db = GrampsGEDDB.GrampsGEDDB() self.parent.db = GrampsGEDDB.GrampsGEDDB()
self.parent.read_file(filename) self.parent.read_file(filename)
return 1 return 1
(junk,the_file) = os.path.split(filename)
for (importData,mime_filter,mime_type) in Plugins._imports: # The above native formats did not work, so we need to
# look up the importer for this format
# and create an empty native database to import data in
for (importData,mime_filter,mime_type,native_format) in Plugins._imports:
if filetype == mime_type or the_file == mime_type: if filetype == mime_type or the_file == mime_type:
choose.destroy() choose.destroy()
QuestionDialog.OkDialog( _("Opening non-native format"), QuestionDialog.OkDialog( _("Opening non-native format"),
@ -240,17 +259,27 @@ class ImportDbPrompter:
choose.add_filter(mime_filter) choose.add_filter(mime_filter)
# FIXME: Uncomment when we have grdb importer # FIXME: Uncomment when we have grdb importer
#
# # Always add native format filter # # Always add native format filter
# filter = gtk.FileFilter() # mime_filter = gtk.FileFilter()
# filter.set_name(_('GRAMPS databases')) # mime_filter.set_name(_('GRAMPS databases'))
# filter.add_mime_type('application/x-gramps') # mime_filter.add_mime_type(const.app_gramps)
# choose.add_filter(filter) # choose.add_filter(mime_filter)
# Add more data type selections if opening existing db # Add more data type selections if opening existing db
for (importData,mime_filter,mime_type) in Plugins._imports: for (importData,mime_filter,mime_type,native_format) in Plugins._imports:
choose.add_filter(mime_filter) choose.add_filter(mime_filter)
# Suggested folder: try last open file, import, then last export,
# then home.
default_dir = GrampsCfg.get_last_import_dir()
if len(default_dir)<=1:
default_dir = os.path.split(GrampsCfg.get_lastfile())[0] + os.path.sep
if len(default_dir)<=1:
default_dir = GrampsCfg.get_last_export_dir()
if len(default_dir)<=1:
default_dir = '~/'
choose.set_current_folder(default_dir)
response = choose.run() response = choose.run()
if response == gtk.RESPONSE_OK: if response == gtk.RESPONSE_OK:
filename = choose.get_filename() filename = choose.get_filename()
@ -261,8 +290,10 @@ class ImportDbPrompter:
# choose.destroy() # choose.destroy()
# self.parent.read_file(filename) # self.parent.read_file(filename)
# return 1 # return 1
(junk,the_file) = os.path.split(filename)
for (importData,mime_filter,mime_type) in Plugins._imports: (the_path,the_file) = os.path.split(filename)
GrampsCfg.save_last_import_dir(the_path)
for (importData,mime_filter,mime_type,native_format) in Plugins._imports:
if filetype == mime_type or the_file == mime_type: if filetype == mime_type or the_file == mime_type:
choose.destroy() choose.destroy()
importData(self.parent.db,filename) importData(self.parent.db,filename)
@ -276,7 +307,6 @@ class ImportDbPrompter:
choose.destroy() choose.destroy()
return 0 return 0
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
# #
# NewNativeDbPrompter # NewNativeDbPrompter
@ -316,12 +346,22 @@ class NewNativeDbPrompter:
# Always add native format filter # Always add native format filter
mime_filter = gtk.FileFilter() mime_filter = gtk.FileFilter()
mime_filter.set_name(_('GRAMPS databases')) mime_filter.set_name(_('GRAMPS databases'))
mime_filter.add_mime_type('application/x-gramps') mime_filter.add_mime_type(const.app_gramps)
choose.add_filter(mime_filter) choose.add_filter(mime_filter)
new_filename = Utils.get_new_filename('grdb') # Suggested folder: try last open file, import, then last export,
# then home.
default_dir = os.path.split(GrampsCfg.get_lastfile())[0] + os.path.sep
if len(default_dir)<=1:
default_dir = GrampsCfg.get_last_import_dir()
if len(default_dir)<=1:
default_dir = GrampsCfg.get_last_export_dir()
if len(default_dir)<=1:
default_dir = '~/'
choose.set_filename(new_filename) new_filename = Utils.get_new_filename('grdb',default_dir)
choose.set_current_folder(default_dir)
choose.set_current_name(os.path.split(new_filename)[1]) choose.set_current_name(os.path.split(new_filename)[1])
response = choose.run() response = choose.run()

View File

@ -50,6 +50,7 @@ import const
import Utils import Utils
import Plugins import Plugins
import QuestionDialog import QuestionDialog
import GrampsCfg
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
# #
@ -203,6 +204,7 @@ class Exporter:
Depending on the success status, set the text for the final page. Depending on the success status, set the text for the final page.
""" """
filename = self.chooser.get_filename() filename = self.chooser.get_filename()
GrampsCfg.save_last_export_dir(os.path.split(filename)[0])
ix = self.get_selected_format_index() ix = self.get_selected_format_index()
if self.exports[ix][3]: if self.exports[ix][3]:
success = self.exports[ix][0](self.parent.db,filename,self.person, success = self.exports[ix][0](self.parent.db,filename,self.person,
@ -329,11 +331,19 @@ class Exporter:
""" """
ix = self.get_selected_format_index() ix = self.get_selected_format_index()
ext = self.exports[ix][4] ext = self.exports[ix][4]
# Suggested folder: try last export, then last import, then home.
default_dir = GrampsCfg.get_last_export_dir()
if len(default_dir)<=1:
default_dir = GrampsCfg.get_last_import_dir()
if len(default_dir)<=1:
default_dir = '~/'
if ext == 'gramps': if ext == 'gramps':
new_filename = os.path.expanduser('~/data.gramps') new_filename = os.path.expanduser(default_dir + 'data.gramps')
else: else:
new_filename = Utils.get_new_filename(ext) new_filename = Utils.get_new_filename(ext,default_dir)
self.chooser.set_filename(new_filename) self.chooser.set_current_folder(default_dir)
self.chooser.set_current_name(os.path.split(new_filename)[1]) self.chooser.set_current_name(os.path.split(new_filename)[1])
def get_selected_format_index(self): def get_selected_format_index(self):

View File

@ -189,6 +189,18 @@ def get_lastfile():
def save_last_file(val): def save_last_file(val):
set_string("/apps/gramps/paths/recent-file",val) set_string("/apps/gramps/paths/recent-file",val)
def get_last_import_dir():
return get_string("/apps/gramps/paths/recent-import-dir")
def save_last_import_dir(val):
set_string_as_path("/apps/gramps/paths/recent-import-dir",val)
def get_last_export_dir():
return get_string("/apps/gramps/paths/recent-export-dir")
def save_last_export_dir(val):
set_string_as_path("/apps/gramps/paths/recent-export-dir",val)
def get_report_dir(): def get_report_dir():
return get_string("/apps/gramps/paths/report-directory") return get_string("/apps/gramps/paths/report-directory")

View File

@ -468,10 +468,10 @@ def register_export(exportData,_title,_description='',_config=None,_filename='')
if _description and _filename: if _description and _filename:
_exports.append((exportData,_title,_description,_config,_filename)) _exports.append((exportData,_title,_description,_config,_filename))
def register_import(task, ffilter, mime=None): def register_import(task, ffilter, mime=None, native_format=0):
"""Register an import filter, taking the task and file filter""" """Register an import filter, taking the task and file filter"""
if mime: if mime:
_imports.append((task, ffilter, mime)) _imports.append((task, ffilter, mime, native_format))
def register_report(task, name, def register_report(task, name,
category=_("Uncategorized"), category=_("Uncategorized"),

View File

@ -1860,4 +1860,4 @@ _filter.add_mime_type(_mime_type)
# #
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
from Plugins import register_import from Plugins import register_import
register_import(importData,_filter,_mime_type) register_import(importData,_filter,_mime_type,1)

View File

@ -1221,4 +1221,4 @@ _filter.set_name(_('GRAMPS XML databases'))
_filter.add_pattern(_mime_type) _filter.add_pattern(_mime_type)
from Plugins import register_import from Plugins import register_import
register_import(importData,_filter,_mime_type) register_import(importData,_filter,_mime_type,1)

View File

@ -551,11 +551,10 @@ def create_id():
# #
# #
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
_NEW_NAME_PATTERN = '~/Untitled_%d.%s' _NEW_NAME_PATTERN = '%sUntitled_%d.%s'
def get_new_filename(ext): def get_new_filename(ext,folder='~/'):
ix = 1 ix = 1
while os.path.isfile(os.path.expanduser(_NEW_NAME_PATTERN % (ix,ext) )): while os.path.isfile(os.path.expanduser(_NEW_NAME_PATTERN % (folder,ix,ext) )):
ix = ix + 1 ix = ix + 1
return os.path.expanduser(_NEW_NAME_PATTERN % (ix,ext)) return os.path.expanduser(_NEW_NAME_PATTERN % (folder,ix,ext))