# Copyright (C) 2009, Tutorius.org # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA import gtk, gtk.gdk from sugar.tutorius.filters import EventFilter from sugar.tutorius.properties import TStringProperty, TArrayProperty from sugar.tutorius import overlayer from sugar import profile xo_line_color_profile = profile.get_color().get_stroke_color() xo_fill_color_profile = profile.get_color().get_fill_color() class MessageButtonNext(EventFilter): """ MessageButtonNext """ # set message message = TStringProperty("Message") # create the position as an array of fixed-size 2 position = TArrayProperty((0,0), 2, 2) # set padding padding = 40 def __init__(self, message=None, position=None, center_pos=False): """Constructor. @param message message to display @param position message position """ super(MessageButtonNext,self).__init__() if position: self.position = position else: # TODO: to be removed when creator supports editing properties on events self.position = (300, 200) if message: self.message = message self.overlay = None self.msgnext = None def install_handlers(self, callback, **kwargs): """install_handlers creates the message button next and shows it""" super(MessageButtonNext,self).install_handlers(callback, **kwargs) if not "activity" in kwargs: raise TypeError("activity argument is Mandatory") # get activity instance self.activity = kwargs["activity"] # get or inject overlayer self.overlay = self.activity._overlayer if not self.overlay: self.overlay = self.activity._overlayer btntext = "NEXT" self.msgnext = MsgNext(text=self.message,btntext=btntext) self.msgnext._btnnext.connect("clicked", self.btnnext_clicked) # add space around minimum need size wid_width, wid_height = self.msgnext.size_request() self.msgnext.set_size_request(wid_width+MessageButtonNext.padding, wid_height+MessageButtonNext.padding) # set position x, y = self.position self.msgnext.show() self.overlay.put(self.msgnext, x, y) self.overlay.queue_draw() def remove_handlers(self): """remove handler removes the message button next""" super(MessageButtonNext,self).remove_handlers() if self.msgnext: self.msgnext.destroy() self.msgnext = None def btnnext_clicked(self, widget): self.do_callback() __event__ = { "name" : "MessageButtonNext", "display_name" : "Message button next", "icon" : "message-bubble", "class" : MessageButtonNext, "mandatory_props" : ["message"] } class MsgNext(gtk.EventBox): """ Create an EventBox """ def __init__(self, text, btntext): """ Creates an Event Box """ gtk.EventBox.__init__(self) self.message = text self.btnmessage = btntext self.set_visible_window(True) # create a vbox self.box = gtk.VBox() # create a label (set message to display) self._label = gtk.Label() self._text = "%s" % self.message self._label.set_markup(self._text) self._label.set_line_wrap(True) self._colortext = gtk.gdk.color_parse("white") self._label.modify_fg(gtk.STATE_NORMAL, self._colortext) self._label.modify_fg(gtk.STATE_PRELIGHT, self._colortext) self._label.modify_fg(gtk.STATE_ACTIVE, self._colortext) self._label.modify_fg(gtk.STATE_INSENSITIVE, self._colortext) self._label.show() # create a hbox (holding button) self._hbox = gtk.HBox() # create a button inside hbox self._btnnext = gtk.Button(self.btnmessage) self._colorbtn = gtk.gdk.color_parse(xo_fill_color_profile) self._btnnext.modify_bg(gtk.STATE_NORMAL, self._colorbtn) self._btnnext.modify_bg(gtk.STATE_PRELIGHT, self._colorbtn) self._btnnext.modify_bg(gtk.STATE_ACTIVE, self._colorbtn) self._btnnext.show() self._hbox.pack_end(self._btnnext, expand=False) self._hbox.show() self.box.pack_start(self._label, expand=True) self.box.pack_start(self._hbox, expand=True) self.box.show() self.add(self.box) self._colormsgnext = gtk.gdk.color_parse(xo_fill_color_profile) self.modify_bg(gtk.STATE_NORMAL, self._colormsgnext)