8d3d8304a37709798bfe2667d972028c14b2c87f
[cascardo/ovs.git] / ovsdb / ovsdbmonitor / OVEMainWindow.py
1 # Copyright (c) 2010 Citrix Systems, Inc.
2 #
3 # Licensed under the Apache License, Version 2.0 (the "License");
4 # you may not use this file except in compliance with the License.
5 # You may obtain a copy of the License at:
6 #
7 #     http://www.apache.org/licenses/LICENSE-2.0
8 #
9 # Unless required by applicable law or agreed to in writing, software
10 # distributed under the License is distributed on an "AS IS" BASIS,
11 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 # See the License for the specific language governing permissions and
13 # limitations under the License.
14
15 from OVEStandard import *
16 from OVEConfig import *
17 from OVEFetch import *
18 from OVELogger import *
19 from OVEUtil import *
20
21 from OVECommonWindow import *
22
23 from Ui_MainWindow import *
24
25 class OVEMainWindow(QtGui.QMainWindow, OVECommonWindow):
26     LOAD_KEY = 'MainWindow/window'
27     BASE_REF=100000
28     
29     def __init__(self, app, loadIndex = None):
30         QtGui.QMainWindow.__init__(self)
31         self.ui = Ui_MainWindow()
32         OVECommonWindow.__init__(self, app, loadIndex)
33     
34     def xon_tabWidget_currentChanged(self, value):
35         self.deleteCurrentTable()
36         OVECommonWindow.xon_tabWidget_currentChanged(self, value)
37
38     def updateTable(self):
39         if self.hostUuid == '':
40             self.setWindowTitle('OVS Database')
41             self.deleteCurrentTable()
42             self.statusBar().showMessage('No host selected.  Choose File->Preferences to add a host')
43         else:
44             config = OVEConfig.Inst().hostFromUuid(self.hostUuid)
45             self.setWindowTitle('OVS Database - '+config.get('address', ''))
46             self.invalidateCurrentTable('Fetching data...')
47             tabName = self.ui.tabWidget.currentWidget().objectName()
48             try:
49                 self.setFetchSkip()
50                 self.currentRef += 1
51                 OVEFetch.Inst(self.hostUuid).getTable(self, tabName, self.currentRef)
52             except Exception, e:
53                 OVELog("Error fetching data: "+str(e))
54                 self.invalidateCurrentTable(str(e))
55
56     def timerEvent(self, event):
57         OVECommonWindow.timerEvent(self, event)
58
59     def customEvent(self, event):
60         OVECommonWindow.customEvent(self, event)
61
62     def handleFetchEvent(self, ref, values):
63         tabName = self.ui.tabWidget.currentWidget().objectName()
64         self.structToTable(getattr(self.ui, str(tabName)+'Table'), values)
65  
66     def handleFetchFailEvent(self, ref, message):
67         self.invalidateCurrentTable(str(message))
68
69     def structToTable(self, table, values):
70         
71         table.setUpdatesEnabled(False)
72         table.setSortingEnabled(False)
73         
74         for result in values:
75             rowNum = 0
76             table.setRowCount(len(result['rows']))
77             for row in result['rows']:
78                 table.setColumnCount(len(row))
79                 colNum=0
80                 for k in sorted(row.keys()):
81                     v = row[k]
82                     headerItem = QtGui.QTableWidgetItem(k)
83                     table.setHorizontalHeaderItem(colNum, headerItem)
84                     text = OVEUtil.paramToString(v)
85                     item = QtGui.QTableWidgetItem(text)
86                     longText = OVEUtil.paramToLongString(v)
87                     item.setToolTip(longText)
88
89                     table.setItem(rowNum, colNum, item)
90                     colNum+=1
91
92                 rowNum+=1
93                 
94         for i in range(0, table.columnCount()):
95             table.resizeColumnToContents(i)
96         for i in range(0, table.rowCount()):
97             table.resizeRowToContents(i)
98         
99         # table.setSortingEnabled(True)
100         table.setUpdatesEnabled(True)
101         
102         message = 'Updated at '+str(QtCore.QTime.currentTime().toString())
103         if table.rowCount() == 0:
104             message += ' - Table is empty'
105         self.statusBar().showMessage(message)
106
107     def invalidateCurrentTable(self, message):
108         tabName = self.ui.tabWidget.currentWidget().objectName()
109         self.invalidateTable(getattr(self.ui, str(tabName)+'Table'), message)
110
111     def invalidateTable(self, table, message):
112         table.setUpdatesEnabled(False)
113         table.setSortingEnabled(False)
114         
115         for rowNum in range(0, table.rowCount()):
116             for colNum in range(0, table.columnCount()):
117                 item = table.takeItem(rowNum, colNum)
118                 if item is not None:
119                     item.setForeground(Qt.darkGray)
120                     table.setItem(rowNum, colNum, item)
121         self.statusBar().showMessage(message)
122         # table.setSortingEnabled(True)
123         table.setUpdatesEnabled(True)
124
125     def deleteCurrentTable(self):
126         tabName = self.ui.tabWidget.currentWidget().objectName()
127         self.deleteTable(getattr(self.ui, str(tabName)+'Table'))
128
129     def deleteTable(self, table):
130         table.clear()
131         table.setRowCount(0)
132         table.setColumnCount(0)
133         
134     def saveSettings(self, index):
135         settings = OVECommonWindow.saveSettings(self, index)
136     
137     def loadSettings(self, index):
138         settings = OVECommonWindow.loadSettings(self, index)