File indexing completed on 2024-05-12 04:33:20

0001 /*
0002     SPDX-FileCopyrightText: 2012 Victor Dodon <dodonvictor at gmail dot com>
0003     SPDX-FileCopyrightText: 2012-2018 Gilles Caulier <caulier dot gilles at gmail dot com>
0004 
0005     SPDX-License-Identifier: GPL-2.0-or-later
0006 */
0007 
0008 #include "kipitestmainwindow.h"
0009 
0010 // Qt includes
0011 
0012 #include <QPointer>
0013 #include <QDebug>
0014 #include <QMenuBar>
0015 
0016 // KF includes
0017 
0018 #include <KConfigGroup>
0019 #include <KSharedConfig>
0020 #include <KToggleAction>
0021 #include <KStandardAction>
0022 #include <KActionCollection>
0023 #include <KShortcutsDialog>
0024 #include <KEditToolBar>
0025 #include <KWindowConfig>
0026 
0027 // LibKIPI includes
0028 
0029 #include "pluginloader.h"
0030 #include "libkipi_version.h"
0031 
0032 // Local includes
0033 
0034 #include "kipitestpluginloader.h"
0035 #include "kipiinterface.h"
0036 #include "kipisetup.h"
0037 
0038 namespace KXMLKipiCmd
0039 {
0040 
0041 KipiTestMainWindow* KipiTestMainWindow::m_instance = nullptr;
0042 
0043 class KipiTestMainWindow::Private
0044 {
0045 
0046 public:
0047 
0048     Private() :
0049         config(nullptr),
0050         quitAction(nullptr),
0051         showMenuBarAction(nullptr),
0052         kipiInterface(nullptr),
0053         uiFile(QString())
0054     {
0055     }
0056 
0057     KSharedConfig::Ptr config;
0058     QAction*           quitAction;
0059     KToggleAction*     showMenuBarAction;
0060     KipiInterface*     kipiInterface;
0061     QString            uiFile;
0062 };
0063 
0064 KipiTestMainWindow::KipiTestMainWindow(const QList<QUrl>& selectedImages,
0065                                        const QList<QUrl>& selectedAlbums,
0066                                        const QList<QUrl>& allAlbums)
0067     : KXmlGuiWindow(nullptr),
0068       d(new Private())
0069 {
0070     m_instance           = this;
0071     d->config            = KSharedConfig::openConfig();
0072     d->kipiInterface     = new KipiInterface(this, QLatin1String("kxmlkipicmd_KIPI_interface"));
0073     KConfigGroup uiGroup = d->config->group(QLatin1String("UI Settings"));
0074     QString uiFile       = uiGroup.readEntry(QString::fromLatin1("UiFile"), QString::fromLatin1("kxmlkipicmd_defaultui.rc"));
0075 
0076     d->uiFile = uiFile;
0077     setObjectName(QString::fromLatin1("kxmlkipicmd"));
0078 
0079     setMinimumSize(QSize(800, 600));
0080     KConfigGroup mainWindowGroup = d->config->group(QLatin1String("MainWindow Dialog"));
0081     KWindowConfig::restoreWindowSize(windowHandle(), mainWindowGroup);
0082 
0083     if (!selectedImages.empty())
0084     {
0085         d->kipiInterface->addSelectedImages(selectedImages);
0086     }
0087     if (!selectedAlbums.empty())
0088     {
0089         d->kipiInterface->addSelectedAlbums(selectedAlbums);
0090     }
0091     if (!allAlbums.empty())
0092     {
0093         d->kipiInterface->addAlbums(allAlbums);
0094     }
0095 
0096     setupActions();
0097 
0098     // Provides a menu entry that allows showing/hiding the toolbar(s)
0099     setStandardToolBarMenuEnabled(true);
0100 
0101     loadPlugins();
0102 }
0103 
0104 KipiTestMainWindow::~KipiTestMainWindow()
0105 {
0106     KConfigGroup group = d->config->group(QLatin1String("MainWindow Dialog"));
0107     KWindowConfig::saveWindowSize(windowHandle(), group);
0108     group.sync();
0109 
0110     delete d;
0111 }
0112 
0113 KipiTestMainWindow* KipiTestMainWindow::instance()
0114 {
0115     return m_instance;
0116 }
0117 
0118 void KipiTestMainWindow::setupActions()
0119 {
0120     d->showMenuBarAction = KStandardAction::showMenubar(this, SLOT(slotShowMenuBar()), actionCollection());
0121     d->quitAction        = KStandardAction::quit(this,        SLOT(close()),           actionCollection());
0122     actionCollection()->addAction(QString::fromLatin1("app_exit"), d->quitAction);
0123 
0124     KStandardAction::keyBindings(this,       SLOT(slotEditKeys()),     actionCollection());
0125     KStandardAction::configureToolbars(this, SLOT(slotConfToolbars()), actionCollection());
0126     KStandardAction::preferences(this,       SLOT(slotSetup()),        actionCollection());
0127 
0128     createGUI(d->uiFile);
0129 }
0130 
0131 void KipiTestMainWindow::loadPlugins()
0132 {
0133     new KipiTestPluginLoader(this, d->kipiInterface);
0134 }
0135 
0136 void KipiTestMainWindow::slotShowMenuBar()
0137 {
0138     menuBar()->setVisible(d->showMenuBarAction->isChecked());
0139 }
0140 
0141 void KipiTestMainWindow::slotEditKeys()
0142 {
0143     KShortcutsDialog dialog(KShortcutsEditor::AllActions,
0144                             KShortcutsEditor::LetterShortcutsAllowed, this);
0145     dialog.addCollection(actionCollection(), QLatin1String("General"));
0146     dialog.addCollection(KipiTestPluginLoader::instance()->pluginsActionCollection(),
0147                          QLatin1String("KIPI-Plugins"));
0148     dialog.configure();
0149 }
0150 
0151 void KipiTestMainWindow::slotConfToolbars()
0152 {
0153     KConfigGroup grp = d->config->group(QLatin1String("General Settings"));
0154     saveMainWindowSettings(grp);
0155     KEditToolBar dlg(factory(), this);
0156 
0157     connect(&dlg, &KEditToolBar::newToolBarConfig,
0158             this, &KipiTestMainWindow::slotNewToolbarConfig);
0159 
0160     dlg.exec();
0161 }
0162 
0163 void KipiTestMainWindow::slotNewToolbarConfig()
0164 {
0165     applyMainWindowSettings(d->config->group(QLatin1String("General Settings")));
0166 }
0167 
0168 void KipiTestMainWindow::slotSetup()
0169 {
0170     KipiSetup::runSetupDialog(this);
0171 }
0172 
0173 } // namespace KXMLKipiCmd
0174 
0175 #include "moc_kipitestmainwindow.cpp"