Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--activity.py87
1 files changed, 59 insertions, 28 deletions
diff --git a/activity.py b/activity.py
index 8189aee..9e7de94 100644
--- a/activity.py
+++ b/activity.py
@@ -32,7 +32,7 @@ from sugar.graphics import style
from sugar.graphics.toolbutton import ToolButton
from sugar.graphics.icon import Icon
-DEFAULT_CHANGE_IMAGE_TIME = 15
+DEFAULT_CHANGE_IMAGE_TIME = 2
POWERD_INHIBIT_DIR = '/var/run/powerd-inhibit-suspend'
@@ -57,12 +57,12 @@ class WelcomeActivity(activity.Activity):
self.image_viewer = ImageCollectionViewer(False)
prev_bt = ToolButton("go-previous-paired")
- prev_bt.connect("clicked", self.image_viewer.prev_image_clicked_cb,
+ prev_bt.connect("clicked", self.image_viewer.prev_anim_clicked_cb,
None)
toolbar_box.toolbar.insert(prev_bt, -1)
next_bt = ToolButton("go-next-paired")
- next_bt.connect("clicked", self.image_viewer.next_image_clicked_cb,
+ next_bt.connect("clicked", self.image_viewer.next_anim_clicked_cb,
None)
toolbar_box.toolbar.insert(next_bt, -1)
@@ -114,21 +114,32 @@ class ImageCollectionViewer(gtk.VBox):
images_path = \
os.path.expanduser('~/Activities/Welcome.activity/images/')
+ self.anim_order = 0
self.image_order = 0
- self.image_files_list = []
+ self.auto_change_anim = True
+ self.animation_list = []
for fname in sorted(os.listdir(images_path)):
- self.image_files_list.append(images_path + fname)
- logging.error('Image file: %s', fname)
+ if os.path.isdir(images_path + fname):
+ anim_path = images_path + fname
+ logging.error('Animation dir file: %s', anim_path)
+ animation_images_list = []
+ for imagefname in sorted(os.listdir(anim_path)):
+ image_path = os.path.join(anim_path, imagefname)
+ animation_images_list.append(image_path)
+ logging.error('Image file: %s', image_path)
+ self.animation_list.append(animation_images_list)
+ else:
+ self.animation_list.append([images_path + fname])
- if self.image_files_list:
- self.image.set_from_file(self.image_files_list[self.image_order])
+ if self.animation_list:
+ self._update_image()
if start_window:
# Create bottom controls
center_align = gtk.Alignment(0.5, 0, 0, 0)
self.pack_start(center_align, False, padding=2)
- self.sequence_view = SequenceView(len(self.image_files_list))
+ self.sequence_view = SequenceView(len(self.animation_list))
center_align.add(self.sequence_view)
bottom_toolbar = gtk.HBox()
@@ -164,11 +175,11 @@ class ImageCollectionViewer(gtk.VBox):
prev_bt = CustomButton('go-previous-paired-grey', bt_height)
center_box.pack_start(prev_bt, False, False, 5)
- prev_bt.connect('button-press-event', self.prev_image_clicked_cb)
+ prev_bt.connect('button-press-event', self.prev_anim_clicked_cb)
next_bt = CustomButton('go-next-paired-grey', bt_height)
center_box.pack_start(next_bt, False, False, 5)
- next_bt.connect('button-press-event', self.next_image_clicked_cb)
+ next_bt.connect('button-press-event', self.next_anim_clicked_cb)
# do the right_box and left_box have the same size
width = int(gtk.gdk.screen_width() / 4)
@@ -194,28 +205,48 @@ class ImageCollectionViewer(gtk.VBox):
gtk.main_quit()
def auto_change_image(self):
- self.next_image_clicked_cb(None, None)
+ # Change to the next image in the animation,
+ # if is the last, change to the next animation
+ if self.image_order < len(self.animation_list[self.anim_order]) - 1:
+ self.image_order += 1
+ self._update_image()
+ else:
+ if self.auto_change_anim:
+ self.next_anim_clicked_cb(None, None)
+ else:
+ self.image_order = 0
+ self._update_image()
+
self.timer_id = gobject.timeout_add_seconds(DEFAULT_CHANGE_IMAGE_TIME,
self.auto_change_image)
- return True
+ return False
- def next_image_clicked_cb(self, button, event):
- gobject.source_remove(self.timer_id)
- self.image_order += 1
- if self.image_order == len(self.image_files_list):
- self.image_order = 0
+ def next_anim_clicked_cb(self, button, event):
+ if button is not None:
+ self.auto_change_anim = False
+ self.image_order = 0
+ self.anim_order += 1
+ if self.anim_order == len(self.animation_list):
+ self.anim_order = 0
if self.sequence_view is not None:
- self.sequence_view.set_value(self.image_order + 1)
- self.image.set_from_file(self.image_files_list[self.image_order])
-
- def prev_image_clicked_cb(self, button, event):
- gobject.source_remove(self.timer_id)
- self.image_order -= 1
- if self.image_order < 0:
- self.image_order = len(self.image_files_list) - 1
+ self.sequence_view.set_value(self.anim_order + 1)
+ self._update_image()
+
+ def prev_anim_clicked_cb(self, button, event):
+ if button is not None:
+ self.auto_change_anim = False
+ self.image_order = 0
+ self.anim_order -= 1
+ if self.anim_order < 0:
+ self.anim_order = len(self.animation_list) - 1
if self.sequence_view is not None:
- self.sequence_view.set_value(self.image_order + 1)
- self.image.set_from_file(self.image_files_list[self.image_order])
+ self.sequence_view.set_value(self.anim_order + 1)
+ self._update_image()
+
+ def _update_image(self):
+ image_file_name = \
+ self.animation_list[self.anim_order][self.image_order]
+ self.image.set_from_file(image_file_name)
def finish(self):
self._allow_suspend()