# -*- coding: utf-8 -*- # # Copyright 2012 Manuel QuiƱones # # 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 from gettext import gettext as _ import logging import gtk from sugar.graphics.toolbarbox import ToolbarBox from sugar.activity.widgets import ActivityToolbarButton from sugar.activity.widgets import StopButton from sugar.graphics.toolbutton import ToolButton from sugar.graphics.colorbutton import ColorToolButton class PaintToolbar(ToolbarBox): def __init__(self, activity): """Make activity toolbar.""" super(PaintToolbar, self).__init__() self._drawing = None activity_button = ActivityToolbarButton(activity) self.toolbar.insert(activity_button, -1) activity_button.show() separator = gtk.SeparatorToolItem() self.toolbar.insert(separator, -1) separator.show() self._color_button = ColorToolButton() self._color_button.connect('color-set', self._color_cb) self.toolbar.insert(self._color_button, -1) self._color_button.show_all() # Stroke width control: tool_item_width = gtk.ToolItem() self.toolbar.insert(tool_item_width, -1) tool_item_width.show() hbox_width = gtk.HBox() tool_item_width.add(hbox_width) hbox_width.show() width_label = gtk.Label(_('Width: ')) hbox_width.pack_start(width_label) width_label.show() self._width_spin = gtk.SpinButton() adj = gtk.Adjustment(1, 1.0, 100.0, 1.0) self._width_spin.set_adjustment(adj) self._width_spin.set_numeric(True) self._width_spin.connect('value-changed', self._width_spin_cb) hbox_width.pack_start(self._width_spin) self._width_spin.show() clear_button = ToolButton('edit-clear') clear_button.set_tooltip(_("Clear canvas")) clear_button.connect("clicked", self._clear_drawing_canvas_cb) self.toolbar.insert(clear_button, -1) clear_button.show() separator = gtk.SeparatorToolItem() separator.props.draw = False separator.set_expand(True) self.toolbar.insert(separator, -1) separator.show() stop_button = StopButton(activity) self.toolbar.insert(stop_button, -1) stop_button.show() def set_drawing(self, drawing): self._drawing = drawing self._drawing.connect('width-changed', self._width_changed_cb) self._drawing.connect('color-changed', self._color_changed_cb) self._update_buttons() def _update_width_spin(self, width): self._width_spin.props.value = width def _update_color_button(self, color): color = gtk.gdk.Color(color) self._color_button.props.color = color def _update_buttons(self): width = self._drawing.get_stroke_width() self._update_width_spin(width) color = self._drawing.get_stroke_color() self._update_color_button(color) def _color_changed_cb(self, widget, color): self._update_color_button(color) def _width_changed_cb(self, widget, width): self._update_width_spin(width) def _color_cb(self, widget): color = widget.get_color() self._drawing.set_stroke_color(color) def _width_spin_cb(self, width_spin): width = width_spin.get_value_as_int() self._drawing.set_stroke_width(width) def _clear_drawing_canvas_cb(self, button): logging.debug("clear canvas") self._drawing.clear_drawing_canvas()