2005-08-09 10:11:20 +05:30
|
|
|
#
|
|
|
|
# Gramps - a GTK+/GNOME based genealogy program
|
|
|
|
#
|
2007-06-14 11:02:06 +05:30
|
|
|
# Copyright (C) 2000-2007 Donald N. Allingham
|
2008-05-19 00:54:28 +05:30
|
|
|
# Copyright (C) 2008 Brian G. Matherly
|
2005-08-09 10:11:20 +05:30
|
|
|
#
|
|
|
|
# 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.
|
|
|
|
#
|
2007-09-17 00:15:57 +05:30
|
|
|
# This program is distributed in the hope that it will be useful,
|
2005-08-09 10:11:20 +05:30
|
|
|
# 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$
|
|
|
|
|
|
|
|
#-------------------------------------------------------------------------
|
|
|
|
#
|
|
|
|
# Standard python modules
|
|
|
|
#
|
|
|
|
#-------------------------------------------------------------------------
|
2005-12-16 03:20:14 +05:30
|
|
|
from cStringIO import StringIO
|
2006-05-18 07:09:50 +05:30
|
|
|
from gettext import gettext as _
|
2005-08-09 10:11:20 +05:30
|
|
|
|
2006-03-05 10:15:44 +05:30
|
|
|
#-------------------------------------------------------------------------
|
|
|
|
#
|
|
|
|
# set up logging
|
|
|
|
#
|
|
|
|
#-------------------------------------------------------------------------
|
|
|
|
import logging
|
2007-06-14 11:02:06 +05:30
|
|
|
_LOG = logging.getLogger(".DisplayState")
|
2006-03-05 10:15:44 +05:30
|
|
|
|
2005-08-09 10:11:20 +05:30
|
|
|
#-------------------------------------------------------------------------
|
|
|
|
#
|
|
|
|
# GNOME python modules
|
|
|
|
#
|
|
|
|
#-------------------------------------------------------------------------
|
2008-02-19 01:37:09 +05:30
|
|
|
import gtk
|
|
|
|
from gtk import glade
|
2005-08-09 10:11:20 +05:30
|
|
|
import gobject
|
|
|
|
|
|
|
|
#-------------------------------------------------------------------------
|
|
|
|
#
|
|
|
|
# GRAMPS modules
|
|
|
|
#
|
|
|
|
#-------------------------------------------------------------------------
|
2008-01-07 03:55:41 +05:30
|
|
|
import gen.utils
|
2006-03-03 05:40:52 +05:30
|
|
|
import Config
|
2007-06-28 11:11:40 +05:30
|
|
|
from BasicUtils import name_displayer
|
2006-01-24 03:18:34 +05:30
|
|
|
import const
|
2006-04-01 09:29:42 +05:30
|
|
|
import ManagedWindow
|
2008-05-19 00:54:28 +05:30
|
|
|
from PluginUtils import PluginManager
|
2006-04-01 09:29:42 +05:30
|
|
|
|
|
|
|
DISABLED = -1
|
2005-08-09 10:11:20 +05:30
|
|
|
|
2005-08-15 09:15:16 +05:30
|
|
|
#-------------------------------------------------------------------------
|
|
|
|
#
|
|
|
|
# History manager
|
|
|
|
#
|
|
|
|
#-------------------------------------------------------------------------
|
2008-02-21 10:28:56 +05:30
|
|
|
class History(gen.utils.Callback):
|
2007-09-17 00:15:57 +05:30
|
|
|
""" History manages the objects of a certain type that have been viewed,
|
2007-09-09 03:36:30 +05:30
|
|
|
with ability to go back, or forward.
|
|
|
|
When accessing an object, it should be pushed on the History.
|
|
|
|
"""
|
2005-08-11 05:23:24 +05:30
|
|
|
|
|
|
|
__signals__ = {
|
2007-09-17 00:15:57 +05:30
|
|
|
'changed' : (list, ),
|
|
|
|
'menu-changed' : (list, ),
|
2005-08-11 05:23:24 +05:30
|
|
|
}
|
2005-08-09 10:11:20 +05:30
|
|
|
|
|
|
|
def __init__(self):
|
2008-02-21 10:28:56 +05:30
|
|
|
gen.utils.Callback.__init__(self)
|
2007-09-17 00:15:57 +05:30
|
|
|
self.clear()
|
2005-08-09 10:11:20 +05:30
|
|
|
|
|
|
|
def clear(self):
|
2007-09-17 00:15:57 +05:30
|
|
|
"""
|
|
|
|
Cleares the history, resetting the values back to their defaults
|
|
|
|
"""
|
2005-08-09 10:11:20 +05:30
|
|
|
self.history = []
|
2005-12-25 09:31:47 +05:30
|
|
|
self.mhistory = []
|
2005-08-09 10:11:20 +05:30
|
|
|
self.index = -1
|
|
|
|
self.lock = False
|
|
|
|
|
2007-09-17 00:15:57 +05:30
|
|
|
def remove(self, handle, old_id=None):
|
|
|
|
"""
|
2008-02-24 19:25:55 +05:30
|
|
|
Remove a handle from the history list
|
2007-09-17 00:15:57 +05:30
|
|
|
"""
|
2005-08-09 10:11:20 +05:30
|
|
|
if old_id:
|
|
|
|
del_id = old_id
|
|
|
|
else:
|
2007-09-17 00:15:57 +05:30
|
|
|
del_id = handle
|
2005-08-09 10:11:20 +05:30
|
|
|
|
2007-05-21 09:14:18 +05:30
|
|
|
history_count = self.history.count(del_id)
|
|
|
|
for c in range(history_count):
|
2005-08-09 10:11:20 +05:30
|
|
|
self.history.remove(del_id)
|
|
|
|
self.index -= 1
|
|
|
|
|
|
|
|
mhc = self.mhistory.count(del_id)
|
|
|
|
for c in range(mhc):
|
|
|
|
self.mhistory.remove(del_id)
|
2007-05-21 09:14:18 +05:30
|
|
|
self.emit('changed', (self.history, ))
|
|
|
|
self.emit('menu-changed', (self.mhistory, ))
|
2005-08-09 10:11:20 +05:30
|
|
|
|
2007-09-17 00:15:57 +05:30
|
|
|
def push(self, handle):
|
|
|
|
"""
|
|
|
|
Pushes the handle on the history stack
|
|
|
|
"""
|
2005-08-10 19:58:16 +05:30
|
|
|
self.prune()
|
2007-09-17 00:15:57 +05:30
|
|
|
if len(self.history) == 0 or handle != self.history[-1]:
|
|
|
|
self.history.append(handle)
|
|
|
|
if handle in self.mhistory:
|
|
|
|
self.mhistory.remove(handle)
|
|
|
|
self.mhistory.append(handle)
|
2005-08-10 19:58:16 +05:30
|
|
|
self.index += 1
|
2007-05-21 09:14:18 +05:30
|
|
|
self.emit('menu-changed', (self.mhistory, ))
|
|
|
|
self.emit('changed', (self.history, ))
|
2005-08-10 19:58:16 +05:30
|
|
|
|
2007-04-03 09:35:36 +05:30
|
|
|
def forward(self, step=1):
|
2007-09-17 00:15:57 +05:30
|
|
|
"""
|
|
|
|
Moves forward in the history list
|
|
|
|
"""
|
2005-08-10 19:58:16 +05:30
|
|
|
self.index += step
|
2007-09-17 00:15:57 +05:30
|
|
|
handle = self.history[self.index]
|
|
|
|
if handle not in self.mhistory:
|
|
|
|
self.mhistory.append(handle)
|
2007-05-21 09:14:18 +05:30
|
|
|
self.emit('menu-changed', (self.mhistory, ))
|
2005-08-10 19:58:16 +05:30
|
|
|
return str(self.history[self.index])
|
|
|
|
|
2007-04-03 09:35:36 +05:30
|
|
|
def back(self, step=1):
|
2007-09-17 00:15:57 +05:30
|
|
|
"""
|
|
|
|
Moves backward in the history list
|
|
|
|
"""
|
2005-08-10 19:58:16 +05:30
|
|
|
self.index -= step
|
2007-01-22 03:02:53 +05:30
|
|
|
try:
|
2007-09-17 00:15:57 +05:30
|
|
|
handle = self.history[self.index]
|
|
|
|
if handle not in self.mhistory:
|
|
|
|
self.mhistory.append(handle)
|
2007-05-21 09:14:18 +05:30
|
|
|
self.emit('menu-changed', (self.mhistory, ))
|
2007-01-22 03:02:53 +05:30
|
|
|
return str(self.history[self.index])
|
|
|
|
except IndexError:
|
|
|
|
return u""
|
2007-09-09 03:36:30 +05:30
|
|
|
|
|
|
|
def present(self):
|
2008-02-18 21:22:40 +05:30
|
|
|
"""
|
2007-09-17 00:15:57 +05:30
|
|
|
return the person handle that is now active in the history
|
2008-02-18 21:22:40 +05:30
|
|
|
"""
|
2007-09-09 03:36:30 +05:30
|
|
|
try :
|
|
|
|
if self.history :
|
|
|
|
return self.history[self.index]
|
|
|
|
else:
|
|
|
|
return u""
|
|
|
|
except IndexError:
|
|
|
|
return u""
|
|
|
|
|
2005-08-10 19:58:16 +05:30
|
|
|
def at_end(self):
|
2007-09-17 00:15:57 +05:30
|
|
|
"""
|
|
|
|
returns True if we are at the end of the history list
|
|
|
|
"""
|
2005-08-10 19:58:16 +05:30
|
|
|
return self.index+1 == len(self.history)
|
|
|
|
|
|
|
|
def at_front(self):
|
2007-09-17 00:15:57 +05:30
|
|
|
"""
|
|
|
|
returns True if we are at the front of the history list
|
|
|
|
"""
|
2005-08-11 22:49:03 +05:30
|
|
|
return self.index <= 0
|
2005-08-10 19:58:16 +05:30
|
|
|
|
|
|
|
def prune(self):
|
2007-09-17 00:15:57 +05:30
|
|
|
"""
|
|
|
|
Truncates the history list at the current object.
|
|
|
|
"""
|
2005-08-10 19:58:16 +05:30
|
|
|
if not self.at_end():
|
|
|
|
self.history = self.history[0:self.index+1]
|
|
|
|
|
2005-12-24 05:39:04 +05:30
|
|
|
|
|
|
|
#-------------------------------------------------------------------------
|
|
|
|
#
|
|
|
|
# Recent Docs Menu
|
|
|
|
#
|
|
|
|
#-------------------------------------------------------------------------
|
|
|
|
|
2007-06-14 11:02:06 +05:30
|
|
|
_RCT_TOP = '<ui><menubar name="MenuBar"><menu action="FileMenu"><menu action="OpenRecent">'
|
|
|
|
_RCT_BTM = '</menu></menu></menubar></ui>'
|
2005-12-24 05:39:04 +05:30
|
|
|
|
|
|
|
import RecentFiles
|
|
|
|
import os
|
|
|
|
|
|
|
|
class RecentDocsMenu:
|
2007-05-21 09:14:18 +05:30
|
|
|
def __init__(self, uistate, state, fileopen):
|
2005-12-24 05:39:04 +05:30
|
|
|
self.action_group = gtk.ActionGroup('RecentFiles')
|
|
|
|
self.active = DISABLED
|
2006-01-05 02:36:28 +05:30
|
|
|
self.uistate = uistate
|
|
|
|
self.uimanager = uistate.uimanager
|
2005-12-25 00:48:18 +05:30
|
|
|
self.fileopen = fileopen
|
|
|
|
self.state = state
|
|
|
|
|
2007-05-21 09:14:18 +05:30
|
|
|
def load(self, item):
|
2007-06-14 11:02:06 +05:30
|
|
|
filename = item.get_path()
|
2007-09-10 07:39:50 +05:30
|
|
|
self.fileopen(filename)
|
2005-12-24 05:39:04 +05:30
|
|
|
|
|
|
|
def build(self):
|
2007-05-21 09:14:18 +05:30
|
|
|
buf = StringIO()
|
2007-06-14 11:02:06 +05:30
|
|
|
buf.write(_RCT_TOP)
|
|
|
|
gramps_rf = RecentFiles.RecentFiles()
|
2005-12-24 05:39:04 +05:30
|
|
|
|
|
|
|
count = 0
|
|
|
|
|
|
|
|
if self.active != DISABLED:
|
|
|
|
self.uimanager.remove_ui(self.active)
|
|
|
|
self.uimanager.remove_action_group(self.action_group)
|
2007-10-15 01:14:58 +05:30
|
|
|
self.action_group = gtk.ActionGroup('RecentFiles')
|
2005-12-24 05:39:04 +05:30
|
|
|
self.active = DISABLED
|
|
|
|
|
|
|
|
actions = []
|
2005-12-25 09:31:47 +05:30
|
|
|
rfiles = gramps_rf.gramps_recent_files
|
|
|
|
rfiles.sort(by_time)
|
2006-11-27 08:54:39 +05:30
|
|
|
|
|
|
|
new_menu = gtk.Menu()
|
|
|
|
|
2005-12-25 09:31:47 +05:30
|
|
|
for item in rfiles:
|
2005-12-24 05:39:04 +05:30
|
|
|
try:
|
2007-06-14 11:02:06 +05:30
|
|
|
title = item.get_name().replace('_', '__')
|
|
|
|
filename = os.path.basename(item.get_path())
|
2005-12-24 05:39:04 +05:30
|
|
|
action_id = "RecentMenu%d" % count
|
2007-05-21 09:14:18 +05:30
|
|
|
buf.write('<menuitem action="%s"/>' % action_id)
|
2007-09-17 00:15:57 +05:30
|
|
|
actions.append((action_id, None, title, None, None,
|
2007-05-21 09:14:18 +05:30
|
|
|
make_callback(item, self.load)))
|
2007-06-14 11:02:06 +05:30
|
|
|
mitem = gtk.MenuItem(title)
|
2006-11-27 08:54:39 +05:30
|
|
|
mitem.connect('activate', make_callback(item, self.load))
|
|
|
|
mitem.show()
|
|
|
|
new_menu.append(mitem)
|
2005-12-24 05:39:04 +05:30
|
|
|
except RuntimeError:
|
|
|
|
pass # ignore no longer existing files
|
|
|
|
|
2007-05-21 09:14:18 +05:30
|
|
|
count += 1
|
2007-06-14 11:02:06 +05:30
|
|
|
buf.write(_RCT_BTM)
|
2005-12-24 05:39:04 +05:30
|
|
|
self.action_group.add_actions(actions)
|
2007-05-21 09:14:18 +05:30
|
|
|
self.uimanager.insert_action_group(self.action_group, 1)
|
|
|
|
self.active = self.uimanager.add_ui_from_string(buf.getvalue())
|
2006-04-27 03:45:22 +05:30
|
|
|
self.uimanager.ensure_update()
|
2007-05-21 09:14:18 +05:30
|
|
|
buf.close()
|
2005-12-24 05:39:04 +05:30
|
|
|
|
2008-01-24 03:28:09 +05:30
|
|
|
if len(rfiles) > 0:
|
|
|
|
new_menu.show()
|
|
|
|
self.uistate.set_open_recent_menu(new_menu)
|
2006-01-05 02:36:28 +05:30
|
|
|
|
2007-05-21 09:14:18 +05:30
|
|
|
def make_callback(val, func):
|
|
|
|
return lambda x: func(val)
|
2005-12-25 00:48:18 +05:30
|
|
|
|
2007-05-21 09:14:18 +05:30
|
|
|
def by_time(first, second):
|
|
|
|
return cmp(second.get_time(), first.get_time())
|
2005-12-25 09:31:47 +05:30
|
|
|
|
2005-08-15 09:15:16 +05:30
|
|
|
|
2006-01-24 03:18:34 +05:30
|
|
|
from GrampsLogger import RotateHandler
|
|
|
|
|
|
|
|
class WarnHandler(RotateHandler):
|
2007-05-21 09:14:18 +05:30
|
|
|
|
|
|
|
def __init__(self, capacity, button):
|
|
|
|
RotateHandler.__init__(self, capacity)
|
2006-01-24 03:18:34 +05:30
|
|
|
self.setLevel(logging.WARN)
|
|
|
|
self.button = button
|
|
|
|
button.on_clicked(self.display)
|
2006-01-24 04:06:34 +05:30
|
|
|
self.timer = None
|
2006-01-24 03:18:34 +05:30
|
|
|
|
2007-05-21 09:14:18 +05:30
|
|
|
def emit(self, record):
|
2006-01-24 04:06:34 +05:30
|
|
|
if self.timer:
|
|
|
|
gobject.source_remove(self.timer)
|
2007-05-21 09:14:18 +05:30
|
|
|
gobject.timeout_add(180*1000, self._clear)
|
|
|
|
RotateHandler.emit(self, record)
|
2006-01-24 03:18:34 +05:30
|
|
|
self.button.show()
|
|
|
|
|
2006-01-24 04:06:34 +05:30
|
|
|
def _clear(self):
|
|
|
|
self.button.hide()
|
|
|
|
self.set_capacity(self._capacity)
|
|
|
|
self.timer = None
|
|
|
|
return False
|
|
|
|
|
2007-05-21 09:14:18 +05:30
|
|
|
def display(self, obj):
|
2006-01-24 03:18:34 +05:30
|
|
|
obj.hide()
|
2008-02-19 01:37:09 +05:30
|
|
|
xml = glade.XML(const.GLADE_FILE, 'scrollmsg')
|
2007-05-21 09:14:18 +05:30
|
|
|
top = xml.get_widget('scrollmsg')
|
|
|
|
msg = xml.get_widget('msg')
|
2006-01-24 03:18:34 +05:30
|
|
|
buf = msg.get_buffer()
|
|
|
|
for i in self.get_formatted_log():
|
|
|
|
buf.insert_at_cursor(i + '\n')
|
2006-01-24 04:06:34 +05:30
|
|
|
self.set_capacity(self._capacity)
|
2006-01-24 03:18:34 +05:30
|
|
|
top.run()
|
2006-01-24 04:06:34 +05:30
|
|
|
top.destroy()
|
2006-01-24 03:18:34 +05:30
|
|
|
|
2008-02-21 10:28:56 +05:30
|
|
|
class DisplayState(gen.utils.Callback):
|
2005-08-11 05:23:24 +05:30
|
|
|
|
|
|
|
__signals__ = {
|
2007-09-17 00:15:57 +05:30
|
|
|
'filters-changed' : (str, ),
|
|
|
|
'filter-name-changed' : (str, unicode, unicode),
|
|
|
|
'nameformat-changed' : None,
|
2005-08-11 05:23:24 +05:30
|
|
|
}
|
|
|
|
|
2007-02-18 01:29:21 +05:30
|
|
|
def __init__(self, window, status, progress, warnbtn, uimanager,
|
2008-02-15 19:48:55 +05:30
|
|
|
progress_monitor, viewmanager=None):
|
2007-01-16 11:24:40 +05:30
|
|
|
|
|
|
|
self.busy = False
|
2008-02-15 19:48:55 +05:30
|
|
|
self.viewmanager = viewmanager
|
2005-08-11 05:23:24 +05:30
|
|
|
self.uimanager = uimanager
|
2007-02-18 01:29:21 +05:30
|
|
|
self.progress_monitor = progress_monitor
|
2005-08-11 05:23:24 +05:30
|
|
|
self.window = window
|
2008-02-21 10:28:56 +05:30
|
|
|
gen.utils.Callback.__init__(self)
|
2005-08-11 05:23:24 +05:30
|
|
|
self.status = status
|
|
|
|
self.status_id = status.get_context_id('GRAMPS')
|
2006-03-01 11:46:36 +05:30
|
|
|
self.progress = progress
|
2005-08-11 05:23:24 +05:30
|
|
|
self.phistory = History()
|
2006-04-01 09:29:42 +05:30
|
|
|
self.gwm = ManagedWindow.GrampsWindowManager(uimanager)
|
2006-01-05 02:36:28 +05:30
|
|
|
self.widget = None
|
2007-11-22 04:45:10 +05:30
|
|
|
self.disprel_old = ''
|
|
|
|
self.disprel_defpers = None
|
|
|
|
self.disprel_active = None
|
2006-01-23 09:39:20 +05:30
|
|
|
self.warnbtn = warnbtn
|
2007-04-09 08:31:14 +05:30
|
|
|
self.last_bar = self.status.insert(min_width=15, ralign=True)
|
2007-10-26 04:45:28 +05:30
|
|
|
self.set_relationship_class()
|
2006-01-05 02:36:28 +05:30
|
|
|
|
2006-01-24 04:06:34 +05:30
|
|
|
formatter = logging.Formatter('%(levelname)s %(name)s: %(message)s')
|
2007-05-21 09:14:18 +05:30
|
|
|
self.rhandler = WarnHandler(capacity=400, button=warnbtn)
|
|
|
|
self.rhandler.setFormatter(formatter)
|
|
|
|
self.rhandler.setLevel(logging.WARNING)
|
2006-01-24 03:18:34 +05:30
|
|
|
self.log = logging.getLogger()
|
2007-05-21 09:14:18 +05:30
|
|
|
self.log.addHandler(self.rhandler)
|
2007-09-17 00:15:57 +05:30
|
|
|
# This call has been moved one level up,
|
In .:
2006-07-31 Alex Roitman <shura@gramps-project.org>
* src/Filters/_SearchBar.py (SearchBar.__init__): Take dbstate as
a constructor argument; (SearchBar.apply_filter): pass dbstate.
* src/PageView.py (BookMarkView.add_bookmark,
PersonNavView.jumpto, PersonNavView.fwd_clicked,
PersonNavView.back_clicked, ListView.build_widget): Pass dbstate.
* src/Navigation.py (BaseNavigation.__init__,
PersonNavigation.__init__): Take dbstate as a constructor argument;
(PersonNavigation.build_item_name): properly access dbstate.
* src/DisplayState.py (__init__): Do not take dbstate as a
constructor argument; Do not connect dbstate signal here (moved to
ViewManager);
(display_relationship,push_message,modify_statusbar): Make dbstate
an argument.
* src/plugins/Checkpoint.py (run_tool): Pass dbstate.
* src/ViewManager.py (_build_main_window): Do not pass dbstate to
uistate DisplayState constructor; connect dbstate signal handler;
pass dbstate to Navigation; (keypress): Pass dbstate;
(statusbar_key_update): Pass dbstate;
(do_load_plugins): Pass dbstate;
(ViewManager.add_bookmark): Pass dbstate.
* src/DataViews/_RelationView.py (shade_update): Pass dbstate.
* src/DataViews/_PersonView.py (build_widget,_goto,
key_goto_home_person, key_edit_selected_person): Pass dbstate.
* src/Filters/Makefile.am (pkgdata_PYTHON): Remove obsolete file.
* src/Filters/__init__.py: Remove importing obsolete module.
* src/Filters/_FilterWidget.py: Remove obsolete module.
In po:
2006-07-31 Alex Roitman <shura@gramps-project.org>
* POTFILES.in: Remove obsolete file.
svn: r7104
2006-08-01 10:01:10 +05:30
|
|
|
# but this connection is still made!
|
|
|
|
# self.dbstate.connect('database-changed', self.db_changed)
|
2007-01-28 08:21:18 +05:30
|
|
|
|
|
|
|
def set_sensitive(self, state):
|
|
|
|
self.window.set_sensitive(state)
|
2006-05-07 04:19:51 +05:30
|
|
|
|
|
|
|
def db_changed(self, db):
|
2007-02-18 01:29:21 +05:30
|
|
|
db.connect('long-op-start', self.progress_monitor.add_op)
|
2006-05-07 04:19:51 +05:30
|
|
|
|
2007-10-26 04:45:28 +05:30
|
|
|
def set_relationship_class(self):
|
|
|
|
"""method that rebinds the relationship to the current rel calc
|
|
|
|
Should be called after load or reload of plugins
|
|
|
|
"""
|
2008-05-19 00:54:28 +05:30
|
|
|
pmgr = PluginManager.get_instance()
|
|
|
|
self.relationship = pmgr.get_relationship_calculator()
|
2007-11-22 21:43:10 +05:30
|
|
|
|
|
|
|
def set_gendepth(self, value):
|
|
|
|
""" Set the generations we search back for showing relationships
|
|
|
|
on GRAMPS interface. Value must be integer > 0
|
|
|
|
This method will be used by the preference editor when user changes
|
|
|
|
the generations.
|
|
|
|
"""
|
|
|
|
self.relationship.set_depth(value)
|
2007-10-26 04:45:28 +05:30
|
|
|
|
2007-05-21 09:14:18 +05:30
|
|
|
def display_relationship(self, dbstate):
|
2008-02-18 21:22:40 +05:30
|
|
|
""" Construct the relationship in order to show it in the statusbar
|
2007-11-22 04:45:10 +05:30
|
|
|
This can be a time intensive calculation, so we only want to do
|
|
|
|
it if persons are different than before.
|
|
|
|
Eg: select a person, then double click, will result in calling
|
|
|
|
three times to construct build the statusbar. We only want
|
|
|
|
to obtain relationship once!
|
|
|
|
This means the relationship part of statusbar only changes on
|
|
|
|
change of row.
|
2008-02-18 21:22:40 +05:30
|
|
|
"""
|
2007-11-22 04:45:10 +05:30
|
|
|
self.relationship.connect_db_signals(dbstate)
|
In .:
2006-07-31 Alex Roitman <shura@gramps-project.org>
* src/Filters/_SearchBar.py (SearchBar.__init__): Take dbstate as
a constructor argument; (SearchBar.apply_filter): pass dbstate.
* src/PageView.py (BookMarkView.add_bookmark,
PersonNavView.jumpto, PersonNavView.fwd_clicked,
PersonNavView.back_clicked, ListView.build_widget): Pass dbstate.
* src/Navigation.py (BaseNavigation.__init__,
PersonNavigation.__init__): Take dbstate as a constructor argument;
(PersonNavigation.build_item_name): properly access dbstate.
* src/DisplayState.py (__init__): Do not take dbstate as a
constructor argument; Do not connect dbstate signal here (moved to
ViewManager);
(display_relationship,push_message,modify_statusbar): Make dbstate
an argument.
* src/plugins/Checkpoint.py (run_tool): Pass dbstate.
* src/ViewManager.py (_build_main_window): Do not pass dbstate to
uistate DisplayState constructor; connect dbstate signal handler;
pass dbstate to Navigation; (keypress): Pass dbstate;
(statusbar_key_update): Pass dbstate;
(do_load_plugins): Pass dbstate;
(ViewManager.add_bookmark): Pass dbstate.
* src/DataViews/_RelationView.py (shade_update): Pass dbstate.
* src/DataViews/_PersonView.py (build_widget,_goto,
key_goto_home_person, key_edit_selected_person): Pass dbstate.
* src/Filters/Makefile.am (pkgdata_PYTHON): Remove obsolete file.
* src/Filters/__init__.py: Remove importing obsolete module.
* src/Filters/_FilterWidget.py: Remove obsolete module.
In po:
2006-07-31 Alex Roitman <shura@gramps-project.org>
* POTFILES.in: Remove obsolete file.
svn: r7104
2006-08-01 10:01:10 +05:30
|
|
|
default_person = dbstate.db.get_default_person()
|
|
|
|
active = dbstate.get_active_person()
|
2008-06-16 20:31:46 +05:30
|
|
|
if default_person is None or active is None:
|
2006-05-07 04:19:51 +05:30
|
|
|
return u''
|
2007-11-22 04:45:10 +05:30
|
|
|
if default_person.handle == self.disprel_defpers and \
|
|
|
|
active.handle == self.disprel_active :
|
|
|
|
return self.disprel_old
|
2007-11-06 16:14:17 +05:30
|
|
|
|
|
|
|
name = self.relationship.get_one_relationship(
|
|
|
|
dbstate.db, default_person, active)
|
2007-11-22 04:45:10 +05:30
|
|
|
#store present call data
|
|
|
|
self.disprel_old = name
|
|
|
|
self.disprel_defpers = default_person.handle
|
|
|
|
self.disprel_active = active.handle
|
2006-05-07 04:19:51 +05:30
|
|
|
if name:
|
2007-11-06 16:14:17 +05:30
|
|
|
return name
|
2006-05-07 04:19:51 +05:30
|
|
|
else:
|
|
|
|
return u""
|
2006-01-24 03:18:34 +05:30
|
|
|
|
2007-09-17 00:15:57 +05:30
|
|
|
def clear_history(self, handle=None):
|
2008-02-18 21:22:40 +05:30
|
|
|
"""Clear the history. If handle is given, then the history is
|
2007-09-09 03:36:30 +05:30
|
|
|
immediately initialized with a first entry
|
|
|
|
(you'd eg want active person you view there as History contains the
|
|
|
|
present object too!)
|
2008-02-18 21:22:40 +05:30
|
|
|
"""
|
2006-02-10 11:06:32 +05:30
|
|
|
self.phistory.clear()
|
2007-09-09 03:36:30 +05:30
|
|
|
if handle :
|
|
|
|
self.phistory.push(handle)
|
2006-02-10 11:06:32 +05:30
|
|
|
|
2007-05-21 09:14:18 +05:30
|
|
|
def set_busy_cursor(self, value):
|
2007-01-16 11:24:40 +05:30
|
|
|
if value == self.busy:
|
|
|
|
return
|
|
|
|
else:
|
|
|
|
self.busy = value
|
2006-02-02 22:30:37 +05:30
|
|
|
if value:
|
|
|
|
self.window.window.set_cursor(gtk.gdk.Cursor(gtk.gdk.WATCH))
|
|
|
|
else:
|
|
|
|
self.window.window.set_cursor(None)
|
|
|
|
while gtk.events_pending():
|
|
|
|
gtk.main_iteration()
|
|
|
|
|
2007-05-21 09:14:18 +05:30
|
|
|
def set_open_widget(self, widget):
|
2006-01-05 02:36:28 +05:30
|
|
|
self.widget = widget
|
|
|
|
|
2007-05-21 09:14:18 +05:30
|
|
|
def set_open_recent_menu(self, menu):
|
2006-01-05 02:36:28 +05:30
|
|
|
self.widget.set_menu(menu)
|
2005-08-11 05:23:24 +05:30
|
|
|
|
In .:
2006-07-31 Alex Roitman <shura@gramps-project.org>
* src/Filters/_SearchBar.py (SearchBar.__init__): Take dbstate as
a constructor argument; (SearchBar.apply_filter): pass dbstate.
* src/PageView.py (BookMarkView.add_bookmark,
PersonNavView.jumpto, PersonNavView.fwd_clicked,
PersonNavView.back_clicked, ListView.build_widget): Pass dbstate.
* src/Navigation.py (BaseNavigation.__init__,
PersonNavigation.__init__): Take dbstate as a constructor argument;
(PersonNavigation.build_item_name): properly access dbstate.
* src/DisplayState.py (__init__): Do not take dbstate as a
constructor argument; Do not connect dbstate signal here (moved to
ViewManager);
(display_relationship,push_message,modify_statusbar): Make dbstate
an argument.
* src/plugins/Checkpoint.py (run_tool): Pass dbstate.
* src/ViewManager.py (_build_main_window): Do not pass dbstate to
uistate DisplayState constructor; connect dbstate signal handler;
pass dbstate to Navigation; (keypress): Pass dbstate;
(statusbar_key_update): Pass dbstate;
(do_load_plugins): Pass dbstate;
(ViewManager.add_bookmark): Pass dbstate.
* src/DataViews/_RelationView.py (shade_update): Pass dbstate.
* src/DataViews/_PersonView.py (build_widget,_goto,
key_goto_home_person, key_edit_selected_person): Pass dbstate.
* src/Filters/Makefile.am (pkgdata_PYTHON): Remove obsolete file.
* src/Filters/__init__.py: Remove importing obsolete module.
* src/Filters/_FilterWidget.py: Remove obsolete module.
In po:
2006-07-31 Alex Roitman <shura@gramps-project.org>
* POTFILES.in: Remove obsolete file.
svn: r7104
2006-08-01 10:01:10 +05:30
|
|
|
def push_message(self, dbstate, text):
|
2005-12-23 11:05:32 +05:30
|
|
|
self.status_text(text)
|
2007-05-21 09:14:18 +05:30
|
|
|
gobject.timeout_add(5000, self.modify_statusbar, dbstate)
|
2005-12-23 11:05:32 +05:30
|
|
|
|
2007-04-02 04:07:10 +05:30
|
|
|
def show_filter_results(self, dbstate, matched, total):
|
2007-04-03 09:35:36 +05:30
|
|
|
text = "%d/%d" % (matched, total)
|
2007-04-02 04:07:10 +05:30
|
|
|
self.status.pop(1, self.last_bar)
|
|
|
|
self.status.push(1, text, self.last_bar)
|
|
|
|
|
|
|
|
def clear_filter_results(self):
|
|
|
|
self.status.pop(1, self.last_bar)
|
|
|
|
self.status.push(1, '', self.last_bar)
|
|
|
|
|
2007-05-21 09:14:18 +05:30
|
|
|
def modify_statusbar(self, dbstate, active=None):
|
2005-08-09 10:11:20 +05:30
|
|
|
self.status.pop(self.status_id)
|
2008-06-16 20:31:46 +05:30
|
|
|
if dbstate.active is None:
|
2007-05-21 09:14:18 +05:30
|
|
|
self.status.push(self.status_id, "")
|
2005-08-09 10:11:20 +05:30
|
|
|
else:
|
In .:
2006-07-31 Alex Roitman <shura@gramps-project.org>
* src/Filters/_SearchBar.py (SearchBar.__init__): Take dbstate as
a constructor argument; (SearchBar.apply_filter): pass dbstate.
* src/PageView.py (BookMarkView.add_bookmark,
PersonNavView.jumpto, PersonNavView.fwd_clicked,
PersonNavView.back_clicked, ListView.build_widget): Pass dbstate.
* src/Navigation.py (BaseNavigation.__init__,
PersonNavigation.__init__): Take dbstate as a constructor argument;
(PersonNavigation.build_item_name): properly access dbstate.
* src/DisplayState.py (__init__): Do not take dbstate as a
constructor argument; Do not connect dbstate signal here (moved to
ViewManager);
(display_relationship,push_message,modify_statusbar): Make dbstate
an argument.
* src/plugins/Checkpoint.py (run_tool): Pass dbstate.
* src/ViewManager.py (_build_main_window): Do not pass dbstate to
uistate DisplayState constructor; connect dbstate signal handler;
pass dbstate to Navigation; (keypress): Pass dbstate;
(statusbar_key_update): Pass dbstate;
(do_load_plugins): Pass dbstate;
(ViewManager.add_bookmark): Pass dbstate.
* src/DataViews/_RelationView.py (shade_update): Pass dbstate.
* src/DataViews/_PersonView.py (build_widget,_goto,
key_goto_home_person, key_edit_selected_person): Pass dbstate.
* src/Filters/Makefile.am (pkgdata_PYTHON): Remove obsolete file.
* src/Filters/__init__.py: Remove importing obsolete module.
* src/Filters/_FilterWidget.py: Remove obsolete module.
In po:
2006-07-31 Alex Roitman <shura@gramps-project.org>
* POTFILES.in: Remove obsolete file.
svn: r7104
2006-08-01 10:01:10 +05:30
|
|
|
person = dbstate.get_active_person()
|
2006-06-17 02:56:44 +05:30
|
|
|
if person:
|
2007-06-28 11:11:40 +05:30
|
|
|
pname = name_displayer.display(person)
|
2007-05-21 09:14:18 +05:30
|
|
|
name = "[%s] %s" % (person.get_gramps_id(), pname)
|
2006-06-20 13:06:41 +05:30
|
|
|
if Config.get(Config.STATUSBAR) > 1:
|
In .:
2006-07-31 Alex Roitman <shura@gramps-project.org>
* src/Filters/_SearchBar.py (SearchBar.__init__): Take dbstate as
a constructor argument; (SearchBar.apply_filter): pass dbstate.
* src/PageView.py (BookMarkView.add_bookmark,
PersonNavView.jumpto, PersonNavView.fwd_clicked,
PersonNavView.back_clicked, ListView.build_widget): Pass dbstate.
* src/Navigation.py (BaseNavigation.__init__,
PersonNavigation.__init__): Take dbstate as a constructor argument;
(PersonNavigation.build_item_name): properly access dbstate.
* src/DisplayState.py (__init__): Do not take dbstate as a
constructor argument; Do not connect dbstate signal here (moved to
ViewManager);
(display_relationship,push_message,modify_statusbar): Make dbstate
an argument.
* src/plugins/Checkpoint.py (run_tool): Pass dbstate.
* src/ViewManager.py (_build_main_window): Do not pass dbstate to
uistate DisplayState constructor; connect dbstate signal handler;
pass dbstate to Navigation; (keypress): Pass dbstate;
(statusbar_key_update): Pass dbstate;
(do_load_plugins): Pass dbstate;
(ViewManager.add_bookmark): Pass dbstate.
* src/DataViews/_RelationView.py (shade_update): Pass dbstate.
* src/DataViews/_PersonView.py (build_widget,_goto,
key_goto_home_person, key_edit_selected_person): Pass dbstate.
* src/Filters/Makefile.am (pkgdata_PYTHON): Remove obsolete file.
* src/Filters/__init__.py: Remove importing obsolete module.
* src/Filters/_FilterWidget.py: Remove obsolete module.
In po:
2006-07-31 Alex Roitman <shura@gramps-project.org>
* POTFILES.in: Remove obsolete file.
svn: r7104
2006-08-01 10:01:10 +05:30
|
|
|
if person.handle != dbstate.db.get_default_handle():
|
|
|
|
msg = self.display_relationship(dbstate)
|
2006-06-20 13:06:41 +05:30
|
|
|
if msg:
|
2007-05-21 09:14:18 +05:30
|
|
|
name = "%s (%s)" % (name, msg.strip())
|
2006-06-07 10:13:18 +05:30
|
|
|
else:
|
|
|
|
name = _("No active person")
|
2007-05-21 09:14:18 +05:30
|
|
|
self.status.push(self.status_id, name)
|
2005-08-09 10:11:20 +05:30
|
|
|
|
|
|
|
while gtk.events_pending():
|
|
|
|
gtk.main_iteration()
|
|
|
|
|
2007-05-21 09:14:18 +05:30
|
|
|
def pulse_progressbar(self, value):
|
|
|
|
self.progress.set_fraction(min(value/100.0, 1.0))
|
2006-03-01 11:46:36 +05:30
|
|
|
self.progress.set_text("%d%%" % value)
|
|
|
|
while gtk.events_pending():
|
|
|
|
gtk.main_iteration()
|
|
|
|
|
2007-05-21 09:14:18 +05:30
|
|
|
def status_text(self, text):
|
2005-08-09 10:11:20 +05:30
|
|
|
self.status.pop(self.status_id)
|
2007-05-21 09:14:18 +05:30
|
|
|
self.status.push(self.status_id, text)
|
2005-08-09 10:11:20 +05:30
|
|
|
while gtk.events_pending():
|
|
|
|
gtk.main_iteration()
|