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):
if 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):
dir = QFileDialog.getExistingDirectory(
self, "Select output folder", self.wrkspLineEdit.text())
......@@ -98,11 +116,21 @@ def view_results():
gmsh.fltk.run()
def add_folder2path(folder):
def add_folder2pypath(folder):
if os.path.isdir(folder):
print(f'{folder} added to pythonpath')
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():
"""setup PYTHONPATH
......@@ -110,16 +138,49 @@ def setup_pythonpath():
# adds script folder to the pythonpath
thisdir = os.path.split(os.path.abspath(__file__))[0]
thisdir = os.path.normcase(thisdir)
add_folder2path(thisdir)
add_folder2pypath(thisdir)
# add binary dir to PYTHONPATH
pyexe = os.path.basename(sys.executable)
print(f'pyexe = {pyexe}')
add_folder2path(os.path.join(thisdir, 'cxxfem',
add_folder2pypath(os.path.join(thisdir, 'cxxfem',
'build', 'bin')) # gcc/mingw
add_folder2path(os.path.join(thisdir, 'cxxfem',
'build', 'bin', 'Release')) # msvc
add_folder2pypath(os.path.join(thisdir, 'cxxfem',
'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__":
......@@ -159,8 +220,11 @@ if __name__ == "__main__":
testname = win.inpFileLineEdit.text()
gui = True
else:
workspace = None
action = 'run'
workspace = None # use default
if args.post:
action = 'post'
else:
action = 'run'
testname = os.path.abspath(args.file)
gui = False
......@@ -171,24 +235,9 @@ if __name__ == "__main__":
testname = os.path.normcase(testname) # F:/ => f:/ on Windows
print(f'testname = {testname}')
# create workspace
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)
create_workspace(workspace, testname)
tee = cxxfem.Tee('stdout.txt') # split streams
tee = cxxfem.Tee('stdout.txt') # split streams (stdout + logfile)
try:
if action == 'run':
......
......@@ -6,8 +6,8 @@
<rect>
<x>0</x>
<y>0</y>
<width>827</width>
<height>124</height>
<width>708</width>
<height>154</height>
</rect>
</property>
<property name="windowTitle">
......@@ -33,6 +33,13 @@
</property>
</widget>
</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">
<widget class="QLabel" name="wrksplabel">
<property name="text">
......@@ -50,6 +57,13 @@
</property>
</widget>
</item>
<item row="1" column="3">
<widget class="QPushButton" name="wrkspExplorePushButton">
<property name="text">
<string>Explore</string>
</property>
</widget>
</item>
</layout>
</item>
<item>
......
......@@ -14,7 +14,7 @@ from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_Form(object):
def setupUi(self, Form):
Form.setObjectName("Form")
Form.resize(827, 124)
Form.resize(708, 154)
self.verticalLayout = QtWidgets.QVBoxLayout(Form)
self.verticalLayout.setObjectName("verticalLayout")
self.gridLayout = QtWidgets.QGridLayout()
......@@ -28,6 +28,9 @@ class Ui_Form(object):
self.inpFilePushButton = QtWidgets.QPushButton(Form)
self.inpFilePushButton.setObjectName("inpFilePushButton")
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.setObjectName("wrksplabel")
self.gridLayout.addWidget(self.wrksplabel, 1, 0, 1, 1)
......@@ -37,6 +40,9 @@ class Ui_Form(object):
self.wrkspPushButton = QtWidgets.QPushButton(Form)
self.wrkspPushButton.setObjectName("wrkspPushButton")
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.horizontalLayout_2 = QtWidgets.QHBoxLayout()
self.horizontalLayout_2.setObjectName("horizontalLayout_2")
......@@ -60,7 +66,9 @@ class Ui_Form(object):
Form.setWindowTitle(_translate("Form", "Form"))
self.inpFilelabel.setText(_translate("Form", "input file"))
self.inpFilePushButton.setText(_translate("Form", "..."))
self.inpFileEditPushButton.setText(_translate("Form", "Edit"))
self.wrksplabel.setText(_translate("Form", "workspace"))
self.wrkspPushButton.setText(_translate("Form", "..."))
self.wrkspExplorePushButton.setText(_translate("Form", "Explore"))
self.runPushButton.setText(_translate("Form", "Run"))
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