Implement the New and Open menu items, add a file with correct grid for testing
authorNick Downing <nick@ndcode.org>
Sun, 7 Jan 2024 15:03:48 +0000 (02:03 +1100)
committerNick Downing <nick@ndcode.org>
Mon, 8 Jan 2024 04:03:16 +0000 (15:03 +1100)
nick.txt [new file with mode: 0644]
ocr_fixed.glade
ocr_fixed.py

diff --git a/nick.txt b/nick.txt
new file mode 100644 (file)
index 0000000..d3b25d6
--- /dev/null
+++ b/nick.txt
@@ -0,0 +1,21 @@
+2
+2
+7.500000000000000000e+01 3.480000000000000000e+02
+7.190000000000000000e+02 3.460000000000000000e+02
+7.224731980875429826e+02 1.210999999999403144e+03
+8.000000000000000000e+01 1.214000000000000000e+03
+48
+33
+7.436563918088408276e-02 -4.293628128222262740e-04 -5.428004679702836732e+00
+1.179327284454995128e-04 3.797433855993687102e-02 -1.322391477349014899e+01
+-1.812285580558945387e-06 -2.717006378139452585e-06 1.000000000000000000e+00
+2
+7.200000000000000000e+01 1.510000000000000000e+02
+9.750000000000000000e+02 1.450000000000000000e+02
+9.730000000000000000e+02 1.359000000000000000e+03
+7.000000000000000000e+01 1.361000000000000000e+03
+68
+46
+7.557437035050205976e-02 1.249163146327952759e-04 -5.460217028763203473e+00
+2.526732021656680205e-04 3.802731692607215497e-02 -5.760317326392990545e+00
+3.661957232370968793e-06 1.208561119608967402e-08 1.000000000000000000e+00
index fd9aeb5..da70254 100644 (file)
@@ -27,7 +27,7 @@
                     <property name="visible">True</property>
                     <property name="can-focus">False</property>
                     <child>
-                      <object class="GtkImageMenuItem">
+                      <object class="GtkImageMenuItem" id="menu_new">
                         <property name="label">gtk-new</property>
                         <property name="visible">True</property>
                         <property name="can-focus">False</property>
@@ -36,7 +36,7 @@
                       </object>
                     </child>
                     <child>
-                      <object class="GtkImageMenuItem">
+                      <object class="GtkImageMenuItem" id="menu_open">
                         <property name="label">gtk-open</property>
                         <property name="visible">True</property>
                         <property name="can-focus">False</property>
index a683668..0a1ed79 100755 (executable)
@@ -61,11 +61,15 @@ class App:
     self.button1 = self.builder.get_object('button1')
     self.button2 = self.builder.get_object('button2')
     self.viewport = self.builder.get_object('viewport')
+    self.menu_new = self.builder.get_object('menu_new')
+    self.menu_open = self.builder.get_object('menu_open')
     self.menu_save = self.builder.get_object('menu_save')
     self.menu_save_as = self.builder.get_object('menu_save_as')
 
     self.application_window.connect('destroy', Gtk.main_quit)
     self.application_window.connect('key_press_event', self.on_key_press)
+    self.menu_new.connect('activate', self.on_new)
+    self.menu_open.connect('activate', self.on_open)
     self.menu_save.connect('activate', self.on_save)
     self.menu_save_as.connect('activate', self.on_save_as)
 
@@ -414,17 +418,54 @@ class App:
       return False
     return True
 
+  def on_new(self, menu_item):
+    self.file_txt = None
+    self.pages = [Page(), Page()]
+    self.set_page(0, 'a-008.png')
+    self.invalidate()
+    return True
+
+  def on_open(self, menu_item):
+    if self.file_chooser_open():
+      self.read_file_txt()
+      self.set_page(0, 'a-008.png')
+      self.invalidate()
+    return True
+
   def on_save(self, menu_item):
-    if self.file_txt is not None or self.file_chooser():
+    if self.file_txt is not None or self.file_chooser_save():
       self.write_file_txt()
     return True
 
   def on_save_as(self, menu_item):
-    if self.file_chooser():
+    if self.file_chooser_save():
       self.write_file_txt()
     return True
 
-  def file_chooser(self):
+  def file_chooser_open(self):
+    dialog = Gtk.FileChooserDialog(
+      title = "Open",
+      parent = self.application_window,
+      action = Gtk.FileChooserAction.OPEN
+    )
+    dialog.add_buttons(
+      Gtk.STOCK_CANCEL,
+      Gtk.ResponseType.CANCEL,
+      Gtk.STOCK_OPEN,
+      Gtk.ResponseType.OK,
+    )
+    self.add_filters(dialog)
+
+    response = dialog.run()
+    if response == Gtk.ResponseType.CANCEL:
+      dialog.destroy()
+      return False
+
+    self.file_txt = dialog.get_filename()
+    dialog.destroy()
+    return True
+
+  def file_chooser_save(self):
     dialog = Gtk.FileChooserDialog(
       title = "Save as",
       parent = self.application_window,
@@ -458,15 +499,27 @@ class App:
     filter_any.add_pattern("*")
     dialog.add_filter(filter_any)
 
+  def read_file_txt(self):
+    with open(self.file_txt) as fin:
+      self.pages = []
+      n_pages = int(fin.readline())
+      for i in range(n_pages):
+        state = int(fin.readline())
+        nodes = numpy.loadtxt(fin, numpy.double, max_rows = 4)
+        chars = numpy.loadtxt(fin, numpy.int32, max_rows = 2)
+        H = numpy.loadtxt(fin, numpy.double, max_rows = 3)
+        self.pages.append(Page(state, nodes, chars, H))
+
   def write_file_txt(self):
     with open(self.file_txt, 'w') as fout:
       fout.write(f'{len(self.pages):d}\n')
       for page in self.pages:
         fout.write(f'{page.state:d}\n')
         numpy.savetxt(fout, page.nodes)
-        numpy.savetxt(fout, page.chars)
+        numpy.savetxt(fout, page.chars, '%d')
         numpy.savetxt(fout, page.H)
 
+
 app = App()
 app.application_window.set_position(Gtk.WindowPosition.CENTER)
 app.application_window.present()