Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/TurtleArt/tapalette.py
diff options
context:
space:
mode:
Diffstat (limited to 'TurtleArt/tapalette.py')
-rw-r--r--TurtleArt/tapalette.py114
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