From 42849083765bd2b5345281b847758a45586c8274 Mon Sep 17 00:00:00 2001 From: Daniel Francis Date: Tue, 10 Jul 2012 00:55:53 +0000 Subject: Renaming activity, Paint toolbar migration start --- diff --git a/activity/activity-present.svg b/activity/activity-expose.svg index 6bb0e0b..6bb0e0b 100644 --- a/activity/activity-present.svg +++ b/activity/activity-expose.svg diff --git a/activity/activity.info b/activity/activity.info index bba4427..27ff9fe 100644 --- a/activity/activity.info +++ b/activity/activity.info @@ -1,8 +1,8 @@ [Activity] -name = Present +name = Expose activity_version = 1 show_launcher = 1 -bundle_id = org.sugarlabs.Present -exec = sugar-activity present.PresentActivity -s -icon = activity-present +bundle_id = org.sugarlabs.Expose +exec = sugar-activity expose.ExposeActivity -s +icon = activity-expose license = GPLv3+ diff --git a/present.py b/expose.py index c2879e6..2a0af2b 100755 --- a/present.py +++ b/expose.py @@ -32,14 +32,14 @@ from images import Image from images import ImagesGalery -class PresentActivity(activity.Activity): +class ExposeActivity(activity.Activity): def __init__(self, handle): activity.Activity.__init__(self, handle) activity_button = ActivityToolbarButton(self) stop_button = StopButton(self) toolbarbox = PresentToolbarBox(activity_button, stop_button) - toolbarbox.connect('insert-picture', self.load_picture) toolbarbox.connect('new-slide', self._append_slide) + toolbarbox.image_toolbar.connect('insert-picture', self.load_picture) toolbarbox.show() self.set_toolbar_box(toolbarbox) self.images_galery = ImagesGalery() diff --git a/toolbars.py b/toolbars.py index b81b4af..65118cb 100644 --- a/toolbars.py +++ b/toolbars.py @@ -1,25 +1,26 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- # -# options.py +# Copyright 2012 S. Daniel Francis # -# Copyright 2012 S. Daniel Francis +# 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 3 of the License. # -# 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 3 of the License. +# 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. # -# 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 Street, Fifth Floor, Boston, -# MA 02110-1301, USA. +# 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 Street, Fifth Floor, Boston, +# MA 02110-1301, USA. # +import logging +logger = logging.getLogger() +from gettext import gettext as _ import gobject import gtk from sugar.graphics.toolbutton import ToolButton @@ -31,45 +32,7 @@ class ImageOptions(ToolbarButton): def __init__(self): ToolbarButton.__init__(self, icon_name='image-mode') self.toolbar = gtk.Toolbar() - scale_button = ToolButton("scale") - scale_button.set_tooltip('Picture Size') - scale_button.show() - scale_palette = scale_button.get_palette() - scale_button.connect('clicked', - lambda w: scale_palette.popup(immediate=True, - state=1)) - box = gtk.HBox() - refresh_button = ToolButton(gtk.STOCK_REFRESH) - refresh_button.show() - box.pack_start(refresh_button, False, False, 0) - separator = gtk.SeparatorToolItem() - separator.show() - box.pack_start(separator, False, False, 0) - self.width, self.height = 1, 1 - self.width_entry = gtk.SpinButton(gtk.Adjustment(value=0, - lower=0, - upper=50000, - step_incr=1)) - #self.width_entry.connect("value-changed", self.change_width) - self.width_entry.show() - box.pack_start(self.width_entry, True, True, 0) - self.link_values_button = gtk.ToggleToolButton() - self.link_values_button.set_active(True) - #self.link_values_button.connect("toggled", self.link_unlink) - self.link_values_button.set_icon_name("link") - self.link_values_button.show() - box.pack_start(self.link_values_button, False, False, 0) - self.height_entry = gtk.SpinButton(gtk.Adjustment(value=0, - lower=0, - upper=50000, - step_incr=1)) - #self.height_entry.connect("value-changed", self.change_height) - self.height_entry.show() - box.pack_start(self.height_entry, True, True, 0) - scale_palette.set_content(box) - box.show_all() - self.toolbar.insert(scale_button, -1) rotate_button = ToolButton("image-rotate") rotate_button.set_tooltip("Rotate") @@ -114,11 +77,257 @@ class ImageOptions(ToolbarButton): self.props.page = self.toolbar -class PresentToolbarBox(ToolbarBox): +class ImageToolbar(gtk.Toolbar): + __gsignals__ = {'insert-picture': (gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, - tuple()), - 'new-slide': (gobject.SIGNAL_RUN_LAST, + tuple())} + + _EFFECT_RAINBOW_NAME = 'rainbow' + + def __init__(self): + gtk.Toolbar.__init__(self) + + self.width_percent = 1. + self.height_percent = 1. + + scale_button = ToolButton("scale") + scale_button.set_tooltip('Picture Size') + scale_button.show() + scale_palette = scale_button.get_palette() + scale_button.connect('clicked', + lambda w: scale_palette.popup(immediate=True, + state=1)) + + box = gtk.HBox() + refresh_button = ToolButton(gtk.STOCK_REFRESH) + refresh_button.show() + box.pack_start(refresh_button, False, False, 0) + separator = gtk.SeparatorToolItem() + separator.show() + box.pack_start(separator, False, False, 0) + self.width, self.height = 1, 1 + self.width_entry = gtk.SpinButton(gtk.Adjustment(value=0, + lower=0, + upper=50000, + step_incr=1)) + #self.width_entry.connect("value-changed", self.change_width) + self.width_entry.show() + box.pack_start(self.width_entry, True, True, 0) + self.link_values_button = gtk.ToggleToolButton() + self.link_values_button.set_active(True) + #self.link_values_button.connect("toggled", self.link_unlink) + self.link_values_button.set_icon_name("link") + self.link_values_button.show() + box.pack_start(self.link_values_button, False, False, 0) + self.height_entry = gtk.SpinButton(gtk.Adjustment(value=0, + lower=0, + upper=50000, + step_incr=1)) + #self.height_entry.connect("value-changed", self.change_height) + self.height_entry.show() + box.pack_start(self.height_entry, True, True, 0) + scale_palette.set_content(box) + box.show_all() + self.insert(scale_button, -1) + + self._object_rotate_left = ToolButton('object-rotate-left') + self.insert(self._object_rotate_left, -1) + self._object_rotate_left.set_tooltip(_('Rotate Left')) + + self._object_rotate_right = ToolButton('object-rotate-right') + self.insert(self._object_rotate_right, -1) + self._object_rotate_right.set_tooltip(_('Rotate Right')) +# +# self._mirror_horizontal = ToolButton('mirror-horizontal') +# self.insert(self._mirror_horizontal, -1) +# self._mirror_horizontal.show() +# self._mirror_horizontal.set_tooltip(_('Horizontal Mirror')) +# +# self._mirror_vertical = ToolButton('mirror-vertical') +# self.insert(self._mirror_vertical, -1) +# self._mirror_vertical.show() +# self._mirror_vertical.set_tooltip(_('Vertical Mirror')) + +# self._object_height = ToolButton('object-height') +# self.insert(self._object_height, -1) +# self._object_height.set_tooltip(_('Height')) + +# self.height_spinButton = self._create_spinButton(self._object_height, +# 'object-height', activity) + +# item = gtk.ToolItem() +# item.add(self.height_spinButton) +# self.insert(item, -1) + +# self._object_width = ToolButton('object-width') +# self.insert(self._object_width, -1) +# self._object_width.set_tooltip(_('Width')) + +# self.width_spinButton = self._create_spinButton(self._object_width, +# 'object-width', activity) + +# item = gtk.ToolItem() +# item.add(self.width_spinButton) +# self.insert(item, -1) + + separator = gtk.SeparatorToolItem() + separator.set_draw(True) + self.insert(separator, -1) + + self._effect_grayscale = ToolButton('effect-grayscale') + self.insert(self._effect_grayscale, -1) + self._effect_grayscale.set_tooltip(_('Grayscale')) + +# self._effect_rainbow = DrawToolButton('effect-rainbow', +# activity.tool_group, _('Rainbow')) +# self.insert(self._effect_rainbow, -1) + + self._invert_colors = ToolButton('invert-colors') + self.insert(self._invert_colors, -1) + self._invert_colors.set_tooltip(_('Invert Colors')) + + separator = gtk.SeparatorToolItem() + separator.set_draw(True) + separator.set_expand(True) + self.insert(separator, -1) + + self._object_insert = ToolButton('insert-picture') + self.insert(self._object_insert, -1) + self._object_insert.set_tooltip(_('Insert Image')) + self._object_insert.connect('clicked', + lambda w: self.emit('insert-picture')) + +# self._object_insert.connect('clicked', self.insertImage, activity) +# self._object_rotate_left.connect('clicked', self.rotate_left, +# activity) +# self._object_rotate_right.connect('clicked', self.rotate_right, +# activity) +# self._mirror_vertical.connect('clicked', self.mirror_vertical) +# self._mirror_horizontal.connect('clicked', self.mirror_horizontal) + +# self._activity.area.connect('undo', self._on_signal_undo_cb) +# self._activity.area.connect('redo', self._on_signal_redo_cb) +# self._activity.area.connect('select', self._on_signal_select_cb) +# self._activity.area.connect('action-saved', +# self._on_signal_action_saved_cb) + + self._effect_grayscale.connect('clicked', self.grayscale) +# self._effect_rainbow.connect('clicked', self.rainbow) + self._invert_colors.connect('clicked', self.invert_colors) + + self.show_all() + + def rotate_left(self, widget, activity): + activity.area.rotate_left(activity.area) + + def rotate_right(self, widget, activity): + activity.area.rotate_right(activity.area) + + def mirror_horizontal(self, widget): + self._activity.area.mirror(widget) + + def mirror_vertical(self, widget): + self._activity.area.mirror(widget, horizontal=False) + + def resize(self, spinButton, tool, activity): + if activity.area.tool['name'] == 'marquee-rectangular' and \ + activity.area.selmove: + if tool == "object-height": + self.height_percent = spinButton.get_value_as_int() / 100. + activity.area.d.resizeSelection(activity.area, + self.width_percent, self.height_percent) + elif tool == "object-width": + self.width_percent = spinButton.get_value_as_int() / 100. + activity.area.d.resizeSelection(activity.area, + self.width_percent, self.height_percent) + + def _create_spinButton(self, widget, tool, activity): + """Set palette for a tool - width or height + + @param self -- gtk.Toolbar + @param widget - the widget which Palette will be set, + a ToolButton object + @param tool + @param activity + """ + logger.debug('setting a spinButton for %s', tool) + + spin = gtk.SpinButton() + spin.show() + + # This is where we set restrictions for Resizing: + # Initial value, minimum value, maximum value, step + initial = float(100) + adj = gtk.Adjustment(initial, 10.0, 500.0, 1.0) + spin.set_adjustment(adj) + spin.set_numeric(True) + + spin.set_sensitive(self._activity.area.is_selected()) + + spin.connect('value-changed', self.resize, tool, activity) + + return spin + +# def insertImage(self, widget, activity): +# try: +# chooser = ObjectChooser(_('Choose image'), +# self._activity, gtk.DIALOG_MODAL | +# gtk.DIALOG_DESTROY_WITH_PARENT, what_filter='Image') +# except: +# chooser = ObjectChooser(_('Choose image'), +# self._activity, gtk.DIALOG_MODAL | +# gtk.DIALOG_DESTROY_WITH_PARENT) +# try: +# result = chooser.run() +# if result == gtk.RESPONSE_ACCEPT: +# logging.debug('ObjectChooser: %r', +# chooser.get_selected_object()) +# jobject = chooser.get_selected_object() +# if jobject and jobject.file_path: +# self._activity.area.loadImage(jobject.file_path) +# finally: +# chooser.destroy() +# del chooser + + def _on_signal_undo_cb(self, widget, data=None): + self._verify_sensitive_buttons() + + def _on_signal_redo_cb(self, widget, data=None): + self._verify_sensitive_buttons() + + def _on_signal_select_cb(self, widget, data=None): + self._verify_sensitive_buttons() + + def _on_signal_action_saved_cb(self, widget, data=None): + self._verify_sensitive_buttons() + + def _verify_sensitive_buttons(self): + is_selected = self._activity.area.is_selected() + self.width_spinButton.set_sensitive(is_selected) + self.height_spinButton.set_sensitive(is_selected) + + if not is_selected: + self.width_spinButton.set_value(100) + self.height_spinButton.set_value(100) + self.width_percent = 1. + self.height_percent = 1. + + ##Make the colors be in grayscale + def grayscale(self, widget): + self._activity.area.grayscale(widget) + + ##Like the brush, but change it color when painting + def rainbow(self, widget): + self.properties['name'] = self._EFFECT_RAINBOW_NAME + + def invert_colors(self, widget): + self._activity.area.invert_colors(widget) + + +class PresentToolbarBox(ToolbarBox): + + __gsignals__ = {'new-slide': (gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, tuple())} @@ -132,19 +341,18 @@ class PresentToolbarBox(ToolbarBox): lambda w: self.emit('new-slide')) append_slide.show() self.toolbar.insert(append_slide, -1) - insert_image_button = ToolButton('insert-picture') - insert_image_button.props.tooltip = 'Load a picture' - insert_image_button.connect('clicked', - lambda w: self.emit('insert-picture')) - insert_image_button.show() - self.toolbar.insert(insert_image_button, -1) separator = gtk.SeparatorToolItem() separator.set_expand(True) separator.set_draw(False) separator.show() self.toolbar.insert(separator, -1) - self.image_options = ImageOptions() - self.toolbar.insert(self.image_options, -1) + self.image_toolbar = ImageToolbar() + image_button = ToolbarButton(icon_name='image-mode', + page=self.image_toolbar) + image_button.show() + self.toolbar.insert(image_button, -1) + #self.image_options = ImageOptions() + #self.toolbar.insert(self.image_options, -1) separator = gtk.SeparatorToolItem() separator.set_expand(True) -- cgit v0.9.1