Changeset 6d4925 for src/UIElements


Ignore:
Timestamp:
Feb 14, 2016, 12:33:42 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:
9e9100
Parents:
42d7dc
git-author:
Frederik Heber <heber@…> (12/13/15 16:06:18)
git-committer:
Frederik Heber <heber@…> (02/14/16 12:33:42)
Message:

FIX: QtObservedInstanceBoard needs to allow delayed atomInserted from World.

  • we may get the notification from molecule before we get the insertion from the World. Hence, we store any ids obtained from molecule insertion if the set of the new atom's observed values have not been generated yet.
Location:
src/UIElements/Qt4/InstanceBoard
Files:
2 edited

Legend:

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

    r42d7dc r6d4925  
    218218          _atom->signOn(this, atom::IndexChanged);
    219219          AtomSignedOn.insert( static_cast<Observable *>(const_cast<atom *>(_atom)) );
     220          emit atomInserted(observedatom->getAtomMoleculeIndex(), observedatom->getAtomIndex());
    220221        } else {
    221222          ELOG(1, "QtObservedInstanceBoard got AtomInserted for unknown atom id " << _id);
     
    297298        const atomId_t newatomId = dynamic_cast<atom *>(publisher)->getId();
    298299        LOG(3, "DEBUG: InformationBoard got IndexChanged from atom " << oldatomId << " to " << newatomId);
     300#ifndef NDEBUG
     301        bool status =
     302#endif
    299303        atomObservedValues.changeIdentifier(oldatomId, newatomId);
     304        ASSERT( status,
     305            "QtObservedInstanceBoard::recieveNotification() - cannot change atom's id "
     306            +toString(oldatomId)+" "+toString(newatomId)+" in atomObservedValues.");
     307        // changed insertion delayed
     308        atomInsertionDelayed_t::iterator iter = atomInsertionDelayed.find(oldatomId);
     309        if (iter != atomInsertionDelayed.end()) {
     310          const moleculeId_t molid = iter->second;
     311          atomInsertionDelayed.erase(iter);
     312#ifndef NDEBUG
     313          std::pair<atomInsertionDelayed_t::iterator, bool> inserter =
     314#endif
     315          atomInsertionDelayed.insert( std::make_pair(newatomId, molid) );
     316          ASSERT( inserter.second,
     317              "QtObservedInstanceBoard::recieveNotification() - id "
     318              +toString(newatomId)+" already present in atomInsertionDelayed.");
     319        }
    300320        // no need update SignedOn, ref does not change
    301321        emit atomIndexChanged(oldatomId, newatomId);
  • src/UIElements/Qt4/InstanceBoard/QtObservedInstanceBoard.hpp

    r42d7dc r6d4925  
    149149  moleculeId_t lastremovedmolecule;
    150150
     151  //!> map keyed to atomId_t for atoms who are associated to a molecule but not yet inserted
     152  typedef std::map<atomId_t, moleculeId_t> atomInsertionDelayed_t;
     153  //!> map to contain atoms whose insertion is known from the molecule but not yet from the World
     154  atomInsertionDelayed_t atomInsertionDelayed;
    151155};
    152156
Note: See TracChangeset for help on using the changeset viewer.