25 #include <sys/types.h>
28 #include <QtCore/QDir>
29 #include <QtCore/QSettings>
32 #if QT_VERSION >= 0x050000
33 # include <QtWidgets/QBoxLayout>
34 # include <QtWidgets/QButtonGroup>
35 # include <QtWidgets/QCheckBox>
36 # include <QtWidgets/QFrame>
37 # include <QtWidgets/QGroupBox>
38 # include <QtWidgets/QGridLayout>
39 # include <QtWidgets/QLabel>
40 # include <QtWidgets/QLineEdit>
41 # include <QtWidgets/QMessageBox>
42 # include <QtWidgets/QPushButton>
43 # include <QtWidgets/QRadioButton>
44 # include <QtWidgets/QSpinBox>
45 # include <QtWidgets/QVBoxLayout>
47 # include <QtGui/QBoxLayout>
48 # include <QtGui/QButtonGroup>
49 # include <QtGui/QCheckBox>
50 # include <QtGui/QFrame>
51 # include <QtGui/QGroupBox>
52 # include <QtGui/QGridLayout>
53 # include <QtGui/QLabel>
54 # include <QtGui/QLineEdit>
55 # include <QtGui/QMessageBox>
56 # include <QtGui/QPushButton>
57 # include <QtGui/QRadioButton>
58 # include <QtGui/QSpinBox>
59 # include <QtGui/QVBoxLayout>
62 #include <QtGui/QPixmap>
88 QSettings *settings,
QWidget *parent)
104 setWizardStyle(ModernStyle);
106 setPixmap(QWizard::LogoPixmap, QPixmap(
":/images/NVI_logo.png"));
107 setPixmap(QWizard::WatermarkPixmap, QPixmap(
":/images/pattern_1.png"));
110 QString(isSystemWideRun?
" (system-wide settings)":
""));
130 w->setTitle(
"<p><font size=+1 face=\"Times\">Welcome to vgosDbCalc</font></p>");
133 str =
"The Startup Wizard will ask you few questions about software configuration.";
135 w->setSubTitle(
"<font face=\"Times\"><p>Thank you for installing vgosDbCalc version " +
138 w->setSubTitle(
"<font face=\"Times\"><p>Congratulation! You just have upgraded SgLib and "
142 w->setSubTitle(
"<font face=\"Times\"><p>And so it begins. "
143 "You are using SgLib version " +
148 w->setButtonText(QWizard::NextButton,
"Agree");
150 QVBoxLayout *layout =
new QVBoxLayout;
151 w->setLayout(layout);
155 "<h3>vgosDbCalc</h3>"
156 "<p>vgosDbCalc is software that calculates theoretical values and parameter partials"
157 "and stores them in vgosDb format."
159 "<p>Copyright (C) 2016-2020 Sergei Bolotin.</p>"
161 "<p>This program is free software: you can redistribute it and/or modify "
162 "it under the terms of the GNU General Public License as published by "
163 "the Free Software Foundation, either version 3 of the License, or "
164 "(at your option) any later version.</p>"
166 "<p>This program is distributed in the hope that it will be useful, "
167 "but WITHOUT ANY WARRANTY; without even the implied warranty of "
168 "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the "
169 "GNU General Public License for more details.</p>"
171 "<p>You should have received a copy of the GNU General Public License "
172 "along with this program. If not, see http://www.gnu.org/licenses.</p>"
174 "<p>Please, read carefully the license agreement and if you agree, press \"Agree\" button.</p>"
177 QLabel *label=
new QLabel(
"<font face=\"Times\">" + str +
"</font>");
178 label->setWordWrap(
true);
179 layout->addWidget(label);
180 layout->addStretch(1);
188 QCheckBox *cb=
new QCheckBox(
"I have read and accept the conditions.", w);
190 layout->addWidget(cb);
191 layout->addSpacing(40);
202 bool have2ForceUser(
false);
206 QVBoxLayout *layout=
new QVBoxLayout;
208 QGridLayout *gridLayout;
209 w->setLayout(layout);
211 w->setTitle(
"<p><font size=+1 face=\"Times\">Essential directories of vgosDbCalc</font></p>");
212 w->setSubTitle(
"<font face=\"Times\"><p>The working directory of the software.</p></font>");
213 w->setPixmap(QWizard::WatermarkPixmap, QPixmap(
":/images/pattern_2.png"));
217 "<h3>Default Directories</h3>"
218 "<p>Please, provide paths to data on your system.</p>"
219 "<p>Users will be able to overwrite default settings.</p>"
223 "<h3>vgosDbCalc Home Directory</h3>"
224 "<p>Please, specify the software's home directory.</p>"
225 "<p>All paths that are not absolute will be counted form this directory. The software home "
226 "directory have to be writable for a user and should be different from user's home directory.</p>"
228 label =
new QLabel(
"<font face=\"Times\">" + str +
"</font>");
229 label->setWordWrap(
true);
230 layout->addWidget(label);
231 layout->addSpacing(20);
238 if (path2Home == QDir::homePath())
239 have2ForceUser =
true;
241 gBox =
new QGroupBox(
"vgosDbCalc home directory", w);
242 gridLayout =
new QGridLayout(gBox);
243 label =
new QLabel(
"Path to the software home directory:", gBox);
244 label->setMinimumSize(label->sizeHint());
248 gridLayout->addWidget(label, 0, 0);
253 layout->addWidget(gBox);
254 layout->addSpacing(20);
258 gBox =
new QGroupBox(
"Essential directories", w);
259 gridLayout =
new QGridLayout(gBox);
261 label =
new QLabel(
"Path to CALC a priori files:", gBox);
262 label->setMinimumSize(label->sizeHint());
266 gridLayout->addWidget(label, 0, 0);
269 label =
new QLabel(
"Path to vgosDb files:", gBox);
270 label->setMinimumSize(label->sizeHint());
274 gridLayout->addWidget(label, 1, 0);
277 label =
new QLabel(
"Path to Master files:", gBox);
278 label->setMinimumSize(label->sizeHint());
282 gridLayout->addWidget(label, 2, 0);
285 layout->addWidget(gBox);
289 gBox =
new QGroupBox(
"SOLVE a priori files", w);
290 gridLayout =
new QGridLayout(gBox);
292 label =
new QLabel(
"Site a priori file:", gBox);
293 label->setMinimumSize(label->sizeHint());
297 gridLayout->addWidget(label, 0, 0);
300 label =
new QLabel(
"Source a priori file:", gBox);
301 label->setMinimumSize(label->sizeHint());
305 gridLayout->addWidget(label, 1, 0);
308 label =
new QLabel(
"Ocean loading a priori file:", gBox);
309 label->setMinimumSize(label->sizeHint());
313 gridLayout->addWidget(label, 2, 0);
316 label =
new QLabel(
"EOP a priori file:", gBox);
317 label->setMinimumSize(label->sizeHint());
321 gridLayout->addWidget(label, 3, 0);
324 label =
new QLabel(
"Tilt a priori file:", gBox);
325 label->setMinimumSize(label->sizeHint());
329 gridLayout->addWidget(label, 4, 0);
332 label =
new QLabel(
"Ocean pole tide loading a priori file:", gBox);
333 label->setMinimumSize(label->sizeHint());
337 gridLayout->addWidget(label, 5, 0);
340 layout->addWidget(gBox);
344 gBox =
new QGroupBox(
"General options", w);
345 QVBoxLayout *aLayout=
new QVBoxLayout(gBox);
351 layout->addWidget(gBox);
363 QString userName(
""), userLoginName(
""), userEMail(
""), userInitials(
"");
364 QString hostName(
""), domainName(
"");
376 struct passwd *pw=getpwuid(uid);
378 perror(
"getpwuid: ");
382 userLoginName = pw->pw_name;
383 userName = pw->pw_gecos;
384 if (userName.contains(
","))
385 userName = userName.left(userName.indexOf(
","));
388 if (gethostname(buff,
sizeof(buff))==-1)
390 perror(
"gethostname: ");
391 userEMail = userName +
"@localhost";
399 if (!hostName.contains(
"."))
402 if (getdomainname(buff,
sizeof(buff))==-1)
403 perror(
"getdomainname: ");
407 if (!domainName.contains(
"(none)") && domainName.simplified().size()>0)
408 hostName +=
"." + domainName;
411 userEMail = userLoginName +
"@" + hostName;
413 if (userName.contains(
" "))
415 userInitials = userName.mid(0, 1) + userName.mid(userName.indexOf(
" ") + 1, 1);
417 else if (userName.size()>=2)
418 userInitials = userName.left(2);
430 w->setTitle(
"<p><font size=+1 face=\"Times\">User identities</font></p>");
431 w->setSubTitle(
"<font face=\"Times\"><p>Please, specify your name and e-mail address.</p></font>");
432 w->setPixmap(QWizard::WatermarkPixmap, QPixmap(
":/images/pattern_3.png"));
436 QVBoxLayout *layout=
new QVBoxLayout;
437 w->setLayout(layout);
441 "<h3>User Identities</h3>"
442 "<p>Describe yourself, your name, e-mail, etc.</p>"
443 "<p>[Plus something else, more polite...]</p>"
445 label =
new QLabel(
"<font face=\"Times\">" + str +
"</font>");
446 label->setWordWrap(
true);
447 layout->addWidget(label);
448 layout->addSpacing(20);
450 QGroupBox *gBox=
new QGroupBox(
"User Identities", w);
451 QGridLayout *gridLayout=
new QGridLayout(gBox);
453 label =
new QLabel(
"User Name:", gBox);
454 label->setMinimumSize(label->sizeHint());
458 gridLayout->addWidget(label, 0, 0);
461 label =
new QLabel(
"E-mail address:", gBox);
462 label->setMinimumSize(label->sizeHint());
466 gridLayout->addWidget(label, 1, 0);
469 label =
new QLabel(
"User's default initials:", gBox);
470 label->setMinimumSize(label->sizeHint());
474 gridLayout->addWidget(label, 2, 0);
477 layout->addWidget(gBox);
487 QString acFullName, acAbbrevName, acAbbName;
489 bool have2ForceUser(
false);
500 have2ForceUser =
true;
503 w->setTitle(
"<p><font size=+1 face=\"Times\">Analysis Center identities</font></p>");
504 w->setSubTitle(
"<font face=\"Times\"><p>Please, describe organization where you work.</p></font>");
505 w->setPixmap(QWizard::WatermarkPixmap, QPixmap(
":/images/pattern_4.png"));
509 QVBoxLayout *layout=
new QVBoxLayout;
510 w->setLayout(layout);
514 "<h3>Analysis Center</h3>"
515 "<p>Please, specify the analysis center.</p>"
516 "<p>[Plus something else, more polite...]</p>"
518 label =
new QLabel(
"<font face=\"Times\">" + str +
"</font>");
519 label->setWordWrap(
true);
520 layout->addWidget(label);
521 layout->addSpacing(20);
523 QGroupBox *gBox=
new QGroupBox(
"Analysis Center", w);
524 QGridLayout *gridLayout=
new QGridLayout(gBox);
526 label =
new QLabel(
"Full Name:", gBox);
527 label->setMinimumSize(label->sizeHint());
533 gridLayout->addWidget(label, 0, 0);
536 label =
new QLabel(
"Abbreviation:", gBox);
537 label->setMinimumSize(label->sizeHint());
541 gridLayout->addWidget(label, 1, 0);
544 label =
new QLabel(
"Abbrev.:", gBox);
545 label->setMinimumSize(label->sizeHint());
549 gridLayout->addWidget(label, 2, 0);
559 layout->addWidget(gBox);
569 const QString logLevelNames[4] = {
"Error",
"Warning",
"Info",
"Debug"};
570 int logLevel(
settings_->value(
"Logger/LogLevel", 2).toInt());
572 w->setTitle(
"<p><font size=+1 face=\"Times\">Logger </font></p>");
573 w->setSubTitle(
"<font face=\"Times\"><p>Set up configuration of the logging subsystem.</p></font>");
574 w->setPixmap(QWizard::WatermarkPixmap, QPixmap(
":/images/pattern_5.png"));
578 QVBoxLayout *layout=
new QVBoxLayout;
579 w->setLayout(layout);
583 "<p>Change parameters of the logging subsystem.</p>"
585 label =
new QLabel(
"<font face=\"Times\">" + str +
"</font>");
586 label->setWordWrap(
true);
587 layout->addWidget(label);
588 layout->addSpacing(20);
592 QGridLayout *gridLayout;
594 gBox =
new QGroupBox(
"Main log options", w);
595 gridLayout =
new QGridLayout(gBox);
599 label =
new QLabel(
"Log file name:", gBox);
600 label->setMinimumSize(label->sizeHint());
603 gridLayout->addWidget(label, 0, 0);
608 label =
new QLabel(
"Log capacity:", gBox);
609 label->setMinimumSize(label->sizeHint());
615 gridLayout->addWidget(label, 1, 0);
618 gridLayout->setColumnStretch( 2, 1);
629 gridLayout->activate();
630 layout->addWidget(gBox);
633 gBox =
new QGroupBox(
"Main log levels", w);
635 QVBoxLayout *aLayout=
new QVBoxLayout(gBox);
636 QRadioButton *rbLogLevel[4];
637 for (
int i=0; i<4; i++)
639 rbLogLevel[i] =
new QRadioButton(logLevelNames[i], gBox);
640 rbLogLevel[i]-> setMinimumSize(rbLogLevel[i]->sizeHint());
642 aLayout->addWidget(rbLogLevel[i]);
644 rbLogLevel[logLevel]->setChecked(
true);
645 layout->addWidget(gBox);
649 gBox =
new QGroupBox(
"Aux log options", w);
650 gridLayout =
new QGridLayout(gBox);
654 label =
new QLabel(
"Path to logs for each session:", gBox);
655 label->setMinimumSize(label->sizeHint());
657 gridLayout->addWidget(label, 0, 0);
660 cbMakeAuxLog_ =
new QCheckBox(
"Save log file for each session", gBox);
665 layout->addWidget(gBox);
678 w->setTitle(
"<p><font size=+1 face=\"Times\">Ready to run</font></p>");
679 w->setSubTitle(
"<font face=\"Times\"><p>We are done.</p></font>");
680 w->setPixmap(QWizard::WatermarkPixmap, QPixmap(
":/images/pattern_6.png"));
682 QVBoxLayout *layout =
new QVBoxLayout;
683 w->setLayout(layout);
687 "<h3>vgosDbCalc is ready to run</h3>"
690 QLabel *label =
new QLabel(
"<font face=\"Times\">" + str +
"</font>");
691 label->setWordWrap(
true);
692 layout->addWidget(label);
735 settings_->setValue(
"Logger/LogLevel", logLevel);
749 QMessageBox::warning(
this,
"Warning",
"Cannot create Home directory " +
SgVersion libraryVersion("SgLib", 0, 8, 2, "Compton Peak (rc2)", SgMJD(2023, 4, 3, 10, 59))
SgVersion vgosDbCalcVersion("vgosDbCalc", 0, 5, 2, "Fort Windham Rocks (rc2)", SgMJD(2023, 4, 3, 11, 6))
const QString & getPath2AuxLogs() const
const QString & getPath2MasterFiles() const
bool getHave2SavePerSessionLog() const
void setHave2SavePerSessionLog(bool)
const QString & getPath2Home() const
void setPath2Home(const QString &)
SgIdentities & identities()
void setPath2VgosDbFiles(const QString &)
const QString & getPath2VgosDbFiles() const
void setPath2MasterFiles(const QString &)
void setPath2AuxLogs(const QString &)
const QString & getAcAbbrevName() const
const QString & getAcAbbName() const
void setAcAbbrevName(const QString &)
void setAcFullName(const QString &)
const QString & getUserEmailAddress() const
void setAcAbbName(const QString &)
const QString & getUserDefaultInitials() const
const QString & getAcFullName() const
void setUserDefaultInitials(const QString &)
void setUserEmailAddress(const QString &)
void setUserName(const QString &)
const QString & getUserName() const
virtual void write(LogLevel, quint32, const QString &, bool=false)
bool getIsStoreInFile() const
void setIsStoreInFile(bool isStoreInFile)
void setLogFacility(LogLevel lvl, quint32 f)
void setFileName(const QString &fileName)
void setIsNeedTimeMark(bool isNeedTimeMark)
void setCapacity(int capacity)
bool getIsNeedTimeMark() const
const QString & getFileName() const
const QString & getSoftwareName() const
const QString & getCodeName() const
QLineEdit * leFile4OceanLd_
QLineEdit * leMasterFilesDirName_
QButtonGroup * bgLogLevels_
QLineEdit * leAuxLogsDirName_
QLineEdit * leFile4Tilts_
QLineEdit * leVgosDbDirName_
QCheckBox * cbLogTimeLabel_
VcStartupWizard(bool isFirstRun, bool isForcedRun, bool isSystemWideRun, QSettings *settings, QWidget *parent=0)
static int serialNumber()
QLineEdit * leAcAbbrevName_
VcWizardPage * createConclusionPage()
static const int serialNumber_
virtual ~VcStartupWizard()
QLineEdit * eLogFileName_
QLineEdit * leFile4Sites_
QCheckBox * cbMakeAuxLog_
QString className() const
VcWizardPage * createPageOne()
QLineEdit * leFile4OceanPoleTideLd_
QLineEdit * leSolveAPrioriDirName_
QCheckBox * cbLogStoreInFile_
QLineEdit * leHomeDirName_
VcWizardPage * createPageHomeDir()
QLineEdit * leFile4Sources_
QLineEdit * leUserInitials_
VcWizardPage * createPageTwo()
QCheckBox * cbUseLocalLocale_
QLineEdit * leAcFullName_
VcWizardPage * createIntroPage()
VcWizardPage * createPageThree()
void registerField(const QString &name, QWidget *widget, const char *property=0, const char *changedSignal=0)