Esempio n. 1
0
    def init_gui(self):
        # create grid
        grid = QtGui.QGridLayout()
        self.setLayout(grid)

        # create plot
        self.plot = Plot(self.mainwindow)

        # create buttons
        buttonGrid = QtGui.QGridLayout()

        def play_simulation():
            self.timer.start(50)

        def rewind():
            self.step = 0

        self.playButton = QtGui.QPushButton('Play')
        self.playButton.clicked.connect(play_simulation)
        self.playButton.setDisabled(True)

        rewindButton = QtGui.QPushButton('Rewind')
        rewindButton.clicked.connect(rewind)

        stopButton = QtGui.QPushButton('Stop')
        stopButton.clicked.connect(self.timer.stop)

        buttonGrid.addWidget(self.playButton, 0, 0)
        buttonGrid.addWidget(rewindButton, 0, 1)
        buttonGrid.addWidget(stopButton, 0, 2)

        # set layout
        grid.addWidget(self.plot, 0, 0)
        grid.addLayout(buttonGrid, 1, 0)
Esempio n. 2
0
    def init__gui(self):
        # create grid layout
        grid = QtGui.QGridLayout()
        self.setLayout(grid)

        # create plot
        self.plot = Plot(self.mainwindow)

        # create simulation buttons
        simulationButtonBox = QtGui.QHBoxLayout()

        self.durationEdit = QtGui.QLineEdit(
                '{}'.format(self.mainwindow.job.config['duration']))
        self.durationEdit.textChanged.connect(self.duration_update)

        durationLabel = QtGui.QLabel('Duration:')
        durationLabel.setBuddy(self.durationEdit)

        startSimButton = QtGui.QPushButton('Start Simulation')
        startSimButton.clicked.connect(self.mainwindow.run_simulation)

        simulationButtonBox.addWidget(durationLabel)
        simulationButtonBox.addWidget(self.durationEdit)
        simulationButtonBox.addWidget(startSimButton)

        # create button grid
        layerButtonGrid = QtGui.QGridLayout()

        # create new layer button
        newLayerButton = QtGui.QPushButton('New Layer')
        newLayerButton.clicked.connect(self.new_layer_clicked)

        # create delete layer buttons
        deleteLayerButton = QtGui.QPushButton('Delete Layer')
        deleteLayerButton.clicked.connect(self.deleate_layer)

        # add buttons to grid layout
        layerButtonGrid.addWidget(newLayerButton, 0, 0)
        layerButtonGrid.addWidget(deleteLayerButton, 0, 1)

        # create tree view
        treeGrid = QtGui.QGridLayout()
        treeLabel = QtGui.QLabel('Layer:')

        # init tree
        self.treeWidget = QtGui.QTreeWidget()
        self.treeWidget.setHeaderLabels(['Name', 'Mask', 'Function'])
        self.treeWidget.setColumnCount(3)
        treeLabel.setBuddy(self.treeWidget)
        self.init_tree()

        # layout
        treeGrid.addWidget(treeLabel, 0, 0)
        treeGrid.addWidget(self.treeWidget, 1, 0)

        grid.addWidget(self.plot, 0, 0)
        grid.addLayout(simulationButtonBox, 1, 0)
        grid.addLayout(layerButtonGrid, 1, 1)
        grid.addLayout(treeGrid, 0, 1)
Esempio n. 3
0
class PlayTab(QtGui.QWidget):
    def __init__(self, mainwindow):
        # call base class constructor
        super(PlayTab, self).__init__()

        # save mainwindow
        self.mainwindow = mainwindow

        # create timer
        self.timer = QtCore.QTimer(self)

        # init gui
        self.init_gui()

        # init timer
        self.step = 0
        self.simulationHistory = [numpy.zeros(
            self.mainwindow.simulation.field.oddFieldX['field'].shape)]
        self.init_timer()

    def init_gui(self):
        # create grid
        grid = QtGui.QGridLayout()
        self.setLayout(grid)

        # create plot
        self.plot = Plot(self.mainwindow)

        # create buttons
        buttonGrid = QtGui.QGridLayout()

        def play_simulation():
            self.timer.start(50)

        def rewind():
            self.step = 0

        self.playButton = QtGui.QPushButton('Play')
        self.playButton.clicked.connect(play_simulation)
        self.playButton.setDisabled(True)

        rewindButton = QtGui.QPushButton('Rewind')
        rewindButton.clicked.connect(rewind)

        stopButton = QtGui.QPushButton('Stop')
        stopButton.clicked.connect(self.timer.stop)

        buttonGrid.addWidget(self.playButton, 0, 0)
        buttonGrid.addWidget(rewindButton, 0, 1)
        buttonGrid.addWidget(stopButton, 0, 2)

        # set layout
        grid.addWidget(self.plot, 0, 0)
        grid.addLayout(buttonGrid, 1, 0)

    def init_timer(self):
        # timer function
        def timeout():
            # increment step
            self.step += 1
            if self.step >= len(self.simulationHistory):
                self.step = 0

        # plot function
        def p():
            self.plot.plot(self.simulationHistory[self.step])

        # create timer
        self.timer.timeout.connect(p)
        self.timer.timeout.connect(timeout)

    def update(self):
        # upate plot
        self.plot.simulation = self.mainwindow.simulation
        self.plot.update()
Esempio n. 4
0
class EditTab(QtGui.QWidget):
    def __init__(self, mainwindow):
        # call base class constructor
        super(EditTab, self).__init__()

        # save mainwindow
        self.mainwindow = mainwindow

        # init gui
        self.init__gui()

    def init__gui(self):
        # create grid layout
        grid = QtGui.QGridLayout()
        self.setLayout(grid)

        # create plot
        self.plot = Plot(self.mainwindow)

        # create simulation buttons
        simulationButtonBox = QtGui.QHBoxLayout()

        self.durationEdit = QtGui.QLineEdit(
                '{}'.format(self.mainwindow.job.config['duration']))
        self.durationEdit.textChanged.connect(self.duration_update)

        durationLabel = QtGui.QLabel('Duration:')
        durationLabel.setBuddy(self.durationEdit)

        startSimButton = QtGui.QPushButton('Start Simulation')
        startSimButton.clicked.connect(self.mainwindow.run_simulation)

        simulationButtonBox.addWidget(durationLabel)
        simulationButtonBox.addWidget(self.durationEdit)
        simulationButtonBox.addWidget(startSimButton)

        # create button grid
        layerButtonGrid = QtGui.QGridLayout()

        # create new layer button
        newLayerButton = QtGui.QPushButton('New Layer')
        newLayerButton.clicked.connect(self.new_layer_clicked)

        # create delete layer buttons
        deleteLayerButton = QtGui.QPushButton('Delete Layer')
        deleteLayerButton.clicked.connect(self.deleate_layer)

        # add buttons to grid layout
        layerButtonGrid.addWidget(newLayerButton, 0, 0)
        layerButtonGrid.addWidget(deleteLayerButton, 0, 1)

        # create tree view
        treeGrid = QtGui.QGridLayout()
        treeLabel = QtGui.QLabel('Layer:')

        # init tree
        self.treeWidget = QtGui.QTreeWidget()
        self.treeWidget.setHeaderLabels(['Name', 'Mask', 'Function'])
        self.treeWidget.setColumnCount(3)
        treeLabel.setBuddy(self.treeWidget)
        self.init_tree()

        # layout
        treeGrid.addWidget(treeLabel, 0, 0)
        treeGrid.addWidget(self.treeWidget, 1, 0)

        grid.addWidget(self.plot, 0, 0)
        grid.addLayout(simulationButtonBox, 1, 0)
        grid.addLayout(layerButtonGrid, 1, 1)
        grid.addLayout(treeGrid, 0, 1)

    def init_tree(self):
        # clear tree
        self.treeWidget.clear()

        # init tree
        self.layerItems = []
        self.layerItems.append(QtGui.QTreeWidgetItem(None, ['Electric']))
        self.layerItems.append(QtGui.QTreeWidgetItem(None, ['Magnetic']))
        self.layerItems.append(QtGui.QTreeWidgetItem(None, ['Source']))
        self.layerItems.append(QtGui.QTreeWidgetItem(None, ['Listener']))
        self.treeWidget.addTopLevelItems(self.layerItems)

    # Button methods
    def duration_update(self):
        # update duration
        self.mainwindow.job.config['duration'] = \
        float(self.durationEdit.text())

    def new_layer_clicked(self):
        self.newLayerDialog = dialogs.NewLayer(mainwindow=self.mainwindow)
        self.newLayerDialog.okButton.clicked.connect(self.new_layer_create)
        self.newLayerDialog.show()

    def new_layer_create(self):
        # cloase dialog
        self.newLayerDialog.close()

        # get attributes
        name = self.newLayerDialog.nameEdit.text()
        type_ = self.newLayerDialog.typeComboBox.currentText()
        mask = self.newLayerDialog.maskEdit.text()
        function = self.newLayerDialog.functionEdit.text()
        x = float(self.newLayerDialog.xEdit.text())
        y = float(self.newLayerDialog.yEdit.text())

        # create new Layer
        self.new_layer(name, type_, mask, function=function, x=x, y=y)

        # add to job
        if type_ == 'Electric':
            self.mainwindow.job.material['electric'].append(
                    [name, mask, function])

        elif type_ == 'Magnetic':
            self.mainwindow.job.material['magnetic'].append(
                    [name, mask, function])

        elif type_ == 'Source':
            self.mainwindow.job.source.append([name, mask, function])

        elif type_ == 'Listener':
            self.mainwindow.job.listener.append([name, x, y])

        # update plot
        self.plot.update()
        self.mainwindow.playTab.update()

    def deleate_layer(self):
        # get current layer
        currentItem = self.treeWidget.currentItem()

        # get parent
        if not currentItem is None:
            parent = currentItem.parent()

        # delete layer from tree and job
        if not currentItem is None and not parent is None:
            # delete layer from job
            index = parent.indexOfChild(currentItem)
            type_ = parent.text(0)

            if type_ == 'Electric':
                self.mainwindow.job.material['electric'].remove(
                        self.mainwindow.job.material['electric'][index])
            elif type_ == 'Magnetic':
                self.mainwindow.job.material['magnetic'].remove(
                        self.mainwindow.job.material['magnetic'][index])
            elif type_ == 'Source':
                self.mainwindow.job.source.remove(
                        self.mainwindow.job.source[index])
            elif type_ == 'Listener':
                self.mainwindow.job.listener.remove(
                        self.mainwindow.job.listener[index])

            # delete layer from tree
            parent.removeChild(currentItem)

            # update plot
            self.plot.update()

    def update(self):
        # clear editTab tree
        self.init_tree()

        # update materials
        for name, mask, function in self.mainwindow.job.material['electric']:
            self.new_layer(name, 'Electric', mask, function)

        for name, mask, function in self.mainwindow.job.material['magnetic']:
            self.new_layer(name, 'Magnetic', mask, function)

        # update sources
        for name, mask, function in self.mainwindow.job.source:
            self.new_layer(name, 'Source', mask, function=function)

        # update listener
        for name, x, y in self.mainwindow.job.listener:
            self.new_layer(name, 'Listener', x=x, y=y)

        # update plot
        self.plot.update()
        self.mainwindow.playTab.update()

    def new_layer(self, name, type_, mask=None, function=None, x=0.0, y=0.0):
        # create layer
        try:
            if type_ == 'Electric':
                QtGui.QTreeWidgetItem(self.layerItems[0],
                        [name, mask, function])

            elif type_ == 'Magnetic':
                QtGui.QTreeWidgetItem(self.layerItems[1],
                        [name, mask, function])

            elif type_ == 'Source':
                QtGui.QTreeWidgetItem(self.layerItems[2],
                        [name, mask, function])

            elif type_ == 'Listener':
                QtGui.QTreeWidgetItem(self.layerItems[3],
                        [name, 'x={}, y={}'.format(x, y)])

        except SyntaxError:
            return

        except NameError:
            return

        except ValueError:
            return