* src/GnomeMime.py: GNOME based mime handling
* src/PythonMime.py: Python based mime handling * src/AddMedia.py: gnome code isolation * src/DisplayState.py: gnome code isolation * src/EditPerson.py: gnome code isolation * src/EditRepository.py: gnome code isolation * src/GnomeMime.py: gnome code isolation * src/GrampsDisplay.py: gnome code isolation * src/GrampsMime.py: gnome code isolation * src/ImageSelect.py: gnome code isolation * src/ImgManip.py: gnome code isolation * src/PluginMgr.py: toolbar/menu support * src/Plugins.py: toolbar/menu support * src/RepositoryRefEdit.py: gnome code isolation * src/SelectObject.py: gnome code isolation * src/Utils.py: gnome code isolation * src/ViewManager.py: toolbar/menu support, gnome code isolation * src/GrampsDb/_GrampsBSDDB.py: unified messaging * src/GrampsDb/_ReadGedcom.py: unified messaging * src/plugins/WriteFtree.py: gnome code isolation svn: r5636
This commit is contained in:
parent
fb6b3fe2d7
commit
9b4536ee72
@ -1,3 +1,25 @@
|
|||||||
|
2005-12-28 Don Allingham <don@gramps-project.org>
|
||||||
|
* src/GnomeMime.py: GNOME based mime handling
|
||||||
|
* src/PythonMime.py: Python based mime handling
|
||||||
|
* src/AddMedia.py: gnome code isolation
|
||||||
|
* src/DisplayState.py: gnome code isolation
|
||||||
|
* src/EditPerson.py: gnome code isolation
|
||||||
|
* src/EditRepository.py: gnome code isolation
|
||||||
|
* src/GnomeMime.py: gnome code isolation
|
||||||
|
* src/GrampsDisplay.py: gnome code isolation
|
||||||
|
* src/GrampsMime.py: gnome code isolation
|
||||||
|
* src/ImageSelect.py: gnome code isolation
|
||||||
|
* src/ImgManip.py: gnome code isolation
|
||||||
|
* src/PluginMgr.py: toolbar/menu support
|
||||||
|
* src/Plugins.py: toolbar/menu support
|
||||||
|
* src/RepositoryRefEdit.py: gnome code isolation
|
||||||
|
* src/SelectObject.py: gnome code isolation
|
||||||
|
* src/Utils.py: gnome code isolation
|
||||||
|
* src/ViewManager.py: toolbar/menu support, gnome code isolation
|
||||||
|
* src/GrampsDb/_GrampsBSDDB.py: unified messaging
|
||||||
|
* src/GrampsDb/_ReadGedcom.py: unified messaging
|
||||||
|
* src/plugins/WriteFtree.py: gnome code isolation
|
||||||
|
|
||||||
2005-12-25 Don Allingham <don@gramps-project.org>
|
2005-12-25 Don Allingham <don@gramps-project.org>
|
||||||
* src/Bookmarks.py: remove debugging statements
|
* src/Bookmarks.py: remove debugging statements
|
||||||
* src/DisplayState.py: remove extra rebuild request
|
* src/DisplayState.py: remove extra rebuild request
|
||||||
|
@ -162,7 +162,7 @@ class AddMediaObject:
|
|||||||
if mtype and mtype.startswith("image"):
|
if mtype and mtype.startswith("image"):
|
||||||
image = RelImage.scale_image(filename,const.thumbScale)
|
image = RelImage.scale_image(filename,const.thumbScale)
|
||||||
else:
|
else:
|
||||||
image = Utils.find_mime_type_pixbuf(mtype)
|
image = GrampsMime.find_mime_type_pixbuf(mtype)
|
||||||
self.image.set_from_pixbuf(image)
|
self.image.set_from_pixbuf(image)
|
||||||
|
|
||||||
def run(self):
|
def run(self):
|
||||||
|
@ -43,6 +43,7 @@ import gtk
|
|||||||
import GrampsDb
|
import GrampsDb
|
||||||
import GrampsKeys
|
import GrampsKeys
|
||||||
import NameDisplay
|
import NameDisplay
|
||||||
|
import GrampsMime
|
||||||
|
|
||||||
#-------------------------------------------------------------------------
|
#-------------------------------------------------------------------------
|
||||||
#
|
#
|
||||||
@ -352,10 +353,6 @@ _rct_btm = '</menu></menu></menubar></ui>'
|
|||||||
|
|
||||||
import RecentFiles
|
import RecentFiles
|
||||||
import os
|
import os
|
||||||
try:
|
|
||||||
from gnomevfs import get_mime_type
|
|
||||||
except:
|
|
||||||
from gnome.vfs import get_mime_type
|
|
||||||
|
|
||||||
class RecentDocsMenu:
|
class RecentDocsMenu:
|
||||||
def __init__(self,uimanager, state, fileopen):
|
def __init__(self,uimanager, state, fileopen):
|
||||||
@ -393,7 +390,7 @@ class RecentDocsMenu:
|
|||||||
for item in rfiles:
|
for item in rfiles:
|
||||||
try:
|
try:
|
||||||
filename = os.path.basename(item.get_path()).replace('_','__')
|
filename = os.path.basename(item.get_path()).replace('_','__')
|
||||||
filetype = get_mime_type(item.get_path())
|
filetype = GrampsMime.get_type(item.get_path())
|
||||||
action_id = "RecentMenu%d" % count
|
action_id = "RecentMenu%d" % count
|
||||||
f.write('<menuitem action="%s"/>' % action_id)
|
f.write('<menuitem action="%s"/>' % action_id)
|
||||||
actions.append((action_id,None,filename,None,None,
|
actions.append((action_id,None,filename,None,None,
|
||||||
|
@ -41,7 +41,6 @@ from cgi import escape
|
|||||||
import gtk
|
import gtk
|
||||||
import gtk.glade
|
import gtk.glade
|
||||||
import gobject
|
import gobject
|
||||||
import gnome
|
|
||||||
import gtk.gdk
|
import gtk.gdk
|
||||||
|
|
||||||
#-------------------------------------------------------------------------
|
#-------------------------------------------------------------------------
|
||||||
@ -502,7 +501,7 @@ class EditPerson(DisplayState.ManagedWindow):
|
|||||||
if mtype[0:5] == "image":
|
if mtype[0:5] == "image":
|
||||||
image = ImgManip.get_thumbnail_image(obj.get_path())
|
image = ImgManip.get_thumbnail_image(obj.get_path())
|
||||||
else:
|
else:
|
||||||
image = Utils.find_mime_type_pixbuf(mtype)
|
image = GrampsMime.find_mime_type_pixbuf(mtype)
|
||||||
if not image:
|
if not image:
|
||||||
image = gtk.gdk.pixbuf_new_from_file(const.icon)
|
image = gtk.gdk.pixbuf_new_from_file(const.icon)
|
||||||
return image
|
return image
|
||||||
|
@ -35,7 +35,6 @@ from gettext import gettext as _
|
|||||||
import gobject
|
import gobject
|
||||||
import gtk.glade
|
import gtk.glade
|
||||||
import gtk.gdk
|
import gtk.gdk
|
||||||
import gnome
|
|
||||||
|
|
||||||
#-------------------------------------------------------------------------
|
#-------------------------------------------------------------------------
|
||||||
#
|
#
|
||||||
@ -50,6 +49,7 @@ import RelLib
|
|||||||
import NameDisplay
|
import NameDisplay
|
||||||
import AutoComp
|
import AutoComp
|
||||||
import RepositoryRefEdit
|
import RepositoryRefEdit
|
||||||
|
import GrampsDisplay
|
||||||
|
|
||||||
#-------------------------------------------------------------------------
|
#-------------------------------------------------------------------------
|
||||||
#
|
#
|
||||||
@ -418,7 +418,7 @@ class EditRepository:
|
|||||||
|
|
||||||
def on_help_clicked(self,obj):
|
def on_help_clicked(self,obj):
|
||||||
"""Display the relevant portion of GRAMPS manual"""
|
"""Display the relevant portion of GRAMPS manual"""
|
||||||
gnome.help_display('gramps-manual','adv-src')
|
GrampsDisplay.help('adv-src')
|
||||||
|
|
||||||
def close(self,obj):
|
def close(self,obj):
|
||||||
self.close_child_windows()
|
self.close_child_windows()
|
||||||
|
80
gramps2/src/GnomeMime.py
Normal file
80
gramps2/src/GnomeMime.py
Normal file
@ -0,0 +1,80 @@
|
|||||||
|
#
|
||||||
|
# Gramps - a GTK+/GNOME based genealogy program
|
||||||
|
#
|
||||||
|
# Copyright (C) 2000-2004 Donald N. Allingham
|
||||||
|
#
|
||||||
|
# This program is free software; you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
# the Free Software Foundation; either version 2 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with this program; if not, write to the Free Software
|
||||||
|
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
#
|
||||||
|
|
||||||
|
try:
|
||||||
|
from gnomevfs import mime_get_short_list_applications, mime_get_description, get_mime_type
|
||||||
|
except:
|
||||||
|
from gnome.vfs import mime_get_short_list_applications, mime_get_description, get_mime_type
|
||||||
|
|
||||||
|
from gettext import gettext as _
|
||||||
|
|
||||||
|
def get_application(type):
|
||||||
|
"""Returns the application command and application name of the
|
||||||
|
specified mime type"""
|
||||||
|
try:
|
||||||
|
applist = mime_get_short_list_applications(type)
|
||||||
|
if applist:
|
||||||
|
prog = applist[0]
|
||||||
|
return (prog[2],prog[1])
|
||||||
|
else:
|
||||||
|
return None
|
||||||
|
except:
|
||||||
|
return None
|
||||||
|
|
||||||
|
def get_description(type):
|
||||||
|
"""Returns the description of the specfied mime type"""
|
||||||
|
try:
|
||||||
|
return mime_get_description(type)
|
||||||
|
except:
|
||||||
|
return _("unknown")
|
||||||
|
|
||||||
|
def get_type(file):
|
||||||
|
"""Returns the mime type of the specified file"""
|
||||||
|
try:
|
||||||
|
return get_mime_type(file)
|
||||||
|
except:
|
||||||
|
return _('unknown')
|
||||||
|
|
||||||
|
def mime_type_is_defined(type):
|
||||||
|
""""Return True if a description for a mime type exists"""
|
||||||
|
try:
|
||||||
|
mime_get_description(type)
|
||||||
|
return True
|
||||||
|
except:
|
||||||
|
return False
|
||||||
|
|
||||||
|
_icon_theme = gtk.icon_theme_get_default()
|
||||||
|
|
||||||
|
def find_mime_type_pixbuf(mime_type):
|
||||||
|
try:
|
||||||
|
icontmp = mime_type.replace('/','-')
|
||||||
|
newicon = "gnome-mime-%s" % icontmp
|
||||||
|
try:
|
||||||
|
return _icon_theme.load_icon(newicon,48,0)
|
||||||
|
except:
|
||||||
|
icontmp = mime_type.split('/')[0]
|
||||||
|
try:
|
||||||
|
newicon = "gnome-mime-%s" % icontmp
|
||||||
|
return _icon_theme.load_icon(newicon,48,0)
|
||||||
|
except:
|
||||||
|
return gtk.gdk.pixbuf_new_from_file(const.icon)
|
||||||
|
except:
|
||||||
|
return gtk.gdk.pixbuf_new_from_file(const.icon)
|
||||||
|
|
@ -179,6 +179,8 @@ class GrampsBSDDB(GrampsDbBase):
|
|||||||
|
|
||||||
self.readonly = mode == "r"
|
self.readonly = mode == "r"
|
||||||
|
|
||||||
|
callback(0.25)
|
||||||
|
|
||||||
self.env = db.DBEnv()
|
self.env = db.DBEnv()
|
||||||
self.env.set_cachesize(0,0x2000000) # 2MB
|
self.env.set_cachesize(0,0x2000000) # 2MB
|
||||||
flags = db.DB_CREATE|db.DB_INIT_MPOOL|db.DB_PRIVATE
|
flags = db.DB_CREATE|db.DB_INIT_MPOOL|db.DB_PRIVATE
|
||||||
@ -275,7 +277,6 @@ class GrampsBSDDB(GrampsDbBase):
|
|||||||
"reference_map_referenced_map",
|
"reference_map_referenced_map",
|
||||||
db.DB_BTREE, flags=openflags)
|
db.DB_BTREE, flags=openflags)
|
||||||
|
|
||||||
|
|
||||||
if not self.readonly:
|
if not self.readonly:
|
||||||
self.person_map.associate(self.surnames, find_surname, openflags)
|
self.person_map.associate(self.surnames, find_surname, openflags)
|
||||||
self.person_map.associate(self.id_trans, find_idmap, openflags)
|
self.person_map.associate(self.id_trans, find_idmap, openflags)
|
||||||
@ -298,6 +299,8 @@ class GrampsBSDDB(GrampsDbBase):
|
|||||||
self.undodb = db.DB()
|
self.undodb = db.DB()
|
||||||
self.undodb.open(self.undolog, db.DB_RECNO, db.DB_CREATE)
|
self.undodb.open(self.undolog, db.DB_RECNO, db.DB_CREATE)
|
||||||
|
|
||||||
|
callback(0.5)
|
||||||
|
|
||||||
self.metadata = self.dbopen(name, "meta")
|
self.metadata = self.dbopen(name, "meta")
|
||||||
self.bookmarks = self.metadata.get('bookmarks')
|
self.bookmarks = self.metadata.get('bookmarks')
|
||||||
self.family_event_names = sets.Set(self.metadata.get('fevent_names',[]))
|
self.family_event_names = sets.Set(self.metadata.get('fevent_names',[]))
|
||||||
|
@ -164,7 +164,7 @@ def importData(database, filename, cb=None, use_trans=True):
|
|||||||
f.close()
|
f.close()
|
||||||
|
|
||||||
if not gramps and ansel:
|
if not gramps and ansel:
|
||||||
glade_file = "%s/gedcomimport.glade" % os.path.dirname(__file__)
|
glade_file = "%s/../gedcomimport.glade" % os.path.dirname(__file__)
|
||||||
top = gtk.glade.XML(glade_file,'encoding','gramps')
|
top = gtk.glade.XML(glade_file,'encoding','gramps')
|
||||||
code = top.get_widget('codeset')
|
code = top.get_widget('codeset')
|
||||||
code.set_active(0)
|
code.set_active(0)
|
||||||
@ -180,9 +180,9 @@ def importData(database, filename, cb=None, use_trans=True):
|
|||||||
def import2(database, filename, cb, codeset, use_trans):
|
def import2(database, filename, cb, codeset, use_trans):
|
||||||
# add some checking here
|
# add some checking here
|
||||||
|
|
||||||
glade_file = "%s/gedcomimport.glade" % os.path.dirname(__file__)
|
glade_file = "%s/../gedcomimport.glade" % os.path.dirname(__file__)
|
||||||
if not os.path.isfile(glade_file):
|
if not os.path.isfile(glade_file):
|
||||||
glade_file = "plugins/gedcomimport.glade"
|
glade_file = "../gedcomimport.glade"
|
||||||
|
|
||||||
statusTop = gtk.glade.XML(glade_file,"status","gramps")
|
statusTop = gtk.glade.XML(glade_file,"status","gramps")
|
||||||
status_window = statusTop.get_widget("status")
|
status_window = statusTop.get_widget("status")
|
||||||
|
@ -18,18 +18,19 @@
|
|||||||
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
#
|
#
|
||||||
|
|
||||||
import gnome
|
|
||||||
import gobject
|
import gobject
|
||||||
from QuestionDialog import ErrorDialog
|
from QuestionDialog import ErrorDialog
|
||||||
|
|
||||||
def help(target):
|
def help(target):
|
||||||
try:
|
try:
|
||||||
|
import gnome
|
||||||
gnome.help_display('gramps-manual',target)
|
gnome.help_display('gramps-manual',target)
|
||||||
except gobject.GError, msg:
|
except gobject.GError, msg:
|
||||||
url('http://gramps-project.org/gramps-manual/gramps-manual-en/index.html')
|
url('http://gramps-project.org/gramps-manual/gramps-manual-en/index.html')
|
||||||
|
|
||||||
def url(target):
|
def url(target):
|
||||||
try:
|
try:
|
||||||
|
import gnome
|
||||||
gnome.url_show(target)
|
gnome.url_show(target)
|
||||||
except gobject.GError, msg:
|
except gobject.GError, msg:
|
||||||
run_browser(target)
|
run_browser(target)
|
||||||
|
@ -19,43 +19,6 @@
|
|||||||
#
|
#
|
||||||
|
|
||||||
try:
|
try:
|
||||||
from gnomevfs import mime_get_short_list_applications, mime_get_description, get_mime_type
|
from GnomeMime import *
|
||||||
except:
|
except:
|
||||||
from gnome.vfs import mime_get_short_list_applications, mime_get_description, get_mime_type
|
from PythonMime import *
|
||||||
|
|
||||||
from gettext import gettext as _
|
|
||||||
|
|
||||||
def get_application(type):
|
|
||||||
"""Returns the application command and application name of the
|
|
||||||
specified mime type"""
|
|
||||||
try:
|
|
||||||
applist = mime_get_short_list_applications(type)
|
|
||||||
if applist:
|
|
||||||
prog = applist[0]
|
|
||||||
return (prog[2],prog[1])
|
|
||||||
else:
|
|
||||||
return None
|
|
||||||
except:
|
|
||||||
return None
|
|
||||||
|
|
||||||
def get_description(type):
|
|
||||||
"""Returns the description of the specfied mime type"""
|
|
||||||
try:
|
|
||||||
return mime_get_description(type)
|
|
||||||
except:
|
|
||||||
return _("unknown")
|
|
||||||
|
|
||||||
def get_type(file):
|
|
||||||
"""Returns the mime type of the specified file"""
|
|
||||||
try:
|
|
||||||
return get_mime_type(file)
|
|
||||||
except:
|
|
||||||
return _('unknown')
|
|
||||||
|
|
||||||
def mime_type_is_defined(type):
|
|
||||||
""""Return True if a description for a mime type exists"""
|
|
||||||
try:
|
|
||||||
mime_get_description(type)
|
|
||||||
return True
|
|
||||||
except:
|
|
||||||
return False
|
|
||||||
|
@ -169,7 +169,7 @@ class ImageSelect:
|
|||||||
image = RelImage.scale_image(filename,const.thumbScale)
|
image = RelImage.scale_image(filename,const.thumbScale)
|
||||||
self.image.set_from_pixbuf(image)
|
self.image.set_from_pixbuf(image)
|
||||||
else:
|
else:
|
||||||
i = Utils.find_mime_type_pixbuf(mtype)
|
i = GrampsMime.find_mime_type_pixbuf(mtype)
|
||||||
self.image.set_from_pixbuf(i)
|
self.image.set_from_pixbuf(i)
|
||||||
|
|
||||||
def on_savephoto_clicked(self):
|
def on_savephoto_clicked(self):
|
||||||
@ -754,7 +754,7 @@ class LocalMediaProperties:
|
|||||||
|
|
||||||
self.change_dialog.get_widget("path").set_text(fname)
|
self.change_dialog.get_widget("path").set_text(fname)
|
||||||
|
|
||||||
mt = Utils.get_mime_description(mtype)
|
mt = GrampsMime.get_description(mtype)
|
||||||
if mt:
|
if mt:
|
||||||
self.change_dialog.get_widget("type").set_text(mt)
|
self.change_dialog.get_widget("type").set_text(mt)
|
||||||
else:
|
else:
|
||||||
@ -1055,7 +1055,7 @@ class GlobalMediaProperties(DisplayState.ManagedWindow):
|
|||||||
if mtype:
|
if mtype:
|
||||||
pb = ImgManip.get_thumbnail_image(self.obj.get_path(),mtype)
|
pb = ImgManip.get_thumbnail_image(self.obj.get_path(),mtype)
|
||||||
self.pixmap.set_from_pixbuf(pb)
|
self.pixmap.set_from_pixbuf(pb)
|
||||||
descr = Utils.get_mime_description(mtype)
|
descr = GrampsMime.get_description(mtype)
|
||||||
if descr:
|
if descr:
|
||||||
self.change_dialog.get_widget("type").set_text(descr)
|
self.change_dialog.get_widget("type").set_text(descr)
|
||||||
else:
|
else:
|
||||||
|
@ -25,6 +25,7 @@ import md5
|
|||||||
import gtk
|
import gtk
|
||||||
import gobject
|
import gobject
|
||||||
|
|
||||||
|
import GrampsMime
|
||||||
import GrampsKeys
|
import GrampsKeys
|
||||||
import Utils
|
import Utils
|
||||||
|
|
||||||
@ -152,7 +153,7 @@ def get_thumbnail_image(path,mtype=None):
|
|||||||
return gtk.gdk.pixbuf_new_from_file(filename)
|
return gtk.gdk.pixbuf_new_from_file(filename)
|
||||||
except (gobject.GError, OSError):
|
except (gobject.GError, OSError):
|
||||||
if mtype:
|
if mtype:
|
||||||
return Utils.find_mime_type_pixbuf(mtype)
|
return GrampsMime.find_mime_type_pixbuf(mtype)
|
||||||
else:
|
else:
|
||||||
return gtk.gdk.pixbuf_new_from_file(os.path.join(const.dataDir,"document.png"))
|
return gtk.gdk.pixbuf_new_from_file(os.path.join(const.dataDir,"document.png"))
|
||||||
|
|
||||||
|
@ -95,7 +95,7 @@ def load_plugins(direct):
|
|||||||
is done in this routine to register the tasks."""
|
is done in this routine to register the tasks."""
|
||||||
|
|
||||||
global _success_list,attempt_list,loaddir_list,failmsg_list
|
global _success_list,attempt_list,loaddir_list,failmsg_list
|
||||||
|
|
||||||
# if the directory does not exist, do nothing
|
# if the directory does not exist, do nothing
|
||||||
if not os.path.isdir(direct):
|
if not os.path.isdir(direct):
|
||||||
return True
|
return True
|
||||||
@ -263,7 +263,6 @@ def register_report(
|
|||||||
The low-level functions (starting with '_') should not be used
|
The low-level functions (starting with '_') should not be used
|
||||||
on their own. Instead, this function will call them as needed.
|
on their own. Instead, this function will call them as needed.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import Report
|
import Report
|
||||||
(junk,standalone_task) = divmod(modes,2**Report.MODE_GUI)
|
(junk,standalone_task) = divmod(modes,2**Report.MODE_GUI)
|
||||||
if standalone_task:
|
if standalone_task:
|
||||||
@ -302,6 +301,7 @@ def _register_standalone(report_class, options_class, translated_name,
|
|||||||
del_index = i
|
del_index = i
|
||||||
if del_index != -1:
|
if del_index != -1:
|
||||||
del report_list[del_index]
|
del report_list[del_index]
|
||||||
|
|
||||||
report_list.append((report_class, options_class, translated_name,
|
report_list.append((report_class, options_class, translated_name,
|
||||||
category, name, description, status,
|
category, name, description, status,
|
||||||
author_name, author_email, unsupported))
|
author_name, author_email, unsupported))
|
||||||
|
@ -89,7 +89,6 @@ class PluginDialog(DisplayState.ManagedWindow):
|
|||||||
hand side of the dailog box."""
|
hand side of the dailog box."""
|
||||||
|
|
||||||
self.active = state.active
|
self.active = state.active
|
||||||
self.update = None
|
|
||||||
self.imap = {}
|
self.imap = {}
|
||||||
self.msg = msg
|
self.msg = msg
|
||||||
self.content = content
|
self.content = content
|
||||||
@ -161,12 +160,12 @@ class PluginDialog(DisplayState.ManagedWindow):
|
|||||||
|
|
||||||
(item_class,options_class,title,category,name) = self.item
|
(item_class,options_class,title,category,name) = self.item
|
||||||
if self.content == REPORTS:
|
if self.content == REPORTS:
|
||||||
Report.report(self.db,self.active,
|
Report.report(self.state.db,self.state.active,
|
||||||
item_class,options_class,title,name,category)
|
item_class,options_class,title,name,category)
|
||||||
else:
|
else:
|
||||||
Tool.gui_tool(self.db,self.active,
|
Tool.gui_tool(self.state.db,self.state.active,
|
||||||
item_class,options_class,title,name,category,
|
item_class,options_class,title,name,category,
|
||||||
self.update,self.parent)
|
self.state.db.request_rebuild,self.parent)
|
||||||
|
|
||||||
def on_node_selected(self,obj):
|
def on_node_selected(self,obj):
|
||||||
"""Updates the informational display on the right hand side of
|
"""Updates the informational display on the right hand side of
|
||||||
@ -285,16 +284,16 @@ class ToolPlugins(PluginDialog):
|
|||||||
"""Displays the dialog box that allows the user to select the tool
|
"""Displays the dialog box that allows the user to select the tool
|
||||||
that is desired."""
|
that is desired."""
|
||||||
|
|
||||||
def __init__(self,parent,db,active,update):
|
def __init__(self,dbstate,uistate,track):
|
||||||
"""Display the dialog box, and build up the list of available
|
"""Display the dialog box, and build up the list of available
|
||||||
reports. This is used to build the selection tree on the left
|
reports. This is used to build the selection tree on the left
|
||||||
hand side of the dailog box."""
|
hand side of the dailog box."""
|
||||||
|
|
||||||
PluginDialog.__init__(
|
PluginDialog.__init__(
|
||||||
self,
|
self,
|
||||||
parent,
|
dbstate,
|
||||||
db,
|
uistate,
|
||||||
active,
|
track,
|
||||||
PluginMgr.tool_list,
|
PluginMgr.tool_list,
|
||||||
Tool.tool_categories,
|
Tool.tool_categories,
|
||||||
_("Tool Selection"),
|
_("Tool Selection"),
|
||||||
@ -302,28 +301,24 @@ class ToolPlugins(PluginDialog):
|
|||||||
_("_Run"),
|
_("_Run"),
|
||||||
_("Run selected tool"),
|
_("Run selected tool"),
|
||||||
TOOLS)
|
TOOLS)
|
||||||
self.update = update
|
|
||||||
|
|
||||||
#-------------------------------------------------------------------------
|
#-------------------------------------------------------------------------
|
||||||
#
|
#
|
||||||
# PluginStatus
|
# PluginStatus
|
||||||
#
|
#
|
||||||
#-------------------------------------------------------------------------
|
#-------------------------------------------------------------------------
|
||||||
status_up = None
|
|
||||||
parent_window = None
|
|
||||||
|
|
||||||
class PluginStatus:
|
class PluginStatus(DisplayState.ManagedWindow):
|
||||||
"""Displays a dialog showing the status of loaded plugins"""
|
"""Displays a dialog showing the status of loaded plugins"""
|
||||||
|
|
||||||
def __init__(self,parent_class=None):
|
def __init__(self,state,uistate,track):
|
||||||
global status_up, parent_window
|
|
||||||
if status_up:
|
|
||||||
status_up.close(None)
|
|
||||||
if parent_class:
|
|
||||||
parent_window = parent_class.topWindow
|
|
||||||
status_up = self
|
|
||||||
|
|
||||||
import cStringIO
|
import cStringIO
|
||||||
|
DisplayState.ManagedWindow.__init__(self, uistate, [], None)
|
||||||
|
if self.already_exist:
|
||||||
|
return
|
||||||
|
self.state = state
|
||||||
|
self.uistate = uistate
|
||||||
|
|
||||||
self.glade = gtk.glade.XML(const.pluginsFile,"plugstat","gramps")
|
self.glade = gtk.glade.XML(const.pluginsFile,"plugstat","gramps")
|
||||||
self.window = self.glade.get_widget("plugstat")
|
self.window = self.glade.get_widget("plugstat")
|
||||||
@ -341,9 +336,6 @@ class PluginStatus:
|
|||||||
'on_plugstat_delete_event' : self.on_delete,
|
'on_plugstat_delete_event' : self.on_delete,
|
||||||
})
|
})
|
||||||
|
|
||||||
if parent_window:
|
|
||||||
self.window.set_transient_for(parent_window)
|
|
||||||
|
|
||||||
info = cStringIO.StringIO()
|
info = cStringIO.StringIO()
|
||||||
|
|
||||||
if len(PluginMgr.expect_list) + len(PluginMgr.failmsg_list) == 0:
|
if len(PluginMgr.expect_list) + len(PluginMgr.failmsg_list) == 0:
|
||||||
@ -366,11 +358,10 @@ class PluginStatus:
|
|||||||
window.get_buffer().set_text(info.read())
|
window.get_buffer().set_text(info.read())
|
||||||
|
|
||||||
def on_delete(self,obj1,obj2):
|
def on_delete(self,obj1,obj2):
|
||||||
status_up = None
|
pass
|
||||||
|
|
||||||
def close(self,obj):
|
def close(self,obj):
|
||||||
self.window.destroy()
|
self.window.destroy()
|
||||||
status_up = None
|
|
||||||
|
|
||||||
def help(self,obj):
|
def help(self,obj):
|
||||||
"""Display the GRAMPS manual"""
|
"""Display the GRAMPS manual"""
|
||||||
|
64
gramps2/src/PythonMime.py
Normal file
64
gramps2/src/PythonMime.py
Normal file
@ -0,0 +1,64 @@
|
|||||||
|
#
|
||||||
|
# Gramps - a GTK+/GNOME based genealogy program
|
||||||
|
#
|
||||||
|
# Copyright (C) 2000-2004 Donald N. Allingham
|
||||||
|
#
|
||||||
|
# This program is free software; you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
# the Free Software Foundation; either version 2 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with this program; if not, write to the Free Software
|
||||||
|
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
#
|
||||||
|
|
||||||
|
import mimetypes
|
||||||
|
import const
|
||||||
|
from gettext import gettext as _
|
||||||
|
|
||||||
|
_type_map = {
|
||||||
|
'application/x-gramps' : 'GRAMPS database',
|
||||||
|
'application/x-gramps-xml' : 'GRAMPS XML database',
|
||||||
|
'application/x-gedcom' : 'GEDCOM database',
|
||||||
|
'application/x-gramps-package': 'GRAMPS package',
|
||||||
|
'image/jpeg' : 'JPEG image',
|
||||||
|
'application/pdf' : 'PDF document',
|
||||||
|
'text/rtf' : 'Rich Text File',
|
||||||
|
}
|
||||||
|
|
||||||
|
mimetypes.add_type('application/x-gramps','.grdb')
|
||||||
|
mimetypes.add_type('application/x-gramps','.GRDB')
|
||||||
|
mimetypes.add_type('application/x-gramps-xml','.gramps')
|
||||||
|
mimetypes.add_type('application/x-gramps-xml','.GRAMPS')
|
||||||
|
mimetypes.add_type('application/x-gedcom','.ged')
|
||||||
|
mimetypes.add_type('application/x-gedcom','.GED')
|
||||||
|
|
||||||
|
def get_application(mime_type):
|
||||||
|
"""Returns the application command and application name of the
|
||||||
|
specified mime type"""
|
||||||
|
return None
|
||||||
|
|
||||||
|
def get_description(mime_type):
|
||||||
|
"""Returns the description of the specfied mime type"""
|
||||||
|
return _type_map.get(mime_type,_("unknown"))
|
||||||
|
|
||||||
|
def get_type(filename):
|
||||||
|
"""Returns the mime type of the specified file"""
|
||||||
|
value = mimetypes.guess_type(filename)
|
||||||
|
if value:
|
||||||
|
return value[0]
|
||||||
|
else:
|
||||||
|
return _('unknown')
|
||||||
|
|
||||||
|
def mime_type_is_defined(mime_type):
|
||||||
|
""""Return True if a description for a mime type exists"""
|
||||||
|
return _type_map.has_key(mime_type)
|
||||||
|
|
||||||
|
def find_mime_type_pixbuf(mime_type):
|
||||||
|
return gtk.gdk.pixbuf_new_from_file(const.icon)
|
@ -34,7 +34,6 @@ from gettext import gettext as _
|
|||||||
#-------------------------------------------------------------------------
|
#-------------------------------------------------------------------------
|
||||||
import gtk
|
import gtk
|
||||||
import gtk.glade
|
import gtk.glade
|
||||||
import gnome
|
|
||||||
from gtk.gdk import ACTION_COPY, BUTTON1_MASK, INTERP_BILINEAR, pixbuf_new_from_file
|
from gtk.gdk import ACTION_COPY, BUTTON1_MASK, INTERP_BILINEAR, pixbuf_new_from_file
|
||||||
from gobject import TYPE_PYOBJECT
|
from gobject import TYPE_PYOBJECT
|
||||||
import cPickle as pickle
|
import cPickle as pickle
|
||||||
@ -51,7 +50,7 @@ import Date
|
|||||||
import DateEdit
|
import DateEdit
|
||||||
import DateHandler
|
import DateHandler
|
||||||
import AutoComp
|
import AutoComp
|
||||||
|
import GrampsDisplay
|
||||||
|
|
||||||
#-------------------------------------------------------------------------
|
#-------------------------------------------------------------------------
|
||||||
#
|
#
|
||||||
@ -218,7 +217,7 @@ class RepositoryRefEdit(RepositoryRefEditBase):
|
|||||||
|
|
||||||
def on_help_clicked(self,obj):
|
def on_help_clicked(self,obj):
|
||||||
"""Display the relevant portion of GRAMPS manual"""
|
"""Display the relevant portion of GRAMPS manual"""
|
||||||
gnome.help_display('gramps-manual','adv-si')
|
GrampsDisplay.help('adv-si')
|
||||||
|
|
||||||
def set_button(self):
|
def set_button(self):
|
||||||
if self.active_repos:
|
if self.active_repos:
|
||||||
@ -355,7 +354,7 @@ class RepositoryRefSourceEdit(RepositoryRefEditBase):
|
|||||||
|
|
||||||
def on_help_clicked(self,obj):
|
def on_help_clicked(self,obj):
|
||||||
"""Display the relevant portion of GRAMPS manual"""
|
"""Display the relevant portion of GRAMPS manual"""
|
||||||
gnome.help_display('gramps-manual','adv-si')
|
GrampsDisplay.help('adv-si')
|
||||||
|
|
||||||
def set_button(self):
|
def set_button(self):
|
||||||
if self.active_source:
|
if self.active_source:
|
||||||
|
@ -58,6 +58,7 @@ import const
|
|||||||
import Utils
|
import Utils
|
||||||
import ListModel
|
import ListModel
|
||||||
import ImgManip
|
import ImgManip
|
||||||
|
import GrampsMime
|
||||||
|
|
||||||
#-------------------------------------------------------------------------
|
#-------------------------------------------------------------------------
|
||||||
#
|
#
|
||||||
@ -100,7 +101,7 @@ class SelectObject:
|
|||||||
for key in self.db.get_media_object_handles():
|
for key in self.db.get_media_object_handles():
|
||||||
obj = self.db.get_object_from_handle(key)
|
obj = self.db.get_object_from_handle(key)
|
||||||
title = obj.get_description()
|
title = obj.get_description()
|
||||||
the_type = Utils.get_mime_description(obj.get_mime_type())
|
the_type = GramspMime.get_description(obj.get_mime_type())
|
||||||
path = obj.get_path()
|
path = obj.get_path()
|
||||||
self.object_model.add([title,obj.get_gramps_id(),the_type,path],key)
|
self.object_model.add([title,obj.get_gramps_id(),the_type,path],key)
|
||||||
|
|
||||||
@ -119,7 +120,7 @@ class SelectObject:
|
|||||||
if the_type and the_type[0:5] == "image":
|
if the_type and the_type[0:5] == "image":
|
||||||
image = ImgManip.get_thumbnail_image(path,the_type)
|
image = ImgManip.get_thumbnail_image(path,the_type)
|
||||||
else:
|
else:
|
||||||
image = Utils.find_mime_type_pixbuf(the_type)
|
image = GrampsMime.find_mime_type_pixbuf(the_type)
|
||||||
self.preview.set_from_pixbuf(image)
|
self.preview.set_from_pixbuf(image)
|
||||||
|
|
||||||
self.object_handle.set_text(obj.get_gramps_id())
|
self.object_handle.set_text(obj.get_gramps_id())
|
||||||
|
@ -505,30 +505,6 @@ def view_photo(photo):
|
|||||||
if os.fork() == 0:
|
if os.fork() == 0:
|
||||||
os.execvp(args[0],args)
|
os.execvp(args[0],args)
|
||||||
|
|
||||||
_icon_theme = gtk.icon_theme_get_default()
|
|
||||||
|
|
||||||
def find_mime_type_pixbuf(mime_type):
|
|
||||||
try:
|
|
||||||
icontmp = mime_type.replace('/','-')
|
|
||||||
newicon = "gnome-mime-%s" % icontmp
|
|
||||||
try:
|
|
||||||
return _icon_theme.load_icon(newicon,48,0)
|
|
||||||
except:
|
|
||||||
icontmp = mime_type.split('/')[0]
|
|
||||||
try:
|
|
||||||
newicon = "gnome-mime-%s" % icontmp
|
|
||||||
return _icon_theme.load_icon(newicon,48,0)
|
|
||||||
except:
|
|
||||||
return gtk.gdk.pixbuf_new_from_file(const.icon)
|
|
||||||
except:
|
|
||||||
return gtk.gdk.pixbuf_new_from_file(const.icon)
|
|
||||||
|
|
||||||
def get_mime_description(mime_type):
|
|
||||||
try:
|
|
||||||
return GrampsMime.get_description(mime_type)
|
|
||||||
except:
|
|
||||||
return ''
|
|
||||||
|
|
||||||
def find_file( filename):
|
def find_file( filename):
|
||||||
# try the filename we got
|
# try the filename we got
|
||||||
try:
|
try:
|
||||||
|
@ -28,6 +28,7 @@
|
|||||||
from gettext import gettext as _
|
from gettext import gettext as _
|
||||||
from bsddb import db
|
from bsddb import db
|
||||||
import os
|
import os
|
||||||
|
from cStringIO import StringIO
|
||||||
|
|
||||||
#-------------------------------------------------------------------------
|
#-------------------------------------------------------------------------
|
||||||
#
|
#
|
||||||
@ -35,11 +36,6 @@ import os
|
|||||||
#
|
#
|
||||||
#-------------------------------------------------------------------------
|
#-------------------------------------------------------------------------
|
||||||
import gtk
|
import gtk
|
||||||
import gnome
|
|
||||||
try:
|
|
||||||
from gnomevfs import get_mime_type
|
|
||||||
except:
|
|
||||||
from gnome.vfs import get_mime_type
|
|
||||||
|
|
||||||
#-------------------------------------------------------------------------
|
#-------------------------------------------------------------------------
|
||||||
#
|
#
|
||||||
@ -47,9 +43,9 @@ except:
|
|||||||
#
|
#
|
||||||
#-------------------------------------------------------------------------
|
#-------------------------------------------------------------------------
|
||||||
import DisplayState
|
import DisplayState
|
||||||
import DbPrompter
|
|
||||||
import const
|
import const
|
||||||
import PluginMgr
|
import PluginMgr
|
||||||
|
import Plugins
|
||||||
import GrampsKeys
|
import GrampsKeys
|
||||||
import GrampsDb
|
import GrampsDb
|
||||||
import GrampsCfg
|
import GrampsCfg
|
||||||
@ -63,6 +59,9 @@ import TipOfDay
|
|||||||
import Bookmarks
|
import Bookmarks
|
||||||
import RecentFiles
|
import RecentFiles
|
||||||
import NameDisplay
|
import NameDisplay
|
||||||
|
import Tool
|
||||||
|
import Report
|
||||||
|
import GrampsMime
|
||||||
|
|
||||||
#-------------------------------------------------------------------------
|
#-------------------------------------------------------------------------
|
||||||
#
|
#
|
||||||
@ -124,6 +123,7 @@ uidefault = '''<ui>
|
|||||||
<menuitem action="UserManual"/>
|
<menuitem action="UserManual"/>
|
||||||
<menuitem action="FAQ"/>
|
<menuitem action="FAQ"/>
|
||||||
<menuitem action="TipOfDay"/>
|
<menuitem action="TipOfDay"/>
|
||||||
|
<menuitem action="PluginStatus"/>
|
||||||
<separator/>
|
<separator/>
|
||||||
<menuitem action="HomePage"/>
|
<menuitem action="HomePage"/>
|
||||||
<menuitem action="MailingLists"/>
|
<menuitem action="MailingLists"/>
|
||||||
@ -206,7 +206,8 @@ class ViewManager:
|
|||||||
|
|
||||||
person_nav = Navigation.PersonNavigation(self.uistate)
|
person_nav = Navigation.PersonNavigation(self.uistate)
|
||||||
self.navigation_type[PageView.NAVIGATION_PERSON] = (person_nav,None)
|
self.navigation_type[PageView.NAVIGATION_PERSON] = (person_nav,None)
|
||||||
self.recent_manager = DisplayState.RecentDocsMenu(self.uimanager,self.state,self.read_file)
|
self.recent_manager = DisplayState.RecentDocsMenu(self.uimanager,self.state,
|
||||||
|
self.read_file)
|
||||||
self.recent_manager.build()
|
self.recent_manager.build()
|
||||||
self.window.show()
|
self.window.show()
|
||||||
|
|
||||||
@ -214,6 +215,22 @@ class ViewManager:
|
|||||||
self.create_pages()
|
self.create_pages()
|
||||||
self.change_page(None,None)
|
self.change_page(None,None)
|
||||||
self.actiongroup.set_visible(False)
|
self.actiongroup.set_visible(False)
|
||||||
|
self.fileactions.set_sensitive(False)
|
||||||
|
self.load_plugins()
|
||||||
|
self.build_tools_menu()
|
||||||
|
self.build_report_menu()
|
||||||
|
self.fileactions.set_sensitive(True)
|
||||||
|
|
||||||
|
def load_plugins(self):
|
||||||
|
self.uistate.status_text(_('Loading document formats...'))
|
||||||
|
error = PluginMgr.load_plugins(const.docgenDir)
|
||||||
|
error |= PluginMgr.load_plugins(os.path.expanduser("~/.gramps/docgen"))
|
||||||
|
self.uistate.status_text(_('Loading plugins...'))
|
||||||
|
error |= PluginMgr.load_plugins(const.pluginsDir)
|
||||||
|
error |= PluginMgr.load_plugins(os.path.expanduser("~/.gramps/plugins"))
|
||||||
|
if GrampsKeys.get_pop_plugin_status() and error:
|
||||||
|
Plugins.PluginStatus(self)
|
||||||
|
self.uistate.push_message(_('Ready'))
|
||||||
|
|
||||||
def quit(self,obj=None):
|
def quit(self,obj=None):
|
||||||
self.state.db.close()
|
self.state.db.close()
|
||||||
@ -238,6 +255,7 @@ class ViewManager:
|
|||||||
|
|
||||||
self.actiongroup = gtk.ActionGroup('MainWindow')
|
self.actiongroup = gtk.ActionGroup('MainWindow')
|
||||||
self.fileactions = gtk.ActionGroup('FileWindow')
|
self.fileactions = gtk.ActionGroup('FileWindow')
|
||||||
|
|
||||||
self.fileactions.add_actions([
|
self.fileactions.add_actions([
|
||||||
('FileMenu', None, '_File'),
|
('FileMenu', None, '_File'),
|
||||||
('New', gtk.STOCK_NEW, '_New', "<control>n", None, self.new_activate),
|
('New', gtk.STOCK_NEW, '_New', "<control>n", None, self.new_activate),
|
||||||
@ -252,6 +270,7 @@ class ViewManager:
|
|||||||
('MailingLists', None, _('GRAMPS _mailing lists'), None, None, self.mailing_lists_activate),
|
('MailingLists', None, _('GRAMPS _mailing lists'), None, None, self.mailing_lists_activate),
|
||||||
('ReportBug', None, _('_Report a bug'), None, None, self.report_bug_activate),
|
('ReportBug', None, _('_Report a bug'), None, None, self.report_bug_activate),
|
||||||
('About', gtk.STOCK_ABOUT, '_About', None, None, self.about),
|
('About', gtk.STOCK_ABOUT, '_About', None, None, self.about),
|
||||||
|
('PluginStatus', None, '_Plugin status', None, None, self.plugin_status),
|
||||||
('FAQ', None, '_FAQ', None, None, self.faq_activate),
|
('FAQ', None, '_FAQ', None, None, self.faq_activate),
|
||||||
('UserManual', gtk.STOCK_HELP, '_User Manual', 'F1', None, self.manual_activate),
|
('UserManual', gtk.STOCK_HELP, '_User Manual', 'F1', None, self.manual_activate),
|
||||||
('TipOfDay', None, 'Tip of the day', None, None, self.tip_of_day_activate),
|
('TipOfDay', None, 'Tip of the day', None, None, self.tip_of_day_activate),
|
||||||
@ -268,7 +287,7 @@ class ViewManager:
|
|||||||
('ScratchPad', gtk.STOCK_PASTE, '_ScratchPad', None, None, self.scratchpad),
|
('ScratchPad', gtk.STOCK_PASTE, '_ScratchPad', None, None, self.scratchpad),
|
||||||
('Import', gtk.STOCK_CONVERT, '_Import', None, None, self.import_data),
|
('Import', gtk.STOCK_CONVERT, '_Import', None, None, self.import_data),
|
||||||
('Reports', gtk.STOCK_DND_MULTIPLE, '_Reports', None, None, self.reports_clicked),
|
('Reports', gtk.STOCK_DND_MULTIPLE, '_Reports', None, None, self.reports_clicked),
|
||||||
('Tools', gtk.STOCK_EXECUTE, '_Tools'),
|
('Tools', gtk.STOCK_EXECUTE, '_Tools', None, None, self.tools_clicked),
|
||||||
('EditMenu', None, '_Edit'),
|
('EditMenu', None, '_Edit'),
|
||||||
('GoMenu', None, '_Go'),
|
('GoMenu', None, '_Go'),
|
||||||
('BookMenu', None, '_Bookmarks'),
|
('BookMenu', None, '_Bookmarks'),
|
||||||
@ -290,25 +309,25 @@ class ViewManager:
|
|||||||
self.uimanager.insert_action_group(self.actiongroup,1)
|
self.uimanager.insert_action_group(self.actiongroup,1)
|
||||||
|
|
||||||
def home_page_activate(self,obj):
|
def home_page_activate(self,obj):
|
||||||
gnome.url_show( const.url_homepage)
|
GrampsDisplay.url(const.url_homepage)
|
||||||
|
|
||||||
def mailing_lists_activate(self,obj):
|
def mailing_lists_activate(self,obj):
|
||||||
gnome.url_show( const.url_mailinglist)
|
GrampsDisplay.url( const.url_mailinglist)
|
||||||
|
|
||||||
def report_bug_activate(self,obj):
|
def report_bug_activate(self,obj):
|
||||||
gnome.url_show( const.url_bugtracker)
|
GrampsDisplay.url( const.url_bugtracker)
|
||||||
|
|
||||||
def manual_activate(self,obj):
|
def manual_activate(self,obj):
|
||||||
"""Display the GRAMPS manual"""
|
"""Display the GRAMPS manual"""
|
||||||
try:
|
try:
|
||||||
gnome.help_display('gramps-manual','index')
|
GrampsDisplay.help('index')
|
||||||
except gobject.GError, msg:
|
except gobject.GError, msg:
|
||||||
ErrorDialog(_("Could not open help"),str(msg))
|
ErrorDialog(_("Could not open help"),str(msg))
|
||||||
|
|
||||||
def faq_activate(self,obj):
|
def faq_activate(self,obj):
|
||||||
"""Display FAQ"""
|
"""Display FAQ"""
|
||||||
try:
|
try:
|
||||||
gnome.help_display('gramps-manual','faq')
|
GrampsDisplay.help('faq')
|
||||||
except gobject.GError, msg:
|
except gobject.GError, msg:
|
||||||
ErrorDialog(_("Could not open help"),str(msg))
|
ErrorDialog(_("Could not open help"),str(msg))
|
||||||
|
|
||||||
@ -316,6 +335,10 @@ class ViewManager:
|
|||||||
"""Display Tip of the day"""
|
"""Display Tip of the day"""
|
||||||
TipOfDay.TipOfDay(self.uistate)
|
TipOfDay.TipOfDay(self.uistate)
|
||||||
|
|
||||||
|
def plugin_status(self,obj):
|
||||||
|
"""Display Tip of the day"""
|
||||||
|
Plugins.PluginStatus(self.state,self.uistate,[])
|
||||||
|
|
||||||
def about(self,obj):
|
def about(self,obj):
|
||||||
about = gtk.AboutDialog()
|
about = gtk.AboutDialog()
|
||||||
about.set_name(const.program_name)
|
about.set_name(const.program_name)
|
||||||
@ -481,7 +504,7 @@ class ViewManager:
|
|||||||
return False
|
return False
|
||||||
filetype = type_selector.get_value()
|
filetype = type_selector.get_value()
|
||||||
if filetype == 'auto':
|
if filetype == 'auto':
|
||||||
filetype = get_mime_type(filename)
|
filetype = GrampsMime.get_type(filename)
|
||||||
(the_path,the_file) = os.path.split(filename)
|
(the_path,the_file) = os.path.split(filename)
|
||||||
choose.destroy()
|
choose.destroy()
|
||||||
if filetype in [const.app_gramps,const.app_gramps_xml,
|
if filetype in [const.app_gramps,const.app_gramps_xml,
|
||||||
@ -674,8 +697,10 @@ class ViewManager:
|
|||||||
return True
|
return True
|
||||||
|
|
||||||
def load_database(self,name,callback=None,mode="w"):
|
def load_database(self,name,callback=None,mode="w"):
|
||||||
if not self.state.db.load(name,callback,mode):
|
self.progress.show()
|
||||||
|
if not self.state.db.load(name,self.pulse_progressbar,mode):
|
||||||
return False
|
return False
|
||||||
|
self.progress.hide()
|
||||||
return self.post_load(name,callback)
|
return self.post_load(name,callback)
|
||||||
|
|
||||||
def post_load(self,name,callback=None):
|
def post_load(self,name,callback=None):
|
||||||
@ -732,6 +757,10 @@ class ViewManager:
|
|||||||
def reports_clicked(self,obj):
|
def reports_clicked(self,obj):
|
||||||
import Plugins
|
import Plugins
|
||||||
Plugins.ReportPlugins(self.state,self.uistate,[])
|
Plugins.ReportPlugins(self.state,self.uistate,[])
|
||||||
|
|
||||||
|
def tools_clicked(self,obj):
|
||||||
|
import Plugins
|
||||||
|
Plugins.ToolPlugins(self.state,self.uistate,[])
|
||||||
|
|
||||||
def find_initial_person(self):
|
def find_initial_person(self):
|
||||||
person = self.state.db.get_default_person()
|
person = self.state.db.get_default_person()
|
||||||
@ -748,6 +777,8 @@ class ViewManager:
|
|||||||
|
|
||||||
def pulse_progressbar(self,value):
|
def pulse_progressbar(self,value):
|
||||||
self.progress.set_fraction(value)
|
self.progress.set_fraction(value)
|
||||||
|
while gtk.events_pending():
|
||||||
|
gtk.main_iteration()
|
||||||
|
|
||||||
def import_data(self,obj):
|
def import_data(self,obj):
|
||||||
choose = gtk.FileChooserDialog(_('GRAMPS: Import database'),
|
choose = gtk.FileChooserDialog(_('GRAMPS: Import database'),
|
||||||
@ -799,7 +830,7 @@ class ViewManager:
|
|||||||
filetype = type_selector.get_value()
|
filetype = type_selector.get_value()
|
||||||
if filetype == 'auto':
|
if filetype == 'auto':
|
||||||
try:
|
try:
|
||||||
filetype = get_mime_type(filename)
|
filetype = GrampsMime.get_type(filename)
|
||||||
except RuntimeError,msg:
|
except RuntimeError,msg:
|
||||||
QuestionDialog.ErrorDialog(
|
QuestionDialog.ErrorDialog(
|
||||||
_("Could not open file: %s") % filename,
|
_("Could not open file: %s") % filename,
|
||||||
@ -808,8 +839,10 @@ class ViewManager:
|
|||||||
|
|
||||||
if filetype == const.app_gramps:
|
if filetype == const.app_gramps:
|
||||||
choose.destroy()
|
choose.destroy()
|
||||||
GrampsDb.gramps_db_reader_factory(filetype)(self.state.db,filename)
|
self.progress.show()
|
||||||
|
GrampsDb.gramps_db_reader_factory(filetype)(self.state.db,filename,self.pulse_progressbar)
|
||||||
self.parent.import_tool_callback()
|
self.parent.import_tool_callback()
|
||||||
|
self.progress.hide()
|
||||||
return True
|
return True
|
||||||
elif filetype == const.app_gramps_xml:
|
elif filetype == const.app_gramps_xml:
|
||||||
choose.destroy()
|
choose.destroy()
|
||||||
@ -836,6 +869,85 @@ class ViewManager:
|
|||||||
choose.destroy()
|
choose.destroy()
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
|
||||||
|
def build_tools_menu(self):
|
||||||
|
self.toolactions = gtk.ActionGroup('ToolWindow')
|
||||||
|
(ui,actions) = self.build_plugin_menu('ToolsMenu',
|
||||||
|
PluginMgr.tool_list,
|
||||||
|
Tool.tool_categories,
|
||||||
|
make_tool_callback)
|
||||||
|
self.toolactions.add_actions(actions)
|
||||||
|
self.uistate.uimanager.add_ui_from_string(ui)
|
||||||
|
self.uimanager.insert_action_group(self.toolactions,1)
|
||||||
|
|
||||||
|
def build_report_menu(self):
|
||||||
|
self.reportactions = gtk.ActionGroup('ReportWindow')
|
||||||
|
(ui,actions) = self.build_plugin_menu('ReportsMenu',
|
||||||
|
PluginMgr.report_list,
|
||||||
|
Report.standalone_categories,
|
||||||
|
make_report_callback)
|
||||||
|
self.reportactions.add_actions(actions)
|
||||||
|
self.uistate.uimanager.add_ui_from_string(ui)
|
||||||
|
self.uimanager.insert_action_group(self.reportactions,1)
|
||||||
|
|
||||||
|
def build_plugin_menu(self,text,item_list,categories,func):
|
||||||
|
actions = []
|
||||||
|
f = StringIO()
|
||||||
|
f.write('<ui><menubar name="MenuBar"><menu action="%s">' % text)
|
||||||
|
|
||||||
|
menu = gtk.Menu()
|
||||||
|
menu.show()
|
||||||
|
|
||||||
|
hash_data = {}
|
||||||
|
for item in item_list:
|
||||||
|
if item[9]:
|
||||||
|
category = Plugins.UNSUPPORTED
|
||||||
|
else:
|
||||||
|
category = categories[item[3]]
|
||||||
|
if hash_data.has_key(category):
|
||||||
|
hash_data[category].append(
|
||||||
|
(item[0],item[1],item[2],item[4],item[3]))
|
||||||
|
else:
|
||||||
|
hash_data[category] = [
|
||||||
|
(item[0],item[1],item[2],item[4],item[3])]
|
||||||
|
|
||||||
|
# Sort categories, skipping the unsupported
|
||||||
|
catlist = [item for item in hash_data.keys() if item != Plugins.UNSUPPORTED]
|
||||||
|
catlist.sort()
|
||||||
|
for key in catlist:
|
||||||
|
new_key = key.replace(' ','-')
|
||||||
|
f.write('<menu action="%s">' % new_key)
|
||||||
|
actions.append((new_key,None,key))
|
||||||
|
lst = hash_data[key]
|
||||||
|
lst.sort(by_menu_name)
|
||||||
|
for name in lst:
|
||||||
|
new_key = name[2].replace(' ','-')
|
||||||
|
f.write('<menuitem action="%s"/>' % new_key)
|
||||||
|
actions.append((new_key,None,name[2],None,None,
|
||||||
|
func(name,self.state)))
|
||||||
|
f.write('</menu>')
|
||||||
|
|
||||||
|
# If there are any unsupported items we add separator
|
||||||
|
# and the unsupported category at the end of the menu
|
||||||
|
if hash_data.has_key(Plugins.UNSUPPORTED):
|
||||||
|
f.write('<separator/>')
|
||||||
|
f.write('<menu action="%s">' % Plugins.UNSUPPORTED)
|
||||||
|
actions.append((Plugins.UNSUPPORTED,None,Plugins.UNSUPPORTED))
|
||||||
|
lst = hash_data[key]
|
||||||
|
lst.sort(by_menu_name)
|
||||||
|
for name in lst:
|
||||||
|
new_key = name[2].replace(' ','-')
|
||||||
|
f.write('<menuitem action="%s"/>' % new_key)
|
||||||
|
actions.append((new_key,None,name[2],None,None,
|
||||||
|
func(name,self.state)))
|
||||||
|
f.write('</menu>')
|
||||||
|
|
||||||
|
f.write('</menu></menubar></ui>')
|
||||||
|
return (f.getvalue(),actions)
|
||||||
|
|
||||||
|
def by_menu_name(a,b):
|
||||||
|
return cmp(a[2],b[2])
|
||||||
|
|
||||||
def add_all_files_filter(chooser):
|
def add_all_files_filter(chooser):
|
||||||
"""
|
"""
|
||||||
Add an all-permitting filter to the file chooser dialog.
|
Add an all-permitting filter to the file chooser dialog.
|
||||||
@ -883,6 +995,15 @@ def add_gedcom_filter(chooser):
|
|||||||
mime_filter.add_mime_type(const.app_gedcom)
|
mime_filter.add_mime_type(const.app_gedcom)
|
||||||
chooser.add_filter(mime_filter)
|
chooser.add_filter(mime_filter)
|
||||||
|
|
||||||
|
def make_report_callback(lst,dbstate):
|
||||||
|
return lambda x: Report.report(dbstate.db,dbstate.active,
|
||||||
|
lst[0],lst[1],lst[2],lst[3],lst[4])
|
||||||
|
|
||||||
|
def make_tool_callback(lst,dbstate):
|
||||||
|
return lambda x: Tool.gui_tool(dbstate.db,dbstate.active,
|
||||||
|
lst[0],lst[1],lst[2],lst[3],lst[4],
|
||||||
|
dbstate.db.request_rebuild,None)
|
||||||
|
|
||||||
#-------------------------------------------------------------------------
|
#-------------------------------------------------------------------------
|
||||||
#
|
#
|
||||||
# Format selectors and filters
|
# Format selectors and filters
|
||||||
|
@ -38,7 +38,6 @@ from gettext import gettext as _
|
|||||||
#-------------------------------------------------------------------------
|
#-------------------------------------------------------------------------
|
||||||
import gtk
|
import gtk
|
||||||
import gtk.glade
|
import gtk.glade
|
||||||
import gnome
|
|
||||||
|
|
||||||
#-------------------------------------------------------------------------
|
#-------------------------------------------------------------------------
|
||||||
#
|
#
|
||||||
|
Loading…
x
Reference in New Issue
Block a user