diff --git a/flatcamGUI/GUIElements.py b/flatcamGUI/GUIElements.py
index 4771c5e6..360165b5 100644
--- a/flatcamGUI/GUIElements.py
+++ b/flatcamGUI/GUIElements.py
@@ -655,6 +655,61 @@ class EvalEntry2(QtWidgets.QLineEdit):
return QtCore.QSize(EDIT_SIZE_HINT, default_hint_size.height())
+class FCColorEntry(QtWidgets.QWidget):
+
+ def __init__(self, **kwargs):
+ super().__init__(**kwargs)
+
+ self.entry = FCEntry()
+
+ self.button = QtWidgets.QPushButton()
+ self.button.setFixedSize(15, 15)
+ self.button.setStyleSheet("border-color: dimgray;")
+
+ self.layout = QtWidgets.QHBoxLayout()
+ self.layout.setAlignment(QtCore.Qt.AlignLeft | QtCore.Qt.AlignVCenter)
+ self.layout.addWidget(self.entry)
+ self.layout.addWidget(self.button)
+ self.setLayout(self.layout)
+
+ self.entry.editingFinished.connect(self._sync_button_color)
+ self.button.clicked.connect(self._on_button_clicked)
+
+ def get_value(self) -> str:
+ return self.entry.get_value()
+
+ def set_value(self, value: str):
+ self.entry.set_value(value)
+ self._sync_button_color()
+
+ def _sync_button_color(self):
+ value = self.get_value()
+ self.button.setStyleSheet("background-color:%s;" % self._extract_color(value))
+
+ def _on_button_clicked(self):
+ value = self.entry.get_value()
+ current_color = QtGui.QColor(self._extract_color(value))
+
+ color_dialog = QtWidgets.QColorDialog()
+ selected_color = color_dialog.getColor(initial=current_color, options=QtWidgets.QColorDialog.ShowAlphaChannel)
+
+ if selected_color.isValid() is False:
+ return
+
+ new_value = str(selected_color.name()) + self._extract_alpha(value)
+ self.set_value(new_value)
+
+ def _extract_color(self, value: str) -> str:
+ return value[:7]
+
+ def _extract_alpha(self, value: str) -> str:
+ return value[7:9]
+
+
+
+
+
+
class FCSpinner(QtWidgets.QSpinBox):
returnPressed = QtCore.pyqtSignal()
diff --git a/flatcamGUI/preferences/OptionUI.py b/flatcamGUI/preferences/OptionUI.py
new file mode 100644
index 00000000..90a72358
--- /dev/null
+++ b/flatcamGUI/preferences/OptionUI.py
@@ -0,0 +1,161 @@
+from PyQt5 import QtWidgets
+from flatcamGUI.GUIElements import RadioSet, FCCheckBox, FCButton, FCComboBox, FCEntry, FCSpinner, FCColorEntry
+
+import gettext
+import FlatCAMTranslation as fcTranslate
+import builtins
+fcTranslate.apply_language('strings')
+if '_' not in builtins.__dict__:
+ _ = gettext.gettext
+
+
+class OptionUI:
+
+ def __init__(self, option: str):
+ self.option = option
+
+ def add_to_grid(self, grid: QtWidgets.QGridLayout, row: int) -> int:
+ """
+ Adds the necessary widget to the grid, starting at the supplied row.
+ Returns the number of rows used (normally 1)
+ """
+ raise NotImplementedError()
+
+ def get_field(self):
+ raise NotImplementedError()
+
+
+class BasicOptionUI(OptionUI):
+ """Abstract OptionUI that has a label on the left then some other widget on the right"""
+ def __init__(self, option: str, label_text: str, label_tooltip: str):
+ super().__init__(option=option)
+ self.label_text = label_text
+ self.label_tooltip = label_tooltip
+ self.label_widget = self.build_label_widget()
+ self.entry_widget = self.build_entry_widget()
+
+ def build_label_widget(self) -> QtWidgets.QLabel:
+ label_widget = QtWidgets.QLabel('%s:' % _(self.label_text))
+ if self.label_tooltip is not None:
+ label_widget.setToolTip(_(self.label_tooltip))
+ return label_widget
+
+ def build_entry_widget(self) -> QtWidgets.QWidget:
+ raise NotImplementedError()
+
+ def add_to_grid(self, grid: QtWidgets.QGridLayout, row: int) -> int:
+ grid.addWidget(self.label_widget, row, 0)
+ grid.addWidget(self.entry_widget, row, 1)
+ return 1
+
+ def get_field(self):
+ return self.entry_widget
+
+
+class RadioSetOptionUI(BasicOptionUI):
+
+ def __init__(self, option: str, label_text: str, label_tooltip: str, choices: list, orientation='horizontal'):
+ self.choices = choices
+ self.orientation = orientation
+ super().__init__(option=option, label_text=label_text, label_tooltip=label_tooltip)
+
+ def build_entry_widget(self) -> QtWidgets.QWidget:
+ return RadioSet(choices=self.choices, orientation=self.orientation)
+
+
+class CheckboxOptionUI(OptionUI):
+
+ def __init__(self, option: str, label_text: str, label_tooltip: str):
+ super().__init__(option=option)
+ self.label_text = label_text
+ self.label_tooltip = label_tooltip
+ self.checkbox_widget = self.build_checkbox_widget()
+
+ def build_checkbox_widget(self):
+ checkbox = FCCheckBox('%s' % _(self.label_text))
+ checkbox.setToolTip(_(self.label_tooltip))
+ return checkbox
+
+ def add_to_grid(self, grid: QtWidgets.QGridLayout, row: int) -> int:
+ grid.addWidget(self.checkbox_widget, row, 0, 1, 3)
+ return 1
+
+ def get_field(self):
+ return self.checkbox_widget
+
+
+class ComboboxOptionUI(BasicOptionUI):
+
+ def __init__(self, option: str, label_text: str, label_tooltip: str, choices: list):
+ self.choices = choices
+ super().__init__(option=option, label_text=label_text, label_tooltip=label_tooltip)
+
+ def build_entry_widget(self):
+ combo = FCComboBox()
+ for choice in self.choices:
+ # don't translate the QCombo items as they are used in QSettings and identified by name
+ combo.addItem(choice)
+ return combo
+
+
+class ColorOptionUI(BasicOptionUI):
+ def build_entry_widget(self) -> QtWidgets.QWidget:
+ return FCColorEntry()
+
+
+class HeadingOptionUI(OptionUI):
+ def __init__(self, label_text: str, label_tooltip: str):
+ super().__init__(option="__heading")
+ self.label_text = label_text
+ self.label_tooltip = label_tooltip
+
+ def build_heading_widget(self):
+ heading = QtWidgets.QLabel('%s' % _(self.label_text))
+ heading.setToolTip(_(self.label_tooltip))
+ return heading
+
+ def add_to_grid(self, grid: QtWidgets.QGridLayout, row: int) -> int:
+ grid.addWidget(self.build_heading_widget(), row, 0, 1, 2)
+ return 1
+
+ def get_field(self):
+ return None
+
+
+class SeparatorOptionUI(OptionUI):
+
+ def __init__(self):
+ super().__init__(option="__separator")
+
+ def build_separator_widget(self):
+ separator = QtWidgets.QFrame()
+ separator.setFrameShape(QtWidgets.QFrame.HLine)
+ separator.setFrameShadow(QtWidgets.QFrame.Sunken)
+ return separator
+
+ def add_to_grid(self, grid: QtWidgets.QGridLayout, row: int) -> int:
+ grid.addWidget(self.build_separator_widget(), row, 0, 1, 2)
+ return 1
+
+ def get_field(self):
+ return None
+
+
+class FullWidthButtonOptionUI(OptionUI):
+ def __init__(self, option: str, label_text: str, label_tooltip: str):
+ super().__init__(option=option)
+ self.label_text = label_text
+ self.label_tooltip = label_tooltip
+ self.button_widget = self.build_button_widget()
+
+ def build_button_widget(self):
+ button = FCButton(_(self.label_text))
+ button.setToolTip(_(self.label_tooltip))
+ return button
+
+ def add_to_grid(self, grid: QtWidgets.QGridLayout, row: int) -> int:
+ grid.addWidget(self.button_widget, row, 0, 1, 3)
+ return 1
+
+ def get_field(self):
+ return self.button_widget
\ No newline at end of file
diff --git a/flatcamGUI/preferences/OptionsGroupUI.py b/flatcamGUI/preferences/OptionsGroupUI.py
index 98780004..1167a8d4 100644
--- a/flatcamGUI/preferences/OptionsGroupUI.py
+++ b/flatcamGUI/preferences/OptionsGroupUI.py
@@ -1,12 +1,34 @@
+from typing import Dict
+
from PyQt5 import QtWidgets
+
+from PyQt5.QtCore import QSettings
+
+import gettext
+import FlatCAMTranslation as fcTranslate
+import builtins
+
+from flatcamGUI.preferences.OptionUI import OptionUI
+
+fcTranslate.apply_language('strings')
+if '_' not in builtins.__dict__:
+ _ = gettext.gettext
+
+settings = QSettings("Open Source", "FlatCAM")
+if settings.contains("machinist"):
+ machinist_setting = settings.value('machinist', type=int)
+else:
+ machinist_setting = 0
+
+
class OptionsGroupUI(QtWidgets.QGroupBox):
app = None
- def __init__(self, title, parent=None):
- # QtGui.QGroupBox.__init__(self, title, parent=parent)
- super(OptionsGroupUI, self).__init__()
+ def __init__(self, fixme_get_rid_of_this=None, **kwargs):
+ super().__init__(**kwargs)
+
self.setStyleSheet("""
QGroupBox
{
@@ -16,4 +38,38 @@ class OptionsGroupUI(QtWidgets.QGroupBox):
""")
self.layout = QtWidgets.QVBoxLayout()
- self.setLayout(self.layout)
\ No newline at end of file
+ self.setLayout(self.layout)
+
+ def option_dict(self) -> Dict[str, OptionUI]:
+ # FIXME!
+ return {}
+
+
+class OptionsGroupUI2(OptionsGroupUI):
+
+ def __init__(self, **kwargs):
+ super().__init__(**kwargs)
+
+ self.grid = QtWidgets.QGridLayout()
+ self.layout.addLayout(self.grid)
+ self.grid.setColumnStretch(0, 0)
+ self.grid.setColumnStretch(1, 1)
+
+ self.options = self.build_options()
+
+ row = 0
+ for option in self.options:
+ row += option.add_to_grid(grid=self.grid, row=row)
+
+ self.layout.addStretch()
+
+ def build_options(self) -> [OptionUI]:
+ return []
+
+ def option_dict(self) -> Dict[str, OptionUI]:
+ result = {}
+ for optionui in self.options:
+ result[optionui.option] = optionui
+ return result
+
+
diff --git a/flatcamGUI/preferences/PreferencesSectionUI.py b/flatcamGUI/preferences/PreferencesSectionUI.py
index ad70a9ff..858bf3d8 100644
--- a/flatcamGUI/preferences/PreferencesSectionUI.py
+++ b/flatcamGUI/preferences/PreferencesSectionUI.py
@@ -1,5 +1,8 @@
+from typing import Dict
+
from PyQt5 import QtWidgets
+from flatcamGUI.preferences.OptionUI import OptionUI
from flatcamGUI.preferences.OptionsGroupUI import OptionsGroupUI
@@ -20,3 +23,10 @@ class PreferencesSectionUI(QtWidgets.QWidget):
def build_groups(self) -> [OptionsGroupUI]:
return []
+
+ def option_dict(self) -> Dict[str, OptionUI]:
+ result = {}
+ for group in self.groups:
+ groupoptions = group.option_dict()
+ result.update(groupoptions)
+ return result
\ No newline at end of file
diff --git a/flatcamGUI/preferences/PreferencesUIManager.py b/flatcamGUI/preferences/PreferencesUIManager.py
index 35733b99..f7022613 100644
--- a/flatcamGUI/preferences/PreferencesUIManager.py
+++ b/flatcamGUI/preferences/PreferencesUIManager.py
@@ -10,6 +10,8 @@ import gettext
import FlatCAMTranslation as fcTranslate
import builtins
+from flatcamGUI.preferences.OptionUI import OptionUI
+
fcTranslate.apply_language('strings')
if '_' not in builtins.__dict__:
_ = gettext.gettext
@@ -74,24 +76,6 @@ class PreferencesUIManager:
"global_tpdf_lmargin": self.ui.general_defaults_form.general_app_group.lmargin_entry,
"global_tpdf_rmargin": self.ui.general_defaults_form.general_app_group.rmargin_entry,
- # General GUI Preferences
- "global_theme": self.ui.general_defaults_form.general_gui_group.theme_radio,
- "global_gray_icons": self.ui.general_defaults_form.general_gui_group.gray_icons_cb,
- "global_layout": self.ui.general_defaults_form.general_gui_group.layout_combo,
- "global_hover": self.ui.general_defaults_form.general_gui_group.hover_cb,
- "global_selection_shape": self.ui.general_defaults_form.general_gui_group.selection_cb,
-
- "global_sel_fill": self.ui.general_defaults_form.general_gui_group.sf_color_entry,
- "global_sel_line": self.ui.general_defaults_form.general_gui_group.sl_color_entry,
- "global_alt_sel_fill": self.ui.general_defaults_form.general_gui_group.alt_sf_color_entry,
- "global_alt_sel_line": self.ui.general_defaults_form.general_gui_group.alt_sl_color_entry,
- "global_draw_color": self.ui.general_defaults_form.general_gui_group.draw_color_entry,
- "global_sel_draw_color": self.ui.general_defaults_form.general_gui_group.sel_draw_color_entry,
-
- "global_proj_item_color": self.ui.general_defaults_form.general_gui_group.proj_color_entry,
- "global_proj_item_dis_color": self.ui.general_defaults_form.general_gui_group.proj_color_dis_entry,
- "global_project_autohide": self.ui.general_defaults_form.general_gui_group.project_autohide_cb,
-
# General GUI Settings
"global_gridx": self.ui.general_defaults_form.general_app_set_group.gridx_entry,
"global_gridy": self.ui.general_defaults_form.general_app_set_group.gridy_entry,
@@ -605,13 +589,30 @@ class PreferencesUIManager:
"util": ui.fa_scroll_area
}
+ self.sections = [
+ # FIXME!
+ ui.general_defaults_form
+ ]
+
def get_form_fields(self) -> Dict[str, Any]:
- return self.defaults_form_fields
+ result = {}
+ result.update(self.defaults_form_fields)
+ result.update(self._option_field_dict())
+ return result
def get_form_field(self, option: str) -> Any:
return self.get_form_fields()[option]
+ def option_dict(self) -> Dict[str, OptionUI]:
+ result = {}
+ for section in self.sections:
+ sectionoptions = section.option_dict()
+ result.update(sectionoptions)
+ return result
+ def _option_field_dict(self):
+ result = {k: v.get_field() for k, v in self.option_dict().items()}
+ return result
def defaults_read_form(self):
"""
@@ -772,65 +773,6 @@ class PreferencesUIManager:
"background-color:%s;"
"border-color: dimgray" % str(self.defaults['cncjob_plot_line'])[:7])
- # Init Left-Right Selection colors
- self.ui.general_defaults_form.general_gui_group.sf_color_entry.set_value(self.defaults['global_sel_fill'])
- self.ui.general_defaults_form.general_gui_group.sf_color_button.setStyleSheet(
- "background-color:%s;"
- "border-color: dimgray" % str(self.defaults['global_sel_fill'])[:7])
- self.ui.general_defaults_form.general_gui_group.sf_color_alpha_spinner.set_value(
- int(self.defaults['global_sel_fill'][7:9], 16))
- self.ui.general_defaults_form.general_gui_group.sf_color_alpha_slider.setValue(
- int(self.defaults['global_sel_fill'][7:9], 16))
-
- self.ui.general_defaults_form.general_gui_group.sl_color_entry.set_value(self.defaults['global_sel_line'])
- self.ui.general_defaults_form.general_gui_group.sl_color_button.setStyleSheet(
- "background-color:%s;"
- "border-color: dimgray" % str(self.defaults['global_sel_line'])[:7])
-
- # Init Right-Left Selection colors
- self.ui.general_defaults_form.general_gui_group.alt_sf_color_entry.set_value(
- self.defaults['global_alt_sel_fill'])
- self.ui.general_defaults_form.general_gui_group.alt_sf_color_button.setStyleSheet(
- "background-color:%s;"
- "border-color: dimgray" % str(self.defaults['global_alt_sel_fill'])[:7])
- self.ui.general_defaults_form.general_gui_group.alt_sf_color_alpha_spinner.set_value(
- int(self.defaults['global_sel_fill'][7:9], 16))
- self.ui.general_defaults_form.general_gui_group.alt_sf_color_alpha_slider.setValue(
- int(self.defaults['global_sel_fill'][7:9], 16))
-
- self.ui.general_defaults_form.general_gui_group.alt_sl_color_entry.set_value(
- self.defaults['global_alt_sel_line'])
- self.ui.general_defaults_form.general_gui_group.alt_sl_color_button.setStyleSheet(
- "background-color:%s;"
- "border-color: dimgray" % str(self.defaults['global_alt_sel_line'])[:7])
-
- # Init Draw color and Selection Draw Color
- self.ui.general_defaults_form.general_gui_group.draw_color_entry.set_value(
- self.defaults['global_draw_color'])
- self.ui.general_defaults_form.general_gui_group.draw_color_button.setStyleSheet(
- "background-color:%s;"
- "border-color: dimgray" % str(self.defaults['global_draw_color'])[:7])
-
- self.ui.general_defaults_form.general_gui_group.sel_draw_color_entry.set_value(
- self.defaults['global_sel_draw_color'])
- self.ui.general_defaults_form.general_gui_group.sel_draw_color_button.setStyleSheet(
- "background-color:%s;"
- "border-color: dimgray" % str(self.defaults['global_sel_draw_color'])[:7])
-
- # Init Project Items color
- self.ui.general_defaults_form.general_gui_group.proj_color_entry.set_value(
- self.defaults['global_proj_item_color'])
- self.ui.general_defaults_form.general_gui_group.proj_color_button.setStyleSheet(
- "background-color:%s;"
- "border-color: dimgray" % str(self.defaults['global_proj_item_color'])[:7])
-
- # Init Project Disabled Items color
- self.ui.general_defaults_form.general_gui_group.proj_color_dis_entry.set_value(
- self.defaults['global_proj_item_dis_color'])
- self.ui.general_defaults_form.general_gui_group.proj_color_dis_button.setStyleSheet(
- "background-color:%s;"
- "border-color: dimgray" % str(self.defaults['global_proj_item_dis_color'])[:7])
-
# Init Project Disabled Items color
self.ui.general_defaults_form.general_app_set_group.mouse_cursor_entry.set_value(
self.defaults['global_cursor_color'])
diff --git a/flatcamGUI/preferences/general/GeneralAPPSetGroupUI.py b/flatcamGUI/preferences/general/GeneralAPPSetGroupUI.py
index 3daff809..11c7a784 100644
--- a/flatcamGUI/preferences/general/GeneralAPPSetGroupUI.py
+++ b/flatcamGUI/preferences/general/GeneralAPPSetGroupUI.py
@@ -22,8 +22,8 @@ else:
class GeneralAPPSetGroupUI(OptionsGroupUI):
- def __init__(self, decimals=4, parent=None):
- super(GeneralAPPSetGroupUI, self).__init__(self, parent=parent)
+ def __init__(self, decimals=4, **kwargs):
+ super().__init__(**kwargs)
self.setTitle(str(_("App Settings")))
self.decimals = decimals
diff --git a/flatcamGUI/preferences/general/GeneralAppPrefGroupUI.py b/flatcamGUI/preferences/general/GeneralAppPrefGroupUI.py
index ab563f67..15d96474 100644
--- a/flatcamGUI/preferences/general/GeneralAppPrefGroupUI.py
+++ b/flatcamGUI/preferences/general/GeneralAppPrefGroupUI.py
@@ -23,8 +23,8 @@ else:
class GeneralAppPrefGroupUI(OptionsGroupUI):
- def __init__(self, decimals=4, parent=None):
- super(GeneralAppPrefGroupUI, self).__init__(self, parent=parent)
+ def __init__(self, decimals=4, **kwargs):
+ super().__init__(**kwargs)
self.setTitle(_("App Preferences"))
self.decimals = decimals
diff --git a/flatcamGUI/preferences/general/GeneralGUIPrefGroupUI.py b/flatcamGUI/preferences/general/GeneralGUIPrefGroupUI.py
index a074c75b..4b115a2f 100644
--- a/flatcamGUI/preferences/general/GeneralGUIPrefGroupUI.py
+++ b/flatcamGUI/preferences/general/GeneralGUIPrefGroupUI.py
@@ -2,12 +2,15 @@ from PyQt5 import QtWidgets, QtCore, QtGui
from PyQt5.QtCore import QSettings, Qt
from flatcamGUI.GUIElements import RadioSet, FCCheckBox, FCButton, FCComboBox, FCEntry, FCSpinner
-from flatcamGUI.preferences.OptionsGroupUI import OptionsGroupUI
+from flatcamGUI.preferences.OptionsGroupUI import OptionsGroupUI, OptionsGroupUI2
import gettext
import FlatCAMTranslation as fcTranslate
import builtins
+from flatcamGUI.preferences.OptionUI import OptionUI, BasicOptionUI, CheckboxOptionUI, RadioSetOptionUI, \
+ SeparatorOptionUI, HeadingOptionUI, ComboboxOptionUI, ColorOptionUI, FullWidthButtonOptionUI
+
fcTranslate.apply_language('strings')
if '_' not in builtins.__dict__:
_ = gettext.gettext
@@ -19,9 +22,150 @@ else:
machinist_setting = 0
+class GeneralGUIPrefGroupUI2(OptionsGroupUI2):
+
+ def __init__(self, decimals=4, **kwargs):
+ super().__init__(**kwargs)
+ self.decimals = decimals
+ self.setTitle(str(_("GUI Preferences 2")))
+
+ 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(
+ # FIXME!
+ option="layout",
+ label_text="Layout",
+ label_tooltip="Select an layout for FlatCAM.\nIt is applied immediately.",
+ choices=[
+ "standard",
+ "compact",
+ "minimal"
+ ]
+ ),
+ ComboboxOptionUI(
+ #FIXME!
+ 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(
+ # FIXME
+ 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."
+ ),
+
+ 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."
+ ),
+ ]
+
+
class GeneralGUIPrefGroupUI(OptionsGroupUI):
- def __init__(self, decimals=4, parent=None):
- super(GeneralGUIPrefGroupUI, self).__init__(self, parent=parent)
+ def __init__(self, decimals=4, **kwargs):
+ # region Description
+ super().__init__(**kwargs)
self.setTitle(str(_("GUI Preferences")))
self.decimals = decimals
@@ -151,10 +295,12 @@ class GeneralGUIPrefGroupUI(OptionsGroupUI):
self.sel_lr_label = QtWidgets.QLabel('%s' % _('Left-Right Selection Color'))
grid0.addWidget(self.sel_lr_label, 15, 0, 1, 2)
+
self.sl_color_label = QtWidgets.QLabel('%s:' % _('Outline'))
self.sl_color_label.setToolTip(
_("Set the line color for the 'left to right' selection box.")
)
+
self.sl_color_entry = FCEntry()
self.sl_color_button = QtWidgets.QPushButton()
self.sl_color_button.setFixedSize(15, 15)
@@ -212,6 +358,7 @@ class GeneralGUIPrefGroupUI(OptionsGroupUI):
separator_line.setFrameShadow(QtWidgets.QFrame.Sunken)
grid0.addWidget(separator_line, 19, 0, 1, 2)
+
# Plot Selection (left - right) Color
self.sel_rl_label = QtWidgets.QLabel('%s' % _('Right-Left Selection Color'))
grid0.addWidget(self.sel_rl_label, 20, 0, 1, 2)
@@ -279,6 +426,7 @@ class GeneralGUIPrefGroupUI(OptionsGroupUI):
separator_line.setFrameShadow(QtWidgets.QFrame.Sunken)
grid0.addWidget(separator_line, 24, 0, 1, 2)
+
# ------------------------------------------------------------------
# ----------------------- Editor Color -----------------------------
# ------------------------------------------------------------------
@@ -324,7 +472,7 @@ class GeneralGUIPrefGroupUI(OptionsGroupUI):
separator_line.setFrameShape(QtWidgets.QFrame.HLine)
separator_line.setFrameShadow(QtWidgets.QFrame.Sunken)
grid0.addWidget(separator_line, 28, 0, 1, 2)
-
+ # endregion
# ------------------------------------------------------------------
# ----------------------- Project Settings -----------------------------
# ------------------------------------------------------------------
diff --git a/flatcamGUI/preferences/general/GeneralPreferencesUI.py b/flatcamGUI/preferences/general/GeneralPreferencesUI.py
index 59e99174..259eb1fc 100644
--- a/flatcamGUI/preferences/general/GeneralPreferencesUI.py
+++ b/flatcamGUI/preferences/general/GeneralPreferencesUI.py
@@ -26,7 +26,7 @@ class GeneralPreferencesUI(PreferencesSectionUI):
def __init__(self, decimals, **kwargs):
self.decimals = decimals
self.general_gui_group = GeneralGUIPrefGroupUI(decimals=self.decimals)
- #self.general_gui_group2 = GeneralGUIPrefGroupUI2(decimals=self.decimals)
+ self.general_gui_group2 = GeneralGUIPrefGroupUI2(decimals=self.decimals)
self.general_app_group = GeneralAppPrefGroupUI(decimals=self.decimals)
self.general_app_set_group = GeneralAPPSetGroupUI(decimals=self.decimals)
super().__init__(**kwargs)
diff --git a/flatcamGUI/preferences/geometry/GeometryAdvOptPrefGroupUI.py b/flatcamGUI/preferences/geometry/GeometryAdvOptPrefGroupUI.py
index 53c344d3..66354015 100644
--- a/flatcamGUI/preferences/geometry/GeometryAdvOptPrefGroupUI.py
+++ b/flatcamGUI/preferences/geometry/GeometryAdvOptPrefGroupUI.py
@@ -21,7 +21,6 @@ else:
class GeometryAdvOptPrefGroupUI(OptionsGroupUI):
def __init__(self, decimals=4, parent=None):
- # OptionsGroupUI.__init__(self, "Geometry Advanced Options Preferences", parent=parent)
super(GeometryAdvOptPrefGroupUI, self).__init__(self, parent=parent)
self.setTitle(str(_("Geometry Adv. Options")))