VirtualBox

source: vbox/trunk/src/VBox/Main/include/GuestDnDTargetImpl.h

Last change on this file was 98103, checked in by vboxsync, 16 months ago

Copyright year updates by scm.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 4.3 KB
Line 
1/* $Id: GuestDnDTargetImpl.h 98103 2023-01-17 14:15:46Z vboxsync $ */
2/** @file
3 * VBox Console COM Class implementation - Guest drag'n drop target.
4 */
5
6/*
7 * Copyright (C) 2014-2023 Oracle and/or its affiliates.
8 *
9 * This file is part of VirtualBox base platform packages, as
10 * available from https://www.virtualbox.org.
11 *
12 * This program is free software; you can redistribute it and/or
13 * modify it under the terms of the GNU General Public License
14 * as published by the Free Software Foundation, in version 3 of the
15 * License.
16 *
17 * This program is distributed in the hope that it will be useful, but
18 * WITHOUT ANY WARRANTY; without even the implied warranty of
19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
20 * General Public License for more details.
21 *
22 * You should have received a copy of the GNU General Public License
23 * along with this program; if not, see <https://www.gnu.org/licenses>.
24 *
25 * SPDX-License-Identifier: GPL-3.0-only
26 */
27
28#ifndef MAIN_INCLUDED_GuestDnDTargetImpl_h
29#define MAIN_INCLUDED_GuestDnDTargetImpl_h
30#ifndef RT_WITHOUT_PRAGMA_ONCE
31# pragma once
32#endif
33
34#include "GuestDnDTargetWrap.h"
35#include "GuestDnDPrivate.h"
36
37#include <VBox/GuestHost/DragAndDrop.h>
38#include <VBox/HostServices/DragAndDropSvc.h>
39
40struct GuestDnDSendCtx;
41class GuestDnDSendDataTask;
42
43class ATL_NO_VTABLE GuestDnDTarget :
44 public GuestDnDTargetWrap,
45 public GuestDnDBase
46{
47public:
48 GuestDnDTarget(void);
49 virtual ~GuestDnDTarget(void);
50
51 /** @name COM and internal init/term/mapping cruft.
52 * @{ */
53 DECLARE_TRANSLATE_METHODS(GuestDnDTarget);
54
55 HRESULT init(const ComObjPtr<Guest>& pGuest);
56 void uninit(void);
57
58 HRESULT FinalConstruct(void);
59 void FinalRelease(void);
60 /** @} */
61
62private:
63
64 /** Private wrapped @name IDnDBase methods.
65 * @{ */
66 HRESULT isFormatSupported(const com::Utf8Str &aFormat, BOOL *aSupported);
67 HRESULT getFormats(GuestDnDMIMEList &aFormats);
68 HRESULT addFormats(const GuestDnDMIMEList &aFormats);
69 HRESULT removeFormats(const GuestDnDMIMEList &aFormats);
70 /** @} */
71
72 /** Private wrapped @name IDnDTarget methods.
73 * @{ */
74 HRESULT enter(ULONG aScreenId, ULONG ax, ULONG aY, DnDAction_T aDefaultAction, const std::vector<DnDAction_T> &aAllowedActions, const GuestDnDMIMEList &aFormats, DnDAction_T *aResultAction);
75 HRESULT move(ULONG aScreenId, ULONG aX, ULONG aY, DnDAction_T aDefaultAction, const std::vector<DnDAction_T> &aAllowedActions, const GuestDnDMIMEList &aFormats, DnDAction_T *aResultAction);
76 HRESULT leave(ULONG aScreenId);
77 HRESULT drop(ULONG aScreenId, ULONG aX, ULONG aY, DnDAction_T aDefaultAction, const std::vector<DnDAction_T> &aAllowedActions, const GuestDnDMIMEList &aFormats, com::Utf8Str &aFormat, DnDAction_T *aResultAction);
78 HRESULT sendData(ULONG aScreenId, const com::Utf8Str &aFormat, const std::vector<BYTE> &aData, ComPtr<IProgress> &aProgress);
79 HRESULT cancel(BOOL *aVeto);
80 /** @} */
81
82protected:
83
84 static Utf8Str i_guestErrorToString(int guestRc);
85 static Utf8Str i_hostErrorToString(int hostRc);
86
87 /** @name Callbacks for dispatch handler.
88 * @{ */
89 static DECLCALLBACK(int) i_sendTransferDataCallback(uint32_t uMsg, void *pvParms, size_t cbParms, void *pvUser);
90 /** @} */
91
92protected:
93
94 /** @name Implemented virtual functions.
95 * @{ */
96 void i_reset(void);
97 /** @} */
98
99 int i_sendData(GuestDnDSendCtx *pCtx, RTMSINTERVAL msTimeout);
100
101 int i_sendMetaDataBody(GuestDnDSendCtx *pCtx);
102 int i_sendMetaDataHeader(GuestDnDSendCtx *pCtx);
103
104 int i_sendTransferData(GuestDnDSendCtx *pCtx, RTMSINTERVAL msTimeout);
105 int i_sendTransferListObject(GuestDnDSendCtx *pCtx, PDNDTRANSFERLIST pList, GuestDnDMsg *pMsg);
106
107 int i_sendDirectory(GuestDnDSendCtx *pCtx, PDNDTRANSFEROBJECT pObj, GuestDnDMsg *pMsg);
108 int i_sendFile(GuestDnDSendCtx *pCtx, PDNDTRANSFEROBJECT pObj, GuestDnDMsg *pMsg);
109 int i_sendFileData(GuestDnDSendCtx *pCtx, PDNDTRANSFEROBJECT pObj, GuestDnDMsg *pMsg);
110
111 int i_sendRawData(GuestDnDSendCtx *pCtx, RTMSINTERVAL msTimeout);
112
113protected:
114
115 struct
116 {
117 /** Maximum data block size (in bytes) the target can handle. */
118 uint32_t mcbBlockSize;
119 /** The context for sending data to the guest.
120 * At the moment only one transfer at a time is supported. */
121 GuestDnDSendCtx mSendCtx;
122 } mData;
123
124 friend class GuestDnDSendDataTask;
125};
126
127#endif /* !MAIN_INCLUDED_GuestDnDTargetImpl_h */
128
Note: See TracBrowser for help on using the repository browser.

© 2023 Oracle
ContactPrivacy policyTerms of Use