Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/BlockHeadActivity.py
diff options
context:
space:
mode:
Diffstat (limited to 'BlockHeadActivity.py')
-rw-r--r--[-rwxr-xr-x]BlockHeadActivity.py131
1 files changed, 88 insertions, 43 deletions
diff --git a/BlockHeadActivity.py b/BlockHeadActivity.py
index 69152b2..fed9a94 100755..100644
--- a/BlockHeadActivity.py
+++ b/BlockHeadActivity.py
@@ -22,8 +22,8 @@ add or subtract two multiple-digit numbers,
with number base <= 10
"""
-__date__ = '10-Sep-2009'
-__version__ = 2076
+__date__ = '22-Sep-2009'
+__version__ = 2081
# set to True to run as an OLPC/Sugar "activity"
# set to False to run as a standard Python program
@@ -52,7 +52,7 @@ class P():
DEBUG = False
# show help button and help window?
- HELP_ENABLE = False if SUGAR_ACTIVITY else True
+ HELP_ENABLE = True
# show exit button?
EXIT_ENABLE = False if SUGAR_ACTIVITY else True
@@ -143,14 +143,14 @@ class P():
'answer': ["Answer", None],
}
-class HelpWindow(gtk.Window):
+class HelpPanel(gtk.Frame):
"""
window to display help text for ADD mode or SUB mode
"""
- WID = 470
- HGT = 250
+ HELP_WID = 400
+ HELP_HGT = 275
FONT_STR = "Sans Bold 11"
- BG_COLOR_STR = '#EEEAFA'
+ BG_COLOR_STR = '#FFEA44'
HEAD_COLOR_STR = 'red'
# help texts
@@ -169,56 +169,73 @@ Click the "-" operator between the numbers to change it to "+".
"""
def __init__(self):
- gtk.Window.__init__(self)
- self.set_title("BlockHead Help")
- self.set_transient_for(MainWin)
- self.connect('destroy', lambda _: self.Cleanup())
- self.set_size_request(self.WID, self.HGT)
- self.set_position(gtk.WIN_POS_CENTER)
+ gtk.Frame.__init__(self)
+ self.set_shadow_type(gtk.SHADOW_NONE)
+
+ # set overall size from BlockPanel
+ _, _, wid, hgt = Bpnl.canv.get_allocation()
+ self.set_size_request(wid, hgt)
# buffer
self.tbuf = gtk.TextBuffer()
- # view
+ # view -- will appear as box within overall panel
tv = gtk.TextView(self.tbuf)
tv.modify_base(gtk.STATE_NORMAL, tv.get_colormap().alloc_color(self.BG_COLOR_STR))
- tv.set_left_margin(10)
+ tv.set_left_margin(20)
+ tv.set_right_margin(20)
tv.set_pixels_above_lines(10)
tv.set_wrap_mode(gtk.WRAP_WORD)
tv.set_cursor_visible(False)
- self.add(tv)
+ tv.set_size_request(self.HELP_WID, self.HELP_HGT)
+
+ algn = gtk.Alignment(0.5, 0.5)
+ self.add(algn)
+ algn.add(tv)
# format tags
self.heading_tag = self.tbuf.create_tag(None, font=self.FONT_STR, foreground=self.HEAD_COLOR_STR)
self.text_tag = self.tbuf.create_tag(None, font=self.FONT_STR)
- def Update(self):
+ def Update(self, change_sign):
"""
get rid of old text, display new text
+
+ change_sign flag indicates whether this method was invoked by a sign-change,
+ instead of by pressing the Help button
"""
+ if Cpnl.help_state == Cpnl.HELP_OFF:
+ return
+
help_text = self.HELP_ADD if Mode == P.ADD_MODE else self.HELP_SUB
self.tbuf.set_text(help_text)
+ # iterators (assumtion: first text line is heading)
start = self.tbuf.get_start_iter()
end = self.tbuf.get_end_iter()
- # heading is first text line
end_of_hd = self.tbuf.get_iter_at_offset(help_text.index("\n"))
+ # apply fonts
self.tbuf.apply_tag(self.heading_tag, start, end_of_hd)
self.tbuf.apply_tag(self.text_tag, end_of_hd, end)
- # show help, but main window always gets focus back
- self.show_all()
- MainWin.present()
+ # display HelpPanel
+ if change_sign:
+ # HelpPanel is already displayed
+ pass
+ else:
+ self.show_all()
+ vb.pack_start(self, expand=True, fill=True)
+ vb.reorder_child(self, 0)
- def Cleanup(self):
+ def Remove(self):
"""
- remove help window
+ remove HelpPanel
"""
- global HelpWin
+ global Hpnl
self.destroy()
- HelpWin = None
+ Hpnl = None
class AnswerLabel(gtk.EventBox):
"""
@@ -227,7 +244,7 @@ class AnswerLabel(gtk.EventBox):
# standard bg color (in NORMAL state), to make label seem transparent
# value is gtk.gdk.Color
- std_bgcolor = tuple(gtk.Fixed().get_style().bg)[gtk.STATE_NORMAL]
+ std_bgcolor = tuple(gtk.Frame().get_style().bg)[gtk.STATE_NORMAL]
def __init__(self):
gtk.EventBox.__init__(self)
@@ -242,16 +259,17 @@ class AnswerLabel(gtk.EventBox):
"""
empty the label
"""
- lab = self.child
- lab.set_text("")
- SetBgColor(self, self.std_bgcolor)
+ self.set_text("")
def set_text(self, textstr):
"""
like gtk.Label.set_text()
"""
self.child.set_text(textstr)
- SetBgColor(self, P.ANSW_COLOR_STR)
+ if textstr:
+ SetBgColor(self, P.ANSW_COLOR_STR)
+ else:
+ SetBgColor(self, self.std_bgcolor)
def set_sensitive(self, arg):
"""
@@ -282,8 +300,11 @@ class CtrlPanel(gtk.Frame):
# offsets into entries/labels lists
N1, N2, ANS = range(3)
+ HELP_OFF, HELP_ON = 0, 1
+
def __init__(self):
gtk.Frame.__init__(self)
+ self.help_state = self.HELP_OFF
###
### create control widgets
@@ -327,7 +348,7 @@ class CtrlPanel(gtk.Frame):
else:
del self.ctrlbtns[self.EXIT]
if P.HELP_ENABLE:
- self.ctrlbtns[self.HELP] = gtk.Button("Help")
+ self.ctrlbtns[self.HELP] = gtk.Button("Show Help")
self.ctrlbtns[self.HELP].connect("clicked", self.HelpCmd)
else:
del self.ctrlbtns[self.HELP]
@@ -349,6 +370,7 @@ class CtrlPanel(gtk.Frame):
SA, COL_1, SB, COL_OP, SC, COL_2, SD, COL_EQ, SE, COL_ANS, SF = range(11)
overall_box = gtk.HBox()
+ overall_box.set_border_width(3)
self.cols = []
for i in range(11):
onecol = gtk.VBox()
@@ -407,7 +429,7 @@ class CtrlPanel(gtk.Frame):
ctrlbtns_box.pack_start(btn)
# ... gtk.Alignment keeps buttons from filling vertical space
- buttons_box_algn = gtk.Alignment(0.5, 0.5)
+ buttons_box_algn = gtk.Alignment(1.0, 0.5)
buttons_box_algn.add(ctrlbtns_box)
overall_box.pack_end(buttons_box_algn, padding=5)
@@ -428,22 +450,41 @@ class CtrlPanel(gtk.Frame):
InitializeMode()
- if HelpWin:
- HelpWin.Update()
+ if Hpnl:
+ Hpnl.Update(change_sign=True)
# might need to enable/disable "Draw Blocks" button
self.ValidateInput(None, None)
def HelpCmd(self, _btn="not used"):
"""
- display help text in top-level window
+ display or hide help text
"""
- global HelpWin
+ global Hpnl
+
+ if self.help_state == self.HELP_OFF:
+ # adjust state variable, help button
+ self.help_state = self.HELP_ON
+ Cpnl.ctrlbtns[Cpnl.HELP].set_label("Hide Help")
+ Cpnl.ctrlbtns[Cpnl.HELP].child.modify_font(P.FONT)
- if not HelpWin:
- HelpWin = HelpWindow()
+ # create HelpPanel, with same size as BlockPanel
+ Hpnl = HelpPanel()
- HelpWin.Update()
+ # new HelpPanel replaces BlockPanel onscreen
+ vb.remove(Bpnl.canv)
+ Hpnl.Update(change_sign=False)
+
+ elif self.help_state == self.HELP_ON:
+ # adjust state variable, help button
+ self.help_state = self.HELP_OFF
+ Cpnl.ctrlbtns[Cpnl.HELP].set_label("Show Help")
+ Cpnl.ctrlbtns[Cpnl.HELP].child.modify_font(P.FONT)
+
+ # remove HelpPanel, restore BlockPanel
+ Hpnl.Remove()
+ vb.pack_start(Bpnl.canv, expand=True, fill=True)
+ vb.reorder_child(Bpnl.canv, 0)
def NewCmd(self, _btn="not used"):
"""
@@ -1330,6 +1371,7 @@ def SetBgColor(widget, colorstr):
set background color of a widget
"""
widget.modify_bg(gtk.STATE_NORMAL, widget.get_colormap().alloc_color(colorstr))
+ widget.modify_bg(gtk.STATE_INSENSITIVE, widget.get_colormap().alloc_color(colorstr))
def SetLabelColor(widget, colorstr):
"""
@@ -1539,12 +1581,11 @@ mytype = activity.Activity if SUGAR_ACTIVITY else object
class BlockHeadActivity(mytype):
def __init__(self, handle=None):
- global Mode, HelpWin, MyDrawable, Pix, MainWin, Bpnl, Cpnl
+ global Mode, MyDrawable, Pix, MainWin, Bpnl, Cpnl, Hpnl, vb
if SUGAR_ACTIVITY:
activity.Activity.__init__(self, handle)
Mode = P.ADD_MODE
- HelpWin = None
# we need an invisible Drawable, for use by SetDisplayStringWidths()
# also, CreateBlockImage() needs it to establish pixel-depth of a Pixmap
@@ -1578,9 +1619,9 @@ class BlockHeadActivity(mytype):
# canvas where columns/blocks appear, at top
Bpnl = BlockPanel(111, 2*P.BASE*P.UNIT_HGT + P.WINDOW_HGT_ADJ)
- # ?? why is next statement necessary for correct block-position calculations?
+ # next statement is necessary for correct block-position calculations
Bpnl.canv.set_has_window(True)
- SetBgColor(Bpnl.canv, P.CANV_COLOR_STR)
+ #SetBgColor(Bpnl.canv, P.CANV_COLOR_STR)
vb.pack_start(Bpnl.canv, expand=True, fill=True)
# control panel, at bottom
@@ -1588,6 +1629,9 @@ class BlockHeadActivity(mytype):
Cpnl.NewCmd(None)
vb.pack_start(Cpnl, expand=True, fill=True)
+ # HelpPanel is not created until user clicks Help button
+ Hpnl = None
+
# go
MainWin.show_all()
@@ -1601,3 +1645,4 @@ if __name__ == "__main__":
BlockHeadActivity()
gtk.main()
sys.exit(0)
+