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