- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
src/UIElements/CommandLineUI/CommandLineDialog.cpp
r94d131 r112b09 6 6 */ 7 7 8 8 #include "Helpers/MemDebug.hpp" 9 10 #include <cassert> 9 11 #include <iostream> 10 #include <vector>11 12 12 13 #include <Descriptors/AtomDescriptor.hpp> … … 15 16 #include <Descriptors/MoleculeIdDescriptor.hpp> 16 17 #include "CommandLineUI/CommandLineDialog.hpp" 17 18 #include "Actions/Values.hpp"19 18 20 19 #include "element.hpp" … … 80 79 } 81 80 82 void CommandLineDialog::queryElement(const char* title, std::vector<element *>*target, string _description){81 void CommandLineDialog::queryElement(const char* title, const element **target, string _description){ 83 82 registerQuery(new ElementCommandLineQuery(title,target, _description)); 84 83 } … … 107 106 tmp = CommandLineParser::getInstance().vm[getTitle()].as<int>(); 108 107 return true; 109 } else { 110 DoeLog(1) && (eLog() << Verbose(1) << "CommandLineUI parsing error: Missing integer for " << getTitle() << "." << endl); 111 return false; 112 } 108 } else 109 return false; 113 110 } 114 111 … … 120 117 121 118 bool CommandLineDialog::BooleanCommandLineQuery::handle() { 122 if (CommandLineParser::getInstance().vm.count(getTitle())) { 123 tmp = CommandLineParser::getInstance().vm[getTitle()].as<bool>(); 124 return true; 125 } else { 126 DoeLog(1) && (eLog() << Verbose(1) << "CommandLineUI parsing error: Missing boolean for " << getTitle() << "." << endl); 127 return false; 128 } 119 bool badInput = false; 120 char input = ' '; 121 do{ 122 badInput = false; 123 Log() << Verbose(0) << getTitle(); 124 cin >> input; 125 if ((input == 'y' ) || (input == 'Y')) { 126 tmp = true; 127 } else if ((input == 'n' ) || (input == 'N')) { 128 tmp = false; 129 } else { 130 badInput=true; 131 cin.clear(); 132 cin.ignore(std::numeric_limits<streamsize>::max(),'\n'); 133 Log() << Verbose(0) << "Input was not of [yYnN]!" << endl; 134 } 135 } while(badInput); 136 // clear the input buffer of anything still in the line 137 cin.ignore(std::numeric_limits<streamsize>::max(),'\n'); 138 return true; 129 139 } 130 140 … … 139 149 tmp = CommandLineParser::getInstance().vm[getTitle()].as<string>(); 140 150 return true; 141 } else { 142 DoeLog(1) && (eLog() << Verbose(1) << "CommandLineUI parsing error: Missing string for " << getTitle() << "." << endl); 143 return false; 144 } 151 } else 152 return false; 145 153 } 146 154 … … 155 163 tmp = CommandLineParser::getInstance().vm[getTitle()].as<double>(); 156 164 return true; 157 } else { 158 DoeLog(1) && (eLog() << Verbose(1) << "CommandLineUI parsing error: Missing double for " << getTitle() << "." << endl); 159 return false; 160 } 165 } else 166 return false; 161 167 } 162 168 … … 173 179 tmp = World::getInstance().getAtom(AtomById(IdxOfAtom)); 174 180 return true; 175 } else { 176 DoeLog(1) && (eLog() << Verbose(1) << "CommandLineUI parsing error: Missing atom for " << getTitle() << "." << endl); 177 return false; 178 } 181 } else 182 return false; 179 183 } 180 184 … … 195 199 tmp = NULL; 196 200 return true; 197 } else { 198 DoeLog(1) && (eLog() << Verbose(1) << "CommandLineUI parsing error: Missing molecule for " << getTitle() << "." << endl); 199 return false; 200 } 201 } else 202 return false; 201 203 } 202 204 … … 209 211 210 212 bool CommandLineDialog::VectorCommandLineQuery::handle() { 211 VectorValue temp; 212 if (CommandLineParser::getInstance().vm.count(getTitle())) { 213 temp = CommandLineParser::getInstance().vm[getTitle()].as< VectorValue >(); 214 tmp->at(0) = temp.x; 215 tmp->at(1) = temp.y; 216 tmp->at(2) = temp.z; 217 return true; 218 } else { 219 DoeLog(1) && (eLog() << Verbose(1) << "CommandLineUI parsing error: Missing vector for " << getTitle() << "." << endl); 220 return false; 221 } 213 vector<double> temp; 214 if (CommandLineParser::getInstance().vm.count(getTitle())) { 215 temp = CommandLineParser::getInstance().vm[getTitle()].as<vector<double> >(); 216 assert((temp.size() == 3) && "Vector from command line does not have three components."); 217 for (int i=0;i<NDIM;i++) 218 tmp->at(i) = temp[i]; 219 return true; 220 } else 221 return false; 222 222 } 223 223 … … 231 231 232 232 bool CommandLineDialog::BoxCommandLineQuery::handle() { 233 BoxValue temp; 234 if (CommandLineParser::getInstance().vm.count(getTitle())) { 235 temp = CommandLineParser::getInstance().vm[getTitle()].as< BoxValue >(); 236 tmp[0] = temp.xx; 237 tmp[1] = temp.xy; 238 tmp[2] = temp.xz; 239 tmp[3] = temp.yy; 240 tmp[4] = temp.yz; 241 tmp[5] = temp.zz; 242 return true; 243 } else { 244 DoeLog(1) && (eLog() << Verbose(1) << "CommandLineUI parsing error: Missing symmetric box matrix for " << getTitle() << "." << endl); 245 return false; 246 } 247 } 248 249 CommandLineDialog::ElementCommandLineQuery::ElementCommandLineQuery(string title, std::vector<element *> *target, string _description) : 233 vector<double> temp; 234 if (CommandLineParser::getInstance().vm.count(getTitle())) { 235 temp = CommandLineParser::getInstance().vm[getTitle()].as<vector<double> >(); 236 assert((temp.size() == 6) && "Symmetric box matrix from command line does not have six components."); 237 for (int i=0;i<6;i++) { 238 tmp[i] = temp[i]; 239 } 240 return true; 241 } else 242 return false; 243 } 244 245 CommandLineDialog::ElementCommandLineQuery::ElementCommandLineQuery(string title, const element **target, string _description) : 250 246 Dialog::ElementQuery(title,target, _description) 251 247 {} … … 256 252 bool CommandLineDialog::ElementCommandLineQuery::handle() { 257 253 // TODO: vector of ints and removing first is not correctly implemented yet. How to remove from a vector? 258 periodentafel *periode = World::getInstance().getPeriode(); 259 element *elemental = NULL; 254 int Z; 260 255 if (CommandLineParser::getInstance().vm.count(getTitle())) { 261 256 vector<int> AllElements = CommandLineParser::getInstance().vm[getTitle()].as< vector<int> >(); 262 for (vector<int>::iterator ZRunner = AllElements.begin(); ZRunner != AllElements.end(); ++ZRunner) { 263 elemental = periode->FindElement(*ZRunner); 264 ASSERT(elemental != NULL, "Invalid element specified in ElementCommandLineQuery"); 265 elements.push_back(elemental); 266 } 267 return true; 268 } else { 269 DoeLog(1) && (eLog() << Verbose(1) << "CommandLineUI parsing error: Missing element for " << getTitle() << "." << endl); 270 return false; 271 } 272 } 257 vector<int>::iterator ElementRunner = AllElements.begin(); 258 Z = *ElementRunner; 259 // TODO: So far, this does not really erase the element in the parsed list. 260 AllElements.erase(ElementRunner); 261 tmp = World::getInstance().getPeriode()->FindElement(Z); 262 return true; 263 } else 264 return false; 265 }
Note:
See TracChangeset
for help on using the changeset viewer.