mirror of https://gitlab.com/pamhyr/pamhyr2
Solver: Add log file window.
parent
05e70d40d0
commit
e32ef75be7
|
|
@ -125,14 +125,19 @@ class AbstractSolver(object):
|
||||||
def input_param(self):
|
def input_param(self):
|
||||||
"""Return input command line parameter(s)
|
"""Return input command line parameter(s)
|
||||||
|
|
||||||
Args:
|
|
||||||
study: The study object
|
|
||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
Returns input parameter(s) string
|
Returns input parameter(s) string
|
||||||
"""
|
"""
|
||||||
raise NotImplementedMethodeError(self, self.input_param)
|
raise NotImplementedMethodeError(self, self.input_param)
|
||||||
|
|
||||||
|
def log_file(self):
|
||||||
|
"""Return log file name
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
Returns log file name as string
|
||||||
|
"""
|
||||||
|
raise NotImplementedMethodeError(self, self.log_file)
|
||||||
|
|
||||||
#######
|
#######
|
||||||
# Run #
|
# Run #
|
||||||
#######
|
#######
|
||||||
|
|
|
||||||
|
|
@ -66,6 +66,9 @@ class Mage(AbstractSolver):
|
||||||
def input_param(self):
|
def input_param(self):
|
||||||
return "0.REP"
|
return "0.REP"
|
||||||
|
|
||||||
|
def log_file(self):
|
||||||
|
return "0.TRA"
|
||||||
|
|
||||||
@timer
|
@timer
|
||||||
def _export_ST(self, study, repertory, qlog):
|
def _export_ST(self, study, repertory, qlog):
|
||||||
files = []
|
files = []
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,74 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
import tempfile
|
||||||
|
import os
|
||||||
|
|
||||||
|
from queue import Queue
|
||||||
|
from tools import trace, timer
|
||||||
|
|
||||||
|
from View.ASubWindow import ASubWindow, ASubMainWindow
|
||||||
|
from View.ListedSubWindow import ListedSubWindow
|
||||||
|
|
||||||
|
from PyQt5.QtGui import (
|
||||||
|
QKeySequence,
|
||||||
|
)
|
||||||
|
|
||||||
|
from PyQt5.QtCore import (
|
||||||
|
Qt, QVariant, QAbstractTableModel,
|
||||||
|
QCoreApplication, QModelIndex, pyqtSlot,
|
||||||
|
QRect, QTimer, QProcess,
|
||||||
|
)
|
||||||
|
|
||||||
|
from PyQt5.QtWidgets import (
|
||||||
|
QDialogButtonBox, QPushButton, QLineEdit,
|
||||||
|
QFileDialog, QTableView, QAbstractItemView,
|
||||||
|
QUndoStack, QShortcut, QAction, QItemDelegate,
|
||||||
|
QComboBox, QVBoxLayout, QHeaderView, QTabWidget,
|
||||||
|
QTextEdit,
|
||||||
|
)
|
||||||
|
|
||||||
|
_translate = QCoreApplication.translate
|
||||||
|
|
||||||
|
class SolverLogFileWindow(ASubMainWindow, ListedSubWindow):
|
||||||
|
def __init__(self, title="Solver logs",
|
||||||
|
file_name = None,
|
||||||
|
study=None, config=None,
|
||||||
|
solver=None, parent=None):
|
||||||
|
self._title = title
|
||||||
|
self._parent = parent
|
||||||
|
|
||||||
|
self._study = study
|
||||||
|
self._config = config
|
||||||
|
self._solver = solver
|
||||||
|
|
||||||
|
self._file_name = file_name
|
||||||
|
|
||||||
|
super(SolverLogFileWindow, self).__init__(
|
||||||
|
name=self._title, ui="SolverLogFile", parent=parent
|
||||||
|
)
|
||||||
|
self.ui.setWindowTitle(self._title)
|
||||||
|
|
||||||
|
self.setup_action()
|
||||||
|
self.setup_connections()
|
||||||
|
self.setup_text()
|
||||||
|
|
||||||
|
def setup_action(self):
|
||||||
|
self.find(QAction, "action_revert").setEnabled(True)
|
||||||
|
self.find(QAction, "action_open_in_editor").setEnabled(True)
|
||||||
|
|
||||||
|
def setup_connections(self):
|
||||||
|
self.find(QAction, "action_revert").triggered.connect(self.revert)
|
||||||
|
self.find(QAction, "action_open_in_editor").triggered.connect(self.open_on_editor)
|
||||||
|
|
||||||
|
def setup_text(self):
|
||||||
|
with open(self._file_name, "r") as f:
|
||||||
|
for line in f:
|
||||||
|
line = line.rstrip()
|
||||||
|
self.find(QTextEdit, "textEdit").append(line)
|
||||||
|
|
||||||
|
def revert(self):
|
||||||
|
self.find(QTextEdit, "textEdit").clear()
|
||||||
|
self.setup_text()
|
||||||
|
|
||||||
|
def open_on_editor(self):
|
||||||
|
print("TODO: open in editor")
|
||||||
|
|
@ -27,6 +27,8 @@ from PyQt5.QtWidgets import (
|
||||||
QTextEdit,
|
QTextEdit,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
from View.RunSolver.Log.Window import SolverLogFileWindow
|
||||||
|
|
||||||
_translate = QCoreApplication.translate
|
_translate = QCoreApplication.translate
|
||||||
|
|
||||||
class SelectSolverWindow(ASubWindow, ListedSubWindow):
|
class SelectSolverWindow(ASubWindow, ListedSubWindow):
|
||||||
|
|
@ -132,6 +134,7 @@ class SolverLogWindow(ASubMainWindow, ListedSubWindow):
|
||||||
self.find(QAction, "action_start").triggered.connect(self.start)
|
self.find(QAction, "action_start").triggered.connect(self.start)
|
||||||
self.find(QAction, "action_pause").triggered.connect(self.pause)
|
self.find(QAction, "action_pause").triggered.connect(self.pause)
|
||||||
self.find(QAction, "action_stop").triggered.connect(self.stop)
|
self.find(QAction, "action_stop").triggered.connect(self.stop)
|
||||||
|
self.find(QAction, "action_log_file").triggered.connect(self.log_file)
|
||||||
|
|
||||||
self._alarm.timeout.connect(self.update)
|
self._alarm.timeout.connect(self.update)
|
||||||
|
|
||||||
|
|
@ -156,6 +159,7 @@ class SolverLogWindow(ASubMainWindow, ListedSubWindow):
|
||||||
self.find(QAction, "action_start").setEnabled(True)
|
self.find(QAction, "action_start").setEnabled(True)
|
||||||
self.find(QAction, "action_pause").setEnabled(False)
|
self.find(QAction, "action_pause").setEnabled(False)
|
||||||
self.find(QAction, "action_stop").setEnabled(False)
|
self.find(QAction, "action_stop").setEnabled(False)
|
||||||
|
# self.find(QAction, "action_log_file").setEnabled(True)
|
||||||
|
|
||||||
while self._output.qsize() != 0:
|
while self._output.qsize() != 0:
|
||||||
s = self._output.get()
|
s = self._output.get()
|
||||||
|
|
@ -170,6 +174,7 @@ class SolverLogWindow(ASubMainWindow, ListedSubWindow):
|
||||||
self.find(QAction, "action_start").setEnabled(False)
|
self.find(QAction, "action_start").setEnabled(False)
|
||||||
self.find(QAction, "action_pause").setEnabled(True)
|
self.find(QAction, "action_pause").setEnabled(True)
|
||||||
self.find(QAction, "action_stop").setEnabled(True)
|
self.find(QAction, "action_stop").setEnabled(True)
|
||||||
|
self.find(QAction, "action_log_file").setEnabled(False)
|
||||||
|
|
||||||
def pause(self):
|
def pause(self):
|
||||||
self._log(" *** Pause", color="blue")
|
self._log(" *** Pause", color="blue")
|
||||||
|
|
@ -186,3 +191,15 @@ class SolverLogWindow(ASubMainWindow, ListedSubWindow):
|
||||||
self.find(QAction, "action_start").setEnabled(True)
|
self.find(QAction, "action_start").setEnabled(True)
|
||||||
self.find(QAction, "action_pause").setEnabled(False)
|
self.find(QAction, "action_pause").setEnabled(False)
|
||||||
self.find(QAction, "action_stop").setEnabled(False)
|
self.find(QAction, "action_stop").setEnabled(False)
|
||||||
|
self.find(QAction, "action_log_file").setEnabled(True)
|
||||||
|
|
||||||
|
def log_file(self):
|
||||||
|
file_name = os.path.join(self._workdir, self._solver.log_file())
|
||||||
|
log = SolverLogFileWindow(
|
||||||
|
file_name = file_name,
|
||||||
|
study = self._study,
|
||||||
|
config = self._config,
|
||||||
|
solver = self._solver,
|
||||||
|
parent = self,
|
||||||
|
)
|
||||||
|
log.show()
|
||||||
|
|
|
||||||
|
|
@ -47,6 +47,9 @@
|
||||||
</widget>
|
</widget>
|
||||||
<widget class="QStatusBar" name="statusbar"/>
|
<widget class="QStatusBar" name="statusbar"/>
|
||||||
<widget class="QToolBar" name="toolBar">
|
<widget class="QToolBar" name="toolBar">
|
||||||
|
<property name="enabled">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
<property name="windowTitle">
|
<property name="windowTitle">
|
||||||
<string>toolBar</string>
|
<string>toolBar</string>
|
||||||
</property>
|
</property>
|
||||||
|
|
@ -59,6 +62,7 @@
|
||||||
<addaction name="action_start"/>
|
<addaction name="action_start"/>
|
||||||
<addaction name="action_pause"/>
|
<addaction name="action_pause"/>
|
||||||
<addaction name="action_stop"/>
|
<addaction name="action_stop"/>
|
||||||
|
<addaction name="action_log_file"/>
|
||||||
</widget>
|
</widget>
|
||||||
<action name="action_stop">
|
<action name="action_stop">
|
||||||
<property name="icon">
|
<property name="icon">
|
||||||
|
|
@ -87,6 +91,15 @@
|
||||||
<string>Pause</string>
|
<string>Pause</string>
|
||||||
</property>
|
</property>
|
||||||
</action>
|
</action>
|
||||||
|
<action name="action_log_file">
|
||||||
|
<property name="icon">
|
||||||
|
<iconset>
|
||||||
|
<normaloff>ressources/zoom.png</normaloff>ressources/zoom.png</iconset>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>LogFile</string>
|
||||||
|
</property>
|
||||||
|
</action>
|
||||||
</widget>
|
</widget>
|
||||||
<resources/>
|
<resources/>
|
||||||
<connections/>
|
<connections/>
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,74 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<ui version="4.0">
|
||||||
|
<class>MainWindow</class>
|
||||||
|
<widget class="QMainWindow" name="MainWindow">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>0</y>
|
||||||
|
<width>640</width>
|
||||||
|
<height>480</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="windowTitle">
|
||||||
|
<string>MainWindow</string>
|
||||||
|
</property>
|
||||||
|
<widget class="QWidget" name="centralwidget">
|
||||||
|
<layout class="QGridLayout" name="gridLayout">
|
||||||
|
<item row="0" column="0">
|
||||||
|
<widget class="QTextEdit" name="textEdit">
|
||||||
|
<property name="font">
|
||||||
|
<font>
|
||||||
|
<family>Monospace</family>
|
||||||
|
</font>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
<widget class="QMenuBar" name="menubar">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>0</y>
|
||||||
|
<width>640</width>
|
||||||
|
<height>22</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QStatusBar" name="statusbar"/>
|
||||||
|
<widget class="QToolBar" name="toolBar">
|
||||||
|
<property name="windowTitle">
|
||||||
|
<string>toolBar</string>
|
||||||
|
</property>
|
||||||
|
<attribute name="toolBarArea">
|
||||||
|
<enum>TopToolBarArea</enum>
|
||||||
|
</attribute>
|
||||||
|
<attribute name="toolBarBreak">
|
||||||
|
<bool>false</bool>
|
||||||
|
</attribute>
|
||||||
|
<addaction name="action_open_in_editor"/>
|
||||||
|
<addaction name="action_revert"/>
|
||||||
|
</widget>
|
||||||
|
<action name="action_revert">
|
||||||
|
<property name="icon">
|
||||||
|
<iconset>
|
||||||
|
<normaloff>ressources/gtk-undo.png</normaloff>ressources/gtk-undo.png</iconset>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Revert</string>
|
||||||
|
</property>
|
||||||
|
</action>
|
||||||
|
<action name="action_open_in_editor">
|
||||||
|
<property name="icon">
|
||||||
|
<iconset>
|
||||||
|
<normaloff>ressources/edit.png</normaloff>ressources/edit.png</iconset>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Open in editor</string>
|
||||||
|
</property>
|
||||||
|
</action>
|
||||||
|
</widget>
|
||||||
|
<resources/>
|
||||||
|
<connections/>
|
||||||
|
</ui>
|
||||||
Loading…
Reference in New Issue