xref: /AOO41X/main/svx/source/sidebar/possize/PosSizePropertyPanel.cxx (revision 8a3834453becef00101a9ba2c6cea9029739a9f7)
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 #include <sfx2/sidebar/propertypanel.hrc>
23 #include <sfx2/sidebar/Theme.hxx>
24 #include <sfx2/sidebar/ControlFactory.hxx>
25 #include "PosSizePropertyPanel.hxx"
26 #include "PosSizePropertyPanel.hrc"
27 #include <svx/sidebar/SidebarDialControl.hxx>
28 #include <svx/dialogs.hrc>
29 #include <svx/dialmgr.hxx>
30 #include <sfx2/dispatch.hxx>
31 #include <sfx2/bindings.hxx>
32 #include <sfx2/viewsh.hxx>
33 #include <sfx2/objsh.hxx>
34 #include <svx/dlgutil.hxx>
35 #include <unotools/viewoptions.hxx>
36 #include <vcl/virdev.hxx>
37 #include <vcl/svapp.hxx>
38 #include <vcl/field.hxx>
39 #include <vcl/fixed.hxx>
40 #include <vcl/toolbox.hxx>
41 #include <svx/svdview.hxx>
42 #include <svl/aeitem.hxx>
43 
44 using namespace css;
45 using namespace cssu;
46 using ::sfx2::sidebar::Theme;
47 
48 #define A2S(pString) (::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(pString)))
49 #define USERITEM_NAME rtl::OUString::createFromAscii("FitItem")
50 #define NO_SELECT       (65535)
51 
52 
53 
54 namespace svx { namespace sidebar {
55 
56 
57 
58 PosSizePropertyPanel::PosSizePropertyPanel(
59     Window* pParent,
60     const cssu::Reference<css::frame::XFrame>& rxFrame,
61     SfxBindings* pBindings)
62 :   Control(
63         pParent,
64         SVX_RES(RID_SIDEBAR_POSSIZE_PANEL)),
65     mpFtPosX(new FixedText(this, SVX_RES(FT_SBSHAPE_HORIZONTAL))),
66     mpMtrPosX(new MetricField(this, SVX_RES(MF_SBSHAPE_HORIZONTAL))),
67     mpFtPosY(new FixedText(this, SVX_RES(FT_SBSHAPE_VERTICAL))),
68     mpMtrPosY(new MetricField(this, SVX_RES(MF_SBSHAPE_VERTICAL))),
69     mpFtWidth(new FixedText(this, SVX_RES(FT_WIDTH))),
70     mpMtrWidth(new MetricField(this, SVX_RES(MTR_FLD_WIDTH))),
71     mpFtHeight(new FixedText(this, SVX_RES(FT_HEIGHT))),
72     mpMtrHeight(new MetricField(this, SVX_RES(MTR_FLD_HEIGHT))),
73     mpCbxScale(new CheckBox(this, SVX_RES(CBX_SCALE))),
74     mpFtAngle(new FixedText(this, SVX_RES(FT_ANGLE))),
75     mpMtrAngle(new MetricBox(this, SVX_RES(MTR_FLD_ANGLE))),
76     mpDial(new SidebarDialControl(this, SVX_RES(DIAL_CONTROL))),
77     mpFtFlip(new FixedText(this, SVX_RES(FT_FLIP))),
78     mpFlipTbxBackground(sfx2::sidebar::ControlFactory::CreateToolBoxBackground(this)),
79     mpFlipTbx(sfx2::sidebar::ControlFactory::CreateToolBox(mpFlipTbxBackground.get(), SVX_RES(TBX_FLIP))),
80     maRect(),
81     mpView(0),
82     mlOldWidth(1),
83     mlOldHeight(1),
84     meRP(RP_LT),
85     maAnchorPos(),
86     mlRotX(0),
87     mlRotY(0),
88     maUIScale(),
89     mePoolUnit(),
90     meDlgUnit(),
91     maTransfPosXControl(SID_ATTR_TRANSFORM_POS_X, *pBindings, *this),
92     maTransfPosYControl(SID_ATTR_TRANSFORM_POS_Y, *pBindings, *this),
93     maTransfWidthControl(SID_ATTR_TRANSFORM_WIDTH, *pBindings, *this),
94     maTransfHeightControl(SID_ATTR_TRANSFORM_HEIGHT, *pBindings, *this),
95     maSvxAngleControl( SID_ATTR_TRANSFORM_ANGLE, *pBindings, *this),
96     maRotXControl(SID_ATTR_TRANSFORM_ROT_X, *pBindings, *this),
97     maRotYControl(SID_ATTR_TRANSFORM_ROT_Y, *pBindings, *this),
98     maProPosControl(SID_ATTR_TRANSFORM_PROTECT_POS, *pBindings, *this),
99     maProSizeControl(SID_ATTR_TRANSFORM_PROTECT_SIZE, *pBindings, *this),
100     maAutoWidthControl(SID_ATTR_TRANSFORM_AUTOWIDTH, *pBindings, *this),
101     maAutoHeightControl(SID_ATTR_TRANSFORM_AUTOHEIGHT, *pBindings, *this),
102     m_aMetricCtl(SID_ATTR_METRIC, *pBindings, *this),
103     maImgFlipHori(SVX_RES(IMG_HORI_FLIP)),
104     maImgFlipVert(SVX_RES(IMG_VERT_FLIP)),
105     mxFrame(rxFrame),
106     maContext(),
107     mpBindings(pBindings),
108     mbMtrPosXMirror(false),
109     mbSizeProtected(false),
110     mbPositionProtected(false),
111     mbAutoWidth(false),
112     mbAutoHeight(false),
113     mbAdjustEnabled(false),
114     mbIsFlip(false),
115     mbInDestructor(false)
116 {
117 	Initialize();
118 	FreeResource();
119 }
120 
121 
122 
123 PosSizePropertyPanel::~PosSizePropertyPanel()
124 {
125     mbInDestructor = true;
126 
127     // Destroy the background windows of the toolboxes.
128     mpFlipTbx.reset();
129     mpFlipTbxBackground.reset();
130 }
131 
132 
133 
134 void PosSizePropertyPanel::ShowMenu (void)
135 {
136     if (mpBindings != NULL)
137     {
138         SfxDispatcher* pDispatcher = mpBindings->GetDispatcher();
139         if (pDispatcher != NULL)
140             pDispatcher->Execute(SID_ATTR_TRANSFORM, SFX_CALLMODE_ASYNCHRON);
141     }
142 }
143 
144 
145 
146 void PosSizePropertyPanel::Initialize()
147 {
148 	//Position : Horizontal / Vertical
149 	mpMtrPosX->SetModifyHdl( LINK( this, PosSizePropertyPanel, ChangePosXHdl ) );
150 	mpMtrPosY->SetModifyHdl( LINK( this, PosSizePropertyPanel, ChangePosYHdl ) );
151 	mpMtrPosX->SetAccessibleName(::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("Horizontal")));	//wj acc
152 	mpMtrPosY->SetAccessibleName(::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("Vertical")));		//wj acc
153 
154     //Size : Width / Height
155 	mpMtrWidth->SetModifyHdl( LINK( this, PosSizePropertyPanel, ChangeWidthHdl ) );
156 	mpMtrHeight->SetModifyHdl( LINK( this, PosSizePropertyPanel, ChangeHeightHdl ) );
157 	mpMtrWidth->SetAccessibleName(::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("Width")));	//wj acc
158 	mpMtrHeight->SetAccessibleName(::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("Height")));	//wj acc
159 
160     //Size : Keep ratio
161 	mpCbxScale->SetClickHdl( LINK( this, PosSizePropertyPanel, ClickAutoHdl ) );
162 
163     //rotation:
164 	mpMtrAngle->SetModifyHdl(LINK( this, PosSizePropertyPanel, AngleModifiedHdl));
165 	mpMtrAngle->EnableAutocomplete( false );
166 	mpMtrAngle->SetAccessibleName(::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("Rotation")));	//wj acc
167 
168     //rotation control
169 	mpDial->SetModifyHdl(LINK( this, PosSizePropertyPanel, RotationHdl));
170 
171     //flip:
172 	mpFlipTbx->SetSelectHdl( LINK( this, PosSizePropertyPanel, FlipHdl) );
173 	mpFlipTbx->SetItemImage(FLIP_HORIZONTAL,maImgFlipHori);
174     mpFlipTbx->SetItemImage(FLIP_VERTICAL,maImgFlipVert);
175 	mpFlipTbx->SetQuickHelpText(FLIP_HORIZONTAL,String(SVX_RES(STR_QH_HORI_FLIP))); //Add
176 	mpFlipTbx->SetQuickHelpText(FLIP_VERTICAL,String(SVX_RES(STR_QH_VERT_FLIP))); //Add
177 
178 	mpMtrPosX->SetAccessibleRelationLabeledBy(mpFtPosX.get());
179 	mpMtrPosY->SetAccessibleRelationLabeledBy(mpFtPosY.get());
180 	mpMtrWidth->SetAccessibleRelationLabeledBy(mpFtWidth.get());
181 	mpMtrHeight->SetAccessibleRelationLabeledBy(mpFtHeight.get());
182 	mpMtrAngle->SetAccessibleRelationLabeledBy(mpFtAngle.get());
183 #ifdef HAS_IA2
184 	mpMtrAngle->SetMpSubEditAccLableBy(mpFtAngle.get());
185 #endif
186 	mpFlipTbx->SetAccessibleRelationLabeledBy(mpFtFlip.get());
187 
188     mpMtrAngle->InsertValue(0, FUNIT_CUSTOM);
189 	mpMtrAngle->InsertValue(4500, FUNIT_CUSTOM);
190 	mpMtrAngle->InsertValue(9000, FUNIT_CUSTOM);
191 	mpMtrAngle->InsertValue(13500, FUNIT_CUSTOM);
192 	mpMtrAngle->InsertValue(18000, FUNIT_CUSTOM);
193 	mpMtrAngle->InsertValue(22500, FUNIT_CUSTOM);
194 	mpMtrAngle->InsertValue(27000, FUNIT_CUSTOM);
195 	mpMtrAngle->InsertValue(31500, FUNIT_CUSTOM);
196     mpMtrAngle->SetDropDownLineCount(8);
197 
198     SfxViewShell* pCurSh = SfxViewShell::Current();
199 	if ( pCurSh )
200 		mpView = pCurSh->GetDrawView();
201 	else
202 		mpView = NULL;
203 
204 	if ( mpView != NULL )
205 	{
206 		maUIScale = mpView->GetModel()->GetUIScale();
207 
208 		const SdrMarkList& rMarkList = mpView->GetMarkedObjectList();
209 		if(1 == rMarkList.GetMarkCount())
210 		{
211 			const SdrObject* pObj = rMarkList.GetMark(0)->GetMarkedSdrObj();
212 			const SdrObjKind eKind((SdrObjKind)pObj->GetObjIdentifier());
213 
214 			if((pObj->GetObjInventor() == SdrInventor) && (OBJ_TEXT == eKind || OBJ_TITLETEXT == eKind || OBJ_OUTLINETEXT == eKind) && ((SdrTextObj*)pObj)->HasText())
215 			{
216 				mbAdjustEnabled = true;
217 			}
218 		}
219 	}
220 
221     mePoolUnit = maTransfWidthControl.GetCoreMetric();
222 	meDlgUnit = GetModuleFieldUnit();
223 	SetFieldUnit( *mpMtrPosX, meDlgUnit, true );
224 	SetFieldUnit( *mpMtrPosY, meDlgUnit, true );
225 	SetFieldUnit( *mpMtrWidth, meDlgUnit, true );
226 	SetFieldUnit( *mpMtrHeight, meDlgUnit, true );
227 }
228 
229 
230 
231 void PosSizePropertyPanel::SetupIcons(void)
232 {
233     if(Theme::GetBoolean(Theme::Bool_UseSymphonyIcons))
234     {
235         // todo
236     }
237     else
238     {
239         // todo
240     }
241 }
242 
243 
244 
245 PosSizePropertyPanel* PosSizePropertyPanel::Create (
246     Window* pParent,
247     const cssu::Reference<css::frame::XFrame>& rxFrame,
248     SfxBindings* pBindings)
249 {
250     if (pParent == NULL)
251         throw lang::IllegalArgumentException(A2S("no parent Window given to PosSizePropertyPanel::Create"), NULL, 0);
252     if ( ! rxFrame.is())
253         throw lang::IllegalArgumentException(A2S("no XFrame given to PosSizePropertyPanel::Create"), NULL, 1);
254     if (pBindings == NULL)
255         throw lang::IllegalArgumentException(A2S("no SfxBindings given to PosSizePropertyPanel::Create"), NULL, 2);
256 
257     return new PosSizePropertyPanel(
258         pParent,
259         rxFrame,
260         pBindings);
261 }
262 
263 
264 
265 void PosSizePropertyPanel::DataChanged(
266     const DataChangedEvent& rEvent)
267 {
268     (void)rEvent;
269 
270     SetupIcons();
271 }
272 
273 
274 
275 void PosSizePropertyPanel::HandleContextChange(
276     const ::sfx2::sidebar::EnumContext aContext)
277 {
278     if(maContext == aContext)
279     {
280         // Nothing to do.
281         return;
282     }
283 
284     maContext = aContext;
285 
286     sal_Int32 nLayoutMode (0);
287     switch (maContext.GetCombinedContext_DI())
288     {
289         case CombinedEnumContext(Application_WriterAndWeb, Context_Draw):
290             nLayoutMode = 0;
291             break;
292 
293         case CombinedEnumContext(Application_WriterAndWeb, Context_Graphic):
294         case CombinedEnumContext(Application_WriterAndWeb, Context_Media):
295         case CombinedEnumContext(Application_WriterAndWeb, Context_Frame):
296         case CombinedEnumContext(Application_WriterAndWeb, Context_OLE):
297         case CombinedEnumContext(Application_WriterAndWeb, Context_Form):
298             nLayoutMode = 1;
299             break;
300 
301         case CombinedEnumContext(Application_Calc, Context_Draw):
302         case CombinedEnumContext(Application_Calc, Context_Graphic):
303         case CombinedEnumContext(Application_DrawImpress, Context_Draw):
304         case CombinedEnumContext(Application_DrawImpress, Context_TextObject):
305         case CombinedEnumContext(Application_DrawImpress, Context_Graphic):
306             nLayoutMode = 2;
307             break;
308 
309         case CombinedEnumContext(Application_Calc, Context_Chart):
310         case CombinedEnumContext(Application_Calc, Context_Form):
311         case CombinedEnumContext(Application_Calc, Context_Media):
312         case CombinedEnumContext(Application_Calc, Context_OLE):
313         case CombinedEnumContext(Application_Calc, Context_MultiObject):
314         case CombinedEnumContext(Application_DrawImpress, Context_Media):
315         case CombinedEnumContext(Application_DrawImpress, Context_Form):
316         case CombinedEnumContext(Application_DrawImpress, Context_OLE):
317         case CombinedEnumContext(Application_DrawImpress, Context_3DObject):
318         case CombinedEnumContext(Application_DrawImpress, Context_MultiObject):
319             nLayoutMode = 3;
320             break;
321     }
322     switch (nLayoutMode)
323     {
324         case 0:
325 		{
326 			mpMtrWidth->SetMin( 2 );
327 			mpMtrHeight->SetMin( 2 );
328 			mpFtPosX->Hide();
329 			mpMtrPosX->Hide();
330 			mpFtPosY->Hide();
331 			mpMtrPosY->Hide();
332 
333             //rotation
334 			mpFtAngle->Show();
335 			mpMtrAngle->Show();
336 			mpDial->Show();
337 
338             //flip
339 			mpFtFlip->Show();
340 			mpFlipTbx->Show();
341 			Size aTbxSize = mpFlipTbx->CalcWindowSizePixel();
342 			mpFlipTbx->SetOutputSizePixel( aTbxSize );
343 			mbIsFlip = true;
344 
345 			mpFtWidth->SetPosPixel(Point(LogicToPixel(Point(FT_POSITION_X_X,FT_POSITION_X_Y), MAP_APPFONT)));
346 			mpMtrWidth->SetPosPixel(Point(LogicToPixel(Point(MF_POSITION_X_X,MF_POSITION_X_Y), MAP_APPFONT)));
347 			mpFtHeight->SetPosPixel(Point(LogicToPixel(Point(FT_POSITION_Y_X,FT_POSITION_Y_Y), MAP_APPFONT)));
348 			mpMtrHeight->SetPosPixel(Point(LogicToPixel(Point(MF_POSITION_Y_X,MF_POSITION_Y_Y), MAP_APPFONT)));
349 			mpCbxScale->SetPosPixel(Point(LogicToPixel(Point(FT_WIDTH_X,FT_WIDTH_Y), MAP_APPFONT)));
350 
351 			mpFtAngle->SetPosPixel(Point(LogicToPixel(Point(FT_ANGLE_X,FT_ANGLE_Y), MAP_APPFONT)));
352 			mpMtrAngle->SetPosPixel(Point(LogicToPixel(Point(MF_ANGLE_X2,MF_ANGLE_Y2), MAP_APPFONT)));
353 			mpFlipTbx->SetPosPixel(Point(LogicToPixel(Point(FLIP_HORI_X2,FLIP_HORI_Y2), MAP_APPFONT)));
354 			mpDial->SetPosPixel(Point(LogicToPixel(Point(ROTATE_CONTROL_X2,ROTATE_CONTROL_Y2), MAP_APPFONT)));
355 			mpFtFlip->SetPosPixel(Point(LogicToPixel(Point(FT_FLIP_X2,FT_FLIP_Y2), MAP_APPFONT)));
356 
357 			Size aSize(GetOutputSizePixel().Width(),PS_SECTIONPAGE_HEIGHT2);
358 			aSize = LogicToPixel( aSize, MapMode(MAP_APPFONT) );
359 			SetSizePixel(aSize);
360 		}
361 		break;
362 
363         case 1:
364 		{
365 			mpMtrWidth->SetMin( 2 );
366 			mpMtrHeight->SetMin( 2 );
367 			mpFtPosX->Hide();
368 			mpMtrPosX->Hide();
369 			mpFtPosY->Hide();
370 			mpMtrPosY->Hide();
371 
372 			//rotation
373 			mpFtAngle->Hide();
374 			mpMtrAngle->Hide();
375 			mpDial->Hide();
376 
377 			//flip
378 			mpFlipTbx->Hide();
379 			mpFtFlip->Hide();
380 			mbIsFlip = false;
381 
382 			mpFtWidth->SetPosPixel(Point(LogicToPixel(Point(FT_POSITION_X_X,FT_POSITION_X_Y), MAP_APPFONT)));
383 			mpMtrWidth->SetPosPixel(Point(LogicToPixel(Point(MF_POSITION_X_X,MF_POSITION_X_Y), MAP_APPFONT)));
384 			mpFtHeight->SetPosPixel(Point(LogicToPixel(Point(FT_POSITION_Y_X,FT_POSITION_Y_Y), MAP_APPFONT)));
385 			mpMtrHeight->SetPosPixel(Point(LogicToPixel(Point(MF_POSITION_Y_X,MF_POSITION_Y_Y), MAP_APPFONT)));
386 			mpCbxScale->SetPosPixel(Point(LogicToPixel(Point(FT_WIDTH_X,FT_WIDTH_Y), MAP_APPFONT)));
387 
388 			Size aSize(GetOutputSizePixel().Width(),PS_SECTIONPAGE_HEIGHT3);
389 			aSize = LogicToPixel( aSize, MapMode(MAP_APPFONT) );
390 			SetSizePixel(aSize);
391 		}
392 		break;
393 
394         case 2:
395 		{
396 			mpMtrWidth->SetMin( 1 );
397 			mpMtrHeight->SetMin( 1 );
398 			mpFtPosX->Show();
399 			mpMtrPosX->Show();
400 			mpFtPosY->Show();
401 			mpMtrPosY->Show();
402 
403 			//rotation
404 			mpFtAngle->Show();
405 			mpMtrAngle->Show();
406 			mpDial->Show();
407 
408             //flip
409 			mpFlipTbx->Show();
410 			mpFtFlip->Show();
411 			Size aTbxSize = mpFlipTbx->CalcWindowSizePixel();
412 			mpFlipTbx->SetOutputSizePixel( aTbxSize );
413 			mbIsFlip = true;
414 
415 			Size aSize(GetOutputSizePixel().Width(),PS_SECTIONPAGE_HEIGHT);
416 			aSize = LogicToPixel( aSize, MapMode(MAP_APPFONT) );
417 			SetSizePixel(aSize);
418 		}
419 		break;
420 
421 		case 3:
422 		{
423 			mpMtrWidth->SetMin( 1 );
424 			mpMtrHeight->SetMin( 1 );
425 			mpFtPosX->Show();
426 			mpMtrPosX->Show();
427 			mpFtPosY->Show();
428 			mpMtrPosY->Show();
429 
430 			//rotation
431 			mpFtAngle->Hide();
432 			mpMtrAngle->Hide();
433 			mpDial->Hide();
434 
435 			//flip
436 			mpFlipTbx->Hide();
437 			mpFtFlip->Hide();
438 			mbIsFlip = false;
439 
440 			Size aSize(GetOutputSizePixel().Width(),PS_SECTIONPAGE_HEIGHT4);
441 			aSize = LogicToPixel( aSize, MapMode(MAP_APPFONT) );
442 			SetSizePixel(aSize);
443 		}
444 		break;
445 	}
446 
447     //Added for windows classic theme
448 	mpFlipTbx->SetBackground(Wallpaper());
449 	mpFlipTbx->SetPaintTransparent(true);
450 }
451 
452 
453 
454 IMPL_LINK( PosSizePropertyPanel, ChangeWidthHdl, void*, /*pBox*/ )
455 {
456 	if( mpCbxScale->IsChecked() &&
457 		mpCbxScale->IsEnabled() )
458 	{
459 		long nHeight = (long) ( ((double) mlOldHeight * (double) mpMtrWidth->GetValue()) / (double) mlOldWidth );
460 		if( nHeight <= mpMtrHeight->GetMax( FUNIT_NONE ) )
461 		{
462 			mpMtrHeight->SetUserValue( nHeight, FUNIT_NONE );
463 		}
464 		else
465 		{
466 			nHeight = (long)mpMtrHeight->GetMax( FUNIT_NONE );
467 			mpMtrHeight->SetUserValue( nHeight );
468 			const long nWidth = (long) ( ((double) mlOldWidth * (double) nHeight) / (double) mlOldHeight );
469 			mpMtrWidth->SetUserValue( nWidth, FUNIT_NONE );
470 		}
471 	}
472 	executeSize();
473 	return 0;
474 }
475 
476 
477 
478 IMPL_LINK( PosSizePropertyPanel, ChangeHeightHdl, void *, EMPTYARG )
479 {
480 	if( mpCbxScale->IsChecked() &&
481 		mpCbxScale->IsEnabled() )
482 	{
483 		long nWidth = (long) ( ((double)mlOldWidth * (double)mpMtrHeight->GetValue()) / (double)mlOldHeight );
484 		if( nWidth <= mpMtrWidth->GetMax( FUNIT_NONE ) )
485 		{
486 			mpMtrWidth->SetUserValue( nWidth, FUNIT_NONE );
487 		}
488 		else
489 		{
490 			nWidth = (long)mpMtrWidth->GetMax( FUNIT_NONE );
491 			mpMtrWidth->SetUserValue( nWidth );
492 			const long nHeight = (long) ( ((double)mlOldHeight * (double)nWidth) / (double)mlOldWidth );
493 			mpMtrHeight->SetUserValue( nHeight, FUNIT_NONE );
494 		}
495 	}
496 	executeSize();
497 	return 0;
498 }
499 
500 
501 
502 IMPL_LINK( PosSizePropertyPanel, ChangePosXHdl, void *, EMPTYARG )
503 {
504 	executePosX();
505 	return 0;
506 }
507 
508 
509 
510 IMPL_LINK( PosSizePropertyPanel, ChangePosYHdl, void *, EMPTYARG )
511 {
512 	executePosY();
513 	return 0;
514 }
515 
516 
517 
518 IMPL_LINK( PosSizePropertyPanel, ClickAutoHdl, void *, EMPTYARG )
519 {
520 	if ( mpCbxScale->IsChecked() )
521 	{
522 		mlOldWidth  = Max( GetCoreValue( *mpMtrWidth,  mePoolUnit ), 1L );
523 		mlOldHeight = Max( GetCoreValue( *mpMtrHeight, mePoolUnit ), 1L );
524 	}
525 
526 	// mpCbxScale must synchronized with that on Position and Size tabpage on Shape Properties dialog
527 	SvtViewOptions	aPageOpt( E_TABPAGE, String::CreateFromInt32( RID_SVXPAGE_POSITION_SIZE ) );
528 	aPageOpt.SetUserItem( USERITEM_NAME, ::com::sun::star::uno::makeAny( ::rtl::OUString( String::CreateFromInt32( mpCbxScale->IsChecked() ) ) ) );
529 
530 	return 0;
531 }
532 
533 
534 
535 IMPL_LINK( PosSizePropertyPanel, AngleModifiedHdl, void *, EMPTYARG )
536 {
537 	String sTmp = mpMtrAngle->GetText();
538 	bool    bNegative = 0;
539 	sal_Unicode nChar = sTmp.GetChar( 0 );
540 
541 	if( nChar == '-' )
542 	{
543 		bNegative = 1;
544 		nChar = sTmp.GetChar( 1 );
545 	}
546 
547 	if( (nChar < '0') || (nChar > '9') )
548 		return 0;
549 	double dTmp = sTmp.ToDouble();
550 	if(bNegative)
551 	{
552 		while(dTmp<0)
553 			dTmp += 360;
554 	}
555 	sal_Int64 nTmp = dTmp*100;
556 
557 	SfxInt32Item aAngleItem( SID_ATTR_TRANSFORM_ANGLE,(sal_uInt32) nTmp);
558 	SfxInt32Item aRotXItem( SID_ATTR_TRANSFORM_ROT_X,(sal_uInt32) mlRotX);
559 	SfxInt32Item aRotYItem( SID_ATTR_TRANSFORM_ROT_Y,(sal_uInt32) mlRotY);
560 
561 	GetBindings()->GetDispatcher()->Execute(
562 		SID_ATTR_TRANSFORM, SFX_CALLMODE_RECORD, &aAngleItem, &aRotXItem, &aRotYItem, 0L );
563 
564 	return 0;
565 }
566 
567 
568 
569 IMPL_LINK( PosSizePropertyPanel, RotationHdl, void *, EMPTYARG )
570 {
571 	sal_Int32 nTmp = mpDial->GetRotation();
572 
573 	SfxInt32Item aAngleItem( SID_ATTR_TRANSFORM_ANGLE,(sal_uInt32) nTmp);
574 	SfxInt32Item aRotXItem( SID_ATTR_TRANSFORM_ROT_X,(sal_uInt32) mlRotX);
575 	SfxInt32Item aRotYItem( SID_ATTR_TRANSFORM_ROT_Y,(sal_uInt32) mlRotY);
576 
577 	GetBindings()->GetDispatcher()->Execute(
578 		SID_ATTR_TRANSFORM, SFX_CALLMODE_RECORD, &aAngleItem, &aRotXItem, &aRotYItem, 0L );
579 
580 	return 0;
581 }
582 
583 
584 
585 IMPL_LINK( PosSizePropertyPanel, FlipHdl, ToolBox*, pBox )
586 {
587 	switch (pBox->GetCurItemId())
588 	{
589 		case FLIP_HORIZONTAL:
590 		{
591 			SfxVoidItem aHoriItem (SID_FLIP_HORIZONTAL);
592 			GetBindings()->GetDispatcher()->Execute(
593 				SID_FLIP_HORIZONTAL, SFX_CALLMODE_RECORD, &aHoriItem, 0L );
594 		}
595 		break;
596 		case FLIP_VERTICAL:
597 		{
598 			SfxVoidItem aVertItem (SID_FLIP_VERTICAL );
599 			GetBindings()->GetDispatcher()->Execute(
600 				SID_FLIP_VERTICAL, SFX_CALLMODE_RECORD, &aVertItem, 0L );
601 		}
602 		break;
603 	}
604 	return 0;
605 }
606 
607 
608 
609 void PosSizePropertyPanel::NotifyItemUpdate(
610     sal_uInt16 nSID,
611     SfxItemState eState,
612     const SfxPoolItem* pState)
613 {
614 	mpFtAngle->Enable();
615 	mpMtrAngle->Enable();
616 	mpDial->Enable();
617 	mpFtFlip->Enable();
618 	mpFlipTbx->Enable();
619 
620     const SfxUInt32Item*	pWidthItem;
621 	const SfxUInt32Item*	pHeightItem;
622 
623 	SfxViewShell* pCurSh = SfxViewShell::Current();
624 	if ( pCurSh )
625 		mpView = pCurSh->GetDrawView();
626 	else
627 		mpView = NULL;
628 
629 	if ( mpView == NULL )
630 		return;
631 
632 	const SdrMarkList& rMarkList = mpView->GetMarkedObjectList();
633 
634 	if(1 == rMarkList.GetMarkCount())
635 	{
636 		const SdrObject* pObj = rMarkList.GetMark(0)->GetMarkedSdrObj();
637 		const SdrObjKind eKind((SdrObjKind)pObj->GetObjIdentifier());
638 
639 		if((pObj->GetObjInventor() == SdrInventor) && (OBJ_TEXT == eKind || OBJ_TITLETEXT == eKind || OBJ_OUTLINETEXT == eKind) && ((SdrTextObj*)pObj)->HasText())
640 			mbAdjustEnabled = true;
641 		else
642 			mbAdjustEnabled = false;
643 	}
644 	else
645 		mbAdjustEnabled = false;
646 
647 	switch (nSID)
648     {
649         case SID_ATTR_TRANSFORM_WIDTH:
650             if ( SFX_ITEM_AVAILABLE == eState )
651             {
652                 pWidthItem = dynamic_cast< const SfxUInt32Item* >(pState);
653 
654                 if(pWidthItem)
655                 {
656                     long mlOldWidth1 = pWidthItem->GetValue();
657 
658                     mlOldWidth1 = Fraction( mlOldWidth1 ) / maUIScale;
659                     SetMetricValue( *mpMtrWidth, mlOldWidth1, mePoolUnit );
660                     mlOldWidth = mlOldWidth1;
661                     break;
662                 }
663             }
664 
665             mpMtrWidth->SetText( String());
666             break;
667 
668         case SID_ATTR_TRANSFORM_HEIGHT:
669             if ( SFX_ITEM_AVAILABLE == eState )
670             {
671                 pHeightItem = dynamic_cast< const SfxUInt32Item* >(pState);
672 
673                 if(pHeightItem)
674                 {
675                     long mlOldHeight1 = pHeightItem->GetValue();
676 
677                     mlOldHeight1 = Fraction( mlOldHeight1 ) / maUIScale;
678                     SetMetricValue( *mpMtrHeight, mlOldHeight1, mePoolUnit );
679                     mlOldHeight = mlOldHeight1;
680                     break;
681                 }
682             }
683 
684             mpMtrHeight->SetText( String());
685             break;
686 
687         case SID_ATTR_TRANSFORM_POS_X:
688             if(SFX_ITEM_AVAILABLE == eState)
689             {
690                 const SfxInt32Item* pItem = dynamic_cast< const SfxInt32Item* >(pState);
691 
692                 if(pItem)
693                 {
694                     long nTmp = pItem->GetValue();
695                     nTmp = Fraction( nTmp ) / maUIScale;
696                     SetMetricValue( *mpMtrPosX, nTmp, mePoolUnit );
697                     break;
698                 }
699             }
700 
701             mpMtrPosX->SetText( String());
702             break;
703 
704         case SID_ATTR_TRANSFORM_POS_Y:
705             if(SFX_ITEM_AVAILABLE == eState)
706             {
707                 const SfxInt32Item* pItem = dynamic_cast< const SfxInt32Item* >(pState);
708 
709                 if(pItem)
710                 {
711                     long nTmp = pItem->GetValue();
712                     nTmp = Fraction( nTmp ) / maUIScale;
713                     SetMetricValue( *mpMtrPosY, nTmp, mePoolUnit );
714                     break;
715                 }
716             }
717 
718             mpMtrPosY->SetText( String());
719             break;
720 
721         case SID_ATTR_TRANSFORM_ROT_X:
722             if (SFX_ITEM_AVAILABLE == eState)
723             {
724                 const SfxInt32Item* pItem = dynamic_cast< const SfxInt32Item* >(pState);
725 
726                 if(pItem)
727                 {
728                     mlRotX = pItem->GetValue();
729                     mlRotX = Fraction( mlRotX ) / maUIScale;
730                 }
731             }
732             break;
733 
734         case SID_ATTR_TRANSFORM_ROT_Y:
735             if (SFX_ITEM_AVAILABLE == eState)
736             {
737                 const SfxInt32Item* pItem = dynamic_cast< const SfxInt32Item* >(pState);
738 
739                 if(pItem)
740                 {
741                     mlRotY = pItem->GetValue();
742                     mlRotY = Fraction( mlRotY ) / maUIScale;
743                 }
744             }
745             break;
746 
747         case SID_ATTR_TRANSFORM_PROTECT_POS:
748             if(SFX_ITEM_AVAILABLE == eState)
749             {
750                 const SfxBoolItem* pItem = dynamic_cast< const SfxBoolItem* >(pState);
751 
752                 if(pItem)
753                 {
754                     // record the state of position protect
755                     mbPositionProtected = pItem->GetValue();
756                     break;
757                 }
758             }
759 
760             mbPositionProtected = false;
761             break;
762 
763         case SID_ATTR_TRANSFORM_PROTECT_SIZE:
764             if(SFX_ITEM_AVAILABLE == eState)
765             {
766                 const SfxBoolItem* pItem = dynamic_cast< const SfxBoolItem* >(pState);
767 
768                 if(pItem)
769                 {
770                     // record the state of size protect
771                     mbSizeProtected = pItem->GetValue();
772                     break;
773                 }
774             }
775 
776             mbSizeProtected = false;
777             break;
778 
779         case SID_ATTR_TRANSFORM_AUTOWIDTH:
780             if(SFX_ITEM_AVAILABLE == eState)
781             {
782                 const SfxBoolItem* pItem = dynamic_cast< const SfxBoolItem* >(pState);
783 
784                 if(pItem)
785                 {
786                     mbAutoWidth = pItem->GetValue();
787                 }
788             }
789             break;
790 
791         case SID_ATTR_TRANSFORM_AUTOHEIGHT:
792             if(SFX_ITEM_AVAILABLE == eState)
793             {
794                 const SfxBoolItem* pItem = dynamic_cast< const SfxBoolItem* >(pState);
795 
796                 if(pItem)
797                 {
798                     mbAutoHeight = pItem->GetValue();
799                 }
800             }
801             break;
802 
803         case SID_ATTR_TRANSFORM_ANGLE:
804             if (eState >= SFX_ITEM_AVAILABLE)
805             {
806                 const SfxInt32Item* pItem = dynamic_cast< const SfxInt32Item* >(pState);
807 
808                 if(pItem)
809                 {
810                     long nTmp = pItem->GetValue();
811 
812                     mpMtrAngle->SetValue( nTmp );
813                     mpDial->SetRotation( nTmp );
814 
815                     switch(nTmp)
816                     {
817                         case 0:
818                             mpMtrAngle->SelectEntryPos(0);
819                             break;
820                         case 4500:
821                             mpMtrAngle->SelectEntryPos(1);
822                             break;
823                         case 9000:
824                             mpMtrAngle->SelectEntryPos(2);
825                             break;
826                         case 13500:
827                             mpMtrAngle->SelectEntryPos(3);
828                             break;
829                         case 18000:
830                             mpMtrAngle->SelectEntryPos(4);
831                             break;
832                         case 22500:
833                             mpMtrAngle->SelectEntryPos(5);
834                             break;
835                         case 27000:
836                             mpMtrAngle->SelectEntryPos(6);
837                             break;
838                         case 315000:
839                             mpMtrAngle->SelectEntryPos(7);
840                     }
841 
842                     break;
843                 }
844             }
845 
846             mpMtrAngle->SetText( String() );
847             mpDial->SetRotation( 0 );
848             break;
849 
850         case SID_ATTR_METRIC:
851             MetricState( eState, pState );
852             break;
853 
854         default:
855             break;
856     }
857 
858     const sal_Int32 nCombinedContext(maContext.GetCombinedContext_DI());
859 
860     switch (rMarkList.GetMarkCount())
861     {
862         case 0:
863             break;
864 
865         case 1:
866         {
867             const SdrObject* pObj = rMarkList.GetMark(0)->GetMarkedSdrObj();
868             const SdrObjKind eKind((SdrObjKind)pObj->GetObjIdentifier());
869 
870             if(((nCombinedContext == CombinedEnumContext(Application_DrawImpress, Context_Draw)
871                || nCombinedContext == CombinedEnumContext(Application_DrawImpress, Context_TextObject)
872                  ) && OBJ_EDGE == eKind)
873                || OBJ_CAPTION == eKind)
874             {
875                 mpFtAngle->Disable();
876                 mpMtrAngle->Disable();
877                 mpDial->Disable();
878                 mpFlipTbx->Disable();
879                 mpFtFlip->Disable();
880             }
881             break;
882         }
883 
884         default:
885         {
886             sal_uInt16 nMarkObj = 0;
887             bool isNoEdge = true;
888             while(rMarkList.GetMark(nMarkObj))
889             {
890                 const SdrObject* pObj = rMarkList.GetMark(nMarkObj)->GetMarkedSdrObj();
891                 const SdrObjKind eKind((SdrObjKind)pObj->GetObjIdentifier());
892 
893                 if(((nCombinedContext == CombinedEnumContext(Application_DrawImpress, Context_Draw)
894                   || nCombinedContext == CombinedEnumContext(Application_DrawImpress, Context_TextObject)
895                      ) && OBJ_EDGE == eKind)
896                   || OBJ_CAPTION == eKind)
897                 {
898                     isNoEdge = false;
899                     break;
900                 }
901                 nMarkObj++;
902             }
903             if(!isNoEdge)
904             {
905                 mpFtAngle->Disable();
906                 mpMtrAngle->Disable();
907                 mpDial->Disable();
908                 mpFlipTbx->Disable();
909                 mpFtFlip->Disable();
910             }
911             break;
912         }
913     }
914 
915     if(nCombinedContext == CombinedEnumContext(Application_DrawImpress, Context_TextObject))
916 	{
917 		mpFlipTbx->Disable();
918 		mpFtFlip->Disable();
919 	}
920 
921     DisableControls();
922 
923 	// mpCbxScale must synchronized with that on Position and Size tabpage on Shape Properties dialog
924 	SvtViewOptions	aPageOpt( E_TABPAGE, String::CreateFromInt32( RID_SVXPAGE_POSITION_SIZE ) );
925 	String	sUserData;
926 	::com::sun::star::uno::Any	aUserItem = aPageOpt.GetUserItem( USERITEM_NAME );
927 	::rtl::OUString	aTemp;
928 	if ( aUserItem >>= aTemp )
929 		sUserData = String( aTemp );
930 	mpCbxScale->Check( (bool)sUserData.ToInt32() );
931 }
932 
933 
934 
935 SfxBindings* PosSizePropertyPanel::GetBindings()
936 {
937     return mpBindings;
938 }
939 
940 
941 
942 void PosSizePropertyPanel::executeSize()
943 {
944 	if ( mpMtrWidth->IsValueModified() || mpMtrHeight->IsValueModified())
945 	{
946 		Fraction aUIScale = mpView->GetModel()->GetUIScale();
947 
948 		// get Width
949 		double nWidth = (double)mpMtrWidth->GetValue( meDlgUnit );
950 		nWidth = MetricField::ConvertDoubleValue( nWidth, mpMtrWidth->GetBaseValue(), mpMtrWidth->GetDecimalDigits(), meDlgUnit, FUNIT_100TH_MM );
951 		long lWidth = (long)(nWidth * (double)aUIScale);
952 		lWidth = OutputDevice::LogicToLogic( lWidth, MAP_100TH_MM, (MapUnit)mePoolUnit );
953 		lWidth = (long)mpMtrWidth->Denormalize( lWidth );
954 
955 		// get Height
956 		double nHeight = (double)mpMtrHeight->GetValue( meDlgUnit );
957 		nHeight = MetricField::ConvertDoubleValue( nHeight, mpMtrHeight->GetBaseValue(), mpMtrHeight->GetDecimalDigits(), meDlgUnit, FUNIT_100TH_MM );
958 		long lHeight = (long)(nHeight * (double)aUIScale);
959 		lHeight = OutputDevice::LogicToLogic( lHeight, MAP_100TH_MM, (MapUnit)mePoolUnit );
960 		lHeight = (long)mpMtrWidth->Denormalize( lHeight );
961 
962 		// put Width & Height to itemset
963 		SfxUInt32Item aWidthItem( SID_ATTR_TRANSFORM_WIDTH, (sal_uInt32) lWidth);
964 		SfxUInt32Item aHeightItem( SID_ATTR_TRANSFORM_HEIGHT, (sal_uInt32) lHeight);
965 		SfxAllEnumItem aPointItem (SID_ATTR_TRANSFORM_SIZE_POINT, (sal_uInt16)meRP);
966         const sal_Int32 nCombinedContext(maContext.GetCombinedContext());
967 
968         if( nCombinedContext == CombinedEnumContext(Application_Writer, Context_Graphic) // mnContextId == PROPERTY_CONTEXT_SW_GRAPHIC
969             || nCombinedContext == CombinedEnumContext(Application_Writer, Context_OLE) //mnContextId == PROPERTY_CONTEXT_SW_OLE
970             )
971         // if( mnContextId == PROPERTY_CONTEXT_SW_GRAPHIC || mnContextId == PROPERTY_CONTEXT_SW_OLE )
972         {
973 			GetBindings()->GetDispatcher()->Execute(SID_ATTR_TRANSFORM, SFX_CALLMODE_RECORD, &aWidthItem, &aHeightItem, &aPointItem, 0L );
974         }
975 		else
976 		{
977 			if ( (mpMtrWidth->IsValueModified()) && (mpMtrHeight->IsValueModified()))
978 				GetBindings()->GetDispatcher()->Execute(SID_ATTR_TRANSFORM, SFX_CALLMODE_RECORD, &aWidthItem, &aHeightItem, &aPointItem, 0L );
979 			else if( mpMtrWidth->IsValueModified())
980 				GetBindings()->GetDispatcher()->Execute(SID_ATTR_TRANSFORM, SFX_CALLMODE_RECORD, &aWidthItem, &aPointItem, 0L );
981 			else if ( mpMtrHeight->IsValueModified())
982 				GetBindings()->GetDispatcher()->Execute(SID_ATTR_TRANSFORM, SFX_CALLMODE_RECORD, &aHeightItem, &aPointItem, 0L );
983 		}
984 	}
985 }
986 
987 
988 
989 void PosSizePropertyPanel::executePosX()
990 {
991 	if ( mpMtrPosX->IsValueModified())
992 	{
993 		long lX = GetCoreValue( *mpMtrPosX, mePoolUnit );
994 		if( mbMtrPosXMirror )
995 			lX = -lX;
996 		long lY = GetCoreValue( *mpMtrPosY, mePoolUnit );
997 
998 		Size aPageSize;
999 		Rectangle aRect;
1000 		maRect = mpView->GetAllMarkedRect();
1001 		aRect = mpView->GetAllMarkedRect();
1002 
1003 		Fraction aUIScale = mpView->GetModel()->GetUIScale();
1004 		lX += maAnchorPos.X();
1005 		lX = Fraction( lX ) * aUIScale;
1006 		lY += maAnchorPos.Y();
1007 		lY = Fraction( lY ) * aUIScale;
1008 
1009 		SfxInt32Item aPosXItem( SID_ATTR_TRANSFORM_POS_X,(sal_uInt32) lX);
1010 		SfxInt32Item aPosYItem( SID_ATTR_TRANSFORM_POS_Y,(sal_uInt32) lY);
1011 
1012 		GetBindings()->GetDispatcher()->Execute(
1013 			SID_ATTR_TRANSFORM, SFX_CALLMODE_RECORD, &aPosXItem, 0L );
1014 	}
1015 }
1016 
1017 
1018 
1019 void PosSizePropertyPanel::executePosY()
1020 {
1021 	if ( mpMtrPosY->IsValueModified() )
1022 	{
1023 		long lX = GetCoreValue( *mpMtrPosX, mePoolUnit );
1024 		long lY = GetCoreValue( *mpMtrPosY, mePoolUnit );
1025 
1026 		Size aPageSize;
1027 		Rectangle aRect;
1028 		maRect = mpView->GetAllMarkedRect();
1029 		aRect = mpView->GetAllMarkedRect();
1030 
1031 		Fraction aUIScale = mpView->GetModel()->GetUIScale();
1032 		lX += maAnchorPos.X();
1033 		lX = Fraction( lX ) * aUIScale;
1034 		lY += maAnchorPos.Y();
1035 		lY = Fraction( lY ) * aUIScale;
1036 
1037 		SfxInt32Item aPosXItem( SID_ATTR_TRANSFORM_POS_X,(sal_uInt32) lX);
1038 		SfxInt32Item aPosYItem( SID_ATTR_TRANSFORM_POS_Y,(sal_uInt32) lY);
1039 
1040 		GetBindings()->GetDispatcher()->Execute(
1041 			SID_ATTR_TRANSFORM, SFX_CALLMODE_RECORD, &aPosYItem, 0L );
1042 	}
1043 }
1044 
1045 
1046 
1047 void PosSizePropertyPanel::MetricState( SfxItemState eState, const SfxPoolItem* pState )
1048 {
1049 	bool bPosXBlank = false;
1050 	bool bPosYBlank = false;
1051 	bool bWidthBlank = false;
1052 	bool bHeightBlank = false;
1053 	String sNull = String::CreateFromAscii("");
1054 	meDlgUnit = GetCurrentUnit(eState,pState);
1055 
1056 	if( mpMtrPosX->GetText() == sNull )
1057 		bPosXBlank = true;
1058 	SetFieldUnit( *mpMtrPosX, meDlgUnit, true );
1059 	if(bPosXBlank)
1060 		mpMtrPosX->SetText(String());
1061 
1062 	if( mpMtrPosY->GetText() == sNull )
1063 		bPosYBlank = true;
1064 	SetFieldUnit( *mpMtrPosY, meDlgUnit, true );
1065 	if(bPosYBlank)
1066 		mpMtrPosY->SetText(String());
1067 
1068 	if( mpMtrWidth->GetText() == sNull )
1069 		bWidthBlank = true;
1070 	SetFieldUnit( *mpMtrWidth, meDlgUnit, true );
1071 	if(bWidthBlank)
1072 		mpMtrWidth->SetText(String());
1073 
1074 	if( mpMtrHeight->GetText() == sNull )
1075 		bHeightBlank = true;
1076 	SetFieldUnit( *mpMtrHeight, meDlgUnit, true );
1077 	if(bHeightBlank)
1078 		mpMtrHeight->SetText(String());
1079 }
1080 
1081 
1082 
1083 FieldUnit PosSizePropertyPanel::GetCurrentUnit( SfxItemState eState, const SfxPoolItem* pState )
1084 {
1085 	FieldUnit eUnit = FUNIT_NONE;
1086 
1087 	if ( pState && eState >= SFX_ITEM_DEFAULT )
1088 		eUnit = (FieldUnit)( (const SfxUInt16Item*)pState )->GetValue();
1089 	else
1090 	{
1091 		SfxViewFrame* pFrame = SfxViewFrame::Current();
1092 		SfxObjectShell* pSh = NULL;
1093 		if ( pFrame )
1094 			pSh = pFrame->GetObjectShell();
1095 		if ( pSh )
1096 		{
1097 			SfxModule* pModule = pSh->GetModule();
1098 			if ( pModule )
1099 			{
1100 				const SfxPoolItem* pItem = pModule->GetItem( SID_ATTR_METRIC );
1101 				if ( pItem )
1102 					eUnit = (FieldUnit)( (SfxUInt16Item*)pItem )->GetValue();
1103 			}
1104 			else
1105 			{
1106 				DBG_ERRORFILE( "GetModuleFieldUnit(): no module found" );
1107 			}
1108 		}
1109 	}
1110 
1111 	return eUnit;
1112 }
1113 
1114 
1115 
1116 void PosSizePropertyPanel::DisableControls()
1117 {
1118     if( mbPositionProtected )
1119 	{
1120 		// the position is protected("Position protect" option in modal dialog is checked),
1121 		// disable all the Position controls in sidebar
1122 		mpFtPosX->Disable();
1123 		mpMtrPosX->Disable();
1124 		mpFtPosY->Disable();
1125 		mpMtrPosY->Disable();
1126 		mpFtAngle->Disable();
1127 		mpMtrAngle->Disable();
1128 		mpDial->Disable();
1129 		mpFtFlip->Disable();
1130 		mpFlipTbx->Disable();
1131 
1132 		mpFtWidth->Disable();
1133 		mpMtrWidth->Disable();
1134 		mpFtHeight->Disable();
1135 		mpMtrHeight->Disable();
1136         mpCbxScale->Disable();
1137 	}
1138 	else
1139 	{
1140 		mpFtPosX->Enable();
1141 		mpMtrPosX->Enable();
1142 		mpFtPosY->Enable();
1143 		mpMtrPosY->Enable();
1144 
1145         //mpFtAngle->Enable();
1146 		//mpMtrAngle->Enable();
1147 		//mpDial->Enable();
1148 		//mpFtFlip->Enable();
1149 		//mpFlipTbx->Enable();
1150 
1151 		if( mbSizeProtected )
1152 		{
1153 			mpFtWidth->Disable();
1154 			mpMtrWidth->Disable();
1155 			mpFtHeight->Disable();
1156 			mpMtrHeight->Disable();
1157 			mpCbxScale->Disable();
1158 		}
1159 		else
1160 		{
1161 			if(	mbAdjustEnabled )
1162 			{
1163 				if( mbAutoWidth )
1164 				{
1165 					mpFtWidth->Disable();
1166 					mpMtrWidth->Disable();
1167 					mpCbxScale->Disable();
1168 				}
1169 				else
1170 				{
1171 					mpFtWidth->Enable();
1172 					mpMtrWidth->Enable();
1173 				}
1174 				if( mbAutoHeight )
1175 				{
1176 					mpFtHeight->Disable();
1177 					mpMtrHeight->Disable();
1178 					mpCbxScale->Disable();
1179 				}
1180 				else
1181 				{
1182 					mpFtHeight->Enable();
1183 					mpMtrHeight->Enable();
1184 				}
1185 				if( !mbAutoWidth && !mbAutoHeight )
1186 					mpCbxScale->Enable();
1187 			}
1188 			else
1189 			{
1190 				mpFtWidth->Enable();
1191 				mpMtrWidth->Enable();
1192 				mpFtHeight->Enable();
1193 				mpMtrHeight->Enable();
1194 				mpCbxScale->Enable();
1195 			}
1196 		}
1197 	}
1198 }
1199 
1200 
1201 } } // end of namespace svx::sidebar
1202