From 5708791acc4e0799074977f552977c73d49dd416 Mon Sep 17 00:00:00 2001 From: Marius Stanciu Date: Mon, 5 Jun 2023 18:46:06 +0300 Subject: [PATCH] - in Preferences, added a control in the General -> GUI Settings to control the font size for the entire application; require an app restart --- CHANGELOG.md | 1 + .../general/GeneralGUIPrefGroupUI.py | 39 ++++++++++++++++++- appTranslation.py | 12 +++--- flatcam.py | 6 +++ 4 files changed, 51 insertions(+), 7 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3abc6ad5..3adedc62 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,7 @@ CHANGELOG for FlatCAM Evo beta - updated the FCButton and FCLabel custom widgets - Paint Plugin: fixed issues caused by the latest changes in the Shapely module - NCC Plugin: some changes in the method used by the Tcl Command +- in Preferences, added a control in the General -> GUI Settings to control the font size for the entire application; require an app restart 31.05.2023 diff --git a/appGUI/preferences/general/GeneralGUIPrefGroupUI.py b/appGUI/preferences/general/GeneralGUIPrefGroupUI.py index 08cfe09a..6703ff5b 100644 --- a/appGUI/preferences/general/GeneralGUIPrefGroupUI.py +++ b/appGUI/preferences/general/GeneralGUIPrefGroupUI.py @@ -3,8 +3,9 @@ from PyQt6 import QtWidgets, QtCore, QtGui from PyQt6.QtCore import QSettings from appGUI.GUIElements import RadioSet, FCCheckBox, FCComboBox, FCSliderWithSpinner, FCColorEntry, FCLabel, \ - GLay, FCFrame, FCComboBox2 + GLay, FCFrame, FCComboBox2, FCButton, FCSpinner from appGUI.preferences.OptionsGroupUI import OptionsGroupUI +from appTranslation import restart_program import gettext import appTranslation as fcTranslate @@ -159,6 +160,24 @@ class GeneralGUIPrefGroupUI(OptionsGroupUI): grid0.addWidget(self.ui_lay_lbl, 14, 0) grid0.addWidget(self.gui_lay_combo, 14, 1, 1, 2) + # Font Size + self.font_size_lbl = FCLabel('%s:' % _("Font Size")) + self.font_size_lbl.setToolTip( + _("Setting the Font Size for the entire application.") + ) + self.app_font_size_entry = FCSpinner() + self.app_font_size_entry.set_range(9, 18) + + grid0.addWidget(self.font_size_lbl, 16, 0) + grid0.addWidget(self.app_font_size_entry, 16, 1) + + # Apply UI parameters + self.apply_app_font_size_btn = FCButton(_("Apply and Restart"), bold=True) + self.apply_app_font_size_btn.setToolTip( + _("Setting the Font Size for the entire application.") + ) + grid0.addWidget(self.apply_app_font_size_btn, 18, 0, 1, 2) + # ############################################################################################################# # Grid1 Frame # ############################################################################################################# @@ -391,6 +410,24 @@ class GeneralGUIPrefGroupUI(OptionsGroupUI): self.layout_combo.activated.connect(self.app.on_layout) + self.apply_app_font_size_btn.clicked.connect( + lambda: self.handle_font_size(self.app, self.app_font_size_entry.get_value())) + + # Set UI + qsettings = QSettings("Open Source", "FlatCAM_EVO") + if qsettings.contains("font_size"): + font_size = int(qsettings.value("font_size", type=str)) # noqa + self.app_font_size_entry.set_value(font_size) + + @staticmethod + def handle_font_size(app, val): + settings = QSettings("Open Source", "FlatCAM_EVO") + settings.setValue('font_size', str(val)) + # This will write the setting to the platform specific storage. + del settings + + restart_program(app=app) + @staticmethod def handle_style(style): # set current style diff --git a/appTranslation.py b/appTranslation.py index f0805ecb..f8643d83 100644 --- a/appTranslation.py +++ b/appTranslation.py @@ -5,7 +5,8 @@ # MIT Licence # # ########################################################## -import os, ctypes +import os +import ctypes import sys import logging from pathlib import Path @@ -152,8 +153,7 @@ def apply_language(domain, lang=None): # This will write the setting to the platform specific storage. del settings else: - # TODO if lang is None we make a string from it? - name = str(lang) + name = str(lang) # we make it a string: "None" for lang_code, lang_usable in load_languages().items(): if lang_usable == name: @@ -239,10 +239,10 @@ def restart_program(app, ask=None): try: python = sys.executable os.execl(python, python, *sys.argv) - except Exception as err: + except Exception: # app_run_as_admin = isAdmin() msgbox = FCMessageBox(parent=app.ui) - title = _("The language will be applied at the next application start.") + title = _("The setting will be applied at the next application start.") txt = _("The user does not have admin rights or UAC issues.") msgbox.setWindowTitle('%s ...' % _("Quit")) # taskbar still shows it msgbox.setWindowIcon(QtGui.QIcon(resource_loc + '/app128.png')) @@ -256,7 +256,7 @@ def restart_program(app, ask=None): msgbox.exec() -# TODO Due of some circular imports issues which I currently can't fix I readd this class here +# TODO Due of some circular imports issues which I currently can't fix I re-add this class here # (mainly is located in appGUI.GUIElements) - required for a consistent look class FCMessageBox(QtWidgets.QMessageBox): """ diff --git a/flatcam.py b/flatcam.py index 037dda62..cc2a8fd2 100644 --- a/flatcam.py +++ b/flatcam.py @@ -167,6 +167,12 @@ if __name__ == '__main__': else: app.setStyle('windowsvista') + if settings.contains("font_size"): + font_size = int(settings.value("font_size", type=str)) # noqa + font = QtGui.QFont() + font.setPointSize(font_size) + app.setFont(font) + fc = App(qapp=app) # interrupt the Qt loop such that Python events have a chance to be responsive