From 1523934591c0348aac5c2e64c3ade528c87d7f1a Mon Sep 17 00:00:00 2001 From: Nick Downing Date: Mon, 8 Jan 2024 02:03:48 +1100 Subject: [PATCH] Implement the New and Open menu items, add a file with correct grid for testing --- nick.txt | 21 +++++++++++++++++ ocr_fixed.glade | 4 ++-- ocr_fixed.py | 61 +++++++++++++++++++++++++++++++++++++++++++++---- 3 files changed, 80 insertions(+), 6 deletions(-) create mode 100644 nick.txt diff --git a/nick.txt b/nick.txt new file mode 100644 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 diff --git a/ocr_fixed.glade b/ocr_fixed.glade index fd9aeb5..da70254 100644 --- a/ocr_fixed.glade +++ b/ocr_fixed.glade @@ -27,7 +27,7 @@ True False - + gtk-new True False @@ -36,7 +36,7 @@ - + gtk-open True False diff --git a/ocr_fixed.py b/ocr_fixed.py index a683668..0a1ed79 100755 --- a/ocr_fixed.py +++ b/ocr_fixed.py @@ -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() -- 2.34.1