* src/DbState.py: Remove modeule.

* src/DisplayState.py: Rename from DbState, kepp only DisplayState
class.
* src/GrampsDbBase.py: Add DbState class.
* src/MapView.py: Swap zoom_in and zoom_out to reflect reality;
add place list with the ScrollableWindow, request size for the
place list.
* src/ViewManager.py: Use DisplayState.DisplayState.
* src/gramps_main.py: Use GrampsDbBase.DbState; add docstring;


svn: r5055
This commit is contained in:
Alex Roitman 2005-08-12 02:50:56 +00:00
parent fbde48ac04
commit 6419b4ea14
6 changed files with 131 additions and 81 deletions

View File

@ -1,3 +1,14 @@
2005-08-11 Alex Roitman <shura@gramps-project.org>
* src/DbState.py: Remove modeule.
* src/DisplayState.py: Rename from DbState, kepp only DisplayState
class.
* src/GrampsDbBase.py: Add DbState class.
* src/MapView.py: Swap zoom_in and zoom_out to reflect reality;
add place list with the ScrollableWindow, request size for the
place list.
* src/ViewManager.py: Use DisplayState.DisplayState.
* src/gramps_main.py: Use GrampsDbBase.DbState; add docstring;
2005-08-11 Don Allingham <don@gramps-project.org> 2005-08-11 Don Allingham <don@gramps-project.org>
* various: added new views * various: added new views
* src/DbState.py: handle self.index == -1 * src/DbState.py: handle self.index == -1

View File

@ -118,41 +118,6 @@ class History(GrampsDBCallback.GrampsDBCallback):
if not self.at_end(): if not self.at_end():
self.history = self.history[0:self.index+1] self.history = self.history[0:self.index+1]
class DbState(GrampsDBCallback.GrampsDBCallback):
__signals__ = {
'database-changed' : (GrampsDbBase.GrampsDbBase,),
'active-changed' : (str,),
'no-database' : None,
}
def __init__(self):
GrampsDBCallback.GrampsDBCallback.__init__(self)
self.db = GrampsDbBase.GrampsDbBase()
self.active = None
def change_active_person(self,person):
self.active = person
if person:
try:
self.emit('active-changed',(person.handle,))
except:
self.emit('active-changed',("",))
def change_active_handle(self,handle):
self.change_active_person(self.db.get_person_from_handle(handle))
def get_active_person(self):
return self.active
def change_database(self,db):
self.db = db
self.emit('database-changed',(self.db,))
def no_database(self):
self.db = GrampsDbBase.GrampsDbBase()
self.emit('no-database')
class DisplayState(GrampsDBCallback.GrampsDBCallback): class DisplayState(GrampsDBCallback.GrampsDBCallback):
__signals__ = { __signals__ = {

View File

@ -1496,3 +1496,38 @@ class Transaction:
if self.last and self.first: if self.last and self.first:
return self.last - self.first + 1 return self.last - self.first + 1
return 0 return 0
class DbState(GrampsDBCallback.GrampsDBCallback):
__signals__ = {
'database-changed' : (GrampsDbBase,),
'active-changed' : (str,),
'no-database' : None,
}
def __init__(self):
GrampsDBCallback.GrampsDBCallback.__init__(self)
self.db = GrampsDbBase()
self.active = None
def change_active_person(self,person):
self.active = person
if person:
try:
self.emit('active-changed',(person.handle,))
except:
self.emit('active-changed',("",))
def change_active_handle(self,handle):
self.change_active_person(self.db.get_person_from_handle(handle))
def get_active_person(self):
return self.active
def change_database(self,db):
self.db = db
self.emit('database-changed',(self.db,))
def no_database(self):
self.db = GrampsDbBase()
self.emit('no-database')

View File

@ -26,6 +26,7 @@
# #
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
from gettext import gettext as _ from gettext import gettext as _
import gc
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
# #
@ -35,7 +36,6 @@ from gettext import gettext as _
import gobject import gobject
import gtk import gtk
import gtk.gdk import gtk.gdk
import gc
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
# #
@ -45,7 +45,6 @@ import gc
import RelLib import RelLib
import PageView import PageView
data = (("_Center", 0,0), data = (("_Center", 0,0),
("_North",0,80), ("_North",0,80),
("_South",0,-80), ("_South",0,-80),
@ -94,8 +93,12 @@ class GuideMap(gtk.DrawingArea):
if self.backbuf and self.gc: if self.backbuf and self.gc:
self.window.draw_pixbuf( self.gc, self.backbuf, 0,0, 0,0, -1,-1) self.window.draw_pixbuf( self.gc, self.backbuf, 0,0, 0,0, -1,-1)
if self.current_area: if self.current_area:
r = self.map_to_screen(self.current_area[0],self.current_area[1],self.current_area[2],self.current_area[3]) r = self.map_to_screen(self.current_area[0],
self.window.draw_rectangle( self.gc, False, r[0],r[1], r[2],r[3]) self.current_area[1],
self.current_area[2],
self.current_area[3])
self.window.draw_rectangle( self.gc, False,
r[0],r[1],r[2],r[3])
# Scale backbuffer # Scale backbuffer
def size_allocate_cb(self,widget,allocation): def size_allocate_cb(self,widget,allocation):
@ -109,7 +112,10 @@ class GuideMap(gtk.DrawingArea):
new_size = (allocation.width,allocation.height) new_size = (allocation.width,allocation.height)
if new_size is not self.old_size: if new_size is not self.old_size:
self.old_size = new_size self.old_size = new_size
self.backbuf = self.map_pixbuf.scale_simple(self.old_size[0],self.old_size[1],gtk.gdk.INTERP_BILINEAR) self.backbuf = self.map_pixbuf.scale_simple(
self.old_size[0],
self.old_size[1],
gtk.gdk.INTERP_BILINEAR)
gc.collect() gc.collect()
def map_to_screen( self, x,y,w,h): def map_to_screen( self, x,y,w,h):
@ -122,7 +128,8 @@ class GuideMap(gtk.DrawingArea):
# Zoomable map image # Zoomable map image
class ZoomMap( gtk.DrawingArea): class ZoomMap( gtk.DrawingArea):
def __init__(self, map_pixbuf, place_marker_pixbuf, hightlight_marker_pixbuf): def __init__(self, map_pixbuf, place_marker_pixbuf,
hightlight_marker_pixbuf):
gtk.DrawingArea.__init__(self) gtk.DrawingArea.__init__(self)
self.map_pixbuf = map_pixbuf self.map_pixbuf = map_pixbuf
self.place_marker_pixbuf = place_marker_pixbuf self.place_marker_pixbuf = place_marker_pixbuf
@ -152,9 +159,17 @@ class ZoomMap( gtk.DrawingArea):
self.size_allocate_cb( self,self.get_allocation()) self.size_allocate_cb( self,self.get_allocation())
if self.backbuf and self.gc: if self.backbuf and self.gc:
self.window.draw_pixbuf( self.gc, self.backbuf, 0,0, 0,0, -1,-1) self.window.draw_pixbuf( self.gc, self.backbuf, 0,0, 0,0, -1,-1)
px = int((float(self.zoom_pos[1]) + 180.0) / 360.0 * self.backbuf.get_width()) px = int((float(self.zoom_pos[1]) + 180.0) / 360.0
py = int((90-float(self.zoom_pos[0])) / 180.0 * self.backbuf.get_height()) * self.backbuf.get_width())
self.window.draw_pixbuf( self.gc, self.hightlight_marker_pixbuf, 0,0, px-self.hightlight_marker_pixbuf.get_width()/2,py-self.hightlight_marker_pixbuf.get_height()/2, -1,-1) py = int((90-float(self.zoom_pos[0])) / 180.0
* self.backbuf.get_height())
self.window.draw_pixbuf(
self.gc,
self.hightlight_marker_pixbuf,
0,0,
px-self.hightlight_marker_pixbuf.get_width()/2,
py-self.hightlight_marker_pixbuf.get_height()/2,
-1,-1)
self.window.draw_rectangle( self.gc, False, px-3,py-3, 6,6) self.window.draw_rectangle( self.gc, False, px-3,py-3, 6,6)
# Scale backbuffer # Scale backbuffer
@ -171,8 +186,10 @@ class ZoomMap( gtk.DrawingArea):
pw = int(self.old_size[0]*self.magnifer) pw = int(self.old_size[0]*self.magnifer)
ph = int(self.old_size[1]*self.magnifer) ph = int(self.old_size[1]*self.magnifer)
px = int((float(self.zoom_pos[1]) + 180.0) / 360.0 * self.map_pixbuf.get_width()) px = int((float(self.zoom_pos[1]) + 180.0) / 360.0
py = int((90-float(self.zoom_pos[0])) / 180.0 * self.map_pixbuf.get_height()) * self.map_pixbuf.get_width())
py = int((90-float(self.zoom_pos[0])) / 180.0
* self.map_pixbuf.get_height())
px = max( pw/2, px) px = max( pw/2, px)
py = max( ph/2, py) py = max( ph/2, py)
@ -180,10 +197,13 @@ class ZoomMap( gtk.DrawingArea):
px = min( px, self.map_pixbuf.get_width()-pw/2) px = min( px, self.map_pixbuf.get_width()-pw/2)
py = min( py, self.map_pixbuf.get_height()-ph/2) py = min( py, self.map_pixbuf.get_height()-ph/2)
zoomebuf = self.map_pixbuf.subpixbuf( int(px-pw/2), int(py-ph/2), pw,ph) zoomebuf = self.map_pixbuf.subpixbuf( int(px-pw/2),
int(py-ph/2), pw,ph)
print ( px-pw/2, py-ph/2, pw,ph) print ( px-pw/2, py-ph/2, pw,ph)
self.backbuf = zoomebuf.scale_simple(self.old_size[0],self.old_size[1],gtk.gdk.INTERP_BILINEAR) self.backbuf = zoomebuf.scale_simple(self.old_size[0],
self.old_size[1],
gtk.gdk.INTERP_BILINEAR)
gc.collect() gc.collect()
if self.guide: if self.guide:
mx = 360.0 / self.map_pixbuf.get_width() * (px-pw/2.0) - 180.0 mx = 360.0 / self.map_pixbuf.get_width() * (px-pw/2.0) - 180.0
@ -199,12 +219,12 @@ class ZoomMap( gtk.DrawingArea):
self.backbuf = None self.backbuf = None
self.queue_draw() self.queue_draw()
def zoom_in(self): def zoom_out(self):
self.magnifer = min( 10, self.magnifer * 1.5) self.magnifer = min( 10, self.magnifer * 1.5)
self.backbuf = None self.backbuf = None
self.queue_draw() self.queue_draw()
def zoom_out(self): def zoom_in(self):
self.magnifer = max( 0.1, self.magnifer * 0.75) self.magnifer = max( 0.1, self.magnifer * 0.75)
self.backbuf = None self.backbuf = None
self.queue_draw() self.queue_draw()
@ -266,10 +286,14 @@ class MapView(PageView.PageView):
def define_actions(self): def define_actions(self):
print "MapView.define_actions" print "MapView.define_actions"
self.add_action('ZoomIn', gtk.STOCK_ZOOM_IN, "Zoom _In", callback=self.zoom_in_cb) self.add_action('ZoomIn',gtk.STOCK_ZOOM_IN,
self.add_action('ZoomOut', gtk.STOCK_ZOOM_OUT, "Zoom _Out", callback=self.zoom_out_cb) "Zoom _In",callback=self.zoom_in_cb)
self.add_action('ZoomNormal',gtk.STOCK_ZOOM_100,"_Normal Size", callback=self.zoom_100_cb) self.add_action('ZoomOut',gtk.STOCK_ZOOM_OUT,
self.add_action('ZoomFit', gtk.STOCK_ZOOM_FIT, "Best _Fit", callback=self.zoom_fit_cb) "Zoom _Out",callback=self.zoom_out_cb)
self.add_action('ZoomNormal',gtk.STOCK_ZOOM_100,
"_Normal Size", callback=self.zoom_100_cb)
self.add_action('ZoomFit',gtk.STOCK_ZOOM_FIT,
"Best _Fit",callback=self.zoom_fit_cb)
def get_stock(self): def get_stock(self):
""" """
@ -293,10 +317,11 @@ class MapView(PageView.PageView):
# On the right side # On the right side
vbox = gtk.VBox( False, 4) vbox = gtk.VBox( False, 4)
hbox.pack_start( vbox, False, True, 0) hbox.pack_start( vbox, False, False, 0)
# The small guide map # The small guide map
self.guide_map = GuideMap( gtk.gdk.pixbuf_new_from_file("land_shallow_topo_350.jpg")) self.guide_map = GuideMap(
gtk.gdk.pixbuf_new_from_file("land_shallow_topo_350.jpg"))
self.guide_map.set_size_request(128,64) self.guide_map.set_size_request(128,64)
vbox.pack_start( self.guide_map, False, True, 0) vbox.pack_start( self.guide_map, False, True, 0)
@ -304,7 +329,10 @@ class MapView(PageView.PageView):
# And the place list # And the place list
self.place_list_view = MapPlacesList( data) self.place_list_view = MapPlacesList( data)
vbox.pack_start( self.place_list_view,True,True,0) self.place_list_view.set_size_request(128,-1)
vport = gtk.ScrolledWindow()
vbox.pack_start(vport,True,True,0)
vport.add( self.place_list_view)
self.place_list_view.connect("cursor-changed", self.entry_select_cb) self.place_list_view.connect("cursor-changed", self.entry_select_cb)
@ -340,7 +368,8 @@ class MapView(PageView.PageView):
(model,sel) = s.get_selected_rows() (model,sel) = s.get_selected_rows()
for path in sel: for path in sel:
iter = model.get_iter(path) iter = model.get_iter(path)
self.zoom_map.scroll_to(model.get_value(iter,1), model.get_value(iter,2)) self.zoom_map.scroll_to(model.get_value(iter,1),
model.get_value(iter,2))
break break
def zoom_in_cb(self,obj): def zoom_in_cb(self,obj):

View File

@ -1,7 +1,7 @@
# #
# Gramps - a GTK+/GNOME based genealogy program # Gramps - a GTK+/GNOME based genealogy program
# #
# Copyright (C) 2000-2005 Donald N. Allingham # Copyright (C) 2005 Donald N. Allingham
# #
# This program is free software; you can redistribute it and/or modify # 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 # it under the terms of the GNU General Public License as published by
@ -18,12 +18,13 @@
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
# #
# $Id$
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
# #
# Standard python modules # Standard python modules
# #
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
from gettext import gettext as _ from gettext import gettext as _
from bsddb import db from bsddb import db
import os import os
@ -44,7 +45,7 @@ except:
# GRAMPS modules # GRAMPS modules
# #
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
import DbState import DisplayState
import DbPrompter import DbPrompter
import const import const
import PluginMgr import PluginMgr
@ -176,7 +177,7 @@ class ViewManager:
vbox.pack_end(self.statusbar,False) vbox.pack_end(self.statusbar,False)
self.notebook.connect('switch-page',self.change_page) self.notebook.connect('switch-page',self.change_page)
self.uistate = DbState.DisplayState(self.window, self.statusbar, self.uistate = DisplayState.DisplayState(self.window, self.statusbar,
self.uimanager, self.state) self.uimanager, self.state)
person_nav = Navigation.PersonNavigation(self.uistate) person_nav = Navigation.PersonNavigation(self.uistate)
@ -797,4 +798,3 @@ def format_maker(formats):
box.add(type_selector) box.add(type_selector)
box.show_all() box.show_all()
return (box,type_selector) return (box,type_selector)

View File

@ -36,7 +36,7 @@ import const
import Errors import Errors
import PluginMgr import PluginMgr
import TipOfDay import TipOfDay
import DbState import GrampsDbBase
from GrampsMime import mime_type_is_defined from GrampsMime import mime_type_is_defined
from QuestionDialog import ErrorDialog from QuestionDialog import ErrorDialog
@ -44,7 +44,7 @@ from QuestionDialog import ErrorDialog
import gnome import gnome
iconpaths = [".","/usr/share/gramps"] iconpaths = [".",const.rootDir]
def register_stock_icons (): def register_stock_icons ():
import os import os
@ -52,7 +52,8 @@ def register_stock_icons ():
('people48.png',('gramps-person','Person',gtk.gdk.CONTROL_MASK,0,'')), ('people48.png',('gramps-person','Person',gtk.gdk.CONTROL_MASK,0,'')),
('family48.png',('gramps-family','Family',gtk.gdk.CONTROL_MASK,0,'')), ('family48.png',('gramps-family','Family',gtk.gdk.CONTROL_MASK,0,'')),
('ped24.png',('gramps-pedigree','Pedigree',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, '')), ('repos.png',('gramps-repository','Repositories',
gtk.gdk.CONTROL_MASK,0,'')),
('sources.png',('gramps-source','Sources',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,'')), ('events.png',('gramps-event','Events',gtk.gdk.CONTROL_MASK,0,'')),
('place.png',('gramps-place','Places',gtk.gdk.CONTROL_MASK,0,'')), ('place.png',('gramps-place','Places',gtk.gdk.CONTROL_MASK,0,'')),
@ -86,6 +87,12 @@ def register_stock_icons ():
print 'failed to load GTK logo for toolbar' print 'failed to load GTK logo for toolbar'
class Gramps: 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): def __init__(self,args):
@ -107,9 +114,10 @@ class Gramps:
ErrorDialog(_("Configuration error"),str(msg)) ErrorDialog(_("Configuration error"),str(msg))
return return
except Errors.GConfSchemaError, val: except Errors.GConfSchemaError, val:
ErrorDialog(_("Configuration error"), ErrorDialog(_("Configuration error"),str(val) +
str(val) + _("\n\nPossibly the installation of GRAMPS was incomplete." _("\n\nPossibly the installation of GRAMPS "
" Make sure the GConf schema of GRAMPS is properly installed.")) "was incomplete. Make sure the GConf schema "
"of GRAMPS is properly installed."))
gtk.main_quit() gtk.main_quit()
return return
except: except:
@ -118,9 +126,11 @@ class Gramps:
if not mime_type_is_defined(const.app_gramps): if not mime_type_is_defined(const.app_gramps):
ErrorDialog(_("Configuration error"), ErrorDialog(_("Configuration error"),
_("A definition for the MIME-type %s could not be found" _("A definition for the MIME-type %s could not "
"\n\nPossibly the installation of GRAMPS was incomplete." "be found \n\nPossibly the installation of GRAMPS "
" Make sure the MIME-types of GRAMPS are properly installed.") % const.app_gramps) "was incomplete. Make sure the MIME-types "
"of GRAMPS are properly installed.")
% const.app_gramps)
gtk.main_quit() gtk.main_quit()
return return
@ -150,7 +160,7 @@ class Gramps:
register_stock_icons() register_stock_icons()
state = DbState.DbState() state = GrampsDbBase.DbState()
a = ViewManager.ViewManager(state) a = ViewManager.ViewManager(state)
a.register_view(PersonView.PersonView) a.register_view(PersonView.PersonView)