Changeset 45f5d6 for src/UIElements


Ignore:
Timestamp:
Jan 13, 2010, 10:22:29 AM (15 years ago)
Author:
Tillmann Crueger <crueger@…>
Branches:
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
Children:
7aa000
Parents:
aab2b1
Message:

Changed dialog structure to use objects for queries.

Location:
src/UIElements
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • TabularUnified src/UIElements/Dialog.cpp

    raab2b1 r45f5d6  
    1414Dialog::Dialog()
    1515{
    16   // TODO Auto-generated constructor stub
    17 
    1816}
    1917
    2018Dialog::~Dialog()
    2119{
    22   // TODO Auto-generated destructor stub
     20  list<Query*>::iterator iter;
     21  for(iter=queries.begin();iter!=queries.end();iter++){
     22    delete (*iter);
     23  }
    2324}
    2425
    25 void Dialog::queryInt(const char *_title, int *_target) {
    26   Query q;
    27   q.title = _title;
    28   q.type = Int;
    29   q.target = (void*) _target;
    30 
    31   queries.push_back(q);
     26void Dialog::registerQuery(Query *query){
     27  queries.push_back(query);
    3228}
    3329
    34 void Dialog::queryString(const char *_title, string *_target) {
    35     Query q;
    36     q.title = _title;
    37     q.type = String;
    38     q.target = (void*) _target;
    39 
    40     queries.push_back(q);
     30bool Dialog::display(){
     31  list<Query*>::iterator iter;
     32  bool retval = true;
     33  for(iter=queries.begin(); iter!=queries.end(); iter++){
     34    retval &= (*iter)->handle();
     35    // if any query fails (is canceled), we can end the handling process
     36    if(!retval)
     37      break;
     38  }
     39  if (retval){
     40    // if all queries succeeded we can set the targets to appropriate values
     41    for(iter=queries.begin(); iter!=queries.end(); iter++) {
     42      (*iter)->setResult();
     43    }
     44  }
     45  return retval;
    4146}
    4247
    43 void Dialog::display(){
    44   list<Query>::iterator iter;
    45   for(iter=queries.begin(); iter!=queries.end(); iter++){
    46     switch((*iter).type) {
    47       case Int:
    48         handleInt((*iter).title,(int*)((*iter).target));
    49         break;
    50       case String:
    51         handleString((*iter).title,(string*)((*iter).target));
    52         break;
    53       default:
    54         assert(0 && "This type of query does not seem to exist... Something is seriously wrong");
    55         break;
    56     }
    57   }
     48Dialog::Query::Query(string _title) :
     49    title(_title)
     50{}
     51
     52Dialog::Query::~Query() {}
     53
     54const std::string Dialog::Query::getTitle() const{
     55  return title;
    5856}
     57
     58Dialog::IntQuery::IntQuery(string title,int *_target) :
     59    Query(title), target(_target)
     60{}
     61
     62Dialog::IntQuery::~IntQuery() {}
     63
     64void Dialog::IntQuery::setResult() {
     65  *target = tmp;
     66}
     67
     68Dialog::StringQuery::StringQuery(string title,string *_target) :
     69    Query(title), target(_target)
     70{}
     71
     72Dialog::StringQuery::~StringQuery() {};
     73
     74void Dialog::StringQuery::setResult() {
     75  *target = tmp;
     76}
     77
  • TabularUnified src/UIElements/Dialog.hpp

    raab2b1 r45f5d6  
    1212#include<list>
    1313
     14class MoleculeListClass;
     15class Molecule;
     16
    1417class Dialog
    1518{
     
    1821  virtual ~Dialog();
    1922
    20   void queryInt(const char *, int *);
    21   void queryString(const char*, std::string *);
     23  virtual void queryInt(const char *, int *)=0;
     24  virtual void queryString(const char*, std::string *)=0;
     25 // virtual void queryMolecule(const char*,MoleculeListClass*,Molecule*)=0;
    2226
    23   virtual void display();
     27  virtual bool display();
    2428
    2529protected:
    26   virtual void handleInt(std::string,int *)=0;
    27   virtual void handleString(std::string,std::string *)=0;
    28 
    29 
    30 private:
    3130  // methodology for handling queries
    3231  // all queries are stored and then performed at appropriate times
    3332
    3433  //these queries can be handled by this dialog
    35   enum QueryType {Int,String};
    36   struct Query {
     34
     35  //TODO: Find a way to reduce complexity...
     36  //needs O(N*M) query classes, where N is the number of query types and M is the number of GUIs
     37  //usual approach for reducing inheritance complexity (strategy pattern) does not work,
     38  //due to lack of common code for query types as well as GUI-Types (all subtypes differ a lot)
     39
     40  //base class for all queries
     41  class Query {
     42  public:
     43    Query(std::string _title);
     44    ~Query();
     45    virtual bool handle()=0;
     46    virtual void setResult()=0;
     47  protected:
     48    const std::string getTitle() const;
     49  private:
    3750    std::string title;
    38     QueryType type;
    39     void *target;
    4051  };
    4152
    42   std::list<Query> queries;
     53  //Specialized classes for certain types. GUI-Types are not specialized at this time
     54  class IntQuery : public Query {
     55  public:
     56    IntQuery(std::string title,int *_target);
     57    ~IntQuery();
     58    virtual bool handle()=0;
     59    virtual void setResult();
     60  protected:
     61    int tmp;
     62  private:
     63    int *target;
     64  };
     65
     66  class StringQuery : public Query {
     67  public:
     68    StringQuery(std::string title,std::string *_target);
     69    ~StringQuery();
     70    virtual bool handle()=0;
     71    virtual void setResult();
     72  protected:
     73    std::string tmp;
     74  private:
     75    std::string *target;
     76  };
     77
     78void registerQuery(Query* query);
     79
     80private:
     81  std::list<Query*> queries;
    4382
    4483};
  • TabularUnified src/UIElements/TextDialog.cpp

    raab2b1 r45f5d6  
    1717TextDialog::TextDialog()
    1818{
    19   // TODO Auto-generated constructor stub
    20 
    2119}
    2220
    2321TextDialog::~TextDialog()
    2422{
    25   // TODO Auto-generated destructor stub
    2623}
    2724
    28 void TextDialog::handleInt(std::string title, int *target) {
    29   Log() << Verbose(0) << title;
    30   cin >> (*target);
     25void TextDialog::queryInt(const char* title, int* target){
     26  registerQuery(new IntTextQuery(title,target));
    3127}
    3228
    33 void TextDialog::handleString(std::string title, string *target) {
    34   string input;
    35   Log() << Verbose(0) << title;
    36   cin >> (*target);
     29void TextDialog::queryString(const char* title, string* target){
     30  registerQuery(new StringTextQuery(title,target));
    3731}
     32
     33TextDialog::IntTextQuery::IntTextQuery(string title,int *_target) :
     34    Dialog::IntQuery(title,_target)
     35{}
     36
     37TextDialog::IntTextQuery::~IntTextQuery() {}
     38
     39bool TextDialog::IntTextQuery::handle() {
     40  Log() << Verbose(0) << IntQuery::getTitle();
     41  cin >> tmp;
     42  return true;
     43}
     44
     45TextDialog::StringTextQuery::StringTextQuery(string title,string *_target) :
     46    Dialog::StringQuery(title,_target)
     47{}
     48
     49TextDialog::StringTextQuery::~StringTextQuery() {}
     50
     51bool TextDialog::StringTextQuery::handle() {
     52  Log() << Verbose(0) << StringQuery::getTitle();
     53  cin >> tmp;
     54  return true;
     55}
  • TabularUnified src/UIElements/TextDialog.hpp

    raab2b1 r45f5d6  
    99#define TEXTDIALOG_HPP_
    1010
     11#include <string>
     12
    1113#include "UIElements/Dialog.hpp"
    1214
     
    1719  virtual ~TextDialog();
    1820
    19   virtual void handleInt(std::string,int *);
    20   virtual void handleString(std::string,std::string *);
     21  virtual void queryInt(const char *, int *);
     22  virtual void queryString(const char*, std::string *);
     23
     24protected:
     25  // specialized stuff for text queries
     26  class IntTextQuery : public Dialog::IntQuery {
     27  public:
     28    IntTextQuery(std::string title, int *_target);
     29    ~IntTextQuery();
     30    virtual bool handle();
     31  };
     32
     33  class StringTextQuery : public Dialog::StringQuery {
     34  public:
     35    StringTextQuery(std::string title, std::string *_target);
     36    ~StringTextQuery();
     37    virtual bool handle();
     38  };
    2139};
    2240
Note: See TracChangeset for help on using the changeset viewer.