Changeset f2d5ce


Ignore:
Timestamp:
Dec 26, 2025, 9:40:14 PM (38 hours 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.

Location:
src/UIElements
Files:
2 added
6 edited

Legend:

Unmodified
Added
Removed
  • src/UIElements/Makefile.am

    rbdd1d0 rf2d5ce  
    144144  UIElements/GlobalListOfParameterQueries.hpp \
    145145  UIElements/MainWindow.hpp \
     146  UIElements/Qt4/InstanceBoard/ObservedMaximumAtomTrajectorySize.hpp \
    146147  UIElements/Qt4/InstanceBoard/ObservedValue_types.hpp \
    147148  UIElements/Qt4/InstanceBoard/ObservedValuesContainer.hpp \
     
    150151
    151152QTUISOURCE = \
     153  UIElements/Qt4/InstanceBoard/ObservedMaximumAtomTrajectorySize.cpp \
    152154  UIElements/Qt4/InstanceBoard/QtObservedAtom.cpp \
    153155  UIElements/Qt4/InstanceBoard/QtObservedBond.cpp \
  • src/UIElements/Qt4/InstanceBoard/QtObservedInstanceBoard.cpp

    rbdd1d0 rf2d5ce  
    5151#include "Descriptors/MoleculeIdDescriptor.hpp"
    5252#include "molecule.hpp"
     53#include "UIElements/Qt4/InstanceBoard/ObservedMaximumAtomTrajectorySize.hpp"
    5354#include "UIElements/Qt4/InstanceBoard/ObservedValuesContainer_impl.hpp"
    5455#include "World.hpp"
     56#include "WorldTime.hpp"
     57
     58// static entities
     59const Observable::channels_t
     60WorldTimeChannels(1, WorldTime::TimeChanged);
     61
     62const Observable::channels_t
     63MaximumTrajectorySizeChannels(1, ObservedMaximumAtomTrajectorySize::MaximumChanged);
    5564
    5665QtObservedInstanceBoard::QtObservedInstanceBoard(QWidget * _parent) :
     
    5867  Observer("QtObservedInstanceBoard"),
    5968  WorldSignedOn(false),
     69  WorldTimeSignedOn(false),
     70  MaximumAtomTrajectorySizeSignedOn(false),
    6071  atomObservedValues(
    6172      "atom",
     
    6980      "molecule",
    7081      *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)
    7298{
    7399  qRegisterMetaType<ObservedValue_Index_t>("ObservedValue_Index_t");
     
    80106  World::getInstance().signOn(this, World::MoleculeInserted, GlobalObservableInfo::PriorityLevel(int(-10)));
    81107  WorldSignedOn = true;
     108  WorldTime::getInstance().signOn(this, WorldTime::TimeChanged);
     109  WorldTimeSignedOn = true;
     110  ObservedMaximumAtomTrajectorySize::getInstance().signOn(this, ObservedMaximumAtomTrajectorySize::MaximumChanged);
     111  MaximumAtomTrajectorySizeSignedOn = true;
    82112}
    83113
     
    87117    World::getInstance().signOff(this, World::AtomInserted);
    88118    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);
    89125  }
    90126  // sign off from all remaining molecules, bonds, and atoms
     
    121157      MoleculeSignedOn.erase(iter);
    122158    } 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      }
    125169    }
    126170  }
     
    217261      }
    218262      default:
    219         ASSERT(0, "QtObservedInstanceBoard::recieveNotification() - we cannot get here.");
     263        ASSERT(0, "QtObservedInstanceBoard::recieveNotification() - we cannot get here for Molecule.");
    220264        break;
    221265    }
     
    277321      }
    278322      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      }
    281359    }
    282360  } else {
     
    373451}
    374452
     453const ObservedValue<unsigned int>& QtObservedInstanceBoard::getObservedWorldTime()
     454{
     455  return worldTime;
     456}
     457
     458const ObservedValue<int>& QtObservedInstanceBoard::getObservedMaximumAtomTrajectorySize()
     459{
     460  return maximumAtomTrajectorySize;
     461}
     462
    375463void QtObservedInstanceBoard::markObservedAtomAsConnected(ObservedValue_Index_t _id)
    376464{
  • src/UIElements/Qt4/InstanceBoard/QtObservedInstanceBoard.hpp

    rbdd1d0 rf2d5ce  
    2525#include <boost/function.hpp>
    2626
     27#include "CodePatterns/ObservedValue.hpp"
    2728#include "CodePatterns/Observer/Observer.hpp"
    2829
     
    9495  QtObservedMolecule::ptr getObservedMolecule(const moleculeId_t _id);
    9596  QtObservedMolecule::ptr getObservedMolecule(ObservedValue_Index_t _id);
     97  const ObservedValue<unsigned int>& getObservedWorldTime();
     98  const ObservedValue<int>& getObservedMaximumAtomTrajectorySize();
    9699  void markObservedAtomAsConnected(ObservedValue_Index_t _id);
    97100  void markObservedAtomAsDisconnected(ObservedValue_Index_t _id);
     
    114117  void moleculeRemoved(ObservedValue_Index_t _molid);
    115118  void moleculeIndexChanged(const moleculeId_t _oldid, const moleculeId_t _newid);
     119  void WorldTimeChanged();
     120  void MaximumAtomTrajectoryChanged();
    116121
    117122private:
     
    124129  bool WorldSignedOn;
    125130
     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
    126137  typedef std::multiset<Observable *> SignedOn_t;
    127138  //!> map indicating to which atom we are currently signed on
     
    129140  //!> map indicating to which molecule we are currently signed on
    130141  SignedOn_t MoleculeSignedOn;
     142
    131143
    132144  //!> "templated typedef" for an id to index map.
     
    173185  //!> container with all ObservedValues for each molecule, associated by id
    174186  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;
    175191};
    176192
  • src/UIElements/Qt4/QtMainWindow.cpp

    rbdd1d0 rf2d5ce  
    120120  shapeController = new QtShapeController(worldTab);
    121121
    122   timeline = new QtTimeLine(this);
     122  timeline = new QtTimeLine(InstanceBoard, this);
    123123
    124124  infoBox = new QtInfoBox(InstanceBoard);
  • 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);
  • src/UIElements/Views/Qt4/QtTimeLine.hpp

    rbdd1d0 rf2d5ce  
    2020#include <boost/thread/recursive_mutex.hpp>
    2121
    22 #include "CodePatterns/Observer/Observer.hpp"
     22class QtObservedInstanceBoard;
    2323
    24 class QtTimeLine : public QWidget, public Observer
     24class QtTimeLine : public QWidget
    2525{
    2626  Q_OBJECT
    2727
    2828public:
    29   QtTimeLine(QWidget * _parent=0);
     29  QtTimeLine(QtObservedInstanceBoard *_instanceBoard, QWidget * _parent=0);
    3030  virtual ~QtTimeLine();
    3131
    3232protected:
    33   virtual void update(Observable *publisher);
    34   virtual void recieveNotification(Observable *publisher, Notification_ptr notification);
    35   virtual void subjectKilled(Observable *publisher);
    3633  virtual void paintEvent(QPaintEvent * event);
    3734
     
    3936  void StepUpdate(int position);
    4037
     38public slots:
     39  void WorldTimeChanged();
     40  void MaximumAtomTrajectoryChanged();
     41
    4142private:
    42   //!> whether AtomObserver knows about us or not
    43   bool atomobserver_enlisted;
    44   //!> whether WorldTime knows about us or not
    45   bool worldtime_enlisted;
    46 
    4743  QSlider *slider;
    4844  QSpinBox *spinbox;
    4945  QHBoxLayout *layout;
     46
     47  //!> instance board with observed world time
     48  QtObservedInstanceBoard *instanceBoard;
    5049
    5150  //!> states whether we are expecting a notification from the worldtime
Note: See TracChangeset for help on using the changeset viewer.