- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
src/UIElements/CommandLineUI/CommandLineDialog.cpp
rbcf653 r8df74d 20 20 #include "Helpers/MemDebug.hpp" 21 21 22 #include <iostream>23 #include <vector>24 25 #include <Descriptors/AtomDescriptor.hpp>26 #include <Descriptors/AtomIdDescriptor.hpp>27 #include <Descriptors/MoleculeDescriptor.hpp>28 #include <Descriptors/MoleculeIdDescriptor.hpp>29 22 #include "CommandLineUI/CommandLineDialog.hpp" 30 23 31 #include "Actions/Values.hpp"32 33 #include "element.hpp"34 #include "periodentafel.hpp"35 #include "CommandLineParser.hpp"36 #include "defs.hpp"37 #include "Helpers/Log.hpp"38 #include "LinearAlgebra/Matrix.hpp"39 #include "periodentafel.hpp"40 #include "Helpers/Verbose.hpp"41 #include "World.hpp"42 #include "Box.hpp"43 44 #include "atom.hpp"45 #include "element.hpp"46 #include "molecule.hpp"47 #include "LinearAlgebra/Vector.hpp"48 24 49 25 using namespace std; … … 127 103 } 128 104 129 /************************** Query Infrastructure ************************/ 130 131 CommandLineDialog::EmptyCommandLineQuery::EmptyCommandLineQuery(string title, string _description) : 132 Dialog::EmptyQuery(title, _description) 133 {} 134 135 CommandLineDialog::EmptyCommandLineQuery::~EmptyCommandLineQuery() {} 136 137 bool CommandLineDialog::EmptyCommandLineQuery::handle() { 138 cout << "Message of " << getTitle() << ":\n" << getDescription() << "\n"; 139 return true; 105 void CommandLineDialog::queryFile(const char* title, string _description){ 106 registerQuery(new FileCommandLineQuery(title, _description)); 140 107 } 141 108 142 CommandLineDialog::IntCommandLineQuery::IntCommandLineQuery(string title, string _description) : 143 Dialog::IntQuery(title, _description) 144 {} 145 146 CommandLineDialog::IntCommandLineQuery::~IntCommandLineQuery() {} 147 148 bool CommandLineDialog::IntCommandLineQuery::handle() { 149 if (CommandLineParser::getInstance().vm.count(getTitle())) { 150 tmp = CommandLineParser::getInstance().vm[getTitle()].as<int>(); 151 return true; 152 } else { 153 DoeLog(1) && (eLog() << Verbose(1) << "CommandLineUI parsing error: Missing integer for " << getTitle() << "." << endl); 154 return false; 155 } 156 } 157 158 CommandLineDialog::IntsCommandLineQuery::IntsCommandLineQuery(string title, string _description) : 159 Dialog::IntsQuery(title, _description) 160 {} 161 162 CommandLineDialog::IntsCommandLineQuery::~IntsCommandLineQuery() {} 163 164 bool CommandLineDialog::IntsCommandLineQuery::handle() { 165 if (CommandLineParser::getInstance().vm.count(getTitle())) { 166 tmp = CommandLineParser::getInstance().vm[getTitle()].as< std::vector<int> >(); 167 return true; 168 } else { 169 DoeLog(1) && (eLog() << Verbose(1) << "CommandLineUI parsing error: Missing integers for " << getTitle() << "." << endl); 170 return false; 171 } 172 } 173 174 CommandLineDialog::BooleanCommandLineQuery::BooleanCommandLineQuery(string title, string _description) : 175 Dialog::BooleanQuery(title, _description) 176 {} 177 178 CommandLineDialog::BooleanCommandLineQuery::~BooleanCommandLineQuery() {} 179 180 bool CommandLineDialog::BooleanCommandLineQuery::handle() { 181 if (CommandLineParser::getInstance().vm.count(getTitle())) { 182 tmp = CommandLineParser::getInstance().vm[getTitle()].as<bool>(); 183 return true; 184 } else { 185 DoeLog(1) && (eLog() << Verbose(1) << "CommandLineUI parsing error: Missing boolean for " << getTitle() << "." << endl); 186 return false; 187 } 188 } 189 190 CommandLineDialog::StringCommandLineQuery::StringCommandLineQuery(string title, string _description) : 191 Dialog::StringQuery(title, _description) 192 {} 193 194 CommandLineDialog::StringCommandLineQuery::~StringCommandLineQuery() {} 195 196 bool CommandLineDialog::StringCommandLineQuery::handle() { 197 if (CommandLineParser::getInstance().vm.count(getTitle())) { 198 tmp = CommandLineParser::getInstance().vm[getTitle()].as<string>(); 199 return true; 200 } else { 201 DoeLog(1) && (eLog() << Verbose(1) << "CommandLineUI parsing error: Missing string for " << getTitle() << "." << endl); 202 return false; 203 } 204 } 205 206 CommandLineDialog::StringsCommandLineQuery::StringsCommandLineQuery(string title, string _description) : 207 Dialog::StringsQuery(title, _description) 208 {} 209 210 CommandLineDialog::StringsCommandLineQuery::~StringsCommandLineQuery() {} 211 212 bool CommandLineDialog::StringsCommandLineQuery::handle() { 213 if (CommandLineParser::getInstance().vm.count(getTitle())) { 214 tmp = CommandLineParser::getInstance().vm[getTitle()].as< vector<string> >(); 215 return true; 216 } else { 217 DoeLog(1) && (eLog() << Verbose(1) << "CommandLineUI parsing error: Missing strings for " << getTitle() << "." << endl); 218 return false; 219 } 220 } 221 222 CommandLineDialog::DoubleCommandLineQuery::DoubleCommandLineQuery(string title, string _description) : 223 Dialog::DoubleQuery(title, _description) 224 {} 225 226 CommandLineDialog::DoubleCommandLineQuery::~DoubleCommandLineQuery() {} 227 228 bool CommandLineDialog::DoubleCommandLineQuery::handle() { 229 if (CommandLineParser::getInstance().vm.count(getTitle())) { 230 tmp = CommandLineParser::getInstance().vm[getTitle()].as<double>(); 231 return true; 232 } else { 233 DoeLog(1) && (eLog() << Verbose(1) << "CommandLineUI parsing error: Missing double for " << getTitle() << "." << endl); 234 return false; 235 } 236 } 237 238 CommandLineDialog::DoublesCommandLineQuery::DoublesCommandLineQuery(string title, string _description) : 239 Dialog::DoublesQuery(title, _description) 240 {} 241 242 CommandLineDialog::DoublesCommandLineQuery::~DoublesCommandLineQuery() {} 243 244 bool CommandLineDialog::DoublesCommandLineQuery::handle() { 245 if (CommandLineParser::getInstance().vm.count(getTitle())) { 246 tmp = CommandLineParser::getInstance().vm[getTitle()].as< std::vector<double> >(); 247 return true; 248 } else { 249 DoeLog(1) && (eLog() << Verbose(1) << "CommandLineUI parsing error: Missing doubles for " << getTitle() << "." << endl); 250 return false; 251 } 252 } 253 254 CommandLineDialog::AtomCommandLineQuery::AtomCommandLineQuery(string title, string _description) : 255 Dialog::AtomQuery(title, _description) 256 {} 257 258 CommandLineDialog::AtomCommandLineQuery::~AtomCommandLineQuery() {} 259 260 bool CommandLineDialog::AtomCommandLineQuery::handle() { 261 int IdxOfAtom = -1; 262 if (CommandLineParser::getInstance().vm.count(getTitle())) { 263 IdxOfAtom = CommandLineParser::getInstance().vm[getTitle()].as<int>(); 264 tmp = World::getInstance().getAtom(AtomById(IdxOfAtom)); 265 return true; 266 } else { 267 DoeLog(1) && (eLog() << Verbose(1) << "CommandLineUI parsing error: Missing atom for " << getTitle() << "." << endl); 268 return false; 269 } 270 } 271 272 CommandLineDialog::AtomsCommandLineQuery::AtomsCommandLineQuery(string title, string _description) : 273 Dialog::AtomsQuery(title, _description) 274 {} 275 276 CommandLineDialog::AtomsCommandLineQuery::~AtomsCommandLineQuery() {} 277 278 bool CommandLineDialog::AtomsCommandLineQuery::handle() { 279 std::vector<int> IdxOfAtom; 280 if (CommandLineParser::getInstance().vm.count(getTitle())) { 281 IdxOfAtom = CommandLineParser::getInstance().vm[getTitle()].as< std::vector<int> >(); 282 for (std::vector<int>::iterator iter = IdxOfAtom.begin(); iter != IdxOfAtom.end(); ++iter) { 283 temp = World::getInstance().getAtom(AtomById(*iter)); 284 if (temp) 285 tmp.push_back(temp); 286 } 287 return true; 288 } else { 289 DoeLog(1) && (eLog() << Verbose(1) << "CommandLineUI parsing error: Missing atoms for " << getTitle() << "." << endl); 290 return false; 291 } 292 } 293 294 CommandLineDialog::MoleculeCommandLineQuery::MoleculeCommandLineQuery(string title, string _description) : 295 Dialog::MoleculeQuery(title, _description) 296 {} 297 298 CommandLineDialog::MoleculeCommandLineQuery::~MoleculeCommandLineQuery() {} 299 300 bool CommandLineDialog::MoleculeCommandLineQuery::handle() { 301 int IdxOfMol = -1; 302 if (CommandLineParser::getInstance().vm.count(getTitle())) { 303 IdxOfMol = CommandLineParser::getInstance().vm[getTitle()].as<int>(); 304 tmp = World::getInstance().getMolecule(MoleculeById(IdxOfMol)); 305 return true; 306 } else { 307 DoeLog(1) && (eLog() << Verbose(1) << "CommandLineUI parsing error: Missing molecule for " << getTitle() << "." << endl); 308 return false; 309 } 310 } 311 312 CommandLineDialog::MoleculesCommandLineQuery::MoleculesCommandLineQuery(string title, string _description) : 313 Dialog::MoleculesQuery(title, _description) 314 {} 315 316 CommandLineDialog::MoleculesCommandLineQuery::~MoleculesCommandLineQuery() {} 317 318 bool CommandLineDialog::MoleculesCommandLineQuery::handle() { 319 std::vector<int> IdxOfMol; 320 if (CommandLineParser::getInstance().vm.count(getTitle())) { 321 IdxOfMol = CommandLineParser::getInstance().vm[getTitle()].as< std::vector<int> >(); 322 for (std::vector<int>::iterator iter = IdxOfMol.begin(); iter != IdxOfMol.end(); ++iter) { 323 temp = World::getInstance().getMolecule(MoleculeById(*iter)); 324 if (temp) 325 tmp.push_back(temp); 326 } 327 return true; 328 } else { 329 DoeLog(1) && (eLog() << Verbose(1) << "CommandLineUI parsing error: Missing molecules for " << getTitle() << "." << endl); 330 return false; 331 } 332 } 333 334 CommandLineDialog::VectorCommandLineQuery::VectorCommandLineQuery(string title, bool _check, string _description) : 335 Dialog::VectorQuery(title,_check, _description) 336 {} 337 338 CommandLineDialog::VectorCommandLineQuery::~VectorCommandLineQuery() 339 {} 340 341 bool CommandLineDialog::VectorCommandLineQuery::handle() { 342 VectorValue temp; 343 if (CommandLineParser::getInstance().vm.count(getTitle())) { 344 temp = CommandLineParser::getInstance().vm[getTitle()].as< VectorValue >(); 345 tmp[0] = temp.x; 346 tmp[1] = temp.y; 347 tmp[2] = temp.z; 348 if ((check) && (!World::getInstance().getDomain().isInside(tmp))) { 349 DoeLog(1) && (eLog() << Verbose(1) << "Vector " << tmp << " would be outside of box domain." << endl); 350 return false; 351 } 352 return true; 353 } else { 354 DoeLog(1) && (eLog() << Verbose(1) << "CommandLineUI parsing error: Missing vector for " << getTitle() << "." << endl); 355 return false; 356 } 357 } 358 359 CommandLineDialog::VectorsCommandLineQuery::VectorsCommandLineQuery(string title, bool _check, string _description) : 360 Dialog::VectorsQuery(title,_check, _description) 361 {} 362 363 CommandLineDialog::VectorsCommandLineQuery::~VectorsCommandLineQuery() 364 {} 365 366 bool CommandLineDialog::VectorsCommandLineQuery::handle() { 367 std::vector<VectorValue> temporary; 368 if (CommandLineParser::getInstance().vm.count(getTitle())) { 369 temporary = CommandLineParser::getInstance().vm[getTitle()].as< std::vector<VectorValue> >(); 370 for(std::vector<VectorValue>::iterator iter = temporary.begin(); iter != temporary.end(); ++iter) { 371 temp[0] = (*iter).x; 372 temp[1] = (*iter).y; 373 temp[2] = (*iter).z; 374 if ((!check) || (World::getInstance().getDomain().isInside(temp))) 375 tmp.push_back(temp); 376 else 377 DoeLog(1) && (eLog() << Verbose(1) << "Vector " << temp << " would be outside of box domain." << endl); 378 } 379 return true; 380 } else { 381 DoeLog(1) && (eLog() << Verbose(1) << "CommandLineUI parsing error: Missing vectors for " << getTitle() << "." << endl); 382 return false; 383 } 384 } 385 386 CommandLineDialog::BoxCommandLineQuery::BoxCommandLineQuery(string title, string _description) : 387 Dialog::BoxQuery(title, _description) 388 {} 389 390 CommandLineDialog::BoxCommandLineQuery::~BoxCommandLineQuery() 391 {} 392 393 bool CommandLineDialog::BoxCommandLineQuery::handle() { 394 BoxValue temp; 395 if (CommandLineParser::getInstance().vm.count(getTitle())) { 396 temp = CommandLineParser::getInstance().vm[getTitle()].as< BoxValue >(); 397 Matrix M; 398 M.set(0,0, temp.xx); 399 M.set(0,1, temp.yx); 400 M.set(0,2, temp.zx); 401 M.set(1,0, temp.yx); 402 M.set(1,1, temp.yy); 403 M.set(1,2, temp.zy); 404 M.set(2,0, temp.zx); 405 M.set(2,1, temp.zy); 406 M.set(2,2, temp.zz); 407 tmp.setM(M); 408 return true; 409 } else { 410 DoeLog(1) && (eLog() << Verbose(1) << "CommandLineUI parsing error: Missing symmetric box matrix for " << getTitle() << "." << endl); 411 return false; 412 } 413 } 414 415 CommandLineDialog::ElementCommandLineQuery::ElementCommandLineQuery(string title, string _description) : 416 Dialog::ElementQuery(title, _description) 417 {} 418 419 CommandLineDialog::ElementCommandLineQuery::~ElementCommandLineQuery() 420 {} 421 422 bool CommandLineDialog::ElementCommandLineQuery::handle() { 423 // TODO: vector of ints and removing first is not correctly implemented yet. How to remove from a vector? 424 periodentafel *periode = World::getInstance().getPeriode(); 425 if (CommandLineParser::getInstance().vm.count(getTitle())) { 426 int Z = CommandLineParser::getInstance().vm[getTitle()].as< int >(); 427 tmp = periode->FindElement(Z); 428 ASSERT(tmp != NULL, "Invalid element specified in ElementCommandLineQuery"); 429 return true; 430 } else { 431 DoeLog(1) && (eLog() << Verbose(1) << "CommandLineUI parsing error: Missing element for " << getTitle() << "." << endl); 432 return false; 433 } 434 } 435 436 CommandLineDialog::ElementsCommandLineQuery::ElementsCommandLineQuery(string title, string _description) : 437 Dialog::ElementsQuery(title, _description) 438 {} 439 440 CommandLineDialog::ElementsCommandLineQuery::~ElementsCommandLineQuery() 441 {} 442 443 bool CommandLineDialog::ElementsCommandLineQuery::handle() { 444 // TODO: vector of ints and removing first is not correctly implemented yet. How to remove from a vector? 445 periodentafel *periode = World::getInstance().getPeriode(); 446 if (CommandLineParser::getInstance().vm.count(getTitle())) { 447 vector<int> AllElements = CommandLineParser::getInstance().vm[getTitle()].as< vector<int> >(); 448 for (vector<int>::iterator ZRunner = AllElements.begin(); ZRunner != AllElements.end(); ++ZRunner) { 449 temp = periode->FindElement(*ZRunner); 450 ASSERT(temp != NULL, "Invalid element specified in ElementCommandLineQuery"); 451 tmp.push_back(temp); 452 } 453 return true; 454 } else { 455 DoeLog(1) && (eLog() << Verbose(1) << "CommandLineUI parsing error: Missing elements for " << getTitle() << "." << endl); 456 return false; 457 } 458 } 109 /************************** Query Infrastructure ************************/ 110 /* ---> shifted to folder Query */ 111 /************************************************************************/
Note:
See TracChangeset
for help on using the changeset viewer.