def switch_sides(self): self.displayLeft = not self.displayLeft if self.displayLeft: self.actSwitch.setIcon(QtGui.QIcon(get_resource("left_mode.png"))) self.post_figure_list.setFocus() self.current_figure_changed(self.post_figure_list.currentItem()) else: self.actSwitch.setIcon(QtGui.QIcon(get_resource("right_mode.png"))) self.meta_figure_list.setFocus() self.current_figure_changed(self.meta_figure_list.currentItem())
def pause_animation(self): """ pause the animation """ # self.statusLabel.setText('pausing animation') self.playbackTimer.stop() self.actPlayPause.setText("Play") self.actPlayPause.setIcon(QtGui.QIcon(get_resource("play.png"))) self.actPlayPause.triggered.disconnect(self.pause_animation) self.actPlayPause.triggered.connect(self.play_animation) self.shortPlayPause.activated.disconnect(self.pause_animation) self.shortPlayPause.activated.connect(self.play_animation)
def stop_animation(self): """ pause the animation """ # self.statusLabel.setText('stopping animation') if self.actPlayPause.text() == "Pause": # animation is playing -> stop it self.playbackTimer.stop() self.actPlayPause.setText("Play") self.actPlayPause.setIcon(QtGui.QIcon(get_resource("play.png"))) self.actPlayPause.triggered.disconnect(self.pause_animation) self.actPlayPause.triggered.connect(self.play_animation) self.shortPlayPause.activated.disconnect(self.pause_animation) self.shortPlayPause.activated.connect(self.play_animation) self.timeSlider.setValue(0)
from generic_processing_modules import StepResponse, PlotAll, XYMetaProcessor from registry import register_simulation_module, register_processing_module, register_visualizer,\ get_registered_simulation_modules, get_registered_processing_modules import yaml import logging.config from tools import get_resource __author__ = 'Stefan Ecklebe' __email__ = '*****@*****.**' __version__ = '0.1.0' # configure logging with open(get_resource("logging.yaml", ""), "r") as f: log_conf = yaml.load(f) logging.config.dictConfig(log_conf) # register all generic modules register_simulation_module(Solver, ODEInt) register_simulation_module(Trajectory, SmoothTransition) register_simulation_module(Trajectory, HarmonicTrajectory) register_simulation_module(Trajectory, Setpoint) register_simulation_module(Controller, PIDController) register_simulation_module(Feedforward, PyTrajectory) register_simulation_module(ModelMixer, AdditiveMixer) register_simulation_module(ObserverMixer, AdditiveMixer) register_simulation_module(Limiter, ModelInputLimiter) register_simulation_module(Sensor, DeadTimeSensor)
def __init__(self): # constructor of the base class QtGui.QMainWindow.__init__(self) self._logger = logging.getLogger(self.__class__.__name__) # Create Simulation Backend self.guiProgress = None self.cmdProgress = None self.sim = SimulatorInteractor(self) self.runSimulation.connect(self.sim.run_simulation) self.sim.simulation_finished.connect(self.simulation_finished) self.sim.simulation_failed.connect(self.simulation_failed) self.currentDataset = None # sim setup viewer self.targetView = SimulatorView(self) self.targetView.setModel(self.sim.target_model) self.targetView.expanded.connect(self.target_view_changed) self.targetView.collapsed.connect(self.target_view_changed) # sim results viewer self.result_view = QtGui.QTreeView() # the docking area allows to rearrange the user interface at runtime self.area = pg.dockarea.DockArea() # Window properties self.setCentralWidget(self.area) self.resize(1000, 700) self.setWindowTitle("PyMoskito") res_path = get_resource("mosquito.png") icon = QtGui.QIcon(res_path) self.setWindowIcon(icon) # create docks self.propertyDock = pg.dockarea.Dock("Properties") self.vtkDock = pg.dockarea.Dock("Simulation") self.regimeDock = pg.dockarea.Dock("Regimes") self.dataDock = pg.dockarea.Dock("Data") self.logDock = pg.dockarea.Dock("Log") self.plotDocks = [] self.plotDocks.append(pg.dockarea.Dock("Placeholder")) self.plotWidgets = [] self.timeLines = [] # arrange docks self.area.addDock(self.vtkDock, "right") self.area.addDock(self.regimeDock, "left", self.vtkDock) self.area.addDock(self.propertyDock, "bottom", self.regimeDock) self.area.addDock(self.dataDock, "bottom", self.propertyDock) self.area.addDock(self.plotDocks[-1], "bottom", self.vtkDock) self.area.addDock(self.logDock, "bottom", self.dataDock) # add widgets to the docks self.propertyDock.addWidget(self.targetView) # vtk window self.vtkLayout = QtGui.QVBoxLayout() self.frame = QtGui.QFrame() self.vtkWidget = QVTKRenderWindowInteractor(self.frame) self.vtkLayout.addWidget(self.vtkWidget) self.frame.setLayout(self.vtkLayout) self.vtkDock.addWidget(self.frame) self.vtk_renderer = vtk.vtkRenderer() self.vtkWidget.GetRenderWindow().AddRenderer(self.vtk_renderer) # check if there is a registered visualizer available_vis = get_registered_visualizers() self._logger.info("found visualizers: {}".format( [name for cls, name in available_vis])) if available_vis: # instantiate the first one self._logger.info("loading visualizer '{}'".format( available_vis[0][1])) self.visualizer = available_vis[0][0](self.vtk_renderer) self.vtkWidget.Initialize() else: self.visualizer = None # regime window self.regime_list = QtGui.QListWidget(self) self.regime_list.setSelectionMode( QtGui.QAbstractItemView.ExtendedSelection) self.regimeDock.addWidget(self.regime_list) self.regime_list.itemDoubleClicked.connect(self.regime_dclicked) self._regimes = [] self.regime_file_name = "" # data window self.dataList = QtGui.QListWidget(self) self.dataDock.addWidget(self.dataList) self.dataList.itemDoubleClicked.connect(self.create_plot) # actions for simulation control self.actSimulate = QtGui.QAction(self) self.actSimulate.setText("Simulate") self.actSimulate.setIcon(QtGui.QIcon(get_resource("simulate.png"))) self.actSimulate.triggered.connect(self.start_simulation) # actions for animation control self.actPlayPause = QtGui.QAction(self) self.actPlayPause.setText("Play") self.actPlayPause.setIcon(QtGui.QIcon(get_resource("play.png"))) self.actPlayPause.setDisabled(True) self.actPlayPause.triggered.connect(self.play_animation) self.actStop = QtGui.QAction(self) self.actStop.setText("Stop") self.actStop.setIcon(QtGui.QIcon(get_resource("stop.png"))) self.actStop.setDisabled(True) self.actStop.triggered.connect(self.stop_animation) self.speedDial = QtGui.QDial() self.speedDial.setDisabled(True) self.speedDial.setMinimum(0) self.speedDial.setMaximum(100) self.speedDial.setValue(50) self.speedDial.setSingleStep(1) self.speedDial.resize(24, 24) self.speedDial.valueChanged.connect(self.update_playback_gain) self.timeSlider = QtGui.QSlider(QtCore.Qt.Horizontal, self) self.timeSlider.setMinimum(0) self.timeSliderRange = 1000 self.timeSlider.setMaximum(self.timeSliderRange) self.timeSlider.setTickInterval(1) self.timeSlider.setTracking(True) self.timeSlider.setDisabled(True) self.timeSlider.valueChanged.connect(self.update_playback_time) self.playbackTime = 0 self.playbackGain = 1 self.currentStepSize = 0 self.currentEndTime = 0 self.playbackTimer = QTimer() self.playbackTimer.timeout.connect(self.increment_playback_time) self.playbackTimeChanged.connect(self.update_gui) self.playbackTimeout = 33 # in [ms] -> 30 fps self.actSave = QtGui.QAction(self) self.actSave.setText('Save') self.actSave.setIcon(QtGui.QIcon(get_resource("save.png"))) self.actSave.setDisabled(True) self.actSave.triggered.connect(self.export_simulation_data) self.actLoadRegimes = QtGui.QAction(self) self.actLoadRegimes.setText("load regimes") self.actLoadRegimes.setIcon(QtGui.QIcon(get_resource("load.png"))) self.actLoadRegimes.setDisabled(False) self.actLoadRegimes.triggered.connect(self.load_regime_dialog) self.actExecuteRegimes = QtGui.QAction(self) self.actExecuteRegimes.setText("execute all regimes") self.actExecuteRegimes.setIcon( QtGui.QIcon(get_resource("execute_regimes.png"))) self.actExecuteRegimes.setDisabled(True) self.actExecuteRegimes.triggered.connect(self.execute_regimes_clicked) self.actPostprocessing = QtGui.QAction(self) self.actPostprocessing.setText("launch postprocessor") self.actPostprocessing.setIcon( QtGui.QIcon(get_resource("processing.png"))) self.actPostprocessing.setDisabled(False) self.actPostprocessing.triggered.connect(self.postprocessing_clicked) self.act_reset_camera = QtGui.QAction(self) self.act_reset_camera.setText("reset camera") self.act_reset_camera.setIcon( QtGui.QIcon(get_resource("reset_camera.png"))) self.act_reset_camera.setDisabled(not self.visualizer.can_reset_view) self.act_reset_camera.triggered.connect(self.reset_camera_clicked) # toolbar for control self.toolbarSim = QtGui.QToolBar("Simulation") self.toolbarSim.setIconSize(QtCore.QSize(32, 32)) self.addToolBar(self.toolbarSim) self.toolbarSim.addAction(self.actLoadRegimes) self.toolbarSim.addAction(self.actSave) self.toolbarSim.addSeparator() self.toolbarSim.addAction(self.actSimulate) self.toolbarSim.addAction(self.actExecuteRegimes) self.toolbarSim.addSeparator() self.toolbarSim.addAction(self.actPlayPause) self.toolbarSim.addAction(self.actStop) self.toolbarSim.addWidget(self.speedDial) self.toolbarSim.addWidget(self.timeSlider) self.toolbarSim.addAction(self.actPostprocessing) self.toolbarSim.addAction(self.act_reset_camera) self.postprocessor = None # regime management self.runningBatch = False self._current_regime_index = 0 self._regimes = [] self.regimeFinished.connect(self.run_next_regime) self.finishedRegimeBatch.connect(self.regime_batch_finished) # log dock self.logBox = QPlainTextEditLogger(self) self.logBox.setLevel(logging.INFO) formatter = logging.Formatter( fmt="%(asctime)s - %(name)s - %(levelname)s - %(message)s", datefmt="%H:%M:%S") self.logBox.setFormatter(formatter) self.log_filter = PostFilter(invert=True) self.logBox.addFilter(self.log_filter) logging.getLogger().addHandler(self.logBox) self.logDock.addWidget(self.logBox.widget) # status bar self.status = QtGui.QStatusBar(self) self.setStatusBar(self.status) self.statusLabel = QtGui.QLabel("Ready.") self.statusBar().addPermanentWidget(self.statusLabel) self.timeLabel = QtGui.QLabel("current time: 0.0") self.statusBar().addPermanentWidget(self.timeLabel) # shortcuts self.delShort = QtGui.QShortcut( QtGui.QKeySequence(QtCore.Qt.Key_Delete), self.regime_list) self.delShort.activated.connect(self.remove_regime_items) self.shortOpenRegime = QtGui.QShortcut(QtGui.QKeySequence.Open, self) self.shortOpenRegime.activated.connect(self.load_regime_dialog) self.shortSaveResult = QtGui.QShortcut(QtGui.QKeySequence.Save, self) self.shortSaveResult.activated.connect(self.export_simulation_data) self.shortSaveResult.setEnabled(False) self.shortSpeedUp = QtGui.QShortcut(QtGui.QKeySequence.ZoomIn, self) self.shortSpeedUp.activated.connect(self.increment_playback_speed) self.shortSpeedDown = QtGui.QShortcut(QtGui.QKeySequence.ZoomOut, self) self.shortSpeedDown.activated.connect(self.decrement_playback_speed) self.shortSpeedReset = QtGui.QShortcut( QtGui.QKeySequence(QtCore.Qt.CTRL + QtCore.Qt.Key_0), self) self.shortSpeedReset.activated.connect(self.reset_playback_speed) self.shortRunSimulation = QtGui.QShortcut(QtGui.QKeySequence('F5'), self) self.shortRunSimulation.activated.connect(self.start_simulation) self.shortRunRegimeBatch = QtGui.QShortcut(QtGui.QKeySequence('F6'), self) self.shortRunRegimeBatch.activated.connect( self.execute_regimes_clicked) self.shortRunPostprocessing = QtGui.QShortcut(QtGui.QKeySequence('F7'), self) self.shortRunPostprocessing.activated.connect( self.postprocessing_clicked) self.shortPlayPause = QtGui.QShortcut( QtGui.QKeySequence(QtCore.Qt.Key_Space), self) self.shortPlayPause.activated.connect(self.play_animation) self.shortPlayPause.setEnabled(False) self.postprocessor = None self._logger.info("Simulation GUI is up and running.")
def __init__(self): # constructor of the base class QtGui.QMainWindow.__init__(self) self._logger = logging.getLogger(self.__class__.__name__) # Create Simulation Backend self.guiProgress = None self.cmdProgress = None self.sim = SimulatorInteractor(self) self.runSimulation.connect(self.sim.run_simulation) self.sim.simulation_finished.connect(self.simulation_finished) self.sim.simulation_failed.connect(self.simulation_failed) self.currentDataset = None # sim setup viewer self.targetView = SimulatorView(self) self.targetView.setModel(self.sim.target_model) self.targetView.expanded.connect(self.target_view_changed) self.targetView.collapsed.connect(self.target_view_changed) # sim results viewer self.result_view = QtGui.QTreeView() # the docking area allows to rearrange the user interface at runtime self.area = pg.dockarea.DockArea() # Window properties self.setCentralWidget(self.area) self.resize(1000, 700) self.setWindowTitle("PyMoskito") res_path = get_resource("mosquito.png") icon = QtGui.QIcon(res_path) self.setWindowIcon(icon) # create docks self.propertyDock = pg.dockarea.Dock("Properties") self.vtkDock = pg.dockarea.Dock("Simulation") self.regimeDock = pg.dockarea.Dock("Regimes") self.dataDock = pg.dockarea.Dock("Data") self.logDock = pg.dockarea.Dock("Log") self.plotDocks = [] self.plotDocks.append(pg.dockarea.Dock("Placeholder")) self.plotWidgets = [] self.timeLines = [] # arrange docks self.area.addDock(self.vtkDock, "right") self.area.addDock(self.regimeDock, "left", self.vtkDock) self.area.addDock(self.propertyDock, "bottom", self.regimeDock) self.area.addDock(self.dataDock, "bottom", self.propertyDock) self.area.addDock(self.plotDocks[-1], "bottom", self.vtkDock) self.area.addDock(self.logDock, "bottom", self.dataDock) # add widgets to the docks self.propertyDock.addWidget(self.targetView) # vtk window self.vtkLayout = QtGui.QVBoxLayout() self.frame = QtGui.QFrame() self.vtkWidget = QVTKRenderWindowInteractor(self.frame) self.vtkLayout.addWidget(self.vtkWidget) self.frame.setLayout(self.vtkLayout) self.vtkDock.addWidget(self.frame) self.vtk_renderer = vtk.vtkRenderer() self.vtkWidget.GetRenderWindow().AddRenderer(self.vtk_renderer) # check if there is a registered visualizer available_vis = get_registered_visualizers() self._logger.info("found visualizers: {}".format([name for cls, name in available_vis])) if available_vis: # instantiate the first one self._logger.info("loading visualizer '{}'".format(available_vis[0][1])) self.visualizer = available_vis[0][0](self.vtk_renderer) self.vtkWidget.Initialize() else: self.visualizer = None # regime window self.regime_list = QtGui.QListWidget(self) self.regime_list.setSelectionMode(QtGui.QAbstractItemView.ExtendedSelection) self.regimeDock.addWidget(self.regime_list) self.regime_list.itemDoubleClicked.connect(self.regime_dclicked) self._regimes = [] self.regime_file_name = "" # data window self.dataList = QtGui.QListWidget(self) self.dataDock.addWidget(self.dataList) self.dataList.itemDoubleClicked.connect(self.create_plot) # actions for simulation control self.actSimulate = QtGui.QAction(self) self.actSimulate.setText("Simulate") self.actSimulate.setIcon(QtGui.QIcon(get_resource("simulate.png"))) self.actSimulate.triggered.connect(self.start_simulation) # actions for animation control self.actPlayPause = QtGui.QAction(self) self.actPlayPause.setText("Play") self.actPlayPause.setIcon(QtGui.QIcon(get_resource("play.png"))) self.actPlayPause.setDisabled(True) self.actPlayPause.triggered.connect(self.play_animation) self.actStop = QtGui.QAction(self) self.actStop.setText("Stop") self.actStop.setIcon(QtGui.QIcon(get_resource("stop.png"))) self.actStop.setDisabled(True) self.actStop.triggered.connect(self.stop_animation) self.speedDial = QtGui.QDial() self.speedDial.setDisabled(True) self.speedDial.setMinimum(0) self.speedDial.setMaximum(100) self.speedDial.setValue(50) self.speedDial.setSingleStep(1) self.speedDial.resize(24, 24) self.speedDial.valueChanged.connect(self.update_playback_gain) self.timeSlider = QtGui.QSlider(QtCore.Qt.Horizontal, self) self.timeSlider.setMinimum(0) self.timeSliderRange = 1000 self.timeSlider.setMaximum(self.timeSliderRange) self.timeSlider.setTickInterval(1) self.timeSlider.setTracking(True) self.timeSlider.setDisabled(True) self.timeSlider.valueChanged.connect(self.update_playback_time) self.playbackTime = 0 self.playbackGain = 1 self.currentStepSize = 0 self.currentEndTime = 0 self.playbackTimer = QTimer() self.playbackTimer.timeout.connect(self.increment_playback_time) self.playbackTimeChanged.connect(self.update_gui) self.playbackTimeout = 33 # in [ms] -> 30 fps self.actSave = QtGui.QAction(self) self.actSave.setText('Save') self.actSave.setIcon(QtGui.QIcon(get_resource("save.png"))) self.actSave.setDisabled(True) self.actSave.triggered.connect(self.export_simulation_data) self.actLoadRegimes = QtGui.QAction(self) self.actLoadRegimes.setText("load regimes") self.actLoadRegimes.setIcon(QtGui.QIcon(get_resource("load.png"))) self.actLoadRegimes.setDisabled(False) self.actLoadRegimes.triggered.connect(self.load_regime_dialog) self.actExecuteRegimes = QtGui.QAction(self) self.actExecuteRegimes.setText("execute all regimes") self.actExecuteRegimes.setIcon(QtGui.QIcon(get_resource("execute_regimes.png"))) self.actExecuteRegimes.setDisabled(True) self.actExecuteRegimes.triggered.connect(self.execute_regimes_clicked) self.actPostprocessing = QtGui.QAction(self) self.actPostprocessing.setText("launch postprocessor") self.actPostprocessing.setIcon(QtGui.QIcon(get_resource("processing.png"))) self.actPostprocessing.setDisabled(False) self.actPostprocessing.triggered.connect(self.postprocessing_clicked) self.act_reset_camera = QtGui.QAction(self) self.act_reset_camera.setText("reset camera") self.act_reset_camera.setIcon(QtGui.QIcon(get_resource("reset_camera.png"))) self.act_reset_camera.setDisabled(not self.visualizer.can_reset_view) self.act_reset_camera.triggered.connect(self.reset_camera_clicked) # toolbar for control self.toolbarSim = QtGui.QToolBar("Simulation") self.toolbarSim.setIconSize(QtCore.QSize(32, 32)) self.addToolBar(self.toolbarSim) self.toolbarSim.addAction(self.actLoadRegimes) self.toolbarSim.addAction(self.actSave) self.toolbarSim.addSeparator() self.toolbarSim.addAction(self.actSimulate) self.toolbarSim.addAction(self.actExecuteRegimes) self.toolbarSim.addSeparator() self.toolbarSim.addAction(self.actPlayPause) self.toolbarSim.addAction(self.actStop) self.toolbarSim.addWidget(self.speedDial) self.toolbarSim.addWidget(self.timeSlider) self.toolbarSim.addAction(self.actPostprocessing) self.toolbarSim.addAction(self.act_reset_camera) self.postprocessor = None # regime management self.runningBatch = False self._current_regime_index = 0 self._regimes = [] self.regimeFinished.connect(self.run_next_regime) self.finishedRegimeBatch.connect(self.regime_batch_finished) # log dock self.logBox = QPlainTextEditLogger(self) self.logBox.setLevel(logging.INFO) formatter = logging.Formatter(fmt="%(asctime)s - %(name)s - %(levelname)s - %(message)s", datefmt="%H:%M:%S") self.logBox.setFormatter(formatter) self.log_filter = PostFilter(invert=True) self.logBox.addFilter(self.log_filter) logging.getLogger().addHandler(self.logBox) self.logDock.addWidget(self.logBox.widget) # status bar self.status = QtGui.QStatusBar(self) self.setStatusBar(self.status) self.statusLabel = QtGui.QLabel("Ready.") self.statusBar().addPermanentWidget(self.statusLabel) self.timeLabel = QtGui.QLabel("current time: 0.0") self.statusBar().addPermanentWidget(self.timeLabel) # shortcuts self.delShort = QtGui.QShortcut(QtGui.QKeySequence(QtCore.Qt.Key_Delete), self.regime_list) self.delShort.activated.connect(self.remove_regime_items) self.shortOpenRegime = QtGui.QShortcut(QtGui.QKeySequence.Open, self) self.shortOpenRegime.activated.connect(self.load_regime_dialog) self.shortSaveResult = QtGui.QShortcut(QtGui.QKeySequence.Save, self) self.shortSaveResult.activated.connect(self.export_simulation_data) self.shortSaveResult.setEnabled(False) self.shortSpeedUp = QtGui.QShortcut(QtGui.QKeySequence.ZoomIn, self) self.shortSpeedUp.activated.connect(self.increment_playback_speed) self.shortSpeedDown = QtGui.QShortcut(QtGui.QKeySequence.ZoomOut, self) self.shortSpeedDown.activated.connect(self.decrement_playback_speed) self.shortSpeedReset = QtGui.QShortcut(QtGui.QKeySequence(QtCore.Qt.CTRL + QtCore.Qt.Key_0), self) self.shortSpeedReset.activated.connect(self.reset_playback_speed) self.shortRunSimulation = QtGui.QShortcut(QtGui.QKeySequence('F5'), self) self.shortRunSimulation.activated.connect(self.start_simulation) self.shortRunRegimeBatch = QtGui.QShortcut(QtGui.QKeySequence('F6'), self) self.shortRunRegimeBatch.activated.connect(self.execute_regimes_clicked) self.shortRunPostprocessing = QtGui.QShortcut(QtGui.QKeySequence('F7'), self) self.shortRunPostprocessing.activated.connect(self.postprocessing_clicked) self.shortPlayPause = QtGui.QShortcut(QtGui.QKeySequence(QtCore.Qt.Key_Space), self) self.shortPlayPause.activated.connect(self.play_animation) self.shortPlayPause.setEnabled(False) self.postprocessor = None self._logger.info("Simulation GUI is up and running.")
from processing_core import PostProcessingModule, MetaProcessingModule from generic_processing_modules import StepResponse, PlotAll, XYMetaProcessor from registry import register_simulation_module, register_processing_module, register_visualizer,\ get_registered_simulation_modules, get_registered_processing_modules import yaml import logging.config from tools import get_resource __author__ = 'Stefan Ecklebe' __email__ = '*****@*****.**' __version__ = '0.1.0' # configure logging with open(get_resource("logging.yaml", ""), "r") as f: log_conf = yaml.load(f) logging.config.dictConfig(log_conf) # register all generic modules register_simulation_module(Solver, ODEInt) register_simulation_module(Trajectory, SmoothTransition) register_simulation_module(Trajectory, HarmonicTrajectory) register_simulation_module(Trajectory, Setpoint) register_simulation_module(Controller, PIDController) register_simulation_module(Feedforward, PyTrajectory) register_simulation_module(ModelMixer, AdditiveMixer) register_simulation_module(ObserverMixer, AdditiveMixer) register_simulation_module(Limiter, ModelInputLimiter) register_simulation_module(Sensor, DeadTimeSensor)
def __init__(self, parent=None): QtGui.QMainWindow.__init__(self, parent) self._logger = logging.getLogger(self.__class__.__name__) self.setWindowTitle(u"Processing") self.setWindowIcon(QtGui.QIcon(get_resource("processing.png"))) self.mainFrame = QtGui.QWidget(self) self.resize(1000, 600) # toolbar self.toolBar = QtGui.QToolBar(u"file control") self.toolBar.setIconSize(QtCore.QSize(24, 24)) self.addToolBar(self.toolBar) self.actLoad = QtGui.QAction(self) self.actLoad.setText(u"load result file") self.actLoad.setIcon(QtGui.QIcon(get_resource("load.png"))) self.actLoad.setDisabled(False) self.actLoad.triggered.connect(self.load_result_files) self.actPostLoad = QtGui.QAction(self) self.actPostLoad.setText(u"load post-result file") self.actPostLoad.setIcon(QtGui.QIcon(get_resource("load.png"))) self.actPostLoad.setDisabled(False) self.actPostLoad.triggered.connect(self.load_post_result_files) self.actSwitch = QtGui.QAction(self) self.actSwitch.setText(u"switch display mode") self.actSwitch.setIcon(QtGui.QIcon(get_resource("left_mode.png"))) self.actSwitch.setDisabled(False) self.actSwitch.triggered.connect(self.switch_sides) self.displayLeft = True self.spacer1 = QtGui.QWidget() self.spacer2 = QtGui.QWidget() self.spacer1.setSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Expanding) self.spacer2.setSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Expanding) self.actReloadMethods = QtGui.QAction(self) self.actReloadMethods.setText(u"reload methods") self.actReloadMethods.setIcon(QtGui.QIcon(get_resource("reload.png"))) self.actReloadMethods.setDisabled(False) self.actReloadMethods.triggered.connect(self.update_post_method_list) self.actReloadMetaMethods = QtGui.QAction(self) self.actReloadMetaMethods.setText(u"reload meta methods") self.actReloadMetaMethods.setIcon( QtGui.QIcon(get_resource("reload.png"))) self.actReloadMetaMethods.setDisabled(False) self.actReloadMetaMethods.triggered.connect( self.update_meta_method_list) self.toolBar.addAction(self.actLoad) self.toolBar.addAction(self.actReloadMethods) self.toolBar.addWidget(self.spacer1) self.toolBar.addAction(self.actSwitch) self.toolBar.addWidget(self.spacer2) self.toolBar.addAction(self.actReloadMetaMethods) self.toolBar.addAction(self.actPostLoad) # main window self.grid = QtGui.QGridLayout(self.mainFrame) self.grid.setColumnMinimumWidth(0, 70) self.grid.setColumnStretch(0, 0) self.grid.setColumnStretch(1, 1) self.methodList = QtGui.QListWidget(self) self.methodList.itemDoubleClicked.connect(self.post_processor_clicked) self.update_post_method_list() self.metaMethodList = QtGui.QListWidget(self) self.metaMethodList.itemDoubleClicked.connect( self.meta_processor_clicked) self.update_meta_method_list() self.sim_result_list = QtGui.QListWidget(self) self.sim_results_changed.connect(self.update_result_list) self.results = [] self.delShort = QtGui.QShortcut( QtGui.QKeySequence(QtCore.Qt.Key_Delete), self.sim_result_list) self.delShort.activated.connect(self.remove_result_item) # figures self._figure_dict = {} self.figures_changed.connect(self.update_figure_lists) self.post_figure_list = QtGui.QListWidget(self) self.post_figure_list.currentItemChanged.connect( self.current_figure_changed) self.meta_figure_list = QtGui.QListWidget(self) self.meta_figure_list.currentItemChanged.connect( self.current_figure_changed) self.plotView = QtGui.QWidget() self.lastFigure = None self.post_result_list = QtGui.QListWidget(self) self.post_results_changed.connect(self.update_post_result_list) self.post_results = [] self.delShortPost = QtGui.QShortcut( QtGui.QKeySequence(QtCore.Qt.Key_Backspace), self.post_result_list) self.delShortPost.activated.connect(self.remove_post_result_item) # log window self.log_list = QPlainTextEditLogger(self) self.log_list.setLevel(logging.INFO) formatter = logging.Formatter( fmt="%(asctime)s - %(name)s - %(levelname)s - %(message)s", datefmt="%H:%M:%S") self.filter = PostFilter() self.log_list.addFilter(self.filter) self.log_list.setFormatter(formatter) logging.getLogger().addHandler(self.log_list) self.grid.addWidget(QtGui.QLabel(u"result files:"), 0, 0) self.grid.addWidget(self.sim_result_list, 1, 0) self.grid.addWidget(QtGui.QLabel(u"Postprocessors:"), 2, 0) self.grid.addWidget(self.methodList, 3, 0) self.grid.addWidget(QtGui.QLabel(u"figures:"), 4, 0) self.grid.addWidget(self.post_figure_list, 5, 0) self.grid.addWidget(QtGui.QLabel(u"selected figure:"), 0, 1) self.grid.addWidget(QtGui.QLabel(u"postprocessor files:"), 0, 2) self.grid.addWidget(self.post_result_list, 1, 2) self.grid.addWidget(QtGui.QLabel(u"Metaprocessors:"), 2, 2) self.grid.addWidget(self.metaMethodList, 3, 2) self.grid.addWidget(QtGui.QLabel(u"figures:"), 4, 2) self.grid.addWidget(self.meta_figure_list, 5, 2) self.grid.addWidget(self.log_list.widget, 6, 0, 1, 3) self.mainFrame.setLayout(self.grid) self.setCentralWidget(self.mainFrame) # status bar self.statusBar = QtGui.QStatusBar(self) self.setStatusBar(self.statusBar)
def __init__(self, parent=None): QtGui.QMainWindow.__init__(self, parent) self._logger = logging.getLogger(self.__class__.__name__) self.setWindowTitle(u"Processing") self.setWindowIcon(QtGui.QIcon(get_resource("processing.png"))) self.mainFrame = QtGui.QWidget(self) self.resize(1000, 600) # toolbar self.toolBar = QtGui.QToolBar(u"file control") self.toolBar.setIconSize(QtCore.QSize(24, 24)) self.addToolBar(self.toolBar) self.actLoad = QtGui.QAction(self) self.actLoad.setText(u"load result file") self.actLoad.setIcon(QtGui.QIcon(get_resource("load.png"))) self.actLoad.setDisabled(False) self.actLoad.triggered.connect(self.load_result_files) self.actPostLoad = QtGui.QAction(self) self.actPostLoad.setText(u"load post-result file") self.actPostLoad.setIcon(QtGui.QIcon(get_resource("load.png"))) self.actPostLoad.setDisabled(False) self.actPostLoad.triggered.connect(self.load_post_result_files) self.actSwitch = QtGui.QAction(self) self.actSwitch.setText(u"switch display mode") self.actSwitch.setIcon(QtGui.QIcon(get_resource("left_mode.png"))) self.actSwitch.setDisabled(False) self.actSwitch.triggered.connect(self.switch_sides) self.displayLeft = True self.spacer1 = QtGui.QWidget() self.spacer2 = QtGui.QWidget() self.spacer1.setSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Expanding) self.spacer2.setSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Expanding) self.actReloadMethods = QtGui.QAction(self) self.actReloadMethods.setText(u"reload methods") self.actReloadMethods.setIcon(QtGui.QIcon(get_resource("reload.png"))) self.actReloadMethods.setDisabled(False) self.actReloadMethods.triggered.connect(self.update_post_method_list) self.actReloadMetaMethods = QtGui.QAction(self) self.actReloadMetaMethods.setText(u"reload meta methods") self.actReloadMetaMethods.setIcon(QtGui.QIcon(get_resource("reload.png"))) self.actReloadMetaMethods.setDisabled(False) self.actReloadMetaMethods.triggered.connect(self.update_meta_method_list) self.toolBar.addAction(self.actLoad) self.toolBar.addAction(self.actReloadMethods) self.toolBar.addWidget(self.spacer1) self.toolBar.addAction(self.actSwitch) self.toolBar.addWidget(self.spacer2) self.toolBar.addAction(self.actReloadMetaMethods) self.toolBar.addAction(self.actPostLoad) # main window self.grid = QtGui.QGridLayout(self.mainFrame) self.grid.setColumnMinimumWidth(0, 70) self.grid.setColumnStretch(0, 0) self.grid.setColumnStretch(1, 1) self.methodList = QtGui.QListWidget(self) self.methodList.itemDoubleClicked.connect(self.post_processor_clicked) self.update_post_method_list() self.metaMethodList = QtGui.QListWidget(self) self.metaMethodList.itemDoubleClicked.connect(self.meta_processor_clicked) self.update_meta_method_list() self.sim_result_list = QtGui.QListWidget(self) self.sim_results_changed.connect(self.update_result_list) self.results = [] self.delShort = QtGui.QShortcut(QtGui.QKeySequence(QtCore.Qt.Key_Delete), self.sim_result_list) self.delShort.activated.connect(self.remove_result_item) # figures self._figure_dict = {} self.figures_changed.connect(self.update_figure_lists) self.post_figure_list = QtGui.QListWidget(self) self.post_figure_list.currentItemChanged.connect(self.current_figure_changed) self.meta_figure_list = QtGui.QListWidget(self) self.meta_figure_list.currentItemChanged.connect(self.current_figure_changed) self.plotView = QtGui.QWidget() self.lastFigure = None self.post_result_list = QtGui.QListWidget(self) self.post_results_changed.connect(self.update_post_result_list) self.post_results = [] self.delShortPost = QtGui.QShortcut(QtGui.QKeySequence(QtCore.Qt.Key_Backspace), self.post_result_list) self.delShortPost.activated.connect(self.remove_post_result_item) # log window self.log_list = QPlainTextEditLogger(self) self.log_list.setLevel(logging.INFO) formatter = logging.Formatter(fmt="%(asctime)s - %(name)s - %(levelname)s - %(message)s", datefmt="%H:%M:%S") self.filter = PostFilter() self.log_list.addFilter(self.filter) self.log_list.setFormatter(formatter) logging.getLogger().addHandler(self.log_list) self.grid.addWidget(QtGui.QLabel(u"result files:"), 0, 0) self.grid.addWidget(self.sim_result_list, 1, 0) self.grid.addWidget(QtGui.QLabel(u"Postprocessors:"), 2, 0) self.grid.addWidget(self.methodList, 3, 0) self.grid.addWidget(QtGui.QLabel(u"figures:"), 4, 0) self.grid.addWidget(self.post_figure_list, 5, 0) self.grid.addWidget(QtGui.QLabel(u"selected figure:"), 0, 1) self.grid.addWidget(QtGui.QLabel(u"postprocessor files:"), 0, 2) self.grid.addWidget(self.post_result_list, 1, 2) self.grid.addWidget(QtGui.QLabel(u"Metaprocessors:"), 2, 2) self.grid.addWidget(self.metaMethodList, 3, 2) self.grid.addWidget(QtGui.QLabel(u"figures:"), 4, 2) self.grid.addWidget(self.meta_figure_list, 5, 2) self.grid.addWidget(self.log_list.widget, 6, 0, 1, 3) self.mainFrame.setLayout(self.grid) self.setCentralWidget(self.mainFrame) # status bar self.statusBar = QtGui.QStatusBar(self) self.setStatusBar(self.statusBar)