Changeset f2d5ce
- Timestamp:
- Dec 26, 2025, 9:40:14 PM (43 hours ago)
- Branches:
- Candidate_v1.7.1, stable
- Children:
- c8cb0d
- Parents:
- bdd1d0
- git-author:
- Frederik Heber <frederik.heber@…> (12/10/25 10:20:56)
- git-committer:
- Frederik Heber <frederik.heber@…> (12/26/25 21:40:14)
- Location:
- src/UIElements
- Files:
-
- 2 added
- 6 edited
-
Makefile.am (modified) (2 diffs)
-
Qt4/InstanceBoard/ObservedMaximumAtomTrajectorySize.cpp (added)
-
Qt4/InstanceBoard/ObservedMaximumAtomTrajectorySize.hpp (added)
-
Qt4/InstanceBoard/QtObservedInstanceBoard.cpp (modified) (9 diffs)
-
Qt4/InstanceBoard/QtObservedInstanceBoard.hpp (modified) (6 diffs)
-
Qt4/QtMainWindow.cpp (modified) (1 diff)
-
Views/Qt4/QtTimeLine.cpp (modified) (5 diffs)
-
Views/Qt4/QtTimeLine.hpp (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
src/UIElements/Makefile.am
rbdd1d0 rf2d5ce 144 144 UIElements/GlobalListOfParameterQueries.hpp \ 145 145 UIElements/MainWindow.hpp \ 146 UIElements/Qt4/InstanceBoard/ObservedMaximumAtomTrajectorySize.hpp \ 146 147 UIElements/Qt4/InstanceBoard/ObservedValue_types.hpp \ 147 148 UIElements/Qt4/InstanceBoard/ObservedValuesContainer.hpp \ … … 150 151 151 152 QTUISOURCE = \ 153 UIElements/Qt4/InstanceBoard/ObservedMaximumAtomTrajectorySize.cpp \ 152 154 UIElements/Qt4/InstanceBoard/QtObservedAtom.cpp \ 153 155 UIElements/Qt4/InstanceBoard/QtObservedBond.cpp \ -
src/UIElements/Qt4/InstanceBoard/QtObservedInstanceBoard.cpp
rbdd1d0 rf2d5ce 51 51 #include "Descriptors/MoleculeIdDescriptor.hpp" 52 52 #include "molecule.hpp" 53 #include "UIElements/Qt4/InstanceBoard/ObservedMaximumAtomTrajectorySize.hpp" 53 54 #include "UIElements/Qt4/InstanceBoard/ObservedValuesContainer_impl.hpp" 54 55 #include "World.hpp" 56 #include "WorldTime.hpp" 57 58 // static entities 59 const Observable::channels_t 60 WorldTimeChannels(1, WorldTime::TimeChanged); 61 62 const Observable::channels_t 63 MaximumTrajectorySizeChannels(1, ObservedMaximumAtomTrajectorySize::MaximumChanged); 55 64 56 65 QtObservedInstanceBoard::QtObservedInstanceBoard(QWidget * _parent) : … … 58 67 Observer("QtObservedInstanceBoard"), 59 68 WorldSignedOn(false), 69 WorldTimeSignedOn(false), 70 MaximumAtomTrajectorySizeSignedOn(false), 60 71 atomObservedValues( 61 72 "atom", … … 69 80 "molecule", 70 81 *this, 71 boost::bind(&QtObservedInstanceBoard::moleculecountsubjectKilled, this, _1)) 82 boost::bind(&QtObservedInstanceBoard::moleculecountsubjectKilled, this, _1)), 83 worldTime( 84 WorldTime::getPointer(), 85 WorldTime::getTime, 86 "WorldTime", 87 0, 88 WorldTimeChannels), 89 maximumAtomTrajectorySize( 90 ObservedMaximumAtomTrajectorySize::getPointer(), 91 boost::bind( 92 &ObservedMaximumAtomTrajectorySize::GetMaximumAtomTrajectorySize, 93 boost::cref(ObservedMaximumAtomTrajectorySize::getConstInstance()) 94 ), 95 "MaximumAtomTrajectorySize", 96 0, 97 MaximumTrajectorySizeChannels) 72 98 { 73 99 qRegisterMetaType<ObservedValue_Index_t>("ObservedValue_Index_t"); … … 80 106 World::getInstance().signOn(this, World::MoleculeInserted, GlobalObservableInfo::PriorityLevel(int(-10))); 81 107 WorldSignedOn = true; 108 WorldTime::getInstance().signOn(this, WorldTime::TimeChanged); 109 WorldTimeSignedOn = true; 110 ObservedMaximumAtomTrajectorySize::getInstance().signOn(this, ObservedMaximumAtomTrajectorySize::MaximumChanged); 111 MaximumAtomTrajectorySizeSignedOn = true; 82 112 } 83 113 … … 87 117 World::getInstance().signOff(this, World::AtomInserted); 88 118 World::getInstance().signOff(this, World::MoleculeInserted); 119 } 120 if (WorldTimeSignedOn) { 121 WorldTime::getInstance().signOff(this, WorldTime::TimeChanged); 122 } 123 if (MaximumAtomTrajectorySizeSignedOn) { 124 ObservedMaximumAtomTrajectorySize::getInstance().signOff(this, ObservedMaximumAtomTrajectorySize::MaximumChanged); 89 125 } 90 126 // sign off from all remaining molecules, bonds, and atoms … … 121 157 MoleculeSignedOn.erase(iter); 122 158 } else { 123 ASSERT(0, 124 "QtObservedInstanceBoard::subjectKilled() - could not find signedOn for atom/molecule "+toString(publisher)); 159 if (static_cast<World *>(publisher) == World::getPointer()) { 160 WorldSignedOn = false; 161 } else if (static_cast<WorldTime *>(publisher) == WorldTime::getPointer()) { 162 WorldTimeSignedOn = false; 163 } else if (static_cast<ObservedMaximumAtomTrajectorySize *>(publisher) == ObservedMaximumAtomTrajectorySize::getPointer()) { 164 MaximumAtomTrajectorySizeSignedOn = false; 165 } else { 166 ASSERT(0, 167 "QtObservedInstanceBoard::subjectKilled() - could not find signedOn for atom/molecule "+toString(publisher)); 168 } 125 169 } 126 170 } … … 217 261 } 218 262 default: 219 ASSERT(0, "QtObservedInstanceBoard::recieveNotification() - we cannot get here .");263 ASSERT(0, "QtObservedInstanceBoard::recieveNotification() - we cannot get here for Molecule."); 220 264 break; 221 265 } … … 277 321 } 278 322 default: 279 ASSERT(0, "QtObservedInstanceBoard::recieveNotification() - we cannot get here."); 280 break; 323 ASSERT(0, "QtObservedInstanceBoard::recieveNotification() - we cannot get here for Atom."); 324 break; 325 } 326 } else if (static_cast<ObservedMaximumAtomTrajectorySize *>(publisher) == ObservedMaximumAtomTrajectorySize::getPointer()) { 327 switch (notification->getChannelNo()) { 328 case ObservedMaximumAtomTrajectorySize::MaximumChanged: 329 { 330 #ifdef LOG_OBSERVER 331 observerLog().addMessage() << "++ Observer " << observerLog().getName(static_cast<Observer *>(this)) << " received notification that maximum atom tractory size has changed."; 332 #endif 333 LOG(3, "DEBUG: InformationBoard got MaximumChanged signal from ObservedMaximumAtomTrajectorySize."); 334 emit MaximumAtomTrajectoryChanged(); 335 break; 336 } 337 default: 338 { 339 ASSERT(0, "QtObservedInstanceBoard::recieveNotification() - we cannot get here for ObservedMaximumAtomTrajectorySize."); 340 break; 341 } 342 } 343 } else if (static_cast<WorldTime *>(publisher) == WorldTime::getPointer()) { 344 switch (notification->getChannelNo()) { 345 case WorldTime::TimeChanged: 346 { 347 #ifdef LOG_OBSERVER 348 observerLog().addMessage() << "++ Observer " << observerLog().getName(static_cast<Observer *>(this)) << " received notification that WorldTime has changed."; 349 #endif 350 LOG(3, "DEBUG: InformationBoard got TimeChanged signal from WorldTime."); 351 emit WorldTimeChanged(); 352 break; 353 } 354 default: 355 { 356 ASSERT(0, "QtObservedInstanceBoard::recieveNotification() - we cannot get here for WorldTime."); 357 break; 358 } 281 359 } 282 360 } else { … … 373 451 } 374 452 453 const ObservedValue<unsigned int>& QtObservedInstanceBoard::getObservedWorldTime() 454 { 455 return worldTime; 456 } 457 458 const ObservedValue<int>& QtObservedInstanceBoard::getObservedMaximumAtomTrajectorySize() 459 { 460 return maximumAtomTrajectorySize; 461 } 462 375 463 void QtObservedInstanceBoard::markObservedAtomAsConnected(ObservedValue_Index_t _id) 376 464 { -
src/UIElements/Qt4/InstanceBoard/QtObservedInstanceBoard.hpp
rbdd1d0 rf2d5ce 25 25 #include <boost/function.hpp> 26 26 27 #include "CodePatterns/ObservedValue.hpp" 27 28 #include "CodePatterns/Observer/Observer.hpp" 28 29 … … 94 95 QtObservedMolecule::ptr getObservedMolecule(const moleculeId_t _id); 95 96 QtObservedMolecule::ptr getObservedMolecule(ObservedValue_Index_t _id); 97 const ObservedValue<unsigned int>& getObservedWorldTime(); 98 const ObservedValue<int>& getObservedMaximumAtomTrajectorySize(); 96 99 void markObservedAtomAsConnected(ObservedValue_Index_t _id); 97 100 void markObservedAtomAsDisconnected(ObservedValue_Index_t _id); … … 114 117 void moleculeRemoved(ObservedValue_Index_t _molid); 115 118 void moleculeIndexChanged(const moleculeId_t _oldid, const moleculeId_t _newid); 119 void WorldTimeChanged(); 120 void MaximumAtomTrajectoryChanged(); 116 121 117 122 private: … … 124 129 bool WorldSignedOn; 125 130 131 //!> indicating whether we are still signedOn to World or not 132 bool WorldTimeSignedOn; 133 134 //!> indicating whether we are still signedOn to MaximumAtomTrajectorySize observable 135 bool MaximumAtomTrajectorySizeSignedOn; 136 126 137 typedef std::multiset<Observable *> SignedOn_t; 127 138 //!> map indicating to which atom we are currently signed on … … 129 140 //!> map indicating to which molecule we are currently signed on 130 141 SignedOn_t MoleculeSignedOn; 142 131 143 132 144 //!> "templated typedef" for an id to index map. … … 173 185 //!> container with all ObservedValues for each molecule, associated by id 174 186 ObservedValuesContainer<QtObservedMolecule, ObservedValue_Index_t> moleculeObservedValues; 187 //!> observed value for the world's time 188 ObservedValue<unsigned int> worldTime; 189 //!> observed value for the largest atom trajectory siye (i.e., current number of world time steps) 190 ObservedValue<int> maximumAtomTrajectorySize; 175 191 }; 176 192 -
src/UIElements/Qt4/QtMainWindow.cpp
rbdd1d0 rf2d5ce 120 120 shapeController = new QtShapeController(worldTab); 121 121 122 timeline = new QtTimeLine( this);122 timeline = new QtTimeLine(InstanceBoard, this); 123 123 124 124 infoBox = new QtInfoBox(InstanceBoard); -
src/UIElements/Views/Qt4/QtTimeLine.cpp
rbdd1d0 rf2d5ce 46 46 #include "WorldTime.hpp" 47 47 48 QtTimeLine::QtTimeLine(QWidget * _parent) : 48 #include "UIElements/Qt4/InstanceBoard/QtObservedInstanceBoard.hpp" 49 50 QtTimeLine::QtTimeLine(QtObservedInstanceBoard *_instanceBoard, QWidget * _parent) : 49 51 QWidget(_parent), 50 Observer("QtTimeLine"), 51 atomobserver_enlisted(false), 52 worldtime_enlisted(false), 52 instanceBoard(_instanceBoard), 53 53 SetWorldTime_called(false) 54 54 { … … 71 71 layout->addWidget(spinbox); 72 72 73 // sign on to observable74 WorldTime::getInstance().signOn(this, WorldTime::TimeChanged);75 worldtime_enlisted = true;76 AtomObserver::getInstance().signOn(this, AtomObservable::TrajectoryChanged);77 atomobserver_enlisted = true;78 79 73 // connect to QSlider's valueChanged() signal 80 74 bool result = connect(slider,SIGNAL(valueChanged(int)),this,SLOT(StepUpdate(int))); … … 82 76 if (!result) 83 77 ELOG(0, "Could not connect to QSlider::valueChanged."); 78 79 connect(instanceBoard, SIGNAL(WorldTimeChanged()), this, SLOT(WorldTimeChanged())); 80 connect(instanceBoard, SIGNAL(MaximumAtomTrajectoryChanged()), this, SLOT(MaximumAtomTrajectoryChanged())); 84 81 } 85 82 86 83 QtTimeLine::~QtTimeLine() 87 { 88 if (worldtime_enlisted) 89 WorldTime::getInstance().signOff(this, WorldTime::TimeChanged); 90 if (atomobserver_enlisted) 91 AtomObserver::getInstance().signOff(this, AtomObservable::TrajectoryChanged); 92 } 84 {} 93 85 94 86 void QtTimeLine::paintEvent(QPaintEvent * event) … … 99 91 } 100 92 101 void QtTimeLine::subjectKilled(Observable *publisher) 102 { 103 // as long as we are enlisted to only one channel, we have nothing to worry. 104 // Otherwise we should also signOn to global changes for subjectKilled() and 105 // sign off from the channels 106 if (static_cast<AtomObserver *>(publisher) == AtomObserver::getPointer()) { 107 atomobserver_enlisted = false; 108 } else if (static_cast<WorldTime *>(publisher) == WorldTime::getPointer()) { 109 worldtime_enlisted = false; 110 } 111 } 112 113 void QtTimeLine::update(Observable *publisher) 114 { 115 ELOG(0, "We are not enlisted for general updates."); 116 } 117 118 void QtTimeLine::recieveNotification(Observable *publisher, Notification_ptr notification) 93 void QtTimeLine::WorldTimeChanged() 119 94 { 120 95 boost::recursive_mutex::scoped_lock lock(refill_mutex); 121 96 122 if (static_cast<WorldTime *>(publisher) == WorldTime::getPointer()) {123 SetWorldTime_called = false;124 const int timestep = WorldTime::getTime();125 // check whether we are beyond maximum126 if (timestep > slider->maximum()) {127 slider->setMaximum(timestep);128 spinbox->setMaximum(timestep);129 }130 // set slider position to new time step131 slider->setValue( timestep );132 spinbox->setValue( timestep ); 133 } else 134 //if (static_cast<AtomObserver *>(publisher) == AtomObserver::getPointer())135 {136 // calculate max trajectory (need dynamic_cast due to virtual base)137 const atom *_atom = dynamic_cast<const atom *>(publisher); 138 const int MaxTrajectory = _atom->getTrajectorySize()-1;139 if (MaxTrajectory > slider->maximum()) {140 slider->setMaximum(MaxTrajectory);141 spinbox->setMaximum(MaxTrajectory);142 }97 SetWorldTime_called = false; 98 const int timestep = instanceBoard->getObservedWorldTime().get(); 99 // check whether we are beyond maximum 100 if (timestep > slider->maximum()) { 101 slider->setMaximum(timestep); 102 spinbox->setMaximum(timestep); 103 } 104 // set slider position to new time step 105 slider->setValue( timestep ); 106 spinbox->setValue( timestep ); 107 } 108 109 void QtTimeLine::MaximumAtomTrajectoryChanged() 110 { 111 boost::recursive_mutex::scoped_lock lock(refill_mutex); 112 113 // calculate max trajectory (need dynamic_cast due to virtual base) 114 const int MaxTrajectory = instanceBoard->getObservedMaximumAtomTrajectorySize().get(); 115 if (MaxTrajectory > slider->maximum()) { 116 slider->setMaximum(MaxTrajectory); 117 spinbox->setMaximum(MaxTrajectory); 143 118 } 144 119 } … … 149 124 150 125 if (!SetWorldTime_called) { 151 if ( WorldTime::getTime() != (unsigned int)position) {126 if (instanceBoard->getObservedWorldTime().get() != (unsigned int)position) { 152 127 SetWorldTime_called = true; 153 128 MoleCuilder::WorldSetWorldTime(position); -
src/UIElements/Views/Qt4/QtTimeLine.hpp
rbdd1d0 rf2d5ce 20 20 #include <boost/thread/recursive_mutex.hpp> 21 21 22 #include "CodePatterns/Observer/Observer.hpp" 22 class QtObservedInstanceBoard; 23 23 24 class QtTimeLine : public QWidget , public Observer24 class QtTimeLine : public QWidget 25 25 { 26 26 Q_OBJECT 27 27 28 28 public: 29 QtTimeLine(Q Widget * _parent=0);29 QtTimeLine(QtObservedInstanceBoard *_instanceBoard, QWidget * _parent=0); 30 30 virtual ~QtTimeLine(); 31 31 32 32 protected: 33 virtual void update(Observable *publisher);34 virtual void recieveNotification(Observable *publisher, Notification_ptr notification);35 virtual void subjectKilled(Observable *publisher);36 33 virtual void paintEvent(QPaintEvent * event); 37 34 … … 39 36 void StepUpdate(int position); 40 37 38 public slots: 39 void WorldTimeChanged(); 40 void MaximumAtomTrajectoryChanged(); 41 41 42 private: 42 //!> whether AtomObserver knows about us or not43 bool atomobserver_enlisted;44 //!> whether WorldTime knows about us or not45 bool worldtime_enlisted;46 47 43 QSlider *slider; 48 44 QSpinBox *spinbox; 49 45 QHBoxLayout *layout; 46 47 //!> instance board with observed world time 48 QtObservedInstanceBoard *instanceBoard; 50 49 51 50 //!> states whether we are expecting a notification from the worldtime
Note:
See TracChangeset
for help on using the changeset viewer.
