* src/DisplayState.py: Window management completed

svn: r5559
This commit is contained in:
Don Allingham 2005-12-15 21:50:14 +00:00
parent 04e8f39991
commit cb89ccf8f7
2 changed files with 73 additions and 12 deletions

View File

@ -1,3 +1,6 @@
2005-12-15 Don Allingham <don@gramps-project.org>
* src/DisplayState.py: Window management completed
2005-12-15 Alex Roitman <shura@gramps-project.org> 2005-12-15 Alex Roitman <shura@gramps-project.org>
* src/GrampsBSDDB.py: go back to a single load function; * src/GrampsBSDDB.py: go back to a single load function;
finish gramps_upgrade_9. finish gramps_upgrade_9.

View File

@ -25,6 +25,7 @@
# Standard python modules # Standard python modules
# #
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
from cStringIO import StringIO
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
# #
@ -132,8 +133,9 @@ class History(GrampsDBCallback.GrampsDBCallback):
# #
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
_win_top = '<ui><menubar name="MenuBar"><menu name="WindowsMenu"><placeholder name="WinMenu">' _win_top = '<ui><menubar name="MenuBar"><menu name="WindowsMenu">'
_win_btm = '</placeholder</menu></menubar></ui>' _win_btm = '</menu></menubar></ui>'
DISABLED = -1
class GrampsWindowManager: class GrampsWindowManager:
""" """
@ -160,15 +162,35 @@ class GrampsWindowManager:
Lookup can be also done by ID for windows that are identifiable. Lookup can be also done by ID for windows that are identifiable.
""" """
def __init__(self): def __init__(self,uimanager):
# initialize empty tree and lookup dictionary # initialize empty tree and lookup dictionary
self.uimanager = uimanager
self.window_tree = [] self.window_tree = []
self.id2item = {} self.id2item = {}
self.action_group = gtk.ActionGroup('WindowManger')
self.active = DISABLED
self.ui = _win_top + _win_btm
def disable(self):
"""
Removes the UI and action groups if the navigation is enabled
"""
if self.active != DISABLED:
self.uimanager.remove_ui(self.active)
self.uimanager.remove_action_group(self.action_group)
self.active = DISABLED
def enable(self):
"""
Enables the UI and action groups
"""
self.uimanager.insert_action_group(self.action_group, 1)
self.active = self.uimanager.add_ui_from_string(self.ui)
def get_item_from_track(self,track): def get_item_from_track(self,track):
# Recursively find an item given track sequence # Recursively find an item given track sequence
item = self.window_tree item = self.window_tree
print "track", track #print "track", track
for index in track: for index in track:
item = item[index] item = item[index]
return item return item
@ -181,7 +203,7 @@ class GrampsWindowManager:
def close_track(self,track): def close_track(self,track):
# This is called when item needs to be closed # This is called when item needs to be closed
# Closes all its children and then removes the item from the tree. # Closes all its children and then removes the item from the tree.
print "1", track #print "1", track
item = self.get_item_from_track(track) item = self.get_item_from_track(track)
self.close_item(item) self.close_item(item)
# This only needs to be run once for the highest level point # This only needs to be run once for the highest level point
@ -228,7 +250,7 @@ class GrampsWindowManager:
if item.window_id: if item.window_id:
self.id2item[item.window_id] = item self.id2item[item.window_id] = item
print "Adding: Track:", track #print "Adding: Track:", track
# Make sure we have a track # Make sure we have a track
parent_item = self.get_item_from_track(track) parent_item = self.get_item_from_track(track)
@ -256,17 +278,53 @@ class GrampsWindowManager:
def call_back_factory(self,item): def call_back_factory(self,item):
if type(item) != list: if type(item) != list:
def f(obj): def f(obj):
if item.window_id and self.get_window_from_id(item.window_id): if item.window_id and self.id2item.get(item.window_id):
self.get_window_from_id(item.window_id).present() self.id2item[item.window_id].present()
else: else:
def f(obj): def f(obj):
pass pass
return f return f
def generate_id(self,win_id):
return str(win_id).replace(' ','-')[1:-1]
def display_menu_list(self,data,action_data,mlist):
i = mlist[0]
idval = self.generate_id(i.window_id)
data.write('<menu action="M:%s">' % idval)
data.write('<menuitem action="%s"/>' % self.generate_id(i.window_id))
action_data.append(("M:"+idval,None,i.submenu_label,None,None,None))
action_data.append((idval,None,i.menu_label,None,None,self.call_back_factory(i)))
if len(mlist) > 1:
for i in mlist[1:]:
if type(i) == list:
self.display_menu_list(data,action_data,i)
else:
idval = self.generate_id(i.window_id)
data.write('<menuitem action="%s"/>' %self.generate_id(i.window_id))
action_data.append((idval,None,i.menu_label,None,None,self.call_back_factory(i)))
data.write('</menu>')
def build_windows_menu(self): def build_windows_menu(self):
print self.window_tree
print self.id2item if self.active != DISABLED:
pass self.uimanager.remove_ui(self.active)
self.uimanager.remove_action_group(self.action_group)
self.action_group = gtk.ActionGroup('WindowManger')
action_data = []
data = StringIO()
data.write(_win_top)
for i in self.window_tree:
self.display_menu_list(data,action_data,i)
data.write(_win_btm)
self.ui = data.getvalue()
data.close()
self.action_group.add_actions(action_data)
self.enable()
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
# #
@ -353,7 +411,7 @@ class DisplayState(GrampsDBCallback.GrampsDBCallback):
self.status = status self.status = status
self.status_id = status.get_context_id('GRAMPS') self.status_id = status.get_context_id('GRAMPS')
self.phistory = History() self.phistory = History()
self.gwm = GrampsWindowManager() self.gwm = GrampsWindowManager(uimanager)
def modify_statusbar(self,active=None): def modify_statusbar(self,active=None):
self.status.pop(self.status_id) self.status.pop(self.status_id)