gramps/src/gramps_main.py
2005-12-21 11:27:05 +00:00

268 lines
11 KiB
Python
Executable File

#
# Gramps - a GTK+/GNOME based genealogy program
#
# Copyright (C) 2001-2005 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
#
# $Id$
#-------------------------------------------------------------------------
#
# GTK+/GNOME modules
#
#-------------------------------------------------------------------------
import gtk
import gnome
#-------------------------------------------------------------------------
#
# GRAMPS modules
#
#-------------------------------------------------------------------------
import ViewManager
import PersonView
import RepositoryView
import GrampsDisplay
import RelLib
import GrampsDb
import PedView
import MapView
import FamilyView
import PlaceView
import EventView
import SourceView
import MediaView
import ArgHandler
import DisplayTrace
import GrampsKeys
import GrampsCfg
import const
import Errors
import PluginMgr
import TipOfDay
from GrampsMime import mime_type_is_defined
from QuestionDialog import ErrorDialog
iconpaths = [".",const.rootDir]
def register_stock_icons ():
import os
items = [
('people48.png',('gramps-person','Person',gtk.gdk.CONTROL_MASK,0,'')),
('family48.png',('gramps-family','Family',gtk.gdk.CONTROL_MASK,0,'')),
('media.png',('gramps-media','Media',gtk.gdk.CONTROL_MASK,0,'')),
('ped24.png',('gramps-pedigree','Pedigree',gtk.gdk.CONTROL_MASK,0,'')),
('repos.png',('gramps-repository','Repositories',
gtk.gdk.CONTROL_MASK,0,'')),
('sources.png',('gramps-source','Sources',gtk.gdk.CONTROL_MASK,0,'')),
('events.png',('gramps-event','Events',gtk.gdk.CONTROL_MASK,0,'')),
('place.png',('gramps-place','Places',gtk.gdk.CONTROL_MASK,0,'')),
('place.png',('gramps-map','Map',gtk.gdk.CONTROL_MASK,0,'')),
]
# Register our stock items
gtk.stock_add (map(lambda x: x[1],items))
# Add our custom icon factory to the list of defaults
factory = gtk.IconFactory ()
factory.add_default ()
for (key,data) in items:
for dirname in iconpaths:
icon_file = os.path.expanduser(os.path.join(dirname,key))
if os.path.isfile(icon_file):
break
else:
icon_file = os.path.join(iconpaths[0],'gramps.png')
pixbuf = gtk.gdk.pixbuf_new_from_file (icon_file)
pixbuf = pixbuf.add_alpha(True, chr(0xff), chr(0xff), chr(0xff))
# Register icon to accompany stock item
if pixbuf:
icon_set = gtk.IconSet (pixbuf)
factory.add (data[0], icon_set)
else:
print 'failed to load GTK logo for toolbar'
class Gramps:
"""
Main class corresponding to a running gramps process.
There can be only one instance of this class per gramps application
process. It may spawn several windows and control several databases.
"""
def __init__(self,args):
try:
self.program = gnome.program_init('gramps',const.version,
gnome.libgnome_module_info_get(),
args, const.popt_table)
except:
self.program = gnome.program_init('gramps',const.version)
self.program.set_property('app-libdir','%s/lib' % const.prefixdir)
self.program.set_property('app-datadir','%s/share/gramps' % const.prefixdir)
self.program.set_property('app-sysconfdir','%s/etc' % const.prefixdir)
self.program.set_property('app-prefix', const.prefixdir)
try:
GrampsCfg.loadConfig()
self.welcome()
except OSError, msg:
ErrorDialog(_("Configuration error"),str(msg))
return
except Errors.GConfSchemaError, val:
ErrorDialog(_("Configuration error"),str(val) +
_("\n\nPossibly the installation of GRAMPS "
"was incomplete. Make sure the GConf schema "
"of GRAMPS is properly installed."))
gtk.main_quit()
return
except:
DisplayTrace.DisplayTrace()
return
if not mime_type_is_defined(const.app_gramps):
ErrorDialog(_("Configuration error"),
_("A definition for the MIME-type %s could not "
"be found \n\nPossibly the installation of GRAMPS "
"was incomplete. Make sure the MIME-types "
"of GRAMPS are properly installed.")
% const.app_gramps)
gtk.main_quit()
return
register_stock_icons()
state = GrampsDb.DbState()
vm = ViewManager.ViewManager(state)
vm.register_view(PersonView.PersonView)
vm.register_view(FamilyView.FamilyView)
vm.register_view(PedView.PedView)
vm.register_view(EventView.EventView)
vm.register_view(SourceView.SourceView)
vm.register_view(PlaceView.PlaceView)
vm.register_view(MediaView.MediaView)
vm.register_view(MapView.MapView)
vm.register_view(RepositoryView.RepositoryView)
ArgHandler.ArgHandler(state,vm,args)
vm.init_interface()
state.db.request_rebuild()
state.change_active_person(state.db.get_default_person())
# Don't show main window until ArgHandler is done.
# This prevents a window from annoyingly popping up when
# the command line args are sufficient to operate without it.
GrampsKeys.client.notify_add("/apps/gramps/researcher",
self.researcher_key_update)
GrampsKeys.client.notify_add("/apps/gramps/interface/statusbar",
self.statusbar_key_update)
# GrampsKeys.client.notify_add("/apps/gramps/interface/toolbar",
## self.toolbar_key_update)
# GrampsKeys.client.notify_add("/apps/gramps/interface/toolbar-on",
# self.toolbar_on_key_update)
# GrampsKeys.client.notify_add("/apps/gramps/interface/filter",
# self.filter_key_update)
# GrampsKeys.client.notify_add("/apps/gramps/interface/view",
# self.sidebar_key_update)
# GrampsKeys.client.notify_add("/apps/gramps/interface/familyview",
# self.familyview_key_update)
# GrampsKeys.client.notify_add("/apps/gramps/preferences/name-format",
# self.familyview_key_update)
# GrampsKeys.client.notify_add("/apps/gramps/preferences/date-format",
# self.date_format_key_update)
if GrampsKeys.get_usetips():
TipOfDay.TipOfDay(vm.uistate)
## # FIXME: THESE will have to be added (ViewManager?)
## # once bookmarks work again
## self.db.set_researcher(GrampsCfg.get_researcher())
## self.db.connect('person-delete',self.on_remove_bookmark)
## self.db.connect('person-update',self.on_update_bookmark)
def welcome(self):
if GrampsKeys.get_welcome() >= 200:
return
glade = gtk.glade.XML(const.gladeFile,'scrollmsg')
top = glade.get_widget('scrollmsg')
msg = glade.get_widget('msg')
msg.get_buffer().set_text(
_("Welcome to the 2.0.x series of GRAMPS!\n"
"\n"
"This version drastically differs from the 1.0.x branch\n"
"in a few ways. Please read carefully, as this may affect\n"
"the way you are using the program.\n"
"\n"
"1. This version works with the Berkeley database backend.\n"
" Because of this, changes are written to disk immediately.\n"
" There is NO Save function anymore!\n"
"2. The Media object files are not managed by GRAMPS.\n"
" There is no concept of local objects, all objects\n"
" are external. You are in charge of keeping track of\n"
" your files. If you delete the image file from disk,\n"
" it will be lost!\n"
"3. The version control provided by previous GRAMPS\n"
" versions has been removed. You may set up the versioning\n"
" system on your own if you'd like, but it will have to be\n"
" outside of GRAMPS.\n"
"4. It is possible to directly open GRAMPS XML databases\n"
" (used by previous versions) as well as GEDCOM files.\n"
" However, any changes will be written to the disk when\n"
" you quit GRAMPS. In case of GEDCOM files, this may lead\n"
" to a data loss because some GEDCOM files contain data\n"
" that does not comply with the GEDCOM standard and cannot\n"
" be parsed by GRAMPS. If unsure, set up an empty grdb\n"
" database (new GRAMPS format) and import GEDCOM into it.\n"
" This will keep the original GEDCOM untouched.\n"
"\n"
"Enjoy!\n"
"The GRAMPS project\n"))
top.run()
top.destroy()
GrampsKeys.save_welcome(200)
GrampsKeys.sync()
def researcher_key_update(self,client,cnxn_id,entry,data):
pass
# self.db.set_person_id_prefix(GrampsKeys.get_person_id_prefix())
# self.db.set_family_id_prefix(GrampsKeys.get_family_id_prefix())
# self.db.set_source_id_prefix(GrampsKeys.get_source_id_prefix())
# self.db.set_object_id_prefix(GrampsKeys.get_object_id_prefix())
# self.db.set_place_id_prefix(GrampsKeys.get_place_id_prefix())
# self.db.set_event_id_prefix(GrampsKeys.get_event_id_prefix())
def statusbar_key_update(self,client,cnxn_id,entry,data):
self.modify_statusbar()
def toolbar_key_update(self,client,cnxn_id,entry,data):
the_style = GrampsKeys.get_toolbar()
if the_style == -1:
self.toolbar.unset_style()
else:
self.toolbar.set_style(the_style)