~ubuntu-branches/ubuntu/utopic/xen/utopic

« back to all changes in this revision

Viewing changes to tools/python/xen/xsview/xsviewer.py

  • Committer: Bazaar Package Importer
  • Author(s): Bastian Blank
  • Date: 2010-05-06 15:47:38 UTC
  • mto: (1.3.1) (15.1.1 sid) (4.1.1 experimental)
  • mto: This revision was merged to the branch mainline in revision 3.
  • Revision ID: james.westby@ubuntu.com-20100506154738-agoz0rlafrh1fnq7
Tags: upstream-4.0.0
ImportĀ upstreamĀ versionĀ 4.0.0

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
from qt import *
 
2
 
 
3
import xen.lowlevel.xs
 
4
 
 
5
class XSViewer(QMainWindow):
 
6
    
 
7
    def __init__(self, app):
 
8
        apply(QMainWindow.__init__, (self,))
 
9
        
 
10
        self.setCaption('XenStore Viewer')
 
11
 
 
12
        self.new_node = QAction(self, 'New Node')
 
13
        self.new_node.setText('New Node...')
 
14
        self.connect(self.new_node, SIGNAL('activated()'),
 
15
                     self.do_new_node)
 
16
        
 
17
        self.rm_node = QAction(self, 'Remove Node')
 
18
        self.rm_node.setText('Remove Node')
 
19
        self.connect(self.rm_node, SIGNAL('activated()'),
 
20
                     self.do_rm_node)
 
21
 
 
22
        self.refresh = QAction(self, 'Refresh')
 
23
        self.refresh.setText('Refresh')
 
24
        self.connect(self.refresh, SIGNAL('activated()'),
 
25
                     self.do_refresh)
 
26
 
 
27
        self.file_menu = QPopupMenu(self)
 
28
        self.new_node.addTo(self.file_menu)
 
29
        self.rm_node.addTo(self.file_menu)
 
30
        self.refresh.addTo(self.file_menu)
 
31
 
 
32
 
 
33
        self.about = QAction(self, 'About')
 
34
        self.about.setText('About...')
 
35
        self.connect(self.about, SIGNAL('activated()'),
 
36
                     self.do_about)
 
37
 
 
38
        self.help_menu = QPopupMenu(self)
 
39
        self.about.addTo(self.help_menu)
 
40
 
 
41
        self.menubar = QMenuBar(self)
 
42
        self.menubar.insertItem('&File', self.file_menu)
 
43
        self.menubar.insertItem('&Help', self.help_menu)
 
44
 
 
45
        self.vbox = QVBox(self)
 
46
        self.setCentralWidget(self.vbox)
 
47
 
 
48
        self.xs_tree = QListView(self.vbox)
 
49
        self.xs_tree.addColumn('Key')
 
50
        self.xs_tree.setRootIsDecorated(1)
 
51
        self.xs_tree.connect(self.xs_tree, SIGNAL('selectionChanged(QListViewItem*)'), self.showValue)
 
52
 
 
53
        self.info_box = QHBox(self.vbox)
 
54
        self.info_box.setMargin(2)
 
55
        self.info_box.setSpacing(2)
 
56
        self.info_label = QLabel(self.info_box)
 
57
        self.info_label.setText('Value')
 
58
        self.info = QLineEdit(self.info_box)
 
59
        self.setval = QPushButton(self.info_box)
 
60
        self.setval.setText('Set')
 
61
        self.setval.connect(self.setval, SIGNAL('clicked()'), self.setValue)
 
62
 
 
63
        self.xs_handle = xen.lowlevel.xs.xs()
 
64
 
 
65
        self.showtree()
 
66
 
 
67
 
 
68
    def showtree(self):
 
69
        xstransact = self.xs_handle.transaction_start()
 
70
        self.walktree(xstransact, '/', '/', self.xs_tree)
 
71
        self.xs_handle.transaction_end(xstransact)
 
72
 
 
73
    def walktree(self, trans, node, subdir_prepend, parent_widget):
 
74
 
 
75
        ents = self.xs_handle.ls(trans, node)
 
76
        if ents == None:
 
77
            return
 
78
 
 
79
        for e in ents:
 
80
            i = QListViewItem(parent_widget, e)
 
81
            i.full_path = subdir_prepend + e
 
82
            self.walktree(trans, i.full_path, i.full_path + '/', i)
 
83
 
 
84
    
 
85
    def showValue(self, item):
 
86
        trans = self.xs_handle.transaction_start()
 
87
        val = self.xs_handle.read(trans, item.full_path)
 
88
        self.info.setText(val)
 
89
        self.xs_handle.transaction_end(trans)
 
90
 
 
91
 
 
92
    def setValue(self):
 
93
        trans = self.xs_handle.transaction_start()
 
94
        item = self.xs_tree.currentItem()
 
95
        newval = str(self.info.text())
 
96
 
 
97
        self.xs_handle.write(trans, item.full_path, newval)
 
98
 
 
99
        self.xs_handle.transaction_end(trans)
 
100
 
 
101
 
 
102
    def do_refresh(self):
 
103
        self.xs_tree.clear()
 
104
        self.info.clear()
 
105
        self.showtree()
 
106
 
 
107
    def do_new_node(self):
 
108
        dia = QDialog(self)
 
109
        dia.setCaption('Create new node')
 
110
 
 
111
        vbox = QVBox(dia)
 
112
 
 
113
        setting_hbox = QHBox(vbox)
 
114
        
 
115
        path_label = QLabel(setting_hbox)
 
116
        path_label.setText('Node path')
 
117
        path = QLineEdit(setting_hbox)
 
118
        
 
119
        value_label = QLabel(setting_hbox)
 
120
        value_label.setText('Node value')
 
121
        val = QLineEdit(setting_hbox)
 
122
 
 
123
        button_hbox = QHBox(vbox)
 
124
 
 
125
        set = QPushButton(button_hbox)
 
126
        set.setText('Set')
 
127
        self.connect(set, SIGNAL('clicked()'), dia, SLOT('accept()'))
 
128
 
 
129
        cancel = QPushButton(button_hbox)
 
130
        cancel.setText('Cancel')
 
131
        self.connect(cancel, SIGNAL('clicked()'), dia, SLOT('reject()'))
 
132
 
 
133
        setting_hbox.adjustSize()
 
134
        button_hbox.adjustSize()
 
135
        vbox.adjustSize()
 
136
 
 
137
        if dia.exec_loop() == QDialog.Accepted:
 
138
            trans = self.xs_handle.transaction_start()
 
139
            self.xs_handle.write(trans, str(path.text()), str(val.text()))
 
140
            
 
141
            self.xs_handle.transaction_end(trans)
 
142
 
 
143
            self.do_refresh()
 
144
        
 
145
        # nothing to set.
 
146
 
 
147
    def do_rm_node(self):
 
148
        trans = self.xs_handle.transaction_start()
 
149
        item = self.xs_tree.currentItem()
 
150
        newval = str(self.info.text())
 
151
 
 
152
        self.xs_handle.rm(trans, item.full_path)
 
153
 
 
154
        self.xs_handle.transaction_end(trans)
 
155
 
 
156
        self.do_refresh()
 
157
 
 
158
    def do_about(self):
 
159
        about_dia = QMessageBox(self)
 
160
        about_dia.setIcon(QMessageBox.Information)
 
161
 
 
162
        about_dia.setCaption('About XenStore Viewer')
 
163
        about_dia.setText('XenStore Viewer\n'
 
164
                          'by Mark Williamson <mark.williamson@cl.cam.ac.uk>')
 
165
 
 
166
        about_dia.exec_loop()
 
167
        
 
168