From 7a856a77e4d36a077cb1a5a1c50831463a6692a0 Mon Sep 17 00:00:00 2001 From: Kaalleen <36401965+kaalleen@users.noreply.github.com> Date: Sun, 23 Jun 2024 10:58:16 +0200 Subject: wxpythonify about extension (#3007) --- lib/extensions/__init__.py | 4 +- lib/extensions/about.py | 14 +++++++ lib/gui/about.py | 98 ++++++++++++++++++++++++++++++++++++++++++++++ lib/inx/generate.py | 2 - lib/inx/info.py | 14 ------- lib/inx/utils.py | 12 ------ lib/utils/version.py | 29 ++++++++++---- 7 files changed, 137 insertions(+), 36 deletions(-) create mode 100644 lib/extensions/about.py create mode 100644 lib/gui/about.py delete mode 100755 lib/inx/info.py (limited to 'lib') diff --git a/lib/extensions/__init__.py b/lib/extensions/__init__.py index a4c8edca..e38eeb43 100644 --- a/lib/extensions/__init__.py +++ b/lib/extensions/__init__.py @@ -3,6 +3,7 @@ # Copyright (c) 2010 Authors # Licensed under the GNU GPL version 3.0 or later. See the file LICENSE for details. +from .about import About from .apply_palette import ApplyPalette from .apply_threadlist import ApplyThreadlist from .auto_run import AutoRun @@ -66,7 +67,8 @@ from .update_svg import UpdateSvg from .zigzag_line_to_satin import ZigzagLineToSatin from .zip import Zip -__all__ = extensions = [ApplyPalette, +__all__ = extensions = [About, + ApplyPalette, ApplyThreadlist, AutoRun, AutoSatin, diff --git a/lib/extensions/about.py b/lib/extensions/about.py new file mode 100644 index 00000000..f4ab233c --- /dev/null +++ b/lib/extensions/about.py @@ -0,0 +1,14 @@ +# Authors: see git history +# +# Copyright (c) 2023 Authors +# Licensed under the GNU GPL version 3.0 or later. See the file LICENSE for details. + +from ..gui.about import AboutInkstitchApp +from .base import InkstitchExtension + + +class About(InkstitchExtension): + + def effect(self): + app = AboutInkstitchApp() + app.MainLoop() diff --git a/lib/gui/about.py b/lib/gui/about.py new file mode 100644 index 00000000..5033dabf --- /dev/null +++ b/lib/gui/about.py @@ -0,0 +1,98 @@ +# Authors: see git history +# +# Copyright (c) 2023 Authors +# Licensed under the GNU GPL version 3.0 or later. See the file LICENSE for details. + +import os +import wx +import wx.adv + +from ..i18n import _ +from ..utils import get_resource_dir +from ..utils.version import get_inkstitch_version, get_inkstitch_license + + +class AboutFrame(wx.Frame): + + def __init__(self, *args, **kwargs): + wx.Frame.__init__(self, None, wx.ID_ANY, _("About Ink/Stitch"), *args, **kwargs) + + self.SetWindowStyle(wx.FRAME_FLOAT_ON_PARENT | wx.DEFAULT_FRAME_STYLE) + + main_panel = wx.Panel(self, wx.ID_ANY) + + notebook_sizer = wx.BoxSizer(wx.VERTICAL) + notebook = wx.Notebook(main_panel, wx.ID_ANY) + notebook_sizer.Add(notebook, 1, wx.EXPAND, 0) + + info_panel = wx.Panel(notebook, wx.ID_ANY) + notebook.AddPage(info_panel, _("About")) + + info_sizer = wx.BoxSizer(wx.VERTICAL) + + inkstitch_logo = wx.Image( + os.path.join( + get_resource_dir('icons'), + "inkstitch_colour_logo.png" + ) + ).ConvertToBitmap() + + inkstitch_logo = wx.StaticBitmap(info_panel, -1, inkstitch_logo, (10, 5), (inkstitch_logo.GetWidth(), inkstitch_logo.GetHeight())) + + inkstitch_version = get_inkstitch_version() + inkstitch_version = wx.StaticText(info_panel, label=inkstitch_version) + version_font = wx.Font().Bold() + inkstitch_version.SetFont(version_font) + + inkstitch_description = _("An open-source machine embroidery design platform based on Inkscape.") + inkstitch_description = wx.StaticText(info_panel, label=inkstitch_description) + + inkstitch_link = wx.adv.HyperlinkCtrl( + info_panel, + wx.ID_ANY, + _("https://inkstitch.org"), + _("https://inkstitch.org") + ) + inkstitch_link.Bind(wx.adv.EVT_HYPERLINK, self.on_link_clicked) + + info_sizer.Add(inkstitch_logo, 1, wx.RIGHT | wx.LEFT | wx.ALIGN_CENTER, 20) + info_sizer.Add(inkstitch_version, 0, wx.RIGHT | wx.LEFT, 20) + info_sizer.Add(inkstitch_description, 0, wx.RIGHT | wx.LEFT, 20) + info_sizer.Add(0, 10, 0) + info_sizer.Add(inkstitch_link, 0, wx.RIGHT | wx.LEFT, 20) + info_sizer.Add(0, 40, 0) + + license_panel = wx.Panel(notebook, wx.ID_ANY) + notebook.AddPage(license_panel, _("License")) + + license_sizer = wx.BoxSizer(wx.VERTICAL) + license_text = get_inkstitch_license() + license_text = wx.TextCtrl( + license_panel, + size=(600, 500), + value=license_text, + style=wx.TE_MULTILINE | wx.SUNKEN_BORDER | wx.TE_READONLY | wx.HSCROLL + ) + license_sizer.Add(license_text, 0, wx.EXPAND | wx.ALL, 8) + + info_panel.SetSizer(info_sizer) + license_panel.SetSizer(license_sizer) + main_panel.SetSizer(notebook_sizer) + + self.SetSizeHints(notebook_sizer.CalcMin()) + + self.Layout() + + def on_link_clicked(self, event): + event.Skip() + + +class AboutInkstitchApp(wx.App): + def __init__(self): + super().__init__() + + def OnInit(self): + self.frame = AboutFrame() + self.SetTopWindow(self.frame) + self.frame.Show() + return True diff --git a/lib/inx/generate.py b/lib/inx/generate.py index 47ca3b6d..7cb59185 100644 --- a/lib/inx/generate.py +++ b/lib/inx/generate.py @@ -3,7 +3,6 @@ # Copyright (c) 2010 Authors # Licensed under the GNU GPL version 3.0 or later. See the file LICENSE for details. -from .info import generate_info_inx_files from .extensions import generate_extension_inx_files from .inputs import generate_input_inx_files from .outputs import generate_output_inx_files @@ -32,4 +31,3 @@ def generate_inx_files(alter=None): generate_input_inx_files(alter_data) generate_output_inx_files(alter_data) generate_extension_inx_files(alter_data) - generate_info_inx_files(alter_data) diff --git a/lib/inx/info.py b/lib/inx/info.py deleted file mode 100755 index dc80c3eb..00000000 --- a/lib/inx/info.py +++ /dev/null @@ -1,14 +0,0 @@ -# Authors: see git history -# -# Copyright (c) 2010 Authors -# Licensed under the GNU GPL version 3.0 or later. See the file LICENSE for details. - -from .utils import build_environment, write_inx_file - - -def generate_info_inx_files(alter_data): - env = build_environment() - info_inx_files = ['about', 'embroider'] - for info in info_inx_files: - template = env.get_template(f'{info}.xml') - write_inx_file(info, template.render(alter_data)) diff --git a/lib/inx/utils.py b/lib/inx/utils.py index 31da518e..9168f2a2 100755 --- a/lib/inx/utils.py +++ b/lib/inx/utils.py @@ -12,7 +12,6 @@ from jinja2 import Environment, FileSystemLoader _top_path = dirname(dirname(dirname(os.path.realpath(__file__)))) inx_path = os.path.join(_top_path, "inx") template_path = os.path.join(_top_path, "templates") -version_path = _top_path def build_environment(): @@ -22,29 +21,18 @@ def build_environment(): extensions=['jinja2.ext.i18n'] ) - with open(os.path.join(version_path, 'LICENSE'), 'r') as license: - env.globals["inkstitch_license"] = "".join(license.readlines()) - if "BUILD" in os.environ: # building a ZIP release, with inkstitch packaged as a binary - # About extension: add version information - with open(os.path.join(version_path, 'VERSION'), 'r') as version: - env.globals["inkstitch_version"] = "%s" % version.readline() # Command tag and icons path if sys.platform == "win32": env.globals["command_tag"] = '../bin/inkstitch.exe' - env.globals["image_path"] = '../bin/icons/' elif sys.platform == "darwin": env.globals["command_tag"] = '../../MacOS/inkstitch' - env.globals["image_path"] = '../../Resources/icons/' else: env.globals["command_tag"] = '../bin/inkstitch' - env.globals["image_path"] = '../bin/icons/' else: # user is running inkstitch.py directly as a developer env.globals["command_tag"] = '../inkstitch.py' - env.globals["image_path"] = '../icons/' - env.globals["inkstitch_version"] = "Manual Install" return env diff --git a/lib/utils/version.py b/lib/utils/version.py index 0b46669a..eaa539b8 100755 --- a/lib/utils/version.py +++ b/lib/utils/version.py @@ -10,16 +10,31 @@ from ..i18n import _ def get_inkstitch_version(): - if getattr(sys, 'frozen', False) and hasattr(sys, '_MEIPASS'): - if sys.platform == "darwin": - version = realpath(join(sys._MEIPASS, "..", 'Resources', "VERSION")) - else: - version = realpath(join(sys._MEIPASS, "..", "VERSION")) - else: - version = realpath(join(realpath(__file__), "..", "..", "..", 'VERSION')) + version = _get_source_file("VERSION") if isfile(version): with open(version, 'r') as v: inkstitch_version = _("Ink/Stitch Version: %s") % v.readline() else: inkstitch_version = _("Ink/Stitch Version: unknown") return inkstitch_version + + +def get_inkstitch_license(): + license = _get_source_file("LICENSE") + if isfile(license): + with open(license, 'r') as lcs: + license = lcs.read() + else: + license = "License: GNU GENERAL PUBLIC LICENSE\nVersion 3, 29 June 2007" + return license + + +def _get_source_file(filename): + if getattr(sys, 'frozen', False) and hasattr(sys, '_MEIPASS'): + if sys.platform == "darwin": + source_file = realpath(join(sys._MEIPASS, "..", 'Resources', filename)) + else: + source_file = realpath(join(sys._MEIPASS, "..", filename)) + else: + source_file = realpath(join(realpath(__file__), "..", "..", "..", filename)) + return source_file -- cgit v1.2.3