diff --git a/FlatCAMApp.py b/FlatCAMApp.py
index a04d4d37..bda38ebd 100644
--- a/FlatCAMApp.py
+++ b/FlatCAMApp.py
@@ -424,6 +424,17 @@ class App(QtCore.QObject):
self.ui = FlatCAMGUI(self.version, self.beta, self)
+ settings = QtCore.QSettings("Open Source", "FlatCAM")
+ if settings.contains("theme"):
+ theme = settings.value('theme', type=str)
+ else:
+ theme = 'white'
+
+ if theme == 'white':
+ self.cursor_color_3D = 'black'
+ else:
+ self.cursor_color_3D = 'gray'
+
self.ui.geom_update[int, int, int, int, int].connect(self.save_geometry)
self.ui.final_save.connect(self.final_save)
@@ -484,6 +495,7 @@ class App(QtCore.QObject):
"global_activity_icon": self.ui.general_defaults_form.general_gui_group.activity_combo,
# General GUI Settings
+ "global_theme": self.ui.general_defaults_form.general_gui_set_group.theme_radio,
"global_layout": self.ui.general_defaults_form.general_gui_set_group.layout_combo,
"global_hover": self.ui.general_defaults_form.general_gui_set_group.hover_cb,
"global_selection_shape": self.ui.general_defaults_form.general_gui_set_group.selection_cb,
@@ -918,6 +930,7 @@ class App(QtCore.QObject):
"global_zdownrate": None,
# General GUI Settings
+ "global_theme": 'white',
"global_hover": False,
"global_selection_shape": True,
"global_layout": "compact",
@@ -1996,6 +2009,7 @@ class App(QtCore.QObject):
# ############ GUI SETTINGS SIGNALS ###############
# #################################################
+ self.ui.general_defaults_form.general_gui_set_group.theme_radio.activated_custom.connect(self.on_theme_change)
self.ui.general_defaults_form.general_gui_set_group.cursor_radio.activated_custom.connect(self.on_cursor_type)
# ########## CNC Job related signals #############
@@ -2824,6 +2838,15 @@ class App(QtCore.QObject):
name)
)
+ def on_theme_change(self, val):
+ settings = QSettings("Open Source", "FlatCAM")
+ settings.setValue('theme', val)
+
+ # This will write the setting to the platform specific storage.
+ del settings
+
+ self.on_app_restart()
+
def on_app_restart(self):
# make sure that the Sys Tray icon is hidden before restart otherwise it will
@@ -2831,7 +2854,7 @@ class App(QtCore.QObject):
try:
self.trayIcon.hide()
except Exception as e:
- log.debug("App.on_app_restart() --> %s" % str(e))
+ pass
fcTranslate.restart_program(app=self)
@@ -6958,7 +6981,8 @@ class App(QtCore.QObject):
if self.grid_status() == True:
# Update cursor
self.app_cursor.set_data(np.asarray([(location[0], location[1])]),
- symbol='++', edge_color='black', size=self.defaults["global_cursor_size"])
+ symbol='++', edge_color=self.cursor_color_3D,
+ size=self.defaults["global_cursor_size"])
# Set the position label
self.ui.position_label.setText(" X: %.4f "
@@ -7936,7 +7960,8 @@ class App(QtCore.QObject):
# Update cursor
self.app_cursor.set_data(np.asarray([(pos[0], pos[1])]),
- symbol='++', edge_color='black', size=self.defaults["global_cursor_size"])
+ symbol='++', edge_color=self.cursor_color_3D,
+ size=self.defaults["global_cursor_size"])
else:
pos = (pos_canvas[0], pos_canvas[1])
diff --git a/README.md b/README.md
index 236fb36a..01d16328 100644
--- a/README.md
+++ b/README.md
@@ -13,6 +13,7 @@ CAD program, and create G-Code for Isolation routing.
- fixed an conflict in a signal usage that was triggered by Tool SolderPaste when a new project was created
- updated Optimal Tool to display both points coordinates that made a distance (and the minimum) not only the middle point (which is still the place where the jump happen)
+- added a dark theme to FlatCAM (only for canvas). The selection is done in Edit -> Preferences -> General -> GUI Settings
6.10.2019
diff --git a/flatcamEditors/FlatCAMExcEditor.py b/flatcamEditors/FlatCAMExcEditor.py
index 5131d626..4cc0ee86 100644
--- a/flatcamEditors/FlatCAMExcEditor.py
+++ b/flatcamEditors/FlatCAMExcEditor.py
@@ -3657,7 +3657,7 @@ class FlatCAMExcEditor(QtCore.QObject):
x, y = self.app.geo_editor.snap(x, y)
# Update cursor
- self.app.app_cursor.set_data(np.asarray([(x, y)]), symbol='++', edge_color='black',
+ self.app.app_cursor.set_data(np.asarray([(x, y)]), symbol='++', edge_color=self.app.cursor_color_3D,
size=self.app.defaults["global_cursor_size"])
self.snap_x = x
@@ -3706,7 +3706,7 @@ class FlatCAMExcEditor(QtCore.QObject):
self.app.selection_type = None
# Update cursor
- self.app.app_cursor.set_data(np.asarray([(x, y)]), symbol='++', edge_color='black',
+ self.app.app_cursor.set_data(np.asarray([(x, y)]), symbol='++', edge_color=self.app.cursor_color_3D,
size=self.app.defaults["global_cursor_size"])
def on_canvas_key_release(self, event):
diff --git a/flatcamEditors/FlatCAMGeoEditor.py b/flatcamEditors/FlatCAMGeoEditor.py
index 9e68b684..1d841e16 100644
--- a/flatcamEditors/FlatCAMGeoEditor.py
+++ b/flatcamEditors/FlatCAMGeoEditor.py
@@ -3823,7 +3823,7 @@ class FlatCAMGeoEditor(QtCore.QObject):
x, y = self.snap(x, y)
# Update cursor
- self.app.app_cursor.set_data(np.asarray([(x, y)]), symbol='++', edge_color='black',
+ self.app.app_cursor.set_data(np.asarray([(x, y)]), symbol='++', edge_color=self.app.cursor_color_3D,
size=self.app.defaults["global_cursor_size"])
self.snap_x = x
diff --git a/flatcamEditors/FlatCAMGrbEditor.py b/flatcamEditors/FlatCAMGrbEditor.py
index b6732454..9df6d696 100644
--- a/flatcamEditors/FlatCAMGrbEditor.py
+++ b/flatcamEditors/FlatCAMGrbEditor.py
@@ -4446,7 +4446,7 @@ class FlatCAMGrbEditor(QtCore.QObject):
x, y = self.app.geo_editor.snap(x, y)
# Update cursor
- self.app.app_cursor.set_data(np.asarray([(x, y)]), symbol='++', edge_color='black',
+ self.app.app_cursor.set_data(np.asarray([(x, y)]), symbol='++', edge_color=self.app.cursor_color_3D,
size=self.app.defaults["global_cursor_size"])
self.snap_x = x
diff --git a/flatcamGUI/PlotCanvas.py b/flatcamGUI/PlotCanvas.py
index fbbedb9e..3355b5b2 100644
--- a/flatcamGUI/PlotCanvas.py
+++ b/flatcamGUI/PlotCanvas.py
@@ -9,7 +9,7 @@
from PyQt5 import QtCore
import logging
-from flatcamGUI.VisPyCanvas import VisPyCanvas, time
+from flatcamGUI.VisPyCanvas import VisPyCanvas, time, Color
from flatcamGUI.VisPyVisuals import ShapeGroup, ShapeCollection, TextCollection, TextGroup, Cursor
from vispy.scene.visuals import InfiniteLine, Line
import numpy as np
@@ -44,6 +44,17 @@ class PlotCanvas(QtCore.QObject, VisPyCanvas):
# Parent container
self.container = container
+ settings = QtCore.QSettings("Open Source", "FlatCAM")
+ if settings.contains("theme"):
+ theme = settings.value('theme', type=str)
+ else:
+ theme = 'white'
+
+ if theme == 'white':
+ self.line_color = (0.3, 0.0, 0.0, 1.0)
+ else:
+ self.line_color = (0.4, 0.4, 0.4, 1.0)
+
# workspace lines; I didn't use the rectangle because I didn't want to add another VisPy Node,
# which might decrease performance
self.b_line, self.r_line, self.t_line, self.l_line = None, None, None, None
@@ -68,7 +79,6 @@ class PlotCanvas(QtCore.QObject, VisPyCanvas):
self.draw_workspace()
self.line_parent = None
- self.line_color = (0.3, 0.0, 0.0, 1.0)
self.cursor_v_line = InfiniteLine(pos=None, color=self.line_color, vertical=True,
parent=self.line_parent)
@@ -328,7 +338,10 @@ class CursorBig(QtCore.QObject):
if 'edge_color' in kwargs:
color = kwargs['edge_color']
else:
- color = (0.0, 0.0, 0.0, 1.0)
+ if self.app.defaults['global_theme'] == 'white':
+ color = '#000000FF'
+ else:
+ color = '#FFFFFFFF'
position = [pos[0][0], pos[0][1]]
self.mouse_position_updated.emit(position)
diff --git a/flatcamGUI/PlotCanvasLegacy.py b/flatcamGUI/PlotCanvasLegacy.py
index cc6abf3a..27fd05eb 100644
--- a/flatcamGUI/PlotCanvasLegacy.py
+++ b/flatcamGUI/PlotCanvasLegacy.py
@@ -77,6 +77,11 @@ class CanvasCache(QtCore.QObject):
self.axes.set_xticks([])
self.axes.set_yticks([])
+ if self.app.defaults['global_theme'] == 'white':
+ self.axes.set_facecolor('#FFFFFF')
+ else:
+ self.axes.set_facecolor('#000000')
+
self.canvas = FigureCanvas(self.figure)
self.cache = None
@@ -140,6 +145,13 @@ class PlotCanvasLegacy(QtCore.QObject):
self.app = app
+ if self.app.defaults['global_theme'] == 'white':
+ theme_color = '#FFFFFF'
+ tick_color = '#000000'
+ else:
+ theme_color = '#000000'
+ tick_color = '#FFFFFF'
+
# Options
self.x_margin = 15 # pixels
self.y_margin = 25 # Pixels
@@ -149,16 +161,26 @@ class PlotCanvasLegacy(QtCore.QObject):
# Plots go onto a single matplotlib.figure
self.figure = Figure(dpi=50) # TODO: dpi needed?
- self.figure.patch.set_visible(False)
+ self.figure.patch.set_visible(True)
+ self.figure.set_facecolor(theme_color)
# These axes show the ticks and grid. No plotting done here.
# New axes must have a label, otherwise mpl returns an existing one.
self.axes = self.figure.add_axes([0.05, 0.05, 0.9, 0.9], label="base", alpha=0.0)
self.axes.set_aspect(1)
- self.axes.grid(True)
+ self.axes.grid(True, color='gray')
self.axes.axhline(color=(0.70, 0.3, 0.3), linewidth=2)
self.axes.axvline(color=(0.70, 0.3, 0.3), linewidth=2)
+ self.axes.tick_params(axis='x', color=tick_color, labelcolor=tick_color)
+ self.axes.tick_params(axis='y', color=tick_color, labelcolor=tick_color)
+ self.axes.spines['bottom'].set_color(tick_color)
+ self.axes.spines['top'].set_color(tick_color)
+ self.axes.spines['right'].set_color(tick_color)
+ self.axes.spines['left'].set_color(tick_color)
+
+ self.axes.set_facecolor(theme_color)
+
self.ch_line = None
self.cv_line = None
@@ -264,10 +286,15 @@ class PlotCanvasLegacy(QtCore.QObject):
# else:
# c = MplCursor(axes=axes, color='black', linewidth=1)
- if big is True:
+ if self.app.defaults['global_theme'] == 'white':
+ color = '#000000'
+ else:
+ color = '#FFFFFF'
+
+ if big is True:
self.big_cursor = True
- self.ch_line = self.axes.axhline(color=(0.0, 0.0, 0.0), linewidth=1)
- self.cv_line = self.axes.axvline(color=(0.0, 0.0, 0.0), linewidth=1)
+ self.ch_line = self.axes.axhline(color=color, linewidth=1)
+ self.cv_line = self.axes.axvline(color=color, linewidth=1)
else:
self.big_cursor = False
@@ -286,6 +313,11 @@ class PlotCanvasLegacy(QtCore.QObject):
"""
# there is no point in drawing mouse cursor when panning as it jumps in a confusing way
if self.app.app_cursor.enabled is True and self.panning is False:
+ if self.app.defaults['global_theme'] == 'white':
+ color = '#000000'
+ else:
+ color = '#FFFFFF'
+
if self.big_cursor is False:
try:
x, y = self.app.geo_editor.snap(x_pos, y_pos)
@@ -294,13 +326,13 @@ class PlotCanvasLegacy(QtCore.QObject):
# The size of the cursor is multiplied by 1.65 because that value made the cursor similar with the
# one in the OpenGL(3D) graphic engine
pointer_size = int(float(self.app.defaults["global_cursor_size"] ) * 1.65)
- elements = self.axes.plot(x, y, 'k+', ms=pointer_size, mew=1, animated=True)
+ elements = self.axes.plot(x, y, '+', color=color, ms=pointer_size, mew=1, animated=True)
for el in elements:
self.axes.draw_artist(el)
except Exception as e:
# this happen at app initialization since self.app.geo_editor does not exist yet
- # I could reshuffle the object instantiating order but what's the point? I could crash something else
- # and that's pythonic, too
+ # I could reshuffle the object instantiating order but what's the point?
+ # I could crash something else and that's pythonic, too
pass
else:
self.ch_line.set_ydata(y_pos)
@@ -476,7 +508,7 @@ class PlotCanvasLegacy(QtCore.QObject):
# Adjust axes
for ax in self.figure.get_axes():
- ax.set_xlim((x - half_width , x + half_width))
+ ax.set_xlim((x - half_width, x + half_width))
ax.set_ylim((y - half_height, y + half_height))
# Re-draw
diff --git a/flatcamGUI/PreferencesUI.py b/flatcamGUI/PreferencesUI.py
index 2c0f7f1f..d0d67acb 100644
--- a/flatcamGUI/PreferencesUI.py
+++ b/flatcamGUI/PreferencesUI.py
@@ -557,6 +557,27 @@ class GeneralGUISetGroupUI(OptionsGroupUI):
# Create a form layout for the Application general settings
self.form_box = QtWidgets.QFormLayout()
+ grid0 = QtWidgets.QGridLayout()
+ self.layout.addLayout(grid0)
+ grid0.setColumnStretch(0, 0)
+ grid0.setColumnStretch(1, 1)
+
+ grid0.addWidget(QtWidgets.QLabel(''), 0, 0)
+
+ # Theme selection
+ self.theme_label = QtWidgets.QLabel('%s:' % _('Theme'))
+ self.theme_label.setToolTip(
+ _("Select a theme for FlatCAM.\n"
+ "The application will restart after change.")
+ )
+ self.theme_radio = RadioSet([
+ {"label": _("White"), "value": "white"},
+ {"label": _("Dark"), "value": "black"}
+ ], orientation='horizontal', stretch=False)
+
+ grid0.addWidget(self.theme_label, 1, 0)
+ grid0.addWidget(self.theme_radio, 1, 1)
+
# Layout selection
self.layout_label = QtWidgets.QLabel('%s:' % _('Layout'))
self.layout_label.setToolTip(
@@ -568,6 +589,9 @@ class GeneralGUISetGroupUI(OptionsGroupUI):
self.layout_combo.addItem("standard")
self.layout_combo.addItem("compact")
+ grid0.addWidget(self.layout_label, 2, 0)
+ grid0.addWidget(self.layout_combo, 2, 1)
+
# Set the current index for layout_combo
settings = QSettings("Open Source", "FlatCAM")
if settings.contains("layout"):
@@ -588,6 +612,9 @@ class GeneralGUISetGroupUI(OptionsGroupUI):
self.style_combo.setCurrentIndex(index)
self.style_combo.activated[str].connect(self.handle_style)
+ grid0.addWidget(self.style_label, 3, 0)
+ grid0.addWidget(self.style_combo, 3, 1)
+
# Enable High DPI Support
self.hdpi_label = QtWidgets.QLabel('%s:' % _('HDPI Support'))
self.hdpi_label.setToolTip(
@@ -603,6 +630,9 @@ class GeneralGUISetGroupUI(OptionsGroupUI):
self.hdpi_cb.set_value(False)
self.hdpi_cb.stateChanged.connect(self.handle_hdpi)
+ grid0.addWidget(self.hdpi_label, 4, 0)
+ grid0.addWidget(self.hdpi_cb, 4, 1)
+
# Clear Settings
self.clear_label = QtWidgets.QLabel('%s:' % _('Clear GUI Settings'))
self.clear_label.setToolTip(
@@ -612,6 +642,9 @@ class GeneralGUISetGroupUI(OptionsGroupUI):
self.clear_btn = FCButton(_("Clear"))
self.clear_btn.clicked.connect(self.handle_clear)
+ grid0.addWidget(self.clear_label, 5, 0)
+ grid0.addWidget(self.clear_btn, 5, 1)
+
# Enable Hover box
self.hover_label = QtWidgets.QLabel('%s:' % _('Hover Shape'))
self.hover_label.setToolTip(
@@ -621,6 +654,9 @@ class GeneralGUISetGroupUI(OptionsGroupUI):
)
self.hover_cb = FCCheckBox()
+ grid0.addWidget(self.hover_label, 6, 0)
+ grid0.addWidget(self.hover_cb, 6, 1)
+
# Enable Selection box
self.selection_label = QtWidgets.QLabel('%s:' % _('Sel. Shape'))
self.selection_label.setToolTip(
@@ -631,6 +667,11 @@ class GeneralGUISetGroupUI(OptionsGroupUI):
)
self.selection_cb = FCCheckBox()
+ grid0.addWidget(self.selection_label, 7, 0)
+ grid0.addWidget(self.selection_cb, 7, 1)
+
+ grid0.addWidget(QtWidgets.QLabel(''), 8, 0)
+
# Notebook Font Size
self.notebook_font_size_label = QtWidgets.QLabel('%s:' % _('NB Font Size'))
self.notebook_font_size_label.setToolTip(
@@ -649,6 +690,9 @@ class GeneralGUISetGroupUI(OptionsGroupUI):
else:
self.notebook_font_size_spinner.set_value(12)
+ grid0.addWidget(self.notebook_font_size_label, 9, 0)
+ grid0.addWidget(self.notebook_font_size_spinner, 9, 1)
+
# Axis Font Size
self.axis_font_size_label = QtWidgets.QLabel('%s:' % _('Axis Font Size'))
self.axis_font_size_label.setToolTip(
@@ -665,6 +709,9 @@ class GeneralGUISetGroupUI(OptionsGroupUI):
else:
self.axis_font_size_spinner.set_value(8)
+ grid0.addWidget(self.axis_font_size_label, 10, 0)
+ grid0.addWidget(self.axis_font_size_spinner, 10, 1)
+
# TextBox Font Size
self.textbox_font_size_label = QtWidgets.QLabel('%s:' % _('Textbox Font Size'))
self.textbox_font_size_label.setToolTip(
@@ -682,8 +729,11 @@ class GeneralGUISetGroupUI(OptionsGroupUI):
else:
self.textbox_font_size_spinner.set_value(10)
+ grid0.addWidget(self.textbox_font_size_label, 11, 0)
+ grid0.addWidget(self.textbox_font_size_spinner, 11, 1)
+
# Just to add empty rows
- self.spacelabel = QtWidgets.QLabel('')
+ grid0.addWidget(QtWidgets.QLabel(''), 12, 0)
# Splash Screen
self.splash_label = QtWidgets.QLabel('%s:' % _('Splash Screen'))
@@ -697,6 +747,9 @@ class GeneralGUISetGroupUI(OptionsGroupUI):
else:
self.splash_cb.set_value(False)
+ grid0.addWidget(self.splash_label, 13, 0)
+ grid0.addWidget(self.splash_cb, 13, 1)
+
# Sys Tray Icon
self.systray_label = QtWidgets.QLabel('%s:' % _('Sys Tray Icon'))
self.systray_label.setToolTip(
@@ -704,6 +757,9 @@ class GeneralGUISetGroupUI(OptionsGroupUI):
)
self.systray_cb = FCCheckBox()
+ grid0.addWidget(self.systray_label, 14, 0)
+ grid0.addWidget(self.systray_cb, 14, 1)
+
# Shell StartUp CB
self.shell_startup_label = QtWidgets.QLabel('%s:' % _('Shell at StartUp'))
self.shell_startup_label.setToolTip(
@@ -716,6 +772,9 @@ class GeneralGUISetGroupUI(OptionsGroupUI):
"start automatically at startup.")
)
+ grid0.addWidget(self.shell_startup_label, 15, 0)
+ grid0.addWidget(self.shell_startup_cb, 15, 1)
+
# Project at StartUp CB
self.project_startup_label = QtWidgets.QLabel('%s:' % _('Project at StartUp'))
self.project_startup_label.setToolTip(
@@ -728,6 +787,9 @@ class GeneralGUISetGroupUI(OptionsGroupUI):
"to be shown automatically at startup.")
)
+ grid0.addWidget(self.project_startup_label, 16, 0)
+ grid0.addWidget(self.project_startup_cb, 16, 1)
+
# Project autohide CB
self.project_autohide_label = QtWidgets.QLabel('%s:' % _('Project AutoHide'))
self.project_autohide_label.setToolTip(
@@ -742,6 +804,11 @@ class GeneralGUISetGroupUI(OptionsGroupUI):
"to show whenever a new object is created.")
)
+ grid0.addWidget(self.project_autohide_label, 17, 0)
+ grid0.addWidget(self.project_autohide_cb, 17, 1)
+
+ grid0.addWidget(QtWidgets.QLabel(''), 18, 0)
+
# Enable/Disable ToolTips globally
self.toggle_tooltips_label = QtWidgets.QLabel('%s:' % _('Enable ToolTips'))
self.toggle_tooltips_label.setToolTip(
@@ -754,6 +821,9 @@ class GeneralGUISetGroupUI(OptionsGroupUI):
"when hovering with mouse over items throughout the App.")
)
+ grid0.addWidget(self.toggle_tooltips_label, 19, 0)
+ grid0.addWidget(self.toggle_tooltips_cb, 19, 1)
+
# Mouse Cursor Shape
self.cursor_lbl = QtWidgets.QLabel('%s:' % _('Mouse Cursor'))
self.cursor_lbl.setToolTip(
@@ -767,6 +837,9 @@ class GeneralGUISetGroupUI(OptionsGroupUI):
{"label": _("Big"), "value": "big"}
], orientation='horizontal', stretch=False)
+ grid0.addWidget(self.cursor_lbl, 20, 0)
+ grid0.addWidget(self.cursor_radio, 20, 1)
+
self.cursor_size_lbl = QtWidgets.QLabel('%s:' % _('Mouse Cursor Size'))
self.cursor_size_lbl.setToolTip(
_("Set the size of the mouse cursor, in pixels.")
@@ -776,34 +849,8 @@ class GeneralGUISetGroupUI(OptionsGroupUI):
self.cursor_size_entry.set_range(10, 70)
self.cursor_size_entry.setWrapping(True)
-
- # Add (label - input field) pair to the QFormLayout
- self.form_box.addRow(self.spacelabel, self.spacelabel)
-
- self.form_box.addRow(self.layout_label, self.layout_combo)
- self.form_box.addRow(self.style_label, self.style_combo)
- self.form_box.addRow(self.hdpi_label, self.hdpi_cb)
- self.form_box.addRow(self.clear_label, self.clear_btn)
- self.form_box.addRow(self.hover_label, self.hover_cb)
- self.form_box.addRow(self.selection_label, self.selection_cb)
- self.form_box.addRow(QtWidgets.QLabel(''))
- self.form_box.addRow(self.notebook_font_size_label, self.notebook_font_size_spinner)
- self.form_box.addRow(self.axis_font_size_label, self.axis_font_size_spinner)
- self.form_box.addRow(self.textbox_font_size_label, self.textbox_font_size_spinner)
- self.form_box.addRow(QtWidgets.QLabel(''))
- self.form_box.addRow(self.splash_label, self.splash_cb)
- self.form_box.addRow(self.systray_label, self.systray_cb)
- self.form_box.addRow(self.shell_startup_label, self.shell_startup_cb)
- self.form_box.addRow(self.project_startup_label, self.project_startup_cb)
- self.form_box.addRow(self.project_autohide_label, self.project_autohide_cb)
- self.form_box.addRow(QtWidgets.QLabel(''))
- self.form_box.addRow(self.toggle_tooltips_label, self.toggle_tooltips_cb)
- self.form_box.addRow(self.cursor_lbl, self.cursor_radio)
- self.form_box.addRow(self.cursor_size_lbl, self.cursor_size_entry)
-
- # Add the QFormLayout that holds the Application general defaults
- # to the main layout of this TAB
- self.layout.addLayout(self.form_box)
+ grid0.addWidget(self.cursor_size_lbl, 21, 0)
+ grid0.addWidget(self.cursor_size_entry, 21, 1)
# Delete confirmation
self.delete_conf_cb = FCCheckBox(_('Delete object confirmation'))
@@ -812,7 +859,7 @@ class GeneralGUISetGroupUI(OptionsGroupUI):
"whenever the Delete object(s) event is triggered, either by\n"
"menu shortcut or key shortcut.")
)
- self.layout.addWidget(self.delete_conf_cb)
+ grid0.addWidget(self.delete_conf_cb, 22, 0, 1, 2)
self.layout.addStretch()
diff --git a/flatcamGUI/VisPyCanvas.py b/flatcamGUI/VisPyCanvas.py
index 082e8214..69da82c9 100644
--- a/flatcamGUI/VisPyCanvas.py
+++ b/flatcamGUI/VisPyCanvas.py
@@ -25,7 +25,25 @@ class VisPyCanvas(scene.SceneCanvas):
self.unfreeze()
- back_color = str(QPalette().color(QPalette.Window).name())
+ settings = QSettings("Open Source", "FlatCAM")
+ if settings.contains("axis_font_size"):
+ a_fsize = settings.value('axis_font_size', type=int)
+ else:
+ a_fsize = 8
+
+ if settings.contains("theme"):
+ theme = settings.value('theme', type=str)
+ else:
+ theme = 'white'
+
+ if theme == 'white':
+ theme_color = Color('#FFFFFF')
+ tick_color = Color('#000000')
+ back_color = str(QPalette().color(QPalette.Window).name())
+ else:
+ theme_color = Color('#000000')
+ tick_color = Color('gray')
+ back_color = Color('#000000')
self.central_widget.bgcolor = back_color
self.central_widget.border_color = back_color
@@ -36,18 +54,16 @@ class VisPyCanvas(scene.SceneCanvas):
top_padding = self.grid_widget.add_widget(row=0, col=0, col_span=2)
top_padding.height_max = 0
- settings = QSettings("Open Source", "FlatCAM")
- if settings.contains("axis_font_size"):
- a_fsize = settings.value('axis_font_size', type=int)
- else:
- a_fsize = 8
-
- self.yaxis = scene.AxisWidget(orientation='left', axis_color='black', text_color='black', font_size=a_fsize)
+ self.yaxis = scene.AxisWidget(
+ orientation='left', axis_color=tick_color, text_color=tick_color, font_size=a_fsize
+ )
self.yaxis.width_max = 55
self.grid_widget.add_widget(self.yaxis, row=1, col=0)
- self.xaxis = scene.AxisWidget(orientation='bottom', axis_color='black', text_color='black', font_size=a_fsize,
- anchors=['center', 'bottom'])
+ self.xaxis = scene.AxisWidget(
+ orientation='bottom', axis_color=tick_color, text_color=tick_color, font_size=a_fsize,
+ anchors=['center', 'bottom']
+ )
self.xaxis.height_max = 30
self.grid_widget.add_widget(self.xaxis, row=2, col=1)
@@ -55,7 +71,7 @@ class VisPyCanvas(scene.SceneCanvas):
# right_padding.width_max = 24
right_padding.width_max = 0
- view = self.grid_widget.add_view(row=1, col=1, border_color='black', bgcolor='white')
+ view = self.grid_widget.add_view(row=1, col=1, border_color=tick_color, bgcolor=theme_color)
view.camera = Camera(aspect=1, rect=(-25, -25, 150, 150))
# Following function was removed from 'prepare_draw()' of 'Grid' class by patch,
diff --git a/flatcamTools/ToolDistance.py b/flatcamTools/ToolDistance.py
index ce4c772b..4873d5e0 100644
--- a/flatcamTools/ToolDistance.py
+++ b/flatcamTools/ToolDistance.py
@@ -382,7 +382,7 @@ class Distance(FlatCAMTool):
# Update cursor
self.app.app_cursor.set_data(np.asarray([(pos[0], pos[1])]),
- symbol='++', edge_color='black',
+ symbol='++', edge_color=self.app.cursor_color_3D,
size=self.app.defaults["global_cursor_size"])
else:
pos = (pos_canvas[0], pos_canvas[1])
diff --git a/flatcamTools/ToolNonCopperClear.py b/flatcamTools/ToolNonCopperClear.py
index 8cdfc189..9881cdaa 100644
--- a/flatcamTools/ToolNonCopperClear.py
+++ b/flatcamTools/ToolNonCopperClear.py
@@ -1331,7 +1331,8 @@ class NonCopperClear(FlatCAMTool, Gerber):
curr_pos = self.app.geo_editor.snap(curr_pos[0], curr_pos[1])
self.app.app_cursor.set_data(np.asarray([(curr_pos[0], curr_pos[1])]),
- symbol='++', edge_color='black', size=self.app.defaults["global_cursor_size"])
+ symbol='++', edge_color=self.app.cursor_color_3D,
+ size=self.app.defaults["global_cursor_size"])
# update the positions on status bar
self.app.ui.position_label.setText(" X: %.4f "
diff --git a/flatcamTools/ToolPaint.py b/flatcamTools/ToolPaint.py
index d57ad685..9a8d0b0f 100644
--- a/flatcamTools/ToolPaint.py
+++ b/flatcamTools/ToolPaint.py
@@ -1199,7 +1199,8 @@ class ToolPaint(FlatCAMTool, Gerber):
curr_pos = self.app.geo_editor.snap(curr_pos[0], curr_pos[1])
self.app.app_cursor.set_data(np.asarray([(curr_pos[0], curr_pos[1])]),
- symbol='++', edge_color='black', size=self.app.defaults["global_cursor_size"])
+ symbol='++', edge_color=self.app.cursor_color_3D,
+ size=self.app.defaults["global_cursor_size"])
# update the positions on status bar
self.app.ui.position_label.setText(" X: %.4f "