]> git.proxmox.com Git - mirror_ovs.git/blob - ovsdb/ovsdbmonitor/OVEMainWindow.py
ofproto: Add more thread safety annotations.
[mirror_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)