summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEitan Isaacson <eitan@monotonous.org>2011-01-07 12:45:08 -0800
committerEitan Isaacson <eitan@monotonous.org>2011-01-07 13:40:37 -0800
commitc4d19a21c388241e6cfa7a2fd00bf87c70ce6fc4 (patch)
tree7c839378f1e50394e1f31d0bb43cf70dd6e8c8ef
parent7c7bcb7ace2d54b1289301000f60a7112ee6e737 (diff)
downloadcaribou-c4d19a21c388241e6cfa7a2fd00bf87c70ce6fc4.tar.gz
Made reverse scanning work.
-rw-r--r--caribou/ui/scan.py39
1 files changed, 36 insertions, 3 deletions
diff --git a/caribou/ui/scan.py b/caribou/ui/scan.py
index 55feabf..e774c46 100644
--- a/caribou/ui/scan.py
+++ b/caribou/ui/scan.py
@@ -85,7 +85,10 @@ class ScanMaster():
self._blocks = layout.get_scan_rows()
else:
self._blocks = layout.get_scan_blocks()
- self._scan_path = [-1]
+ if SettingsManager.reverse_scanning.value:
+ self._scan_path = [0]
+ else:
+ self._scan_path = [-1]
def set_keyboard(self, keyboard):
self._last_block = None
@@ -105,6 +108,30 @@ class ScanMaster():
element = element[index]
return element
+ def _get_next_reverse_block(self):
+ cancel = False
+
+ if self._scan_path[-1] > 0:
+ self._scan_path = self._scan_path[:-1] + [0]
+
+ self._scan_path += [self._scan_path.pop() - 1]
+
+ try:
+ block = self._get_element_at_path(self._blocks,
+ self._scan_path)
+ except IndexError:
+ if len(self._scan_path) == 1:
+ block = self._blocks[-1]
+ self._scan_path = [-1]
+ else:
+ block = self._get_element_at_path(
+ self._blocks, self._scan_path[:-1])
+ self._scan_path = self._scan_path[:-1] + [0]
+ cancel = True
+
+ return cancel, block
+
+
def _get_next_block(self):
cancel = False
self._scan_path += [self._scan_path.pop() + 1]
@@ -130,7 +157,10 @@ class ScanMaster():
self._multi_map(lambda x: x.reset_color(),
self._last_block)
- self._cancel, next_block = self._get_next_block()
+ if SettingsManager.reverse_scanning.value:
+ self._cancel, next_block = self._get_next_reverse_block()
+ else:
+ self._cancel, next_block = self._get_next_block()
color = SettingsManager.button_scanning_color.value
@@ -152,7 +182,10 @@ class ScanMaster():
self._scan_path.pop()
elif isinstance(self._last_block, list):
assert(len(self._last_block) > 0)
- self._scan_path.append(-1)
+ if SettingsManager.reverse_scanning.value:
+ self._scan_path.append(0)
+ else:
+ self._scan_path.append(-1)
else:
self._last_block.clicked()