|
Packit |
1c1d7e |
#include "doxywizard.h"
|
|
Packit |
1c1d7e |
#include "version.h"
|
|
Packit |
1c1d7e |
#include "expert.h"
|
|
Packit |
1c1d7e |
#include "wizard.h"
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
#include <QMenu>
|
|
Packit |
1c1d7e |
#include <QMenuBar>
|
|
Packit |
1c1d7e |
#include <QPushButton>
|
|
Packit |
1c1d7e |
#include <QMessageBox>
|
|
Packit |
1c1d7e |
#include <QVBoxLayout>
|
|
Packit |
1c1d7e |
#include <QLineEdit>
|
|
Packit |
1c1d7e |
#include <QLabel>
|
|
Packit |
1c1d7e |
#include <QTextBrowser>
|
|
Packit |
1c1d7e |
#include <QStatusBar>
|
|
Packit |
1c1d7e |
#include <QProcess>
|
|
Packit |
1c1d7e |
#include <QTimer>
|
|
Packit |
1c1d7e |
#include <QCloseEvent>
|
|
Packit |
1c1d7e |
#include <QApplication>
|
|
Packit |
1c1d7e |
#include <QDir>
|
|
Packit |
1c1d7e |
#include <QFileDialog>
|
|
Packit |
1c1d7e |
#include <QDesktopServices>
|
|
Packit |
1c1d7e |
#include <QUrl>
|
|
Packit |
1c1d7e |
#include <QTextStream>
|
|
Packit |
1c1d7e |
#include <QDebug>
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
#ifdef WIN32
|
|
Packit |
1c1d7e |
#include <windows.h>
|
|
Packit |
1c1d7e |
#endif
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
#define MAX_RECENT_FILES 10
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
const int messageTimeout = 5000; //!< status bar message timeout in milliseconds.
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
#define APPQT(x) QString::fromLatin1("<qt>") + x + QString::fromLatin1(" </qt>")
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
static QString text1 = QString::fromLatin1("");
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
MainWindow &MainWindow::instance()
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
static MainWindow *theInstance = new MainWindow;
|
|
Packit |
1c1d7e |
return *theInstance;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
MainWindow::MainWindow()
|
|
Packit |
1c1d7e |
: m_settings(QString::fromLatin1("Doxygen.org"), QString::fromLatin1("Doxywizard"))
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
QMenu *file = menuBar()->addMenu(tr("File"));
|
|
Packit |
1c1d7e |
file->addAction(tr("Open..."),
|
|
Packit |
1c1d7e |
this, SLOT(openConfig()), Qt::CTRL+Qt::Key_O);
|
|
Packit |
1c1d7e |
m_recentMenu = file->addMenu(tr("Open recent"));
|
|
Packit |
1c1d7e |
file->addAction(tr("Save"),
|
|
Packit |
1c1d7e |
this, SLOT(saveConfig()), Qt::CTRL+Qt::Key_S);
|
|
Packit |
1c1d7e |
file->addAction(tr("Save as..."),
|
|
Packit |
1c1d7e |
this, SLOT(saveConfigAs()), Qt::SHIFT+Qt::CTRL+Qt::Key_S);
|
|
Packit |
1c1d7e |
file->addAction(tr("Quit"),
|
|
Packit |
1c1d7e |
this, SLOT(quit()), Qt::CTRL+Qt::Key_Q);
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
QMenu *settings = menuBar()->addMenu(tr("Settings"));
|
|
Packit |
1c1d7e |
settings->addAction(tr("Reset to factory defaults"),
|
|
Packit |
1c1d7e |
this,SLOT(resetToDefaults()));
|
|
Packit |
1c1d7e |
settings->addAction(tr("Use current settings at startup"),
|
|
Packit |
1c1d7e |
this,SLOT(makeDefaults()));
|
|
Packit |
1c1d7e |
settings->addAction(tr("Clear recent list"),
|
|
Packit |
1c1d7e |
this,SLOT(clearRecent()));
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
QMenu *help = menuBar()->addMenu(tr("Help"));
|
|
Packit |
1c1d7e |
help->addAction(tr("Online manual"),
|
|
Packit |
1c1d7e |
this, SLOT(manual()), Qt::Key_F1);
|
|
Packit |
1c1d7e |
help->addAction(tr("About"),
|
|
Packit |
1c1d7e |
this, SLOT(about()) );
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
m_expert = new Expert;
|
|
Packit |
1c1d7e |
m_wizard = new Wizard(m_expert->modelData());
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
// ----------- top part ------------------
|
|
Packit |
1c1d7e |
QWidget *topPart = new QWidget;
|
|
Packit |
1c1d7e |
QVBoxLayout *rowLayout = new QVBoxLayout(topPart);
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
// select working directory
|
|
Packit |
1c1d7e |
QHBoxLayout *dirLayout = new QHBoxLayout;
|
|
Packit |
1c1d7e |
m_workingDir = new QLineEdit;
|
|
Packit |
1c1d7e |
m_selWorkingDir = new QPushButton(tr("Select..."));
|
|
Packit |
1c1d7e |
dirLayout->addWidget(m_workingDir);
|
|
Packit |
1c1d7e |
dirLayout->addWidget(m_selWorkingDir);
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
//------------- bottom part --------------
|
|
Packit |
1c1d7e |
QWidget *runTab = new QWidget;
|
|
Packit |
1c1d7e |
QVBoxLayout *runTabLayout = new QVBoxLayout(runTab);
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
// run doxygen
|
|
Packit |
1c1d7e |
QHBoxLayout *runLayout = new QHBoxLayout;
|
|
Packit |
1c1d7e |
m_run = new QPushButton(tr("Run doxygen"));
|
|
Packit |
1c1d7e |
m_run->setEnabled(false);
|
|
Packit |
1c1d7e |
m_runStatus = new QLabel(tr("Status: not running"));
|
|
Packit |
1c1d7e |
m_saveLog = new QPushButton(tr("Save log..."));
|
|
Packit |
1c1d7e |
m_saveLog->setEnabled(false);
|
|
Packit |
1c1d7e |
QPushButton *showSettings = new QPushButton(tr("Show configuration"));
|
|
Packit |
1c1d7e |
runLayout->addWidget(m_run);
|
|
Packit |
1c1d7e |
runLayout->addWidget(m_runStatus);
|
|
Packit |
1c1d7e |
runLayout->addStretch(1);
|
|
Packit |
1c1d7e |
runLayout->addWidget(showSettings);
|
|
Packit |
1c1d7e |
runLayout->addWidget(m_saveLog);
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
// output produced by Doxygen
|
|
Packit |
1c1d7e |
runTabLayout->addLayout(runLayout);
|
|
Packit |
1c1d7e |
runTabLayout->addWidget(new QLabel(tr("Output produced by doxygen")));
|
|
Packit |
1c1d7e |
QGridLayout *grid = new QGridLayout;
|
|
Packit |
1c1d7e |
//m_outputLog = new QTextEdit;
|
|
Packit |
1c1d7e |
m_outputLog = new QTextBrowser;
|
|
Packit |
1c1d7e |
//m_outputLog = new QPlainTextEdit;
|
|
Packit |
1c1d7e |
m_outputLog->setReadOnly(true);
|
|
Packit |
1c1d7e |
m_outputLog->setFontFamily(QString::fromLatin1("courier"));
|
|
Packit |
1c1d7e |
m_outputLog->setMinimumWidth(600);
|
|
Packit |
1c1d7e |
grid->addWidget(m_outputLog,0,0);
|
|
Packit |
1c1d7e |
grid->setColumnStretch(0,1);
|
|
Packit |
1c1d7e |
grid->setRowStretch(0,1);
|
|
Packit |
1c1d7e |
QHBoxLayout *launchLayout = new QHBoxLayout;
|
|
Packit |
1c1d7e |
m_launchHtml = new QPushButton(tr("Show HTML output"));
|
|
Packit |
1c1d7e |
launchLayout->addWidget(m_launchHtml);
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
launchLayout->addStretch(1);
|
|
Packit |
1c1d7e |
grid->addLayout(launchLayout,1,0);
|
|
Packit |
1c1d7e |
runTabLayout->addLayout(grid);
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
m_tabs = new QTabWidget;
|
|
Packit |
1c1d7e |
m_tabs->addTab(m_wizard,tr("Wizard"));
|
|
Packit |
1c1d7e |
m_tabs->addTab(m_expert,tr("Expert"));
|
|
Packit |
1c1d7e |
m_tabs->addTab(runTab,tr("Run"));
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
rowLayout->addWidget(new QLabel(tr("Step 1: Specify the working directory from which doxygen will run")));
|
|
Packit |
1c1d7e |
rowLayout->addLayout(dirLayout);
|
|
Packit |
1c1d7e |
rowLayout->addWidget(new QLabel(tr("Step 2: Configure doxygen using the Wizard and/or Expert tab, then switch to the Run tab to generate the documentation")));
|
|
Packit |
1c1d7e |
rowLayout->addWidget(m_tabs);
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
setCentralWidget(topPart);
|
|
Packit |
1c1d7e |
statusBar()->showMessage(tr("Welcome to Doxygen"),messageTimeout);
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
m_runProcess = new QProcess;
|
|
Packit |
1c1d7e |
m_running = false;
|
|
Packit |
1c1d7e |
m_timer = new QTimer;
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
// connect signals and slots
|
|
Packit |
1c1d7e |
connect(m_tabs,SIGNAL(currentChanged(int)),SLOT(selectTab(int)));
|
|
Packit |
1c1d7e |
connect(m_selWorkingDir,SIGNAL(clicked()),SLOT(selectWorkingDir()));
|
|
Packit |
1c1d7e |
connect(m_recentMenu,SIGNAL(triggered(QAction*)),SLOT(openRecent(QAction*)));
|
|
Packit |
1c1d7e |
connect(m_workingDir,SIGNAL(returnPressed()),SLOT(updateWorkingDir()));
|
|
Packit |
1c1d7e |
connect(m_runProcess,SIGNAL(readyReadStandardOutput()),SLOT(readStdout()));
|
|
Packit |
1c1d7e |
connect(m_runProcess,SIGNAL(finished(int, QProcess::ExitStatus)),SLOT(runComplete()));
|
|
Packit |
1c1d7e |
connect(m_timer,SIGNAL(timeout()),SLOT(readStdout()));
|
|
Packit |
1c1d7e |
connect(m_run,SIGNAL(clicked()),SLOT(runDoxygen()));
|
|
Packit |
1c1d7e |
connect(m_launchHtml,SIGNAL(clicked()),SLOT(showHtmlOutput()));
|
|
Packit |
1c1d7e |
connect(m_saveLog,SIGNAL(clicked()),SLOT(saveLog()));
|
|
Packit |
1c1d7e |
connect(showSettings,SIGNAL(clicked()),SLOT(showSettings()));
|
|
Packit |
1c1d7e |
connect(m_expert,SIGNAL(changed()),SLOT(configChanged()));
|
|
Packit |
1c1d7e |
connect(m_wizard,SIGNAL(done()),SLOT(selectRunTab()));
|
|
Packit |
1c1d7e |
connect(m_expert,SIGNAL(done()),SLOT(selectRunTab()));
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
loadSettings();
|
|
Packit |
1c1d7e |
updateLaunchButtonState();
|
|
Packit |
1c1d7e |
m_modified = false;
|
|
Packit |
1c1d7e |
updateTitle();
|
|
Packit |
1c1d7e |
m_wizard->refresh();
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void MainWindow::closeEvent(QCloseEvent *event)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
if (discardUnsavedChanges())
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
saveSettings();
|
|
Packit |
1c1d7e |
event->accept();
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
else
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
event->ignore();
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void MainWindow::quit()
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
if (discardUnsavedChanges())
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
saveSettings();
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
QApplication::exit(0);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void MainWindow::setWorkingDir(const QString &dirName)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
QDir::setCurrent(dirName);
|
|
Packit |
1c1d7e |
m_workingDir->setText(dirName);
|
|
Packit |
1c1d7e |
m_run->setEnabled(!dirName.isEmpty());
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void MainWindow::selectWorkingDir()
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
QString dirName = QFileDialog::getExistingDirectory(this,
|
|
Packit |
1c1d7e |
tr("Select working directory"),m_workingDir->text());
|
|
Packit |
1c1d7e |
if (!dirName.isEmpty())
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
setWorkingDir(dirName);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void MainWindow::updateWorkingDir()
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
setWorkingDir(m_workingDir->text());
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void MainWindow::manual()
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
QDesktopServices::openUrl(QUrl(QString::fromLatin1("http://www.doxygen.org/manual.html")));
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void MainWindow::about()
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
QString msg;
|
|
Packit |
1c1d7e |
QTextStream t(&msg,QIODevice::WriteOnly);
|
|
Packit |
1c1d7e |
t << QString::fromLatin1("<qt><center>A tool to configure and run doxygen version ")+
|
|
Packit |
1c1d7e |
QString::fromLatin1(versionString)+
|
|
Packit |
1c1d7e |
QString::fromLatin1(" on your source files.</center> "
|
|
Packit |
1c1d7e |
"<center>Written by Dimitri van Heesch © 2000-2015</center>"
|
|
Packit |
1c1d7e |
"</qt>");
|
|
Packit |
1c1d7e |
QMessageBox::about(this,tr("Doxygen GUI"),msg);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void MainWindow::openConfig()
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
if (discardUnsavedChanges(false))
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
QString fn = QFileDialog::getOpenFileName(this,
|
|
Packit |
1c1d7e |
tr("Open configuration file"),
|
|
Packit |
1c1d7e |
m_workingDir->text());
|
|
Packit |
1c1d7e |
if (!fn.isEmpty())
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
loadConfigFromFile(fn);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void MainWindow::updateConfigFileName(const QString &fileName)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
if (m_fileName!=fileName)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
m_fileName = fileName;
|
|
Packit |
1c1d7e |
QString curPath = QFileInfo(fileName).path();
|
|
Packit |
1c1d7e |
setWorkingDir(curPath);
|
|
Packit |
1c1d7e |
addRecentFile(fileName);
|
|
Packit |
1c1d7e |
updateTitle();
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void MainWindow::loadConfigFromFile(const QString & fileName)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
// save full path info of original file
|
|
Packit |
1c1d7e |
QString absFileName = QFileInfo(fileName).absoluteFilePath();
|
|
Packit |
1c1d7e |
// updates the current directory
|
|
Packit |
1c1d7e |
updateConfigFileName(fileName);
|
|
Packit |
1c1d7e |
// open the specified configuration file
|
|
Packit |
1c1d7e |
m_expert->loadConfig(absFileName);
|
|
Packit |
1c1d7e |
m_wizard->refresh();
|
|
Packit |
1c1d7e |
updateLaunchButtonState();
|
|
Packit |
1c1d7e |
m_modified = false;
|
|
Packit |
1c1d7e |
updateTitle();
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void MainWindow::saveConfig(const QString &fileName)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
if (fileName.isEmpty()) return;
|
|
Packit |
1c1d7e |
QFile f(fileName);
|
|
Packit |
1c1d7e |
if (!f.open(QIODevice::WriteOnly))
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
QMessageBox::warning(this,
|
|
Packit |
1c1d7e |
tr("Error saving"),
|
|
Packit |
1c1d7e |
tr("Error: cannot open the file ")+fileName+tr(" for writing!\n")+
|
|
Packit |
1c1d7e |
tr("Reason given: ")+f.error());
|
|
Packit |
1c1d7e |
return;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
QTextStream t(&f);
|
|
Packit |
1c1d7e |
m_expert->writeConfig(t,false);
|
|
Packit |
1c1d7e |
updateConfigFileName(fileName);
|
|
Packit |
1c1d7e |
m_modified = false;
|
|
Packit |
1c1d7e |
updateTitle();
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
bool MainWindow::saveConfig()
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
if (m_fileName.isEmpty())
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
return saveConfigAs();
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
else
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
saveConfig(m_fileName);
|
|
Packit |
1c1d7e |
return true;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
bool MainWindow::saveConfigAs()
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
QString fileName = QFileDialog::getSaveFileName(this, QString(),
|
|
Packit |
1c1d7e |
m_workingDir->text()+QString::fromLatin1("/Doxyfile"));
|
|
Packit |
1c1d7e |
if (fileName.isEmpty()) return false;
|
|
Packit |
1c1d7e |
saveConfig(fileName);
|
|
Packit |
1c1d7e |
return true;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void MainWindow::makeDefaults()
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
if (QMessageBox::question(this,tr("Use current setting at startup?"),
|
|
Packit |
1c1d7e |
tr("Do you want to save the current settings "
|
|
Packit |
1c1d7e |
"and use them next time Doxywizard starts?"),
|
|
Packit |
1c1d7e |
QMessageBox::Save|
|
|
Packit |
1c1d7e |
QMessageBox::Cancel)==QMessageBox::Save)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
//printf("MainWindow:makeDefaults()\n");
|
|
Packit |
1c1d7e |
m_expert->saveSettings(&m_settings);
|
|
Packit |
1c1d7e |
m_settings.setValue(QString::fromLatin1("wizard/loadsettings"), true);
|
|
Packit |
1c1d7e |
m_settings.sync();
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void MainWindow::clearRecent()
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
if (QMessageBox::question(this,tr("Clear the list of recent files?"),
|
|
Packit |
1c1d7e |
tr("Do you want to clear the list of recently "
|
|
Packit |
1c1d7e |
"loaded configuration files?"),
|
|
Packit |
1c1d7e |
QMessageBox::Yes|
|
|
Packit |
1c1d7e |
QMessageBox::Cancel)==QMessageBox::Yes)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
m_recentMenu->clear();
|
|
Packit |
1c1d7e |
m_recentFiles.clear();
|
|
Packit |
1c1d7e |
for (int i=0;i
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
m_settings.setValue(QString().sprintf("recent/config%d",i++),QString::fromLatin1(""));
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
m_settings.sync();
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void MainWindow::resetToDefaults()
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
if (QMessageBox::question(this,tr("Reset settings to their default values?"),
|
|
Packit |
1c1d7e |
tr("Do you want to revert all settings back "
|
|
Packit |
1c1d7e |
"to their original values?"),
|
|
Packit |
1c1d7e |
QMessageBox::Reset|
|
|
Packit |
1c1d7e |
QMessageBox::Cancel)==QMessageBox::Reset)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
//printf("MainWindow:resetToDefaults()\n");
|
|
Packit |
1c1d7e |
m_expert->resetToDefaults();
|
|
Packit |
1c1d7e |
m_settings.setValue(QString::fromLatin1("wizard/loadsettings"), false);
|
|
Packit |
1c1d7e |
m_settings.sync();
|
|
Packit |
1c1d7e |
m_wizard->refresh();
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void MainWindow::loadSettings()
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
QVariant geometry = m_settings.value(QString::fromLatin1("main/geometry"), QVariant::Invalid);
|
|
Packit |
1c1d7e |
QVariant state = m_settings.value(QString::fromLatin1("main/state"), QVariant::Invalid);
|
|
Packit |
1c1d7e |
QVariant wizState = m_settings.value(QString::fromLatin1("wizard/state"), QVariant::Invalid);
|
|
Packit |
1c1d7e |
QVariant loadSettings = m_settings.value(QString::fromLatin1("wizard/loadsettings"), QVariant::Invalid);
|
|
Packit |
1c1d7e |
QVariant workingDir = m_settings.value(QString::fromLatin1("wizard/workingdir"), QVariant::Invalid);
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
if (geometry !=QVariant::Invalid) restoreGeometry(geometry.toByteArray());
|
|
Packit |
1c1d7e |
if (state !=QVariant::Invalid) restoreState (state.toByteArray());
|
|
Packit |
1c1d7e |
if (wizState !=QVariant::Invalid) m_wizard->restoreState(wizState.toByteArray());
|
|
Packit |
1c1d7e |
if (loadSettings!=QVariant::Invalid && loadSettings.toBool())
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
m_expert->loadSettings(&m_settings);
|
|
Packit |
1c1d7e |
if (workingDir!=QVariant::Invalid && QDir(workingDir.toString()).exists())
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
setWorkingDir(workingDir.toString());
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
/* due to prepend use list in reversed order */
|
|
Packit |
1c1d7e |
for (int i=MAX_RECENT_FILES;i>=0;i--)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
QString entry = m_settings.value(QString().sprintf("recent/config%d",i)).toString();
|
|
Packit |
1c1d7e |
if (!entry.isEmpty() && QFileInfo(entry).exists())
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
addRecentFileList(entry);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
updateRecentFile();
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void MainWindow::saveSettings()
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
QSettings settings(QString::fromLatin1("Doxygen.org"), QString::fromLatin1("Doxywizard"));
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
m_settings.setValue(QString::fromLatin1("main/geometry"), saveGeometry());
|
|
Packit |
1c1d7e |
m_settings.setValue(QString::fromLatin1("main/state"), saveState());
|
|
Packit |
1c1d7e |
m_settings.setValue(QString::fromLatin1("wizard/state"), m_wizard->saveState());
|
|
Packit |
1c1d7e |
m_settings.setValue(QString::fromLatin1("wizard/workingdir"), m_workingDir->text());
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void MainWindow::selectTab(int id)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
if (id==0) m_wizard->refresh();
|
|
Packit |
1c1d7e |
else if (id==1) m_expert->refresh();
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void MainWindow::selectRunTab()
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
m_tabs->setCurrentIndex(2);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void MainWindow::addRecentFile(const QString &fileName)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
addRecentFileList(fileName);
|
|
Packit |
1c1d7e |
updateRecentFile();
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
void MainWindow::addRecentFileList(const QString &fileName)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
int i=m_recentFiles.indexOf(fileName);
|
|
Packit |
1c1d7e |
if (i!=-1) m_recentFiles.removeAt(i);
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
// not found
|
|
Packit |
1c1d7e |
if (m_recentFiles.count() < MAX_RECENT_FILES) // append
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
m_recentFiles.prepend(fileName);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
else // add + drop last item
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
m_recentFiles.removeLast();
|
|
Packit |
1c1d7e |
m_recentFiles.prepend(fileName);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
void MainWindow::updateRecentFile(void)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
m_recentMenu->clear();
|
|
Packit |
1c1d7e |
int i=0;
|
|
Packit |
1c1d7e |
foreach( QString str, m_recentFiles )
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
m_recentMenu->addAction(str);
|
|
Packit |
1c1d7e |
m_settings.setValue(QString().sprintf("recent/config%d",i++),str);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
for (;i
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
m_settings.setValue(QString().sprintf("recent/config%d",i++),QString::fromLatin1(""));
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void MainWindow::openRecent(QAction *action)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
if (discardUnsavedChanges(false))
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
loadConfigFromFile(action->text());
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void MainWindow::runDoxygen()
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
if (!m_running)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
QString doxygenPath;
|
|
Packit |
1c1d7e |
#if defined(Q_OS_MACX)
|
|
Packit |
1c1d7e |
doxygenPath = qApp->applicationDirPath()+QString::fromLatin1("/../Resources/");
|
|
Packit |
1c1d7e |
qDebug() << tr("Doxygen path: ") << doxygenPath;
|
|
Packit |
1c1d7e |
if ( !QFile(doxygenPath + QString::fromLatin1("doxygen")).exists() )
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
// No Doxygen binary in the resources, if there is a system Doxygen binary, use that instead
|
|
Packit |
1c1d7e |
if ( QFile(QString::fromLatin1("/usr/local/bin/doxygen")).exists() )
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
doxygenPath = QString::fromLatin1("/usr/local/bin/");
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
else
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
qDebug() << tr("Can't find the doxygen command, make sure it's in your $$PATH");
|
|
Packit |
1c1d7e |
doxygenPath = QString::fromLatin1("");
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
qDebug() << tr("Getting doxygen from: ") << doxygenPath;
|
|
Packit |
1c1d7e |
#endif
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
m_runProcess->setReadChannel(QProcess::StandardOutput);
|
|
Packit |
1c1d7e |
m_runProcess->setProcessChannelMode(QProcess::MergedChannels);
|
|
Packit |
1c1d7e |
m_runProcess->setWorkingDirectory(m_workingDir->text());
|
|
Packit |
1c1d7e |
QStringList env=QProcess::systemEnvironment();
|
|
Packit |
1c1d7e |
// set PWD environment variable to m_workingDir
|
|
Packit |
1c1d7e |
env.replaceInStrings(QRegExp(QString::fromLatin1("^PWD=(.*)"),Qt::CaseInsensitive),
|
|
Packit |
1c1d7e |
QString::fromLatin1("PWD=")+m_workingDir->text());
|
|
Packit |
1c1d7e |
m_runProcess->setEnvironment(env);
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
QStringList args;
|
|
Packit |
1c1d7e |
args << QString::fromLatin1("-b"); // make stdout unbuffered
|
|
Packit |
1c1d7e |
args << QString::fromLatin1("-"); // read config from stdin
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
m_outputLog->clear();
|
|
Packit |
1c1d7e |
text1 = QString::fromLatin1("");
|
|
Packit |
1c1d7e |
m_runProcess->start(doxygenPath + QString::fromLatin1("doxygen"), args);
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
if (!m_runProcess->waitForStarted())
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
m_outputLog->append(APPQT(QString::fromLatin1("*** Failed to run doxygen\n")));
|
|
Packit |
1c1d7e |
return;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
QTextStream t(m_runProcess);
|
|
Packit |
1c1d7e |
m_expert->writeConfig(t,false);
|
|
Packit |
1c1d7e |
m_runProcess->closeWriteChannel();
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
if (m_runProcess->state() == QProcess::NotRunning)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
m_outputLog->append(APPQT(QString::fromLatin1("*** Failed to run doxygen\n")));
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
else
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
m_saveLog->setEnabled(false);
|
|
Packit |
1c1d7e |
m_running=true;
|
|
Packit |
1c1d7e |
m_run->setText(tr("Stop doxygen"));
|
|
Packit |
1c1d7e |
m_runStatus->setText(tr("Status: running"));
|
|
Packit |
1c1d7e |
m_timer->start(1000);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
else
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
m_running=false;
|
|
Packit |
1c1d7e |
m_run->setText(tr("Run doxygen"));
|
|
Packit |
1c1d7e |
m_runStatus->setText(tr("Status: not running"));
|
|
Packit |
1c1d7e |
m_runProcess->kill();
|
|
Packit |
1c1d7e |
m_timer->stop();
|
|
Packit |
1c1d7e |
//updateRunnable(m_workingDir->text());
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void MainWindow::readStdout()
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
if (m_running)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
QByteArray data = m_runProcess->readAllStandardOutput();
|
|
Packit |
1c1d7e |
QString text = QString::fromUtf8(data);
|
|
Packit |
1c1d7e |
if (!text.isEmpty())
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
text1 += text;
|
|
Packit |
1c1d7e |
m_outputLog->clear();
|
|
Packit |
1c1d7e |
m_outputLog->append(APPQT(text1.trimmed()));
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void MainWindow::runComplete()
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
if (m_running)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
m_outputLog->append(APPQT(tr("*** Doxygen has finished\n")));
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
else
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
m_outputLog->append(APPQT(tr("*** Cancelled by user\n")));
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
m_outputLog->ensureCursorVisible();
|
|
Packit |
1c1d7e |
m_run->setText(tr("Run doxygen"));
|
|
Packit |
1c1d7e |
m_runStatus->setText(tr("Status: not running"));
|
|
Packit |
1c1d7e |
m_running=false;
|
|
Packit |
1c1d7e |
updateLaunchButtonState();
|
|
Packit |
1c1d7e |
//updateRunnable(m_workingDir->text());
|
|
Packit |
1c1d7e |
m_saveLog->setEnabled(true);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void MainWindow::updateLaunchButtonState()
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
m_launchHtml->setEnabled(m_expert->htmlOutputPresent(m_workingDir->text()));
|
|
Packit |
1c1d7e |
#if 0
|
|
Packit |
1c1d7e |
m_launchPdf->setEnabled(m_expert->pdfOutputPresent(m_workingDir->text()));
|
|
Packit |
1c1d7e |
#endif
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void MainWindow::showHtmlOutput()
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
QString indexFile = m_expert->getHtmlOutputIndex(m_workingDir->text());
|
|
Packit |
1c1d7e |
QFileInfo fi(indexFile);
|
|
Packit |
1c1d7e |
// TODO: the following doesn't seem to work with IE
|
|
Packit |
1c1d7e |
#ifdef WIN32
|
|
Packit |
1c1d7e |
//QString indexUrl(QString::fromLatin1("file:///"));
|
|
Packit |
1c1d7e |
ShellExecute(NULL, L"open", (LPCWSTR)fi.absoluteFilePath().utf16(), NULL, NULL, SW_SHOWNORMAL);
|
|
Packit |
1c1d7e |
#else
|
|
Packit |
1c1d7e |
QString indexUrl(QString::fromLatin1("file://"));
|
|
Packit |
1c1d7e |
indexUrl+=fi.absoluteFilePath();
|
|
Packit |
1c1d7e |
QDesktopServices::openUrl(QUrl(indexUrl));
|
|
Packit |
1c1d7e |
#endif
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void MainWindow::saveLog()
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
QString fn = QFileDialog::getSaveFileName(this, tr("Save log file"),
|
|
Packit |
1c1d7e |
m_workingDir->text()+
|
|
Packit |
1c1d7e |
QString::fromLatin1("/doxygen_log.txt"));
|
|
Packit |
1c1d7e |
if (!fn.isEmpty())
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
QFile f(fn);
|
|
Packit |
1c1d7e |
if (f.open(QIODevice::WriteOnly))
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
QTextStream t(&f);
|
|
Packit |
1c1d7e |
t << m_outputLog->toPlainText();
|
|
Packit |
1c1d7e |
statusBar()->showMessage(tr("Output log saved"),messageTimeout);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
else
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
QMessageBox::warning(0,tr("Warning"),
|
|
Packit |
1c1d7e |
tr("Cannot open file ")+fn+tr(" for writing. Nothing saved!"),tr("ok"));
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void MainWindow::showSettings()
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
QString text;
|
|
Packit |
1c1d7e |
QTextStream t(&text);
|
|
Packit |
1c1d7e |
m_expert->writeConfig(t,true);
|
|
Packit |
1c1d7e |
m_outputLog->clear();
|
|
Packit |
1c1d7e |
m_outputLog->append(APPQT(text));
|
|
Packit |
1c1d7e |
m_outputLog->ensureCursorVisible();
|
|
Packit |
1c1d7e |
m_saveLog->setEnabled(true);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void MainWindow::configChanged()
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
m_modified = true;
|
|
Packit |
1c1d7e |
updateTitle();
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void MainWindow::updateTitle()
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
QString title = tr("Doxygen GUI frontend");
|
|
Packit |
1c1d7e |
if (m_modified)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
title+=QString::fromLatin1(" +");
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
if (!m_fileName.isEmpty())
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
title+=QString::fromLatin1(" (")+m_fileName+QString::fromLatin1(")");
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
setWindowTitle(title);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
bool MainWindow::discardUnsavedChanges(bool saveOption)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
if (m_modified)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
QMessageBox::StandardButton button;
|
|
Packit |
1c1d7e |
if (saveOption)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
button = QMessageBox::question(this,
|
|
Packit |
1c1d7e |
tr("Unsaved changes"),
|
|
Packit |
1c1d7e |
tr("Unsaved changes will be lost! Do you want to save the configuration file?"),
|
|
Packit |
1c1d7e |
QMessageBox::Save |
|
|
Packit |
1c1d7e |
QMessageBox::Discard |
|
|
Packit |
1c1d7e |
QMessageBox::Cancel
|
|
Packit |
1c1d7e |
);
|
|
Packit |
1c1d7e |
if (button==QMessageBox::Save)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
return saveConfig();
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
else
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
button = QMessageBox::question(this,
|
|
Packit |
1c1d7e |
tr("Unsaved changes"),
|
|
Packit |
1c1d7e |
tr("Unsaved changes will be lost! Do you want to continue?"),
|
|
Packit |
1c1d7e |
QMessageBox::Discard |
|
|
Packit |
1c1d7e |
QMessageBox::Cancel
|
|
Packit |
1c1d7e |
);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
return button==QMessageBox::Discard;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
return true;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
//-----------------------------------------------------------------------
|
|
Packit |
1c1d7e |
int main(int argc,char **argv)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
QApplication a(argc,argv);
|
|
Packit |
1c1d7e |
if (argc == 2)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
if (!qstrcmp(argv[1],"--help"))
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
QMessageBox msgBox;
|
|
Packit |
1c1d7e |
msgBox.setText(QString().sprintf("Usage: %s [config file]",argv[0]));
|
|
Packit |
1c1d7e |
msgBox.exec();
|
|
Packit |
1c1d7e |
exit(0);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
if (argc > 2)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
QMessageBox msgBox;
|
|
Packit |
1c1d7e |
msgBox.setText(QString().sprintf("Too many arguments specified\n\nUsage: %s [config file]",argv[0]));
|
|
Packit |
1c1d7e |
msgBox.exec();
|
|
Packit |
1c1d7e |
exit(1);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
else
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
MainWindow &main = MainWindow::instance();
|
|
Packit |
1c1d7e |
if (argc==2 && argv[1][0]!='-') // name of config file as an argument
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
main.loadConfigFromFile(QString::fromLocal8Bit(argv[1]));
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
main.show();
|
|
Packit |
1c1d7e |
return a.exec();
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|