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

requirements now display

parent 09aea16b
No related branches found
No related tags found
No related merge requests found
......@@ -3,6 +3,7 @@ from PyQt5 import QtWidgets as Qt
from PyQt5.QtCore import pyqtSlot
from controllers.requirement_dialog import RequirementDialog
from utils.groups_table import GroupsTable
from utils.requirements_table import RequirementsTable
from windows import distributionsetup
 
 
......@@ -16,7 +17,8 @@ class DistributionSetup(Qt.QWidget, distributionsetup.Ui_Form):
"""
super(DistributionSetup, self).__init__(parent)
self.setupUi(self)
self.placeTable.insertWidget(1, GroupsTable())
self.tableRequirements = RequirementsTable()
self.placeTable.insertWidget(1, self.tableRequirements)
self.group = group
 
# set up header
......@@ -30,33 +32,24 @@ class DistributionSetup(Qt.QWidget, distributionsetup.Ui_Form):
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:
...
requirement = dialog.getRequirement()
self.tableRequirements.insertRequirement(requirement)
from PyQt5 import Qt
from PyQt5.QtCore import pyqtSlot, Qt
from PyQt5.QtWidgets import QDialog, QAbstractItemView
from model.requirements import RequirementDifferentTeam, RequirementSameTeam
from utils.members_table import MembersTable
from windows import requirement_dialog
 
......@@ -21,6 +23,8 @@ class RequirementDialog(QDialog, requirement_dialog.Ui_Dialog):
self.comboWho.currentIndexChanged.connect(self.onComboWhoCurrentChanged)
self.onComboWhoCurrentChanged() # to set initial filter
 
self.comboType.setItemData(0, RequirementDifferentTeam, Qt.UserRole)
self.comboType.setItemData(1, RequirementSameTeam, Qt.UserRole)
 
@pyqtSlot()
def onComboWhoCurrentChanged(self):
......@@ -28,6 +32,7 @@ class RequirementDialog(QDialog, requirement_dialog.Ui_Dialog):
self.tableMembers.model.resetHiddenRows()
self.tableMembers.model.hideRowByData(self.comboWho.currentData(Qt.UserRole))
 
def getRequirement(self):
...
target_members = self.tableMembers.getSelectedItems()
who = self.comboWho.currentData(Qt.UserRole)
return self.comboType.currentData(Qt.UserRole)(who, target_members)
 
 
class Requirement:
def __init__(self, person, target_people):
def __init__(self, person, target_members):
"""
:param person: the one person that's in some "relationship" with each of the target_people
:param target_people: see person
:param person: the one person that's in some "relationship" with each of the target_members
:param target_members: see person
"""
self.person = person
self.target_people = target_people
self.target_members = target_members
 
 
class RequirementSameTeam(Requirement):
def __init__(self, person, target_people):
super(RequirementSameTeam, self).__init__(person, target_people)
def __init__(self, person, target_members):
super(RequirementSameTeam, self).__init__(person, target_members)
 
 
class RequirementDifferentTeam(Requirement):
def __init__(self, person, target_people):
super(RequirementDifferentTeam, self).__init__(person, target_people)
def __init__(self, person, target_members):
super(RequirementDifferentTeam, self).__init__(person, target_members)
from PyQt5 import QtCore
from PyQt5.QtCore import QModelIndex
from model.requirements import RequirementSameTeam, RequirementDifferentTeam
class RequirementsTableModel(QtCore.QAbstractTableModel):
def __init__(self, requirements=[], num_columns=3, parent=None):
super(RequirementsTableModel, self).__init__(parent)
self._requirements = requirements
self._columns = num_columns
def rowCount(self, parent=None, *args, **kwargs):
return len(self._requirements)
def columnCount(self, parent=None, *args, **kwargs):
return self._columns
def headerData(self, p_int, Qt_Orientation, role=None):
if role == QtCore.Qt.DisplayRole:
if role == QtCore.Qt.DisplayRole:
if p_int == 0:
return 'Kdo'
if p_int == 1:
return 'Typ'
if p_int == 2:
return 'S kým'
def data(self, index, role=None):
requirement = self._requirements[index.row()]
if role == QtCore.Qt.DisplayRole:
if index.column() == 0:
return requirement.person.surname + " " + requirement.person.name
if index.column() == 1:
if type(requirement) is RequirementSameTeam:
return 'Musí být v týmu s'
if type(requirement) is RequirementDifferentTeam:
return 'Nesmí být v týmu s'
if index.column() == 2:
member = requirement.target_members[0].surname + " " + requirement.target_members[0].name
if len(requirement.target_members) > 1:
return member + " a " \
+ str(len(requirement.target_members) - 1) + " dalsi..."
return member
if role == QtCore.Qt.UserRole:
return requirement
def insertRequirement(self, position, requirement):
self.beginInsertRows(QModelIndex(), position, position)
self._requirements.insert(position, requirement)
self.endInsertRows()
def getElementById(self, person_id):
return None
from utils.qtmodels.groups_table_model import GroupsTableModel
from utils.qtmodels.requirements_table_model import RequirementsTableModel
from utils.table import ElemTable
class RequirementsTable(ElemTable):
def __init__(self, num_of_buttons=0, button_titles=(), data=[], parent=None):
super(RequirementsTable, self).__init__(RequirementsTableModel(data, num_of_buttons + 3), num_of_buttons, button_titles, parent)
def changeData(self, data):
self.setModel(GroupsTableModel(data, self._btn_amount + 3))
def insertRequirement(self, requirement):
self.model.sourceModel().insertRequirement(0, requirement)
\ No newline at end of file
......@@ -67,3 +67,10 @@ class ElemTable(QWidget, table.Ui_Form):
 
def clearSelection(self):
self.table.clearSelection()
def getSelectedItems(self):
indexes = self.table.selectionModel().selectedRows()
res = []
for index in indexes:
res.append(self.model.data(index, Qt.UserRole))
return res
......@@ -8,11 +8,10 @@
 
from PyQt5 import QtCore, QtGui, QtWidgets
 
class Ui_Form(object):
def setupUi(self, Form):
Form.setObjectName("Form")
Form.resize(714, 564)
Form.resize(622, 526)
self.verticalLayout_2 = QtWidgets.QVBoxLayout(Form)
self.verticalLayout_2.setObjectName("verticalLayout_2")
self.verticalLayout_3 = QtWidgets.QVBoxLayout()
......@@ -45,44 +44,61 @@ class Ui_Form(object):
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.verticalLayout_4 = QtWidgets.QVBoxLayout()
self.verticalLayout_4.setObjectName("verticalLayout_4")
self.gridLayout = QtWidgets.QGridLayout()
self.gridLayout.setVerticalSpacing(6)
self.gridLayout.setObjectName("gridLayout")
spacerItem1 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
self.gridLayout.addItem(spacerItem1, 0, 1, 1, 1)
spacerItem2 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
self.gridLayout.addItem(spacerItem2, 5, 1, 1, 1)
self.label = QtWidgets.QLabel(Form)
self.label.setObjectName("label")
self.formLayout.setWidget(1, QtWidgets.QFormLayout.LabelRole, self.label)
self.gridLayout.addWidget(self.label, 1, 0, 1, 1)
self.label_2 = QtWidgets.QLabel(Form)
self.label_2.setObjectName("label_2")
self.gridLayout.addWidget(self.label_2, 2, 0, 1, 1)
self.spinTeamCount = QtWidgets.QSpinBox(Form)
self.spinTeamCount.setMinimumSize(QtCore.QSize(40, 0))
self.spinTeamCount.setAlignment(QtCore.Qt.AlignCenter)
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.gridLayout.addWidget(self.spinTeamCount, 1, 1, 1, 1)
self.spinMinTeamSize = QtWidgets.QSpinBox(Form)
self.spinMinTeamSize.setMinimumSize(QtCore.QSize(40, 0))
self.spinMinTeamSize.setAlignment(QtCore.Qt.AlignCenter)
self.spinMinTeamSize.setObjectName("spinMinTeamSize")
self.formLayout.setWidget(2, QtWidgets.QFormLayout.FieldRole, self.spinMinTeamSize)
self.gridLayout.addWidget(self.spinMinTeamSize, 2, 1, 1, 1)
self.label_3 = QtWidgets.QLabel(Form)
self.label_3.setObjectName("label_3")
self.formLayout.setWidget(3, QtWidgets.QFormLayout.LabelRole, self.label_3)
self.gridLayout.addWidget(self.label_3, 3, 0, 1, 1)
self.label_5 = QtWidgets.QLabel(Form)
self.label_5.setObjectName("label_5")
self.gridLayout.addWidget(self.label_5, 4, 0, 1, 1)
self.spinMaxTeamSize = QtWidgets.QSpinBox(Form)
self.spinMaxTeamSize.setMinimumSize(QtCore.QSize(40, 0))
self.spinMaxTeamSize.setAlignment(QtCore.Qt.AlignCenter)
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.gridLayout.addWidget(self.spinMaxTeamSize, 3, 1, 1, 1)
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.gridLayout.addWidget(self.comboPrefer, 4, 1, 1, 1)
self.cbIgnoreTeamCount = QtWidgets.QCheckBox(Form)
self.cbIgnoreTeamCount.setObjectName("cbIgnoreTeamCount")
self.gridLayout.addWidget(self.cbIgnoreTeamCount, 1, 2, 1, 1)
self.cbIgnoreMinSize = QtWidgets.QCheckBox(Form)
self.cbIgnoreMinSize.setObjectName("cbIgnoreMinSize")
self.gridLayout.addWidget(self.cbIgnoreMinSize, 2, 2, 1, 1)
self.cbIgnoreMaxSize = QtWidgets.QCheckBox(Form)
self.cbIgnoreMaxSize.setObjectName("cbIgnoreMaxSize")
self.gridLayout.addWidget(self.cbIgnoreMaxSize, 3, 2, 1, 1)
self.verticalLayout_4.addLayout(self.gridLayout)
self.horizontalLayout_4.addLayout(self.verticalLayout_4)
spacerItem3 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Minimum)
self.horizontalLayout_4.addItem(spacerItem3)
self.verticalLayout = QtWidgets.QVBoxLayout()
self.verticalLayout.setObjectName("verticalLayout")
self.horizontalLayout_2 = QtWidgets.QHBoxLayout()
......@@ -90,8 +106,8 @@ class Ui_Form(object):
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)
spacerItem4 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.horizontalLayout_2.addItem(spacerItem4)
self.btnAddRequirement = QtWidgets.QPushButton(Form)
self.btnAddRequirement.setObjectName("btnAddRequirement")
self.horizontalLayout_2.addWidget(self.btnAddRequirement)
......@@ -112,8 +128,8 @@ class Ui_Form(object):
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)
spacerItem5 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.horizontalLayout.addItem(spacerItem5)
self.btnDistribute = QtWidgets.QPushButton(Form)
self.btnDistribute.setObjectName("btnDistribute")
self.horizontalLayout.addWidget(self.btnDistribute)
......@@ -139,6 +155,10 @@ class Ui_Form(object):
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.cbIgnoreTeamCount.setText(_translate("Form", "ignorovat"))
self.cbIgnoreMinSize.setText(_translate("Form", "ignorovat"))
self.cbIgnoreMaxSize.setText(_translate("Form", "ignorovat"))
self.label_4.setText(_translate("Form", "Omezení:"))
self.btnAddRequirement.setText(_translate("Form", "+"))
self.btnDistribute.setText(_translate("Form", "Rozdělit"))
......@@ -11,7 +11,13 @@ from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(503, 429)
MainWindow.resize(800, 600)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(MainWindow.sizePolicy().hasHeightForWidth())
MainWindow.setSizePolicy(sizePolicy)
MainWindow.setMinimumSize(QtCore.QSize(800, 600))
self.centralWidget = QtWidgets.QWidget(MainWindow)
self.centralWidget.setObjectName("centralWidget")
self.verticalLayout_2 = QtWidgets.QVBoxLayout(self.centralWidget)
......
......@@ -6,10 +6,22 @@
<rect>
<x>0</x>
<y>0</y>
<width>503</width>
<height>429</height>
<width>800</width>
<height>600</height>
</rect>
</property>
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>800</width>
<height>600</height>
</size>
</property>
<property name="windowTitle">
<string>MainWindow</string>
</property>
......
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE QtCreatorProject>
<!-- Written by QtCreator 4.2.1, 2017-04-03T00:28:41. -->
<!-- Written by QtCreator 4.2.1, 2017-04-04T17:53:10. -->
<qtcreator>
<data>
<variable>EnvironmentId</variable>
......
......@@ -43,6 +43,12 @@
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="dragDropMode">
<enum>QAbstractItemView::DragDrop</enum>
</property>
<property name="defaultDropAction">
<enum>Qt::CopyAction</enum>
</property>
<property name="selectionMode">
<enum>QAbstractItemView::SingleSelection</enum>
</property>
......
......@@ -27,6 +27,8 @@ class Ui_Form(object):
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.table.sizePolicy().hasHeightForWidth())
self.table.setSizePolicy(sizePolicy)
self.table.setDragDropMode(QtWidgets.QAbstractItemView.DragDrop)
self.table.setDefaultDropAction(QtCore.Qt.CopyAction)
self.table.setSelectionMode(QtWidgets.QAbstractItemView.SingleSelection)
self.table.setSelectionBehavior(QtWidgets.QAbstractItemView.SelectRows)
self.table.setShowGrid(False)
......
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