source: src/UIElements/TextUI/TextDialog.cpp@ 0b2ce9

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 0b2ce9 was bcf653, checked in by Frederik Heber <heber@…>, 15 years ago

Added copyright note to each .cpp file and an extensive one to builder.cpp.

  • Property mode set to 100644
File size: 18.8 KB
Line 
1/*
2 * Project: MoleCuilder
3 * Description: creates and alters molecular systems
4 * Copyright (C) 2010 University of Bonn. All rights reserved.
5 * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
6 */
7
8/*
9 * TextDialog.cpp
10 *
11 * Created on: Jan 5, 2010
12 * Author: crueger
13 */
14
15// include config.h
16#ifdef HAVE_CONFIG_H
17#include <config.h>
18#endif
19
20#include "Helpers/MemDebug.hpp"
21
22#include <iostream>
23
24#include <Descriptors/AtomDescriptor.hpp>
25#include <Descriptors/AtomIdDescriptor.hpp>
26#include <Descriptors/MoleculeDescriptor.hpp>
27#include <Descriptors/MoleculeIdDescriptor.hpp>
28#include <boost/lexical_cast.hpp>
29#include "TextUI/TextDialog.hpp"
30
31#include "World.hpp"
32#include "periodentafel.hpp"
33#include "Helpers/Log.hpp"
34#include "Helpers/Verbose.hpp"
35
36#include "atom.hpp"
37#include "element.hpp"
38#include "molecule.hpp"
39#include "LinearAlgebra/Vector.hpp"
40#include "LinearAlgebra/Matrix.hpp"
41#include "Box.hpp"
42
43#include <boost/lexical_cast.hpp>
44
45using namespace std;
46
47using boost::lexical_cast;
48using boost::bad_lexical_cast;
49
50
51TextDialog::TextDialog()
52{
53}
54
55TextDialog::~TextDialog()
56{
57}
58
59
60void TextDialog::queryEmpty(const char* title, string description){
61 registerQuery(new EmptyTextQuery(title,description));
62}
63
64void TextDialog::queryBoolean(const char* title, string description){
65 registerQuery(new BooleanTextQuery(title,description));
66}
67
68void TextDialog::queryInt(const char* title, string description){
69 registerQuery(new IntTextQuery(title,description));
70}
71
72void TextDialog::queryInts(const char* title, string description){
73 registerQuery(new IntsTextQuery(title,description));
74}
75
76void TextDialog::queryDouble(const char* title, string description){
77 registerQuery(new DoubleTextQuery(title,description));
78}
79
80void TextDialog::queryDoubles(const char* title, string description){
81 registerQuery(new DoublesTextQuery(title,description));
82}
83
84void TextDialog::queryString(const char* title, string description){
85 registerQuery(new StringTextQuery(title,description));
86}
87
88void TextDialog::queryStrings(const char* title, string description){
89 registerQuery(new StringsTextQuery(title,description));
90}
91
92void TextDialog::queryAtom(const char* title, string description) {
93 registerQuery(new AtomTextQuery(title,description));
94}
95
96void TextDialog::queryAtoms(const char* title, string description) {
97 registerQuery(new AtomsTextQuery(title,description));
98}
99
100void TextDialog::queryMolecule(const char* title, string description) {
101 registerQuery(new MoleculeTextQuery(title,description));
102}
103
104void TextDialog::queryMolecules(const char* title, string description) {
105 registerQuery(new MoleculesTextQuery(title,description));
106}
107
108void TextDialog::queryVector(const char* title, bool check, string description) {
109 registerQuery(new VectorTextQuery(title,check,description));
110}
111
112void TextDialog::queryVectors(const char* title, bool check, string description) {
113 registerQuery(new VectorsTextQuery(title,check,description));
114}
115
116void TextDialog::queryBox(const char* title, string description) {
117 registerQuery(new BoxTextQuery(title,description));
118}
119
120void TextDialog::queryElement(const char* title, string description){
121 registerQuery(new ElementTextQuery(title,description));
122}
123
124void TextDialog::queryElements(const char* title, string description){
125 registerQuery(new ElementsTextQuery(title,description));
126}
127
128/************************** Query Infrastructure ************************/
129
130TextDialog::EmptyTextQuery::EmptyTextQuery(string title, std::string _description) :
131 Dialog::EmptyQuery(title,_description)
132{}
133
134TextDialog::EmptyTextQuery::~EmptyTextQuery() {}
135
136bool TextDialog::EmptyTextQuery::handle() {
137 cout << "Message of " << getTitle() << ":\n" << getDescription() << "\n";
138 return true;
139}
140
141TextDialog::IntTextQuery::IntTextQuery(string title, std::string _description) :
142 Dialog::IntQuery(title,_description)
143{}
144
145TextDialog::IntTextQuery::~IntTextQuery() {}
146
147bool TextDialog::IntTextQuery::handle() {
148 bool badInput = false;
149 do{
150 badInput = false;
151 Log() << Verbose(0) << getTitle();
152 cin >> tmp;
153 if(cin.fail()){
154 badInput=true;
155 cin.clear();
156 cin.ignore(std::numeric_limits<streamsize>::max(),'\n');
157 Log() << Verbose(0) << "Input was not a number!" << endl;
158 }
159 } while(badInput);
160 // clear the input buffer of anything still in the line
161 cin.ignore(std::numeric_limits<streamsize>::max(),'\n');
162 return true;
163}
164
165TextDialog::IntsTextQuery::IntsTextQuery(string title, std::string _description) :
166 Dialog::IntsQuery(title,_description)
167{}
168
169TextDialog::IntsTextQuery::~IntsTextQuery() {}
170
171bool TextDialog::IntsTextQuery::handle() {
172 Log() << Verbose(0) << getTitle();
173 std::string line;
174 getline(cin,line);
175 // dissect by " "
176 string::iterator olditer = line.begin();
177 for(string::iterator iter = line.begin(); iter != line.end(); ++iter) {
178 if (*iter == ' ') {
179 std::istringstream stream(string(iter, olditer));
180 stream >> temp;
181 tmp.push_back(temp);
182 olditer = iter;
183 }
184 }
185 if (olditer != line.begin()) { // insert last part also
186 std::istringstream stream(string(olditer, line.end()));
187 stream >> temp;
188 tmp.push_back(temp);
189 }
190
191 return true;
192}
193
194TextDialog::BooleanTextQuery::BooleanTextQuery(string title, std::string _description) :
195 Dialog::BooleanQuery(title,_description)
196{}
197
198TextDialog::BooleanTextQuery::~BooleanTextQuery() {}
199
200bool TextDialog::BooleanTextQuery::handle() {
201 bool badInput = false;
202 char input = ' ';
203 do{
204 badInput = false;
205 Log() << Verbose(0) << getTitle();
206 cin >> input;
207 if ((input == 'y' ) || (input == 'Y')) {
208 tmp = true;
209 } else if ((input == 'n' ) || (input == 'N')) {
210 tmp = false;
211 } else {
212 badInput=true;
213 cin.clear();
214 cin.ignore(std::numeric_limits<streamsize>::max(),'\n');
215 Log() << Verbose(0) << "Input was not of [yYnN]!" << endl;
216 }
217 } while(badInput);
218 // clear the input buffer of anything still in the line
219 cin.ignore(std::numeric_limits<streamsize>::max(),'\n');
220 return true;
221}
222
223TextDialog::StringTextQuery::StringTextQuery(string title, std::string _description) :
224 Dialog::StringQuery(title,_description)
225{}
226
227TextDialog::StringTextQuery::~StringTextQuery() {}
228
229bool TextDialog::StringTextQuery::handle() {
230 Log() << Verbose(0) << getTitle();
231 getline(cin,tmp);
232 return true;
233}
234
235TextDialog::StringsTextQuery::StringsTextQuery(string title, std::string _description) :
236 Dialog::StringsQuery(title,_description)
237{}
238
239TextDialog::StringsTextQuery::~StringsTextQuery() {}
240
241bool TextDialog::StringsTextQuery::handle() {
242 Log() << Verbose(0) << getTitle();
243 getline(cin,temp);
244 // dissect by " "
245 string::iterator olditer = temp.begin();
246 for(string::iterator iter = temp.begin(); iter != temp.end(); ++iter) {
247 if (*iter == ' ') {
248 tmp.push_back(string(iter, olditer));
249 olditer = iter;
250 }
251 }
252 if (olditer != temp.begin()) // insert last part also
253 tmp.push_back(string(olditer, temp.end()));
254
255 return true;
256}
257
258TextDialog::DoubleTextQuery::DoubleTextQuery(string title, std::string _description) :
259 Dialog::DoubleQuery(title,_description)
260{}
261
262TextDialog::DoubleTextQuery::~DoubleTextQuery() {}
263
264bool TextDialog::DoubleTextQuery::handle() {
265 bool badInput = false;
266 do{
267 badInput = false;
268 Log() << Verbose(0) << getTitle();
269 cin >> tmp;
270 if(cin.fail()){
271 badInput = true;
272 cin.clear();
273 cin.ignore(std::numeric_limits<streamsize>::max(),'\n');
274 Log() << Verbose(0) << "Input was not a number!" << endl;
275 }
276 }while(badInput);
277 cin.ignore(std::numeric_limits<streamsize>::max(),'\n');
278 return true;
279}
280
281
282TextDialog::DoublesTextQuery::DoublesTextQuery(string title, std::string _description) :
283 Dialog::DoublesQuery(title,_description)
284{}
285
286TextDialog::DoublesTextQuery::~DoublesTextQuery() {}
287
288bool TextDialog::DoublesTextQuery::handle() {
289 Log() << Verbose(0) << getTitle();
290 std::string line;
291 getline(cin,line);
292 // dissect by " "
293 string::iterator olditer = line.begin();
294 for(string::iterator iter = line.begin(); iter != line.end(); ++iter) {
295 if (*iter == ' ') {
296 std::istringstream stream(string(iter, olditer));
297 stream >> temp;
298 tmp.push_back(temp);
299 olditer = iter;
300 }
301 }
302 if (olditer != line.begin()) { // insert last part also
303 std::istringstream stream(string(olditer, line.end()));
304 stream >> temp;
305 tmp.push_back(temp);
306 }
307
308 return true;
309}
310
311TextDialog::AtomTextQuery::AtomTextQuery(string title, std::string _description) :
312 Dialog::AtomQuery(title,_description)
313{}
314
315TextDialog::AtomTextQuery::~AtomTextQuery() {}
316
317bool TextDialog::AtomTextQuery::handle() {
318 int idxOfAtom=-1;
319 bool badInput = false;
320 do{
321 badInput = false;
322 Log() << Verbose(0) << getTitle();
323 cin >> idxOfAtom;
324 if(cin.fail()){
325 badInput = true;
326 cin.clear();
327 cin.ignore(std::numeric_limits<streamsize>::max(),'\n');
328 Log() << Verbose(0) << "Input was not a number!" << endl;
329 continue;
330 }
331
332 tmp = World::getInstance().getAtom(AtomById(idxOfAtom));
333 if(!tmp && idxOfAtom!=-1){
334 Log() << Verbose(0) << "Invalid Atom Index" << idxOfAtom << endl;
335 badInput = true;
336 }
337
338 } while(badInput);
339 cin.ignore(std::numeric_limits<streamsize>::max(),'\n');
340 return (idxOfAtom!=-1);
341}
342
343
344TextDialog::AtomsTextQuery::AtomsTextQuery(string title, std::string _description) :
345 Dialog::AtomsQuery(title,_description)
346{}
347
348TextDialog::AtomsTextQuery::~AtomsTextQuery() {}
349
350bool TextDialog::AtomsTextQuery::handle() {
351 int idxOfAtom=-1;
352 Log() << Verbose(0) << getTitle();
353 std::string line;
354 getline(cin,line);
355 // dissect by " "
356 string::iterator olditer = line.begin();
357 for(string::iterator iter = line.begin(); iter != line.end(); ++iter) {
358 if (*iter == ' ') {
359 std::istringstream stream(string(iter, olditer));
360 stream >> idxOfAtom;
361 temp = World::getInstance().getAtom(AtomById(idxOfAtom));
362 if(!temp && idxOfAtom!=-1){
363 Log() << Verbose(0) << "Invalid Atom Index" << idxOfAtom << endl;
364 break;
365 }
366 tmp.push_back(temp);
367 olditer = iter;
368 }
369 }
370 if (olditer != line.begin()) { // insert last part also
371 std::istringstream stream(string(olditer, line.end()));
372 stream >> idxOfAtom;
373 temp = World::getInstance().getAtom(AtomById(idxOfAtom));
374 if(!temp && idxOfAtom!=-1) {
375 Log() << Verbose(0) << "Invalid Atom Index" << idxOfAtom << endl;
376 tmp.push_back(temp);
377 }
378 }
379
380 return (idxOfAtom!=-1);
381}
382
383TextDialog::MoleculeTextQuery::MoleculeTextQuery(string title, std::string _description) :
384 Dialog::MoleculeQuery(title,_description)
385{}
386
387TextDialog::MoleculeTextQuery::~MoleculeTextQuery() {}
388
389bool TextDialog::MoleculeTextQuery::handle() {
390 int idxOfMol=0;
391 bool badInput = false;
392 do{
393 badInput = false;
394 Log() << Verbose(0) << getTitle();
395 cin >> idxOfMol;
396 if(cin.fail()){
397 badInput = true;
398 cin.clear();
399 cin.ignore(std::numeric_limits<streamsize>::max(),'\n');
400 Log() << Verbose(0) << "Input was not a number!" << endl;
401 continue;
402 }
403
404 tmp = World::getInstance().getMolecule(MoleculeById(idxOfMol));
405 if(!tmp && idxOfMol!=-1){
406 Log() << Verbose(0) << "Invalid Molecule Index" << endl;
407 badInput = true;
408 }
409
410 } while(badInput);
411 cin.ignore(std::numeric_limits<streamsize>::max(),'\n');
412 return (idxOfMol!=-1);
413}
414
415
416TextDialog::MoleculesTextQuery::MoleculesTextQuery(string title, std::string _description) :
417 Dialog::MoleculesQuery(title,_description)
418{}
419
420TextDialog::MoleculesTextQuery::~MoleculesTextQuery() {}
421
422bool TextDialog::MoleculesTextQuery::handle() {
423 int idxOfMol=-1;
424 Log() << Verbose(0) << getTitle();
425 std::string line;
426 getline(cin,line);
427 // dissect by " "
428 string::iterator olditer = line.begin();
429 for(string::iterator iter = line.begin(); iter != line.end(); ++iter) {
430 if (*iter == ' ') {
431 std::istringstream stream(string(iter, olditer));
432 stream >> idxOfMol;
433 temp = World::getInstance().getMolecule(MoleculeById(idxOfMol));
434 if(!temp && idxOfMol!=-1){
435 Log() << Verbose(0) << "Invalid Molecule Index" << idxOfMol << endl;
436 break;
437 }
438 tmp.push_back(temp);
439 olditer = iter;
440 }
441 }
442 if (olditer != line.begin()) { // insert last part also
443 std::istringstream stream(string(olditer, line.end()));
444 stream >> idxOfMol;
445 temp = World::getInstance().getMolecule(MoleculeById(idxOfMol));
446 if(!temp && idxOfMol!=-1){
447 Log() << Verbose(0) << "Invalid Molecule Index" << idxOfMol << endl;
448 tmp.push_back(temp);
449 }
450 }
451
452 return (idxOfMol!=-1);
453}
454
455TextDialog::VectorTextQuery::VectorTextQuery(std::string title, bool _check, std::string _description) :
456 Dialog::VectorQuery(title,_check,_description)
457{}
458
459TextDialog::VectorTextQuery::~VectorTextQuery()
460{}
461
462bool TextDialog::VectorTextQuery::handle() {
463 std::cout << getTitle();
464 const Matrix &M = World::getInstance().getDomain().getM();
465 char coords[3] = {'x', 'y', 'z'};
466 for (int i=0;i<3;i++)
467 std::cout << coords[i] << "[0.." << M.at(i,i) << ( (i!=2) ? "], " : "]: ");
468
469 std::string line;
470 getline(cin,line);
471
472 // dissect by ","
473 double coord = 0.;
474 int counter = 0;
475 string::iterator olditer = line.begin();
476 for(string::iterator iter = line.begin(); (iter != line.end()) && (counter != 3); ++iter) {
477 if (*iter == ',') {
478 std::istringstream stream(string(iter, olditer));
479 stream >> coord;
480 tmp[counter++] = coord;
481 olditer = iter;
482 }
483 }
484 if ((olditer != line.begin()) && (counter != 3)) { // insert last part also
485 std::istringstream stream(string(olditer, line.end()));
486 stream >> coord;
487 tmp[counter++] = coord;
488 }
489
490 // check vector
491 return World::getInstance().getDomain().isInside(tmp);
492}
493
494TextDialog::VectorsTextQuery::VectorsTextQuery(std::string title, bool _check, std::string _description) :
495 Dialog::VectorsQuery(title,_check,_description)
496{}
497
498TextDialog::VectorsTextQuery::~VectorsTextQuery()
499{}
500
501bool TextDialog::VectorsTextQuery::handle() {
502 std::cout << getTitle();
503 char coords[3] = {'x', 'y', 'z'};
504 const Matrix &M = World::getInstance().getDomain().getM();
505 for (int i=0;i<3;i++)
506 std::cout << coords[i] << "[0.." << M.at(i,i) << ( (i!=2) ? "], " : "]: ");
507
508 std::string line;
509 getline(cin,line);
510
511 // dissect by ","
512 double coord = 0.;
513 string::iterator olditerspace = line.begin();
514 string::iterator olditercomma = line.begin();
515 int counter = 0;
516 for(string::iterator vectoriter = line.begin(); vectoriter != line.end(); ++vectoriter) {
517 if (*vectoriter == ',')
518 counter++;
519 if ((*vectoriter == ' ') && (counter == 2)) {
520 counter = 0;
521 for(string::iterator componentiter = olditerspace; (componentiter != vectoriter) && (counter !=3); ++componentiter) {
522 if (*componentiter == ',') {
523 std::istringstream stream(string(componentiter, olditercomma));
524 stream >> coord;
525 temp[counter++] = coord;
526 olditercomma = componentiter;
527 }
528 }
529 if ((olditercomma != line.begin()) && (counter != 3)) { // insert last part also
530 std::istringstream stream(string(olditercomma, vectoriter));
531 stream >> coord;
532 temp[counter++] = coord;
533 }
534 if (World::getInstance().getDomain().isInside(temp))
535 tmp.push_back(temp);
536 olditerspace = vectoriter;
537 }
538 }
539
540 return true;
541}
542
543TextDialog::BoxTextQuery::BoxTextQuery(std::string title, std::string _description) :
544 Dialog::BoxQuery(title,_description)
545{}
546
547TextDialog::BoxTextQuery::~BoxTextQuery()
548{}
549
550bool TextDialog::BoxTextQuery::handle() {
551 Log() << Verbose(0) << getTitle();
552
553 double temp[6];
554 std::string coords[6] = {"xx","yx","yy", "zx", "zy", "zz"};
555 for (int i=0;i<6;i++) {
556 Log() << Verbose(0) << coords[i] << ": ";
557 cin >> temp[i];
558 }
559 Matrix M;
560 M.set(0,0, temp[0]);
561 M.set(0,1, temp[1]);
562 M.set(0,2, temp[2]);
563 M.set(1,0, temp[1]);
564 M.set(1,1, temp[3]);
565 M.set(1,2, temp[4]);
566 M.set(2,0, temp[2]);
567 M.set(2,1, temp[4]);
568 M.set(2,2, temp[5]);
569 tmp.setM(M);
570 return true;
571}
572
573TextDialog::ElementTextQuery::ElementTextQuery(std::string title, std::string _description) :
574 Dialog::ElementQuery(title,_description)
575{}
576
577TextDialog::ElementTextQuery::~ElementTextQuery()
578{}
579
580bool TextDialog::ElementTextQuery::handle() {
581 bool badInput=false;
582 bool aborted = false;
583 const element * temp = NULL;
584 do{
585 badInput = false;
586 Log() << Verbose(0) << getTitle();
587
588 // try to read as Atomic number
589 int Z;
590 cin >> Z;
591 if(!cin.fail()){
592 if(Z==-1){
593 aborted = true;
594 }
595 else{
596 temp = World::getInstance().getPeriode()->FindElement(Z);
597 if(!temp){
598 Log() << Verbose(0) << "No element with this atomic number!" << endl;
599 badInput = true;
600 }
601 }
602 continue;
603 }
604 else{
605 cin.clear();
606 }
607
608 // Try to read as shorthand
609 // the last buffer content was not removed, so we read the
610 // same thing again, this time as a string
611 string shorthand;
612 cin >> shorthand;
613 if(!cin.fail()){
614 if(shorthand.empty()){
615 aborted = true;
616 }
617 else{
618 temp = World::getInstance().getPeriode()->FindElement(shorthand.c_str());
619 if(!temp){
620 Log() << Verbose(0) << "No element with this shorthand!" << endl;
621 badInput = true;
622 }
623 }
624 }
625 else{
626 Log() << Verbose(0) << "Could not read input. Try Again." << endl;
627 cin.clear();
628 cin.ignore(std::numeric_limits<streamsize>::max(),'\n');
629 badInput = true;
630 }
631
632 }while(badInput);
633 cin.ignore(std::numeric_limits<streamsize>::max(),'\n');
634 return !aborted;
635}
636
637TextDialog::ElementsTextQuery::ElementsTextQuery(std::string title, std::string _description) :
638 Dialog::ElementsQuery(title,_description)
639{}
640
641TextDialog::ElementsTextQuery::~ElementsTextQuery()
642{}
643
644bool TextDialog::ElementsTextQuery::handle() {
645 std::string shorthand;
646 int Z=-1;
647 Log() << Verbose(0) << getTitle();
648 std::string line;
649 getline(cin,line);
650 // dissect by " "
651 string::iterator olditer = line.begin();
652 for(string::iterator iter = line.begin(); iter != line.end(); ++iter) {
653 if (*iter == ' ') {
654 std::istringstream stream(string(iter, olditer));
655 stream >> shorthand;
656 try {
657 Z = lexical_cast<int>(shorthand);
658 temp = World::getInstance().getPeriode()->FindElement(Z);
659 } catch (bad_lexical_cast) {
660 temp = World::getInstance().getPeriode()->FindElement(shorthand.c_str());
661 };
662 if(!temp && Z!=-1){
663 Log() << Verbose(0) << "Invalid Element" << shorthand << endl;
664 break;
665 }
666 tmp.push_back(temp);
667 olditer = iter;
668 }
669 }
670 if (olditer != line.begin()) { // insert last part also
671 std::istringstream stream(string(olditer, line.end()));
672 stream >> shorthand;
673 try {
674 Z = lexical_cast<int>(shorthand);
675 temp = World::getInstance().getPeriode()->FindElement(Z);
676 } catch (bad_lexical_cast) {
677 temp = World::getInstance().getPeriode()->FindElement(shorthand.c_str());
678 };
679 if(!temp && Z!=-1) {
680 Log() << Verbose(0) << "Invalid Element" << shorthand << endl;
681 tmp.push_back(temp);
682 }
683 }
684
685 return (Z!=-1);
686}
Note: See TracBrowser for help on using the repository browser.