diff --git a/FlatCAMApp.py b/FlatCAMApp.py index ef6c9357..001d8007 100644 --- a/FlatCAMApp.py +++ b/FlatCAMApp.py @@ -53,6 +53,7 @@ from camlib import to_dict, dict2obj, ET, ParseError from flatcamGUI.PlotCanvas import * from flatcamGUI.PlotCanvasLegacy import * from flatcamGUI.FlatCAMGUI import * +from flatcamGUI.GUIElements import FCFileSaveDialog from FlatCAMCommon import LoudDict, BookmarkManager, ToolsDB, ToolsDB2, color_variant from FlatCAMPostProc import load_preprocessors @@ -4134,13 +4135,13 @@ class App(QtCore.QObject): filter__ = "Config File (*.FlatConfig);;All Files (*.*)" try: - filename, _f = QtWidgets.QFileDialog.getSaveFileName( + filename, _f = FCFileSaveDialog.get_saved_filename( caption=_("Export FlatCAM Preferences"), directory=self.data_path + '/preferences_' + self.date, filter=filter__ ) except TypeError: - filename, _f = QtWidgets.QFileDialog.getSaveFileName(caption=_("Export FlatCAM Preferences"), + filename, _f = FCFileSaveDialog.get_saved_filename( caption=_("Export FlatCAM Preferences"), filter=filter__) filename = str(filename) @@ -9800,12 +9801,12 @@ class App(QtCore.QObject): _filter = "SVG File (*.svg);;All Files (*.*)" try: - filename, _f = QtWidgets.QFileDialog.getSaveFileName( + filename, _f = FCFileSaveDialog.get_saved_filename( caption=_("Export SVG"), directory=self.get_last_save_folder() + '/' + str(name) + '_svg', filter=_filter) except TypeError: - filename, _f = QtWidgets.QFileDialog.getSaveFileName(caption=_("Export SVG"), filter=_filter) + filename, _f = FCFileSaveDialog.get_saved_filename(caption=_("Export SVG"), filter=_filter) filename = str(filename) @@ -9837,12 +9838,12 @@ class App(QtCore.QObject): filter_ = "PNG File (*.png);;All Files (*.*)" try: - filename, _f = QtWidgets.QFileDialog.getSaveFileName( + filename, _f = FCFileSaveDialog.get_saved_filename( caption=_("Export PNG Image"), directory=self.get_last_save_folder() + '/png_' + self.date, filter=filter_) except TypeError: - filename, _f = QtWidgets.QFileDialog.getSaveFileName(caption=_("Export PNG Image"), filter=filter_) + filename, _f = FCFileSaveDialog.get_saved_filename(caption=_("Export PNG Image"), filter=filter_) filename = str(filename) @@ -9884,12 +9885,12 @@ class App(QtCore.QObject): _filter = "Gerber File (*.GBR);;Gerber File (*.GRB);;All Files (*.*)" try: - filename, _f = QtWidgets.QFileDialog.getSaveFileName( + filename, _f = FCFileSaveDialog.get_saved_filename( caption="Save Gerber source file", directory=self.get_last_save_folder() + '/' + name, filter=_filter) except TypeError: - filename, _f = QtWidgets.QFileDialog.getSaveFileName(caption=_("Save Gerber source file"), filter=_filter) + filename, _f = FCFileSaveDialog.get_saved_filename(caption=_("Save Gerber source file"), filter=_filter) filename = str(filename) @@ -9928,12 +9929,12 @@ class App(QtCore.QObject): _filter = "FlatCAM Scripts (*.FlatScript);;All Files (*.*)" try: - filename, _f = QtWidgets.QFileDialog.getSaveFileName( + filename, _f = FCFileSaveDialog.get_saved_filename( caption="Save Script source file", directory=self.get_last_save_folder() + '/' + name, filter=_filter) except TypeError: - filename, _f = QtWidgets.QFileDialog.getSaveFileName(caption=_("Save Script source file"), filter=_filter) + filename, _f = FCFileSaveDialog.get_saved_filename(caption=_("Save Script source file"), filter=_filter) filename = str(filename) @@ -9972,12 +9973,12 @@ class App(QtCore.QObject): _filter = "FlatCAM Documents (*.FlatDoc);;All Files (*.*)" try: - filename, _f = QtWidgets.QFileDialog.getSaveFileName( + filename, _f = FCFileSaveDialog.get_saved_filename( caption="Save Document source file", directory=self.get_last_save_folder() + '/' + name, filter=_filter) except TypeError: - filename, _f = QtWidgets.QFileDialog.getSaveFileName(caption=_("Save Document source file"), filter=_filter) + filename, _f = FCFileSaveDialog.get_saved_filename(caption=_("Save Document source file"), filter=_filter) filename = str(filename) @@ -10016,12 +10017,12 @@ class App(QtCore.QObject): _filter = "Excellon File (*.DRL);;Excellon File (*.TXT);;All Files (*.*)" try: - filename, _f = QtWidgets.QFileDialog.getSaveFileName( + filename, _f = FCFileSaveDialog.get_saved_filename( caption=_("Save Excellon source file"), directory=self.get_last_save_folder() + '/' + name, filter=_filter) except TypeError: - filename, _f = QtWidgets.QFileDialog.getSaveFileName(caption=_("Save Excellon source file"), filter=_filter) + filename, _f = FCFileSaveDialog.get_saved_filename(caption=_("Save Excellon source file"), filter=_filter) filename = str(filename) @@ -10060,12 +10061,12 @@ class App(QtCore.QObject): _filter = self.defaults["excellon_save_filters"] try: - filename, _f = QtWidgets.QFileDialog.getSaveFileName( + filename, _f = FCFileSaveDialog.get_saved_filename( caption=_("Export Excellon"), directory=self.get_last_save_folder() + '/' + name, filter=_filter) except TypeError: - filename, _f = QtWidgets.QFileDialog.getSaveFileName(caption=_("Export Excellon"), filter=_filter) + filename, _f = FCFileSaveDialog.get_saved_filename(caption=_("Export Excellon"), filter=_filter) filename = str(filename) @@ -10107,12 +10108,12 @@ class App(QtCore.QObject): _filter_ = self.defaults['gerber_save_filters'] try: - filename, _f = QtWidgets.QFileDialog.getSaveFileName( + filename, _f = FCFileSaveDialog.get_saved_filename( caption=_("Export Gerber"), directory=self.get_last_save_folder() + '/' + name, filter=_filter_) except TypeError: - filename, _f = QtWidgets.QFileDialog.getSaveFileName(caption=_("Export Gerber"), filter=_filter_) + filename, _f = FCFileSaveDialog.get_saved_filename(caption=_("Export Gerber"), filter=_filter_) filename = str(filename) @@ -10166,12 +10167,12 @@ class App(QtCore.QObject): _filter_ = "DXF File (*.DXF);;All Files (*.*)" try: - filename, _f = QtWidgets.QFileDialog.getSaveFileName( + filename, _f = FCFileSaveDialog.get_saved_filename( caption=_("Export DXF"), directory=self.get_last_save_folder() + '/' + name, filter=_filter_) except TypeError: - filename, _f = QtWidgets.QFileDialog.getSaveFileName(caption=_("Export DXF"), + filename, _f = FCFileSaveDialog.get_saved_filename(caption=_("Export DXF"), filter=_filter_) filename = str(filename) @@ -10588,14 +10589,14 @@ class App(QtCore.QObject): filter_ = "FlatCAM Project (*.FlatPrj);; All Files (*.*)" try: - filename, _f = QtWidgets.QFileDialog.getSaveFileName( + filename, _f = FCFileSaveDialog.get_saved_filename( caption=_("Save Project As ..."), directory='{l_save}/{proj}_{date}'.format(l_save=str(self.get_last_save_folder()), date=self.date, proj=_("Project")), filter=filter_ ) except TypeError: - filename, _f = QtWidgets.QFileDialog.getSaveFileName(caption=_("Save Project As ..."), filter=filter_) + filename, _f = FCFileSaveDialog.get_saved_filename(caption=_("Save Project As ..."), filter=filter_) filename = str(filename) @@ -10642,7 +10643,7 @@ class App(QtCore.QObject): filter_ = "PDF File (*.PDF);; All Files (*.*)" try: - filename, _f = QtWidgets.QFileDialog.getSaveFileName( + filename, _f = FCFileSaveDialog.get_saved_filename( caption=_("Save Object as PDF ..."), directory='{l_save}/{obj_name}_{date}'.format(l_save=str(self.get_last_save_folder()), obj_name=obj_name, @@ -10650,7 +10651,7 @@ class App(QtCore.QObject): filter=filter_ ) except TypeError: - filename, _f = QtWidgets.QFileDialog.getSaveFileName(caption=_("Save Object as PDF ..."), filter=filter_) + filename, _f = FCFileSaveDialog.get_saved_filename(caption=_("Save Object as PDF ..."), filter=filter_) filename = str(filename) diff --git a/FlatCAMCommon.py b/FlatCAMCommon.py index 8940542f..52c42d92 100644 --- a/FlatCAMCommon.py +++ b/FlatCAMCommon.py @@ -13,7 +13,7 @@ from PyQt5 import QtGui, QtCore, QtWidgets from flatcamGUI.GUIElements import FCTable, FCEntry, FCButton, FCDoubleSpinner, FCComboBox, FCCheckBox, FCSpinner, \ - FCTree, RadioSet + FCTree, RadioSet, FCFileSaveDialog from camlib import to_dict import sys @@ -358,7 +358,7 @@ class BookmarkManager(QtWidgets.QWidget): date = date.replace(' ', '_') filter__ = "Text File (*.TXT);;All Files (*.*)" - filename, _f = QtWidgets.QFileDialog.getSaveFileName(caption=_("Export FlatCAM Bookmarks"), + filename, _f = FCFileSaveDialog.get_saved_filename( caption=_("Export FlatCAM Bookmarks"), directory='{l_save}/FlatCAM_{n}_{date}'.format( l_save=str(self.app.get_last_save_folder()), n=_("Bookmarks"), @@ -1094,7 +1094,7 @@ class ToolsDB(QtWidgets.QWidget): date = date.replace(' ', '_') filter__ = "Text File (*.TXT);;All Files (*.*)" - filename, _f = QtWidgets.QFileDialog.getSaveFileName(caption=_("Export Tools Database"), + filename, _f = FCFileSaveDialog.get_saved_filename( caption=_("Export Tools Database"), directory='{l_save}/FlatCAM_{n}_{date}'.format( l_save=str(self.app.get_last_save_folder()), n=_("Tools_Database"), @@ -2524,7 +2524,7 @@ class ToolsDB2(QtWidgets.QWidget): date = date.replace(' ', '_') filter__ = "Text File (*.TXT);;All Files (*.*)" - filename, _f = QtWidgets.QFileDialog.getSaveFileName(caption=_("Export Tools Database"), + filename, _f = FCFileSaveDialog.get_saved_filename( caption=_("Export Tools Database"), directory='{l_save}/FlatCAM_{n}_{date}'.format( l_save=str(self.app.get_last_save_folder()), n=_("Tools_Database"), diff --git a/FlatCAMObj.py b/FlatCAMObj.py index d803cea1..48480a5f 100644 --- a/FlatCAMObj.py +++ b/FlatCAMObj.py @@ -25,6 +25,7 @@ from datetime import datetime from flatcamEditors.FlatCAMTextEditor import TextEditor from flatcamGUI.ObjectUI import * +from flatcamGUI.GUIElements import FCFileSaveDialog from FlatCAMCommon import LoudDict from flatcamGUI.PlotCanvasLegacy import ShapeCollectionLegacy from flatcamParsers.ParseExcellon import Excellon @@ -7024,13 +7025,13 @@ class FlatCAMCNCjob(FlatCAMObj, CNCjob): try: dir_file_to_save = self.app.get_last_save_folder() + '/' + str(name) - filename, _f = QtWidgets.QFileDialog.getSaveFileName( + filename, _f = FCFileSaveDialog.get_saved_filename( caption=_("Export Machine Code ..."), directory=dir_file_to_save, filter=_filter_ ) except TypeError: - filename, _f = QtWidgets.QFileDialog.getSaveFileName(caption=_("Export Machine Code ..."), filter=_filter_) + filename, _f = FCFileSaveDialog.get_saved_filename(caption=_("Export Machine Code ..."), filter=_filter_) filename = str(filename) diff --git a/README.md b/README.md index 6bcade76..bc4273d6 100644 --- a/README.md +++ b/README.md @@ -9,11 +9,15 @@ CAD program, and create G-Code for Isolation routing. ================================================= +11.04.2020 + +- fixed issue #394 - the saveDialog in Linux did not added the selected extension + 10.04.2020 -- made sure that the timeout parameter used by some Tcl Commands is seen as an integer in all cases +- made sure that the timeout parameter used by some Tcl Commands is seen as an integer in all cases - fixed issue #389 - minor changes in Paint Tool -- minor changes in GUI (Save locations in Menu -> File) and the key shortcuts +- minor changes in GUI (Save locations in Menu -> File) and the key shortcuts - fixed issue #391 9.04.2020 diff --git a/flatcamEditors/FlatCAMTextEditor.py b/flatcamEditors/FlatCAMTextEditor.py index fe0b847e..9159d823 100644 --- a/flatcamEditors/FlatCAMTextEditor.py +++ b/flatcamEditors/FlatCAMTextEditor.py @@ -5,14 +5,14 @@ # MIT Licence # # ########################################################## -from flatcamGUI.GUIElements import * -from PyQt5 import QtPrintSupport +from flatcamGUI.GUIElements import FCFileSaveDialog, FCEntry, FCTextAreaExtended, FCTextAreaLineNumber +from PyQt5 import QtPrintSupport, QtWidgets, QtCore, QtGui from reportlab.platypus import SimpleDocTemplate, Paragraph from reportlab.lib.styles import getSampleStyleSheet from reportlab.lib.units import inch, mm -from io import StringIO +# from io import StringIO import gettext import FlatCAMTranslation as fcTranslate @@ -211,13 +211,13 @@ class TextEditor(QtWidgets.QWidget): _filter_ = "FlatConfig Files (*.FlatConfig);;PDF Files (*.pdf);;All Files (*.*)" try: - filename = str(QtWidgets.QFileDialog.getSaveFileName( + filename = str(FCFileSaveDialog.get_saved_filename( caption=_("Export Code ..."), directory=self.app.defaults["global_last_folder"] + '/' + str(obj_name), filter=_filter_ )[0]) except TypeError: - filename = str(QtWidgets.QFileDialog.getSaveFileName(caption=_("Export Code ..."), filter=_filter_)[0]) + filename = str(FCFileSaveDialog.get_saved_filename(caption=_("Export Code ..."), filter=_filter_)[0]) if filename == "": self.app.inform.emit('[WARNING_NOTCL] %s' % _("Export Code cancelled.")) @@ -236,7 +236,7 @@ class TextEditor(QtWidgets.QWidget): styles = getSampleStyleSheet() styleN = styles['Normal'] - styleH = styles['Heading1'] + # styleH = styles['Heading1'] story = [] if self.app.defaults['units'].lower() == 'mm': diff --git a/flatcamGUI/GUIElements.py b/flatcamGUI/GUIElements.py index 4965b954..a3560bf2 100644 --- a/flatcamGUI/GUIElements.py +++ b/flatcamGUI/GUIElements.py @@ -2853,6 +2853,30 @@ class FCTextAreaLineNumber(QtWidgets.QFrame): self.edit.setLineWrapMode(mode) +class FCFileSaveDialog(QtWidgets.QFileDialog): + + def __init__(self, *args): + super(FCFileSaveDialog, self).__init__(*args) + + @staticmethod + def get_saved_filename(parent=None, caption='', directory='', filter='', initialFilter=''): + filename, _filter = QtWidgets.QFileDialog.getSaveFileName(parent=parent, caption=caption, + directory=directory, filter=filter, + initialFilter=initialFilter) + + filename = str(filename) + if filename == '': + return filename, _filter + + extension = '.' + _filter.strip(')').rpartition('.')[2] + + if filename.endswith(extension) or extension == '.*': + return filename, _filter + else: + filename += extension + return filename, _filter + + def rreplace(s, old, new, occurrence): """ Credits go here: diff --git a/flatcamTools/ToolFilm.py b/flatcamTools/ToolFilm.py index 4baae1a6..42787e5a 100644 --- a/flatcamTools/ToolFilm.py +++ b/flatcamTools/ToolFilm.py @@ -9,7 +9,7 @@ from PyQt5 import QtGui, QtCore, QtWidgets from FlatCAMTool import FlatCAMTool from flatcamGUI.GUIElements import RadioSet, FCDoubleSpinner, FCCheckBox, \ - OptionalHideInputSection, OptionalInputSection, FCComboBox + OptionalHideInputSection, OptionalInputSection, FCComboBox, FCFileSaveDialog from copy import deepcopy import logging @@ -741,12 +741,12 @@ class Film(FlatCAMTool): "All Files (*.*)" try: - filename, _f = QtWidgets.QFileDialog.getSaveFileName( + filename, _f = FCFileSaveDialog.get_saved_filename( caption=_("Export positive film"), directory=self.app.get_last_save_folder() + '/' + name + '_film', filter=filter_ext) except TypeError: - filename, _f = QtWidgets.QFileDialog.getSaveFileName(caption=_("Export positive film")) + filename, _f = FCFileSaveDialog.get_saved_filename(caption=_("Export positive film")) filename = str(filename) @@ -887,12 +887,12 @@ class Film(FlatCAMTool): "All Files (*.*)" try: - filename, _f = QtWidgets.QFileDialog.getSaveFileName( + filename, _f = FCFileSaveDialog.get_saved_filename( caption=_("Export negative film"), directory=self.app.get_last_save_folder() + '/' + name + '_film', filter=filter_ext) except TypeError: - filename, _f = QtWidgets.QFileDialog.getSaveFileName(caption=_("Export negative film")) + filename, _f = FCFileSaveDialog.get_saved_filename(caption=_("Export negative film")) filename = str(filename) diff --git a/flatcamTools/ToolQRCode.py b/flatcamTools/ToolQRCode.py index 438349d3..bc5c1fd1 100644 --- a/flatcamTools/ToolQRCode.py +++ b/flatcamTools/ToolQRCode.py @@ -9,7 +9,7 @@ from PyQt5 import QtWidgets, QtCore, QtGui from PyQt5.QtCore import Qt from FlatCAMTool import FlatCAMTool -from flatcamGUI.GUIElements import RadioSet, FCTextArea, FCSpinner, FCEntry, FCCheckBox, FCComboBox +from flatcamGUI.GUIElements import RadioSet, FCTextArea, FCSpinner, FCEntry, FCCheckBox, FCComboBox, FCFileSaveDialog from flatcamParsers.ParseSVG import * from shapely.geometry.base import * @@ -778,12 +778,12 @@ class QRCode(FlatCAMTool): _filter = "PNG File (*.png);;All Files (*.*)" try: - filename, _f = QtWidgets.QFileDialog.getSaveFileName( + filename, _f = FCFileSaveDialog.get_saved_filename( caption=_("Export PNG"), directory=self.app.get_last_save_folder() + '/' + str(name) + '_png', filter=_filter) except TypeError: - filename, _f = QtWidgets.QFileDialog.getSaveFileName(caption=_("Export PNG"), filter=_filter) + filename, _f = FCFileSaveDialog.get_saved_filename(caption=_("Export PNG"), filter=_filter) filename = str(filename) @@ -825,12 +825,12 @@ class QRCode(FlatCAMTool): _filter = "SVG File (*.svg);;All Files (*.*)" try: - filename, _f = QtWidgets.QFileDialog.getSaveFileName( + filename, _f = FCFileSaveDialog.get_saved_filename( caption=_("Export SVG"), directory=self.app.get_last_save_folder() + '/' + str(name) + '_svg', filter=_filter) except TypeError: - filename, _f = QtWidgets.QFileDialog.getSaveFileName(caption=_("Export SVG"), filter=_filter) + filename, _f = FCFileSaveDialog.get_saved_filename(caption=_("Export SVG"), filter=_filter) filename = str(filename) diff --git a/flatcamTools/ToolSolderPaste.py b/flatcamTools/ToolSolderPaste.py index d42b39d6..3da208a0 100644 --- a/flatcamTools/ToolSolderPaste.py +++ b/flatcamTools/ToolSolderPaste.py @@ -7,7 +7,8 @@ from FlatCAMTool import FlatCAMTool from FlatCAMCommon import LoudDict -from flatcamGUI.GUIElements import FCComboBox, FCEntry, FCTable, FCInputDialog, FCDoubleSpinner, FCSpinner +from flatcamGUI.GUIElements import FCComboBox, FCEntry, FCTable, \ + FCInputDialog, FCDoubleSpinner, FCSpinner, FCFileSaveDialog from FlatCAMApp import log from camlib import distance from FlatCAMObj import FlatCAMCNCjob @@ -1492,13 +1493,13 @@ class SolderPaste(FlatCAMTool): try: dir_file_to_save = self.app.get_last_save_folder() + '/' + str(name) - filename, _f = QtWidgets.QFileDialog.getSaveFileName( + filename, _f = FCFileSaveDialog.get_saved_filename( caption=_("Export GCode ..."), directory=dir_file_to_save, filter=_filter_ ) except TypeError: - filename, _f = QtWidgets.QFileDialog.getSaveFileName(caption=_("Export Machine Code ..."), filter=_filter_) + filename, _f = FCFileSaveDialog.get_saved_filename(caption=_("Export Machine Code ..."), filter=_filter_) if filename == '': self.app.inform.emit('[WARNING_NOTCL] %s' %