72 lines
2.2 KiB
Python
72 lines
2.2 KiB
Python
from gi.repository import Gtk
|
|
|
|
def init_named_controls(window, builder):
|
|
ctrltype = {
|
|
'lbl': 'label',
|
|
'ent': 'entry',
|
|
'but': 'button',
|
|
'cmb': 'combo',
|
|
'tvw': 'tree',
|
|
'spi': 'spin',
|
|
'txt': 'text',
|
|
'chk': 'check',
|
|
'opt': 'radio',
|
|
'vbx': 'vbox',
|
|
'hbx': 'hbox',
|
|
'box': 'box',
|
|
'tbl': 'table',
|
|
'mnu': 'menu',
|
|
'img': 'image',
|
|
'drw': 'area',
|
|
'stk': 'stack'
|
|
}
|
|
for ctrl in ctrltype.values():
|
|
setattr(window, ctrl, {})
|
|
for widget in builder.get_objects():
|
|
if type(widget) in (Gtk.Adjustment, Gtk.CellRendererText, Gtk.TreeSelection):
|
|
continue
|
|
widgetname = Gtk.Buildable.get_name(widget)
|
|
nameparts = widgetname.partition('_')
|
|
if (not nameparts[0] in ctrltype.keys()) or (not nameparts[2]):
|
|
continue
|
|
var = getattr(window, ctrltype[nameparts[0]])
|
|
var[nameparts[2]] = widget
|
|
|
|
def messagebox(messagetext, symbol=None, title=None, parent=None):
|
|
if not symbol:
|
|
symbol = Gtk.MessageType.INFO
|
|
if parent:
|
|
flags = Gtk.DialogFlags.DESTROY_WITH_PARENT
|
|
else:
|
|
flags = 0
|
|
md = Gtk.MessageDialog(parent=parent, flags=flags, message_type=symbol, buttons=Gtk.ButtonsType.CLOSE)
|
|
md.set_markup(messagetext)
|
|
if title:
|
|
md.set_title(title)
|
|
if not parent:
|
|
md.set_position(Gtk.WindowPosition.CENTER)
|
|
md.run()
|
|
md.destroy()
|
|
|
|
def questionbox(messagetext, symbol=None, title=None, parent=None):
|
|
"""
|
|
Ja/Nein-Nachfrage bei wirklich wichtigen Entscheidungen
|
|
Die Entscheidung wird als Rückgabewert geliefert: True falls
|
|
zugestimmt wurde, False bei Ablehnung
|
|
"""
|
|
if not symbol:
|
|
symbol = Gtk.MessageType.QUESTION
|
|
if parent:
|
|
flags = Gtk.DialogFlags.DESTROY_WITH_PARENT
|
|
else:
|
|
flags = 0
|
|
md = Gtk.MessageDialog(parent=parent, flags=flags, message_type=symbol, buttons=Gtk.ButtonsType.YES_NO)
|
|
md.set_markup(messagetext)
|
|
if title:
|
|
md.set_title(title)
|
|
if not parent:
|
|
md.set_position(Gtk.WindowPosition.CENTER)
|
|
response = md.run()
|
|
md.destroy()
|
|
return response == Gtk.ResponseType.YES
|