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 : : ToolbarMenu(rFrame, pParentWindow,
69 : WB_MOVEABLE|WB_CLOSEABLE|WB_HIDE|WB_3DLOOK)
70 : , mrController(rController)
71 0 : , maImgPerspective(SVX_RES(RID_SVXIMG_PERSPECTIVE))
72 0 : , maImgParallel(SVX_RES(RID_SVXIMG_PARALLEL))
73 : , msExtrusionDirection(".uno:ExtrusionDirection")
74 0 : , msExtrusionProjection(".uno:ExtrusionProjection")
75 : {
76 0 : for(sal_uInt16 i = DIRECTION_NW; i <= DIRECTION_SE; ++i)
77 : {
78 0 : maImgDirection[i] = Image( SVX_RES( RID_SVXIMG_DIRECTION + i ) );
79 : }
80 :
81 0 : SetSelectHdl( LINK( this, ExtrusionDirectionWindow, SelectHdl ) );
82 0 : mpDirectionSet = createEmptyValueSetControl();
83 :
84 0 : mpDirectionSet->SetSelectHdl( LINK( this, ExtrusionDirectionWindow, SelectHdl ) );
85 0 : mpDirectionSet->SetColCount( 3 );
86 0 : mpDirectionSet->EnableFullItemMode( false );
87 :
88 0 : for (sal_uInt16 i = DIRECTION_NW; i <= DIRECTION_SE; ++i)
89 : {
90 0 : OUString aText(SVX_RESSTR(RID_SVXSTR_DIRECTION + i));
91 0 : mpDirectionSet->InsertItem(i + 1, maImgDirection[i], aText);
92 0 : }
93 :
94 0 : mpDirectionSet->SetOutputSizePixel(Size(72, 72));
95 :
96 0 : appendEntry(2, mpDirectionSet );
97 0 : appendSeparator();
98 0 : appendEntry(0, SVX_RESSTR(RID_SVXSTR_PERSPECTIVE), maImgPerspective);
99 0 : appendEntry(1, SVX_RESSTR(RID_SVXSTR_PARALLEL), maImgParallel);
100 :
101 0 : SetOutputSizePixel( getMenuSize() );
102 :
103 0 : AddStatusListener( msExtrusionDirection );
104 0 : AddStatusListener( msExtrusionProjection );
105 0 : }
106 :
107 0 : ExtrusionDirectionWindow::~ExtrusionDirectionWindow()
108 : {
109 0 : disposeOnce();
110 0 : }
111 :
112 0 : void ExtrusionDirectionWindow::dispose()
113 : {
114 0 : mpDirectionSet.clear();
115 0 : ToolbarMenu::dispose();
116 0 : }
117 :
118 0 : void ExtrusionDirectionWindow::DataChanged( const DataChangedEvent& rDCEvt )
119 : {
120 0 : ToolbarMenu::DataChanged( rDCEvt );
121 :
122 0 : if( ( rDCEvt.GetType() == DataChangedEventType::SETTINGS ) && ( rDCEvt.GetFlags() & AllSettingsFlags::STYLE ) )
123 : {
124 0 : for( sal_uInt16 i = DIRECTION_NW; i <= DIRECTION_SE; i++ )
125 : {
126 0 : mpDirectionSet->SetItemImage( i+1, maImgDirection[ i ] );
127 : }
128 :
129 0 : setEntryImage( 0, maImgPerspective );
130 0 : setEntryImage( 1, maImgParallel );
131 : }
132 0 : }
133 :
134 :
135 :
136 0 : void ExtrusionDirectionWindow::implSetDirection( sal_Int32 nSkew, bool bEnabled )
137 : {
138 0 : if( mpDirectionSet )
139 : {
140 : sal_uInt16 nItemId;
141 0 : for( nItemId = DIRECTION_NW; nItemId <= DIRECTION_SE; nItemId++ )
142 : {
143 0 : if( gSkewList[nItemId] == nSkew )
144 0 : break;
145 : }
146 :
147 0 : if( nItemId <= DIRECTION_SE )
148 : {
149 0 : mpDirectionSet->SelectItem( nItemId+1 );
150 : }
151 : else
152 : {
153 0 : mpDirectionSet->SetNoSelection();
154 : }
155 : }
156 0 : enableEntry( 2, bEnabled );
157 0 : }
158 :
159 :
160 :
161 0 : void ExtrusionDirectionWindow::implSetProjection( sal_Int32 nProjection, bool bEnabled )
162 : {
163 0 : checkEntry( 0, (nProjection == 0) && bEnabled );
164 0 : checkEntry( 1, (nProjection == 1 ) && bEnabled );
165 0 : enableEntry( 0, bEnabled );
166 0 : enableEntry( 1, bEnabled );
167 0 : }
168 :
169 :
170 :
171 0 : void ExtrusionDirectionWindow::statusChanged(
172 : const ::com::sun::star::frame::FeatureStateEvent& Event
173 : ) throw ( ::com::sun::star::uno::RuntimeException )
174 : {
175 0 : if( Event.FeatureURL.Main.equals( msExtrusionDirection ) )
176 : {
177 0 : if( !Event.IsEnabled )
178 : {
179 0 : implSetDirection( -1, false );
180 : }
181 : else
182 : {
183 0 : sal_Int32 nValue = 0;
184 0 : if( Event.State >>= nValue )
185 0 : implSetDirection( nValue, true );
186 : }
187 : }
188 0 : else if( Event.FeatureURL.Main.equals( msExtrusionProjection ) )
189 : {
190 0 : if( !Event.IsEnabled )
191 : {
192 0 : implSetProjection( -1, false );
193 : }
194 : else
195 : {
196 0 : sal_Int32 nValue = 0;
197 0 : if( Event.State >>= nValue )
198 0 : implSetProjection( nValue, true );
199 : }
200 : }
201 0 : }
202 :
203 :
204 :
205 0 : IMPL_LINK( ExtrusionDirectionWindow, SelectHdl, void *, pControl )
206 : {
207 0 : if ( IsInPopupMode() )
208 0 : EndPopupMode();
209 :
210 0 : if( pControl == mpDirectionSet )
211 : {
212 0 : Sequence< PropertyValue > aArgs( 1 );
213 0 : aArgs[0].Name = msExtrusionDirection.copy(5);
214 0 : aArgs[0].Value <<= (sal_Int32)gSkewList[mpDirectionSet->GetSelectItemId()-1];
215 :
216 0 : mrController.dispatchCommand( msExtrusionDirection, aArgs );
217 : }
218 : else
219 : {
220 0 : int nProjection = getSelectedEntryId();
221 0 : if( (nProjection >= 0) && (nProjection < 2 ) )
222 : {
223 0 : Sequence< PropertyValue > aArgs( 1 );
224 0 : aArgs[0].Name = msExtrusionProjection.copy(5);
225 0 : aArgs[0].Value <<= (sal_Int32)nProjection;
226 :
227 0 : mrController.dispatchCommand( msExtrusionProjection, aArgs );
228 0 : implSetProjection( nProjection, true );
229 : }
230 : }
231 :
232 0 : return 0;
233 : }
234 :
235 1 : ExtrusionDirectionControl::ExtrusionDirectionControl(
236 : const Reference< XComponentContext >& rxContext
237 : ) : svt::PopupWindowController(
238 : rxContext,
239 : Reference< frame::XFrame >(),
240 : OUString( ".uno:ExtrusionDirectionFloater" )
241 1 : )
242 : {
243 1 : }
244 :
245 :
246 :
247 0 : VclPtr<vcl::Window> ExtrusionDirectionControl::createPopupWindow( vcl::Window* pParent )
248 : {
249 0 : return VclPtr<ExtrusionDirectionWindow>::Create( *this, m_xFrame, pParent );
250 : }
251 :
252 : // XInitialization
253 0 : void SAL_CALL ExtrusionDirectionControl::initialize( const css::uno::Sequence< css::uno::Any >& aArguments )
254 : throw ( css::uno::Exception, css::uno::RuntimeException, std::exception )
255 : {
256 0 : svt::PopupWindowController::initialize( aArguments );
257 :
258 0 : ToolBox* pToolBox = 0;
259 0 : sal_uInt16 nId = 0;
260 0 : if ( getToolboxId( nId, &pToolBox ) )
261 0 : pToolBox->SetItemBits( nId, pToolBox->GetItemBits( nId ) | ToolBoxItemBits::DROPDOWNONLY );
262 0 : }
263 :
264 : // XServiceInfo
265 :
266 :
267 7 : OUString SAL_CALL ExtrusionDirectionControl_getImplementationName()
268 : {
269 7 : return OUString( "com.sun.star.comp.svx.ExtrusionDirectionController" );
270 : }
271 :
272 :
273 :
274 2 : Sequence< OUString > SAL_CALL ExtrusionDirectionControl_getSupportedServiceNames() throw( RuntimeException )
275 : {
276 2 : Sequence< OUString > aSNS( 1 );
277 2 : aSNS.getArray()[0] = "com.sun.star.frame.ToolbarController";
278 2 : return aSNS;
279 : }
280 :
281 :
282 :
283 1 : Reference< XInterface > SAL_CALL SAL_CALL ExtrusionDirectionControl_createInstance(
284 : const Reference< XMultiServiceFactory >& rSMgr
285 : ) throw( RuntimeException )
286 : {
287 1 : return *new ExtrusionDirectionControl( comphelper::getComponentContext(rSMgr) );
288 : }
289 :
290 :
291 :
292 1 : OUString SAL_CALL ExtrusionDirectionControl::getImplementationName( ) throw (RuntimeException, std::exception)
293 : {
294 1 : return ExtrusionDirectionControl_getImplementationName();
295 : }
296 :
297 :
298 :
299 1 : Sequence< OUString > SAL_CALL ExtrusionDirectionControl::getSupportedServiceNames( ) throw (RuntimeException, std::exception)
300 : {
301 1 : return ExtrusionDirectionControl_getSupportedServiceNames();
302 : }
303 :
304 0 : ExtrusionDepthDialog::ExtrusionDepthDialog( vcl::Window* pParent, double fDepth, FieldUnit eDefaultUnit )
305 0 : : ModalDialog( pParent, "ExtrustionDepthDialog", "svx/ui/extrustiondepthdialog.ui" )
306 : {
307 0 : get(m_pMtrDepth, "depth");
308 0 : m_pMtrDepth->SetUnit( eDefaultUnit );
309 0 : m_pMtrDepth->SetValue( (int) fDepth * 100, FUNIT_100TH_MM );
310 0 : }
311 :
312 0 : ExtrusionDepthDialog::~ExtrusionDepthDialog()
313 : {
314 0 : disposeOnce();
315 0 : }
316 :
317 0 : void ExtrusionDepthDialog::dispose()
318 : {
319 0 : m_pMtrDepth.clear();
320 0 : ModalDialog::dispose();
321 0 : }
322 :
323 0 : double ExtrusionDepthDialog::getDepth() const
324 : {
325 0 : return (double)( m_pMtrDepth->GetValue( FUNIT_100TH_MM ) ) / 100.0;
326 : }
327 :
328 : double aDepthListInch[] = { 0, 1270,2540,5080,10160 };
329 : double aDepthListMM[] = { 0, 1000, 2500, 5000, 10000 };
330 :
331 0 : ExtrusionDepthWindow::ExtrusionDepthWindow(
332 : svt::ToolboxController& rController,
333 : const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XFrame >& rFrame,
334 : vcl::Window* pParentWindow
335 : ) : ToolbarMenu( rFrame, pParentWindow, WB_MOVEABLE|WB_CLOSEABLE|WB_HIDE|WB_3DLOOK)
336 : , mrController( rController )
337 0 : , maImgDepth0(SVX_RES(RID_SVXIMG_DEPTH_0))
338 0 : , maImgDepth1(SVX_RES(RID_SVXIMG_DEPTH_1))
339 0 : , maImgDepth2(SVX_RES(RID_SVXIMG_DEPTH_2))
340 0 : , maImgDepth3(SVX_RES(RID_SVXIMG_DEPTH_3))
341 0 : , maImgDepth4(SVX_RES(RID_SVXIMG_DEPTH_4))
342 0 : , maImgDepthInfinity(SVX_RES(RID_SVXIMG_DEPTH_INFINITY))
343 : , meUnit(FUNIT_NONE)
344 : , mfDepth( -1.0 )
345 : , msExtrusionDepth( ".uno:ExtrusionDepth" )
346 0 : , msMetricUnit( ".uno:MetricUnit" )
347 : {
348 0 : SetSelectHdl( LINK( this, ExtrusionDepthWindow, SelectHdl ) );
349 :
350 0 : OUString aEmpty;
351 0 : appendEntry(0, aEmpty, maImgDepth0);
352 0 : appendEntry(1, aEmpty, maImgDepth1);
353 0 : appendEntry(2, aEmpty, maImgDepth2);
354 0 : appendEntry(3, aEmpty, maImgDepth3);
355 0 : appendEntry(4, aEmpty, maImgDepth4);
356 0 : appendEntry(5, SVX_RESSTR(RID_SVXSTR_INFINITY), maImgDepthInfinity);
357 0 : appendEntry(6, SVX_RESSTR(RID_SVXSTR_CUSTOM));
358 :
359 0 : SetOutputSizePixel( getMenuSize() );
360 :
361 0 : AddStatusListener( msExtrusionDepth );
362 0 : AddStatusListener( msMetricUnit );
363 0 : }
364 :
365 0 : void ExtrusionDepthWindow::implSetDepth( double fDepth )
366 : {
367 0 : mfDepth = fDepth;
368 : int i;
369 0 : for( i = 0; i < 7; i++ )
370 : {
371 0 : if( i == 5 )
372 : {
373 0 : checkEntry( i, fDepth >= 338666 );
374 : }
375 0 : else if( i != 6 )
376 : {
377 0 : checkEntry( i, (fDepth == (IsMetric( meUnit ) ? aDepthListMM[i] : aDepthListInch[i]) ) );
378 : }
379 : }
380 0 : }
381 :
382 :
383 :
384 0 : void ExtrusionDepthWindow::implFillStrings( FieldUnit eUnit )
385 : {
386 0 : meUnit = eUnit;
387 0 : sal_uInt16 nResource = IsMetric( eUnit ) ? RID_SVXSTR_DEPTH_0 : RID_SVXSTR_DEPTH_0_INCH;
388 :
389 0 : for( int i = 0; i < 5; i++ )
390 : {
391 0 : OUString aStr( SVX_RESSTR( nResource + i ) );
392 0 : setEntryText( i, aStr );
393 0 : }
394 0 : }
395 :
396 :
397 :
398 0 : void ExtrusionDepthWindow::statusChanged(
399 : const ::com::sun::star::frame::FeatureStateEvent& Event
400 : ) throw ( ::com::sun::star::uno::RuntimeException )
401 : {
402 0 : if( Event.FeatureURL.Main.equals( msExtrusionDepth ) )
403 : {
404 0 : if( !Event.IsEnabled )
405 : {
406 0 : implSetDepth( 0 );
407 : }
408 : else
409 : {
410 0 : double fValue = 0.0;
411 0 : if( Event.State >>= fValue )
412 0 : implSetDepth( fValue );
413 : }
414 : }
415 0 : else if( Event.FeatureURL.Main.equals( msMetricUnit ) )
416 : {
417 0 : if( Event.IsEnabled )
418 : {
419 0 : sal_Int32 nValue = 0;
420 0 : if( Event.State >>= nValue )
421 : {
422 0 : implFillStrings( static_cast<FieldUnit>(nValue) );
423 0 : if( mfDepth >= 0.0 )
424 0 : implSetDepth( mfDepth );
425 : }
426 : }
427 : }
428 0 : }
429 :
430 0 : IMPL_LINK_NOARG(ExtrusionDepthWindow, SelectHdl)
431 : {
432 0 : int nSelected = getSelectedEntryId();
433 0 : if( nSelected != -1 )
434 : {
435 0 : if( nSelected == 6 )
436 : {
437 0 : if ( IsInPopupMode() )
438 0 : EndPopupMode();
439 :
440 0 : const OUString aCommand( ".uno:ExtrusionDepthDialog" );
441 :
442 0 : Sequence< PropertyValue > aArgs( 2 );
443 0 : aArgs[0].Name = "Depth";
444 0 : aArgs[0].Value <<= mfDepth;
445 0 : aArgs[1].Name = "Metric";
446 0 : aArgs[1].Value <<= static_cast<sal_Int32>( meUnit );
447 :
448 0 : mrController.dispatchCommand( aCommand, aArgs );
449 : }
450 : else
451 : {
452 : double fDepth;
453 :
454 0 : if( nSelected == 5 )
455 : {
456 0 : fDepth = 338666.6;
457 : }
458 : else
459 : {
460 0 : fDepth = IsMetric( meUnit ) ? aDepthListMM[nSelected] : aDepthListInch[nSelected];
461 : }
462 :
463 0 : Sequence< PropertyValue > aArgs( 1 );
464 0 : aArgs[0].Name = msExtrusionDepth.copy(5);
465 0 : aArgs[0].Value <<= fDepth;
466 :
467 0 : mrController.dispatchCommand( msExtrusionDepth, aArgs );
468 0 : implSetDepth( fDepth );
469 :
470 0 : if ( IsInPopupMode() )
471 0 : EndPopupMode();
472 : }
473 : }
474 0 : return 0;
475 : }
476 :
477 :
478 : // ExtrusionDirectionControl
479 :
480 :
481 1 : ExtrusionDepthController::ExtrusionDepthController(
482 : const Reference< XComponentContext >& rxContext
483 : ) : svt::PopupWindowController(
484 : rxContext,
485 : Reference< frame::XFrame >(),
486 : OUString( ".uno:ExtrusionDepthFloater" )
487 1 : )
488 : {
489 1 : }
490 :
491 :
492 :
493 0 : VclPtr<vcl::Window> ExtrusionDepthController::createPopupWindow( vcl::Window* pParent )
494 : {
495 0 : return VclPtr<ExtrusionDepthWindow>::Create( *this, m_xFrame, pParent );
496 : }
497 :
498 : // XInitialization
499 0 : void SAL_CALL ExtrusionDepthController::initialize( const css::uno::Sequence< css::uno::Any >& aArguments )
500 : throw ( css::uno::Exception, css::uno::RuntimeException, std::exception )
501 : {
502 0 : svt::PopupWindowController::initialize( aArguments );
503 :
504 0 : ToolBox* pToolBox = 0;
505 0 : sal_uInt16 nId = 0;
506 0 : if ( getToolboxId( nId, &pToolBox ) )
507 0 : pToolBox->SetItemBits( nId, pToolBox->GetItemBits( nId ) | ToolBoxItemBits::DROPDOWNONLY );
508 0 : }
509 :
510 : // XServiceInfo
511 :
512 :
513 8 : OUString SAL_CALL ExtrusionDepthController_getImplementationName()
514 : {
515 8 : return OUString( "com.sun.star.comp.svx.ExtrusionDepthController" );
516 : }
517 :
518 :
519 :
520 2 : Sequence< OUString > SAL_CALL ExtrusionDepthController_getSupportedServiceNames() throw( RuntimeException )
521 : {
522 2 : Sequence< OUString > aSNS( 1 );
523 2 : aSNS.getArray()[0] = "com.sun.star.frame.ToolbarController";
524 2 : return aSNS;
525 : }
526 :
527 :
528 :
529 1 : Reference< XInterface > SAL_CALL SAL_CALL ExtrusionDepthController_createInstance( const Reference< XMultiServiceFactory >& rSMgr ) throw( RuntimeException )
530 : {
531 1 : return *new ExtrusionDepthController( comphelper::getComponentContext(rSMgr) );
532 : }
533 :
534 1 : OUString SAL_CALL ExtrusionDepthController::getImplementationName( ) throw (RuntimeException, std::exception)
535 : {
536 1 : return ExtrusionDepthController_getImplementationName();
537 : }
538 :
539 1 : Sequence< OUString > SAL_CALL ExtrusionDepthController::getSupportedServiceNames( ) throw (RuntimeException, std::exception)
540 : {
541 1 : return ExtrusionDepthController_getSupportedServiceNames();
542 : }
543 :
544 0 : ExtrusionLightingWindow::ExtrusionLightingWindow(svt::ToolboxController& rController,
545 : const css::uno::Reference<css::frame::XFrame >& rFrame,
546 : vcl::Window* pParentWindow)
547 : : ToolbarMenu(rFrame, pParentWindow, WB_MOVEABLE|WB_CLOSEABLE|WB_HIDE|WB_3DLOOK)
548 : , mrController(rController)
549 0 : , maImgBright(SVX_RES(RID_SVXIMG_LIGHTING_BRIGHT))
550 0 : , maImgNormal(SVX_RES(RID_SVXIMG_LIGHTING_NORMAL))
551 0 : , maImgDim(SVX_RES(RID_SVXIMG_LIGHTING_DIM))
552 : , mnLevel(0)
553 : , mbLevelEnabled(false)
554 : , mnDirection(FROM_FRONT)
555 : , mbDirectionEnabled(false)
556 : , msExtrusionLightingDirection(".uno:ExtrusionLightingDirection")
557 0 : , msExtrusionLightingIntensity(".uno:ExtrusionLightingIntensity")
558 : {
559 0 : for (sal_uInt16 i = FROM_TOP_LEFT; i <= FROM_BOTTOM_RIGHT; ++i)
560 : {
561 0 : if( i != FROM_FRONT )
562 : {
563 0 : maImgLightingOff[i] = Image(SVX_RES(RID_SVXIMG_LIGHT_OFF + i));
564 0 : maImgLightingOn[i] = Image(SVX_RES(RID_SVXIMG_LIGHT_ON + i));
565 : }
566 0 : maImgLightingPreview[i] = Image(SVX_RES(RID_SVXIMG_LIGHT_PREVIEW + i));
567 : }
568 :
569 0 : SetSelectHdl( LINK( this, ExtrusionLightingWindow, SelectHdl ) );
570 :
571 0 : mpLightingSet = createEmptyValueSetControl();
572 0 : mpLightingSet->SetHelpId( HID_VALUESET_EXTRUSION_LIGHTING );
573 :
574 0 : mpLightingSet->SetSelectHdl( LINK( this, ExtrusionLightingWindow, SelectHdl ) );
575 0 : mpLightingSet->SetColCount( 3 );
576 0 : mpLightingSet->EnableFullItemMode( false );
577 :
578 0 : for (sal_uInt16 i = FROM_TOP_LEFT; i <= FROM_BOTTOM_RIGHT; ++i)
579 : {
580 0 : if( i != FROM_FRONT )
581 : {
582 0 : mpLightingSet->InsertItem( i+1, maImgLightingOff[i] );
583 : }
584 : else
585 : {
586 0 : mpLightingSet->InsertItem( 5, maImgLightingPreview[FROM_FRONT] );
587 : }
588 : }
589 0 : mpLightingSet->SetOutputSizePixel( Size( 72, 72 ) );
590 :
591 0 : appendEntry(3, mpLightingSet);
592 0 : appendSeparator();
593 0 : appendEntry(0, SVX_RESSTR(RID_SVXSTR_BRIGHT), maImgBright);
594 0 : appendEntry(1, SVX_RESSTR(RID_SVXSTR_NORMAL), maImgNormal);
595 0 : appendEntry(2, SVX_RESSTR(RID_SVXSTR_DIM), maImgDim);
596 :
597 0 : SetOutputSizePixel( getMenuSize() );
598 :
599 0 : AddStatusListener( msExtrusionLightingDirection );
600 0 : AddStatusListener( msExtrusionLightingIntensity );
601 0 : }
602 :
603 0 : ExtrusionLightingWindow::~ExtrusionLightingWindow()
604 : {
605 0 : disposeOnce();
606 0 : }
607 :
608 0 : void ExtrusionLightingWindow::dispose()
609 : {
610 0 : mpLightingSet.clear();
611 0 : ToolbarMenu::dispose();
612 0 : }
613 :
614 0 : void ExtrusionLightingWindow::implSetIntensity( int nLevel, bool bEnabled )
615 : {
616 0 : mnLevel = nLevel;
617 0 : mbLevelEnabled = bEnabled;
618 0 : for (int i = 0; i < 3; ++i)
619 : {
620 0 : checkEntry( i, (i == nLevel) && bEnabled );
621 0 : enableEntry( i, bEnabled );
622 : }
623 0 : }
624 :
625 0 : void ExtrusionLightingWindow::implSetDirection( int nDirection, bool bEnabled )
626 : {
627 0 : mnDirection = nDirection;
628 0 : mbDirectionEnabled = bEnabled;
629 :
630 0 : if( !bEnabled )
631 0 : nDirection = FROM_FRONT;
632 :
633 : sal_uInt16 nItemId;
634 0 : for( nItemId = FROM_TOP_LEFT; nItemId <= FROM_BOTTOM_RIGHT; nItemId++ )
635 : {
636 0 : if( nItemId == FROM_FRONT )
637 : {
638 0 : mpLightingSet->SetItemImage( nItemId + 1, maImgLightingPreview[ nDirection ] );
639 : }
640 : else
641 : {
642 : mpLightingSet->SetItemImage(
643 : nItemId + 1,
644 0 : (sal_uInt16)nDirection == nItemId ? maImgLightingOn[nItemId] : maImgLightingOff[nItemId]
645 0 : );
646 : }
647 : }
648 :
649 0 : enableEntry( 3, bEnabled );
650 0 : }
651 :
652 :
653 :
654 0 : void ExtrusionLightingWindow::statusChanged(
655 : const ::com::sun::star::frame::FeatureStateEvent& Event
656 : ) throw ( ::com::sun::star::uno::RuntimeException )
657 : {
658 0 : if( Event.FeatureURL.Main.equals( msExtrusionLightingIntensity ) )
659 : {
660 0 : if( !Event.IsEnabled )
661 : {
662 0 : implSetIntensity( 0, false );
663 : }
664 : else
665 : {
666 0 : sal_Int32 nValue = 0;
667 0 : if( Event.State >>= nValue )
668 0 : implSetIntensity( nValue, true );
669 : }
670 : }
671 0 : else if( Event.FeatureURL.Main.equals( msExtrusionLightingDirection ) )
672 : {
673 0 : if( !Event.IsEnabled )
674 : {
675 0 : implSetDirection( 0, false );
676 : }
677 : else
678 : {
679 0 : sal_Int32 nValue = 0;
680 0 : if( Event.State >>= nValue )
681 0 : implSetDirection( nValue, true );
682 : }
683 : }
684 0 : }
685 :
686 :
687 :
688 0 : void ExtrusionLightingWindow::DataChanged( const DataChangedEvent& rDCEvt )
689 : {
690 0 : ToolbarMenu::DataChanged( rDCEvt );
691 :
692 0 : if( ( rDCEvt.GetType() == DataChangedEventType::SETTINGS ) && ( rDCEvt.GetFlags() & AllSettingsFlags::STYLE ) )
693 : {
694 0 : implSetDirection( mnDirection, mbDirectionEnabled );
695 0 : setEntryImage( 0, maImgBright );
696 0 : setEntryImage( 1, maImgNormal );
697 0 : setEntryImage( 2, maImgDim );
698 : }
699 0 : }
700 :
701 :
702 :
703 0 : IMPL_LINK( ExtrusionLightingWindow, SelectHdl, void *, pControl )
704 : {
705 0 : if ( IsInPopupMode() )
706 0 : EndPopupMode();
707 :
708 0 : if( pControl == this )
709 : {
710 0 : int nLevel = getSelectedEntryId();
711 0 : if( nLevel >= 0 )
712 : {
713 0 : if( nLevel != 3 )
714 : {
715 0 : Sequence< PropertyValue > aArgs( 1 );
716 0 : aArgs[0].Name = msExtrusionLightingIntensity.copy(5);
717 0 : aArgs[0].Value <<= (sal_Int32)nLevel;
718 :
719 0 : mrController.dispatchCommand( msExtrusionLightingIntensity, aArgs );
720 :
721 0 : implSetIntensity( nLevel, true );
722 : }
723 : }
724 : }
725 : else
726 : {
727 0 : sal_Int32 nDirection = mpLightingSet->GetSelectItemId();
728 :
729 0 : if( (nDirection > 0) && (nDirection < 10) )
730 : {
731 0 : nDirection--;
732 :
733 0 : Sequence< PropertyValue > aArgs( 1 );
734 0 : aArgs[0].Name = msExtrusionLightingDirection.copy(5);
735 0 : aArgs[0].Value <<= (sal_Int32)nDirection;
736 :
737 0 : mrController.dispatchCommand( msExtrusionLightingDirection, aArgs );
738 :
739 0 : implSetDirection( nDirection, true );
740 : }
741 :
742 : }
743 :
744 0 : return 0;
745 : }
746 :
747 :
748 :
749 1 : ExtrusionLightingControl::ExtrusionLightingControl(
750 : const Reference< XComponentContext >& rxContext
751 : ) : svt::PopupWindowController( rxContext,
752 : Reference< frame::XFrame >(),
753 : OUString( ".uno:ExtrusionDirectionFloater" )
754 1 : )
755 : {
756 1 : }
757 :
758 :
759 :
760 0 : VclPtr<vcl::Window> ExtrusionLightingControl::createPopupWindow( vcl::Window* pParent )
761 : {
762 0 : return VclPtr<ExtrusionLightingWindow>::Create( *this, m_xFrame, pParent );
763 : }
764 :
765 : // XInitialization
766 0 : void SAL_CALL ExtrusionLightingControl::initialize( const css::uno::Sequence< css::uno::Any >& aArguments )
767 : throw ( css::uno::Exception, css::uno::RuntimeException, std::exception )
768 : {
769 0 : svt::PopupWindowController::initialize( aArguments );
770 :
771 0 : ToolBox* pToolBox = 0;
772 0 : sal_uInt16 nId = 0;
773 0 : if ( getToolboxId( nId, &pToolBox ) )
774 0 : pToolBox->SetItemBits( nId, pToolBox->GetItemBits( nId ) | ToolBoxItemBits::DROPDOWNONLY );
775 0 : }
776 :
777 : // XServiceInfo
778 :
779 :
780 6 : OUString SAL_CALL ExtrusionLightingControl_getImplementationName()
781 : {
782 6 : return OUString( "com.sun.star.comp.svx.ExtrusionLightingController" );
783 : }
784 :
785 :
786 :
787 2 : Sequence< OUString > SAL_CALL ExtrusionLightingControl_getSupportedServiceNames() throw( RuntimeException )
788 : {
789 2 : Sequence< OUString > aSNS( 1 );
790 2 : aSNS.getArray()[0] = "com.sun.star.frame.ToolbarController";
791 2 : return aSNS;
792 : }
793 :
794 :
795 :
796 1 : Reference< XInterface > SAL_CALL SAL_CALL ExtrusionLightingControl_createInstance(
797 : const Reference< XMultiServiceFactory >& rSMgr
798 : ) throw( RuntimeException )
799 : {
800 1 : return *new ExtrusionLightingControl( comphelper::getComponentContext(rSMgr) );
801 : }
802 :
803 :
804 :
805 1 : OUString SAL_CALL ExtrusionLightingControl::getImplementationName( ) throw (RuntimeException, std::exception)
806 : {
807 1 : return ExtrusionLightingControl_getImplementationName();
808 : }
809 :
810 :
811 :
812 1 : Sequence< OUString > SAL_CALL ExtrusionLightingControl::getSupportedServiceNames( ) throw (RuntimeException, std::exception)
813 : {
814 1 : return ExtrusionLightingControl_getSupportedServiceNames();
815 : }
816 :
817 0 : ExtrusionSurfaceWindow::ExtrusionSurfaceWindow(
818 : svt::ToolboxController& rController,
819 : const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XFrame >& rFrame,
820 : vcl::Window* pParentWindow)
821 : : ToolbarMenu(rFrame, pParentWindow, WB_MOVEABLE|WB_CLOSEABLE|WB_HIDE|WB_3DLOOK)
822 : , mrController(rController)
823 0 : , maImgSurface1(SVX_RES(RID_SVXIMG_WIRE_FRAME))
824 0 : , maImgSurface2(SVX_RES(RID_SVXIMG_MATTE))
825 0 : , maImgSurface3(SVX_RES(RID_SVXIMG_PLASTIC))
826 0 : , maImgSurface4(SVX_RES(RID_SVXIMG_METAL))
827 0 : , msExtrusionSurface(".uno:ExtrusionSurface")
828 : {
829 0 : SetSelectHdl( LINK( this, ExtrusionSurfaceWindow, SelectHdl ) );
830 :
831 0 : appendEntry(0, SVX_RESSTR(RID_SVXSTR_WIREFRAME), maImgSurface1);
832 0 : appendEntry(1, SVX_RESSTR(RID_SVXSTR_MATTE), maImgSurface2);
833 0 : appendEntry(2, SVX_RESSTR(RID_SVXSTR_PLASTIC), maImgSurface3);
834 0 : appendEntry(3, SVX_RESSTR(RID_SVXSTR_METAL), maImgSurface4);
835 :
836 0 : SetOutputSizePixel( getMenuSize() );
837 :
838 0 : AddStatusListener( msExtrusionSurface );
839 0 : }
840 :
841 0 : void ExtrusionSurfaceWindow::implSetSurface( int nSurface, bool bEnabled )
842 : {
843 0 : for(int i = 0; i < 4; ++i)
844 : {
845 0 : checkEntry( i, (i == nSurface) && bEnabled );
846 0 : enableEntry( i, bEnabled );
847 : }
848 0 : }
849 :
850 0 : void ExtrusionSurfaceWindow::statusChanged(
851 : const ::com::sun::star::frame::FeatureStateEvent& Event
852 : ) throw ( ::com::sun::star::uno::RuntimeException )
853 : {
854 0 : if( Event.FeatureURL.Main.equals( msExtrusionSurface ) )
855 : {
856 0 : if( !Event.IsEnabled )
857 : {
858 0 : implSetSurface( 0, false );
859 : }
860 : else
861 : {
862 0 : sal_Int32 nValue = 0;
863 0 : if( Event.State >>= nValue )
864 0 : implSetSurface( nValue, true );
865 : }
866 : }
867 0 : }
868 :
869 :
870 :
871 0 : IMPL_LINK_NOARG(ExtrusionSurfaceWindow, SelectHdl)
872 : {
873 0 : if ( IsInPopupMode() )
874 0 : EndPopupMode();
875 :
876 0 : sal_Int32 nSurface = getSelectedEntryId();
877 0 : if( nSurface >= 0 )
878 : {
879 0 : Sequence< PropertyValue > aArgs( 1 );
880 0 : aArgs[0].Name = msExtrusionSurface.copy(5);
881 0 : aArgs[0].Value <<= (sal_Int32)nSurface;
882 :
883 0 : mrController.dispatchCommand( msExtrusionSurface, aArgs );
884 :
885 0 : implSetSurface( nSurface, true );
886 : }
887 :
888 0 : return 0;
889 : }
890 :
891 :
892 :
893 1 : ExtrusionSurfaceControl::ExtrusionSurfaceControl(
894 : const Reference< XComponentContext >& rxContext
895 : )
896 : : svt::PopupWindowController(
897 : rxContext,
898 : Reference< frame::XFrame >(),
899 : OUString( ".uno:ExtrusionSurfaceFloater" )
900 1 : )
901 : {
902 1 : }
903 :
904 :
905 :
906 0 : VclPtr<vcl::Window> ExtrusionSurfaceControl::createPopupWindow( vcl::Window* pParent )
907 : {
908 0 : return VclPtr<ExtrusionSurfaceWindow>::Create( *this, m_xFrame, pParent );
909 : }
910 :
911 : // XInitialization
912 0 : void SAL_CALL ExtrusionSurfaceControl::initialize( const css::uno::Sequence< css::uno::Any >& aArguments )
913 : throw ( css::uno::Exception, css::uno::RuntimeException, std::exception )
914 : {
915 0 : svt::PopupWindowController::initialize( aArguments );
916 :
917 0 : ToolBox* pToolBox = 0;
918 0 : sal_uInt16 nId = 0;
919 0 : if ( getToolboxId( nId, &pToolBox ) )
920 0 : pToolBox->SetItemBits( nId, pToolBox->GetItemBits( nId ) | ToolBoxItemBits::DROPDOWNONLY );
921 0 : }
922 :
923 : // XServiceInfo
924 :
925 :
926 5 : OUString SAL_CALL ExtrusionSurfaceControl_getImplementationName()
927 : {
928 5 : return OUString( "com.sun.star.comp.svx.ExtrusionSurfaceController" );
929 : }
930 :
931 :
932 :
933 2 : Sequence< OUString > SAL_CALL ExtrusionSurfaceControl_getSupportedServiceNames() throw( RuntimeException )
934 : {
935 2 : Sequence< OUString > aSNS( 1 );
936 2 : aSNS.getArray()[0] = "com.sun.star.frame.ToolbarController";
937 2 : return aSNS;
938 : }
939 :
940 :
941 :
942 1 : Reference< XInterface > SAL_CALL SAL_CALL ExtrusionSurfaceControl_createInstance(
943 : const Reference< XMultiServiceFactory >& rSMgr
944 : ) throw( RuntimeException )
945 : {
946 1 : return *new ExtrusionSurfaceControl( comphelper::getComponentContext(rSMgr) );
947 : }
948 :
949 :
950 :
951 1 : OUString SAL_CALL ExtrusionSurfaceControl::getImplementationName( ) throw (RuntimeException, std::exception)
952 : {
953 1 : return ExtrusionSurfaceControl_getImplementationName();
954 : }
955 :
956 :
957 :
958 1 : Sequence< OUString > SAL_CALL ExtrusionSurfaceControl::getSupportedServiceNames( ) throw (RuntimeException, std::exception)
959 : {
960 1 : return ExtrusionSurfaceControl_getSupportedServiceNames();
961 : }
962 :
963 435 : }
964 :
965 : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|