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