| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355 |
- from PyQt5 import QtWidgets, QtCore
- from PyQt5.QtCore import QSettings, Qt
- from flatcamGUI.preferences.OptionsGroupUI import OptionsGroupUI2
- import gettext
- import FlatCAMTranslation as fcTranslate
- import builtins
- fcTranslate.apply_language('strings')
- if '_' not in builtins.__dict__:
- _ = gettext.gettext
- from flatcamGUI.preferences.OptionUI import OptionUI, CheckboxOptionUI, RadioSetOptionUI, \
- SeparatorOptionUI, HeadingOptionUI, ComboboxOptionUI, ColorOptionUI, FullWidthButtonOptionUI
- class GeneralGUIPrefGroupUI(OptionsGroupUI2):
- def __init__(self, decimals=4, **kwargs):
- super().__init__(**kwargs)
- self.decimals = decimals
- self.setTitle(str(_("GUI Preferences")))
- self.layout_field = self.option_dict()["layout"].get_field()
- self.layout_field.activated.connect(self.on_layout)
- self.theme_field = self.option_dict()["global_theme"].get_field()
- self.theme_apply_button = self.option_dict()["__button_apply_theme"].get_field()
- self.theme_apply_button.clicked.connect(self.on_theme_change)
- self.style_field = self.option_dict()["style"].get_field()
- current_style_index = self.style_field.findText(QtWidgets.qApp.style().objectName(), QtCore.Qt.MatchFixedString)
- self.style_field.setCurrentIndex(current_style_index)
- self.style_field.activated[str].connect(self.handle_style)
- self.hdpi_field = self.option_dict()["hdpi"].get_field()
- qsettings = QSettings("Open Source", "FlatCAM")
- if qsettings.contains("hdpi"):
- self.hdpi_field.set_value(qsettings.value('hdpi', type=int))
- else:
- self.hdpi_field.set_value(False)
- self.hdpi_field.stateChanged.connect(self.handle_hdpi)
- def build_options(self) -> [OptionUI]:
- return [
- RadioSetOptionUI(
- option="global_theme",
- label_text="Theme",
- label_tooltip="Select a theme for FlatCAM.\nIt will theme the plot area.",
- choices=[
- {"label": _("Light"), "value": "white"},
- {"label": _("Dark"), "value": "black"}
- ],
- orientation='vertical'
- ),
- CheckboxOptionUI(
- option="global_gray_icons",
- label_text="Use Gray Icons",
- label_tooltip="Check this box to use a set of icons with\na lighter (gray) color. To be used when a\nfull dark theme is applied."
- ),
- FullWidthButtonOptionUI(
- option="__button_apply_theme",
- label_text="Apply Theme",
- label_tooltip="Select a theme for FlatCAM.\n"
- "It will theme the plot area.\n"
- "The application will restart after change."
- ),
- SeparatorOptionUI(),
- ComboboxOptionUI(
- option="layout",
- label_text="Layout",
- label_tooltip="Select an layout for FlatCAM.\nIt is applied immediately.",
- choices=[
- "standard",
- "compact",
- "minimal"
- ]
- ),
- ComboboxOptionUI(
- option="style",
- label_text="Style",
- label_tooltip="Select an style for FlatCAM.\nIt will be applied at the next app start.",
- choices=QtWidgets.QStyleFactory.keys()
- ),
- CheckboxOptionUI(
- option="hdpi",
- label_text='Activate HDPI Support',
- label_tooltip="Enable High DPI support for FlatCAM.\nIt will be applied at the next app start.",
- ),
- CheckboxOptionUI(
- option="global_hover",
- label_text='Display Hover Shape',
- label_tooltip="Enable display of a hover shape for FlatCAM objects.\nIt is displayed whenever the mouse cursor is hovering\nover any kind of not-selected object.",
- ),
- CheckboxOptionUI(
- option="global_selection_shape",
- label_text='Display Selection Shape',
- label_tooltip="Enable the display of a selection shape for FlatCAM objects.\n"
- "It is displayed whenever the mouse selects an object\n"
- "either by clicking or dragging mouse from left to right or\n"
- "right to left."
- ),
- SeparatorOptionUI(),
- HeadingOptionUI(label_text="Left-Right Selection Color", label_tooltip=None),
- ColorOptionUI(
- option="global_sel_line",
- label_text="Outline",
- label_tooltip="Set the line color for the 'left to right' selection box."
- ),
- ColorOptionUI(
- option="global_sel_fill",
- label_text="Fill",
- label_tooltip="Set the fill color for the selection box\n"
- "in case that the selection is done from left to right.\n"
- "First 6 digits are the color and the last 2\n"
- "digits are for alpha (transparency) level."
- ),
- # FIXME: opacity slider?
- SeparatorOptionUI(),
- HeadingOptionUI(label_text="Right-Left Selection Color", label_tooltip=None),
- ColorOptionUI(
- option="global_alt_sel_line",
- label_text="Outline",
- label_tooltip="Set the line color for the 'right to left' selection box."
- ),
- ColorOptionUI(
- option="global_alt_sel_fill",
- label_text="Fill",
- label_tooltip="Set the fill color for the selection box\n"
- "in case that the selection is done from right to left.\n"
- "First 6 digits are the color and the last 2\n"
- "digits are for alpha (transparency) level."
- ),
- # FIXME: opacity slider?
- SeparatorOptionUI(),
- HeadingOptionUI(label_text='Editor Color', label_tooltip=None),
- ColorOptionUI(
- option="global_draw_color",
- label_text="Drawing",
- label_tooltip="Set the color for the shape."
- ),
- ColorOptionUI(
- option="global_sel_draw_color",
- label_text="Selection",
- label_tooltip="Set the color of the shape when selected."
- ),
- SeparatorOptionUI(),
- HeadingOptionUI(label_text='Project Items Color', label_tooltip=None),
- ColorOptionUI(
- option="global_proj_item_color",
- label_text="Enabled",
- label_tooltip="Set the color of the items in Project Tab Tree."
- ),
- ColorOptionUI(
- option="global_proj_item_dis_color",
- label_text="Disabled",
- label_tooltip="Set the color of the items in Project Tab Tree,\n"
- "for the case when the items are disabled."
- ),
- CheckboxOptionUI(
- option="global_project_autohide",
- label_text="Project AutoHide",
- label_tooltip="Check this box if you want the project/selected/tool tab area to\n"
- "hide automatically when there are no objects loaded and\n"
- "to show whenever a new object is created."
- ),
- ]
- def on_theme_change(self):
- # FIXME: this should be moved out to a view model
- val = self.theme_field.get_value()
- qsettings = QSettings("Open Source", "FlatCAM")
- qsettings.setValue("theme", val)
- # This will write the setting to the platform specific storage.
- del qsettings
- self.app.on_app_restart()
- def on_layout(self, index=None, lay=None):
- # FIXME: this should be moved out somewhere else
- """
- Set the toolbars layout (location)
- :param index:
- :param lay: Type of layout to be set on the toolbard
- :return: None
- """
- self.app.defaults.report_usage("on_layout()")
- if lay:
- current_layout = lay
- else:
- current_layout = self.layout_field.get_value()
- lay_settings = QSettings("Open Source", "FlatCAM")
- lay_settings.setValue('layout', current_layout)
- # This will write the setting to the platform specific storage.
- del lay_settings
- # first remove the toolbars:
- try:
- self.app.ui.removeToolBar(self.app.ui.toolbarfile)
- self.app.ui.removeToolBar(self.app.ui.toolbargeo)
- self.app.ui.removeToolBar(self.app.ui.toolbarview)
- self.app.ui.removeToolBar(self.app.ui.toolbarshell)
- self.app.ui.removeToolBar(self.app.ui.toolbartools)
- self.app.ui.removeToolBar(self.app.ui.exc_edit_toolbar)
- self.app.ui.removeToolBar(self.app.ui.geo_edit_toolbar)
- self.app.ui.removeToolBar(self.app.ui.grb_edit_toolbar)
- self.app.ui.removeToolBar(self.app.ui.snap_toolbar)
- self.app.ui.removeToolBar(self.app.ui.toolbarshell)
- except Exception:
- pass
- if current_layout == 'compact':
- # ## TOOLBAR INSTALLATION # ##
- self.app.ui.toolbarfile = QtWidgets.QToolBar('File Toolbar')
- self.app.ui.toolbarfile.setObjectName('File_TB')
- self.app.ui.addToolBar(Qt.LeftToolBarArea, self.app.ui.toolbarfile)
- self.app.ui.toolbargeo = QtWidgets.QToolBar('Edit Toolbar')
- self.app.ui.toolbargeo.setObjectName('Edit_TB')
- self.app.ui.addToolBar(Qt.LeftToolBarArea, self.app.ui.toolbargeo)
- self.app.ui.toolbarshell = QtWidgets.QToolBar('Shell Toolbar')
- self.app.ui.toolbarshell.setObjectName('Shell_TB')
- self.app.ui.addToolBar(Qt.LeftToolBarArea, self.app.ui.toolbarshell)
- self.app.ui.toolbartools = QtWidgets.QToolBar('Tools Toolbar')
- self.app.ui.toolbartools.setObjectName('Tools_TB')
- self.app.ui.addToolBar(Qt.LeftToolBarArea, self.app.ui.toolbartools)
- self.app.ui.geo_edit_toolbar = QtWidgets.QToolBar('Geometry Editor Toolbar')
- # self.app.ui.geo_edit_toolbar.setVisible(False)
- self.app.ui.geo_edit_toolbar.setObjectName('GeoEditor_TB')
- self.app.ui.addToolBar(Qt.RightToolBarArea, self.app.ui.geo_edit_toolbar)
- self.app.ui.toolbarview = QtWidgets.QToolBar('View Toolbar')
- self.app.ui.toolbarview.setObjectName('View_TB')
- self.app.ui.addToolBar(Qt.RightToolBarArea, self.app.ui.toolbarview)
- self.app.ui.addToolBarBreak(area=Qt.RightToolBarArea)
- self.app.ui.grb_edit_toolbar = QtWidgets.QToolBar('Gerber Editor Toolbar')
- # self.app.ui.grb_edit_toolbar.setVisible(False)
- self.app.ui.grb_edit_toolbar.setObjectName('GrbEditor_TB')
- self.app.ui.addToolBar(Qt.RightToolBarArea, self.app.ui.grb_edit_toolbar)
- self.app.ui.exc_edit_toolbar = QtWidgets.QToolBar('Excellon Editor Toolbar')
- self.app.ui.exc_edit_toolbar.setObjectName('ExcEditor_TB')
- self.app.ui.addToolBar(Qt.RightToolBarArea, self.app.ui.exc_edit_toolbar)
- self.app.ui.snap_toolbar = QtWidgets.QToolBar('Grid Toolbar')
- self.app.ui.snap_toolbar.setObjectName('Snap_TB')
- self.app.ui.snap_toolbar.setMaximumHeight(30)
- self.app.ui.splitter_left.addWidget(self.app.ui.snap_toolbar)
- self.app.ui.corner_snap_btn.setVisible(True)
- self.app.ui.snap_magnet.setVisible(True)
- else:
- # ## TOOLBAR INSTALLATION # ##
- self.app.ui.toolbarfile = QtWidgets.QToolBar('File Toolbar')
- self.app.ui.toolbarfile.setObjectName('File_TB')
- self.app.ui.addToolBar(self.app.ui.toolbarfile)
- self.app.ui.toolbargeo = QtWidgets.QToolBar('Edit Toolbar')
- self.app.ui.toolbargeo.setObjectName('Edit_TB')
- self.app.ui.addToolBar(self.app.ui.toolbargeo)
- self.app.ui.toolbarview = QtWidgets.QToolBar('View Toolbar')
- self.app.ui.toolbarview.setObjectName('View_TB')
- self.app.ui.addToolBar(self.app.ui.toolbarview)
- self.app.ui.toolbarshell = QtWidgets.QToolBar('Shell Toolbar')
- self.app.ui.toolbarshell.setObjectName('Shell_TB')
- self.app.ui.addToolBar(self.app.ui.toolbarshell)
- self.app.ui.toolbartools = QtWidgets.QToolBar('Tools Toolbar')
- self.app.ui.toolbartools.setObjectName('Tools_TB')
- self.app.ui.addToolBar(self.app.ui.toolbartools)
- self.app.ui.exc_edit_toolbar = QtWidgets.QToolBar('Excellon Editor Toolbar')
- # self.app.ui.exc_edit_toolbar.setVisible(False)
- self.app.ui.exc_edit_toolbar.setObjectName('ExcEditor_TB')
- self.app.ui.addToolBar(self.app.ui.exc_edit_toolbar)
- self.app.ui.addToolBarBreak()
- self.app.ui.geo_edit_toolbar = QtWidgets.QToolBar('Geometry Editor Toolbar')
- # self.app.ui.geo_edit_toolbar.setVisible(False)
- self.app.ui.geo_edit_toolbar.setObjectName('GeoEditor_TB')
- self.app.ui.addToolBar(self.app.ui.geo_edit_toolbar)
- self.app.ui.grb_edit_toolbar = QtWidgets.QToolBar('Gerber Editor Toolbar')
- # self.app.ui.grb_edit_toolbar.setVisible(False)
- self.app.ui.grb_edit_toolbar.setObjectName('GrbEditor_TB')
- self.app.ui.addToolBar(self.app.ui.grb_edit_toolbar)
- self.app.ui.snap_toolbar = QtWidgets.QToolBar('Grid Toolbar')
- self.app.ui.snap_toolbar.setObjectName('Snap_TB')
- # self.app.ui.snap_toolbar.setMaximumHeight(30)
- self.app.ui.addToolBar(self.app.ui.snap_toolbar)
- self.app.ui.corner_snap_btn.setVisible(False)
- self.app.ui.snap_magnet.setVisible(False)
- if current_layout == 'minimal':
- self.app.ui.toolbarview.setVisible(False)
- self.app.ui.toolbarshell.setVisible(False)
- self.app.ui.snap_toolbar.setVisible(False)
- self.app.ui.geo_edit_toolbar.setVisible(False)
- self.app.ui.grb_edit_toolbar.setVisible(False)
- self.app.ui.exc_edit_toolbar.setVisible(False)
- self.app.ui.lock_toolbar(lock=True)
- # add all the actions to the toolbars
- self.app.ui.populate_toolbars()
- # reconnect all the signals to the toolbar actions
- self.app.connect_toolbar_signals()
- self.app.ui.grid_snap_btn.setChecked(True)
- self.app.on_grid_snap_triggered(state=True)
- self.app.ui.grid_gap_x_entry.setText(str(self.app.defaults["global_gridx"]))
- self.app.ui.grid_gap_y_entry.setText(str(self.app.defaults["global_gridy"]))
- self.app.ui.snap_max_dist_entry.setText(str(self.app.defaults["global_snap_max"]))
- self.app.ui.grid_gap_link_cb.setChecked(True)
- @staticmethod
- def handle_style(style):
- # FIXME: this should be moved out to a view model
- # set current style
- qsettings = QSettings("Open Source", "FlatCAM")
- qsettings.setValue('style', style)
- # This will write the setting to the platform specific storage.
- del qsettings
- @staticmethod
- def handle_hdpi(state):
- # FIXME: this should be moved out to a view model
- # set current HDPI
- qsettings = QSettings("Open Source", "FlatCAM")
- qsettings.setValue('hdpi', state)
- # This will write the setting to the platform specific storage.
- del qsettings
|