diff --git a/cmd/gvedit/main.cpp b/cmd/gvedit/main.cpp index 47d07af7e157a3c0c3e1266111f89a14d603005a..5930aac267768d09598708979d67173354b521f5 100644 --- a/cmd/gvedit/main.cpp +++ b/cmd/gvedit/main.cpp @@ -20,15 +20,14 @@ #endif #include #include +#include #include #include "mainwindow.h" -#include #include #include #include - #ifdef _MSC_VER #pragma comment( lib, "cgraph.lib" ) #pragma comment( lib, "gvc.lib" ) @@ -36,63 +35,63 @@ QTextStream errout(stderr, QIODevice::WriteOnly); -static char useString[] = "Usage: gvedit [-v?] \n\ - -s - Scale input by 72\n\ - -v - verbose\n\ - -? - print usage\n"; - -static void usage(int v) +int main(int argc, char *argv[]) { - printf("%s",useString); - graphviz_exit(v); -} + Q_INIT_RESOURCE(mdi); + + QStringList files; + { + // Scoped QCoreApplication for when X11 DISPLAY is not available + QCoreApplication app(argc, argv); + + QCommandLineParser parser; + parser.setApplicationDescription(QStringLiteral("gvedit - simple graph editor and viewer")); + parser.addPositionalArgument(QStringLiteral("files"), QCoreApplication::translate("main", "files to open."), "[files...]"); + + const QCommandLineOption helpOption({ + QStringLiteral("?"), + QStringLiteral("h"), + QStringLiteral("help"), + }, QCoreApplication::translate("main", "Displays help on commandline options.")); + parser.addOption(helpOption); + + const QCommandLineOption scaleInputBy72Option({ + QStringLiteral("s"), + QStringLiteral("scale-input-by-72"), + }, QCoreApplication::translate("main", "Scale input by 72")); + parser.addOption(scaleInputBy72Option); + + const QCommandLineOption verboseOption({ + QStringLiteral("v"), + QStringLiteral("verbose"), + }, QCoreApplication::translate("main", "Verbose mode")); + parser.addOption(verboseOption); + + if (!parser.parse(app.arguments())) { + parser.showHelp(1); + } -static char **parseArgs(int argc, char *argv[]) -{ - int c; - - const char *cmd = argv[0]; - while ((c = getopt(argc, argv, ":sv?")) != -1) { - switch (c) { - case 's': - PSinputscale = POINTS_PER_INCH; - break; - case 'v': - Verbose = 1; - break; - case '?': - if (optopt == '\0' || optopt == '?') - usage(0); - else { - errout << cmd << " : option -" << ((char) optopt) << - " unrecognized\n"; - errout.flush(); - usage(1); - } - break; - } + if (parser.isSet(helpOption)) { + parser.showHelp(0); } - argv += optind; - argc -= optind; + if (parser.isSet(scaleInputBy72Option)) { + PSinputscale = POINTS_PER_INCH; + } - if (argc) - return argv; - else - return nullptr; -} + if (parser.isSet(verboseOption)) { + Verbose = 1; + } -int main(int argc, char *argv[]) -{ - Q_INIT_RESOURCE(mdi); - int ret; - - char **files = parseArgs(argc, argv); - QApplication app(argc, argv); - CMainWindow mainWin(files); - mainWin.show(); - ret = app.exec(); - graphviz_exit(ret); + files = parser.positionalArguments(); + } + + QApplication app(argc, argv); + + CMainWindow mainWin(files); + mainWin.show(); + const int ret = app.exec(); + graphviz_exit(ret); } /** diff --git a/cmd/gvedit/mainwindow.cpp b/cmd/gvedit/mainwindow.cpp index e18f2de54fd5a6115a1a4c9a09bb9b021e7ea8a1..e98a66e6952b4decde5d736bce46432538023622 100644 --- a/cmd/gvedit/mainwindow.cpp +++ b/cmd/gvedit/mainwindow.cpp @@ -9,14 +9,13 @@ *************************************************************************/ #include -#include #include #include "mainwindow.h" #include "mdichild.h" #include "csettings.h" #include "config.h" -#include +#include QTextEdit *globTextEdit; @@ -69,7 +68,7 @@ void CMainWindow::createConsole() QVBoxLayout *vL = new QVBoxLayout(); - textEdit->setObjectName(QString::fromUtf8("textEdit")); + textEdit->setObjectName(QStringLiteral("textEdit")); globTextEdit = textEdit; agseterrf(errorPipe); @@ -104,16 +103,16 @@ void CMainWindow::createConsole() static const QStringList xtra = {"NONE"}; -CMainWindow::CMainWindow(char **files) { +CMainWindow::CMainWindow(const QStringList &files) { QWidget *centralwidget = new QWidget(this); - centralwidget->setObjectName(QString::fromUtf8("centralwidget")); + centralwidget->setObjectName(QStringLiteral("centralwidget")); QVBoxLayout *verticalLayout_2 = new QVBoxLayout(centralwidget); - verticalLayout_2->setObjectName(QString::fromUtf8("verticalLayout_2")); + verticalLayout_2->setObjectName(QStringLiteral("verticalLayout_2")); QVBoxLayout *verticalLayout = new QVBoxLayout(); - verticalLayout->setObjectName(QString::fromUtf8("verticalLayout")); + verticalLayout->setObjectName(QStringLiteral("verticalLayout")); mdiArea = new QMdiArea(centralwidget); - mdiArea->setObjectName(QString::fromUtf8("mdiArea")); + mdiArea->setObjectName(QStringLiteral("mdiArea")); verticalLayout->addWidget(mdiArea); verticalLayout_2->setContentsMargins(1, 1, 1, 1); @@ -124,12 +123,7 @@ CMainWindow::CMainWindow(char **files) { createConsole(); - connect(mdiArea, SIGNAL(subWindowActivated(QMdiSubWindow *)), - this, SLOT(slotRefreshMenus())); - windowMapper = new QSignalMapper(this); - connect(windowMapper, SIGNAL(mapped(QWidget *)), - this, SLOT(activateChild(QWidget *))); - + connect(mdiArea, &QMdiArea::subWindowActivated, this, &CMainWindow::slotRefreshMenus); frmSettings = new CFrmSettings(); actions(); @@ -144,20 +138,17 @@ CMainWindow::CMainWindow(char **files) { this->resize(1024, 900); this->move(0, 0); setUnifiedTitleAndToolBarOnMac(true); - QComboBox *cb = - (QComboBox *) frmSettings->findChild < QComboBox * >("cbLayout"); + auto cb = frmSettings->findChild < QComboBox * >("cbLayout"); dfltLayoutIdx = LoadPlugins(*cb, frmSettings->gvc, "layout", {}, "dot"); - cb = (QComboBox *) frmSettings->findChild < + cb = frmSettings->findChild < QComboBox * >("cbExtension"); dfltRenderIdx = LoadPlugins(*cb, frmSettings->gvc, "device", xtra, "png"); statusBar()->showMessage(tr("Ready")); setWindowIcon(QIcon(":/images/icon.png")); //load files specified in command line , one time task - if (files) - while (*files) { - addFile(QString(*files)); - files++; - } + for (const auto &file : files) { + addFile(file); + } } void CMainWindow::closeEvent(QCloseEvent * event) @@ -178,14 +169,14 @@ void CMainWindow::slotNew() child->show(); } -void CMainWindow::addFile(QString fileName) +void CMainWindow::addFile(const QString &fileName) { if (!fileName.isEmpty()) { QMdiSubWindow *existing = findMdiChild(fileName); - if (existing) { - mdiArea->setActiveSubWindow(existing); - return; - } + if (existing) { + mdiArea->setActiveSubWindow(existing); + return; + } MdiChild *child = createMdiChild(); if (child->loadFile(fileName)) { @@ -193,7 +184,7 @@ void CMainWindow::addFile(QString fileName) child->show(); slotRun(child); } else { - child->close(); + child->close(); } } } @@ -386,13 +377,14 @@ void CMainWindow::updateWindowMenu() mWindow->addAction(previousAct); mWindow->addAction(separatorAct); - QList < QMdiSubWindow * >windows = mdiArea->subWindowList(); + const QList < QMdiSubWindow * >windows = mdiArea->subWindowList(); separatorAct->setVisible(!windows.isEmpty()); for (int i = 0; i < windows.size(); ++i) { - if (windows.at(i)->widget()->inherits("MdiChild")) { + const auto window = windows.at(i); + if (window->widget()->inherits("MdiChild")) { MdiChild *child = - qobject_cast < MdiChild * >(windows.at(i)->widget()); + qobject_cast < MdiChild * >(window->widget()); QString text; if (i < 9) { text = tr("&%1 %2").arg(i + 1) @@ -404,9 +396,9 @@ void CMainWindow::updateWindowMenu() QAction *action = mWindow->addAction(text); action->setCheckable(true); action->setChecked(child == activeMdiChild()); - connect(action, SIGNAL(triggered()), windowMapper, - SLOT(map())); - windowMapper->setMapping(action, windows.at(i)); + connect(action, &QAction::triggered, this, [this, window] { + activateChild(window); + }); } } } @@ -641,21 +633,19 @@ QMdiSubWindow *CMainWindow::findMdiChild(const QString & fileName) MdiChild *mdiChild = qobject_cast < MdiChild * >(window->widget()); - if (mdiChild->currentFile() == canonicalFilePath) + + if (mdiChild->currentFile() == canonicalFilePath) return window; } else { MdiChild *mdiChild = qobject_cast < - ImageViewer * >(window->widget())->graphWindow; + ImageViewer * >(window->widget())->graphWindow; if (mdiChild->currentFile() == canonicalFilePath) return window; } - - - } - return 0; + return nullptr; } void CMainWindow::activateChild(QWidget * window) diff --git a/cmd/gvedit/mainwindow.h b/cmd/gvedit/mainwindow.h index 4eb10c5205b46fe4201226cefc24d81f1c57b932..421d5331a3e8bbac32e0c53f3be20055faa48b34 100644 --- a/cmd/gvedit/mainwindow.h +++ b/cmd/gvedit/mainwindow.h @@ -29,7 +29,6 @@ class QAction; class QMenu; class QMdiArea; class QMdiSubWindow; -class QSignalMapper; QT_END_NAMESPACE class CMainWindow : public QMainWindow @@ -37,9 +36,9 @@ class CMainWindow : public QMainWindow Q_OBJECT public: - CMainWindow(char **files = nullptr); + CMainWindow(const QStringList &files = {}); QMdiArea *mdiArea; - void addFile (QString fileName); + void addFile (const QString &fileName); private slots: void slotSettings(); void slotRun(MdiChild* m = nullptr); @@ -75,7 +74,6 @@ private: MdiChild *activeMdiChild(); MdiChild* prevChild; QMdiSubWindow *findMdiChild(const QString &fileName); - QSignalMapper *windowMapper; int dfltRenderIdx, dfltLayoutIdx; QToolBar *tbFile; diff --git a/cmd/gvedit/mdichild.cpp b/cmd/gvedit/mdichild.cpp index c4390fbd97c1b3c93d789987820e2704cef05529..2bc0b05f37849c8a95d7784eba819c9bc3885a29 100644 --- a/cmd/gvedit/mdichild.cpp +++ b/cmd/gvedit/mdichild.cpp @@ -42,7 +42,7 @@ bool MdiChild::loadFile(const QString & fileName) QFile file(fileName); if (!file.open(QFile::ReadOnly | QFile::Text)) { QMessageBox::warning(this, tr("MDI"), - tr("Cannot read file %1:\n%2.") + tr("Cannot read file %1:\n%2.") .arg(fileName) .arg(file.errorString())); return false;