# Copyright (c) 2010 Citrix Systems, Inc. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at: # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. from OVEStandard import * from OVEConfig import * from OVEFetch import * from OVELogger import * from OVEUtil import * from OVECommonWindow import * from Ui_MainWindow import * class OVEMainWindow(QtGui.QMainWindow, OVECommonWindow): LOAD_KEY = 'MainWindow/window' BASE_REF=100000 def __init__(self, app, loadIndex = None): QtGui.QMainWindow.__init__(self) self.ui = Ui_MainWindow() OVECommonWindow.__init__(self, app, loadIndex) def xon_tabWidget_currentChanged(self, value): self.deleteCurrentTable() OVECommonWindow.xon_tabWidget_currentChanged(self, value) def updateTable(self): if self.hostUuid == '': self.setWindowTitle('OVS Database') self.deleteCurrentTable() self.statusBar().showMessage('No host selected. Choose File->Preferences to add a host') else: config = OVEConfig.Inst().hostFromUuid(self.hostUuid) self.setWindowTitle('OVS Database - '+config.get('address', '')) self.invalidateCurrentTable('Fetching data...') tabName = self.ui.tabWidget.currentWidget().objectName() try: self.setFetchSkip() self.currentRef += 1 OVEFetch.Inst(self.hostUuid).getTable(self, tabName, self.currentRef) except Exception, e: OVELog("Error fetching data: "+str(e)) self.invalidateCurrentTable(str(e)) def timerEvent(self, event): OVECommonWindow.timerEvent(self, event) def customEvent(self, event): OVECommonWindow.customEvent(self, event) def handleFetchEvent(self, ref, values): tabName = self.ui.tabWidget.currentWidget().objectName() self.structToTable(getattr(self.ui, str(tabName)+'Table'), values) def handleFetchFailEvent(self, ref, message): self.invalidateCurrentTable(str(message)) def structToTable(self, table, values): table.setUpdatesEnabled(False) table.setSortingEnabled(False) for result in values: rowNum = 0 table.setRowCount(len(result['rows'])) for row in result['rows']: table.setColumnCount(len(row)) colNum=0 for k in sorted(row.keys()): v = row[k] headerItem = QtGui.QTableWidgetItem(k) table.setHorizontalHeaderItem(colNum, headerItem) text = OVEUtil.paramToString(v) item = QtGui.QTableWidgetItem(text) longText = OVEUtil.paramToLongString(v) item.setToolTip(longText) table.setItem(rowNum, colNum, item) colNum+=1 rowNum+=1 for i in range(0, table.columnCount()): table.resizeColumnToContents(i) for i in range(0, table.rowCount()): table.resizeRowToContents(i) # table.setSortingEnabled(True) table.setUpdatesEnabled(True) message = 'Updated at '+str(QtCore.QTime.currentTime().toString()) if table.rowCount() == 0: message += ' - Table is empty' self.statusBar().showMessage(message) def invalidateCurrentTable(self, message): tabName = self.ui.tabWidget.currentWidget().objectName() self.invalidateTable(getattr(self.ui, str(tabName)+'Table'), message) def invalidateTable(self, table, message): table.setUpdatesEnabled(False) table.setSortingEnabled(False) for rowNum in range(0, table.rowCount()): for colNum in range(0, table.columnCount()): item = table.takeItem(rowNum, colNum) if item is not None: item.setForeground(Qt.darkGray) table.setItem(rowNum, colNum, item) self.statusBar().showMessage(message) # table.setSortingEnabled(True) table.setUpdatesEnabled(True) def deleteCurrentTable(self): tabName = self.ui.tabWidget.currentWidget().objectName() self.deleteTable(getattr(self.ui, str(tabName)+'Table')) def deleteTable(self, table): table.clear() table.setRowCount(0) table.setColumnCount(0) def saveSettings(self, index): settings = OVECommonWindow.saveSettings(self, index) def loadSettings(self, index): settings = OVECommonWindow.loadSettings(self, index)