Skip to content
Snippets Groups Projects
Commit 72f043f4 authored by Jakub Štercl's avatar Jakub Štercl
Browse files

groups overview: groups table displays as intended, members table displays correct data

parent 75cfa2fd
No related branches found
No related tags found
No related merge requests found
from windows import groupedit
from PyQt5 import QtWidgets as Qt
class GroupEditWindow(Qt.QMdiSubWindow, groupedit.Ui_Dialog):
def __init__(self, db, parent=None):
super(GroupEditWindow, self).__init__(parent)
self.db = db
self.setupUi(self)
\ No newline at end of file
from PyQt5.QtCore import *
from PyQt5.QtWidgets import * from PyQt5.QtWidgets import *
from globals import Global from globals import Global
from model.qtmodels.GroupTableModel import GroupTableModel from model.qtmodels.GroupTableModel import GroupTableModel
from model.qtmodels.PersonTableModel import PersonTableModel
from windows import groupsoverview from windows import groupsoverview
   
   
...@@ -9,17 +11,44 @@ class GroupsOverview(QWidget, groupsoverview.Ui_Form): ...@@ -9,17 +11,44 @@ class GroupsOverview(QWidget, groupsoverview.Ui_Form):
super(GroupsOverview, self).__init__(parent) super(GroupsOverview, self).__init__(parent)
self.setupUi(self) self.setupUi(self)
#self.btnCreateGroup.clicked.connect() #self.btnCreateGroup.clicked.connect()
model = GroupTableModel(Global.db.get_groups()) self._initializeGroupsTable()
def _initializeGroupsTable(self):
# initialize contents
model = GroupTableModel(Global.db.getGroups())
model.dataChanged.connect(self.nameButtons)
self.tableGroups.setModel(model) self.tableGroups.setModel(model)
self._buttons = []
for i in range(model.rowCount()): for i in range(model.rowCount()):
edit_button = QPushButton("edit" + str(i)) edit_button = QPushButton("edit")
group = model.data(self.tableGroups.model().index(i, 0), model.modelRole) self._buttons.append(edit_button)
edit_button.setObjectName(str(group.id)) self.nameButtons()
edit_button.clicked.connect(self.editGroup) edit_button.clicked.connect(self.editGroup)
self.tableGroups.setIndexWidget(self.tableGroups.model().index(i, 1), edit_button) self.tableGroups.setIndexWidget(self.tableGroups.model().index(i, 1), edit_button)
# initialize table settings (and signals)
header_view = self.tableGroups.horizontalHeader() header_view = self.tableGroups.horizontalHeader()
header_view.setSectionResizeMode(0, QHeaderView.Stretch) header_view.setSectionResizeMode(0, QHeaderView.Stretch)
header_view.resizeSection(1, 50) header_view.resizeSection(1, 50)
self.tableGroups.clicked.connect(self.showMembers)
self.tableGroups.activated.connect(self.showMembers)
self.tableGroups.sortByColumn(0, Qt.AscendingOrder)
@pyqtSlot()
def nameButtons(self):
model = self.tableGroups.model()
for i, button in enumerate(self._buttons):
group = model.data(model.index(i, 0), model.MODEL_ROLE)
button.setObjectName(str(group.id))
   
def editGroup(self): def editGroup(self):
print(self.sender().objectName()) print(self.sender().objectName())
\ No newline at end of file
def showMembers(self):
index = self.tableGroups.currentIndex()
model = self.tableGroups.model()
group = model.data(index, model.MODEL_ROLE)
members = group.getMembers()
model = PersonTableModel(members)
self.tableMembers.setModel(model)
\ No newline at end of file
...@@ -2,7 +2,7 @@ from PyQt5 import QtWidgets as Qt ...@@ -2,7 +2,7 @@ from PyQt5 import QtWidgets as Qt
   
from controllers.groups_overview_controller import GroupsOverview from controllers.groups_overview_controller import GroupsOverview
from model.qtmodels.GroupTableModel import GroupTableModel from model.qtmodels.GroupTableModel import GroupTableModel
from model.qtmodels.PersonListModel import PersonListModel from model.qtmodels.PersonTableModel import PersonTableModel
from windows import mainwindow from windows import mainwindow
from globals import Global from globals import Global
   
...@@ -21,21 +21,7 @@ class Mainwindow(Qt.QMainWindow, mainwindow.Ui_MainWindow): ...@@ -21,21 +21,7 @@ class Mainwindow(Qt.QMainWindow, mainwindow.Ui_MainWindow):
for controller in self._screens: for controller in self._screens:
self.stackedWidget.addWidget(controller) self.stackedWidget.addWidget(controller)
self.go_to_group_overview() self.go_to_group_overview()
# 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 go_to_group_overview(self): def go_to_group_overview(self):
self.stackedWidget.setCurrentWidget(self._screens[0]) self.stackedWidget.setCurrentWidget(self._screens[0])
   
# def show_members(self, current):
# group = current.data(GroupListModel.modelRole)
# members = Global.db.get_group_members(group.id)
# model = PersonListModel(members)
# self.listPeople.setModel(model)
...@@ -8,7 +8,7 @@ class Database: ...@@ -8,7 +8,7 @@ class Database:
self.connection = sqlite.connect('database.db') self.connection = sqlite.connect('database.db')
self.connection.isolation_level = None # so we don't have to use self.connection.commit() self.connection.isolation_level = None # so we don't have to use self.connection.commit()
   
def get_groups(self, person_id = None): def getGroups(self, person_id = None):
if person_id is not None: if person_id is not None:
curs = self.connection.execute("SELECT * FROM GROUPS WHERE person_id = ?", str(person_id)) curs = self.connection.execute("SELECT * FROM GROUPS WHERE person_id = ?", str(person_id))
else: else:
...@@ -18,7 +18,7 @@ class Database: ...@@ -18,7 +18,7 @@ class Database:
res.append(Group(row)) res.append(Group(row))
return res return res
   
def get_group_members(self, group_id): def getGroupMembers(self, group_id):
curs = self.connection.execute('''SELECT person.* curs = self.connection.execute('''SELECT person.*
FROM person FROM person
JOIN person_to_group USING (person_id) JOIN person_to_group USING (person_id)
......
from globals import Global
   
   
class Group: class Group:
def __init__(self, db_row): def __init__(self, db_row):
self.id = db_row[0] self.id = db_row[0]
self.name = db_row[1] self.name = db_row[1]
def getMembers(self):
return Global.db.getGroupMembers(self.id)
\ No newline at end of file
...@@ -3,7 +3,7 @@ from PyQt5.QtWidgets import QPushButton ...@@ -3,7 +3,7 @@ from PyQt5.QtWidgets import QPushButton
   
   
class GroupTableModel(QtCore.QAbstractTableModel): class GroupTableModel(QtCore.QAbstractTableModel):
modelRole = -1 MODEL_ROLE = -1
   
def __init__(self, groups=[], parent=None): def __init__(self, groups=[], parent=None):
super(GroupTableModel, self).__init__(parent) super(GroupTableModel, self).__init__(parent)
...@@ -16,15 +16,24 @@ class GroupTableModel(QtCore.QAbstractTableModel): ...@@ -16,15 +16,24 @@ class GroupTableModel(QtCore.QAbstractTableModel):
return 2 return 2
   
def headerData(self, p_int, Qt_Orientation, role=None): def headerData(self, p_int, Qt_Orientation, role=None):
if role == QtCore.Qt.DisplayRole: if role == QtCore.Qt.DisplayRole and p_int == 0:
return 'x' return 'Jméno skupiny'
   
def data(self, index, role=None): def data(self, index, role=None):
if role == QtCore.Qt.DisplayRole: if role == QtCore.Qt.DisplayRole:
if index.column() == 0: if index.column() == 0:
return self._groups[index.row()].name return self._groups[index.row()].name
if index.column() == 1:
return QPushButton("karel")
   
if role == GroupTableModel.modelRole: if role == GroupTableModel.MODEL_ROLE:
return self._groups[index.row()] return self._groups[index.row()]
def sort(self, p_int, order=None):
if p_int != 0:
return
if order == QtCore.Qt.AscendingOrder:
self._groups.sort(key=lambda group: group.name)
if order == QtCore.Qt.DescendingOrder:
self._groups.sort(key=lambda group: group.name, reverse=True)
self.dataChanged.emit(self.index(0, 0),
self.index(self.rowCount(), 0),
[])
from PyQt5 import QtGui, QtCore, uic from PyQt5 import QtGui, QtCore, uic
   
   
class PersonListModel(QtCore.QAbstractListModel): class PersonTableModel(QtCore.QAbstractTableModel):
modelRole = -1 MODEL_ROLE = -1
   
def __init__(self, people=[], parent=None): def __init__(self, people=[], parent=None):
super(PersonListModel, self).__init__(parent) super(PersonTableModel, self).__init__(parent)
self._people = people self._people = people
   
def rowCount(self, parent=None, *args, **kwargs): def rowCount(self, parent=None, *args, **kwargs):
return len(self._people) return len(self._people)
   
def columnCount(self, parent=None, *args, **kwargs):
return 3
def headerData(self, p_int, Qt_Orientation, role=None):
if role == QtCore.Qt.DisplayRole:
if p_int == 0:
return 'Jméno'
if p_int == 1:
return 'Příjmení'
def data(self, index, role=None): def data(self, index, role=None):
person = self._people[index.row()] person = self._people[index.row()]
if role == QtCore.Qt.DisplayRole: if role == QtCore.Qt.DisplayRole:
return person.name + " " + person.surname if index.column() == 0:
return person.name
if index.column() == 1:
return person.surname
   
if role == PersonListModel.modelRole: if role == PersonTableModel.MODEL_ROLE:
return self._people[index.row()] return self._people[index.row()]
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment