diff options
-rw-r--r-- | constants.py | 1 | ||||
-rw-r--r-- | images/palettehorizontal.svg | 31 | ||||
-rw-r--r-- | images/palettevertical.svg | 26 | ||||
-rw-r--r-- | talogo.py | 3 | ||||
-rw-r--r-- | tawindow.py | 118 |
5 files changed, 147 insertions, 32 deletions
diff --git a/constants.py b/constants.py index 3354c48..f64924e 100644 --- a/constants.py +++ b/constants.py @@ -70,6 +70,7 @@ BOX_COLORS = {'red':["#FF0000","#A00000"],'orange':["#FFD000","#AA8000"], 'purple':["#FF00FF","#A000A0"]} PALETTE_HEIGHT = 120 +PALETTE_WIDTH = 180 SELECTOR_WIDTH = 55 ICON_SIZE = 55 SELECTED_COLOR = "#0000FF" diff --git a/images/palettehorizontal.svg b/images/palettehorizontal.svg new file mode 100644 index 0000000..ea61324 --- /dev/null +++ b/images/palettehorizontal.svg @@ -0,0 +1,31 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<svg + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + version="1.0" + width="55" + height="55" + id="svg2"> + <defs + id="defs4" /> + <g + transform="translate(3.5,2)" + id="g3589" + style="stroke:#ffffff;stroke-opacity:1"> + <g + transform="translate(0,-2.5)" + id="g3616" + style="stroke:#ffffff;stroke-opacity:1"> + <path + d="m 10,25 0,-10 28,0 0,10 -28,0 z" + id="path2459" + style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:2.29999995;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" /> + <path + d="m 10,15 14,0 0,26 -14,0 0,-26 z" + id="path2461" + style="fill:none;stroke:#ffffff;stroke-width:2.29999995;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" /> + </g> + </g> +</svg> diff --git a/images/palettevertical.svg b/images/palettevertical.svg new file mode 100644 index 0000000..2fb09ea --- /dev/null +++ b/images/palettevertical.svg @@ -0,0 +1,26 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<svg + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + version="1.0" + width="55" + height="55" + id="svg2"> + <defs + id="defs4" /> + <g + transform="translate(3.5,2)" + id="g3589" + style="stroke:#ffffff;stroke-opacity:1"> + <path + d="m 10,22.5 0,-10 28,0 0,10 -28,0 z" + id="path2459" + style="fill:none;stroke:#ffffff;stroke-width:2.29999995;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" /> + <path + d="m 10,12.5 14,0 0,26 -14,0 0,-26 z" + id="path2461" + style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:2.29999995;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" /> + </g> +</svg> @@ -734,7 +734,8 @@ class LogoCode: try: dsobject = datastore.get(media[6:]) except: - raise logoerror("#nomedia") + # raise logoerror("#nomedia") + print "Couldn't open media object %s" % (media[6:]) if movie_media_type(dsobject.file_path[-4:]): play_movie_from_file(self, dsobject.file_path, int(x), int(y), int(w), int(h)) diff --git a/tawindow.py b/tawindow.py index 1b71eb5..8a7ea98 100644 --- a/tawindow.py +++ b/tawindow.py @@ -131,6 +131,8 @@ class TurtleArtWindow(): self.toolbar_spr = None self.palette_sprs = [] self.palettes = [] + self.palette_button = [] + self.palette_orientation = 0 self.trash_index = PALETTE_NAMES.index('trash') self.selected_palette = None self.selectors = [] @@ -321,8 +323,9 @@ class TurtleArtWindow(): self.selector_shapes[self.selected_palette][0]) for i in range(len(PALETTES)): self.selectors[i].set_layer(HIDE_LAYER) - if self.palette_sprs[i] is not None: - self.palette_sprs[i].set_layer(HIDE_LAYER) + if self.palette_sprs[i][self.palette_orientation] is not None: + self.palette_sprs[i][self.palette_orientation].set_layer( + HIDE_LAYER) self.selected_palette = None self.toolbar_spr.set_layer(HIDE_LAYER) @@ -342,7 +345,18 @@ class TurtleArtWindow(): self.selectors[i].set_layer(TAB_LAYER) w, h = self.selectors[i].get_dimensions() x += int(w) - self.palette_sprs.append(None) + self.palette_sprs.append([None,None]) + self.palette_button.append(Sprite(self.sprite_list, 0, 0, + self._load_sprite_from_file( + "%s/palettehorizontal.svg" % (self.path)))) + self.palette_button.append(Sprite(self.sprite_list, 0, 0, + self._load_sprite_from_file( + "%s/palettevertical.svg" % (self.path)))) + self.palette_button[0].type = 'palette' + self.palette_button[1].type = 'palette' + self.palette_button[self.palette_orientation].set_layer(TAB_LAYER) + self.palette_button[1-self.palette_orientation].set_layer( + HIDE_LAYER) if len(self.palettes) == 0: for i in range(len(PALETTES)): @@ -354,8 +368,11 @@ class TurtleArtWindow(): if self.selected_palette is not None: self.hide_toolbar_palette() - if self.palette_sprs[n] is not None: - self.palette_sprs[n].set_layer(CATEGORY_LAYER) + if self.palette_sprs[n][self.palette_orientation] is not None: + self.palette_sprs[n][self.palette_orientation].set_layer( + CATEGORY_LAYER) + self.palette_sprs[n][1-self.palette_orientation].set_layer( + HIDE_LAYER) for i in range(len(PALETTES)): self.selectors[i].set_layer(TAB_LAYER) @@ -373,7 +390,7 @@ class TurtleArtWindow(): self.toolbar_spr.set_layer(CATEGORY_LAYER) if self.palettes[n] == []: - _min_width = (len(PALETTES)+1)*(SELECTOR_WIDTH) + print "%d: %d" % (n,self.palette_orientation) for i, name in enumerate(PALETTES[n]): # Some blocks are too big to fit the palette. if PALETTE_SCALE.has_key(name): @@ -392,29 +409,50 @@ class TurtleArtWindow(): elif name == 'nop': self.palettes[n][i].spr.set_image(self.media_shapes[ 'pythonsmall'], 1, 10, 7) - _x, _y, _max_width = 5, ICON_SIZE+5, 0 - for i in range(len(PALETTES[n])): - _w, _h = self.palettes[n][i].spr.get_dimensions() - if _y+_h > PALETTE_HEIGHT+ICON_SIZE: - _y = ICON_SIZE+5 - _x += int(_max_width+5) - _max_width = 0 - self.palettes[n][i].spr.move((int(_x), int(_y))) - _y += int(_h+5) - if _w > _max_width: - _max_width = _w - - svg = SVG() - _w = _x+_max_width+25 - if _w < _min_width: - _w = _min_width - self.palette_sprs[n] = Sprite(self.sprite_list, 0, ICON_SIZE, - svg_str_to_pixbuf(svg.palette(_w, PALETTE_HEIGHT))) - self.palette_sprs[n].type = 'category' - self.palette_sprs[n].set_layer(CATEGORY_LAYER) - else: - for blk in self.palettes[n]: - blk.spr.set_layer(CATEGORY_LAYER) + self._layout_palette(n) + for blk in self.palettes[n]: + blk.spr.set_layer(CATEGORY_LAYER) + + + def _layout_palette(self, n): + _x, _y, _max = 5, ICON_SIZE+5, 0 + if self.palette_orientation == 0: + for i in range(len(PALETTES[n])): + _w, _h = self.palettes[n][i].spr.get_dimensions() + if _y+_h > PALETTE_HEIGHT+ICON_SIZE: + _y = ICON_SIZE+5 + _x += int(_max+5) + _max = 0 + self.palettes[n][i].spr.move((int(_x), int(_y))) + _y += int(_h+5) + if _w > _max: + _max = _w + svg = SVG() + _w = _x+_max+25 + if self.palette_sprs[n][self.palette_orientation] is None: + self.palette_sprs[n][self.palette_orientation] =\ + Sprite(self.sprite_list, 0, ICON_SIZE, + svg_str_to_pixbuf(svg.palette(_w, PALETTE_HEIGHT))) + else: # TODO: center horizontally + for i in range(len(PALETTES[n])): + _w, _h = self.palettes[n][i].spr.get_dimensions() + if _x+_w > PALETTE_WIDTH: + _y += int(_max+5) + _x = 5 + _max = 0 + self.palettes[n][i].spr.move((int(_x), int(_y))) + _x += int(_w+5) + if _h > _max: + _max = _h + svg = SVG() + _h = _y+_max+5 + if self.palette_sprs[n][self.palette_orientation] is None: + self.palette_sprs[n][self.palette_orientation] =\ + Sprite(self.sprite_list, 0, ICON_SIZE, + svg_str_to_pixbuf(svg.palette(PALETTE_WIDTH, _h))) + self.palette_sprs[n][self.palette_orientation].type = 'category' + self.palette_sprs[n][self.palette_orientation].set_layer( + CATEGORY_LAYER) """ Select a category. @@ -842,6 +880,14 @@ class TurtleArtWindow(): r,g,b,a = spr.get_pixel((x, y)) if (r == 255 and g == 0) or g == 255: self._hide_palette() + elif spr.type == 'palette': + self.palette_orientation = 1-self.palette_orientation + self.palette_button[self.palette_orientation].set_layer( + TAB_LAYER) + self.palette_button[1-self.palette_orientation].set_layer( + HIDE_LAYER) + self._layout_palette(self.selected_palette) + self.show_toolbar_palette(self.selected_palette) return True """ @@ -1060,7 +1106,10 @@ class TurtleArtWindow(): else: blk.spr.set_image(self.media_shapes['descriptionon'], 1, 37, 6) - blk.values[0] = dsobject.object_id + if len(blk.values)>0: + blk.values[0] = dsobject.object_id + else: + blk.values.append(dsobject.object_id) dsobject.destroy() finally: chooser.destroy() @@ -1438,6 +1487,7 @@ class TurtleArtWindow(): values = [] if OLD_NAMES.has_key(btype): + print "%s -> %s" % (btype, OLD_NAMES[btype]) btype = OLD_NAMES[btype] blk = Block(self.block_list, self.sprite_list, @@ -1551,8 +1601,14 @@ class TurtleArtWindow(): for i, b in enumerate(self._just_blocks()): b.id = i for b in self._just_blocks(): + if b.type is not 'block': + continue if b.name in CONTENT_BLOCKS: - name = (b.name, b.values[0]) + if len(b.values)>0: + name = (b.name, b.values[0]) + else: + name = (b.name) + print "content block %s had no associated value" % (b.name) elif b.name in EXPANDABLE: ex, ey = b.get_expand_x_y() if ex > 0: |