Esempio n. 1
0
class MainWindow(QtGui.QMainWindow, layoutgen.MainStats):

    def __init__(self, parent=None):
        super(MainWindow, self).__init__(parent)
        uic.loadUi('ui/simulation.ui', self)

        self.sim = Simulation(400, negotiate_interval=90, submit_interval=200)
        self.sim.add_jobs()
        self.sim.farm.groups.update_quota(self.sim.farm)

        self.timer = QtCore.QTimer(self)
        self.timer.timeout.connect(self.advance_interval)

        self.quitBtn.clicked.connect(self.close)
        self.stepBtn.clicked.connect(self.advance_interval)
        self.radioDepthFirst.toggled.connect(self.toggle_fill_algorithm)
        self.radioBreadthFirst.toggled.connect(self.toggle_fill_algorithm)
        self.startStop.clicked.connect(self.toggle_run)
        self.simspeedSlider.valueChanged.connect(self.change_speed)
        self.to_plot = set(g.name for g in self.sim.farm.groups.active_groups())
        self.all_groups = self.sim.display_order()

        # ms between firing timer
        self.period = 350
        self.auto_run = False

        self.qedit = ManageQueues(self.sim)
        self.quitBtn.clicked.connect(self.qedit.close)
        self.toolButton.clicked.connect(self.qedit.show)
        self.make_status_layout()

    def change_speed(self, val):

        self.simspeedSlider.setToolTip(str(val))
        self.simspeedLabel.setText('%dms delay' % val)
        self.period = val
        if self.auto_run:
            self.timer.start(val)

    def advance_interval(self):
        self.sim.step(self.stepSize.value())
        t = self.sim.farm.time
        st = 't=%d (n in %d, s in %d)' % (t,
             self.sim.next_negotiate - t, self.sim.next_submit - t)
        self.timeLabel.setText(st)
        for grp, lbl in self._stat_labels.items():
            group = self.sim.farm.groups.get_by_name(grp)
            lbl.setText(self._format_grpstr(group))
        self.update_plot()

    def update_plot(self):
        x, y = self.sim.make_plotdata(self.to_plot)
        self.mpl.canvas.ax.cla()
        self.mpl.canvas.ax.stackplot(x, y, colors=self.gen_color(), baseline='zero')
        self.mpl.canvas.draw()

    def gen_color(self):
        for n, grp in enumerate(self.all_groups):
            if grp in self.to_plot:
                yield colors[n]

    def toggle_fill_algorithm(self, state):
        if state and 'DepthFirst' in self.sender().objectName():
            self.sim._set_neg_df()
        elif state and 'BreadthFirst' in self.sender().objectName():
            self.sim._set_neg_bf()

    def toggle_run(self):
        if self.auto_run:
            self.timer.stop()
            self.startStop.setText('Run')
            self.auto_run = False
        else:
            self.timer.start(self.period)
            self.startStop.setText('Pause')
            self.auto_run = True