* 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>
* various: added new views
* src/DbState.py: handle self.index == -1

View File

@ -118,41 +118,6 @@ class History(GrampsDBCallback.GrampsDBCallback):
if not self.at_end():
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):
__signals__ = {

View File

@ -1496,3 +1496,38 @@ class Transaction:
if self.last and self.first:
return self.last - self.first + 1
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 _
import gc
#-------------------------------------------------------------------------
#
@ -35,7 +36,6 @@ from gettext import gettext as _
import gobject
import gtk
import gtk.gdk
import gc
#-------------------------------------------------------------------------
#
@ -45,7 +45,6 @@ import gc
import RelLib
import PageView
data = (("_Center", 0,0),
("_North",0,80),
("_South",0,-80),
@ -94,8 +93,12 @@ class GuideMap(gtk.DrawingArea):
if self.backbuf and self.gc:
self.window.draw_pixbuf( self.gc, self.backbuf, 0,0, 0,0, -1,-1)
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])
self.window.draw_rectangle( self.gc, False, r[0],r[1], r[2],r[3])
r = self.map_to_screen(self.current_area[0],
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
def size_allocate_cb(self,widget,allocation):
@ -109,7 +112,10 @@ class GuideMap(gtk.DrawingArea):
new_size = (allocation.width,allocation.height)
if new_size is not self.old_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()
def map_to_screen( self, x,y,w,h):
@ -122,7 +128,8 @@ class GuideMap(gtk.DrawingArea):
# Zoomable map image
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)
self.map_pixbuf = map_pixbuf
self.place_marker_pixbuf = place_marker_pixbuf
@ -152,9 +159,17 @@ class ZoomMap( gtk.DrawingArea):
self.size_allocate_cb( self,self.get_allocation())
if self.backbuf and self.gc:
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())
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)
px = int((float(self.zoom_pos[1]) + 180.0) / 360.0
* self.backbuf.get_width())
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)
# Scale backbuffer
@ -171,8 +186,10 @@ class ZoomMap( gtk.DrawingArea):
pw = int(self.old_size[0]*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())
py = int((90-float(self.zoom_pos[0])) / 180.0 * self.map_pixbuf.get_height())
px = int((float(self.zoom_pos[1]) + 180.0) / 360.0
* 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)
py = max( ph/2, py)
@ -180,10 +197,13 @@ class ZoomMap( gtk.DrawingArea):
px = min( px, self.map_pixbuf.get_width()-pw/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)
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()
if self.guide:
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.queue_draw()
def zoom_in(self):
def zoom_out(self):
self.magnifer = min( 10, self.magnifer * 1.5)
self.backbuf = None
self.queue_draw()
def zoom_out(self):
def zoom_in(self):
self.magnifer = max( 0.1, self.magnifer * 0.75)
self.backbuf = None
self.queue_draw()
@ -266,10 +286,14 @@ class MapView(PageView.PageView):
def define_actions(self):
print "MapView.define_actions"
self.add_action('ZoomIn', gtk.STOCK_ZOOM_IN, "Zoom _In", callback=self.zoom_in_cb)
self.add_action('ZoomOut', gtk.STOCK_ZOOM_OUT, "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)
self.add_action('ZoomIn',gtk.STOCK_ZOOM_IN,
"Zoom _In",callback=self.zoom_in_cb)
self.add_action('ZoomOut',gtk.STOCK_ZOOM_OUT,
"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):
"""
@ -293,10 +317,11 @@ class MapView(PageView.PageView):
# On the right side
vbox = gtk.VBox( False, 4)
hbox.pack_start( vbox, False, True, 0)
hbox.pack_start( vbox, False, False, 0)
# 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)
vbox.pack_start( self.guide_map, False, True, 0)
@ -304,7 +329,10 @@ class MapView(PageView.PageView):
# And the place list
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)
@ -340,7 +368,8 @@ class MapView(PageView.PageView):
(model,sel) = s.get_selected_rows()
for path in sel:
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
def zoom_in_cb(self,obj):

View File

@ -1,7 +1,7 @@
#
# 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
# 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
#
# $Id$
#-------------------------------------------------------------------------
#
# Standard python modules
#
#-------------------------------------------------------------------------
from gettext import gettext as _
from bsddb import db
import os
@ -44,7 +45,7 @@ except:
# GRAMPS modules
#
#-------------------------------------------------------------------------
import DbState
import DisplayState
import DbPrompter
import const
import PluginMgr
@ -176,7 +177,7 @@ class ViewManager:
vbox.pack_end(self.statusbar,False)
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)
person_nav = Navigation.PersonNavigation(self.uistate)
@ -797,4 +798,3 @@ def format_maker(formats):
box.add(type_selector)
box.show_all()
return (box,type_selector)

View File

@ -36,7 +36,7 @@ import const
import Errors
import PluginMgr
import TipOfDay
import DbState
import GrampsDbBase
from GrampsMime import mime_type_is_defined
from QuestionDialog import ErrorDialog
@ -44,19 +44,20 @@ from QuestionDialog import ErrorDialog
import gnome
iconpaths = [".","/usr/share/gramps"]
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, '')),
('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, '')),
('people48.png',('gramps-person','Person',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,'')),
('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
@ -86,6 +87,12 @@ def register_stock_icons ():
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):
@ -107,9 +114,10 @@ class Gramps:
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."))
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:
@ -118,9 +126,11 @@ class Gramps:
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)
_("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
@ -150,7 +160,7 @@ class Gramps:
register_stock_icons()
state = DbState.DbState()
state = GrampsDbBase.DbState()
a = ViewManager.ViewManager(state)
a.register_view(PersonView.PersonView)