Changeset 1187c5 for src/UIElements


Ignore:
Timestamp:
Feb 26, 2016, 9:54:40 AM (9 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:
4a187d
Parents:
640cbd
git-author:
Frederik Heber <heber@…> (02/14/16 18:49:24)
git-committer:
Frederik Heber <heber@…> (02/26/16 09:54:40)
Message:

FIX: QtObservedAtom's AtomMoleculeIndex was not informed of molecule index changes.

  • hence, we return the QtObservedMolecule of the molecule to which the atom is associated. And this reference is updated whenever the associated molecule changes.
  • getAtomMoleculeIndex() -> getAtomMolecule().
  • signal renamed moleculeIndexChanged -> moleculeChanged.
Location:
src/UIElements
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • src/UIElements/Qt4/InstanceBoard/QtObservedAtom.cpp

    r640cbd r1187c5  
    8282QtObservedAtom::AtomElementChannels(1, AtomObservable::ElementChanged);
    8383const Observable::channels_t
    84 QtObservedAtom::AtomMoleculeIndexChannels(1, AtomObservable::MoleculeChanged);
     84QtObservedAtom::AtomMoleculeChannels(1, AtomObservable::MoleculeChanged);
    8585const Observable::channels_t
    8686QtObservedAtom::AtomNameChannels(1, AtomObservable::NameChanged);
     
    120120  boost::any_cast<ObservedValue_wCallback<ListOfBonds_t, atomId_t> *>(ObservedValues[AtomBonds])->noteCallBackIsGone();
    121121  boost::any_cast<ObservedValue_wCallback<atomicNumber_t, atomId_t> *>(ObservedValues[AtomElement])->noteCallBackIsGone();
    122   boost::any_cast<ObservedValue_wCallback<moleculeId_t, atomId_t> *>(ObservedValues[AtomMoleculeIndex])->noteCallBackIsGone();
     122  boost::any_cast<ObservedValue_wCallback<QtObservedMolecule*, atomId_t> *>(ObservedValues[AtomMolecule])->noteCallBackIsGone();
    123123  boost::any_cast<ObservedValue_wCallback<std::string, atomId_t> *>(ObservedValues[AtomName])->noteCallBackIsGone();
    124124  boost::any_cast<ObservedValue_wCallback<Vector, atomId_t> *>(ObservedValues[AtomPosition])->noteCallBackIsGone();
     
    175175}
    176176
    177 moleculeId_t QtObservedAtom::updateMoleculeIndex(
     177QtObservedMolecule* QtObservedAtom::updateMoleculeIndex(
    178178    const boost::function<const atomId_t ()> &_getAtomIndex)
    179179{
    180180  const atom * const _atom = getAtomConst(_getAtomIndex());
    181181  if ((_atom != NULL) && (_atom->getMolecule() != NULL)) {
    182     return _atom->getMolecule()->getId();
     182    const moleculeId_t molid = _atom->getMolecule()->getId();
     183      QtObservedMolecule* mol = board.getObservedMolecule(molid).get();
     184      if (mol != NULL)
     185        return mol;
     186      else
     187        return (QtObservedMolecule*)NULL;
    183188  } else {
    184     return (moleculeId_t)0;
     189    return (QtObservedMolecule*)NULL;
    185190  }
    186191}
     
    279284      break;
    280285    case AtomObservable::MoleculeChanged:
    281       emit moleculeindexChanged();
     286      emit moleculeChanged();
    282287      break;
    283288    case AtomObservable::NameChanged:
     
    367372  const boost::function<atomicNumber_t ()> AtomElementUpdater(
    368373      boost::bind(&QtObservedAtom::updateElement, AtomIndexGetter));
    369   const boost::function<moleculeId_t ()> AtomMoleculeIndexUpdater(
    370       boost::bind(&QtObservedAtom::updateMoleculeIndex, AtomIndexGetter));
     374  const boost::function<QtObservedMolecule* ()> AtomMoleculeUpdater(
     375      boost::bind(&QtObservedAtom::updateMoleculeIndex, this, AtomIndexGetter));
    371376  const boost::function<std::string ()> AtomNameUpdater(
    372377      boost::bind(&QtObservedAtom::updateName, AtomIndexGetter));
     
    392397      _subjectKilled,
    393398      AtomIndexGetter);
    394   _ObservedValues[AtomMoleculeIndex] = new ObservedValue_wCallback<moleculeId_t, atomId_t>(
    395       _atomref,
    396       AtomMoleculeIndexUpdater,
    397       "AtomMoleculeIndex"+toString(_id),
    398       AtomMoleculeIndexUpdater(),
    399       AtomMoleculeIndexChannels,
     399  _ObservedValues[AtomMolecule] = new ObservedValue_wCallback<QtObservedMolecule*, atomId_t>(
     400      _atomref,
     401      AtomMoleculeUpdater,
     402      "AtomMolecule"+toString(_id),
     403      AtomMoleculeUpdater(),
     404      AtomMoleculeChannels,
    400405      _subjectKilled,
    401406      AtomIndexGetter);
     
    432437  delete boost::any_cast<ObservedValue_wCallback<ListOfBonds_t, atomId_t> *>(_ObservedValues[AtomBonds]);
    433438  delete boost::any_cast<ObservedValue_wCallback<atomicNumber_t, atomId_t> *>(_ObservedValues[AtomElement]);
    434   delete boost::any_cast<ObservedValue_wCallback<moleculeId_t, atomId_t> *>(_ObservedValues[AtomMoleculeIndex]);
     439  delete boost::any_cast<ObservedValue_wCallback<QtObservedMolecule*, atomId_t> *>(_ObservedValues[AtomMolecule]);
    435440  delete boost::any_cast<ObservedValue_wCallback<std::string, atomId_t> *>(_ObservedValues[AtomName]);
    436441  delete boost::any_cast<ObservedValue_wCallback<Vector, atomId_t> *>(_ObservedValues[AtomPosition]);
     
    454459}
    455460
    456 const moleculeId_t& QtObservedAtom::getAtomMoleculeIndex() const
    457 {
    458   return boost::any_cast<ObservedValue_wCallback<moleculeId_t, atomId_t> *>(ObservedValues[AtomMoleculeIndex])->get();
     461QtObservedMolecule* const QtObservedAtom::getAtomMolecule() const
     462{
     463  return boost::any_cast<ObservedValue_wCallback<QtObservedMolecule*, atomId_t> *>(ObservedValues[AtomMolecule])->get();
    459464}
    460465
  • src/UIElements/Qt4/InstanceBoard/QtObservedAtom.hpp

    r640cbd r1187c5  
    3131class atom;
    3232class QtObservedInstanceBoard;
     33class QtObservedMolecule;
    3334
    3435/** This instance is the ObservedValue representation of a World's atom.
     
    122123   * \return atom's molecule index
    123124   */
    124   const moleculeId_t& getAtomMoleculeIndex() const;
     125  QtObservedMolecule* const getAtomMolecule() const;
    125126
    126127  /** Getter to atom's selected status.
     
    134135  void bondsChanged();
    135136  void elementChanged();
    136   void moleculeindexChanged();
     137  void moleculeChanged();
    137138  void nameChanged();
    138139  void positionChanged();
     
    155156  static atomicNumber_t updateElement(
    156157      const boost::function<const atomId_t ()> &_getAtomIndex);
    157   static moleculeId_t updateMoleculeIndex(
     158  QtObservedMolecule* updateMoleculeIndex(
    158159      const boost::function<const atomId_t ()> &_getAtomIndex);
    159160  static std::string updateName(
     
    173174    AtomElement,
    174175    //!> contains the current atom's molecule index
    175     AtomMoleculeIndex,
     176    AtomMolecule,
    176177    //!> contains the current atom position
    177178    AtomName,
     
    235236  static const Observable::channels_t AtomElementChannels;
    236237  //!> list of channels when molecule index needs to update
    237   static const Observable::channels_t AtomMoleculeIndexChannels;
     238  static const Observable::channels_t AtomMoleculeChannels;
    238239  //!> list of channels when name needs to update
    239240  static const Observable::channels_t AtomNameChannels;
  • src/UIElements/Views/Qt4/Qt3D/GLWorldScene.cpp

    r640cbd r1187c5  
    197197{
    198198  const atomId_t atomid = _atom->getAtomIndex();
    199   const atomId_t atommolid = _atom->getAtomMoleculeIndex();
    200   const atomId_t molid = _mol->getMolIndex();
    201   ASSERT( molid == atommolid,
    202       "GLWorldScene::moleculesAtomInserted() - atom "+toString(atomid)+" claims to belong to mol "
    203        +toString(atommolid)+" but signal came from QtObservedMolecule with id "
    204        +toString(molid)+".");
     199  QtObservedMolecule* const atommol = _atom->getAtomMolecule();
     200  // this ASSERT cannot work: The same molecule may get reassigned to a different
     201  // molecule, when e.g. the time step changes (which triggers an update-molecules).
     202  // The GUI is slow and may lack behind and thus get  to execute the event
     203  // moleculeAtomInserted when the change has been already been done.
     204//  ASSERT( (atommol == NULL) || (_mol == atommol),
     205//      "GLWorldScene::moleculesAtomInserted() - atom "+toString(atomid)
     206//      +" claims to belong to QtObservedMolecule "+toString(atommol)
     207//      +" but signal came from QtObservedMolecule "+toString(_mol)+".");
    205208  LOG(3, "INFO: GLWorldScene: Received signal atomInserted for atom "+toString(atomid)+".");
     209  const moleculeId_t molid = _mol->getMolIndex();
    206210
    207211  // check of molecule is already present
  • src/UIElements/Views/Qt4/QtInfoBox.cpp

    r640cbd r1187c5  
    139139    connect(curAtom.get(), SIGNAL(atomRemoved()), this, SLOT(clearAtomTab()));
    140140
    141     const moleculeId_t molid = curAtom->getAtomMoleculeIndex();
     141    QtObservedMolecule * const mol = curAtom->getAtomMolecule();
     142    const moleculeId_t molid = mol->getMolIndex();
    142143    if (molid != (moleculeId_t)-1) {
    143144      QtObservedMolecule::ptr curMolecule = board->getObservedMolecule(molid);
     145      ASSERT( mol == curMolecule.get(),
     146          "QtInfoBox::showAtom() - mol "+toString(mol)
     147          +" obtained from atom does not match mol "+toString(curMolecule.get())
     148          +" obtained via id "+toString(molid));
    144149      if (curMolecule) {
    145150        page_mol = new QtMoleculeInfoPage(curMolecule, this);
Note: See TracChangeset for help on using the changeset viewer.