Module pgbutt
Expand source code
#!/usr/bin/env python
# Drawing operations done here
from __future__ import absolute_import
import signal, os, time, sys, codecs
import gi
gi.require_version("Gtk", "3.0")
from gi.repository import Gtk
from gi.repository import Gdk
from gi.repository import GLib
from gi.repository import GObject
from gi.repository import Pango
from gi.repository import GObject
gi.require_version('PangoCairo', '1.0')
from gi.repository import PangoCairo
import cairo
from pgutils import *
class smallbutt(Gtk.EventBox):
__gsignals__ = {
#"activate": (GObject.SIGNAL_RUN_FIRST, GObject.TYPE_NONE, () ),
"pressed": (GObject.SIGNAL_RUN_FIRST, GObject.TYPE_NONE, () ),
}
def __init__(self, labx, eventx = None, tooltip = None, *args, **kwds):
super().__init__(*args, **kwds)
self.state = 0; self.stat2 = 0
self.labx = labx; self.orgtext = ""
self.accel = ""; self.agroup = None
self.mark = -1;
self.mnem = self.omnem = 0
self.lab = Gtk.Label.new_with_mnemonic(labx)
self.add(self.lab)
self.set_above_child(True)
self.arrow = Gdk.Cursor(Gdk.CursorType.ARROW)
self.hand = Gdk.Cursor(Gdk.CursorType.HAND1)
self.down = 0
cnt = 0;
# Process ACCEL Key
for aa in labx:
if aa == "_":
self.mark = cnt
else:
if self.mark != -1 and self.accel != "":
self.accel = aa
self.orgtext += aa
cnt += 1
#self.set_mnemonic_widget(self)
#self.set_use_underline(True)
if tooltip:
self.lab.set_tooltip_text(tooltip)
if eventx:
self.connect("pressed", eventx)
self.set_can_focus(True)
self.set_can_default(True)
self.set_sensitive(True)
font = "Sans 10"
self.override_font(Pango.FontDescription(font))
#self.set_alignment(0.5, 0.5)
#self.set_margin_left(0)
#self.set_margin_right(0)
#self.set_margin_top(0)
#self.set_margin_bottom(0)
self.layoutx = self.create_pango_layout("a")
self.layoutx.set_font_description(Pango.FontDescription(font))
self.layoutx.set_text(self.orgtext, self.mark)
(self.charx, self.chary) = self.layoutx.get_extents()
self.charx.width /= Pango.SCALE; self.charx.height /= Pango.SCALE;
self.chary.width /= Pango.SCALE; self.chary.height /= Pango.SCALE;
self.layout = self.create_pango_layout("a")
self.layout.set_font_description(Pango.FontDescription(font))
self.layout.set_text(self.orgtext, len(self.orgtext))
(pr, lr) = self.layout.get_extents()
self.ww = lr.width / Pango.SCALE; self.hh = lr.height / Pango.SCALE;
#print("ww", self.ww, "hh", self.hh)
self.set_size_request(self.ww, self.hh)
self.hand_cursor = Gdk.Cursor(Gdk.CursorType.HAND2)
self.set_events(Gdk.EventMask.ALL_EVENTS_MASK)
self.connect("enter_notify_event", self.enter_label)
self.connect("leave_notify_event", self.leave_label)
self.connect("mnemonic-activate", self.mactivate)
self.connect("button-release-event", self.buttrel)
self.connect("button-press-event", self.buttpress)
self.connect("key-release-event", self.keyrel)
self.connect("key-press-event", self.keypress)
self.show_all()
GLib.timeout_add(1000, self.stattime, self, 0)
def keyrel(self, *args):
#print("keyrel")
if args[1].keyval == Gdk.KEY_space or args[1].keyval == Gdk.KEY_Return :
self.down = 0
self.queue_draw()
self.emit('pressed')
def keypress(self, *args):
#print("keypress")
if args[1].keyval == Gdk.KEY_space or args[1].keyval == Gdk.KEY_Return :
self.down = 1
self.queue_draw()
def buttrel(self, *args):
#print("buttrel")
self.down = 0
self.queue_draw()
self.emit('pressed')
def buttpress(self, *args):
# print("buttpress")
self.down = 1
self.queue_draw()
def mactivate(self):
print("mactivate")
def stattime(self, arg2, arg3):
# Test if mnemonic key is down
kmap = Gdk.Keymap().get_default()
state = kmap.get_modifier_state()
#print("mods", state)
if state == Gdk.ModifierType.MOD1_MASK:
self.mnem = True
else:
self.mnem = False
if self.omnem != self.mnem:
self.omnem = self.mnem
#print("changed to", self.mnem)
self.queue_draw()
#GLib.timeout_add(1000, self.stattime, self, 0)
return True
def mactivate(self, *arg):
#print("mactivate", arg)
self.emit('pressed')
return True
def enter_label(self, arg, arg2):
#print("Enter")
self.get_window().set_cursor(self.hand_cursor)
self.stat2 = 1
self.queue_draw()
def leave_label(self, arg, arg2):
#print("Leave")
self.get_window().set_cursor()
self.stat2 = 0
self.queue_draw()
def do_draw (self, cr):
# paint background
if self.stat2:
bg_color2 = self.get_style_context().get_background_color(Gtk.StateFlags.NORMAL)
bg_color = Gdk.RGBA(.9, .9, .9)
else:
if 0: #self.has_focus():
bg_color = Gdk.RGBA(.75, .75, .75)
else:
bg_color = self.get_style_context().get_background_color(Gtk.StateFlags.NORMAL)
cr.set_source_rgba(*list(bg_color))
cr.rectangle(1,1, self.ww-1, self.hh-1)
cr.clip()
cr.paint()
if 0: #self.stat2:
fg_color = self.get_style_context().get_color(Gtk.StateFlags.SELECTED)
else:
fg_color = self.get_style_context().get_color(Gtk.StateFlags.NORMAL)
cr.set_source_rgba(*list(fg_color));
cr.move_to(0, 0)
PangoCairo.show_layout(cr, self.layout)
if self.down:
cr.move_to(1, 1)
PangoCairo.show_layout(cr, self.layout)
if self.mnem:
#print("corr", self.chary.width, self.chary.height)
cr.move_to( self.chary.width, self.chary.height-2)
cr.line_to( self.chary.width + 8, self.chary.height-2)
cr.stroke()
if self.has_focus():
#print("focus")
cr.set_dash([.5, .9])
cr.move_to( 1, 1)
cr.line_to( self.ww-1, 1)
cr.line_to( self.ww-1, self.hh-1)
cr.line_to( 1, self.hh-1)
cr.line_to( 1, 1)
cr.stroke()
# EOF
Classes
class smallbutt (labx, eventx=None, tooltip=None, *args, **kwds)
-
:Constructors:
::
EventBox(**properties) new() -> Gtk.Widget
Expand source code
class smallbutt(Gtk.EventBox): __gsignals__ = { #"activate": (GObject.SIGNAL_RUN_FIRST, GObject.TYPE_NONE, () ), "pressed": (GObject.SIGNAL_RUN_FIRST, GObject.TYPE_NONE, () ), } def __init__(self, labx, eventx = None, tooltip = None, *args, **kwds): super().__init__(*args, **kwds) self.state = 0; self.stat2 = 0 self.labx = labx; self.orgtext = "" self.accel = ""; self.agroup = None self.mark = -1; self.mnem = self.omnem = 0 self.lab = Gtk.Label.new_with_mnemonic(labx) self.add(self.lab) self.set_above_child(True) self.arrow = Gdk.Cursor(Gdk.CursorType.ARROW) self.hand = Gdk.Cursor(Gdk.CursorType.HAND1) self.down = 0 cnt = 0; # Process ACCEL Key for aa in labx: if aa == "_": self.mark = cnt else: if self.mark != -1 and self.accel != "": self.accel = aa self.orgtext += aa cnt += 1 #self.set_mnemonic_widget(self) #self.set_use_underline(True) if tooltip: self.lab.set_tooltip_text(tooltip) if eventx: self.connect("pressed", eventx) self.set_can_focus(True) self.set_can_default(True) self.set_sensitive(True) font = "Sans 10" self.override_font(Pango.FontDescription(font)) #self.set_alignment(0.5, 0.5) #self.set_margin_left(0) #self.set_margin_right(0) #self.set_margin_top(0) #self.set_margin_bottom(0) self.layoutx = self.create_pango_layout("a") self.layoutx.set_font_description(Pango.FontDescription(font)) self.layoutx.set_text(self.orgtext, self.mark) (self.charx, self.chary) = self.layoutx.get_extents() self.charx.width /= Pango.SCALE; self.charx.height /= Pango.SCALE; self.chary.width /= Pango.SCALE; self.chary.height /= Pango.SCALE; self.layout = self.create_pango_layout("a") self.layout.set_font_description(Pango.FontDescription(font)) self.layout.set_text(self.orgtext, len(self.orgtext)) (pr, lr) = self.layout.get_extents() self.ww = lr.width / Pango.SCALE; self.hh = lr.height / Pango.SCALE; #print("ww", self.ww, "hh", self.hh) self.set_size_request(self.ww, self.hh) self.hand_cursor = Gdk.Cursor(Gdk.CursorType.HAND2) self.set_events(Gdk.EventMask.ALL_EVENTS_MASK) self.connect("enter_notify_event", self.enter_label) self.connect("leave_notify_event", self.leave_label) self.connect("mnemonic-activate", self.mactivate) self.connect("button-release-event", self.buttrel) self.connect("button-press-event", self.buttpress) self.connect("key-release-event", self.keyrel) self.connect("key-press-event", self.keypress) self.show_all() GLib.timeout_add(1000, self.stattime, self, 0) def keyrel(self, *args): #print("keyrel") if args[1].keyval == Gdk.KEY_space or args[1].keyval == Gdk.KEY_Return : self.down = 0 self.queue_draw() self.emit('pressed') def keypress(self, *args): #print("keypress") if args[1].keyval == Gdk.KEY_space or args[1].keyval == Gdk.KEY_Return : self.down = 1 self.queue_draw() def buttrel(self, *args): #print("buttrel") self.down = 0 self.queue_draw() self.emit('pressed') def buttpress(self, *args): # print("buttpress") self.down = 1 self.queue_draw() def mactivate(self): print("mactivate") def stattime(self, arg2, arg3): # Test if mnemonic key is down kmap = Gdk.Keymap().get_default() state = kmap.get_modifier_state() #print("mods", state) if state == Gdk.ModifierType.MOD1_MASK: self.mnem = True else: self.mnem = False if self.omnem != self.mnem: self.omnem = self.mnem #print("changed to", self.mnem) self.queue_draw() #GLib.timeout_add(1000, self.stattime, self, 0) return True def mactivate(self, *arg): #print("mactivate", arg) self.emit('pressed') return True def enter_label(self, arg, arg2): #print("Enter") self.get_window().set_cursor(self.hand_cursor) self.stat2 = 1 self.queue_draw() def leave_label(self, arg, arg2): #print("Leave") self.get_window().set_cursor() self.stat2 = 0 self.queue_draw() def do_draw (self, cr): # paint background if self.stat2: bg_color2 = self.get_style_context().get_background_color(Gtk.StateFlags.NORMAL) bg_color = Gdk.RGBA(.9, .9, .9) else: if 0: #self.has_focus(): bg_color = Gdk.RGBA(.75, .75, .75) else: bg_color = self.get_style_context().get_background_color(Gtk.StateFlags.NORMAL) cr.set_source_rgba(*list(bg_color)) cr.rectangle(1,1, self.ww-1, self.hh-1) cr.clip() cr.paint() if 0: #self.stat2: fg_color = self.get_style_context().get_color(Gtk.StateFlags.SELECTED) else: fg_color = self.get_style_context().get_color(Gtk.StateFlags.NORMAL) cr.set_source_rgba(*list(fg_color)); cr.move_to(0, 0) PangoCairo.show_layout(cr, self.layout) if self.down: cr.move_to(1, 1) PangoCairo.show_layout(cr, self.layout) if self.mnem: #print("corr", self.chary.width, self.chary.height) cr.move_to( self.chary.width, self.chary.height-2) cr.line_to( self.chary.width + 8, self.chary.height-2) cr.stroke() if self.has_focus(): #print("focus") cr.set_dash([.5, .9]) cr.move_to( 1, 1) cr.line_to( self.ww-1, 1) cr.line_to( self.ww-1, self.hh-1) cr.line_to( 1, self.hh-1) cr.line_to( 1, 1) cr.stroke()
Ancestors
- gi.repository.Gtk.EventBox
- gi.repository.Gtk.Bin
- gi.overrides.Gtk.Container
- gi.repository.Gtk.Container
- gi.overrides.Gtk.Widget
- gi.repository.Gtk.Widget
- gi.repository.GObject.InitiallyUnowned
- gi.overrides.GObject.Object
- gi.repository.GObject.Object
- gi._gi.GObject
- gi.repository.Atk.ImplementorIface
- gi.repository.Gtk.Buildable
- gobject.GInterface
Methods
def buttpress(self, *args)
-
Expand source code
def buttpress(self, *args): # print("buttpress") self.down = 1 self.queue_draw()
def buttrel(self, *args)
-
Expand source code
def buttrel(self, *args): #print("buttrel") self.down = 0 self.queue_draw() self.emit('pressed')
def do_draw(self, cr)
-
draw(self, cr:cairo.Context) -> bool
Expand source code
def do_draw (self, cr): # paint background if self.stat2: bg_color2 = self.get_style_context().get_background_color(Gtk.StateFlags.NORMAL) bg_color = Gdk.RGBA(.9, .9, .9) else: if 0: #self.has_focus(): bg_color = Gdk.RGBA(.75, .75, .75) else: bg_color = self.get_style_context().get_background_color(Gtk.StateFlags.NORMAL) cr.set_source_rgba(*list(bg_color)) cr.rectangle(1,1, self.ww-1, self.hh-1) cr.clip() cr.paint() if 0: #self.stat2: fg_color = self.get_style_context().get_color(Gtk.StateFlags.SELECTED) else: fg_color = self.get_style_context().get_color(Gtk.StateFlags.NORMAL) cr.set_source_rgba(*list(fg_color)); cr.move_to(0, 0) PangoCairo.show_layout(cr, self.layout) if self.down: cr.move_to(1, 1) PangoCairo.show_layout(cr, self.layout) if self.mnem: #print("corr", self.chary.width, self.chary.height) cr.move_to( self.chary.width, self.chary.height-2) cr.line_to( self.chary.width + 8, self.chary.height-2) cr.stroke() if self.has_focus(): #print("focus") cr.set_dash([.5, .9]) cr.move_to( 1, 1) cr.line_to( self.ww-1, 1) cr.line_to( self.ww-1, self.hh-1) cr.line_to( 1, self.hh-1) cr.line_to( 1, 1) cr.stroke()
def enter_label(self, arg, arg2)
-
Expand source code
def enter_label(self, arg, arg2): #print("Enter") self.get_window().set_cursor(self.hand_cursor) self.stat2 = 1 self.queue_draw()
def keypress(self, *args)
-
Expand source code
def keypress(self, *args): #print("keypress") if args[1].keyval == Gdk.KEY_space or args[1].keyval == Gdk.KEY_Return : self.down = 1 self.queue_draw()
def keyrel(self, *args)
-
Expand source code
def keyrel(self, *args): #print("keyrel") if args[1].keyval == Gdk.KEY_space or args[1].keyval == Gdk.KEY_Return : self.down = 0 self.queue_draw() self.emit('pressed')
def leave_label(self, arg, arg2)
-
Expand source code
def leave_label(self, arg, arg2): #print("Leave") self.get_window().set_cursor() self.stat2 = 0 self.queue_draw()
def mactivate(self, *arg)
-
Expand source code
def mactivate(self, *arg): #print("mactivate", arg) self.emit('pressed') return True
def stattime(self, arg2, arg3)
-
Expand source code
def stattime(self, arg2, arg3): # Test if mnemonic key is down kmap = Gdk.Keymap().get_default() state = kmap.get_modifier_state() #print("mods", state) if state == Gdk.ModifierType.MOD1_MASK: self.mnem = True else: self.mnem = False if self.omnem != self.mnem: self.omnem = self.mnem #print("changed to", self.mnem) self.queue_draw() #GLib.timeout_add(1000, self.stattime, self, 0) return True