Ignore:
Timestamp:
Jul 25, 2015, 1:02:11 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:
bcf056
Parents:
92df04
git-author:
Frederik Heber <heber@…> (06/17/15 23:41:07)
git-committer:
Frederik Heber <heber@…> (07/25/15 13:02:11)
Message:

FIX: QtElementList now uses new updateElement().

  • old refill() polls complete list of atoms of specific type in the moment an atom is destroyed ... now we only get informed about newly created atoms (safe) and changing elements (also safe).
Location:
src/UIElements/Views/Qt4
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • src/UIElements/Views/Qt4/QtElementList.cpp

    r92df04 r9fb213  
    6767
    6868        dirty = true;
    69         refill();
    7069
    7170        AtomObserver::getInstance().signOn(this, atom::ElementChanged);
    7271
    7372  connect(this,SIGNAL(itemSelectionChanged()),this,SLOT(rowSelected()));
    74   connect(this,SIGNAL(needsRefill()),this,SLOT(refill()), Qt::QueuedConnection);
     73  connect(this,SIGNAL(needsRefill(const atomId_t)),this,SLOT(refill(const atomId_t)), Qt::QueuedConnection);
    7574//  connect(this,SIGNAL(changed()),this,SLOT(update()));
     75
     76//  emit needsRefill();
    7677}
    7778
     
    9394    dirty = true;
    9495
    95     refill();
     96    emit needsRefill(dynamic_cast<atom *>(publisher)->getId());
    9697  } else
    9798    ASSERT(0, "QtElementList::recieveNotification() - we are not enlisted to any other instance's channel.");
     
    103104  // incompatible with the current refill scheme
    104105  AtomElementMap_t::iterator iter = AtomElementMap.find(_atom.getId());
     106  if (iter == AtomElementMap.end()) {
     107    AtomElementMap.insert( std::make_pair(_atom.getId(), -1));
     108    iter = AtomElementMap.find(_atom.getId());
     109  }
    105110  const atomicNumber_t oldelement = iter->second;
    106111  const atomicNumber_t newelement = _atom.getElementNo();
    107112  iter->second = newelement;
    108   QTreeWidgetItem *oldtreeItem = topLevelItem(oldelement-1);
     113  QTreeWidgetItem *oldtreeItem = NULL;
     114  if (oldelement != (atomicNumber_t)-1)
     115    oldtreeItem = topLevelItem(oldelement-1);
    109116  QTreeWidgetItem *newtreeItem = topLevelItem(newelement-1);
    110   ASSERT( (oldtreeItem != NULL) && (newtreeItem != NULL),
    111       "QtElementList::updateElement() - missing element item.");
    112   int count_old = oldtreeItem->text(OCCURRENCE).toInt();
    113   int count_new = newtreeItem->text(OCCURRENCE).toInt();
    114   setOccurrence(*oldtreeItem, count_old-1);
     117  ASSERT( (newtreeItem != NULL),
     118      "QtElementList::updateElement() - missing new element item.");
     119  if (oldelement != (atomicNumber_t)-1) {
     120    const int count_old = oldtreeItem->text(OCCURRENCE).toInt();
     121    setOccurrence(*oldtreeItem, count_old-1);
     122  }
     123  const int count_new = newtreeItem->text(OCCURRENCE).toInt();
    115124  setOccurrence(*newtreeItem, count_new+1);
    116125}
     
    118127void QtElementList::setOccurrence(QTreeWidgetItem &_item, const int count)
    119128{
    120   if (count < 0) {
    121     // something must be very wrong, rather refill
    122     dirty = true;
    123     refill();
    124   } else {
     129  ASSERT (count >= 0,
     130      "QtElementList::setOccurrence() - count for an elment < 0.");
     131
     132//    // something must be very wrong, rather refill
     133//    dirty = true;
     134//    refill();
     135//  } else {
    125136    if (count > 0) {
    126137      _item.setText(OCCURRENCE, QString::number(count));
     
    129140      _item.setDisabled(true);
    130141    }
    131   }
    132 }
    133 
    134 void QtElementList::refill()
     142//  }
     143}
     144
     145void QtElementList::refill(const atomId_t _atomid)
    135146{
    136147  refill_mutex.lock();
    137148
    138   periodentafel *&periode = World::getInstance().getPeriode();
    139 
    140   elementSelection.clear();
    141 
    142   int i;
    143 
    144   clear();
    145   periodentafel::const_iterator iter;
    146   for(iter = periode->begin(),i=0;
    147       iter != periode->end();
    148       ++i,++iter) {
    149     const element *e = iter->second;
    150     int count = 0;
    151     count = const_cast<const World &>(World::getInstance()).
    152         getAllAtoms(AtomByType(e)).size();
    153 
    154     QTreeWidgetItem *treeItem = new QTreeWidgetItem(this);
    155     treeItem->setText(NUMBER, QString::number(e->getAtomicNumber()));
    156     treeItem->setText(NAME, QString(e->getName().c_str()));
    157     treeItem->setText(SYMBOL, QString(e->getSymbol().c_str()));
    158     treeItem->setText(MASS, QString::number(e->getMass()));
    159     setOccurrence(*treeItem, count);
    160     elementSelection.push_back(treeItem->isSelected());
    161   }
    162   dirty = false;
     149//  periodentafel *&periode = World::getInstance().getPeriode();
     150//
     151//  elementSelection.clear();
     152//
     153//  int i;
     154//
     155//  clear();
     156//  periodentafel::const_iterator iter;
     157//  for(iter = periode->begin(),i=0;
     158//      iter != periode->end();
     159//      ++i,++iter) {
     160//    const element *e = iter->second;
     161//    int count = 0;
     162//    count = const_cast<const World &>(World::getInstance()).
     163//        getAllAtoms(AtomByType(e)).size();
     164//
     165//    QTreeWidgetItem *treeItem = new QTreeWidgetItem(this);
     166//    treeItem->setText(NUMBER, QString::number(e->getAtomicNumber()));
     167//    treeItem->setText(NAME, QString(e->getName().c_str()));
     168//    treeItem->setText(SYMBOL, QString(e->getSymbol().c_str()));
     169//    treeItem->setText(MASS, QString::number(e->getMass()));
     170//    setOccurrence(*treeItem, count);
     171//    elementSelection.push_back(treeItem->isSelected());
     172//  }
     173//  dirty = false
     174  const atom * const walker = const_cast<const World &>(World::getInstance()).
     175      getAtom(AtomById(_atomid));
     176  if (walker != NULL)
     177    updateElement(*walker);
     178  else {
     179    AtomElementMap_t::iterator iter = AtomElementMap.find(_atomid);
     180    QTreeWidgetItem *oldtreeItem = topLevelItem(iter->second-1);
     181    const int count_old = oldtreeItem->text(OCCURRENCE).toInt();
     182    setOccurrence(*oldtreeItem, count_old-1);
     183
     184    AtomElementMap.erase(iter);
     185  }
    163186
    164187  refill_mutex.unlock();
     
    167190void QtElementList::paintEvent(QPaintEvent * event)
    168191{
    169   if (dirty)
    170     refill();
     192//  if (dirty)
     193//    refill();
    171194  QTreeWidget::paintEvent(event);
    172195}
  • src/UIElements/Views/Qt4/QtElementList.hpp

    r92df04 r9fb213  
    3838  virtual void subjectKilled(Observable *publisher);
    3939  virtual void paintEvent(QPaintEvent * event);
    40   void refill();
    4140
    4241  void setOccurrence(QTreeWidgetItem &_item, const int count);
     
    4746  static const char *COLUMNNAMES[];
    4847
     48signals:
     49  void needsRefill(const atomId_t);
     50
    4951private slots:
    5052  void rowSelected();
     53  void refill(const atomId_t);
    5154
    5255private:
Note: See TracChangeset for help on using the changeset viewer.