[PATCH] move free form tool
Gonzalo Odiard
godiard at gmail.com
Sat May 22 09:16:52 EDT 2010
---
toolbox.py | 97
++++++++++++++++++++++++++----------------------------------
1 files changed, 42 insertions(+), 55 deletions(-)
diff --git a/toolbox.py b/toolbox.py
index 6a01a72..c3bcc01 100644
--- a/toolbox.py
+++ b/toolbox.py
@@ -216,15 +216,6 @@ class ToolsToolbar(gtk.Toolbar):
'vertices' : None
}
- _TOOL_POLYGON = {
- 'name' : 'polygon',
- 'line size' : 2,
- 'fill color' : None,
- 'stroke color' : None,
- 'line shape' : 'circle',
- 'fill' : True,
- 'vertices' : None
- }
_TOOL_BUCKET = {
'name' : 'bucket',
@@ -319,13 +310,6 @@ class ToolsToolbar(gtk.Toolbar):
except:
logging.debug('Could not create palette for tool Eraser')
- self._tool_polygon = ToolButton('tool-polygon')
- self.insert(self._tool_polygon, -1)
- self._tool_polygon.set_tooltip(_('Polygon'))
- try:
- self._configure_palette(self._tool_polygon, self._TOOL_POLYGON)
- except:
- logging.debug('Could not create palette for tool Polygon')
self._tool_bucket = ToolButton('tool-bucket')
self.insert(self._tool_bucket, -1)
@@ -365,7 +349,6 @@ class ToolsToolbar(gtk.Toolbar):
# New connect method
# Using dictionnaries to control tool's properties
- 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)
@@ -397,7 +380,6 @@ class ToolsToolbar(gtk.Toolbar):
# We can set size when using either Pencil, Free Polygon, Brush or
Eraser
if tool['name'] is self._TOOL_PENCIL['name'] or \
- tool['name'] is self._TOOL_POLYGON['name'] or \
tool['name'] is self._TOOL_BRUSH['name'] or \
tool['name'] is self._TOOL_ERASER['name']:
@@ -468,36 +450,6 @@ class ToolsToolbar(gtk.Toolbar):
#vbox.pack_end(separator)
#separator.show()
- # User is able to fill or not a polygon, and choose its fill color
- if tool['name'] is self._TOOL_POLYGON['name']:
- # Creating a CheckButton named "Fill".
- fill_checkbutton = gtk.CheckButton(_('Fill'))
- fill_checkbutton.show()
- fill_checkbutton.set_active(self._TOOL_POLYGON['fill'])
-
- fill_checkbutton.connect('toggled',
self._on_fill_checkbutton_toggled, widget, self._TOOL_POLYGON)
-
- #palette.set_content(fill_checkbutton)
- palette.action_bar.pack_start(fill_checkbutton)
-
- # Creating Fill Color Button
- hbox = gtk.HBox()
- hbox.show()
-
- label = gtk.Label(_('Fill Color: '))
- label.show()
-
- colorbutton = ButtonFillColor(self._activity)
- colorbutton.show_all()
-
- hbox.pack_start(label)
- hbox.pack_start(colorbutton)
-
- #palette.action_bar.pack_start(label)
- #palette.action_bar.pack_start(colorbutton)
- content_box.pack_start(hbox)
-
- colorbutton.connect_after('color-set', self._on_color_set,
self._TOOL_POLYGON)
if tool['name'] is self._TOOL_MARQUEE_RECTANGULAR['name']:
# Creating a CheckButton named "Fill".
keep_aspect_checkbutton = gtk.CheckButton(_('Keep aspect'))
@@ -545,13 +497,6 @@ class ToolsToolbar(gtk.Toolbar):
#setting cursor: Moved to Area
- def _on_fill_checkbutton_toggled(self, checkbutton, button=None,
tool=None):
- logging.debug('Checkbutton is Active: %s', checkbutton.get_active()
)
-
- # New method for setting tools
- #self._activity.area.fill = checkbutton.get_active()
- tool['fill'] = checkbutton.get_active()
- self.set_tool(tool=tool)
# def _on_fill_checkbutton_map(self, checkbutton, data=None):
# """
@@ -734,6 +679,17 @@ class ShapesToolbar(gtk.Toolbar):
'fill' : True,
'vertices' : None
}
+
+ _TOOL_POLYGON = {
+ 'name' : 'polygon',
+ 'line size' : 2,
+ 'fill color' : None,
+ 'stroke color' : None,
+ 'line shape' : 'circle',
+ 'fill' : True,
+ 'vertices' : None
+ }
+
##The Constructor
def __init__(self, activity):
@@ -782,6 +738,14 @@ class ShapesToolbar(gtk.Toolbar):
self._configure_palette_shape_line()
except:
logging.debug('Could not create palette for Shape Line')
+
+ self._tool_polygon = ToolButton('tool-polygon')
+ self.insert(self._tool_polygon, -1)
+ self._tool_polygon.set_tooltip(_('Free form'))
+ try:
+ self._create_simple_palette(self._tool_polygon,
self._TOOL_POLYGON)
+ except:
+ logging.debug('Could not create palette for tool Polygon')
self._shape_polygon = ToolButton('tool-shape-polygon')
self.insert(self._shape_polygon, -1)
@@ -853,6 +817,7 @@ class ShapesToolbar(gtk.Toolbar):
self._shape_arrow.connect('clicked', self.set_tool,
self._SHAPE_ARROW)
self._shape_ellipse.connect('clicked', self.set_tool,
self._SHAPE_ELLIPSE)
#self._shape_freeform.connect('clicked', self.set_tool,
self._SHAPE_FREEFORM)
+ self._tool_polygon.connect('clicked', self.set_tool,
self._TOOL_POLYGON)
self._shape_heart.connect('clicked', self.set_tool,
self._SHAPE_HEART)
self._shape_line.connect('clicked', self.set_tool,
self._SHAPE_LINE)
self._shape_parallelogram.connect('clicked', self.set_tool,
self._SHAPE_PARALLELOGRAM)
@@ -934,6 +899,13 @@ class ShapesToolbar(gtk.Toolbar):
spin.connect('value-changed', self._on_vertices_value_changed,
self._SHAPE_POLYGON)
+ def _on_fill_checkbutton_toggled(self, checkbutton, button=None,
tool=None):
+ logging.debug('Checkbutton is Active: %s', checkbutton.get_active()
)
+
+ # New method for setting tools
+ #self._activity.area.fill = checkbutton.get_active()
+ tool['fill'] = checkbutton.get_active()
+ self.set_tool(tool=tool)
def _configure_palette_shape_heart(self):
logging.debug('Creating palette to shape heart')
@@ -980,6 +952,9 @@ class ShapesToolbar(gtk.Toolbar):
palette.content_box.pack_start(hbox)
spin.connect('value-changed', self._on_vertices_value_changed,
self._SHAPE_STAR)
+
+
+
def _configure_palette_shape_trapezoid(self):
logging.debug('Creating palette to shape trapezoid')
@@ -1039,6 +1014,18 @@ class ShapesToolbar(gtk.Toolbar):
palette.content_box.pack_start(hbox)
size_spinbutton.connect('value-changed',
self._on_line_size_value_changed, tool)
+
+ # User is able to fill or not a polygon, and choose its fill color
+ if tool['name'] is self._TOOL_POLYGON['name']:
+ # Creating a CheckButton named "Fill".
+ fill_checkbutton = gtk.CheckButton(_('Fill'))
+ fill_checkbutton.show()
+ fill_checkbutton.set_active(self._TOOL_POLYGON['fill'])
+
+ fill_checkbutton.connect('toggled',
self._on_fill_checkbutton_toggled, widget, self._TOOL_POLYGON)
+
+ #palette.set_content(fill_checkbutton)
+ palette.action_bar.pack_start(fill_checkbutton)
def _configure_palette_shape_line(self):
--
1.6.6.1
--
Gonzalo Odiard
SugarLabs Argentina
--000e0cdf19b499cc6104873a7c7f
Content-Type: text/html; charset=ISO-8859-1
Content-Transfer-Encoding: quoted-printable
<a href=3D"http://dev.laptop.org/ticket/3696">http://dev.laptop.org/ticket/=
3696</a><br><br>I want to work with the cursors (there are many bugs about =
this) and selection of fonts in the texts, but didn't have any response=
from the maintainer of this activity.<br clear=3D"all">
<br>From 0f99bd0b5d6d03dfe6673d944764a9346427dee1 Mon Sep 17 00:00:00 2001<=
br>From: Gonzalo Odiard <<a href=3D"mailto:godiard at gmail.com">godiard at gm=
ail.com</a>><br>Date: Sat, 22 May 2010 10:16:52 -0300<br>Subject: [PATCH=
] move free form tool<br>
<br>---<br>=A0toolbox.py |=A0=A0 97 ++++++++++++++++++++++++++-------------=
---------------------<br>=A01 files changed, 42 insertions(+), 55 deletions=
(-)<br><br>diff --git a/toolbox.py b/toolbox.py<br>index 6a01a72..c3bcc01 1=
00644<br>
--- a/toolbox.py<br>+++ b/toolbox.py<br>@@ -216,15 +216,6 @@ class ToolsToo=
lbar(gtk.Toolbar):<br>=A0=A0=A0=A0=A0=A0=A0=A0 'vertices'=A0=A0=A0=
=A0=A0 : None<br>=A0=A0=A0=A0 }<br>=A0=A0=A0=A0 <br>-=A0=A0=A0 _TOOL_POLYGO=
N =3D {<br>-=A0=A0=A0=A0=A0=A0=A0 'name'=A0=A0=A0=A0=A0=A0=A0=A0=A0=
: 'polygon',<br>
-=A0=A0=A0=A0=A0=A0=A0 'line size'=A0=A0=A0=A0 : 2,<br>-=A0=A0=A0=
=A0=A0=A0=A0 'fill color'=A0=A0=A0 : None,<br>-=A0=A0=A0=A0=A0=A0=
=A0 'stroke color'=A0 : None,<br>-=A0=A0=A0=A0=A0=A0=A0 'line s=
hape'=A0=A0=A0 : 'circle',<br>-=A0=A0=A0=A0=A0=A0=A0 'fill&=
#39;=A0=A0=A0=A0=A0=A0=A0=A0=A0 : True,<br>
-=A0=A0=A0=A0=A0=A0=A0 'vertices'=A0=A0=A0=A0=A0 : None<br>-=A0=A0=
=A0 }<br>=A0=A0=A0=A0 <br>=A0=A0=A0=A0 _TOOL_BUCKET =3D {<br>=A0=A0=A0=A0=
=A0=A0=A0=A0 'name'=A0=A0=A0=A0=A0=A0=A0=A0=A0 : 'bucket',<=
br>@@ -319,13 +310,6 @@ class ToolsToolbar(gtk.Toolbar):<br>=A0=A0=A0=A0=A0=
=A0=A0=A0 except:<br>=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 logging.debug(=
9;Could not create palette for tool Eraser')<br>
=A0=A0=A0=A0=A0=A0=A0=A0 <br>-=A0=A0=A0=A0=A0=A0=A0 self._tool_polygon =3D =
ToolButton('tool-polygon')<br>-=A0=A0=A0=A0=A0=A0=A0 self.insert(se=
lf._tool_polygon, -1)<br>-=A0=A0=A0=A0=A0=A0=A0 self._tool_polygon.set_tool=
tip(_('Polygon'))<br>-=A0=A0=A0=A0=A0=A0=A0 try:<br>-=A0=A0=A0=A0=
=A0=A0=A0=A0=A0=A0=A0 self._configure_palette(self._tool_polygon, self._TOO=
L_POLYGON)<br>
-=A0=A0=A0=A0=A0=A0=A0 except:<br>-=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 loggin=
g.debug('Could not create palette for tool Polygon')<br>=A0=A0=A0=
=A0=A0=A0=A0=A0 <br>=A0=A0=A0=A0=A0=A0=A0=A0 self._tool_bucket =3D ToolButt=
on('tool-bucket')<br>=A0=A0=A0=A0=A0=A0=A0=A0 self.insert(self._too=
l_bucket, -1)<br>
@@ -365,7 +349,6 @@ class ToolsToolbar(gtk.Toolbar):<br>=A0=A0=A0=A0=A0=A0=
=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 <br>=A0=A0=A0=A0=A0=A0=A0=A0 # New connect m=
ethod<br>=A0=A0=A0=A0=A0=A0=A0=A0 # Using dictionnaries to control tool'=
;s properties<br>-=A0=A0=A0=A0=A0=A0=A0 self._tool_polygon.connect('cli=
cked', self.set_tool, self._TOOL_POLYGON)<br>
=A0=A0=A0=A0=A0=A0=A0=A0 self._tool_pencil.connect('clicked', self.=
set_tool, self._TOOL_PENCIL)<br>=A0=A0=A0=A0=A0=A0=A0=A0 self._tool_brush.c=
onnect('clicked', self.set_tool, self._TOOL_BRUSH)<br>=A0=A0=A0=A0=
=A0=A0=A0=A0 self._tool_eraser.connect('clicked', self.set_tool, se=
lf._TOOL_ERASER)<br>
@@ -397,7 +380,6 @@ class ToolsToolbar(gtk.Toolbar):<br>=A0=A0=A0=A0=A0=A0=
=A0=A0=A0=A0=A0=A0 <br>=A0=A0=A0=A0=A0=A0=A0=A0 # We can set size when usin=
g either Pencil, Free Polygon, Brush or Eraser<br>=A0=A0=A0=A0=A0=A0=A0=A0 =
if tool['name'] is self._TOOL_PENCIL['name'] or \<br>
-=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 tool['name'] is self._TOOL_PO=
LYGON['name'] or \<br>=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 tool[=
'name'] is self._TOOL_BRUSH['name'] or \<br>=A0=A0=A0=A0=A0=
=A0=A0=A0=A0=A0=A0=A0=A0 tool['name'] is self._TOOL_ERASER['nam=
e']:<br>
=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 <br>@@ -468,36 +450,6 @@ class ToolsTo=
olbar(gtk.Toolbar):<br>=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 #vbox.pack_end(=
separator)<br>=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 #separator.show()<br>=A0=
<br>-=A0=A0=A0=A0=A0=A0=A0 # User is able to fill or not a polygon, and cho=
ose its fill color<br>
-=A0=A0=A0=A0=A0=A0=A0 if tool['name'] is self._TOOL_POLYGON['n=
ame']:<br>-=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 # Creating a CheckButton n=
amed "Fill".<br>-=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 fill_checkbutt=
on =3D gtk.CheckButton(_('Fill'))<br>-=A0=A0=A0=A0=A0=A0=A0=A0=A0=
=A0=A0 fill_checkbutton.show()<br>
-=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 fill_checkbutton.set_active(self._TOOL_P=
OLYGON['fill'])<br>-=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 <br>-=A0=A0=
=A0=A0=A0=A0=A0=A0=A0=A0=A0 fill_checkbutton.connect('toggled', sel=
f._on_fill_checkbutton_toggled, widget, self._TOOL_POLYGON)<br>-=A0=A0=A0=
=A0=A0=A0=A0=A0=A0=A0=A0 <br>
-=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 #palette.set_content(fill_checkbutton)<b=
r>-=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 palette.action_bar.pack_start(fill_che=
ckbutton)<br>-=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 <br>-=A0=A0=A0=A0=A0=A0=A0=
=A0=A0=A0=A0 # Creating Fill Color Button<br>-=A0=A0=A0=A0=A0=A0=A0=A0=A0=
=A0=A0 hbox =3D gtk.HBox()<br>-=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 hbox.show(=
)<br>
-=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 <br>-=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 l=
abel =3D gtk.Label(_('Fill Color: '))<br>-=A0=A0=A0=A0=A0=A0=A0=A0=
=A0=A0=A0 label.show()<br>-=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 <br>-=A0=A0=A0=
=A0=A0=A0=A0=A0=A0=A0=A0 colorbutton =3D ButtonFillColor(self._activity)<br=
>-=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 colorbutton.show_all()<br>
-=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 <br>-=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 h=
box.pack_start(label)<br>-=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 hbox.pack_start=
(colorbutton)<br>-=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 <br>-=A0=A0=A0=A0=A0=A0=
=A0=A0=A0=A0=A0 #palette.action_bar.pack_start(label)<br>-=A0=A0=A0=A0=A0=
=A0=A0=A0=A0=A0=A0 #palette.action_bar.pack_start(colorbutton)<br>
-=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 content_box.pack_start(hbox)<br>-=A0=A0=
=A0=A0=A0=A0=A0=A0=A0=A0=A0 <br>-=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 colorbut=
ton.connect_after('color-set', self._on_color_set, self._TOOL_POLYG=
ON)<br>=A0=A0=A0=A0=A0=A0=A0=A0 if tool['name'] is self._TOOL_MARQU=
EE_RECTANGULAR['name']:<br>
=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 # Creating a CheckButton named "F=
ill".<br>=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 keep_aspect_checkbutton =
=3D gtk.CheckButton(_('Keep aspect'))<br>@@ -545,13 +497,6 @@ class=
ToolsToolbar(gtk.Toolbar):<br>=A0=A0=A0=A0=A0=A0=A0=A0 #setting cursor: Mo=
ved to Area<br>
=A0=A0=A0=A0=A0=A0=A0=A0 <br>=A0=A0=A0=A0=A0=A0=A0=A0 <br>-=A0=A0=A0 def _o=
n_fill_checkbutton_toggled(self, checkbutton, button=3DNone, tool=3DNone):<=
br>-=A0=A0=A0=A0=A0=A0=A0 logging.debug('Checkbutton is Active: %s'=
, checkbutton.get_active() )<br>-=A0=A0=A0=A0=A0=A0=A0 <br>-=A0=A0=A0=A0=A0=
=A0=A0 # New method for setting tools<br>
-=A0=A0=A0=A0=A0=A0=A0 #self._activity.area.fill =3D checkbutton.get_active=
()<br>-=A0=A0=A0=A0=A0=A0=A0 tool['fill'] =3D checkbutton.get_activ=
e()<br>-=A0=A0=A0=A0=A0=A0=A0 self.set_tool(tool=3Dtool)<br>=A0=A0=A0=A0=A0=
=A0=A0=A0 <br>=A0#=A0=A0=A0=A0 def _on_fill_checkbutton_map(self, checkbutt=
on, data=3DNone):<br>
=A0#=A0=A0=A0=A0=A0=A0=A0=A0 """<br>@@ -734,6 +679,17 @@ cla=
ss ShapesToolbar(gtk.Toolbar):<br>=A0=A0=A0=A0=A0=A0=A0=A0 'fill'=
=A0=A0=A0=A0=A0=A0=A0=A0=A0 : True,<br>=A0=A0=A0=A0=A0=A0=A0=A0 'vertic=
es'=A0=A0=A0=A0=A0 : None<br>=A0=A0=A0=A0 }<br>+<br>+=A0=A0=A0 _TOOL_PO=
LYGON =3D {<br>+=A0=A0=A0=A0=A0=A0=A0 'name'=A0=A0=A0=A0=A0=A0=A0=
=A0=A0 : 'polygon',<br>
+=A0=A0=A0=A0=A0=A0=A0 'line size'=A0=A0=A0=A0 : 2,<br>+=A0=A0=A0=
=A0=A0=A0=A0 'fill color'=A0=A0=A0 : None,<br>+=A0=A0=A0=A0=A0=A0=
=A0 'stroke color'=A0 : None,<br>+=A0=A0=A0=A0=A0=A0=A0 'line s=
hape'=A0=A0=A0 : 'circle',<br>+=A0=A0=A0=A0=A0=A0=A0 'fill&=
#39;=A0=A0=A0=A0=A0=A0=A0=A0=A0 : True,<br>
+=A0=A0=A0=A0=A0=A0=A0 'vertices'=A0=A0=A0=A0=A0 : None<br>+=A0=A0=
=A0 }<br>+<br>=A0=A0=A0=A0 <br>=A0=A0=A0=A0 ##The Constructor<br>=A0=A0=A0=
=A0 def __init__(self, activity):<br>@@ -782,6 +738,14 @@ class ShapesToolb=
ar(gtk.Toolbar):<br>=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 self._configure_pa=
lette_shape_line()<br>
=A0=A0=A0=A0=A0=A0=A0=A0 except:<br>=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 lo=
gging.debug('Could not create palette for Shape Line')<br>+<br>+=A0=
=A0=A0=A0=A0=A0=A0 self._tool_polygon =3D ToolButton('tool-polygon'=
)<br>+=A0=A0=A0=A0=A0=A0=A0 self.insert(self._tool_polygon, -1)<br>
+=A0=A0=A0=A0=A0=A0=A0 self._tool_polygon.set_tooltip(_('Free form'=
))<br>+=A0=A0=A0=A0=A0=A0=A0 try:<br>+=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 sel=
f._create_simple_palette(self._tool_polygon, self._TOOL_POLYGON)<br>+=A0=A0=
=A0=A0=A0=A0=A0 except:<br>+=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 logging.debug=
('Could not create palette for tool Polygon')<br>
=A0=A0=A0=A0=A0=A0=A0=A0 <br>=A0=A0=A0=A0=A0=A0=A0=A0 self._shape_polygon =
=3D ToolButton('tool-shape-polygon')<br>=A0=A0=A0=A0=A0=A0=A0=A0 se=
lf.insert(self._shape_polygon, -1)<br>@@ -853,6 +817,7 @@ class ShapesToolb=
ar(gtk.Toolbar):<br>=A0=A0=A0=A0=A0=A0=A0=A0 self._shape_arrow.connect('=
;clicked', self.set_tool, self._SHAPE_ARROW)<br>
=A0=A0=A0=A0=A0=A0=A0=A0 self._shape_ellipse.connect('clicked', sel=
f.set_tool, self._SHAPE_ELLIPSE)<br>=A0=A0=A0=A0=A0=A0=A0=A0 #self._shape_f=
reeform.connect('clicked', self.set_tool, self._SHAPE_FREEFORM)<br>=
+=A0=A0=A0=A0=A0=A0=A0 self._tool_polygon.connect('clicked', self.s=
et_tool, self._TOOL_POLYGON)<br>
=A0=A0=A0=A0=A0=A0=A0=A0 self._shape_heart.connect('clicked', self.=
set_tool, self._SHAPE_HEART)<br>=A0=A0=A0=A0=A0=A0=A0=A0 self._shape_line.c=
onnect('clicked', self.set_tool, self._SHAPE_LINE)<br>=A0=A0=A0=A0=
=A0=A0=A0=A0 self._shape_parallelogram.connect('clicked', self.set_=
tool, self._SHAPE_PARALLELOGRAM)<br>
@@ -934,6 +899,13 @@ class ShapesToolbar(gtk.Toolbar):<br>=A0=A0=A0=A0=A0=
=A0=A0=A0 <br>=A0=A0=A0=A0=A0=A0=A0=A0 spin.connect('value-changed'=
, self._on_vertices_value_changed, self._SHAPE_POLYGON)<br>=A0=A0=A0=A0=A0=
=A0=A0=A0 <br>+=A0=A0=A0 def _on_fill_checkbutton_toggled(self, checkbutton=
, button=3DNone, tool=3DNone):<br>
+=A0=A0=A0=A0=A0=A0=A0 logging.debug('Checkbutton is Active: %s', c=
heckbutton.get_active() )<br>+=A0=A0=A0=A0=A0=A0=A0 <br>+=A0=A0=A0=A0=A0=A0=
=A0 # New method for setting tools<br>+=A0=A0=A0=A0=A0=A0=A0 #self._activit=
y.area.fill =3D checkbutton.get_active()<br>+=A0=A0=A0=A0=A0=A0=A0 tool[=
9;fill'] =3D checkbutton.get_active()<br>
+=A0=A0=A0=A0=A0=A0=A0 self.set_tool(tool=3Dtool)<br>=A0=A0=A0=A0=A0=A0=A0=
=A0 <br>=A0=A0=A0=A0 def _configure_palette_shape_heart(self):<br>=A0=A0=A0=
=A0=A0=A0=A0=A0 logging.debug('Creating palette to shape heart')<br=
>@@ -980,6 +952,9 @@ class ShapesToolbar(gtk.Toolbar):<br>
=A0=A0=A0=A0=A0=A0=A0=A0 palette.content_box.pack_start(hbox)<br>=A0=A0=A0=
=A0=A0=A0=A0=A0 <br>=A0=A0=A0=A0=A0=A0=A0=A0 spin.connect('value-change=
d', self._on_vertices_value_changed, self._SHAPE_STAR)<br>+<br>+=A0=A0=
=A0=A0=A0=A0=A0=A0=A0=A0=A0 <br>+<br>=A0=A0=A0=A0 <br>=A0=A0=A0=A0 def _con=
figure_palette_shape_trapezoid(self):<br>
=A0=A0=A0=A0=A0=A0=A0=A0 logging.debug('Creating palette to shape trape=
zoid')<br>@@ -1039,6 +1014,18 @@ class ShapesToolbar(gtk.Toolbar):<br>=
=A0=A0=A0=A0=A0=A0=A0=A0 palette.content_box.pack_start(hbox)<br>=A0=A0=A0=
=A0=A0=A0=A0=A0 <br>=A0=A0=A0=A0=A0=A0=A0=A0 size_spinbutton.connect('v=
alue-changed', self._on_line_size_value_changed, tool)<br>
+<br>+=A0=A0=A0=A0=A0=A0=A0 # User is able to fill or not a polygon, and ch=
oose its fill color<br>+=A0=A0=A0=A0=A0=A0=A0 if tool['name'] is se=
lf._TOOL_POLYGON['name']:<br>+=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 # C=
reating a CheckButton named "Fill".<br>
+=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 fill_checkbutton =3D gtk.CheckButton(_(&=
#39;Fill'))<br>+=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 fill_checkbutton.show=
()<br>+=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 fill_checkbutton.set_active(self._=
TOOL_POLYGON['fill'])<br>+=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 <br>+=
=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 fill_checkbutton.connect('toggled'=
;, self._on_fill_checkbutton_toggled, widget, self._TOOL_POLYGON)<br>
+=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 <br>+=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 #=
palette.set_content(fill_checkbutton)<br>+=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=
palette.action_bar.pack_start(fill_checkbutton)<br>=A0=A0=A0=A0 <br>=A0=A0=
=A0=A0 <br>=A0=A0=A0=A0 def _configure_palette_shape_line(self):<br>-- <br>=
1.6.6.1<br>
<br><br>-- <br>Gonzalo Odiard<br>SugarLabs Argentina<br>
--000e0cdf19b499cc6104873a7c7f--
--000e0cdf19b499cc6e04873a7c81
Content-Type: application/octet-stream;
name="0001-move-free-form-tool.patch"
Content-Disposition: attachment; filename="0001-move-free-form-tool.patch"
Content-Transfer-Encoding: base64
X-Attachment-Id: f_g9jb0v110
RnJvbSAwZjk5YmQwYjVkNmQwM2RmZTY2NzNkOTQ0NzY0YTkzNDY0MjdkZWUxIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBHb256YWxvIE9kaWFyZCA8Z29kaWFyZEBnbWFpbC5jb20+CkRh
dGU6IFNhdCwgMjIgTWF5IDIwMTAgMTA6MTY6NTIgLTAzMDAKU3ViamVjdDogW1BBVENIXSBtb3Zl
IGZyZWUgZm9ybSB0b29sCgotLS0KIHRvb2xib3gucHkgfCAgIDk3ICsrKysrKysrKysrKysrKysr
KysrKysrKysrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogMSBmaWxlcyBjaGFu
Z2VkLCA0MiBpbnNlcnRpb25zKCspLCA1NSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS90b29s
Ym94LnB5IGIvdG9vbGJveC5weQppbmRleCA2YTAxYTcyLi5jM2JjYzAxIDEwMDY0NAotLS0gYS90
b29sYm94LnB5CisrKyBiL3Rvb2xib3gucHkKQEAgLTIxNiwxNSArMjE2LDYgQEAgY2xhc3MgVG9v
bHNUb29sYmFyKGd0ay5Ub29sYmFyKToKICAgICAgICAgJ3ZlcnRpY2VzJyAgICAgIDogTm9uZQog
ICAgIH0KICAgICAKLSAgICBfVE9PTF9QT0xZR09OID0gewotICAgICAgICAnbmFtZScgICAgICAg
ICAgOiAncG9seWdvbicsCi0gICAgICAgICdsaW5lIHNpemUnICAgICA6IDIsCi0gICAgICAgICdm
aWxsIGNvbG9yJyAgICA6IE5vbmUsCi0gICAgICAgICdzdHJva2UgY29sb3InICA6IE5vbmUsCi0g
ICAgICAgICdsaW5lIHNoYXBlJyAgICA6ICdjaXJjbGUnLAotICAgICAgICAnZmlsbCcgICAgICAg
ICAgOiBUcnVlLAotICAgICAgICAndmVydGljZXMnICAgICAgOiBOb25lCi0gICAgfQogICAgIAog
ICAgIF9UT09MX0JVQ0tFVCA9IHsKICAgICAgICAgJ25hbWUnICAgICAgICAgIDogJ2J1Y2tldCcs
CkBAIC0zMTksMTMgKzMxMCw2IEBAIGNsYXNzIFRvb2xzVG9vbGJhcihndGsuVG9vbGJhcik6CiAg
ICAgICAgIGV4Y2VwdDoKICAgICAgICAgICAgIGxvZ2dpbmcuZGVidWcoJ0NvdWxkIG5vdCBjcmVh
dGUgcGFsZXR0ZSBmb3IgdG9vbCBFcmFzZXInKQogICAgICAgICAKLSAgICAgICAgc2VsZi5fdG9v
bF9wb2x5Z29uID0gVG9vbEJ1dHRvbigndG9vbC1wb2x5Z29uJykKLSAgICAgICAgc2VsZi5pbnNl
cnQoc2VsZi5fdG9vbF9wb2x5Z29uLCAtMSkKLSAgICAgICAgc2VsZi5fdG9vbF9wb2x5Z29uLnNl
dF90b29sdGlwKF8oJ1BvbHlnb24nKSkKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgc2VsZi5f
Y29uZmlndXJlX3BhbGV0dGUoc2VsZi5fdG9vbF9wb2x5Z29uLCBzZWxmLl9UT09MX1BPTFlHT04p
Ci0gICAgICAgIGV4Y2VwdDoKLSAgICAgICAgICAgIGxvZ2dpbmcuZGVidWcoJ0NvdWxkIG5vdCBj
cmVhdGUgcGFsZXR0ZSBmb3IgdG9vbCBQb2x5Z29uJykKICAgICAgICAgCiAgICAgICAgIHNlbGYu
X3Rvb2xfYnVja2V0ID0gVG9vbEJ1dHRvbigndG9vbC1idWNrZXQnKQogICAgICAgICBzZWxmLmlu
c2VydChzZWxmLl90b29sX2J1Y2tldCwgLTEpCkBAIC0zNjUsNyArMzQ5LDYgQEAgY2xhc3MgVG9v
bHNUb29sYmFyKGd0ay5Ub29sYmFyKToKICAgICAgICAgICAgICAgICAKICAgICAgICAgIyBOZXcg
Y29ubmVjdCBtZXRob2QKICAgICAgICAgIyBVc2luZyBkaWN0aW9ubmFyaWVzIHRvIGNvbnRyb2wg
dG9vbCdzIHByb3BlcnRpZXMKLSAgICAgICAgc2VsZi5fdG9vbF9wb2x5Z29uLmNvbm5lY3QoJ2Ns
aWNrZWQnLCBzZWxmLnNldF90b29sLCBzZWxmLl9UT09MX1BPTFlHT04pCiAgICAgICAgIHNlbGYu
X3Rvb2xfcGVuY2lsLmNvbm5lY3QoJ2NsaWNrZWQnLCBzZWxmLnNldF90b29sLCBzZWxmLl9UT09M
X1BFTkNJTCkKICAgICAgICAgc2VsZi5fdG9vbF9icnVzaC5jb25uZWN0KCdjbGlja2VkJywgc2Vs
Zi5zZXRfdG9vbCwgc2VsZi5fVE9PTF9CUlVTSCkKICAgICAgICAgc2VsZi5fdG9vbF9lcmFzZXIu
Y29ubmVjdCgnY2xpY2tlZCcsIHNlbGYuc2V0X3Rvb2wsIHNlbGYuX1RPT0xfRVJBU0VSKQpAQCAt
Mzk3LDcgKzM4MCw2IEBAIGNsYXNzIFRvb2xzVG9vbGJhcihndGsuVG9vbGJhcik6CiAgICAgICAg
ICAgICAKICAgICAgICAgIyBXZSBjYW4gc2V0IHNpemUgd2hlbiB1c2luZyBlaXRoZXIgUGVuY2ls
LCBGcmVlIFBvbHlnb24sIEJydXNoIG9yIEVyYXNlcgogICAgICAgICBpZiB0b29sWyduYW1lJ10g
aXMgc2VsZi5fVE9PTF9QRU5DSUxbJ25hbWUnXSBvciBcCi0gICAgICAgICAgICAgdG9vbFsnbmFt
ZSddIGlzIHNlbGYuX1RPT0xfUE9MWUdPTlsnbmFtZSddIG9yIFwKICAgICAgICAgICAgICB0b29s
WyduYW1lJ10gaXMgc2VsZi5fVE9PTF9CUlVTSFsnbmFtZSddIG9yIFwKICAgICAgICAgICAgICB0
b29sWyduYW1lJ10gaXMgc2VsZi5fVE9PTF9FUkFTRVJbJ25hbWUnXToKICAgICAgICAgICAgIApA
QCAtNDY4LDM2ICs0NTAsNiBAQCBjbGFzcyBUb29sc1Rvb2xiYXIoZ3RrLlRvb2xiYXIpOgogICAg
ICAgICAgICAgI3Zib3gucGFja19lbmQoc2VwYXJhdG9yKQogICAgICAgICAgICAgI3NlcGFyYXRv
ci5zaG93KCkKIAotICAgICAgICAjIFVzZXIgaXMgYWJsZSB0byBmaWxsIG9yIG5vdCBhIHBvbHln
b24sIGFuZCBjaG9vc2UgaXRzIGZpbGwgY29sb3IKLSAgICAgICAgaWYgdG9vbFsnbmFtZSddIGlz
IHNlbGYuX1RPT0xfUE9MWUdPTlsnbmFtZSddOgotICAgICAgICAgICAgIyBDcmVhdGluZyBhIENo
ZWNrQnV0dG9uIG5hbWVkICJGaWxsIi4KLSAgICAgICAgICAgIGZpbGxfY2hlY2tidXR0b24gPSBn
dGsuQ2hlY2tCdXR0b24oXygnRmlsbCcpKQotICAgICAgICAgICAgZmlsbF9jaGVja2J1dHRvbi5z
aG93KCkKLSAgICAgICAgICAgIGZpbGxfY2hlY2tidXR0b24uc2V0X2FjdGl2ZShzZWxmLl9UT09M
X1BPTFlHT05bJ2ZpbGwnXSkKLSAgICAgICAgICAgIAotICAgICAgICAgICAgZmlsbF9jaGVja2J1
dHRvbi5jb25uZWN0KCd0b2dnbGVkJywgc2VsZi5fb25fZmlsbF9jaGVja2J1dHRvbl90b2dnbGVk
LCB3aWRnZXQsIHNlbGYuX1RPT0xfUE9MWUdPTikKLSAgICAgICAgICAgIAotICAgICAgICAgICAg
I3BhbGV0dGUuc2V0X2NvbnRlbnQoZmlsbF9jaGVja2J1dHRvbikKLSAgICAgICAgICAgIHBhbGV0
dGUuYWN0aW9uX2Jhci5wYWNrX3N0YXJ0KGZpbGxfY2hlY2tidXR0b24pCi0gICAgICAgICAgICAK
LSAgICAgICAgICAgICMgQ3JlYXRpbmcgRmlsbCBDb2xvciBCdXR0b24KLSAgICAgICAgICAgIGhi
b3ggPSBndGsuSEJveCgpCi0gICAgICAgICAgICBoYm94LnNob3coKQotICAgICAgICAgICAgCi0g
ICAgICAgICAgICBsYWJlbCA9IGd0ay5MYWJlbChfKCdGaWxsIENvbG9yOiAnKSkKLSAgICAgICAg
ICAgIGxhYmVsLnNob3coKQotICAgICAgICAgICAgCi0gICAgICAgICAgICBjb2xvcmJ1dHRvbiA9
IEJ1dHRvbkZpbGxDb2xvcihzZWxmLl9hY3Rpdml0eSkKLSAgICAgICAgICAgIGNvbG9yYnV0dG9u
LnNob3dfYWxsKCkKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaGJveC5wYWNrX3N0YXJ0KGxh
YmVsKQotICAgICAgICAgICAgaGJveC5wYWNrX3N0YXJ0KGNvbG9yYnV0dG9uKQotICAgICAgICAg
ICAgCi0gICAgICAgICAgICAjcGFsZXR0ZS5hY3Rpb25fYmFyLnBhY2tfc3RhcnQobGFiZWwpCi0g
ICAgICAgICAgICAjcGFsZXR0ZS5hY3Rpb25fYmFyLnBhY2tfc3RhcnQoY29sb3JidXR0b24pCi0g
ICAgICAgICAgICBjb250ZW50X2JveC5wYWNrX3N0YXJ0KGhib3gpCi0gICAgICAgICAgICAKLSAg
ICAgICAgICAgIGNvbG9yYnV0dG9uLmNvbm5lY3RfYWZ0ZXIoJ2NvbG9yLXNldCcsIHNlbGYuX29u
X2NvbG9yX3NldCwgc2VsZi5fVE9PTF9QT0xZR09OKQogICAgICAgICBpZiB0b29sWyduYW1lJ10g
aXMgc2VsZi5fVE9PTF9NQVJRVUVFX1JFQ1RBTkdVTEFSWyduYW1lJ106CiAgICAgICAgICAgICAj
IENyZWF0aW5nIGEgQ2hlY2tCdXR0b24gbmFtZWQgIkZpbGwiLgogICAgICAgICAgICAga2VlcF9h
c3BlY3RfY2hlY2tidXR0b24gPSBndGsuQ2hlY2tCdXR0b24oXygnS2VlcCBhc3BlY3QnKSkKQEAg
LTU0NSwxMyArNDk3LDYgQEAgY2xhc3MgVG9vbHNUb29sYmFyKGd0ay5Ub29sYmFyKToKICAgICAg
ICAgI3NldHRpbmcgY3Vyc29yOiBNb3ZlZCB0byBBcmVhCiAgICAgICAgIAogICAgICAgICAKLSAg
ICBkZWYgX29uX2ZpbGxfY2hlY2tidXR0b25fdG9nZ2xlZChzZWxmLCBjaGVja2J1dHRvbiwgYnV0
dG9uPU5vbmUsIHRvb2w9Tm9uZSk6Ci0gICAgICAgIGxvZ2dpbmcuZGVidWcoJ0NoZWNrYnV0dG9u
IGlzIEFjdGl2ZTogJXMnLCBjaGVja2J1dHRvbi5nZXRfYWN0aXZlKCkgKQotICAgICAgICAKLSAg
ICAgICAgIyBOZXcgbWV0aG9kIGZvciBzZXR0aW5nIHRvb2xzCi0gICAgICAgICNzZWxmLl9hY3Rp
dml0eS5hcmVhLmZpbGwgPSBjaGVja2J1dHRvbi5nZXRfYWN0aXZlKCkKLSAgICAgICAgdG9vbFsn
ZmlsbCddID0gY2hlY2tidXR0b24uZ2V0X2FjdGl2ZSgpCi0gICAgICAgIHNlbGYuc2V0X3Rvb2wo
dG9vbD10b29sKQogICAgICAgICAKICMgICAgIGRlZiBfb25fZmlsbF9jaGVja2J1dHRvbl9tYXAo
c2VsZiwgY2hlY2tidXR0b24sIGRhdGE9Tm9uZSk6CiAjICAgICAgICAgIiIiCkBAIC03MzQsNiAr
Njc5LDE3IEBAIGNsYXNzIFNoYXBlc1Rvb2xiYXIoZ3RrLlRvb2xiYXIpOgogICAgICAgICAnZmls
bCcgICAgICAgICAgOiBUcnVlLAogICAgICAgICAndmVydGljZXMnICAgICAgOiBOb25lCiAgICAg
fQorCisgICAgX1RPT0xfUE9MWUdPTiA9IHsKKyAgICAgICAgJ25hbWUnICAgICAgICAgIDogJ3Bv
bHlnb24nLAorICAgICAgICAnbGluZSBzaXplJyAgICAgOiAyLAorICAgICAgICAnZmlsbCBjb2xv
cicgICAgOiBOb25lLAorICAgICAgICAnc3Ryb2tlIGNvbG9yJyAgOiBOb25lLAorICAgICAgICAn
bGluZSBzaGFwZScgICAgOiAnY2lyY2xlJywKKyAgICAgICAgJ2ZpbGwnICAgICAgICAgIDogVHJ1
ZSwKKyAgICAgICAgJ3ZlcnRpY2VzJyAgICAgIDogTm9uZQorICAgIH0KKwogICAgIAogICAgICMj
VGhlIENvbnN0cnVjdG9yCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGFjdGl2aXR5KToKQEAgLTc4
Miw2ICs3MzgsMTQgQEAgY2xhc3MgU2hhcGVzVG9vbGJhcihndGsuVG9vbGJhcik6CiAgICAgICAg
ICAgICBzZWxmLl9jb25maWd1cmVfcGFsZXR0ZV9zaGFwZV9saW5lKCkKICAgICAgICAgZXhjZXB0
OgogICAgICAgICAgICAgbG9nZ2luZy5kZWJ1ZygnQ291bGQgbm90IGNyZWF0ZSBwYWxldHRlIGZv
ciBTaGFwZSBMaW5lJykKKworICAgICAgICBzZWxmLl90b29sX3BvbHlnb24gPSBUb29sQnV0dG9u
KCd0b29sLXBvbHlnb24nKQorICAgICAgICBzZWxmLmluc2VydChzZWxmLl90b29sX3BvbHlnb24s
IC0xKQorICAgICAgICBzZWxmLl90b29sX3BvbHlnb24uc2V0X3Rvb2x0aXAoXygnRnJlZSBmb3Jt
JykpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuX2NyZWF0ZV9zaW1wbGVfcGFsZXR0
ZShzZWxmLl90b29sX3BvbHlnb24sIHNlbGYuX1RPT0xfUE9MWUdPTikKKyAgICAgICAgZXhjZXB0
OgorICAgICAgICAgICAgbG9nZ2luZy5kZWJ1ZygnQ291bGQgbm90IGNyZWF0ZSBwYWxldHRlIGZv
ciB0b29sIFBvbHlnb24nKQogICAgICAgICAKICAgICAgICAgc2VsZi5fc2hhcGVfcG9seWdvbiA9
IFRvb2xCdXR0b24oJ3Rvb2wtc2hhcGUtcG9seWdvbicpCiAgICAgICAgIHNlbGYuaW5zZXJ0KHNl
bGYuX3NoYXBlX3BvbHlnb24sIC0xKQpAQCAtODUzLDYgKzgxNyw3IEBAIGNsYXNzIFNoYXBlc1Rv
b2xiYXIoZ3RrLlRvb2xiYXIpOgogICAgICAgICBzZWxmLl9zaGFwZV9hcnJvdy5jb25uZWN0KCdj
bGlja2VkJywgc2VsZi5zZXRfdG9vbCwgc2VsZi5fU0hBUEVfQVJST1cpCiAgICAgICAgIHNlbGYu
X3NoYXBlX2VsbGlwc2UuY29ubmVjdCgnY2xpY2tlZCcsIHNlbGYuc2V0X3Rvb2wsIHNlbGYuX1NI
QVBFX0VMTElQU0UpCiAgICAgICAgICNzZWxmLl9zaGFwZV9mcmVlZm9ybS5jb25uZWN0KCdjbGlj
a2VkJywgc2VsZi5zZXRfdG9vbCwgc2VsZi5fU0hBUEVfRlJFRUZPUk0pCisgICAgICAgIHNlbGYu
X3Rvb2xfcG9seWdvbi5jb25uZWN0KCdjbGlja2VkJywgc2VsZi5zZXRfdG9vbCwgc2VsZi5fVE9P
TF9QT0xZR09OKQogICAgICAgICBzZWxmLl9zaGFwZV9oZWFydC5jb25uZWN0KCdjbGlja2VkJywg
c2VsZi5zZXRfdG9vbCwgc2VsZi5fU0hBUEVfSEVBUlQpCiAgICAgICAgIHNlbGYuX3NoYXBlX2xp
bmUuY29ubmVjdCgnY2xpY2tlZCcsIHNlbGYuc2V0X3Rvb2wsIHNlbGYuX1NIQVBFX0xJTkUpCiAg
ICAgICAgIHNlbGYuX3NoYXBlX3BhcmFsbGVsb2dyYW0uY29ubmVjdCgnY2xpY2tlZCcsIHNlbGYu
c2V0X3Rvb2wsIHNlbGYuX1NIQVBFX1BBUkFMTEVMT0dSQU0pCkBAIC05MzQsNiArODk5LDEzIEBA
IGNsYXNzIFNoYXBlc1Rvb2xiYXIoZ3RrLlRvb2xiYXIpOgogICAgICAgICAKICAgICAgICAgc3Bp
bi5jb25uZWN0KCd2YWx1ZS1jaGFuZ2VkJywgc2VsZi5fb25fdmVydGljZXNfdmFsdWVfY2hhbmdl
ZCwgc2VsZi5fU0hBUEVfUE9MWUdPTikKICAgICAgICAgCisgICAgZGVmIF9vbl9maWxsX2NoZWNr
YnV0dG9uX3RvZ2dsZWQoc2VsZiwgY2hlY2tidXR0b24sIGJ1dHRvbj1Ob25lLCB0b29sPU5vbmUp
OgorICAgICAgICBsb2dnaW5nLmRlYnVnKCdDaGVja2J1dHRvbiBpcyBBY3RpdmU6ICVzJywgY2hl
Y2tidXR0b24uZ2V0X2FjdGl2ZSgpICkKKyAgICAgICAgCisgICAgICAgICMgTmV3IG1ldGhvZCBm
b3Igc2V0dGluZyB0b29scworICAgICAgICAjc2VsZi5fYWN0aXZpdHkuYXJlYS5maWxsID0gY2hl
Y2tidXR0b24uZ2V0X2FjdGl2ZSgpCisgICAgICAgIHRvb2xbJ2ZpbGwnXSA9IGNoZWNrYnV0dG9u
LmdldF9hY3RpdmUoKQorICAgICAgICBzZWxmLnNldF90b29sKHRvb2w9dG9vbCkKICAgICAgICAg
CiAgICAgZGVmIF9jb25maWd1cmVfcGFsZXR0ZV9zaGFwZV9oZWFydChzZWxmKToKICAgICAgICAg
bG9nZ2luZy5kZWJ1ZygnQ3JlYXRpbmcgcGFsZXR0ZSB0byBzaGFwZSBoZWFydCcpCkBAIC05ODAs
NiArOTUyLDkgQEAgY2xhc3MgU2hhcGVzVG9vbGJhcihndGsuVG9vbGJhcik6CiAgICAgICAgIHBh
bGV0dGUuY29udGVudF9ib3gucGFja19zdGFydChoYm94KQogICAgICAgICAKICAgICAgICAgc3Bp
bi5jb25uZWN0KCd2YWx1ZS1jaGFuZ2VkJywgc2VsZi5fb25fdmVydGljZXNfdmFsdWVfY2hhbmdl
ZCwgc2VsZi5fU0hBUEVfU1RBUikKKworICAgICAgICAgICAgCisKICAgICAKICAgICBkZWYgX2Nv
bmZpZ3VyZV9wYWxldHRlX3NoYXBlX3RyYXBlem9pZChzZWxmKToKICAgICAgICAgbG9nZ2luZy5k
ZWJ1ZygnQ3JlYXRpbmcgcGFsZXR0ZSB0byBzaGFwZSB0cmFwZXpvaWQnKQpAQCAtMTAzOSw2ICsx
MDE0LDE4IEBAIGNsYXNzIFNoYXBlc1Rvb2xiYXIoZ3RrLlRvb2xiYXIpOgogICAgICAgICBwYWxl
dHRlLmNvbnRlbnRfYm94LnBhY2tfc3RhcnQoaGJveCkKICAgICAgICAgCiAgICAgICAgIHNpemVf
c3BpbmJ1dHRvbi5jb25uZWN0KCd2YWx1ZS1jaGFuZ2VkJywgc2VsZi5fb25fbGluZV9zaXplX3Zh
bHVlX2NoYW5nZWQsIHRvb2wpCisKKyAgICAgICAgIyBVc2VyIGlzIGFibGUgdG8gZmlsbCBvciBu
b3QgYSBwb2x5Z29uLCBhbmQgY2hvb3NlIGl0cyBmaWxsIGNvbG9yCisgICAgICAgIGlmIHRvb2xb
J25hbWUnXSBpcyBzZWxmLl9UT09MX1BPTFlHT05bJ25hbWUnXToKKyAgICAgICAgICAgICMgQ3Jl
YXRpbmcgYSBDaGVja0J1dHRvbiBuYW1lZCAiRmlsbCIuCisgICAgICAgICAgICBmaWxsX2NoZWNr
YnV0dG9uID0gZ3RrLkNoZWNrQnV0dG9uKF8oJ0ZpbGwnKSkKKyAgICAgICAgICAgIGZpbGxfY2hl
Y2tidXR0b24uc2hvdygpCisgICAgICAgICAgICBmaWxsX2NoZWNrYnV0dG9uLnNldF9hY3RpdmUo
c2VsZi5fVE9PTF9QT0xZR09OWydmaWxsJ10pCisgICAgICAgICAgICAKKyAgICAgICAgICAgIGZp
bGxfY2hlY2tidXR0b24uY29ubmVjdCgndG9nZ2xlZCcsIHNlbGYuX29uX2ZpbGxfY2hlY2tidXR0
b25fdG9nZ2xlZCwgd2lkZ2V0LCBzZWxmLl9UT09MX1BPTFlHT04pCisgICAgICAgICAgICAKKyAg
ICAgICAgICAgICNwYWxldHRlLnNldF9jb250ZW50KGZpbGxfY2hlY2tidXR0b24pCisgICAgICAg
ICAgICBwYWxldHRlLmFjdGlvbl9iYXIucGFja19zdGFydChmaWxsX2NoZWNrYnV0dG9uKQogICAg
IAogICAgIAogICAgIGRlZiBfY29uZmlndXJlX3BhbGV0dGVfc2hhcGVfbGluZShzZWxmKToKLS0g
CjEuNi42LjEKCg==
--000e0cdf19b499cc6e04873a7c81--
More information about the Sugar-devel
mailing list