Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWalter Bender <walter.bender@gmail.com>2012-07-26 13:11:26 (GMT)
committer Walter Bender <walter.bender@gmail.com>2012-07-26 13:11:26 (GMT)
commit2644eeaffc1fb45789eeb77b9e5e533c84ab2434 (patch)
tree50e0addfc02261083d03636e0090a16e2234bb82
parent4d23828315d7281e1130c5c0f72bd6f7ca306988 (diff)
add up/down arrow key support for text editing
-rw-r--r--PortfolioActivity.py46
1 files changed, 37 insertions, 9 deletions
diff --git a/PortfolioActivity.py b/PortfolioActivity.py
index 5970e5c..3ffc7a8 100644
--- a/PortfolioActivity.py
+++ b/PortfolioActivity.py
@@ -111,7 +111,7 @@ WHITE_SPACE = ['space', 'Tab']
CURSOR = '█'
RETURN = '⏎'
-
+NEWLINE = '\n'
class PortfolioActivity(activity.Activity):
''' Make a slideshow from starred Journal entries. '''
@@ -140,6 +140,7 @@ class PortfolioActivity(activity.Activity):
self._keypress = None
self._selected_spr = None
self._dead_key = ''
+ self._saved_string = ''
def _setup_canvas(self):
''' Create a canvas '''
@@ -161,6 +162,8 @@ class PortfolioActivity(activity.Activity):
self._canvas.connect("motion-notify-event", self._mouse_move_cb)
self._canvas.connect("key-press-event", self._keypress_cb)
+ self._canvas.grab_focus()
+
def _setup_workspace(self):
''' Prepare to render the datastore entries. '''
self.colors = profile.get_color().to_string().split(',')
@@ -406,6 +409,10 @@ class PortfolioActivity(activity.Activity):
self.dsobjects, self._nobjects = datastore.find({'keep': '1'})
_logger.debug('found %d starred items', self._nobjects)
+ def _first_cb(self, button=None):
+ self.i = 0
+ self._show_slide(direction=-1)
+
def _prev_cb(self, button=None):
''' The previous button has been clicked; goto previous slide. '''
if self.i > 0:
@@ -418,6 +425,10 @@ class PortfolioActivity(activity.Activity):
self.i += 1
self._show_slide()
+ def _last_cb(self, button=None):
+ self.i = self._nobjects - 1
+ self._show_slide()
+
def _rescan_cb(self, button=None):
''' Rescan the Journal for changes in starred items. '''
self._help.hide()
@@ -701,7 +712,6 @@ class PortfolioActivity(activity.Activity):
def _button_press_cb(self, win, event):
''' The mouse button was pressed. Is it on a thumbnail sprite? '''
- win.grab_focus()
x, y = map(int, event.get_coords())
self._dragpos = [x, y]
@@ -718,6 +728,7 @@ class PortfolioActivity(activity.Activity):
elif self._selected_spr is not None:
self._unselect()
self._selected_spr = spr
+ self._saved_string = spr.labels[0]
label = '%s%s' % (self._selected_spr.labels[0], CURSOR)
self._selected_spr.set_label(label)
else:
@@ -947,6 +958,15 @@ class PortfolioActivity(activity.Activity):
exit()
elif self._selected_spr is not None:
self.process_alphanumeric_input(keyname, keyunicode)
+ elif not self._thumbnail_mode:
+ if keyname == 'Home':
+ self._first_cb()
+ elif keyname == 'Left':
+ self._prev_cb()
+ elif keyname == 'Right' or keyname == 'space':
+ self._next_cb()
+ elif keyname == 'End':
+ self._last_cb()
return True
def process_alphanumeric_input(self, keyname, keyunicode):
@@ -1005,12 +1025,19 @@ class PortfolioActivity(activity.Activity):
newleft = oldleft + oldright
oldright = ''
elif keyname == 'Return':
- newleft = oldleft + '\n' # RETURN
+ newleft = oldleft + NEWLINE
elif keyname == 'Down':
- self._unselect()
- return
- elif keyname == 'Up' or keyname == 'Escape': # Restore previous state
- self._selected_spr.set_label(self.saved_string)
+ if NEWLINE in oldright:
+ parts = oldright.split(NEWLINE)
+ newleft = oldleft + string.join(parts[0:2], NEWLINE)
+ oldright = NEWLINE + string.join(parts[2:], NEWLINE)
+ elif keyname == 'Up':
+ if NEWLINE in oldleft:
+ parts = oldleft.split(NEWLINE)
+ newleft = string.join(parts[0:-1], NEWLINE)
+ oldright = NEWLINE + parts[-1] + oldright
+ elif keyname == 'Escape': # Restore previous state
+ self._selected_spr.set_label(self._saved_string)
self._unselect()
return
else:
@@ -1024,8 +1051,8 @@ class PortfolioActivity(activity.Activity):
else:
newleft = oldleft
elif keyunicode == -1: # clipboard text
- if keyname == '\n':
- newleft = oldleft + RETURN
+ if keyname == NEWLINE:
+ newleft = oldleft + NEWLINE
else:
newleft = oldleft + keyname
self._selected_spr.set_label("%s%s%s" % (newleft, CURSOR, oldright))
@@ -1039,3 +1066,4 @@ class PortfolioActivity(activity.Activity):
self._selected_spr.labels[0]
self._dirty = True
self._selected_spr = None
+ self._saved_string = ''