Changeset 378f2d5 for src/UIElements


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
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • src/UIElements/CommandLineUI/CommandLineStatusIndicator.cpp

    r26b4eb4 r378f2d5  
    3434
    3535#include "CodePatterns/MemDebug.hpp"
     36#include "CodePatterns/Observer/Notification.hpp"
     37#include "CodePatterns/Observer/Observable.hpp"
    3638
    3739#include "CommandLineUI/CommandLineStatusIndicator.hpp"
     
    3941#include <iostream>
    4042
     43#include "Actions/ActionQueue.hpp"
     44#include "Actions/ActionStatusList.hpp"
    4145#include "Actions/Process.hpp"
    42 #include "CodePatterns/Observer/Observable.hpp"
    4346
    4447using namespace MoleCuilder;
    4548
    4649CommandLineStatusIndicator::CommandLineStatusIndicator() :
    47     Observer("CommandLineStatusIndicator")
     50    Observer("CommandLineStatusIndicator"),
     51    StatusList(ActionQueue::getInstance().getStatusList()),
     52    StatusList_signedOn(false)
    4853{
    4954  Process::AddObserver(this);
     55
     56  StatusList.signOn(this, ActionStatusList::StatusAdded);
     57  StatusList_signedOn = true;
    5058}
    5159
     
    5361{
    5462  Process::RemoveObserver(this);
     63
     64  if (StatusList_signedOn) {
     65    // print all remaining messages prior to exit
     66    while (StatusList.size() != 0)
     67      displayStatusMessage();
     68    StatusList.signOff(this, ActionStatusList::StatusAdded);
     69  }
    5570}
    5671
    5772void CommandLineStatusIndicator::update(Observable *subject){
    58   Process *proc;
    59   // we are only observing Processes
    60   if((proc=dynamic_cast<Process*>(subject))){
    61     // see what kind of progress we have to display
    62     if(proc->getMaxSteps()>0){
    63       if(!proc->doesStop()){
    64         std::cout << "Busy (" << proc->getName() << ") ";
    65         // we can show a percentage done
    66         std::cout << (int)proc->getDoneRatio() << "% done" << std::endl;
     73  if (subject == &StatusList) {
     74    // we do not react to general updates from StatusList
     75  } else {
     76    Process *proc;
     77    // we are only observing Processes
     78    if((proc=dynamic_cast<Process*>(subject))){
     79      // see what kind of progress we have to display
     80      if(proc->getMaxSteps()>0){
     81        if(!proc->doesStop()){
     82          std::cout << "Busy (" << proc->getName() << ") ";
     83          // we can show a percentage done
     84          std::cout << (int)proc->getDoneRatio() << "% done" << std::endl;
     85        }
    6786      }
    68     }
    69     else{
    70       // we only show some kind of busy animation
    71       if(proc->doesStart()){
    72         std::cout << "Busy (" << proc->getName() << ")";
    73       }
    74       if(!proc->doesStop()){
    75         std::cout << ".";
    76       }
    77       else {
    78         std::cout << std::endl;
     87      else{
     88        // we only show some kind of busy animation
     89        if(proc->doesStart()){
     90          std::cout << "Busy (" << proc->getName() << ")";
     91        }
     92        if(!proc->doesStop()){
     93          std::cout << ".";
     94        }
     95        else {
     96          std::cout << std::endl;
     97        }
    7998      }
    8099    }
     
    82101}
    83102
    84 void CommandLineStatusIndicator::subjectKilled(Observable *subject){
    85 
     103void CommandLineStatusIndicator::subjectKilled(Observable *subject)
     104{
     105  if (subject == &StatusList) {
     106    // print all remaining messages
     107    while (StatusList.size() != 0)
     108      displayStatusMessage();
     109    // don't need to sign off, just note down that we are
     110    StatusList_signedOn = false;
     111  }
    86112}
    87113
     114void CommandLineStatusIndicator::displayStatusMessage() const
     115{
     116  const std::string message = StatusList.popFirstMessage();
     117  std::cout << message << std::endl;
     118}
     119
     120void CommandLineStatusIndicator::recieveNotification(Observable *_publisher, Notification *_notification)
     121{
     122  if (_publisher == &StatusList) {
     123    switch(_notification->getChannelNo()) {
     124      case ActionStatusList::StatusAdded:
     125        displayStatusMessage();
     126        break;
     127    }
     128  }
     129}
     130
  • src/UIElements/CommandLineUI/CommandLineStatusIndicator.hpp

    r26b4eb4 r378f2d5  
    1717#include "CodePatterns/Observer/Observer.hpp"
    1818
     19namespace MoleCuilder {
     20  class ActionStatusList;
     21}
     22
    1923class Observable;
    2024
     
    2731  void update(Observable *subject);
    2832  void subjectKilled(Observable *subject);
     33  void recieveNotification(Observable *_publisher, Notification *_notification);
    2934
    3035private:
     36  void displayStatusMessage() const;
    3137
     38private:
     39  //!> reference to the StatusList we are signed on
     40  MoleCuilder::ActionStatusList& StatusList;
     41  //!> indicates whether we are currently signed on
     42  bool StatusList_signedOn;
    3243};
    3344
  • src/UIElements/TextUI/TextStatusIndicator.cpp

    r26b4eb4 r378f2d5  
    3434
    3535#include "CodePatterns/MemDebug.hpp"
     36#include "CodePatterns/Observer/Notification.hpp"
    3637
    3738#include "TextUI/TextStatusIndicator.hpp"
     
    3940#include <iostream>
    4041
     42#include "Actions/ActionQueue.hpp"
     43#include "Actions/ActionStatusList.hpp"
    4144#include "Actions/Process.hpp"
    4245
     
    4447
    4548TextStatusIndicator::TextStatusIndicator() :
    46   Observer("TextStatusIndicator")
     49  Observer("TextStatusIndicator"),
     50  StatusList(ActionQueue::getInstance().getStatusList()),
     51  StatusList_signedOn(false)
    4752{
    4853  Process::AddObserver(this);
     54
     55  StatusList.signOn(this, ActionStatusList::StatusAdded);
     56  StatusList_signedOn = true;
    4957}
    5058
     
    5260{
    5361  Process::RemoveObserver(this);
     62
     63  if (StatusList_signedOn)
     64    StatusList.signOff(this, ActionStatusList::StatusAdded);
    5465}
    5566
    5667void TextStatusIndicator::update(Observable *subject){
    57   Process *proc;
    58   // we are only observing Processes
    59   if((proc=dynamic_cast<Process*>(subject))){
    60     // see what kind of progress we have to display
    61     if(proc->getMaxSteps()>0){
    62       if(!proc->doesStop()){
    63         std::cout << "Busy (" << proc->getName() << ") ";
    64         // we can show a percentage done
    65         std::cout << (int)proc->getDoneRatio() << "% done" << std::endl;
     68  if (subject == &StatusList) {
     69    // we do not react to general updates from StatusList
     70  } else {
     71    Process *proc;
     72    // we are otherwise only observing Processes
     73    if((proc=dynamic_cast<Process*>(subject))){
     74      // see what kind of progress we have to display
     75      if(proc->getMaxSteps()>0){
     76        if(!proc->doesStop()){
     77          std::cout << "Busy (" << proc->getName() << ") ";
     78          // we can show a percentage done
     79          std::cout << (int)proc->getDoneRatio() << "% done" << std::endl;
     80        }
    6681      }
    67     }
    68     else{
    69       // we only show some kind of busy animation
    70       if(proc->doesStart()){
    71         std::cout << "Busy (" << proc->getName() << ")";
    72       }
    73       if(!proc->doesStop()){
    74         std::cout << ".";
    75       }
    76       else {
    77         std::cout << std::endl;
     82      else{
     83        // we only show some kind of busy animation
     84        if(proc->doesStart()){
     85          std::cout << "Busy (" << proc->getName() << ")";
     86        }
     87        if(!proc->doesStop()){
     88          std::cout << ".";
     89        }
     90        else {
     91          std::cout << std::endl;
     92        }
    7893      }
    7994    }
     
    8196}
    8297
    83 void TextStatusIndicator::subjectKilled(Observable *subject){
    84 
     98void TextStatusIndicator::subjectKilled(Observable *subject)
     99{
     100  if (subject == &StatusList) {
     101    // print all remaining messages
     102    while (StatusList.size() != 0)
     103      displayStatusMessage();
     104    // don't need to sign off, just note down that we are
     105    StatusList_signedOn = false;
     106  }
    85107}
    86108
     109void TextStatusIndicator::displayStatusMessage() const
     110{
     111  const std::string message = StatusList.popFirstMessage();
     112  std::cout << message << std::endl;
     113}
     114
     115void TextStatusIndicator::recieveNotification(Observable *_publisher, Notification *_notification)
     116{
     117  if (_publisher == &StatusList) {
     118    switch(_notification->getChannelNo()) {
     119      case MoleCuilder::ActionStatusList::StatusAdded:
     120        // if timer is not already running
     121        displayStatusMessage();
     122        break;
     123    }
     124  }
     125}
  • src/UIElements/TextUI/TextStatusIndicator.hpp

    r26b4eb4 r378f2d5  
    1717#include "CodePatterns/Observer/Observer.hpp"
    1818
     19namespace MoleCuilder {
     20  class ActionStatusList;
     21}
     22
     23
    1924class TextStatusIndicator : public Observer
    2025{
     
    2530  void update(Observable *subject);
    2631  void subjectKilled(Observable *subject);
     32  void recieveNotification(Observable *_publisher, Notification *_notification);
    2733
    2834private:
     35  void displayStatusMessage() const;
    2936
     37private:
     38  //!> reference to the StatusList we are signed on
     39  MoleCuilder::ActionStatusList& StatusList;
     40  //!> indicates whether we are currently signed on
     41  bool StatusList_signedOn;
    3042};
    3143
  • 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.