diff options
Diffstat (limited to 'src/frontend/display/cdisplay.h')
-rw-r--r-- | src/frontend/display/cdisplay.h | 186 |
1 files changed, 186 insertions, 0 deletions
diff --git a/src/frontend/display/cdisplay.h b/src/frontend/display/cdisplay.h new file mode 100644 index 0000000..59a6a37 --- /dev/null +++ b/src/frontend/display/cdisplay.h @@ -0,0 +1,186 @@ +/********* +* +* This file is part of BibleTime's source code, http://www.bibletime.info/. +* +* Copyright 1999-2008 by the BibleTime developers. +* The BibleTime source code is licensed under the GNU General Public License version 2.0. +* +**********/ + + + +#ifndef CDISPLAY_H +#define CDISPLAY_H + +//BibleTime includes +#include "util/cpointers.h" +#include "backend/managers/cswordbackend.h" + +//Qt includes +#include <QMap> + + +class CDisplayConnections; +class CReadWindow; +class CWriteWindow; + +class CDisplayWindow; +class CReadDisplay; +class CWriteDisplay; + +class QMenu; + +/** The base class for all display widgets. + * @author The BibleTime team + */ +class CDisplay : public CPointers { +public: + enum WriteDisplayType { + HTMLDisplay = 0, + PlainTextDisplay + }; + + static CReadDisplay* createReadInstance(CReadWindow* readWindow, QWidget* parent = 0); + static CWriteDisplay* createWriteInstance( CWriteWindow* writeWindow, const WriteDisplayType& type = PlainTextDisplay, QWidget* parent = 0 ); + + enum TextType { + HTMLText, /* Used for HTML markup */ + PlainText /* Plain text without links etc. */ + }; + enum TextPart { + Document, /* All text */ + SelectedText, /* Only the selected text */ + AnchorOnly, + AnchorTextOnly, + AnchorWithText + }; + + /** + * Copies the given text with the specified format into the applications clipboard. + */ + virtual bool copy( const CDisplay::TextType format, const CDisplay::TextPart part ); + /** + * Saves the given text with the specified format into the applications clipboard. + */ + virtual bool save( const CDisplay::TextType format, const CDisplay::TextPart part ); + + //the pure virtual methods of this base class + + /** Returns the text in the given format. + * + */ + virtual const QString text( const CDisplay::TextType format = CDisplay::HTMLText, const CDisplay::TextPart part = CDisplay::Document ) = 0; + /** + * Sets the new text for this display widget. + */ + virtual void setText( const QString& newText ) = 0; + /** + * Returns true if the display widget has a selection. Otherwise false. + */ + virtual bool hasSelection() = 0; + /** + * Returns the view of this display widget. + */ + virtual QWidget* view() = 0; + /** + * Selects the document text. + */ + virtual void selectAll() = 0; + /** + * Returns the connections obect used for signas and slots. + */ + virtual CDisplayConnections* connectionsProxy() const; + /** + * Returns the parent window used for this display widget. + */ + CDisplayWindow* parentWindow() const; + virtual void print( const CDisplay::TextPart, CSwordBackend::DisplayOptions displayOptions, CSwordBackend::FilterOptions filterOptions) = 0; + /** + * Installs the popup which should be opened when the right mouse button was pressed. + */ + void installPopup( QMenu* popup ); + /** + * Returns the popup menu which was set by installPopupMenu() + */ + QMenu* installedPopup(); + + virtual void zoomIn() {} + virtual void zoomOut() {} + virtual void openFindTextDialog() {} + + enum NodeInfoType { + Lemma + }; + + + virtual QMap<NodeInfoType, QString> getCurrentNodeInfo() { + return QMap<NodeInfoType, QString>(); + } + +protected: + /** + * Used when a reference was dropped onto the widget. + */ + void emitReferenceDropped( const QString& reference ); + /** + * Emits the signal which used when a reference was clicked. + */ + void emitReferenceClicked( const QString& reference ); + +protected: + CDisplay(CDisplayWindow* parent); + virtual ~CDisplay(); + +private: + CDisplayWindow* m_parentWindow; + CDisplayConnections* m_connections; + QMenu* m_popup; +}; + +class CDisplayConnections : public QObject { + Q_OBJECT +public: + CDisplayConnections( CDisplay* parent ); + +public slots: + virtual void selectAll(); + void emitReferenceClicked( const QString& module, const QString& key); + void emitReferenceDropped( const QString& key ); + void emitTextChanged(); + + //stuff which works in every CDisplay + void saveAsPlain(); + void saveAsHTML(); + void saveAnchorWithText(); + + void printAll(CSwordBackend::DisplayOptions displayOptions, CSwordBackend::FilterOptions filterOptions); + void printAnchorWithText(CSwordBackend::DisplayOptions displayOptions, CSwordBackend::FilterOptions filterOptions); + + void copySelection(); + void copyAll(); + void copyAnchorWithText(); + void copyAnchorTextOnly(); + void copyAnchorOnly(); + + void clear(); + + void zoomIn(); + void zoomOut(); + + void openFindTextDialog(); + +signals: + void referenceClicked(const QString& module, const QString& key); + void referenceDropped(const QString& key); + void textChanged(); + +private: + CDisplay* m_display; + + struct { + QString module; + QString key; + } m_referenceClickedCache; +}; + +#endif |