source: src/UIElements/Qt4/Pipe/QtQueryListPipe.hpp@ 30cd0d

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
Last change on this file since 30cd0d was 2aafe8, checked in by Michael Ankele <ankele@…>, 13 years ago

Fix: StringsQtQuery works

  • created StringsQtQueryPipe as its own class so moc can operate without template'ized classes
  • Property mode set to 100644
File size: 3.5 KB
Line 
1/*
2 * QtQueryListPipe.hpp
3 *
4 * Created on: Oct 25, 2010
5 * Author: heber
6 */
7
8#ifndef QTQUERYLISTPIPE_HPP_
9#define QTQUERYLISTPIPE_HPP_
10
11// include config.h
12#ifdef HAVE_CONFIG_H
13#include <config.h>
14#endif
15
16
17#include "Parameters/Parameter.hpp"
18#include "QtQueryPipe.hpp"
19
20// Qt moc needs these because it generates its own .cpp file from QtQueryListPipe.hpp.
21#include <Qt/qboxlayout.h>
22#include <Qt/qlabel.h>
23#include <Qt/qlineedit.h>
24#include <Qt/qlistwidget.h>
25#include <Qt/qpushbutton.h>
26
27#include <boost/lexical_cast.hpp>
28
29using boost::lexical_cast;
30using boost::bad_lexical_cast;
31
32
33template<typename T> QtQueryListPipe<T>::QtQueryListPipe(Parameter<std::vector<T> > &_content, QtDialog *_dialog, QLineEdit *_inputBox, QListWidget *_inputList, QPushButton *_AddButton, QPushButton *_RemoveButton) :
34 content(_content),
35 dialog(_dialog),
36 inputBox(_inputBox),
37 inputList(_inputList),
38 AddButton(_AddButton),
39 RemoveButton(_RemoveButton)
40{}
41
42template<typename T> QtQueryListPipe<T>::~QtQueryListPipe()
43{}
44
45template<typename T> void QtQueryListPipe<T>::elementEntered(const QString& t)
46{
47 AddButton->setEnabled(t.length() > 0);
48}
49
50template<typename T> void QtQueryListPipe<T>::elementSelected()
51{
52 if (inputList->selectedItems().empty())
53 RemoveButton->setEnabled(false);
54 else
55 RemoveButton->setEnabled(true);
56}
57
58template<typename T> void QtQueryListPipe<T>::addElement() {
59 // type-check
60 std::string text = inputBox->text().toStdString();
61 T value;
62 try {
63 value = boost::lexical_cast<T>(text);
64 } catch (boost::bad_lexical_cast&) {
65 return;
66 };
67 // add item to both
68 inputList->addItem(QString(toString(value).c_str()));
69 addValue(value);
70}
71
72template<typename T> void QtQueryListPipe<T>::addValue(T item) {
73 std::vector<T> temp = content.get();
74 temp.push_back(item);
75 content.set(temp);
76
77 dialog->update();
78}
79
80template<typename T> void QtQueryListPipe<T>::removeElement() {
81 QList<QListWidgetItem *> items = inputList->selectedItems();
82 for (QList<QListWidgetItem *>::iterator iter = items.begin(); !items.empty(); iter = items.begin()) {
83 // obtain which position item has (by making it current item)
84 inputList->setCurrentItem(*iter);
85 // remove
86 QtQueryListPipe<T>::removeRow(inputList->currentRow()); // template parameters needs to be known, such that compiler knows which to call
87 inputList->takeItem(inputList->currentRow());
88 items.erase(iter);
89 }
90}
91
92template<typename T> void QtQueryListPipe<T>::removeRow(int row) {
93 int counter = 0;
94 std::vector<T> temp = content.get();
95 typename std::vector<T>::iterator iter = temp.begin();
96 for (; iter != temp.end(); ++iter)
97 if (counter++ == row)
98 break;
99 if (iter != temp.end())
100 temp.erase(iter);
101 content.set(temp);
102}
103
104class StringsQtQueryPipe : public QtQueryListPipe<std::string>
105{
106 Q_OBJECT
107public:
108 StringsQtQueryPipe(Parameter<std::vector<std::string> > &_content, QtDialog *_dialog, QLineEdit *_inputBox, QListWidget *_inputList, QPushButton *_AddButton, QPushButton *_RemoveButton) :
109 QtQueryListPipe<std::string>(_content, _dialog, _inputBox, _inputList, _AddButton, _RemoveButton) { }
110
111public slots:
112 virtual void elementEntered(const QString& t)
113 {
114 QtQueryListPipe<std::string>::elementEntered(t);
115 }
116 virtual void elementSelected()
117 {
118 QtQueryListPipe<std::string>::elementSelected();
119 }
120 virtual void addElement()
121 {
122 QtQueryListPipe<std::string>::addElement();
123 }
124 virtual void removeElement()
125 {
126 QtQueryListPipe<std::string>::removeElement();
127 }
128};
129
130
131#endif /* QTQUERYLISTPIPE_HPP_ */
Note: See TracBrowser for help on using the repository browser.