/*************************************************************************** * Copyright (C) 2002 by Wilco Greven * * Copyright (C) 2003-2004 by Christophe Devriese * * * * Copyright (C) 2003 by Andy Goossens * * Copyright (C) 2003 by Laurent Montel * * Copyright (C) 2004 by Dominique Devriese * * Copyright (C) 2004-2007 by Albert Astals Cid * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * ***************************************************************************/ #ifndef _PART_H_ #define _PART_H_ #include #include #include #include #include #include #include "core/observer.h" #include "core/document.h" #include "kdocumentviewer.h" #include class QAction; class QWidget; class QSplitter; class QToolBox; class KUrl; class KConfigGroup; class KDirWatch; class KToggleAction; class KToggleFullScreenAction; class KSelectAction; class KAboutData; class KPrinter; class KTemporaryFile; class FindBar; class ThumbnailList; class ThumbnailController; class PageSizeLabel; class PageView; class PageViewTopMessage; class PresentationWidget; class ProgressWidget; class SearchWidget; class TOC; class MiniBar; namespace Okular { class ExportFormat; } class BrowserExtension; /** * This is a "Part". It that does all the real work in a KPart * application. * * @short Main Part * @author Wilco Greven * @version 0.2 */ class Part : public KParts::ReadOnlyPart, public Okular::DocumentObserver, public KDocumentViewer { Q_OBJECT Q_CLASSINFO("D-Bus Interface", "org.kde.okular") Q_INTERFACES(KDocumentViewer) public: // Default constructor Part(QWidget* parentWidget, QObject* parent, const QStringList& args); // Destructor ~Part(); // inherited from DocumentObserver uint observerId() const { return PART_ID; } void notifySetup( const QVector< Okular::Page * > &pages, bool documentChanged ); void notifyViewportChanged( bool smoothMove ); void notifyPageChanged( int page, int flags ); static KAboutData* createAboutData(); bool openDocument(const KUrl& url, uint page); void startPresentation(); QStringList supportedMimeTypes() const; public slots: // dbus Q_SCRIPTABLE Q_NOREPLY void goToPage(uint page); Q_SCRIPTABLE Q_NOREPLY void openDocument(KUrl doc); Q_SCRIPTABLE uint pages(); Q_SCRIPTABLE uint currentPage(); Q_SCRIPTABLE KUrl currentDocument(); Q_SCRIPTABLE void slotPreferences(); Q_SCRIPTABLE void slotFind(); Q_SCRIPTABLE void slotPrintPreview(); Q_SCRIPTABLE void slotPreviousPage(); Q_SCRIPTABLE void slotNextPage(); Q_SCRIPTABLE void slotGotoFirst(); Q_SCRIPTABLE void slotGotoLast(); signals: void enablePrintAction(bool enable); protected: // reimplemented from KParts::ReadOnlyPart bool openFile(); bool openUrl(const KUrl &url); bool closeUrl(); protected slots: // connected to actions void openUrlFromDocument(const KUrl &url); void openUrlFromBookmarks(const KUrl &url); void slotGoToPage(); void slotHistoryBack(); void slotHistoryNext(); void slotAddBookmark(); void slotPreviousBookmark(); void slotNextBookmark(); void slotFindNext(); void slotSaveFileAs(); void slotGetNewStuff(); void slotNewConfig(); void slotShowMenu(const Okular::Page *page, const QPoint &point); void slotShowProperties(); void slotShowEmbeddedFiles(); void slotShowLeftPanel(); void slotShowPresentation(); void slotHidePresentation(); void slotExportAs(QAction *); bool slotImportPSFile(); void slotAboutBackend(); void slotReload(); void close(); void cannotQuit(); void splitterMoved( int pos, int index ); void slotShowFindBar(); void slotHideFindBar(); void setMimeTypes(KIO::Job *job); void readMimeType(KIO::Job *job, const QString &mime); void saveSplitterSize(); // can be connected to widget elements void updateViewActions(); void updateBookmarksActions(); void enableTOC(bool enable); public slots: // connected to Shell action (and browserExtension), not local one void slotPrint(); void restoreDocument(const KConfigGroup &group); void saveDocumentRestoreInfo(KConfigGroup &group); void slotFileDirty( const QString& ); void slotDoFileDirty(); void psTransformEnded(int, QProcess::ExitStatus); private: void doPrint( KPrinter& printer ); bool handleCompressed(KUrl & url, const QString &path, const KMimeType::Ptr mimetype); void rebuildBookmarkMenu( bool unplugActions = true ); void updateAboutBackendAction(); KTemporaryFile *m_tempfile; // the document Okular::Document * m_document; QString m_temporaryLocalFile; // main widgets QSplitter *m_splitter; QWidget *m_leftPanel; QToolBox *m_toolBox; SearchWidget *m_searchWidget; FindBar * m_findBar; PageViewTopMessage * m_topMessage; PageViewTopMessage * m_formsMessage; QPointer m_thumbnailList; QPointer m_pageView; QPointer m_toc; QPointer m_miniBar; QPointer m_presentationWidget; QPointer m_progressWidget; QPointer m_pageSizeLabel; // document watcher (and reloader) variables KDirWatch *m_watcher; QTimer *m_dirtyHandler; Okular::DocumentViewport m_viewportDirty; bool m_wasPresentationOpen; int m_dirtyToolboxIndex; // Remember the search history QStringList m_searchHistory; // mimetype got from the job QString m_jobMime; // actions QAction *m_gotoPage; QAction *m_prevPage; QAction *m_nextPage; QAction *m_firstPage; QAction *m_lastPage; QAction *m_historyBack; QAction *m_historyNext; QAction *m_addBookmark; QAction *m_prevBookmark; QAction *m_nextBookmark; QAction *m_copy; QAction *m_find; QAction *m_findNext; QAction *m_saveAs; QAction *m_printPreview; QAction *m_showProperties; QAction *m_showEmbeddedFiles; QAction *m_exportAs; QAction *m_exportAsText; QAction *m_showPresentation; KToggleAction* m_showMenuBarAction; KToggleAction* m_showLeftPanel; KToggleFullScreenAction* m_showFullScreenAction; QAction *m_aboutBackend; QAction *m_reload; bool m_actionsSearched; bool m_searchStarted; BrowserExtension *m_bExtension; KSelectAction * m_confGens; QList m_exportFormats; QList m_bookmarkActions; bool m_cliPresentation; QString m_addBookmarkText; QIcon m_addBookmarkIcon; private slots: void slotGeneratorPreferences(); }; class BrowserExtension : public KParts::BrowserExtension { Q_OBJECT public: BrowserExtension(Part*); public slots: // Automatically detected by the host. void print(); private: Part *m_part; }; #endif // vim:ts=2:sw=2:tw=78:et