Changeset 273c8a for src/UIElements


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().
Location:
src/UIElements
Files:
4 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}
  • src/UIElements/Qt4/InstanceBoard/QtObservedAtom.hpp

    r7f185f9 r273c8a  
    136136  const Vector& getAtomPosition() const;
    137137
    138   /** Getter to atom's molecule index contained in \a ObservedValues.
    139    *
    140    * \return atom's molecule index
    141    */
    142   const moleculeId_t& getMoleculeIndex() const;
     138  /** Getter to the observed state of the associated molecule.
     139   *
     140   * \return const ref to observed state of molecule
     141   */
     142  const QtObservedMolecule* const getMoleculeRef() const;
    143143
    144144  /** Getter to atom's selected status.
     
    171171  static ListOfBonds_t updateBonds(const atom &_atom);
    172172  static atomicNumber_t updateElement(const atom &_atom);
    173   moleculeId_t updateMoleculeIndex(const atom &_atom);
     173  QtObservedMolecule* updateMoleculeRef(const atom &_atom);
    174174  static std::string updateName(const atom &_atom);
    175175  static Vector updatePosition(const atom &_atom);
     
    184184    //!> contains the current atom element
    185185    AtomElement,
    186     //!> contains the current atom's molecule index
    187     MoleculeIndex,
    188186    //!> contains the current atom position
    189187    AtomName,
     
    192190    //!> contains the current atom's selection status
    193191    AtomSelected,
     192    //!> contains the current atom's molecule index
     193    MoleculeRef,
    194194    //!> gives the size of the enumeration
    195195    MAX_ObservedTypes
     
    248248  static const Observable::channels_t AtomElementChannels;
    249249  //!> list of channels when molecule index needs to update
    250   static const Observable::channels_t MoleculeIndexChannels;
     250  static const Observable::channels_t MoleculeChangedChannels;
    251251  //!> list of channels when name needs to update
    252252  static const Observable::channels_t AtomNameChannels;
  • src/UIElements/Qt4/InstanceBoard/QtObservedBond.cpp

    r7f185f9 r273c8a  
    5252using namespace boost::assign;
    5353
    54 static const Observable::channels_t getAllObservedAtomChannels()
    55 {
    56   Observable::channels_t channels;
    57   channels +=
    58       AtomObservable::IndexChanged,
    59       AtomObservable::ElementChanged,
    60       AtomObservable::PositionChanged;
    61   return channels;
    62 }
    63 
    64 static const molecule * getMolecule(const bond::ptr _bond)
    65 {
    66   ASSERT( _bond->leftatom->getMolecule() == _bond->rightatom->getMolecule(),
    67       "getMolecule() - leftatom and rightatom belong to different molecules.");
    68   return _bond->leftatom->getMolecule();
    69 }
    70 
    71 static const molecule * const getMoleculeConst(const bond::ptr _bond)
    72 {
    73   ASSERT( _bond->leftatom->getMolecule() == _bond->rightatom->getMolecule(),
    74       "getMolecule() - leftatom and rightatom belong to different molecules.");
    75   return _bond->leftatom->getMolecule();
    76 }
    77 
    7854template <class T>
    7955Observable * const getObservable(const T * _ptr)
     
    8763  const QtObservedBond::ObservableCount_t returnlist =
    8864      boost::assign::list_of< QtObservedBond::ObservableCount_t::value_type >
    89             ( getObservable(_bond.get()), 1)
    90             ( getObservable(_bond->leftatom), getAllObservedAtomChannels().size())
    91             ( getObservable(_bond->rightatom), getAllObservedAtomChannels().size())
    92             ( getObservable(getMolecule(_bond)), 1);
     65            ( getObservable(_bond.get()), 1);
    9366  return returnlist;
    9467}
    95 
    9668
    9769// static entities
     
    388360const moleculeId_t QtObservedBond::getLeftMoleculeIndex() const
    389361{
    390   return leftatom->getMoleculeIndex();
     362  if (leftatom->getMoleculeRef() != NULL)
     363    return leftatom->getMoleculeRef()->getMolIndex();
     364  else
     365    return (moleculeId_t)-1;
    391366}
    392367
     
    408383const moleculeId_t QtObservedBond::getRightMoleculeIndex() const
    409384{
    410   return rightatom->getMoleculeIndex();
    411 }
     385  if (rightatom->getMoleculeRef() != NULL)
     386    return rightatom->getMoleculeRef()->getMolIndex();
     387  else
     388    return (moleculeId_t)-1;
     389}
  • src/UIElements/Views/Qt4/QtInfoBox.cpp

    r7f185f9 r273c8a  
    139139    connect(curAtom.get(), SIGNAL(atomRemoved()), this, SLOT(clearAtomTab()));
    140140
    141     const moleculeId_t molid = curAtom->getMoleculeIndex();
    142     if (molid != (moleculeId_t)-1) {
    143       QtObservedMolecule::ptr curMolecule = board->getObservedMolecule(molid);
     141    if (curAtom->getMoleculeRef() != NULL) {
     142      QtObservedMolecule::ptr curMolecule = curAtom->getMoleculeRef()->getRef();
    144143      if (curMolecule) {
    145144        page_mol = new QtMoleculeInfoPage(curMolecule, this);
Note: See TracChangeset for help on using the changeset viewer.