Changeset 3eb91c for src/UIElements/Views/Qt4/QtMoleculeList.cpp
- Timestamp:
- Jan 10, 2015, 5:14:32 PM (10 years ago)
- 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:
- 7b93f9
- Parents:
- 9a7ef9
- git-author:
- Frederik Heber <heber@…> (11/16/14 16:31:35)
- git-committer:
- Frederik Heber <heber@…> (01/10/15 17:14:32)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
src/UIElements/Views/Qt4/QtMoleculeList.cpp
r9a7ef9 r3eb91c 69 69 setHeaderLabels(header); 70 70 71 World::getInstance().signOn(this );//, World::MoleculeInserted);72 //World::getInstance().signOn(this, World::MoleculeRemoved);71 World::getInstance().signOn(this, World::MoleculeInserted); 72 World::getInstance().signOn(this, World::MoleculeRemoved); 73 73 74 74 … … 76 76 clearing = false; 77 77 selecting = false; 78 ChangingChildrensVisibility = false; 78 79 refill(); 79 80 … … 86 87 QtMoleculeList::~QtMoleculeList() 87 88 { 88 World::getInstance().signOff(this );//, World::MoleculeInserted);89 //World::getInstance().signOff(this, World::MoleculeRemoved);89 World::getInstance().signOff(this, World::MoleculeInserted); 90 World::getInstance().signOff(this, World::MoleculeRemoved); 90 91 } 91 92 92 93 void QtMoleculeList::update(Observable *publisher) { 94 ASSERT(0, 95 "QtMoleculeList::update() - we did not sign up for any global updates."); 96 } 97 98 void QtMoleculeList::recieveNotification(Observable *publisher, Notification_ptr notification) { 93 99 94 100 if (selecting) … … 96 102 97 103 dirty = true; 98 99 // force an update from Qt... 100 clearing = true; 101 clear(); 102 clearing = false; 103 } 104 } 105 104 106 105 107 void QtMoleculeList::refill() { … … 108 110 109 111 clear(); 110 111 // list of (unique) formulas in the world 112 std::vector<Formula> formula; 112 formula.clear(); 113 FormulaVisibilityCountMap.clear(); 113 114 114 115 for (std::vector<molecule*>::const_iterator iter = molecules.begin(); … … 118 119 // find group if already in list 119 120 QTreeWidgetItem *groupItem = NULL; 120 for (unsigned int j=0;j<formula.size();j++) 121 if ((*iter)->getFormula() == formula[j]){ 122 groupItem = topLevelItem(j); 123 break; 124 } 121 const std::string &molecule_formula = (*iter)->getFormula().toString(); 122 FormulaTreeItemMap_t::const_iterator formulaiter = 123 formula.find(molecule_formula); 125 124 126 125 // new molecule type -> create new group 127 if (!groupItem){ 128 formula.push_back((*iter)->getFormula()); 126 if (formulaiter == formula.end()){ 127 // insert new formula entry into visibility 128 #ifndef NDEBUG 129 std::pair< FormulaVisibilityCountMap_t::iterator, bool> visibilityinserter = 130 #endif 131 FormulaVisibilityCountMap.insert( 132 std::make_pair( molecule_formula, (unsigned int)0) ); 133 ASSERT( visibilityinserter.second, 134 "QtMoleculeList::refill() - molecule with formula " 135 +molecule_formula+" already in FormulaVisibilityCountMap."); 136 137 // create item and place into Map with formula as key 129 138 groupItem = new QTreeWidgetItem(this); 139 formula.insert( std::make_pair(molecule_formula, groupItem) ); 140 // fill item 130 141 groupItem->setText(NAME, QString("default")); 131 // groupItem->setFlags(groupItem->flags() | Qt::ItemIsUserCheckable);132 // groupItem->setCheckState(VISIBILITY, Qt::Checked);142 groupItem->setFlags((groupItem->flags() | Qt::ItemIsUserCheckable) ^ Qt::ItemIsSelectable); 143 groupItem->setCheckState(VISIBILITY, Qt::Unchecked); 133 144 groupItem->setText(ATOMCOUNT, QString::number(0)); 134 145 groupItem->setText(FORMULA, QString("")); 135 146 groupItem->setText(OCCURRENCE, "0"); 136 147 groupItem->setData(0, Qt::UserRole, QVariant(-1)); 148 } else { 149 groupItem = formulaiter->second; 137 150 } 138 151 … … 140 153 QTreeWidgetItem *molItem = new QTreeWidgetItem(groupItem); 141 154 molItem->setText(NAME, QString((*iter)->getName().c_str())); 142 molItem->setFlags( groupItem->flags() | Qt::ItemIsUserCheckable);155 molItem->setFlags(molItem->flags() | Qt::ItemIsUserCheckable | Qt::ItemIsSelectable); 143 156 molItem->setCheckState(VISIBILITY, Qt::Unchecked); 144 157 molItem->setText(ATOMCOUNT, QString::number((*iter)->getAtomCount())); 145 molItem->setText(FORMULA, QString( (*iter)->getFormula().toString().c_str()));158 molItem->setText(FORMULA, QString(molecule_formula.c_str())); 146 159 const int index = (*iter)->getId(); 147 160 molItem->setData(0, Qt::UserRole, QVariant(index)); … … 149 162 150 163 // increase group occurrence 151 int count = groupItem->text( 4).toInt() + 1;164 int count = groupItem->text(OCCURRENCE).toInt() + 1; 152 165 groupItem->setText(OCCURRENCE, QString::number(count)); 153 166 } … … 168 181 void QtMoleculeList::visibilityChanged(QTreeWidgetItem* item, int column) 169 182 { 170 if (column == VISIBILITY) { 171 const moleculeId_t molid = item->data(0, Qt::UserRole).toInt(); 172 const bool visible = item->checkState(VISIBILITY); 173 emit moleculesVisibilityChanged(molid, visible); 174 } 183 if ((!clearing) && (!ChangingChildrensVisibility)) 184 if (column == VISIBILITY) { 185 const moleculeId_t molid = item->data(0, Qt::UserRole).toInt(); 186 const bool visible = item->checkState(VISIBILITY); 187 if (molid != (unsigned int)-1) { // molecule item 188 const molecule * const _molecule = 189 World::getInstance().getMolecule(MoleculeById(molid)); 190 ASSERT( _molecule != NULL, 191 "QtMoleculeList::visibilityChanged() - molecule with id " 192 +toString(molid)+" is not known to World."); 193 const std::string &molecule_formula = _molecule->getFormula().toString(); 194 ASSERT( FormulaVisibilityCountMap.count(molecule_formula) != 0, 195 "QtMoleculeList::visibilityChanged() - molecule with formula " +molecule_formula 196 +" is not present in FormulaVisibilityCountMap."); 197 198 // get parent 199 QTreeWidgetItem *groupItem = item->parent(); 200 ASSERT( groupItem != NULL, 201 "QtMoleculeList::visibilityChanged() - item with id "+toString(molid) 202 +" has not parent?"); 203 // check whether we have to set the group item 204 205 ChangingChildrensVisibility = true; 206 if (visible) { 207 ++(FormulaVisibilityCountMap[molecule_formula]); 208 // compare with occurence/total number of molecules 209 if (FormulaVisibilityCountMap[molecule_formula] == 210 (unsigned int)(groupItem->text(OCCURRENCE).toInt())) 211 groupItem->setCheckState(VISIBILITY, Qt::Checked); 212 } else { 213 --(FormulaVisibilityCountMap[molecule_formula]); 214 // none selected anymore? 215 if (FormulaVisibilityCountMap[molecule_formula] == 0) 216 groupItem->setCheckState(VISIBILITY, Qt::Unchecked); 217 } 218 ChangingChildrensVisibility = false; 219 220 emit moleculesVisibilityChanged(molid, visible); 221 222 } else { // group item 223 224 // go through all children, but don't enter for groupItem once more 225 ChangingChildrensVisibility = true; 226 for (int i=0;i<item->childCount();++i) { 227 QTreeWidgetItem *molItem = item->child(i); 228 const moleculeId_t molid = molItem->data(0, Qt::UserRole).toInt(); 229 ASSERT( molid != (unsigned int)-1, 230 "QtMoleculeList::visibilityChanged() - to child with index" 231 +toString(i)+" there is no molecule?"); 232 molItem->setCheckState(VISIBILITY, visible ? Qt::Checked : Qt::Unchecked); 233 234 // emit signal 235 emit moleculesVisibilityChanged(molid, visible); 236 } 237 // set current number of visible children 238 const std::string molecule_formula = 239 item->text(FORMULA).toStdString(); 240 FormulaVisibilityCountMap[molecule_formula] = 241 visible ? item->text(OCCURRENCE).toInt() : 0; 242 243 ChangingChildrensVisibility = false; 244 } 245 } 175 246 } 176 247
Note:
See TracChangeset
for help on using the changeset viewer.