| /************************************************************** |
| * |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the License. |
| * |
| *************************************************************/ |
| |
| |
| |
| // MARKER(update_precomp.py): autogen include statement, do not remove |
| #include "precompiled_sd.hxx" |
| |
| #ifdef SD_DLLIMPLEMENTATION |
| #undef SD_DLLIMPLEMENTATION |
| #endif |
| |
| |
| #include <svx/svxids.hrc> |
| #include <svx/dlgutil.hxx> |
| #include <svl/itempool.hxx> |
| #include <svl/aeitem.hxx> |
| |
| #include "dlgsnap.hrc" |
| #include "sdattr.hxx" |
| #include "View.hxx" |
| #include "sdresid.hxx" |
| #include "drawdoc.hxx" |
| #include "dlgsnap.hxx" |
| |
| |
| /************************************************************************* |
| |* |
| |* Dialog zum Einstellen des Rasters (wohl kaum ESO!) |
| |* |
| \************************************************************************/ |
| |
| SdSnapLineDlg::SdSnapLineDlg( |
| ::Window* pWindow, |
| const SfxItemSet& rInAttrs, |
| ::sd::View* pView) |
| : ModalDialog (pWindow, SdResId(DLG_SNAPLINE)), |
| aFlPos (this, SdResId(FL_POSITION)), |
| aFtX (this, SdResId(FT_X)), |
| aMtrFldX (this, SdResId(MTR_FLD_X)), |
| aFtY (this, SdResId(FT_Y)), |
| aMtrFldY (this, SdResId(MTR_FLD_Y)), |
| aFlDir (this, SdResId(FL_DIRECTION)), |
| aRbPoint (this, SdResId(RB_POINT)), |
| aRbVert (this, SdResId(RB_VERTICAL)), |
| aRbHorz (this, SdResId(RB_HORIZONTAL)), |
| aBtnOK (this, SdResId(BTN_OK)), |
| aBtnCancel (this, SdResId(BTN_CANCEL)), |
| aBtnHelp (this, SdResId(BTN_HELP)), |
| aBtnDelete (this, SdResId(BTN_DELETE)), |
| eUIUnit(pView->GetDoc()->GetUIUnit()), |
| aUIScale(pView->GetDoc()->GetUIScale()) |
| { |
| aRbPoint.SetModeRadioImage( Image( SdResId( BMP_POINT_H ) ), BMP_COLOR_HIGHCONTRAST ); |
| aRbVert.SetModeRadioImage( Image( SdResId( BMP_VERTICAL_H ) ), BMP_COLOR_HIGHCONTRAST ); |
| aRbHorz.SetModeRadioImage( Image( SdResId( BMP_HORIZONTAL_H ) ), BMP_COLOR_HIGHCONTRAST ); |
| |
| FreeResource(); |
| |
| aRbHorz.SetClickHdl(LINK(this, SdSnapLineDlg, ClickHdl)); |
| aRbVert.SetClickHdl(LINK(this, SdSnapLineDlg, ClickHdl)); |
| aRbPoint.SetClickHdl(LINK(this, SdSnapLineDlg, ClickHdl)); |
| |
| aBtnDelete.SetClickHdl(LINK(this, SdSnapLineDlg, ClickHdl)); |
| |
| SetFieldUnit( aMtrFldX, eUIUnit, sal_True ); |
| SetFieldUnit( aMtrFldY, eUIUnit, sal_True ); |
| |
| // WorkArea holen |
| Rectangle aWorkArea = pView->GetWorkArea(); |
| |
| // PoolUnit ermitteln |
| SfxItemPool* pPool = rInAttrs.GetPool(); |
| DBG_ASSERT( pPool, "Wo ist der Pool?" ); |
| SfxMapUnit ePoolUnit = pPool->GetMetric( SID_ATTR_FILL_HATCH ); |
| |
| // #i48497# Consider page origin |
| SdrPageView* pPV = pView->GetSdrPageView(); |
| Point aLeftTop(aWorkArea.Left()+1, aWorkArea.Top()+1); |
| pPV->LogicToPagePos(aLeftTop); |
| Point aRightBottom(aWorkArea.Right()-2, aWorkArea.Bottom()-2); |
| pPV->LogicToPagePos(aRightBottom); |
| |
| // Hier werden die Max- und MinWerte in Abhaengigkeit von der |
| // WorkArea, PoolUnit und der FieldUnit: |
| SetMetricValue( aMtrFldX, aLeftTop.X(), ePoolUnit ); |
| |
| long nValue = static_cast<long>(aMtrFldX.GetValue()); |
| nValue = Fraction( nValue ) / aUIScale; |
| aMtrFldX.SetMin( nValue ); |
| aMtrFldX.SetFirst( nValue ); |
| |
| SetMetricValue( aMtrFldX, aRightBottom.X(), ePoolUnit ); |
| nValue = static_cast<long>(aMtrFldX.GetValue()); |
| nValue = Fraction( nValue ) / aUIScale; |
| aMtrFldX.SetMax( nValue ); |
| aMtrFldX.SetLast( nValue ); |
| |
| SetMetricValue( aMtrFldY, aLeftTop.Y(), ePoolUnit ); |
| nValue = static_cast<long>(aMtrFldY.GetValue()); |
| nValue = Fraction( nValue ) / aUIScale; |
| aMtrFldY.SetMin( nValue ); |
| aMtrFldY.SetFirst( nValue ); |
| |
| SetMetricValue( aMtrFldY, aRightBottom.Y(), ePoolUnit ); |
| nValue = static_cast<long>(aMtrFldY.GetValue()); |
| nValue = Fraction( nValue ) / aUIScale; |
| aMtrFldY.SetMax( nValue ); |
| aMtrFldY.SetLast( nValue ); |
| |
| // Setzen der Werte |
| nXValue = ((const SfxUInt32Item&) rInAttrs.Get(ATTR_SNAPLINE_X)).GetValue(); |
| nYValue = ((const SfxUInt32Item&) rInAttrs.Get(ATTR_SNAPLINE_Y)).GetValue(); |
| nXValue = Fraction(nXValue) / aUIScale; |
| nYValue = Fraction(nYValue) / aUIScale; |
| SetMetricValue( aMtrFldX, nXValue, SFX_MAPUNIT_100TH_MM); |
| SetMetricValue( aMtrFldY, nYValue, SFX_MAPUNIT_100TH_MM); |
| |
| aRbPoint.Check(); |
| } |
| |
| /************************************************************************* |
| |* |
| |* Fuellt uebergebenes Item-Set mit Dialogbox-Attributen |
| |* |
| \************************************************************************/ |
| |
| IMPL_LINK( SdSnapLineDlg, ClickHdl, Button *, pBtn ) |
| { |
| if ( pBtn == &aRbPoint ) SetInputFields(sal_True, sal_True); |
| else if ( pBtn == &aRbHorz ) SetInputFields(sal_False, sal_True); |
| else if ( pBtn == &aRbVert ) SetInputFields(sal_True, sal_False); |
| else if ( pBtn == &aBtnDelete ) EndDialog(RET_SNAP_DELETE); |
| |
| return 0; |
| } |
| |
| /************************************************************************* |
| |* |
| |* Fuellt uebergebenes Item-Set mit Dialogbox-Attributen |
| |* |
| \************************************************************************/ |
| |
| void SdSnapLineDlg::GetAttr(SfxItemSet& rOutAttrs) |
| { |
| SnapKind eKind; |
| |
| if ( aRbHorz.IsChecked() ) eKind = SK_HORIZONTAL; |
| else if ( aRbVert.IsChecked() ) eKind = SK_VERTICAL; |
| else eKind = SK_POINT; |
| |
| nXValue = Fraction( GetCoreValue( aMtrFldX, SFX_MAPUNIT_100TH_MM) ) * aUIScale; |
| nYValue = Fraction( GetCoreValue( aMtrFldY, SFX_MAPUNIT_100TH_MM) ) * aUIScale; |
| |
| rOutAttrs.Put(SfxAllEnumItem(ATTR_SNAPLINE_KIND, (sal_uInt16)eKind)); |
| rOutAttrs.Put(SfxUInt32Item(ATTR_SNAPLINE_X, nXValue)); |
| rOutAttrs.Put(SfxUInt32Item(ATTR_SNAPLINE_Y, nYValue)); |
| } |
| |
| /************************************************************************* |
| |* |
| |* Gruppe mit Radiobutton verstecken |
| |* |
| \************************************************************************/ |
| |
| void SdSnapLineDlg::HideRadioGroup() |
| { |
| aFlDir.Hide(); |
| aRbHorz.Hide(); |
| aRbVert.Hide(); |
| aRbPoint.Hide(); |
| } |
| |
| /************************************************************************* |
| |* |
| |* X- bzw. Y-Inputfeld disablen |
| |* |
| \************************************************************************/ |
| |
| void SdSnapLineDlg::SetInputFields(sal_Bool bEnableX, sal_Bool bEnableY) |
| { |
| if ( bEnableX ) |
| { |
| if ( !aMtrFldX.IsEnabled() ) |
| aMtrFldX.SetValue(nXValue); |
| aMtrFldX.Enable(); |
| aFtX.Enable(); |
| } |
| else if ( aMtrFldX.IsEnabled() ) |
| { |
| nXValue = static_cast<long>(aMtrFldX.GetValue()); |
| aMtrFldX.SetText(String()); |
| aMtrFldX.Disable(); |
| aFtX.Disable(); |
| } |
| if ( bEnableY ) |
| { |
| if ( !aMtrFldY.IsEnabled() ) |
| aMtrFldY.SetValue(nYValue); |
| aMtrFldY.Enable(); |
| aFtY.Enable(); |
| } |
| else if ( aMtrFldY.IsEnabled() ) |
| { |
| nYValue = static_cast<long>(aMtrFldY.GetValue()); |
| aMtrFldY.SetText(String()); |
| aMtrFldY.Disable(); |
| aFtY.Disable(); |
| } |
| } |
| |
| |
| |