From 1d5c6ae767938eadc0c78b132af254c3836531ff Mon Sep 17 00:00:00 2001
From: Kukuksumusu <stercjak@fit.cvut.cz>
Date: Mon, 13 Mar 2017 15:35:47 +0100
Subject: [PATCH] displaying group members

---
 .../controllers/mainwindow_controller.py      | 23 +++++++++++++------
 Implementace/database.py                      | 16 ++++++-------
 Implementace/main.py                          | 13 +++++++----
 Implementace/model/person.py                  |  2 +-
 Implementace/model/qtmodels/GroupListModel.py | 19 +++++++++++++++
 .../model/qtmodels/PersonListModel.py         | 20 ++++++++++++++++
 Implementace/windows/mainwindow.py            | 13 ++++-------
 Implementace/windows/qt/mainwindow.ui         | 14 ++++-------
 8 files changed, 82 insertions(+), 38 deletions(-)
 create mode 100644 Implementace/model/qtmodels/GroupListModel.py
 create mode 100644 Implementace/model/qtmodels/PersonListModel.py

diff --git a/Implementace/controllers/mainwindow_controller.py b/Implementace/controllers/mainwindow_controller.py
index 71bfcc0..23eccd8 100644
--- a/Implementace/controllers/mainwindow_controller.py
+++ b/Implementace/controllers/mainwindow_controller.py
@@ -1,5 +1,7 @@
-from windows import mainwindow
 from PyQt5 import QtWidgets as Qt
+from model.qtmodels.GroupListModel import GroupListModel
+from model.qtmodels.PersonListModel import PersonListModel
+from windows import mainwindow
 
 
 class Mainwindow(Qt.QMainWindow, mainwindow.Ui_MainWindow):
@@ -7,13 +9,20 @@ class Mainwindow(Qt.QMainWindow, mainwindow.Ui_MainWindow):
         super(Mainwindow, self).__init__(parent)
         self.db = db
         self.setupUi(self)
-        print(self.db.get_groups())
-        for group in self.db.get_groups():
-            self.listGroups.addItem(group.name)
-        self.listGroups.currentItemChanged.connect(self.show_people)
+        model = GroupListModel(self.db.get_groups())
+        self.listGroups.setModel(model)
+        self.listGroups.activated.connect(self.show_members)
+        self.listGroups.clicked.connect(self.show_members)
+        #for group in self.db.get_groups():
+         #   self.listGroups.addItem(group.name)
+        #self.listGroups.currentItemChanged.connect(self.show_people)
         #self.btnBrowse.clicked.connect(self.browse_folder)
         #self.list1.currentItemChanged.connect(self.show_content)
 
-    def show_people(self, current):
-        self.listPeople.clear()
+    def show_members(self, current):
+        group = current.data(GroupListModel.modelRole)
+        members = self.db.get_group_members(group.id)
+        model = PersonListModel(members)
+        self.listPeople.setModel(model)
+
 
diff --git a/Implementace/database.py b/Implementace/database.py
index 33d4ee7..14e0566 100644
--- a/Implementace/database.py
+++ b/Implementace/database.py
@@ -10,7 +10,7 @@ class Database:
 
     def get_groups(self, person_id = None):
         if person_id is not None:
-            curs = self.connection.execute("SELECT * FROM GROUPS WHERE person_id = ?", person_id)
+            curs = self.connection.execute("SELECT * FROM GROUPS WHERE person_id = ?", str(person_id))
         else:
             curs = self.connection.execute("SELECT * FROM GROUPS")
         res = []
@@ -19,12 +19,12 @@ class Database:
         return res
 
     def get_group_members(self, group_id):
-        curs = self.connection.execute('''SELECT *
-                                        FROM person
-                                            JOIN person_to_group
-                                            JOIN groups
-                                        WHERE groups.group_id = ?''', group_id)
+        curs = self.connection.execute('''SELECT person.*
+                                    FROM person
+                                        JOIN person_to_group USING (person_id)
+                                        JOIN groups USING (group_id)
+                                    WHERE groups.group_id = ?''', str(group_id))
         res = []
         for row in curs:
-            print(row)
-            #res.append(Person())
\ No newline at end of file
+            res.append(Person(row[0], row[1], row[2]))
+        return res
diff --git a/Implementace/main.py b/Implementace/main.py
index 5cd23ed..7b039ed 100644
--- a/Implementace/main.py
+++ b/Implementace/main.py
@@ -7,11 +7,14 @@ from database import Database
 
 
 def main():
-    db = Database()
-    app = Qt.QApplication(sys.argv)
-    form = Mainwindow(db)
-    form.show()
-    app.exec_()
+    try:
+        db = Database()
+        app = Qt.QApplication(sys.argv)
+        form = Mainwindow(db)
+        form.show()
+        app.exec_()
+    except Exception as e:
+        print(e)
 
 if __name__ == '__main__':
     main()
\ No newline at end of file
diff --git a/Implementace/model/person.py b/Implementace/model/person.py
index 1e275f8..bf770af 100644
--- a/Implementace/model/person.py
+++ b/Implementace/model/person.py
@@ -4,4 +4,4 @@ class Person:
     def __init__(self, id, name, surname):
         self.id = id
         self.name = name
-        self.surname = surname
\ No newline at end of file
+        self.surname = surname
diff --git a/Implementace/model/qtmodels/GroupListModel.py b/Implementace/model/qtmodels/GroupListModel.py
new file mode 100644
index 0000000..74b45ea
--- /dev/null
+++ b/Implementace/model/qtmodels/GroupListModel.py
@@ -0,0 +1,19 @@
+from PyQt5 import QtGui, QtCore, uic
+
+
+class GroupListModel(QtCore.QAbstractListModel):
+    modelRole = -1
+
+    def __init__(self, groups=[], parent=None):
+        super(GroupListModel, self).__init__(parent)
+        self._groups = groups
+
+    def rowCount(self, parent=None, *args, **kwargs):
+        return len(self._groups)
+
+    def data(self, index, role=None):
+        if role == QtCore.Qt.DisplayRole:
+            return self._groups[index.row()].name
+
+        if role == GroupListModel.modelRole:
+            return self._groups[index.row()]
diff --git a/Implementace/model/qtmodels/PersonListModel.py b/Implementace/model/qtmodels/PersonListModel.py
new file mode 100644
index 0000000..5a34169
--- /dev/null
+++ b/Implementace/model/qtmodels/PersonListModel.py
@@ -0,0 +1,20 @@
+from PyQt5 import QtGui, QtCore, uic
+
+
+class PersonListModel(QtCore.QAbstractListModel):
+    modelRole = -1
+
+    def __init__(self, people=[], parent=None):
+        super(PersonListModel, self).__init__(parent)
+        self._people = people
+
+    def rowCount(self, parent=None, *args, **kwargs):
+        return len(self._people)
+
+    def data(self, index, role=None):
+        person = self._people[index.row()]
+        if role == QtCore.Qt.DisplayRole:
+            return person.name + " " + person.surname
+
+        if role == PersonListModel.modelRole:
+            return self._people[index.row()]
diff --git a/Implementace/windows/mainwindow.py b/Implementace/windows/mainwindow.py
index e32eba5..56a37fb 100644
--- a/Implementace/windows/mainwindow.py
+++ b/Implementace/windows/mainwindow.py
@@ -31,15 +31,14 @@ class Ui_MainWindow(object):
         self.horizontalLayout.setContentsMargins(11, 11, 11, 11)
         self.horizontalLayout.setSpacing(6)
         self.horizontalLayout.setObjectName("horizontalLayout")
-        self.listGroups = QtWidgets.QListWidget(self.centralWidget)
+        self.listGroups = QtWidgets.QListView(self.centralWidget)
+        self.listGroups.setEditTriggers(QtWidgets.QAbstractItemView.DoubleClicked|QtWidgets.QAbstractItemView.EditKeyPressed)
         self.listGroups.setViewMode(QtWidgets.QListView.ListMode)
         self.listGroups.setObjectName("listGroups")
         self.horizontalLayout.addWidget(self.listGroups)
-        self.tablePeople = QtWidgets.QTableWidget(self.centralWidget)
-        self.tablePeople.setObjectName("tablePeople")
-        self.tablePeople.setColumnCount(0)
-        self.tablePeople.setRowCount(0)
-        self.horizontalLayout.addWidget(self.tablePeople)
+        self.listPeople = QtWidgets.QListView(self.centralWidget)
+        self.listPeople.setObjectName("listPeople")
+        self.horizontalLayout.addWidget(self.listPeople)
         self.verticalLayout_2.addLayout(self.horizontalLayout)
         MainWindow.setCentralWidget(self.centralWidget)
         self.menuBar = QtWidgets.QMenuBar(MainWindow)
@@ -54,6 +53,4 @@ class Ui_MainWindow(object):
         _translate = QtCore.QCoreApplication.translate
         MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
         self.btnAddGroup.setText(_translate("MainWindow", "Vytvořit skupinu"))
-        self.listGroups.setSortingEnabled(True)
-        self.tablePeople.setSortingEnabled(True)
 
diff --git a/Implementace/windows/qt/mainwindow.ui b/Implementace/windows/qt/mainwindow.ui
index 5a2de86..ffe7e9b 100644
--- a/Implementace/windows/qt/mainwindow.ui
+++ b/Implementace/windows/qt/mainwindow.ui
@@ -32,21 +32,17 @@
     <item>
      <layout class="QHBoxLayout" name="horizontalLayout">
       <item>
-       <widget class="QListWidget" name="listGroups">
+       <widget class="QListView" name="listGroups">
+        <property name="editTriggers">
+         <set>QAbstractItemView::DoubleClicked|QAbstractItemView::EditKeyPressed</set>
+        </property>
         <property name="viewMode">
          <enum>QListView::ListMode</enum>
         </property>
-        <property name="sortingEnabled">
-         <bool>true</bool>
-        </property>
        </widget>
       </item>
       <item>
-       <widget class="QTableWidget" name="tablePeople">
-        <property name="sortingEnabled">
-         <bool>true</bool>
-        </property>
-       </widget>
+       <widget class="QListView" name="listPeople"/>
       </item>
      </layout>
     </item>
-- 
GitLab