+import gi
+gi.require_version("Gtk", "3.0")
+from gi.repository import Gtk
+from newlensdialog import NewlensDialog
+
+pages = {}
+
+class Notebook:
+ __instance = None
+ def __new__(cls, *args, **kwargs):
+ if (cls.__instance is None):
+ cls.__instance = super(Notebook, cls).__new__(cls)
+ return cls.__instance
+
+ def __init__(self, builder, db):
+ self.builder = builder
+ self.db = db
+ self.nb = self.builder.get_object("lens_maker_notebook")
+
+ def setDB(self, db):
+ self.db = db
+
+ def addPage(self, name):
+ if pages.get(name) is not None:
+ raise Exception("{page}: Page exists".format(page = name))
+ label = Gtk.Label()
+ label.set_text(name)
+ liststore = Gtk.ListStore(int, str, str, int)
+ treeview = Gtk.TreeView()
+ treeview.connect("row-activated", self.on_row_activated)
+ treeview.set_model(liststore)
+ for i, title in enumerate(["Serial No", "Lens", "Notes"]):
+ renderer = Gtk.CellRendererText()
+ column = Gtk.TreeViewColumn(title, renderer, text=i)
+ treeview.append_column(column)
+ scrollable_treelist = Gtk.ScrolledWindow()
+ scrollable_treelist.set_vexpand(True)
+ scrollable_treelist.add(treeview)
+ index = self.nb.append_page(scrollable_treelist, label)
+ if index < 0:
+ raise Exception("{page}: Page not added".format(page = name))
+ if self.db is not None:
+ self.db.addMaker(name)
+ pages[name] = liststore
+ self.nb.show_all()
+
+ def addRow(self, tab, tuple):
+ page = pages.get(tab)
+ if page is None:
+ raise Exception("{name}: Page does not exist".format(name = tab))
+ try:
+ if self.db is not None:
+ id = self.db.addLens(tab, tuple)
+ page.append(tuple + (id, ))
+ else:
+ page.append(tuple)
+ except Exception as err:
+ print(err)
+ raise
+
+ def updateRow(self, path, tuple):
+ try:
+ model = path[0]
+ row = path[1]
+ for i in range(0, len(tuple)):
+ model[row][i] = tuple[i]
+ if self.db is not None:
+ self.db.updateLens(tuple)
+ except Exception as err:
+ print(err)
+ raise
+
+ def deleteRow(self, path, id):
+ try:
+ model = path[0]
+ iter = model.get_iter(path[1])
+ model.remove(iter)
+ if self.db is not None:
+ self.db.deleteLens(id)
+ except Exception as err:
+ print(err)
+ raise
+
+ def deletePage(self, pagenum):
+ self.nb.remove_page(pagenum)
+
+ def getCurrentPage(self):
+ return self.nb.get_current_page()
+
+ def getCurrentPageLabel(self):
+ page = self.nb.get_nth_page(self.getCurrentPage())
+ label = self.nb.get_tab_label_text(page)
+ return label
+
+ def on_row_activated(self, widget, row, col):
+ model = widget.get_model()
+ lensdata = []
+ for i in range(0, 4):
+ lensdata.append(model[row][i])
+ lensDialog = NewlensDialog(self.builder, self.db, (model, row))
+ lensDialog.setText(lensdata)