X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;ds=sidebyside;f=sface%2Fsliceview.py;h=7490128ac2e7460999658b81fa9eb780dc193777;hb=18d18184d52738060acf301261c9d7412936ffc2;hp=92dd844b3cb53bfe6ce109f2e49b534db5df88fc;hpb=1123a48de43e859c145f1489257b92ad79323e14;p=sface.git
diff --git a/sface/sliceview.py b/sface/sliceview.py
index 92dd844..7490128 100644
--- a/sface/sliceview.py
+++ b/sface/sliceview.py
@@ -6,6 +6,7 @@ from PyQt4.QtGui import *
from sfa.util.record import SfaRecord, SliceRecord, AuthorityRecord
from sface.config import config
+from sface.sfidata import SfiData
NAME_COLUMN = 0
MEMBERSHIP_STATUS_COLUMN = 1
@@ -111,23 +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 = []
-
- i=0
- while (os.path.exists(config.getAuthorityListFile(i))):
- rec = self.readSliceRecord(i)
- if rec:
- name = str(rec.get_name())
- if (rec.get_type() == "slice"):
- slice_names.append(name)
- i=i+1
+ if (self.mode == MODE_AUTHORITY_SLICES):
+ slice_names = SfiData().getAuthorityHrns(type="slice")
+ else: # MODE_USER_SLICES
+ slice_names = SfiData().getUserSliceHrns()
rootItem = self.invisibleRootItem()
@@ -156,12 +155,60 @@ class SliceModel(QStandardItemModel):
return slices
- def readSliceRecord(self, i):
- rec_file = config.getAuthorityListFile(i)
- if os.path.exists(rec_file):
- xml = open(rec_file).read()
- rec = SliceRecord()
- rec.load_from_string(xml)
- return rec
- return None
+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("Slice list refreshed.")
+ self.updateSliceView()
+ else:
+ self.setStatus("Authority rec refresh error: %s" % (faultString))
+
+ def updateSliceView(self):
+ self.sliceModel.updateModel()
+
+ self.sliceView.setModel(self.sliceModel)
+ self.sliceView.resizeColumnToContents(0)