# Copyright 2009 Simon Schampijer # Copyright 2015 James Cameron # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA """ HelloWorld Activity: A case study for developing an activity. With Icon stress test. """ from gi.repository import Gtk from gi.repository import GObject import logging from gettext import gettext as _ from sugar3.activity import activity from sugar3.graphics.toolbarbox import ToolbarBox from sugar3.activity.widgets import ActivityButton from sugar3.activity.widgets import TitleEntry from sugar3.activity.widgets import StopButton from sugar3.activity.widgets import ShareButton from sugar3.activity.widgets import DescriptionItem from sugar3.graphics.icon import Icon from sugar3.graphics import style class HelloWorldActivity(activity.Activity): """HelloWorldActivity class as specified in activity.info""" def __init__(self, handle): """Set up the HelloWorld activity.""" activity.Activity.__init__(self, handle) # we do not have collaboration features # make the share option insensitive self.max_participants = 1 # toolbar with the new toolbar redesign toolbar_box = ToolbarBox() activity_button = ActivityButton(self) toolbar_box.toolbar.insert(activity_button, 0) activity_button.show() title_entry = TitleEntry(self) toolbar_box.toolbar.insert(title_entry, -1) title_entry.show() description_item = DescriptionItem(self) toolbar_box.toolbar.insert(description_item, -1) description_item.show() share_button = ShareButton(self) toolbar_box.toolbar.insert(share_button, -1) share_button.show() separator = Gtk.SeparatorToolItem() separator.props.draw = False separator.set_expand(True) toolbar_box.toolbar.insert(separator, -1) separator.show() stop_button = StopButton(self) toolbar_box.toolbar.insert(stop_button, -1) stop_button.show() self.set_toolbar_box(toolbar_box) toolbar_box.show() # growing and shrinking icon M = 15 # maximum size, as a multiplier of standard size N = 40 # number of icons self._size = 0 self._sizes = [] for i in range(N): size = int(style.STANDARD_ICON_SIZE * float(i) * M / N) + 1 self._sizes.append(size) self._increment = 1 self._update() GObject.timeout_add(50, self.__timeout_cb) def _update(self): self._icon = Icon(icon_name='computer-xo', pixel_size=self._sizes[self._size]) self.set_canvas(self._icon) self._icon.show() def __timeout_cb(self): self._size += self._increment if self._increment > 0: if self._size == len(self._sizes) - 1: self._increment = - self._increment else: if self._size == 0: self._increment = - self._increment self._update() return True