Ignore:
Timestamp:
Dec 26, 2025, 9:40:14 PM (2 days ago)
Author:
Frederik Heber <frederik.heber@…>
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)
Message:

QtTimeLine no longers queries WorldTime directly.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/UIElements/Views/Qt4/QtTimeLine.cpp

    rbdd1d0 rf2d5ce  
    4646#include "WorldTime.hpp"
    4747
    48 QtTimeLine::QtTimeLine(QWidget * _parent) :
     48#include "UIElements/Qt4/InstanceBoard/QtObservedInstanceBoard.hpp"
     49
     50QtTimeLine::QtTimeLine(QtObservedInstanceBoard *_instanceBoard, QWidget * _parent) :
    4951    QWidget(_parent),
    50     Observer("QtTimeLine"),
    51     atomobserver_enlisted(false),
    52     worldtime_enlisted(false),
     52    instanceBoard(_instanceBoard),
    5353    SetWorldTime_called(false)
    5454{
     
    7171  layout->addWidget(spinbox);
    7272
    73   // sign on to observable
    74   WorldTime::getInstance().signOn(this, WorldTime::TimeChanged);
    75   worldtime_enlisted = true;
    76   AtomObserver::getInstance().signOn(this, AtomObservable::TrajectoryChanged);
    77   atomobserver_enlisted = true;
    78 
    7973  // connect to QSlider's valueChanged() signal
    8074  bool result = connect(slider,SIGNAL(valueChanged(int)),this,SLOT(StepUpdate(int)));
     
    8276  if (!result)
    8377    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()));
    8481}
    8582
    8683QtTimeLine::~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{}
    9385
    9486void QtTimeLine::paintEvent(QPaintEvent * event)
     
    9991}
    10092
    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)
     93void QtTimeLine::WorldTimeChanged()
    11994{
    12095  boost::recursive_mutex::scoped_lock lock(refill_mutex);
    12196
    122   if (static_cast<WorldTime *>(publisher) == WorldTime::getPointer()) {
    123     SetWorldTime_called = false;
    124     const int timestep = WorldTime::getTime();
    125     // check whether we are beyond maximum
    126     if (timestep > slider->maximum()) {
    127       slider->setMaximum(timestep);
    128       spinbox->setMaximum(timestep);
    129     }
    130     // set slider position to new time step
    131     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
     109void 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);
    143118  }
    144119}
     
    149124
    150125  if (!SetWorldTime_called) {
    151     if (WorldTime::getTime() != (unsigned int)position) {
     126    if (instanceBoard->getObservedWorldTime().get() != (unsigned int)position) {
    152127      SetWorldTime_called = true;
    153128      MoleCuilder::WorldSetWorldTime(position);
Note: See TracChangeset for help on using the changeset viewer.