Ignore:
Timestamp:
Jun 27, 2014, 9:32:03 PM (11 years ago)
Author:
Frederik Heber <heber@…>
Branches:
Action_Thermostats, Add_AtomRandomPerturbation, Add_FitFragmentPartialChargesAction, Add_RotateAroundBondAction, Add_SelectAtomByNameAction, Added_ParseSaveFragmentResults, AddingActions_SaveParseParticleParameters, Adding_Graph_to_ChangeBondActions, Adding_MD_integration_tests, Adding_ParticleName_to_Atom, Adding_StructOpt_integration_tests, AtomFragments, Automaking_mpqc_open, AutomationFragmentation_failures, Candidate_v1.5.4, Candidate_v1.6.0, Candidate_v1.6.1, ChangeBugEmailaddress, ChangingTestPorts, ChemicalSpaceEvaluator, CombiningParticlePotentialParsing, Combining_Subpackages, Debian_Package_split, Debian_package_split_molecuildergui_only, Disabling_MemDebug, Docu_Python_wait, EmpiricalPotential_contain_HomologyGraph, EmpiricalPotential_contain_HomologyGraph_documentation, Enable_parallel_make_install, Enhance_userguide, Enhanced_StructuralOptimization, Enhanced_StructuralOptimization_continued, Example_ManyWaysToTranslateAtom, Exclude_Hydrogens_annealWithBondGraph, FitPartialCharges_GlobalError, Fix_BoundInBox_CenterInBox_MoleculeActions, Fix_ChargeSampling_PBC, Fix_ChronosMutex, Fix_FitPartialCharges, Fix_FitPotential_needs_atomicnumbers, Fix_ForceAnnealing, Fix_IndependentFragmentGrids, Fix_ParseParticles, Fix_ParseParticles_split_forward_backward_Actions, Fix_PopActions, Fix_QtFragmentList_sorted_selection, Fix_Restrictedkeyset_FragmentMolecule, Fix_StatusMsg, Fix_StepWorldTime_single_argument, Fix_Verbose_Codepatterns, Fix_fitting_potentials, Fixes, ForceAnnealing_goodresults, ForceAnnealing_oldresults, ForceAnnealing_tocheck, ForceAnnealing_with_BondGraph, ForceAnnealing_with_BondGraph_continued, ForceAnnealing_with_BondGraph_continued_betteresults, ForceAnnealing_with_BondGraph_contraction-expansion, FragmentAction_writes_AtomFragments, FragmentMolecule_checks_bonddegrees, GeometryObjects, Gui_Fixes, Gui_displays_atomic_force_velocity, ImplicitCharges, IndependentFragmentGrids, IndependentFragmentGrids_IndividualZeroInstances, IndependentFragmentGrids_IntegrationTest, IndependentFragmentGrids_Sole_NN_Calculation, JobMarket_RobustOnKillsSegFaults, JobMarket_StableWorkerPool, JobMarket_unresolvable_hostname_fix, MoreRobust_FragmentAutomation, ODR_violation_mpqc_open, PartialCharges_OrthogonalSummation, PdbParser_setsAtomName, PythonUI_with_named_parameters, QtGui_reactivate_TimeChanged_changes, Recreated_GuiChecks, Rewrite_FitPartialCharges, RotateToPrincipalAxisSystem_UndoRedo, SaturateAtoms_findBestMatching, SaturateAtoms_singleDegree, StoppableMakroAction, Subpackage_CodePatterns, Subpackage_JobMarket, Subpackage_LinearAlgebra, Subpackage_levmar, Subpackage_mpqc_open, Subpackage_vmg, Switchable_LogView, ThirdParty_MPQC_rebuilt_buildsystem, TrajectoryDependenant_MaxOrder, TremoloParser_IncreasedPrecision, TremoloParser_MultipleTimesteps, TremoloParser_setsAtomName, Ubuntu_1604_changes, stable
Children:
0b6b77
Parents:
26b4eb4
git-author:
Frederik Heber <heber@…> (06/19/14 11:02:54)
git-committer:
Frederik Heber <heber@…> (06/27/14 21:32:03)
Message:

Updated all UI's StatusIndicator classes to use ActionStatusList.

Location:
src/UIElements/Views/Qt4
Files:
2 edited

Legend:

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

    r26b4eb4 r378f2d5  
    3939#include <QtCore/QMetaType>
    4040#include <QtGui/QProgressBar>
     41#include <QtCore/QTimer>
    4142
    4243#include "QtStatusBar.hpp"
    4344
    4445#include "CodePatterns/MemDebug.hpp"
     46#include "CodePatterns/Observer/Notification.hpp"
    4547
    4648#include "World.hpp"
     49#include "Actions/ActionQueue.hpp"
     50#include "Actions/ActionStatusList.hpp"
    4751#include "Actions/Process.hpp"
    4852
     
    5761  moleculeCount(World::getInstance().numMolecules()),
    5862  parent(_parent),
    59   activeProcess("")
     63  activeProcess(""),
     64  StatusList(ActionQueue::getInstance().getStatusList()),
     65  StatusList_signedOn(false),
     66  timer(NULL),
     67  timer_interval(1500)
    6068{
    6169  World::getInstance().signOn(this);
    6270  Process::AddObserver(this);
     71  StatusList.signOn(this, ActionStatusList::StatusAdded);
     72  StatusList_signedOn = true;
    6373  statusLabel = new QLabel(this);
    6474  statusLabel->setFrameStyle(QFrame::NoFrame | QFrame::Plain);
     
    6676  redrawStatus();
    6777
     78  // connect the timer
     79  timer = new QTimer(this);
     80  timer->stop();
     81  connect(timer, SIGNAL(timeout()), this, SLOT(updateStatusMessage()));
     82
    6883  qRegisterMetaType<std::string>("std::string");
    6984  connect(
     
    7489QtStatusBar::~QtStatusBar()
    7590{
     91  // stop the timer if it is running
     92  if (timer->isActive())
     93    timer->stop();
     94
    7695  Process::RemoveObserver(this);
    7796  World::getInstance().signOff(this);
     97  if (StatusList_signedOn)
     98    StatusList.signOff(this, ActionStatusList::StatusAdded);
    7899}
    79100
    80101void QtStatusBar::update(Observable *subject){
    81   if (subject==World::getPointer()){
     102  if (subject == World::getPointer()){
    82103    atomCount = World::getInstance().numAtoms();
    83104    moleculeCount = World::getInstance().numMolecules();
    84     redrawStatus();
    85   }
    86   else {
     105    // redraw only if no timer updates messages
     106    if (!timer->isActive())
     107      redrawStatus();
     108  } else if (subject == &StatusList) {
     109    // we do not react to general updates from StatusList
     110  } else {
    87111    // we probably have some process
    88112    // as notify comes from ActionQueue's thread, we have to use signal/slots
     
    97121}
    98122
    99 void QtStatusBar::subjectKilled(Observable *subject){
     123void QtStatusBar::startTimer()
     124{
     125  timer->start(timer_interval);
     126}
     127
     128void QtStatusBar::stopTimer()
     129{
     130  timer->stop();
     131}
     132
     133void QtStatusBar::updateStatusMessage()
     134{
     135  if (StatusList.size() != 0) {
     136    // get oldest message from the StatusList
     137    const std::string message = StatusList.popFirstMessage();
     138    statusLabel->setText(QString(message.c_str()));
     139  } else {
     140    // just send the standard message
     141    redrawStatus();
     142    // and stop the timer
     143    stopTimer();
     144  }
     145}
     146
     147void QtStatusBar::recieveNotification(Observable *_publisher, Notification *_notification)
     148{
     149  if (_publisher == &StatusList) {
     150    switch(_notification->getChannelNo()) {
     151      case MoleCuilder::ActionStatusList::StatusAdded:
     152        if (!timer->isActive()) {
     153          // if timer is not already running
     154          updateStatusMessage();
     155          startTimer();
     156        }
     157        break;
     158    }
     159  }
     160}
     161
     162void QtStatusBar::subjectKilled(Observable *subject)
     163{
    100164  // Processes don't notify when they are killed
    101   atomCount = World::getInstance().numAtoms();
    102   moleculeCount = World::getInstance().numMolecules();
    103   World::getInstance().signOn(this);
    104   redrawStatus();
     165  if (subject == &StatusList) {
     166    // print all remaining messages
     167    while (StatusList.size() != 0)
     168      updateStatusMessage();
     169    // don't need to sign off, just note down that we are
     170    StatusList_signedOn = false;
     171  } else {
     172    atomCount = World::getInstance().numAtoms();
     173    moleculeCount = World::getInstance().numMolecules();
     174    World::getInstance().signOn(this);
     175    redrawStatus();
     176  }
    105177}
    106178
  • src/UIElements/Views/Qt4/QtStatusBar.hpp

    r26b4eb4 r378f2d5  
    2222#include "CodePatterns/Observer/Observer.hpp"
    2323
     24class QBoxLayout;
    2425class QLabel;
    2526class QProgressBar;
    26 class QBoxLayout;
     27class QTimer;
    2728
    2829namespace MoleCuilder {
     30  class ActionStatusList;
    2931  class Process;
    3032}
     
    4850  void update(Observable *subject);
    4951  void subjectKilled(Observable *subject);
     52  void recieveNotification(Observable *_publisher, Notification *_notification);
    5053
    5154private slots:
     
    5558      const unsigned int currentstep,
    5659      const bool StopStatus);
     60  void updateStatusMessage();
    5761
    5862signals:
     
    6670  void redrawStatus();
    6771
     72  void startTimer();
     73  void stopTimer();
     74
    6875  int atomCount;
    6976  int moleculeCount;
     
    7481  progressBars_t progressBars;
    7582  std::string activeProcess;
     83  //!> reference to the StatusList we are signed on
     84  MoleCuilder::ActionStatusList& StatusList;
     85  //!> indicates whether we are currently signed on
     86  bool StatusList_signedOn;
     87  //!> QTimer instance that causes regular updates of status messages
     88  QTimer *timer;
     89  //!> time interval in milliseconds
     90  const int timer_interval;
    7691};
    7792
Note: See TracChangeset for help on using the changeset viewer.