From 3421a72a15c8b7cc3ad99565c5c728d43ea81c4b Mon Sep 17 00:00:00 2001 From: Robert Sachunsky Date: Tue, 18 Jan 2022 11:36:48 +0100 Subject: [PATCH 1/8] ImageVersionSelector: show only images that exist in the FS --- ocrd_browser/view/page.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/ocrd_browser/view/page.py b/ocrd_browser/view/page.py index a4c8436..f0deafa 100644 --- a/ocrd_browser/view/page.py +++ b/ocrd_browser/view/page.py @@ -124,7 +124,8 @@ def set_page(self, page: Page) -> None: versions.append(ImageVersion.from_page(self.document, page)) alts: List[AlternativeImageType] = page.page.get_AlternativeImage() for alt in alts: - versions.append(ImageVersion.from_alternative_image(self.document, alt)) + if self.document.path(alt.filename).exists(): + versions.append(ImageVersion.from_alternative_image(self.document, alt)) with self.version_box.handler_block(self._change_handler): self.versions.clear() From 1910bbfa267844cf2fba907e58e5ca38c8843312 Mon Sep 17 00:00:00 2001 From: Robert Sachunsky Date: Tue, 12 Apr 2022 10:52:05 +0200 Subject: [PATCH 2/8] add screenshot button to PageView --- ocrd_browser/view/page.py | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/ocrd_browser/view/page.py b/ocrd_browser/view/page.py index f0deafa..5e6e4a9 100644 --- a/ocrd_browser/view/page.py +++ b/ocrd_browser/view/page.py @@ -256,6 +256,10 @@ def build(self) -> None: self.add_configurator('scale', ImageZoomSelector(2.0, 0.05, -4.0, 2.0)) self.add_configurator('image_version', ImageVersionSelector()) self.add_configurator('features', PageFeaturesSelector()) + button = Gtk.Button.new_with_label('*') + button.connect('clicked', self.open_screenshotdialog) + button.set_visible(True) + self.action_bar.pack_start(button) actions = ActionRegistry() actions.create(name='zoom_by', param_type=GLib.VariantType('i'), callback=self._on_zoom_by) @@ -531,3 +535,30 @@ def update_transformation(self) -> None: self.page_image.height ) self.highlight.queue_draw() + + def open_screenshotdialog(self, button: Gtk.Button) -> None: + if self.page_image is None: + return + + dialog = Gtk.FileChooserDialog(title="Save image under...", + parent=self.window, + action=Gtk.FileChooserAction.SAVE) + dialog.add_buttons(Gtk.STOCK_CANCEL, + Gtk.ResponseType.CANCEL, + Gtk.STOCK_SAVE, + Gtk.ResponseType.OK) + filter_png = Gtk.FileFilter() + filter_png.set_name("PNG image files") + filter_png.add_mime_type("image/png") + dialog.add_filter(filter_png) + dialog.set_current_name("untitled.png") + + response = dialog.run() + if response == Gtk.ResponseType.OK: + filename = dialog.get_filename() + elif response == Gtk.ResponseType.CANCEL: + filename = '' + + dialog.destroy() + if filename: + self.page_image.save(filename) From 5a0b0e1b3a5b8f797ff125741cc248977cb7cf3a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Johannes=20K=C3=BCnsebeck?= Date: Thu, 14 Apr 2022 10:49:21 +0200 Subject: [PATCH 3/8] Allow flake8 violations in third-party code --- setup.cfg | 1 + 1 file changed, 1 insertion(+) diff --git a/setup.cfg b/setup.cfg index b6caca3..a4a5d0c 100644 --- a/setup.cfg +++ b/setup.cfg @@ -1,5 +1,6 @@ [flake8] ignore=E501 +exclude=tests/assets/__init__.py [mypy] warn_return_any = True From 4810a9528ebd2fcb51ce96ba070693717851f5a4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Johannes=20K=C3=BCnsebeck?= Date: Thu, 14 Apr 2022 10:52:38 +0200 Subject: [PATCH 4/8] Disable time-sensitive test --- tests/util/test_image.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/util/test_image.py b/tests/util/test_image.py index 3cd2ed5..cda0ab0 100644 --- a/tests/util/test_image.py +++ b/tests/util/test_image.py @@ -31,7 +31,7 @@ def _image_modes(): class ImageUtilTestCase(TestCase): def test_pil_to_pixbuf_is_faster_via_opencv(self): - # self.skipTest('Slow test') + self.skipTest('Slow test') files = [ ASSETS_PATH / 'kant_aufklaerung_1784-binarized/data/OCR-D-IMG/OCR-D-IMG_0017.tif', ASSETS_PATH / 'kant_aufklaerung_1784-binarized/data/OCR-D-IMG-1BIT/OCR-D-IMG-1BIT_0017.png', From 93675c72020cd9800374898d49cf0105adda098e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Johannes=20K=C3=BCnsebeck?= Date: Thu, 14 Apr 2022 10:49:21 +0200 Subject: [PATCH 5/8] Allow flake8 violations in third-party code (cherry picked from commit 5a0b0e1b3a5b8f797ff125741cc248977cb7cf3a) --- setup.cfg | 1 + 1 file changed, 1 insertion(+) diff --git a/setup.cfg b/setup.cfg index b6caca3..a4a5d0c 100644 --- a/setup.cfg +++ b/setup.cfg @@ -1,5 +1,6 @@ [flake8] ignore=E501 +exclude=tests/assets/__init__.py [mypy] warn_return_any = True From cda12f9a68a955c4130c09e748cbeb2d4d6d6ff5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Johannes=20K=C3=BCnsebeck?= Date: Thu, 14 Apr 2022 10:52:38 +0200 Subject: [PATCH 6/8] Disable time-sensitive test (cherry picked from commit 4810a9528ebd2fcb51ce96ba070693717851f5a4) --- tests/util/test_image.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/util/test_image.py b/tests/util/test_image.py index 3cd2ed5..cda0ab0 100644 --- a/tests/util/test_image.py +++ b/tests/util/test_image.py @@ -31,7 +31,7 @@ def _image_modes(): class ImageUtilTestCase(TestCase): def test_pil_to_pixbuf_is_faster_via_opencv(self): - # self.skipTest('Slow test') + self.skipTest('Slow test') files = [ ASSETS_PATH / 'kant_aufklaerung_1784-binarized/data/OCR-D-IMG/OCR-D-IMG_0017.tif', ASSETS_PATH / 'kant_aufklaerung_1784-binarized/data/OCR-D-IMG-1BIT/OCR-D-IMG-1BIT_0017.png', From 5f5dfa65ec0f24f9af7a533a90f1b0cf35d28b9d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Johannes=20K=C3=BCnsebeck?= Date: Thu, 14 Apr 2022 11:23:42 +0200 Subject: [PATCH 7/8] Allow closing "save screenshot" by any means (like ESC) --- ocrd_browser/view/page.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ocrd_browser/view/page.py b/ocrd_browser/view/page.py index 5e6e4a9..602728c 100644 --- a/ocrd_browser/view/page.py +++ b/ocrd_browser/view/page.py @@ -556,7 +556,7 @@ def open_screenshotdialog(self, button: Gtk.Button) -> None: response = dialog.run() if response == Gtk.ResponseType.OK: filename = dialog.get_filename() - elif response == Gtk.ResponseType.CANCEL: + else: filename = '' dialog.destroy() From ac20301487fee98d97124d6ee5c3894af0ef1e74 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Johannes=20K=C3=BCnsebeck?= Date: Thu, 14 Apr 2022 12:30:37 +0200 Subject: [PATCH 8/8] New icon --- ocrd_browser/view/page.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ocrd_browser/view/page.py b/ocrd_browser/view/page.py index 602728c..d8461d4 100644 --- a/ocrd_browser/view/page.py +++ b/ocrd_browser/view/page.py @@ -256,9 +256,9 @@ def build(self) -> None: self.add_configurator('scale', ImageZoomSelector(2.0, 0.05, -4.0, 2.0)) self.add_configurator('image_version', ImageVersionSelector()) self.add_configurator('features', PageFeaturesSelector()) - button = Gtk.Button.new_with_label('*') + icon = Gtk.Image.new_from_icon_name('camera-photo', Gtk.IconSize.SMALL_TOOLBAR) + button = Gtk.Button(image=icon, visible=True, always_show_image=True, tooltip_text='Saves a screenshot of the current view') button.connect('clicked', self.open_screenshotdialog) - button.set_visible(True) self.action_bar.pack_start(button) actions = ActionRegistry()