玉兔远程控制 0.1.0-bate14
载入中...
搜索中...
未找到
ClipboardMimeData.h
1// Author: Kang Lin <kl222@126.com>
2#pragma once
3
4#include <QMimeData>
5#include <QMultiMap>
6#include <QVector>
7#include <QFile>
8#include <QSharedPointer>
9#include <QAtomicInteger>
10
11#include "freerdp/client/cliprdr.h"
12#include "winpr/clipboard.h"
13
14#define MIME_TYPE_RABBITREMOTECONTROL_PLUGINS_FREERDP "rabbit/remotecontrol/plugins/freerdp"
16class CClipboardMimeData : public QMimeData
17{
18 Q_OBJECT
19public:
20 explicit CClipboardMimeData(CliprdrClientContext* pContext);
21 virtual ~CClipboardMimeData();
22
23 const qint32 GetId() const;
24 struct _FORMAT {
25 UINT32 id;
26 QString name;
27 UINT32 localId;
28 };
29
30 int SetFormat(const CLIPRDR_FORMAT_LIST* pList);
31
32Q_SIGNALS:
33 void sigSendDataRequest(CliprdrClientContext* context,
34 UINT32 formatId) const;
35 void sigContinue();
36
37public:
38 virtual bool hasFormat(const QString &mimetype) const override;
39 virtual QStringList formats() const override;
40
41public Q_SLOTS:
42 void slotServerFormatData(const BYTE* pData, UINT32 nLen, UINT32 id);
43 void slotServerFileContentsRespose(UINT32 streamId, QByteArray& data);
44
45protected:
46#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
47 virtual QVariant retrieveData(const QString &mimeType, QMetaType preferredType) const override;
48#else
49 virtual QVariant retrieveData(const QString &mimeType, QVariant::Type preferredType) const override;
50#endif
51
52private:
53 int AddFormat(UINT32 id, const char *name);
54
55 bool isText(QString mimeType, bool bRegular = true) const;
56 bool isHtml(QString mimeType, bool bRegular = true) const;
57 bool isImage(QString mimeType, bool bRegular = true) const;
58 bool isUrls(QString mimeType, bool bRegular = true) const;
59
60Q_SIGNALS:
61 void sigRequestFileFromServer(const QString& mimetype, const QString& valueName,
62 const void* pData, const UINT32 nLen) const;
63private Q_SLOTS:
64 void slotRequestFileFromServer(const QString& mimeType, const QString& valueName,
65 const void* pData, const UINT32 nLen);
66private:
67 UINT sendRequestFilecontents(UINT32 listIndex,
68 UINT32 dwFlags,
69 DWORD nPositionHigh,
70 DWORD nPositionLow,
71 UINT32 cbRequested);
72private:
73 friend CClipboardFreeRDP;
74
75 static QAtomicInteger<qint32> m_nId;
76 qint32 m_Id;
77
78 CliprdrClientContext* m_pContext;
79 wClipboard* m_pClipboard; // Clipboard interface provided by winpr library
80
81 QVector<_FORMAT> m_Formats; // Save server format
82 QMultiMap<QString, _FORMAT> m_indexString;
83 QMap<UINT32, _FORMAT> m_indexId;
84 QStringList m_lstFormats; // Clipboard return farmat
85
86 QVariant m_Variant;
87 QVariant m_gnomeFiles;
88 QVariant m_uriFiles;
89 bool m_bExit;
90
92 {
93 QFile m_File;
94 QByteArray m_Data;
95 bool m_Success;
96 };
97 QMap<UINT32, QSharedPointer<_CliprdrFileStream> > m_Stream;
98};
void slotServerFormatData(const BYTE *pData, UINT32 nLen, UINT32 id)
if(pData == nullptr && nLen == 0) is Notify clipboard program has exited