Line data Source code
1 : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 : /*
3 : * This file is part of the LibreOffice project.
4 : *
5 : * This Source Code Form is subject to the terms of the Mozilla Public
6 : * License, v. 2.0. If a copy of the MPL was not distributed with this
7 : * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8 : *
9 : * This file incorporates work covered by the following license notice:
10 : *
11 : * Licensed to the Apache Software Foundation (ASF) under one or more
12 : * contributor license agreements. See the NOTICE file distributed
13 : * with this work for additional information regarding copyright
14 : * ownership. The ASF licenses this file to you under the Apache
15 : * License, Version 2.0 (the "License"); you may not use this file
16 : * except in compliance with the License. You may obtain a copy of
17 : * the License at http://www.apache.org/licenses/LICENSE-2.0 .
18 : */
19 :
20 :
21 : #include <string>
22 :
23 : #include <osl/mutex.hxx>
24 :
25 : #include <svtools/toolbarmenu.hxx>
26 : #include <vcl/toolbox.hxx>
27 : #include <sfx2/app.hxx>
28 : #include <sfx2/dispatch.hxx>
29 : #include <sfx2/objsh.hxx>
30 : #include <svl/eitem.hxx>
31 : #include <vcl/settings.hxx>
32 : #include <svl/intitem.hxx>
33 : #include <editeng/colritem.hxx>
34 :
35 : #include <svx/dialogs.hrc>
36 : #include <svx/svdtrans.hxx>
37 : #include <svx/sdasitm.hxx>
38 : #include <svx/dialmgr.hxx>
39 :
40 : #include "coreservices.hxx"
41 : #include "helpid.hrc"
42 : #include "extrusioncontrols.hxx"
43 : #include "extrusioncontrols.hrc"
44 : #include "colorwindow.hxx"
45 : #include "extrusiondepthdialog.hxx"
46 :
47 :
48 :
49 : //using ::svtools::ToolbarMenu;
50 :
51 : using namespace ::com::sun::star;
52 : using namespace ::com::sun::star::uno;
53 : using namespace ::com::sun::star::lang;
54 : using namespace ::com::sun::star::beans;
55 : using namespace ::com::sun::star::util;
56 : using namespace ::com::sun::star::graphic;
57 :
58 : namespace svx
59 : {
60 :
61 : static const sal_Int32 gSkewList[] = { 135, 90, 45, 180, 0, -360, -135, -90, -45 };
62 :
63 0 : ExtrusionDirectionWindow::ExtrusionDirectionWindow(
64 : svt::ToolboxController& rController,
65 : const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XFrame >& rFrame,
66 : vcl::Window* pParentWindow
67 : )
68 0 : : ToolbarMenu( rFrame, pParentWindow, SVX_RES( RID_SVXFLOAT_EXTRUSION_DIRECTION )) ,
69 : mrController( rController ) ,
70 0 : maImgPerspective( SVX_RES( IMG_PERSPECTIVE ) ) ,
71 0 : maImgParallel( SVX_RES( IMG_PARALLEL ) ) ,
72 : msExtrusionDirection( ".uno:ExtrusionDirection" ) ,
73 0 : msExtrusionProjection( ".uno:ExtrusionProjection" )
74 : {
75 0 : SetHelpId( HID_MENU_EXTRUSION_DIRECTION );
76 :
77 : sal_uInt16 i;
78 0 : for( i = DIRECTION_NW; i <= DIRECTION_SE; i++ )
79 : {
80 0 : maImgDirection[i] = Image( SVX_RES( IMG_DIRECTION + i ) );
81 : }
82 :
83 0 : SetSelectHdl( LINK( this, ExtrusionDirectionWindow, SelectHdl ) );
84 0 : mpDirectionSet = createEmptyValueSetControl();
85 0 : mpDirectionSet->SetHelpId( HID_VALUESET_EXTRUSION_DIRECTION );
86 :
87 0 : mpDirectionSet->SetSelectHdl( LINK( this, ExtrusionDirectionWindow, SelectHdl ) );
88 0 : mpDirectionSet->SetColCount( 3 );
89 0 : mpDirectionSet->EnableFullItemMode( false );
90 :
91 0 : for( i = DIRECTION_NW; i <= DIRECTION_SE; i++ )
92 : {
93 0 : OUString aText( SVX_RESSTR( STR_DIRECTION + i ) );
94 0 : mpDirectionSet->InsertItem( i+1, maImgDirection[ i ], aText );
95 0 : }
96 :
97 0 : mpDirectionSet->SetOutputSizePixel( Size( 72, 72 ) );
98 :
99 0 : appendEntry( 2, mpDirectionSet );
100 0 : appendSeparator();
101 0 : appendEntry( 0, SVX_RESSTR( STR_PERSPECTIVE ), maImgPerspective );
102 0 : appendEntry( 1, SVX_RESSTR( STR_PARALLEL ), maImgParallel );
103 :
104 0 : SetOutputSizePixel( getMenuSize() );
105 :
106 0 : FreeResource();
107 :
108 0 : AddStatusListener( msExtrusionDirection );
109 0 : AddStatusListener( msExtrusionProjection );
110 0 : }
111 :
112 0 : void ExtrusionDirectionWindow::DataChanged( const DataChangedEvent& rDCEvt )
113 : {
114 0 : ToolbarMenu::DataChanged( rDCEvt );
115 :
116 0 : if( ( rDCEvt.GetType() == DATACHANGED_SETTINGS ) && ( rDCEvt.GetFlags() & SETTINGS_STYLE ) )
117 : {
118 0 : for( sal_uInt16 i = DIRECTION_NW; i <= DIRECTION_SE; i++ )
119 : {
120 0 : mpDirectionSet->SetItemImage( i+1, maImgDirection[ i ] );
121 : }
122 :
123 0 : setEntryImage( 0, maImgPerspective );
124 0 : setEntryImage( 1, maImgParallel );
125 : }
126 0 : }
127 :
128 :
129 :
130 0 : void ExtrusionDirectionWindow::implSetDirection( sal_Int32 nSkew, bool bEnabled )
131 : {
132 0 : if( mpDirectionSet )
133 : {
134 : sal_uInt16 nItemId;
135 0 : for( nItemId = DIRECTION_NW; nItemId <= DIRECTION_SE; nItemId++ )
136 : {
137 0 : if( gSkewList[nItemId] == nSkew )
138 0 : break;
139 : }
140 :
141 0 : if( nItemId <= DIRECTION_SE )
142 : {
143 0 : mpDirectionSet->SelectItem( nItemId+1 );
144 : }
145 : else
146 : {
147 0 : mpDirectionSet->SetNoSelection();
148 : }
149 : }
150 0 : enableEntry( 2, bEnabled );
151 0 : }
152 :
153 :
154 :
155 0 : void ExtrusionDirectionWindow::implSetProjection( sal_Int32 nProjection, bool bEnabled )
156 : {
157 0 : checkEntry( 0, (nProjection == 0) && bEnabled );
158 0 : checkEntry( 1, (nProjection == 1 ) && bEnabled );
159 0 : enableEntry( 0, bEnabled );
160 0 : enableEntry( 1, bEnabled );
161 0 : }
162 :
163 :
164 :
165 0 : void ExtrusionDirectionWindow::statusChanged(
166 : const ::com::sun::star::frame::FeatureStateEvent& Event
167 : ) throw ( ::com::sun::star::uno::RuntimeException )
168 : {
169 0 : if( Event.FeatureURL.Main.equals( msExtrusionDirection ) )
170 : {
171 0 : if( !Event.IsEnabled )
172 : {
173 0 : implSetDirection( -1, false );
174 : }
175 : else
176 : {
177 0 : sal_Int32 nValue = 0;
178 0 : if( Event.State >>= nValue )
179 0 : implSetDirection( nValue, true );
180 : }
181 : }
182 0 : else if( Event.FeatureURL.Main.equals( msExtrusionProjection ) )
183 : {
184 0 : if( !Event.IsEnabled )
185 : {
186 0 : implSetProjection( -1, false );
187 : }
188 : else
189 : {
190 0 : sal_Int32 nValue = 0;
191 0 : if( Event.State >>= nValue )
192 0 : implSetProjection( nValue, true );
193 : }
194 : }
195 0 : }
196 :
197 :
198 :
199 0 : IMPL_LINK( ExtrusionDirectionWindow, SelectHdl, void *, pControl )
200 : {
201 0 : if ( IsInPopupMode() )
202 0 : EndPopupMode();
203 :
204 0 : if( pControl == mpDirectionSet )
205 : {
206 0 : Sequence< PropertyValue > aArgs( 1 );
207 0 : aArgs[0].Name = msExtrusionDirection.copy(5);
208 0 : aArgs[0].Value <<= (sal_Int32)gSkewList[mpDirectionSet->GetSelectItemId()-1];
209 :
210 0 : mrController.dispatchCommand( msExtrusionDirection, aArgs );
211 : }
212 : else
213 : {
214 0 : int nProjection = getSelectedEntryId();
215 0 : if( (nProjection >= 0) && (nProjection < 2 ) )
216 : {
217 0 : Sequence< PropertyValue > aArgs( 1 );
218 0 : aArgs[0].Name = msExtrusionProjection.copy(5);
219 0 : aArgs[0].Value <<= (sal_Int32)nProjection;
220 :
221 0 : mrController.dispatchCommand( msExtrusionProjection, aArgs );
222 0 : implSetProjection( nProjection, true );
223 : }
224 : }
225 :
226 0 : return 0;
227 : }
228 :
229 0 : ExtrusionDirectionControl::ExtrusionDirectionControl(
230 : const Reference< XComponentContext >& rxContext
231 : ) : svt::PopupWindowController(
232 : rxContext,
233 : Reference< frame::XFrame >(),
234 : OUString( ".uno:ExtrusionDirectionFloater" )
235 0 : )
236 : {
237 0 : }
238 :
239 :
240 :
241 0 : vcl::Window* ExtrusionDirectionControl::createPopupWindow( vcl::Window* pParent )
242 : {
243 0 : return new ExtrusionDirectionWindow( *this, m_xFrame, pParent );
244 : }
245 :
246 :
247 : // XServiceInfo
248 :
249 :
250 0 : OUString SAL_CALL ExtrusionDirectionControl_getImplementationName()
251 : {
252 0 : return OUString( "com.sun.star.comp.svx.ExtrusionDirectionController" );
253 : }
254 :
255 :
256 :
257 0 : Sequence< OUString > SAL_CALL ExtrusionDirectionControl_getSupportedServiceNames() throw( RuntimeException )
258 : {
259 0 : Sequence< OUString > aSNS( 1 );
260 0 : aSNS.getArray()[0] = "com.sun.star.frame.ToolbarController";
261 0 : return aSNS;
262 : }
263 :
264 :
265 :
266 0 : Reference< XInterface > SAL_CALL SAL_CALL ExtrusionDirectionControl_createInstance(
267 : const Reference< XMultiServiceFactory >& rSMgr
268 : ) throw( RuntimeException )
269 : {
270 0 : return *new ExtrusionDirectionControl( comphelper::getComponentContext(rSMgr) );
271 : }
272 :
273 :
274 :
275 0 : OUString SAL_CALL ExtrusionDirectionControl::getImplementationName( ) throw (RuntimeException, std::exception)
276 : {
277 0 : return ExtrusionDirectionControl_getImplementationName();
278 : }
279 :
280 :
281 :
282 0 : Sequence< OUString > SAL_CALL ExtrusionDirectionControl::getSupportedServiceNames( ) throw (RuntimeException, std::exception)
283 : {
284 0 : return ExtrusionDirectionControl_getSupportedServiceNames();
285 : }
286 :
287 0 : ExtrusionDepthDialog::ExtrusionDepthDialog( vcl::Window* pParent, double fDepth, FieldUnit eDefaultUnit )
288 0 : : ModalDialog( pParent, "ExtrustionDepthDialog", "svx/ui/extrustiondepthdialog.ui" )
289 : {
290 0 : get(m_pMtrDepth, "depth");
291 0 : m_pMtrDepth->SetUnit( eDefaultUnit );
292 0 : m_pMtrDepth->SetValue( (int) fDepth * 100, FUNIT_100TH_MM );
293 0 : }
294 :
295 0 : double ExtrusionDepthDialog::getDepth() const
296 : {
297 0 : return (double)( m_pMtrDepth->GetValue( FUNIT_100TH_MM ) ) / 100.0;
298 : }
299 :
300 : double aDepthListInch[] = { 0, 1270,2540,5080,10160 };
301 : double aDepthListMM[] = { 0, 1000, 2500, 5000, 10000 };
302 :
303 0 : ExtrusionDepthWindow::ExtrusionDepthWindow(
304 : svt::ToolboxController& rController,
305 : const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XFrame >& rFrame,
306 : vcl::Window* pParentWindow
307 0 : ) : ToolbarMenu( rFrame, pParentWindow, SVX_RES( RID_SVXFLOAT_EXTRUSION_DEPTH ))
308 : , mrController( rController )
309 0 : , maImgDepth0( SVX_RES( IMG_DEPTH_0 ) )
310 0 : , maImgDepth1( SVX_RES( IMG_DEPTH_1 ) )
311 0 : , maImgDepth2( SVX_RES( IMG_DEPTH_2 ) )
312 0 : , maImgDepth3( SVX_RES( IMG_DEPTH_3 ) )
313 0 : , maImgDepth4( SVX_RES( IMG_DEPTH_4 ) )
314 0 : , maImgDepthInfinity( SVX_RES( IMG_DEPTH_INFINITY ) )
315 : , meUnit(FUNIT_NONE)
316 : , mfDepth( -1.0 )
317 : , msExtrusionDepth( ".uno:ExtrusionDepth" )
318 0 : , msMetricUnit( ".uno:MetricUnit" )
319 : {
320 0 : SetHelpId( HID_MENU_EXTRUSION_DEPTH );
321 :
322 0 : SetSelectHdl( LINK( this, ExtrusionDepthWindow, SelectHdl ) );
323 :
324 0 : OUString aEmpty;
325 0 : appendEntry( 0, aEmpty, maImgDepth0 );
326 0 : appendEntry( 1, aEmpty, maImgDepth1 );
327 0 : appendEntry( 2, aEmpty, maImgDepth2 );
328 0 : appendEntry( 3, aEmpty, maImgDepth3 );
329 0 : appendEntry( 4, aEmpty, maImgDepth4 );
330 0 : appendEntry( 5, SVX_RESSTR( STR_INFINITY ), maImgDepthInfinity );
331 0 : appendEntry( 6, SVX_RESSTR( STR_CUSTOM ) );
332 :
333 0 : SetOutputSizePixel( getMenuSize() );
334 :
335 0 : FreeResource();
336 :
337 0 : AddStatusListener( msExtrusionDepth );
338 0 : AddStatusListener( msMetricUnit );
339 0 : }
340 :
341 :
342 :
343 0 : void ExtrusionDepthWindow::implSetDepth( double fDepth )
344 : {
345 0 : mfDepth = fDepth;
346 : int i;
347 0 : for( i = 0; i < 7; i++ )
348 : {
349 0 : if( i == 5 )
350 : {
351 0 : checkEntry( i, fDepth >= 338666 );
352 : }
353 0 : else if( i != 6 )
354 : {
355 0 : checkEntry( i, (fDepth == (IsMetric( meUnit ) ? aDepthListMM[i] : aDepthListInch[i]) ) );
356 : }
357 : }
358 0 : }
359 :
360 :
361 :
362 0 : void ExtrusionDepthWindow::implFillStrings( FieldUnit eUnit )
363 : {
364 0 : meUnit = eUnit;
365 0 : sal_uInt16 nResource = IsMetric( eUnit ) ? RID_SVXSTR_DEPTH_0 : RID_SVXSTR_DEPTH_0_INCH;
366 :
367 0 : for( int i = 0; i < 5; i++ )
368 : {
369 0 : OUString aStr( SVX_RESSTR( nResource + i ) );
370 0 : setEntryText( i, aStr );
371 0 : }
372 0 : }
373 :
374 :
375 :
376 0 : void ExtrusionDepthWindow::statusChanged(
377 : const ::com::sun::star::frame::FeatureStateEvent& Event
378 : ) throw ( ::com::sun::star::uno::RuntimeException )
379 : {
380 0 : if( Event.FeatureURL.Main.equals( msExtrusionDepth ) )
381 : {
382 0 : if( !Event.IsEnabled )
383 : {
384 0 : implSetDepth( 0 );
385 : }
386 : else
387 : {
388 0 : double fValue = 0.0;
389 0 : if( Event.State >>= fValue )
390 0 : implSetDepth( fValue );
391 : }
392 : }
393 0 : else if( Event.FeatureURL.Main.equals( msMetricUnit ) )
394 : {
395 0 : if( Event.IsEnabled )
396 : {
397 0 : sal_Int32 nValue = 0;
398 0 : if( Event.State >>= nValue )
399 : {
400 0 : implFillStrings( static_cast<FieldUnit>(nValue) );
401 0 : if( mfDepth >= 0.0 )
402 0 : implSetDepth( mfDepth );
403 : }
404 : }
405 : }
406 0 : }
407 :
408 :
409 :
410 0 : void ExtrusionDepthWindow::DataChanged( const DataChangedEvent& rDCEvt )
411 : {
412 0 : ToolbarMenu::DataChanged( rDCEvt );
413 :
414 0 : if( ( rDCEvt.GetType() == DATACHANGED_SETTINGS ) && ( rDCEvt.GetFlags() & SETTINGS_STYLE ) )
415 : {
416 0 : setEntryImage( 0, maImgDepth0 );
417 0 : setEntryImage( 1, maImgDepth1 );
418 0 : setEntryImage( 2, maImgDepth2 );
419 0 : setEntryImage( 3, maImgDepth3 );
420 0 : setEntryImage( 4, maImgDepth4 );
421 0 : setEntryImage( 5, maImgDepthInfinity );
422 : }
423 0 : }
424 :
425 :
426 :
427 :
428 0 : IMPL_LINK_NOARG(ExtrusionDepthWindow, SelectHdl)
429 : {
430 0 : int nSelected = getSelectedEntryId();
431 0 : if( nSelected != -1 )
432 : {
433 0 : if( nSelected == 6 )
434 : {
435 0 : if ( IsInPopupMode() )
436 0 : EndPopupMode();
437 :
438 0 : const OUString aCommand( ".uno:ExtrusionDepthDialog" );
439 :
440 0 : Sequence< PropertyValue > aArgs( 2 );
441 0 : aArgs[0].Name = "Depth";
442 0 : aArgs[0].Value <<= mfDepth;
443 0 : aArgs[1].Name = "Metric";
444 0 : aArgs[1].Value <<= static_cast<sal_Int32>( meUnit );
445 :
446 0 : mrController.dispatchCommand( aCommand, aArgs );
447 : }
448 : else
449 : {
450 : double fDepth;
451 :
452 0 : if( nSelected == 5 )
453 : {
454 0 : fDepth = 338666.6;
455 : }
456 : else
457 : {
458 0 : fDepth = IsMetric( meUnit ) ? aDepthListMM[nSelected] : aDepthListInch[nSelected];
459 : }
460 :
461 0 : Sequence< PropertyValue > aArgs( 1 );
462 0 : aArgs[0].Name = msExtrusionDepth.copy(5);
463 0 : aArgs[0].Value <<= fDepth;
464 :
465 0 : mrController.dispatchCommand( msExtrusionDepth, aArgs );
466 0 : implSetDepth( fDepth );
467 :
468 0 : if ( IsInPopupMode() )
469 0 : EndPopupMode();
470 : }
471 : }
472 0 : return 0;
473 : }
474 :
475 :
476 : // ExtrusionDirectionControl
477 :
478 :
479 0 : ExtrusionDepthController::ExtrusionDepthController(
480 : const Reference< XComponentContext >& rxContext
481 : ) : svt::PopupWindowController(
482 : rxContext,
483 : Reference< frame::XFrame >(),
484 : OUString( ".uno:ExtrusionDepthFloater" )
485 0 : )
486 : {
487 0 : }
488 :
489 :
490 :
491 0 : vcl::Window* ExtrusionDepthController::createPopupWindow( vcl::Window* pParent )
492 : {
493 0 : return new ExtrusionDepthWindow( *this, m_xFrame, pParent );
494 : }
495 :
496 :
497 :
498 : // XServiceInfo
499 :
500 :
501 0 : OUString SAL_CALL ExtrusionDepthController_getImplementationName()
502 : {
503 0 : return OUString( "com.sun.star.comp.svx.ExtrusionDepthController" );
504 : }
505 :
506 :
507 :
508 0 : Sequence< OUString > SAL_CALL ExtrusionDepthController_getSupportedServiceNames() throw( RuntimeException )
509 : {
510 0 : Sequence< OUString > aSNS( 1 );
511 0 : aSNS.getArray()[0] = "com.sun.star.frame.ToolbarController";
512 0 : return aSNS;
513 : }
514 :
515 :
516 :
517 0 : Reference< XInterface > SAL_CALL SAL_CALL ExtrusionDepthController_createInstance( const Reference< XMultiServiceFactory >& rSMgr ) throw( RuntimeException )
518 : {
519 0 : return *new ExtrusionDepthController( comphelper::getComponentContext(rSMgr) );
520 : }
521 :
522 :
523 :
524 0 : OUString SAL_CALL ExtrusionDepthController::getImplementationName( ) throw (RuntimeException, std::exception)
525 : {
526 0 : return ExtrusionDepthController_getImplementationName();
527 : }
528 :
529 :
530 :
531 0 : Sequence< OUString > SAL_CALL ExtrusionDepthController::getSupportedServiceNames( ) throw (RuntimeException, std::exception)
532 : {
533 0 : return ExtrusionDepthController_getSupportedServiceNames();
534 : }
535 :
536 0 : ExtrusionLightingWindow::ExtrusionLightingWindow( svt::ToolboxController& rController, const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XFrame >& rFrame, vcl::Window* pParentWindow )
537 0 : : ToolbarMenu( rFrame, pParentWindow, SVX_RES( RID_SVXFLOAT_EXTRUSION_LIGHTING ))
538 : , mrController( rController )
539 0 : , maImgBright( SVX_RES( IMG_LIGHTING_BRIGHT ) )
540 0 : , maImgNormal( SVX_RES( IMG_LIGHTING_NORMAL ) )
541 0 : , maImgDim( SVX_RES( IMG_LIGHTING_DIM ) )
542 : , mnLevel( 0 )
543 : , mbLevelEnabled( false )
544 : , mnDirection( FROM_FRONT )
545 : , mbDirectionEnabled( false )
546 : , msExtrusionLightingDirection( ".uno:ExtrusionLightingDirection" )
547 0 : , msExtrusionLightingIntensity( ".uno:ExtrusionLightingIntensity" )
548 : {
549 : sal_uInt16 i;
550 0 : for( i = FROM_TOP_LEFT; i <= FROM_BOTTOM_RIGHT; i++ )
551 : {
552 0 : if( i != FROM_FRONT )
553 : {
554 0 : maImgLightingOff[ i ] = Image( SVX_RES( IMG_LIGHT_OFF + i ) );
555 0 : maImgLightingOn[ i ] = Image( SVX_RES( IMG_LIGHT_ON + i ) );
556 : }
557 0 : maImgLightingPreview[i] = Image( SVX_RES( IMG_LIGHT_PREVIEW + i ) );
558 : }
559 :
560 0 : SetHelpId( HID_MENU_EXTRUSION_LIGHTING );
561 0 : SetSelectHdl( LINK( this, ExtrusionLightingWindow, SelectHdl ) );
562 :
563 0 : mpLightingSet = createEmptyValueSetControl();
564 0 : mpLightingSet->SetHelpId( HID_VALUESET_EXTRUSION_LIGHTING );
565 :
566 0 : mpLightingSet->SetSelectHdl( LINK( this, ExtrusionLightingWindow, SelectHdl ) );
567 0 : mpLightingSet->SetColCount( 3 );
568 0 : mpLightingSet->EnableFullItemMode( false );
569 :
570 0 : for( i = FROM_TOP_LEFT; i <= FROM_BOTTOM_RIGHT; i++ )
571 : {
572 0 : if( i != FROM_FRONT )
573 : {
574 0 : mpLightingSet->InsertItem( i+1, maImgLightingOff[i] );
575 : }
576 : else
577 : {
578 0 : mpLightingSet->InsertItem( 5, maImgLightingPreview[FROM_FRONT] );
579 : }
580 : }
581 0 : mpLightingSet->SetOutputSizePixel( Size( 72, 72 ) );
582 :
583 0 : appendEntry( 3, mpLightingSet );
584 0 : appendSeparator();
585 0 : appendEntry( 0, SVX_RESSTR( STR_BRIGHT ), maImgBright );
586 0 : appendEntry( 1, SVX_RESSTR( STR_NORMAL ), maImgNormal );
587 0 : appendEntry( 2, SVX_RESSTR( STR_DIM ), maImgDim );
588 :
589 0 : SetOutputSizePixel( getMenuSize() );
590 :
591 0 : FreeResource();
592 :
593 0 : AddStatusListener( msExtrusionLightingDirection );
594 0 : AddStatusListener( msExtrusionLightingIntensity );
595 0 : }
596 :
597 :
598 :
599 0 : void ExtrusionLightingWindow::implSetIntensity( int nLevel, bool bEnabled )
600 : {
601 0 : mnLevel = nLevel;
602 0 : mbLevelEnabled = bEnabled;
603 0 : int i = 0;
604 0 : for( i = 0; i < 3; i++ )
605 : {
606 0 : checkEntry( i, (i == nLevel) && bEnabled );
607 0 : enableEntry( i, bEnabled );
608 : }
609 0 : }
610 :
611 :
612 :
613 0 : void ExtrusionLightingWindow::implSetDirection( int nDirection, bool bEnabled )
614 : {
615 0 : mnDirection = nDirection;
616 0 : mbDirectionEnabled = bEnabled;
617 :
618 0 : if( !bEnabled )
619 0 : nDirection = FROM_FRONT;
620 :
621 : sal_uInt16 nItemId;
622 0 : for( nItemId = FROM_TOP_LEFT; nItemId <= FROM_BOTTOM_RIGHT; nItemId++ )
623 : {
624 0 : if( nItemId == FROM_FRONT )
625 : {
626 0 : mpLightingSet->SetItemImage( nItemId + 1, maImgLightingPreview[ nDirection ] );
627 : }
628 : else
629 : {
630 : mpLightingSet->SetItemImage(
631 : nItemId + 1,
632 0 : (sal_uInt16)nDirection == nItemId ? maImgLightingOn[nItemId] : maImgLightingOff[nItemId]
633 0 : );
634 : }
635 : }
636 :
637 0 : enableEntry( 3, bEnabled );
638 0 : }
639 :
640 :
641 :
642 0 : void ExtrusionLightingWindow::statusChanged(
643 : const ::com::sun::star::frame::FeatureStateEvent& Event
644 : ) throw ( ::com::sun::star::uno::RuntimeException )
645 : {
646 0 : if( Event.FeatureURL.Main.equals( msExtrusionLightingIntensity ) )
647 : {
648 0 : if( !Event.IsEnabled )
649 : {
650 0 : implSetIntensity( 0, false );
651 : }
652 : else
653 : {
654 0 : sal_Int32 nValue = 0;
655 0 : if( Event.State >>= nValue )
656 0 : implSetIntensity( nValue, true );
657 : }
658 : }
659 0 : else if( Event.FeatureURL.Main.equals( msExtrusionLightingDirection ) )
660 : {
661 0 : if( !Event.IsEnabled )
662 : {
663 0 : implSetDirection( 0, false );
664 : }
665 : else
666 : {
667 0 : sal_Int32 nValue = 0;
668 0 : if( Event.State >>= nValue )
669 0 : implSetDirection( nValue, true );
670 : }
671 : }
672 0 : }
673 :
674 :
675 :
676 0 : void ExtrusionLightingWindow::DataChanged( const DataChangedEvent& rDCEvt )
677 : {
678 0 : ToolbarMenu::DataChanged( rDCEvt );
679 :
680 0 : if( ( rDCEvt.GetType() == DATACHANGED_SETTINGS ) && ( rDCEvt.GetFlags() & SETTINGS_STYLE ) )
681 : {
682 0 : implSetDirection( mnDirection, mbDirectionEnabled );
683 0 : setEntryImage( 0, maImgBright );
684 0 : setEntryImage( 1, maImgNormal );
685 0 : setEntryImage( 2, maImgDim );
686 : }
687 0 : }
688 :
689 :
690 :
691 0 : IMPL_LINK( ExtrusionLightingWindow, SelectHdl, void *, pControl )
692 : {
693 0 : if ( IsInPopupMode() )
694 0 : EndPopupMode();
695 :
696 0 : if( pControl == this )
697 : {
698 0 : int nLevel = getSelectedEntryId();
699 0 : if( nLevel >= 0 )
700 : {
701 0 : if( nLevel != 3 )
702 : {
703 0 : Sequence< PropertyValue > aArgs( 1 );
704 0 : aArgs[0].Name = msExtrusionLightingIntensity.copy(5);
705 0 : aArgs[0].Value <<= (sal_Int32)nLevel;
706 :
707 0 : mrController.dispatchCommand( msExtrusionLightingIntensity, aArgs );
708 :
709 0 : implSetIntensity( nLevel, true );
710 : }
711 : }
712 : }
713 : else
714 : {
715 0 : sal_Int32 nDirection = mpLightingSet->GetSelectItemId();
716 :
717 0 : if( (nDirection > 0) && (nDirection < 10) )
718 : {
719 0 : nDirection--;
720 :
721 0 : Sequence< PropertyValue > aArgs( 1 );
722 0 : aArgs[0].Name = msExtrusionLightingDirection.copy(5);
723 0 : aArgs[0].Value <<= (sal_Int32)nDirection;
724 :
725 0 : mrController.dispatchCommand( msExtrusionLightingDirection, aArgs );
726 :
727 0 : implSetDirection( nDirection, true );
728 : }
729 :
730 : }
731 :
732 0 : return 0;
733 : }
734 :
735 :
736 :
737 0 : ExtrusionLightingControl::ExtrusionLightingControl(
738 : const Reference< XComponentContext >& rxContext
739 : ) : svt::PopupWindowController( rxContext,
740 : Reference< frame::XFrame >(),
741 : OUString( ".uno:ExtrusionDirectionFloater" )
742 0 : )
743 : {
744 0 : }
745 :
746 :
747 :
748 0 : vcl::Window* ExtrusionLightingControl::createPopupWindow( vcl::Window* pParent )
749 : {
750 0 : return new ExtrusionLightingWindow( *this, m_xFrame, pParent );
751 : }
752 :
753 :
754 : // XServiceInfo
755 :
756 :
757 0 : OUString SAL_CALL ExtrusionLightingControl_getImplementationName()
758 : {
759 0 : return OUString( "com.sun.star.comp.svx.ExtrusionLightingController" );
760 : }
761 :
762 :
763 :
764 0 : Sequence< OUString > SAL_CALL ExtrusionLightingControl_getSupportedServiceNames() throw( RuntimeException )
765 : {
766 0 : Sequence< OUString > aSNS( 1 );
767 0 : aSNS.getArray()[0] = "com.sun.star.frame.ToolbarController";
768 0 : return aSNS;
769 : }
770 :
771 :
772 :
773 0 : Reference< XInterface > SAL_CALL SAL_CALL ExtrusionLightingControl_createInstance(
774 : const Reference< XMultiServiceFactory >& rSMgr
775 : ) throw( RuntimeException )
776 : {
777 0 : return *new ExtrusionLightingControl( comphelper::getComponentContext(rSMgr) );
778 : }
779 :
780 :
781 :
782 0 : OUString SAL_CALL ExtrusionLightingControl::getImplementationName( ) throw (RuntimeException, std::exception)
783 : {
784 0 : return ExtrusionLightingControl_getImplementationName();
785 : }
786 :
787 :
788 :
789 0 : Sequence< OUString > SAL_CALL ExtrusionLightingControl::getSupportedServiceNames( ) throw (RuntimeException, std::exception)
790 : {
791 0 : return ExtrusionLightingControl_getSupportedServiceNames();
792 : }
793 :
794 0 : ExtrusionSurfaceWindow::ExtrusionSurfaceWindow(
795 : svt::ToolboxController& rController,
796 : const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XFrame >& rFrame,
797 : vcl::Window* pParentWindow
798 0 : ) : ToolbarMenu( rFrame, pParentWindow, SVX_RES( RID_SVXFLOAT_EXTRUSION_SURFACE ) )
799 : , mrController( rController )
800 0 : , maImgSurface1( SVX_RES( IMG_WIRE_FRAME ) )
801 0 : , maImgSurface2( SVX_RES( IMG_MATTE ) )
802 0 : , maImgSurface3( SVX_RES( IMG_PLASTIC ) )
803 0 : , maImgSurface4( SVX_RES( IMG_METAL ) )
804 0 : , msExtrusionSurface( ".uno:ExtrusionSurface" )
805 : {
806 0 : SetHelpId( HID_MENU_EXTRUSION_SURFACE );
807 0 : SetSelectHdl( LINK( this, ExtrusionSurfaceWindow, SelectHdl ) );
808 :
809 0 : appendEntry( 0, SVX_RESSTR( STR_WIREFRAME ), maImgSurface1 );
810 0 : appendEntry( 1, SVX_RESSTR( STR_MATTE ), maImgSurface2 );
811 0 : appendEntry( 2, SVX_RESSTR( STR_PLASTIC ), maImgSurface3 );
812 0 : appendEntry( 3, SVX_RESSTR( STR_METAL ), maImgSurface4 );
813 :
814 0 : SetOutputSizePixel( getMenuSize() );
815 :
816 0 : FreeResource();
817 :
818 0 : AddStatusListener( msExtrusionSurface );
819 0 : }
820 :
821 :
822 :
823 0 : void ExtrusionSurfaceWindow::implSetSurface( int nSurface, bool bEnabled )
824 : {
825 : int i;
826 0 : for( i = 0; i < 4; i++ )
827 : {
828 0 : checkEntry( i, (i == nSurface) && bEnabled );
829 0 : enableEntry( i, bEnabled );
830 : }
831 0 : }
832 :
833 :
834 :
835 0 : void ExtrusionSurfaceWindow::statusChanged(
836 : const ::com::sun::star::frame::FeatureStateEvent& Event
837 : ) throw ( ::com::sun::star::uno::RuntimeException )
838 : {
839 0 : if( Event.FeatureURL.Main.equals( msExtrusionSurface ) )
840 : {
841 0 : if( !Event.IsEnabled )
842 : {
843 0 : implSetSurface( 0, false );
844 : }
845 : else
846 : {
847 0 : sal_Int32 nValue = 0;
848 0 : if( Event.State >>= nValue )
849 0 : implSetSurface( nValue, true );
850 : }
851 : }
852 0 : }
853 :
854 :
855 :
856 0 : IMPL_LINK_NOARG(ExtrusionSurfaceWindow, SelectHdl)
857 : {
858 0 : if ( IsInPopupMode() )
859 0 : EndPopupMode();
860 :
861 0 : sal_Int32 nSurface = getSelectedEntryId();
862 0 : if( nSurface >= 0 )
863 : {
864 0 : Sequence< PropertyValue > aArgs( 1 );
865 0 : aArgs[0].Name = msExtrusionSurface.copy(5);
866 0 : aArgs[0].Value <<= (sal_Int32)nSurface;
867 :
868 0 : mrController.dispatchCommand( msExtrusionSurface, aArgs );
869 :
870 0 : implSetSurface( nSurface, true );
871 : }
872 :
873 0 : return 0;
874 : }
875 :
876 :
877 :
878 0 : ExtrusionSurfaceControl::ExtrusionSurfaceControl(
879 : const Reference< XComponentContext >& rxContext
880 : )
881 : : svt::PopupWindowController(
882 : rxContext,
883 : Reference< frame::XFrame >(),
884 : OUString( ".uno:ExtrusionSurfaceFloater" )
885 0 : )
886 : {
887 0 : }
888 :
889 :
890 :
891 0 : vcl::Window* ExtrusionSurfaceControl::createPopupWindow( vcl::Window* pParent )
892 : {
893 0 : return new ExtrusionSurfaceWindow( *this, m_xFrame, pParent );
894 : }
895 :
896 :
897 : // XServiceInfo
898 :
899 :
900 0 : OUString SAL_CALL ExtrusionSurfaceControl_getImplementationName()
901 : {
902 0 : return OUString( "com.sun.star.comp.svx.ExtrusionSurfaceController" );
903 : }
904 :
905 :
906 :
907 0 : Sequence< OUString > SAL_CALL ExtrusionSurfaceControl_getSupportedServiceNames() throw( RuntimeException )
908 : {
909 0 : Sequence< OUString > aSNS( 1 );
910 0 : aSNS.getArray()[0] = "com.sun.star.frame.ToolbarController";
911 0 : return aSNS;
912 : }
913 :
914 :
915 :
916 0 : Reference< XInterface > SAL_CALL SAL_CALL ExtrusionSurfaceControl_createInstance(
917 : const Reference< XMultiServiceFactory >& rSMgr
918 : ) throw( RuntimeException )
919 : {
920 0 : return *new ExtrusionSurfaceControl( comphelper::getComponentContext(rSMgr) );
921 : }
922 :
923 :
924 :
925 0 : OUString SAL_CALL ExtrusionSurfaceControl::getImplementationName( ) throw (RuntimeException, std::exception)
926 : {
927 0 : return ExtrusionSurfaceControl_getImplementationName();
928 : }
929 :
930 :
931 :
932 0 : Sequence< OUString > SAL_CALL ExtrusionSurfaceControl::getSupportedServiceNames( ) throw (RuntimeException, std::exception)
933 : {
934 0 : return ExtrusionSurfaceControl_getSupportedServiceNames();
935 : }
936 :
937 651 : }
938 :
939 : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|