From ec10d9679a90944d651cf4e13c2a390f99ce6084 Mon Sep 17 00:00:00 2001 From: Kukuksumusu <stercjak@fit.cvut.cz> Date: Mon, 3 Apr 2017 12:54:01 +0200 Subject: [PATCH] improved tables, improved groupedit, added distribution_setup + requirement_dialog... PS: A lot of changes (I should be committing more often :/) --- .../controllers/distribution_setup.py | 62 +++ .../controllers/group_edit_controller.py | 80 +++- .../controllers/groups_overview_controller.py | 14 +- .../controllers/mainwindow_controller.py | 45 ++- .../controllers/requirement_dialog.py | 16 + Implementace/database.py | 58 ++- Implementace/database_create.py | 13 +- Implementace/globals.py | 2 +- Implementace/model/group.py | 29 +- Implementace/model/member.py | 8 + Implementace/model/person.py | 7 - ...p_table_model.py => groups_table_model.py} | 18 +- ..._table_model.py => members_table_model.py} | 30 +- Implementace/model/requirements.py | 20 + Implementace/utils/group_table.py | 11 - Implementace/utils/groups_table.py | 11 + Implementace/utils/members_table.py | 11 + Implementace/utils/person_table.py | 11 - Implementace/utils/table.py | 38 +- Implementace/windows/distributionsetup.py | 144 +++++++ Implementace/windows/groupedit.py | 62 ++- Implementace/windows/qt/distributionsetup.ui | 353 ++++++++++++++++++ Implementace/windows/qt/groupedit.ui | 301 +++++++++++++++ Implementace/windows/qt/grouptable.ui | 64 ++++ Implementace/windows/qt/main.cpp | 11 + Implementace/windows/qt/mainwindow.cpp | 14 + Implementace/windows/qt/mainwindow.h | 22 ++ Implementace/windows/qt/qt.pro | 4 +- Implementace/windows/qt/qt.pro.user | 2 +- Implementace/windows/qt/requirementdialog.ui | 144 +++++++ Implementace/windows/qt/table.ui | 76 ++++ Implementace/windows/requirement_dialog.py | 65 ++++ Implementace/windows/table.py | 10 + 33 files changed, 1588 insertions(+), 168 deletions(-) create mode 100644 Implementace/controllers/distribution_setup.py create mode 100644 Implementace/controllers/requirement_dialog.py create mode 100644 Implementace/model/member.py delete mode 100644 Implementace/model/person.py rename Implementace/model/qtmodels/{group_table_model.py => groups_table_model.py} (61%) rename Implementace/model/qtmodels/{person_table_model.py => members_table_model.py} (50%) create mode 100644 Implementace/model/requirements.py delete mode 100644 Implementace/utils/group_table.py create mode 100644 Implementace/utils/groups_table.py create mode 100644 Implementace/utils/members_table.py delete mode 100644 Implementace/utils/person_table.py create mode 100644 Implementace/windows/distributionsetup.py create mode 100644 Implementace/windows/qt/distributionsetup.ui create mode 100644 Implementace/windows/qt/groupedit.ui create mode 100644 Implementace/windows/qt/grouptable.ui create mode 100644 Implementace/windows/qt/main.cpp create mode 100644 Implementace/windows/qt/mainwindow.cpp create mode 100644 Implementace/windows/qt/mainwindow.h create mode 100644 Implementace/windows/qt/requirementdialog.ui create mode 100644 Implementace/windows/qt/table.ui create mode 100644 Implementace/windows/requirement_dialog.py diff --git a/Implementace/controllers/distribution_setup.py b/Implementace/controllers/distribution_setup.py new file mode 100644 index 0000000..c522ca7 --- /dev/null +++ b/Implementace/controllers/distribution_setup.py @@ -0,0 +1,62 @@ +from math import ceil +from PyQt5 import QtWidgets as Qt +from PyQt5.QtCore import pyqtSlot +from controllers.requirement_dialog import RequirementDialog +from utils.groups_table import GroupsTable +from windows import distributionsetup + + +# TODO throw exception for empty groups +class DistributionSetup(Qt.QWidget, distributionsetup.Ui_Form): + def __init__(self, main_window, group, parent=None): + """ + :param main_window: main window controller + :param group: (Group) that is being distributed + :param parent: + """ + super(DistributionSetup, self).__init__(parent) + self.setupUi(self) + self.placeTable.insertWidget(1, GroupsTable()) + self.group = group + + # set up header + self.lblGroupName.setText(self.group.name) + self.lblMemberCount.setText('(' + str(self.group.getMemberCount()) + ' ÄŤlenĹŻ)') + + #set up spinners + self.spinTeamCount.setMinimum(1) + self.spinTeamCount.setMaximum(self.group.getMemberCount()) + self.spinTeamCount.setFocus() + self.spinTeamCount.selectAll() + self.spinTeamCount.valueChanged.connect(self.teamCountSet) + + self.spinMinTeamSize.setDisabled(True) + self.spinMinTeamSize.valueChanged.connect(self.minSizeSet) + + self.spinMaxTeamSize.setDisabled(True) + self.spinMaxTeamSize.valueChanged.connect(self.maxSizeSet) + + self.comboPrefer.setDisabled(True) + self.btnAddRequirement.clicked.connect(self.showRequirementDialog) + + @pyqtSlot() + def teamCountSet(self): + self.spinMinTeamSize.setMaximum(self.group.getMemberCount() // self.spinTeamCount.value()) + self.spinMinTeamSize.setDisabled(False) + + @pyqtSlot() + def minSizeSet(self): + self.spinMaxTeamSize.setMinimum(ceil(self.group.getMemberCount() / self.spinTeamCount.value())) + self.spinMaxTeamSize.setMaximum(self.group.getMemberCount()) + self.spinMaxTeamSize.setDisabled(False) + + @pyqtSlot() + def maxSizeSet(self): + self.comboPrefer.setDisabled(False) + + @pyqtSlot() + def showRequirementDialog(self): + dialog = RequirementDialog(self.group, parent=self) + dialog.exec_() + if dialog.result() == dialog.Accepted: + ... diff --git a/Implementace/controllers/group_edit_controller.py b/Implementace/controllers/group_edit_controller.py index 4d5622f..61d4928 100644 --- a/Implementace/controllers/group_edit_controller.py +++ b/Implementace/controllers/group_edit_controller.py @@ -1,33 +1,48 @@ +from PyQt5.QtCore import pyqtSlot from PyQt5.QtWidgets import QLineEdit -from model.qtmodels.person_table_model import PersonTableModel -from utils.person_table import PersonTable +from utils.members_table import MembersTable from windows import groupedit from PyQt5 import QtWidgets as Qt -from model.group import Group class GroupEdit(Qt.QWidget, groupedit.Ui_Form): - NEW_GROUP = 0 def __init__(self, main_window, group, parent=None): + """ + Cotnroller of group edit window + :param main_window: main application window + :param group: (Group) group to be displayed + :param parent: + """ super(GroupEdit, self).__init__(parent) self.setupUi(self) self.main_window = main_window - if group == self.NEW_GROUP: - self.setGroup(Group(Group.NEW_GROUP)) - else: - self.setGroup(group) + self.setGroup(group) self._editName = QLineEdit() + # signals self.btnDelete.clicked.connect(self.deleteGroup) self.btnChangeName.clicked.connect(self.editName) + self.btnAddNew.clicked.connect(self.addNewMember) + self.editNewMemberName.returnPressed.connect(self.editNewMemberSurname.setFocus) + self.editNewMemberSurname.returnPressed.connect(self.addNewMember) + self.btnDistribute.clicked.connect(self.distribute) def setGroup(self, group): + """ + Set group this controller (and window) displays + :param group: + """ self.group = group - self.personTable = PersonTable(num_of_buttons=2, button_titles=("View", "-",), data=group.getMembers()) - self.layoutMembers.insertWidget(1, self.personTable) + self.membersTable = MembersTable(num_of_buttons=2, button_titles=("View", "-",), data=group.getMembers()) + self.updateMemberCount() + self.layoutMembers.insertWidget(1, self.membersTable) self.lblName.setText(group.name) + @pyqtSlot() def editName(self): + """ + display edit line instead of group name (to enable editing of it) + """ self.btnChangeName.setText("OK") # hide label and remove it from layout self.lblName.hide() @@ -45,10 +60,13 @@ class GroupEdit(Qt.QWidget, groupedit.Ui_Form): self._editName.show() # change signals of button self.btnChangeName.clicked.disconnect(self.editName) - self.btnChangeName.clicked.connect(self.changeName) + self.btnChangeName.clicked.connect(self._changeName) - # TODO database - def changeName(self): + @pyqtSlot() + def _changeName(self): + """ + Change group name to current value in edit line box (self._editName) + """ try: self.group.changeName(self._editName.text()) except ValueError as e: @@ -69,17 +87,49 @@ class GroupEdit(Qt.QWidget, groupedit.Ui_Form): self.lblName.setText(self._editName.text()) self.lblName.show() # change signals of button - self.btnChangeName.clicked.disconnect(self.changeName) + self.btnChangeName.clicked.disconnect(self._changeName) self.btnChangeName.clicked.connect(self.editName) self.main_window.dataChanged() + @pyqtSlot() def deleteGroup(self): + """ + Show confirmation prompt and delete group + go back after + """ msg = Qt.QMessageBox(self) msg.setIcon(Qt.QMessageBox.Question) msg.setWindowTitle("Opravdu?") msg.setText("Opravdu chcete smazat skupinu " + self.group.name + "?") msg.setStandardButtons(Qt.QMessageBox.Ok|Qt.QMessageBox.Cancel) - if (msg.exec() == Qt.QMessageBox.Ok): + if msg.exec() == Qt.QMessageBox.Ok: self.group.delete() self.main_window.dataChanged() self.main_window.goBack() + + @pyqtSlot() + def addNewMember(self): + """ + Add member specified in self.editNewMemberName and self.editNewMemberSurname + """ + name = self.editNewMemberName.text() + surname = self.editNewMemberSurname.text() + self.group.addMember(name, surname) + self.membersTable.changeData(self.group.getMembers()) + # prepare for inserting another one + self.editNewMemberName.clear() + self.editNewMemberSurname.clear() + self.editNewMemberName.setFocus() + self.updateMemberCount() + + def updateMemberCount(self): + """ + Updates member count label + """ + self.lblMemberCount.setText(str(self.group.getMemberCount())) + + @pyqtSlot() + def distribute(self): + """ + go to distribution for this group + """ + self.main_window.goToDistributionSetup(self.group) diff --git a/Implementace/controllers/groups_overview_controller.py b/Implementace/controllers/groups_overview_controller.py index ee5d51b..668ef5f 100644 --- a/Implementace/controllers/groups_overview_controller.py +++ b/Implementace/controllers/groups_overview_controller.py @@ -1,11 +1,11 @@ from PyQt5.QtCore import * from PyQt5.QtWidgets import * -from model.person import Person -from utils.person_table import PersonTable +from model.member import Member +from utils.members_table import MembersTable from windows import groupsoverview from globals import Global -from utils.group_table import GroupTable +from utils.groups_table import GroupsTable from model.group import Group @@ -22,13 +22,13 @@ class GroupsOverview(QWidget, groupsoverview.Ui_Form): self.btnCreateGroup.clicked.connect(main_window.goToGroupEdit) # add groups table - self.groups_table = GroupTable(num_of_buttons=1, button_titles=("edit",), data=Global.db.getGroups()) + self.groups_table = GroupsTable(num_of_buttons=1, button_titles=("edit",), data=Global.db.getGroups()) self.layoutTables.addWidget(self.groups_table) self.groups_table.btnClicked.connect(self.editGroup) self.groups_table.elementSelected.connect(self.showMembers) # add members table - self.members_table = PersonTable(num_of_buttons=1, button_titles=("penis",)) + self.members_table = MembersTable(num_of_buttons=1, button_titles=("penis",)) self.layoutTables.addWidget(self.members_table) self.members_table.btnClicked.connect(self.editMember) @@ -46,6 +46,6 @@ class GroupsOverview(QWidget, groupsoverview.Ui_Form): def editGroup(self, group): self.main_window.goToGroupEdit(group) - @pyqtSlot(Person) + @pyqtSlot(Member) def editMember(self, person): - print(person.id) \ No newline at end of file + print(person.id) diff --git a/Implementace/controllers/mainwindow_controller.py b/Implementace/controllers/mainwindow_controller.py index dd976c3..e54bba7 100644 --- a/Implementace/controllers/mainwindow_controller.py +++ b/Implementace/controllers/mainwindow_controller.py @@ -1,14 +1,17 @@ from PyQt5 import QtWidgets as Qt +from PyQt5.QtCore import pyqtSlot + +from controllers.distribution_setup import DistributionSetup from controllers.group_edit_controller import GroupEdit from controllers.groups_overview_controller import GroupsOverview -from model.qtmodels.group_table_model import GroupTableModel -from model.qtmodels.person_table_model import PersonTableModel +from model.qtmodels.groups_table_model import GroupsTableModel +from model.qtmodels.members_table_model import MembersTableModel +from utils.groups_table import GroupsTable from windows import mainwindow from globals import Global class MainWindow(Qt.QMainWindow, mainwindow.Ui_MainWindow): - def __init__(self, parent=None): super(MainWindow, self).__init__(parent) self.setupUi(self) @@ -16,23 +19,37 @@ class MainWindow(Qt.QMainWindow, mainwindow.Ui_MainWindow): self.goToGroupsOverview() self._last_changed = 0 - # all controllers have to call this when they change data in db - # it prompts every controller before current widget in stack to reload data + def _goToWidget(self, widget): + self.stackedWidget.addWidget(widget) + self.stackedWidget.setCurrentWidget(widget) + def dataChanged(self): + """ + all controllers have to call this when they change data in db + it prompts every controller before current widget in stack to reload data when getting back to view + """ self._last_changed = self.stackedWidget.currentIndex() def goToGroupsOverview(self): - groups_overview = GroupsOverview(self) - self.stackedWidget.addWidget(groups_overview) - self.stackedWidget.setCurrentWidget(groups_overview) + self._goToWidget(GroupsOverview(self)) - # if group_id unfilled - create new group - def goToGroupEdit(self, group=GroupEdit.NEW_GROUP): - if group == GroupEdit.NEW_GROUP: + @pyqtSlot() + def goToGroupEdit(self, group=None): + """ + change active window to GroupEdit() + :param group: if unfilled (or None), create new group + """ + if group is None: self._last_changed = self.stackedWidget.currentIndex() + 1 - group_edit = GroupEdit(self, group) - self.stackedWidget.addWidget(group_edit) - self.stackedWidget.setCurrentWidget(group_edit) + group = Global.db.createNewGroup() + self._goToWidget(GroupEdit(self, group)) + + def goToDistributionSetup(self, group): + """ + change active window to DistributionSetup() + :param group: + """ + self._goToWidget(DistributionSetup(self, group)) def goBack(self): current_index = self.stackedWidget.currentIndex() diff --git a/Implementace/controllers/requirement_dialog.py b/Implementace/controllers/requirement_dialog.py new file mode 100644 index 0000000..95743a4 --- /dev/null +++ b/Implementace/controllers/requirement_dialog.py @@ -0,0 +1,16 @@ +from PyQt5.QtWidgets import QDialog, QAbstractItemView +from utils.members_table import MembersTable +from windows import requirement_dialog + + +class RequirementDialog(QDialog, requirement_dialog.Ui_Dialog): + def __init__(self, group, requirement=None, parent=None): + super(RequirementDialog, self).__init__(parent) + self.setupUi(self) + self.tableMembers = MembersTable(data=group.getMembers(), parent=self) + self.placeTable.insertWidget(0, self.tableMembers) + self.tableMembers.setSelectionMode(QAbstractItemView.MultiSelection) + + + def getRequirement(self): + ... diff --git a/Implementace/database.py b/Implementace/database.py index d1a758b..14b8809 100644 --- a/Implementace/database.py +++ b/Implementace/database.py @@ -1,53 +1,89 @@ import sqlite3 as sqlite from model.group import Group -from model.person import Person +from model.member import Member class Database: def __init__(self): self.connection = sqlite.connect('database.db') self.connection.isolation_level = None # so we don't have to use self.connection.commit() + self.connection.row_factory = sqlite.Row def getGroups(self): + """ + :return: all groups in database + """ curs = self.connection.execute("SELECT * FROM groups") res = [] for row in curs: - res.append(Group(row)) + res.append(Group(row['group_id'], row['name'])) curs.close() return res def getGroupMembers(self, group_id): + """ + :param group_id + :return: members of group + """ curs = self.connection.execute('''SELECT * - FROM person + FROM member WHERE group_id = ?''', (group_id,)) res = [] for row in curs: - res.append(Person(row[0], row[1], row[2])) + res.append(Member(row['person_id'], row['name'], row['surname'], row['group_id'])) curs.close() return res - # creates new group, returns (id, name) # TODO can still conflict (e.g. you deleted 'Nová skupina' and still have 'Nová skupina 2') def createNewGroup(self): + """ + create new group (with some default name) + :return: Group + """ curs = self.connection.execute('''SELECT name FROM groups WHERE name LIKE 'Nová skupina%' ''') name = "Nová skupina" new_groups_count = len(curs.fetchall()) if new_groups_count > 0: name = name + " " + str(new_groups_count) - self.connection.execute('''INSERT INTO groups (name) VALUES (?) ''', (name,)) - curs.execute('''SELECT group_id, name FROM groups WHERE name LIKE ? ''', (name,)) - return curs.fetchone() + curs.execute('''INSERT INTO groups (name) VALUES (?) ''', (name,)) + return Group(curs.lastrowid, name) def deleteGroup(self, group_id): + """ + delete group and all its members + :param group_id: + """ self.connection.execute('''DELETE FROM groups WHERE group_id = ?''', (group_id,)) - self.connection.execute('''DELETE FROM person WHERE group_id = ?''', (group_id,)) + self.connection.execute('''DELETE FROM member WHERE group_id = ?''', (group_id,)) def getGroupByName(self, group_name): + """ + :param group_name: + :return: Group (instance) + """ curs = self.connection.execute('''SELECT * FROM groups WHERE name LIKE ?''', (group_name,)) row = curs.fetchone() if row is None: return None - return Group(row) + return Group(row['group_id'], row['name']) def changeGroupName(self, group_id, new_name): - curs = self.connection.execute('''UPDATE groups SET name = ? WHERE group_id = ?''', (new_name, group_id,)) + """ + Update name of group in db + :param group_id: + :param new_name: + """ + self.connection.execute('''UPDATE groups SET name = ? WHERE group_id = ?''', (new_name, group_id,)) + + def createMember(self, group_id, name, surname): + """ + create member of group + :param group_id: + :param name: + :param surname: + """ + curs = self.connection.execute( + '''INSERT INTO member (name, surname, group_id) VALUES (?, ?, ?)''', + (name, surname, group_id,) + ) + return Member(curs.lastrowid, name, surname, group_id) diff --git a/Implementace/database_create.py b/Implementace/database_create.py index 4dea7c6..26ed326 100644 --- a/Implementace/database_create.py +++ b/Implementace/database_create.py @@ -7,14 +7,15 @@ conn.isolation_level = None # so we don't have to use self.connection.commit() curs = conn.cursor() curs.execute( - '''CREATE TABLE Person ( - person_id INTEGER PRIMARY KEY AUTOINCREMENT, - name VARCHAR, - surname VARCHAR - );''') + '''CREATE TABLE Groups ( + group_id INTEGER PRIMARY KEY, + name VARCHAR UNIQUE + NOT NULL + );''' +) curs.execute( - '''CREATE TABLE Person ( + '''CREATE TABLE Member ( person_id INTEGER PRIMARY KEY AUTOINCREMENT, name VARCHAR, surname VARCHAR, diff --git a/Implementace/globals.py b/Implementace/globals.py index 937c08e..59d3540 100644 --- a/Implementace/globals.py +++ b/Implementace/globals.py @@ -1,3 +1,3 @@ -class Global(): +class Global: db = None diff --git a/Implementace/model/group.py b/Implementace/model/group.py index 4cb1d19..a0b2b46 100644 --- a/Implementace/model/group.py +++ b/Implementace/model/group.py @@ -2,15 +2,16 @@ from globals import Global class Group: - NEW_GROUP = 0 + NEW_GROUP = -1 MIN_LENGTH = 3 MAX_LENGTH = 25 - def __init__(self, db_row): - if db_row == self.NEW_GROUP: + + def __init__(self, id, name=''): + if id == self.NEW_GROUP: self.id, self.name = Global.db.createNewGroup() else: - self.id = db_row[0] - self.name = db_row[1] + self.id = id + self.name = name self._members = None def getMembers(self): @@ -18,6 +19,13 @@ class Group: self._members = Global.db.getGroupMembers(self.id) return self._members + def getMemberCount(self): + """ + :return: count of members + """ + self.getMembers() + return len(self._members) + def delete(self): Global.db.deleteGroup(self.id) @@ -33,3 +41,14 @@ class Group: self.name = new_name else: raise ValueError("Skupina se jmĂ©nem '" + new_name + "' jiĹľ existuje.") + + def addMember(self, name, surname): + """ + Create and add new member to group + :param name: + :param surname: + :return: + """ + # force initialization of members + self.getMembers() + self._members.append(Global.db.createMember(self.id, name, surname)) diff --git a/Implementace/model/member.py b/Implementace/model/member.py new file mode 100644 index 0000000..bb6aca1 --- /dev/null +++ b/Implementace/model/member.py @@ -0,0 +1,8 @@ + + +class Member: + def __init__(self, id, name, surname, group_id): + self.id = id + self.name = name + self.surname = surname + self.group_id = group_id diff --git a/Implementace/model/person.py b/Implementace/model/person.py deleted file mode 100644 index bf770af..0000000 --- a/Implementace/model/person.py +++ /dev/null @@ -1,7 +0,0 @@ - - -class Person: - def __init__(self, id, name, surname): - self.id = id - self.name = name - self.surname = surname diff --git a/Implementace/model/qtmodels/group_table_model.py b/Implementace/model/qtmodels/groups_table_model.py similarity index 61% rename from Implementace/model/qtmodels/group_table_model.py rename to Implementace/model/qtmodels/groups_table_model.py index ad2196f..8498b4b 100644 --- a/Implementace/model/qtmodels/group_table_model.py +++ b/Implementace/model/qtmodels/groups_table_model.py @@ -2,11 +2,9 @@ from PyQt5 import QtGui, QtCore, uic from PyQt5.QtWidgets import QPushButton -class GroupTableModel(QtCore.QAbstractTableModel): - MODEL_ROLE = -1 - +class GroupsTableModel(QtCore.QAbstractTableModel): def __init__(self, groups=[], num_columns=1, parent=None): - super(GroupTableModel, self).__init__(parent) + super(GroupsTableModel, self).__init__(parent) self._groups = groups self._columns = num_columns @@ -25,19 +23,9 @@ class GroupTableModel(QtCore.QAbstractTableModel): if index.column() == 0: return self._groups[index.row()].name - if role == GroupTableModel.MODEL_ROLE: + if role == QtCore.Qt.UserRole: 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), - []) # returns instance of Group with given group_id or None if not found in collection def getElementById(self, group_id): diff --git a/Implementace/model/qtmodels/person_table_model.py b/Implementace/model/qtmodels/members_table_model.py similarity index 50% rename from Implementace/model/qtmodels/person_table_model.py rename to Implementace/model/qtmodels/members_table_model.py index 8f717fb..41b4306 100644 --- a/Implementace/model/qtmodels/person_table_model.py +++ b/Implementace/model/qtmodels/members_table_model.py @@ -1,11 +1,9 @@ from PyQt5 import QtGui, QtCore, uic -class PersonTableModel(QtCore.QAbstractTableModel): - MODEL_ROLE = -1 - +class MembersTableModel(QtCore.QAbstractTableModel): def __init__(self, people=[], num_columns=2, parent=None): - super(PersonTableModel, self).__init__(parent) + super(MembersTableModel, self).__init__(parent) self._people = people self._columns = num_columns @@ -30,30 +28,8 @@ class PersonTableModel(QtCore.QAbstractTableModel): if index.column() == 1: return person.name - if role == PersonTableModel.MODEL_ROLE: + if role == QtCore.Qt.UserRole: return self._people[index.row()] - def sort(self, p_int, order=None): - if p_int > 1: - return - - #sorting by surname - if p_int == 0: - if order == QtCore.Qt.AscendingOrder: - self._people.sort(key=lambda person: person.surname) - if order == QtCore.Qt.DescendingOrder: - self._people.sort(key=lambda person: person.surname, reverse=True) - - #sorting by name - if p_int == 1: - if order == QtCore.Qt.AscendingOrder: - self._people.sort(key=lambda person: person.name) - if order == QtCore.Qt.DescendingOrder: - self._people.sort(key=lambda person: person.name, reverse=True) - - self.dataChanged.emit(self.index(0, 0), - self.index(self.rowCount(), 0), - []) - def getElementById(self, person_id): return next((person for person in self._people if person.id == int(person_id)), None) diff --git a/Implementace/model/requirements.py b/Implementace/model/requirements.py new file mode 100644 index 0000000..cd0cdc0 --- /dev/null +++ b/Implementace/model/requirements.py @@ -0,0 +1,20 @@ + + +class Requirement: + def __init__(self, person, target_people): + """ + :param person: the one person that's in some "relationship" with each of the target_people + :param target_people: see person + """ + self.person = person + self.target_people = target_people + + +class RequirementSameTeam(Requirement): + def __init__(self, person, target_people): + super(RequirementSameTeam, self).__init__(person, target_people) + + +class RequirementDifferentTeam(Requirement): + def __init__(self, person, target_people): + super(RequirementDifferentTeam, self).__init__(person, target_people) diff --git a/Implementace/utils/group_table.py b/Implementace/utils/group_table.py deleted file mode 100644 index c89ecde..0000000 --- a/Implementace/utils/group_table.py +++ /dev/null @@ -1,11 +0,0 @@ -from utils.table import ElemTable -from model.qtmodels.group_table_model import GroupTableModel - - -class GroupTable(ElemTable): - def __init__(self, num_of_buttons=0, button_titles=(), data=[], parent=None): - super(GroupTable, self).__init__(GroupTableModel(data, num_of_buttons+1), num_of_buttons, button_titles, parent) - - - def changeData(self, data): - self.setModel(GroupTableModel(data, self._btn_amount+1)) diff --git a/Implementace/utils/groups_table.py b/Implementace/utils/groups_table.py new file mode 100644 index 0000000..3e2f4ea --- /dev/null +++ b/Implementace/utils/groups_table.py @@ -0,0 +1,11 @@ +from utils.table import ElemTable +from model.qtmodels.groups_table_model import GroupsTableModel + + +class GroupsTable(ElemTable): + def __init__(self, num_of_buttons=0, button_titles=(), data=[], parent=None): + super(GroupsTable, self).__init__(GroupsTableModel(data, num_of_buttons + 1), num_of_buttons, button_titles, parent) + + + def changeData(self, data): + self.setModel(GroupsTableModel(data, self._btn_amount + 1)) diff --git a/Implementace/utils/members_table.py b/Implementace/utils/members_table.py new file mode 100644 index 0000000..9d364c0 --- /dev/null +++ b/Implementace/utils/members_table.py @@ -0,0 +1,11 @@ +from utils.table import ElemTable +from model.qtmodels.members_table_model import MembersTableModel + + +class MembersTable(ElemTable): + def __init__(self, num_of_buttons=0, button_titles=(), data=[], parent=None): + super(MembersTable, self).__init__(MembersTableModel(data, num_of_buttons + 2), num_of_buttons, button_titles, parent) + + + def changeData(self, data): + self.setModel(MembersTableModel(data, self._btn_amount + 2)) \ No newline at end of file diff --git a/Implementace/utils/person_table.py b/Implementace/utils/person_table.py deleted file mode 100644 index c747a85..0000000 --- a/Implementace/utils/person_table.py +++ /dev/null @@ -1,11 +0,0 @@ -from utils.table import ElemTable -from model.qtmodels.person_table_model import PersonTableModel - - -class PersonTable(ElemTable): - def __init__(self, num_of_buttons=0, button_titles=(), data=[], parent=None): - super(PersonTable, self).__init__(PersonTableModel(data, num_of_buttons+2), num_of_buttons, button_titles, parent) - - - def changeData(self, data): - self.setModel(PersonTableModel(data, self._btn_amount+2)) \ No newline at end of file diff --git a/Implementace/utils/table.py b/Implementace/utils/table.py index a88635b..d29c674 100644 --- a/Implementace/utils/table.py +++ b/Implementace/utils/table.py @@ -1,8 +1,10 @@ +from PyQt5.QtCore import QModelIndex + from windows import table from PyQt5.QtCore import * from PyQt5.QtWidgets import * -# TODO make this base class for group_table and person_table + class ElemTable(QWidget, table.Ui_Form): _BUTTON_WIDTH = 50 @@ -13,15 +15,14 @@ class ElemTable(QWidget, table.Ui_Form): super(ElemTable, self).__init__(parent) self.setupUi(self) - self._buttons = [] self._btn_titles = button_titles self._btn_amount = num_of_buttons self._data_columns = model.columnCount() - num_of_buttons - self.model = model + self.model = QSortFilterProxyModel() + self.model.setSourceModel(model) self.table.setModel(self.model) self.insertButtons() - self.model.dataChanged.connect(self.nameButtons) # initialize table settings (and signals) header_view = self.table.horizontalHeader() @@ -33,41 +34,32 @@ class ElemTable(QWidget, table.Ui_Form): self.table.clicked.connect(self.onElementSelected) self.table.activated.connect(self.onElementSelected) - # this also calls nameButtons() (so the buttons will be correctly named) - # if for some reason you want to remove this, call self.nameButtons() self.table.sortByColumn(0, Qt.AscendingOrder) def insertButtons(self): - self._buttons = [] # if we're reloading data for btn_nr in range(self._btn_amount): - buttons = [] for i in range(self.model.rowCount()): button = QPushButton(self._btn_titles[btn_nr]) - buttons.append(button) button.clicked.connect(self.onBtnClicked) + group = self.model.data(self.model.index(i, 0), Qt.UserRole) + button.setObjectName(str(group.id) + "_" + str(btn_nr)) self.table.setIndexWidget(self.model.index(i, btn_nr+self._data_columns), button) - self._buttons.append(buttons) - - # sets object name of every button to id of group on given row - # also slot for signal 'dataChanged', because buttons do not move when sorting table (we just change their names) - def nameButtons(self): - for buttons in self._buttons: - for i, button in enumerate(buttons): - group = self.model.data(self.model.index(i, 0), self.model.MODEL_ROLE) - button.setObjectName(str(group.id) + "_" + str(i)) def onBtnClicked(self): elem_id, btn_id = str.split(self.sender().objectName(), '_') - elem = self.model.getElementById(elem_id) + elem = self.model.sourceModel().getElementById(elem_id) self.btnClicked.emit(elem, int(btn_id)) def onElementSelected(self): - elem = self.model.data(self.table.currentIndex(), self.model.MODEL_ROLE) + elem = self.model.data(self.table.currentIndex(), Qt.UserRole) self.elementSelected.emit(elem) def setModel(self, model): - self.model = model - self.table.setModel(self.model) + self.model.beginResetModel() + self.model.setSourceModel(model) + self.model.endResetModel() self.insertButtons() - self.model.dataChanged.connect(self.nameButtons) self.table.sortByColumn(0, Qt.AscendingOrder) + + def setSelectionMode(self, selection_mode): + self.table.setSelectionMode(selection_mode) diff --git a/Implementace/windows/distributionsetup.py b/Implementace/windows/distributionsetup.py new file mode 100644 index 0000000..1365f75 --- /dev/null +++ b/Implementace/windows/distributionsetup.py @@ -0,0 +1,144 @@ +# -*- coding: utf-8 -*- + +# Form implementation generated from reading ui file 'distributionsetup.ui' +# +# Created by: PyQt5 UI code generator 5.8.1 +# +# WARNING! All changes made in this file will be lost! + +from PyQt5 import QtCore, QtGui, QtWidgets + + +class Ui_Form(object): + def setupUi(self, Form): + Form.setObjectName("Form") + Form.resize(714, 564) + self.verticalLayout_2 = QtWidgets.QVBoxLayout(Form) + self.verticalLayout_2.setObjectName("verticalLayout_2") + self.verticalLayout_3 = QtWidgets.QVBoxLayout() + self.verticalLayout_3.setSpacing(0) + self.verticalLayout_3.setObjectName("verticalLayout_3") + self.lblHeader = QtWidgets.QLabel(Form) + font = QtGui.QFont() + font.setPointSize(15) + font.setBold(True) + font.setWeight(75) + self.lblHeader.setFont(font) + self.lblHeader.setAlignment(QtCore.Qt.AlignCenter) + self.lblHeader.setObjectName("lblHeader") + self.verticalLayout_3.addWidget(self.lblHeader) + self.lblGroupName = QtWidgets.QLabel(Form) + font = QtGui.QFont() + font.setPointSize(10) + font.setBold(False) + font.setWeight(50) + self.lblGroupName.setFont(font) + self.lblGroupName.setAlignment(QtCore.Qt.AlignCenter) + self.lblGroupName.setObjectName("lblGroupName") + self.verticalLayout_3.addWidget(self.lblGroupName) + self.lblMemberCount = QtWidgets.QLabel(Form) + self.lblMemberCount.setAlignment(QtCore.Qt.AlignCenter) + self.lblMemberCount.setObjectName("lblMemberCount") + self.verticalLayout_3.addWidget(self.lblMemberCount) + self.verticalLayout_2.addLayout(self.verticalLayout_3) + self.horizontalLayout_4 = QtWidgets.QHBoxLayout() + self.horizontalLayout_4.setObjectName("horizontalLayout_4") + spacerItem = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Minimum) + self.horizontalLayout_4.addItem(spacerItem) + self.formLayout = QtWidgets.QFormLayout() + self.formLayout.setFieldGrowthPolicy(QtWidgets.QFormLayout.ExpandingFieldsGrow) + self.formLayout.setLabelAlignment(QtCore.Qt.AlignCenter) + self.formLayout.setFormAlignment(QtCore.Qt.AlignCenter) + self.formLayout.setObjectName("formLayout") + self.label = QtWidgets.QLabel(Form) + self.label.setObjectName("label") + self.formLayout.setWidget(1, QtWidgets.QFormLayout.LabelRole, self.label) + self.spinTeamCount = QtWidgets.QSpinBox(Form) + self.spinTeamCount.setMinimumSize(QtCore.QSize(40, 0)) + self.spinTeamCount.setObjectName("spinTeamCount") + self.formLayout.setWidget(1, QtWidgets.QFormLayout.FieldRole, self.spinTeamCount) + self.label_2 = QtWidgets.QLabel(Form) + self.label_2.setObjectName("label_2") + self.formLayout.setWidget(2, QtWidgets.QFormLayout.LabelRole, self.label_2) + self.spinMinTeamSize = QtWidgets.QSpinBox(Form) + self.spinMinTeamSize.setMinimumSize(QtCore.QSize(40, 0)) + self.spinMinTeamSize.setObjectName("spinMinTeamSize") + self.formLayout.setWidget(2, QtWidgets.QFormLayout.FieldRole, self.spinMinTeamSize) + self.label_3 = QtWidgets.QLabel(Form) + self.label_3.setObjectName("label_3") + self.formLayout.setWidget(3, QtWidgets.QFormLayout.LabelRole, self.label_3) + self.spinMaxTeamSize = QtWidgets.QSpinBox(Form) + self.spinMaxTeamSize.setMinimumSize(QtCore.QSize(40, 0)) + self.spinMaxTeamSize.setObjectName("spinMaxTeamSize") + self.formLayout.setWidget(3, QtWidgets.QFormLayout.FieldRole, self.spinMaxTeamSize) + self.label_5 = QtWidgets.QLabel(Form) + self.label_5.setObjectName("label_5") + self.formLayout.setWidget(4, QtWidgets.QFormLayout.LabelRole, self.label_5) + self.comboPrefer = QtWidgets.QComboBox(Form) + self.comboPrefer.setObjectName("comboPrefer") + self.comboPrefer.addItem("") + self.comboPrefer.addItem("") + self.comboPrefer.addItem("") + self.formLayout.setWidget(4, QtWidgets.QFormLayout.FieldRole, self.comboPrefer) + self.horizontalLayout_4.addLayout(self.formLayout) + spacerItem1 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Minimum) + self.horizontalLayout_4.addItem(spacerItem1) + self.verticalLayout = QtWidgets.QVBoxLayout() + self.verticalLayout.setObjectName("verticalLayout") + self.horizontalLayout_2 = QtWidgets.QHBoxLayout() + self.horizontalLayout_2.setObjectName("horizontalLayout_2") + self.label_4 = QtWidgets.QLabel(Form) + self.label_4.setObjectName("label_4") + self.horizontalLayout_2.addWidget(self.label_4) + spacerItem2 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) + self.horizontalLayout_2.addItem(spacerItem2) + self.btnAddRequirement = QtWidgets.QPushButton(Form) + self.btnAddRequirement.setObjectName("btnAddRequirement") + self.horizontalLayout_2.addWidget(self.btnAddRequirement) + self.verticalLayout.addLayout(self.horizontalLayout_2) + self.widget = QtWidgets.QWidget(Form) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.widget.sizePolicy().hasHeightForWidth()) + self.widget.setSizePolicy(sizePolicy) + self.widget.setObjectName("widget") + self.placeTable = QtWidgets.QHBoxLayout(self.widget) + self.placeTable.setContentsMargins(0, 0, 0, 0) + self.placeTable.setSpacing(0) + self.placeTable.setObjectName("placeTable") + self.verticalLayout.addWidget(self.widget) + self.horizontalLayout_4.addLayout(self.verticalLayout) + self.verticalLayout_2.addLayout(self.horizontalLayout_4) + self.horizontalLayout = QtWidgets.QHBoxLayout() + self.horizontalLayout.setObjectName("horizontalLayout") + spacerItem3 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) + self.horizontalLayout.addItem(spacerItem3) + self.btnDistribute = QtWidgets.QPushButton(Form) + self.btnDistribute.setObjectName("btnDistribute") + self.horizontalLayout.addWidget(self.btnDistribute) + self.verticalLayout_2.addLayout(self.horizontalLayout) + self.label.setBuddy(self.spinTeamCount) + self.label_2.setBuddy(self.spinMinTeamSize) + self.label_3.setBuddy(self.spinMaxTeamSize) + self.label_5.setBuddy(self.comboPrefer) + + self.retranslateUi(Form) + QtCore.QMetaObject.connectSlotsByName(Form) + + def retranslateUi(self, Form): + _translate = QtCore.QCoreApplication.translate + Form.setWindowTitle(_translate("Form", "Form")) + self.lblHeader.setText(_translate("Form", "RozdÄ›lenĂ skupiny")) + self.lblGroupName.setText(_translate("Form", "GroupName")) + self.lblMemberCount.setText(_translate("Form", "(x ÄŤlenĹŻ)")) + self.label.setText(_translate("Form", "PoÄŤet tĂ˝mĹŻ:")) + self.label_2.setText(_translate("Form", "MinimálnĂ velikost tĂ˝mu:")) + self.label_3.setText(_translate("Form", "MaximálnĂ velikost tĂ˝mu:")) + self.label_5.setText(_translate("Form", "Preferovat:")) + self.comboPrefer.setItemText(0, _translate("Form", "Nic")) + self.comboPrefer.setItemText(1, _translate("Form", "StejnĂ© tĂ˝my")) + self.comboPrefer.setItemText(2, _translate("Form", "NovĂ© tĂ˝my")) + self.label_4.setText(_translate("Form", "OmezenĂ:")) + self.btnAddRequirement.setText(_translate("Form", "+")) + self.btnDistribute.setText(_translate("Form", "RozdÄ›lit")) diff --git a/Implementace/windows/groupedit.py b/Implementace/windows/groupedit.py index a68e35c..1e1aa71 100644 --- a/Implementace/windows/groupedit.py +++ b/Implementace/windows/groupedit.py @@ -19,6 +19,8 @@ class Ui_Form(object): self.layoutName.setObjectName("layoutName") spacerItem = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.layoutName.addItem(spacerItem) + spacerItem1 = QtWidgets.QSpacerItem(175, 20, QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Minimum) + self.layoutName.addItem(spacerItem1) self.lblName = QtWidgets.QLabel(Form) font = QtGui.QFont() font.setPointSize(20) @@ -40,9 +42,34 @@ class Ui_Form(object): self.btnDelete.setMaximumSize(QtCore.QSize(50, 16777215)) self.btnDelete.setObjectName("btnDelete") self.layoutName.addWidget(self.btnDelete) - spacerItem1 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) - self.layoutName.addItem(spacerItem1) + spacerItem2 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) + self.layoutName.addItem(spacerItem2) + self.btnDistribute = QtWidgets.QPushButton(Form) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.btnDistribute.sizePolicy().hasHeightForWidth()) + self.btnDistribute.setSizePolicy(sizePolicy) + self.btnDistribute.setObjectName("btnDistribute") + self.layoutName.addWidget(self.btnDistribute) self.verticalLayout.addLayout(self.layoutName) + self.horizontalLayout = QtWidgets.QHBoxLayout() + self.horizontalLayout.setObjectName("horizontalLayout") + spacerItem3 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) + self.horizontalLayout.addItem(spacerItem3) + self.label = QtWidgets.QLabel(Form) + font = QtGui.QFont() + font.setBold(True) + font.setWeight(75) + self.label.setFont(font) + self.label.setObjectName("label") + self.horizontalLayout.addWidget(self.label) + self.lblMemberCount = QtWidgets.QLabel(Form) + self.lblMemberCount.setObjectName("lblMemberCount") + self.horizontalLayout.addWidget(self.lblMemberCount) + spacerItem4 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) + self.horizontalLayout.addItem(spacerItem4) + self.verticalLayout.addLayout(self.horizontalLayout) self.verticalLayout_3 = QtWidgets.QVBoxLayout() self.verticalLayout_3.setSpacing(0) self.verticalLayout_3.setObjectName("verticalLayout_3") @@ -59,21 +86,26 @@ class Ui_Form(object): self.label_2.setAlignment(QtCore.Qt.AlignHCenter|QtCore.Qt.AlignTop) self.label_2.setObjectName("label_2") self.layoutMembers.addWidget(self.label_2) - spacerItem2 = QtWidgets.QSpacerItem(80, 20, QtWidgets.QSizePolicy.Maximum, QtWidgets.QSizePolicy.Minimum) - self.layoutMembers.addItem(spacerItem2) + spacerItem5 = QtWidgets.QSpacerItem(80, 20, QtWidgets.QSizePolicy.Maximum, QtWidgets.QSizePolicy.Minimum) + self.layoutMembers.addItem(spacerItem5) self.verticalLayout_3.addLayout(self.layoutMembers) self.horizontalLayout_4 = QtWidgets.QHBoxLayout() self.horizontalLayout_4.setObjectName("horizontalLayout_4") - spacerItem3 = QtWidgets.QSpacerItem(80, 20, QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Minimum) - self.horizontalLayout_4.addItem(spacerItem3) - self.editNewPerson = QtWidgets.QLineEdit(Form) - self.editNewPerson.setObjectName("editNewPerson") - self.horizontalLayout_4.addWidget(self.editNewPerson) + spacerItem6 = QtWidgets.QSpacerItem(80, 20, QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Minimum) + self.horizontalLayout_4.addItem(spacerItem6) + self.editNewMemberName = QtWidgets.QLineEdit(Form) + self.editNewMemberName.setObjectName("editNewMemberName") + self.horizontalLayout_4.addWidget(self.editNewMemberName) + self.editNewMemberSurname = QtWidgets.QLineEdit(Form) + self.editNewMemberSurname.setText("") + self.editNewMemberSurname.setObjectName("editNewMemberSurname") + self.horizontalLayout_4.addWidget(self.editNewMemberSurname) self.btnAddNew = QtWidgets.QPushButton(Form) + self.btnAddNew.setDefault(False) self.btnAddNew.setObjectName("btnAddNew") self.horizontalLayout_4.addWidget(self.btnAddNew) - spacerItem4 = QtWidgets.QSpacerItem(80, 20, QtWidgets.QSizePolicy.Maximum, QtWidgets.QSizePolicy.Minimum) - self.horizontalLayout_4.addItem(spacerItem4) + spacerItem7 = QtWidgets.QSpacerItem(80, 20, QtWidgets.QSizePolicy.Maximum, QtWidgets.QSizePolicy.Minimum) + self.horizontalLayout_4.addItem(spacerItem7) self.verticalLayout_3.addLayout(self.horizontalLayout_4) self.verticalLayout.addLayout(self.verticalLayout_3) @@ -86,7 +118,11 @@ class Ui_Form(object): self.lblName.setText(_translate("Form", "Group Name")) self.btnChangeName.setText(_translate("Form", "Edit")) self.btnDelete.setText(_translate("Form", "Delete")) + self.btnDistribute.setText(_translate("Form", "RozdÄ›lit")) + self.label.setText(_translate("Form", "PoÄŤet ÄŤlenĹŻ:")) + self.lblMemberCount.setText(_translate("Form", "0")) self.label_2.setText(_translate("Form", "ÄŚlenovĂ©:")) - self.editNewPerson.setPlaceholderText(_translate("Form", "JmĂ©no pĹ™ĂjmenĂ")) - self.btnAddNew.setText(_translate("Form", "VytvoĹ™it")) + self.editNewMemberName.setPlaceholderText(_translate("Form", "JmĂ©no")) + self.editNewMemberSurname.setPlaceholderText(_translate("Form", "PĹ™ĂjmenĂ")) + self.btnAddNew.setText(_translate("Form", "PĹ™idat")) diff --git a/Implementace/windows/qt/distributionsetup.ui b/Implementace/windows/qt/distributionsetup.ui new file mode 100644 index 0000000..1dce6ec --- /dev/null +++ b/Implementace/windows/qt/distributionsetup.ui @@ -0,0 +1,353 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ui version="4.0"> + <class>Form</class> + <widget class="QWidget" name="Form"> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>622</width> + <height>526</height> + </rect> + </property> + <property name="windowTitle"> + <string>Form</string> + </property> + <layout class="QVBoxLayout" name="verticalLayout_2"> + <item> + <layout class="QVBoxLayout" name="verticalLayout_3"> + <property name="spacing"> + <number>0</number> + </property> + <item> + <widget class="QLabel" name="lblHeader"> + <property name="font"> + <font> + <pointsize>15</pointsize> + <weight>75</weight> + <bold>true</bold> + </font> + </property> + <property name="text"> + <string>RozdÄ›lenĂ skupiny</string> + </property> + <property name="alignment"> + <set>Qt::AlignCenter</set> + </property> + <property name="margin"> + <number>5</number> + </property> + </widget> + </item> + <item> + <widget class="QLabel" name="lblGroupName"> + <property name="font"> + <font> + <pointsize>10</pointsize> + <weight>50</weight> + <bold>false</bold> + </font> + </property> + <property name="text"> + <string>GroupName</string> + </property> + <property name="alignment"> + <set>Qt::AlignCenter</set> + </property> + </widget> + </item> + <item> + <widget class="QLabel" name="lblMemberCount"> + <property name="text"> + <string>(x ÄŤlenĹŻ)</string> + </property> + <property name="alignment"> + <set>Qt::AlignCenter</set> + </property> + </widget> + </item> + </layout> + </item> + <item> + <layout class="QHBoxLayout" name="horizontalLayout_4"> + <item> + <spacer name="horizontalSpacer_2"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="sizeType"> + <enum>QSizePolicy::Preferred</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>40</width> + <height>20</height> + </size> + </property> + </spacer> + </item> + <item> + <layout class="QVBoxLayout" name="verticalLayout_4"> + <item> + <layout class="QGridLayout" name="gridLayout"> + <property name="verticalSpacing"> + <number>6</number> + </property> + <item row="0" column="1"> + <spacer name="verticalSpacer"> + <property name="orientation"> + <enum>Qt::Vertical</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>20</width> + <height>40</height> + </size> + </property> + </spacer> + </item> + <item row="5" column="1"> + <spacer name="verticalSpacer_2"> + <property name="orientation"> + <enum>Qt::Vertical</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>20</width> + <height>40</height> + </size> + </property> + </spacer> + </item> + <item row="1" column="0"> + <widget class="QLabel" name="label"> + <property name="text"> + <string>PoÄŤet tĂ˝mĹŻ:</string> + </property> + <property name="buddy"> + <cstring>spinTeamCount</cstring> + </property> + </widget> + </item> + <item row="2" column="0"> + <widget class="QLabel" name="label_2"> + <property name="text"> + <string>MinimálnĂ velikost tĂ˝mu:</string> + </property> + <property name="buddy"> + <cstring>spinMinTeamSize</cstring> + </property> + </widget> + </item> + <item row="1" column="1"> + <widget class="QSpinBox" name="spinTeamCount"> + <property name="minimumSize"> + <size> + <width>40</width> + <height>0</height> + </size> + </property> + <property name="alignment"> + <set>Qt::AlignCenter</set> + </property> + </widget> + </item> + <item row="2" column="1"> + <widget class="QSpinBox" name="spinMinTeamSize"> + <property name="minimumSize"> + <size> + <width>40</width> + <height>0</height> + </size> + </property> + <property name="alignment"> + <set>Qt::AlignCenter</set> + </property> + </widget> + </item> + <item row="3" column="0"> + <widget class="QLabel" name="label_3"> + <property name="text"> + <string>MaximálnĂ velikost tĂ˝mu:</string> + </property> + <property name="buddy"> + <cstring>spinMaxTeamSize</cstring> + </property> + </widget> + </item> + <item row="4" column="0"> + <widget class="QLabel" name="label_5"> + <property name="text"> + <string>Preferovat:</string> + </property> + <property name="buddy"> + <cstring>comboPrefer</cstring> + </property> + </widget> + </item> + <item row="3" column="1"> + <widget class="QSpinBox" name="spinMaxTeamSize"> + <property name="minimumSize"> + <size> + <width>40</width> + <height>0</height> + </size> + </property> + <property name="alignment"> + <set>Qt::AlignCenter</set> + </property> + </widget> + </item> + <item row="4" column="1"> + <widget class="QComboBox" name="comboPrefer"> + <item> + <property name="text"> + <string>Nic</string> + </property> + </item> + <item> + <property name="text"> + <string>StejnĂ© tĂ˝my</string> + </property> + </item> + <item> + <property name="text"> + <string>NovĂ© tĂ˝my</string> + </property> + </item> + </widget> + </item> + <item row="1" column="2"> + <widget class="QCheckBox" name="cbIgnoreTeamCount"> + <property name="text"> + <string>ignorovat</string> + </property> + </widget> + </item> + <item row="2" column="2"> + <widget class="QCheckBox" name="cbIgnoreMinSize"> + <property name="text"> + <string>ignorovat</string> + </property> + </widget> + </item> + <item row="3" column="2"> + <widget class="QCheckBox" name="cbIgnoreMaxSize"> + <property name="text"> + <string>ignorovat</string> + </property> + </widget> + </item> + </layout> + </item> + </layout> + </item> + <item> + <spacer name="horizontalSpacer_3"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="sizeType"> + <enum>QSizePolicy::Preferred</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>40</width> + <height>20</height> + </size> + </property> + </spacer> + </item> + <item> + <layout class="QVBoxLayout" name="verticalLayout"> + <item> + <layout class="QHBoxLayout" name="horizontalLayout_2"> + <item> + <widget class="QLabel" name="label_4"> + <property name="text"> + <string>OmezenĂ:</string> + </property> + </widget> + </item> + <item> + <spacer name="horizontalSpacer"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>40</width> + <height>20</height> + </size> + </property> + </spacer> + </item> + <item> + <widget class="QPushButton" name="btnAddRequirement"> + <property name="text"> + <string>+</string> + </property> + </widget> + </item> + </layout> + </item> + <item> + <widget class="QWidget" name="widget" native="true"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Expanding" vsizetype="Expanding"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <layout class="QHBoxLayout" name="placeTable"> + <property name="spacing"> + <number>0</number> + </property> + <property name="leftMargin"> + <number>0</number> + </property> + <property name="topMargin"> + <number>0</number> + </property> + <property name="rightMargin"> + <number>0</number> + </property> + <property name="bottomMargin"> + <number>0</number> + </property> + </layout> + </widget> + </item> + </layout> + </item> + </layout> + </item> + <item> + <layout class="QHBoxLayout" name="horizontalLayout"> + <item> + <spacer name="horizontalSpacer_4"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>40</width> + <height>20</height> + </size> + </property> + </spacer> + </item> + <item> + <widget class="QPushButton" name="btnDistribute"> + <property name="text"> + <string>RozdÄ›lit</string> + </property> + </widget> + </item> + </layout> + </item> + </layout> + </widget> + <resources/> + <connections/> +</ui> diff --git a/Implementace/windows/qt/groupedit.ui b/Implementace/windows/qt/groupedit.ui new file mode 100644 index 0000000..b250fb5 --- /dev/null +++ b/Implementace/windows/qt/groupedit.ui @@ -0,0 +1,301 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ui version="4.0"> + <class>Form</class> + <widget class="QWidget" name="Form"> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>748</width> + <height>590</height> + </rect> + </property> + <property name="windowTitle"> + <string>Form</string> + </property> + <layout class="QVBoxLayout" name="verticalLayout"> + <item> + <layout class="QHBoxLayout" name="layoutName"> + <property name="sizeConstraint"> + <enum>QLayout::SetMaximumSize</enum> + </property> + <item> + <spacer name="horizontalSpacer_2"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="sizeType"> + <enum>QSizePolicy::Expanding</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>40</width> + <height>20</height> + </size> + </property> + </spacer> + </item> + <item> + <spacer name="horizontalSpacer_8"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="sizeType"> + <enum>QSizePolicy::Fixed</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>175</width> + <height>20</height> + </size> + </property> + </spacer> + </item> + <item> + <widget class="QLabel" name="lblName"> + <property name="font"> + <font> + <pointsize>20</pointsize> + <weight>75</weight> + <bold>true</bold> + </font> + </property> + <property name="text"> + <string>Group Name</string> + </property> + </widget> + </item> + <item> + <widget class="QPushButton" name="btnChangeName"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Fixed" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="maximumSize"> + <size> + <width>50</width> + <height>16777215</height> + </size> + </property> + <property name="text"> + <string>Edit</string> + </property> + </widget> + </item> + <item> + <widget class="QPushButton" name="btnDelete"> + <property name="maximumSize"> + <size> + <width>50</width> + <height>16777215</height> + </size> + </property> + <property name="text"> + <string>Delete</string> + </property> + </widget> + </item> + <item> + <spacer name="horizontalSpacer"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>40</width> + <height>20</height> + </size> + </property> + </spacer> + </item> + <item> + <widget class="QPushButton" name="btnDistribute"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Minimum" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="text"> + <string>RozdÄ›lit</string> + </property> + </widget> + </item> + </layout> + </item> + <item> + <layout class="QHBoxLayout" name="horizontalLayout"> + <item> + <spacer name="horizontalSpacer_3"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>40</width> + <height>20</height> + </size> + </property> + </spacer> + </item> + <item> + <widget class="QLabel" name="label"> + <property name="font"> + <font> + <weight>75</weight> + <bold>true</bold> + </font> + </property> + <property name="text"> + <string>PoÄŤet ÄŤlenĹŻ:</string> + </property> + </widget> + </item> + <item> + <widget class="QLabel" name="lblMemberCount"> + <property name="text"> + <string>0</string> + </property> + </widget> + </item> + <item> + <spacer name="horizontalSpacer_7"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>40</width> + <height>20</height> + </size> + </property> + </spacer> + </item> + </layout> + </item> + <item> + <layout class="QVBoxLayout" name="verticalLayout_3"> + <property name="spacing"> + <number>0</number> + </property> + <item> + <layout class="QHBoxLayout" name="layoutMembers"> + <item> + <widget class="QLabel" name="label_2"> + <property name="minimumSize"> + <size> + <width>80</width> + <height>0</height> + </size> + </property> + <property name="maximumSize"> + <size> + <width>80</width> + <height>16777215</height> + </size> + </property> + <property name="font"> + <font> + <pointsize>10</pointsize> + <weight>75</weight> + <bold>true</bold> + </font> + </property> + <property name="text"> + <string>ÄŚlenovĂ©:</string> + </property> + <property name="alignment"> + <set>Qt::AlignHCenter|Qt::AlignTop</set> + </property> + </widget> + </item> + <item> + <spacer name="horizontalSpacer_4"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="sizeType"> + <enum>QSizePolicy::Maximum</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>80</width> + <height>20</height> + </size> + </property> + </spacer> + </item> + </layout> + </item> + <item> + <layout class="QHBoxLayout" name="horizontalLayout_4"> + <item> + <spacer name="horizontalSpacer_5"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="sizeType"> + <enum>QSizePolicy::Fixed</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>80</width> + <height>20</height> + </size> + </property> + </spacer> + </item> + <item> + <widget class="QLineEdit" name="editNewMemberName"> + <property name="placeholderText"> + <string>JmĂ©no</string> + </property> + </widget> + </item> + <item> + <widget class="QLineEdit" name="editNewMemberSurname"> + <property name="text"> + <string/> + </property> + <property name="placeholderText"> + <string>PĹ™ĂjmenĂ</string> + </property> + </widget> + </item> + <item> + <widget class="QPushButton" name="btnAddNew"> + <property name="text"> + <string>PĹ™idat</string> + </property> + <property name="default"> + <bool>false</bool> + </property> + </widget> + </item> + <item> + <spacer name="horizontalSpacer_6"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="sizeType"> + <enum>QSizePolicy::Maximum</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>80</width> + <height>20</height> + </size> + </property> + </spacer> + </item> + </layout> + </item> + </layout> + </item> + </layout> + </widget> + <resources/> + <connections/> +</ui> diff --git a/Implementace/windows/qt/grouptable.ui b/Implementace/windows/qt/grouptable.ui new file mode 100644 index 0000000..31f517e --- /dev/null +++ b/Implementace/windows/qt/grouptable.ui @@ -0,0 +1,64 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ui version="4.0"> + <class>Form</class> + <widget class="QWidget" name="Form"> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>400</width> + <height>300</height> + </rect> + </property> + <property name="windowTitle"> + <string>Form</string> + </property> + <layout class="QVBoxLayout" name="verticalLayout"> + <property name="spacing"> + <number>0</number> + </property> + <property name="leftMargin"> + <number>0</number> + </property> + <property name="topMargin"> + <number>0</number> + </property> + <property name="rightMargin"> + <number>0</number> + </property> + <property name="bottomMargin"> + <number>0</number> + </property> + <item> + <widget class="QTableView" name="tableGroups"> + <property name="selectionMode"> + <enum>QAbstractItemView::SingleSelection</enum> + </property> + <property name="selectionBehavior"> + <enum>QAbstractItemView::SelectRows</enum> + </property> + <property name="showGrid"> + <bool>false</bool> + </property> + <property name="sortingEnabled"> + <bool>true</bool> + </property> + <property name="cornerButtonEnabled"> + <bool>false</bool> + </property> + <attribute name="horizontalHeaderHighlightSections"> + <bool>false</bool> + </attribute> + <attribute name="verticalHeaderVisible"> + <bool>false</bool> + </attribute> + <attribute name="verticalHeaderCascadingSectionResizes"> + <bool>true</bool> + </attribute> + </widget> + </item> + </layout> + </widget> + <resources/> + <connections/> +</ui> diff --git a/Implementace/windows/qt/main.cpp b/Implementace/windows/qt/main.cpp new file mode 100644 index 0000000..b48f94e --- /dev/null +++ b/Implementace/windows/qt/main.cpp @@ -0,0 +1,11 @@ +#include "mainwindow.h" +#include <QApplication> + +int main(int argc, char *argv[]) +{ + QApplication a(argc, argv); + MainWindow w; + w.show(); + + return a.exec(); +} diff --git a/Implementace/windows/qt/mainwindow.cpp b/Implementace/windows/qt/mainwindow.cpp new file mode 100644 index 0000000..49d64fc --- /dev/null +++ b/Implementace/windows/qt/mainwindow.cpp @@ -0,0 +1,14 @@ +#include "mainwindow.h" +#include "ui_mainwindow.h" + +MainWindow::MainWindow(QWidget *parent) : + QMainWindow(parent), + ui(new Ui::MainWindow) +{ + ui->setupUi(this); +} + +MainWindow::~MainWindow() +{ + delete ui; +} diff --git a/Implementace/windows/qt/mainwindow.h b/Implementace/windows/qt/mainwindow.h new file mode 100644 index 0000000..a3948a9 --- /dev/null +++ b/Implementace/windows/qt/mainwindow.h @@ -0,0 +1,22 @@ +#ifndef MAINWINDOW_H +#define MAINWINDOW_H + +#include <QMainWindow> + +namespace Ui { +class MainWindow; +} + +class MainWindow : public QMainWindow +{ + Q_OBJECT + +public: + explicit MainWindow(QWidget *parent = 0); + ~MainWindow(); + +private: + Ui::MainWindow *ui; +}; + +#endif // MAINWINDOW_H diff --git a/Implementace/windows/qt/qt.pro b/Implementace/windows/qt/qt.pro index b762e13..87d47bb 100644 --- a/Implementace/windows/qt/qt.pro +++ b/Implementace/windows/qt/qt.pro @@ -32,4 +32,6 @@ FORMS += mainwindow.ui \ groupoverview.ui \ groupedit.ui \ grouptable.ui \ - table.ui + table.ui \ + distributionsetup.ui \ + requirementdialog.ui diff --git a/Implementace/windows/qt/qt.pro.user b/Implementace/windows/qt/qt.pro.user index 33848c7..6d06a35 100644 --- a/Implementace/windows/qt/qt.pro.user +++ b/Implementace/windows/qt/qt.pro.user @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE QtCreatorProject> -<!-- Written by QtCreator 4.2.1, 2017-03-27T21:55:18. --> +<!-- Written by QtCreator 4.2.1, 2017-04-03T00:28:41. --> <qtcreator> <data> <variable>EnvironmentId</variable> diff --git a/Implementace/windows/qt/requirementdialog.ui b/Implementace/windows/qt/requirementdialog.ui new file mode 100644 index 0000000..17a2ca3 --- /dev/null +++ b/Implementace/windows/qt/requirementdialog.ui @@ -0,0 +1,144 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ui version="4.0"> + <class>Dialog</class> + <widget class="QDialog" name="Dialog"> + <property name="windowModality"> + <enum>Qt::ApplicationModal</enum> + </property> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>585</width> + <height>471</height> + </rect> + </property> + <property name="windowTitle"> + <string>NastavenĂ omezenĂ</string> + </property> + <property name="modal"> + <bool>true</bool> + </property> + <layout class="QVBoxLayout" name="verticalLayout"> + <item> + <layout class="QHBoxLayout" name="horizontalLayout"> + <property name="spacing"> + <number>10</number> + </property> + <item> + <widget class="QComboBox" name="comboWho"/> + </item> + <item> + <widget class="QComboBox" name="comboType"> + <property name="font"> + <font> + <weight>75</weight> + <bold>true</bold> + </font> + </property> + <property name="currentText"> + <string>nesmĂ</string> + </property> + <item> + <property name="text"> + <string>nesmĂ</string> + </property> + </item> + <item> + <property name="text"> + <string>musĂ</string> + </property> + </item> + </widget> + </item> + <item> + <widget class="QLabel" name="label"> + <property name="text"> + <string>bĂ˝t v tĂ˝mu s:</string> + </property> + </widget> + </item> + <item> + <spacer name="horizontalSpacer"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>40</width> + <height>20</height> + </size> + </property> + </spacer> + </item> + </layout> + </item> + <item> + <widget class="QWidget" name="widget" native="true"> + <layout class="QVBoxLayout" name="placeTable"> + <property name="spacing"> + <number>0</number> + </property> + <property name="leftMargin"> + <number>0</number> + </property> + <property name="topMargin"> + <number>0</number> + </property> + <property name="rightMargin"> + <number>0</number> + </property> + <property name="bottomMargin"> + <number>0</number> + </property> + </layout> + </widget> + </item> + <item> + <widget class="QDialogButtonBox" name="buttonBox"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="standardButtons"> + <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set> + </property> + </widget> + </item> + </layout> + </widget> + <resources/> + <connections> + <connection> + <sender>buttonBox</sender> + <signal>accepted()</signal> + <receiver>Dialog</receiver> + <slot>accept()</slot> + <hints> + <hint type="sourcelabel"> + <x>248</x> + <y>254</y> + </hint> + <hint type="destinationlabel"> + <x>157</x> + <y>274</y> + </hint> + </hints> + </connection> + <connection> + <sender>buttonBox</sender> + <signal>rejected()</signal> + <receiver>Dialog</receiver> + <slot>reject()</slot> + <hints> + <hint type="sourcelabel"> + <x>316</x> + <y>260</y> + </hint> + <hint type="destinationlabel"> + <x>286</x> + <y>274</y> + </hint> + </hints> + </connection> + </connections> +</ui> diff --git a/Implementace/windows/qt/table.ui b/Implementace/windows/qt/table.ui new file mode 100644 index 0000000..434e2e6 --- /dev/null +++ b/Implementace/windows/qt/table.ui @@ -0,0 +1,76 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ui version="4.0"> + <class>Form</class> + <widget class="QWidget" name="Form"> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>400</width> + <height>300</height> + </rect> + </property> + <property name="sizePolicy"> + <sizepolicy hsizetype="MinimumExpanding" vsizetype="MinimumExpanding"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="windowTitle"> + <string>Form</string> + </property> + <layout class="QVBoxLayout" name="verticalLayout"> + <property name="spacing"> + <number>0</number> + </property> + <property name="leftMargin"> + <number>0</number> + </property> + <property name="topMargin"> + <number>0</number> + </property> + <property name="rightMargin"> + <number>0</number> + </property> + <property name="bottomMargin"> + <number>0</number> + </property> + <item> + <widget class="QTableView" name="table"> + <property name="sizePolicy"> + <sizepolicy hsizetype="MinimumExpanding" vsizetype="MinimumExpanding"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="selectionMode"> + <enum>QAbstractItemView::SingleSelection</enum> + </property> + <property name="selectionBehavior"> + <enum>QAbstractItemView::SelectRows</enum> + </property> + <property name="showGrid"> + <bool>false</bool> + </property> + <property name="sortingEnabled"> + <bool>true</bool> + </property> + <property name="cornerButtonEnabled"> + <bool>false</bool> + </property> + <attribute name="horizontalHeaderHighlightSections"> + <bool>false</bool> + </attribute> + <attribute name="verticalHeaderVisible"> + <bool>false</bool> + </attribute> + <attribute name="verticalHeaderCascadingSectionResizes"> + <bool>true</bool> + </attribute> + </widget> + </item> + </layout> + </widget> + <resources/> + <connections/> +</ui> diff --git a/Implementace/windows/requirement_dialog.py b/Implementace/windows/requirement_dialog.py new file mode 100644 index 0000000..28e3945 --- /dev/null +++ b/Implementace/windows/requirement_dialog.py @@ -0,0 +1,65 @@ +# -*- coding: utf-8 -*- + +# Form implementation generated from reading ui file 'requirementdialog.ui' +# +# Created by: PyQt5 UI code generator 5.8.1 +# +# WARNING! All changes made in this file will be lost! + +from PyQt5 import QtCore, QtGui, QtWidgets + +class Ui_Dialog(object): + def setupUi(self, Dialog): + Dialog.setObjectName("Dialog") + Dialog.setWindowModality(QtCore.Qt.ApplicationModal) + Dialog.resize(585, 471) + Dialog.setModal(True) + self.verticalLayout = QtWidgets.QVBoxLayout(Dialog) + self.verticalLayout.setObjectName("verticalLayout") + self.horizontalLayout = QtWidgets.QHBoxLayout() + self.horizontalLayout.setSpacing(10) + self.horizontalLayout.setObjectName("horizontalLayout") + self.comboWho = QtWidgets.QComboBox(Dialog) + self.comboWho.setObjectName("comboWho") + self.horizontalLayout.addWidget(self.comboWho) + self.comboType = QtWidgets.QComboBox(Dialog) + font = QtGui.QFont() + font.setBold(True) + font.setWeight(75) + self.comboType.setFont(font) + self.comboType.setObjectName("comboType") + self.comboType.addItem("") + self.comboType.addItem("") + self.horizontalLayout.addWidget(self.comboType) + self.label = QtWidgets.QLabel(Dialog) + self.label.setObjectName("label") + self.horizontalLayout.addWidget(self.label) + spacerItem = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) + self.horizontalLayout.addItem(spacerItem) + self.verticalLayout.addLayout(self.horizontalLayout) + self.widget = QtWidgets.QWidget(Dialog) + self.widget.setObjectName("widget") + self.placeTable = QtWidgets.QVBoxLayout(self.widget) + self.placeTable.setContentsMargins(0, 0, 0, 0) + self.placeTable.setSpacing(0) + self.placeTable.setObjectName("placeTable") + self.verticalLayout.addWidget(self.widget) + self.buttonBox = QtWidgets.QDialogButtonBox(Dialog) + self.buttonBox.setOrientation(QtCore.Qt.Horizontal) + self.buttonBox.setStandardButtons(QtWidgets.QDialogButtonBox.Cancel|QtWidgets.QDialogButtonBox.Ok) + self.buttonBox.setObjectName("buttonBox") + self.verticalLayout.addWidget(self.buttonBox) + + self.retranslateUi(Dialog) + self.buttonBox.accepted.connect(Dialog.accept) + self.buttonBox.rejected.connect(Dialog.reject) + QtCore.QMetaObject.connectSlotsByName(Dialog) + + def retranslateUi(self, Dialog): + _translate = QtCore.QCoreApplication.translate + Dialog.setWindowTitle(_translate("Dialog", "NastavenĂ omezenĂ")) + self.comboType.setCurrentText(_translate("Dialog", "nesmĂ")) + self.comboType.setItemText(0, _translate("Dialog", "nesmĂ")) + self.comboType.setItemText(1, _translate("Dialog", "musĂ")) + self.label.setText(_translate("Dialog", "bĂ˝t v tĂ˝mu s:")) + diff --git a/Implementace/windows/table.py b/Implementace/windows/table.py index 057d272..ae3d88d 100644 --- a/Implementace/windows/table.py +++ b/Implementace/windows/table.py @@ -12,11 +12,21 @@ class Ui_Form(object): def setupUi(self, Form): Form.setObjectName("Form") Form.resize(400, 300) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.MinimumExpanding, QtWidgets.QSizePolicy.MinimumExpanding) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(Form.sizePolicy().hasHeightForWidth()) + Form.setSizePolicy(sizePolicy) self.verticalLayout = QtWidgets.QVBoxLayout(Form) self.verticalLayout.setContentsMargins(0, 0, 0, 0) self.verticalLayout.setSpacing(0) self.verticalLayout.setObjectName("verticalLayout") self.table = QtWidgets.QTableView(Form) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.MinimumExpanding, QtWidgets.QSizePolicy.MinimumExpanding) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.table.sizePolicy().hasHeightForWidth()) + self.table.setSizePolicy(sizePolicy) self.table.setSelectionMode(QtWidgets.QAbstractItemView.SingleSelection) self.table.setSelectionBehavior(QtWidgets.QAbstractItemView.SelectRows) self.table.setShowGrid(False) -- GitLab