Native gui some more code

This commit is contained in:
2024-04-09 14:03:13 +01:00
parent 502605067f
commit 4b5ba85a77
3 changed files with 247 additions and 4 deletions
+32
View File
@@ -0,0 +1,32 @@
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'
}
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
+180
View File
@@ -0,0 +1,180 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.38.2 -->
<interface>
<requires lib="gtk+" version="3.24"/>
<object class="GtkWindow" id="wnd_main">
<property name="can-focus">False</property>
<property name="title" translatable="yes">YMS</property>
<signal name="destroy" handler="on_destroy" swapped="no"/>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<child>
<object class="GtkButtonBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="orientation">vertical</property>
<property name="homogeneous">True</property>
<property name="layout-style">start</property>
<child>
<object class="GtkButton" id="but_vessel">
<property name="label" translatable="yes">Vessel</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkButton" id="but_company">
<property name="label" translatable="yes">Companies</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkButton" id="but_equipment">
<property name="label" translatable="yes">Equipment</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">2</property>
</packing>
</child>
<child>
<object class="GtkButton" id="but_inventory">
<property name="label" translatable="yes">Inventory</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">3</property>
</packing>
</child>
<child>
<object class="GtkButton" id="but_provisions">
<property name="label" translatable="yes">Provisions</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">4</property>
</packing>
</child>
<child>
<object class="GtkButton" id="but_projects">
<property name="label" translatable="yes">Projects</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">5</property>
</packing>
</child>
<child>
<object class="GtkButton" id="but_documents">
<property name="label" translatable="yes">Documents</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">6</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="orientation">vertical</property>
<child>
<object class="GtkLabel" id="lbl_vessel">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">empty</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkScrolledWindow">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="shadow-type">in</property>
<child>
<object class="GtkTreeView" id="tvw_user">
<property name="visible">True</property>
<property name="can-focus">True</property>
<child internal-child="selection">
<object class="GtkTreeSelection"/>
</child>
</object>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkButton" id="but_info">
<property name="label" translatable="yes">Ok</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<signal name="clicked" handler="on_but_info_clicked" swapped="no"/>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">2</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
</child>
</object>
</interface>
+35 -4
View File
@@ -21,6 +21,7 @@ gi.require_version("Gtk", "3.0")
from gi.repository import GLib, Gtk from gi.repository import GLib, Gtk
from yms import database from yms import database
from yms import gtkutils
cfg = { cfg = {
'cfgfile': '~/.config/ymsgui.conf', 'cfgfile': '~/.config/ymsgui.conf',
@@ -29,16 +30,46 @@ cfg = {
'user': 'yms' 'user': 'yms'
} }
class Frontend(Gtk.Window): class Frontend():
def __init__(self): def __init__(self):
super().__init__() builder = Gtk.Builder()
self.connect("destroy", self.on_destroy) builder.add_from_file("yms/ui/main.ui")
builder.connect_signals(self)
self.window = builder.get_object("wnd_main")
gtkutils.init_named_controls(self, builder)
# get current vessel id
db.cur.execute("SELECT valint FROM settings WHERE userid=0 AND sno=1")
row = db.cur.fetchone()
if not row:
self.vid = 0
self.vname = "Ghost"
db.cur.execute("INSERT INTO settings (userid, sno, valint) VALUES (0, 1, 0)")
db.conn.commit()
else:
self.vid = row[0]
# get vessel infos
if self.vid > 0:
db.cur.execute("SELECT vesselname, model FROM vessel WHERE vid=%s", (self.vid, ))
self.vessel = db.cur.fetchone()
print(self.vessel['sesselname'])
else:
self.vname = "Ghost(0)"
def run(self): def run(self):
self.show_all() self.label['vessel'].set_text(self.vname)
self.window.show_all()
Gtk.main() Gtk.main()
def on_but_info_clicked(self, widget):
# Userlist
sql = ("SELECT userid, login FROM user ORDER BY login")
db.cur.execute(sql)
for row in db.cur.fetchall():
print(row)
def on_destroy(self, widget, data=None): def on_destroy(self, widget, data=None):
Gtk.main_quit() Gtk.main_quit()