diff options
Diffstat (limited to 'TurtleArt/tapalette.py')
-rw-r--r-- | TurtleArt/tapalette.py | 114 |
1 files changed, 50 insertions, 64 deletions
diff --git a/TurtleArt/tapalette.py b/TurtleArt/tapalette.py index da80386..ad96103 100644 --- a/TurtleArt/tapalette.py +++ b/TurtleArt/tapalette.py @@ -36,6 +36,7 @@ content_blocks = ['number', 'string', 'description', 'audio', 'video', hidden_proto_blocks = [] # proto blocks that are (at least initially) hidden value_blocks = [] # blocks whose labels are updated get added here special_block_colors = {} +string_or_number_args = [] block_styles = {'basic-style': [], 'blank-style': [], 'basic-style-head': [], @@ -86,6 +87,8 @@ from sugar.graphics import style from taconstants import EXPANDABLE_STYLE from tautils import debug_output +from util.helpbutton import add_section, add_paragraph + from gettext import gettext as _ help_strings = { @@ -101,26 +104,26 @@ class Palette(): self._name = name self._special_name = _(name) self._colors = colors - self._help = None self._max_text_width = int(gtk.gdk.screen_width() / 3) - 20 # Prepare a vbox for the help palette - if not (self._name in help_palettes): + if not self._name in help_palettes: self._help_box = gtk.VBox() self._help_box.set_homogeneous(False) help_palettes[self._name] = self._help_box + help_windows[self._name] = gtk.ScrolledWindow() + help_windows[self._name].set_size_request( + int(gtk.gdk.screen_width() / 3), + gtk.gdk.screen_height() - style.GRID_CELL_SIZE * 3) + help_windows[self._name].set_policy( + gtk.POLICY_NEVER, gtk.POLICY_AUTOMATIC) + help_windows[self._name].add_with_viewport( + help_palettes[self._name]) + help_palettes[self._name].show() + self._help = None else: self._help_box = help_palettes[self._name] - - help_windows[self._name] = gtk.ScrolledWindow() - help_windows[self._name].set_size_request( - int(gtk.gdk.screen_width() / 3), - gtk.gdk.screen_height() - style.GRID_CELL_SIZE * 3) - help_windows[self._name].set_policy( - gtk.POLICY_NEVER, gtk.POLICY_AUTOMATIC) - help_windows[self._name].add_with_viewport( - help_palettes[self._name]) - help_palettes[self._name].show() + self._help = 'deja vu' def add_palette(self, position=None): if self._name is None: @@ -141,7 +144,6 @@ class Palette(): palette_blocks.insert(i, []) block_colors.insert(i, self._colors) else: - # debug_output('Palette %s already defined' % (self._name)) return # Special name entry is needed for help hover mechanism @@ -151,48 +153,11 @@ class Palette(): else: help_strings[self._name] = '' - def add_section(self, section_text, icon=None): - ''' Add a section to the help palette. From helpbutton.py by - Gonzalo Odiard ''' - hbox = gtk.HBox() - label = gtk.Label() - label.set_use_markup(True) - label.set_markup('<b>%s</b>' % section_text) - label.set_line_wrap(True) - label.set_size_request(self._max_text_width, -1) - hbox.add(label) - if icon is not None: - _icon = Icon(icon_name=icon) - hbox.add(_icon) - label.set_size_request(self._max_text_width - 20, -1) - else: - label.set_size_request(self._max_text_width, -1) - - hbox.show_all() - self._help_box.pack_start(hbox, False, False, padding=5) - - def add_paragraph(self, text, icon=None): - ''' Add an entry to the help palette. From helpbutton.py by - Gonzalo Odiard ''' - hbox = gtk.HBox() - label = gtk.Label(text) - label.set_justify(gtk.JUSTIFY_LEFT) - label.set_line_wrap(True) - hbox.add(label) - if icon is not None: - _icon = Icon(icon_name=icon) - hbox.add(_icon) - label.set_size_request(self._max_text_width - 20, -1) - else: - label.set_size_request(self._max_text_width, -1) - - hbox.show_all() - self._help_box.pack_start(hbox, False, False, padding=5) - def set_help(self, help): - self._help = help - if hasattr(self, '_help_box'): - self.add_section(self._help, icon=self._name + 'off') + if self._help is None: + self._help = help + if hasattr(self, '_help_box'): + add_section(self._help_box, self._help, icon=self._name + 'off') def set_special_name(self, name): self._special_name = name @@ -200,7 +165,8 @@ class Palette(): def add_block(self, block_name, style='basic-block', label=None, special_name=None, default=None, prim_name=None, help_string=None, value_block=False, content_block=False, - logo_command=None, hidden=False, colors=None): + logo_command=None, hidden=False, colors=None, + string_or_number=False): """ Add a new block to the palette """ block = Block(block_name) block.set_style(style) @@ -220,15 +186,23 @@ class Palette(): if help_string is not None: block.set_help(help_string) if not hidden: + first_arg = None if special_name is None: if type(label) == list: - self.add_paragraph('%s: %s' % (label[0], help_string)) + first_arg = label[0] else: - self.add_paragraph('%s: %s' % (label, help_string)) + first_arg = label + else: + first_arg = special_name + if first_arg is None or first_arg == '' or first_arg == ' ': + add_paragraph(self._help_box, '%s' % (help_string)) else: - self.add_paragraph('%s: %s' % (special_name, help_string)) + add_paragraph(self._help_box, '%s: %s' % (first_arg, + help_string)) if colors is not None: block.set_colors(colors) + if string_or_number: + block.set_string_or_number() block.set_value_block(value_block) block.set_content_block(content_block) block.set_palette(self._name) @@ -236,6 +210,7 @@ class Palette(): block.set_hidden() block.add_block() + def make_palette(palette_name, colors=None, help_string=None, position=None): """ Palette helper function """ if colors is None: @@ -279,6 +254,7 @@ class Block(): self._content_block = False self._colors = None self._hidden = False + self._string_or_number = False def add_block(self, position=None): if self._name is None: @@ -301,13 +277,17 @@ class Block(): if self._palette is not None: i = palette_names.index(self._palette) - if position is not None and type(position) is int and \ - position < len(palette_blocks[i]): - palette_blocks[i].insert(position, self._name) + if self._name in palette_blocks[i]: + debug_output('%s already in palette %s, skipping...' % ( + self._name, self._palette)) else: - palette_blocks[i].append(self._name) - if position is not None: - debug_output('Ignoring position (%s)' % (str(position))) + if position is not None and type(position) is int and \ + position < len(palette_blocks[i]): + palette_blocks[i].insert(position, self._name) + else: + palette_blocks[i].append(self._name) + if position is not None: + debug_output('Ignoring position (%s)' % (str(position))) if self._help is not None: help_strings[self._name] = self._help @@ -338,6 +318,9 @@ class Block(): if self._colors is not None: special_block_colors[self._name] = self._colors + if self._string_or_number: + string_or_number_args.append(self._name) + if self._hidden: hidden_proto_blocks.append(self._name) @@ -347,6 +330,9 @@ class Block(): def set_colors(self, colors=None): self._colors = colors + def set_string_or_number(self, flag=True): + self._string_or_number = flag + def set_value_block(self, value=True): self._value_block = value |