Skip to content
Snippets Groups Projects
Commit ce4885e1 authored by Boman Romain's avatar Boman Romain
Browse files

add external editor

parent 0595d1b9
No related branches found
No related tags found
No related merge requests found
Pipeline #7087 passed
...@@ -44,6 +44,24 @@ class Window(QWidget, Ui_Form): ...@@ -44,6 +44,24 @@ class Window(QWidget, Ui_Form):
if pyfile: if pyfile:
self.inpFileLineEdit.setText(QDir.toNativeSeparators(pyfile)) self.inpFileLineEdit.setText(QDir.toNativeSeparators(pyfile))
def on_inpFileEditPushButton_pressed(self):
"""Open input file with a text editor
"""
editors = [
"C:/Program Files/Just Great Software/EditPad Pro 8/EditPadPro8.exe",
"C:/Windows/notepad.exe"
]
for editor in editors:
if os.path.isfile(editor):
import subprocess
subprocess.Popen([ editor, self.inpFileLineEdit.text() ])
break
def on_wrkspExplorePushButton_pressed(self):
"""Browse workspace folder with system explorer
"""
os.startfile(self.wrkspLineEdit.text())
def on_wrkspPushButton_pressed(self): def on_wrkspPushButton_pressed(self):
dir = QFileDialog.getExistingDirectory( dir = QFileDialog.getExistingDirectory(
self, "Select output folder", self.wrkspLineEdit.text()) self, "Select output folder", self.wrkspLineEdit.text())
...@@ -98,11 +116,21 @@ def view_results(): ...@@ -98,11 +116,21 @@ def view_results():
gmsh.fltk.run() gmsh.fltk.run()
def add_folder2path(folder): def add_folder2pypath(folder):
if os.path.isdir(folder): if os.path.isdir(folder):
print(f'{folder} added to pythonpath') print(f'{folder} added to pythonpath')
sys.path.append(folder) sys.path.append(folder)
def add_folder2path(folder):
if not os.path.isdir(folder):
return
import platform
if 'Windows' in platform.uname():
path = os.environ['PATH'].split(';')
path.insert(0, folder)
os.environ['PATH'] = ';'.join(path)
print(f'{folder} added to PATH')
def setup_pythonpath(): def setup_pythonpath():
"""setup PYTHONPATH """setup PYTHONPATH
...@@ -110,16 +138,49 @@ def setup_pythonpath(): ...@@ -110,16 +138,49 @@ def setup_pythonpath():
# adds script folder to the pythonpath # adds script folder to the pythonpath
thisdir = os.path.split(os.path.abspath(__file__))[0] thisdir = os.path.split(os.path.abspath(__file__))[0]
thisdir = os.path.normcase(thisdir) thisdir = os.path.normcase(thisdir)
add_folder2path(thisdir) add_folder2pypath(thisdir)
# add binary dir to PYTHONPATH # add binary dir to PYTHONPATH
pyexe = os.path.basename(sys.executable) pyexe = os.path.basename(sys.executable)
print(f'pyexe = {pyexe}') print(f'pyexe = {pyexe}')
add_folder2path(os.path.join(thisdir, 'cxxfem', add_folder2pypath(os.path.join(thisdir, 'cxxfem',
'build', 'bin')) # gcc/mingw 'build', 'bin')) # gcc/mingw
add_folder2path(os.path.join(thisdir, 'cxxfem', add_folder2pypath(os.path.join(thisdir, 'cxxfem',
'build', 'bin', 'Release')) # msvc 'build', 'bin', 'Release')) # msvc
# allows this script to be run without setting env
add_folder2pypath(os.path.join(thisdir, 'lib',
'gmsh-sdk', 'lib')) # msvc
add_folder2path(os.path.join(thisdir, 'lib',
'gmsh-sdk', 'bin')) # gmsh
def create_workspace(workspace, testname):
"""create workspace and chdir into it
"""
if workspace:
# workspace is given:
# => workspace + testname
common = os.path.basename(testname)
resdir = common.replace(os.sep, "_")
resdir, ext = os.path.splitext(resdir)
wdir = os.path.join(workspace, resdir)
else:
# workspace is not given:
# => current_folder + 'workspace' + testname
thisdir = os.path.normcase(os.getcwd())
# print(f'testname={testname}')
# print(f'thisdir={thisdir}')
common = os.path.commonprefix((testname, thisdir))
# print(f'common={common}')
resdir = testname[len(common)+1:].replace(os.sep, "_")
resdir, ext = os.path.splitext(resdir)
wdir = os.path.join('workspace', resdir)
print('workspace =', wdir)
# sys.exit()
if not os.path.isdir(wdir):
os.makedirs(wdir)
os.chdir(wdir)
if __name__ == "__main__": if __name__ == "__main__":
...@@ -159,8 +220,11 @@ if __name__ == "__main__": ...@@ -159,8 +220,11 @@ if __name__ == "__main__":
testname = win.inpFileLineEdit.text() testname = win.inpFileLineEdit.text()
gui = True gui = True
else: else:
workspace = None workspace = None # use default
action = 'run' if args.post:
action = 'post'
else:
action = 'run'
testname = os.path.abspath(args.file) testname = os.path.abspath(args.file)
gui = False gui = False
...@@ -171,24 +235,9 @@ if __name__ == "__main__": ...@@ -171,24 +235,9 @@ if __name__ == "__main__":
testname = os.path.normcase(testname) # F:/ => f:/ on Windows testname = os.path.normcase(testname) # F:/ => f:/ on Windows
print(f'testname = {testname}') print(f'testname = {testname}')
# create workspace create_workspace(workspace, testname)
if workspace:
common = os.path.basename(testname)
resdir = common.replace(os.sep, "_")
resdir, ext = os.path.splitext(resdir)
wdir = os.path.join(workspace, resdir)
else:
common = os.path.commonprefix((testname, thisdir + os.sep))
resdir = testname[len(common):].replace(os.sep, "_")
resdir, ext = os.path.splitext(resdir)
wdir = os.path.join('workspace', resdir)
print('workspace =', wdir)
if not os.path.isdir(wdir):
os.makedirs(wdir)
os.chdir(wdir)
tee = cxxfem.Tee('stdout.txt') # split streams tee = cxxfem.Tee('stdout.txt') # split streams (stdout + logfile)
try: try:
if action == 'run': if action == 'run':
......
...@@ -6,8 +6,8 @@ ...@@ -6,8 +6,8 @@
<rect> <rect>
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>827</width> <width>708</width>
<height>124</height> <height>154</height>
</rect> </rect>
</property> </property>
<property name="windowTitle"> <property name="windowTitle">
...@@ -33,6 +33,13 @@ ...@@ -33,6 +33,13 @@
</property> </property>
</widget> </widget>
</item> </item>
<item row="0" column="3">
<widget class="QPushButton" name="inpFileEditPushButton">
<property name="text">
<string>Edit</string>
</property>
</widget>
</item>
<item row="1" column="0"> <item row="1" column="0">
<widget class="QLabel" name="wrksplabel"> <widget class="QLabel" name="wrksplabel">
<property name="text"> <property name="text">
...@@ -50,6 +57,13 @@ ...@@ -50,6 +57,13 @@
</property> </property>
</widget> </widget>
</item> </item>
<item row="1" column="3">
<widget class="QPushButton" name="wrkspExplorePushButton">
<property name="text">
<string>Explore</string>
</property>
</widget>
</item>
</layout> </layout>
</item> </item>
<item> <item>
......
...@@ -14,7 +14,7 @@ from PyQt5 import QtCore, QtGui, QtWidgets ...@@ -14,7 +14,7 @@ from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_Form(object): class Ui_Form(object):
def setupUi(self, Form): def setupUi(self, Form):
Form.setObjectName("Form") Form.setObjectName("Form")
Form.resize(827, 124) Form.resize(708, 154)
self.verticalLayout = QtWidgets.QVBoxLayout(Form) self.verticalLayout = QtWidgets.QVBoxLayout(Form)
self.verticalLayout.setObjectName("verticalLayout") self.verticalLayout.setObjectName("verticalLayout")
self.gridLayout = QtWidgets.QGridLayout() self.gridLayout = QtWidgets.QGridLayout()
...@@ -28,6 +28,9 @@ class Ui_Form(object): ...@@ -28,6 +28,9 @@ class Ui_Form(object):
self.inpFilePushButton = QtWidgets.QPushButton(Form) self.inpFilePushButton = QtWidgets.QPushButton(Form)
self.inpFilePushButton.setObjectName("inpFilePushButton") self.inpFilePushButton.setObjectName("inpFilePushButton")
self.gridLayout.addWidget(self.inpFilePushButton, 0, 2, 1, 1) self.gridLayout.addWidget(self.inpFilePushButton, 0, 2, 1, 1)
self.inpFileEditPushButton = QtWidgets.QPushButton(Form)
self.inpFileEditPushButton.setObjectName("inpFileEditPushButton")
self.gridLayout.addWidget(self.inpFileEditPushButton, 0, 3, 1, 1)
self.wrksplabel = QtWidgets.QLabel(Form) self.wrksplabel = QtWidgets.QLabel(Form)
self.wrksplabel.setObjectName("wrksplabel") self.wrksplabel.setObjectName("wrksplabel")
self.gridLayout.addWidget(self.wrksplabel, 1, 0, 1, 1) self.gridLayout.addWidget(self.wrksplabel, 1, 0, 1, 1)
...@@ -37,6 +40,9 @@ class Ui_Form(object): ...@@ -37,6 +40,9 @@ class Ui_Form(object):
self.wrkspPushButton = QtWidgets.QPushButton(Form) self.wrkspPushButton = QtWidgets.QPushButton(Form)
self.wrkspPushButton.setObjectName("wrkspPushButton") self.wrkspPushButton.setObjectName("wrkspPushButton")
self.gridLayout.addWidget(self.wrkspPushButton, 1, 2, 1, 1) self.gridLayout.addWidget(self.wrkspPushButton, 1, 2, 1, 1)
self.wrkspExplorePushButton = QtWidgets.QPushButton(Form)
self.wrkspExplorePushButton.setObjectName("wrkspExplorePushButton")
self.gridLayout.addWidget(self.wrkspExplorePushButton, 1, 3, 1, 1)
self.verticalLayout.addLayout(self.gridLayout) self.verticalLayout.addLayout(self.gridLayout)
self.horizontalLayout_2 = QtWidgets.QHBoxLayout() self.horizontalLayout_2 = QtWidgets.QHBoxLayout()
self.horizontalLayout_2.setObjectName("horizontalLayout_2") self.horizontalLayout_2.setObjectName("horizontalLayout_2")
...@@ -60,7 +66,9 @@ class Ui_Form(object): ...@@ -60,7 +66,9 @@ class Ui_Form(object):
Form.setWindowTitle(_translate("Form", "Form")) Form.setWindowTitle(_translate("Form", "Form"))
self.inpFilelabel.setText(_translate("Form", "input file")) self.inpFilelabel.setText(_translate("Form", "input file"))
self.inpFilePushButton.setText(_translate("Form", "...")) self.inpFilePushButton.setText(_translate("Form", "..."))
self.inpFileEditPushButton.setText(_translate("Form", "Edit"))
self.wrksplabel.setText(_translate("Form", "workspace")) self.wrksplabel.setText(_translate("Form", "workspace"))
self.wrkspPushButton.setText(_translate("Form", "...")) self.wrkspPushButton.setText(_translate("Form", "..."))
self.wrkspExplorePushButton.setText(_translate("Form", "Explore"))
self.runPushButton.setText(_translate("Form", "Run")) self.runPushButton.setText(_translate("Form", "Run"))
self.viewPushButton.setText(_translate("Form", "View")) self.viewPushButton.setText(_translate("Form", "View"))
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment