Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWalter Bender <walter@sugarlabs.org>2013-07-03 18:56:09 (GMT)
committer Walter Bender <walter@sugarlabs.org>2013-07-03 18:56:09 (GMT)
commit7dd86f8462c7bfa9625b53d974ea5f0a9b86c10e (patch)
tree3b8eb08f9268d1cbd82ea172dbec20f9e36ba503
parent29e74c102eec80307b029825462983729415dac6 (diff)
more fine-tuning
-rw-r--r--Dimensions.py75
-rw-r--r--activity/activity-dimensions.svg96
-rw-r--r--activity/activity.info6
-rw-r--r--game.py169
-rwxr-xr-xgencards.py5
5 files changed, 162 insertions, 189 deletions
diff --git a/Dimensions.py b/Dimensions.py
index 7becc82..d2612d6 100644
--- a/Dimensions.py
+++ b/Dimensions.py
@@ -95,10 +95,11 @@ class Dimensions(activity.Activity):
self._saved_state = None
self.vmw.new_game(self._saved_state, self._deck_index)
self.ready_to_play = True
+ '''
if self._saved_state == None:
# Launch animated help
self.vmw.help_animation()
-
+ '''
if self._editing_word_list:
self.vmw.editing_word_list = True
self.vmw.edit_word_list()
@@ -128,6 +129,7 @@ class Dimensions(activity.Activity):
if card_type == 'custom' and self.vmw.custom_paths[0] is None:
self.image_import_cb()
else:
+ self.tools_toolbar_button.set_expanded(False)
self.vmw.new_game()
def _robot_cb(self, button=None):
@@ -202,9 +204,9 @@ class Dimensions(activity.Activity):
def _read_journal_data(self):
''' There may be data from a previous instance. '''
- self._play_level = int(self._read_metadata('play_level', 2))
+ self._play_level = int(self._read_metadata('play_level', 1))
self._robot_time = int(self._read_metadata('robot_time', 60))
- self._card_type = self._read_metadata('cardtype', 'pattern')
+ self._card_type = self._read_metadata('cardtype', 'word')
self._low_score = [int(self._read_metadata('low_score_beginner', -1)),
int(self._read_metadata('low_score_intermediate',
-1)),
@@ -260,12 +262,14 @@ class Dimensions(activity.Activity):
toolbox.toolbar.insert(self.activity_toolbar_button, 0)
self.activity_toolbar_button.show()
+ '''
self.numbers_toolbar_button = ToolbarButton(
page=numbers_toolbar,
icon_name='number-tools')
- # numbers_toolbar.show()
- # toolbox.toolbar.insert(self.numbers_toolbar_button, -1)
- # self.numbers_toolbar_button.show()
+ numbers_toolbar.show()
+ toolbox.toolbar.insert(self.numbers_toolbar_button, -1)
+ self.numbers_toolbar_button.show()
+ '''
self.tools_toolbar_button = ToolbarButton(
page=tools_toolbar,
@@ -275,8 +279,8 @@ class Dimensions(activity.Activity):
self.tools_toolbar_button.show()
self.button_pattern = button_factory(
- 'new-pattern-game', toolbox.toolbar, self._select_game_cb,
- cb_arg='pattern', tooltip=PROMPT_DICT['pattern'])
+ 'new-word-game', toolbox.toolbar, self._select_game_cb,
+ cb_arg='word', tooltip=PROMPT_DICT['word'])
self._set_extras(toolbox.toolbar)
@@ -318,11 +322,12 @@ class Dimensions(activity.Activity):
self._set_extras(games_toolbar)
+ '''
self.words_tool_button = button_factory(
'word-tools', tools_toolbar, self._edit_words_cb,
tooltip=_('Edit word lists.'))
- '''
+ '''
self.import_button = button_factory(
'image-tools', tools_toolbar, self.image_import_cb,
tooltip=_('Import custom cards'))
@@ -331,7 +336,6 @@ class Dimensions(activity.Activity):
'no-custom-game', tools_toolbar, self._select_game_cb,
cb_arg='custom', tooltip=PROMPT_DICT['custom'])
- '''
self.product_button = radio_factory(
'product',
numbers_toolbar,
@@ -426,6 +430,12 @@ class Dimensions(activity.Activity):
'''
def _configure_cb(self, event):
+ self._vbox.set_size_request(Gdk.Screen.width(), Gdk.Screen.height())
+ self._vbox.show()
+ self._canvas.set_size_request(int(Gdk.Screen.width()),
+ int(Gdk.Screen.height()))
+ self._canvas.show()
+
if Gdk.Screen.width() < Gdk.Screen.height():
for sep in self._sep:
sep.hide()
@@ -498,15 +508,34 @@ class Dimensions(activity.Activity):
group=self.beginner_button)
LEVEL_BUTTONS[EXPERT] = self.expert_button
+ def _fixed_resize_cb(self, widget=None, rect=None):
+ ''' If a toolbar opens or closes, we need to resize the vbox
+ holding out scrolling window. '''
+ self._vbox.set_size_request(rect.width, rect.height)
+
def _setup_canvas(self):
- ''' Create a canvas.. '''
- canvas = Gtk.DrawingArea()
- canvas.set_size_request(Gdk.Screen.width(), Gdk.Screen.height())
- self.set_canvas(canvas)
- canvas.show()
+ ''' Create a canvas in a Gtk.Fixed '''
+ self.fixed = Gtk.Fixed()
+ self.fixed.connect('size-allocate', self._fixed_resize_cb)
+ self.fixed.show()
+ self.set_canvas(self.fixed)
+
+ self._vbox = Gtk.VBox(False, 0)
+ self._vbox.set_size_request(Gdk.Screen.width(), Gdk.Screen.height())
+ self.fixed.put(self._vbox, 0, 0)
+ self._vbox.show()
+
+ self._canvas = Gtk.DrawingArea()
+ self._canvas.set_size_request(int(Gdk.Screen.width()),
+ int(Gdk.Screen.height()))
+ self._canvas.show()
+ self.show_all()
+ self._vbox.pack_end(self._canvas, True, True, 0)
+ self._vbox.show()
+
self.show_all()
- self.vmw = Game(canvas, self)
+ self.vmw = Game(self._canvas, self)
self.vmw.level = self._play_level
LEVEL_BUTTONS[self._play_level].set_active(True)
self.vmw.card_type = self._card_type
@@ -515,9 +544,9 @@ class Dimensions(activity.Activity):
self.vmw.low_score = self._low_score
self.vmw.all_scores = self._all_scores
self.vmw.numberO = self._numberO
- NUMBER_O_BUTTONS[self._numberO].set_active(True)
+ # NUMBER_O_BUTTONS[self._numberO].set_active(True)
self.vmw.numberC = self._numberC
- NUMBER_C_BUTTONS[self._numberC].set_active(True)
+ # NUMBER_C_BUTTONS[self._numberC].set_active(True)
self.vmw.matches = self._matches
self.vmw.robot_matches = self._robot_matches
self.vmw.total_time = self._total_time
@@ -531,7 +560,7 @@ class Dimensions(activity.Activity):
self._custom_jobject[i] is not None:
self.vmw.custom_paths[i] = datastore.get(
self._custom_jobject[i])
- return canvas
+ return self._canvas
def write_file(self, file_path):
''' Write data to the Journal. '''
@@ -651,9 +680,9 @@ class Dimensions(activity.Activity):
help_box = self._new_help_box('main-toolbar')
add_section(help_box, _('Dimensions'), icon='activity-dimensions')
add_paragraph(help_box, _('Tools'), icon='view-source')
- add_paragraph(help_box, _('Game'), icon='new-pattern-game')
+ # add_paragraph(help_box, _('Game'), icon='new-pattern-game')
# add_paragraph(help_box, PROMPT_DICT['number'], icon='new-number-game')
- # add_paragraph(help_box, PROMPT_DICT['word'], icon='new-word-game')
+ add_paragraph(help_box, PROMPT_DICT['word'], icon='new-word-game')
# add_paragraph(help_box, _('Numbers'), icon='number-tools')
add_paragraph(help_box, _('Play with the computer'), icon='robot-off')
add_paragraph(help_box, _('robot pause time'), icon='timer-60')
@@ -667,8 +696,8 @@ class Dimensions(activity.Activity):
add_section(help_box, _('Tools'), icon='view-source')
add_section(help_box, _('Import image cards'), icon='image-tools')
- add_paragraph(help_box, PROMPT_DICT['custom'], icon='new-custom-game')
- # add_section(help_box, _('Edit word lists.'), icon='word-tools')
+ # add_paragraph(help_box, PROMPT_DICT['custom'], icon='new-custom-game')
+ add_section(help_box, _('Edit word lists.'), icon='word-tools')
'''
add_section(help_box, _('Numbers'), icon='number-tools')
diff --git a/activity/activity-dimensions.svg b/activity/activity-dimensions.svg
index fa3f393..058e3af 100644
--- a/activity/activity-dimensions.svg
+++ b/activity/activity-dimensions.svg
@@ -5,78 +5,44 @@
]>
<svg height="55px" viewBox="0 0 55 55" width="55px" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" stroke-linecap="round" stroke-linejoin="round" stroke-width="3.5" stroke="&stroke_color;" fill="&fill_color;">
<g
- transform="matrix(0,-1,1,0,0.36636489,40.126411)"
- id="g4036">
+ transform="translate(0,0.23305116)"
+ id="g4015">
<g
- transform="matrix(0.41601289,0,0,0.40702804,13.297821,-6.9732022)"
- id="g2925"
- style="fill:&stroke_color;;fill-opacity:1;stroke-width:3;stroke-miterlimit:4;stroke-dasharray:none">
+ transform="matrix(0.02002748,0,0,-0.02002748,-120.39314,91.425426)"
+ id="g27729"
+ style="fill:&fill_color;;fill-opacity:1;stroke:none">
<path
- d="m 33.3585,62.5035 l 10.102,10.1 c 0.752,0.75 1.217,1.783 1.217,2.932 0,2.287 -1.855,4.143 -4.146,4.143 -1.145,0 -2.178,-0.463 -2.932,-1.211 l -10.102,-10.103 -10.1,10.1 c -0.75,0.75 -1.787,1.211 -2.934,1.211 -2.284,0 -4.143,-1.854 -4.143,-4.141 0,-1.146 0.465,-2.184 1.212,-2.934 l 10.104,-10.102 -10.102,-10.1 c -0.747,-0.748 -1.212,-1.785 -1.212,-2.93 0,-2.289 1.854,-4.146 4.146,-4.146 1.143,0 2.18,0.465 2.93,1.214 l 10.099,10.102 10.102,-10.103 c 0.754,-0.749 1.787,-1.214 2.934,-1.214 2.289,0 4.146,1.856 4.146,4.145 0,1.146 -0.467,2.18 -1.217,2.932 l -10.104,10.105 z"
- transform="translate(10,1.5)"
- id="path2927"
- style="fill:&stroke_color;;fill-opacity:1;stroke:&stroke_color;;stroke-width:3;stroke-miterlimit:4;stroke-dasharray:none" />
+ d="m 7745.7123,3650.2039 c -3.6036,-1.6517 -13.0632,-10.0601 -23.5738,-20.871 -19.9701,-20.7209 -29.5798,-27.778 -42.4928,-31.0814 -20.7209,-5.2553 -37.8381,-1.5015 -74.9255,16.9671 -21.4716,10.6608 -26.8771,12.9131 -33.0333,12.9131 -6.7568,0.1501 -7.8078,-0.3004 -10.8109,-4.8049 -4.3544,-6.3063 -5.8559,-18.0181 -4.5045,-35.4357 1.2012,-19.0692 5.1051,-34.9853 17.4175,-72.3729 12.0121,-36.637 15.1653,-49.55 15.4656,-63.6642 0.3003,-14.1142 -2.8528,-23.4236 -10.0601,-30.781 -8.2583,-8.1082 -15.4656,-10.3604 -52.7031,-16.5167 -57.3578,-9.6096 -94.4452,-20.5707 -129.7308,-38.1384 -69.9705,-34.9852 -122.6736,-97.298 -155.5567,-184.0855 -8.4085,-22.2224 -14.5647,-42.7931 -27.9282,-93.5443 -17.4175,-66.2167 -18.919,-69.52 -45.646,-97.4482 -34.6849,-36.3366 -60.9614,-53.3037 -121.7727,-78.5291 -31.2315,-12.913 -44.7451,-20.4206 -54.6551,-30.0303 -13.3634,-12.913 -18.4686,-25.3755 -20.4205,-48.7991 -2.2523,-28.3786 13.6637,-51.5019 47.4478,-68.9195 7.0571,-3.6036 17.1172,-7.8079 22.5227,-9.1592 13.964,-3.6037 25.5257,-1.5015 25.5257,4.6547 0,1.2012 -7.0571,9.6096 -15.6157,18.7689 -21.772,22.9731 -27.0273,35.1354 -21.3215,50.1505 4.6547,11.862 25.2254,28.0783 49.7001,39.0394 11.7118,5.2553 80.6312,32.7329 96.0968,38.4387 38.8892,14.2644 55.8563,13.6638 75.8264,-3.1532 l 7.2073,-6.006 146.848,0.3003 146.9981,0.4504 -0.4505,11.2614 c -1.3513,29.2795 -9.009,35.1354 -48.7991,37.3876 -11.2614,0.6007 -21.0212,1.5016 -21.3215,1.952 -1.3514,1.2012 4.5045,15.0151 14.2644,34.2345 17.4175,34.0844 41.2916,66.517 54.9553,74.4751 6.1562,3.6036 7.8079,3.9039 19.0693,3.3033 14.1142,-0.7508 22.0722,-4.0541 29.2795,-12.3124 6.006,-6.907 7.6577,-12.6127 10.0601,-35.5859 1.5015,-13.964 3.1532,-21.9221 6.6067,-30.6308 17.1172,-44.2947 68.1687,-93.244 96.6974,-92.4933 9.7598,0.1502 14.1142,3.1532 19.5197,13.6638 4.8048,9.4595 5.4054,20.1203 1.6516,27.4777 -1.3513,2.7027 -9.1592,11.7118 -17.1172,20.1203 -35.5859,36.9372 -46.5469,66.2167 -46.5469,124.4754 0,59.1596 11.5616,102.5534 36.9372,138.2894 3.6036,5.1051 15.7659,19.2193 27.0272,31.5318 35.8862,39.1894 42.9433,54.3547 42.9433,92.0427 -0.1501,21.772 -1.6516,33.3336 -7.958,56.7572 -10.6607,40.3907 -7.0571,59.9104 15.4656,85.1358 15.3154,17.2674 16.6668,23.2735 11.2613,51.9524 -6.006,31.3816 -8.2583,45.1955 -11.4115,72.6732 -4.0541,34.5348 -7.0571,42.1925 -17.7178,46.6971 -6.6067,2.8528 -13.5136,2.5525 -20.7209,-0.7508 z"
+ id="path27731"
+ style="fill:&fill_color;;fill-opacity:1" />
</g>
<g
- transform="matrix(0.41601289,0,0,0.40702804,13.297821,9.1408833)"
- id="g2925-4"
- style="fill:&stroke_color;;fill-opacity:1;stroke-width:3;stroke-miterlimit:4;stroke-dasharray:none">
+ transform="translate(-0.55652425,0)"
+ id="g3238">
<path
- d="m 33.3585,62.5035 l 10.102,10.1 c 0.752,0.75 1.217,1.783 1.217,2.932 0,2.287 -1.855,4.143 -4.146,4.143 -1.145,0 -2.178,-0.463 -2.932,-1.211 l -10.102,-10.103 -10.1,10.1 c -0.75,0.75 -1.787,1.211 -2.934,1.211 -2.284,0 -4.143,-1.854 -4.143,-4.141 0,-1.146 0.465,-2.184 1.212,-2.934 l 10.104,-10.102 -10.102,-10.1 c -0.747,-0.748 -1.212,-1.785 -1.212,-2.93 0,-2.289 1.854,-4.146 4.146,-4.146 1.143,0 2.18,0.465 2.93,1.214 l 10.099,10.102 10.102,-10.103 c 0.754,-0.749 1.787,-1.214 2.934,-1.214 2.289,0 4.146,1.856 4.146,4.145 0,1.146 -0.467,2.18 -1.217,2.932 l -10.104,10.105 z"
- transform="translate(10,1.5)"
- id="path2927-7" />
- </g>
- </g>
- <g
- transform="matrix(0.41155553,0,0,0.39886125,12.066668,1.454678)"
- id="g3063"
- style="fill:none;stroke-width:3;stroke-miterlimit:4;stroke-dasharray:none">
- <path
- d="m 28.3575,70.160499 l -5.861,5.861 -5.861,-5.866001 -4.102,-4.1 c -0.747,-0.747999 -1.212,-1.784999 -1.212,-2.93 0,-2.288998 1.854,-4.145998 4.146,-4.145998 1.143,0 2.18,0.465 2.93,1.214 l 4.099,4.101999 14.102,-14.102998 c 0.754,-0.749 1.787,-1.214 2.934,-1.214 2.289,0 4.146,1.856001 4.146,4.145001 0,1.146 -0.467,2.18 -1.217,2.932 l -14.104,14.104997 z"
- transform="translate(10,1.5)"
- id="path3065"
- style="fill:none;stroke:&stroke_color;;stroke-width:3;stroke-miterlimit:4;stroke-dasharray:none" />
- </g>
- <g
- transform="matrix(0,-1,1,0,-0.19969225,55.000838)"
- id="g4007">
- <g
- transform="translate(-0.52754307,0)"
- id="g3997">
- <rect
- width="13.632148"
- height="13.750559"
- rx="8.0620232"
- ry="8.9985275"
- x="5.1309609"
- y="37.104614"
- id="rect14"
- style="fill:&fill_color;;fill-opacity:1;fill-rule:evenodd;stroke-width:1.20515919;stroke-linecap:square;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
- </g>
- <g
- transform="translate(4.7683716e-7,-0.01625347)"
- id="g3979">
- <rect
- width="13.632148"
- height="13.750559"
- rx="8.0620232"
- ry="8.9985275"
- x="4.6034174"
- y="20.857771"
- id="rect14-5"
- style="fill:&fill_color;;fill-opacity:1;fill-rule:evenodd;stroke-width:1.20515919;stroke-linecap:square;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ d="m 12.392264,51.759088 c -3.9956525,0 -7.2463775,-3.250725 -7.2463775,-7.246377 0,-3.995652 3.250725,-7.246377 7.2463775,-7.246377 0.695797,0 1.387681,0.100145 2.056232,0.297681 l 1.741884,0.514783 -1.741884,0.514783 c -2.602899,0.76913 -4.42087,3.203188 -4.42087,5.91913 0,2.715797 1.817971,5.14971 4.420725,5.918841 l 1.741304,0.514347 -1.741159,0.515218 c -0.668696,0.197681 -1.360435,0.297971 -2.056232,0.297971 l 0,0 z m 0,-13.419276 c -3.4037685,0 -6.1727545,2.769276 -6.1727545,6.172899 0,3.403623 2.768986,6.172899 6.1727545,6.172899 0.0062,0 0.01246,0 0.01884,0 -2.099711,-1.298261 -3.4569575,-3.630435 -3.4569575,-6.172899 0,-2.542319 1.3572465,-4.874348 3.4566675,-6.172899 -0.0064,0 -0.01246,0 -0.01855,0 l 0,0 z"
+ id="path5631"
+ style="fill:&stroke_color;;fill-opacity:1;stroke-width:0.50724638" />
+ <path
+ d="m 29.780655,51.759088 c -3.995652,0 -7.246377,-3.250725 -7.246377,-7.246377 0,-3.995652 3.250725,-7.246377 7.246377,-7.246377 0.695797,0 1.387681,0.100145 2.056232,0.297681 l 1.741884,0.514783 -1.741884,0.514783 c -2.602899,0.76913 -4.42087,3.203188 -4.42087,5.91913 0,2.715797 1.817971,5.14971 4.420725,5.918841 l 1.741304,0.514347 -1.741159,0.515218 c -0.668696,0.197681 -1.360435,0.297971 -2.056232,0.297971 l 0,0 z m 0,-13.419276 c -3.403768,0 -6.172754,2.769276 -6.172754,6.172899 0,3.403623 2.768986,6.172899 6.172754,6.172899 0.0062,0 0.01246,0 0.01884,0 -2.099711,-1.298261 -3.456957,-3.630435 -3.456957,-6.172899 0,-2.542319 1.357246,-4.874348 3.456667,-6.172899 -0.0064,0 -0.01246,0 -0.01855,0 l 0,0 z"
+ id="path5631-1"
+ style="fill:&stroke_color;;fill-opacity:1;stroke-width:0.50724638" />
+ <path
+ d="m 47.169046,51.759088 c -3.995652,0 -7.246377,-3.250725 -7.246377,-7.246377 0,-3.995652 3.250725,-7.246377 7.246377,-7.246377 0.695797,0 1.387681,0.100145 2.056232,0.297681 l 1.741884,0.514783 -1.741884,0.514783 c -2.602899,0.76913 -4.42087,3.203188 -4.42087,5.91913 0,2.715797 1.817971,5.14971 4.420725,5.918841 l 1.741304,0.514347 -1.741159,0.515218 c -0.668696,0.197681 -1.360435,0.297971 -2.056232,0.297971 l 0,0 z m 0,-13.419276 c -3.403768,0 -6.172754,2.769276 -6.172754,6.172899 0,3.403623 2.768986,6.172899 6.172754,6.172899 0.0062,0 0.01246,0 0.01884,0 -2.099711,-1.298261 -3.456957,-3.630435 -3.456957,-6.172899 0,-2.542319 1.357246,-4.874348 3.456667,-6.172899 -0.0064,0 -0.01246,0 -0.01855,0 l 0,0 z"
+ id="path5631-7"
+ style="fill:&stroke_color;;fill-opacity:1;stroke-width:0.50724638" />
</g>
<g
- id="g3961">
- <rect
- width="13.632148"
- height="13.750559"
- rx="8.0620232"
- ry="8.9985275"
- x="4.6034179"
- y="4.5442114"
- id="rect14-7"
- style="fill:&fill_color;;fill-opacity:1;fill-rule:evenodd;stroke-width:1.20515919;stroke-linecap:square;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ transform="translate(0.72186404,0)"
+ id="g3243">
+ <path
+ d="m 18.159582,5.5303188 c 0.352319,-1.087392 1.014204,-1.838552 1.754204,-1.838552 v -0.916957 c -1.273189,0 -2.333044,1.183334 -2.749276,2.888263 -7.1829017,-2.243625 -5.241017,5.5359442 -4.022466,7.6226122 0.797971,1.366667 0.221449,4.01319 3.175943,3.981596 0.444783,-0.0048 0.814059,0.03768 1.115508,-0.390145 0.301305,0.427826 0.67058,0.385362 1.115363,0.390145 2.954349,0.03174 2.377827,-2.614929 3.175943,-3.981596 1.191885,-2.041305 3.075944,-9.5295702 -3.565219,-7.7553662 z"
+ id="path15627"
+ style="fill:&stroke_color;;fill-opacity:1;stroke-width:0.50724661" />
+ <path
+ d="m 36.849073,5.5303188 c 0.352319,-1.087392 1.014204,-1.838552 1.754204,-1.838552 v -0.916957 c -1.273189,0 -2.333044,1.183334 -2.749276,2.888263 -7.182902,-2.243625 -5.241017,5.5359442 -4.022466,7.6226122 0.797971,1.366667 0.221449,4.01319 3.175943,3.981596 0.444783,-0.0048 0.814059,0.03768 1.115508,-0.390145 0.301305,0.427826 0.67058,0.385362 1.115363,0.390145 2.954349,0.03174 2.377827,-2.614929 3.175943,-3.981596 1.191884,-2.041305 3.075943,-9.5295702 -3.565219,-7.7553662 z"
+ id="path15627-0"
+ style="fill:&stroke_color;;fill-opacity:1;stroke-width:0.50724661" />
</g>
</g>
</svg>
diff --git a/activity/activity.info b/activity/activity.info
index ace83db..b934833 100644
--- a/activity/activity.info
+++ b/activity/activity.info
@@ -1,9 +1,9 @@
[Activity]
-name = Dimensions
+name = Word Dimensions
activity_version = 51
license = GPLv3
-bundle_id = org.sugarlabs.Dimensions
+bundle_id = org.sugarlabs.WordDimensions
exec = sugar-activity Dimensions.Dimensions
icon = activity-dimensions
show_launcher = yes
-summary = a pattern-matching game
+summary = a word pattern-matching game
diff --git a/game.py b/game.py
index bbcb884..b2ed270 100644
--- a/game.py
+++ b/game.py
@@ -18,6 +18,8 @@ from gi.repository import Gtk
from gi.repository import Gdk
from gi.repository import GdkPixbuf
from gi.repository import GObject
+from gi.repository import Pango
+
import os
from gettext import gettext as _
@@ -25,6 +27,7 @@ from gettext import gettext as _
from math import sqrt
from sugar3.graphics.objectchooser import ObjectChooser
+from sugar3.graphics import style
from sugar3.datastore import datastore
from sugar3 import mime
from sugar3.activity import activity
@@ -32,7 +35,6 @@ from sugar3.activity import activity
import logging
_logger = logging.getLogger('dimensions-activity')
-from sugar3.graphics import style
GRID_CELL_SIZE = style.GRID_CELL_SIZE
from constants import (LOW, MEDIUM, HIGH, MATCHMASK, ROW, COL, CARD_WIDTH,
@@ -41,7 +43,6 @@ from constants import (LOW, MEDIUM, HIGH, MATCHMASK, ROW, COL, CARD_WIDTH,
DIFFICULTY_LEVEL, BACKGROUNDMASK, DECKSIZE,
CUSTOM_CARD_INDICIES, SHAPES, COLORS, NUMBER, FILLS,
CARDS_IN_A_MATCH, LABELH)
-
from grid import Grid
from deck import Deck
from card import Card
@@ -122,7 +123,6 @@ class Game():
self._canvas.add_events(Gdk.EventMask.BUTTON_PRESS_MASK)
self._canvas.add_events(Gdk.EventMask.BUTTON_RELEASE_MASK)
self._canvas.add_events(Gdk.EventMask.BUTTON_MOTION_MASK)
- self._canvas.add_events(Gdk.EventMask.KEY_PRESS_MASK)
self._canvas.connect('event', self.__event_cb)
self._canvas.connect('draw', self.__draw_cb)
@@ -298,11 +298,23 @@ class Game():
deck_stop = deck_start + self.deck.count()
self._restore_word_list(self._saved_state[deck_stop +
3 * self.matches:])
- self.deck.restore(self._saved_state[deck_start: deck_stop])
- self.grid.restore(self.deck, self._saved_state[0: ROW * COL])
- self._restore_matches(self._saved_state[deck_stop: deck_stop +
- 3 * self.matches])
- self._restore_clicked(self._saved_state[ROW * COL: ROW * COL + 3])
+ if self._saved_state[deck_start] is not None:
+ self.deck.restore(self._saved_state[deck_start: deck_stop])
+ self.grid.restore(self.deck, self._saved_state[0: ROW * COL])
+ self._restore_matches(
+ self._saved_state[deck_stop: deck_stop + 3 * self.matches])
+ self._restore_clicked(
+ self._saved_state[ROW * COL: ROW * COL + 3])
+ else:
+ self.deck.hide()
+ self.deck.shuffle()
+ self.grid.deal(self.deck)
+ if not self._find_a_match():
+ self.grid.deal_extra_cards(self.deck)
+ self.matches = 0
+ self.robot_matches = 0
+ self.match_list = []
+ self.total_time = 0
elif not self.joiner():
_logger.debug('Starting new game.')
@@ -400,6 +412,9 @@ class Game():
def edit_word_list(self):
''' Update the word cards '''
if not self.editing_word_list:
+ if hasattr(self, 'text_entry'):
+ self.text_entry.hide()
+ self.text_entry.disconnect(self.text_event_id)
return
# Set the card type to words, and generate a new deck.
@@ -425,6 +440,38 @@ class Game():
self.set_label('clock', '')
self.set_label('status', _('Edit the word cards.'))
+ if not hasattr(self, 'text_entry'):
+ self.text_entry = Gtk.TextView()
+ self.text_entry.set_wrap_mode(Gtk.WrapMode.WORD)
+ self.text_entry.set_pixels_above_lines(0)
+ self.text_entry.set_size_request(self._card_width,
+ self._card_height)
+ '''
+ rgba = Gdk.RGBA()
+ rgba.red, rgba.green, rgba.blue = rgb(self._colors[1])
+ rgba.alpha = 1.
+ self.text_entry.override_background_color(
+ Gtk.StateFlags.NORMAL, rgba)
+ '''
+ font_text = Pango.font_description_from_string('24')
+ self.text_entry.modify_font(font_text)
+ self.activity.fixed.put(self.text_entry, 0, 0)
+
+ def _text_focus_out_cb(self, widget=None, event=None):
+ if self._edit_card is None:
+ self.text_entry.hide()
+ self.text_entry.disconnect(self.text_event_id)
+ self._update_word_card()
+ self.text_entry.hide()
+
+ def _update_word_card(self):
+ bounds = self.text_buffer.get_bounds()
+ text = self.text_buffer.get_text(bounds[0], bounds[1], True)
+ self._edit_card.spr.set_label(text)
+ (i, j) = WORD_CARD_MAP[self._edit_card.index]
+ self.word_lists[i][j] = text
+ self._edit_card = None
+
def __event_cb(self, widget, event):
''' Handle touch events '''
if event.type in (Gdk.EventType.TOUCH_BEGIN,
@@ -444,10 +491,6 @@ class Game():
elif event.type == Gdk.EventType.TOUCH_END or \
event.type == Gdk.EventType.BUTTON_RELEASE:
self._button_release(x, y)
- elif event.type == Gdk.EventType.KEY_PRESS:
- k = Gdk.keyval_name(event.keyval)
- u = Gdk.keyval_to_unicode(event.keyval)
- self._keypress(k, u)
def _button_press_cb(self, win, event):
''' Look for a card under the button press and save its position. '''
@@ -562,6 +605,8 @@ class Game():
def _button_release(self, x, y):
# Maybe there is nothing to do.
if self._press is None:
+ if self.editing_word_list:
+ self._text_focus_out_cb()
self._drag_pos = [0, 0]
return True
@@ -581,13 +626,12 @@ class Game():
if move == 'click':
if self.editing_word_list:
- if self.editing_word_list:
- # Only edit one card at a time, so unselect other cards
- for i, c in enumerate(self.clicked):
- if c.spr is not None and c.spr != self._press:
- c.spr.set_label(
- c.spr.labels[0].replace(CURSOR, ''))
- c.spr = None # Unselect
+ # Only edit one card at a time, so unselect other cards
+ for i, c in enumerate(self.clicked):
+ if c.spr is not None and c.spr != self._press:
+ c.spr.set_label(
+ c.spr.labels[0].replace(CURSOR, ''))
+ c.spr = None # Unselect
elif self.editing_custom_cards:
pass
else:
@@ -716,8 +760,17 @@ class Game():
def process_selection(self, spr):
''' After a card has been selected... '''
if self.editing_word_list: # Edit label of selected card
+ x, y = spr.get_xy()
+ if self._edit_card is not None:
+ self._update_word_card()
self._edit_card = self.deck.spr_to_card(spr)
- spr.set_label(spr.labels[0] + CURSOR)
+ self.text_buffer = self.text_entry.get_buffer()
+ self.text_entry.show()
+ self.text_buffer.set_text(self._edit_card.spr.labels[0])
+ self.activity.fixed.move(self.text_entry, x, y)
+ self.text_event_id = self.text_entry.connect(
+ 'focus-out-event', self._text_focus_out_cb)
+ self.text_entry.grab_focus()
elif self.editing_custom_cards:
# Only edit one card at a time, so unselect other cards
for i, c in enumerate(self.clicked):
@@ -891,82 +944,6 @@ class Game():
self._failure = None
self._dealing = False
- def _keypress_cb(self, area, event):
- ''' Keypress: editing word cards or selecting cards to play '''
- k = Gdk.keyval_name(event.keyval)
- u = Gdk.keyval_to_unicode(event.keyval)
- self._keypress(k, u)
-
- def _keypress(self, k, u):
- if self.editing_word_list and self._edit_card is not None:
- if k in NOISE_KEYS:
- self._dead_key = None
- return True
- if k[0:5] == 'dead_':
- self._dead_key = k
- return True
- label = self._edit_card.spr.labels[0]
- if len(label) > 0:
- c = label.count(CURSOR)
- if c == 0:
- oldleft = label
- oldright = ''
- elif len(label) == 1: # Only CURSOR
- oldleft = ''
- oldright = ''
- else:
- try: # Why are getting a ValueError on occasion?
- oldleft, oldright = label.split(CURSOR)
- except ValueError:
- oldleft = label
- oldright = ''
- else:
- oldleft = ''
- oldright = ''
- newleft = oldleft
- if k == 'BackSpace':
- if len(oldleft) > 1:
- newleft = oldleft[:len(oldleft) - 1]
- else:
- newleft = ''
- elif k == 'Delete':
- if len(oldright) > 0:
- oldright = oldright[1:]
- elif k == 'Home':
- oldright = oldleft + oldright
- newleft = ''
- elif k == 'Left':
- if len(oldleft) > 0:
- oldright = oldleft[len(oldleft) - 1:] + oldright
- newleft = oldleft[:len(oldleft) - 1]
- elif k == 'Right':
- if len(oldright) > 0:
- newleft = oldleft + oldright[0]
- oldright = oldright[1:]
- elif k == 'End':
- newleft = oldleft + oldright
- oldright = ''
- elif k == 'Return':
- newleft = oldleft + RETURN
- else:
- if self._dead_key is not None:
- u = DEAD_DICTS[DEAD_KEYS.index(self._dead_key[5:])][k]
- if k in WHITE_SPACE:
- u = 32
- if unichr(u) != '\x00':
- newleft = oldleft + unichr(u)
- else:
- newleft = oldleft + k
- label = newleft + CURSOR + oldright
- self._edit_card.spr.set_label(label)
- (i, j) = WORD_CARD_MAP[self._edit_card.index]
- self.word_lists[i][j] = label.replace(CURSOR, '')
- self._dead_key = None
- else:
- if k in KEYMAP:
- self.process_selection(self.grid.grid_to_spr(KEYMAP.index(k)))
- return True
-
def __draw_cb(self, canvas, cr):
self._sprites.redraw_sprites(cr=cr)
diff --git a/gencards.py b/gencards.py
index ab501a0..fd52e5b 100755
--- a/gencards.py
+++ b/gencards.py
@@ -828,11 +828,11 @@ def generate_word_card(shape, color, number, fill, scale):
svg = SVG()
svg._set_scale(scale)
if number == 0:
- _stroke = DARK_COLOR[color]
+ _stroke = COLOR_PAIRS[color][1] # DARK_COLOR[color]
elif number == 1:
_stroke = COLOR_PAIRS[color][1]
else:
- _stroke = COLOR_PAIRS[color][0]
+ _stroke = COLOR_PAIRS[color][1] # COLOR_PAIRS[color][0]
if fill == 0:
_fill = COLOR_PAIRS[color][1]
elif fill == 1:
@@ -865,6 +865,7 @@ def generate_selected_card(scale):
svg_string += svg._footer()
return svg_string
+
def generate_label(width, height):
svg = SVG()
svg._set_scale(1.0)