Draw sections buttons as tabs.

portnov [2008-08-23 12:08:18]
Draw sections buttons as tabs.
Filename
qwerty.py
diff --git a/qwerty.py b/qwerty.py
index 2884f75..5e63e45 100755
--- a/qwerty.py
+++ b/qwerty.py
@@ -24,7 +24,7 @@ KEYS = [ "QWERTYUIOP",
          "ZXCVBNM" ]
 ALPHABET = KEYS[0] + KEYS[1] + KEYS[2]

-DIGITS = "0123456789"
+DIGITS = "1234567890"

 BUTTON_BORDER = (0.7,0.7,0.7)
 BUTTON_BORDER_ACTIVE = (0,0,0)
@@ -86,35 +86,38 @@ class SuperButton(gtk.DrawingArea):
         cr.paint()

     def draw_button(self,cr):
+        if self.running:
+            cr.set_source_rgb(*BUTTON_FILL_RUNNING)
+        else:
+            cr.set_source_rgb(*BUTTON_FILL)
         cr.rectangle(PADDING,PADDING,self.width-2*PADDING,self.height-2*PADDING)
         cr.fill()
         cr.set_source_rgb(*self.fg)
         cr.rectangle(PADDING,PADDING,self.width-2*PADDING,self.height-2*PADDING)
         cr.stroke()

+    def draw_label(self,cr):
+        if self.active:
+            cr.set_source_rgb(*BUTTON_BORDER_ACTIVE)
+            cr.move_to(20,30)
+            cr.set_font_size(16)
+            cr.show_text(self.label)
+
     def on_expose(self,widget,event):
         x,y,self.width,self.height,b = widget.window.get_geometry()
         cr = widget.window.cairo_create()

-        if self.running:
-            cr.set_source_rgb(*BUTTON_FILL_RUNNING)
-        else:
-            cr.set_source_rgb(*BUTTON_FILL)
         self.draw_button(cr)

         if self.active:
             cr.set_source_rgb(*BUTTON_BORDER_ACTIVE)

+        # Draw key
         cr.move_to(20, self.height-50)
         cr.set_font_size(40)
         cr.show_text(self.key)

-        if not self.active:
-            return
-
-        cr.move_to(20,30)
-        cr.set_font_size(16)
-        cr.show_text(self.label)
+        self.draw_label(cr)

         if self.icon:
             self.draw_icon(cr)
@@ -143,11 +146,37 @@ class SuperButton(gtk.DrawingArea):
         self.queue_draw()

     def clear(self):
+        self.icon = None
         self.active = False
         self.running = False
         self.cls = None
         self.queue_draw()

+class SectionButton(SuperButton):
+    def draw_button(self,cr):
+        cr.set_source_rgb(*BUTTON_BORDER)
+        cr.move_to(0, self.height-2*PADDING)
+        if self.active:
+            cr.line_to(PADDING,PADDING)
+            cr.line_to(self.width-PADDING, PADDING)
+            cr.line_to(self.width-PADDING, self.height-2*PADDING)
+            cr.line_to(self.width, self.height-2*PADDING)
+        else:
+            cr.line_to(self.width, self.height-2*PADDING)
+            cr.move_to(PADDING, self.height-2*PADDING)
+            cr.line_to(PADDING, PADDING)
+            cr.line_to(self.width-PADDING, PADDING)
+            cr.line_to(self.width-PADDING, self.height-2*PADDING)
+        cr.stroke()
+
+    def draw_label(self,cr):
+        if self.label:
+            cr.set_source_rgb(*BUTTON_BORDER_ACTIVE)
+            cr.move_to(20,30)
+            cr.set_font_size(16)
+            cr.show_text(self.label)
+
+
 class Section(object):
     def __init__(self,title):
         self.title = title
@@ -293,7 +322,7 @@ class GUI(object):
             self.buttons[c].show()

         for c in DIGITS:
-            btn = SuperButton(c)
+            btn = SectionButton(c)
             btn.show()
             self.sbuttons.append(btn)

@@ -504,6 +533,14 @@ class GUI(object):

         id = (int(k)-1)%10
         defsection = id
+
+        for b in self.sbuttons:
+            b.active = False
+
+        self.sbuttons[id].active = True
+
+        for b in self.sbuttons:
+            b.queue_draw()

         self.S = sections[id]
         for b in self.buttons:
ViewGit