xref: /trunk/main/dbaccess/source/ui/querydesign/JoinExchange.cxx (revision cdf0e10c4e3984b49a9502b011690b615761d4a3)
1 /*************************************************************************
2  *
3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4  *
5  * Copyright 2000, 2010 Oracle and/or its affiliates.
6  *
7  * OpenOffice.org - a multi-platform office productivity suite
8  *
9  * This file is part of OpenOffice.org.
10  *
11  * OpenOffice.org is free software: you can redistribute it and/or modify
12  * it under the terms of the GNU Lesser General Public License version 3
13  * only, as published by the Free Software Foundation.
14  *
15  * OpenOffice.org is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18  * GNU Lesser General Public License version 3 for more details
19  * (a copy is included in the LICENSE file that accompanied this code).
20  *
21  * You should have received a copy of the GNU Lesser General Public License
22  * version 3 along with OpenOffice.org.  If not, see
23  * <http://www.openoffice.org/license.html>
24  * for a copy of the LGPLv3 License.
25  *
26  ************************************************************************/
27 
28 // MARKER(update_precomp.py): autogen include statement, do not remove
29 #include "precompiled_dbaccess.hxx"
30 #ifndef DBAUI_JOINEXCHANGE_HXX
31 #include "JoinExchange.hxx"
32 #endif
33 #ifndef _SOT_FORMATS_HXX
34 #include <sot/formats.hxx>
35 #endif
36 #ifndef _SVX_DBEXCH_HRC
37 #include <svx/dbexch.hrc>
38 #endif
39 #ifndef _CPPUHELPER_TYPEPROVIDER_HXX_
40 #include <cppuhelper/typeprovider.hxx>
41 #endif
42 #ifndef _SOT_FORMATS_HXX
43 #include <sot/formats.hxx>
44 #endif
45 
46 namespace dbaui
47 {
48     using namespace ::com::sun::star::uno;
49     using namespace ::com::sun::star::util;
50     using namespace ::com::sun::star::lang;
51     using namespace ::com::sun::star::datatransfer;
52 
53     String OJoinExchObj::m_sJoinFormat;
54     //==================================================================
55     // class OJoinExchObj
56     //==================================================================
57     DBG_NAME(OJoinExchObj)
58     //------------------------------------------------------------------------
59     OJoinExchObj::OJoinExchObj(const OJoinExchangeData& jxdSource,sal_Bool _bFirstEntry)
60         :m_bFirstEntry(_bFirstEntry)
61         ,m_jxdSourceDescription(jxdSource)
62         ,m_pDragListener(NULL)
63     {
64         DBG_CTOR(OJoinExchObj,NULL);
65         // Verfuegbare Typen in Liste einfuegen
66     }
67 
68     //------------------------------------------------------------------------
69     OJoinExchObj::~OJoinExchObj()
70     {
71         DBG_DTOR(OJoinExchObj,NULL);
72     }
73 
74     //------------------------------------------------------------------------
75     void OJoinExchObj::StartDrag( Window* _pWindow, sal_Int8 _nDragSourceActions, IDragTransferableListener* _pListener )
76     {
77         m_pDragListener = _pListener;
78         TransferableHelper::StartDrag(_pWindow, _nDragSourceActions);
79     }
80 
81     //------------------------------------------------------------------------
82     void OJoinExchObj::DragFinished( sal_Int8 /*nDropAction*/ )
83     {
84         if (m_pDragListener)
85             m_pDragListener->dragFinished();
86         m_pDragListener = NULL;
87     }
88 
89     //------------------------------------------------------------------------
90     sal_Bool OJoinExchObj::isFormatAvailable( const DataFlavorExVector& _rFormats ,SotFormatStringId _nSlotID)
91     {
92         DataFlavorExVector::const_iterator aCheckEnd = _rFormats.end();
93         for (   DataFlavorExVector::const_iterator aCheck = _rFormats.begin();
94                 aCheck != aCheckEnd;
95                 ++aCheck
96             )
97         {
98             if ( _nSlotID == aCheck->mnSotId )
99                 return sal_True;
100         }
101         return sal_False;
102     }
103 
104     //------------------------------------------------------------------------
105     OJoinExchangeData OJoinExchObj::GetSourceDescription(const Reference< XTransferable >& _rxObject)
106     {
107         OJoinExchangeData aReturn;
108         Reference< XUnoTunnel > xTunnel(_rxObject, UNO_QUERY);
109         if (xTunnel.is())
110         {
111             OJoinExchObj* pImplementation = reinterpret_cast<OJoinExchObj*>(xTunnel->getSomething(getUnoTunnelImplementationId()));
112             if (pImplementation)
113                 aReturn = pImplementation->m_jxdSourceDescription;
114         }
115         return aReturn;
116     }
117 
118     //------------------------------------------------------------------------
119     Sequence< sal_Int8 > OJoinExchObj::getUnoTunnelImplementationId()
120     {
121         static ::cppu::OImplementationId * pId = 0;
122         if (! pId)
123         {
124             ::osl::MutexGuard aGuard( ::osl::Mutex::getGlobalMutex() );
125             if (! pId)
126             {
127                 static ::cppu::OImplementationId aId;
128                 pId = &aId;
129             }
130         }
131         return pId->getImplementationId();
132     }
133 
134     //------------------------------------------------------------------------
135     sal_Int64 SAL_CALL OJoinExchObj::getSomething( const Sequence< sal_Int8 >& _rIdentifier ) throw(RuntimeException)
136     {
137         if (_rIdentifier.getLength() == 16 && 0 == rtl_compareMemory(getUnoTunnelImplementationId().getConstArray(),  _rIdentifier.getConstArray(), 16 ) )
138             return reinterpret_cast<sal_Int64>(this);
139 
140         return 0;
141     }
142 
143     //------------------------------------------------------------------------
144     void OJoinExchObj::AddSupportedFormats()
145     {
146         AddFormat( SOT_FORMATSTR_ID_SBA_JOIN );
147         if ( m_bFirstEntry )
148             AddFormat( SOT_FORMATSTR_ID_SBA_TABID );
149     }
150 
151     //------------------------------------------------------------------------
152     sal_Bool OJoinExchObj::GetData( const ::com::sun::star::datatransfer::DataFlavor& rFlavor )
153     {
154         sal_uInt32 nFormat = SotExchange::GetFormat(rFlavor);
155         if ( SOT_FORMATSTR_ID_SBA_JOIN == nFormat )
156             // this is a HACK
157             // we don't really copy our data, the instances using us have to call GetSourceDescription ....
158             // if, one day, we have a _lot_ of time, this hack should be removed ....
159             return sal_True;
160 
161         return sal_False;
162     }
163 
164     //------------------------------------------------------------------------
165     Any SAL_CALL OJoinExchObj::queryInterface( const Type& _rType ) throw(RuntimeException)
166     {
167         Any aReturn = TransferableHelper::queryInterface(_rType);
168         if (!aReturn.hasValue())
169             aReturn = OJoinExchObj_Base::queryInterface(_rType);
170         return aReturn;
171     }
172 
173     //------------------------------------------------------------------------
174     void SAL_CALL OJoinExchObj::acquire(  ) throw()
175     {
176         TransferableHelper::acquire( );
177     }
178 
179     //------------------------------------------------------------------------
180     void SAL_CALL OJoinExchObj::release(  ) throw()
181     {
182         TransferableHelper::release( );
183     }
184 
185 
186 }   // namespace dbaui
187