complete implementation of variable setting dialog

This commit is contained in:
Axel Kohlmeyer
2023-08-12 10:08:02 -04:00
parent 9110c23fcb
commit 62b4318801
5 changed files with 118 additions and 21 deletions

View File

@ -271,35 +271,35 @@ void LammpsGui::update_recents(const QString &filename)
ui->action_1->setVisible(false); ui->action_1->setVisible(false);
if ((recent.size() > 0) && !recent[0].isEmpty()) { if ((recent.size() > 0) && !recent[0].isEmpty()) {
QFileInfo fi(recent[0]); QFileInfo fi(recent[0]);
ui->action_1->setText(QString("1. ") + fi.fileName()); ui->action_1->setText(QString("&1. ") + fi.fileName());
ui->action_1->setData(recent[0]); ui->action_1->setData(recent[0]);
ui->action_1->setVisible(true); ui->action_1->setVisible(true);
} }
ui->action_2->setVisible(false); ui->action_2->setVisible(false);
if ((recent.size() > 1) && !recent[1].isEmpty()) { if ((recent.size() > 1) && !recent[1].isEmpty()) {
QFileInfo fi(recent[1]); QFileInfo fi(recent[1]);
ui->action_2->setText(QString("2. ") + fi.fileName()); ui->action_2->setText(QString("&2. ") + fi.fileName());
ui->action_2->setData(recent[1]); ui->action_2->setData(recent[1]);
ui->action_2->setVisible(true); ui->action_2->setVisible(true);
} }
ui->action_3->setVisible(false); ui->action_3->setVisible(false);
if ((recent.size() > 2) && !recent[2].isEmpty()) { if ((recent.size() > 2) && !recent[2].isEmpty()) {
QFileInfo fi(recent[2]); QFileInfo fi(recent[2]);
ui->action_3->setText(QString("3. ") + fi.fileName()); ui->action_3->setText(QString("&3. ") + fi.fileName());
ui->action_3->setData(recent[2]); ui->action_3->setData(recent[2]);
ui->action_3->setVisible(true); ui->action_3->setVisible(true);
} }
ui->action_4->setVisible(false); ui->action_4->setVisible(false);
if ((recent.size() > 3) && !recent[3].isEmpty()) { if ((recent.size() > 3) && !recent[3].isEmpty()) {
QFileInfo fi(recent[3]); QFileInfo fi(recent[3]);
ui->action_4->setText(QString("4. ") + fi.fileName()); ui->action_4->setText(QString("&4. ") + fi.fileName());
ui->action_4->setData(recent[3]); ui->action_4->setData(recent[3]);
ui->action_4->setVisible(true); ui->action_4->setVisible(true);
} }
ui->action_5->setVisible(false); ui->action_5->setVisible(false);
if ((recent.size() > 4) && !recent[4].isEmpty()) { if ((recent.size() > 4) && !recent[4].isEmpty()) {
QFileInfo fi(recent[4]); QFileInfo fi(recent[4]);
ui->action_5->setText(QString("5. ") + fi.fileName()); ui->action_5->setText(QString("&5. ") + fi.fileName());
ui->action_5->setData(recent[4]); ui->action_5->setData(recent[4]);
ui->action_5->setVisible(true); ui->action_5->setVisible(true);
} }
@ -898,7 +898,10 @@ void LammpsGui::edit_variables()
{ {
QList<QPair<QString, QString>> newvars = variables; QList<QPair<QString, QString>> newvars = variables;
SetVariables vars(newvars); SetVariables vars(newvars);
if (vars.exec() == QDialog::Accepted) variables = newvars; if (vars.exec() == QDialog::Accepted) {
variables = newvars;
lammps.close();
}
} }
void LammpsGui::preferences() void LammpsGui::preferences()
@ -968,6 +971,18 @@ void LammpsGui::start_lammps()
lammps_args.push_back(mystrdup("screen")); lammps_args.push_back(mystrdup("screen"));
} }
// add variables, if defined
for (auto &var : variables) {
QString name = var.first;
QString value = var.second;
if (!name.isEmpty() && !value.isEmpty()) {
lammps_args.push_back(mystrdup("-var"));
lammps_args.push_back(mystrdup(name.toStdString()));
for (const auto &v : value.split(' '))
lammps_args.push_back(mystrdup(v.toStdString()));
}
}
char **args = lammps_args.data(); char **args = lammps_args.data();
int narg = lammps_args.size(); int narg = lammps_args.size();
lammps.open(narg, args); lammps.open(narg, args);

View File

@ -11,6 +11,9 @@
<qresource> <qresource>
<file>gtk-zoom-fit.png</file> <file>gtk-zoom-fit.png</file>
</qresource> </qresource>
<qresource>
<file>edit-delete.png</file>
</qresource>
<qresource> <qresource>
<file>object-rotate-right.png</file> <file>object-rotate-right.png</file>
</qresource> </qresource>

View File

@ -418,11 +418,15 @@
</action> </action>
<action name="actionSet_Variables"> <action name="actionSet_Variables">
<property name="icon"> <property name="icon">
<iconset theme="preferences-desktop-personal"/> <iconset theme="preferences-desktop-personal">
<normaloff>.</normaloff>.</iconset>
</property> </property>
<property name="text"> <property name="text">
<string>Set &amp;Variables</string> <string>Set &amp;Variables</string>
</property> </property>
<property name="shortcut">
<string>Ctrl+Shift+V</string>
</property>
</action> </action>
</widget> </widget>
<customwidgets> <customwidgets>

View File

@ -15,32 +15,45 @@
#include <QDialogButtonBox> #include <QDialogButtonBox>
#include <QGridLayout> #include <QGridLayout>
#include <QIcon>
#include <QLabel> #include <QLabel>
#include <QLineEdit> #include <QLineEdit>
#include <QPushButton>
#include <QSizePolicy> #include <QSizePolicy>
SetVariables::SetVariables(QList<QPair<QString, QString>> &vars, QWidget *parent) : QDialog(parent) SetVariables::SetVariables(QList<QPair<QString, QString>> &_vars, QWidget *parent) :
QDialog(parent), vars(_vars), layout(new QVBoxLayout)
{ {
auto *layout = new QGridLayout;
auto *top = new QLabel("Set Variables:"); auto *top = new QLabel("Set Variables:");
layout->addWidget(top, 0, 0, 1, 2, Qt::AlignHCenter); layout->addWidget(top, 0, Qt::AlignHCenter);
auto *buttonBox = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel);
connect(buttonBox, &QDialogButtonBox::accepted, this, &SetVariables::accept);
connect(buttonBox, &QDialogButtonBox::rejected, this, &QDialog::reject);
int i = 1; int i = 1;
for (const auto &v : vars) { for (const auto &v : vars) {
auto *row = new QHBoxLayout;
auto *name = new QLineEdit(v.first); auto *name = new QLineEdit(v.first);
auto *val = new QLineEdit(v.second); auto *val = new QLineEdit(v.second);
auto *del = new QPushButton(QIcon(":/edit-delete.png"), "");
name->setObjectName("varname"); name->setObjectName("varname");
val->setObjectName("varval"); val->setObjectName("varval");
layout->addWidget(name, i, 0); del->setObjectName(QString::number(i));
layout->addWidget(val, i, 1); connect(del, &QPushButton::released, this, &SetVariables::del_row);
row->addWidget(name);
row->addWidget(val);
row->addWidget(del);
layout->addLayout(row);
++i; ++i;
} }
layout->addItem(new QSpacerItem(10, 10, QSizePolicy::Expanding, QSizePolicy::Expanding), i, 0); layout->addSpacerItem(new QSpacerItem(10, 10, QSizePolicy::Minimum, QSizePolicy::Expanding));
layout->addWidget(buttonBox, i + 1, 0, 1, 2);
auto *buttonBox = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel);
auto *add = new QPushButton("&Add Row");
add->setObjectName("add_row");
buttonBox->addButton(add, QDialogButtonBox::ActionRole);
connect(add, &QPushButton::released, this, &SetVariables::add_row);
connect(buttonBox, &QDialogButtonBox::accepted, this, &SetVariables::accept);
connect(buttonBox, &QDialogButtonBox::rejected, this, &QDialog::reject);
layout->addWidget(buttonBox);
setLayout(layout); setLayout(layout);
setWindowTitle("LAMMPS-GUI - Set Variables"); setWindowTitle("LAMMPS-GUI - Set Variables");
resize(500, 400); resize(500, 400);
@ -48,8 +61,64 @@ SetVariables::SetVariables(QList<QPair<QString, QString>> &vars, QWidget *parent
void SetVariables::accept() void SetVariables::accept()
{ {
// store all data in settings class // store all data in variables class and then confirm accepting
// and then confirm accepting vars.clear();
int nrows = layout->count() - 2;
for (int i = 1; i < nrows; ++i) {
auto *row = layout->itemAt(i)->layout();
auto *var = dynamic_cast<QLineEdit *>(row->itemAt(0)->widget());
auto *val = dynamic_cast<QLineEdit *>(row->itemAt(1)->widget());
if (var && val) vars.append(qMakePair(var->text(), val->text()));
}
QDialog::accept(); QDialog::accept();
} }
void SetVariables::add_row()
{
int nrows = layout->count();
auto *row = new QHBoxLayout;
auto *name = new QLineEdit(QString());
auto *val = new QLineEdit(QString());
auto *del = new QPushButton(QIcon(":/edit-delete.png"), "");
name->setObjectName("varname");
val->setObjectName("varval");
del->setObjectName(QString::number(nrows - 2));
connect(del, &QPushButton::released, this, &SetVariables::del_row);
row->addWidget(name);
row->addWidget(val);
row->addWidget(del);
layout->insertLayout(nrows - 2, row);
}
void SetVariables::del_row()
{
int nrows = layout->count();
auto *who = sender();
if (who) {
// figure out which row was deleted and delete its layout and widgets
int delrow = who->objectName().toInt();
auto *row = layout->takeAt(delrow);
while (row->layout()->count() > 0) {
auto *item = row->layout()->takeAt(0);
row->layout()->removeItem(item);
if (item) {
delete item->widget();
delete item;
}
}
layout->removeItem(row);
delete row->layout();
// renumber the delete pushbutton names
for (int i = delrow; i < nrows - 3; ++i) {
auto *row = layout->itemAt(i)->layout();
auto *widget = row->itemAt(2)->widget();
widget->setObjectName(QString::number(i));
}
}
}
// Local Variables:
// c-basic-offset: 4
// End:

View File

@ -28,6 +28,12 @@ public:
private slots: private slots:
void accept() override; void accept() override;
void add_row();
void del_row();
private:
QList<QPair<QString, QString>> &vars;
class QVBoxLayout *layout;
}; };
#endif #endif