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_toolkit.hxx"
26 #include "toolkit/controls/tkscrollbar.hxx"
27 #include "toolkit/helper/property.hxx"
28 #include "toolkit/helper/unopropertyarrayhelper.hxx"
29 #include <cppuhelper/typeprovider.hxx>
30 #include <tools/debug.hxx>
31 
32 // for introspection
33 #include <toolkit/awt/vclxwindows.hxx>
34 
35 //........................................................................
36 namespace toolkit
37 {
38 //........................................................................
39 
40     using namespace ::com::sun::star;
41 
42     //====================================================================
43 	//= UnoControlScrollBarModel
44 	//====================================================================
45 	//--------------------------------------------------------------------
UnoControlScrollBarModel(const uno::Reference<lang::XMultiServiceFactory> & i_factory)46     UnoControlScrollBarModel::UnoControlScrollBarModel( const uno::Reference< lang::XMultiServiceFactory >& i_factory )
47         :UnoControlModel( i_factory )
48     {
49         UNO_CONTROL_MODEL_REGISTER_PROPERTIES( VCLXScrollBar );
50     }
51 
52 	//--------------------------------------------------------------------
getServiceName()53     ::rtl::OUString UnoControlScrollBarModel::getServiceName( ) throw(::com::sun::star::uno::RuntimeException)
54     {
55 	    return ::rtl::OUString::createFromAscii( szServiceName_UnoControlScrollBarModel );
56     }
57 
58 	//--------------------------------------------------------------------
ImplGetDefaultValue(sal_uInt16 nPropId) const59     uno::Any UnoControlScrollBarModel::ImplGetDefaultValue( sal_uInt16 nPropId ) const
60     {
61         switch ( nPropId )
62         {
63         case BASEPROPERTY_LIVE_SCROLL:
64             return uno::makeAny( (sal_Bool)sal_False );
65         case BASEPROPERTY_DEFAULTCONTROL:
66             return uno::makeAny( ::rtl::OUString::createFromAscii( szServiceName_UnoControlScrollBar ) );
67 
68         default:
69     	    return UnoControlModel::ImplGetDefaultValue( nPropId );
70         }
71     }
72 
73 	//--------------------------------------------------------------------
getInfoHelper()74     ::cppu::IPropertyArrayHelper& UnoControlScrollBarModel::getInfoHelper()
75     {
76 	    static UnoPropertyArrayHelper* pHelper = NULL;
77 	    if ( !pHelper )
78 	    {
79 		    uno::Sequence<sal_Int32>	aIDs = ImplGetPropertyIds();
80 		    pHelper = new UnoPropertyArrayHelper( aIDs );
81 	    }
82 	    return *pHelper;
83     }
84 
85 	//--------------------------------------------------------------------
getPropertySetInfo()86     uno::Reference< beans::XPropertySetInfo > UnoControlScrollBarModel::getPropertySetInfo(  ) throw(uno::RuntimeException)
87     {
88 	    static uno::Reference< beans::XPropertySetInfo > xInfo( createPropertySetInfo( getInfoHelper() ) );
89 	    return xInfo;
90     }
91 
92 
93     //====================================================================
94 	//= UnoControlScrollBarModel
95 	//====================================================================
UnoScrollBarControl(const uno::Reference<lang::XMultiServiceFactory> & i_factory)96     UnoScrollBarControl::UnoScrollBarControl( const uno::Reference< lang::XMultiServiceFactory >& i_factory )
97         :UnoControlBase( i_factory )
98 	    ,maAdjustmentListeners( *this )
99     {
100     }
101 
GetComponentServiceName()102     ::rtl::OUString UnoScrollBarControl::GetComponentServiceName()
103     {
104 	    return ::rtl::OUString::createFromAscii( "ScrollBar" );
105     }
106 
107     // ::com::sun::star::uno::XInterface
queryAggregation(const uno::Type & rType)108     uno::Any UnoScrollBarControl::queryAggregation( const uno::Type & rType ) throw(uno::RuntimeException)
109     {
110 	    uno::Any aRet = ::cppu::queryInterface( rType,
111 										    SAL_STATIC_CAST( awt::XAdjustmentListener*, this ),
112 										    SAL_STATIC_CAST( awt::XScrollBar*, this ) );
113 	    return (aRet.hasValue() ? aRet : UnoControlBase::queryAggregation( rType ));
114     }
115 
116     // ::com::sun::star::lang::XTypeProvider
117     IMPL_XTYPEPROVIDER_START( UnoScrollBarControl )
118 	    getCppuType( ( uno::Reference< awt::XAdjustmentListener>* ) NULL ),
119 	    getCppuType( ( uno::Reference< awt::XScrollBar>* ) NULL ),
120 	    UnoControlBase::getTypes()
121     IMPL_XTYPEPROVIDER_END
122 
123     void UnoScrollBarControl::dispose() throw(uno::RuntimeException)
124     {
125 	    lang::EventObject aEvt;
126 	    aEvt.Source = (::cppu::OWeakObject*)this;
127 	    maAdjustmentListeners.disposeAndClear( aEvt );
128 	    UnoControl::dispose();
129     }
130 
createPeer(const uno::Reference<awt::XToolkit> & rxToolkit,const uno::Reference<awt::XWindowPeer> & rParentPeer)131     void UnoScrollBarControl::createPeer( const uno::Reference< awt::XToolkit > & rxToolkit, const uno::Reference< awt::XWindowPeer >  & rParentPeer ) throw(uno::RuntimeException)
132     {
133 	    UnoControl::createPeer( rxToolkit, rParentPeer );
134 
135 	    uno::Reference < awt::XScrollBar >  xScrollBar( getPeer(), uno::UNO_QUERY );
136 	    xScrollBar->addAdjustmentListener( this );
137     }
138 
139     // ::com::sun::star::awt::XAdjustmentListener
adjustmentValueChanged(const::com::sun::star::awt::AdjustmentEvent & rEvent)140     void UnoScrollBarControl::adjustmentValueChanged( const ::com::sun::star::awt::AdjustmentEvent& rEvent ) throw(::com::sun::star::uno::RuntimeException)
141     {
142 	    switch ( rEvent.Type )
143 	    {
144 		    case ::com::sun::star::awt::AdjustmentType_ADJUST_LINE:
145 		    case ::com::sun::star::awt::AdjustmentType_ADJUST_PAGE:
146 		    case ::com::sun::star::awt::AdjustmentType_ADJUST_ABS:
147 		    {
148 			    uno::Reference< awt::XScrollBar > xScrollBar( getPeer(), uno::UNO_QUERY );
149 
150 			    if ( xScrollBar.is() )
151 			    {
152 				    uno::Any aAny;
153 				    aAny <<= xScrollBar->getValue();
154 				    ImplSetPropertyValue( GetPropertyName( BASEPROPERTY_SCROLLVALUE ), aAny, sal_False );
155 			    }
156 		    }
157 		    break;
158 		    default:
159 		    {
160                 DBG_ERROR( "UnoScrollBarControl::adjustmentValueChanged - unknown Type" );
161 
162 		    }
163 	    }
164 
165 	    if ( maAdjustmentListeners.getLength() )
166 		    maAdjustmentListeners.adjustmentValueChanged( rEvent );
167     }
168 
169     // ::com::sun::star::awt::XScrollBar
addAdjustmentListener(const::com::sun::star::uno::Reference<::com::sun::star::awt::XAdjustmentListener> & l)170     void UnoScrollBarControl::addAdjustmentListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XAdjustmentListener > & l ) throw(::com::sun::star::uno::RuntimeException)
171     {
172 	    maAdjustmentListeners.addInterface( l );
173     }
174 
removeAdjustmentListener(const::com::sun::star::uno::Reference<::com::sun::star::awt::XAdjustmentListener> & l)175     void UnoScrollBarControl::removeAdjustmentListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XAdjustmentListener > & l ) throw(::com::sun::star::uno::RuntimeException)
176     {
177 	    maAdjustmentListeners.removeInterface( l );
178     }
179 
setValue(sal_Int32 n)180     void UnoScrollBarControl::setValue( sal_Int32 n ) throw(::com::sun::star::uno::RuntimeException)
181     {
182 	    ImplSetPropertyValue( GetPropertyName( BASEPROPERTY_SCROLLVALUE ), uno::makeAny( n ), sal_True );
183     }
184 
setValues(sal_Int32 nValue,sal_Int32 nVisible,sal_Int32 nMax)185     void UnoScrollBarControl::setValues( sal_Int32 nValue, sal_Int32 nVisible, sal_Int32 nMax ) throw(::com::sun::star::uno::RuntimeException)
186     {
187 	    uno::Any aAny;
188 	    aAny <<= nValue;
189 	    ImplSetPropertyValue( GetPropertyName( BASEPROPERTY_SCROLLVALUE ), aAny, sal_True );
190 	    aAny <<= nVisible;
191 	    ImplSetPropertyValue( GetPropertyName( BASEPROPERTY_VISIBLESIZE ), aAny, sal_True );
192 	    aAny <<= nMax;
193 	    ImplSetPropertyValue( GetPropertyName( BASEPROPERTY_SCROLLVALUE_MAX ), aAny, sal_True );
194     }
195 
getValue()196     sal_Int32 UnoScrollBarControl::getValue() throw(::com::sun::star::uno::RuntimeException)
197     {
198 	    sal_Int32 n = 0;
199 	    if ( getPeer().is() )
200 	    {
201 		    uno::Reference< awt::XScrollBar > xScrollBar( getPeer(), uno::UNO_QUERY );
202 		    n = xScrollBar->getValue();
203 	    }
204 	    return n;
205     }
206 
setMaximum(sal_Int32 n)207     void UnoScrollBarControl::setMaximum( sal_Int32 n ) throw(::com::sun::star::uno::RuntimeException)
208     {
209 	    ImplSetPropertyValue( GetPropertyName( BASEPROPERTY_SCROLLVALUE_MAX ), uno::makeAny( n ), sal_True );
210     }
211 
getMaximum()212     sal_Int32 UnoScrollBarControl::getMaximum() throw(::com::sun::star::uno::RuntimeException)
213     {
214 	    sal_Int32 n = 0;
215 	    if ( getPeer().is() )
216 	    {
217 		    uno::Reference< awt::XScrollBar > xScrollBar( getPeer(), uno::UNO_QUERY );
218 		    n = xScrollBar->getMaximum();
219 	    }
220 	    return n;
221     }
222 
setLineIncrement(sal_Int32 n)223     void UnoScrollBarControl::setLineIncrement( sal_Int32 n ) throw(::com::sun::star::uno::RuntimeException)
224     {
225         ImplSetPropertyValue( GetPropertyName( BASEPROPERTY_LINEINCREMENT ), uno::makeAny( n ), sal_True );
226     }
227 
getLineIncrement()228     sal_Int32 UnoScrollBarControl::getLineIncrement() throw(::com::sun::star::uno::RuntimeException)
229     {
230 	    sal_Int32 n = 0;
231 	    if ( getPeer().is() )
232 	    {
233 		    uno::Reference< awt::XScrollBar > xScrollBar( getPeer(), uno::UNO_QUERY );
234 		    n = xScrollBar->getLineIncrement();
235 	    }
236 	    return n;
237     }
238 
setBlockIncrement(sal_Int32 n)239     void UnoScrollBarControl::setBlockIncrement( sal_Int32 n ) throw(::com::sun::star::uno::RuntimeException)
240     {
241         ImplSetPropertyValue( GetPropertyName( BASEPROPERTY_BLOCKINCREMENT ), uno::makeAny( n ), sal_True );
242     }
243 
getBlockIncrement()244     sal_Int32 UnoScrollBarControl::getBlockIncrement() throw(::com::sun::star::uno::RuntimeException)
245     {
246 	    sal_Int32 n = 0;
247 	    if ( getPeer().is() )
248 	    {
249 		    uno::Reference< awt::XScrollBar > xScrollBar( getPeer(), uno::UNO_QUERY );
250 		    n = xScrollBar->getBlockIncrement();
251 	    }
252 	    return n;
253     }
254 
setVisibleSize(sal_Int32 n)255     void UnoScrollBarControl::setVisibleSize( sal_Int32 n ) throw(::com::sun::star::uno::RuntimeException)
256     {
257 	    ImplSetPropertyValue( GetPropertyName( BASEPROPERTY_VISIBLESIZE ), uno::makeAny( n ), sal_True );
258     }
259 
getVisibleSize()260     sal_Int32 UnoScrollBarControl::getVisibleSize() throw(::com::sun::star::uno::RuntimeException)
261     {
262 	    sal_Int32 n = 0;
263 	    if ( getPeer().is() )
264 	    {
265 		    uno::Reference< awt::XScrollBar > xScrollBar( getPeer(), uno::UNO_QUERY );
266 		    n = xScrollBar->getVisibleSize();
267 	    }
268 	    return n;
269     }
270 
setOrientation(sal_Int32 n)271     void UnoScrollBarControl::setOrientation( sal_Int32 n ) throw(::com::sun::star::uno::RuntimeException)
272     {
273 	    ImplSetPropertyValue( GetPropertyName( BASEPROPERTY_ORIENTATION ), uno::makeAny( n ), sal_True );
274     }
275 
getOrientation()276     sal_Int32 UnoScrollBarControl::getOrientation() throw(::com::sun::star::uno::RuntimeException)
277     {
278 	    sal_Int32 n = 0;
279 	    if ( getPeer().is() )
280 	    {
281 		    uno::Reference< awt::XScrollBar > xScrollBar( getPeer(), uno::UNO_QUERY );
282 		    n = xScrollBar->getOrientation();
283 	    }
284 	    return n;
285     }
286 
287 
288 
289 //........................................................................
290 }  // namespace toolkit
291 //........................................................................
292 
293