* src/DisplayState.py: Window management completed
svn: r5559
This commit is contained in:
parent
04e8f39991
commit
cb89ccf8f7
@ -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.
|
||||||
|
@ -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)
|
||||||
|
Loading…
Reference in New Issue
Block a user