diff --git a/src/transporterdialog.cpp b/src/transporterdialog.cpp new file mode 100644 --- /dev/null +++ b/src/transporterdialog.cpp @@ -0,0 +1,106 @@ +/* + * + * This file is part of the Virtual Leaf. + * + * The Virtual Leaf is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * The Virtual Leaf is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with the Virtual Leaf. If not, see . + * + * Copyright 2010 Roeland Merks. + * + */ + +#include +#include +#include +#include "canvas.h" +#include "transporterdialog.h" + +static const std::string _module_id("$Id$"); + +TransporterDialog::TransporterDialog(Wall *w, CellBase *c, int wn, QWidget *parent) + : wall(w), cell(c), wall_num(wn), QDialog(parent) +{ + int frameStyle = QFrame::Plain | QFrame::NoFrame; + QPushButton *ok = new QPushButton(tr("Ok")); + QPushButton *cancel = new QPushButton(tr("Cancel")); + QGridLayout *t_grid = new QGridLayout; // transporter grid + + // connect the slots + connect(ok, SIGNAL(clicked()), this, SLOT(setTransporterValues())); + connect(cancel, SIGNAL(clicked()), this, SLOT(close())); + + // compose a label for the dialog box + std::stringstream label_text; + label_text << "C("<< wall->C1()->Index() << "," << wall->C2()->Index() << "), N(" << wall->N1()->Index() << "," << wall->N2()->Index() << ")"; + + // retrieve the current transporters + QVector transporters; // transporter vector + ntransporters = cell->NChem(); // size of transporter vector + for (int i=0; iTransporters1(i) : wall->Transporters2(i)); // dependent on the wall number of course. + } + + // iterate over the vector of transporter values making a label/edit line for each + for (int i=0; isetFrameStyle(frameStyle); + label->setText(QString("%1").arg(i+1)); // cardinal numbering + + // line editor + QLineEdit *editor = new QLineEdit(); + editors << editor; + editor->setValidator(new QDoubleValidator(editor)); // validator settings + + // assign the current transporter value + QString n; + editor->setText(n.setNum(transporters[i])); + + // insert the label and editor into the transporter grid + t_grid->addWidget(label, i, 0); + t_grid->addWidget(editor, i, 1); + } + + // add OK and Cancel buttons + QGridLayout *b_grid = new QGridLayout; // button grid + b_grid->addWidget(ok, 0, 0); + b_grid->addWidget(cancel, 0, 1); + + // add both transporter and button grids to the box layout widget + QVBoxLayout *layout = new QVBoxLayout; + layout->addLayout(t_grid); + layout->addLayout(b_grid); + setLayout(layout); + + setWindowTitle(tr(label_text.str().c_str())); +} + +void TransporterDialog::setTransporterValues(){ + + // iterate over the editor widgets soliciting their values and setting the wall's transporters accordingly. + for (int i=0; itext().toDouble() << endl; + #endif + if (wall_num == 1) + wall->setTransporters1(i, editors[i]->text().toDouble()); + else + wall->setTransporters2(i, editors[i]->text().toDouble()); + } + editors.resize(0); + close(); +} + +// finis +