support spacebar for user selection; make user names readonly
[sface.git] / sface / screens / userscreen.py
index 9eb2e6c..dd01804 100644 (file)
@@ -31,7 +31,16 @@ class UserView(QTableView):
         self.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)
         self.setToolTip("Double click on a row to change its status.")
 
+    def keyPressEvent(self, event):
+        if (event.key() == Qt.Key_Space):
+            self.toggleSelection()
+        else:
+            QTableView.keyPressEvent(self, event)
+
     def mouseDoubleClickEvent(self, event):
+        self.toggleSelection()
+
+    def toggleSelection(self):
         index = self.currentIndex()
         model = index.model()
         status_index = model.index(index.row(), MEMBERSHIP_STATUS_COLUMN, index.parent())
@@ -59,6 +68,9 @@ class UserView(QTableView):
         node_data = node_index.data().toString()
         self.emit(SIGNAL('hostnameClicked(QString)'), node_data)
 
+    def hideUnusableColumns(self):
+        self.hideColumn(SERVER_MEMBERSHIP_STATUS_COLUMN)
+
 class UserModel(QStandardItemModel):
     def __init__(self, rows=0, columns=4, parent=None):
          QStandardItemModel.__init__(self, rows, columns, parent)
@@ -82,7 +94,7 @@ class UserModel(QStandardItemModel):
                      slice_persons.append({"name": name, "role": "researcher", "member": user_status["in"]})
                      added_persons.append(name)
 
-        i=1
+        i=0
         while (os.path.exists(config.getAuthorityListFile(i))):
             rec = self.readUserRecord(i)
             if rec:
@@ -95,14 +107,18 @@ class UserModel(QStandardItemModel):
         rootItem = self.invisibleRootItem()
 
         for person in slice_persons:
-            rootItem.appendRow([QStandardItem(QString(person["name"])),
-                               #QStandardItem(QString(person["role"])),
-                               QStandardItem(QString(person["member"])),
-                               QStandardItem(QString(person["member"]))])
+            rootItem.appendRow([self.readOnlyItem(person["name"]),
+                                self.readOnlyItem(person["member"]),
+                                self.readOnlyItem(person["member"])])
 
         headers = QStringList() << "User Name" << "Status" << "ServerStatus"
         self.setHorizontalHeaderLabels(headers)
 
+    def readOnlyItem(self, x):
+        item = QStandardItem(QString(x))
+        item.setFlags(Qt.ItemIsSelectable | Qt.ItemIsEnabled)
+        return item
+
     def updateRecord(self, slicerec):
         change = False
 
@@ -126,6 +142,19 @@ class UserModel(QStandardItemModel):
 
         return change
 
+    def getResearchers(self):
+        researchers = []
+        item = self.invisibleRootItem()
+        children = item.rowCount()
+        for row in range(0, children):
+            childName = str(item.child(row, NAME_COLUMN).data(Qt.DisplayRole).toString())
+            childStatus = str(item.child(row, MEMBERSHIP_STATUS_COLUMN).data(Qt.DisplayRole).toString())
+
+            if (childStatus == user_status['add']) or (childStatus == user_status['in']):
+                researchers.append(childName)
+
+        return researchers
+
     def readUserRecord(self, i):
         rec_file = config.getAuthorityListFile(i)
         if os.path.exists(rec_file):