Files
seaclient/settings.cpp

340 lines
7.9 KiB
C++

#include "settings.h"
#include <qapplication.h>
#include <qdialog.h>
#include <qpushbutton.h>
#include <qcheckbox.h>
#include <qlabel.h>
#include <qlineedit.h>
#include <qlayout.h>
#include <qtooltip.h>
#include <qwhatsthis.h>
#include <qvalidator.h>
#include <qscrollview.h>
#include <qvbox.h>
#include <qgrid.h>
#include <qstringlist.h>
#include <stdio.h>
#include <math.h>
#include "utils.h"
void SetLength(QLineEdit *lineEdit, int min, int max) {
lineEdit->setMaxLength(max);
int w0 = lineEdit->fontMetrics().width('0');
int w = lineEdit->frameWidth() * 2 + 6;
lineEdit->setMinimumWidth(w + w0 * min);
lineEdit->setMaximumWidth(w + w0 * max);
}
Settings::Settings(QWidget* parent)
: QWidget(parent)
{
QHBoxLayout *buttonLayout;
QVBoxLayout *vbox;
QString str;
time_t now;
struct tm date;
vbox = new QVBoxLayout(this, 0, 0, "vBox");
setName("Settings");
table = new QScrollView(this, "table");
form = new QWidget(table->viewport(), "form");
formVL = new QVBoxLayout(form, 0, 0, "formVL");
formLayout = new QGridLayout(0, 3, 3, 6, 3);
formVL->addLayout(formLayout);
formVL->addStretch(1);
/*
formBox = new QHBox(table->viewport(), "formBox");
form = new QGrid(4, formBox, "form");
*/
table->addChild(form);
table->setHScrollBarMode(QScrollView::AlwaysOff);
buttonLayout = new QHBoxLayout(0, 3, 3, "buttonLayout");
newButton = new QPushButton(this, "newButton");
newButton->setText("New Curve");
buttonLayout->addWidget(newButton);
/*
autoButton = new QPushButton(this, "autoButton");
autoButton->setText("Auto");
buttonLayout->addWidget(autoButton);
*/
cancelButton = new QPushButton(this, "cancelButton");
cancelButton->setText("Cancel");
buttonLayout->addWidget(cancelButton);
okButton = new QPushButton(this, "okButton");
okButton->setText("OK");
buttonLayout->addWidget(okButton);
okButton->setDefault(true);
buttonLayout->addStretch(1);
time(&now);
date = *localtime(&now);
buttonLayout->addWidget(new QLabel("# Days", this));
rLE = new QLineEdit(this);
SetLength(rLE, 2, 2);
rLE->setText(str);
rLE->setValidator(new QIntValidator(0, 99, this));
buttonLayout->addWidget(rLE);
buttonLayout->addWidget(new QLabel("starting from", this));
dLE = new QLineEdit(this);
SetLength(dLE, 2, 2);
str.sprintf("%d", date.tm_mday);
dLE->setText(str);
dLE->setValidator(new QIntValidator(0, 31, this));
buttonLayout->addWidget(dLE);
buttonLayout->addWidget(new QLabel(".", this));
mLE = new QLineEdit(this);
SetLength(mLE, 2, 2);
str.sprintf("%d", date.tm_mon+1);
mLE->setText(str);
mLE->setValidator(new QIntValidator(1, 12, this));
buttonLayout->addWidget(mLE);
buttonLayout->addWidget(new QLabel(".", this));
yLE = new QLineEdit(this);
SetLength(yLE, 4, 4);
str.sprintf("%d", date.tm_year+1900);
yLE->setText(str);
yLE->setValidator(new QIntValidator(2001, date.tm_year+1900, this));
buttonLayout->addWidget(yLE);
hrLE = new QLineEdit(this);
SetLength(hrLE, 5, 5);
hrLE->setText("00:00");
buttonLayout->addWidget(hrLE);
vbox->addLayout(buttonLayout);
vbox->addWidget(table, 1);
//vbox->addStretch(1);
formLayout->addWidget(new QLabel("Curve", form), 0, 0);
formLayout->addWidget(new QLabel("Label", form), 0, 1);
formLayout->addWidget(new QLabel("Unit", form), 0, 2);
formLayout->addWidget(new QLabel("Color", form), 0, 3);
/*
new QLabel("Curve", form);
new QLabel("Label", form);
new QLabel("Plot", form);
new QLabel("Color", form);
*/
row = 1;
connect(newButton, SIGNAL(clicked()),
this, SLOT(addEmpty()));
connect(okButton, SIGNAL(clicked()),
this, SLOT(ok()));
/*
connect(autoButton, SIGNAL(clicked()),
this, SLOT(autoCurves()));
*/
connect(cancelButton, SIGNAL(clicked()),
this, SLOT(cancel()));
connect(rLE, SIGNAL(textChanged(const QString &)),
this, SLOT(checkRange(const QString &)));
/*
connect(dLE, SIGNAL(textChanged(const QString &)),
this, SLOT(calcDate(const QString &)));
connect(mLE, SIGNAL(textChanged(const QString &)),
this, SLOT(calcDate(const QString &)));
connect(yLE, SIGNAL(textChanged(const QString &)),
this, SLOT(calcDate(const QString &)));
*/
clearWState(WState_Polished);
}
void Settings::updateHeight() {
form->setMinimumHeight(table->visibleHeight());
}
void Settings::resizeEvent(QResizeEvent *e) {
updateHeight();
form->setFixedWidth(table->visibleWidth());
QWidget::resizeEvent(e);
}
void Settings::showIt(bool yes) {
if (yes) {
clear();
putCurves(&set->dataList);
show();
} else {
hide();
}
}
#define YEAR (24*3600*360)
void Settings::checkRange(const QString &str0) {
if (str0.compare("") == 0) {
dLE->setEnabled(false);
mLE->setEnabled(false);
yLE->setEnabled(false);
hrLE->setEnabled(false);
} else {
dLE->setEnabled(true);
mLE->setEnabled(true);
yLE->setEnabled(true);
hrLE->setEnabled(true);
}
}
void Settings::putCurve(const QString &name, const QString &label,
const QString &plotName, long colorIndex) {
QLineEdit *n, *p;
ColorMenu *cm;
unsigned int idx;
QString colortext;
idx = row - 1;
if (idx < names.count()) {
n = names.at(idx);
} else {
n = new QLineEdit(form);
SetLength(n, 8, 64);
formLayout->addWidget(n, row, 0);
names.append(n);
}
n->setText(name);
n->show();
if (idx < labels.count()) {
p = labels.at(idx);
} else {
p = new QLineEdit(form);
SetLength(p, 8, 64);
formLayout->addWidget(p, row, 1);
labels.append(p);
}
p->setText(label);
p->show();
if (idx < plots.count()) {
p = plots.at(idx);
} else {
p = new QLineEdit(form);
SetLength(p, 4, 8);
formLayout->addWidget(p, row, 2);
plots.append(p);
}
p->setText(plotName);
p->show();
Convert2ColorName(colorIndex, colortext);
if (idx < colors.count()) {
cm = colors.at(idx);
cm->setCurrentItem(0);
cm->setCurrentText(colortext);
} else {
cm = new ColorMenu(colortext, form);
cm->setLength(12, 32);
formLayout->addWidget(cm, row, 3);
colors.append(cm);
}
cm->show();
row++;
}
void Settings::putCurves(QPtrList<SeaData> *dataList) {
SeaData *c;
for (c = dataList->first(); c != 0; c = dataList->next()) {
putCurve(c->name, c->label, c->plotName, c->style);
}
updateHeight();
}
void Settings::addEmpty() {
putCurve("","","",-1);
updateHeight();
/*
names.last()->show();
labels.last()->show();
plots.last()->show();
colors.last()->show();
*/
}
void Settings::apply() {
int i, n;
long days;
time_t t;
struct tm date;
QStringList hr_min;
if (rLE->text().compare("") != 0) {
days = rLE->text().toLong();
time(&t);
date = *localtime(&t);
date.tm_mday = dLE->text().toInt();
date.tm_mon = mLE->text().toInt() - 1;
date.tm_year = yLE->text().toInt() - 1900;
hr_min = QStringList::split(":", hrLE->text());
date.tm_hour = (int)hr_min[0].toFloat();
if (hr_min.size() > 1) {
date.tm_min = (int)hr_min[1].toFloat();
} else {
date.tm_min = 0;
}
date.tm_sec = 0;
date.tm_isdst = -1;
set->setTimeRange(mktime(&date), 24*3600*QMAX(1, days));
set->autoCurves();
} else {
set->clrDataList();
n = names.count();
for (i = 0; i < n; i++) {
//printf("%s\n", names.at(i)->text().latin1());
set->insertData(names.at(i)->text(), labels.at(i)->text(), plots.at(i)->text(), colors.at(i)->getColorIndex());
}
set->finishDataList();
}
}
void Settings::ok() {
apply();
leaveSettings();
}
void Settings::cancel() {
leaveSettings();
}
void Settings::clear() {
int i, n;
n = names.count();
for (i = 0; i < n; i++) {
names.at(i)->setText("");
plots.at(i)->setText("");
labels.at(i)->setText("");
colors.at(i)->setValue(0);
}
row = 1;
rLE->setText("");
}
void Settings::autoCurves() {
clear();
set->autoCurves();
putCurves(&set->dataList);
}