From 22c05cb156e0b308b8186676a976d85184f5c0a9 Mon Sep 17 00:00:00 2001 From: Bruno Coudoin Date: Sat, 07 Nov 2009 20:56:43 +0000 Subject: iniital support for text items. --- diff --git a/src/anim-activity/AnimItem.py b/src/anim-activity/AnimItem.py index 48e4de9..2a444e3 100644 --- a/src/anim-activity/AnimItem.py +++ b/src/anim-activity/AnimItem.py @@ -26,6 +26,7 @@ import gtk import gtk.gdk import math import cairo +import pango import sys class AnimItem: @@ -967,3 +968,119 @@ class AnimItemPixmap(AnimItem): # Unsupported pass + +# +# The Text +# +class AnimItemText(AnimItem): + + def __init__(self, anim, center_x, center_y, + color_stroke): + AnimItem.__init__(self, anim) + center_x, center_y = self.snap_to_grid(center_x, center_y) + + self.item = \ + goocanvas.Text( + parent = self.rootitem, + x = center_x, + y = center_y, + text=("?"), + fill_color_rgba=color_stroke, + anchor = gtk.ANCHOR_CENTER, + alignment = pango.ALIGN_CENTER, + ) + + AnimItem.init_item(self) + self.last_commit = None + + + # This is called when an animation file is loaded + def restore(self, anim_): + AnimItem.restore(self, anim_) + self.item = \ + goocanvas.Text( + parent = self.rootitem + ) + AnimItem.init_item(self) + + def set_bounds(self, p1, p2): + (x1, y1, x2, y2) = self.snap_obj_to_grid(p1, p2) + center_x = ( x2 - x1 )/ 2 + center_y = ( y2 - y1) / 2 + self.item.set_properties(x = center_x, + y = center_y) + + def get_x1y1(self): + bounds = self.item.get_bounds() + return(bounds.x1, bounds.y1) + + def get_x2y1(self): + bounds = self.item.get_bounds() + return(bounds.x2, bounds.y1) + + def get_x2y2(self): + bounds = self.item.get_bounds() + return(bounds.x2, bounds.y2) + + def get_x1y2(self): + bounds = self.item.get_bounds() + return(bounds.x1, bounds.y2) + + # Return the list of properties that have to be saved for + # this object + def get_properties(self): + return('x', 'y', + 'fill_color_rgba', + 'text') + + def fill(self, fill, stroke): + gcompris.sound.play_ogg("sounds/paint1.wav") + self.item.set_properties(fill_color_rgba = stroke) + + def key_press(self, keyval, commit_str, preedit_str): + # + # I suppose codec is the stdin one. + # + codec = sys.stdin.encoding + textItem = self.item + if (not self.last_commit): + oldtext = textItem.get_property('text').decode('UTF-8') + else: + oldtext = self.last_commit + + if ((keyval == gtk.keysyms.BackSpace) or + (keyval == gtk.keysyms.Delete)): + if (len(oldtext) != 1): + newtext = oldtext[:-1] + else: + newtext = u'?' + self.last_commit = newtext + + elif (keyval == gtk.keysyms.Return): + newtext = oldtext + '\n' + self.last_commit = newtext + + else: + if ((oldtext[:1] == u'?') and (len(oldtext)==1)): + oldtext = u' ' + oldtext = oldtext.strip() + + if (commit_str): + str = commit_str + self.last_commit = oldtext + str + if (preedit_str): + str = preedit_str + self.last_commit = oldtext + + if (len(oldtext) < 100): + newtext = oldtext + str + else: + newtext = oldtext + + textItem.set_properties(text = newtext.encode('UTF-8')) + + print "Text item extend: " + a = textItem.get_natural_extends() + print a + + diff --git a/src/anim-activity/anim.py b/src/anim-activity/anim.py index b6204aa..386e20e 100644 --- a/src/anim-activity/anim.py +++ b/src/anim-activity/anim.py @@ -103,8 +103,6 @@ class Gcompris_anim: self.file_type = ".gcanim" - self.MAX_TEXT_CHAR = 50 - # Part of UI : tools buttons # TOOL SELECTION self.tools = [ @@ -160,8 +158,6 @@ class Gcompris_anim: def start(self): - self.last_commit = None - # GCompris initialisation self.gcomprisBoard.level=1 self.gcomprisBoard.maxlevel=1 @@ -267,51 +263,17 @@ class Gcompris_anim: if (not self.selected): return False - if (self.selected.type_name() != "GooCanvasText"): - # Process shortcuts on non text items - if ((keyval == gtk.keysyms.BackSpace) or - (keyval == gtk.keysyms.Delete)): - self.selected.delete() + if (self.selected.type_name() == "GooCanvasText"): + self.selected.key_press(keyval, commit_str, preedit_str) return True - textItem = self.selected.get_child(0) - if (not self.last_commit): - oldtext = textItem.get_property('text').decode('UTF-8') - else: - oldtext = self.last_commit - + # Process shortcuts on non text items if ((keyval == gtk.keysyms.BackSpace) or (keyval == gtk.keysyms.Delete)): - if (len(oldtext) != 1): - newtext = oldtext[:-1] - else: - newtext = u'?' - self.last_commit = newtext - - elif (keyval == gtk.keysyms.Return): - newtext = oldtext + '\n' - self.last_commit = newtext - - else: - if ((oldtext[:1] == u'?') and (len(oldtext)==1)): - oldtext = u' ' - oldtext = oldtext.strip() - - if (commit_str): - str = commit_str - self.last_commit = oldtext + str - if (preedit_str): - str = ''+ preedit_str +'' - self.last_commit = oldtext - - if (len(oldtext) < self.MAX_TEXT_CHAR): - newtext = oldtext + str - else: - newtext = oldtext - - textItem.set_properties(text = newtext.encode('UTF-8')) + self.selected.delete() + return True - return True + return False # Display the tools def draw_tools(self): @@ -640,6 +602,10 @@ class Gcompris_anim: self.created_object = AnimItemLine(self, event.x, event.y, None, self.color.stroke, 7) + elif self.tools[self.current_tool][0] == "TEXT": + self.created_object = AnimItemText(self, + event.x, event.y, + self.color.stroke) if self.created_object: self.created_object.create_item_event(item, @@ -648,6 +614,11 @@ class Gcompris_anim: # We keep all object in a unique list self.animlist.append(self.created_object) + # Mark it as selected so we can write in it without + # having to make a real selection and keys shortcuts + # works + self.selected = self.created_object + # # MOTION EVENT # ------------ -- cgit v0.9.1