diff --git a/qwerty.py b/qwerty.py
index 5da46fc..687ced0 100755
--- a/qwerty.py
+++ b/qwerty.py
@@ -18,6 +18,7 @@ SECTION = 1
KEY = 2
PADDING = 4
+LINEHEIGHT = 1.2
KEYS = [ "QWERTYUIOP",
"ASDFGHJKL",
@@ -44,11 +45,12 @@ def find_icon(name):
return p
class SuperButton(gtk.DrawingArea):
- def __init__(self,key, label=None, icon=None):
+ def __init__(self,key, label=None, desc=None, icon=None):
gtk.DrawingArea.__init__(self)
self.key = key
self.label = label
+ self.desc = desc
self.active = False
self.running = False
self.cls = None
@@ -67,6 +69,33 @@ class SuperButton(gtk.DrawingArea):
self.fg = BUTTON_BORDER
+ def show_text_wrap(self,cr,x,y,fontsize,text):
+ def size(text):
+ xs,ys, w,h = cr.text_extents(text)[:4]
+ return w
+
+ cr.set_font_size(fontsize)
+ words = text.split()
+ s = u''
+ old = s
+ lines = []
+ for i,word in enumerate(words[:]):
+ if i:
+ s = s + ' ' + word
+ else:
+ s = word
+ o,n = size(old), size(s)
+ if o < self.width and n >= self.width:
+ lines.append(old)
+ s = word
+ else:
+ del words[0]
+ old = s
+ lines.append(old)
+ for i,line in enumerate(lines):
+ cr.move_to(x,y + fontsize*i*LINEHEIGHT)
+ cr.show_text(line)
+
def draw_icon(self,cr):
pb = gdk.pixbuf_new_from_file(self.icon)
@@ -103,6 +132,9 @@ class SuperButton(gtk.DrawingArea):
cr.set_font_size(16)
cr.show_text(self.label)
+ def draw_desc(self,cr):
+ self.show_text_wrap(cr,20,130, 14, self.desc)
+
def on_expose(self,widget,event):
x,y,self.width,self.height,b = widget.window.get_geometry()
cr = widget.window.cairo_create()
@@ -118,6 +150,8 @@ class SuperButton(gtk.DrawingArea):
cr.show_text(self.key)
self.draw_label(cr)
+ if self.desc:
+ self.draw_desc(cr)
if self.icon:
self.draw_icon(cr)
@@ -135,6 +169,10 @@ class SuperButton(gtk.DrawingArea):
self.label = label
self.queue_draw()
+ def set_desc(self,desc):
+ self.desc = desc
+ self.queue_draw()
+
def set_icon(self,icon):
self.active = True
self.icon = find_icon(icon)
@@ -232,9 +270,7 @@ def parse_config():
v = parse_line('Description',line)
if v:
- if context == SECTION:
- S.desc = v
- elif context == KEY:
+ if context == KEY:
K.desc = v
else:
raise SyntaxError, "Unexpected 'Description' key in config file"
@@ -296,6 +332,8 @@ def save_config():
write('Key', K.key)
write('Icon', K.icon)
write('Title', K.title)
+ if hasattr(K, 'desc'):
+ write('Description', K.desc)
if hasattr(K, 'cls'):
write('Class', K.cls)
write('Command', K.command)
@@ -552,6 +590,8 @@ class GUI(object):
K = self.S.keys[k]
btn = self.buttons[k]
btn.set_label(K.title)
+ if hasattr(K, 'desc'):
+ btn.set_desc(K.desc)
btn.set_icon(K.icon)
if hasattr(K,'cls'):
if K.cls in self.by_class: