self.screens = QStackedWidget(self)
for screen in screenClasses:
- screenWidget = screen(self)
- self.screenWidgets.append(screenWidget)
- self.screens.addWidget(screenWidget)
+ # use a try/catch block to isolate the screen. Third-party plugins
+ # could be buggy.
+ try:
+ screenWidget = screen(self)
+ self.screenWidgets.append(screenWidget)
+ self.screens.addWidget(screenWidget)
+ except:
+ print "Exception while creating screen", screen.__name__
+ traceback.print_exc()
self.screens.addWidget(self.pix)
self.next_screen = None
self.nav = Nav(self.screenWidgets, self)
- self.nav.setTitle(self.screenWidgets[0].getTitleText())
+
+ if self.screenWidgets:
+ self.nav.setTitle(self.screenWidgets[0].getTitleText())
self.status = Status(self)
self.log = QLabel("<a href='showlog'>Show Log</a>", self)
def nodeSelectionChanged(self, hostname):
if self.rspecWindow.isVisible():
self.rspecWindow.showNode(hostname)
+
+ def closeEvent(self, event):
+ # give the screens an opportunity to veto the close
+ for screen in self.screenWidgets:
+ if not screen.canClose():
+ event.ignore()
+ return
+
+ # give the screens an opportunity to close gracefully
+ for screen in self.screenWidgets:
+ screen.mainWindowClose()
+
+ QWidget.closeEvent(self, event)
+