pyvguicom 1.0.1__py3-none-any.whl → 1.1.2__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of pyvguicom might be problematic. Click here for more details.
- pyvguicom/browsewin.py +10 -11
- pyvguicom/docs/__index__.py +0 -0
- pyvguicom/docs/browsewin.html +956 -0
- pyvguicom/docs/htmledit.html +903 -0
- pyvguicom/docs/pgbox.html +2470 -0
- pyvguicom/docs/pgbutt.html +727 -0
- pyvguicom/docs/pgentry.html +1024 -0
- pyvguicom/docs/pggui.html +5476 -0
- pyvguicom/docs/pgsel.html +1539 -0
- pyvguicom/docs/pgsimp.html +1048 -0
- pyvguicom/docs/pgtextview.html +2421 -0
- pyvguicom/docs/pgutils.html +2664 -0
- pyvguicom/docs/pgwkit.html +2277 -0
- pyvguicom/docs/sutil.html +907 -0
- pyvguicom/pgentry.py +75 -9
- pyvguicom/pggui.py +191 -92
- pyvguicom/pgsel.py +9 -7
- pyvguicom/pgtests.py +128 -0
- pyvguicom/pgutils.py +42 -394
- pyvguicom/pgwkit.py +36 -27
- pyvguicom/testbutt.py +1 -1
- pyvguicom/testcust.py +1 -1
- pyvguicom/testentry.py +19 -7
- pyvguicom/testgui.py +125 -0
- pyvguicom/testlettsel.py +1 -1
- pyvguicom/testmsgs.py +142 -0
- pyvguicom/testnums.py +1 -1
- pyvguicom/testsimple.py +4 -3
- pyvguicom/testtests.py +79 -0
- pyvguicom/testtextv.py +2 -2
- pyvguicom/testutils.py +139 -0
- {pyvguicom-1.0.1.dist-info → pyvguicom-1.1.2.dist-info}/METADATA +8 -11
- pyvguicom-1.1.2.dist-info/RECORD +45 -0
- pyvguicom-1.0.1.dist-info/RECORD +0 -27
- {pyvguicom-1.0.1.dist-info → pyvguicom-1.1.2.dist-info}/WHEEL +0 -0
- {pyvguicom-1.0.1.dist-info → pyvguicom-1.1.2.dist-info}/top_level.txt +0 -0
pyvguicom/pgentry.py
CHANGED
|
@@ -20,6 +20,45 @@ def wrap(cont):
|
|
|
20
20
|
fr.add(sc)
|
|
21
21
|
return fr, cont
|
|
22
22
|
|
|
23
|
+
class Entryx(Gtk.Entry):
|
|
24
|
+
|
|
25
|
+
def __init__(self, noemit = False):
|
|
26
|
+
super(Entryx).__init__()
|
|
27
|
+
Gtk.Entry.__init__(self)
|
|
28
|
+
self.noemit = noemit # do not emit move next on enter
|
|
29
|
+
self.connect("key-press-event", self.key_press_event)
|
|
30
|
+
|
|
31
|
+
def set_noemit(self, flag):
|
|
32
|
+
self.noemit = flag
|
|
33
|
+
|
|
34
|
+
def set_gray(self, flag):
|
|
35
|
+
if flag:
|
|
36
|
+
self.set_editable(False);
|
|
37
|
+
style = self.get_style_context()
|
|
38
|
+
color = style.get_background_color(Gtk.StateFlags.NORMAL)
|
|
39
|
+
color2 = Gdk.RGBA(color.red-.1, color.green-.1, color.blue-.1)
|
|
40
|
+
self.override_background_color(Gtk.StateFlags.NORMAL, color2)
|
|
41
|
+
else:
|
|
42
|
+
self.set_editable(True);
|
|
43
|
+
style = self.get_style_context()
|
|
44
|
+
color = style.get_background_color(Gtk.StateFlags.NORMAL)
|
|
45
|
+
self.override_background_color(Gtk.StateFlags.NORMAL, color)
|
|
46
|
+
|
|
47
|
+
def key_press_event(self, arg1, event):
|
|
48
|
+
#print("keypress", event.keyval)
|
|
49
|
+
if event.keyval == Gdk.KEY_Tab or event.keyval == Gdk.KEY_ISO_Left_Tab:
|
|
50
|
+
#print("tab keypress ", event.keyval, event.state)
|
|
51
|
+
if event.state & Gdk.ModifierType.SHIFT_MASK:
|
|
52
|
+
self.emit("move-focus", Gtk.DirectionType.TAB_BACKWARD)
|
|
53
|
+
else:
|
|
54
|
+
self.emit("move-focus", Gtk.DirectionType.TAB_FORWARD)
|
|
55
|
+
return True
|
|
56
|
+
|
|
57
|
+
if event.keyval == Gdk.KEY_Return:
|
|
58
|
+
if not self.noemit:
|
|
59
|
+
self.emit("move-focus", Gtk.DirectionType.TAB_FORWARD)
|
|
60
|
+
return True
|
|
61
|
+
|
|
23
62
|
# Expects two tuples of stuff
|
|
24
63
|
# labtext, labname, tip, defval = None:
|
|
25
64
|
|
|
@@ -34,7 +73,7 @@ def entryquad(arr, vbox, entry1, entry2):
|
|
|
34
73
|
hbox2.pack_start(lab1, False, 0, 0)
|
|
35
74
|
lab1a = Gtk.Label(label=" ")
|
|
36
75
|
hbox2.pack_start(lab1a, False, 0, 0)
|
|
37
|
-
headx =
|
|
76
|
+
headx = Entryx(); headx.set_width_chars(33)
|
|
38
77
|
lab1.set_mnemonic_widget(headx)
|
|
39
78
|
|
|
40
79
|
if entry1[3] != None:
|
|
@@ -51,7 +90,7 @@ def entryquad(arr, vbox, entry1, entry2):
|
|
|
51
90
|
hbox2.pack_start(lab2, False, 0, 0)
|
|
52
91
|
lab1b = Gtk.Label(label=" ")
|
|
53
92
|
hbox2.pack_start(lab1b, False, 0, 0)
|
|
54
|
-
headx2 =
|
|
93
|
+
headx2 = Entryx(); headx2.set_width_chars(33)
|
|
55
94
|
lab2.set_mnemonic_widget(headx2)
|
|
56
95
|
if entry2[3] != None:
|
|
57
96
|
headx2.set_text(entry2[3][entry2[1]])
|
|
@@ -127,7 +166,7 @@ def gridquad(gridx, left, top, entry1, entry2, butt = None):
|
|
|
127
166
|
lab1.set_tooltip_text(entry1[2])
|
|
128
167
|
gridx.attach(lab1, left, top, 1, 1)
|
|
129
168
|
|
|
130
|
-
headx =
|
|
169
|
+
headx = Entryx();
|
|
131
170
|
lab1.set_mnemonic_widget(headx)
|
|
132
171
|
headx.set_width_chars(20)
|
|
133
172
|
if entry1[3] != None:
|
|
@@ -139,7 +178,7 @@ def gridquad(gridx, left, top, entry1, entry2, butt = None):
|
|
|
139
178
|
lab2.set_tooltip_text(entry2[2])
|
|
140
179
|
gridx.attach(lab2, left+2, top, 1, 1)
|
|
141
180
|
|
|
142
|
-
headx2 =
|
|
181
|
+
headx2 = Entryx();
|
|
143
182
|
lab2.set_mnemonic_widget(headx2)
|
|
144
183
|
|
|
145
184
|
headx2.set_width_chars(20)
|
|
@@ -151,12 +190,13 @@ def gridquad(gridx, left, top, entry1, entry2, butt = None):
|
|
|
151
190
|
return headx, headx2
|
|
152
191
|
|
|
153
192
|
def griddouble(gridx, left, top, entry1, buttx = None):
|
|
154
|
-
lab1 = Gtk.Label(entry1[0] + " ")
|
|
193
|
+
lab1 = Gtk.Label.new_with_mnemonic(entry1[0] + " ")
|
|
155
194
|
lab1.set_alignment(1, 0)
|
|
156
195
|
lab1.set_tooltip_text(entry1[2])
|
|
157
196
|
gridx.attach(lab1, left, top, 1, 1)
|
|
158
197
|
|
|
159
|
-
headx =
|
|
198
|
+
headx = Entryx();
|
|
199
|
+
lab1.set_mnemonic_widget(headx)
|
|
160
200
|
headx.set_width_chars(40)
|
|
161
201
|
if entry1[3] != None:
|
|
162
202
|
headx.set_text(entry1[3])
|
|
@@ -165,9 +205,10 @@ def griddouble(gridx, left, top, entry1, buttx = None):
|
|
|
165
205
|
gridx.attach(buttx, left+3, top, 1, 1)
|
|
166
206
|
return headx
|
|
167
207
|
|
|
168
|
-
|
|
169
208
|
class TextViewx(Gtk.TextView):
|
|
170
209
|
|
|
210
|
+
''' Override textview for simple deployment '''
|
|
211
|
+
|
|
171
212
|
def __init__(self):
|
|
172
213
|
super(TextViewx).__init__()
|
|
173
214
|
GObject.GObject.__init__(self)
|
|
@@ -178,12 +219,36 @@ class TextViewx(Gtk.TextView):
|
|
|
178
219
|
|
|
179
220
|
def key_press_event(self, arg1, event):
|
|
180
221
|
|
|
222
|
+
''' Override tabs '''
|
|
223
|
+
|
|
181
224
|
if event.keyval == Gdk.KEY_Tab or event.keyval == Gdk.KEY_ISO_Left_Tab:
|
|
182
225
|
#print("tab keypress ", event.keyval, event.state)
|
|
183
226
|
if event.state & Gdk.ModifierType.SHIFT_MASK:
|
|
184
227
|
self.emit("move-focus", Gtk.DirectionType.TAB_BACKWARD)
|
|
185
228
|
else:
|
|
186
229
|
self.emit("move-focus", Gtk.DirectionType.TAB_FORWARD)
|
|
230
|
+
return True
|
|
231
|
+
|
|
232
|
+
# If reached last line, TAB it
|
|
233
|
+
if event.keyval == Gdk.KEY_Down:
|
|
234
|
+
pos = self.buffer.get_property("cursor-position")
|
|
235
|
+
#print("Down", pos)
|
|
236
|
+
#print(self.buffer.list_properties())
|
|
237
|
+
sss = self.buffer.get_start_iter()
|
|
238
|
+
eee = self.buffer.get_end_iter()
|
|
239
|
+
textx = self.buffer.get_text(sss, eee, True)
|
|
240
|
+
if pos == len(textx):
|
|
241
|
+
self.emit("move-focus", Gtk.DirectionType.TAB_FORWARD)
|
|
242
|
+
return True
|
|
243
|
+
|
|
244
|
+
# If reached first line, TAB it
|
|
245
|
+
if event.keyval == Gdk.KEY_Up:
|
|
246
|
+
# Are we at the beginning:
|
|
247
|
+
pos = self.buffer.get_property("cursor-position")
|
|
248
|
+
#print("Up", pos)
|
|
249
|
+
if pos == 0:
|
|
250
|
+
self.emit("move-focus", Gtk.DirectionType.TAB_BACKWARD)
|
|
251
|
+
return True
|
|
187
252
|
|
|
188
253
|
if event.keyval == Gdk.KEY_Return:
|
|
189
254
|
if event.state & Gdk.ModifierType.SHIFT_MASK:
|
|
@@ -206,12 +271,14 @@ class TextViewx(Gtk.TextView):
|
|
|
206
271
|
self.buffer.set_modified(True)
|
|
207
272
|
|
|
208
273
|
def gridsingle(gridx, left, top, entry1):
|
|
209
|
-
lab1 = Gtk.Label(entry1[0] + " ")
|
|
274
|
+
lab1 = Gtk.Label.new_with_mnemonic(entry1[0] + " ")
|
|
210
275
|
lab1.set_alignment(1, 0)
|
|
211
276
|
lab1.set_tooltip_text(entry1[2])
|
|
212
277
|
gridx.attach(lab1, left, top, 1, 1)
|
|
213
278
|
|
|
214
279
|
headx, cont = wrap(TextViewx())
|
|
280
|
+
lab1.set_mnemonic_widget(cont)
|
|
281
|
+
|
|
215
282
|
if entry1[3] != None:
|
|
216
283
|
headx.set_text(entry1[3])
|
|
217
284
|
gridx.attach(headx, left+1, top, 3, 1)
|
|
@@ -234,7 +301,6 @@ def scrolledtext(arr, name, body = None):
|
|
|
234
301
|
sw.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC)
|
|
235
302
|
return sw
|
|
236
303
|
|
|
237
|
-
|
|
238
304
|
def imgbutt(imgfile, txt, func, win):
|
|
239
305
|
hbb = Gtk.HBox(); vbb = Gtk.VBox(); ic = Gtk.Image();
|
|
240
306
|
ic.set_from_file(imgfile)
|
pyvguicom/pggui.py
CHANGED
|
@@ -24,6 +24,8 @@ import pgsimp
|
|
|
24
24
|
|
|
25
25
|
IDXERR = "Index is larger than the available number of controls."
|
|
26
26
|
|
|
27
|
+
VERSION = "1.1.2"
|
|
28
|
+
|
|
27
29
|
gui_testmode = 0
|
|
28
30
|
|
|
29
31
|
def randcol():
|
|
@@ -46,6 +48,8 @@ for st in (gtk.STATE_NORMAL, gtk.STATE_INSENSITIVE,
|
|
|
46
48
|
a[st] = gtk.gdk.Color(0, 34251, 0)
|
|
47
49
|
'''
|
|
48
50
|
|
|
51
|
+
def version():
|
|
52
|
+
return VERSION
|
|
49
53
|
|
|
50
54
|
# ------------------------------------------------------------------------
|
|
51
55
|
# Bemd some of the parameters for us
|
|
@@ -118,6 +122,8 @@ class CairoHelper():
|
|
|
118
122
|
|
|
119
123
|
class TextTable(Gtk.Table):
|
|
120
124
|
|
|
125
|
+
''' YTable of text entries '''
|
|
126
|
+
|
|
121
127
|
def __init__(self, confarr, main = None, textwidth = 24):
|
|
122
128
|
GObject.GObject.__init__(self)
|
|
123
129
|
self.texts = []
|
|
@@ -192,7 +198,6 @@ class TextRow(Gtk.HBox):
|
|
|
192
198
|
'''
|
|
193
199
|
pass
|
|
194
200
|
|
|
195
|
-
|
|
196
201
|
def callb(self, arg1):
|
|
197
202
|
#print ("callb arg1", arg1)
|
|
198
203
|
pass
|
|
@@ -285,6 +290,7 @@ class Led(Gtk.DrawingArea):
|
|
|
285
290
|
self.set_size_request(size + border, size + border)
|
|
286
291
|
self.connect("draw", self.draw)
|
|
287
292
|
self.color = color
|
|
293
|
+
self.orgcolor = color
|
|
288
294
|
|
|
289
295
|
def set_color(self, col):
|
|
290
296
|
self.color = col
|
|
@@ -421,19 +427,23 @@ class WideButt(Gtk.Button):
|
|
|
421
427
|
if callme:
|
|
422
428
|
self.connect("clicked", callme)
|
|
423
429
|
|
|
424
|
-
class FrameTextView(Gtk.
|
|
430
|
+
class FrameTextView(Gtk.Frame):
|
|
425
431
|
|
|
426
432
|
def __init__(self, callme = None):
|
|
427
433
|
|
|
428
434
|
GObject.GObject.__init__(self)
|
|
435
|
+
#super().__init__(self)
|
|
436
|
+
|
|
437
|
+
self.tview = Gtk.TextView()
|
|
438
|
+
#self.tview.set_buffer(Gtk.TextBuffer())
|
|
439
|
+
|
|
429
440
|
self.scroll = Gtk.ScrolledWindow()
|
|
430
441
|
self.scroll.set_size_request(100, 100)
|
|
431
|
-
self.scroll.add_with_viewport(self)
|
|
432
|
-
self.frame = Gtk.Frame()
|
|
433
|
-
self.
|
|
442
|
+
self.scroll.add_with_viewport(self.tview)
|
|
443
|
+
#self.frame = Gtk.Frame()
|
|
444
|
+
self.add(self.scroll)
|
|
434
445
|
|
|
435
|
-
self.
|
|
436
|
-
self.set_size_request(150, 150)
|
|
446
|
+
#self.set_size_request(150, 150)
|
|
437
447
|
ls = self.get_style_context()
|
|
438
448
|
fd = ls.get_font(Gtk.StateFlags.NORMAL)
|
|
439
449
|
#newfd = fd.to_string() + " " + str(fd.get_size() / Pango.SCALE + 4)
|
|
@@ -441,16 +451,16 @@ class FrameTextView(Gtk.TextView):
|
|
|
441
451
|
self.modify_font(Pango.FontDescription("Sans 13"))
|
|
442
452
|
|
|
443
453
|
def append(self, strx):
|
|
444
|
-
buff = self.get_buffer()
|
|
454
|
+
buff = self.tview.get_buffer()
|
|
445
455
|
old = buff.get_text(buff.get_start_iter(), buff.get_end_iter(), False)
|
|
446
|
-
buff.set_text(old +
|
|
456
|
+
buff.set_text(old + strx)
|
|
447
457
|
pgutils.usleep(20)
|
|
448
458
|
#mainwin.statb2.scroll_to_iter(buff.get_end_iter(), 1.0, True, 0.1, 0.1)
|
|
449
459
|
sb = self.scroll.get_vscrollbar()
|
|
450
460
|
sb.set_value(2000000)
|
|
451
461
|
|
|
452
462
|
class Label(Gtk.Label):
|
|
453
|
-
def __init__(self, textm = "", widget = None, tooltip=None, font
|
|
463
|
+
def __init__(self, textm = "", widget = None, tooltip=None, font=None):
|
|
454
464
|
GObject.GObject.__init__(self)
|
|
455
465
|
self.set_text_with_mnemonic(textm)
|
|
456
466
|
if widget:
|
|
@@ -462,7 +472,7 @@ class Label(Gtk.Label):
|
|
|
462
472
|
|
|
463
473
|
class Logo(Gtk.VBox):
|
|
464
474
|
|
|
465
|
-
def __init__(self, labelx, tooltip
|
|
475
|
+
def __init__(self, labelx, tooltip=None, callme=None, font="Times 45"):
|
|
466
476
|
|
|
467
477
|
GObject.GObject.__init__(self)
|
|
468
478
|
|
|
@@ -477,7 +487,7 @@ class Logo(Gtk.VBox):
|
|
|
477
487
|
if callme:
|
|
478
488
|
self.logolab.connect("button-press-event", callme)
|
|
479
489
|
|
|
480
|
-
self.logolab.modify_font(Pango.FontDescription(
|
|
490
|
+
self.logolab.modify_font(Pango.FontDescription(font))
|
|
481
491
|
|
|
482
492
|
#self.pack_start(Spacer(), 0, 0, False)
|
|
483
493
|
self.pack_start(self.logolab, 0, 0, False)
|
|
@@ -497,7 +507,7 @@ class Logo(Gtk.VBox):
|
|
|
497
507
|
|
|
498
508
|
class ListBox(Gtk.TreeView):
|
|
499
509
|
|
|
500
|
-
def __init__(self, limit = -1, colname = ''):
|
|
510
|
+
def __init__(self, callb = None, limit = -1, colname = ''):
|
|
501
511
|
|
|
502
512
|
self.limit = limit
|
|
503
513
|
self.treestore = Gtk.TreeStore(str)
|
|
@@ -516,7 +526,7 @@ class ListBox(Gtk.TreeView):
|
|
|
516
526
|
self.append_column(tvcolumn)
|
|
517
527
|
self.set_activate_on_single_click (True)
|
|
518
528
|
|
|
519
|
-
self.callb =
|
|
529
|
+
self.callb = callb
|
|
520
530
|
self.connect("row-activated", self.tree_sel)
|
|
521
531
|
|
|
522
532
|
def tree_sel(self, xtree, xiter, xpath):
|
|
@@ -660,32 +670,11 @@ def set_testmode(flag):
|
|
|
660
670
|
global gui_testmode
|
|
661
671
|
gui_testmode = flag
|
|
662
672
|
|
|
663
|
-
# ------------------------------------------------------------------------
|
|
664
|
-
# An N pixel horizontal spacer. Defaults to X pix get_center
|
|
665
|
-
#
|
|
666
|
-
#def hspacer(hbox, xstr = " ", expand = False):
|
|
667
|
-
# lab = Gtk.Label(label=xstr)
|
|
668
|
-
# hbox.pack_start(lab, expand, 0, 0)
|
|
669
|
-
#
|
|
670
|
-
#def vspacer(vbox, xstr = " ", expand = False):
|
|
671
|
-
# lab = Gtk.Label(label=xstr)
|
|
672
|
-
# vbox.pack_start(lab, expand , 0, 0)
|
|
673
|
-
#def vspacer(sp = 8):
|
|
674
|
-
# lab = Gtk.VBox()
|
|
675
|
-
# lab.set_size_request(sp, sp)
|
|
676
|
-
#
|
|
677
|
-
# if gui_testmode:
|
|
678
|
-
# lab.override_background_color(
|
|
679
|
-
# Gtk.StateFlags.NORMAL, Gdk.RGBA(1, .5, .5) )
|
|
680
|
-
# return lab
|
|
681
|
-
|
|
682
673
|
# ------------------------------------------------------------------------
|
|
683
674
|
# An N pixel spacer. Defaults to 1 char height / width
|
|
684
675
|
|
|
685
676
|
class Spacer(Gtk.Label):
|
|
686
677
|
|
|
687
|
-
global box_testmode
|
|
688
|
-
|
|
689
678
|
def __init__(self, sp = 1, title=None, left=False, bottom=False, test=False):
|
|
690
679
|
|
|
691
680
|
GObject.GObject.__init__(self)
|
|
@@ -705,7 +694,7 @@ class Spacer(Gtk.Label):
|
|
|
705
694
|
if bottom:
|
|
706
695
|
self.set_yalign(1)
|
|
707
696
|
|
|
708
|
-
if test or
|
|
697
|
+
if test or gui_testmode:
|
|
709
698
|
self.modify_bg(Gtk.StateType.NORMAL, Gdk.color_parse("#888888"))
|
|
710
699
|
|
|
711
700
|
#self.set_property("angle", 15)
|
|
@@ -746,41 +735,6 @@ class ySpacer(Gtk.VBox):
|
|
|
746
735
|
sp = 6
|
|
747
736
|
self.set_size_request(sp, sp)
|
|
748
737
|
|
|
749
|
-
# ------------------------------------------------------------------------
|
|
750
|
-
# An N pixel spacer. Defaults to 1 char height / width
|
|
751
|
-
|
|
752
|
-
class Spacer(Gtk.Label):
|
|
753
|
-
|
|
754
|
-
global gui_testmode
|
|
755
|
-
|
|
756
|
-
def __init__(self, sp = 1, title=None, left=False, bottom=False, test=False):
|
|
757
|
-
|
|
758
|
-
GObject.GObject.__init__(self)
|
|
759
|
-
|
|
760
|
-
#sp *= 1000
|
|
761
|
-
#self.set_markup("<span size=\"" + str(sp) + "\"> </span>")
|
|
762
|
-
#self.set_text(" " * sp)
|
|
763
|
-
|
|
764
|
-
if title:
|
|
765
|
-
self.set_text(title)
|
|
766
|
-
else:
|
|
767
|
-
self.set_text(" " * sp)
|
|
768
|
-
if left:
|
|
769
|
-
self.set_xalign(0)
|
|
770
|
-
if bottom:
|
|
771
|
-
self.set_yalign(1)
|
|
772
|
-
if test or gui_testmode:
|
|
773
|
-
self.modify_bg(Gtk.StateType.NORMAL, Gdk.color_parse("#888888"))
|
|
774
|
-
|
|
775
|
-
#self.set_property("angle", 15)
|
|
776
|
-
#attr = self.get_property("attributes")
|
|
777
|
-
#attr2 = Pango.AttrList()
|
|
778
|
-
#print ("attr", dir(attr))
|
|
779
|
-
#attr.
|
|
780
|
-
#self.set_property("attributes", attr)
|
|
781
|
-
#self.set_property("label", "wtf")
|
|
782
|
-
#self.set_property("background-set", True)
|
|
783
|
-
|
|
784
738
|
# ------------------------------------------------------------------------
|
|
785
739
|
# Added convenience methods
|
|
786
740
|
|
|
@@ -824,13 +778,21 @@ class xHBox(Gtk.HBox):
|
|
|
824
778
|
|
|
825
779
|
class RadioGroup(Gtk.Frame):
|
|
826
780
|
|
|
827
|
-
def __init__(self, rad_arr, call_me):
|
|
781
|
+
def __init__(self, rad_arr, call_me = None, horiz = False):
|
|
828
782
|
|
|
829
783
|
GObject.GObject.__init__(self)
|
|
830
784
|
self.buttons = []
|
|
831
785
|
self.callme = call_me
|
|
832
|
-
|
|
833
|
-
|
|
786
|
+
if horiz:
|
|
787
|
+
vbox6 = Gtk.HBox();
|
|
788
|
+
vbox6.set_spacing(6);
|
|
789
|
+
vbox6.set_border_width(4)
|
|
790
|
+
else:
|
|
791
|
+
vbox6 = Gtk.VBox();
|
|
792
|
+
vbox6.set_spacing(4);
|
|
793
|
+
vbox6.set_border_width(6)
|
|
794
|
+
|
|
795
|
+
|
|
834
796
|
|
|
835
797
|
if gui_testmode:
|
|
836
798
|
self.modify_bg(Gtk.StateType.NORMAL, Gdk.color_parse("#778888"))
|
|
@@ -1054,11 +1016,12 @@ class ScrollListBox(Gtk.Frame):
|
|
|
1054
1016
|
|
|
1055
1017
|
class ComboBox(Gtk.ComboBox):
|
|
1056
1018
|
|
|
1057
|
-
def __init__(self, init_cont
|
|
1019
|
+
def __init__(self, init_cont, callme = None):
|
|
1020
|
+
|
|
1021
|
+
self.callme = callme
|
|
1058
1022
|
|
|
1059
1023
|
self.store = Gtk.ListStore(str)
|
|
1060
1024
|
Gtk.ComboBox.__init__(self)
|
|
1061
|
-
|
|
1062
1025
|
self.set_model(self.store)
|
|
1063
1026
|
cell = Gtk.CellRendererText()
|
|
1064
1027
|
|
|
@@ -1067,9 +1030,6 @@ class ComboBox(Gtk.ComboBox):
|
|
|
1067
1030
|
#cell.set_property("background-set", True)
|
|
1068
1031
|
cell.set_padding(10, 0)
|
|
1069
1032
|
|
|
1070
|
-
if callme:
|
|
1071
|
-
self.connect("changed", callme)
|
|
1072
|
-
|
|
1073
1033
|
#cell.set_property("foreground", "#ffff00")
|
|
1074
1034
|
#cell.set_property("foreground-set", True)
|
|
1075
1035
|
#print("background-set", cell.get_property("background-set"))
|
|
@@ -1100,6 +1060,9 @@ class ComboBox(Gtk.ComboBox):
|
|
|
1100
1060
|
except:
|
|
1101
1061
|
pass
|
|
1102
1062
|
|
|
1063
|
+
if self.callme:
|
|
1064
|
+
self.callme(name)
|
|
1065
|
+
|
|
1103
1066
|
#print("Combo new selection / entry: '%s'" % name)
|
|
1104
1067
|
|
|
1105
1068
|
def delall(self):
|
|
@@ -1380,27 +1343,163 @@ class RCLButt(Gtk.Button):
|
|
|
1380
1343
|
# self.callme(arg1)
|
|
1381
1344
|
|
|
1382
1345
|
|
|
1383
|
-
|
|
1384
|
-
|
|
1385
|
-
|
|
1346
|
+
# ------------------------------------------------------------------------
|
|
1347
|
+
# Show a regular message:
|
|
1348
|
+
|
|
1349
|
+
def message(strx, parent = None, title = None, icon = Gtk.MessageType.INFO):
|
|
1386
1350
|
|
|
1387
|
-
#
|
|
1351
|
+
#dialog = Gtk.MessageDialog(parent, Gtk.DialogFlags.DESTROY_WITH_PARENT,
|
|
1352
|
+
# icon, Gtk.ButtonsType.CLOSE, strx)
|
|
1353
|
+
|
|
1354
|
+
dialog = Gtk.MessageDialog(title=title, buttons=Gtk.ButtonsType.CLOSE,
|
|
1355
|
+
text=strx, destroy_with_parent=True, modal=True,)
|
|
1356
|
+
|
|
1357
|
+
if parent:
|
|
1358
|
+
dialog.set_transient_for(parent)
|
|
1359
|
+
|
|
1360
|
+
if title:
|
|
1361
|
+
dialog.set_title(title)
|
|
1362
|
+
else:
|
|
1363
|
+
dialog.set_title("Message")
|
|
1388
1364
|
|
|
1389
1365
|
# Close dialog on user response
|
|
1390
|
-
dialog.connect
|
|
1366
|
+
dialog.connect("response", lambda d, r: d.destroy())
|
|
1367
|
+
dialog.show_all()
|
|
1391
1368
|
return dialog.run()
|
|
1392
1369
|
|
|
1393
|
-
def
|
|
1394
|
-
|
|
1395
|
-
|
|
1370
|
+
def yes_no(message, title = "Question", parent=None, default="Yes"):
|
|
1371
|
+
|
|
1372
|
+
dialog = Gtk.MessageDialog(title=title)
|
|
1373
|
+
|
|
1374
|
+
img = Gtk.Image.new_from_stock(Gtk.STOCK_DIALOG_QUESTION, Gtk.IconSize.DIALOG)
|
|
1375
|
+
dialog.set_image(img)
|
|
1376
|
+
dialog.set_markup(message)
|
|
1377
|
+
|
|
1378
|
+
if default == "Yes":
|
|
1379
|
+
dialog.set_default_response(Gtk.ResponseType.YES)
|
|
1380
|
+
dialog.add_button("_Yes", Gtk.ResponseType.YES)
|
|
1381
|
+
dialog.add_button("_No", Gtk.ResponseType.NO)
|
|
1382
|
+
else:
|
|
1383
|
+
dialog.set_default_response(Gtk.ResponseType.NO)
|
|
1384
|
+
dialog.add_button("_No", Gtk.ResponseType.NO)
|
|
1385
|
+
dialog.add_button("_Yes", Gtk.ResponseType.YES)
|
|
1386
|
+
|
|
1387
|
+
if parent:
|
|
1388
|
+
dialog.set_transient_for(parent)
|
|
1389
|
+
|
|
1390
|
+
def _yn_key(win, event, cancel):
|
|
1391
|
+
#print("_y_n key", event.keyval)
|
|
1392
|
+
if event.keyval == Gdk.KEY_y or \
|
|
1393
|
+
event.keyval == Gdk.KEY_Y:
|
|
1394
|
+
win.response(Gtk.ResponseType.YES)
|
|
1395
|
+
if event.keyval == Gdk.KEY_n or \
|
|
1396
|
+
event.keyval == Gdk.KEY_N:
|
|
1397
|
+
win.response(Gtk.ResponseType.NO)
|
|
1398
|
+
#if cancel:
|
|
1399
|
+
# if event.keyval == Gdk.KEY_c or \
|
|
1400
|
+
# event.keyval == Gdk.KEY_C:
|
|
1401
|
+
# win.response(Gtk.ResponseType.CANCEL)
|
|
1402
|
+
|
|
1403
|
+
dialog.connect("key-press-event", _yn_key, 0)
|
|
1404
|
+
# Fri 03.May.2024 destroyed return value
|
|
1405
|
+
#dialog.connect("response", lambda d, r: d.destroy())
|
|
1406
|
+
dialog.show_all()
|
|
1407
|
+
response = dialog.run()
|
|
1408
|
+
dialog.destroy()
|
|
1409
|
+
#print("response", response, resp2str(response))
|
|
1396
1410
|
|
|
1397
|
-
#
|
|
1411
|
+
# Convert all other responses to default
|
|
1412
|
+
if response == Gtk.ResponseType.REJECT or \
|
|
1413
|
+
response == Gtk.ResponseType.CLOSE or \
|
|
1414
|
+
response == Gtk.ResponseType.DELETE_EVENT:
|
|
1415
|
+
response = Gtk.ResponseType.NO
|
|
1416
|
+
|
|
1417
|
+
# Cancel means no
|
|
1418
|
+
#if default == "Yes":
|
|
1419
|
+
# response = Gtk.ResponseType.YES
|
|
1420
|
+
#else:
|
|
1421
|
+
# response = Gtk.ResponseType.NO
|
|
1422
|
+
|
|
1423
|
+
return response
|
|
1424
|
+
|
|
1425
|
+
# ------------------------------------------------------------------------
|
|
1426
|
+
|
|
1427
|
+
def yes_no_cancel(message, title="Question", default="Yes"):
|
|
1428
|
+
|
|
1429
|
+
dialog = Gtk.MessageDialog(title=title)
|
|
1430
|
+
|
|
1431
|
+
if default == "Yes":
|
|
1432
|
+
dialog.set_default_response(Gtk.ResponseType.YES)
|
|
1433
|
+
dialog.add_button("_Yes", Gtk.ResponseType.YES)
|
|
1434
|
+
dialog.add_button("_No", Gtk.ResponseType.NO)
|
|
1435
|
+
dialog.add_button("_Cancel", Gtk.ResponseType.CANCEL)
|
|
1436
|
+
elif default == "No":
|
|
1437
|
+
dialog.set_default_response(Gtk.ResponseType.NO)
|
|
1438
|
+
dialog.add_button("_No", Gtk.ResponseType.NO)
|
|
1439
|
+
dialog.add_button("_Yes", Gtk.ResponseType.YES)
|
|
1440
|
+
dialog.add_button("_Cancel", Gtk.ResponseType.CANCEL)
|
|
1441
|
+
else:
|
|
1442
|
+
dialog.set_default_response(Gtk.ResponseType.CANCEL)
|
|
1443
|
+
dialog.add_button("_Cancel", Gtk.ResponseType.CANCEL)
|
|
1444
|
+
dialog.add_button("_Yes", Gtk.ResponseType.YES)
|
|
1445
|
+
dialog.add_button("_No", Gtk.ResponseType.NO)
|
|
1446
|
+
|
|
1447
|
+
img = Gtk.Image.new_from_stock(Gtk.STOCK_DIALOG_QUESTION, Gtk.IconSize.DIALOG)
|
|
1448
|
+
dialog.set_image(img)
|
|
1449
|
+
dialog.set_markup(message)
|
|
1450
|
+
|
|
1451
|
+
def _yn_keyc(win, event):
|
|
1452
|
+
#print("key:", event)
|
|
1453
|
+
if event.keyval == Gdk.KEY_y or \
|
|
1454
|
+
event.keyval == Gdk.KEY_Y:
|
|
1455
|
+
win.response(Gtk.ResponseType.YES)
|
|
1456
|
+
if event.keyval == Gdk.KEY_n or \
|
|
1457
|
+
event.keyval == Gdk.KEY_N:
|
|
1458
|
+
win.response(Gtk.ResponseType.NO)
|
|
1459
|
+
if event.keyval == Gdk.KEY_c or \
|
|
1460
|
+
event.keyval == Gdk.KEY_C:
|
|
1461
|
+
win.response(Gtk.ResponseType.CANCEL)
|
|
1462
|
+
|
|
1463
|
+
dialog.connect("key-press-event", _yn_keyc)
|
|
1464
|
+
dialog.show_all()
|
|
1465
|
+
response = dialog.run()
|
|
1466
|
+
|
|
1467
|
+
# Convert all other responses to cancel
|
|
1468
|
+
if response == Gtk.ResponseType.CANCEL or \
|
|
1469
|
+
response == Gtk.ResponseType.REJECT or \
|
|
1470
|
+
response == Gtk.ResponseType.CLOSE or \
|
|
1471
|
+
response == Gtk.ResponseType.DELETE_EVENT:
|
|
1472
|
+
response = Gtk.ResponseType.CANCEL
|
|
1398
1473
|
|
|
1399
|
-
# Close dialog on user response
|
|
1400
|
-
#dialog.connect ("response", lambda d, r: d.destroy())
|
|
1401
|
-
ret = dialog.run()
|
|
1402
1474
|
dialog.destroy()
|
|
1403
|
-
|
|
1475
|
+
|
|
1476
|
+
#print("yes_no_cancel() result:", response);
|
|
1477
|
+
return response
|
|
1478
|
+
|
|
1479
|
+
def resp2str(resp):
|
|
1480
|
+
|
|
1481
|
+
''' Translate response to string '''
|
|
1482
|
+
|
|
1483
|
+
strx = "None"
|
|
1484
|
+
if resp == Gtk.ResponseType.YES:
|
|
1485
|
+
strx = "Yes"
|
|
1486
|
+
if resp == Gtk.ResponseType.NO:
|
|
1487
|
+
strx = "No"
|
|
1488
|
+
if resp == Gtk.ResponseType.OK:
|
|
1489
|
+
strx = "OK"
|
|
1490
|
+
if resp == Gtk.ResponseType.CANCEL:
|
|
1491
|
+
strx = "Cancel"
|
|
1492
|
+
if resp == Gtk.ResponseType.NONE:
|
|
1493
|
+
strx = "None"
|
|
1494
|
+
if resp == Gtk.ResponseType.ACCEPT:
|
|
1495
|
+
strx = "Accept"
|
|
1496
|
+
if resp == Gtk.ResponseType.REJECT:
|
|
1497
|
+
strx = "Reject"
|
|
1498
|
+
if resp == Gtk.ResponseType.CLOSE:
|
|
1499
|
+
strx = "CLlose"
|
|
1500
|
+
if resp == Gtk.ResponseType.DELETE_EVENT:
|
|
1501
|
+
strx = "Delete Event"
|
|
1502
|
+
return strx
|
|
1404
1503
|
|
|
1405
1504
|
# ------------------------------------------------------------------------
|
|
1406
1505
|
# Highlite test items
|
pyvguicom/pgsel.py
CHANGED
|
@@ -83,7 +83,7 @@ class LetterNumberSel(Gtk.VBox):
|
|
|
83
83
|
|
|
84
84
|
vbox = Gtk.VBox()
|
|
85
85
|
vbox.pack_start(hbox3a, 0, 0, False)
|
|
86
|
-
vbox.pack_start(pggui.ySpacer(
|
|
86
|
+
#vbox.pack_start(pggui.ySpacer(), 0, 0, False)
|
|
87
87
|
vbox.pack_start(hbox3b, 0, 0, False)
|
|
88
88
|
|
|
89
89
|
self.frame = Gtk.Frame()
|
|
@@ -143,17 +143,19 @@ class LetterNumberSel(Gtk.VBox):
|
|
|
143
143
|
if event.keyval == Gdk.KEY_Down:
|
|
144
144
|
if self.curr == self.simsel:
|
|
145
145
|
self.curr = self.simsel2
|
|
146
|
+
self.curr.exec_index(True)
|
|
146
147
|
else:
|
|
147
|
-
|
|
148
|
-
|
|
148
|
+
# Thu 02.May.2024 tab instead
|
|
149
|
+
self.emit("move-focus", Gtk.DirectionType.TAB_FORWARD)
|
|
149
150
|
return True
|
|
150
151
|
|
|
151
152
|
if event.keyval == Gdk.KEY_Up:
|
|
152
|
-
if self.curr == self.
|
|
153
|
-
self.curr = self.simsel2
|
|
154
|
-
else:
|
|
153
|
+
if self.curr == self.simsel2:
|
|
155
154
|
self.curr = self.simsel
|
|
156
|
-
|
|
155
|
+
self.curr.exec_index(True)
|
|
156
|
+
else:
|
|
157
|
+
# Thu 02.May.2024 tab instead
|
|
158
|
+
self.emit("move-focus", Gtk.DirectionType.TAB_BACKWARD)
|
|
157
159
|
return True
|
|
158
160
|
|
|
159
161
|
if event.keyval == Gdk.KEY_Home:
|