Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/toolbox.py
diff options
context:
space:
mode:
Diffstat (limited to 'toolbox.py')
-rw-r--r--toolbox.py720
1 files changed, 493 insertions, 227 deletions
diff --git a/toolbox.py b/toolbox.py
index 89e7871..4e84257 100644
--- a/toolbox.py
+++ b/toolbox.py
@@ -1,3 +1,57 @@
+# -*- coding: utf-8 -*-
+"""
+toolbox.py
+
+Create Oficina Toolbar in Sugar
+
+
+Copyright 2007, NATE-LSI-EPUSP
+
+Oficina is developed in Brazil at Escola Politécnica of
+Universidade de São Paulo. NATE is part of LSI (Integrable
+Systems Laboratory) and stands for Learning, Work and Entertainment
+Research Group. Visit our web page:
+www.nate.lsi.usp.br
+Suggestions, bugs and doubts, please email oficina@lsi.usp.br
+
+Oficina 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 version 2 of
+the License.
+
+Oficina 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 Oficina; if not, write to the
+Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+Boston, MA 02110-1301 USA.
+The copy of the GNU General Public License is found in the
+COPYING file included in the source distribution.
+
+
+Authors:
+
+Joyce Alessandra Saul (joycealess@gmail.com)
+Andre Mossinato (andremossinato@gmail.com)
+Nathalia Sautchuk Patrício (nathalia.sautchuk@gmail.com)
+Pedro Kayatt (pekayatt@gmail.com)
+Rafael Barbolo Lopes (barbolo@gmail.com)
+Alexandre A. Gonçalves Martinazzo (alexandremartinazzo@gmail.com)
+
+Colaborators:
+Bruno Gola (brunogola@gmail.com)
+
+Group Manager:
+Irene Karaguilla Ficheman (irene@lsi.usp.br)
+
+Cientific Coordinator:
+Roseli de Deus Lopes (roseli@lsi.usp.br)
+
+"""
+
from gettext import gettext as _
import gtk
@@ -10,8 +64,6 @@ from sugar.graphics.toggletoolbutton import ToggleToolButton
from sugar.graphics.combobox import ComboBox
from sugar.graphics.palette import Palette
-from Cursors import Cursors
-
class Toolbox(ActivityToolbox):
def __init__(self, activity):
ActivityToolbox.__init__(self, activity)
@@ -50,29 +102,48 @@ class Toolbox(ActivityToolbox):
class DrawEditToolbar(EditToolbar):
def __init__(self, activity):
EditToolbar.__init__(self)
+
+ self._activity = activity
- self.undo.connect('clicked', undo, activity)
- self.redo.connect('clicked', redo, activity)
+# self.undo.connect('clicked', undo, activity)
+# self.redo.connect('clicked', redo, activity)
+ self.undo.connect('clicked', self._undo_cb)
+ self.redo.connect('clicked', self._redo_cb)
- #FIXME: buttons are not connected to the right callback
- self.copy.connect('clicked', test_connect, activity, 'copy')
- self.paste.connect('clicked', test_connect, activity, 'paste')
+# self.copy.connect('clicked', test_connect, activity, 'copy')
+# self.paste.connect('clicked', test_connect, activity, 'paste')
+ self.copy.connect('clicked', self._copy_cb)
+ self.paste.connect('clicked', self._paste_cb)
self.copy.hide()
self.paste.hide()
+
+ def _undo_cb(self, widget, data=None):
+ self._activity._area.undo()
+
+ def _redo_cb(self, widget, data=None):
+ self._activity._area.redo()
+
+ def _copy_cb(self, widget, data=None):
+ #FIXME: connect to the correct function
+ pass
+
+ def _paste_cb(self, widget, data=None):
+ #FIXME: connect to the correct function
+ pass
class ToolsToolbar(gtk.Toolbar):
- _TOOL_PENCIL = 2
- _TOOL_BRUSH = 29
- _TOOL_ERASER = 3
- _TOOL_POLYGON = 27
- _TOOL_BUCKET = 28
- _TOOL_MARQUEE_ELLIPTICAL = 5
- _TOOL_MARQUEE_FREEFORM = 2
- _TOOL_MARQUEE_RECTANGULAR = 26
- _TOOL_MARQUEE_SMART = 2
+ _TOOL_PENCIL = 'pencil'
+ _TOOL_BRUSH = 'brush'
+ _TOOL_ERASER = 'eraser'
+ _TOOL_POLYGON = 'polygon'
+ _TOOL_BUCKET = 'bucket'
+ _TOOL_MARQUEE_ELLIPTICAL = 'marquee-elliptical'
+ _TOOL_MARQUEE_FREEFORM = 'marquee-freeform'
+ _TOOL_MARQUEE_RECTANGULAR = 'marquee-rectangular'
+ _TOOL_MARQUEE_SMART = 'marquee-smart'
def __init__(self, activity):
@@ -96,15 +167,16 @@ class ToolsToolbar(gtk.Toolbar):
self.insert(self._icon_stroke, -1)
self._icon_stroke.show()
- tool_item = ComboStrokeColors(activity)
- self.insert(tool_item, -1)
- tool_item.show()
+ self._stroke_color = ComboStrokeColors(activity)
+ self.insert(self._stroke_color, -1)
+ self._stroke_color.show()
- tool_item = ComboStrokeSize(activity)
- self.insert(tool_item, -1)
- tool_item.show()
+ self._stroke_size = ComboStrokeSize(activity)
+ self.insert(self._stroke_size, -1)
+ self._stroke_size.show()
separator = gtk.SeparatorToolItem()
+ separator.set_draw(True)
self.insert(separator, -1)
separator.show()
@@ -116,14 +188,16 @@ class ToolsToolbar(gtk.Toolbar):
self._tool_brush = ToolButton('tool-brush')
self.insert(self._tool_brush, -1)
self._tool_brush.show()
- self._tool_brush.set_tooltip(_('Brush'))
+ #self._tool_brush.set_tooltip(_('Brush'))
self._brush_palette = self.create_palette('Brush')
self._tool_brush.set_palette(self._brush_palette)
self._tool_eraser = ToolButton('tool-eraser')
self.insert(self._tool_eraser, -1)
self._tool_eraser.show()
- self._tool_eraser.set_tooltip(_('Eraser'))
+ #self._tool_eraser.set_tooltip(_('Eraser'))
+ self._eraser_palette = self.create_palette('Eraser')
+ self._tool_eraser.set_palette(self._eraser_palette)
self._tool_polygon = ToolButton('tool-polygon')
self.insert(self._tool_polygon, -1)
@@ -137,7 +211,6 @@ class ToolsToolbar(gtk.Toolbar):
"""
-
self._tool_marquee_elliptical = ToolButton('tool-marquee-elliptical')
self.insert(self._tool_marquee_elliptical, -1)
self._tool_marquee_elliptical.show()
@@ -152,12 +225,15 @@ class ToolsToolbar(gtk.Toolbar):
self.insert(self._tool_marquee_smart, -1)
self._tool_marquee_smart.show()
self._tool_marquee_smart.set_tooltip(_('Smart Marquee'))
+
"""
+
self._tool_marquee_rectangular = ToolButton('tool-marquee-rectangular')
self.insert(self._tool_marquee_rectangular, -1)
self._tool_marquee_rectangular.show()
self._tool_marquee_rectangular.set_tooltip(_('Rectangular Marquee'))
-
+
+ '''
self._tool_polygon.connect('clicked', set_tool, activity, 'tool-polygon', self._TOOL_POLYGON)
self._tool_pencil.connect('clicked', set_tool, activity, 'tool-pencil', self._TOOL_PENCIL)
self._tool_brush.connect('clicked', set_tool, activity, 'tool-brush', self._TOOL_BRUSH)
@@ -167,12 +243,26 @@ class ToolsToolbar(gtk.Toolbar):
#self._tool_marquee_freeform.connect('clicked', set_tool, activity, 'tool-marquee-freeform', self._TOOL_MARQUEE_FREEFORM)
self._tool_marquee_rectangular.connect('clicked', set_tool, activity, 'tool-marquee-rectangular', self._TOOL_MARQUEE_RECTANGULAR)
#self._tool_marquee_smart.connect('clicked', set_tool, activity, 'tool-marquee-smart', self._TOOL_MARQUEE_SMART)
-
- def create_palette(self, data=None):
- if data == None:
+ '''
+
+ # New connect method
+ self._tool_polygon.connect('clicked', self.set_tool, self._TOOL_POLYGON)
+ self._tool_pencil.connect('clicked', self.set_tool, self._TOOL_PENCIL)
+ self._tool_brush.connect('clicked', self.set_tool, self._TOOL_BRUSH)
+ self._tool_eraser.connect('clicked', self.set_tool, self._TOOL_ERASER)
+ self._tool_bucket.connect('clicked', self.set_tool, self._TOOL_BUCKET)
+ #self._tool_marquee_elliptical.connect('clicked', self.set_tool, self._TOOL_MARQUEE_ELLIPTICAL)
+ #self._tool_marquee_freeform.connect('clicked', self.set_tool, self._TOOL_MARQUEE_FREEFORM)
+ self._tool_marquee_rectangular.connect('clicked', self.set_tool, self._TOOL_MARQUEE_RECTANGULAR)
+ #self._tool_marquee_smart.connect('clicked', self.set_tool, self._TOOL_MARQUEE_SMART)
+
+ def create_palette(self, tool=None):
+
+ #TODO: create palettes for other tools.
+ if tool == None:
return None
- elif data == 'Brush':
- palette = Palette(_(data))
+ elif (tool == 'Brush') or (tool == 'Eraser'):
+ palette = Palette(_(tool))
item_1 = gtk.MenuItem(_('Square'))
item_2 = gtk.MenuItem(_('Circle'))
@@ -180,85 +270,184 @@ class ToolsToolbar(gtk.Toolbar):
palette.append_menu_item(item_2)
item_1.show()
item_2.show()
- item_1.connect('activate', self.test, 'square')
- item_2.connect('activate', self.test, 'circle')
+ item_1.connect('activate', self.set_shape, tool, 'square')
+ item_2.connect('activate', self.set_shape, tool,'circle')
return palette
- def test(self, button, data=None):
- print button, data
- self._activity._area.brush_shape = data
+ def set_shape(self, button, tool, shape):
+ '''
+ Set a tool shape according to user choice at Tool Palette
+ '''
+
+ if tool == 'Brush':
+ self._activity._area.brush_shape = shape
+ elif tool == 'Eraser':
+ self._activity._area.eraser_shape = shape
+
+ def set_tool(self, widget, tool):
+ '''
+ Set tool to the Area object. Configures tool's color and size.
+ '''
+
+ # setting tool
+ self._activity._area.tool = tool
+
+ # setting size and color
+ size = self._stroke_size.get_size()
+ self._stroke_size.set_stroke_size(size)
+
+ color = self._stroke_color.get_color()
+ self._stroke_color.set_stroke_color(color)
+
+ #setting cursor
+ try:
+ pixbuf = gtk.gdk.pixbuf_new_from_file('./images/' + tool + '.png')
+ cursor = gtk.gdk.Cursor(gtk.gdk.display_get_default() , pixbuf, 6, 21)
+ except:
+ cursor = None
+
+ self._activity._area.window.set_cursor(cursor)
class ComboFillColors(ToolComboBox):
-
- _ACTION_BLACK = 0
- _ACTION_PURPLE = 1
- _ACTION_YELLOW = 2
- _ACTION_BLUE = 3
- _ACTION_GREEN = 4
- _ACTION_RED = 5
- _ACTION_ORANGE = 6
- _ACTION_WHITE = 7
-
+ """Class to manage Fill colors """
+
def __init__(self, activity):
+ """Initialize the object
+
+ Keyword arguments:
+ activity -- the OficinaActivity object
+ """
+
ToolComboBox.__init__(self)
self._activity = activity
self._fill_color = self.combo
- self._fill_color.append_item(self._ACTION_BLACK, _('Black'))
- self._fill_color.append_item(self._ACTION_PURPLE, _('Purple'))
- self._fill_color.append_item(self._ACTION_YELLOW, _('Yellow'))
- self._fill_color.append_item(self._ACTION_BLUE, _('Blue'))
- self._fill_color.append_item(self._ACTION_GREEN, _('Green'))
- self._fill_color.append_item(self._ACTION_RED, _('Red'))
- self._fill_color.append_item(self._ACTION_ORANGE, _('Orange'))
- self._fill_color.append_item(self._ACTION_WHITE, _('White'))
+ self._fill_color.append_item(self.alloc_color('#000000'), _('Black'))
+ self._fill_color.append_item(self.alloc_color('#ffffff'), _('White'))
+ self._fill_color.append_item(self.alloc_color('#800000'), _('Maroon'))
+ self._fill_color.append_item(self.alloc_color('#ff0000'), _('Red'))
+ self._fill_color.append_item(self.alloc_color('#808000'), _('Olive'))
+ self._fill_color.append_item(self.alloc_color('#ffff00'), _('Yellow'))
+ self._fill_color.append_item(self.alloc_color('#008000'), _('Green'))
+ self._fill_color.append_item(self.alloc_color('#00ff00'), _('Lime'))
+ self._fill_color.append_item(self.alloc_color('#008080'), _('Teal'))
+ self._fill_color.append_item(self.alloc_color('#00ffff'), _('Aqua'))
+ self._fill_color.append_item(self.alloc_color('#000080'), _('Navy'))
+ self._fill_color.append_item(self.alloc_color('#0000ff'), _('Blue'))
+ self._fill_color.append_item(self.alloc_color('#800080'), _('Purple'))
+ self._fill_color.append_item(self.alloc_color('#ff00ff'), _('Fuchsia'))
self._fill_color.set_active(0)
- self._fill_color.connect('changed', self.set_fill_color)
+ self._fill_color.connect('changed', self._combo_changed_cb)
+ def alloc_color(self, color):
+ """Alloc new color.
- def set_fill_color(self, combo):
- color = combo.get_active()
- self._activity._area._set_fill_color(color)
+ Keyword arguments:
+ color -- hexadecimal number
+
+ Return:
+ a gdk.Color object
+ """
+ colormap = self.get_colormap()
+ _COLOR_ = colormap.alloc_color(color, True, True)
+ return _COLOR_
+ def _combo_changed_cb(self, combo):
+ color = self.get_color()
+ self.set_fill_color(color)
-class ComboStrokeColors(ToolComboBox):
+ def set_fill_color(self, color):
+ """Set the fill color in Area
+
+ Keyword arguments:
+ color -- a gdk.Color object
- _ACTION_BLACK = 0
- _ACTION_PURPLE = 1
- _ACTION_YELLOW = 2
- _ACTION_BLUE = 3
- _ACTION_GREEN = 4
- _ACTION_RED = 5
- _ACTION_ORANGE = 6
- _ACTION_WHITE = 7
+ """
+ self._activity._area._set_fill_color(color)
+
+ def get_color(self):
+ """Get the fill color from combobox
+ Return:
+ a gdk.Color object
+
+ """
+ model = self.combo.get_model()
+ active = self.combo.get_active()
+ return model[active][0]
+
+
+class ComboStrokeColors(ToolComboBox):
+ """Class to manage Stroke colors """
+
def __init__(self, activity):
+ """Initialize the object
+
+ Keyword arguments:
+ activity -- the OficinaActivity object
+ """
+
ToolComboBox.__init__(self)
- self._stroke_color = self.combo
self._activity = activity
- self._stroke_color.append_item(self._ACTION_BLACK, _('Black'))
- self._stroke_color.append_item(self._ACTION_PURPLE, _('Purple'))
- self._stroke_color.append_item(self._ACTION_YELLOW, _('Yellow'))
- self._stroke_color.append_item(self._ACTION_BLUE, _('Blue'))
- self._stroke_color.append_item(self._ACTION_GREEN, _('Green'))
- self._stroke_color.append_item(self._ACTION_RED, _('Red'))
- self._stroke_color.append_item(self._ACTION_ORANGE, _('Orange'))
- self._stroke_color.append_item(self._ACTION_WHITE, _('White'))
+ self._stroke_color = self.combo
+ self._stroke_color.append_item(self.alloc_color('#000000'), _('Black'))
+ self._stroke_color.append_item(self.alloc_color('#ffffff'), _('White'))
+ self._stroke_color.append_item(self.alloc_color('#800000'), _('Maroon'))
+ self._stroke_color.append_item(self.alloc_color('#ff0000'), _('Red'))
+ self._stroke_color.append_item(self.alloc_color('#808000'), _('Olive'))
+ self._stroke_color.append_item(self.alloc_color('#ffff00'), _('Yellow'))
+ self._stroke_color.append_item(self.alloc_color('#008000'), _('Green'))
+ self._stroke_color.append_item(self.alloc_color('#00ff00'), _('Lime'))
+ self._stroke_color.append_item(self.alloc_color('#008080'), _('Teal'))
+ self._stroke_color.append_item(self.alloc_color('#00ffff'), _('Aqua'))
+ self._stroke_color.append_item(self.alloc_color('#000080'), _('Navy'))
+ self._stroke_color.append_item(self.alloc_color('#0000ff'), _('Blue'))
+ self._stroke_color.append_item(self.alloc_color('#800080'), _('Purple'))
+ self._stroke_color.append_item(self.alloc_color('#ff00ff'), _('Fuchsia'))
self._stroke_color.set_active(0)
- #self._stroke_color.connect('changed', self._combo_changed_cb)
- self._stroke_color.connect('changed', self.set_stroke_color)
- self.connect("focus", self.event_focus)
-
- def event_focus(self, combo):
- print 'combostroke gained focus'
-
- def set_stroke_color(self, combo):
- color = combo.get_active()
+ self._stroke_color.connect('changed', self._combo_changed_cb)
+
+ def alloc_color(self, color):
+ """Alloc new color.
+
+ Keyword arguments:
+ color -- hexadecimal number
+
+ Return:
+ a gdk.Color object
+
+ """
+ colormap = self.get_colormap()
+ _COLOR_ = colormap.alloc_color(color, True, True)
+ return _COLOR_
+
+ def _combo_changed_cb(self, combo):
+ color = self.get_color()
+ self.set_stroke_color(color)
+
+ def get_color(self):
+ """Get the fill color from combobox
+
+ Return:
+ a gdk.Color object
+
+ """
+ model = self.combo.get_model()
+ active = self.combo.get_active()
+ return model[active][0]
+
+ def set_stroke_color(self, color):
+ """Set the fill color in Area
+
+ Keyword arguments:
+ color -- a gdk.Color object
+
+ """
self._activity._area._set_stroke_color(color)
@@ -272,11 +461,13 @@ class ComboStrokeSize(ToolComboBox):
_ACTION_20 = 20
_ACTION_50 = 50
_ACTION_100 = 100
+ """
_ACTION_500 = 500
_ACTION_1000 = 1000
_ACTION_5000 = 5000
_ACTION_10000 = 10000
_ACTION_100000 = 100000
+ """
def __init__(self, activity):
ToolComboBox.__init__(self)
@@ -284,65 +475,78 @@ class ComboStrokeSize(ToolComboBox):
self._stroke_size = self.combo
self._stroke_size.append_item(self._ACTION_1, _('1'))
- self._stroke_size.append_item(self._ACTION_2, _('2'))
+ self._stroke_size.append_item(self._ACTION_2, _('2'))
self._stroke_size.append_item(self._ACTION_3, _('3'))
self._stroke_size.append_item(self._ACTION_5, _('5'))
self._stroke_size.append_item(self._ACTION_10, _('10'))
self._stroke_size.append_item(self._ACTION_20, _('20'))
self._stroke_size.append_item(self._ACTION_50, _('50'))
self._stroke_size.append_item(self._ACTION_100, _('100'))
+ """
self._stroke_size.append_item(self._ACTION_500, _('500'))
self._stroke_size.append_item(self._ACTION_1000, _('1000'))
self._stroke_size.append_item(self._ACTION_5000, _('5000'))
self._stroke_size.append_item(self._ACTION_10000, _('10000'))
self._stroke_size.append_item(self._ACTION_100000, _('100000'))
+ """
- self._stroke_size.set_active(0)
+ self._stroke_size.set_active(1)
self._stroke_size.connect('changed', self._combo_changed_cb)
def _combo_changed_cb(self, combo):
- set_stroke_size(self._activity, combo.get_active())
-
+# model = combo.get_model()
+# active = combo.get_active()
+# self.set_stroke_size(model[active][0])
+ size = self.get_size()
+ self.set_stroke_size(size)
+
+ def set_stroke_size(self, size):
+ self._activity._area.configure_line(size)
+
+ def get_size(self):
+ model = self.combo.get_model()
+ active = self.combo.get_active()
+ return model[active][0]
class ShapesToolbar(gtk.Toolbar):
- _TOOL_SHAPE_ARROW = 0
- _TOOL_SHAPE_CURVE = 0
- _TOOL_SHAPE_ELLIPSE = 5
- _TOOL_SHAPE_FREEFORM = 0
- _TOOL_SHAPE_HEART = 0
- _TOOL_SHAPE_LINE = 1
- _TOOL_SHAPE_PARALLELOGRAM = 0
- _TOOL_SHAPE_POLYGON = 27
- _TOOL_SHAPE_RECTANGLE = 6
- _TOOL_SHAPE_STAR = 0
- _TOOL_SHAPE_TRAPEZOID = 31
- _TOOL_SHAPE_TRIANGLE = 30
+ _TOOL_SHAPE_ARROW = 'arrow'
+ _TOOL_SHAPE_CURVE = 'curve'
+ _TOOL_SHAPE_ELLIPSE = 'ellipse'
+ _TOOL_SHAPE_FREEFORM = 'freeform'
+ _TOOL_SHAPE_HEART = 'heart'
+ _TOOL_SHAPE_LINE = 'line'
+ _TOOL_SHAPE_PARALLELOGRAM = 'parallelogram'
+ _TOOL_SHAPE_POLYGON = 'polygon'
+ _TOOL_SHAPE_RECTANGLE = 'rectangle'
+ _TOOL_SHAPE_STAR = 'star'
+ _TOOL_SHAPE_TRAPEZOID = 'trapezoid'
+ _TOOL_SHAPE_TRIANGLE = 'triangle'
def __init__(self, activity):
gtk.Toolbar.__init__(self)
+ self._activity = activity
+
self._icon_fill = ToolButton('icon-fill')
self.insert(self._icon_fill, -1)
self._icon_fill.show()
-
- # FIXME: This should be a file picker instead of a combobox
-
- tool_item = ComboFillColors(activity)
- self.insert(tool_item, -1)
- tool_item.show()
+
+ self._fill_color = ComboFillColors(activity)
+ self.insert(self._fill_color, -1)
+ self._fill_color.show()
self._icon_stroke = ToolButton('icon-stroke')
self.insert(self._icon_stroke, -1)
self._icon_stroke.show()
- tool_item = ComboStrokeColors(activity)
- self.insert(tool_item, -1)
- tool_item.show()
+ self._stroke_color = ComboStrokeColors(activity)
+ self.insert(self._stroke_color, -1)
+ self._stroke_color.show()
- tool_item = ComboStrokeSize(activity)
- self.insert(tool_item, -1)
- tool_item.show()
+ self._stroke_size = ComboStrokeSize(activity)
+ self.insert(self._stroke_size, -1)
+ self._stroke_size.show()
separator = gtk.SeparatorToolItem()
self.insert(separator, -1)
@@ -378,6 +582,8 @@ class ShapesToolbar(gtk.Toolbar):
self._tool_shape_heart.show()
self._tool_shape_heart.set_tooltip(_('Heart'))
+ """
+
self._tool_shape_parallelogram = ToolButton('tool-shape-parallelogram')
self.insert(self._tool_shape_parallelogram, -1)
self._tool_shape_parallelogram.show()
@@ -393,8 +599,6 @@ class ShapesToolbar(gtk.Toolbar):
self._tool_shape_star.show()
self._tool_shape_star.set_tooltip(_('Star'))
- """
-
self._tool_shape_trapezoid = ToolButton('tool-shape-trapezoid')
self.insert(self._tool_shape_trapezoid, -1)
self._tool_shape_trapezoid.show()
@@ -405,32 +609,72 @@ class ShapesToolbar(gtk.Toolbar):
self._tool_shape_triangle.show()
self._tool_shape_triangle.set_tooltip(_('Triangle'))
- #self._tool_shape_arrow.connect('clicked', set_tool, activity, 'tool-shape-arrow', self._TOOL_SHAPE_ARROW)
+ '''
+ self._tool_shape_arrow.connect('clicked', set_tool, activity, 'tool-shape-arrow', self._TOOL_SHAPE_ARROW)
self._tool_shape_ellipse.connect('clicked', set_tool, activity, 'tool-shape-ellipse', self._TOOL_SHAPE_ELLIPSE)
#self._tool_shape_freeform.connect('clicked', set_tool, activity, 'tool-shape-freeform', self._TOOL_SHAPE_FREEFORM)
#self._tool_shape_heart.connect('clicked', set_tool, activity, 'tool-shape-heart', self._TOOL_SHAPE_HEART)
self._tool_shape_line.connect('clicked', set_tool, activity, 'tool-shape-line', self._TOOL_SHAPE_LINE)
- #self._tool_shape_parallelogram.connect('clicked', set_tool, activity, 'tool-shape-parallelogram', self._TOOL_SHAPE_PARALLELOGRAM)
+ self._tool_shape_parallelogram.connect('clicked', set_tool, activity, 'tool-shape-parallelogram', self._TOOL_SHAPE_PARALLELOGRAM)
#self._tool_shape_polygon.connect('clicked', set_tool, activity, 'tool-shape-polygon', self._TOOL_SHAPE_POLYGON)
self._tool_shape_rectangle.connect('clicked', set_tool, activity, 'tool-shape-rectangle', self._TOOL_SHAPE_RECTANGLE)
- #self._tool_shape_star.connect('clicked', set_tool, activity, 'tool-shape-star', self._TOOL_SHAPE_STAR)
+ self._tool_shape_star.connect('clicked', set_tool, activity, 'tool-shape-star', self._TOOL_SHAPE_STAR)
self._tool_shape_trapezoid.connect('clicked', set_tool, activity, 'tool-shape-trapezoid', self._TOOL_SHAPE_TRAPEZOID)
self._tool_shape_triangle.connect('clicked', set_tool, activity, 'tool-shape-triangle', self._TOOL_SHAPE_TRIANGLE)
-
+ '''
+
+ self._tool_shape_arrow.connect('clicked', self.set_tool, self._TOOL_SHAPE_ARROW)
+ self._tool_shape_ellipse.connect('clicked', self.set_tool, self._TOOL_SHAPE_ELLIPSE)
+ #self._tool_shape_freeform.connect('clicked', self.set_tool, self._TOOL_SHAPE_FREEFORM)
+ #self._tool_shape_heart.connect('clicked', self.set_tool, self._TOOL_SHAPE_HEART)
+ self._tool_shape_line.connect('clicked', self.set_tool, self._TOOL_SHAPE_LINE)
+ self._tool_shape_parallelogram.connect('clicked', self.set_tool, self._TOOL_SHAPE_PARALLELOGRAM)
+ #self._tool_shape_polygon.connect('clicked', self.set_tool, self._TOOL_SHAPE_POLYGON)
+ self._tool_shape_rectangle.connect('clicked', self.set_tool, self._TOOL_SHAPE_RECTANGLE)
+ self._tool_shape_star.connect('clicked', self.set_tool, self._TOOL_SHAPE_STAR)
+ self._tool_shape_trapezoid.connect('clicked', self.set_tool, self._TOOL_SHAPE_TRAPEZOID)
+ self._tool_shape_triangle.connect('clicked', self.set_tool, self._TOOL_SHAPE_TRIANGLE)
+
+ def set_tool(self, widget, tool):
+
+ # setting tool
+ self._activity._area.tool = tool
+
+ # setting size and color
+ size = self._stroke_size.get_size()
+ self._stroke_size.set_stroke_size(size)
+
+ stroke_color = self._stroke_color.get_color()
+ self._stroke_color.set_stroke_color(stroke_color)
+
+ fill_color = self._fill_color.get_color()
+ self._fill_color.set_fill_color(fill_color)
+
+ #setting cursor
+ try:
+ pixbuf = gtk.gdk.pixbuf_new_from_file('./images/' + tool + '.png')
+ cursor = gtk.gdk.Cursor(gtk.gdk.display_get_default() , pixbuf, 6, 21)
+ except:
+ cursor = None
+
+ self._activity._area.window.set_cursor(cursor)
+
class TextToolbar(gtk.Toolbar):
- _ACTION_TEXT = 4
+ _ACTION_TEXT = 'text'
def __init__(self, activity):
gtk.Toolbar.__init__(self)
+ self._activity = activity
+
self._text = ToggleToolButton('text')
self.insert(self._text, -1)
self._text.show()
self._text.set_tooltip(_('Type'))
- self._text.connect('clicked', set_tool, activity, 'text', self._ACTION_TEXT)
-
+ self._text.connect('clicked', self.set_tool, self._ACTION_TEXT)
+
"""
#FIXME: this button is not connected to the right callback
self._bold = ToggleToolButton('format-text-bold')
@@ -462,18 +706,24 @@ class TextToolbar(gtk.Toolbar):
#self.insert(self._text_color, -1)
self._text_color.show()
"""
+
def type_text(self, activity):
set_tool(self._ACTION_TEXT, activity, 'text')
activity._textview.show()
+
+ def set_tool(self, widget, tool):
+ #FIXME: this callback must change as others buttons get enabled
+ self._activity._area.tool = tool
+
class ImageToolbar(gtk.Toolbar):
- _OBJECT_HEIGHT = 30
- _OBJECT_INSERT = 31
- _OBJECT_ROTATE_LEFT = 32
- _OBJECT_ROTATE_RIGHT = 33
- _OBJECT_WIDTH = 34
+ _OBJECT_HEIGHT = 'height'
+ _OBJECT_INSERT = 'insert'
+ _OBJECT_ROTATE_LEFT = 'rotate-left'
+ _OBJECT_ROTATE_RIGHT = 'rotate-right'
+ _OBJECT_WIDTH = 'width'
def __init__(self, activity):
gtk.Toolbar.__init__(self)
@@ -481,7 +731,7 @@ class ImageToolbar(gtk.Toolbar):
self._object_insert = ToolButton('object-insert')
self.insert(self._object_insert, -1)
self._object_insert.show()
- self._object_insert.set_tooltip(_('object-insert'))
+ self._object_insert.set_tooltip(_('Insert Image'))
separator = gtk.SeparatorToolItem()
separator.set_draw(True)
@@ -520,32 +770,32 @@ class ImageToolbar(gtk.Toolbar):
def rotate_left(self, widget, activity):
#activity._area._rotate_left()
- pass
+ pass
def insertImage(self, widget, activity):
- dialog = gtk.FileChooserDialog(title=(_('Open File...')),
- action=gtk.FILE_CHOOSER_ACTION_OPEN,
- buttons=(gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL,
- gtk.STOCK_OK, gtk.RESPONSE_OK))
- dialog.show_all()
- response = dialog.run()
- if response == gtk.RESPONSE_OK:
- print dialog.get_filename(), 'selected'
- #gtk28 = False
- file_path = dialog.get_filename()
+ dialog = gtk.FileChooserDialog(title=(_('Open File...')),
+ action=gtk.FILE_CHOOSER_ACTION_OPEN,
+ buttons=(gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL,
+ gtk.STOCK_OK, gtk.RESPONSE_OK))
+ dialog.show_all()
+ response = dialog.run()
+ if response == gtk.RESPONSE_OK:
+ print dialog.get_filename(), 'selected'
+ #gtk28 = False
+ file_path = dialog.get_filename()
#file_path = decode_path((file_path,))[0]
#open(activity, file_path)
- activity._area.d.loadImage(file_path)
- elif response == gtk.RESPONSE_CANCEL:
- print 'Closed, no files selected'
+ activity._area.d.loadImage(file_path,widget)
+ elif response == gtk.RESPONSE_CANCEL:
+ print 'Closed, no files selected'
dialog.destroy()
class EffectsToolbar(gtk.Toolbar):
- _ACTION_GRAYSCALE = 0
+ _ACTION_GRAYSCALE = 'grayscale'
def __init__(self, activity):
gtk.Toolbar.__init__(self)
@@ -633,82 +883,98 @@ class ViewToolbar(gtk.Toolbar):
print 'treeeter'
-def set_tool(widget, activity, data=None, tool=None):
- activity._area.tool = tool
- #setting cursor
- print data
- if data == 'tool-pencil':
- pix = gtk.gdk.pixbuf_new_from_file("./images/lapis_cursor.png")
- cursor = gtk.gdk.Cursor(gtk.gdk.display_get_default() , pix, 6, 21)
-
- elif data == 'tool-eraser':
- pix = gtk.gdk.pixbuf_new_from_file("./images/borracha_cursor.png")
- cursor = gtk.gdk.Cursor(gtk.gdk.display_get_default() , pix, 6, 21)
-
- elif data == 'tool-shape-ellipse':
- pix = gtk.gdk.pixbuf_new_from_file("./images/circulo_cursor.png")
- cursor = gtk.gdk.Cursor(gtk.gdk.display_get_default() , pix, 6, 21)
-
- elif data == 'tool-shape-rectangle':
- pix = gtk.gdk.pixbuf_new_from_file("./images/quadrado_cursor.png")
- cursor = gtk.gdk.Cursor(gtk.gdk.display_get_default() , pix, 6, 21)
-
- elif data == 'tool-marquee-rectangular':
- cursor = gtk.gdk.Cursor(gtk.gdk.CROSSHAIR)
- activity._area.move = False
-
- elif data == 'text':
- pix = gtk.gdk.pixbuf_new_from_file("./images/letra_cursor.png")
- cursor = gtk.gdk.Cursor(gtk.gdk.display_get_default() , pix, 6, 21)
-
- elif data == 'tool-shape-line':
- pix = gtk.gdk.pixbuf_new_from_file("./images/linha_cursor.png")
- cursor = gtk.gdk.Cursor(gtk.gdk.display_get_default() , pix, 6, 21)
-
- elif data == 'tool-brush':
- pix = gtk.gdk.pixbuf_new_from_file("./icons/brush_cursor.svg")
- cursor = gtk.gdk.Cursor(gtk.gdk.display_get_default() , pix, 6, 21)
-
- elif data == 'tool-bucket':
- pix = gtk.gdk.pixbuf_new_from_file("./icons/bucket_cursor.svg")
- cursor = gtk.gdk.Cursor(gtk.gdk.display_get_default() , pix, 6, 21)
-
- elif data == 'tool-polygon':
- pix = gtk.gdk.pixbuf_new_from_file("./images/poligono_cursor.png")
- cursor = gtk.gdk.Cursor(gtk.gdk.display_get_default() , pix, 6, 21)
-
- elif data == 'tool-shape-triangle':
- pix = gtk.gdk.pixbuf_new_from_file("./images/triangle_cursor.png")
- cursor = gtk.gdk.Cursor(gtk.gdk.display_get_default() , pix, 6, 21)
-
- elif data == 'tool-shape-trapezoid':
- pix = gtk.gdk.pixbuf_new_from_file("./images/trapezoid_cursor.png")
- cursor = gtk.gdk.Cursor(gtk.gdk.display_get_default() , pix, 6, 21)
-
- else:
- # Uses toolbar icon as cursor
- #FIXME: invert cursor color. Toolbar icons are white
- try:
- archive = './icons/' + data + '.svg'
- pix = gtk.gdk.pixbuf_new_from_file(archive)
- print archive, pix
- cursor = gtk.gdk.Cursor(gtk.gdk.display_get_default() , pix, 6, 21)
- except:
- cursor = None
-
-
- activity._area.window.set_cursor(cursor)
- #print cursor
+# def set_tool(widget, activity, data=None, tool=None):
+# activity._area.tool = tool
+# #setting cursor
+# print data
+# if data == 'tool-pencil':
+# pix = gtk.gdk.pixbuf_new_from_file("./images/lapis_cursor.png")
+# cursor = gtk.gdk.Cursor(gtk.gdk.display_get_default() , pix, 6, 21)
+#
+# elif data == 'tool-eraser':
+# pix = gtk.gdk.pixbuf_new_from_file("./images/borracha_cursor.png")
+# cursor = gtk.gdk.Cursor(gtk.gdk.display_get_default() , pix, 6, 21)
+#
+# elif data == 'tool-shape-ellipse':
+# pix = gtk.gdk.pixbuf_new_from_file("./images/circulo_cursor.png")
+# cursor = gtk.gdk.Cursor(gtk.gdk.display_get_default() , pix, 6, 21)
+#
+# elif data == 'tool-shape-rectangle':
+# pix = gtk.gdk.pixbuf_new_from_file("./images/quadrado_cursor.png")
+# cursor = gtk.gdk.Cursor(gtk.gdk.display_get_default() , pix, 6, 21)
+#
+# elif data == 'tool-marquee-rectangular':
+# cursor = gtk.gdk.Cursor(gtk.gdk.CROSSHAIR)
+# activity._area.move = False
+
+# elif data == 'text':
+# pix = gtk.gdk.pixbuf_new_from_file("./images/letra_cursor.png")
+# cursor = gtk.gdk.Cursor(gtk.gdk.display_get_default() , pix, 6, 21)
+#
+# elif data == 'tool-shape-line':
+# pix = gtk.gdk.pixbuf_new_from_file("./images/linha_cursor.png")
+# cursor = gtk.gdk.Cursor(gtk.gdk.display_get_default() , pix, 6, 21)
+
+# elif data == 'tool-brush':
+# pix = gtk.gdk.pixbuf_new_from_file("./images/brush_cursor.png")
+# cursor = gtk.gdk.Cursor(gtk.gdk.display_get_default() , pix, 6, 21)
+
+# elif data == 'tool-bucket':
+# pix = gtk.gdk.pixbuf_new_from_file("./images/bucket_cursor.png")
+# cursor = gtk.gdk.Cursor(gtk.gdk.display_get_default() , pix, 6, 21)
+
+# elif data == 'tool-polygon':
+# pix = gtk.gdk.pixbuf_new_from_file("./images/poligono_cursor.png")
+# cursor = gtk.gdk.Cursor(gtk.gdk.display_get_default() , pix, 6, 21)
+
+# elif data == 'tool-shape-triangle':
+# pix = gtk.gdk.pixbuf_new_from_file("./images/triangle_cursor.png")
+# cursor = gtk.gdk.Cursor(gtk.gdk.display_get_default() , pix, 6, 21)
+
+# elif data == 'tool-shape-trapezoid':
+# pix = gtk.gdk.pixbuf_new_from_file("./images/trapezoid_cursor.png")
+# cursor = gtk.gdk.Cursor(gtk.gdk.display_get_default() , pix, 6, 21)
+#
+# elif data == 'tool-shape-star':
+# pix = gtk.gdk.pixbuf_new_from_file("./images/star_cursor.png")
+# cursor = gtk.gdk.Cursor(gtk.gdk.display_get_default() , pix, 6, 21)
+#
+# elif data == 'tool-shape-heart':
+# pix = gtk.gdk.pixbuf_new_from_file("./images/heart_cursor.png")
+# cursor = gtk.gdk.Cursor(gtk.gdk.display_get_default() , pix, 6, 21)
+#
+# elif data == 'tool-shape-parallelogram':
+# pix = gtk.gdk.pixbuf_new_from_file("./images/parallelogram_cursor.png")
+# cursor = gtk.gdk.Cursor(gtk.gdk.display_get_default() , pix, 6, 21)
+#
+# elif data == 'tool-shape-arrow':
+# pix = gtk.gdk.pixbuf_new_from_file("./images/arrow_cursor.png")
+# cursor = gtk.gdk.Cursor(gtk.gdk.display_get_default() , pix, 6, 21)
+
+# else:
+# # Uses toolbar icon as cursor
+# #FIXME: invert cursor color. Toolbar icons are white
+# try:
+# archive = './icons/' + data + '.svg'
+# pix = gtk.gdk.pixbuf_new_from_file(archive)
+# print archive, pix
+# cursor = gtk.gdk.Cursor(gtk.gdk.display_get_default() , pix, 6, 21)
+# except:
+# cursor = None
+
+#
+# activity._area.window.set_cursor(cursor)
+# #print cursor
-
-def set_stroke_size(activity, size):
- activity._area.configure_line(size)
+#move to class ComboStrokeSize
+#def set_stroke_size(activity, size):
+ #activity._area.configure_line(size)
-def undo(widget, activity):
+def undo(widget, activity):
activity._area.undo()
-def redo(widget, activity):
+def redo(widget, activity):
activity._area.redo()
def test_connect(widget, activity, data=None):
@@ -718,21 +984,21 @@ def test_connect(widget, activity, data=None):
def insertImage(widget, activity):
- dialog = gtk.FileChooserDialog(title=(_('Open File...')),
- action=gtk.FILE_CHOOSER_ACTION_OPEN,
- buttons=(gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL,
- gtk.STOCK_OK, gtk.RESPONSE_OK))
- dialog.show_all()
- response = dialog.run()
- if response == gtk.RESPONSE_OK:
- print dialog.get_filename(), 'selected'
- #gtk28 = False
- file_path = dialog.get_filename()
+ dialog = gtk.FileChooserDialog(title=(_('Open File...')),
+ action=gtk.FILE_CHOOSER_ACTION_OPEN,
+ buttons=(gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL,
+ gtk.STOCK_OK, gtk.RESPONSE_OK))
+ dialog.show_all()
+ response = dialog.run()
+ if response == gtk.RESPONSE_OK:
+ print dialog.get_filename(), 'selected'
+ #gtk28 = False
+ file_path = dialog.get_filename()
#file_path = decode_path((file_path,))[0]
#open(activity, file_path)
- activity._area.d.loadImage(file_path)
- elif response == gtk.RESPONSE_CANCEL:
- print 'Closed, no files selected'
+ activity._area.d.loadImage(file_path)
+ elif response == gtk.RESPONSE_CANCEL:
+ print 'Closed, no files selected'
dialog.destroy()