From ca682b6f5eab3d64a9179e29502b5e4bd5b0a30d Mon Sep 17 00:00:00 2001
From: Simon Schampijer <simon@laptop.org>
Date: Tue, 12 Feb 2013 15:31:29 +0100
Subject: [PATCH] Views: add a gesture handler that let's you swipe through the
views
A left and right swipe in one of the Views (Neighborhood, Group, Home,
Activity) will transition you to the next view.
---
src/jarabe/model/shell.py | 15 +++++++++++++++
src/jarabe/view/gesturehandler.py | 23 +++++++++++++++++++----
2 files changed, 34 insertions(+), 4 deletions(-)
diff --git a/src/jarabe/model/shell.py b/src/jarabe/model/shell.py
index 437ff90..b0ef267 100644
a
|
b
|
class ShellModel(GObject.GObject): |
351 | 351 | ZOOM_HOME = 2 |
352 | 352 | ZOOM_ACTIVITY = 3 |
353 | 353 | |
| 354 | _ZOOM_LEVELS = [ZOOM_MESH, ZOOM_GROUP, ZOOM_HOME, ZOOM_ACTIVITY] |
| 355 | |
354 | 356 | def __init__(self): |
355 | 357 | GObject.GObject.__init__(self) |
356 | 358 | |
… |
… |
class ShellModel(GObject.GObject): |
430 | 432 | |
431 | 433 | zoom_level = property(_get_zoom_level) |
432 | 434 | |
| 435 | def _get_zoom_level_by_index(self, idx): |
| 436 | # Use the modulo operator to iterate the list as a circular |
| 437 | # list. |
| 438 | return self._ZOOM_LEVELS[(idx) % len(self._ZOOM_LEVELS)] |
| 439 | |
| 440 | def set_previous_zoom_level(self): |
| 441 | new_level = self._get_zoom_level_by_index(self.zoom_level - 1) |
| 442 | self.set_zoom_level(new_level) |
| 443 | |
| 444 | def set_next_zoom_level(self): |
| 445 | new_level = self._get_zoom_level_by_index(self.zoom_level + 1) |
| 446 | self.set_zoom_level(new_level) |
| 447 | |
433 | 448 | def _get_activities_with_window(self): |
434 | 449 | ret = [] |
435 | 450 | for i in self._activities: |
diff --git a/src/jarabe/view/gesturehandler.py b/src/jarabe/view/gesturehandler.py
index 47b9f8f..cd996f0 100644
a
|
b
|
from gi.repository import SugarGestures |
21 | 21 | |
22 | 22 | from sugar3.graphics import style |
23 | 23 | |
| 24 | from jarabe.model import shell |
| 25 | |
24 | 26 | _instance = None |
25 | 27 | |
26 | 28 | |
… |
… |
class GestureHandler(object): |
36 | 38 | |
37 | 39 | def __init__(self, frame): |
38 | 40 | self._frame = frame |
| 41 | self._shell_model = shell.get_model() |
39 | 42 | |
40 | 43 | self._gesture_grabber = SugarExt.GestureGrabber() |
41 | 44 | self._controller = [] |
… |
… |
class GestureHandler(object): |
56 | 59 | 0, 0, Gdk.Screen.width(), |
57 | 60 | style.GRID_CELL_SIZE) |
58 | 61 | |
| 62 | self._track_gesture_for_area(SugarGestures.SwipeDirectionFlags.LEFT | |
| 63 | SugarGestures.SwipeDirectionFlags.RIGHT, |
| 64 | 0, 0, Gdk.Screen.width(), |
| 65 | Gdk.Screen.height()) |
| 66 | |
59 | 67 | def _track_gesture_for_area(self, directions, x, y, width, height): |
60 | 68 | rectangle = Gdk.Rectangle() |
61 | 69 | rectangle.x = x |
… |
… |
class GestureHandler(object): |
68 | 76 | self._controller.append(swipe) |
69 | 77 | |
70 | 78 | def __swipe_ended_cb(self, controller, event_direction): |
71 | | if self._frame.is_visible(): |
72 | | self._frame.hide() |
73 | | else: |
74 | | self._frame.show() |
| 79 | if event_direction == SugarGestures.SwipeDirection.DOWN: |
| 80 | if self._frame.is_visible(): |
| 81 | self._frame.hide() |
| 82 | else: |
| 83 | self._frame.show() |
| 84 | |
| 85 | elif event_direction == SugarGestures.SwipeDirection.LEFT: |
| 86 | self._shell_model.set_next_zoom_level() |
| 87 | |
| 88 | elif event_direction == SugarGestures.SwipeDirection.RIGHT: |
| 89 | self._shell_model.set_previous_zoom_level() |
75 | 90 | |
76 | 91 | |
77 | 92 | def setup(frame): |