Native gui: implement data lists for all modules

This commit is contained in:
2026-09-12 19:36:03 +02:00
parent 4bc8dd8280
commit d72147c012
24 changed files with 2439 additions and 198 deletions
+2 -2
View File
@@ -33,7 +33,7 @@ def refresh_dict(combobox, dictionary, keep_selection=True):
model = combobox.get_model() model = combobox.get_model()
selected = get_value(combobox) selected = get_value(combobox)
model.clear() model.clear()
for item in dictionary.iteritems(): for item in dictionary.items():
model.append(item) model.append(item)
if keep_selection: if keep_selection:
activate_row(combobox, selected) activate_row(combobox, selected)
@@ -70,7 +70,7 @@ def get_value(combobox, decode=False):
if active < 0: if active < 0:
return None return None
else: else:
if type(model) == gtk.TreeStore: if type(model) == Gtk.TreeStore:
it = combobox.get_active_iter() it = combobox.get_active_iter()
val = model.get_value(it, 0) val = model.get_value(it, 0)
if decode: if decode:
+13 -1
View File
@@ -18,6 +18,7 @@ class DbRecord:
raise TypeError("DbRecord subclass must define 'fields'") raise TypeError("DbRecord subclass must define 'fields'")
self.db = db self.db = db
self.cur = db.cur
self.dcur = db.dcur self.dcur = db.dcur
self.conn = db.conn self.conn = db.conn
self.last_update = None self.last_update = None
@@ -32,9 +33,10 @@ class DbRecord:
self.clear() self.clear()
def clear(self): def clear(self):
self.data = {} # for old/new checks
for field in self.fields: for field in self.fields:
setattr(self, field, None) setattr(self, field, None)
self.data = {} # for old/new checks self.data[field] = None
def load(self, record_id=None): def load(self, record_id=None):
if record_id is not None: if record_id is not None:
@@ -47,6 +49,8 @@ class DbRecord:
self.dcur.execute(sql, (self.pk_value,)) self.dcur.execute(sql, (self.pk_value,))
self.data = self.dcur.fetchone() self.data = self.dcur.fetchone()
except Exception as e: except Exception as e:
print(e)
print(sql)
self.db.error = e self.db.error = e
self.clear() self.clear()
return False return False
@@ -83,6 +87,9 @@ class DbRecord:
try: try:
self.dcur.execute(sql, values) self.dcur.execute(sql, values)
except Exception as e: except Exception as e:
print(e)
print(sql)
print(values)
self.db.error = e self.db.error = e
return False return False
for field in self.fields: for field in self.fields:
@@ -106,6 +113,9 @@ class DbRecord:
try: try:
self.dcur.execute(sql, values) self.dcur.execute(sql, values)
except Exception as e: except Exception as e:
print(e)
print(sql)
print(values)
self.db.error = e self.db.error = e
return False return False
self.pk_value = self.dcur.lastrowid self.pk_value = self.dcur.lastrowid
@@ -120,6 +130,8 @@ class DbRecord:
try: try:
self.dcur.execute(sql, (record_id,)) self.dcur.execute(sql, (record_id,))
except Exception as e: except Exception as e:
print(e)
print(sql)
self.db.error = e self.db.error = e
return False return False
if self.dcur.rowcount != 1: if self.dcur.rowcount != 1:
+1 -1
View File
@@ -10,6 +10,6 @@ class Document(DbRecord):
'hash', 'docsize', 'doctime', 'docdate', 'title', 'pages', 'remarks', 'hash', 'docsize', 'doctime', 'docdate', 'title', 'pages', 'remarks',
'roleaccess') 'roleaccess')
def __init__(self, db, dicid=None): def __init__(self, db, docid=None):
super().__init__(db, docid) super().__init__(db, docid)
self.title = _("Document({})") self.title = _("Document({})")
+21 -1
View File
@@ -8,8 +8,28 @@ class Vessel(DbRecord):
pk_field = "vid" pk_field = "vid"
fields = ('vid', 'vtype', 'vesselname', 'model', 'shipyard', 'loa', 'lwl', fields = ('vid', 'vtype', 'vesselname', 'model', 'shipyard', 'loa', 'lwl',
'beam', 'draught', 'draught_min', 'displacement', 'ballast', 'beam', 'draught', 'draught_min', 'displacement', 'ballast',
'beltpos_aft', 'beltpos_bow', 'shapefile', 'sid_default', 'remarks') 'beltpos_aft', 'beltpos_bow', 'shapefile', 'sid_default', 'year_built',
'remarks')
def __init__(self, db, vid=None): def __init__(self, db, vid=None):
super().__init__(db, vid) super().__init__(db, vid)
self.title = _("Vessel({})") self.title = _("Vessel({})")
def create(self):
sql = (
"SELECT MIN(v1.vid+1) AS newid "
"FROM vessel AS v1 LEFT JOIN vessel AS v2 ON v2.vid=v1.vid+1 "
"WHERE v1.vid>=0 AND v2.vid IS NULL"
)
self.dcur.execute(sql)
row = self.cur.fetchone()
if row is None:
# vessel table empty: create first vessel
self.pk_value = 1
else:
# create additional vessel
self.pk_value = row['newid']
self.vesselname = f"Vessel #{self.pk_value}"
self.vtype = 1 # monohull
self._insert()
self.conn.commit()
+128 -49
View File
@@ -2,6 +2,46 @@
<!-- Generated with glade 3.40.0 --> <!-- Generated with glade 3.40.0 -->
<interface> <interface>
<requires lib="gtk+" version="3.24"/> <requires lib="gtk+" version="3.24"/>
<object class="GtkAdjustment" id="adj_ballast">
<property name="upper">20000</property>
<property name="step-increment">100</property>
<property name="page-increment">1000</property>
</object>
<object class="GtkAdjustment" id="adj_beam">
<property name="upper">10</property>
<property name="step-increment">0.10</property>
<property name="page-increment">1</property>
</object>
<object class="GtkAdjustment" id="adj_displacement">
<property name="upper">50000</property>
<property name="step-increment">100</property>
<property name="page-increment">1000</property>
</object>
<object class="GtkAdjustment" id="adj_draught">
<property name="upper">5</property>
<property name="step-increment">0.10</property>
<property name="page-increment">1</property>
</object>
<object class="GtkAdjustment" id="adj_draught_min">
<property name="upper">5</property>
<property name="step-increment">0.10</property>
<property name="page-increment">1</property>
</object>
<object class="GtkAdjustment" id="adj_loa">
<property name="upper">100</property>
<property name="step-increment">0.10</property>
<property name="page-increment">1</property>
</object>
<object class="GtkAdjustment" id="adj_lwl">
<property name="upper">100</property>
<property name="step-increment">0.10</property>
<property name="page-increment">1</property>
</object>
<object class="GtkAdjustment" id="adj_year_built">
<property name="upper">2100</property>
<property name="step-increment">1</property>
<property name="page-increment">10</property>
</object>
<object class="GtkStack" id="topobject"> <object class="GtkStack" id="topobject">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">False</property> <property name="can-focus">False</property>
@@ -31,6 +71,8 @@
<object class="GtkComboBox" id="cmb_vessel"> <object class="GtkComboBox" id="cmb_vessel">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">False</property> <property name="can-focus">False</property>
<property name="margin-start">4</property>
<property name="margin-end">4</property>
<signal name="changed" handler="on_cmb_vessel_changed" swapped="no"/> <signal name="changed" handler="on_cmb_vessel_changed" swapped="no"/>
</object> </object>
<packing> <packing>
@@ -40,12 +82,10 @@
</packing> </packing>
</child> </child>
<child> <child>
<!-- n-columns=2 n-rows=12 --> <!-- n-columns=2 n-rows=13 -->
<object class="GtkGrid"> <object class="GtkGrid">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">False</property> <property name="can-focus">False</property>
<property name="margin-left">4</property>
<property name="margin-right">4</property>
<property name="margin-start">4</property> <property name="margin-start">4</property>
<property name="margin-end">4</property> <property name="margin-end">4</property>
<property name="row-spacing">4</property> <property name="row-spacing">4</property>
@@ -104,7 +144,7 @@
</object> </object>
<packing> <packing>
<property name="left-attach">0</property> <property name="left-attach">0</property>
<property name="top-attach">2</property> <property name="top-attach">3</property>
</packing> </packing>
</child> </child>
<child> <child>
@@ -115,7 +155,7 @@
</object> </object>
<packing> <packing>
<property name="left-attach">0</property> <property name="left-attach">0</property>
<property name="top-attach">3</property> <property name="top-attach">4</property>
</packing> </packing>
</child> </child>
<child> <child>
@@ -126,7 +166,7 @@
</object> </object>
<packing> <packing>
<property name="left-attach">0</property> <property name="left-attach">0</property>
<property name="top-attach">4</property> <property name="top-attach">5</property>
</packing> </packing>
</child> </child>
<child> <child>
@@ -137,7 +177,7 @@
</object> </object>
<packing> <packing>
<property name="left-attach">0</property> <property name="left-attach">0</property>
<property name="top-attach">5</property> <property name="top-attach">6</property>
</packing> </packing>
</child> </child>
<child> <child>
@@ -148,24 +188,14 @@
</object> </object>
<packing> <packing>
<property name="left-attach">0</property> <property name="left-attach">0</property>
<property name="top-attach">6</property> <property name="top-attach">7</property>
</packing> </packing>
</child> </child>
<child> <child>
<object class="GtkSpinButton" id="spi_loa"> <object class="GtkSpinButton" id="spi_loa">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">True</property> <property name="can-focus">True</property>
<property name="digits">2</property> <property name="adjustment">adj_loa</property>
</object>
<packing>
<property name="left-attach">1</property>
<property name="top-attach">2</property>
</packing>
</child>
<child>
<object class="GtkSpinButton" id="spi_lwl">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="digits">2</property> <property name="digits">2</property>
</object> </object>
<packing> <packing>
@@ -174,9 +204,10 @@
</packing> </packing>
</child> </child>
<child> <child>
<object class="GtkSpinButton" id="spi_beam"> <object class="GtkSpinButton" id="spi_lwl">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">True</property> <property name="can-focus">True</property>
<property name="adjustment">adj_lwl</property>
<property name="digits">2</property> <property name="digits">2</property>
</object> </object>
<packing> <packing>
@@ -185,9 +216,10 @@
</packing> </packing>
</child> </child>
<child> <child>
<object class="GtkSpinButton" id="spi_draught"> <object class="GtkSpinButton" id="spi_beam">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">True</property> <property name="can-focus">True</property>
<property name="adjustment">adj_beam</property>
<property name="digits">2</property> <property name="digits">2</property>
</object> </object>
<packing> <packing>
@@ -196,9 +228,10 @@
</packing> </packing>
</child> </child>
<child> <child>
<object class="GtkSpinButton" id="spi_draught_min"> <object class="GtkSpinButton" id="spi_draught">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">True</property> <property name="can-focus">True</property>
<property name="adjustment">adj_draught</property>
<property name="digits">2</property> <property name="digits">2</property>
</object> </object>
<packing> <packing>
@@ -206,6 +239,18 @@
<property name="top-attach">6</property> <property name="top-attach">6</property>
</packing> </packing>
</child> </child>
<child>
<object class="GtkSpinButton" id="spi_draught_min">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="adjustment">adj_draught_min</property>
<property name="digits">2</property>
</object>
<packing>
<property name="left-attach">1</property>
<property name="top-attach">7</property>
</packing>
</child>
<child> <child>
<object class="GtkLabel"> <object class="GtkLabel">
<property name="visible">True</property> <property name="visible">True</property>
@@ -214,7 +259,7 @@
</object> </object>
<packing> <packing>
<property name="left-attach">0</property> <property name="left-attach">0</property>
<property name="top-attach">8</property> <property name="top-attach">9</property>
</packing> </packing>
</child> </child>
<child> <child>
@@ -225,27 +270,29 @@
</object> </object>
<packing> <packing>
<property name="left-attach">0</property> <property name="left-attach">0</property>
<property name="top-attach">9</property> <property name="top-attach">10</property>
</packing> </packing>
</child> </child>
<child> <child>
<object class="GtkSpinButton" id="spi_displacement"> <object class="GtkSpinButton" id="spi_displacement">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">True</property> <property name="can-focus">True</property>
<property name="adjustment">adj_displacement</property>
</object> </object>
<packing> <packing>
<property name="left-attach">1</property> <property name="left-attach">1</property>
<property name="top-attach">8</property> <property name="top-attach">9</property>
</packing> </packing>
</child> </child>
<child> <child>
<object class="GtkSpinButton" id="spi_ballast"> <object class="GtkSpinButton" id="spi_ballast">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">True</property> <property name="can-focus">True</property>
<property name="adjustment">adj_ballast</property>
</object> </object>
<packing> <packing>
<property name="left-attach">1</property> <property name="left-attach">1</property>
<property name="top-attach">9</property> <property name="top-attach">10</property>
</packing> </packing>
</child> </child>
<child> <child>
@@ -256,25 +303,7 @@
</object> </object>
<packing> <packing>
<property name="left-attach">0</property> <property name="left-attach">0</property>
<property name="top-attach">11</property> <property name="top-attach">12</property>
</packing>
</child>
<child>
<object class="GtkTextView" id="txt_vessel_remarks">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="hexpand">True</property>
<property name="hscroll-policy">natural</property>
<property name="vscroll-policy">natural</property>
<property name="wrap-mode">word</property>
<property name="left-margin">1</property>
<property name="right-margin">1</property>
<property name="top-margin">1</property>
<property name="bottom-margin">1</property>
</object>
<packing>
<property name="left-attach">1</property>
<property name="top-attach">11</property>
</packing> </packing>
</child> </child>
<child> <child>
@@ -284,7 +313,7 @@
</object> </object>
<packing> <packing>
<property name="left-attach">1</property> <property name="left-attach">1</property>
<property name="top-attach">10</property> <property name="top-attach">11</property>
</packing> </packing>
</child> </child>
<child> <child>
@@ -295,7 +324,7 @@
</object> </object>
<packing> <packing>
<property name="left-attach">0</property> <property name="left-attach">0</property>
<property name="top-attach">10</property> <property name="top-attach">11</property>
</packing> </packing>
</child> </child>
<child> <child>
@@ -306,7 +335,7 @@
</object> </object>
<packing> <packing>
<property name="left-attach">0</property> <property name="left-attach">0</property>
<property name="top-attach">7</property> <property name="top-attach">8</property>
</packing> </packing>
</child> </child>
<child> <child>
@@ -316,7 +345,57 @@
</object> </object>
<packing> <packing>
<property name="left-attach">1</property> <property name="left-attach">1</property>
<property name="top-attach">7</property> <property name="top-attach">8</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="GtkTextView" id="txt_vessel_remarks">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="hexpand">True</property>
<property name="hscroll-policy">natural</property>
<property name="vscroll-policy">natural</property>
<property name="wrap-mode">word</property>
<property name="left-margin">1</property>
<property name="right-margin">1</property>
<property name="top-margin">1</property>
<property name="bottom-margin">1</property>
<signal name="key-press-event" handler="on_textview_keypress" swapped="no"/>
<signal name="paste-clipboard" handler="on_textview_paste" swapped="no"/>
</object>
</child>
</object>
<packing>
<property name="left-attach">1</property>
<property name="top-attach">12</property>
</packing>
</child>
<child>
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">Year built</property>
</object>
<packing>
<property name="left-attach">0</property>
<property name="top-attach">2</property>
</packing>
</child>
<child>
<object class="GtkSpinButton" id="spi_year_built">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="text" translatable="yes">0</property>
<property name="adjustment">adj_year_built</property>
</object>
<packing>
<property name="left-attach">1</property>
<property name="top-attach">2</property>
</packing> </packing>
</child> </child>
</object> </object>
+218 -4
View File
@@ -165,11 +165,12 @@
<property name="can-focus">False</property> <property name="can-focus">False</property>
<property name="layout-style">end</property> <property name="layout-style">end</property>
<child> <child>
<object class="GtkButton"> <object class="GtkButton" id="but_new">
<property name="label" translatable="yes">New</property> <property name="label" translatable="yes">New</property>
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">True</property> <property name="can-focus">True</property>
<property name="receives-default">True</property> <property name="receives-default">True</property>
<signal name="clicked" handler="on_but_new_clicked" swapped="no"/>
</object> </object>
<packing> <packing>
<property name="expand">True</property> <property name="expand">True</property>
@@ -178,11 +179,12 @@
</packing> </packing>
</child> </child>
<child> <child>
<object class="GtkButton"> <object class="GtkButton" id="but_edit">
<property name="label" translatable="yes">Edit</property> <property name="label" translatable="yes">Edit</property>
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">True</property> <property name="can-focus">True</property>
<property name="receives-default">True</property> <property name="receives-default">True</property>
<signal name="clicked" handler="on_but_edit_clicked" swapped="no"/>
</object> </object>
<packing> <packing>
<property name="expand">True</property> <property name="expand">True</property>
@@ -191,11 +193,12 @@
</packing> </packing>
</child> </child>
<child> <child>
<object class="GtkButton"> <object class="GtkButton" id="but_detail">
<property name="label" translatable="yes">Delete</property> <property name="label" translatable="yes">Details</property>
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">True</property> <property name="can-focus">True</property>
<property name="receives-default">True</property> <property name="receives-default">True</property>
<signal name="clicked" handler="on_but_detail_clicked" swapped="no"/>
</object> </object>
<packing> <packing>
<property name="expand">True</property> <property name="expand">True</property>
@@ -216,5 +219,216 @@
<property name="title" translatable="yes">page0</property> <property name="title" translatable="yes">page0</property>
</packing> </packing>
</child> </child>
<child>
<object class="GtkBox" id="box_doc_detail">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="orientation">vertical</property>
<child>
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">label</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<!-- n-columns=3 n-rows=3 -->
<object class="GtkGrid">
<property name="visible">True</property>
<property name="can-focus">False</property>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkButtonBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="layout-style">end</property>
<child>
<object class="GtkButton" id="but_delete">
<property name="label" translatable="yes">Delete</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<signal name="clicked" handler="on_but_delete_clicked" swapped="no"/>
</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_edit2">
<property name="label" translatable="yes">Edit</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<signal name="clicked" handler="on_but_edit_clicked" swapped="no"/>
</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_close">
<property name="label" translatable="yes">Close</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<signal name="clicked" handler="on_but_close_clicked" swapped="no"/>
</object>
<packing>
<property name="expand">True</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">2</property>
</packing>
</child>
</object>
<packing>
<property name="name">page1</property>
<property name="title" translatable="yes">page1</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkBox" id="box_doc_edit">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="orientation">vertical</property>
<child>
<placeholder/>
</child>
<child>
<!-- n-columns=3 n-rows=3 -->
<object class="GtkGrid">
<property name="visible">True</property>
<property name="can-focus">False</property>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkButtonBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="layout-style">end</property>
<child>
<object class="GtkButton" id="but_save">
<property name="label" translatable="yes">Save</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<signal name="clicked" handler="on_but_save_clicked" swapped="no"/>
</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_cancel">
<property name="label" translatable="yes">Cancel</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<signal name="clicked" handler="on_but_cancel_clicked" swapped="no"/>
</object>
<packing>
<property name="expand">True</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">2</property>
</packing>
</child>
</object>
<packing>
<property name="name">page2</property>
<property name="title" translatable="yes">page2</property>
<property name="position">2</property>
</packing>
</child>
</object> </object>
</interface> </interface>
+241 -7
View File
@@ -2,7 +2,7 @@
<!-- Generated with glade 3.40.0 --> <!-- Generated with glade 3.40.0 -->
<interface> <interface>
<requires lib="gtk+" version="3.24"/> <requires lib="gtk+" version="3.24"/>
<object class="GtkStack" id="stk_equipment"> <object class="GtkStack" id="topobject">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">False</property> <property name="can-focus">False</property>
<property name="margin-start">8</property> <property name="margin-start">8</property>
@@ -281,6 +281,7 @@
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">True</property> <property name="can-focus">True</property>
<property name="receives-default">True</property> <property name="receives-default">True</property>
<signal name="clicked" handler="on_but_detail_clicked" swapped="no"/>
</object> </object>
<packing> <packing>
<property name="expand">True</property> <property name="expand">True</property>
@@ -311,6 +312,9 @@
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">False</property> <property name="can-focus">False</property>
<property name="label" translatable="yes">Equipment details</property> <property name="label" translatable="yes">Equipment details</property>
<attributes>
<attribute name="weight" value="bold"/>
</attributes>
</object> </object>
<packing> <packing>
<property name="expand">False</property> <property name="expand">False</property>
@@ -319,7 +323,7 @@
</packing> </packing>
</child> </child>
<child> <child>
<!-- n-columns=3 n-rows=3 --> <!-- n-columns=3 n-rows=11 -->
<object class="GtkGrid"> <object class="GtkGrid">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">False</property> <property name="can-focus">False</property>
@@ -327,7 +331,7 @@
<object class="GtkLabel"> <object class="GtkLabel">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">False</property> <property name="can-focus">False</property>
<property name="label" translatable="yes">label</property> <property name="label" translatable="yes">Name</property>
</object> </object>
<packing> <packing>
<property name="left-attach">0</property> <property name="left-attach">0</property>
@@ -338,7 +342,7 @@
<object class="GtkLabel"> <object class="GtkLabel">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">False</property> <property name="can-focus">False</property>
<property name="label" translatable="yes">label</property> <property name="label" translatable="yes">Short name</property>
</object> </object>
<packing> <packing>
<property name="left-attach">0</property> <property name="left-attach">0</property>
@@ -349,13 +353,227 @@
<object class="GtkLabel"> <object class="GtkLabel">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">False</property> <property name="can-focus">False</property>
<property name="label" translatable="yes">label</property> <property name="label" translatable="yes">Manufacturer</property>
</object> </object>
<packing> <packing>
<property name="left-attach">0</property> <property name="left-attach">0</property>
<property name="top-attach">2</property> <property name="top-attach">2</property>
</packing> </packing>
</child> </child>
<child>
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">Model</property>
</object>
<packing>
<property name="left-attach">0</property>
<property name="top-attach">3</property>
</packing>
</child>
<child>
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">Serial no.</property>
</object>
<packing>
<property name="left-attach">0</property>
<property name="top-attach">4</property>
</packing>
</child>
<child>
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">Weight</property>
</object>
<packing>
<property name="left-attach">0</property>
<property name="top-attach">5</property>
</packing>
</child>
<child>
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">Price</property>
</object>
<packing>
<property name="left-attach">0</property>
<property name="top-attach">6</property>
</packing>
</child>
<child>
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">Date purchase</property>
</object>
<packing>
<property name="left-attach">0</property>
<property name="top-attach">7</property>
</packing>
</child>
<child>
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">Supplier</property>
</object>
<packing>
<property name="left-attach">0</property>
<property name="top-attach">8</property>
</packing>
</child>
<child>
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">Category</property>
</object>
<packing>
<property name="left-attach">0</property>
<property name="top-attach">9</property>
</packing>
</child>
<child>
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">Remarks</property>
</object>
<packing>
<property name="left-attach">0</property>
<property name="top-attach">10</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="lbl_name">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">Placeholder</property>
</object>
<packing>
<property name="left-attach">1</property>
<property name="top-attach">0</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="lbl_shortname">
<property name="visible">True</property>
<property name="can-focus">False</property>
</object>
<packing>
<property name="left-attach">1</property>
<property name="top-attach">1</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="lbl_manufacturer">
<property name="visible">True</property>
<property name="can-focus">False</property>
</object>
<packing>
<property name="left-attach">1</property>
<property name="top-attach">2</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="lbl_model">
<property name="visible">True</property>
<property name="can-focus">False</property>
</object>
<packing>
<property name="left-attach">1</property>
<property name="top-attach">3</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="lbl_serial">
<property name="visible">True</property>
<property name="can-focus">False</property>
</object>
<packing>
<property name="left-attach">1</property>
<property name="top-attach">4</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="lbl_weight">
<property name="visible">True</property>
<property name="can-focus">False</property>
</object>
<packing>
<property name="left-attach">1</property>
<property name="top-attach">5</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="lbl_price">
<property name="visible">True</property>
<property name="can-focus">False</property>
</object>
<packing>
<property name="left-attach">1</property>
<property name="top-attach">6</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="lbl_date_purch">
<property name="visible">True</property>
<property name="can-focus">False</property>
</object>
<packing>
<property name="left-attach">1</property>
<property name="top-attach">7</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="lbl_supplier">
<property name="visible">True</property>
<property name="can-focus">False</property>
</object>
<packing>
<property name="left-attach">1</property>
<property name="top-attach">8</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="lbl_category">
<property name="visible">True</property>
<property name="can-focus">False</property>
</object>
<packing>
<property name="left-attach">1</property>
<property name="top-attach">9</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="lbl_remarks">
<property name="visible">True</property>
<property name="can-focus">False</property>
</object>
<packing>
<property name="left-attach">1</property>
<property name="top-attach">10</property>
</packing>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<child> <child>
<placeholder/> <placeholder/>
</child> </child>
@@ -407,6 +625,7 @@
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">True</property> <property name="can-focus">True</property>
<property name="receives-default">True</property> <property name="receives-default">True</property>
<signal name="clicked" handler="on_but_edit_clicked" swapped="no"/>
</object> </object>
<packing> <packing>
<property name="expand">True</property> <property name="expand">True</property>
@@ -447,6 +666,21 @@
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">False</property> <property name="can-focus">False</property>
<property name="orientation">vertical</property> <property name="orientation">vertical</property>
<child>
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">Edit Equipment</property>
<attributes>
<attribute name="weight" value="bold"/>
</attributes>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child> <child>
<!-- n-columns=2 n-rows=11 --> <!-- n-columns=2 n-rows=11 -->
<object class="GtkGrid"> <object class="GtkGrid">
@@ -687,7 +921,7 @@
<packing> <packing>
<property name="expand">False</property> <property name="expand">False</property>
<property name="fill">True</property> <property name="fill">True</property>
<property name="position">0</property> <property name="position">1</property>
</packing> </packing>
</child> </child>
<child> <child>
@@ -728,7 +962,7 @@
<property name="expand">False</property> <property name="expand">False</property>
<property name="fill">True</property> <property name="fill">True</property>
<property name="pack-type">end</property> <property name="pack-type">end</property>
<property name="position">1</property> <property name="position">2</property>
</packing> </packing>
</child> </child>
</object> </object>
+33 -11
View File
@@ -2,6 +2,21 @@
<!-- Generated with glade 3.40.0 --> <!-- Generated with glade 3.40.0 -->
<interface> <interface>
<requires lib="gtk+" version="3.24"/> <requires lib="gtk+" version="3.24"/>
<object class="GtkAdjustment" id="adj_number">
<property name="upper">1000</property>
<property name="step-increment">1</property>
<property name="page-increment">10</property>
</object>
<object class="GtkAdjustment" id="adj_price">
<property name="upper">10000</property>
<property name="step-increment">10</property>
<property name="page-increment">100</property>
</object>
<object class="GtkAdjustment" id="adj_weight">
<property name="upper">1000</property>
<property name="step-increment">1</property>
<property name="page-increment">10</property>
</object>
<object class="GtkStack" id="topobject"> <object class="GtkStack" id="topobject">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">False</property> <property name="can-focus">False</property>
@@ -166,7 +181,7 @@
<property name="spacing">2</property> <property name="spacing">2</property>
<property name="layout-style">end</property> <property name="layout-style">end</property>
<child> <child>
<object class="GtkButton"> <object class="GtkButton" id="but_new">
<property name="label" translatable="yes">New</property> <property name="label" translatable="yes">New</property>
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">True</property> <property name="can-focus">True</property>
@@ -179,7 +194,7 @@
</packing> </packing>
</child> </child>
<child> <child>
<object class="GtkButton"> <object class="GtkButton" id="but_edit">
<property name="label" translatable="yes">Edit</property> <property name="label" translatable="yes">Edit</property>
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">True</property> <property name="can-focus">True</property>
@@ -192,7 +207,7 @@
</packing> </packing>
</child> </child>
<child> <child>
<object class="GtkButton"> <object class="GtkButton" id="but_detail">
<property name="label" translatable="yes">Details</property> <property name="label" translatable="yes">Details</property>
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">True</property> <property name="can-focus">True</property>
@@ -517,8 +532,8 @@
<property name="can-focus">False</property> <property name="can-focus">False</property>
<property name="layout-style">end</property> <property name="layout-style">end</property>
<child> <child>
<object class="GtkButton"> <object class="GtkButton" id="but_delete">
<property name="label" translatable="yes">button</property> <property name="label" translatable="yes">Delete</property>
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">True</property> <property name="can-focus">True</property>
<property name="receives-default">True</property> <property name="receives-default">True</property>
@@ -527,14 +542,16 @@
<property name="expand">True</property> <property name="expand">True</property>
<property name="fill">True</property> <property name="fill">True</property>
<property name="position">0</property> <property name="position">0</property>
<property name="secondary">True</property>
</packing> </packing>
</child> </child>
<child> <child>
<object class="GtkButton"> <object class="GtkButton" id="but_edit2">
<property name="label" translatable="yes">button</property> <property name="label" translatable="yes">Edit</property>
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">True</property> <property name="can-focus">True</property>
<property name="receives-default">True</property> <property name="receives-default">True</property>
<signal name="clicked" handler="on_but_edit_clicked" swapped="no"/>
</object> </object>
<packing> <packing>
<property name="expand">True</property> <property name="expand">True</property>
@@ -543,11 +560,12 @@
</packing> </packing>
</child> </child>
<child> <child>
<object class="GtkButton"> <object class="GtkButton" id="but_close">
<property name="label" translatable="yes">button</property> <property name="label" translatable="yes">Close</property>
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">True</property> <property name="can-focus">True</property>
<property name="receives-default">True</property> <property name="receives-default">True</property>
<signal name="clicked" handler="on_but_close_clicked" swapped="no"/>
</object> </object>
<packing> <packing>
<property name="expand">True</property> <property name="expand">True</property>
@@ -787,6 +805,7 @@
<object class="GtkSpinButton" id="spi_number"> <object class="GtkSpinButton" id="spi_number">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">True</property> <property name="can-focus">True</property>
<property name="adjustment">adj_number</property>
</object> </object>
<packing> <packing>
<property name="left-attach">1</property> <property name="left-attach">1</property>
@@ -797,6 +816,7 @@
<object class="GtkSpinButton" id="spi_weight"> <object class="GtkSpinButton" id="spi_weight">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">True</property> <property name="can-focus">True</property>
<property name="adjustment">adj_weight</property>
<property name="digits">2</property> <property name="digits">2</property>
</object> </object>
<packing> <packing>
@@ -808,6 +828,7 @@
<object class="GtkSpinButton" id="spi_price"> <object class="GtkSpinButton" id="spi_price">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">True</property> <property name="can-focus">True</property>
<property name="adjustment">adj_price</property>
<property name="digits">2</property> <property name="digits">2</property>
</object> </object>
<packing> <packing>
@@ -861,11 +882,12 @@
<property name="can-focus">False</property> <property name="can-focus">False</property>
<property name="layout-style">end</property> <property name="layout-style">end</property>
<child> <child>
<object class="GtkButton"> <object class="GtkButton" id="but_save">
<property name="label" translatable="yes">Save</property> <property name="label" translatable="yes">Save</property>
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">True</property> <property name="can-focus">True</property>
<property name="receives-default">True</property> <property name="receives-default">True</property>
<signal name="clicked" handler="on_but_save_clicked" swapped="no"/>
</object> </object>
<packing> <packing>
<property name="expand">True</property> <property name="expand">True</property>
@@ -874,7 +896,7 @@
</packing> </packing>
</child> </child>
<child> <child>
<object class="GtkButton"> <object class="GtkButton" id="but_cancel">
<property name="label" translatable="yes">Cancel</property> <property name="label" translatable="yes">Cancel</property>
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">True</property> <property name="can-focus">True</property>
+227 -4
View File
@@ -144,11 +144,12 @@
<property name="can-focus">False</property> <property name="can-focus">False</property>
<property name="layout-style">end</property> <property name="layout-style">end</property>
<child> <child>
<object class="GtkButton"> <object class="GtkButton" id="but_new">
<property name="label" translatable="yes">New</property> <property name="label" translatable="yes">New</property>
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">True</property> <property name="can-focus">True</property>
<property name="receives-default">True</property> <property name="receives-default">True</property>
<signal name="clicked" handler="on_but_new_clicked" swapped="no"/>
</object> </object>
<packing> <packing>
<property name="expand">True</property> <property name="expand">True</property>
@@ -157,11 +158,12 @@
</packing> </packing>
</child> </child>
<child> <child>
<object class="GtkButton"> <object class="GtkButton" id="but_edit">
<property name="label" translatable="yes">Edit</property> <property name="label" translatable="yes">Edit</property>
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">True</property> <property name="can-focus">True</property>
<property name="receives-default">True</property> <property name="receives-default">True</property>
<signal name="clicked" handler="on_but_edit_clicked" swapped="no"/>
</object> </object>
<packing> <packing>
<property name="expand">True</property> <property name="expand">True</property>
@@ -170,11 +172,12 @@
</packing> </packing>
</child> </child>
<child> <child>
<object class="GtkButton"> <object class="GtkButton" id="but_detail">
<property name="label" translatable="yes">Delete</property> <property name="label" translatable="yes">Details</property>
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">True</property> <property name="can-focus">True</property>
<property name="receives-default">True</property> <property name="receives-default">True</property>
<signal name="clicked" handler="on_but_detail_clicked" swapped="no"/>
</object> </object>
<packing> <packing>
<property name="expand">True</property> <property name="expand">True</property>
@@ -195,5 +198,225 @@
<property name="title" translatable="yes">page0</property> <property name="title" translatable="yes">page0</property>
</packing> </packing>
</child> </child>
<child>
<object class="GtkBox" id="box_maint_detail">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="orientation">vertical</property>
<child>
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">label</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<!-- n-columns=3 n-rows=3 -->
<object class="GtkGrid">
<property name="visible">True</property>
<property name="can-focus">False</property>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkButtonBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="layout-style">end</property>
<child>
<object class="GtkButton" id="but_delete">
<property name="label" translatable="yes">Delete</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<signal name="clicked" handler="on_but_delete_clicked" swapped="no"/>
</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_edit2">
<property name="label" translatable="yes">Edit</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<signal name="clicked" handler="on_but_edit_clicked" swapped="no"/>
</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_close">
<property name="label" translatable="yes">Close</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<signal name="clicked" handler="on_but_close_clicked" swapped="no"/>
</object>
<packing>
<property name="expand">True</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">2</property>
</packing>
</child>
</object>
<packing>
<property name="name">page1</property>
<property name="title" translatable="yes">page1</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkBox" id="box_maint_edit">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="orientation">vertical</property>
<child>
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">label</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<!-- n-columns=3 n-rows=3 -->
<object class="GtkGrid">
<property name="visible">True</property>
<property name="can-focus">False</property>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkButtonBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="layout-style">end</property>
<child>
<object class="GtkButton" id="but_save">
<property name="label" translatable="yes">Save</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<signal name="clicked" handler="on_but_save_clicked" swapped="no"/>
</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_cancel">
<property name="label" translatable="yes">Cancel</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<signal name="clicked" handler="on_but_cancel_clicked" swapped="no"/>
</object>
<packing>
<property name="expand">True</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">2</property>
</packing>
</child>
</object>
<packing>
<property name="name">page2</property>
<property name="title" translatable="yes">page2</property>
<property name="position">2</property>
</packing>
</child>
</object> </object>
</interface> </interface>
+219
View File
@@ -216,5 +216,224 @@
<property name="title" translatable="yes">page0</property> <property name="title" translatable="yes">page0</property>
</packing> </packing>
</child> </child>
<child>
<object class="GtkBox" id="box_proj_detail">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="orientation">vertical</property>
<child>
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">label</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<!-- n-columns=3 n-rows=3 -->
<object class="GtkGrid">
<property name="visible">True</property>
<property name="can-focus">False</property>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkButtonBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="layout-style">end</property>
<child>
<object class="GtkButton" id="but_delete">
<property name="label" translatable="yes">Delete</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>
<property name="secondary">True</property>
</packing>
</child>
<child>
<object class="GtkButton" id="but_edit">
<property name="label" translatable="yes">Edit</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_close">
<property name="label" translatable="yes">Close</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>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">2</property>
</packing>
</child>
</object>
<packing>
<property name="name">page1</property>
<property name="title" translatable="yes">page1</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkBox" id="box_proj_edit">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="orientation">vertical</property>
<child>
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">label</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<!-- n-columns=3 n-rows=3 -->
<object class="GtkGrid">
<property name="visible">True</property>
<property name="can-focus">False</property>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkButtonBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="layout-style">end</property>
<child>
<placeholder/>
</child>
<child>
<object class="GtkButton" id="but_save">
<property name="label" translatable="yes">Save</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_cancel">
<property name="label" translatable="yes">Cancel</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>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">2</property>
</packing>
</child>
</object>
<packing>
<property name="name">page2</property>
<property name="title" translatable="yes">page2</property>
<property name="position">2</property>
</packing>
</child>
</object> </object>
</interface> </interface>
+10 -5
View File
@@ -151,11 +151,12 @@
<property name="can-focus">False</property> <property name="can-focus">False</property>
<property name="layout-style">end</property> <property name="layout-style">end</property>
<child> <child>
<object class="GtkButton" id="but_prov_new"> <object class="GtkButton" id="but_new">
<property name="label" translatable="yes">New</property> <property name="label" translatable="yes">New</property>
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">True</property> <property name="can-focus">True</property>
<property name="receives-default">True</property> <property name="receives-default">True</property>
<signal name="clicked" handler="on_but_new_clicked" swapped="no"/>
</object> </object>
<packing> <packing>
<property name="expand">True</property> <property name="expand">True</property>
@@ -164,11 +165,12 @@
</packing> </packing>
</child> </child>
<child> <child>
<object class="GtkButton" id="but_prov_edit"> <object class="GtkButton" id="but_edit">
<property name="label" translatable="yes">Edit</property> <property name="label" translatable="yes">Edit</property>
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">True</property> <property name="can-focus">True</property>
<property name="receives-default">True</property> <property name="receives-default">True</property>
<signal name="clicked" handler="on_but_edit_clicked" swapped="no"/>
</object> </object>
<packing> <packing>
<property name="expand">True</property> <property name="expand">True</property>
@@ -177,11 +179,12 @@
</packing> </packing>
</child> </child>
<child> <child>
<object class="GtkButton" id="but_prov_delete"> <object class="GtkButton" id="but_detail">
<property name="label" translatable="yes">Delete</property> <property name="label" translatable="yes">Details</property>
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">True</property> <property name="can-focus">True</property>
<property name="receives-default">True</property> <property name="receives-default">True</property>
<signal name="clicked" handler="on_but_detail_clicked" swapped="no"/>
</object> </object>
<packing> <packing>
<property name="expand">True</property> <property name="expand">True</property>
@@ -452,6 +455,7 @@
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">True</property> <property name="can-focus">True</property>
<property name="receives-default">True</property> <property name="receives-default">True</property>
<signal name="clicked" handler="on_but_save_clicked" swapped="no"/>
</object> </object>
<packing> <packing>
<property name="expand">True</property> <property name="expand">True</property>
@@ -465,6 +469,7 @@
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">True</property> <property name="can-focus">True</property>
<property name="receives-default">True</property> <property name="receives-default">True</property>
<signal name="clicked" handler="on_but_cancel_clicked" swapped="no"/>
</object> </object>
<packing> <packing>
<property name="expand">True</property> <property name="expand">True</property>
@@ -745,7 +750,7 @@
</packing> </packing>
</child> </child>
<child> <child>
<object class="GtkButton" id="but_edit"> <object class="GtkButton" id="but_edit2">
<property name="label" translatable="yes">Edit</property> <property name="label" translatable="yes">Edit</property>
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">True</property> <property name="can-focus">True</property>
+12 -4
View File
@@ -42,6 +42,17 @@
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">False</property> <property name="can-focus">False</property>
<property name="orientation">vertical</property> <property name="orientation">vertical</property>
<child>
<object class="GtkLabel" id="lbl_dbinfo">
<property name="visible">True</property>
<property name="can-focus">False</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child> <child>
<object class="GtkLabel" id="lbl_infotext"> <object class="GtkLabel" id="lbl_infotext">
<property name="visible">True</property> <property name="visible">True</property>
@@ -57,15 +68,12 @@ thread in "Segeln Forum"
<packing> <packing>
<property name="expand">True</property> <property name="expand">True</property>
<property name="fill">True</property> <property name="fill">True</property>
<property name="position">0</property> <property name="position">1</property>
</packing> </packing>
</child> </child>
<child> <child>
<placeholder/> <placeholder/>
</child> </child>
<child>
<placeholder/>
</child>
</object> </object>
</child> </child>
<child type="tab"> <child type="tab">
+762
View File
@@ -0,0 +1,762 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.40.0 -->
<interface>
<requires lib="gtk+" version="3.24"/>
<object class="GtkAdjustment" id="adj_angle">
<property name="upper">90</property>
<property name="step-increment">1</property>
<property name="page-increment">10</property>
</object>
<object class="GtkAdjustment" id="adj_capacity">
<property name="upper">100</property>
<property name="step-increment">1</property>
<property name="page-increment">10</property>
</object>
<object class="GtkAdjustment" id="adj_pos_x">
<property name="upper">99999</property>
<property name="step-increment">10</property>
<property name="page-increment">100</property>
</object>
<object class="GtkAdjustment" id="adj_pos_y">
<property name="upper">99999</property>
<property name="step-increment">10</property>
<property name="page-increment">100</property>
</object>
<object class="GtkAdjustment" id="adj_pos_z">
<property name="upper">99999</property>
<property name="step-increment">10</property>
<property name="page-increment">100</property>
</object>
<object class="GtkAdjustment" id="adj_width_x">
<property name="upper">9999</property>
<property name="step-increment">10</property>
<property name="page-increment">100</property>
</object>
<object class="GtkAdjustment" id="adj_width_y">
<property name="upper">9999</property>
<property name="step-increment">10</property>
<property name="page-increment">100</property>
</object>
<object class="GtkAdjustment" id="adj_width_z">
<property name="upper">9999</property>
<property name="step-increment">10</property>
<property name="page-increment">100</property>
</object>
<object class="GtkStack" id="topobject">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="margin-start">8</property>
<child>
<object class="GtkBox" id="box_storage">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="orientation">vertical</property>
<child>
<object class="GtkExpander">
<property name="visible">True</property>
<property name="can-focus">True</property>
<child>
<!-- n-columns=3 n-rows=3 -->
<object class="GtkGrid">
<property name="visible">True</property>
<property name="can-focus">False</property>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
</object>
</child>
<child type="label">
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">Filter Storage</property>
</object>
</child>
</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_storage">
<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">True</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkButtonBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="layout-style">end</property>
<child>
<object class="GtkButton" id="but_new">
<property name="label" translatable="yes">New</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<signal name="clicked" handler="on_but_new_clicked" swapped="no"/>
</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_edit">
<property name="label" translatable="yes">Edit</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<signal name="clicked" handler="on_but_edit_clicked" swapped="no"/>
</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_detail">
<property name="label" translatable="yes">Details</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<signal name="clicked" handler="on_but_detail_clicked" swapped="no"/>
</object>
<packing>
<property name="expand">True</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">2</property>
</packing>
</child>
</object>
<packing>
<property name="name">page0</property>
<property name="title" translatable="yes">page0</property>
</packing>
</child>
<child>
<object class="GtkBox" id="box_stor_detail">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="orientation">vertical</property>
<child>
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">Storage Detais</property>
<attributes>
<attribute name="weight" value="bold"/>
</attributes>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<!-- n-columns=3 n-rows=3 -->
<object class="GtkGrid">
<property name="visible">True</property>
<property name="can-focus">False</property>
<child>
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">Name</property>
</object>
<packing>
<property name="left-attach">0</property>
<property name="top-attach">0</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="lbl_name">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">Placeholder</property>
</object>
<packing>
<property name="left-attach">1</property>
<property name="top-attach">0</property>
</packing>
</child>
<child>
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">Remarks</property>
</object>
<packing>
<property name="left-attach">0</property>
<property name="top-attach">1</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="lbl_remarks">
<property name="visible">True</property>
<property name="can-focus">False</property>
</object>
<packing>
<property name="left-attach">1</property>
<property name="top-attach">1</property>
</packing>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkButtonBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="layout-style">end</property>
<child>
<object class="GtkButton" id="but_delete">
<property name="label" translatable="yes">Delete</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<signal name="clicked" handler="on_but_delete_clicked" swapped="no"/>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">0</property>
<property name="secondary">True</property>
</packing>
</child>
<child>
<object class="GtkButton" id="but_edit2">
<property name="label" translatable="yes">Edit</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<signal name="clicked" handler="on_but_edit_clicked" swapped="no"/>
</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_close">
<property name="label" translatable="yes">Close</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<signal name="clicked" handler="on_but_close_clicked" swapped="no"/>
</object>
<packing>
<property name="expand">True</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">2</property>
</packing>
</child>
</object>
<packing>
<property name="name">page1</property>
<property name="title" translatable="yes">page1</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkBox" id="box_stor_edit">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="orientation">vertical</property>
<child>
<object class="GtkLabel" id="lbl_title_edit">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">Edit Storage</property>
<attributes>
<attribute name="weight" value="bold"/>
</attributes>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<!-- n-columns=7 n-rows=7 -->
<object class="GtkGrid">
<property name="visible">True</property>
<property name="can-focus">False</property>
<child>
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">Name</property>
</object>
<packing>
<property name="left-attach">0</property>
<property name="top-attach">0</property>
</packing>
</child>
<child>
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">Typ</property>
</object>
<packing>
<property name="left-attach">0</property>
<property name="top-attach">1</property>
</packing>
</child>
<child>
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">Position, mm</property>
</object>
<packing>
<property name="left-attach">0</property>
<property name="top-attach">2</property>
</packing>
</child>
<child>
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="margin-start">4</property>
<property name="margin-end">4</property>
<property name="label" translatable="yes">X</property>
</object>
<packing>
<property name="left-attach">1</property>
<property name="top-attach">2</property>
</packing>
</child>
<child>
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="margin-start">4</property>
<property name="margin-end">4</property>
<property name="label" translatable="yes">Y</property>
</object>
<packing>
<property name="left-attach">3</property>
<property name="top-attach">2</property>
</packing>
</child>
<child>
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="margin-start">4</property>
<property name="margin-end">4</property>
<property name="label" translatable="yes">Z</property>
</object>
<packing>
<property name="left-attach">5</property>
<property name="top-attach">2</property>
</packing>
</child>
<child>
<object class="GtkSpinButton" id="spi_x">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="max-length">5</property>
<property name="width-chars">5</property>
<property name="adjustment">adj_pos_x</property>
<property name="numeric">True</property>
</object>
<packing>
<property name="left-attach">2</property>
<property name="top-attach">2</property>
</packing>
</child>
<child>
<object class="GtkSpinButton" id="spi_y">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="max-length">5</property>
<property name="width-chars">5</property>
<property name="adjustment">adj_pos_y</property>
<property name="numeric">True</property>
</object>
<packing>
<property name="left-attach">4</property>
<property name="top-attach">2</property>
</packing>
</child>
<child>
<object class="GtkSpinButton" id="spi_z">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="max-length">5</property>
<property name="width-chars">5</property>
<property name="adjustment">adj_pos_z</property>
<property name="numeric">True</property>
</object>
<packing>
<property name="left-attach">6</property>
<property name="top-attach">2</property>
</packing>
</child>
<child>
<object class="GtkEntry" id="ent_sname">
<property name="visible">True</property>
<property name="can-focus">True</property>
</object>
<packing>
<property name="left-attach">1</property>
<property name="top-attach">0</property>
<property name="width">6</property>
</packing>
</child>
<child>
<object class="GtkComboBox" id="cmb_type">
<property name="visible">True</property>
<property name="can-focus">False</property>
</object>
<packing>
<property name="left-attach">1</property>
<property name="top-attach">1</property>
<property name="width">6</property>
</packing>
</child>
<child>
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">Width, mm</property>
</object>
<packing>
<property name="left-attach">0</property>
<property name="top-attach">3</property>
</packing>
</child>
<child>
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="margin-start">4</property>
<property name="margin-end">4</property>
<property name="label" translatable="yes">WX</property>
</object>
<packing>
<property name="left-attach">1</property>
<property name="top-attach">3</property>
</packing>
</child>
<child>
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="margin-start">4</property>
<property name="margin-end">4</property>
<property name="label" translatable="yes">WY</property>
</object>
<packing>
<property name="left-attach">3</property>
<property name="top-attach">3</property>
</packing>
</child>
<child>
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="margin-start">4</property>
<property name="margin-end">4</property>
<property name="label" translatable="yes">WZ</property>
</object>
<packing>
<property name="left-attach">5</property>
<property name="top-attach">3</property>
</packing>
</child>
<child>
<object class="GtkSpinButton" id="spi_wx">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="max-length">4</property>
<property name="width-chars">4</property>
<property name="text" translatable="yes">0</property>
<property name="adjustment">adj_width_x</property>
<property name="numeric">True</property>
</object>
<packing>
<property name="left-attach">2</property>
<property name="top-attach">3</property>
</packing>
</child>
<child>
<object class="GtkSpinButton" id="spi_wy">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="max-length">4</property>
<property name="width-chars">4</property>
<property name="text" translatable="yes">0</property>
<property name="adjustment">adj_width_y</property>
<property name="numeric">True</property>
</object>
<packing>
<property name="left-attach">4</property>
<property name="top-attach">3</property>
</packing>
</child>
<child>
<object class="GtkSpinButton" id="spi_wz">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="max-length">4</property>
<property name="width-chars">4</property>
<property name="text" translatable="yes">0</property>
<property name="adjustment">adj_width_z</property>
<property name="numeric">True</property>
</object>
<packing>
<property name="left-attach">6</property>
<property name="top-attach">3</property>
</packing>
</child>
<child>
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">Angle</property>
</object>
<packing>
<property name="left-attach">0</property>
<property name="top-attach">4</property>
</packing>
</child>
<child>
<object class="GtkSpinButton" id="spi_angle">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="adjustment">adj_angle</property>
</object>
<packing>
<property name="left-attach">2</property>
<property name="top-attach">4</property>
<property name="width">2</property>
</packing>
</child>
<child>
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">Capacity</property>
</object>
<packing>
<property name="left-attach">0</property>
<property name="top-attach">5</property>
</packing>
</child>
<child>
<object class="GtkSpinButton" id="spi_capacity">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="adjustment">adj_capacity</property>
</object>
<packing>
<property name="left-attach">2</property>
<property name="top-attach">5</property>
<property name="width">2</property>
</packing>
</child>
<child>
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">Remarks</property>
</object>
<packing>
<property name="left-attach">0</property>
<property name="top-attach">6</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="GtkTextView" id="txt_remarks">
<property name="visible">True</property>
<property name="can-focus">True</property>
</object>
</child>
</object>
<packing>
<property name="left-attach">1</property>
<property name="top-attach">6</property>
<property name="width">6</property>
</packing>
</child>
<child>
<object class="GtkComboBox" id="cmb_unit">
<property name="visible">True</property>
<property name="can-focus">False</property>
</object>
<packing>
<property name="left-attach">5</property>
<property name="top-attach">5</property>
<property name="width">2</property>
</packing>
</child>
<child>
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">Unit</property>
</object>
<packing>
<property name="left-attach">4</property>
<property name="top-attach">5</property>
</packing>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkButtonBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="layout-style">end</property>
<child>
<object class="GtkButton" id="but_save">
<property name="label" translatable="yes">Save</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<signal name="clicked" handler="on_but_save_clicked" swapped="no"/>
</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_cancel">
<property name="label" translatable="yes">Cancel</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<signal name="clicked" handler="on_but_cancel_clicked" swapped="no"/>
</object>
<packing>
<property name="expand">True</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">2</property>
</packing>
</child>
</object>
<packing>
<property name="name">page2</property>
<property name="title" translatable="yes">page2</property>
<property name="position">2</property>
</packing>
</child>
</object>
</interface>
+111 -49
View File
@@ -27,6 +27,33 @@ class BaseView(View):
#self.topwidget = builder.get_object("topobject") #self.topwidget = builder.get_object("topobject")
#gtkutils.init_named_controls(self, builder) #gtkutils.init_named_controls(self, builder)
# company types
self.db.cur.execute("SELECT ddval, ddtext FROM dropdown WHERE ddid=2 ORDER BY ddval")
self.comptype = dict(self.db.cur.fetchall())
combobox.load_from_dict(self.combo['flt_type'], {-2: _("─── all ───")} | self.comptype, -1)
# companies
self.lst_companies = Gtk.ListStore(int, str, str, str)
self.db.cur.execute("SELECT compid, compname, comptype, remarks FROM company ORDER BY compname")
for row in self.db.cur.fetchall():
self.lst_companies.append((row[0], row[1], self.comptype[row[2]], row[3]))
treeview.add_column(self.tree['companies'], _('ID'), 0)
treeview.add_column(self.tree['companies'], _('Name'), 1)
treeview.add_column(self.tree['companies'], _('Type'), 2)
treeview.add_column(self.tree['companies'], _('Remarks'), 3)
self.tree['companies'].set_model(self.lst_companies)
# combos
roles = {'captain': 'Captain', 'helmsman': 'Helmsman', 'sailor': 'Sailor'}
combobox.load_from_dict(self.combo['user_role'], roles)
langs = {'de': 'Deutsch', 'en': 'English'}
combobox.load_from_dict(self.combo['user_lang'], langs)
# shipyard
self.db.cur.execute("SELECT compid, compname FROM company WHERE comptype=3 ORDER BY compname")
shipyards = dict(self.db.cur.fetchall())
combobox.load_from_dict(self.combo['shipyard'], {-1: _("─── none ───")} | shipyards)
# get current vessel data # get current vessel data
self.db.cur.execute("SELECT valint FROM settings WHERE userid=0 AND sno=1") self.db.cur.execute("SELECT valint FROM settings WHERE userid=0 AND sno=1")
row = self.db.cur.fetchone() row = self.db.cur.fetchone()
@@ -38,11 +65,20 @@ class BaseView(View):
else: else:
self.context.vessel.vid = row[0] self.context.vessel.vid = row[0]
# default storage for current vessel
sql = "SELECT sid, sname FROM storage WHERE stype=0 AND vid=%s ORDER BY sname"
self.db.cur.execute(sql, (self.context.vessel.vid,))
storages = dict(self.db.cur.fetchall())
combobox.load_from_dict(self.combo['storage'], {-1: _("─── none ───")} | storages)
# get list of vessels # get list of vessels
vessellist = {} vessellist = {}
self.db.dcur.execute("SELECT vid, vesselname, model FROM vessel ORDER BY vid") self.db.dcur.execute("SELECT vid, vesselname, model FROM vessel ORDER BY vid")
for row in self.db.dcur.fetchall(): for row in self.db.dcur.fetchall():
vessellist[row['vid']] = row['vesselname'] + " - " + row['model'] vessellist[row['vid']] = (
row['vesselname'] if row['model'] is None
else row['vesselname'] + " - " + row['model']
)
combobox.load_from_dict(self.combo['vessel'], vessellist, self.context.vessel.vid) combobox.load_from_dict(self.combo['vessel'], vessellist, self.context.vessel.vid)
# vessel load triggered from combobox init # vessel load triggered from combobox init
@@ -73,39 +109,6 @@ class BaseView(View):
treeview.add_column(self.tree['ddlists'], _('Records'), 2) treeview.add_column(self.tree['ddlists'], _('Records'), 2)
self.tree['ddlists'].set_model(self.lst_lists) self.tree['ddlists'].set_model(self.lst_lists)
# company types
self.db.cur.execute("SELECT ddval, ddtext FROM dropdown WHERE ddid=2 ORDER BY ddval")
self.comptype = dict(self.db.cur.fetchall())
combobox.load_from_dict(self.combo['flt_type'], {-1: _("─── all ───")} | self.comptype, -1)
# companies
self.lst_companies = Gtk.ListStore(int, str, str, str)
self.db.cur.execute("SELECT compid, compname, comptype, remarks FROM company ORDER BY compname")
for row in self.db.cur.fetchall():
self.lst_companies.append((row[0], row[1], self.comptype[row[2]], row[3]))
treeview.add_column(self.tree['companies'], _('ID'), 0)
treeview.add_column(self.tree['companies'], _('Name'), 1)
treeview.add_column(self.tree['companies'], _('Type'), 2)
treeview.add_column(self.tree['companies'], _('Remarks'), 3)
self.tree['companies'].set_model(self.lst_companies)
# combos
roles = {'captain': 'Captain', 'helmsman': 'Helmsman', 'sailor': 'Sailor'}
combobox.load_from_dict(self.combo['user_role'], roles)
langs = {'de': 'Deutsch', 'en': 'English'}
combobox.load_from_dict(self.combo['user_lang'], langs)
# shipyard
self.db.cur.execute("SELECT compid, compname FROM company WHERE comptype=3 ORDER BY compname")
shipyards = dict(self.db.cur.fetchall())
combobox.load_from_dict(self.combo['shipyard'], shipyards)
# default storage
self.lst_storage_dfl = Gtk.ListStore(int, str)
self.db.cur.execute("SELECT sid, sname FROM storage WHERE stype=0 ORDER BY sname")
storages = dict(self.db.cur.fetchall())
combobox.load_from_dict(self.combo['storage'], storages)
# load shape of vessel if available # load shape of vessel if available
if self.context.vessel.vid > 0: if self.context.vessel.vid > 0:
self.db.cur.execute("SELECT shapefile FROM vessel WHERE vid=%s", (self.context.vessel.vid, )) self.db.cur.execute("SELECT shapefile FROM vessel WHERE vid=%s", (self.context.vessel.vid, ))
@@ -125,23 +128,50 @@ class BaseView(View):
# WIP generic remarks handling # WIP generic remarks handling
self.text['vessel_remarks'].set_size_request(200, 70) self.text['vessel_remarks'].set_size_request(200, 70)
def load_dropdowns(self):
# non static dropdown (re-)load feature
# default storage for current vessel
sql = "SELECT sid, sname FROM storage WHERE stype=0 AND vid=%s ORDER BY sname"
self.db.cur.execute(sql, (self.context.vessel.vid,))
storages = dict(self.db.cur.fetchall())
combobox.refresh_dict(self.combo['storage'], {-1: _("─── none ───")} | storages)
def on_cmb_vessel_changed(self, widget): def on_cmb_vessel_changed(self, widget):
self.context.vessel.load(combobox.get_list_value(widget)) self.context.vessel.load(combobox.get_list_value(widget))
print(self.context.vessel)
sql = ("UPDATE settings SET valint=%s WHERE userid=0 AND sno=1") sql = ("UPDATE settings SET valint=%s WHERE userid=0 AND sno=1")
self.db.cur.execute(sql, (self.context.vessel.vid,)) self.db.cur.execute(sql, (self.context.vessel.vid,))
self.db.conn.commit() self.db.conn.commit()
# Refresh dependent data
self.load_dropdowns()
# Show data # Show data
self.entry['vesselname'].set_text(self.context.vessel.vesselname) self.display_vessel(self.context.vessel)
self.entry['model'].set_text(self.context.vessel.model)
self.text['vessel_remarks'].get_buffer().set_text(self.context.vessel.remarks or '')
self.spin['loa'].set_value(9.80)
def on_but_vessel_add_clicked(self, widget): def on_but_vessel_add_clicked(self, widget):
print("Add vessel") answer = gtkutils.questionbox(
_("Add new vessel.\n"
"Are you sure?"
), title="YMS")
if answer == False:
return
self.context.vessel.create()
def on_but_vessel_save_clicked(self, widget): def on_but_vessel_save_clicked(self, widget):
print("Save vessel") print("Save vessel")
vessel = self.context.vessel
vessel.vesselname = self.entry['vesselname'].get_text()
vessel.model = self.entry['model'].get_text()
vessel.year_built = self.spin['year_built'].get_value_as_int()
vessel.loa = self.spin['loa'].get_value()
vessel.lwl = self.spin['lwl'].get_value()
vessel.beam = self.spin['beam'].get_value()
vessel.draught = self.spin['draught'].get_value()
vessel.draught_min = self.spin['draught_min'].get_value()
vessel.displacement = self.spin['displacement'].get_value_as_int()
vessel.ballast = self.spin['ballast'].get_value_as_int()
txtbuf = self.text['vessel_remarks'].get_buffer()
vessel.remarks = txtbuf.get_text(txtbuf.get_start_iter(), txtbuf.get_end_iter(), True)
vessel.save()
def on_but_comp_new_clicked(self, widget): def on_but_comp_new_clicked(self, widget):
print("New company") print("New company")
@@ -158,20 +188,52 @@ class BaseView(View):
def on_but_comp_cancel_clicked(self, widget): def on_but_comp_cancel_clicked(self, widget):
pass pass
def user_display(self): def display_vessel(self, vessel):
self.entry['user_login'].set_text(self.context.user.login) print("Display vessel")
self.entry['user_displayname'].set_text(self.context.user.displayname) self.entry['vesselname'].set_text(vessel.vesselname)
combobox.activate_row(self.combo['user_role'], self.context.user.role) self.entry['model'].set_text(vessel.model or '')
combobox.activate_row(self.combo['user_lang'], self.context.user.language) self.spin['year_built'].set_value(vessel.year_built or 0)
self.check['user_locked'].set_active('locked' in self.context.user.flags) self.spin['loa'].set_value(vessel.loa or 0)
self.check['user_deleted'].set_active('deleted' in self.context.user.flags) self.spin['lwl'].set_value(vessel.lwl or 0)
self.spin['beam'].set_value(vessel.beam or 0)
self.spin['draught'].set_value(vessel.draught or 0)
self.spin['draught_min'].set_value(vessel.draught_min or 0)
self.spin['displacement'].set_value(vessel.displacement or 0)
self.spin['ballast'].set_value(vessel.ballast or 0)
self.text['vessel_remarks'].get_buffer().set_text(vessel.remarks or '')
combobox.activate_row(self.combo['shipyard'], vessel.shipyard or -1)
combobox.activate_row(self.combo['storage'], vessel.sid_default or -1)
def display_user(self, user):
self.entry['user_login'].set_text(user.login)
self.entry['user_displayname'].set_text(user.displayname)
combobox.activate_row(self.combo['user_role'], user.role)
combobox.activate_row(self.combo['user_lang'], user.language)
self.check['user_locked'].set_active('locked' in user.flags)
self.check['user_deleted'].set_active('deleted' in user.flags)
self.entry['user_pass'].set_text('') self.entry['user_pass'].set_text('')
def display_company(self, company):
self.entry['compname'].set_text(company.compname)
# Type
# Type2
self.entry['shortname'].set_text(company.shortname)
self.entry['street'].set_text(company.street)
self.entry['zip'].set_text(company.zip)
self.entry['city'].set_text(company.city)
self.entry['country'].set_text(company.country)
self.entry['contact'].set_text(company.contact)
self.entry['phone'].set_text(company.phone)
self.entry['email'].set_text(company.email)
self.entry['web'].set_text(company.web)
self.entry['customerno'].set_text(company.customerno)
self.entry['contractno'].set_text(company.contractno)
def on_tvw_user_row_activated(self, widget, path, column): def on_tvw_user_row_activated(self, widget, path, column):
# load selected user # load selected user
self.context.user.user_id = treeview.get_value(widget, 0) self.context.user.user_id = treeview.get_value(widget, 0)
self.context.user.load() self.context.user.load()
self.user_display() self.display_user(self.context.user)
def on_but_user_new_clicked(self, widget): def on_but_user_new_clicked(self, widget):
# get first free user id and create a new record with name "user<nnn>" # get first free user id and create a new record with name "user<nnn>"
@@ -193,7 +255,7 @@ class BaseView(View):
# TODO Select some other user from new list selection # TODO Select some other user from new list selection
self.context.user.user_id = treeview.get_value(self.tree['user']) self.context.user.user_id = treeview.get_value(self.tree['user'])
self.context.user.load() self.context.user.load()
self.user_display() self.display_user(self.context.user)
def on_but_user_newpass_clicked(self, widget): def on_but_user_newpass_clicked(self, widget):
self.entry['user_pass'].set_text(self.context.user.genpass()) self.entry['user_pass'].set_text(self.context.user.genpass())
+50 -8
View File
@@ -5,15 +5,57 @@ import gi
gi.require_version("Gtk", "3.0") gi.require_version("Gtk", "3.0")
from gi.repository import GLib, Gtk, Gdk from gi.repository import GLib, Gtk, Gdk
from .view import View
from yms import gtkutils, combobox, treeview from yms import gtkutils, combobox, treeview
from yms.model import document
class DocumentsView: class DocumentsView(View):
def __init__(self, context): def __init__(self, context):
self.title = _("Documents") super().__init__(context, _("Documents"), "documents.ui")
builder = Gtk.Builder()
builder.set_translation_domain(context.textdomain) self.doc = document.Document(context.db) # current record
builder.add_from_file(os.path.join(context.ui_path, "documents.ui")) self.newrecord = False
builder.connect_signals(self)
self.topwidget = builder.get_object("topobject") self.lst_documents = Gtk.ListStore(int, str, str, str, int)
gtkutils.init_named_controls(self, builder) sql = (
"SELECT d.docid, d.doctype, d.filename, d.title, COUNT(r.drid) AS refcount "
"FROM document AS d LEFT OUTER JOIN docref AS r USING (docid) "
"GROUP BY d.docid, d.doctype, d.filename, d.title "
"ORDER BY d.docid"
)
self.db.cur.execute(sql)
for row in self.db.cur.fetchall():
self.lst_documents.append(row)
treeview.add_column(self.tree['documents'], _('ID'), 0)
treeview.add_column(self.tree['documents'], _('Type'), 1)
treeview.add_column(self.tree['documents'], _('Filename'), 2)
treeview.add_column(self.tree['documents'], _('Title'), 3)
treeview.add_column(self.tree['documents'], _('References'), 3)
self.tree['documents'].set_model(self.lst_documents)
# buttons on list page
def on_but_new_clicked(self, widget):
self.topwidget.set_visible_child(self.box['doc_edit'])
def on_but_edit_clicked(self, widget):
self.topwidget.set_visible_child(self.box['doc_edit'])
def on_but_detail_clicked(self, widget):
self.topwidget.set_visible_child(self.box['doc_detail'])
# buttons on detail page
# edit2 uses edit callback
def on_but_close_clicked(self, widget):
self.topwidget.set_visible_child(self.box['documents'])
def on_but_delete_clicked(self, widget):
self.topwidget.set_visible_child(self.box['documents'])
# buttons on edit page
def on_but_save_clicked(self, widget):
pass
def on_but_cancel_clicked(self, widget):
self.topwidget.set_visible_child(self.box['documents'])
+39 -18
View File
@@ -5,39 +5,60 @@ import gi
gi.require_version("Gtk", "3.0") gi.require_version("Gtk", "3.0")
from gi.repository import GLib, Gtk, Gdk from gi.repository import GLib, Gtk, Gdk
from .view import View
from yms import gtkutils, combobox, treeview from yms import gtkutils, combobox, treeview
from yms.model import equipment
class EquipmentView: class EquipmentView(View):
def __init__(self, context): def __init__(self, context):
self.title = _("Equipment") super().__init__(context, _("Equipment"), "equipment.ui")
builder = Gtk.Builder()
builder.set_translation_domain(context.textdomain)
builder.add_from_file(os.path.join(context.ui_path, "equipment.ui"))
builder.connect_signals(self)
self.topwidget = builder.get_object("stk_equipment")
gtkutils.init_named_controls(self, builder)
self.equip = equipment.Equipment(context.db) # current record
self.newrecord = False
self.lst_equipment = Gtk.ListStore(int, str, str, str, str, str, str)
sql = (
"SELECT e.eid, e.ename, c.compname, e.model, e.serial, "
"DATE_FORMAT(e.purchdate, '{}'), e.remarks "
"FROM equipment AS e LEFT OUTER JOIN company AS c ON (e.manufacturer=c.compid) "
"WHERE e.vid=%s "
"ORDER BY e.ename"
).format("%%d.%%m.%%Y") # TODO format from settings via mapping
self.db.cur.execute(sql, (context.vessel.vid,))
for row in self.db.cur.fetchall():
self.lst_equipment.append(row)
treeview.add_column(self.tree['equipment'], _('ID'), 0)
treeview.add_column(self.tree['equipment'], _('Name'), 1)
treeview.add_column(self.tree['equipment'], _('Manufacturer'), 2)
treeview.add_column(self.tree['equipment'], _('Model'), 3)
treeview.add_column(self.tree['equipment'], _('Serial'), 4)
treeview.add_column(self.tree['equipment'], _('Age'), 5)
treeview.add_column(self.tree['equipment'], _('Remarks'), 6)
self.tree['equipment'].set_model(self.lst_equipment)
# buttons on list page
def on_but_new_clicked(self, widget): def on_but_new_clicked(self, widget):
self.topwidget.set_visible_child(self.box['equip_edit']) self.topwidget.set_visible_child(self.box['equip_edit'])
def on_but_edit_clicked(self, widget):
self.topwidget.set_visible_child(self.box['equip_edit'])
def on_but_detail_clicked(self, widget): def on_but_detail_clicked(self, widget):
self.topwidget.set_visible_child(self.box['equip_detail']) self.topwidget.set_visible_child(self.box['equip_detail'])
def on_but_edit_clicked(self, widget): # buttons on detail page
self.topwidget.set_visible_child(self.box['equip_edit']) # edit2 uses edit callback
def on_but_edit2_clicked(self, widget):
self.topwidget.set_visible_child(self.box['equip_edit'])
def on_but_close_clicked(self, widget): def on_but_close_clicked(self, widget):
self.topwidget.set_visible_child(self.box['equip_detail']) self.topwidget.set_visible_child(self.box['equipment'])
def on_but_save_clicked(self, widget):
pass
def on_but_delete_clicked(self, widget): def on_but_delete_clicked(self, widget):
self.topwidget.set_visible_child(self.box['equipment']) self.topwidget.set_visible_child(self.box['equipment'])
# buttons on edit page
def on_but_save_clicked(self, widget):
pass
def on_but_cancel_clicked(self, widget): def on_but_cancel_clicked(self, widget):
self.topwidget.set_visible_child(self.box['equipment']) self.topwidget.set_visible_child(self.box['equipment'])
+56 -8
View File
@@ -5,15 +5,63 @@ import gi
gi.require_version("Gtk", "3.0") gi.require_version("Gtk", "3.0")
from gi.repository import GLib, Gtk, Gdk from gi.repository import GLib, Gtk, Gdk
from .view import View
from yms import gtkutils, combobox, treeview from yms import gtkutils, combobox, treeview
from yms.model import inventory
class InventoryView: class InventoryView(View):
def __init__(self, context): def __init__(self, context):
self.title = _("Inventory") super().__init__(context, _("Inventory"), "inventory.ui")
builder = Gtk.Builder()
builder.set_translation_domain(context.textdomain) self.inv = inventory.Inventory(context.db) # current record
builder.add_from_file(os.path.join(context.ui_path, "inventory.ui")) self.newrecord = False
builder.connect_signals(self)
self.topwidget = builder.get_object("topobject") # Inventory gets vessel assignment via
gtkutils.init_named_controls(self, builder) # - storage direct
# - or via box which is assigned to a storage
self.lst_inventory = Gtk.ListStore(int, str, str, int, str, str)
sql = (
"SELECT i.invid, i.invname, s.sname AS container, i.number, i.invcond, i.remarks "
"FROM inventory AS i JOIN storage AS s ON (i.conttype='storage' AND i.sid=s.sid) "
"WHERE s.vid=%s "
"UNION SELECT i.invid, i.invname, b.label AS container, i.number, i.invcond, i.remarks "
"FROM inventory AS i JOIN box AS b ON (i.conttype='box' AND i.boxid=b.boxid) JOIN storage AS s ON (b.sid=s.sid) "
"WHERE s.vid=%s"
)
self.db.cur.execute(sql, (context.vessel.vid, context.vessel.vid))
for row in self.db.cur.fetchall():
self.lst_inventory.append(row)
treeview.add_column(self.tree['inventory'], _('ID'), 0)
treeview.add_column(self.tree['inventory'], _('Name'), 1)
treeview.add_column(self.tree['inventory'], _('Container'), 2)
treeview.add_column(self.tree['inventory'], _('Number'), 3)
treeview.add_column(self.tree['inventory'], _('Condition'), 4)
treeview.add_column(self.tree['inventory'], _('Remarks'), 5)
self.tree['inventory'].set_model(self.lst_inventory)
# buttons on list page
def on_but_new_clicked(self, widget):
self.topwidget.set_visible_child(self.box['inv_edit'])
def on_but_edit_clicked(self, widget):
self.topwidget.set_visible_child(self.box['inv_edit'])
def on_but_detail_clicked(self, widget):
self.topwidget.set_visible_child(self.box['inv_detail'])
# buttons on detail page
# edit2 uses edit callback
def on_but_close_clicked(self, widget):
self.topwidget.set_visible_child(self.box['inventory'])
def on_but_delete_clicked(self, widget):
self.topwidget.set_visible_child(self.box['inventory'])
# buttons on edit page
def on_but_save_clicked(self, widget):
pass
def on_but_cancel_clicked(self, widget):
self.topwidget.set_visible_child(self.box['inventory'])
+49 -8
View File
@@ -5,15 +5,56 @@ import gi
gi.require_version("Gtk", "3.0") gi.require_version("Gtk", "3.0")
from gi.repository import Gtk from gi.repository import Gtk
from .view import View
from yms import gtkutils, combobox, treeview from yms import gtkutils, combobox, treeview
from yms.model import maintenance
class MaintenanceView: class MaintenanceView(View):
def __init__(self, context): def __init__(self, context):
self.title = _("Maintenance") super().__init__(context, _("Maintenance"), "maintenance.ui")
builder = Gtk.Builder()
builder.set_translation_domain(context.textdomain) self.maint = maintenance.Maintenance(context.db) # current record
builder.add_from_file(os.path.join(context.ui_path, "maintenance.ui")) self.newrecord = False
builder.connect_signals(self)
self.topwidget = builder.get_object("topobject") self.lst_maintenance = Gtk.ListStore(int, str, str, str)
gtkutils.init_named_controls(self, builder) sql = (
"SELECT m.maintid, m.activities, e.ename, m.remarks "
"FROM maintenance AS m LEFT OUTER JOIN equipment AS e USING (eid) "
"WHERE m.vid=%s "
"ORDER BY m.maintid"
)
self.db.cur.execute(sql, (context.vessel.vid,))
for row in self.db.cur.fetchall():
self.lst_maintenance.append(row)
treeview.add_column(self.tree['maintenance'], _('ID'), 0)
treeview.add_column(self.tree['maintenance'], _('Activities'), 1)
treeview.add_column(self.tree['maintenance'], _('Equipment'), 2)
treeview.add_column(self.tree['maintenance'], _('Remarks'), 3)
self.tree['maintenance'].set_model(self.lst_maintenance)
# buttons on list page
def on_but_new_clicked(self, widget):
self.topwidget.set_visible_child(self.box['maint_edit'])
def on_but_edit_clicked(self, widget):
self.topwidget.set_visible_child(self.box['maint_edit'])
def on_but_detail_clicked(self, widget):
self.topwidget.set_visible_child(self.box['maintv_detail'])
# buttons on detail page
# edit2 uses edit callback
def on_but_close_clicked(self, widget):
self.topwidget.set_visible_child(self.box['maintenance'])
def on_but_delete_clicked(self, widget):
self.topwidget.set_visible_child(self.box['maintenance'])
# buttons on edit page
def on_but_save_clicked(self, widget):
pass
def on_but_cancel_clicked(self, widget):
self.topwidget.set_visible_child(self.box['maintenance'])
+59 -8
View File
@@ -5,15 +5,66 @@ import gi
gi.require_version("Gtk", "3.0") gi.require_version("Gtk", "3.0")
from gi.repository import Gtk from gi.repository import Gtk
from .view import View
from yms import gtkutils, combobox, treeview from yms import gtkutils, combobox, treeview
from yms.model import project
class ProjectsView: class ProjectsView(View):
def __init__(self, context): def __init__(self, context):
self.title = _("Projects") super().__init__(context, _("Projects"), "projects.ui")
builder = Gtk.Builder()
builder.set_translation_domain(context.textdomain) self.project = project.Project(context.db) # current record
builder.add_from_file(os.path.join(context.ui_path, "projects.ui")) self.newrecord = False
builder.connect_signals(self)
self.topwidget = builder.get_object("topobject") self.lst_projects = Gtk.ListStore(int, str, str, int, str, str)
gtkutils.init_named_controls(self, builder) sql = (
"SELECT projid, projname, startdate, duration, projstate, remarks "
"FROM project "
"WHERE vid=%s "
"ORDER BY projid"
)
self.db.dcur.execute(sql, (context.vessel.vid,))
for row in self.db.dcur.fetchall():
data = (
row['projid'],
row['projname'],
self.format_date(row['startdate']),
row['duration'],
row['projstate'],
row['remarks']
)
self.lst_projects.append(data)
treeview.add_column(self.tree['projects'], _('ID'), 0)
treeview.add_column(self.tree['projects'], _('Name'), 1)
treeview.add_column(self.tree['projects'], _('Start date'), 2)
treeview.add_column(self.tree['projects'], _('Duration'), 3)
treeview.add_column(self.tree['projects'], _('Status'), 4)
treeview.add_column(self.tree['projects'], _('Remarks'), 5)
self.tree['projects'].set_model(self.lst_projects)
# buttons on list page
def on_but_new_clicked(self, widget):
self.topwidget.set_visible_child(self.box['proj_edit'])
def on_but_edit_clicked(self, widget):
self.topwidget.set_visible_child(self.box['proj_edit'])
def on_but_detail_clicked(self, widget):
self.topwidget.set_visible_child(self.box['proj_detail'])
# buttons on detail page
# edit2 uses edit callback
def on_but_close_clicked(self, widget):
self.topwidget.set_visible_child(self.box['projects'])
def on_but_delete_clicked(self, widget):
self.topwidget.set_visible_child(self.box['projects'])
# buttons on edit page
def on_but_save_clicked(self, widget):
pass
def on_but_cancel_clicked(self, widget):
self.topwidget.set_visible_child(self.box['projects'])
+64 -8
View File
@@ -5,15 +5,71 @@ import gi
gi.require_version("Gtk", "3.0") gi.require_version("Gtk", "3.0")
from gi.repository import Gtk from gi.repository import Gtk
from .view import View
from yms import gtkutils, combobox, treeview from yms import gtkutils, combobox, treeview
from yms.model import provision
class ProvisionsView: class ProvisionsView(View):
def __init__(self, context): def __init__(self, context):
self.title = _("Provisions") super().__init__(context, _("Provisions"), "provisions.ui")
builder = Gtk.Builder()
builder.set_translation_domain(context.textdomain) self.prov = provision.Provision(context.db) # current record
builder.add_from_file(os.path.join(context.ui_path, "provisions.ui")) self.newrecord = False
builder.connect_signals(self)
self.topwidget = builder.get_object("topobject") self.load_dropdown()
gtkutils.init_named_controls(self, builder)
self.lst_provisions = Gtk.ListStore(int, str, int, str, str, str)
sql = (
"SELECT p.provid, p.provname, p.number, p.unit, p.storedate, p.shelflife "
"FROM provisions AS p LEFT OUTER JOIN storage AS s USING (sid) "
"WHERE s.vid=%s"
)
self.db.dcur.execute(sql, (context.vessel.vid,))
for row in self.db.dcur.fetchall():
data = (
row['provid'],
row['provname'],
row['number'],
self.prov_unit[row['unit']],
self.format_date(row['storedate']),
self.format_date(row['shelflife'])
)
self.lst_provisions.append(data)
treeview.add_column(self.tree['provisions'], _('ID'), 0)
treeview.add_column(self.tree['provisions'], _('Description'), 1)
treeview.add_column(self.tree['provisions'], _('Number'), 2)
treeview.add_column(self.tree['provisions'], _('Unit'), 3)
treeview.add_column(self.tree['provisions'], _('Stored'), 4)
treeview.add_column(self.tree['provisions'], _('Best before'), 5)
self.tree['provisions'].set_model(self.lst_provisions)
def load_dropdown(self):
self.db.cur.execute("SELECT ddval, ddtext FROM dropdown WHERE ddid=6 ORDER BY ddval")
self.prov_unit = dict(self.db.cur.fetchall())
# buttons on list page
def on_but_new_clicked(self, widget):
self.topwidget.set_visible_child(self.box['prov_edit'])
def on_but_edit_clicked(self, widget):
self.topwidget.set_visible_child(self.box['prov_edit'])
def on_but_detail_clicked(self, widget):
self.topwidget.set_visible_child(self.box['prov_detail'])
# buttons on detail page
# edit2 uses edit callback
def on_but_close_clicked(self, widget):
self.topwidget.set_visible_child(self.box['provisions'])
def on_but_delete_clicked(self, widget):
self.topwidget.set_visible_child(self.box['provisions'])
# buttons on edit page
def on_but_save_clicked(self, widget):
pass
def on_but_cancel_clicked(self, widget):
self.topwidget.set_visible_child(self.box['provisions'])
+3
View File
@@ -20,6 +20,9 @@ class StatusView:
self.topwidget = builder.get_object("topobject") self.topwidget = builder.get_object("topobject")
gtkutils.init_named_controls(self, builder) gtkutils.init_named_controls(self, builder)
# Generic information
self.label['dbinfo'].set_text("Database: {}".format(context.cfg['db']))
# Load table status info # Load table status info
self.lst_tables = Gtk.ListStore(str, int) self.lst_tables = Gtk.ListStore(str, int)
for row in self.get_table_counts(): for row in self.get_table_counts():
+88
View File
@@ -0,0 +1,88 @@
# SPDX-License-Identifier: WTFPL
import os
import gi
gi.require_version("Gtk", "3.0")
from gi.repository import GLib, Gtk, Gdk
from .view import View
from yms import gtkutils, combobox, treeview
from yms.model import storage
class StorageView(View):
def __init__(self, context):
super().__init__(context, _("Storage"), "storage.ui")
self.storage = storage.Storage(context.db) # current record
self.newrecord = False
self.lst_storage = Gtk.ListStore(int, str, str, str)
sql = (
"SELECT sid, sname, CONCAT(x, ',', y, ',', z) AS position, remarks "
"FROM storage "
"WHERE vid=%s "
"ORDER BY sname"
)
self.db.cur.execute(sql, (context.vessel.vid,))
for row in self.db.cur.fetchall():
self.lst_storage.append(row)
treeview.add_column(self.tree['storage'], _('ID'), 0)
treeview.add_column(self.tree['storage'], _('Name'), 1)
treeview.add_column(self.tree['storage'], _('Position'), 2)
treeview.add_column(self.tree['storage'], _('Remarks'), 3)
self.tree['storage'].set_model(self.lst_storage)
def load_list(self):
pass
def display_record(self):
self.label['name'].set_text(self.storage.sname)
self.label['remarks'].set_text(self.storage.remarks or '')
def edit_record(self):
self.entry['sname'].set_text(self.storage.sname)
self.spin['x'].set_value(self.storage.x)
self.spin['y'].set_value(self.storage.y)
self.spin['z'].set_value(self.storage.z)
self.text['remarks'].get_buffer().set_text(self.storage.remarks or '')
# buttons on list page
def on_but_new_clicked(self, widget):
self.newrecord = True
self.label['title_edit'].set_text("Add new Storage")
self.topwidget.set_visible_child(self.box['stor_edit'])
def on_but_edit_clicked(self, widget):
self.newrecord = False
self.label['title_edit'].set_text("Edit Storage")
sid = treeview.get_value(self.tree['storage'], 0)
self.storage.load(sid)
self.edit_record()
self.topwidget.set_visible_child(self.box['stor_edit'])
def on_but_detail_clicked(self, widget):
sid = treeview.get_value(self.tree['storage'], 0)
self.storage.load(sid)
self.display_record()
self.topwidget.set_visible_child(self.box['stor_detail'])
# buttons on detail page
# edit2 uses edit callback
def on_but_close_clicked(self, widget):
self.topwidget.set_visible_child(self.box['storage'])
def on_but_delete_clicked(self, widget):
self.topwidget.set_visible_child(self.box['storage'])
self.newrecord = False
# buttons on edit page
def on_but_save_clicked(self, widget):
print("save not implemented yet")
self.newrecord = False
def on_but_cancel_clicked(self, widget):
self.topwidget.set_visible_child(self.box['storage'])
self.newrecord = False
+7 -1
View File
@@ -8,10 +8,11 @@ SPDX-License-Identifier: WTFPL
import os import os
import gi import gi
gi.require_version("Gtk", "3.0") gi.require_version("Gtk", "3.0")
from gi.repository import Gtk from gi.repository import GLib, Gtk, Gdk
from yms import gtkutils from yms import gtkutils
class View: class View:
def __init__(self, context, title, ui_file): def __init__(self, context, title, ui_file):
self.context = context self.context = context
self.db = context.db self.db = context.db
@@ -25,6 +26,11 @@ class View:
self.topwidget = builder.get_object("topobject") self.topwidget = builder.get_object("topobject")
gtkutils.init_named_controls(self, builder) gtkutils.init_named_controls(self, builder)
def format_date(self, dateval):
if dateval is None:
return ''
return dateval.strftime(self.context.datefmt)
def on_textview_keypress(self, widget, event): def on_textview_keypress(self, widget, event):
# Generic limit length function # Generic limit length function
if event.state & Gdk.ModifierType.CONTROL_MASK: if event.state & Gdk.ModifierType.CONTROL_MASK:
+26 -1
View File
@@ -14,7 +14,7 @@ Configuration file located at ~/.config/ymsgui.conf:
pass = topsecret pass = topsecret
[Documents] [Documents]
basepath = /var/local/yms basepath = /var/local/lib/yms
[Data] [Data]
shapedir = /usr/local/share/yms/shapes shapedir = /usr/local/share/yms/shapes
@@ -39,6 +39,7 @@ from yms.model import user
from yms.model import vessel from yms.model import vessel
from yms.view.base import BaseView from yms.view.base import BaseView
from yms.view.storage import StorageView
from yms.view.equipment import EquipmentView from yms.view.equipment import EquipmentView
from yms.view.inventory import InventoryView from yms.view.inventory import InventoryView
from yms.view.provisions import ProvisionsView from yms.view.provisions import ProvisionsView
@@ -57,6 +58,15 @@ class AppContext:
'docpath': '/var/local/yms', 'docpath': '/var/local/yms',
'shapedir': '/usr/local/share/yms/shapes' 'shapedir': '/usr/local/share/yms/shapes'
} }
# mapping between PHP and Python
datefmt_map = {
'Y-m-d': '%Y.%m.%d',
'Y/m/d': '%Y/%m/%d',
'd.m.Y': '%d.%m.%Y',
'd/m/Y': '%d/%m/%Y',
'm-d-Y': '%m.%d.%Y'
}
def __init__(self): def __init__(self):
self.db = None self.db = None
@@ -64,6 +74,7 @@ class AppContext:
self.vessel = None self.vessel = None
self.ui_path = os.path.join(self.get_sharepath(), "yms", "ui") self.ui_path = os.path.join(self.get_sharepath(), "yms", "ui")
self.textdomain = "ymsgui" self.textdomain = "ymsgui"
self.datefmt = '%d.%m.%Y'
def set_db(self, db): def set_db(self, db):
self.db = db self.db = db
@@ -71,6 +82,19 @@ class AppContext:
def load(self): def load(self):
self.user = user.User(db, 0) self.user = user.User(db, 0)
self.vessel = vessel.Vessel(db) self.vessel = vessel.Vessel(db)
# load date format from db settings
sql = "SELECT valstr FROM settings WHERE userid=0 AND sno=2"
self.db.cur.execute(sql)
row = self.db.cur.fetchone()
if row is not None:
try:
self.datefmt = self.datefmt_map[row[0]]
except KeyError:
# almost impossible case where db value is not in mapping
print("internal error: format mapping missinf")
else:
# perhaps create missing record here?
pass
def get_sharepath(self): def get_sharepath(self):
path = os.path.realpath(__file__) path = os.path.realpath(__file__)
@@ -85,6 +109,7 @@ class Frontend:
def __init__(self, context): def __init__(self, context):
self.modules = { self.modules = {
"base": BaseView(context), "base": BaseView(context),
"storage": StorageView(context),
"equipment": EquipmentView(context), "equipment": EquipmentView(context),
"inventory": InventoryView(context), "inventory": InventoryView(context),
"provisions": ProvisionsView(context), "provisions": ProvisionsView(context),