xref: /aoo42x/main/dtrans/source/os2/dnd/DropTarget.hxx (revision cc13e73e)
1*cc13e73eSYuri Dario /**************************************************************
2*cc13e73eSYuri Dario *
3*cc13e73eSYuri Dario * Licensed to the Apache Software Foundation (ASF) under one
4*cc13e73eSYuri Dario * or more contributor license agreements.  See the NOTICE file
5*cc13e73eSYuri Dario * distributed with this work for additional information
6*cc13e73eSYuri Dario * regarding copyright ownership.  The ASF licenses this file
7*cc13e73eSYuri Dario * to you under the Apache License, Version 2.0 (the
8*cc13e73eSYuri Dario * "License"); you may not use this file except in compliance
9*cc13e73eSYuri Dario * with the License.  You may obtain a copy of the License at
10*cc13e73eSYuri Dario *
11*cc13e73eSYuri Dario *   http://www.apache.org/licenses/LICENSE-2.0
12*cc13e73eSYuri Dario *
13*cc13e73eSYuri Dario * Unless required by applicable law or agreed to in writing,
14*cc13e73eSYuri Dario * software distributed under the License is distributed on an
15*cc13e73eSYuri Dario * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*cc13e73eSYuri Dario * KIND, either express or implied.  See the License for the
17*cc13e73eSYuri Dario * specific language governing permissions and limitations
18*cc13e73eSYuri Dario * under the License.
19*cc13e73eSYuri Dario *
20*cc13e73eSYuri Dario *************************************************************/
21*cc13e73eSYuri Dario 
22*cc13e73eSYuri Dario 
23*cc13e73eSYuri Dario #ifndef _DROPTARGET_HXX_
24*cc13e73eSYuri Dario #define _DROPTARGET_HXX_
25*cc13e73eSYuri Dario 
26*cc13e73eSYuri Dario #include <com/sun/star/lang/XInitialization.hpp>
27*cc13e73eSYuri Dario #include <com/sun/star/datatransfer/dnd/XDropTarget.hpp>
28*cc13e73eSYuri Dario #include <com/sun/star/datatransfer/dnd/XDropTargetDragContext.hpp>
29*cc13e73eSYuri Dario #include <com/sun/star/datatransfer/dnd/XDropTargetDropContext.hpp>
30*cc13e73eSYuri Dario #include <com/sun/star/datatransfer/dnd/DropTargetDragEnterEvent.hpp>
31*cc13e73eSYuri Dario #include <com/sun/star/lang/XServiceInfo.hpp>
32*cc13e73eSYuri Dario 
33*cc13e73eSYuri Dario #include <cppuhelper/basemutex.hxx>
34*cc13e73eSYuri Dario #include <cppuhelper/compbase5.hxx>
35*cc13e73eSYuri Dario #include <cppuhelper/interfacecontainer.hxx>
36*cc13e73eSYuri Dario #include <osl/mutex.hxx>
37*cc13e73eSYuri Dario 
38*cc13e73eSYuri Dario #include "globals.hxx"
39*cc13e73eSYuri Dario 
40*cc13e73eSYuri Dario 
41*cc13e73eSYuri Dario using namespace cppu;
42*cc13e73eSYuri Dario using namespace osl;
43*cc13e73eSYuri Dario using namespace rtl;
44*cc13e73eSYuri Dario using namespace com::sun::star::datatransfer;
45*cc13e73eSYuri Dario using namespace com::sun::star::datatransfer::dnd;
46*cc13e73eSYuri Dario using namespace com::sun::star::lang;
47*cc13e73eSYuri Dario using namespace com::sun::star::uno;
48*cc13e73eSYuri Dario 
49*cc13e73eSYuri Dario 
50*cc13e73eSYuri Dario // The client
51*cc13e73eSYuri Dario // has to call XComponent::dispose. The thread that calls initialize
52*cc13e73eSYuri Dario // must also execute the destruction of the instance. This is because
53*cc13e73eSYuri Dario // initialize calls OleInitialize and the destructor calls OleUninitialize.
54*cc13e73eSYuri Dario // If the service calls OleInitialize then it also calls OleUnitialize when
55*cc13e73eSYuri Dario // it is destroyed. Therefore no second instance may exist which was
56*cc13e73eSYuri Dario // created in the same thread and still needs OLE.
57*cc13e73eSYuri Dario class DropTarget: public cppu::BaseMutex,
58*cc13e73eSYuri Dario         public WeakComponentImplHelper5< XInitialization,
59*cc13e73eSYuri Dario         XDropTarget,
60*cc13e73eSYuri Dario         XDropTargetDragContext,
61*cc13e73eSYuri Dario         XDropTargetDropContext,
62*cc13e73eSYuri Dario         XServiceInfo>
63*cc13e73eSYuri Dario {
64*cc13e73eSYuri Dario private:
65*cc13e73eSYuri Dario     Reference<XMultiServiceFactory> m_serviceFactory;
66*cc13e73eSYuri Dario     // The native window which acts as drop target.
67*cc13e73eSYuri Dario     HWND m_hWnd;
68*cc13e73eSYuri Dario     POINTL ptlMouse;
69*cc13e73eSYuri Dario     // OS/2 does not provide a DM_DRAGENTER message, provide emulation
70*cc13e73eSYuri Dario     bool        dragEnterEmulation;
71*cc13e73eSYuri Dario     // If mbActive == sal_True then events are fired to XDropTargetListener s,
72*cc13e73eSYuri Dario     // none otherwise. The default value is sal_True.
73*cc13e73eSYuri Dario     bool        mbActive;
74*cc13e73eSYuri Dario     sal_Int8    mDragSourceSupportedActions;
75*cc13e73eSYuri Dario     sal_Int8    mSelectedDropAction;
76*cc13e73eSYuri Dario     sal_Int8    mDefaultActions;
77*cc13e73eSYuri Dario     Reference<XTransferable> mXTransferable;
78*cc13e73eSYuri Dario 
79*cc13e73eSYuri Dario public:
80*cc13e73eSYuri Dario     DropTarget( const Reference<XMultiServiceFactory>& sf);
81*cc13e73eSYuri Dario     virtual ~DropTarget();
82*cc13e73eSYuri Dario 
83*cc13e73eSYuri Dario     // Overrides WeakComponentImplHelper::disposing which is called by
84*cc13e73eSYuri Dario     // WeakComponentImplHelper::dispose
85*cc13e73eSYuri Dario     // Must be called.
86*cc13e73eSYuri Dario     virtual void SAL_CALL disposing();
87*cc13e73eSYuri Dario 
88*cc13e73eSYuri Dario     // XInitialization
89*cc13e73eSYuri Dario     virtual void SAL_CALL initialize( const Sequence< Any >& aArguments)
90*cc13e73eSYuri Dario         throw(Exception);
91*cc13e73eSYuri Dario 
92*cc13e73eSYuri Dario     // XDropTarget
93*cc13e73eSYuri Dario     virtual void SAL_CALL addDropTargetListener( const Reference< XDropTargetListener >& dtl )
94*cc13e73eSYuri Dario         throw(RuntimeException);
95*cc13e73eSYuri Dario     virtual void SAL_CALL removeDropTargetListener( const Reference<  XDropTargetListener >& dtl )
96*cc13e73eSYuri Dario         throw(RuntimeException);
97*cc13e73eSYuri Dario 
98*cc13e73eSYuri Dario     // Default is not active
99*cc13e73eSYuri Dario     virtual sal_Bool SAL_CALL isActive() throw(RuntimeException);
100*cc13e73eSYuri Dario     virtual void SAL_CALL setActive(sal_Bool) throw(RuntimeException);
101*cc13e73eSYuri Dario     virtual sal_Int8 SAL_CALL getDefaultActions() throw(RuntimeException);
102*cc13e73eSYuri Dario     virtual void SAL_CALL setDefaultActions(sal_Int8) throw(RuntimeException);
103*cc13e73eSYuri Dario 
104*cc13e73eSYuri Dario     // XDropTargetDragContext
105*cc13e73eSYuri Dario     virtual void SAL_CALL acceptDrag( sal_Int8) throw(RuntimeException);
106*cc13e73eSYuri Dario     virtual void SAL_CALL rejectDrag() throw(RuntimeException);
107*cc13e73eSYuri Dario 
108*cc13e73eSYuri Dario     // XDropTargetDropContext
109*cc13e73eSYuri Dario     virtual void SAL_CALL acceptDrop(sal_Int8) throw (RuntimeException);
110*cc13e73eSYuri Dario     virtual void SAL_CALL rejectDrop() throw (RuntimeException);
111*cc13e73eSYuri Dario     virtual void SAL_CALL dropComplete(sal_Bool) throw (RuntimeException);
112*cc13e73eSYuri Dario 
113*cc13e73eSYuri Dario     // XServiceInfo
114*cc13e73eSYuri Dario     virtual rtl::OUString SAL_CALL getImplementationName() throw (RuntimeException);
115*cc13e73eSYuri Dario     virtual sal_Bool SAL_CALL supportsService(const rtl::OUString& ServiceName) throw (RuntimeException);
116*cc13e73eSYuri Dario     virtual Sequence< rtl::OUString > SAL_CALL getSupportedServiceNames() throw (RuntimeException);
117*cc13e73eSYuri Dario 
118*cc13e73eSYuri Dario     // OS/2 window messaging handlers
119*cc13e73eSYuri Dario     MRESULT dragEnter( PDRAGINFO dragInfo);
120*cc13e73eSYuri Dario     MRESULT dragOver( PDRAGINFO dragInfo);
121*cc13e73eSYuri Dario     MRESULT dragLeave( PDRAGINFO dragInfo);
122*cc13e73eSYuri Dario     MRESULT drop( PDRAGINFO dragInfo);
123*cc13e73eSYuri Dario     MRESULT renderComplete( PDRAGTRANSFER);
124*cc13e73eSYuri Dario 
125*cc13e73eSYuri Dario public:
126*cc13e73eSYuri Dario     // default window frame procedure
127*cc13e73eSYuri Dario     PFNWP defWndProc;
128*cc13e73eSYuri Dario 
129*cc13e73eSYuri Dario private:
130*cc13e73eSYuri Dario     void fire_drop(const DropTargetDropEvent& dte);
131*cc13e73eSYuri Dario     void fire_dragEnter(const DropTargetDragEnterEvent& dtdee);
132*cc13e73eSYuri Dario     void fire_dragExit(const DropTargetEvent& dte);
133*cc13e73eSYuri Dario     void fire_dragOver(const DropTargetDragEvent& dtde);
134*cc13e73eSYuri Dario     void fire_dropActionChanged(const DropTargetDragEvent& dtde);
135*cc13e73eSYuri Dario 
136*cc13e73eSYuri Dario };
137*cc13e73eSYuri Dario #endif // _DROPTARGET_HXX_
138