diff options
Diffstat (limited to 'examples/widgets/tools/plugandpaint/app/mainwindow.cpp')
-rw-r--r-- | examples/widgets/tools/plugandpaint/app/mainwindow.cpp | 282 |
1 files changed, 0 insertions, 282 deletions
diff --git a/examples/widgets/tools/plugandpaint/app/mainwindow.cpp b/examples/widgets/tools/plugandpaint/app/mainwindow.cpp deleted file mode 100644 index 8e58ae4ba8..0000000000 --- a/examples/widgets/tools/plugandpaint/app/mainwindow.cpp +++ /dev/null @@ -1,282 +0,0 @@ -// Copyright (C) 2016 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause - - -#include "mainwindow.h" -#include "interfaces.h" -#include "paintarea.h" -#include "plugindialog.h" - -#include <QAction> -#include <QActionGroup> -#include <QApplication> -#include <QColorDialog> -#include <QFileDialog> -#include <QInputDialog> -#include <QMenu> -#include <QMenuBar> -#include <QMessageBox> -#include <QPluginLoader> -#include <QScrollArea> -#include <QTimer> - -MainWindow::MainWindow() : paintArea(new PaintArea) - , scrollArea(new QScrollArea) -{ - scrollArea->setBackgroundRole(QPalette::Dark); - scrollArea->setWidget(paintArea); - setCentralWidget(scrollArea); - - createActions(); - createMenus(); - loadPlugins(); - - setWindowTitle(tr("Plug & Paint")); - - if (!brushActionGroup->actions().isEmpty()) - brushActionGroup->actions().first()->trigger(); - - QTimer::singleShot(500, this, &MainWindow::aboutPlugins); -} - -void MainWindow::open() -{ - const QString fileName = QFileDialog::getOpenFileName(this, - tr("Open File"), - QDir::currentPath()); - if (!fileName.isEmpty()) { - if (!paintArea->openImage(fileName)) { - QMessageBox::information(this, tr("Plug & Paint"), - tr("Cannot load %1.").arg(fileName)); - return; - } - paintArea->adjustSize(); - } -} - -bool MainWindow::saveAs() -{ - const QString initialPath = QDir::currentPath() + "/untitled.png"; - - const QString fileName = QFileDialog::getSaveFileName(this, tr("Save As"), - initialPath); - if (fileName.isEmpty()) - return false; - - return paintArea->saveImage(fileName, "png"); -} - -void MainWindow::brushColor() -{ - const QColor newColor = QColorDialog::getColor(paintArea->brushColor()); - if (newColor.isValid()) - paintArea->setBrushColor(newColor); -} - -void MainWindow::brushWidth() -{ - bool ok; - const int newWidth = QInputDialog::getInt(this, tr("Plug & Paint"), - tr("Select brush width:"), - paintArea->brushWidth(), - 1, 50, 1, &ok); - if (ok) - paintArea->setBrushWidth(newWidth); -} - -//! [0] -void MainWindow::changeBrush() -{ - auto action = qobject_cast<QAction *>(sender()); - if (!action) - return; - auto iBrush = qobject_cast<BrushInterface *>(action->parent()); - if (!iBrush) - return; - const QString brush = action->text(); - - paintArea->setBrush(iBrush, brush); -} -//! [0] - -//! [1] -void MainWindow::insertShape() -{ - auto action = qobject_cast<QAction *>(sender()); - if (!action) - return; - auto iShape = qobject_cast<ShapeInterface *>(action->parent()); - if (!iShape) - return; - - const QPainterPath path = iShape->generateShape(action->text(), this); - if (!path.isEmpty()) - paintArea->insertShape(path); -} -//! [1] - -//! [2] -void MainWindow::applyFilter() -{ - auto action = qobject_cast<QAction *>(sender()); - if (!action) - return; - auto iFilter = qobject_cast<FilterInterface *>(action->parent()); - if (!iFilter) - return; - - const QImage image = iFilter->filterImage(action->text(), paintArea->image(), - this); - paintArea->setImage(image); -} -//! [2] - -void MainWindow::about() -{ - QMessageBox::about(this, tr("About Plug & Paint"), - tr("The <b>Plug & Paint</b> example demonstrates how to write Qt " - "applications that can be extended through plugins.")); -} - -//! [3] -void MainWindow::aboutPlugins() -{ - PluginDialog dialog(pluginsDir.path(), pluginFileNames, this); - dialog.exec(); -} -//! [3] - -void MainWindow::createActions() -{ - openAct = new QAction(tr("&Open..."), this); - openAct->setShortcuts(QKeySequence::Open); - connect(openAct, &QAction::triggered, this, &MainWindow::open); - - saveAsAct = new QAction(tr("&Save As..."), this); - saveAsAct->setShortcuts(QKeySequence::SaveAs); - connect(saveAsAct, &QAction::triggered, this, &MainWindow::saveAs); - - exitAct = new QAction(tr("E&xit"), this); - exitAct->setShortcuts(QKeySequence::Quit); - connect(exitAct, &QAction::triggered, this, &MainWindow::close); - - brushColorAct = new QAction(tr("&Brush Color..."), this); - connect(brushColorAct, &QAction::triggered, this, &MainWindow::brushColor); - - brushWidthAct = new QAction(tr("&Brush Width..."), this); - connect(brushWidthAct, &QAction::triggered, this, &MainWindow::brushWidth); - - brushActionGroup = new QActionGroup(this); - - aboutAct = new QAction(tr("&About"), this); - connect(aboutAct, &QAction::triggered, this, &MainWindow::about); - - aboutQtAct = new QAction(tr("About &Qt"), this); - connect(aboutQtAct, &QAction::triggered, qApp, &QApplication::aboutQt); - - aboutPluginsAct = new QAction(tr("About &Plugins"), this); - connect(aboutPluginsAct, &QAction::triggered, this, &MainWindow::aboutPlugins); -} - -void MainWindow::createMenus() -{ - fileMenu = menuBar()->addMenu(tr("&File")); - fileMenu->addAction(openAct); - fileMenu->addAction(saveAsAct); - fileMenu->addSeparator(); - fileMenu->addAction(exitAct); - - brushMenu = menuBar()->addMenu(tr("&Brush")); - brushMenu->addAction(brushColorAct); - brushMenu->addAction(brushWidthAct); - brushMenu->addSeparator(); - - shapesMenu = menuBar()->addMenu(tr("&Shapes")); - - filterMenu = menuBar()->addMenu(tr("&Filter")); - - menuBar()->addSeparator(); - - helpMenu = menuBar()->addMenu(tr("&Help")); - helpMenu->addAction(aboutAct); - helpMenu->addAction(aboutQtAct); - helpMenu->addAction(aboutPluginsAct); -} - -//! [4] -void MainWindow::loadPlugins() -{ - const auto staticInstances = QPluginLoader::staticInstances(); - for (QObject *plugin : staticInstances) - populateMenus(plugin); -//! [4] //! [5] - - pluginsDir = QDir(QCoreApplication::applicationDirPath()); - -#if defined(Q_OS_WIN) - if (pluginsDir.dirName().toLower() == "debug" || pluginsDir.dirName().toLower() == "release") - pluginsDir.cdUp(); -#elif defined(Q_OS_MAC) - if (pluginsDir.dirName() == "MacOS") { - pluginsDir.cdUp(); - pluginsDir.cdUp(); - pluginsDir.cdUp(); - } -#endif - pluginsDir.cd("plugins"); -//! [5] - -//! [6] - const auto entryList = pluginsDir.entryList(QDir::Files); - for (const QString &fileName : entryList) { - QPluginLoader loader(pluginsDir.absoluteFilePath(fileName)); - QObject *plugin = loader.instance(); - if (plugin) { - populateMenus(plugin); - pluginFileNames += fileName; -//! [6] //! [7] - } -//! [7] //! [8] - } -//! [8] - -//! [9] - brushMenu->setEnabled(!brushActionGroup->actions().isEmpty()); - shapesMenu->setEnabled(!shapesMenu->actions().isEmpty()); - filterMenu->setEnabled(!filterMenu->actions().isEmpty()); -} -//! [9] - -//! [10] -void MainWindow::populateMenus(QObject *plugin) -{ - auto iBrush = qobject_cast<BrushInterface *>(plugin); - if (iBrush) - addToMenu(plugin, iBrush->brushes(), brushMenu, &MainWindow::changeBrush, - brushActionGroup); - - auto iShape = qobject_cast<ShapeInterface *>(plugin); - if (iShape) - addToMenu(plugin, iShape->shapes(), shapesMenu, &MainWindow::insertShape); - - auto iFilter = qobject_cast<FilterInterface *>(plugin); - if (iFilter) - addToMenu(plugin, iFilter->filters(), filterMenu, &MainWindow::applyFilter); -} -//! [10] - -void MainWindow::addToMenu(QObject *plugin, const QStringList &texts, - QMenu *menu, Member member, - QActionGroup *actionGroup) -{ - for (const QString &text : texts) { - auto action = new QAction(text, plugin); - connect(action, &QAction::triggered, this, member); - menu->addAction(action); - - if (actionGroup) { - action->setCheckable(true); - actionGroup->addAction(action); - } - } -} |