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): + + + + @@ -4680,68 +4705,46 @@ class ShortcutsTab(QtWidgets.QWidget): - - - - - + + +
%s  %s
%s %s
    %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 = """ + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + @@ -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 %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): '
Icons by Pixel perfect from www.flaticon.com
' + '
Icons by Anggara from www.flaticon.com
' + '
Icons by Kharisma from www.flaticon.com
' ) ) 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,