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_sd.hxx"
26 
27 #include <comphelper/serviceinfohelper.hxx>
28 
29 #include "SdUnoOutlineView.hxx"
30 
31 #include "DrawController.hxx"
32 #include "OutlineViewShell.hxx"
33 #include "sdpage.hxx"
34 #include "unopage.hxx"
35 
36 #include <cppuhelper/proptypehlp.hxx>
37 #include <svx/unopage.hxx>
38 #include <vos/mutex.hxx>
39 #include <vcl/svapp.hxx>
40 
41 using ::rtl::OUString;
42 using namespace ::vos;
43 using namespace ::cppu;
44 using namespace ::com::sun::star;
45 using namespace ::com::sun::star::uno;
46 
47 
48 
49 namespace sd {
50 
51 SdUnoOutlineView::SdUnoOutlineView(
52     DrawController& rController,
53     OutlineViewShell& rViewShell,
54     View& rView) throw()
55     :	DrawSubControllerInterfaceBase(m_aMutex),
56         mrController(rController),
57         mrOutlineViewShell(rViewShell),
58         mrView(rView)
59 {
60 }
61 
62 
63 
64 
65 SdUnoOutlineView::~SdUnoOutlineView (void) throw()
66 {
67 }
68 
69 
70 
71 
72 void SAL_CALL SdUnoOutlineView::disposing (void)
73 {
74 }
75 
76 
77 
78 
79 //----- XSelectionSupplier ----------------------------------------------------
80 
81 sal_Bool SAL_CALL SdUnoOutlineView::select( const Any&  )
82 	throw(lang::IllegalArgumentException, RuntimeException)
83 {
84 	// todo: add selections for text ranges
85 	return sal_False;
86 }
87 
88 
89 
90 Any SAL_CALL SdUnoOutlineView::getSelection()
91 	throw(RuntimeException)
92 {
93 	Any aAny;
94 	return aAny;
95 }
96 
97 
98 
99 void SAL_CALL SdUnoOutlineView::addSelectionChangeListener (
100     const css::uno::Reference<css::view::XSelectionChangeListener>& rxListener)
101     throw(css::uno::RuntimeException)
102 {
103     (void)rxListener;
104 }
105 
106 
107 
108 
109 void SAL_CALL SdUnoOutlineView::removeSelectionChangeListener (
110     const css::uno::Reference<css::view::XSelectionChangeListener>& rxListener)
111     throw(css::uno::RuntimeException)
112 {
113     (void)rxListener;
114 }
115 
116 
117 
118 
119 //----- XDrawView -------------------------------------------------------------
120 
121 
122 void SAL_CALL SdUnoOutlineView::setCurrentPage (
123     const Reference< drawing::XDrawPage >& xPage)
124 	throw(RuntimeException)
125 {
126     SvxDrawPage* pDrawPage = SvxDrawPage::getImplementation( xPage );
127     SdrPage *pSdrPage = pDrawPage ? pDrawPage->GetSdrPage() : NULL;
128 
129     if (pSdrPage != NULL)
130         mrOutlineViewShell.SetCurrentPage(dynamic_cast<SdPage*>(pSdrPage));
131 }
132 
133 
134 
135 
136 Reference< drawing::XDrawPage > SAL_CALL SdUnoOutlineView::getCurrentPage (void)
137 	throw(RuntimeException)
138 {
139 	Reference<drawing::XDrawPage>  xPage;
140 
141     SdPage* pPage = mrOutlineViewShell.getCurrentPage();
142     if (pPage != NULL)
143         xPage = Reference<drawing::XDrawPage>::query(pPage->getUnoPage());
144 
145 	return xPage;
146 }
147 
148 
149 
150 /*
151 // Return sal_True, value change
152 sal_Bool SdUnoOutlineView::convertFastPropertyValue (
153 	Any & rConvertedValue,
154 	Any & rOldValue,
155 	sal_Int32 nHandle,
156 	const Any& rValue)
157     throw ( com::sun::star::lang::IllegalArgumentException)
158 {
159     sal_Bool bResult = sal_False;
160 
161 	switch( nHandle )
162 	{
163 		case DrawController::PROPERTY_CURRENTPAGE:
164 			{
165 				Reference< drawing::XDrawPage > xOldPage( getCurrentPage() );
166 				Reference< drawing::XDrawPage > xNewPage;
167 				::cppu::convertPropertyValue( xNewPage, rValue );
168 				if( xOldPage != xNewPage )
169 				{
170 					rConvertedValue <<= xNewPage;
171 					rOldValue <<= xOldPage;
172 					bResult = sal_True;
173 				}
174 			}
175             break;
176 
177 		default:
178             break;
179 	}
180 
181     return bResult;
182 }
183 */
184 
185 
186 void SdUnoOutlineView::setFastPropertyValue (
187 	sal_Int32 nHandle,
188         const Any& rValue)
189     throw(css::beans::UnknownPropertyException,
190         css::beans::PropertyVetoException,
191         css::lang::IllegalArgumentException,
192         css::lang::WrappedTargetException,
193         css::uno::RuntimeException)
194 {
195 	switch( nHandle )
196 	{
197         case DrawController::PROPERTY_CURRENTPAGE:
198         {
199             Reference< drawing::XDrawPage > xPage;
200             rValue >>= xPage;
201             setCurrentPage( xPage );
202         }
203         break;
204 
205         default:
206             throw beans::UnknownPropertyException();
207 	}
208 }
209 
210 
211 
212 
213 void SAL_CALL SdUnoOutlineView::disposing (const ::com::sun::star::lang::EventObject& )
214     throw (::com::sun::star::uno::RuntimeException)
215 {
216 }
217 
218 
219 
220 
221 Any SAL_CALL SdUnoOutlineView::getFastPropertyValue (
222     sal_Int32 nHandle)
223     throw(css::beans::UnknownPropertyException,
224         css::lang::WrappedTargetException,
225         css::uno::RuntimeException)
226 {
227     Any aValue;
228 
229     switch( nHandle )
230     {
231         case DrawController::PROPERTY_CURRENTPAGE:
232         {
233             SdPage* pPage = const_cast<OutlineViewShell&>(mrOutlineViewShell).GetActualPage();
234             if (pPage != NULL)
235                 aValue <<= pPage->getUnoPage();
236         }
237         break;
238 		case DrawController::PROPERTY_VIEWOFFSET:
239 			break;
240 
241         default:
242             throw beans::UnknownPropertyException();
243     }
244 
245     return aValue;
246 }
247 
248 
249 // XServiceInfo
250 OUString SAL_CALL SdUnoOutlineView::getImplementationName(  ) throw (RuntimeException)
251 {
252 	return OUString( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.comp.sd.SdUnoOutlineView") );
253 }
254 
255 sal_Bool SAL_CALL SdUnoOutlineView::supportsService( const OUString& ServiceName ) throw (RuntimeException)
256 {
257 	return comphelper::ServiceInfoHelper::supportsService( ServiceName, getSupportedServiceNames() );
258 }
259 
260 Sequence< OUString > SAL_CALL SdUnoOutlineView::getSupportedServiceNames(  ) throw (RuntimeException)
261 {
262 	OUString aSN( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.presentation.OutlineView") );
263 	uno::Sequence< OUString > aSeq( &aSN, 1 );
264 	return aSeq;
265 }
266 
267 } // end of namespace sd
268