* src/Editors/_EditPrimary.py:
	* src/Editors/_EditPlace.py:
	* src/Editors/_EditSecondary.py:
	* src/Editors/_EditSourceRef.py:
	* src/Editors/_EditReference.py:
	* src/Editors/_EditRepoRef.py:
	* src/Editors/_EditNote.py:
	* src/Editors/_EditMediaRef.py:
	* src/Editors/_EditEventRef.py:
	* src/Editors/_EditName.py:
	* src/DisplayTabs/__init__.py:
	* src/DisplayTabs/_GalleryTab.py:
	* src/DisplayTabs/_BackRefList.py:
	* src/DisplayTabs/_ButtonTab.py:
	* src/DisplayTabs/_GrampsTab.py:
	Accelator keys on displaytabs, convert _all_ tabs to GrampsTab! 
	Feature #955 #1438



svn: r9545
This commit is contained in:
Benny Malengier
2007-12-20 13:49:41 +00:00
parent fb12457651
commit 13bd98097b
16 changed files with 379 additions and 47 deletions

View File

@@ -95,6 +95,9 @@ class BackRefList(EmbeddedList):
vbox.pack_start(self.edit_btn, False)
vbox.show_all()
self.pack_start(vbox, False)
self.add_btn = None
self.del_btn = None
def _selection_changed(self, obj=None):
if self.get_selected():

View File

@@ -45,6 +45,11 @@ import Errors
_KP_ENTER = gtk.gdk.keyval_from_name("KP_Enter")
_RETURN = gtk.gdk.keyval_from_name("Return")
_DEL = gtk.gdk.keyval_from_name("Delete")
_ADD = gtk.gdk.keyval_from_name("Insert")
_OPEN = gtk.gdk.keyval_from_name("o")
_LEFT = gtk.gdk.keyval_from_name("Left")
_RIGHT = gtk.gdk.keyval_from_name("Right")
#-------------------------------------------------------------------------
#
@@ -173,12 +178,29 @@ class ButtonTab(GrampsTab):
Handles the return key being pressed on list. If the key is pressed,
the Edit button handler is called
"""
if event.type == gtk.gdk.KEY_PRESS and \
event.keyval in (_RETURN, _KP_ENTER):
try:
self.edit_button_clicked(obj)
except Errors.WindowActiveError:
pass
if event.type == gtk.gdk.KEY_PRESS:
if event.keyval in (_RETURN, _KP_ENTER):
try:
self.edit_button_clicked(obj)
except Errors.WindowActiveError:
pass
elif event.keyval in (_DEL,) and self.del_btn:
if self.dirty_selection or self.dbstate.db.readonly:
return
self.del_button_clicked(obj)
elif event.keyval in (_ADD,) and self.add_btn:
if self.dirty_selection or self.dbstate.db.readonly:
return
self.add_button_clicked(obj)
elif event.keyval in (_OPEN,) and self.share_btn and \
event.state in (gtk.gdk.CONTROL_MASK,):
self.share_button_clicked(obj)
elif event.keyval in (_LEFT,) and \
event.state in (gtk.gdk.MOD1_MASK,):
self.prev_page()
elif event.keyval in (_RIGHT,) and \
event.state in (gtk.gdk.MOD1_MASK,):
self.next_page()
def add_button_clicked(self, obj):
"""

View File

@@ -182,6 +182,7 @@ class GalleryTab(ButtonTab):
# connect the signals
self.iconlist.connect('selection-changed', self._selection_changed)
self.iconlist.connect('button_press_event', self.double_click)
self.iconlist.connect('key_press_event', self.key_pressed)
self._connect_icon_model()
# create the scrolled window

View File

@@ -27,11 +27,15 @@
#-------------------------------------------------------------------------
import gtk
_LEFT = gtk.gdk.keyval_from_name("Left")
_RIGHT = gtk.gdk.keyval_from_name("Right")
#-------------------------------------------------------------------------
#
# Classes
#
#-------------------------------------------------------------------------
class GrampsTab(gtk.HBox):
"""
This class provides the base level class for 'tabs', which are used to
@@ -77,6 +81,7 @@ class GrampsTab(gtk.HBox):
# build the interface
self.share_btn = None
self.build_interface()
self.parent_notebook = None
def get_selected(self):
return None
@@ -137,6 +142,20 @@ class GrampsTab(gtk.HBox):
"""
return self.label_container
def key_pressed(self, obj, event):
"""
Handles the key being pressed.
The inheriting object must contain a widget that connects at mimimum
to this method, eg an eventbox, tree, ...
"""
if event.type == gtk.gdk.KEY_PRESS:
if event.keyval in (_LEFT,) and \
event.state in (gtk.gdk.MOD1_MASK,):
self.prev_page()
elif event.keyval in (_RIGHT,) and \
event.state in (gtk.gdk.MOD1_MASK,):
self.next_page()
def add_db_signal_callback(self, add_db_signal):
"""
The grampstab must be able to react to database signals, however
@@ -150,7 +169,7 @@ class GrampsTab(gtk.HBox):
self._add_db_signal = add_db_signal
self.connect_db_signals()
def _set_label(self):
def _set_label(self, show_image=True):
"""
Updates the label based of if the tab contains information. Tabs
without information will not have an icon, and the text will not
@@ -158,7 +177,10 @@ class GrampsTab(gtk.HBox):
the label text will be in bold face.
"""
if not self.is_empty():
self.tab_image.show()
if show_image:
self.tab_image.show()
else:
self.tab_image.hide()
self.label.set_text("<b>%s</b>" % self.tab_name)
self.label.set_use_markup(True)
else:
@@ -182,3 +204,14 @@ class GrampsTab(gtk.HBox):
"""
pass
def set_parent_notebook(self, book):
self.parent_notebook = book
def next_page(self):
if self.parent_notebook:
self.parent_notebook.next_page()
def prev_page(self):
if self.parent_notebook:
self.parent_notebook.prev_page()

View File

@@ -33,6 +33,7 @@ log = logging.getLogger(".DisplayTabs")
from _ChildModel import ChildModel
# Then import tab classes
from _GrampsTab import GrampsTab
from _EmbeddedList import EmbeddedList
from _AddrEmbedList import AddrEmbedList
from _AttrEmbedList import AttrEmbedList