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