add new tab to preferences for charts window settings

This commit is contained in:
Axel Kohlmeyer
2025-04-12 11:49:41 -04:00
parent 1ad2df84d8
commit bb09088731
4 changed files with 128 additions and 15 deletions

View File

@ -2,11 +2,6 @@ LAMMPS-GUI TODO list:
# Short term goals (v1.x)
- add a "Charts tab" to the preferences with the following (default) settings:
- default filter data yes/no
- default smooth parameters
- default plot colors
- enable "raw" or "smooth" or "both"
- add a "Colors" menu to the image viewer to adjust color settings for the
current image (unlike the defaults in the perferences) including assigning
colors to individual atom types.

View File

@ -49,6 +49,7 @@ ChartWindow::ChartWindow(const QString &_filename, QWidget *parent) :
stopAct(nullptr), quitAct(nullptr), smooth(nullptr), window(nullptr), order(nullptr),
chartTitle(nullptr), chartXlabel(nullptr), chartYlabel(nullptr), filename(_filename)
{
QSettings settings;
auto *top = new QHBoxLayout;
menu->addMenu(file);
menu->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Preferred);
@ -58,30 +59,47 @@ ChartWindow::ChartWindow(const QString &_filename, QWidget *parent) :
dummy->hide();
// plot title and axis labels
chartTitle = new QLineEdit(QString("Thermo: %1").arg(filename));
chartXlabel = new QLineEdit("Time step");
settings.beginGroup("charts");
chartTitle =
new QLineEdit(settings.value("title", "Thermo: %f").toString().replace("%f", filename));
chartXlabel = new QLineEdit(settings.value("xlabel", "Time step").toString());
chartYlabel = new QLineEdit("");
// plot smoothing
int smoothchoice = settings.value("smoothchoice",2).toInt();
switch (smoothchoice) {
case 0:
do_raw = true;
do_smooth = false;
break;
case 1:
do_raw = false;
do_smooth = true;
break;
case 2: // fallthrough
default:
do_raw = true;
do_smooth = true;
break;
}
// list of choices must be kepy in sync with list in preferences
smooth = new QComboBox;
smooth->addItem("Raw");
smooth->addItem("Smooth");
smooth->addItem("Both");
smooth->setCurrentIndex(2);
smooth->setCurrentIndex(smoothchoice);
smooth->show();
window = new QSpinBox;
window->setRange(5, 999);
window->setValue(10);
window->setValue(settings.value("smoothwindow", 10).toInt());
window->setEnabled(true);
window->setToolTip("Smoothing Window Size");
order = new QSpinBox;
order->setRange(1, 20);
order->setValue(4);
order->setValue(settings.value("smoothorder", 4).toInt());
order->setEnabled(true);
order->setToolTip("Smoothing Order");
settings.endGroup();
auto *normal = new QPushButton(QIcon(":/icons/gtk-zoom-fit.png"), "");
normal->setToolTip("Reset zoom to normal");
@ -139,7 +157,6 @@ ChartWindow::ChartWindow(const QString &_filename, QWidget *parent) :
connect(columns, SIGNAL(currentIndexChanged(int)), this, SLOT(change_chart(int)));
installEventFilter(this);
QSettings settings;
resize(settings.value("chartx", 500).toInt(), settings.value("charty", 320).toInt());
}
@ -186,6 +203,7 @@ void ChartWindow::add_chart(const QString &title, int index)
}
charts.append(chart);
update_labels();
select_smooth(0);
}
void ChartWindow::add_data(int step, double data, int index)

View File

@ -67,6 +67,7 @@ Preferences::Preferences(LammpsWrapper *_lammps, QWidget *parent) :
tabWidget->addTab(new AcceleratorTab(settings, lammps), "&Accelerators");
tabWidget->addTab(new SnapshotTab(settings), "&Snapshot Image");
tabWidget->addTab(new EditorTab(settings), "&Editor Settings");
tabWidget->addTab(new ChartsTab(settings), "Cha&rts Settings");
connect(buttonBox, &QDialogButtonBox::accepted, this, &Preferences::accept);
connect(buttonBox, &QDialogButtonBox::rejected, this, &QDialog::reject);
@ -77,7 +78,7 @@ Preferences::Preferences(LammpsWrapper *_lammps, QWidget *parent) :
setLayout(layout);
setWindowIcon(QIcon(":/icons/lammps-icon-128x128.png"));
setWindowTitle("LAMMPS-GUI - Preferences");
resize(600, 450);
resize(700, 500);
}
Preferences::~Preferences()
@ -207,6 +208,25 @@ void Preferences::accept()
if (box) settings->setValue("autosave", box->isChecked());
settings->endGroup();
// chart window settings
settings->beginGroup("charts");
field = tabWidget->findChild<QLineEdit *>("title");
if (field) settings->setValue("title", field->text());
field = tabWidget->findChild<QLineEdit *>("xlabel");
if (field) settings->setValue("xlabel", field->text());
combo = tabWidget->findChild<QComboBox *>("smoothchoice");
if (combo) settings->setValue("smoothchoice", combo->currentIndex());
spin = tabWidget->findChild<QSpinBox *>("smoothwindow");
if (spin) settings->setValue("smoothwindow", spin->value());
spin = tabWidget->findChild<QSpinBox *>("smoothorder");
if (spin) settings->setValue("smoothorder", spin->value());
settings->endGroup();
spin = tabWidget->findChild<QSpinBox *>("chartx");
if (spin) settings->setValue("chartx", spin->value());
spin = tabWidget->findChild<QSpinBox *>("charty");
if (spin) settings->setValue("charty", spin->value());
QDialog::accept();
}
@ -622,6 +642,7 @@ EditorTab::EditorTab(QSettings *_settings, QWidget *parent) : QWidget(parent), s
grid->addWidget(retval, i++, 1, Qt::AlignVCenter);
grid->addWidget(autolbl, i, 0, Qt::AlignTop);
grid->addWidget(autoval, i++, 1, Qt::AlignVCenter);
grid->addWidget(new QLabel(" "), i++, 0);
grid->addWidget(savlbl, i, 0, Qt::AlignTop);
grid->addWidget(savval, i++, 1, Qt::AlignVCenter);
@ -631,6 +652,75 @@ EditorTab::EditorTab(QSettings *_settings, QWidget *parent) : QWidget(parent), s
setLayout(grid);
}
ChartsTab::ChartsTab(QSettings *_settings, QWidget *parent) : QWidget(parent), settings(_settings)
{
auto *grid = new QGridLayout;
auto *chartlbl = new QLabel("Charts default settings:");
settings->beginGroup("charts");
auto *titlelbl = new QLabel("Default chart title:");
auto *titletxt = new QLineEdit(settings->value("title", "Thermo: %f").toString());
auto *titlehlp = new QLabel("(use %f for current input file)");
auto *xlabellbl = new QLabel("Default x-axis label:");
auto *xlabeltxt = new QLineEdit(settings->value("xlabel", "Time step").toString());
// list of choices must be kepy in sync with list in chartviewer
auto *smoothlbl = new QLabel("Default plot data choice:");
auto *smoothval = new QComboBox;
smoothval->addItem("Raw");
smoothval->addItem("Smooth");
smoothval->addItem("Both");
smoothval->setObjectName("smoothchoice");
smoothval->setCurrentIndex(settings->value("smoothchoice", 2).toInt());
auto *smwindlbl = new QLabel("Default smoothing window:");
auto *smwindval = new QSpinBox;
smwindval->setRange(5, 999);
smwindval->setValue(settings->value("smoothwindow", 10).toInt());
smwindval->setObjectName("smoothwindow");
auto *smordrlbl = new QLabel("Default smoothing order:");
auto *smordrval = new QSpinBox;
smordrval->setRange(1, 20);
smordrval->setValue(settings->value("smoothorder", 4).toInt());
smordrval->setObjectName("smoothorder");
settings->endGroup();
auto *chartxlbl = new QLabel("Chart default width:");
auto *chartxval = new QSpinBox;
chartxval->setRange(400, 40000);
chartxval->setValue(settings->value("chartx", 500).toInt());
chartxval->setObjectName("chartx");
auto *chartylbl = new QLabel("Chart default height:");
auto *chartyval = new QSpinBox;
chartyval->setRange(300, 30000);
chartyval->setValue(settings->value("charty", 320).toInt());
chartyval->setObjectName("charty");
int i = 0;
grid->addWidget(chartlbl, i++, 0, 1, 2, Qt::AlignTop | Qt::AlignHCenter);
grid->addWidget(titlelbl, i, 0, Qt::AlignTop);
grid->addWidget(titletxt, i, 1, Qt::AlignTop);
grid->addWidget(titlehlp, i++, 2, Qt::AlignTop);
grid->addWidget(xlabellbl, i, 0, Qt::AlignTop);
grid->addWidget(xlabeltxt, i++, 1, Qt::AlignTop);
grid->addWidget(smoothlbl, i, 0, Qt::AlignTop);
grid->addWidget(smoothval, i++, 1, Qt::AlignTop);
grid->addWidget(smwindlbl, i, 0, Qt::AlignTop);
grid->addWidget(smwindval, i++, 1, Qt::AlignTop);
grid->addWidget(smordrlbl, i, 0, Qt::AlignTop);
grid->addWidget(smordrval, i++, 1, Qt::AlignVCenter);
grid->addWidget(chartxlbl, i, 0, Qt::AlignTop);
grid->addWidget(chartxval, i++, 1, Qt::AlignVCenter);
grid->addWidget(chartylbl, i, 0, Qt::AlignTop);
grid->addWidget(chartyval, i++, 1, Qt::AlignVCenter);
grid->addItem(new QSpacerItem(100, 100, QSizePolicy::Minimum, QSizePolicy::Expanding), i, 0);
grid->addItem(new QSpacerItem(100, 100, QSizePolicy::Minimum, QSizePolicy::Expanding), i, 1);
grid->addItem(new QSpacerItem(100, 100, QSizePolicy::Expanding, QSizePolicy::Expanding), i, 2);
setLayout(grid);
}
// Local Variables:
// c-basic-offset: 4
// End:

View File

@ -93,6 +93,16 @@ private:
QSettings *settings;
};
class ChartsTab : public QWidget {
Q_OBJECT
public:
explicit ChartsTab(QSettings *settings, QWidget *parent = nullptr);
private:
QSettings *settings;
};
#endif
// Local Variables: