Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjjposner <jjposner@optimum.net>2009-09-22 18:37:55 (GMT)
committer jjposner <jjposner@optimum.net>2009-09-22 18:37:55 (GMT)
commit5e9cfe3bf4e5f6d2a843c3b30a36d5efad3bea9a (patch)
tree1d177dee7f4785e17aa2506752caf71306d7d589
parent2eb335380e368b2ea39bda921ee2c37ebb3066e2 (diff)
HelpWindow --> HelpPanel / background colors
Replace top-level HelpWindow with a HelpPanel (gtk.Frame) that swaps with the BlockPanel. The "Help" button now toggles between "Show Help" and "Hide Help". BlockPanel no longer has background color set. AnswerLabel background color and implementation tweaks.
-rw-r--r--[-rwxr-xr-x]BlockHeadActivity.py131
-rw-r--r--activity/activity.info2
2 files changed, 89 insertions, 44 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)
+
diff --git a/activity/activity.info b/activity/activity.info
index c683c53..77f1b27 100644
--- a/activity/activity.info
+++ b/activity/activity.info
@@ -3,6 +3,6 @@ name = BlockHead
bundle_id = org.laptop.BlockHeadActivity
class = BlockHeadActivity.BlockHeadActivity
icon = activity-blockhead
-activity_version = 1
+activity_version = 6
host_version = 1
show_launcher = yes