/
prehistorypresenter.py
88 lines (71 loc) · 2.96 KB
/
prehistorypresenter.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
from PySide.QtGui import QGridLayout, QFileDialog
from prehistorydisplay import PrehistoryDisplay
from prehistorysimulation import PrehistorySimulation
from planetdata import Data
from simthread import SimThread
class PrehistoryPresenter(object):
def __init__(self, view, uistack):
self._view = view
self._view.start.clicked.connect(self.start)
self._view.pause.clicked.connect(self.pause)
self._view.load.clicked.connect(self.load)
self._view.save.clicked.connect(self.save)
self._view.done.clicked.connect(self.done)
self._model = PrehistorySimulation(5, 1.0, 3, 23)
self._worker = SimThread(self._model)
self._worker.tick.connect(self.tick)
self._worker.simstarted.connect(self.started)
self._worker.simstopped.connect(self.stopped)
self._ticks = 0
self._worker.start()
self._display = PrehistoryDisplay(self._model)
self._view.content.setLayout(QGridLayout())
self._view.content.layout().addWidget(self._display)
self._view.rotate.setValue(self._display.rotate)
self._view.rotate.sliderMoved.connect(self.rotate)
self._view.pause.setVisible(False)
self._uistack = uistack
def rotate(self, value):
self._display.rotate = value
self._view.content.update()
def load(self):
filename = QFileDialog.getOpenFileName(self._view,
'Load simulation state',
'',
'*{0}'.format(Data.EXTENSION))[0]
if len(filename) > 0:
self._model.load(filename)
self._display.invalidate()
self._view.content.update()
def save(self):
filename = QFileDialog.getSaveFileName(self._view,
'Save simulation state',
'',
'*{0}'.format(Data.EXTENSION))[0]
if len(filename) > 0:
self._model.save(filename)
def done(self):
self._uistack.pop()
def started(self):
self._view.start.setVisible(False)
self._view.pause.setVisible(True)
self._view.pause.setEnabled(True)
self._view.done.setEnabled(False)
def stopped(self):
self._view.start.setVisible(True)
self._view.start.setEnabled(True)
self._view.pause.setVisible(False)
self._view.done.setEnabled(True)
def start(self):
self._view.start.setEnabled(False)
self._view.done.setEnabled(False)
self._worker.simulate(True)
def pause(self):
self._view.pause.setEnabled(False)
self._worker.simulate(False)
def tick(self):
self._ticks += 1
self._view.ticks.setNum(self._ticks)
self._view.races.setNum(self._model.peoples)
self._display.invalidate()
self._view.content.update()