6 from PyQt4.QtCore import *
7 from PyQt4.QtGui import *
9 from sface.config import config
10 from sface.logwindow import LogWindow
11 from sface.xmlwindow import XmlWindow
12 from sface.screens.configscreen import ConfigScreen
13 from sface.screens.mainscreen import MainScreen
16 def __init__(self, parent=None):
17 QWidget.__init__(self, parent)
19 self.title = QLabel("", self)
20 self.link = QLabel("", self)
21 self.link.setAlignment(Qt.AlignRight)
23 hlayout = QHBoxLayout()
24 hlayout.addWidget(self.title)
26 hlayout.addWidget(self.link)
27 self.setLayout(hlayout)
29 def setTitle(self, title):
30 self.title.setText(title)
32 def setLink(self, link):
33 self.link.setText(link)
37 def __init__(self, parent=None):
38 QLabel.__init__(self, "", parent)
39 self.sliceUpdateDate()
41 def set(self, msg, timeout):
44 QTimer.singleShot(timeout, self.reset)
46 def sliceUpdateDate(self):
47 rspec_file = config.getSliceRSpecFile()
48 if not os.path.exists(rspec_file):
51 creation_time = os.stat(rspec_file).st_ctime
52 last_update = time.ctime(creation_time)
53 self.set("Slice data last updated on %s" % last_update, timeout=None)
57 QTimer.singleShot(1500, self.sliceUpdateDate)
59 class MainWindow(QWidget):
60 def __init__(self, parent=None):
61 QWidget.__init__(self, parent)
63 self.logWindow = LogWindow(self)
64 self.xmlWindow = XmlWindow(self)
66 self.pix = QLabel(self)
67 self.config_screen = ConfigScreen(self)
68 self.main_screen = MainScreen(self)
70 self.screens = QStackedWidget(self)
71 self.screens.addWidget(self.main_screen)
72 self.screens.addWidget(self.config_screen)
73 self.screens.addWidget(self.pix)
74 self.next_screen = None
77 self.nav.setTitle(self.main_screen.getTitleText())
78 self.nav.setLink(self.config_screen.getLinkText())
80 self.status = Status(self)
81 self.log = QLabel("<a href='showlog'>Show Log</a>", self)
82 self.xml = QLabel("<a href='showrspec'>Show RSpec</a>", self)
84 hlayout = QHBoxLayout()
85 hlayout.addWidget(self.status)
87 hlayout.addWidget(self.log)
88 hlayout.addWidget(self.xml)
90 layout = QVBoxLayout()
91 layout.addWidget(self.nav)
92 layout.addWidget(self.screens)
93 layout.addLayout(hlayout)
94 self.setLayout(layout)
97 self.connect(self.nav.link, SIGNAL('linkActivated(QString)'),
99 self.connect(self.log, SIGNAL('linkActivated(QString)'),
101 self.connect(self.xml, SIGNAL('linkActivated(QString)'),
104 def redirectOutputToLog(self):
105 self.logWindow.redirectOutput()
107 def showLogWindow(self, link):
108 self.logWindow.show()
109 self.logWindow.resize(500, 500)
110 self.logWindow.raise_()
111 self.logWindow.activateWindow()
113 def showXmlWindow(self, link):
114 self.xmlWindow.show()
115 self.xmlWindow.resize(500, 500)
116 self.xmlWindow.raise_()
117 self.xmlWindow.activateWindow()
119 def animatePixmap(self, y):
122 def animateToScreen(self, link):
123 if link == self.config_screen.name:
124 self.next_screen = self.config_screen
125 elif link == self.main_screen.name:
126 self.next_screen = self.main_screen
128 pixmap = QPixmap(self.screens.size())
129 self.screens.currentWidget().render(pixmap)
130 self.screens.setCurrentWidget(self.pix)
131 self.pix.setPixmap(pixmap)
133 timeLine = QTimeLine(500, self)
134 timeLine.setFrameRange(0, self.screens.height());
135 self.connect(timeLine, SIGNAL('frameChanged(int)'), self.animatePixmap)
136 self.connect(timeLine, SIGNAL('finished()'), self.toNextScreen)
140 def toNextScreen(self):
141 if self.next_screen == self.config_screen:
142 self.toConfigScreen()
143 elif self.next_screen == self.main_screen:
146 def toConfigScreen(self):
147 self.screens.setCurrentWidget(self.config_screen)
148 self.nav.setLink(self.main_screen.getLinkText())
149 self.nav.setTitle(self.config_screen.getTitleText())
151 def toMainScreen(self):
152 self.screens.setCurrentWidget(self.main_screen)
153 self.nav.setLink(self.config_screen.getLinkText())
154 self.nav.setTitle(self.main_screen.getTitleText())
156 def setStatus(self, msg, timeout):
157 self.status.set(msg, timeout)