/* SPDX-FileCopyrightText: 2002 Wilco Greven SPDX-FileCopyrightText: 2003 Benjamin Meyer SPDX-FileCopyrightText: 2003 Laurent Montel SPDX-FileCopyrightText: 2003 Luboš Luňák SPDX-FileCopyrightText: 2004 Christophe Devriese SPDX-FileCopyrightText: 2004 Albert Astals Cid SPDX-License-Identifier: GPL-2.0-or-later */ #ifndef _OKULAR_SHELL_H_ #define _OKULAR_SHELL_H_ #include #include #include #include #include #include #include #include // krazy:exclude=includes #include "welcomescreen.h" class KRecentFilesAction; class KToggleAction; class QTabWidget; class KPluginFactory; #ifndef Q_OS_WIN namespace KActivities { class ResourceInstance; } #endif /** * This is the application "Shell". It has a menubar and a toolbar * but relies on the "Part" to do all the real work. * * @short Application Shell * @author Wilco Greven * @version 0.1 */ class Shell : public KParts::MainWindow { Q_OBJECT Q_CLASSINFO("D-Bus Interface", "org.kde.okular") friend class MainShellTest; friend class AnnotationToolBarTest; public: /** * Constructor */ explicit Shell(const QString &serializedOptions = QString()); /** * Default Destructor */ ~Shell() override; QSize sizeHint() const override; /** * Returns false if Okular component wasn't found **/ bool isValid() const; bool openDocument(const QUrl &url, const QString &serializedOptions); public Q_SLOTS: Q_SCRIPTABLE Q_NOREPLY void tryRaise(); Q_SCRIPTABLE bool openDocument(const QString &urlString, const QString &serializedOptions = QString()); Q_SCRIPTABLE bool canOpenDocs(int numDocs, int desktop); protected: /** * This method is called when it is time for the app to save its * properties for session management purposes. */ void saveProperties(KConfigGroup &) override; /** * This method is called when this app is restored. The KConfig * object points to the session management config file that was saved * with @ref saveProperties */ void readProperties(const KConfigGroup &) override; /** * Expose internal functions for session restore testing */ void savePropertiesInternal(KConfig *config, int num) { KMainWindow::savePropertiesInternal(config, num); } void readPropertiesInternal(KConfig *config, int num) { KMainWindow::readPropertiesInternal(config, num); } void readSettings(); void writeSettings(); void setFullScreen(bool); using KParts::MainWindow::setCaption; void setCaption(const QString &caption) override; bool queryClose() override; void showEvent(QShowEvent *event) override; void keyPressEvent(QKeyEvent *) override; private Q_SLOTS: void fileOpen(); void slotUpdateFullScreen(); void slotShowMenubar(); void openUrl(const QUrl &url, const QString &serializedOptions = QString()); void showOpenRecentMenu(); void closeUrl(); void print(); void setPrintEnabled(bool enabled); void setCloseEnabled(bool enabled); void setTabIcon(const QMimeType &mimeType); void handleDroppedUrls(const QList &urls); // Tab event handlers void setActiveTab(int tab); void closeTab(int tab); void activateNextTab(); void activatePrevTab(); void undoCloseTab(); void moveTabData(int from, int to); void slotFitWindowToPage(const QSize pageViewSize, const QSize pageSize); void hideWelcomeScreen(); void showWelcomeScreen(); void refreshRecentsOnWelcomeScreen(); void forgetRecentItem(QUrl const &url); Q_SIGNALS: void moveSplitter(int sideWidgetSize); private: void saveRecents(); void setupAccel(); void setupActions(); void openNewTab(const QUrl &url, const QString &serializedOptions); void applyOptionsToPart(QObject *part, const QString &serializedOptions); void connectPart(QObject *part); int findTabIndex(QObject *sender) const; int findTabIndex(const QUrl &url) const; private: void reloadAllXML(); bool eventFilter(QObject *obj, QEvent *event) override; KPluginFactory *m_partFactory; KRecentFilesAction *m_recent; QStringList m_fileformats; bool m_fileformatsscanned; QAction *m_printAction; QAction *m_closeAction; KToggleAction *m_fullScreenAction; KToggleAction *m_showMenuBarAction; bool m_menuBarWasShown, m_toolBarWasShown; bool m_unique; QTabWidget *m_tabWidget; KToggleAction *m_openInTab; WelcomeScreen *m_welcomeScreen; QStackedWidget *m_centralStackedWidget; struct TabState { explicit TabState(KParts::ReadWritePart *p) : part(p) , printEnabled(false) , closeEnabled(false) { } KParts::ReadWritePart *part; bool printEnabled; bool closeEnabled; }; QList m_tabs; QList m_closedTabUrls; QAction *m_nextTabAction; QAction *m_prevTabAction; QAction *m_undoCloseTab; #ifndef Q_OS_WIN KActivities::ResourceInstance *m_activityResource; #endif bool m_isValid; }; #endif // vim:ts=2:sw=2:tw=78:et