Ignore:
Timestamp:
Apr 20, 2016, 11:07:47 PM (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:
bd6768
Parents:
7f185f9
git-author:
Frederik Heber <heber@…> (04/12/16 11:29:56)
git-committer:
Frederik Heber <heber@…> (04/20/16 23:07:47)
Message:

QtObservedAtom only offers direct access to associated const QtObservedMolecule ref.

  • the molecule index is not part of the atom's state, hence cannot be directly observed. The only thing we observe is the association to the molecule. For this a O/O-signal is available and we may actively change the ref when getting this signal without breaking anything as it occurs in the same thread, hence the board can be safely accessed.
  • QtObservedBond now needs to access mol index through the molecule ref.
  • QtInfoBox may now conveniently access atom'smol ref directly.
  • FIX: Removed static QtObservedBond::getMolecule().
File:
1 edited

Legend:

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

    r7f185f9 r273c8a  
    8282QtObservedAtom::AtomElementChannels(1, AtomObservable::ElementChanged);
    8383const Observable::channels_t
    84 QtObservedAtom::MoleculeIndexChannels(1, AtomObservable::MoleculeChanged);
     84QtObservedAtom::MoleculeChangedChannels(1, AtomObservable::MoleculeChanged);
    8585const Observable::channels_t
    8686QtObservedAtom::AtomNameChannels(1, AtomObservable::NameChanged);
     
    120120  boost::any_cast<ObservedValue_wCallback<ListOfBonds_t, ObservedValue_Index_t> *>(ObservedValues[AtomBonds])->noteCallBackIsGone();
    121121  boost::any_cast<ObservedValue_wCallback<atomicNumber_t, ObservedValue_Index_t> *>(ObservedValues[AtomElement])->noteCallBackIsGone();
    122   boost::any_cast<ObservedValue_wCallback<QtObservedMolecule*, ObservedValue_Index_t> *>(ObservedValues[MoleculeIndex])->noteCallBackIsGone();
     122  boost::any_cast<ObservedValue_wCallback<QtObservedMolecule*, ObservedValue_Index_t> *>(ObservedValues[MoleculeRef])->noteCallBackIsGone();
    123123  boost::any_cast<ObservedValue_wCallback<std::string, ObservedValue_Index_t> *>(ObservedValues[AtomName])->noteCallBackIsGone();
    124124  boost::any_cast<ObservedValue_wCallback<Vector, ObservedValue_Index_t> *>(ObservedValues[AtomPosition])->noteCallBackIsGone();
     
    178178inline
    179179#endif
    180 moleculeId_t QtObservedAtom::updateMoleculeIndex(
     180QtObservedMolecule* QtObservedAtom::updateMoleculeRef(
    181181    const atom &_atom)
    182182{
    183183  if (_atom.getMolecule() != NULL) {
    184184    const moleculeId_t molid = _atom.getMolecule()->getId();
    185     return molid;
     185    const QtObservedMolecule::ptr mol = board.getObservedMolecule(molid);
     186    ASSERT(mol,
     187        "QtObservedAtom::updateMoleculeRef() - could not update the ref, "
     188        +toString(molid)+" unknown to Instance board?");
     189    return mol.get();
    186190  } else {
    187     return (moleculeId_t)-1;
     191    return (QtObservedMolecule*)NULL;
    188192  }
    189193}
     
    340344  const boost::function<atomicNumber_t ()> AtomElementUpdater(
    341345      boost::bind(&QtObservedAtom::updateElement, boost::cref(*_atomref)));
    342   const boost::function<moleculeId_t ()> MoleculeIndexUpdater(
    343       boost::bind(&QtObservedAtom::updateMoleculeIndex, this, boost::cref(*_atomref)));
    344346  const boost::function<std::string ()> AtomNameUpdater(
    345347      boost::bind(&QtObservedAtom::updateName, boost::cref(*_atomref)));
     
    348350  const boost::function<bool ()> AtomSelectedUpdater(
    349351      boost::bind(&QtObservedAtom::updateSelected, boost::cref(*_atomref)));
     352  const boost::function<QtObservedMolecule* ()> MoleculeRefUpdater(
     353      boost::bind(&QtObservedAtom::updateMoleculeRef, this, boost::cref(*_atomref)));
    350354
    351355  _ObservedValues[AtomIndex] = new ObservedValue_wCallback<atomId_t, ObservedValue_Index_t>(
     
    370374      AtomElementChannels,
    371375      _subjectKilled);
    372   _ObservedValues[MoleculeIndex] = new ObservedValue_wCallback<moleculeId_t, ObservedValue_Index_t>(
    373       _atomref,
    374       MoleculeIndexUpdater,
    375       "AtomMoleculeIndex"+toString(_id),
    376       MoleculeIndexUpdater(),
    377       MoleculeIndexChannels,
    378       _subjectKilled);
    379376  _ObservedValues[AtomName] = new ObservedValue_wCallback<std::string, ObservedValue_Index_t>(
    380377      _atomref,
     
    398395      AtomSelectedChannels,
    399396      _subjectKilled);
     397  _ObservedValues[MoleculeRef] = new ObservedValue_wCallback<QtObservedMolecule*, ObservedValue_Index_t>(
     398      _atomref,
     399      MoleculeRefUpdater,
     400      "AtomMoleculeIndex"+toString(_id),
     401      MoleculeRefUpdater(),
     402      MoleculeChangedChannels,
     403      _subjectKilled);
    400404}
    401405
     
    406410  delete boost::any_cast<ObservedValue_wCallback<ListOfBonds_t, ObservedValue_Index_t> *>(_ObservedValues[AtomBonds]);
    407411  delete boost::any_cast<ObservedValue_wCallback<atomicNumber_t, ObservedValue_Index_t> *>(_ObservedValues[AtomElement]);
    408   delete boost::any_cast<ObservedValue_wCallback<moleculeId_t, ObservedValue_Index_t> *>(_ObservedValues[MoleculeIndex]);
    409412  delete boost::any_cast<ObservedValue_wCallback<std::string, ObservedValue_Index_t> *>(_ObservedValues[AtomName]);
    410413  delete boost::any_cast<ObservedValue_wCallback<Vector, ObservedValue_Index_t> *>(_ObservedValues[AtomPosition]);
    411414  delete boost::any_cast<ObservedValue_wCallback<bool, ObservedValue_Index_t> *>(_ObservedValues[AtomSelected]);
     415  delete boost::any_cast<ObservedValue_wCallback<QtObservedMolecule*, ObservedValue_Index_t> *>(_ObservedValues[MoleculeRef]);
    412416  _ObservedValues.clear();
    413417}
     
    435439}
    436440
    437 const moleculeId_t& QtObservedAtom::getMoleculeIndex() const
    438 {
    439   return boost::any_cast<ObservedValue_wCallback<moleculeId_t, ObservedValue_Index_t> *>(ObservedValues[MoleculeIndex])->get();
    440 }
    441 
    442441const std::string& QtObservedAtom::getAtomName() const
    443442{
     
    454453  return boost::any_cast<ObservedValue_wCallback<bool, ObservedValue_Index_t> *>(ObservedValues[AtomSelected])->get();
    455454}
     455
     456const QtObservedMolecule* const QtObservedAtom::getMoleculeRef() const
     457{
     458  return boost::any_cast<ObservedValue_wCallback<QtObservedMolecule*, ObservedValue_Index_t> *>(ObservedValues[MoleculeRef])->get();
     459}
Note: See TracChangeset for help on using the changeset viewer.