# we want the stock screens to show up in a specific order. plugins can
# show up in any order afterward.
- sort_order = ["mainscreen", "configscreen", "helpscreen"]
+ sort_order = ["mainscreen", "userscreen", "configscreen", "helpscreen"]
sort_order.reverse()
for modname in sort_order:
if modname in modnames:
creation_time = os.stat(rspec_file).st_ctime
last_update = time.ctime(creation_time)
- self.set("Slice data last updated on %s" % last_update, timeout=None)
+ self.set("Slice data last refreshed on %s" % last_update, timeout=None)
def reset(self):
self.setText("")
def __init__(self, parent=None):
QWidget.__init__(self, parent)
- self.logWindow = LogWindow(self)
- self.rspecWindow = RSpecWindow(self)
+ # These are top-level windows and should be initialized with parent set
+ # to our parent. Otherwise, getting a segfault on exit in Ubuntu.
+ self.logWindow = LogWindow(parent)
+ self.rspecWindow = RSpecWindow(parent)
self.pix = QLabel(self)
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)
+