SGSolve
sgrisksharinghandler.hpp
1 // This file is part of the SGSolve library for stochastic games
2 // Copyright (C) 2019 Benjamin A. Brooks
3 //
4 // SGSolve free software: you can redistribute it and/or modify it
5 // under the terms of the GNU General Public License as published by
6 // the Free Software Foundation, either version 3 of the License, or
7 // (at your option) any later version.
8 //
9 // SGSolve is distributed in the hope that it will be useful, but
10 // WITHOUT ANY WARRANTY; without even the implied warranty of
11 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 // General Public License for more details.
13 //
14 // You should have received a copy of the GNU General Public License
15 // along with this program. If not, see
16 // <http://www.gnu.org/licenses/>.
17 //
18 // Benjamin A. Brooks
19 // ben@benjaminbrooks.net
20 // Chicago, IL
21 
22 #ifndef SGRISKSHARINGHANDLER_HPP
23 #define SGRISKSHARINGHANDLER_HPP
24 
25 #include <QWidget>
26 #include <QMenuBar>
27 #include <QAction>
28 #include <QFormLayout>
29 #include <QLineEdit>
30 #include <QPushButton>
31 #include <QCheckBox>
32 #include <QDialog>
33 #include <QValidator>
34 
36 
39 class SGIntAttrEdit : public QLineEdit
40 {
41  Q_OBJECT;
42 private:
44  int & attr;
45 
46 public:
48  SGIntAttrEdit(int & _attr)
49  : QLineEdit(), attr(_attr)
50  {
51  setText(QString::number(attr));
52  connect(this,SIGNAL(textChanged(const QString &)),
53  this,SLOT(changeAttr(const QString &)));
54  } // constructor
55 
56 private slots:
58  void changeAttr(const QString & text)
59  {
60  attr = text.toInt();
61  }
62 }; // SGIntAttrEdit
63 
65 
68 class SGDblAttrEdit : public QLineEdit
69 {
70  Q_OBJECT;
71 private:
73  double & attr;
74 
75 public:
77  SGDblAttrEdit(double & _attr)
78  : QLineEdit(), attr(_attr)
79  {
80  setText(QString::number(attr));
81  connect(this,SIGNAL(textChanged(const QString &)),
82  this,SLOT(changeAttr(const QString &)));
83  } // constructor
84 
85 private slots:
87  void changeAttr(const QString & text)
88  {
89  attr = text.toDouble();
90  }
91 }; // SGDblAttrEdit
92 
94 
97 class SGRiskSharingHandler : public QDialog
98 {
99  Q_OBJECT;
100 
101 private:
102  int & numEndowments;
103  int & c2e;
104  double & persistence;
105 
106 public:
108  SGRiskSharingHandler(QWidget * parent,
109  int & _numEndowments,
110  int & _c2e,
111  double & _persistence):
112  QDialog(parent),
113  numEndowments(_numEndowments),
114  c2e(_c2e),
115  persistence(_persistence)
116  {
117  setWindowTitle(tr("SGViewer: Risk sharing game parameters"));
118  setWindowModality(Qt::WindowModal);
119 
120  setMinimumSize(parent->size()/2);
121 
122  QPushButton * okButton = new QPushButton(QString("OK"));
123  QPushButton * cancelButton = new QPushButton(QString("Cancel"));
124  connect(okButton,SIGNAL(clicked()),
125  this,SLOT(accept()));
126  connect(cancelButton,SIGNAL(clicked()),
127  this,SLOT(reject()));
128 
129  QVBoxLayout * mainLayout = new QVBoxLayout();
130 
131  QFormLayout * editLayout = new QFormLayout ();
132  // Construct and add the double parameter edits
133  SGIntAttrEdit * endowmentEdit = new SGIntAttrEdit(numEndowments);
134  QIntValidator * endowmentValidator = new QIntValidator();
135  endowmentValidator->setBottom(1);
136 
137  SGIntAttrEdit * c2eEdit = new SGIntAttrEdit(c2e);
138  QIntValidator * c2eValidator = new QIntValidator();
139  c2eValidator->setBottom(1);
140  c2eEdit->setValidator(c2eValidator);
141 
142  SGDblAttrEdit * persistenceEdit = new SGDblAttrEdit(persistence);
143  QDoubleValidator * persistenceValidator = new QDoubleValidator();
144  persistenceValidator->setBottom(0);
145  persistenceEdit->setValidator(persistenceValidator);
146 
147  editLayout->addRow(QString("Number of endowments:"),
148  endowmentEdit);
149  editLayout->addRow(QString("Number of consumption levels per endowment:"),
150  c2eEdit);
151  editLayout->addRow(QString("Persistence:"),
152  persistenceEdit);
153 
154  mainLayout->addLayout(editLayout);
155  QHBoxLayout * buttonLayout = new QHBoxLayout();
156  buttonLayout->addWidget(cancelButton);
157  buttonLayout->addWidget(okButton);
158  okButton->setDefault(true);
159  cancelButton->setDefault(false);
160 
161  mainLayout->addLayout(buttonLayout);
162 
163  setLayout(mainLayout);
164  }
167 
168 };
169 
170 #endif
SGIntAttrEdit::SGIntAttrEdit
SGIntAttrEdit(int &_attr)
Constructor.
Definition: sgrisksharinghandler.hpp:48
SGRiskSharingHandler::SGRiskSharingHandler
SGRiskSharingHandler(QWidget *parent, int &_numEndowments, int &_c2e, double &_persistence)
Constructor.
Definition: sgrisksharinghandler.hpp:108
SGDblAttrEdit
A widget for editing double attributes.
Definition: sgrisksharinghandler.hpp:69
SGDblAttrEdit::SGDblAttrEdit
SGDblAttrEdit(double &_attr)
Constructor.
Definition: sgrisksharinghandler.hpp:77
SGRiskSharingHandler
A widget for setting parameters of the risk sharing game.
Definition: sgrisksharinghandler.hpp:98
SGIntAttrEdit
A widget for editing integer attributes.
Definition: sgrisksharinghandler.hpp:40
SGDblAttrEdit::attr
double & attr
Reference to the attribute.
Definition: sgrisksharinghandler.hpp:70
SGIntAttrEdit::attr
int & attr
Reference to the attribute.
Definition: sgrisksharinghandler.hpp:41
SGDblAttrEdit::changeAttr
void changeAttr(const QString &text)
Slot called when QLineEdit is edited.
Definition: sgrisksharinghandler.hpp:87
SGRiskSharingHandler::~SGRiskSharingHandler
virtual ~SGRiskSharingHandler()
Destructor.
Definition: sgrisksharinghandler.hpp:166
SGIntAttrEdit::changeAttr
void changeAttr(const QString &text)
Slot called when QLineEdit is edited.
Definition: sgrisksharinghandler.hpp:58