]> git.lyx.org Git - lyx.git/blobdiff - src/frontends/qt4/GuiClipboard.h
Use <cstdint> instead of <boost/cstdint.hpp>
[lyx.git] / src / frontends / qt4 / GuiClipboard.h
index 12a8864a413d580f771ca534c286e1a1cdd1b96c..9ef7829de6caa1d8c8261a49d52fb1387cd1c5d6 100644 (file)
 
 #include "frontends/Clipboard.h"
 
+#include <QMimeData>
+#include <QObject>
+#include <QStringList>
+
+#include <cstdint>
+
 namespace lyx {
 namespace frontend {
 
+class QMacPasteboardMimeGraphics;
+
+/**
+ *  \class CacheMimeData
+ *
+ *  This class is used in order to query the clipboard only once on
+ *  startup and once each time the contents of the clipboard changes.
+ */
+class CacheMimeData : public QMimeData
+{
+       Q_OBJECT
+public:
+       // LyX calls "on_dataChanged" on startup, so it is not necessary to
+       // query the clipboard here.
+       CacheMimeData()
+       {}
+
+       /// reads the clipboard and updates the cached_formats_
+       void update();
+       /// returns the cached list of formats supported by the object
+       virtual QStringList formats() const { return cached_formats_; }
+       /// reads the clipboard and returns the data
+       QByteArray data(QString const & mimeType) const;
+
+private:
+       /// the cached list of formats supported by the object
+       QStringList cached_formats_;
+};
+
+
 /**
  * The Qt4 version of the Clipboard.
  */
-class GuiClipboard : public Clipboard
+class GuiClipboard: public QObject, public Clipboard
 {
+       Q_OBJECT
 public:
-       virtual ~GuiClipboard() {}
+       GuiClipboard();
 
        /** Clipboard overloaded methods
         */
        //@{
        std::string const getAsLyX() const;
-       docstring const getAsText() const;
-       void put(std::string const & lyx, docstring const & text);
-       bool hasLyXContents() const;
+       support::FileName getAsGraphics(Cursor const & cur, GraphicsType type) const;
+       docstring const getAsText(TextType type) const;
+       void put(std::string const & text) const;
+       void put(std::string const & lyx, docstring const & html, docstring const & text);
+       bool hasGraphicsContents(GraphicsType type = AnyGraphicsType) const;
+       bool hasTextContents(TextType typetype = AnyTextType) const;
        bool isInternal() const;
+       bool hasInternal() const;
        bool empty() const;
        //@}
+
+       support::FileName getPastedGraphicsFileName(Cursor const & cur,
+               Clipboard::GraphicsType & type) const;
+
+private Q_SLOTS:
+       void on_dataChanged();
+       void update();
+
+private:
+       bool plaintext_clipboard_empty_;
+       bool has_text_contents_;
+       bool has_graphics_contents_;
+       /// the cached mime data used to describe the information
+       /// that can be stored in the clipboard
+       CacheMimeData cache_;
+       /// checksum for internal clipboard data (used on Mac)
+       std::uint32_t checksum;
 };
 
+QString const lyxMimeType();
+QString const pdfMimeType();
+QString const emfMimeType();
+QString const wmfMimeType();
+
 } // namespace frontend
 } // namespace lyx