diff options
-rw-r--r-- | activity.py | 56 | ||||
-rw-r--r-- | game.py | 10 | ||||
-rw-r--r-- | icons/2-glasses.svg | 94 | ||||
-rw-r--r-- | icons/3-glasses.svg | 94 | ||||
-rw-r--r-- | icons/glasses.svg (renamed from icons/4-glasses.svg) | 29 | ||||
-rw-r--r-- | icons/new-game.svg | 120 |
6 files changed, 166 insertions, 237 deletions
diff --git a/activity.py b/activity.py index c7f9e98..60ea5c0 100644 --- a/activity.py +++ b/activity.py @@ -30,6 +30,7 @@ from sugar3.activity.widgets import ActivityButton from sugar3.activity.widgets import StopButton from sugar3.graphics.toolbarbox import ToolbarBox from sugar3.graphics.toolbutton import ToolButton +from sugar3.graphics.icon import Icon from game import Game @@ -50,22 +51,26 @@ class Guess(activity.Activity): separator = Gtk.SeparatorToolItem() toolbarbox.toolbar.insert(separator, -1) - two_glasses = ToolButton('2-glasses') - toolbarbox.toolbar.insert(two_glasses, -1) - - three_glasses = ToolButton('3-glasses') - toolbarbox.toolbar.insert(three_glasses, -1) - - four_glasses = ToolButton('4-glasses') - toolbarbox.toolbar.insert(four_glasses, -1) + self._new_game = ToolButton('new-game') + self._new_game.set_tooltip(_('Start a new game')) + toolbarbox.toolbar.insert(self._new_game, -1) separator = Gtk.SeparatorToolItem() toolbarbox.toolbar.insert(separator, -1) - self._reload_btn = ToolButton('gtk-refresh') - self._reload_btn.set_sensitive(False) - self._reload_btn.set_tooltip(_('Restart')) - toolbarbox.toolbar.insert(self._reload_btn, -1) + toolitem = Gtk.ToolItem() + glasses_icon = Icon(icon_name='glasses', pixel_size=40) + toolitem.add(glasses_icon) + toolbarbox.toolbar.insert(toolitem, -1) + + spin_toolitem = Gtk.ToolItem() + adjustment = Gtk.Adjustment(2, 2, 7, 1, 1, 1) + self._spinbutton = Gtk.SpinButton.new(adjustment, 2, 0) + self._spinbutton.connect('value-changed', + self._glasses_spinbutton_value_changed, adjustment) + spin_toolitem.add(self._spinbutton) + toolbarbox.toolbar.insert(spin_toolitem, -1) + self._spinbutton.show() separator = Gtk.SeparatorToolItem() separator.set_draw(False) @@ -80,27 +85,26 @@ class Guess(activity.Activity): # Canvas self._eventbox = Gtk.EventBox() self._game = Game() - self._game.connect('won', self._win_or_lose_cb) - self._game.connect('lost', self._win_or_lose_cb) + #self._game.connect('won', self._win_or_lose_cb) + #self._game.connect('lost', self._win_or_lose_cb) self._eventbox.add(self._game) self.set_canvas(self._eventbox) # Callbacks - self._reload_btn.connect('clicked', self._game.reload) - two_glasses.connect('clicked', self._game.reload, 2) - three_glasses.connect('clicked', self._game.reload, 3) - four_glasses.connect('clicked', self._game.reload, 4) + self._new_game.connect('clicked', self._game.reload) self.show_all() self._game.add_glasses(2, random.randrange(1, 3)) - self._game._glasses = 2 - def _win_or_lose_cb(self, widget): - self._reload_btn.set_sensitive(True) + def _glasses_spinbutton_value_changed(self, widget, adjustment): + self._game.reload(None, int(adjustment.get_value())) def read_file(self, file_path): scores_file = open(file_path) - self._scores = simplejson.load(scores_file) + _dict = simplejson.load(scores_file) + self._scores = _dict['scores'] + self._game.reload(None, _dict['glasses']) + self._spinbutton.set_value(_dict['glasses']) scores_file.close() def write_file(self, file_path): @@ -116,6 +120,8 @@ class Guess(activity.Activity): self._scores[date] = score - scores_file = open(file_path, 'w') - simplejson.dump(self._scores, scores_file) - scores_file.close() + _file = open(file_path, 'w') + _dict = {'scores': self._scores, + 'glasses': self._spinbutton.get_value()} + simplejson.dump(_dict, _file) + _file.close() @@ -34,7 +34,8 @@ class Game(Gtk.Fixed): __gsignals__ = { 'won': (GObject.SignalFlags.RUN_FIRST, None, []), - 'lost': (GObject.SignalFlags.RUN_FIRST, None, [])} + 'lost': (GObject.SignalFlags.RUN_FIRST, None, []), + 'number-changed': (GObject.SignalFlags.RUN_FIRST, None, [int])} def __init__(self): super(Game, self).__init__() @@ -68,8 +69,11 @@ class Game(Gtk.Fixed): self.connect('draw', self._draw_event_cb) def reload(self, widget, glasses=None): - if widget.props.icon_name == 'gtk-refresh': - widget.set_sensitive(False) + if widget: + if widget.props.icon_name == 'gtk-refresh': + widget.set_sensitive(False) + self.emit('number-changed', self._glasses) + if glasses: self._glasses = glasses pixbuf = GdkPixbuf.Pixbuf.new_from_file_at_size('icons/neutral.svg', diff --git a/icons/2-glasses.svg b/icons/2-glasses.svg deleted file mode 100644 index 55425c1..0000000 --- a/icons/2-glasses.svg +++ /dev/null @@ -1,94 +0,0 @@ -<?xml version="1.0" encoding="UTF-8" standalone="no"?> -<!-- Created with Inkscape (http://www.inkscape.org/) --> - -<svg - xmlns:dc="http://purl.org/dc/elements/1.1/" - xmlns:cc="http://creativecommons.org/ns#" - xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" - xmlns:svg="http://www.w3.org/2000/svg" - xmlns="http://www.w3.org/2000/svg" - xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" - xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" - width="55" - height="55" - id="svg2" - version="1.1" - inkscape:version="0.48.2 r9819" - sodipodi:docname="2-glasses.svg"> - <defs - id="defs4" /> - <sodipodi:namedview - id="base" - pagecolor="#ffffff" - bordercolor="#666666" - borderopacity="1.0" - inkscape:pageopacity="0.0" - inkscape:pageshadow="2" - inkscape:zoom="5.9900718" - inkscape:cx="-14.67991" - inkscape:cy="21.795019" - inkscape:document-units="px" - inkscape:current-layer="layer1" - showgrid="false" - fit-margin-top="0" - fit-margin-left="0" - fit-margin-right="0" - fit-margin-bottom="0" - inkscape:window-width="1280" - inkscape:window-height="741" - inkscape:window-x="0" - inkscape:window-y="27" - inkscape:window-maximized="1" /> - <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 - inkscape:label="Layer 1" - inkscape:groupmode="layer" - id="layer1" - transform="translate(-25.461093,-978.89671)"> - <text - xml:space="preserve" - style="font-size:32.33923721000000029px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:none;font-family:Sans" - x="53.815216" - y="1084.2871" - id="text3137" - sodipodi:linespacing="125%" - transform="scale(1.0602075,0.94321159)"><tspan - sodipodi:role="line" - id="tspan3139" - x="53.815216" - y="1084.2871" - style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:Khmer OS;-inkscape-font-specification:Khmer OS;fill:#ffffff">2</tspan></text> - <path - style="fill:none;stroke:#ffffff;stroke-width:1.55600000000000005;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" - d="m 35.892073,1016.9062 23.896912,0 -4.636714,-29.47338 -14.980154,0 z" - id="path2985" - inkscape:connector-curvature="0" - sodipodi:nodetypes="ccccc" /> - <path - style="fill:none;stroke:#ffffff;stroke-width:1.55600000000000005;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" - d="m 39.82961,990.48176 16.050165,0 z" - id="path2987" - inkscape:connector-curvature="0" /> - <text - xml:space="preserve" - style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans" - x="38.084335" - y="32.204994" - id="text3133" - sodipodi:linespacing="125%" - transform="translate(25.461093,978.89671)"><tspan - sodipodi:role="line" - id="tspan3135" /></text> - </g> -</svg> diff --git a/icons/3-glasses.svg b/icons/3-glasses.svg deleted file mode 100644 index 0e0da3f..0000000 --- a/icons/3-glasses.svg +++ /dev/null @@ -1,94 +0,0 @@ -<?xml version="1.0" encoding="UTF-8" standalone="no"?> -<!-- Created with Inkscape (http://www.inkscape.org/) --> - -<svg - xmlns:dc="http://purl.org/dc/elements/1.1/" - xmlns:cc="http://creativecommons.org/ns#" - xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" - xmlns:svg="http://www.w3.org/2000/svg" - xmlns="http://www.w3.org/2000/svg" - xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" - xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" - width="55" - height="55" - id="svg2" - version="1.1" - inkscape:version="0.48.2 r9819" - sodipodi:docname="3-glasses.svg"> - <defs - id="defs4" /> - <sodipodi:namedview - id="base" - pagecolor="#ffffff" - bordercolor="#666666" - borderopacity="1.0" - inkscape:pageopacity="0.0" - inkscape:pageshadow="2" - inkscape:zoom="3.9315137" - inkscape:cx="-36.145485" - inkscape:cy="24.093801" - inkscape:document-units="px" - inkscape:current-layer="layer1" - showgrid="false" - fit-margin-top="0" - fit-margin-left="0" - fit-margin-right="0" - fit-margin-bottom="0" - inkscape:window-width="1280" - inkscape:window-height="741" - inkscape:window-x="0" - inkscape:window-y="27" - inkscape:window-maximized="1" /> - <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 - inkscape:label="Layer 1" - inkscape:groupmode="layer" - id="layer1" - transform="translate(-25.461093,-978.89671)"> - <text - xml:space="preserve" - style="font-size:34.93960571px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:none;font-family:Sans" - x="57.952641" - y="1007.7318" - id="text3137" - sodipodi:linespacing="125%" - transform="scale(0.98130188,1.0190544)"><tspan - sodipodi:role="line" - id="tspan3139" - x="57.952641" - y="1007.7318" - style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#ffffff;fill-opacity:1;font-family:Khmer OS;-inkscape-font-specification:Khmer OS">3</tspan></text> - <path - style="fill:none;stroke:#ffffff;stroke-width:1.55600000000000005;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" - d="m 35.892073,1016.9062 23.896912,0 -4.636714,-29.47338 -14.980154,0 z" - id="path2985" - inkscape:connector-curvature="0" - sodipodi:nodetypes="ccccc" /> - <path - style="fill:none;stroke:#ffffff;stroke-width:1.55600000000000005;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" - d="m 39.82961,990.48176 16.050165,0 z" - id="path2987" - inkscape:connector-curvature="0" /> - <text - xml:space="preserve" - style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans" - x="38.084335" - y="32.204994" - id="text3133" - sodipodi:linespacing="125%" - transform="translate(25.461093,978.89671)"><tspan - sodipodi:role="line" - id="tspan3135" /></text> - </g> -</svg> diff --git a/icons/4-glasses.svg b/icons/glasses.svg index 1793193..b92fd05 100644 --- a/icons/4-glasses.svg +++ b/icons/glasses.svg @@ -14,7 +14,7 @@ id="svg2" version="1.1" inkscape:version="0.48.2 r9819" - sodipodi:docname="4-glasses.svg"> + sodipodi:docname="custom-glasses.svg"> <defs id="defs4" /> <sodipodi:namedview @@ -24,9 +24,9 @@ borderopacity="1.0" inkscape:pageopacity="0.0" inkscape:pageshadow="2" - inkscape:zoom="14.754467" - inkscape:cx="3.2692845" - inkscape:cy="33.550462" + inkscape:zoom="6.6486402" + inkscape:cx="3.2694986" + inkscape:cy="33.552659" inkscape:document-units="px" inkscape:current-layer="layer1" showgrid="false" @@ -56,28 +56,15 @@ inkscape:groupmode="layer" id="layer1" transform="translate(-25.461093,-978.89671)"> - <text - xml:space="preserve" - style="font-size:32.33923721000000029px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:none;font-family:Sans" - x="54.732922" - y="1086.8667" - id="text3137" - sodipodi:linespacing="125%" - transform="scale(1.0602075,0.94321159)"><tspan - sodipodi:role="line" - id="tspan3139" - x="54.732922" - y="1086.8667" - style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:Khmer OS;-inkscape-font-specification:Khmer OS;fill:#ffffff">4</tspan></text> <path - style="fill:none;stroke:#ffffff;stroke-width:1.556;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" - d="m 35.892073,1016.9062 23.896912,0 -4.636714,-29.47338 -14.980154,0 z" + style="fill:none;stroke:#ffffff;stroke-width:1.55599999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" + d="m 34.688819,1021.7192 23.896912,0 -4.636714,-29.47337 -14.980154,0 z" id="path2985" inkscape:connector-curvature="0" sodipodi:nodetypes="ccccc" /> <path - style="fill:none;stroke:#ffffff;stroke-width:1.556;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" - d="m 39.82961,990.48176 16.050165,0 z" + style="fill:none;stroke:#ffffff;stroke-width:1.55599999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" + d="m 38.626356,995.29477 16.050165,0 z" id="path2987" inkscape:connector-curvature="0" /> <text diff --git a/icons/new-game.svg b/icons/new-game.svg new file mode 100644 index 0000000..1986550 --- /dev/null +++ b/icons/new-game.svg @@ -0,0 +1,120 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:xlink="http://www.w3.org/1999/xlink" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + version="1.0" + width="55" + height="55" + id="Icon" + inkscape:version="0.48.2 r9819" + sodipodi:docname="new-game.svg"> + <sodipodi:namedview + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1" + objecttolerance="10" + gridtolerance="10" + guidetolerance="10" + inkscape:pageopacity="0" + inkscape:pageshadow="2" + inkscape:window-width="1280" + inkscape:window-height="741" + id="namedview15" + showgrid="false" + showguides="true" + inkscape:guide-bbox="true" + inkscape:zoom="18.046292" + inkscape:cx="17.081959" + inkscape:cy="37.827016" + inkscape:window-x="0" + inkscape:window-y="27" + inkscape:window-maximized="1" + inkscape:current-layer="Icon"> + <sodipodi:guide + orientation="0,1" + position="-3.636481,56.138176" + id="guide2992" /> + </sodipodi:namedview> + <metadata + id="metadata25"> + <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> + <defs + id="defs23"> + <radialGradient + cx="74.071426" + cy="23" + fx="74.071426" + fy="23" + gradientTransform="matrix(1,0,0,0.81720428,0,4.2043016)" + gradientUnits="userSpaceOnUse" + id="radialGradient5205-1" + inkscape:collect="always" + r="6.6428571" + xlink:href="#linearGradient5199-2" /> + <linearGradient + id="linearGradient5199-2" + inkscape:collect="always"> + <stop + id="stop5201-4" + offset="0" + style="stop-color:#ffffff;stop-opacity:1;" /> + <stop + id="stop5203-4" + offset="1" + style="stop-color:#ffffff;stop-opacity:0;" /> + </linearGradient> + </defs> + <path + d="m 38.896593,27.829586 a 13.1562,8.2941265 0 1 1 -26.312401,0 13.1562,8.2941265 0 1 1 26.312401,0 z" + id="path2985-3" + sodipodi:cx="25.740393" + sodipodi:cy="27.829586" + sodipodi:rx="13.1562" + sodipodi:ry="8.2941265" + sodipodi:type="arc" + style="fill:#282828;fill-opacity:1;stroke:#ffffff;stroke-width:1.43106746999999990;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" + transform="matrix(0.50667889,0,0,0.79508862,8.2412023,21.805729)" /> + <path + d="m 80.714283,23 a 6.6428571,5.4285712 0 1 1 -13.285714,0 6.6428571,5.4285712 0 1 1 13.285714,0 z" + id="path5197" + sodipodi:cx="74.071426" + sodipodi:cy="23" + sodipodi:rx="6.6428571" + sodipodi:ry="5.4285712" + sodipodi:type="arc" + style="fill:url(#radialGradient5205-1);fill-opacity:1;stroke:none" + transform="matrix(0.57747603,0,0,0.71241356,-25.127151,25.549414)" /> + <path + d="m 10.169032,34.604688 23.413348,0 -4.54289,-31.9014142 -14.677022,0 z" + id="path2985" + inkscape:connector-curvature="0" + sodipodi:nodetypes="ccccc" + style="fill:#ffffff;fill-opacity:0;stroke:#ffffff;stroke-width:2.33526611000000006;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" /> + <path + d="m 14.026893,6.6174441 15.725382,0 z" + id="path2987" + inkscape:connector-curvature="0" + style="fill:#000000;fill-opacity:1;stroke:#ffffff;stroke-width:2.33526611000000006;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" /> + <path + d="m 39.750862,28.106001 c -1.10877,0 -2.018763,0.909992 -2.018763,2.018761 l 0,4.629689 -3.283849,-3.283849 c -0.784855,-0.783184 -2.043082,-0.78485 -2.826264,0 -0.783183,0.784854 -0.784823,2.069998 0,2.85318 l 3.310766,3.28385 -4.683521,0 c -1.10877,0 -2.018762,0.909991 -2.018762,2.018762 0,1.108769 0.909992,1.991843 2.018762,1.991843 l 4.656605,0 -3.28385,3.283849 c -0.783181,0.784854 -0.784823,2.069999 0,2.85318 0.784855,0.783182 2.07,0.757938 2.85318,-0.02692 l 3.256933,-3.283849 0,4.683524 c 0,1.10877 0.909993,1.991844 2.018763,1.991844 1.108769,0 1.991843,-0.883074 1.991843,-1.991844 l 0,-4.71044 3.337683,3.310765 c 0.784853,0.783182 2.043082,0.784855 2.826262,0 0.783182,-0.784853 0.784858,-2.043082 0,-2.826262 l -3.310765,-3.28385 4.656607,0 c 1.10877,0 1.991844,-0.883074 1.991844,-1.991843 0,-1.108771 -0.883074,-2.018763 -1.991844,-2.018763 l -4.683523,0 3.310765,-3.337683 c 0.783182,-0.784854 0.784857,-2.016165 0,-2.799347 -0.784854,-0.78318 -2.043082,-0.811775 -2.826263,-0.02691 l -3.310766,3.337682 0,-4.656604 c 0,-1.10877 -0.883074,-2.018763 -1.991843,-2.018763 z" + id="rect3894" + style="fill:#ffffff;fill-opacity:1;stroke:#282828;stroke-width:1.72267997;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" + inkscape:connector-curvature="0" /> +</svg> |