Completed the New Script menu item and made the module more intelligent about whether or not a file is dirty and needs saved.

This commit is contained in:
Jeremy Wright 2014-12-14 21:36:28 -05:00
parent 732918e5f2
commit 88b9b2d244
2 changed files with 39 additions and 30 deletions

View File

@ -37,26 +37,33 @@ class CadQueryCloseScript:
#We need this so we can load the file into it
cqCodePane = mw.findChild(QtGui.QPlainTextEdit, "cqCodePane")
reply = QtGui.QMessageBox.question(cqCodePane, "Save CadQuery Script", "Save script before closing?",
QtGui.QMessageBox.Yes | QtGui.QMessageBox.No | QtGui.QMessageBox.Cancel)
if reply == QtGui.QMessageBox.Cancel:
#If there's nothing open in the code pane, we don't need to close it
if len(cqCodePane.file.path) == 0:
return
if reply == QtGui.QMessageBox.Yes:
#If we've got a file name already save it there, otherwise give a save-as dialog
if len(cqCodePane.file.path) == 0:
filename = QtGui.QFileDialog.getSaveFileName(mw, mw.tr("Save CadQuery Script As"), "/home/",
mw.tr("CadQuery Files (*.py)"))
else:
filename = cqCodePane.file.path
#Check to see if we need to save the script
if cqCodePane.dirty:
reply = QtGui.QMessageBox.question(cqCodePane, "Save CadQuery Script", "Save script before closing?",
QtGui.QMessageBox.Yes | QtGui.QMessageBox.No | QtGui.QMessageBox.Cancel)
#Make sure we got a valid file name
if filename == None:
ExportCQ.save(filename)
if reply == QtGui.QMessageBox.Cancel:
return
if reply == QtGui.QMessageBox.Yes:
#If we've got a file name already save it there, otherwise give a save-as dialog
if len(cqCodePane.file.path) == 0:
filename = QtGui.QFileDialog.getSaveFileName(mw, mw.tr("Save CadQuery Script As"), "/home/",
mw.tr("CadQuery Files (*.py)"))
else:
filename = cqCodePane.file.path
#Make sure we got a valid file name
if filename is not None:
ExportCQ.save(filename)
#Clear our script and whatever was rendered by it out
cqCodePane.file.close()
#TODO Close the matching 3D view here instead of clearing it
clearAll()
@ -114,23 +121,15 @@ class CadQueryNewScript:
def Activated(self):
import os, module_locator
#We need to close any file that's already open in the editor window
CadQueryCloseScript().Activated()
module_base_path = module_locator.module_path()
templ_dir_path = os.path.join(module_base_path, 'Templates')
#We've created a library that FreeCAD can use as well to open CQ files
#Use the library that FreeCAD can use as well to open CQ files
ImportCQ.open(os.path.join(templ_dir_path, 'script_template.py'))
#Getting the main window will allow us to find the children we need to work with
mw = FreeCADGui.getMainWindow()
#We need this so we can load the file into it
cqCodePane = mw.findChild(QtGui.QPlainTextEdit, "cqCodePane")
#Set the file name to be blank so that we can't save over the template
cqCodePane.file.path = ''
FreeCAD.Console.PrintMessage("New Clicked\r\n")
class CadQueryOpenScript:
"""CadQuery's command to open a script file."""
@ -168,6 +167,9 @@ class CadQueryOpenScript:
#Make sure the user didn't click cancel
if filename[0]:
#We need to close any file that's already open in the editor window
CadQueryCloseScript().Activated()
self.previousPath = filename[0]
#Append this script's directory to sys.path
@ -194,6 +196,8 @@ class CadQuerySaveScript:
# return True
def Activated(self):
import os
#Getting the main window will allow us to find the children we need to work with
mw = FreeCADGui.getMainWindow()
@ -201,7 +205,9 @@ class CadQuerySaveScript:
cqCodePane = mw.findChild(QtGui.QPlainTextEdit, "cqCodePane")
#If the codepane doesn't have a filename, we need to present the save as dialog
if len(cqCodePane.file.path) == 0:
if len(cqCodePane.file.path) == 0 or os.path.basename(cqCodePane.file.path) == 'script_template.py':
FreeCAD.Console.PrintMessage("\r\nYou cannot save a blank file or save over a template file.")
CadQuerySaveAsScript().Activated()
return

View File

@ -27,8 +27,8 @@ class CadQueryWorkbench (Workbench):
#logging.basicConfig(filename='/home/jwright/Documents/log.txt', level=logging.DEBUG)
#We have our own CQ menu that's added when the user chooses our workbench
commands = ['CadQueryNewScript', 'CadQueryOpenScript', 'CadQuerySaveScript', 'CadQuerySaveAsScript', 'CadQueryExecuteScript',
'CadQueryCloseScript', 'Separator']
commands = ['CadQueryNewScript', 'CadQueryOpenScript', 'CadQuerySaveScript', 'CadQuerySaveAsScript',
'CadQueryCloseScript', 'Separator', 'CadQueryExecuteScript']
self.appendMenu('CadQuery', commands)
def Activated(self):
@ -129,12 +129,15 @@ class CadQueryWorkbench (Workbench):
def Deactivated(self):
from Gui import ExportCQ
from Gui import Command
#Put the UI back the way we found it
FreeCAD.Console.PrintMessage("\r\nCadQuery Workbench Deactivated\r\n")
Command.CadQueryCloseScript().Activated()
#Rely on our export library to help us save the file
ExportCQ.save()
#ExportCQ.save()
#TODO: This won't work for now because the views are destroyed when they are hidden
# for widget in self.closedWidgets: