Przeglądaj źródła

- fixed issue #394 - the saveDialog in Linux did not added the selected extension
- fixed issue #389 - in previous commits
- fixed issue #391 - in previous commits

Marius Stanciu 5 lat temu
rodzic
commit
abce81d802

+ 25 - 24
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)
 

+ 4 - 4
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"),

+ 3 - 2
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)
 

+ 6 - 2
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 

+ 6 - 6
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':

+ 24 - 0
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:

+ 5 - 5
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)
 

+ 5 - 5
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)
 

+ 4 - 3
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' %