Changeset 439 for trunk/src/gui/kernel/qmime.h
- Timestamp:
- Dec 25, 2009, 12:21:47 AM (16 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/gui/kernel/qmime.h
r347 r439 111 111 112 112 /* 113 Encapsulation of conversion between MIME and OS/2 PM clipboard. 113 Encapsulation of conversion between MIME and OS/2 PM clipboard formats and 114 between MIME and Direct Manipulation (DND) objects. 114 115 */ 115 116 116 117 typedef unsigned long ULONG; 118 119 class QPMCoopDragWorker; 117 120 118 121 class Q_GUI_EXPORT QPMMime 119 122 { 120 123 public: 124 125 #if !defined(QT_NO_DRAGANDDROP) 126 127 class DragWorker 128 { 129 public: 130 DragWorker() : data(0) {} 131 virtual ~DragWorker() {} 132 133 const QMimeData *source() const { return src; } 134 135 virtual void init() {} 136 // methods always implemented 137 virtual bool cleanup( bool isCancelled) = 0; 138 virtual bool isExclusive() const = 0; 139 virtual ULONG itemCount() const = 0; 140 virtual HWND hwnd() const = 0; 141 // methods implemented if isExclusive() == TRUE and itemCount() == 0 142 virtual DRAGINFO *createDragInfo(const char *name, USHORT supportedOps) 143 { return NULL; } 144 // methods implemented if itemCount() >= 0 145 virtual QByteArray composeFormatString() { return QByteArray(); } 146 virtual bool prepare(const char *drm, const char *drf, DRAGITEM *item, 147 ULONG itemIndex) { return FALSE; } 148 virtual void defaultFileType(const char *&type, const char *&ext) {}; 149 150 private: 151 const QMimeData *src; 152 friend class QPMCoopDragWorker; 153 friend class QDragManager; 154 }; 155 156 class DefaultDragWorker : public DragWorker, public QPMObjectWindow 157 { 158 private: 159 DefaultDragWorker(bool exclusive); 160 public: 161 virtual ~DefaultDragWorker(); 162 163 // DragpWorker interface 164 bool cleanup(bool isCancelled); 165 bool isExclusive() const; 166 ULONG itemCount() const; 167 HWND hwnd() const { return QPMObjectWindow::hwnd(); } 168 QByteArray composeFormatString(); 169 bool prepare(const char *drm, const char *drf, DRAGITEM *item, 170 ULONG itemIndex); 171 void defaultFileType(const char *&type, const char *&ext); 172 173 // QPMObjectWindow interface 174 MRESULT message(ULONG msg, MPARAM mp1, MPARAM mp2); 175 176 class Provider 177 { 178 public: 179 virtual const char *format( const char *drf ) const = 0; 180 virtual bool provide(const char *drf, const QByteArray &allData, 181 ULONG itemIndex, QByteArray &itemData) = 0; 182 virtual void fileType(const char *drf, const char *&type, 183 const char *&ext) {}; 184 }; 185 186 bool addProvider(const char *drf, Provider *provider, 187 ULONG itemCount = 1); 188 189 static bool canRender(const char *drm); 190 191 private: 192 struct Data; 193 Data *d; 194 friend class QPMMime; 195 }; 196 197 class DropWorker 198 { 199 public: 200 DropWorker() : nfo(0) {} 201 virtual ~DropWorker() {} 202 203 DRAGINFO *info() const { return nfo; } 204 205 virtual void init() {} 206 virtual void cleanup(bool isAccepted, bool isActAccepted) {} 207 virtual bool isExclusive() const = 0; 208 209 virtual bool hasFormat(const QString &mimeType) const = 0; 210 virtual QStringList formats() const = 0; 211 virtual QVariant retrieveData(const QString &mimeType, QVariant::Type type) const = 0; 212 213 private: 214 DRAGINFO *nfo; 215 friend class QPMDragData; 216 }; 217 218 class DefaultDropWorker : public DropWorker, public QPMObjectWindow 219 { 220 private: 221 DefaultDropWorker(); 222 public: 223 virtual ~DefaultDropWorker(); 224 225 // DropWorker interface 226 void cleanup(bool isAccepted, bool isActAccepted); 227 bool isExclusive() const; 228 bool hasFormat(const QString &mimeType) const; 229 QStringList formats() const; 230 QVariant retrieveData(const QString &mimeType, QVariant::Type type) const; 231 232 // QPMObjectWindow interface 233 MRESULT message(ULONG msg, MPARAM mp1, MPARAM mp2); 234 235 class Provider 236 { 237 public: 238 virtual const char *drf(const QString &mimeType) const = 0; 239 virtual bool provide(const QString &mimeType, ULONG itemIndex, 240 const QByteArray &itemData, 241 QByteArray &allData) = 0; 242 }; 243 244 bool addProvider(const QString &mimeType, Provider *provider); 245 bool addExclusiveProvider(const QString &mimeType, Provider *provider); 246 247 static bool canRender(DRAGITEM *item, const char *drf ); 248 static bool getSupportedRMFs(DRAGITEM *item, QPtrList<QStrList> &list); 249 250 private: 251 struct Data; 252 Data *d; 253 friend class QPMMime; 254 }; 255 256 #endif // !QT_NO_DRAGANDDROP 257 121 258 QPMMime(); 122 259 virtual ~QPMMime(); … … 139 276 QVariant::Type preferredType) const = 0; 140 277 278 #if !defined(QT_NO_DRAGANDDROP) 279 // Direct Manipulation (DND) converter interface 280 virtual DragWorker *dragWorkerFor(const QString &mimeType, 281 QMimeData *mimeData) { return 0; } 282 virtual DropWorker *dropWorkerFor(DRAGINFO *info) { return 0; } 283 #endif // !QT_NO_DRAGANDDROP 284 141 285 protected: 142 286 … … 148 292 149 293 static QString formatName(ULONG format); 294 295 #if !defined(QT_NO_DRAGANDDROP) 296 static QByteArray queryHSTR(HSTR hstr); 297 static QByteArray querySourceNameFull(DRAGITEM *item); 298 static bool canTargetRenderAsOS2File(DRAGITEM *item, QByteArray *fullName = 0); 299 static bool parseRMFs(HSTR rmfs, QList<QList<QByteArray> > &list); 300 static bool parseRMF(HSTR rmf, QByteArray &mechanism, QByteArray &format); 301 302 static DefaultDragWorker *defaultCoopDragWorker(); 303 static DefaultDragWorker *defaultExclDragWorker(); 304 static DefaultDropWorker *defaultDropWorker(); 305 #endif // !QT_NO_DRAGANDDROP 150 306 151 307 private:
Note:
See TracChangeset
for help on using the changeset viewer.