diff options
author | Agustin Zubiaga <aguz@sugarlabs.org> | 2012-05-11 00:12:44 (GMT) |
---|---|---|
committer | Agustin Zubiaga <aguz@sugarlabs.org> | 2012-05-11 00:12:44 (GMT) |
commit | 10fc8205b59cd329fca866df3bc7051b46af8aa6 (patch) | |
tree | 56d46710d9e9e52669f2379efb8a872429718e5c | |
parent | 316a6b9ec81ad032d0b89ce5e679e60ac61d46db (diff) |
Illustrate RadioToolButtons
-rw-r--r-- | icons/box.svg | 22 | ||||
-rw-r--r-- | icons/spiral.svg | 22 | ||||
-rw-r--r-- | illustrate.py | 55 |
3 files changed, 92 insertions, 7 deletions
diff --git a/icons/box.svg b/icons/box.svg new file mode 100644 index 0000000..67ed33d --- /dev/null +++ b/icons/box.svg @@ -0,0 +1,22 @@ +<?xml version="1.0" ?><!-- Created with Inkscape (http://www.inkscape.org/) --><!DOCTYPE svg PUBLIC '-//W3C//DTD SVG 1.1//EN' 'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd' [ + <!ENTITY stroke_color "#000000"> + <!ENTITY fill_color "#ffffff"> +]><svg height="72.824974" id="svg2" inkscape:version="0.48.3.1 r9886" sodipodi:docname="box.svg" version="1.1" width="73.833656" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:svg="http://www.w3.org/2000/svg"> + <sodipodi:namedview bordercolor="#666666" borderopacity="1" fit-margin-bottom="10" fit-margin-left="10" fit-margin-right="10" fit-margin-top="10" gridtolerance="10" guidetolerance="10" id="namedview12" inkscape:current-layer="layer1" inkscape:cx="-72.794772" inkscape:cy="24.18596" inkscape:guide-bbox="true" inkscape:pageopacity="0" inkscape:pageshadow="2" inkscape:window-height="744" inkscape:window-maximized="1" inkscape:window-width="1280" inkscape:window-x="0" inkscape:window-y="27" inkscape:zoom="1.845" objecttolerance="10" pagecolor="#ffffff" showgrid="false" showguides="true"/> + <defs id="defs4"/> + <metadata id="metadata7"> + <rdf:RDF> + <cc:Work rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/> + <dc:title/> + </cc:Work> + </rdf:RDF> + </metadata> + <g id="layer1" transform="translate(8.1694087,-987.72323)"> + <rect height="46.813049" id="rect3899" style="fill:&fill_color;;fill-opacity:1;fill-rule:nonzero;stroke:&stroke_color;;stroke-width:3.53141212;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" width="48.981071" x="4.4674277" y="1002.1823"/> + <text id="text3757" sodipodi:linespacing="125%" style="font-size:17.98463058px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:&stroke_color;;fill-opacity:1;stroke:none;font-family:Sans" transform="scale(1.2412668,0.80562858)" x="16.853321" xml:space="preserve" y="1281.0049"><tspan id="tspan3759" x="16.853321" y="1281.0049">X</tspan></text> + <path d="m 32.391512,1018.083 a 3.1460921,2.7086404 0 0 1 -6.292184,0 3.1460921,2.7086404 0 1 1 6.292184,0 z" id="path3761" inkscape:connector-curvature="0" style="fill:&fill_color;;fill-opacity:1;stroke:&stroke_color;;stroke-width:1.16328168;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"/> + <path d="m 30.939468,1033.7547 a 2.1780636,1.7412689 0 0 1 -4.356127,0 2.1780636,1.7412689 0 1 1 4.356127,0 z" id="path3763" inkscape:connector-curvature="0" style="fill:&stroke_color;;fill-opacity:1;stroke:&stroke_color;;stroke-width:1.16328168;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"/> + </g> +</svg>
\ No newline at end of file diff --git a/icons/spiral.svg b/icons/spiral.svg new file mode 100644 index 0000000..2842224 --- /dev/null +++ b/icons/spiral.svg @@ -0,0 +1,22 @@ +<?xml version="1.0" ?><!-- Created with Inkscape (http://www.inkscape.org/) --><!DOCTYPE svg PUBLIC '-//W3C//DTD SVG 1.1//EN' 'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd' [ + <!ENTITY stroke_color "#000000"> + <!ENTITY fill_color "#ffffff"> +]><svg height="72.824974" id="svg2" inkscape:version="0.48.3.1 r9886" sodipodi:docname="spiral.svg" version="1.1" width="73.833656" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:svg="http://www.w3.org/2000/svg"> + <sodipodi:namedview bordercolor="#666666" borderopacity="1" fit-margin-bottom="10" fit-margin-left="10" fit-margin-right="10" fit-margin-top="10" gridtolerance="10" guidetolerance="10" id="namedview12" inkscape:current-layer="layer1" inkscape:cx="-72.794772" inkscape:cy="24.18596" inkscape:guide-bbox="true" inkscape:pageopacity="0" inkscape:pageshadow="2" inkscape:window-height="744" inkscape:window-maximized="1" inkscape:window-width="1280" inkscape:window-x="0" inkscape:window-y="27" inkscape:zoom="1.845" objecttolerance="10" pagecolor="#ffffff" showgrid="false" showguides="true"/> + <defs id="defs4"/> + <metadata id="metadata7"> + <rdf:RDF> + <cc:Work rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/> + <dc:title/> + </cc:Work> + </rdf:RDF> + </metadata> + <g id="layer1" transform="translate(8.1694087,-987.72323)"> + <path d="M 24.534205,51.569603 C 12.91902,55.741674 1.4946936,45.902233 -0.42964879,34.737822 -2.9407161,20.169424 8.5068654,6.9309342 22.743282,5.1782252 39.384087,3.1295011 54.236505,16.18911 55.880087,32.564005 57.719475,50.889704 43.295393,67.115892 25.195347,68.695565 5.4248311,70.421027 -12.00224,54.8165 -13.543759,35.244088 c -0.490744,-6.230895 0.610099,-12.551851 3.15004,-18.260886" id="path3084" sodipodi:argument="-18.455858" sodipodi:cx="23.848238" sodipodi:cy="33.800583" sodipodi:expansion="0.36000001" sodipodi:radius="38.148865" sodipodi:revolution="1.51" sodipodi:t0="0.12" sodipodi:type="spiral" style="fill:&fill_color;;stroke:&stroke_color;;stroke-width:5.05320501000000011;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;fill-opacity:1" transform="matrix(-0.77128007,0,0,-0.80267388,45.790813,1055.2956)"/> + <text id="text3757" sodipodi:linespacing="125%" style="font-size:17.98463058px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:&stroke_color;;fill-opacity:1;stroke:none;font-family:Sans" transform="scale(1.2412668,0.80562858)" x="13.796735" xml:space="preserve" y="1285.0415"><tspan id="tspan3759" x="13.796735" y="1285.0415">X</tspan></text> + <path d="m 28.597474,1021.335 a 3.1460921,2.7086404 0 0 1 -6.292184,0 3.1460921,2.7086404 0 1 1 6.292184,0 z" id="path3761" inkscape:connector-curvature="0" style="fill:&fill_color;;fill-opacity:1;stroke:&stroke_color;;stroke-width:1.16328168;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"/> + <path d="m 27.14543,1037.0067 a 2.1780636,1.7412689 0 0 1 -4.356127,0 2.1780636,1.7412689 0 1 1 4.356127,0 z" id="path3763" inkscape:connector-curvature="0" style="fill:&stroke_color;;fill-opacity:1;stroke:&stroke_color;;stroke-width:1.16328168;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"/> + </g> +</svg>
\ No newline at end of file diff --git a/illustrate.py b/illustrate.py index ceee39e..0a33540 100644 --- a/illustrate.py +++ b/illustrate.py @@ -34,6 +34,7 @@ from sugar.graphics.icon import Icon from sugar.graphics.colorbutton import ColorToolButton from sugar.graphics.toolbarbox import ToolbarBox from sugar.graphics.toolbutton import ToolButton +from sugar.graphics.radiotoolbutton import RadioToolButton from sugar.graphics.objectchooser import ObjectChooser from sugar.graphics.alert import Alert, NotifyAlert @@ -99,6 +100,35 @@ class IllustrateActivity(activity.Activity): alert_btn.connect("clicked", self._show_alert_btn_pallete) toolbarbox.toolbar.insert(alert_btn, -1) + separator = gtk.SeparatorToolItem() + separator.set_expand(False) + separator.set_draw(True) + toolbarbox.toolbar.insert(separator, -1) + + # RadioToolButton + self._circle_btn = RadioToolButton() + self._circle_btn.props.icon_name = "sugar-integration" + self._circle_btn.connect("clicked", self._set_background) + + self._spiral_btn = RadioToolButton() + self._spiral_btn.props.icon_name = "spiral" + self._spiral_btn.props.group = self._circle_btn + self._spiral_btn.connect("clicked", self._set_background) + + self._box_btn = RadioToolButton() + self._box_btn.props.icon_name = "box" + self._box_btn.props.group = self._circle_btn + self._box_btn.connect("clicked", self._set_background) + + toolbarbox.toolbar.insert(self._circle_btn, -1) + toolbarbox.toolbar.insert(self._spiral_btn, -1) + toolbarbox.toolbar.insert(self._box_btn, -1) + + separator = gtk.SeparatorToolItem() + separator.set_expand(False) + separator.set_draw(True) + toolbarbox.toolbar.insert(separator, -1) + # Preferences toolbar options_button = ToolbarButton(icon_name='preferences-system') options_toolbar = gtk.Toolbar() @@ -155,6 +185,9 @@ class IllustrateActivity(activity.Activity): self._create_canvas(canvas) self._create_alert_btn_palette(alert_btn) + def _set_background(self, widget): + self._icon.props.icon_name = widget.props.icon_name + def _show_alert_btn_pallete(self, widget): widget.props.palette.popup(immediate=True, state=1) @@ -232,8 +265,12 @@ class IllustrateActivity(activity.Activity): # A sugar icon for set stroke and fill color self._icon = Icon(pixel_size=pixel_size) - self._icon.props.icon_name = 'sugar-integration' self._icon.props.pixel_size = pixel_size + + for i in [self._circle_btn, self._spiral_btn, self._box_btn]: + if i.get_active(): + self._icon.props.icon_name = i.props.icon_name + canvas.add(self._icon) self._icon.show() @@ -261,11 +298,12 @@ class IllustrateActivity(activity.Activity): def write_file(self, file_path): jfile = open(file_path, "w") - colors = {"fill": self._icon.props.fill_color, - "stroke": self._icon.props.stroke_color} + icon_props = {"fill": self._icon.props.fill_color, + "stroke": self._icon.props.stroke_color, + "icon-name": self._icon.props.icon_name} try: - json.dump(colors, jfile) + json.dump(icon_props, jfile) finally: jfile.close() @@ -273,9 +311,12 @@ class IllustrateActivity(activity.Activity): jfile = open(file_path, "r") try: - colors = json.load(jfile) + icon_props = json.load(jfile) finally: jfile.close() - self.fill_color_btn.set_color(gtk.gdk.Color(colors["fill"])) - self.stroke_color_btn.set_color(gtk.gdk.Color(colors["stroke"])) + self.fill_color_btn.set_color(gtk.gdk.Color(icon_props["fill"])) + self.stroke_color_btn.set_color(gtk.gdk.Color(icon_props["stroke"])) + for i in [self._circle_btn, self._spiral_btn, self._box_btn]: + if i.props.icon_name == icon_props["icon-name"]: + i.set_active(1) |