1 /**************************************************************
2 *
3 * Licensed to the Apache Software Foundation (ASF) under one
4 * or more contributor license agreements. See the NOTICE file
5 * distributed with this work for additional information
6 * regarding copyright ownership. The ASF licenses this file
7 * to you under the Apache License, Version 2.0 (the
8 * "License"); you may not use this file except in compliance
9 * with the License. You may obtain a copy of the License at
10 *
11 * http://www.apache.org/licenses/LICENSE-2.0
12 *
13 * Unless required by applicable law or agreed to in writing,
14 * software distributed under the License is distributed on an
15 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16 * KIND, either express or implied. See the License for the
17 * specific language governing permissions and limitations
18 * under the License.
19 *
20 *************************************************************/
21
22
23
24 // MARKER(update_precomp.py): autogen include statement, do not remove
25 #include "precompiled_dtrans.hxx"
26
27
28 #include <com/sun/star/datatransfer/dnd/DNDConstants.hpp>
29
30 #include "sourcecontext.hxx"
31 #include <rtl/unload.h>
32
33 using namespace com::sun::star::datatransfer::dnd;
34 using namespace com::sun::star::datatransfer::dnd::DNDConstants;
35 extern rtl_StandardModuleCount g_moduleCount;
36
SourceContext(DragSource * pSource,const Reference<XDragSourceListener> & listener)37 SourceContext::SourceContext( DragSource* pSource,
38 const Reference<XDragSourceListener>& listener):
39 WeakComponentImplHelper1<XDragSourceContext>(m_mutex),
40 m_pDragSource( pSource),
41 m_dragSource( static_cast<XDragSource*>( m_pDragSource) )
42 {
43 g_moduleCount.modCnt.acquire( &g_moduleCount.modCnt );
44 #if OSL_DEBUG_LEVEL > 1
45 if( listener.is())
46 #endif
47 rBHelper.addListener( ::getCppuType( &listener ), listener );
48 }
49
~SourceContext()50 SourceContext::~SourceContext()
51 {
52 g_moduleCount.modCnt.release( &g_moduleCount.modCnt );
53 }
54
addDragSourceListener(const Reference<XDragSourceListener> &)55 void SAL_CALL SourceContext::addDragSourceListener(
56 const Reference<XDragSourceListener >& )
57 throw( RuntimeException)
58 {
59 }
60
removeDragSourceListener(const Reference<XDragSourceListener> &)61 void SAL_CALL SourceContext::removeDragSourceListener(
62 const Reference<XDragSourceListener >& )
63 throw( RuntimeException)
64 {
65 }
66
getCurrentCursor()67 sal_Int32 SAL_CALL SourceContext::getCurrentCursor( )
68 throw( RuntimeException)
69 {
70 return 0;
71 }
72
setCursor(sal_Int32)73 void SAL_CALL SourceContext::setCursor( sal_Int32 /*cursorId*/ )
74 throw( RuntimeException)
75 {
76 }
77
setImage(sal_Int32)78 void SAL_CALL SourceContext::setImage( sal_Int32 /*imageId*/ )
79 throw( RuntimeException)
80 {
81 }
82
transferablesFlavorsChanged()83 void SAL_CALL SourceContext::transferablesFlavorsChanged( )
84 throw( RuntimeException)
85 {
86 }
87
88
89 // non -interface functions
90 // Fires XDragSourceListener::dragDropEnd events.
fire_dragDropEnd(sal_Bool success,sal_Int8 effect)91 void SourceContext::fire_dragDropEnd( sal_Bool success, sal_Int8 effect)
92 {
93
94 DragSourceDropEvent e;
95
96 if( success == sal_True)
97 {
98 e.DropAction= effect;
99 e.DropSuccess= sal_True;
100 }
101 else
102 {
103 e.DropAction= ACTION_NONE;
104 e.DropSuccess= sal_False;
105 }
106 e.DragSource= m_dragSource;
107 e.DragSourceContext= static_cast<XDragSourceContext*>( this);
108 e.Source= Reference<XInterface>( static_cast<XDragSourceContext*>( this), UNO_QUERY);
109
110 OInterfaceContainerHelper* pContainer= rBHelper.getContainer(
111 getCppuType( (Reference<XDragSourceListener>* )0 ) );
112
113 if( pContainer)
114 {
115 OInterfaceIteratorHelper iter( *pContainer);
116 while( iter.hasMoreElements())
117 {
118 Reference<XDragSourceListener> listener(
119 static_cast<XDragSourceListener*>( iter.next()));
120 listener->dragDropEnd( e);
121 }
122 }
123 }
124
125
fire_dropActionChanged(sal_Int8 dropAction,sal_Int8 userAction)126 void SourceContext::fire_dropActionChanged( sal_Int8 dropAction, sal_Int8 userAction)
127 {
128 if( m_currentAction != dropAction)
129 {
130 m_currentAction= dropAction;
131 DragSourceDragEvent e;
132 e.DropAction= dropAction;
133 e.UserAction= userAction;
134 e.DragSource= m_dragSource;
135 e.DragSourceContext= static_cast<XDragSourceContext*>( this);
136 e.Source= Reference<XInterface>( static_cast<XDragSourceContext*>( this), UNO_QUERY);
137
138 OInterfaceContainerHelper* pContainer= rBHelper.getContainer(
139 getCppuType( (Reference<XDragSourceListener>* )0 ) );
140
141 if( pContainer)
142 {
143 OInterfaceIteratorHelper iter( *pContainer);
144 while( iter.hasMoreElements())
145 {
146 Reference<XDragSourceListener> listener(
147 static_cast<XDragSourceListener*>( iter.next()));
148 listener->dropActionChanged( e);
149 }
150 }
151 }
152 }
153