diff --git a/CHANGELOG.md b/CHANGELOG.md
index 8b6501a3..7167bd27 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -7,6 +7,34 @@ CHANGELOG for FlatCAM Evo beta
=================================================
+9.05.2022
+
+- fixed an issue in the Paint Plugin where some polygons are discarded in a Geometry object made out of an imported SVG
+
+6.05.2022
+
+- minor changes to one of the custom widgets
+- added an example of custom titlebar - still needs a lot of work
+
+5.05.2022
+
+- changed the activity GIF's for the dark theme
+- changed some of the dark theme icons to the red color
+- made sure that the draw color in Editors is inverted for the dark mode
+- added a hack so the dark stylesheet for QWidget is reapplied if that Qwidget is removed (I don't know why it is lost in the first time)
+- when exiting an Editor with a sub-tool active the cursor data display feature is removed
+- updated the GCode header
+- fixed the 'light' theme paint icon name
+- removed the shortcut for the PDF Import Plugin (Ctrl+Q) since it interfered with the MacOS usage
+
+4.05.2020
+
+- some changes to the dark mode stylesheet to make it look better
+- darkened the text color for the dark theme in order to make it easier on the eyes
+- in Distance Plugin, when using the big cursor, the cursor colors are fixed to work for the dark mode too
+- for dark mode disabled hover highlight on the Status Bar
+- more changes for dark theme
+
2.05.2022
- in Excellon Editor, Copy sub-tool, added UI and ability to copy as array
diff --git a/Utils/custom_titlebar.py b/Utils/custom_titlebar.py
new file mode 100644
index 00000000..878ff742
--- /dev/null
+++ b/Utils/custom_titlebar.py
@@ -0,0 +1,207 @@
+
+# https://stackoverflow.com/questions/57569044/pyqt-how-to-create-custom-combined-titlebar-and-menubar
+
+
+import sys
+from PyQt6.QtCore import pyqtSlot, QPoint, Qt, QRect
+from PyQt6.QtWidgets import (QMainWindow, QApplication, QPushButton, QHBoxLayout,
+ QVBoxLayout, QTabWidget, QWidget, QSizeGrip,
+ QLabel, QSizeGrip, QMenuBar)
+from PyQt6.QtGui import QAction
+from PyQt6.QtGui import QIcon
+
+
+class TitleBar(QWidget):
+ height = 35
+
+ def __init__(self, parent):
+ super(TitleBar, self).__init__()
+ self.movement = None
+ self.end = None
+ self.parent = parent
+ self.layout = QHBoxLayout()
+ self.layout.setContentsMargins(0, 0, 0, 0)
+
+ self.menu_bar = QMenuBar()
+ self.menu_bar.setStyleSheet("""
+ color: #fff;
+ background-color: #23272A;
+ font-size: 14px;
+ padding: 4px;
+ """)
+ self.menu_file = self.menu_bar.addMenu('file')
+ self.menu_file_open = self.menu_file.addAction('open')
+ self.menu_file_save = self.menu_file.addAction('save')
+ self.menu_file_saveas = self.menu_file.addAction('save as...')
+ self.menu_file_quit = self.menu_file.addAction('exit')
+ self.menu_file_quit.triggered.connect(QApplication.quit)
+
+ self.menu_work = self.menu_bar.addMenu('work')
+ self.menu_analysis = self.menu_bar.addMenu('analysis')
+ self.menu_edit = self.menu_bar.addMenu('edit')
+ self.menu_window = self.menu_bar.addMenu('window')
+ self.menu_help = self.menu_bar.addMenu('help')
+
+ self.layout.addWidget(self.menu_bar)
+
+ self.title = QLabel("Hello World!")
+ self.title.setFixedHeight(self.height)
+ self.layout.addWidget(self.title)
+ self.title.setStyleSheet("""
+ background-color: #23272a; /* 23272a #f00*/
+ font-weight: bold;
+ font-size: 16px;
+ color: blue;
+ padding-left: 170px;
+ """)
+
+ self.closeButton = QPushButton(' ')
+ self.closeButton.clicked.connect(self.on_click_close)
+ self.closeButton.setStyleSheet("""
+ background-color: #DC143C;
+ border-radius: 10px;
+ height: {};
+ width: {};
+ margin-right: 3px;
+ font-weight: bold;
+ color: #000;
+ font-family: "Webdings";
+ qproperty-text: "r";
+ """.format(self.height / 1.7, self.height / 1.7))
+
+ self.maxButton = QPushButton(' ')
+ self.maxButton.clicked.connect(self.on_click_maximize)
+ self.maxButton.setStyleSheet("""
+ background-color: #32CD32;
+ border-radius: 10px;
+ height: {};
+ width: {};
+ margin-right: 3px;
+ font-weight: bold;
+ color: #000;
+ font-family: "Webdings";
+ qproperty-text: "1";
+ """.format(self.height / 1.7, self.height / 1.7))
+
+ self.hideButton = QPushButton(' ')
+ self.hideButton.clicked.connect(self.on_click_hide)
+ self.hideButton.setStyleSheet("""
+ background-color: #FFFF00;
+ border-radius: 10px;
+ height: {};
+ width: {};
+ margin-right: 3px;
+ font-weight: bold;
+ color: #000;
+ font-family: "Webdings";
+ qproperty-text: "0";
+ """.format(self.height / 1.7, self.height / 1.7))
+
+ self.layout.addWidget(self.hideButton)
+ self.layout.addWidget(self.maxButton)
+ self.layout.addWidget(self.closeButton)
+ self.setLayout(self.layout)
+
+ self.start = QPoint(0, 0)
+ self.pressing = False
+ self.maximaze = False
+
+ def resizeEvent(self, QResizeEvent):
+ super(TitleBar, self).resizeEvent(QResizeEvent)
+ self.title.setFixedWidth(self.parent.width())
+
+ def mousePressEvent(self, event):
+ self.start = self.mapToGlobal(event.pos())
+ self.pressing = True
+
+ def mouseDoubleClickEvent(self, a0):
+ if a0.button() == Qt.MouseButton.LeftButton:
+ self.on_click_maximize()
+ # super().mouseDoubleClickEvent(a0)
+
+ def mouseMoveEvent(self, event):
+ if self.pressing and not self.maximaze:
+ self.on_click_maximize()
+ return
+ if self.pressing:
+ self.end = self.mapToGlobal(event.pos())
+ self.movement = self.end - self.start
+ self.parent.move(self.mapToGlobal(self.movement))
+ self.start = self.end
+
+ def mouseReleaseEvent(self, QMouseEvent):
+ self.pressing = False
+
+ @staticmethod
+ def on_click_close():
+ sys.exit()
+
+ def on_click_maximize(self):
+ self.maximaze = not self.maximaze
+ if self.maximaze:
+ self.parent.setWindowState(Qt.WindowState.WindowNoState)
+ if not self.maximaze:
+ self.parent.setWindowState(Qt.WindowState.WindowMaximized)
+
+ def on_click_hide(self):
+ self.parent.showMinimized()
+
+
+class StatusBar(QWidget):
+ def __init__(self, parent):
+ super(StatusBar, self).__init__(parent)
+ self.grip = None
+ self.layout = None
+ self.label = None
+ self.parent = parent
+ self.initUI()
+ self.showMessage("showMessage: Hello world!")
+
+ def initUI(self):
+ self.label = QLabel("Status bar...")
+ self.label.setFixedHeight(24)
+ self.label.setAlignment(Qt.AlignmentFlag.AlignLeft | Qt.AlignmentFlag.AlignVCenter)
+ self.label.setStyleSheet("""
+ background-color: #23272a;
+ font-size: 12px;
+ padding-left: 5px;
+ color: white;
+ """)
+ self.layout = QHBoxLayout()
+ self.layout.setContentsMargins(0, 0, 0, 0)
+ self.layout.addWidget(self.label)
+ self.layout.addStretch(1)
+ self.grip = QSizeGrip(self.parent)
+ self.layout.addWidget(self.grip)
+ self.setLayout(self.layout)
+
+ def showMessage(self, text):
+ self.label.setText(text)
+
+
+class MainWindow(QWidget):
+ def __init__(self):
+ super(MainWindow, self).__init__()
+ self.setMinimumSize(800, 400)
+
+ self.setWindowFlags(self.windowFlags() | Qt.WindowType.FramelessWindowHint)
+ self.setStyleSheet("background-color: #2c2f33;")
+ self.setWindowTitle('Code Maker')
+
+ self.title_bar = TitleBar(self)
+ self.status_bar = StatusBar(self)
+
+ self.layout = QVBoxLayout()
+ self.layout.setContentsMargins(0, 0, 0, 0)
+ self.layout.addWidget(self.title_bar)
+ self.layout.addStretch(1)
+ self.layout.addWidget(self.status_bar)
+ self.layout.setSpacing(0)
+ self.setLayout(self.layout)
+
+
+if __name__ == "__main__":
+ app = QApplication(sys.argv)
+ mw = MainWindow()
+ mw.show()
+ sys.exit(app.exec())
diff --git a/appEditors/AppExcEditor.py b/appEditors/AppExcEditor.py
index c95c0d06..2eceff0d 100644
--- a/appEditors/AppExcEditor.py
+++ b/appEditors/AppExcEditor.py
@@ -4858,7 +4858,7 @@ class AppExcEditor(QtCore.QObject):
for sub_geo in el.geoms:
self.tool_shape.add(
shape=sub_geo,
- color=(self.app.options["global_draw_color"]),
+ color=self.get_draw_color(),
update=False,
layer=0,
tolerance=None
@@ -4866,20 +4866,38 @@ class AppExcEditor(QtCore.QObject):
else:
self.tool_shape.add(
shape=el,
- color=(self.app.options["global_draw_color"]),
+ color=self.get_draw_color(),
update=False,
layer=0,
tolerance=None)
except TypeError:
self.tool_shape.add(
shape=util_geo,
- color=(self.app.options["global_draw_color"]),
+ color=self.get_draw_color(),
update=False,
layer=0,
tolerance=None)
# print(self.tool_shape.data)
self.tool_shape.redraw()
+ def get_draw_color(self):
+ orig_color = self.app.options["global_draw_color"]
+
+ if self.app.options['global_theme'] in ['default', 'light']:
+ return orig_color
+
+ # in the "dark" theme we invert the color
+ lowered_color = orig_color.lower()
+ group1 = "#0123456789abcdef"
+ group2 = "#fedcba9876543210"
+ # create color dict
+ color_dict = {group1[i]: group2[i] for i in range(len(group1))}
+ new_color = ''.join([color_dict[j] for j in lowered_color])
+ return new_color
+
+ def get_sel_color(self):
+ return self.app.options['global_sel_draw_color']
+
def replot(self):
self.plot_all()
@@ -4900,10 +4918,10 @@ class AppExcEditor(QtCore.QObject):
if shape_plus in self.selected:
self.plot_shape(geometry=shape_plus.geo,
- color=self.app.options['global_sel_draw_color'][:-2] + 'FF',
+ color=self.get_sel_color()[:-2] + 'FF',
linewidth=2)
continue
- self.plot_shape(geometry=shape_plus.geo, color=self.app.options['global_draw_color'][:-2] + 'FF')
+ self.plot_shape(geometry=shape_plus.geo, color=self.get_draw_color()[:-2] + 'FF')
for shape_form in self.utility:
self.plot_shape(geometry=shape_form.geo, linewidth=1)
diff --git a/appEditors/AppGeoEditor.py b/appEditors/AppGeoEditor.py
index eec23ce5..6f393372 100644
--- a/appEditors/AppGeoEditor.py
+++ b/appEditors/AppGeoEditor.py
@@ -4684,7 +4684,7 @@ class AppGeoEditor(QtCore.QObject):
for poly in el.geoms:
self.tool_shape.add(
shape=poly,
- color=(self.app.options["global_draw_color"]),
+ color=self.get_draw_color(),
update=False,
layer=0,
tolerance=None
@@ -4693,7 +4693,7 @@ class AppGeoEditor(QtCore.QObject):
for linestring in el.geoms:
self.tool_shape.add(
shape=linestring,
- color=(self.app.options["global_draw_color"]),
+ color=self.get_draw_color(),
update=False,
layer=0,
tolerance=None
@@ -4701,20 +4701,38 @@ class AppGeoEditor(QtCore.QObject):
else:
self.tool_shape.add(
shape=el,
- color=(self.app.options["global_draw_color"]),
+ color=(self.get_draw_color()),
update=False,
layer=0,
tolerance=None
)
except TypeError:
self.tool_shape.add(
- shape=geo.geo, color=(self.app.options["global_draw_color"]),
+ shape=geo.geo, color=self.get_draw_color(),
update=False, layer=0, tolerance=None)
except AttributeError:
pass
self.tool_shape.redraw()
+ def get_draw_color(self):
+ orig_color = self.app.options["global_draw_color"]
+
+ if self.app.options['global_theme'] in ['default', 'light']:
+ return orig_color
+
+ # in the "dark" theme we invert the color
+ lowered_color = orig_color.lower()
+ group1 = "#0123456789abcdef"
+ group2 = "#fedcba9876543210"
+ # create color dict
+ color_dict = {group1[i]: group2[i] for i in range(len(group1))}
+ new_color = ''.join([color_dict[j] for j in lowered_color])
+ return new_color
+
+ def get_sel_color(self):
+ return self.app.options['global_sel_draw_color']
+
def on_delete_btn(self):
self.delete_selected()
# self.plot_all()
@@ -4830,8 +4848,10 @@ class AppGeoEditor(QtCore.QObject):
self.shapes.clear(update=True)
- draw_color = self.app.options['global_draw_color'][:-2] + "FF"
- sel_color = self.app.options['global_sel_draw_color'][:-2] + 'FF'
+ orig_draw_color = self.get_draw_color()
+ draw_color = orig_draw_color[:-2] + "FF"
+ orig_sel_color = self.get_sel_color()
+ sel_color = orig_sel_color[:-2] + 'FF'
for shape in self.storage.get_objects():
if shape.geo and not shape.geo.is_empty and shape.geo.is_valid:
diff --git a/appEditors/AppGerberEditor.py b/appEditors/AppGerberEditor.py
index 90a9cd9e..776ee8a6 100644
--- a/appEditors/AppGerberEditor.py
+++ b/appEditors/AppGerberEditor.py
@@ -3067,11 +3067,9 @@ class ImportEditorGrb(QtCore.QObject, DrawTool):
if solid_geo not in self.get_selected_geos():
shape_id = self.app.tool_shapes.add(tolerance=obj.drawing_tolerance, layer=0,
shape=solid_geo,
- color=self.app.options[
- 'global_sel_draw_color'] + 'AF',
- face_color=self.app.options[
- 'global_sel_draw_color'
- ] + 'AF',
+ color=self.draw_app.get_sel_color() + 'AF',
+ face_color=self.draw_app.get_sel_color() +
+ 'AF',
visible=True)
new_ap_dict = {k: v for k, v in obj.tools[apid].items() if k != 'geometry'}
new_ap_dict['geometry'] = [DrawToolShape(geo_el)]
@@ -3111,8 +3109,8 @@ class ImportEditorGrb(QtCore.QObject, DrawTool):
added_poly_count = 0
- color = self.app.options['global_sel_draw_color'] + 'AF'
- face_color = self.app.options['global_sel_draw_color'] + 'AF'
+ color = self.draw_app.get_sel_color() + 'AF'
+ face_color = self.draw_app.get_sel_color() + 'AF'
for obj in self.app.collection.get_list():
# only Gerber objects and only those that are active and not the edited object
@@ -5583,7 +5581,7 @@ class AppGerberEditor(QtCore.QObject):
geometric_data = el['solid']
# Add the new utility shape
self.tool_shape.add(
- shape=geometric_data, color=(self.app.options["global_draw_color"]),
+ shape=geometric_data, color=self.get_draw_color(),
# face_color=self.app.options['global_alt_sel_fill'],
update=False, layer=0, tolerance=None
)
@@ -5592,13 +5590,31 @@ class AppGerberEditor(QtCore.QObject):
# Add the new utility shape
self.tool_shape.add(
shape=geometric_data,
- color=(self.app.options["global_draw_color"]),
+ color=self.get_draw_color(),
# face_color=self.app.options['global_alt_sel_fill'],
update=False, layer=0, tolerance=None
)
self.tool_shape.redraw()
+ def get_draw_color(self):
+ orig_color = self.app.options["global_draw_color"]
+
+ if self.app.options['global_theme'] in ['default', 'light']:
+ return orig_color
+
+ # in the "dark" theme we invert the color
+ lowered_color = orig_color.lower()
+ group1 = "#0123456789abcdef"
+ group2 = "#fedcba9876543210"
+ # create color dict
+ color_dict = {group1[i]: group2[i] for i in range(len(group1))}
+ new_color = ''.join([color_dict[j] for j in lowered_color])
+ return new_color
+
+ def get_sel_color(self):
+ return self.app.options['global_sel_draw_color']
+
def plot_all(self):
"""
Plots all shapes in the editor.
@@ -5609,14 +5625,14 @@ class AppGerberEditor(QtCore.QObject):
with self.app.proc_container.new('%s ...' % _("Plotting")):
self.shapes.clear(update=True)
- if len(self.app.options['global_sel_draw_color']) == 7:
- sel_draw_color = self.app.options['global_sel_draw_color'] + 'FF'
+ if len(self.get_sel_color()) == 7:
+ sel_draw_color = self.get_sel_color() + 'FF'
else:
- sel_draw_color = self.app.options['global_sel_draw_color'][:-2] + 'FF'
- if len(self.app.options['global_draw_color']) == 7:
- draw_color = self.app.options['global_draw_color'] + 'FF'
+ sel_draw_color = self.get_sel_color()[:-2] + 'FF'
+ if len(self.get_draw_color()) == 7:
+ draw_color = self.get_draw_color() + 'FF'
else:
- draw_color = self.app.options['global_draw_color'][:-2] + 'FF'
+ draw_color = self.get_draw_color()[:-2] + 'FF'
for storage in self.storage_dict:
# fix for apertures with no geometry inside
diff --git a/appEditors/exc_plugins/ExcDrillPlugin.py b/appEditors/exc_plugins/ExcDrillPlugin.py
index dc78b537..1f83dedb 100644
--- a/appEditors/exc_plugins/ExcDrillPlugin.py
+++ b/appEditors/exc_plugins/ExcDrillPlugin.py
@@ -62,8 +62,8 @@ class ExcDrillEditorTool(AppTool):
self.app.ui.plugin_tab_layout.addWidget(self.app.ui.plugin_scroll_area)
self.app.ui.notebook.addTab(self.app.ui.plugin_tab, _("Plugin"))
- # focus on Tool Tab
- self.app.ui.notebook.setCurrentWidget(self.app.ui.plugin_tab)
+ # focus on Tool Tab
+ self.app.ui.notebook.setCurrentWidget(self.app.ui.plugin_tab)
# self.app.ui.notebook.callback_on_close = self.on_tab_close
diff --git a/appEditors/geo_plugins/GeoPaintPlugin.py b/appEditors/geo_plugins/GeoPaintPlugin.py
index a96c6f92..5e23178b 100644
--- a/appEditors/geo_plugins/GeoPaintPlugin.py
+++ b/appEditors/geo_plugins/GeoPaintPlugin.py
@@ -158,7 +158,7 @@ class PaintOptionsTool(AppTool):
# If iterable, expand recursively.
try:
for geo_el in geometry:
- if geo_el is not None:
+ if geo_el is not None and not geo_el.is_emoty:
recurse(geometry=geo_el, reset=False)
# Not iterable, do the actual indexing and add.
diff --git a/appGUI/GUIElements.py b/appGUI/GUIElements.py
index bf39890d..8d5ced51 100644
--- a/appGUI/GUIElements.py
+++ b/appGUI/GUIElements.py
@@ -3120,6 +3120,10 @@ class FCTab(QtWidgets.QTabWidget):
def protectTab(self, currentIndex):
self.tabBar().setTabButton(currentIndex, QtWidgets.QTabBar.ButtonPosition.RightSide, None)
+ try:
+ self.tabBar().setTabButton(currentIndex, QtWidgets.QTabBar.ButtonPosition.LeftSide, None)
+ except Exception:
+ pass
# class FCTabBar(QtWidgets.QTabBar):
@@ -3249,7 +3253,17 @@ class FCDetachableTab(QtWidgets.QTabWidget):
def protectTab(self, currentIndex):
# self.FCTabBar().setTabButton(currentIndex, QtWidgets.QTabBar.RightSide, None)
+ # self.tabBar.tabButton(currentIndex, QtWidgets.QTabBar.ButtonPosition.RightSide).deleteLater()
+ # try:
+ # self.tabBar.tabButton(currentIndex, QtWidgets.QTabBar.ButtonPosition.RightSide).deleteLater()
+ # except Exception:
+ # pass
+
self.tabBar.setTabButton(currentIndex, QtWidgets.QTabBar.ButtonPosition.RightSide, None)
+ try:
+ self.tabBar.setTabButton(currentIndex, QtWidgets.QTabBar.ButtonPosition.LeftSide, None)
+ except Exception:
+ pass
def setMovable(self, movable):
"""
@@ -5487,6 +5501,9 @@ class FlatCAMActivityView(QtWidgets.QWidget):
elif icon_kind == "Eclipse green":
icon = icon_location + '/active_4_static.png'
movie = icon_location + "/active_4.gif"
+ elif icon_kind == "Spinner green":
+ icon = icon_location + '/active_5_static.png'
+ movie = icon_location + "/active_5.gif"
else:
icon = icon_location + '/active_static.png'
movie = icon_location + "/active.gif"
@@ -5700,7 +5717,7 @@ class AppSystemTray(QtWidgets.QSystemTrayIcon):
self.menu_open.addSeparator()
# Open Gerber ...
- menu_opengerber = QtGui.QAction(QtGui.QIcon(self.app.resource_location + '/flatcam_icon24.png'),
+ menu_opengerber = QtGui.QAction(QtGui.QIcon(self.app.resource_location + '/open_gerber32.png'),
'%s ...\t%s' % (_('Open Gerber'), _('Ctrl+G')), self)
self.menu_open.addAction(menu_opengerber)
@@ -5819,7 +5836,9 @@ class FCMessageBox(QtWidgets.QMessageBox):
super(FCMessageBox, self).__init__(*args, **kwargs)
self.offset = None
self.moving = None
+
self.setWindowFlags(self.windowFlags() | Qt.WindowType.FramelessWindowHint | Qt.WindowType.WindowSystemMenuHint)
+ # self.setAttribute(Qt.WidgetAttribute.WA_TranslucentBackground)
# "background-color: palette(base); "
self.setStyleSheet(
diff --git a/appGUI/MainGUI.py b/appGUI/MainGUI.py
index be3012db..18ee9590 100644
--- a/appGUI/MainGUI.py
+++ b/appGUI/MainGUI.py
@@ -99,6 +99,8 @@ class MainGUI(QtWidgets.QMainWindow):
FCLabel.patching_text_color = self.theme_safe_color
+ # self.setWindowFlags(QtCore.Qt.WindowType.FramelessWindowHint)
+
# Divine icon pack by Ipapun @ finicons.com
# #######################################################################
@@ -162,7 +164,7 @@ class MainGUI(QtWidgets.QMainWindow):
)
self.menufile_open = self.menufile.addMenu(
- QtGui.QIcon(self.app.resource_location + '/folder32_bis.png'), '%s' % _('Open'))
+ QtGui.QIcon(self.app.resource_location + '/folder32.png'), '%s' % _('Open'))
self.menufile_open.setToolTipsVisible(True)
# Open Project ...
@@ -173,7 +175,7 @@ class MainGUI(QtWidgets.QMainWindow):
self.menufile_open.addSeparator()
# Open Gerber ...
- self.menufileopengerber = QtGui.QAction(QtGui.QIcon(self.app.resource_location + '/flatcam_icon24.png'),
+ self.menufileopengerber = QtGui.QAction(QtGui.QIcon(self.app.resource_location + '/open_gerber32.png'),
'%s...\t%s' % (_('Open Gerber'), _('Ctrl+G')), self)
self.menufile_open.addAction(self.menufileopengerber)
@@ -475,14 +477,14 @@ class MainGUI(QtWidgets.QMainWindow):
QtGui.QIcon(self.app.resource_location + '/origin16.png'),
'%s\t%s' % (_('Set Origin'), _('O')))
self.menuedit_move2origin = self.menuedit.addAction(
- QtGui.QIcon(self.app.resource_location + '/origin2_16.png'),
+ QtGui.QIcon(self.app.resource_location + '/move2origin32.png'),
'%s\t%s' % (_('Move to Origin'), _('Shift+O')))
self.menuedit_center_in_origin = self.menuedit.addAction(
- QtGui.QIcon(self.app.resource_location + '/origin3_32.png'),
+ QtGui.QIcon(self.app.resource_location + '/custom_origin32.png'),
'%s\t%s' % (_('Custom Origin'), ''))
self.menueditjump = self.menuedit.addAction(
- QtGui.QIcon(self.app.resource_location + '/jump_to16.png'),
+ QtGui.QIcon(self.app.resource_location + '/jump_to32.png'),
'%s\t%s' % (_('Jump to Location'), _('J')))
self.menueditlocate = self.menuedit.addAction(
QtGui.QIcon(self.app.resource_location + '/locate16.png'),
@@ -764,7 +766,7 @@ class MainGUI(QtWidgets.QMainWindow):
'%s\t%s' % (_("Simplification"), '')
)
self.geo_paint_menuitem = self.geo_editor_menu.addAction(
- QtGui.QIcon(self.app.resource_location + '/paint20_1.png'),
+ QtGui.QIcon(self.app.resource_location + '/paint32.png'),
'%s\t%s' % (_("Paint"), _('I'))
)
self.geo_transform_menuitem = self.geo_editor_menu.addAction(
@@ -1057,14 +1059,14 @@ class MainGUI(QtWidgets.QMainWindow):
# ########################## File Toolbar# ###############################
# ########################################################################
self.file_open_gerber_btn = self.toolbarfile.addAction(
- QtGui.QIcon(self.app.resource_location + '/flatcam_icon32.png'), _("Open Gerber"))
+ QtGui.QIcon(self.app.resource_location + '/open_gerber32.png'), _("Open Gerber"))
self.file_open_excellon_btn = self.toolbarfile.addAction(
- QtGui.QIcon(self.app.resource_location + '/drill32.png'), _("Open Excellon"))
+ QtGui.QIcon(self.app.resource_location + '/open_excellon32.png'), _("Open Excellon"))
self.toolbarfile.addSeparator()
self.file_open_btn = self.toolbarfile.addAction(
QtGui.QIcon(self.app.resource_location + '/folder32.png'), _("Open Project"))
self.file_save_btn = self.toolbarfile.addAction(
- QtGui.QIcon(self.app.resource_location + '/project_save32.png'), _("Save project"))
+ QtGui.QIcon(self.app.resource_location + '/save_as.png'), _("Save project"))
# ########################################################################
# ########################## Edit Toolbar# ###############################
@@ -1078,7 +1080,7 @@ class MainGUI(QtWidgets.QMainWindow):
QToolButton
{
color: black;
- background-color: tomato;
+ background-color: blue;
}
""")
self.editor_exit_btn.setIcon(QtGui.QIcon(self.app.resource_location + '/power16.png'))
@@ -1099,12 +1101,12 @@ class MainGUI(QtWidgets.QMainWindow):
self.origin_btn = self.toolbaredit.addAction(
QtGui.QIcon(self.app.resource_location + '/origin32.png'), _('Set Origin'))
self.move2origin_btn = self.toolbaredit.addAction(
- QtGui.QIcon(self.app.resource_location + '/origin2_32.png'), _('Move to Origin'))
+ QtGui.QIcon(self.app.resource_location + '/move2origin32.png'), _('Move to Origin'))
self.center_in_origin_btn = self.toolbaredit.addAction(
- QtGui.QIcon(self.app.resource_location + '/origin3_32.png'), _('Custom Origin'))
+ QtGui.QIcon(self.app.resource_location + '/custom_origin32.png'), _('Custom Origin'))
self.jmp_btn = self.toolbaredit.addAction(
- QtGui.QIcon(self.app.resource_location + '/jump_to16.png'), _('Jump to Location'))
+ QtGui.QIcon(self.app.resource_location + '/jump_to32.png'), _('Jump to Location'))
self.locate_btn = self.toolbaredit.addAction(
QtGui.QIcon(self.app.resource_location + '/locate32.png'), _('Locate in Object'))
@@ -1140,7 +1142,7 @@ class MainGUI(QtWidgets.QMainWindow):
# ########################## Tools Toolbar# ##############################
# ########################################################################
self.drill_btn = self.toolbarplugins.addAction(
- QtGui.QIcon(self.app.resource_location + '/extract_drill32.png'), _("Drilling"))
+ QtGui.QIcon(self.app.resource_location + '/drill32.png'), _("Drilling"))
self.mill_btn = self.toolbarplugins.addAction(
QtGui.QIcon(self.app.resource_location + '/milling_tool32.png'), _("Milling"))
self.level_btn = self.toolbarplugins.addAction(
@@ -1151,13 +1153,13 @@ class MainGUI(QtWidgets.QMainWindow):
self.toolbarplugins.addSeparator()
self.isolation_btn = self.toolbarplugins.addAction(
- QtGui.QIcon(self.app.resource_location + '/iso_16.png'), _("Isolation"))
+ QtGui.QIcon(self.app.resource_location + '/iso32.png'), _("Isolation"))
self.follow_btn = self.toolbarplugins.addAction(
QtGui.QIcon(self.app.resource_location + '/follow32.png'), _("Follow"))
self.ncc_btn = self.toolbarplugins.addAction(
QtGui.QIcon(self.app.resource_location + '/ncc32.png'), _("NCC"))
self.paint_btn = self.toolbarplugins.addAction(
- QtGui.QIcon(self.app.resource_location + '/paint20_1.png'), _("Paint"))
+ QtGui.QIcon(self.app.resource_location + '/paint32.png'), _("Paint"))
self.toolbarplugins.addSeparator()
@@ -1188,7 +1190,7 @@ class MainGUI(QtWidgets.QMainWindow):
self.punch_btn = self.toolbarplugins.addAction(
QtGui.QIcon(self.app.resource_location + '/punch32.png'), _("Punch Gerber"))
self.calculators_btn = self.toolbarplugins.addAction(
- QtGui.QIcon(self.app.resource_location + '/calculator24.png'), _("Calculators"))
+ QtGui.QIcon(self.app.resource_location + '/calculator32.png'), _("Calculators"))
self.toolbarplugins.addSeparator()
@@ -1267,7 +1269,7 @@ class MainGUI(QtWidgets.QMainWindow):
self.geo_add_buffer_btn = self.geo_edit_toolbar.addAction(
QtGui.QIcon(self.app.resource_location + '/buffer16-2.png'), _('Add Buffer'))
self.geo_add_paint_btn = self.geo_edit_toolbar.addAction(
- QtGui.QIcon(self.app.resource_location + '/paint20_1.png'), _('Paint Shape'))
+ QtGui.QIcon(self.app.resource_location + '/paint32.png'), _('Paint Shape'))
self.geo_eraser_btn = self.geo_edit_toolbar.addAction(
QtGui.QIcon(self.app.resource_location + '/eraser26.png'), _('Eraser'))
@@ -1355,7 +1357,7 @@ class MainGUI(QtWidgets.QMainWindow):
# Snap GRID toolbar is always active to facilitate usage of measurements done on GRID
self.grid_snap_btn = self.grid_toolbar.addAction(
- QtGui.QIcon(self.app.resource_location + '/grid32.png'), _('Snap to grid'))
+ QtGui.QIcon(self.app.resource_location + '/grid18.png'), _('Snap to grid'))
self.grid_gap_x_entry = FCEntry2()
self.grid_gap_x_entry.setMaximumWidth(70)
self.grid_gap_x_entry.setToolTip(_("Grid X snapping distance"))
@@ -1396,7 +1398,7 @@ class MainGUI(QtWidgets.QMainWindow):
# ########################################################################
self.axis_status_label = FCLabel()
self.axis_status_label.setToolTip(_("Toggle the display of axis on canvas"))
- self.axis_status_label.setPixmap(QtGui.QPixmap(self.app.resource_location + '/axis16.png'))
+ self.axis_status_label.setPixmap(QtGui.QPixmap(self.app.resource_location + '/axis18.png'))
self.status_toolbar.addWidget(self.axis_status_label)
self.status_toolbar.addWidget(FCLabel(" "))
@@ -1408,7 +1410,7 @@ class MainGUI(QtWidgets.QMainWindow):
self.hud_label = FCLabel()
self.hud_label.setToolTip(_("HUD (Heads up display)"))
- self.hud_label.setPixmap(QtGui.QPixmap(self.app.resource_location + '/hud16.png'))
+ self.hud_label.setPixmap(QtGui.QPixmap(self.app.resource_location + '/hud18.png'))
self.status_toolbar.addWidget(self.hud_label)
self.status_toolbar.addWidget(FCLabel(" "))
@@ -1533,6 +1535,15 @@ class MainGUI(QtWidgets.QMainWindow):
# remove the close button from the Plot Area tab (first tab index = 0) as this one will always be ON
self.plot_tab_area.protectTab(0)
+ if self.app.options["global_theme"] not in ['default', 'light']:
+ self.plot_tab_area.setStyleSheet(
+ """
+ QTabWidget::pane {
+ border: 0px solid rgba(255.000, 00.000, 00.000, 1.000);
+ }
+ """
+ )
+
# ########################################################################
# ########################## PREFERENCES AREA Tab # ######################
# ########################################################################
@@ -1542,6 +1553,14 @@ class MainGUI(QtWidgets.QMainWindow):
self.pref_tab_layout.setContentsMargins(2, 2, 2, 2)
self.pref_tab_area = FCTab()
+ if self.app.options["global_theme"] not in ['default', 'light']:
+ self.pref_tab_area.setStyleSheet(
+ """
+ QTabWidget::pane {
+ border: 0px solid rgba(63.000, 64.000, 66.000, 1.000);
+ }
+ """
+ )
self.pref_tab_area.setTabsClosable(False)
self.pref_tab_area_tabBar = self.pref_tab_area.tabBar()
self.pref_tab_area_tabBar.setStyleSheet("QTabBar::tab{min-width:90px;}")
@@ -1829,7 +1848,7 @@ class MainGUI(QtWidgets.QMainWindow):
self.draw_buffer = self.g_editor_cmenu.addAction(
QtGui.QIcon(self.app.resource_location + '/buffer16-2.png'), _("Buffer"))
self.draw_paint = self.g_editor_cmenu.addAction(
- QtGui.QIcon(self.app.resource_location + '/paint20_1.png'), _("Paint"))
+ QtGui.QIcon(self.app.resource_location + '/paint32.png'), _("Paint"))
self.draw_eraser = self.g_editor_cmenu.addAction(
QtGui.QIcon(self.app.resource_location + '/eraser26.png'), _("Eraser"))
self.g_editor_cmenu.addSeparator()
@@ -1887,7 +1906,7 @@ class MainGUI(QtWidgets.QMainWindow):
self.e_editor_cmenu = self.popMenu.addMenu(
QtGui.QIcon(self.app.resource_location + '/drill32.png'), _("Exc Editor"))
self.drill = self.e_editor_cmenu.addAction(
- QtGui.QIcon(self.app.resource_location + '/drill32.png'), _("Add Drill"))
+ QtGui.QIcon(self.app.resource_location + '/open_excellon32.png'), _("Add Drill"))
self.drill_array = self.e_editor_cmenu.addAction(
QtGui.QIcon(self.app.resource_location + '/addarray32.png'), _("Add Drill Array"))
self.e_editor_cmenu.addSeparator()
@@ -1913,7 +1932,7 @@ class MainGUI(QtWidgets.QMainWindow):
self.popmenu_numeric_move = self.popMenu.addAction(
QtGui.QIcon(self.app.resource_location + '/move32_bis.png'), _("Num Move"))
self.popmenu_move2origin = self.popMenu.addAction(
- QtGui.QIcon(self.app.resource_location + '/origin2_32.png'), _("Move2Origin"))
+ QtGui.QIcon(self.app.resource_location + '/move2origin32.png'), _("Move2Origin"))
self.popmenu_move = self.popMenu.addAction(
QtGui.QIcon(self.app.resource_location + '/move32.png'), _("Move"))
self.popmenu_properties = self.popMenu.addAction(
@@ -2436,14 +2455,14 @@ class MainGUI(QtWidgets.QMainWindow):
# ##################### File Toolbar #####################################
# ########################################################################
self.file_open_gerber_btn = self.toolbarfile.addAction(
- QtGui.QIcon(self.app.resource_location + '/flatcam_icon32.png'), _("Open Gerber"))
+ QtGui.QIcon(self.app.resource_location + '/open_gerber32.png'), _("Open Gerber"))
self.file_open_excellon_btn = self.toolbarfile.addAction(
- QtGui.QIcon(self.app.resource_location + '/drill32.png'), _("Open Excellon"))
+ QtGui.QIcon(self.app.resource_location + '/open_excellon32.png'), _("Open Excellon"))
self.toolbarfile.addSeparator()
self.file_open_btn = self.toolbarfile.addAction(
QtGui.QIcon(self.app.resource_location + '/folder32.png'), _("Open Project"))
self.file_save_btn = self.toolbarfile.addAction(
- QtGui.QIcon(self.app.resource_location + '/project_save32.png'), _("Save Project"))
+ QtGui.QIcon(self.app.resource_location + '/save_as.png'), _("Save Project"))
# ########################################################################
# ######################### Edit Toolbar #################################
@@ -2457,7 +2476,7 @@ class MainGUI(QtWidgets.QMainWindow):
QToolButton
{
color: black;
- background-color: tomato;
+ background-color: blue;
}
""")
self.editor_exit_btn.setIcon(QtGui.QIcon(self.app.resource_location + '/power16.png'))
@@ -2478,12 +2497,12 @@ class MainGUI(QtWidgets.QMainWindow):
self.origin_btn = self.toolbaredit.addAction(
QtGui.QIcon(self.app.resource_location + '/origin32.png'), _('Set Origin'))
self.move2origin_btn = self.toolbaredit.addAction(
- QtGui.QIcon(self.app.resource_location + '/origin2_32.png'), _('Move to Origin'))
+ QtGui.QIcon(self.app.resource_location + '/move2origin32.png'), _('Move to Origin'))
self.center_in_origin_btn = self.toolbaredit.addAction(
- QtGui.QIcon(self.app.resource_location + '/origin3_32.png'), _('Custom Origin'))
+ QtGui.QIcon(self.app.resource_location + '/custom_origin32.png'), _('Custom Origin'))
self.jmp_btn = self.toolbaredit.addAction(
- QtGui.QIcon(self.app.resource_location + '/jump_to16.png'), _('Jump to Location'))
+ QtGui.QIcon(self.app.resource_location + '/jump_to32.png'), _('Jump to Location'))
self.locate_btn = self.toolbaredit.addAction(
QtGui.QIcon(self.app.resource_location + '/locate32.png'), _('Locate in Object'))
@@ -2517,7 +2536,7 @@ class MainGUI(QtWidgets.QMainWindow):
# ######################### Tools Toolbar #################################
# #########################################################################
self.drill_btn = self.toolbarplugins.addAction(
- QtGui.QIcon(self.app.resource_location + '/extract_drill32.png'), _("Drilling"))
+ QtGui.QIcon(self.app.resource_location + '/drill32.png'), _("Drilling"))
self.mill_btn = self.toolbarplugins.addAction(
QtGui.QIcon(self.app.resource_location + '/milling_tool32.png'), _("Milling"))
self.level_btn = self.toolbarplugins.addAction(
@@ -2528,13 +2547,13 @@ class MainGUI(QtWidgets.QMainWindow):
self.toolbarplugins.addSeparator()
self.isolation_btn = self.toolbarplugins.addAction(
- QtGui.QIcon(self.app.resource_location + '/iso_16.png'), _("Isolation"))
+ QtGui.QIcon(self.app.resource_location + '/iso32.png'), _("Isolation"))
self.follow_btn = self.toolbarplugins.addAction(
QtGui.QIcon(self.app.resource_location + '/follow32.png'), _("Follow"))
self.ncc_btn = self.toolbarplugins.addAction(
QtGui.QIcon(self.app.resource_location + '/ncc32.png'), _("NCC"))
self.paint_btn = self.toolbarplugins.addAction(
- QtGui.QIcon(self.app.resource_location + '/paint20_1.png'), _("Paint"))
+ QtGui.QIcon(self.app.resource_location + '/paint32.png'), _("Paint"))
self.toolbarplugins.addSeparator()
@@ -2565,7 +2584,7 @@ class MainGUI(QtWidgets.QMainWindow):
self.punch_btn = self.toolbarplugins.addAction(
QtGui.QIcon(self.app.resource_location + '/punch32.png'), _("Punch Gerber"))
self.calculators_btn = self.toolbarplugins.addAction(
- QtGui.QIcon(self.app.resource_location + '/calculator24.png'), _("Calculators"))
+ QtGui.QIcon(self.app.resource_location + '/calculator32.png'), _("Calculators"))
self.toolbarplugins.addSeparator()
@@ -2642,7 +2661,7 @@ class MainGUI(QtWidgets.QMainWindow):
self.geo_add_buffer_btn = self.geo_edit_toolbar.addAction(
QtGui.QIcon(self.app.resource_location + '/buffer16-2.png'), _('Add Buffer'))
self.geo_add_paint_btn = self.geo_edit_toolbar.addAction(
- QtGui.QIcon(self.app.resource_location + '/paint20_1.png'), _('Paint Shape'))
+ QtGui.QIcon(self.app.resource_location + '/paint32.png'), _('Paint Shape'))
self.geo_eraser_btn = self.geo_edit_toolbar.addAction(
QtGui.QIcon(self.app.resource_location + '/eraser26.png'), _('Eraser'))
@@ -3021,7 +3040,8 @@ class MainGUI(QtWidgets.QMainWindow):
# PDF Import
if key == QtCore.Qt.Key.Key_Q:
- self.app.pdf_tool.run()
+ # self.app.pdf_tool.run()
+ pass
# Save Project
if key == QtCore.Qt.Key.Key_S:
@@ -4587,8 +4607,9 @@ class ShortcutsTab(QtWidgets.QWidget):
self.sh_tab_layout.addWidget(self.sh_title)
self.sh_tab_layout.addLayout(self.sh_hlay)
- self.app_sh_msg = (
- '''%s
+ self.app_sh_title = "%s
" % _("General Shortcut list")
+
+ self.app_sh_no_mod = """
@@ -4611,6 +4632,10 @@ class ShortcutsTab(QtWidgets.QWidget):
| %s |
%s |
+
+ | %s |
+ %s |
+
| |
|
@@ -4680,68 +4705,46 @@ class ShortcutsTab(QtWidgets.QWidget):
%s |
- | '%s' |
- %s |
-
-
- | '%s' |
+ %s |
%s |
+
+
+ """ % (
+ _('F3'), _("SHOW SHORTCUT LIST"),
+ _('1'), _("Switch to Project Tab"),
+ _('2'), _("Switch to Selected Tab"),
+ _('3'), _("Switch to Tool Tab"),
+ _('B'), _("New Gerber"),
+ _('E'), _("Edit Object (if selected)"),
+ _('G'), _("Grid On/Off"),
+ _('J'), _("Jump to Coordinates"),
+ _('L'), _("New Excellon"),
+ _('M'), _("Move Obj"),
+ _('N'), _("New Geometry"),
+ _('O'), _("Set Origin"),
+ _('Q'), _("Change Units"),
+ _('P'), _("Open Properties Plugin"),
+ _('R'), _("Rotate by 90 degree CW"),
+ _('S'), _("Shell Toggle"),
+ _('T'), _("Add a Tool (when in Geometry Selected Tab or in Tools NCC or Tools Paint)"),
+ _('V'), _("Zoom Fit"),
+ _('X'), _("Flip on X_axis"),
+ _('Y'), _("Flip on Y_axis"),
+ _('-'), _("Zoom Out"),
+ _('='), _("Zoom In"),
+ )
+
+ self.app_sh_ctrl_mod = """
+
+
| |
|
- | %s |
- %s |
-
-
- | %s |
- %s |
-
-
- | %s |
- %s |
-
-
- | %s |
- %s |
-
-
- | %s |
- %s |
-
-
- | %s |
- %s |
-
-
- | %s |
- %s |
-
-
- | %s |
- %s |
-
-
- | %s |
- %s |
-
-
- | %s |
- %s |
-
-
- | %s |
- %s |
-
-
- | %s |
- %s |
-
-
- | |
- |
+ %s |
+ %s |
| %s |
@@ -4783,305 +4786,346 @@ class ShortcutsTab(QtWidgets.QWidget):
%s |
%s |
-
- | %s |
- %s |
-
-
- | %s |
- %s |
-
-
- | %s |
- %s |
-
-
- | |
- |
-
-
- | %s |
- %s |
-
-
- | %s |
- %s |
-
-
- | %s |
- %s |
-
-
- | %s |
- %s |
-
-
-
- | %s |
- %s |
-
-
-
- | %s |
- %s |
-
-
- | %s |
- %s |
-
-
- | %s |
- %s |
-
-
- | %s |
- %s |
-
-
- | %s |
- %s |
-
-
- | %s |
- %s |
-
-
- | %s |
- %s |
-
-
- | %s |
- %s |
-
-
- | %s |
- %s |
-
-
- | %s |
- %s |
-
-
- | %s |
- %s |
-
-
- | %s |
- %s |
-
-
- | %s |
- %s |
-
-
- | %s |
- %s |
-
-
- | %s |
- %s |
-
-
- | %s |
- %s |
-
-
- | %s |
- %s |
-
-
- | %s |
- %s |
-
-
- | %s |
- %s |
-
-
- |
- %s |
-
-
- | %s |
- %s |
-
-
- | %s |
- %s |
-
-
- | %s |
- %s |
-
-
- | |
- |
-
-
- | %s |
- %s |
-
-
- | |
- |
-
-
- | %s |
- %s |
-
-
-
- | %s |
- %s |
-
-
- | |
- |
-
-
- | %s |
- %s |
-
-
- | %s |
- %s |
-
-
- | %s |
- %s |
-
-
- | %s |
- %s |
-
-
- | %s |
- %s |
-
-
- | %s |
- %s |
-
-
- | '%s' |
- %s |
-
-
- | %s |
- %s |
-
-
- | %s |
- %s |
-
- ''' %
- (
- _("General Shortcut list"),
- _('F3'), _("SHOW SHORTCUT LIST"),
- _('1'), _("Switch to Project Tab"),
- _('2'), _("Switch to Selected Tab"),
- _('3'), _("Switch to Tool Tab"),
- _('B'), _("New Gerber"),
- _('E'), _("Edit Object (if selected)"),
- _('G'), _("Grid On/Off"),
- _('J'), _("Jump to Coordinates"),
- _('L'), _("New Excellon"),
- _('M'), _("Move Obj"),
- _('N'), _("New Geometry"),
- _('O'), _("Set Origin"),
- _('Q'), _("Change Units"),
- _('P'), _("Open Properties Plugin"),
- _('R'), _("Rotate by 90 degree CW"),
- _('S'), _("Shell Toggle"),
- _('T'), _("Add a Tool (when in Geometry Selected Tab or in Tools NCC or Tools Paint)"),
- _('V'), _("Zoom Fit"),
- _('X'), _("Flip on X_axis"),
- _('Y'), _("Flip on Y_axis"),
- _('-'), _("Zoom Out"),
- _('='), _("Zoom In"),
-
- # CTRL section
- _('Ctrl+A'), _("Select All"),
- _('Ctrl+C'), _("Copy Obj"),
- _('Ctrl+D'), _("Open Tools Database"),
- _('Ctrl+E'), _("Open Excellon File"),
- _('Ctrl+G'), _("Open Gerber File"),
- _('Ctrl+M'), _("Distance Tool"),
- _('Ctrl+N'), _("New Project"),
- _('Ctrl+O'), _("Open Project"),
- _('Ctrl+P'), _("Print (PDF)"),
- _('Ctrl+Q'), _("PDF Import Tool"),
- _('Ctrl+S'), _("Save Project"),
- _('Ctrl+F10'), _("Toggle Plot Area"),
-
- # SHIFT section
- _('Shift+A'), _("Toggle the axis"),
- _('Shift+C'), _("Copy Obj_Name"),
- _('Shift+E'), _("Toggle Code Editor"),
- _('Shift+G'), _("Toggle Grid Lines"),
- _('Shift+H'), _("Toggle HUD"),
- _('Shift+J'), _("Locate in Object"),
- _('Shift+M'), _("Distance Minimum Tool"),
- _('Shift+P'), _("Open Preferences Window"),
- _('Shift+R'), _("Rotate by 90 degree CCW"),
- _('Shift+S'), _("Run a Script"),
- _('Shift+W'), _("Toggle the workspace"),
- _('Shift+X'), _("Skew on X axis"),
- _('Shift+Y'), _("Skew on Y axis"),
-
- # ALT section
- _('Alt+A'), _("Align Objects"),
- _('Alt+B'), _("Markers"),
- _('Alt+C'), _("Calculators"),
- _('Alt+D'), _("2-Sided PCB"),
- _('Alt+E'), _("Extract"),
- _('Alt+F'), _("Fiducials"),
- _('Alt+G'), _("Invert Gerber"),
- _('Alt+H'), _("Punch Gerber"),
- _('Alt+I'), _("Isolation"),
- _('Alt+J'), _("Copper Thieving"),
- _('Alt+K'), _("Solder Paste Dispensing"),
- _('Alt+L'), _("Film PCB"),
- _('Alt+M'), _("Milling"),
- _('Alt+N'), _("Non-Copper Clearing"),
- _('Alt+O'), _("Optimal"),
- _('Alt+P'), _("Paint Area"),
- _('Alt+Q'), _("QRCode"),
- _('Alt+R'), _("Rules Check"),
- _('Alt+S'), _("View File Source"),
- _('Alt+T'), _("Transformations"),
- _('Alt+W'), _("Subtract"),
- _('Alt+X'), _("Cutout PCB"),
- _('Alt+Z'), _("Panelize PCB"),
- _('Alt+1'), _("Enable all"),
- _('Alt+2'), _("Disable all"),
- _('Alt+3'), _("Enable Non-selected Objects"),
- _('Alt+4'), _("Disable Non-selected Objects"),
- _('Alt+F10'), _("Toggle Full Screen"),
-
- # CTRL + ALT section
- _('Ctrl+Alt+X'), _("Abort current task (gracefully)"),
-
- # CTRL + SHIFT section
- _('Ctrl+Shift+S'), _("Save Project As"),
- _('Ctrl+Shift+V'), _("Paste Special. "
- "Will convert a Windows path style to the one required in Tcl Shell"),
-
- # F keys section
- _('F1'), _("Open Online Manual"),
- _('F2'), _("Rename Objects"),
- _('F4'), _("Open Online Tutorials"),
- _('F5'), _("Refresh Plots"),
- _('Del'), _("Delete Object"),
- _('Del'), _("Alternate: Delete Tool"),
- _('`'), _("(left to Key_1)Toggle Notebook Area (Left Side)"),
- _('Space'), _("En(Dis)able Obj Plot"),
- _('Esc'), _("Deselects all objects")
- )
+ """ % (
+ # CTRL section
+ _('Ctrl+A'), _("Select All"),
+ _('Ctrl+C'), _("Copy Obj"),
+ _('Ctrl+D'), _("Open Tools Database"),
+ _('Ctrl+E'), _("Open Excellon File"),
+ _('Ctrl+G'), _("Open Gerber File"),
+ _('Ctrl+M'), _("Distance Tool"),
+ _('Ctrl+N'), _("New Project"),
+ _('Ctrl+O'), _("Open Project"),
+ _('Ctrl+P'), _("Print (PDF)"),
+ _('Ctrl+S'), _("Save Project"),
+ _('Ctrl+F10'), _("Toggle Plot Area"),
)
+ self.app_sh_shift_mod = """
+
+
+
+ | |
+ |
+
+
+ | %s |
+ %s |
+
+
+ | %s |
+ %s |
+
+
+ | %s |
+ %s |
+
+
+ | %s |
+ %s |
+
+
+ | %s |
+ %s |
+
+
+ | %s |
+ %s |
+
+
+ | %s |
+ %s |
+
+
+ | %s |
+ %s |
+
+
+ | %s |
+ %s |
+
+
+ | %s |
+ %s |
+
+
+ | %s |
+ %s |
+
+
+ | %s |
+ %s |
+
+
+ | %s |
+ %s |
+
+
+
+ """ % (
+ # SHIFT section
+ _('Shift+A'), _("Toggle the axis"),
+ _('Shift+C'), _("Copy Obj_Name"),
+ _('Shift+E'), _("Toggle Code Editor"),
+ _('Shift+G'), _("Toggle Grid Lines"),
+ _('Shift+H'), _("Toggle HUD"),
+ _('Shift+J'), _("Locate in Object"),
+ _('Shift+M'), _("Distance Minimum Tool"),
+ _('Shift+P'), _("Open Preferences Window"),
+ _('Shift+R'), _("Rotate by 90 degree CCW"),
+ _('Shift+S'), _("Run a Script"),
+ _('Shift+W'), _("Toggle the workspace"),
+ _('Shift+X'), _("Skew on X axis"),
+ _('Shift+Y'), _("Skew on Y axis"),
+ )
+
+ self.app_sh_alt_mod = """
+
+
+
+ | |
+ |
+
+
+ | %s |
+ %s |
+
+
+ | %s |
+ %s |
+
+
+ | %s |
+ %s |
+
+
+ | %s |
+ %s |
+
+
+ | %s |
+ %s |
+
+
+ | %s |
+ %s |
+
+
+ | %s |
+ %s |
+
+
+ | %s |
+ %s |
+
+
+ | %s |
+ %s |
+
+
+ | %s |
+ %s |
+
+
+ | %s |
+ %s |
+
+
+ | %s |
+ %s |
+
+
+ | %s |
+ %s |
+
+
+ | %s |
+ %s |
+
+
+ | %s |
+ %s |
+
+
+ | %s |
+ %s |
+
+
+ | %s |
+ %s |
+
+
+ | %s |
+ %s |
+
+
+ | T |
+ %s |
+
+
+ | %s |
+ %s |
+
+
+ | %s |
+ %s |
+
+
+ | %s |
+ %s |
+
+
+ | '%s' |
+ %s |
+
+
+ | '%s' |
+ %s |
+
+
+ | '%s' |
+ %s |
+
+
+ | '%s' |
+ %s |
+
+
+ | '%s' |
+ %s |
+
+
+ | '%s' |
+ %s |
+
+
+
+ """ % (
+ # ALT section
+ _('Alt+A'), _("Align Objects"),
+ _('Alt+B'), _("Markers"),
+ _('Alt+C'), _("Calculators"),
+ _('Alt+D'), _("2-Sided PCB"),
+ _('Alt+E'), _("Extract"),
+ _('Alt+F'), _("Fiducials"),
+ _('Alt+G'), _("Invert Gerber"),
+ _('Alt+H'), _("Punch Gerber"),
+ _('Alt+I'), _("Isolation"),
+ _('Alt+J'), _("Copper Thieving"),
+ _('Alt+K'), _("Solder Paste Dispensing"),
+ _('Alt+L'), _("Film PCB"),
+ _('Alt+M'), _("Milling"),
+ _('Alt+N'), _("Non-Copper Clearing"),
+ _('Alt+O'), _("Optimal"),
+ _('Alt+P'), _("Paint Area"),
+ _('Alt+Q'), _("QRCode"),
+ _('Alt+R'), _("Rules Check"),
+ _('Alt+S'), _("View File Source"),
+ _('Alt+T'), _("Transformations"),
+ _('Alt+W'), _("Subtract"),
+ _('Alt+X'), _("Cutout PCB"),
+ _('Alt+Z'), _("Panelize PCB"),
+ _('Alt+1'), _("Enable all"),
+ _('Alt+2'), _("Disable all"),
+ _('Alt+3'), _("Enable Non-selected Objects"),
+ _('Alt+4'), _("Disable Non-selected Objects"),
+ _('Alt+F10'), _("Toggle Full Screen"),
+ )
+
+ self.app_sh_combo_mod = """
+
+
+
+ | |
+ |
+
+
+ | %s |
+ %s |
+
+
+ | %s |
+ %s |
+
+
+ | %s |
+ %s |
+
+
+
+ """ % (
+ # CTRL + ALT section
+ _('Ctrl+Alt+X'), _("Abort current task (gracefully)"),
+
+ # CTRL + SHIFT section
+ _('Ctrl+Shift+S'), _("Save Project As"),
+ _('Ctrl+Shift+V'), _("Paste Special. "
+ "Will convert a Windows path style to the one required in Tcl Shell"),
+
+ )
+
+ self.app_sh_div = """
+
+
+
+ | |
+ |
+
+
+ | %s |
+ %s |
+
+
+ | %s |
+ %s |
+
+
+ | %s |
+ %s |
+
+
+ | %s |
+ %s |
+
+
+ | %s |
+ %s |
+
+
+ | %s |
+ %s |
+
+
+ | %s |
+ %s |
+
+
+ | %s |
+ %s |
+
+
+ | %s |
+ %s |
+
+
+
+ """ % (
+ # F keys section
+ _('F1'), _("Open Online Manual"),
+ _('F2'), _("Rename Objects"),
+ _('F4'), _("Open Online Tutorials"),
+ _('F5'), _("Refresh Plots"),
+ _('Del'), _("Delete Object"),
+ _('Del'), _("Alternate: Delete Tool"),
+ _('`'), _("(left to Key_1)Toggle Notebook Area (Left Side)"),
+ _('Space'), _("En(Dis)able Obj Plot"),
+ _('Esc'), _("Deselects all objects")
+ )
+
+ self.app_sh_msg = self.app_sh_title + self.app_sh_no_mod + self.app_sh_ctrl_mod + self.app_sh_shift_mod + \
+ self.app_sh_alt_mod + self.app_sh_combo_mod + self.app_sh_div
self.sh_app = QtWidgets.QTextEdit()
self.sh_app.setTextInteractionFlags(QtCore.Qt.TextInteractionFlag.NoTextInteraction)
@@ -5090,9 +5134,9 @@ class ShortcutsTab(QtWidgets.QWidget):
self.sh_hlay.addWidget(self.sh_app)
editor_title = """
- %s
-
- """ % _("Editor Shortcut list")
+ %s
+
+ """ % _("Editor Shortcut list")
# GEOMETRY EDITOR SHORTCUT LIST
geo_sh_messages = """
diff --git a/appGUI/ObjectUI.py b/appGUI/ObjectUI.py
index a7b757eb..f889a195 100644
--- a/appGUI/ObjectUI.py
+++ b/appGUI/ObjectUI.py
@@ -1128,7 +1128,7 @@ class GeometryObjectUI(ObjectUI):
# Paint Button
self.paint_tool_button = FCButton(_('Paint'))
- self.paint_tool_button.setIcon(QtGui.QIcon(self.app.resource_location + '/paint20_1.png'))
+ self.paint_tool_button.setIcon(QtGui.QIcon(self.app.resource_location + '/paint32.png'))
self.paint_tool_button.setToolTip(
_("Creates tool paths to cover the\n"
"whole area of a polygon.")
diff --git a/appGUI/VisPyCanvas.py b/appGUI/VisPyCanvas.py
index 35d86aa4..ded3db81 100644
--- a/appGUI/VisPyCanvas.py
+++ b/appGUI/VisPyCanvas.py
@@ -51,9 +51,13 @@ class VisPyCanvas(scene.SceneCanvas):
tick_color = Color('#000000')
back_color = str(QPalette().color(QPalette.ColorRole.Window).name())
else:
- theme_color = Color('#000000')
+ if theme not in ['default', 'light']:
+ theme_color = Color('#202124')
+ back_color = Color('#202124')
+ else:
+ theme_color = Color('#000000')
+ back_color = Color('#000000')
tick_color = Color('gray')
- back_color = Color('#000000')
# back_color = Color('#272822') # darker
# back_color = Color('#3c3f41') # lighter
diff --git a/appGUI/preferences/general/GeneralAPPSetGroupUI.py b/appGUI/preferences/general/GeneralAPPSetGroupUI.py
index b7d92edf..a6b0c158 100644
--- a/appGUI/preferences/general/GeneralAPPSetGroupUI.py
+++ b/appGUI/preferences/general/GeneralAPPSetGroupUI.py
@@ -472,7 +472,7 @@ class GeneralAPPSetGroupUI(OptionsGroupUI):
_("Select the GIF that show activity when FlatCAM is active.")
)
self.activity_combo = FCComboBox()
- self.activity_combo.addItems(['Ball black', 'Ball green', 'Arrow green', 'Eclipse green'])
+ self.activity_combo.addItems(['Ball black', 'Ball green', 'Arrow green', 'Spinner green', 'Eclipse green'])
par_grid.addWidget(self.activity_label, 10, 0)
par_grid.addWidget(self.activity_combo, 10, 1)
diff --git a/appGUI/themes/dark_style_sheet.py b/appGUI/themes/dark_style_sheet.py
index 47250b47..fa01f3d7 100644
--- a/appGUI/themes/dark_style_sheet.py
+++ b/appGUI/themes/dark_style_sheet.py
@@ -29,7 +29,7 @@ QToolBar * {
}
QWidget {
background-color: rgba(32.000, 33.000, 36.000, 1.000);
- color: rgba(228.000, 231.000, 235.000, 1.000);
+ color: rgba(170.000, 170.000, 170.000, 1.000);
selection-background-color: rgba(138.000, 180.000, 247.000, 1.000);
selection-color: rgba(32.000, 33.000, 36.000, 1.000);
}
@@ -91,9 +91,7 @@ QStatusBar QWidget {
background-color: transparent;
padding: 0px;
border-radius: 0px;
-}
-QStatusBar QWidget:hover {
- background-color: rgba(68.000, 70.000, 74.000, 1.000);
+ margin: 0px;
}
QStatusBar QWidget:pressed {
background-color: rgba(79.000, 80.000, 84.000, 1.000);
@@ -153,7 +151,6 @@ QGroupBox::title {
QMenuBar {
background-color: rgba(32.000, 33.000, 36.000, 1.000);
padding: 2px;
- border-bottom: 1px solid rgba(63.000, 64.000, 66.000, 1.000);
}
QMenuBar::item {
background: transparent;
@@ -171,10 +168,10 @@ QMenuBar::item:pressed {
}
QToolBar {
background-color: rgba(41.000, 42.000, 45.000, 1.000);
- padding: 0px;
+ padding: 1x;
font-weight: bold;
spacing: 1px;
- margin: 0px;
+ margin: 1px;
}
QToolBar::handle:horizontal {
width: 10px;
@@ -549,11 +546,7 @@ QDockWidget::float-button:hover {
background-color: rgba(30.000, 43.000, 60.000, 1.000);
border-radius: 2px
}
-QFrame {
- border: 1px solid rgba(63.000, 64.000, 66.000, 1.000);
- padding: 1px;
- border-radius: 4px;
-}
+
QLCDNumber {
color: rgba(228.000, 231.000, 235.000, 1.000);
min-width: 2em;
@@ -585,7 +578,6 @@ QSplitter {
border: none;
}
QSplitter::handle {
- background-color: rgba(63.000, 64.000, 66.000, 1.000);
margin: 1px 3px;
}
QSplitter::handle:hover {
diff --git a/appMain.py b/appMain.py
index 0362e04d..a5323e43 100644
--- a/appMain.py
+++ b/appMain.py
@@ -1929,7 +1929,7 @@ class App(QtCore.QObject):
self.paste_tool.install(icon=QtGui.QIcon(self.resource_location + '/solderpastebis32.png'))
self.calculator_tool = ToolCalculator(self)
- self.calculator_tool.install(icon=QtGui.QIcon(self.resource_location + '/calculator16.png'), separator=True)
+ self.calculator_tool.install(icon=QtGui.QIcon(self.resource_location + '/calculator32.png'), separator=True)
self.sub_tool = ToolSub(self)
self.sub_tool.install(icon=QtGui.QIcon(self.resource_location + '/sub32.png'),
@@ -1956,7 +1956,7 @@ class App(QtCore.QObject):
before=self.sub_tool.menuAction, separator=True)
self.paint_tool = ToolPaint(self)
- self.paint_tool.install(icon=QtGui.QIcon(self.resource_location + '/paint20_1.png'), pos=self.ui.menu_plugins,
+ self.paint_tool.install(icon=QtGui.QIcon(self.resource_location + '/paint32.png'), pos=self.ui.menu_plugins,
before=self.sub_tool.menuAction, separator=True)
self.isolation_tool = ToolIsolation(self)
@@ -2734,10 +2734,18 @@ class App(QtCore.QObject):
"""
self.defaults.report_usage("editor2object()")
- # do not update a geometry or excellon object unless it comes out of an editor
+ # do not update a Geometry/Excellon/Gerber/GCode object unless it comes out of an editor
if self.call_source == 'app':
return
+ # make sure that when we exit an Editor with a tool active then we make some clean-up
+ try:
+ if self.use_3d_engine:
+ self.plotcanvas.text_cursor.parent = None
+ self.plotcanvas.view.camera.zoom_callback = lambda *args: None
+ except Exception:
+ pass
+
# This is the object that exit from the Editor. It may be the edited object but it can be a new object
# created by the Editor
edited_obj = self.collection.get_active()
@@ -3302,6 +3310,12 @@ class App(QtCore.QObject):
''
+ ''
+ ''
)
)
attributions_label.setOpenExternalLinks(True)
@@ -5679,12 +5693,12 @@ class App(QtCore.QObject):
# dia_box = Dialog_box(title=_("Jump to ..."),
# label=_("Enter the coordinates in format X,Y:"),
- # icon=QtGui.QIcon(self.resource_location + '/jump_to16.png'),
+ # icon=QtGui.QIcon(self.resource_location + '/jump_to32.png'),
# initial_text=dia_box_location)
dia_box = DialogBoxRadio(title=_("Jump to ..."),
label=_("Enter the coordinates in format X,Y:"),
- icon=QtGui.QIcon(self.resource_location + '/jump_to16.png'),
+ icon=QtGui.QIcon(self.resource_location + '/jump_to32.png'),
initial_text=dia_box_location,
reference=self.options['global_jump_ref'],
parent=self.ui)
@@ -8337,7 +8351,7 @@ class App(QtCore.QObject):
"""
dia_box = Dialog_box(title=_("Go to Line ..."),
label='%s:' % _("Line"),
- icon=QtGui.QIcon(self.resource_location + '/jump_to16.png'),
+ icon=QtGui.QIcon(self.resource_location + '/jump_to32.png'),
initial_text='')
try:
line = int(dia_box.location) - 1
diff --git a/appObjects/CNCJobObject.py b/appObjects/CNCJobObject.py
index e795c3ef..e3af96cc 100644
--- a/appObjects/CNCJobObject.py
+++ b/appObjects/CNCJobObject.py
@@ -912,7 +912,7 @@ class CNCJobObject(FlatCAMObj, CNCjob):
pass
if marlin is True:
- gcode += ';Marlin(Repetier) G-CODE GENERATED BY FLATCAM v%s - www.flatcam.org - Version Date: %s\n' % \
+ gcode += ';Marlin(Repetier) G-code generated by FlatCAM Evo v%s - Version Date: %s\n' % \
(str(self.app.version), str(self.app.version_date)) + '\n'
gcode += ';Name: ' + str(self.obj_options['name']) + '\n'
@@ -921,7 +921,7 @@ class CNCJobObject(FlatCAMObj, CNCjob):
gcode += ';Units: ' + self.units.upper() + '\n' + "\n"
gcode += ';Created on ' + time_str + '\n' + '\n'
elif hpgl is True:
- gcode += 'CO "HPGL CODE GENERATED BY FLATCAM v%s - www.flatcam.org - Version Date: %s' % \
+ gcode += 'CO "HPGL code generated by FlatCAM Evo v%s - Version Date: %s' % \
(str(self.app.version), str(self.app.version_date)) + '";\n'
gcode += 'CO "Name: ' + str(self.obj_options['name']) + '";\n'
@@ -930,7 +930,7 @@ class CNCJobObject(FlatCAMObj, CNCjob):
gcode += 'CO "Units: ' + self.units.upper() + '";\n'
gcode += 'CO "Created on ' + time_str + '";\n'
elif probe_pp is True:
- gcode += '(G-CODE GENERATED BY FLATCAM v%s - www.flatcam.org - Version Date: %s)\n' % \
+ gcode += '(G-code generated by FlatCAM Evo v%s - Version Date: %s)\n' % \
(str(self.app.version), str(self.app.version_date)) + '\n'
gcode += '(This GCode tool change is done by using a Probe.)\n' \
@@ -945,7 +945,7 @@ class CNCJobObject(FlatCAMObj, CNCjob):
gcode += '(Units: ' + self.units.upper() + ')\n' + "\n"
gcode += '(Created on ' + time_str + ')\n' + '\n'
elif nccad_pp is True:
- gcode += ';NCCAD9 G-CODE GENERATED BY FLATCAM v%s - www.flatcam.org - Version Date: %s\n' % \
+ gcode += ';NCCAD9 G-code generated by FlatCAM Evo v%s - Version Date: %s\n' % \
(str(self.app.version), str(self.app.version_date)) + '\n'
gcode += ';Name: ' + str(self.obj_options['name']) + '\n'
@@ -954,7 +954,7 @@ class CNCJobObject(FlatCAMObj, CNCjob):
gcode += ';Units: ' + self.units.upper() + '\n' + "\n"
gcode += ';Created on ' + time_str + '\n' + '\n'
else:
- gcode += '%sG-CODE GENERATED BY FLATCAM v%s - www.flatcam.org - Version Date: %s%s\n' % \
+ gcode += '%sG-code generated by FlatCAM Evo v%s - Version Date: %s%s\n' % \
(start_comment, str(self.app.version), str(self.app.version_date), stop_comment) + '\n'
gcode += '%sName: ' % start_comment + str(self.obj_options['name']) + '%s\n' % stop_comment
diff --git a/appPlugins/ToolCalculators.py b/appPlugins/ToolCalculators.py
index de515c71..b1ff4d20 100644
--- a/appPlugins/ToolCalculators.py
+++ b/appPlugins/ToolCalculators.py
@@ -652,7 +652,7 @@ class CalcUI:
# ## Buttons
self.calculate_vshape_button = FCButton(_("Calculate"))
- self.calculate_vshape_button.setIcon(QtGui.QIcon(self.app.resource_location + '/calculator16.png'))
+ self.calculate_vshape_button.setIcon(QtGui.QIcon(self.app.resource_location + '/calculator32.png'))
self.calculate_vshape_button.setToolTip(
_("Calculate either the depth of cut or the effective tool diameter.")
@@ -1036,7 +1036,7 @@ class CalcUI:
# ## Buttons
self.calculate_tin_button = FCButton(_("Calculate"))
- self.calculate_tin_button.setIcon(QtGui.QIcon(self.app.resource_location + '/calculator16.png'))
+ self.calculate_tin_button.setIcon(QtGui.QIcon(self.app.resource_location + '/calculator32.png'))
self.calculate_tin_button.setToolTip(
_("Calculate the chemical quantities for the desired volume of tinning solution.")
)
diff --git a/appPlugins/ToolDistance.py b/appPlugins/ToolDistance.py
index a7f4ec28..5cdf862b 100644
--- a/appPlugins/ToolDistance.py
+++ b/appPlugins/ToolDistance.py
@@ -217,10 +217,17 @@ class Distance(AppTool):
if self.ui.big_cursor_cb.get_value():
self.app.on_cursor_type(val="big", control_cursor=True)
self.cursor_color_memory = self.app.plotcanvas.cursor_color
- if self.app.use_3d_engine is True:
- self.app.plotcanvas.cursor_color = '#000000FF'
+
+ if self.app.options["global_theme"] in ['default', 'light']:
+ if self.app.use_3d_engine is True:
+ self.app.plotcanvas.cursor_color = '#000000FF'
+ else:
+ self.app.plotcanvas.cursor_color = '#000000'
else:
- self.app.plotcanvas.cursor_color = '#000000'
+ if self.app.use_3d_engine is True:
+ self.app.plotcanvas.cursor_color = '#AAAAAAFF'
+ else:
+ self.app.plotcanvas.cursor_color = '#AAAAAA'
self.app.app_cursor.enabled = True
self.app.call_source = 'measurement'
diff --git a/appPlugins/ToolPDF.py b/appPlugins/ToolPDF.py
index 0d6ba4b5..1d16c3b6 100644
--- a/appPlugins/ToolPDF.py
+++ b/appPlugins/ToolPDF.py
@@ -56,7 +56,7 @@ class ToolPDF(AppTool):
self.on_open_pdf_click()
def install(self, icon=None, separator=None, **kwargs):
- AppTool.install(self, icon, separator, shortcut='Ctrl+Q', **kwargs)
+ AppTool.install(self, icon, separator, shortcut='', **kwargs)
def set_tool_ui(self):
pass
diff --git a/appPlugins/ToolPaint.py b/appPlugins/ToolPaint.py
index caf3acbd..d87fd415 100644
--- a/appPlugins/ToolPaint.py
+++ b/appPlugins/ToolPaint.py
@@ -2438,9 +2438,8 @@ class ToolPaint(AppTool, Gerber):
# ## If iterable, expand recursively.
try:
for geo in geometry:
- if geo and not geo.is_empty and geo.is_valid:
+ if geo and not geo.is_empty:
recurse(geometry=geo, reset=False)
-
# ## Not iterable, do the actual indexing and add.
except TypeError:
if isinstance(geometry, LinearRing):
@@ -2519,7 +2518,7 @@ class ToolPaint(AppTool, Gerber):
try:
multigeo = geometry.geoms if isinstance(geometry, (MultiPolygon, MultiLineString)) else geometry
for geo in multigeo:
- if geo and not geo.is_empty and geo.is_valid:
+ if geo and not geo.is_empty:
recurse(geometry=geo, reset=False)
# ## Not iterable, do the actual indexing and add.
except TypeError:
diff --git a/appTool.py b/appTool.py
index 3863cd83..e32aff78 100644
--- a/appTool.py
+++ b/appTool.py
@@ -114,6 +114,47 @@ class AppTool(QtWidgets.QWidget):
# Put ourselves in the appGUI
self.app.ui.plugin_scroll_area.setWidget(self)
+ # TODO Hack, should find the root cause and fix
+ # for whatever reason the stylesheet for dark mode is lost at some point here, so we should reapply it for the
+ # QWidget
+ if self.app.options['global_theme'] not in ['default', 'light']:
+ self.setStyleSheet(
+ '''
+ QWidget {
+ background-color: rgba(32.000, 33.000, 36.000, 1.000);
+ color: rgba(170.000, 170.000, 170.000, 1.000);
+ selection-background-color: rgba(138.000, 180.000, 247.000, 1.000);
+ selection-color: rgba(32.000, 33.000, 36.000, 1.000);
+ }
+ QWidget:disabled {
+ color: rgba(105.000, 113.000, 119.000, 1.000);
+ selection-background-color: rgba(83.000, 87.000, 91.000, 1.000);
+ selection-color: rgba(105.000, 113.000, 119.000, 1.000);
+ }
+ QWidget {
+ backward-icon: url(${path}/themes/dark/svg/arrow_upward__icon-foreground__rotate-270.svg);
+ forward-icon: url(${path}/themes/dark/svg/arrow_upward__icon-foreground__rotate-90.svg);
+ leftarrow-icon: url(${path}/themes/dark/svg/arrow_upward__icon-foreground__rotate-270.svg);
+ rightarrow-icon: url(${path}/themes/dark/svg/arrow_upward__icon-foreground__rotate-90.svg);
+ dialog-ok-icon: url(${path}/themes/dark/svg/check__icon-foreground.svg);
+ dialog-cancel-icon: url(${path}/themes/dark/svg/close__icon-foreground.svg);
+ dialog-yes-icon: url(${path}/themes/dark/svg/check_circle__icon-foreground.svg);
+ dialog-no-icon: url(${path}/themes/dark/svg/cancel__icon-foreground.svg);
+ dialog-apply-icon: url(${path}/themes/dark/svg/check__icon-foreground.svg);
+ dialog-reset-icon: url(${path}/themes/dark/svg/restart_alt__icon-foreground.svg);
+ dialog-save-icon: url(${path}/themes/dark/svg/save__icon-foreground.svg);
+ dialog-discard-icon: url(${path}/themes/dark/svg/delete__icon-foreground.svg);
+ dialog-close-icon: url(${path}/themes/dark/svg/close__icon-foreground.svg);
+ dialog-open-icon: url(${path}/themes/dark/svg/folder_open__icon-foreground.svg);
+ dialog-help-icon: url(${path}/themes/dark/svg/help__icon-foreground.svg);
+ filedialog-parent-directory-icon: url(${path}/themes/dark/svg/arrow_upward__icon-foreground.svg);
+ filedialog-new-directory-icon: url(${path}/themes/dark/svg/create_new_folder__icon-foreground.svg);
+ titlebar-close-icon: url(${path}/themes/dark/svg/close__icon-foreground.svg);
+ titlebar-normal-icon: url(${path}/themes/dark/svg/flip_to_front__icon-foreground.svg);
+ }
+ '''
+ )
+
# Switch notebook to tool page
self.app.ui.notebook.setCurrentWidget(self.app.ui.plugin_tab)
diff --git a/assets/resources/active_5.gif b/assets/resources/active_5.gif
new file mode 100644
index 00000000..44b09b49
Binary files /dev/null and b/assets/resources/active_5.gif differ
diff --git a/assets/resources/active_5_static 0.png b/assets/resources/active_5_static 0.png
new file mode 100644
index 00000000..756e98af
Binary files /dev/null and b/assets/resources/active_5_static 0.png differ
diff --git a/assets/resources/active_5_static.png b/assets/resources/active_5_static.png
new file mode 100644
index 00000000..48945bd3
Binary files /dev/null and b/assets/resources/active_5_static.png differ
diff --git a/assets/resources/align32.png b/assets/resources/align32.png
index b81511a2..0b874bce 100644
Binary files a/assets/resources/align32.png and b/assets/resources/align32.png differ
diff --git a/assets/resources/axis18.png b/assets/resources/axis18.png
new file mode 100644
index 00000000..6618c6d7
Binary files /dev/null and b/assets/resources/axis18.png differ
diff --git a/assets/resources/calculator32.png b/assets/resources/calculator32.png
new file mode 100644
index 00000000..e678fe89
Binary files /dev/null and b/assets/resources/calculator32.png differ
diff --git a/assets/resources/copperfill32.png b/assets/resources/copperfill32.png
index 569f9f9b..4cb5ae67 100644
Binary files a/assets/resources/copperfill32.png and b/assets/resources/copperfill32.png differ
diff --git a/assets/resources/copy_file32.png b/assets/resources/copy_file32.png
index 878e6c83..0b325090 100644
Binary files a/assets/resources/copy_file32.png and b/assets/resources/copy_file32.png differ
diff --git a/assets/resources/corners_32.png b/assets/resources/corners_32.png
index b9f87261..fcc755d0 100644
Binary files a/assets/resources/corners_32.png and b/assets/resources/corners_32.png differ
diff --git a/assets/resources/custom_origin32.png b/assets/resources/custom_origin32.png
new file mode 100644
index 00000000..38c288d7
Binary files /dev/null and b/assets/resources/custom_origin32.png differ
diff --git a/assets/resources/cut32.png b/assets/resources/cut32.png
index dc68ca93..2d5bb734 100644
Binary files a/assets/resources/cut32.png and b/assets/resources/cut32.png differ
diff --git a/assets/resources/dark_resources/active.gif b/assets/resources/dark_resources/active.gif
index b2db1071..a457111c 100644
Binary files a/assets/resources/dark_resources/active.gif and b/assets/resources/dark_resources/active.gif differ
diff --git a/assets/resources/dark_resources/active_2.gif b/assets/resources/dark_resources/active_2.gif
index b9b7f7ba..c7e898c7 100644
Binary files a/assets/resources/dark_resources/active_2.gif and b/assets/resources/dark_resources/active_2.gif differ
diff --git a/assets/resources/dark_resources/active_3.gif b/assets/resources/dark_resources/active_3.gif
index e8e440a9..dae99274 100644
Binary files a/assets/resources/dark_resources/active_3.gif and b/assets/resources/dark_resources/active_3.gif differ
diff --git a/assets/resources/dark_resources/active_4.gif b/assets/resources/dark_resources/active_4.gif
index 98a32918..17249aec 100644
Binary files a/assets/resources/dark_resources/active_4.gif and b/assets/resources/dark_resources/active_4.gif differ
diff --git a/assets/resources/dark_resources/active_5.gif b/assets/resources/dark_resources/active_5.gif
new file mode 100644
index 00000000..9916884c
Binary files /dev/null and b/assets/resources/dark_resources/active_5.gif differ
diff --git a/assets/resources/dark_resources/active_5_static.png b/assets/resources/dark_resources/active_5_static.png
new file mode 100644
index 00000000..48945bd3
Binary files /dev/null and b/assets/resources/dark_resources/active_5_static.png differ
diff --git a/assets/resources/dark_resources/active_static.png b/assets/resources/dark_resources/active_static.png
index d583dbf5..8dde91e9 100644
Binary files a/assets/resources/dark_resources/active_static.png and b/assets/resources/dark_resources/active_static.png differ
diff --git a/assets/resources/dark_resources/align32.png b/assets/resources/dark_resources/align32.png
index 4249e35a..66e091d6 100644
Binary files a/assets/resources/dark_resources/align32.png and b/assets/resources/dark_resources/align32.png differ
diff --git a/assets/resources/dark_resources/axis18.png b/assets/resources/dark_resources/axis18.png
new file mode 100644
index 00000000..42f842df
Binary files /dev/null and b/assets/resources/dark_resources/axis18.png differ
diff --git a/assets/resources/dark_resources/calculator32.png b/assets/resources/dark_resources/calculator32.png
new file mode 100644
index 00000000..8cab2e04
Binary files /dev/null and b/assets/resources/dark_resources/calculator32.png differ
diff --git a/assets/resources/dark_resources/copperfill32.png b/assets/resources/dark_resources/copperfill32.png
index 5f420827..80e08c93 100644
Binary files a/assets/resources/dark_resources/copperfill32.png and b/assets/resources/dark_resources/copperfill32.png differ
diff --git a/assets/resources/dark_resources/copy_file32.png b/assets/resources/dark_resources/copy_file32.png
index d1f08ddf..578d1b2e 100644
Binary files a/assets/resources/dark_resources/copy_file32.png and b/assets/resources/dark_resources/copy_file32.png differ
diff --git a/assets/resources/dark_resources/corners_32.png b/assets/resources/dark_resources/corners_32.png
index c5ad0f00..e9029224 100644
Binary files a/assets/resources/dark_resources/corners_32.png and b/assets/resources/dark_resources/corners_32.png differ
diff --git a/assets/resources/dark_resources/custom_origin32.png b/assets/resources/dark_resources/custom_origin32.png
new file mode 100644
index 00000000..461d3ef1
Binary files /dev/null and b/assets/resources/dark_resources/custom_origin32.png differ
diff --git a/assets/resources/dark_resources/cut32.png b/assets/resources/dark_resources/cut32.png
index ca9db1ec..597a72cd 100644
Binary files a/assets/resources/dark_resources/cut32.png and b/assets/resources/dark_resources/cut32.png differ
diff --git a/assets/resources/dark_resources/distance32.png b/assets/resources/dark_resources/distance32.png
index 1aa556f4..efe1a30d 100644
Binary files a/assets/resources/dark_resources/distance32.png and b/assets/resources/dark_resources/distance32.png differ
diff --git a/assets/resources/dark_resources/distance_min32.png b/assets/resources/dark_resources/distance_min32.png
index a3ff60af..c33b2767 100644
Binary files a/assets/resources/dark_resources/distance_min32.png and b/assets/resources/dark_resources/distance_min32.png differ
diff --git a/assets/resources/dark_resources/doubleside32.png b/assets/resources/dark_resources/doubleside32.png
index fa79cdf8..80bd22d9 100644
Binary files a/assets/resources/dark_resources/doubleside32.png and b/assets/resources/dark_resources/doubleside32.png differ
diff --git a/assets/resources/dark_resources/drill32.png b/assets/resources/dark_resources/drill32.png
index 5e451469..e6bd086f 100644
Binary files a/assets/resources/dark_resources/drill32.png and b/assets/resources/dark_resources/drill32.png differ
diff --git a/assets/resources/dark_resources/edit_file32.png b/assets/resources/dark_resources/edit_file32.png
index 77ce0e1d..b4dfe584 100644
Binary files a/assets/resources/dark_resources/edit_file32.png and b/assets/resources/dark_resources/edit_file32.png differ
diff --git a/assets/resources/dark_resources/extract32.png b/assets/resources/dark_resources/extract32.png
index fa026ea5..08a78411 100644
Binary files a/assets/resources/dark_resources/extract32.png and b/assets/resources/dark_resources/extract32.png differ
diff --git a/assets/resources/dark_resources/extract_drill32.png b/assets/resources/dark_resources/extract_drill32.png
deleted file mode 100644
index 16f1dd72..00000000
Binary files a/assets/resources/dark_resources/extract_drill32.png and /dev/null differ
diff --git a/assets/resources/dark_resources/film32.png b/assets/resources/dark_resources/film32.png
index cd16dec9..d38094b2 100644
Binary files a/assets/resources/dark_resources/film32.png and b/assets/resources/dark_resources/film32.png differ
diff --git a/assets/resources/dark_resources/folder32.png b/assets/resources/dark_resources/folder32.png
index af0da2d8..bd1fbed1 100644
Binary files a/assets/resources/dark_resources/folder32.png and b/assets/resources/dark_resources/folder32.png differ
diff --git a/assets/resources/dark_resources/follow32.png b/assets/resources/dark_resources/follow32.png
index 76bd29e7..6737929f 100644
Binary files a/assets/resources/dark_resources/follow32.png and b/assets/resources/dark_resources/follow32.png differ
diff --git a/assets/resources/dark_resources/grid18.png b/assets/resources/dark_resources/grid18.png
new file mode 100644
index 00000000..0d14da44
Binary files /dev/null and b/assets/resources/dark_resources/grid18.png differ
diff --git a/assets/resources/dark_resources/grid32.png b/assets/resources/dark_resources/grid32.png
index 5929e363..957510aa 100644
Binary files a/assets/resources/dark_resources/grid32.png and b/assets/resources/dark_resources/grid32.png differ
diff --git a/assets/resources/dark_resources/hud18.png b/assets/resources/dark_resources/hud18.png
new file mode 100644
index 00000000..aa3df167
Binary files /dev/null and b/assets/resources/dark_resources/hud18.png differ
diff --git a/assets/resources/dark_resources/iso32.png b/assets/resources/dark_resources/iso32.png
new file mode 100644
index 00000000..30a84890
Binary files /dev/null and b/assets/resources/dark_resources/iso32.png differ
diff --git a/assets/resources/dark_resources/jump_to32.png b/assets/resources/dark_resources/jump_to32.png
index 14e30613..607b77ee 100644
Binary files a/assets/resources/dark_resources/jump_to32.png and b/assets/resources/dark_resources/jump_to32.png differ
diff --git a/assets/resources/dark_resources/level32.png b/assets/resources/dark_resources/level32.png
index 4e82638a..dc0bb059 100644
Binary files a/assets/resources/dark_resources/level32.png and b/assets/resources/dark_resources/level32.png differ
diff --git a/assets/resources/dark_resources/locate32.png b/assets/resources/dark_resources/locate32.png
index 3ade490a..41db2ccd 100644
Binary files a/assets/resources/dark_resources/locate32.png and b/assets/resources/dark_resources/locate32.png differ
diff --git a/assets/resources/dark_resources/milling_tool32.png b/assets/resources/dark_resources/milling_tool32.png
index 3ce4a593..bfead042 100644
Binary files a/assets/resources/dark_resources/milling_tool32.png and b/assets/resources/dark_resources/milling_tool32.png differ
diff --git a/assets/resources/dark_resources/move2origin32.png b/assets/resources/dark_resources/move2origin32.png
new file mode 100644
index 00000000..e5c8e476
Binary files /dev/null and b/assets/resources/dark_resources/move2origin32.png differ
diff --git a/assets/resources/dark_resources/ncc32.png b/assets/resources/dark_resources/ncc32.png
index 5c83a927..6aa16002 100644
Binary files a/assets/resources/dark_resources/ncc32.png and b/assets/resources/dark_resources/ncc32.png differ
diff --git a/assets/resources/dark_resources/open_excellon32.png b/assets/resources/dark_resources/open_excellon32.png
index 518e5083..084c5334 100644
Binary files a/assets/resources/dark_resources/open_excellon32.png and b/assets/resources/dark_resources/open_excellon32.png differ
diff --git a/assets/resources/dark_resources/open_gerber32.png b/assets/resources/dark_resources/open_gerber32.png
new file mode 100644
index 00000000..396d0884
Binary files /dev/null and b/assets/resources/dark_resources/open_gerber32.png differ
diff --git a/assets/resources/dark_resources/origin32.png b/assets/resources/dark_resources/origin32.png
index 5cfd7cb5..8e24cd41 100644
Binary files a/assets/resources/dark_resources/origin32.png and b/assets/resources/dark_resources/origin32.png differ
diff --git a/assets/resources/dark_resources/paint32.png b/assets/resources/dark_resources/paint32.png
new file mode 100644
index 00000000..2374b5e8
Binary files /dev/null and b/assets/resources/dark_resources/paint32.png differ
diff --git a/assets/resources/dark_resources/panelize32.png b/assets/resources/dark_resources/panelize32.png
index ff5ff124..93a47163 100644
Binary files a/assets/resources/dark_resources/panelize32.png and b/assets/resources/dark_resources/panelize32.png differ
diff --git a/assets/resources/dark_resources/punch32.png b/assets/resources/dark_resources/punch32.png
index ef0541a9..97c09fa8 100644
Binary files a/assets/resources/dark_resources/punch32.png and b/assets/resources/dark_resources/punch32.png differ
diff --git a/assets/resources/dark_resources/save_as.png b/assets/resources/dark_resources/save_as.png
index 1b209539..70fbaa25 100644
Binary files a/assets/resources/dark_resources/save_as.png and b/assets/resources/dark_resources/save_as.png differ
diff --git a/assets/resources/dark_resources/save_as_red.png b/assets/resources/dark_resources/save_as_red.png
new file mode 100644
index 00000000..e0821491
Binary files /dev/null and b/assets/resources/dark_resources/save_as_red.png differ
diff --git a/assets/resources/dark_resources/settings18.png b/assets/resources/dark_resources/settings18.png
index 5143f21a..99414df5 100644
Binary files a/assets/resources/dark_resources/settings18.png and b/assets/resources/dark_resources/settings18.png differ
diff --git a/assets/resources/dark_resources/splash.png b/assets/resources/dark_resources/splash.png
index 8d4e7a27..8c9c8e59 100644
Binary files a/assets/resources/dark_resources/splash.png and b/assets/resources/dark_resources/splash.png differ
diff --git a/assets/resources/dark_resources/trash32.png b/assets/resources/dark_resources/trash32.png
index 8ba6f690..bf801016 100644
Binary files a/assets/resources/dark_resources/trash32.png and b/assets/resources/dark_resources/trash32.png differ
diff --git a/assets/resources/distance32.png b/assets/resources/distance32.png
index 62717bb9..efa8e3e9 100644
Binary files a/assets/resources/distance32.png and b/assets/resources/distance32.png differ
diff --git a/assets/resources/distance_min32.png b/assets/resources/distance_min32.png
index e97c1a26..2812e7a6 100644
Binary files a/assets/resources/distance_min32.png and b/assets/resources/distance_min32.png differ
diff --git a/assets/resources/drill32.png b/assets/resources/drill32.png
index 6d9587ed..5f7872a6 100644
Binary files a/assets/resources/drill32.png and b/assets/resources/drill32.png differ
diff --git a/assets/resources/edit_file32.png b/assets/resources/edit_file32.png
index 1aa4896d..44f8500c 100644
Binary files a/assets/resources/edit_file32.png and b/assets/resources/edit_file32.png differ
diff --git a/assets/resources/extract32.png b/assets/resources/extract32.png
index adc61502..0b735202 100644
Binary files a/assets/resources/extract32.png and b/assets/resources/extract32.png differ
diff --git a/assets/resources/extract_drill32.png b/assets/resources/extract_drill32.png
deleted file mode 100644
index 41f740f2..00000000
Binary files a/assets/resources/extract_drill32.png and /dev/null differ
diff --git a/assets/resources/folder32.png b/assets/resources/folder32.png
index c24eeeca..85f73706 100644
Binary files a/assets/resources/folder32.png and b/assets/resources/folder32.png differ
diff --git a/assets/resources/follow32.png b/assets/resources/follow32.png
index fdfe3195..1bd9dc69 100644
Binary files a/assets/resources/follow32.png and b/assets/resources/follow32.png differ
diff --git a/assets/resources/grid18.png b/assets/resources/grid18.png
new file mode 100644
index 00000000..0d4f7c0a
Binary files /dev/null and b/assets/resources/grid18.png differ
diff --git a/assets/resources/grid32.png b/assets/resources/grid32.png
index b2d7ca1b..775bfcac 100644
Binary files a/assets/resources/grid32.png and b/assets/resources/grid32.png differ
diff --git a/assets/resources/hud18.png b/assets/resources/hud18.png
new file mode 100644
index 00000000..2147b661
Binary files /dev/null and b/assets/resources/hud18.png differ
diff --git a/assets/resources/iso32.png b/assets/resources/iso32.png
new file mode 100644
index 00000000..5a997e7b
Binary files /dev/null and b/assets/resources/iso32.png differ
diff --git a/assets/resources/jump_to32.png b/assets/resources/jump_to32.png
index d605ba11..86445e58 100644
Binary files a/assets/resources/jump_to32.png and b/assets/resources/jump_to32.png differ
diff --git a/assets/resources/level32.png b/assets/resources/level32.png
index 6fdf04c6..2106e6a6 100644
Binary files a/assets/resources/level32.png and b/assets/resources/level32.png differ
diff --git a/assets/resources/locate32.png b/assets/resources/locate32.png
index 66d630b0..4593d35f 100644
Binary files a/assets/resources/locate32.png and b/assets/resources/locate32.png differ
diff --git a/assets/resources/milling_tool32.png b/assets/resources/milling_tool32.png
index d038984f..ce03039a 100644
Binary files a/assets/resources/milling_tool32.png and b/assets/resources/milling_tool32.png differ
diff --git a/assets/resources/move2origin32.png b/assets/resources/move2origin32.png
new file mode 100644
index 00000000..3fa31e55
Binary files /dev/null and b/assets/resources/move2origin32.png differ
diff --git a/assets/resources/ncc32.png b/assets/resources/ncc32.png
index de42b0b8..70de5507 100644
Binary files a/assets/resources/ncc32.png and b/assets/resources/ncc32.png differ
diff --git a/assets/resources/open_excellon32.png b/assets/resources/open_excellon32.png
index 268e96fe..41f740f2 100644
Binary files a/assets/resources/open_excellon32.png and b/assets/resources/open_excellon32.png differ
diff --git a/assets/resources/open_gerber32.png b/assets/resources/open_gerber32.png
new file mode 100644
index 00000000..99e8d2ac
Binary files /dev/null and b/assets/resources/open_gerber32.png differ
diff --git a/assets/resources/origin32.png b/assets/resources/origin32.png
index f208af48..daab4021 100644
Binary files a/assets/resources/origin32.png and b/assets/resources/origin32.png differ
diff --git a/assets/resources/paint20_1.png b/assets/resources/paint32.png
similarity index 100%
rename from assets/resources/paint20_1.png
rename to assets/resources/paint32.png
diff --git a/assets/resources/panelize32.png b/assets/resources/panelize32.png
index 5445781c..2746e599 100644
Binary files a/assets/resources/panelize32.png and b/assets/resources/panelize32.png differ
diff --git a/assets/resources/save_as.png b/assets/resources/save_as.png
index d80ebcf9..17172cd8 100644
Binary files a/assets/resources/save_as.png and b/assets/resources/save_as.png differ
diff --git a/assets/resources/save_as_red.png b/assets/resources/save_as_red.png
index 50155428..70fbaa25 100644
Binary files a/assets/resources/save_as_red.png and b/assets/resources/save_as_red.png differ
diff --git a/assets/resources/settings18.png b/assets/resources/settings18.png
index 3e578907..101915df 100644
Binary files a/assets/resources/settings18.png and b/assets/resources/settings18.png differ
diff --git a/assets/resources/splash.png b/assets/resources/splash.png
index 24f89b34..f44d1208 100644
Binary files a/assets/resources/splash.png and b/assets/resources/splash.png differ
diff --git a/assets/resources/trash32.png b/assets/resources/trash32.png
index ed725088..22e4da21 100644
Binary files a/assets/resources/trash32.png and b/assets/resources/trash32.png differ
diff --git a/camlib.py b/camlib.py
index bdd4fd3f..4f683ee0 100644
--- a/camlib.py
+++ b/camlib.py
@@ -1260,7 +1260,8 @@ class Geometry(object):
geos = geos_polys
try:
- for ml in merged_lines:
+ w_geo = merged_lines.geoms if isinstance(merged_lines, (MultiPolygon, MultiLineString)) else merged_lines
+ for ml in w_geo:
geos.append(ml)
except TypeError:
geos.append(merged_lines)
diff --git a/defaults.py b/defaults.py
index 202400f8..075954d2 100644
--- a/defaults.py
+++ b/defaults.py
@@ -130,8 +130,8 @@ class AppDefaults:
# Project Items colors
"global_proj_item_color_light": '#000000FF',
"global_proj_item_dis_color_light": '#b7b7cbFF',
- "global_proj_item_color_dark": '#F2F2F2FF',
- "global_proj_item_dis_color_dark": '#a6a6a6ff',
+ "global_proj_item_color_dark": '#AAAAAAFF',
+ "global_proj_item_dis_color_dark": '#697177FF',
"global_project_autohide": True,