Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/UIElements/TextDialog.cpp

    r8de8f7 r97ebf8  
    88#include <iostream>
    99
     10#include <Descriptors/AtomDescriptor.hpp>
     11#include <Descriptors/AtomIdDescriptor.hpp>
     12#include <Descriptors/MoleculeDescriptor.hpp>
     13#include <Descriptors/MoleculeIdDescriptor.hpp>
    1014#include "UIElements/TextDialog.hpp"
    1115
    1216#include "World.hpp"
    1317#include "periodentafel.hpp"
    14 #include "atom.hpp"
    15 #include "molecule.hpp"
    1618#include "log.hpp"
    1719#include "verbose.hpp"
    1820
     21#include "atom.hpp"
     22#include "element.hpp"
     23#include "molecule.hpp"
     24#include "vector.hpp"
     25
    1926using namespace std;
    2027
     
    2936
    3037
    31 void TextDialog::queryInt(const char* title, int* target){
    32   registerQuery(new IntTextQuery(title,target));
    33 }
    34 
    35 void TextDialog::queryDouble(const char* title, double* target){
    36   registerQuery(new DoubleTextQuery(title,target));
    37 }
    38 
    39 void TextDialog::queryString(const char* title, string* target){
    40   registerQuery(new StringTextQuery(title,target));
    41 }
    42 
    43 void TextDialog::queryMolecule(const char* title, molecule **target, MoleculeListClass *molecules) {
    44   registerQuery(new MoleculeTextQuery(title,target,molecules));
    45 }
    46 
    47 void TextDialog::queryVector(const char* title, Vector *target,const double *const cellSize, bool check) {
    48   registerQuery(new VectorTextQuery(title,target,cellSize,check));
    49 }
    50 
    51 void TextDialog::queryElement(const char* title, const element **target){
    52   registerQuery(new ElementTextQuery(title,target));
     38void TextDialog::queryEmpty(const char* title, string description){
     39  registerQuery(new EmptyTextQuery(title,description));
     40}
     41
     42void TextDialog::queryBoolean(const char* title, bool* target, string description){
     43  registerQuery(new BooleanTextQuery(title,target,description));
     44}
     45
     46void TextDialog::queryInt(const char* title, int* target, string description){
     47  registerQuery(new IntTextQuery(title,target,description));
     48}
     49
     50void TextDialog::queryDouble(const char* title, double* target, string description){
     51  registerQuery(new DoubleTextQuery(title,target,description));
     52}
     53
     54void TextDialog::queryString(const char* title, string* target, string description){
     55  registerQuery(new StringTextQuery(title,target,description));
     56}
     57
     58void TextDialog::queryAtom(const char* title, atom **target, string description) {
     59  registerQuery(new AtomTextQuery(title,target,description));
     60}
     61
     62void TextDialog::queryMolecule(const char* title, molecule **target, string description) {
     63  registerQuery(new MoleculeTextQuery(title,target,description));
     64}
     65
     66void TextDialog::queryVector(const char* title, Vector *target,const double *const cellSize, bool check, string description) {
     67  registerQuery(new VectorTextQuery(title,target,cellSize,check,description));
     68}
     69
     70void TextDialog::queryBox(const char* title,double ** const cellSize, string description) {
     71  registerQuery(new BoxTextQuery(title,cellSize,description));
     72}
     73
     74void TextDialog::queryElement(const char* title, const element **target, string description){
     75  registerQuery(new ElementTextQuery(title,target,description));
    5376}
    5477
    5578/************************** Query Infrastructure ************************/
    5679
    57 TextDialog::IntTextQuery::IntTextQuery(string title,int *_target) :
    58     Dialog::IntQuery(title,_target)
     80TextDialog::EmptyTextQuery::EmptyTextQuery(string title, std::string _description) :
     81    Dialog::EmptyQuery(title,_description)
     82{}
     83
     84TextDialog::EmptyTextQuery::~EmptyTextQuery() {}
     85
     86bool TextDialog::EmptyTextQuery::handle() {
     87  cout << "Message of " << getTitle() << ":\n" << getDescription() << "\n";
     88  return true;
     89}
     90
     91TextDialog::IntTextQuery::IntTextQuery(string title, int * _target, std::string _description) :
     92    Dialog::IntQuery(title,_target,_description)
    5993{}
    6094
     
    79113}
    80114
    81 TextDialog::StringTextQuery::StringTextQuery(string title,string *_target) :
    82     Dialog::StringQuery(title,_target)
     115TextDialog::BooleanTextQuery::BooleanTextQuery(string title, bool * _target, std::string _description) :
     116    Dialog::BooleanQuery(title,_target,_description)
     117{}
     118
     119TextDialog::BooleanTextQuery::~BooleanTextQuery() {}
     120
     121bool TextDialog::BooleanTextQuery::handle() {
     122  bool badInput = false;
     123  char input = ' ';
     124  do{
     125    badInput = false;
     126    Log() << Verbose(0) << getTitle();
     127    cin >> input;
     128    if ((input == 'y' ) || (input == 'Y')) {
     129      tmp = true;
     130    } else if ((input == 'n' ) || (input == 'N')) {
     131      tmp = false;
     132    } else {
     133      badInput=true;
     134      cin.clear();
     135      cin.ignore(std::numeric_limits<streamsize>::max(),'\n');
     136      Log() << Verbose(0) << "Input was not of [yYnN]!" << endl;
     137    }
     138  } while(badInput);
     139  // clear the input buffer of anything still in the line
     140  cin.ignore(std::numeric_limits<streamsize>::max(),'\n');
     141  return true;
     142}
     143
     144TextDialog::StringTextQuery::StringTextQuery(string title,string *_target, std::string _description) :
     145    Dialog::StringQuery(title,_target,_description)
    83146{}
    84147
     
    91154}
    92155
    93 TextDialog::DoubleTextQuery::DoubleTextQuery(string title,double *_target) :
    94     Dialog::DoubleQuery(title,_target)
     156TextDialog::DoubleTextQuery::DoubleTextQuery(string title,double *_target, std::string _description) :
     157    Dialog::DoubleQuery(title,_target,_description)
    95158{}
    96159
     
    114177}
    115178
    116 TextDialog::MoleculeTextQuery::MoleculeTextQuery(string title, molecule **_target, MoleculeListClass *_molecules) :
    117     Dialog::MoleculeQuery(title,_target,_molecules)
     179TextDialog::AtomTextQuery::AtomTextQuery(string title, atom **_target, std::string _description) :
     180    Dialog::AtomQuery(title,_target,_description)
     181{}
     182
     183TextDialog::AtomTextQuery::~AtomTextQuery() {}
     184
     185bool TextDialog::AtomTextQuery::handle() {
     186  int idxOfAtom=0;
     187  bool badInput = false;
     188  do{
     189    badInput = false;
     190    Log() << Verbose(0) << getTitle();
     191    cin >> idxOfAtom;
     192    if(cin.fail()){
     193      badInput = true;
     194      cin.clear();
     195      cin.ignore(std::numeric_limits<streamsize>::max(),'\n');
     196      Log() << Verbose(0) << "Input was not a number!" << endl;
     197      continue;
     198    }
     199
     200    tmp = World::getInstance().getAtom(AtomById(idxOfAtom));
     201    if(!tmp && idxOfAtom!=-1){
     202      Log() << Verbose(0) << "Invalid Atom Index" << endl;
     203      badInput = true;
     204    }
     205
     206  } while(badInput);
     207  cin.ignore(std::numeric_limits<streamsize>::max(),'\n');
     208  return (idxOfAtom!=-1);
     209}
     210
     211TextDialog::MoleculeTextQuery::MoleculeTextQuery(string title, molecule **_target, std::string _description) :
     212    Dialog::MoleculeQuery(title,_target,_description)
    118213{}
    119214
     
    135230    }
    136231
    137     tmp = molecules->ReturnIndex(idxOfMol);
     232    tmp = World::getInstance().getMolecule(MoleculeById(idxOfMol));
    138233    if(!tmp && idxOfMol!=-1){
    139234      Log() << Verbose(0) << "Invalid Molecule Index" << endl;
     
    146241}
    147242
    148 TextDialog::VectorTextQuery::VectorTextQuery(std::string title, Vector *_target, const double *const _cellSize, bool _check) :
    149     Dialog::VectorQuery(title,_target,_cellSize,_check)
     243TextDialog::VectorTextQuery::VectorTextQuery(std::string title, Vector *_target, const double *const _cellSize, bool _check, std::string _description) :
     244    Dialog::VectorQuery(title,_target,_cellSize,_check,_description)
    150245{}
    151246
     
    154249
    155250bool TextDialog::VectorTextQuery::handle() {
    156  Log() << Verbose(0) << getTitle();
    157  tmp->AskPosition(cellSize,check);
    158  return true;
    159 }
    160 
    161 
    162 TextDialog::ElementTextQuery::ElementTextQuery(std::string title, const element **target) :
    163     Dialog::ElementQuery(title,target)
     251  Log() << Verbose(0) << getTitle();
     252
     253  char coords[3] = {'x','y','z'};
     254  int j = -1;
     255  for (int i=0;i<3;i++) {
     256    j += i+1;
     257    do {
     258      Log() << Verbose(0) << coords[i] << "[0.." << cellSize[j] << "]: ";
     259      cin >> (*tmp)[i];
     260    } while ((((*tmp)[i] < 0) || ((*tmp)[i] >= cellSize[j])) && (check));
     261  }
     262  return true;
     263}
     264
     265TextDialog::BoxTextQuery::BoxTextQuery(std::string title, double ** const _cellSize, std::string _description) :
     266    Dialog::BoxQuery(title,_cellSize,_description)
     267{}
     268
     269TextDialog::BoxTextQuery::~BoxTextQuery()
     270{}
     271
     272bool TextDialog::BoxTextQuery::handle() {
     273  Log() << Verbose(0) << getTitle();
     274
     275  std::string coords[6] = {"xx","xy","xz", "yy", "yz", "zz"};
     276  for (int i=0;i<6;i++) {
     277    Log() << Verbose(0) << coords[i] << ": ";
     278    cin >> tmp[i];
     279  }
     280  return true;
     281}
     282
     283TextDialog::ElementTextQuery::ElementTextQuery(std::string title, const element **target, std::string _description) :
     284    Dialog::ElementQuery(title,target,_description)
    164285{}
    165286
Note: See TracChangeset for help on using the changeset viewer.