1 /* 2 File lockunlock.cpp 3 */ 4 5 /*************************************************************************** 6 FET 7 ------------------- 8 copyright : (C) by Lalescu Liviu 9 email : Please see https://lalescu.ro/liviu/ for details about contacting Liviu Lalescu (in particular, you can find here the e-mail address) 10 *************************************************************************** 11 lockunlock.cpp - description 12 ------------------- 13 begin : Dec 2008 14 copyright : (C) by Liviu Lalescu (https://lalescu.ro/liviu/) and Volker Dirr (https://www.timetabling.de/) 15 *************************************************************************** 16 * * 17 * This program is free software: you can redistribute it and/or modify * 18 * it under the terms of the GNU Affero General Public License as * 19 * published by the Free Software Foundation, either version 3 of the * 20 * License, or (at your option) any later version. * 21 * * 22 ***************************************************************************/ 23 24 //#include <QSpinBox> 25 26 //extern QSpinBox* pcommunicationSpinBox; 27 28 #include "lockunlock.h" 29 #include "timetable_defs.h" 30 #include "timetable.h" 31 #include "solution.h" 32 33 //extern bool students_schedule_ready; 34 //extern bool teachers_schedule_ready; 35 //extern bool rooms_schedule_ready; 36 37 //extern Solution best_solution; 38 39 extern Timetable gt; 40 41 QSet<int> idsOfLockedTime; 42 QSet<int> idsOfLockedSpace; 43 QSet<int> idsOfPermanentlyLockedTime; 44 QSet<int> idsOfPermanentlyLockedSpace; 45 46 CommunicationSpinBox communicationSpinBox; 47 48 CommunicationSpinBox()49CommunicationSpinBox::CommunicationSpinBox() 50 { 51 minValue=0; 52 maxValue=9; 53 value=0; 54 } 55 ~CommunicationSpinBox()56CommunicationSpinBox::~CommunicationSpinBox() 57 { 58 } 59 increaseValue()60void CommunicationSpinBox::increaseValue() 61 { 62 assert(maxValue>minValue); 63 assert(value>=minValue && value<=maxValue); 64 value++; 65 if(value>maxValue) 66 value=minValue; 67 68 //cout<<"comm. spin box: increased value, crt value=="<<value<<endl; 69 70 emit(valueChanged(value)); 71 } 72 73 computeLockedUnlockedActivitiesTimeSpace()74void LockUnlock::computeLockedUnlockedActivitiesTimeSpace() 75 { 76 //by Volker Dirr 77 idsOfLockedTime.clear(); 78 idsOfLockedSpace.clear(); 79 idsOfPermanentlyLockedTime.clear(); 80 idsOfPermanentlyLockedSpace.clear(); 81 82 QSet<QString> virtualRooms; 83 for(Room* rm : qAsConst(gt.rules.roomsList)) 84 if(rm->isVirtual==true) 85 virtualRooms.insert(rm->name); 86 87 for(TimeConstraint* tc : qAsConst(gt.rules.timeConstraintsList)){ 88 if(tc->type==CONSTRAINT_ACTIVITY_PREFERRED_STARTING_TIME && tc->weightPercentage==100.0 && tc->active){ 89 ConstraintActivityPreferredStartingTime* c=(ConstraintActivityPreferredStartingTime*) tc; 90 if(c->day >= 0 && c->hour >= 0) { 91 if(c->permanentlyLocked) 92 idsOfPermanentlyLockedTime.insert(c->activityId); 93 else 94 idsOfLockedTime.insert(c->activityId); 95 } 96 } 97 } 98 99 for(SpaceConstraint* sc : qAsConst(gt.rules.spaceConstraintsList)){ 100 if(sc->type==CONSTRAINT_ACTIVITY_PREFERRED_ROOM && sc->weightPercentage==100.0 && sc->active){ 101 ConstraintActivityPreferredRoom* c=(ConstraintActivityPreferredRoom*) sc; 102 103 if(!virtualRooms.contains(c->roomName) || (virtualRooms.contains(c->roomName) && !c->preferredRealRoomsNames.isEmpty())){ 104 if(c->permanentlyLocked){ 105 idsOfPermanentlyLockedSpace.insert(c->activityId); 106 } 107 else{ 108 idsOfLockedSpace.insert(c->activityId); 109 } 110 } 111 } 112 } 113 } 114 computeLockedUnlockedActivitiesOnlyTime()115void LockUnlock::computeLockedUnlockedActivitiesOnlyTime() 116 { 117 //by Volker Dirr 118 idsOfLockedTime.clear(); 119 idsOfPermanentlyLockedTime.clear(); 120 121 for(TimeConstraint* tc : qAsConst(gt.rules.timeConstraintsList)){ 122 if(tc->type==CONSTRAINT_ACTIVITY_PREFERRED_STARTING_TIME && tc->weightPercentage==100.0 && tc->active){ 123 ConstraintActivityPreferredStartingTime* c=(ConstraintActivityPreferredStartingTime*) tc; 124 if(c->day >= 0 && c->hour >= 0) { 125 if(c->permanentlyLocked) 126 idsOfPermanentlyLockedTime.insert(c->activityId); 127 else 128 idsOfLockedTime.insert(c->activityId); 129 } 130 } 131 } 132 } 133 computeLockedUnlockedActivitiesOnlySpace()134void LockUnlock::computeLockedUnlockedActivitiesOnlySpace() 135 { 136 //by Volker Dirr 137 idsOfLockedSpace.clear(); 138 idsOfPermanentlyLockedSpace.clear(); 139 140 QSet<QString> virtualRooms; 141 for(Room* rm : qAsConst(gt.rules.roomsList)) 142 if(rm->isVirtual==true) 143 virtualRooms.insert(rm->name); 144 145 for(SpaceConstraint* sc : qAsConst(gt.rules.spaceConstraintsList)){ 146 if(sc->type==CONSTRAINT_ACTIVITY_PREFERRED_ROOM && sc->weightPercentage==100.0 && sc->active){ 147 ConstraintActivityPreferredRoom* c=(ConstraintActivityPreferredRoom*) sc; 148 if(!virtualRooms.contains(c->roomName) || (virtualRooms.contains(c->roomName) && !c->preferredRealRoomsNames.isEmpty())){ 149 if(c->permanentlyLocked){ 150 idsOfPermanentlyLockedSpace.insert(c->activityId); 151 } 152 else{ 153 idsOfLockedSpace.insert(c->activityId); 154 } 155 } 156 } 157 } 158 } 159 increaseCommunicationSpinBox()160void LockUnlock::increaseCommunicationSpinBox() 161 { 162 /* assert(pcommunicationSpinBox!=nullptr); 163 164 int q=pcommunicationSpinBox->value(); //needed to display locked and unlocked times and rooms 165 //cout<<"communication spin box old value: "<<pcommunicationSpinBox->value()<<", "; 166 q++; 167 assert(pcommunicationSpinBox->maximum()>pcommunicationSpinBox->minimum()); 168 if(q > pcommunicationSpinBox->maximum()) 169 q=pcommunicationSpinBox->minimum(); 170 pcommunicationSpinBox->setValue(q);*/ 171 //cout<<"changed to new value: "<<pcommunicationSpinBox->value()<<endl; 172 173 communicationSpinBox.increaseValue(); 174 } 175