add slice picker window
[sface.git] / sface / sliceview.py
index 65b6572..7490128 100644 (file)
@@ -112,14 +112,21 @@ class SliceView(QTableView):
         node_index = model.index(current.row(), 0, current.parent())
         node_data = node_index.data().toString()
 
+MODE_AUTHORITY_SLICES = 1
+MODE_USER_SLICES = 2
+
 class SliceModel(QStandardItemModel):
-    def __init__(self, rows=0, columns=4, parent=None):
+    def __init__(self, rows=0, columns=4, parent=None, mode=MODE_AUTHORITY_SLICES):
          QStandardItemModel.__init__(self, rows, columns, parent)
+         self.mode = mode
 
     def updateModel(self):
         self.clear()
 
-        slice_names = SfiData().getAuthorityHrns(type="slice")
+        if (self.mode == MODE_AUTHORITY_SLICES):
+            slice_names = SfiData().getAuthorityHrns(type="slice")
+        else: # MODE_USER_SLICES
+            slice_names = SfiData().getUserSliceHrns()
 
         rootItem = self.invisibleRootItem()
 
@@ -148,3 +155,60 @@ class SliceModel(QStandardItemModel):
 
         return slices
 
+class SlicePickerWindow(QDialog):
+    def __init__(self, parent=None):
+        super(SlicePickerWindow, self).__init__(parent)
+        self.setWindowTitle("Slice Picker")
+
+        sliceLabel = QLabel("Slices:")
+        self.sliceView = SliceView()
+
+        self.status = QLabel("")
+        self.status.setMaximumWidth(640)
+
+        self.buttonBox = QDialogButtonBox(QDialogButtonBox.Ok | QDialogButtonBox.Cancel)
+        self.buttonBox.button(QDialogButtonBox.Ok).setDefault(True)
+
+        layout = QVBoxLayout()
+        layout.addWidget(sliceLabel)
+        layout.addWidget(self.sliceView)
+        layout.addWidget(self.status)
+        layout.addWidget(self.buttonBox)
+        self.setLayout(layout)
+
+        self.connect(self.buttonBox, SIGNAL("accepted()"), self, SLOT("accept()"))
+        self.connect(self.buttonBox, SIGNAL("rejected()"), self, SLOT("reject()"))
+
+        self.sliceModel = SliceModel()
+        self.refreshAuthority()
+
+    def accept(self):
+        self.slices = self.sliceModel.getSelectedSlices()
+        QDialog.accept(self)
+
+    def setStatus(self, x):
+        self.status.setText(x)
+
+    def refreshAuthority(self):
+        self.process = SfiProcess(self)
+        self.connect(self.process, SIGNAL('finished()'), self.getAuthorityRecordFinished)
+
+        self.process.listRecords(config.getAuthority(), None)
+        self.setStatus("Refreshing slice list. This will take a moment...")
+
+    def getAuthorityRecordFinished(self):
+        self.disconnect(self.process, SIGNAL('finished()'), self.getAuthorityRecordFinished)
+
+        faultString = self.process.getFaultString()
+        if not faultString:
+            self.setStatus("<font color='green'>Slice list refreshed.</font>")
+            self.updateSliceView()
+        else:
+            self.setStatus("<font color='red'>Authority rec refresh error: %s</font>" % (faultString))
+
+    def updateSliceView(self):
+        self.sliceModel.updateModel()
+
+        self.sliceView.setModel(self.sliceModel)
+        self.sliceView.resizeColumnToContents(0)
+