diff options
Diffstat (limited to 'sw/source/uibase/sidebar')
-rw-r--r-- | sw/source/uibase/sidebar/PageColumnControl.cxx | 110 | ||||
-rw-r--r-- | sw/source/uibase/sidebar/PageColumnControl.hxx | 65 | ||||
-rw-r--r-- | sw/source/uibase/sidebar/PageMarginControl.cxx | 518 | ||||
-rw-r--r-- | sw/source/uibase/sidebar/PageMarginControl.hxx | 121 | ||||
-rw-r--r-- | sw/source/uibase/sidebar/PageOrientationControl.cxx | 90 | ||||
-rw-r--r-- | sw/source/uibase/sidebar/PageOrientationControl.hxx | 56 | ||||
-rw-r--r-- | sw/source/uibase/sidebar/PagePropertyPanel.cxx | 742 | ||||
-rw-r--r-- | sw/source/uibase/sidebar/PagePropertyPanel.hrc | 161 | ||||
-rw-r--r-- | sw/source/uibase/sidebar/PagePropertyPanel.hxx | 223 | ||||
-rw-r--r-- | sw/source/uibase/sidebar/PageSizeControl.cxx | 177 | ||||
-rw-r--r-- | sw/source/uibase/sidebar/PageSizeControl.hxx | 71 | ||||
-rw-r--r-- | sw/source/uibase/sidebar/PropertyPanel.hrc | 35 | ||||
-rw-r--r-- | sw/source/uibase/sidebar/SwPanelFactory.cxx | 148 | ||||
-rw-r--r-- | sw/source/uibase/sidebar/WrapPropertyPanel.cxx | 243 | ||||
-rw-r--r-- | sw/source/uibase/sidebar/WrapPropertyPanel.hxx | 88 |
15 files changed, 2848 insertions, 0 deletions
diff --git a/sw/source/uibase/sidebar/PageColumnControl.cxx b/sw/source/uibase/sidebar/PageColumnControl.cxx new file mode 100644 index 000000000000..f2a5f3857bee --- /dev/null +++ b/sw/source/uibase/sidebar/PageColumnControl.cxx @@ -0,0 +1,110 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * 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 . + */ + +#include "PageColumnControl.hxx" +#include "PagePropertyPanel.hxx" +#include "PagePropertyPanel.hrc" + +#include <cmdid.h> +#include <swtypes.hxx> + +#include <svx/sidebar/ValueSetWithTextControl.hxx> +#include <sfx2/bindings.hxx> +#include <sfx2/dispatch.hxx> +#include <vcl/settings.hxx> + +namespace sw { namespace sidebar { + +PageColumnControl::PageColumnControl( + Window* pParent, + PagePropertyPanel& rPanel, + const sal_uInt16 nColumnType, + const bool bLandscape ) + : ::svx::sidebar::PopupControl( pParent, SW_RES(RID_POPUP_SWPAGE_COLUMN) ) + , mpColumnValueSet( new ::svx::sidebar::ValueSetWithTextControl( ::svx::sidebar::ValueSetWithTextControl::IMAGE_TEXT, this, SW_RES(VS_COLUMN) ) ) + , maMoreButton( this, SW_RES(CB_COLUMN_MORE) ) + , mnColumnType( nColumnType ) + , mrPagePropPanel(rPanel) +{ + mpColumnValueSet->SetStyle( mpColumnValueSet->GetStyle() | WB_3DLOOK | WB_NO_DIRECTSELECT ); + mpColumnValueSet->SetColor(GetSettings().GetStyleSettings().GetMenuColor()); + + if ( bLandscape ) + { + mpColumnValueSet->AddItem(Image(SW_RES(IMG_ONE_L)), 0, SW_RES(STR_ONE), 0 ); + mpColumnValueSet->AddItem(Image(SW_RES(IMG_TWO_L)), 0, SW_RES(STR_TWO), 0 ); + mpColumnValueSet->AddItem(Image(SW_RES(IMG_THREE_L)), 0, SW_RES(STR_THREE), 0 ); + mpColumnValueSet->AddItem(Image(SW_RES(IMG_LEFT_L)), 0, SW_RES(STR_LEFT), 0 ); + mpColumnValueSet->AddItem(Image(SW_RES(IMG_RIGHT_L)), 0, SW_RES(STR_RIGHT), 0 ); + } + else + { + mpColumnValueSet->AddItem(Image(SW_RES(IMG_ONE)), 0, SW_RES(STR_ONE), 0 ); + mpColumnValueSet->AddItem(Image(SW_RES(IMG_TWO)), 0, SW_RES(STR_TWO), 0 ); + mpColumnValueSet->AddItem(Image(SW_RES(IMG_THREE)), 0, SW_RES(STR_THREE), 0 ); + mpColumnValueSet->AddItem(Image(SW_RES(IMG_LEFT)), 0, SW_RES(STR_LEFT), 0 ); + mpColumnValueSet->AddItem(Image(SW_RES(IMG_RIGHT)), 0, SW_RES(STR_RIGHT), 0 ); + } + + mpColumnValueSet->SetNoSelection(); + mpColumnValueSet->SetSelectHdl( LINK(this, PageColumnControl,ImplColumnHdl ) ); + mpColumnValueSet->Show(); + mpColumnValueSet->SelectItem( mnColumnType ); + mpColumnValueSet->Format(); + mpColumnValueSet->StartSelection(); + + maMoreButton.SetClickHdl( LINK( this, PageColumnControl, MoreButtonClickHdl_Impl ) ); + maMoreButton.GrabFocus(); + + FreeResource(); +} + +PageColumnControl::~PageColumnControl(void) +{ + delete mpColumnValueSet; +} + +IMPL_LINK(PageColumnControl, ImplColumnHdl, void *, pControl) +{ + mpColumnValueSet->SetNoSelection(); + if ( pControl == mpColumnValueSet ) + { + const sal_uInt32 nColumnType = mpColumnValueSet->GetSelectItemId(); + if ( nColumnType != mnColumnType ) + { + mnColumnType = nColumnType; + mrPagePropPanel.ExecuteColumnChange( mnColumnType ); + } + } + + mrPagePropPanel.ClosePageColumnPopup(); + return 0; +} + +IMPL_LINK(PageColumnControl, MoreButtonClickHdl_Impl, void *, EMPTYARG) +{ + mrPagePropPanel.GetBindings()->GetDispatcher()->Execute( FN_FORMAT_PAGE_COLUMN_DLG, SFX_CALLMODE_ASYNCHRON ); + + mrPagePropPanel.ClosePageColumnPopup(); + return 0; +} + +} } // end of namespace sw::sidebar + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sw/source/uibase/sidebar/PageColumnControl.hxx b/sw/source/uibase/sidebar/PageColumnControl.hxx new file mode 100644 index 000000000000..133e002ebbf8 --- /dev/null +++ b/sw/source/uibase/sidebar/PageColumnControl.hxx @@ -0,0 +1,65 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * 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 . + */ +#ifndef INCLUDED_SW_SOURCE_CORE_UIBASE_SIDEBAR_PAGECOLUMNCONTROL_HXX +#define INCLUDED_SW_SOURCE_CORE_UIBASE_SIDEBAR_PAGECOLUMNCONTROL_HXX + +#include <svx/sidebar/PopupControl.hxx> + +#include <vcl/image.hxx> +#include <vcl/button.hxx> + +#include <vector> + +namespace svx { namespace sidebar { + class ValueSetWithTextControl; +} } + +namespace sw { namespace sidebar { + +class PagePropertyPanel; + +class PageColumnControl + : public ::svx::sidebar::PopupControl +{ +public: + PageColumnControl( + Window* pParent, + PagePropertyPanel& rPanel, + const sal_uInt16 nColumnType, + const bool bLandscape ); + + virtual ~PageColumnControl(void); + +private: + ::svx::sidebar::ValueSetWithTextControl* mpColumnValueSet; + PushButton maMoreButton; + + sal_uInt16 mnColumnType; + + PagePropertyPanel& mrPagePropPanel; + + DECL_LINK(ImplColumnHdl, void*); + DECL_LINK(MoreButtonClickHdl_Impl, void*); +}; + +} } // end of namespace sw::sidebar + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sw/source/uibase/sidebar/PageMarginControl.cxx b/sw/source/uibase/sidebar/PageMarginControl.cxx new file mode 100644 index 000000000000..6a0f181d0ce5 --- /dev/null +++ b/sw/source/uibase/sidebar/PageMarginControl.cxx @@ -0,0 +1,518 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * 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 . + */ + +#include <sal/config.h> + +#include <cstdlib> + +#include "PageMarginControl.hxx" +#include "PagePropertyPanel.hxx" +#include "PagePropertyPanel.hrc" + +#include <swtypes.hxx> + +#include <svx/sidebar/ValueSetWithTextControl.hxx> +#include <vcl/settings.hxx> + +#define SWPAGE_LEFT_GVALUE "Sw_Page_Left" +#define SWPAGE_RIGHT_GVALUE "Sw_Page_Right" +#define SWPAGE_TOP_GVALUE "Sw_Page_Top" +#define SWPAGE_DOWN_GVALUE "Sw_Page_Down" +#define SWPAGE_MIRROR_GVALUE "Sw_Page_Mirrored" + +namespace sw { namespace sidebar { + +PageMarginControl::PageMarginControl( + Window* pParent, + PagePropertyPanel& rPanel, + const SvxLongLRSpaceItem& aPageLRMargin, + const SvxLongULSpaceItem& aPageULMargin, + const bool bMirrored, + const Size aPageSize, + const bool bLandscape, + const FieldUnit eFUnit, + const SfxMapUnit eUnit ) + : ::svx::sidebar::PopupControl( pParent, SW_RES(RID_POPUP_SWPAGE_MARGIN) ) + , mpMarginValueSet( new ::svx::sidebar::ValueSetWithTextControl( ::svx::sidebar::ValueSetWithTextControl::IMAGE_TEXT, this, SW_RES(VS_MARGIN) ) ) + , maCustom(this, SW_RES(FT_CUSTOM)) + , maLeft(this, SW_RES(FT_LEFT)) + , maInner(this, SW_RES(FT_INNER)) + , maLeftMarginEdit(this, SW_RES(MF_SWLEFT_MARGIN)) + , maRight(this, SW_RES(FT_RIGHT)) + , maOuter(this, SW_RES(FT_OUTER)) + , maRightMarginEdit(this, SW_RES(MF_SWRIGHT_MARGIN)) + , maTop(this, SW_RES(FT_TOP)) + , maTopMarginEdit(this, SW_RES(MF_SWTOP_MARGIN)) + , maBottom(this, SW_RES(FT_BOTTOM)) + , maBottomMarginEdit(this, SW_RES(MF_SWBOTTOM_MARGIN)) + , maWidthHeightField( this, SW_RES(FLD_WIDTH_HEIGHT) ) + , mnPageLeftMargin( aPageLRMargin.GetLeft() ) + , mnPageRightMargin( aPageLRMargin.GetRight() ) + , mnPageTopMargin( aPageULMargin.GetUpper() ) + , mnPageBottomMargin( aPageULMargin.GetLower() ) + , mbMirrored( bMirrored ) + , meUnit( eUnit ) + , mbUserCustomValuesAvailable(false) + , mnUserCustomPageLeftMargin(0) + , mnUserCustomPageRightMargin(0) + , mnUserCustomPageTopMargin(0) + , mnUserCustomPageBottomMargin(0) + , mbUserCustomMirrored(false) + , mbCustomValuesUsed( false ) + , mrPagePropPanel(rPanel) +{ + maWidthHeightField.Hide(); + SetFieldUnit( maWidthHeightField, eFUnit ); + + mbUserCustomValuesAvailable = GetUserCustomValues(); + + mpMarginValueSet->SetStyle( mpMarginValueSet->GetStyle() | WB_3DLOOK | WB_NO_DIRECTSELECT ); + mpMarginValueSet->SetColor( GetSettings().GetStyleSettings().GetMenuColor() ); + + FillValueSet( bLandscape, mbUserCustomValuesAvailable ); + + mpMarginValueSet->SetNoSelection(); + mpMarginValueSet->SetSelectHdl( LINK(this, PageMarginControl,ImplMarginHdl ) ); + mpMarginValueSet->Show(); + + SelectValueSetItem(); + + SetFieldUnit( maLeftMarginEdit, eFUnit ); + Link aLinkLR = LINK( this, PageMarginControl, ModifyLRMarginHdl ); + maLeftMarginEdit.SetModifyHdl( aLinkLR ); + SetMetricValue( maLeftMarginEdit, mnPageLeftMargin, meUnit ); + + SetFieldUnit( maRightMarginEdit, eFUnit ); + maRightMarginEdit.SetModifyHdl( aLinkLR ); + SetMetricValue( maRightMarginEdit, mnPageRightMargin, meUnit ); + + Link aLinkUL = LINK( this, PageMarginControl, ModifyULMarginHdl ); + SetFieldUnit( maTopMarginEdit, eFUnit ); + maTopMarginEdit.SetModifyHdl( aLinkUL ); + SetMetricValue( maTopMarginEdit, mnPageTopMargin, meUnit ); + + SetFieldUnit( maBottomMarginEdit, eFUnit ); + maBottomMarginEdit.SetModifyHdl( aLinkUL ); + SetMetricValue( maBottomMarginEdit, mnPageBottomMargin, meUnit ); + + SetMetricFieldMaxValues( aPageSize ); + + if ( mbMirrored ) + { + maLeft.Hide(); + maRight.Hide(); + maInner.Show(); + maOuter.Show(); + } + else + { + maLeft.Show(); + maRight.Show(); + maInner.Hide(); + maOuter.Hide(); + } + + FreeResource(); +} + +PageMarginControl::~PageMarginControl(void) +{ + delete mpMarginValueSet; + + StoreUserCustomValues(); +} + +void PageMarginControl::SetMetricFieldMaxValues( const Size aPageSize ) +{ + const long nML = maLeftMarginEdit.Denormalize( maLeftMarginEdit.GetValue(FUNIT_TWIP) ); + const long nMR = maRightMarginEdit.Denormalize( maRightMarginEdit.GetValue(FUNIT_TWIP) ); + const long nMT = maTopMarginEdit.Denormalize(maTopMarginEdit.GetValue(FUNIT_TWIP) ); + const long nMB = maBottomMarginEdit.Denormalize( maBottomMarginEdit.GetValue(FUNIT_TWIP) ); + + const long nPH = LogicToLogic( aPageSize.Height(), (MapUnit)meUnit, MAP_TWIP ); + const long nPW = LogicToLogic( aPageSize.Width(), (MapUnit)meUnit, MAP_TWIP ); + + // Left + long nMax = nPW - nMR - MINBODY; + maLeftMarginEdit.SetMax(maLeftMarginEdit.Normalize(nMax), FUNIT_TWIP); + + // Right + nMax = nPW - nML - MINBODY; + maRightMarginEdit.SetMax(maRightMarginEdit.Normalize(nMax), FUNIT_TWIP); + + //Top + nMax = nPH - nMB - MINBODY; + maTopMarginEdit.SetMax(maTopMarginEdit.Normalize(nMax), FUNIT_TWIP); + + //Bottom + nMax = nPH - nMT - MINBODY; + maBottomMarginEdit.SetMax(maTopMarginEdit.Normalize(nMax), FUNIT_TWIP); +} + +void PageMarginControl::FillValueSet( + const bool bLandscape, + const bool bUserCustomValuesAvailable ) +{ + const OUString aLeft = SW_RESSTR(STR_MARGIN_TOOLTIP_LEFT); + const OUString aRight = SW_RESSTR(STR_MARGIN_TOOLTIP_RIGHT); + const OUString aTop = SW_RESSTR(STR_MARGIN_TOOLTIP_TOP); + const OUString aBottom = SW_RESSTR(STR_MARGIN_TOOLTIP_BOT); + + SetMetricValue( maWidthHeightField, SWPAGE_NARROW_VALUE, meUnit ); + const OUString aNarrowValText = maWidthHeightField.GetText(); + OUString aHelpText = aLeft; + aHelpText += aNarrowValText; + aHelpText += aRight; + aHelpText += aNarrowValText; + aHelpText += aTop; + aHelpText += aNarrowValText; + aHelpText += aBottom; + aHelpText += aNarrowValText; + mpMarginValueSet->AddItem( + Image((bLandscape) ? SW_RES(IMG_NARROW_L) : SW_RES(IMG_NARROW)), 0, + SW_RESSTR(STR_NARROW), &aHelpText ); + + SetMetricValue( maWidthHeightField, SWPAGE_NORMAL_VALUE, meUnit ); + const OUString aNormalValText = maWidthHeightField.GetText(); + aHelpText = aLeft; + aHelpText += aNormalValText; + aHelpText += aRight; + aHelpText += aNormalValText; + aHelpText += aTop; + aHelpText += aNormalValText; + aHelpText += aBottom; + aHelpText += aNormalValText; + mpMarginValueSet->AddItem( + Image((bLandscape) ? SW_RES(IMG_NORMAL_L) : SW_RES(IMG_NORMAL)), 0, + SW_RESSTR(STR_NORMAL), &aHelpText ); + + SetMetricValue( maWidthHeightField, SWPAGE_WIDE_VALUE1, meUnit ); + const OUString aWide1ValText = maWidthHeightField.GetText(); + SetMetricValue( maWidthHeightField, SWPAGE_WIDE_VALUE2, meUnit ); + const OUString aWide2ValText = maWidthHeightField.GetText(); + aHelpText = aLeft; + aHelpText += aWide2ValText; + aHelpText += aRight; + aHelpText += aWide2ValText; + aHelpText += aTop; + aHelpText += aWide1ValText; + aHelpText += aBottom; + aHelpText += aWide1ValText; + mpMarginValueSet->AddItem( + Image((bLandscape) ? SW_RES(IMG_WIDE_L) : SW_RES(IMG_WIDE)), 0, + SW_RESSTR(STR_WIDE), &aHelpText ); + + const OUString aInner = SW_RESSTR(STR_MARGIN_TOOLTIP_INNER); + const OUString aOuter = SW_RESSTR(STR_MARGIN_TOOLTIP_OUTER); + + SetMetricValue( maWidthHeightField, SWPAGE_WIDE_VALUE3, meUnit ); + const OUString aWide3ValText = maWidthHeightField.GetText(); + aHelpText = aInner; + aHelpText += aWide3ValText; + aHelpText += aOuter; + aHelpText += aWide3ValText; + aHelpText += aTop; + aHelpText += aWide1ValText; + aHelpText += aBottom; + aHelpText += aWide1ValText; + mpMarginValueSet->AddItem( + Image((bLandscape) ? SW_RES(IMG_MIRRORED_L) : SW_RES(IMG_MIRRORED)), 0, + SW_RESSTR(STR_MIRRORED), &aHelpText ); + + if ( bUserCustomValuesAvailable ) + { + aHelpText = mbUserCustomMirrored ? aInner : aLeft; + SetMetricValue( maWidthHeightField, mnUserCustomPageLeftMargin, meUnit ); + aHelpText += maWidthHeightField.GetText(); + aHelpText += mbUserCustomMirrored ? aOuter : aRight; + SetMetricValue( maWidthHeightField, mnUserCustomPageRightMargin, meUnit ); + aHelpText += maWidthHeightField.GetText(); + aHelpText += aTop; + SetMetricValue( maWidthHeightField, mnUserCustomPageTopMargin, meUnit ); + aHelpText += maWidthHeightField.GetText(); + aHelpText += aBottom; + SetMetricValue( maWidthHeightField, mnUserCustomPageBottomMargin, meUnit ); + aHelpText += maWidthHeightField.GetText(); + } + else + { + aHelpText = OUString(); + } + mpMarginValueSet->AddItem( + Image((bUserCustomValuesAvailable) ? SW_RES(IMG_CUSTOM) : SW_RES(IMG_CUSTOM_DIS)), 0, + SW_RESSTR(STR_LCVALUE), &aHelpText ); +} + +void PageMarginControl::SelectValueSetItem() +{ + const long cTolerance = 5; + + if( std::abs(mnPageLeftMargin - SWPAGE_NARROW_VALUE) <= cTolerance && + std::abs(mnPageRightMargin - SWPAGE_NARROW_VALUE) <= cTolerance && + std::abs(mnPageTopMargin - SWPAGE_NARROW_VALUE) <= cTolerance && + std::abs(mnPageBottomMargin - SWPAGE_NARROW_VALUE) <= cTolerance && + !mbMirrored ) + { + mpMarginValueSet->SelectItem(1); + } + else if( std::abs(mnPageLeftMargin - SWPAGE_NORMAL_VALUE) <= cTolerance && + std::abs(mnPageRightMargin - SWPAGE_NORMAL_VALUE) <= cTolerance && + std::abs(mnPageTopMargin - SWPAGE_NORMAL_VALUE) <= cTolerance && + std::abs(mnPageBottomMargin - SWPAGE_NORMAL_VALUE) <= cTolerance && + !mbMirrored ) + { + mpMarginValueSet->SelectItem(2); + } + else if( std::abs(mnPageLeftMargin - SWPAGE_WIDE_VALUE2) <= cTolerance && + std::abs(mnPageRightMargin - SWPAGE_WIDE_VALUE2) <= cTolerance && + std::abs(mnPageTopMargin - SWPAGE_WIDE_VALUE1) <= cTolerance && + std::abs(mnPageBottomMargin - SWPAGE_WIDE_VALUE1) <= cTolerance && + !mbMirrored ) + { + mpMarginValueSet->SelectItem(3); + } + else if( std::abs(mnPageLeftMargin - SWPAGE_WIDE_VALUE3) <= cTolerance && + std::abs(mnPageRightMargin - SWPAGE_WIDE_VALUE1) <= cTolerance && + std::abs(mnPageTopMargin - SWPAGE_WIDE_VALUE1) <= cTolerance && + std::abs(mnPageBottomMargin - SWPAGE_WIDE_VALUE1) <= cTolerance && + mbMirrored ) + { + mpMarginValueSet->SelectItem(4); + } + else + { + mpMarginValueSet->SelectItem(0); + } + + mpMarginValueSet->Format(); + mpMarginValueSet->StartSelection(); +}; + +IMPL_LINK(PageMarginControl, ImplMarginHdl, void *, pControl) +{ + if ( pControl == mpMarginValueSet ) + { + const sal_uInt16 iPos = mpMarginValueSet->GetSelectItemId(); + bool bMirrored = false; + bool bApplyNewPageMargins = true; + switch ( iPos ) + { + case 1: + mnPageLeftMargin = SWPAGE_NARROW_VALUE; + mnPageRightMargin = SWPAGE_NARROW_VALUE; + mnPageTopMargin = SWPAGE_NARROW_VALUE; + mnPageBottomMargin = SWPAGE_NARROW_VALUE; + bMirrored = false; + break; + case 2: + mnPageLeftMargin = SWPAGE_NORMAL_VALUE; + mnPageRightMargin = SWPAGE_NORMAL_VALUE; + mnPageTopMargin = SWPAGE_NORMAL_VALUE; + mnPageBottomMargin = SWPAGE_NORMAL_VALUE; + bMirrored = false; + break; + case 3: + mnPageLeftMargin = SWPAGE_WIDE_VALUE2; + mnPageRightMargin = SWPAGE_WIDE_VALUE2; + mnPageTopMargin = SWPAGE_WIDE_VALUE1; + mnPageBottomMargin = SWPAGE_WIDE_VALUE1; + bMirrored = false; + break; + case 4: + mnPageLeftMargin = SWPAGE_WIDE_VALUE3; + mnPageRightMargin = SWPAGE_WIDE_VALUE1; + mnPageTopMargin = SWPAGE_WIDE_VALUE1; + mnPageBottomMargin = SWPAGE_WIDE_VALUE1; + bMirrored = true; + break; + case 5: + if ( mbUserCustomValuesAvailable ) + { + mnPageLeftMargin = mnUserCustomPageLeftMargin; + mnPageRightMargin = mnUserCustomPageRightMargin; + mnPageTopMargin = mnUserCustomPageTopMargin; + mnPageBottomMargin = mnUserCustomPageBottomMargin; + bMirrored = mbUserCustomMirrored; + } + else + { + bApplyNewPageMargins = false; + } + break; + } + + if ( bApplyNewPageMargins ) + { + mrPagePropPanel.StartUndo(); + mpMarginValueSet->SetNoSelection(); + mrPagePropPanel.ExecuteMarginLRChange( mnPageLeftMargin, mnPageRightMargin ); + mrPagePropPanel.ExecuteMarginULChange( mnPageTopMargin, mnPageBottomMargin ); + if ( mbMirrored != bMirrored ) + { + mbMirrored = bMirrored; + mrPagePropPanel.ExecutePageLayoutChange( mbMirrored ); + } + mrPagePropPanel.EndUndo(); + + mbCustomValuesUsed = false; + mrPagePropPanel.ClosePageMarginPopup(); + } + else + { + // back to initial selection + SelectValueSetItem(); + } + } + + return 0; +} + +IMPL_LINK( PageMarginControl, ModifyLRMarginHdl, MetricField *, EMPTYARG ) +{ + mpMarginValueSet->SetNoSelection(); + mpMarginValueSet->SelectItem(0); + mpMarginValueSet->Format(); + mpMarginValueSet->StartSelection(); + + mnPageLeftMargin = GetCoreValue( maLeftMarginEdit, meUnit ); + mnPageRightMargin = GetCoreValue( maRightMarginEdit, meUnit ); + mrPagePropPanel.ExecuteMarginLRChange( mnPageLeftMargin, mnPageRightMargin ); + mbCustomValuesUsed = true; + return 0; +} + +IMPL_LINK( PageMarginControl, ModifyULMarginHdl, MetricField *, EMPTYARG ) +{ + mpMarginValueSet->SetNoSelection(); + mpMarginValueSet->SelectItem(0); + mpMarginValueSet->Format(); + mpMarginValueSet->StartSelection(); + + mnPageTopMargin = GetCoreValue( maTopMarginEdit, meUnit ); + mnPageBottomMargin = GetCoreValue( maBottomMarginEdit, meUnit ); + mrPagePropPanel.ExecuteMarginULChange( mnPageTopMargin, mnPageBottomMargin ); + mbCustomValuesUsed = true; + return 0; +} + +bool PageMarginControl::GetUserCustomValues() +{ + bool bUserCustomValuesAvailable = false; + + SvtViewOptions aWinOpt( E_WINDOW, SWPAGE_LEFT_GVALUE ); + if ( aWinOpt.Exists() ) + { + ::com::sun::star::uno::Sequence < ::com::sun::star::beans::NamedValue > aSeq = aWinOpt.GetUserData(); + ::rtl::OUString aTmp; + if ( aSeq.getLength()) + aSeq[0].Value >>= aTmp; + OUString aWinData( aTmp ); + mnUserCustomPageLeftMargin = aWinData.toInt32(); + bUserCustomValuesAvailable = true; + } + + SvtViewOptions aWinOpt2( E_WINDOW, SWPAGE_RIGHT_GVALUE ); + if ( aWinOpt2.Exists() ) + { + ::com::sun::star::uno::Sequence < ::com::sun::star::beans::NamedValue > aSeq = aWinOpt2.GetUserData(); + ::rtl::OUString aTmp; + if ( aSeq.getLength()) + aSeq[0].Value >>= aTmp; + OUString aWinData( aTmp ); + mnUserCustomPageRightMargin = aWinData.toInt32(); + bUserCustomValuesAvailable = true; + } + + SvtViewOptions aWinOpt3( E_WINDOW, SWPAGE_TOP_GVALUE ); + if ( aWinOpt3.Exists() ) + { + ::com::sun::star::uno::Sequence < ::com::sun::star::beans::NamedValue > aSeq = aWinOpt3.GetUserData(); + ::rtl::OUString aTmp; + if ( aSeq.getLength()) + aSeq[0].Value >>= aTmp; + OUString aWinData( aTmp ); + mnUserCustomPageTopMargin = aWinData.toInt32(); + bUserCustomValuesAvailable = true; + } + + SvtViewOptions aWinOpt4( E_WINDOW, SWPAGE_DOWN_GVALUE ); + if ( aWinOpt4.Exists() ) + { + ::com::sun::star::uno::Sequence < ::com::sun::star::beans::NamedValue > aSeq = aWinOpt4.GetUserData(); + ::rtl::OUString aTmp; + if ( aSeq.getLength()) + aSeq[0].Value >>= aTmp; + OUString aWinData( aTmp ); + mnUserCustomPageBottomMargin = aWinData.toInt32(); + bUserCustomValuesAvailable = true; + } + + SvtViewOptions aWinOpt5( E_WINDOW, SWPAGE_MIRROR_GVALUE ); + if ( aWinOpt5.Exists() ) + { + ::com::sun::star::uno::Sequence < ::com::sun::star::beans::NamedValue > aSeq = aWinOpt5.GetUserData(); + ::rtl::OUString aTmp; + if ( aSeq.getLength()) + aSeq[0].Value >>= aTmp; + OUString aWinData( aTmp ); + mbUserCustomMirrored = aWinData.toInt32() == 0 ? false : true; + bUserCustomValuesAvailable = true; + } + + return bUserCustomValuesAvailable; +} + +void PageMarginControl::StoreUserCustomValues() +{ + if ( !mbCustomValuesUsed ) + { + return; + } + + ::com::sun::star::uno::Sequence < ::com::sun::star::beans::NamedValue > aSeq(1); + SvtViewOptions aWinOpt( E_WINDOW, SWPAGE_LEFT_GVALUE ); + + aSeq[0].Name = "mnPageLeftMargin"; + aSeq[0].Value <<= ::rtl::OUString::number( mnPageLeftMargin ); + aWinOpt.SetUserData( aSeq ); + + SvtViewOptions aWinOpt2( E_WINDOW, SWPAGE_RIGHT_GVALUE ); + aSeq[0].Name = "mnPageRightMargin"; + aSeq[0].Value <<= ::rtl::OUString::number( mnPageRightMargin ); + aWinOpt2.SetUserData( aSeq ); + + SvtViewOptions aWinOpt3( E_WINDOW, SWPAGE_TOP_GVALUE ); + aSeq[0].Name = "mnPageTopMargin"; + aSeq[0].Value <<= ::rtl::OUString::number( mnPageTopMargin ); + aWinOpt3.SetUserData( aSeq ); + + SvtViewOptions aWinOpt4( E_WINDOW, SWPAGE_DOWN_GVALUE ); + aSeq[0].Name = "mnPageBottomMargin"; + aSeq[0].Value <<= ::rtl::OUString::number( mnPageBottomMargin ); + aWinOpt4.SetUserData( aSeq ); + + SvtViewOptions aWinOpt5( E_WINDOW, SWPAGE_MIRROR_GVALUE ); + aSeq[0].Name = "mbMirrored"; + aSeq[0].Value <<= ::rtl::OUString::number( (mbMirrored ? 1 : 0) ); + aWinOpt5.SetUserData( aSeq ); +} + +} } // end of namespace sw::sidebar + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sw/source/uibase/sidebar/PageMarginControl.hxx b/sw/source/uibase/sidebar/PageMarginControl.hxx new file mode 100644 index 000000000000..ee57102dd941 --- /dev/null +++ b/sw/source/uibase/sidebar/PageMarginControl.hxx @@ -0,0 +1,121 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * 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 . + */ +#ifndef INCLUDED_SW_SOURCE_CORE_UIBASE_SIDEBAR_PAGEMARGINCONTROL_HXX +#define INCLUDED_SW_SOURCE_CORE_UIBASE_SIDEBAR_PAGEMARGINCONTROL_HXX + +#include <svx/sidebar/PopupControl.hxx> + +#include <tools/fldunit.hxx> +#include <svl/poolitem.hxx> +#include <svx/rulritem.hxx> +#include <unotools/viewoptions.hxx> +#include <vcl/fixed.hxx> +#include <vcl/field.hxx> +#include <svtools/unitconv.hxx> +#include <vector> + +#define SWPAGE_NARROW_VALUE 720 +#define SWPAGE_NORMAL_VALUE 1136 +#define SWPAGE_WIDE_VALUE1 1440 +#define SWPAGE_WIDE_VALUE2 2880 +#define SWPAGE_WIDE_VALUE3 1800 + +namespace svx { namespace sidebar { + class ValueSetWithTextControl; +} } + +static const long MINBODY = 284; //0.5 cm in twips + +namespace sw { namespace sidebar { + +class PagePropertyPanel; + +class PageMarginControl + : public ::svx::sidebar::PopupControl +{ +public: + PageMarginControl( + Window* pParent, + PagePropertyPanel& rPanel, + const SvxLongLRSpaceItem& aPageLRMargin, + const SvxLongULSpaceItem& aPageULMargin, + const bool bMirrored, + const Size aPageSize, + const bool bLandscape, + const FieldUnit eFUnit, + const SfxMapUnit eUnit ); + virtual ~PageMarginControl(void); + +private: + ::svx::sidebar::ValueSetWithTextControl* mpMarginValueSet; + + FixedText maCustom; + FixedText maLeft; + FixedText maInner; + MetricField maLeftMarginEdit; + FixedText maRight; + FixedText maOuter; + MetricField maRightMarginEdit; + FixedText maTop; + MetricField maTopMarginEdit; + FixedText maBottom; + MetricField maBottomMarginEdit; + + // hidden metric field + MetricField maWidthHeightField; + + long mnPageLeftMargin; + long mnPageRightMargin; + long mnPageTopMargin; + long mnPageBottomMargin; + bool mbMirrored; + + const SfxMapUnit meUnit; + + bool mbUserCustomValuesAvailable; + long mnUserCustomPageLeftMargin; + long mnUserCustomPageRightMargin; + long mnUserCustomPageTopMargin; + long mnUserCustomPageBottomMargin; + bool mbUserCustomMirrored; + + bool mbCustomValuesUsed; + + PagePropertyPanel& mrPagePropPanel; + + DECL_LINK( ImplMarginHdl, void* ); + DECL_LINK( ModifyLRMarginHdl, MetricField* ); + DECL_LINK( ModifyULMarginHdl, MetricField* ); + + void SetMetricFieldMaxValues( const Size aPageSize ); + + bool GetUserCustomValues(); + void StoreUserCustomValues(); + + void FillValueSet( + const bool bLandscape, + const bool bUserCustomValuesAvailable ); + void SelectValueSetItem(); +}; + +} } // end of namespace sw::sidebar + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sw/source/uibase/sidebar/PageOrientationControl.cxx b/sw/source/uibase/sidebar/PageOrientationControl.cxx new file mode 100644 index 000000000000..53236610a167 --- /dev/null +++ b/sw/source/uibase/sidebar/PageOrientationControl.cxx @@ -0,0 +1,90 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * 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 . + */ + +#include "PageOrientationControl.hxx" +#include "PagePropertyPanel.hxx" +#include "PagePropertyPanel.hrc" + +#include <swtypes.hxx> + +#include <svx/sidebar/ValueSetWithTextControl.hxx> +#include <vcl/settings.hxx> + +namespace sw { namespace sidebar { + +PageOrientationControl::PageOrientationControl( + Window* pParent, + PagePropertyPanel& rPanel, + const bool bLandscape ) + : ::svx::sidebar::PopupControl( pParent, SW_RES(RID_POPUP_SWPAGE_ORIENTATION) ) + , mpOrientationValueSet( new ::svx::sidebar::ValueSetWithTextControl( ::svx::sidebar::ValueSetWithTextControl::IMAGE_TEXT, this, SW_RES(VS_ORIENTATION) ) ) + , mbLandscape( bLandscape ) + , mrPagePropPanel(rPanel) +{ + mpOrientationValueSet->SetStyle( mpOrientationValueSet->GetStyle() | WB_3DLOOK | WB_NO_DIRECTSELECT ); + mpOrientationValueSet->SetColor(GetSettings().GetStyleSettings().GetMenuColor()); + + // initialize <ValueSetWithText> control + { + mpOrientationValueSet->AddItem(Image(SW_RES(IMG_PORTRAIT)), 0, + SW_RES(STR_PORTRAIT), 0); + mpOrientationValueSet->AddItem(Image(SW_RES(IMG_LANDSCAPE)), 0, + SW_RES(STR_LANDSCAPE), 0 ); + } + + Link aLink = LINK(this, PageOrientationControl,ImplOrientationHdl ); + mpOrientationValueSet->SetSelectHdl(aLink); + mpOrientationValueSet->SetNoSelection(); + mpOrientationValueSet->StartSelection(); + mpOrientationValueSet->Show(); + mpOrientationValueSet->SelectItem( mbLandscape ? 2 : 1 ); + mpOrientationValueSet->GrabFocus(); + mpOrientationValueSet->Format(); + mpOrientationValueSet->StartSelection(); + + FreeResource(); +} + +PageOrientationControl::~PageOrientationControl(void) +{ + delete mpOrientationValueSet; +} + +IMPL_LINK(PageOrientationControl, ImplOrientationHdl, void *, pControl) +{ + mpOrientationValueSet->SetNoSelection(); + if ( pControl == mpOrientationValueSet ) + { + const sal_uInt32 iPos = mpOrientationValueSet->GetSelectItemId(); + const bool bChanged = ( ( iPos == 1 ) && mbLandscape ) || + ( ( iPos == 2 ) && !mbLandscape ); + if ( bChanged ) + { + mbLandscape = !mbLandscape; + mrPagePropPanel.ExecuteOrientationChange( mbLandscape ); + } + } + + mrPagePropPanel.ClosePageOrientationPopup(); + return 0; +} + +} } // end of namespace sw::sidebar + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sw/source/uibase/sidebar/PageOrientationControl.hxx b/sw/source/uibase/sidebar/PageOrientationControl.hxx new file mode 100644 index 000000000000..e55ba25c8a99 --- /dev/null +++ b/sw/source/uibase/sidebar/PageOrientationControl.hxx @@ -0,0 +1,56 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * 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 . + */ +#ifndef INCLUDED_SW_SOURCE_CORE_UIBASE_SIDEBAR_PAGEORIENTATIONCONTROL_HXX +#define INCLUDED_SW_SOURCE_CORE_UIBASE_SIDEBAR_PAGEORIENTATIONCONTROL_HXX + +#include <svx/sidebar/PopupControl.hxx> + +namespace svx { namespace sidebar { + class ValueSetWithTextControl; +} } + +namespace sw { namespace sidebar { + +class PagePropertyPanel; + +class PageOrientationControl + : public ::svx::sidebar::PopupControl +{ +public: + PageOrientationControl( + Window* pParent, + PagePropertyPanel& rPanel, + const bool bLandscape ); + virtual ~PageOrientationControl(void); + +private: + ::svx::sidebar::ValueSetWithTextControl* mpOrientationValueSet; + + bool mbLandscape; + + PagePropertyPanel& mrPagePropPanel; + + DECL_LINK(ImplOrientationHdl, void*); +}; + +} } // end of namespace sw::sidebar + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sw/source/uibase/sidebar/PagePropertyPanel.cxx b/sw/source/uibase/sidebar/PagePropertyPanel.cxx new file mode 100644 index 000000000000..4ccf76517c6a --- /dev/null +++ b/sw/source/uibase/sidebar/PagePropertyPanel.cxx @@ -0,0 +1,742 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * 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 . + */ + +#include <sal/config.h> + +#include <cstdlib> + +#include "PagePropertyPanel.hxx" +#include "PagePropertyPanel.hrc" + +#include "PropertyPanel.hrc" + +#include <svx/sidebar/PopupContainer.hxx> +#include "PageOrientationControl.hxx" +#include "PageMarginControl.hxx" +#include "PageSizeControl.hxx" +#include "PageColumnControl.hxx" + +#include <swtypes.hxx> +#include <cmdid.h> + +#include <svl/intitem.hxx> +#include <editeng/sizeitem.hxx> +#include <editeng/paperinf.hxx> +#include <svx/svxids.hrc> +#include <svx/dlgutil.hxx> +#include <svx/rulritem.hxx> + +#include <sfx2/sidebar/ControlFactory.hxx> +#include <sfx2/dispatch.hxx> +#include <sfx2/bindings.hxx> +#include <sfx2/viewsh.hxx> +#include <sfx2/objsh.hxx> + +#include <boost/bind.hpp> + +#include <com/sun/star/frame/XController.hpp> +#include <com/sun/star/frame/XModel.hpp> +#include <com/sun/star/document/XUndoManagerSupplier.hpp> + +const char UNO_ORIENTATION[] = ".uno:Orientation"; +const char UNO_MARGIN[] = ".uno:Margin"; +const char UNO_SIZE[] = ".uno:Size"; +const char UNO_COLUMN[] = ".uno:Column"; + +namespace { + const cssu::Reference< css::document::XUndoManager > getUndoManager( const cssu::Reference< css::frame::XFrame >& rxFrame ) + { + const cssu::Reference< css::frame::XController >& xController = rxFrame->getController(); + if ( xController.is() ) + { + const cssu::Reference< css::frame::XModel >& xModel = xController->getModel(); + if ( xModel.is() ) + { + const cssu::Reference< css::document::XUndoManagerSupplier > xSuppUndo( xModel, cssu::UNO_QUERY_THROW ); + if ( xSuppUndo.is() ) + { + const cssu::Reference< css::document::XUndoManager > xUndoManager( xSuppUndo->getUndoManager(), cssu::UNO_QUERY_THROW ); + return xUndoManager; + } + } + } + + return cssu::Reference< css::document::XUndoManager > (); + } +} + +namespace sw { namespace sidebar { + +PagePropertyPanel* PagePropertyPanel::Create ( + Window* pParent, + const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XFrame>& rxFrame, + SfxBindings* pBindings) +{ + if (pParent == NULL) + throw ::com::sun::star::lang::IllegalArgumentException("no parent Window given to PagePropertyPanel::Create", NULL, 0); + if ( ! rxFrame.is()) + throw ::com::sun::star::lang::IllegalArgumentException("no XFrame given to PagePropertyPanel::Create", NULL, 1); + if (pBindings == NULL) + throw ::com::sun::star::lang::IllegalArgumentException("no SfxBindings given to PagePropertyPanel::Create", NULL, 2); + + return new PagePropertyPanel( + pParent, + rxFrame, + pBindings); +} + +PagePropertyPanel::PagePropertyPanel( + Window* pParent, + const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XFrame>& rxFrame, + SfxBindings* pBindings) + : PanelLayout(pParent, "PagePropertyPanel", "modules/swriter/ui/sidebarpage.ui", rxFrame) + , mpBindings(pBindings) + + // image resources + , maImgSize (NULL) + , maImgSize_L (NULL) + , mImgPortrait (SW_RES(IMG_PAGE_PORTRAIT)) + , mImgLandscape (SW_RES(IMG_PAGE_LANDSCAPE)) + , mImgNarrow (SW_RES(IMG_PAGE_NARROW)) + , mImgNormal (SW_RES(IMG_PAGE_NORMAL)) + , mImgWide (SW_RES(IMG_PAGE_WIDE)) + , mImgMirrored (SW_RES(IMG_PAGE_MIRRORED)) + , mImgMarginCustom (SW_RES(IMG_PAGE_MARGIN_CUSTOM)) + , mImgNarrow_L (SW_RES(IMG_PAGE_NARROW_L)) + , mImgNormal_L (SW_RES(IMG_PAGE_NORMAL_L)) + , mImgWide_L (SW_RES(IMG_PAGE_WIDE_L)) + , mImgMirrored_L (SW_RES(IMG_PAGE_MIRRORED_L)) + , mImgMarginCustom_L (SW_RES(IMG_PAGE_MARGIN_CUSTOM_L)) + , mImgA3 (SW_RES(IMG_PAGE_A3)) + , mImgA4 (SW_RES(IMG_PAGE_A4)) + , mImgA5 (SW_RES(IMG_PAGE_A5)) + , mImgB4 (SW_RES(IMG_PAGE_B4)) + , mImgB5 (SW_RES(IMG_PAGE_B5)) + , mImgC5 (SW_RES(IMG_PAGE_C5)) + , mImgLetter (SW_RES(IMG_PAGE_LETTER)) + , mImgLegal (SW_RES(IMG_PAGE_LEGAL)) + , mImgSizeNone (SW_RES(IMG_PAGE_SIZE_NONE)) + , mImgA3_L (SW_RES(IMG_PAGE_A3_L)) + , mImgA4_L (SW_RES(IMG_PAGE_A4_L)) + , mImgA5_L (SW_RES(IMG_PAGE_A5_L)) + , mImgB4_L (SW_RES(IMG_PAGE_B4_L)) + , mImgB5_L (SW_RES(IMG_PAGE_B5_L)) + , mImgC5_L (SW_RES(IMG_PAGE_C5_L)) + , mImgLetter_L (SW_RES(IMG_PAGE_LETTER_L)) + , mImgLegal_L (SW_RES(IMG_PAGE_LEGAL_L)) + , mImgSizeNone_L (SW_RES(IMG_PAGE_SIZE_NONE_L)) + , mImgColumn1 (SW_RES(IMG_PAGE_COLUMN_1)) + , mImgColumn2 (SW_RES(IMG_PAGE_COLUMN_2)) + , mImgColumn3 (SW_RES(IMG_PAGE_COLUMN_3)) + , mImgLeft (SW_RES(IMG_PAGE_COLUMN_LEFT)) + , mImgRight (SW_RES(IMG_PAGE_COLUMN_RIGHT)) + , mImgColumnNone (SW_RES(IMG_PAGE_COLUMN_NONE)) + , mImgColumn1_L (SW_RES(IMG_PAGE_COLUMN_1_L)) + , mImgColumn2_L (SW_RES(IMG_PAGE_COLUMN_2_L)) + , mImgColumn3_L (SW_RES(IMG_PAGE_COLUMN_3_L)) + , mImgLeft_L (SW_RES(IMG_PAGE_COLUMN_LEFT_L)) + , mImgRight_L (SW_RES(IMG_PAGE_COLUMN_RIGHT_L)) + , mImgColumnNone_L (SW_RES(IMG_PAGE_COLUMN_NONE_L)) + + , mpPageItem( new SvxPageItem(SID_ATTR_PAGE) ) + , mpPageLRMarginItem( new SvxLongLRSpaceItem( 0, 0, SID_ATTR_PAGE_LRSPACE ) ) + , mpPageULMarginItem( new SvxLongULSpaceItem( 0, 0, SID_ATTR_PAGE_ULSPACE ) ) + , mpPageSizeItem( new SvxSizeItem(SID_ATTR_PAGE_SIZE) ) + , mePaper( PAPER_USER ) + , mpPageColumnTypeItem( new SfxInt16Item(SID_ATTR_PAGE_COLUMN) ) + + , meFUnit() + , meUnit() + + , m_aSwPagePgULControl(SID_ATTR_PAGE_ULSPACE, *pBindings, *this) + , m_aSwPagePgLRControl(SID_ATTR_PAGE_LRSPACE, *pBindings, *this) + , m_aSwPagePgSizeControl(SID_ATTR_PAGE_SIZE, *pBindings, *this) + , m_aSwPagePgControl(SID_ATTR_PAGE, *pBindings, *this) + , m_aSwPageColControl(SID_ATTR_PAGE_COLUMN, *pBindings, *this) + , m_aSwPagePgMetricControl(SID_ATTR_METRIC, *pBindings, *this) + + , maOrientationPopup( this, + ::boost::bind( &PagePropertyPanel::CreatePageOrientationControl, this, _1 ), + OUString("Page orientation") ) + , maMarginPopup( this, + ::boost::bind( &PagePropertyPanel::CreatePageMarginControl, this, _1 ), + OUString("Page margins") ) + , maSizePopup( this, + ::boost::bind( &PagePropertyPanel::CreatePageSizeControl, this, _1 ), + OUString("Page size") ) + , maColumnPopup( this, + ::boost::bind( &PagePropertyPanel::CreatePageColumnControl, this, _1 ), + OUString("Page columns") ) + + , mxUndoManager( getUndoManager( rxFrame ) ) + + , mbInvalidateSIDAttrPageOnSIDAttrPageSizeNotify( false ) +{ + // visible controls + get(mpToolBoxOrientation, "selectorientation"); + get(mpToolBoxMargin, "selectmargin"); + get(mpToolBoxSize, "selectsize"); + get(mpToolBoxColumn, "selectcolumn"); + + Initialize(); + mbInvalidateSIDAttrPageOnSIDAttrPageSizeNotify = true; +} + +PagePropertyPanel::~PagePropertyPanel() +{ + delete[] maImgSize; + delete[] maImgSize_L; +} + +void PagePropertyPanel::Initialize() +{ + // popup for page orientation + const sal_uInt16 nIdOrientation = mpToolBoxOrientation->GetItemId(UNO_ORIENTATION); + Link aLink = LINK( this, PagePropertyPanel, ClickOrientationHdl ); + mpToolBoxOrientation->SetDropdownClickHdl( aLink ); + mpToolBoxOrientation->SetSelectHdl( aLink ); + mpToolBoxOrientation->SetItemImage( nIdOrientation, mImgPortrait); + mpToolBoxOrientation->SetItemBits( nIdOrientation, mpToolBoxOrientation->GetItemBits( nIdOrientation ) | TIB_DROPDOWNONLY ); + + // popup for page margins + const sal_uInt16 nIdMargin = mpToolBoxMargin->GetItemId(UNO_MARGIN); + aLink = LINK( this, PagePropertyPanel, ClickMarginHdl ); + mpToolBoxMargin->SetDropdownClickHdl( aLink ); + mpToolBoxMargin->SetSelectHdl( aLink ); + mpToolBoxMargin->SetItemImage(nIdMargin, mImgNormal); + mpToolBoxMargin->SetItemBits( nIdMargin, mpToolBoxMargin->GetItemBits( nIdMargin ) | TIB_DROPDOWNONLY ); + + // popup for page size + const sal_uInt16 nIdSize = mpToolBoxSize->GetItemId(UNO_SIZE); + aLink = LINK( this, PagePropertyPanel, ClickSizeHdl ); + mpToolBoxSize->SetDropdownClickHdl( aLink ); + mpToolBoxSize->SetSelectHdl( aLink ); + mpToolBoxSize->SetItemImage(nIdSize, mImgLetter); + mpToolBoxSize->SetItemBits( nIdSize, mpToolBoxSize->GetItemBits( nIdSize ) | TIB_DROPDOWNONLY ); + maImgSize = new Image[8]; + maImgSize[0] = mImgA3; + maImgSize[1] = mImgA4; + maImgSize[2] = mImgA5; + maImgSize[3] = mImgB4; + maImgSize[4] = mImgB5; + maImgSize[5] = mImgC5; + maImgSize[6] = mImgLetter; + maImgSize[7] = mImgLegal; + maImgSize_L = new Image[8]; + maImgSize_L[0] = mImgA3_L; + maImgSize_L[1] = mImgA4_L; + maImgSize_L[2] = mImgA5_L; + maImgSize_L[3] = mImgB4_L; + maImgSize_L[4] = mImgB5_L; + maImgSize_L[5] = mImgC5_L; + maImgSize_L[6] = mImgLetter_L; + maImgSize_L[7] = mImgLegal_L; + + // popup for page column property + const sal_uInt16 nIdColumn = mpToolBoxColumn->GetItemId(UNO_COLUMN); + aLink = LINK( this, PagePropertyPanel, ClickColumnHdl ); + mpToolBoxColumn->SetDropdownClickHdl( aLink ); + mpToolBoxColumn->SetSelectHdl( aLink ); + mpToolBoxColumn->SetItemImage(nIdColumn, mImgColumn1); + mpToolBoxColumn->SetItemBits( nIdColumn, mpToolBoxColumn->GetItemBits( nIdColumn ) | TIB_DROPDOWNONLY ); + + meFUnit = GetModuleFieldUnit(); + meUnit = m_aSwPagePgSizeControl.GetCoreMetric(); + + // 'pull' for page style's attribute values + mpBindings->Update( SID_ATTR_PAGE_LRSPACE ); + mpBindings->Update( SID_ATTR_PAGE_ULSPACE ); + mpBindings->Update( SID_ATTR_PAGE ); + mpBindings->Update( SID_ATTR_PAGE_SIZE ); +} + +::svx::sidebar::PopupControl* PagePropertyPanel::CreatePageOrientationControl( ::svx::sidebar::PopupContainer* pParent ) +{ + return new PageOrientationControl( pParent, *this , mpPageItem->IsLandscape() ); +} + +IMPL_LINK( PagePropertyPanel, ClickOrientationHdl, ToolBox*, pToolBox ) +{ + maOrientationPopup.Show( *pToolBox ); + + return 0L; +} + +void PagePropertyPanel::ExecuteOrientationChange( const bool bLandscape ) +{ + StartUndo(); + + { + // set new page orientation + mpPageItem->SetLandscape( bLandscape ); + + // swap the width and height of the page size + mpPageSizeItem->SetSize( Size( mpPageSizeItem->GetSize().Height(), mpPageSizeItem->GetSize().Width() ) ); + + // apply changed attributes + GetBindings()->GetDispatcher()->Execute( SID_ATTR_PAGE_SIZE, SFX_CALLMODE_RECORD, mpPageSizeItem.get(), mpPageItem.get(), 0L ); + } + + // check, if margin values still fit to the changed page size. + // if not, adjust margin values + { + const long nML = mpPageLRMarginItem->GetLeft(); + const long nMR = mpPageLRMarginItem->GetRight(); + const long nTmpPW = nML + nMR + MINBODY; + + const long nPW = mpPageSizeItem->GetSize().Width(); + + if ( nTmpPW > nPW ) + { + if ( nML <= nMR ) + { + ExecuteMarginLRChange( mpPageLRMarginItem->GetLeft(), nMR - (nTmpPW - nPW ) ); + } + else + { + ExecuteMarginLRChange( nML - (nTmpPW - nPW ), mpPageLRMarginItem->GetRight() ); + } + } + + const long nMT = mpPageULMarginItem->GetUpper(); + const long nMB = mpPageULMarginItem->GetLower(); + const long nTmpPH = nMT + nMB + MINBODY; + + const long nPH = mpPageSizeItem->GetSize().Height(); + + if ( nTmpPH > nPH ) + { + if ( nMT <= nMB ) + { + ExecuteMarginULChange( mpPageULMarginItem->GetUpper(), nMB - ( nTmpPH - nPH ) ); + } + else + { + ExecuteMarginULChange( nMT - ( nTmpPH - nPH ), mpPageULMarginItem->GetLower() ); + } + } + } + + EndUndo(); +} + +void PagePropertyPanel::ClosePageOrientationPopup() +{ + maOrientationPopup.Hide(); +} + +::svx::sidebar::PopupControl* PagePropertyPanel::CreatePageMarginControl( ::svx::sidebar::PopupContainer* pParent ) +{ + return new PageMarginControl( + pParent, + *this, + *mpPageLRMarginItem.get(), + *mpPageULMarginItem.get(), + mpPageItem->GetPageUsage() == SVX_PAGE_MIRROR, + mpPageSizeItem->GetSize(), + mpPageItem->IsLandscape(), + meFUnit, + meUnit ); +} + +void PagePropertyPanel::ExecuteMarginLRChange( + const long nPageLeftMargin, + const long nPageRightMargin ) +{ + mpPageLRMarginItem->SetLeft( nPageLeftMargin ); + mpPageLRMarginItem->SetRight( nPageRightMargin ); + GetBindings()->GetDispatcher()->Execute( SID_ATTR_PAGE_LRSPACE, SFX_CALLMODE_RECORD, mpPageLRMarginItem.get(), 0L ); +} + +void PagePropertyPanel::ExecuteMarginULChange( + const long nPageTopMargin, + const long nPageBottomMargin ) +{ + mpPageULMarginItem->SetUpper( nPageTopMargin ); + mpPageULMarginItem->SetLower( nPageBottomMargin ); + GetBindings()->GetDispatcher()->Execute( SID_ATTR_PAGE_ULSPACE, SFX_CALLMODE_RECORD, mpPageULMarginItem.get(), 0L ); +} + +void PagePropertyPanel::ExecutePageLayoutChange( const bool bMirrored ) +{ + mpPageItem->SetPageUsage( bMirrored ? SVX_PAGE_MIRROR : SVX_PAGE_ALL ); + GetBindings()->GetDispatcher()->Execute( SID_ATTR_PAGE, SFX_CALLMODE_RECORD, mpPageItem.get(), 0L ); +} + +IMPL_LINK( PagePropertyPanel, ClickMarginHdl, ToolBox*, pToolBox ) +{ + maMarginPopup.Show( *pToolBox ); + + return 0L; +} + +void PagePropertyPanel::ClosePageMarginPopup() +{ + maMarginPopup.Hide(); +} + +::svx::sidebar::PopupControl* PagePropertyPanel::CreatePageSizeControl( ::svx::sidebar::PopupContainer* pParent ) +{ + return new PageSizeControl( + pParent, + *this, + mePaper, + mpPageItem->IsLandscape(), + meFUnit ); +} + +void PagePropertyPanel::ExecuteSizeChange( const Paper ePaper ) +{ + Size aPageSize = SvxPaperInfo::GetPaperSize( ePaper, (MapUnit)(meUnit) ); + if ( mpPageItem->IsLandscape() ) + { + Swap( aPageSize ); + } + mpPageSizeItem->SetSize( aPageSize ); + + mpBindings->GetDispatcher()->Execute(SID_ATTR_PAGE_SIZE, SFX_CALLMODE_RECORD, mpPageSizeItem.get(), 0L ); +} + +IMPL_LINK( PagePropertyPanel, ClickSizeHdl, ToolBox*, pToolBox ) +{ + maSizePopup.Show( *pToolBox ); + + return 0L; +} + +void PagePropertyPanel::ClosePageSizePopup() +{ + maSizePopup.Hide(); +} + +::svx::sidebar::PopupControl* PagePropertyPanel::CreatePageColumnControl( ::svx::sidebar::PopupContainer* pParent ) +{ + return new PageColumnControl( + pParent, + *this, + mpPageColumnTypeItem->GetValue(), + mpPageItem->IsLandscape() ); +} + +void PagePropertyPanel::ExecuteColumnChange( const sal_uInt16 nColumnType ) +{ + mpPageColumnTypeItem->SetValue( nColumnType ); + mpBindings->GetDispatcher()->Execute(SID_ATTR_PAGE_COLUMN, SFX_CALLMODE_RECORD, mpPageColumnTypeItem.get(), 0L ); +} + +IMPL_LINK( PagePropertyPanel, ClickColumnHdl, ToolBox*, pToolBox ) +{ + maColumnPopup.Show( *pToolBox ); + + return 0L; +} + +void PagePropertyPanel::ClosePageColumnPopup() +{ + maColumnPopup.Hide(); +} + +void PagePropertyPanel::NotifyItemUpdate( + const sal_uInt16 nSId, + const SfxItemState eState, + const SfxPoolItem* pState, + const bool bIsEnabled) +{ + (void)bIsEnabled; + + switch( nSId ) + { + case SID_ATTR_PAGE_COLUMN: + { + if ( eState >= SFX_ITEM_AVAILABLE && + pState && pState->ISA(SfxInt16Item) ) + { + mpPageColumnTypeItem.reset( static_cast<SfxInt16Item*>(pState->Clone()) ); + ChangeColumnImage( mpPageColumnTypeItem->GetValue() ); + } + } + break; + case SID_ATTR_PAGE_LRSPACE: + if ( eState >= SFX_ITEM_AVAILABLE && + pState && pState->ISA(SvxLongLRSpaceItem) ) + { + mpPageLRMarginItem.reset( static_cast<SvxLongLRSpaceItem*>(pState->Clone()) ); + ChangeMarginImage(); + } + break; + + case SID_ATTR_PAGE_ULSPACE: + if ( eState >= SFX_ITEM_AVAILABLE && + pState && pState->ISA(SvxLongULSpaceItem) ) + { + mpPageULMarginItem.reset( static_cast<SvxLongULSpaceItem*>(pState->Clone()) ); + ChangeMarginImage(); + } + break; + + case SID_ATTR_PAGE: + if ( eState >= SFX_ITEM_AVAILABLE && + pState && pState->ISA(SvxPageItem) ) + { + const sal_uInt16 nIdOrientation = mpToolBoxOrientation->GetItemId(UNO_ORIENTATION); + mpPageItem.reset( static_cast<SvxPageItem*>(pState->Clone()) ); + if ( mpPageItem->IsLandscape() ) + { + mpToolBoxOrientation->SetItemImage(nIdOrientation, mImgLandscape); + } + else + { + mpToolBoxOrientation->SetItemImage(nIdOrientation, mImgPortrait); + } + ChangeMarginImage(); + ChangeSizeImage(); + ChangeColumnImage( mpPageColumnTypeItem->GetValue() ); + } + break; + + case SID_ATTR_PAGE_SIZE: + if ( mbInvalidateSIDAttrPageOnSIDAttrPageSizeNotify ) + { + mpBindings->Invalidate( SID_ATTR_PAGE, true, false ); + } + if ( eState >= SFX_ITEM_AVAILABLE && + pState && pState->ISA(SvxSizeItem) ) + { + mpPageSizeItem.reset( static_cast<SvxSizeItem*>(pState->Clone()) ); + ChangeSizeImage(); + } + break; + case SID_ATTR_METRIC: + MetricState( eState, pState ); + break; + } +} + +void PagePropertyPanel::MetricState( SfxItemState eState, const SfxPoolItem* pState ) +{ + meFUnit = FUNIT_NONE; + if ( pState && eState >= SFX_ITEM_DEFAULT ) + { + meFUnit = (FieldUnit)( (const SfxUInt16Item*)pState )->GetValue(); + } + else + { + SfxViewFrame* pFrame = SfxViewFrame::Current(); + SfxObjectShell* pSh = NULL; + if ( pFrame ) + pSh = pFrame->GetObjectShell(); + if ( pSh ) + { + SfxModule* pModule = pSh->GetModule(); + if ( pModule ) + { + const SfxPoolItem* pItem = pModule->GetItem( SID_ATTR_METRIC ); + if ( pItem ) + meFUnit = (FieldUnit)( (SfxUInt16Item*)pItem )->GetValue(); + } + else + { + DBG_ERRORFILE( "<PagePropertyPanel::MetricState(..)>: no module found" ); + } + } + } +} + +void PagePropertyPanel::ChangeMarginImage() +{ + if ( mpPageLRMarginItem.get() == 0 || + mpPageULMarginItem.get() == 0 || + mpPageItem.get() == 0 ) + { + return; + } + + const long cTolerance = 5; + const sal_uInt16 nIdMargin = mpToolBoxMargin->GetItemId(UNO_MARGIN); + + if( std::abs(mpPageLRMarginItem->GetLeft() - SWPAGE_NARROW_VALUE) <= cTolerance && + std::abs(mpPageLRMarginItem->GetRight() - SWPAGE_NARROW_VALUE) <= cTolerance && + std::abs(mpPageULMarginItem->GetUpper() - SWPAGE_NARROW_VALUE) <= cTolerance && + std::abs(mpPageULMarginItem->GetLower() - SWPAGE_NARROW_VALUE) <= cTolerance && + mpPageItem->GetPageUsage() != SVX_PAGE_MIRROR ) + mpToolBoxMargin->SetItemImage( nIdMargin, mpPageItem->IsLandscape() ? mImgNarrow_L : mImgNarrow ); + + else if( std::abs(mpPageLRMarginItem->GetLeft() - SWPAGE_NORMAL_VALUE) <= cTolerance && + std::abs(mpPageLRMarginItem->GetRight() - SWPAGE_NORMAL_VALUE) <= cTolerance && + std::abs(mpPageULMarginItem->GetUpper() - SWPAGE_NORMAL_VALUE) <= cTolerance && + std::abs(mpPageULMarginItem->GetLower() - SWPAGE_NORMAL_VALUE) <= cTolerance && + mpPageItem->GetPageUsage() != SVX_PAGE_MIRROR ) + mpToolBoxMargin->SetItemImage( nIdMargin, mpPageItem->IsLandscape() ? mImgNormal_L : mImgNormal ); + + else if( std::abs(mpPageLRMarginItem->GetLeft() - SWPAGE_WIDE_VALUE2) <= cTolerance && + std::abs(mpPageLRMarginItem->GetRight() - SWPAGE_WIDE_VALUE2) <= cTolerance && + std::abs(mpPageULMarginItem->GetUpper() - SWPAGE_WIDE_VALUE1) <= cTolerance && + std::abs(mpPageULMarginItem->GetLower() - SWPAGE_WIDE_VALUE1) <= cTolerance && + mpPageItem->GetPageUsage() != SVX_PAGE_MIRROR ) + mpToolBoxMargin->SetItemImage( nIdMargin, mpPageItem->IsLandscape() ? mImgWide_L : mImgWide ); + + else if( std::abs(mpPageLRMarginItem->GetLeft() - SWPAGE_WIDE_VALUE3) <= cTolerance && + std::abs(mpPageLRMarginItem->GetRight() - SWPAGE_WIDE_VALUE1) <= cTolerance && + std::abs(mpPageULMarginItem->GetUpper() - SWPAGE_WIDE_VALUE1) <= cTolerance && + std::abs(mpPageULMarginItem->GetLower() - SWPAGE_WIDE_VALUE1) <= cTolerance && + mpPageItem->GetPageUsage() == SVX_PAGE_MIRROR ) + mpToolBoxMargin->SetItemImage( nIdMargin, mpPageItem->IsLandscape() ? mImgMirrored_L : mImgMirrored ); + + else + mpToolBoxMargin->SetItemImage( nIdMargin, mpPageItem->IsLandscape() ? mImgMarginCustom_L : mImgMarginCustom ); +} + +void PagePropertyPanel::ChangeSizeImage() +{ + if ( mpPageSizeItem.get() == 0 || + mpPageItem.get() == 0 ) + { + return; + } + + Size aTmpPaperSize = mpPageSizeItem->GetSize(); + if ( mpPageItem->IsLandscape() ) + { + Swap( aTmpPaperSize ); // Swap(..) defined in editeng/paperinf.hxx + } + + mePaper = SvxPaperInfo::GetSvxPaper( aTmpPaperSize, static_cast<MapUnit>(meUnit), true ); + + sal_uInt16 nImageIdx = 0; + switch ( mePaper ) + { + case PAPER_A3: + nImageIdx = 1; + break; + case PAPER_A4: + nImageIdx = 2; + break; + case PAPER_A5: + nImageIdx = 3; + break; + case PAPER_B4_ISO: + nImageIdx = 4; + break; + case PAPER_B5_ISO: + nImageIdx = 5; + break; + case PAPER_ENV_C5: + nImageIdx = 6; + break; + case PAPER_LETTER: + nImageIdx = 7; + break; + case PAPER_LEGAL: + nImageIdx = 8; + break; + default: + nImageIdx = 0; + mePaper = PAPER_USER; + break; + } + + const sal_uInt16 nIdSize = mpToolBoxSize->GetItemId(UNO_SIZE); + + if ( nImageIdx == 0 ) + { + mpToolBoxSize->SetItemImage( nIdSize, + ( mpPageItem->IsLandscape() ? mImgSizeNone_L : mImgSizeNone ) ); + } + else + { + mpToolBoxSize->SetItemImage( nIdSize, + ( mpPageItem->IsLandscape() ? maImgSize_L[nImageIdx-1] : maImgSize[nImageIdx-1] ) ); + } +} + +void PagePropertyPanel::ChangeColumnImage( const sal_uInt16 nColumnType ) +{ + if ( mpPageItem.get() == 0 ) + { + return; + } + + const sal_uInt16 nIdColumn = mpToolBoxColumn->GetItemId(UNO_COLUMN); + if ( !mpPageItem->IsLandscape() ) + { + switch( nColumnType ) + { + case 1: + mpToolBoxColumn->SetItemImage(nIdColumn, mImgColumn1); + break; + case 2: + mpToolBoxColumn->SetItemImage(nIdColumn, mImgColumn2); + break; + case 3: + mpToolBoxColumn->SetItemImage(nIdColumn, mImgColumn3); + break; + case 4: + mpToolBoxColumn->SetItemImage(nIdColumn, mImgLeft); + break; + case 5: + mpToolBoxColumn->SetItemImage(nIdColumn, mImgRight); + break; + default: + mpToolBoxColumn->SetItemImage(nIdColumn, mImgColumnNone); + } + } + else + { + switch( nColumnType ) + { + case 1: + mpToolBoxColumn->SetItemImage(nIdColumn, mImgColumn1_L); + break; + case 2: + mpToolBoxColumn->SetItemImage(nIdColumn, mImgColumn2_L); + break; + case 3: + mpToolBoxColumn->SetItemImage(nIdColumn, mImgColumn3_L); + break; + case 4: + mpToolBoxColumn->SetItemImage(nIdColumn, mImgLeft_L); + break; + case 5: + mpToolBoxColumn->SetItemImage(nIdColumn, mImgRight_L); + break; + default: + mpToolBoxColumn->SetItemImage(nIdColumn, mImgColumnNone_L); + } + } +} + +void PagePropertyPanel::StartUndo() +{ + if ( mxUndoManager.is() ) + { + mxUndoManager->enterUndoContext( OUString("") ); + } +} + +void PagePropertyPanel::EndUndo() +{ + if ( mxUndoManager.is() ) + { + mxUndoManager->leaveUndoContext(); + } +} + +} } // end of namespace ::sw::sidebar + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sw/source/uibase/sidebar/PagePropertyPanel.hrc b/sw/source/uibase/sidebar/PagePropertyPanel.hrc new file mode 100644 index 000000000000..fe850caa259f --- /dev/null +++ b/sw/source/uibase/sidebar/PagePropertyPanel.hrc @@ -0,0 +1,161 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * 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 . + */ + +#include <rcid.hrc> +#include "PropertyPanel.hrc" + +// global definitions +#define IMG_PAGE_PORTRAIT (RC_SIDEBAR_BEGIN + 0) +#define IMG_PAGE_LANDSCAPE (RC_SIDEBAR_BEGIN + 1) +#define IMG_PAGE_NARROW (RC_SIDEBAR_BEGIN + 2) +#define IMG_PAGE_NORMAL (RC_SIDEBAR_BEGIN + 3) +#define IMG_PAGE_WIDE (RC_SIDEBAR_BEGIN + 4) +#define IMG_PAGE_MIRRORED (RC_SIDEBAR_BEGIN + 5) +#define IMG_PAGE_MARGIN_CUSTOM (RC_SIDEBAR_BEGIN + 6) +#define IMG_PAGE_NARROW_L (RC_SIDEBAR_BEGIN + 7) +#define IMG_PAGE_NORMAL_L (RC_SIDEBAR_BEGIN + 8) +#define IMG_PAGE_WIDE_L (RC_SIDEBAR_BEGIN + 9) +#define IMG_PAGE_MIRRORED_L (RC_SIDEBAR_BEGIN + 10) +#define IMG_PAGE_MARGIN_CUSTOM_L (RC_SIDEBAR_BEGIN+ 11) +#define IMG_PAGE_A3 (RC_SIDEBAR_BEGIN + 12) +#define IMG_PAGE_A4 (RC_SIDEBAR_BEGIN + 13) +#define IMG_PAGE_A5 (RC_SIDEBAR_BEGIN + 14) +#define IMG_PAGE_B4 (RC_SIDEBAR_BEGIN + 15) +#define IMG_PAGE_B5 (RC_SIDEBAR_BEGIN + 16) +#define IMG_PAGE_C5 (RC_SIDEBAR_BEGIN + 17) +#define IMG_PAGE_LETTER (RC_SIDEBAR_BEGIN + 18) +#define IMG_PAGE_LEGAL (RC_SIDEBAR_BEGIN + 19) +#define IMG_PAGE_SIZE_NONE (RC_SIDEBAR_BEGIN + 20) +#define IMG_PAGE_A3_L (RC_SIDEBAR_BEGIN + 21) +#define IMG_PAGE_A4_L (RC_SIDEBAR_BEGIN + 22) +#define IMG_PAGE_A5_L (RC_SIDEBAR_BEGIN + 23) +#define IMG_PAGE_B4_L (RC_SIDEBAR_BEGIN + 24) +#define IMG_PAGE_B5_L (RC_SIDEBAR_BEGIN + 25) +#define IMG_PAGE_C5_L (RC_SIDEBAR_BEGIN + 26) +#define IMG_PAGE_LETTER_L (RC_SIDEBAR_BEGIN + 27) +#define IMG_PAGE_LEGAL_L (RC_SIDEBAR_BEGIN + 28) +#define IMG_PAGE_SIZE_NONE_L (RC_SIDEBAR_BEGIN + 29) +#define IMG_PAGE_COLUMN_1 (RC_SIDEBAR_BEGIN + 30) +#define IMG_PAGE_COLUMN_2 (RC_SIDEBAR_BEGIN + 31) +#define IMG_PAGE_COLUMN_3 (RC_SIDEBAR_BEGIN + 32) +#define IMG_PAGE_COLUMN_LEFT (RC_SIDEBAR_BEGIN + 33) +#define IMG_PAGE_COLUMN_RIGHT (RC_SIDEBAR_BEGIN + 34) +#define IMG_PAGE_COLUMN_NONE (RC_SIDEBAR_BEGIN + 35) +#define IMG_PAGE_COLUMN_1_L (RC_SIDEBAR_BEGIN + 36) +#define IMG_PAGE_COLUMN_2_L (RC_SIDEBAR_BEGIN + 37) +#define IMG_PAGE_COLUMN_3_L (RC_SIDEBAR_BEGIN + 38) +#define IMG_PAGE_COLUMN_LEFT_L (RC_SIDEBAR_BEGIN + 39) +#define IMG_PAGE_COLUMN_RIGHT_L (RC_SIDEBAR_BEGIN + 40) +#define IMG_PAGE_COLUMN_NONE_L (RC_SIDEBAR_BEGIN + 41) + +// local +#define IMG_PORTRAIT 10 +#define IMG_LANDSCAPE 11 +#define STR_PORTRAIT 12 +#define STR_LANDSCAPE 13 + +#define MF_SWLEFT_MARGIN 18 +#define MF_SWRIGHT_MARGIN 19 +#define MF_SWTOP_MARGIN 20 +#define MF_SWBOTTOM_MARGIN 21 +#define VS_SIZE 23 +#define STR_LCVALUE 24 +#define FT_CUSTOM 25 +#define FLD_WIDTH_HEIGHT 26 + +#define VS_ORIENTATION 29 +#define IMG_NARROW 32 +#define IMG_NORMAL 33 +#define IMG_WIDE 34 +#define IMG_MIRRORED 35 +#define STR_NARROW 36 +#define STR_NORMAL 37 +#define STR_WIDE 38 +#define STR_MIRRORED 39 +#define VS_MARGIN 40 +#define IMG_CUSTOM 41 +#define FT_LEFT 42 +#define FT_RIGHT 43 +#define FT_TOP 44 +#define FT_BOTTOM 45 +#define FT_INNER 46 +#define FT_OUTER 47 +#define VS_COLUMN 49 +#define MBOX_WIDTH 50 +#define IMG_ONE 51 +#define IMG_TWO 52 +#define IMG_THREE 53 +#define IMG_LEFT 54 +#define IMG_RIGHT 55 +#define STR_ONE 56 +#define STR_TWO 57 +#define STR_THREE 58 +#define STR_LEFT 59 +#define STR_RIGHT 60 +#define CB_COLUMN_MORE 61 + +#define CB_SIZE_MORE 61 + +#define IMG_ONE_L 90 +#define IMG_TWO_L 91 +#define IMG_THREE_L 92 +#define IMG_LEFT_L 93 +#define IMG_RIGHT_L 94 +#define IMG_NARROW_L 109 +#define IMG_NORMAL_L 110 +#define IMG_WIDE_L 111 +#define IMG_MIRRORED_L 112 + +#define IMG_CUSTOM_DIS 121 + +#define STR_MARGIN_TOOLTIP_LEFT 122 +#define STR_MARGIN_TOOLTIP_RIGHT 123 +#define STR_MARGIN_TOOLTIP_INNER 124 +#define STR_MARGIN_TOOLTIP_OUTER 125 +#define STR_MARGIN_TOOLTIP_TOP 126 +#define STR_MARGIN_TOOLTIP_BOT 127 + +#define POPUP_MARGIN 4 +#define VS_WIDTH 78 +#define ITEM_HEIGHT 17 +#define ITEM_HEIGHT2 15 + +// Position + +#define FT_CUSTOM_X POPUP_MARGIN + OFFSET_X +#define FT_CUSTOM_Y POPUPPANEL_MARGIN_SMALL * 2 + ITEM_HEIGHT * 5 + +#define POP_BORDER_X POPUP_MARGIN + OFFSET_X + 1 +#define POP_BORDER_Y POPUPPANEL_MARGIN_SMALL * 3 + ITEM_HEIGHT * 5 + TEXT_HEIGHT +#define BD_HEIGHT MBOX_HEIGHT*4 + CONTROL_SPACING_VERTICAL*5 + +#define FT_X POP_BORDER_X + CONTROL_SPACING_HORIZONTAL +#define MF_X FT_X + 25 + CONTROL_SPACING_HORIZONTAL +#define LEFT_MF_Y POP_BORDER_Y + CONTROL_SPACING_VERTICAL +#define RIGHT_MF_Y LEFT_MF_Y + MBOX_HEIGHT + CONTROL_SPACING_VERTICAL +#define TOP_MF_Y RIGHT_MF_Y + MBOX_HEIGHT + CONTROL_SPACING_VERTICAL +#define BOTTOM_MF_Y TOP_MF_Y + MBOX_HEIGHT + CONTROL_SPACING_VERTICAL +#define FT_LEFT_Y LEFT_MF_Y + 1 +#define FT_RIGHT_Y RIGHT_MF_Y + 1 +#define FT_TOP_Y TOP_MF_Y + 1 +#define FT_BOTTOM_Y BOTTOM_MF_Y + 1 + +#define MARGIN_PANEL_HEIGHT POP_BORDER_Y + BD_HEIGHT + POPUP_MARGIN + OFFSET_Y + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sw/source/uibase/sidebar/PagePropertyPanel.hxx b/sw/source/uibase/sidebar/PagePropertyPanel.hxx new file mode 100644 index 000000000000..044c4740756a --- /dev/null +++ b/sw/source/uibase/sidebar/PagePropertyPanel.hxx @@ -0,0 +1,223 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * 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 . + */ +#ifndef INCLUDED_SW_SOURCE_CORE_UIBASE_SIDEBAR_PAGEPROPERTYPANEL_HXX +#define INCLUDED_SW_SOURCE_CORE_UIBASE_SIDEBAR_PAGEPROPERTYPANEL_HXX + +#include <com/sun/star/frame/XFrame.hpp> +#include <com/sun/star/document/XUndoManager.hpp> + +#include <svx/sidebar/Popup.hxx> +#include <svx/sidebar/PanelLayout.hxx> + +#include <sfx2/sidebar/ControllerItem.hxx> + +namespace svx { namespace sidebar { + class PopupControl; +} } + +#include <i18nutil/paper.hxx> + +#include <svx/pageitem.hxx> +#include <svx/rulritem.hxx> +#include <editeng/sizeitem.hxx> + +#include <vcl/ctrl.hxx> +#include <vcl/fixed.hxx> +#include <vcl/button.hxx> +#include <vcl/toolbox.hxx> +#include <vcl/lstbox.hxx> +#include <vcl/field.hxx> +#include <svl/intitem.hxx> + +#include <boost/scoped_ptr.hpp> + +namespace cssu = ::com::sun::star::uno; + +namespace sw { namespace sidebar { + + class PagePropertyPanel + : public PanelLayout, + public ::sfx2::sidebar::ControllerItem::ItemUpdateReceiverInterface + { + public: + static PagePropertyPanel* Create( + Window* pParent, + const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XFrame>& rxFrame, + SfxBindings* pBindings ); + + // interface of ::sfx2::sidebar::ControllerItem::ItemUpdateReceiverInterface + virtual void NotifyItemUpdate( + const sal_uInt16 nSId, + const SfxItemState eState, + const SfxPoolItem* pState, + const bool bIsEnabled) SAL_OVERRIDE; + + SfxBindings* GetBindings() const + { + return mpBindings; + } + + ::svx::sidebar::PopupControl* CreatePageOrientationControl( ::svx::sidebar::PopupContainer* pParent ); + void ExecuteOrientationChange( const bool bLandscape ); + void ClosePageOrientationPopup(); + + ::svx::sidebar::PopupControl* CreatePageMarginControl( ::svx::sidebar::PopupContainer* pParent ); + void ExecuteMarginLRChange( + const long nPageLeftMargin, + const long nPageRightMargin ); + void ExecuteMarginULChange( + const long nPageTopMargin, + const long nPageBottomMargin ); + void ExecutePageLayoutChange( const bool bMirrored ); + void ClosePageMarginPopup(); + + ::svx::sidebar::PopupControl* CreatePageSizeControl( ::svx::sidebar::PopupContainer* pParent ); + void ExecuteSizeChange( const Paper ePaper ); + void ClosePageSizePopup(); + + ::svx::sidebar::PopupControl* CreatePageColumnControl( ::svx::sidebar::PopupContainer* pParent ); + void ExecuteColumnChange( const sal_uInt16 nColumnType ); + void ClosePageColumnPopup(); + + void StartUndo(); + void EndUndo(); + + private: + PagePropertyPanel( + Window* pParent, + const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XFrame>& rxFrame, + SfxBindings* pBindings ); + virtual ~PagePropertyPanel(void); + + SfxBindings* mpBindings; + + // toolboxes - on click open corresponding popup + ToolBox* mpToolBoxOrientation; + ToolBox* mpToolBoxMargin; + ToolBox* mpToolBoxSize; + ToolBox* mpToolBoxColumn; + + Image* maImgSize; + Image* maImgSize_L; + Image mImgPortrait; + Image mImgLandscape; + Image mImgNarrow; + Image mImgNormal; + Image mImgWide; + Image mImgMirrored; + Image mImgMarginCustom; + Image mImgNarrow_L; + Image mImgNormal_L; + Image mImgWide_L; + Image mImgMirrored_L; + Image mImgMarginCustom_L; + Image mImgA3; + Image mImgA4; + Image mImgA5; + Image mImgB4; + Image mImgB5; + Image mImgC5; + Image mImgLetter; + Image mImgLegal; + Image mImgSizeNone; + Image mImgA3_L; + Image mImgA4_L; + Image mImgA5_L; + Image mImgB4_L; + Image mImgB5_L; + Image mImgC5_L; + Image mImgLetter_L; + Image mImgLegal_L; + Image mImgSizeNone_L; + Image mImgColumn1; + Image mImgColumn2; + Image mImgColumn3; + Image mImgLeft; + Image mImgRight; + Image mImgColumnNone; + Image mImgColumn1_L; + Image mImgColumn2_L; + Image mImgColumn3_L; + Image mImgLeft_L; + Image mImgRight_L; + Image mImgColumnNone_L; + + // item keeping the following page style attributes: + // - page orientation + // - page usage - only left, only right, both, mirrored + // item also hold the numbering type for the page style which should + // be kept stable. + ::boost::scoped_ptr<SvxPageItem> mpPageItem; + + // item keeping the page style's left and right margins + ::boost::scoped_ptr<SvxLongLRSpaceItem> mpPageLRMarginItem; + // item keeping the page style's top and bottom margins + ::boost::scoped_ptr<SvxLongULSpaceItem> mpPageULMarginItem; + + // item keeping the page style's page size + ::boost::scoped_ptr<SvxSizeItem> mpPageSizeItem; + // Paper corresponding to the page style's page size + Paper mePaper; + + // item keeping the page column type + ::boost::scoped_ptr<SfxInt16Item> mpPageColumnTypeItem; + + FieldUnit meFUnit; + SfxMapUnit meUnit; + + // controller items + ::sfx2::sidebar::ControllerItem m_aSwPagePgULControl; + ::sfx2::sidebar::ControllerItem m_aSwPagePgLRControl; + ::sfx2::sidebar::ControllerItem m_aSwPagePgSizeControl; + ::sfx2::sidebar::ControllerItem m_aSwPagePgControl; + ::sfx2::sidebar::ControllerItem m_aSwPageColControl; + ::sfx2::sidebar::ControllerItem m_aSwPagePgMetricControl; + + // popups + ::svx::sidebar::Popup maOrientationPopup; + ::svx::sidebar::Popup maMarginPopup; + ::svx::sidebar::Popup maSizePopup; + ::svx::sidebar::Popup maColumnPopup; + + const cssu::Reference< css::document::XUndoManager > mxUndoManager; + + bool mbInvalidateSIDAttrPageOnSIDAttrPageSizeNotify; + + // handler for popup toolboxes to show the popups + DECL_LINK(ClickOrientationHdl, ToolBox* ); + DECL_LINK(ClickMarginHdl, ToolBox* ); + DECL_LINK(ClickSizeHdl, ToolBox* ); + DECL_LINK(ClickColumnHdl, ToolBox* ); + + void Initialize(); + + void MetricState( SfxItemState eState, const SfxPoolItem* pState ); + + // helper to adjust popup toolbox' images + void ChangeMarginImage(); + void ChangeSizeImage(); + void ChangeColumnImage( const sal_uInt16 nColumnType ); + + }; + +} } // end of namespace ::sw::sidebar + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sw/source/uibase/sidebar/PageSizeControl.cxx b/sw/source/uibase/sidebar/PageSizeControl.cxx new file mode 100644 index 000000000000..5e5cd9ddd825 --- /dev/null +++ b/sw/source/uibase/sidebar/PageSizeControl.cxx @@ -0,0 +1,177 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * 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 . + */ + +#include "PageSizeControl.hxx" +#include "PagePropertyPanel.hxx" +#include "PagePropertyPanel.hrc" + +#include <cmdid.h> +#include <swtypes.hxx> + +#include <svx/sidebar/ValueSetWithTextControl.hxx> + +#include <rtl/character.hxx> +#include <editeng/paperinf.hxx> +#include <sfx2/bindings.hxx> +#include <sfx2/dispatch.hxx> + +#include <vcl/settings.hxx> + +namespace sw { namespace sidebar { + +PageSizeControl::PageSizeControl( + Window* pParent, + PagePropertyPanel& rPanel, + const Paper ePaper, + const bool bLandscape, + const FieldUnit eFUnit ) + : ::svx::sidebar::PopupControl( pParent, SW_RES(RID_POPUP_SWPAGE_SIZE) ) + , mpSizeValueSet( new ::svx::sidebar::ValueSetWithTextControl( ::svx::sidebar::ValueSetWithTextControl::TEXT_TEXT, this, SW_RES(VS_SIZE) ) ) + , maMoreButton( this, SW_RES(CB_SIZE_MORE) ) + , maWidthHeightField( this, SW_RES(FLD_WIDTH_HEIGHT) ) + , mePaper( ePaper ) + , maPaperList() + , mrPagePropPanel(rPanel) +{ + maWidthHeightField.Hide(); + SetFieldUnit( maWidthHeightField, eFUnit ); + + maPaperList.push_back( PAPER_A3 ); + maPaperList.push_back( PAPER_A4 ); + maPaperList.push_back( PAPER_A5 ); + maPaperList.push_back( PAPER_B4_ISO ); + maPaperList.push_back( PAPER_B5_ISO ); + maPaperList.push_back( PAPER_ENV_C5 ); + maPaperList.push_back( PAPER_LETTER ); + maPaperList.push_back( PAPER_LEGAL ); + + mpSizeValueSet->SetStyle( mpSizeValueSet->GetStyle() | WB_3DLOOK | WB_NO_DIRECTSELECT ); + mpSizeValueSet->SetColor( GetSettings().GetStyleSettings().GetMenuColor() ); + + sal_uInt16 nSelectedItem = 0; + { + OUString aMetricStr; + { + const OUString aText = maWidthHeightField.GetText(); + for (short i = aText.getLength() - 1; i >= 0; i--) + { + sal_Unicode c = aText[i]; + if ( rtl::isAsciiAlpha(c) || (c == '\'') || (c == '\"') || (c == '%') ) + { + aMetricStr = OUString(c) + aMetricStr; + } + else + { + if (!aMetricStr.isEmpty()) + { + break; + } + } + } + } + + const LocaleDataWrapper& localeDataWrapper = maWidthHeightField.GetLocaleDataWrapper(); + OUString aWidthStr; + OUString aHeightStr; + OUString aItemText2; + for ( ::std::vector< Paper >::size_type nPaperIdx = 0; + nPaperIdx < maPaperList.size(); + ++nPaperIdx ) + { + Size aPaperSize = SvxPaperInfo::GetPaperSize( maPaperList[ nPaperIdx ] ); + if ( bLandscape ) + { + Swap( aPaperSize ); + } + maWidthHeightField.SetValue( maWidthHeightField.Normalize( aPaperSize.Width() ), FUNIT_TWIP ); + aWidthStr = localeDataWrapper.getNum( + maWidthHeightField.GetValue(), + maWidthHeightField.GetDecimalDigits(), + maWidthHeightField.IsUseThousandSep(), + maWidthHeightField.IsShowTrailingZeros() ); + + maWidthHeightField.SetValue( maWidthHeightField.Normalize( aPaperSize.Height() ), FUNIT_TWIP); + aHeightStr = localeDataWrapper.getNum( + maWidthHeightField.GetValue(), + maWidthHeightField.GetDecimalDigits(), + maWidthHeightField.IsUseThousandSep(), + maWidthHeightField.IsShowTrailingZeros() ); + + aItemText2 = aWidthStr + " x " + aHeightStr + " " + aMetricStr; + + mpSizeValueSet->AddItem( + SvxPaperInfo::GetName( maPaperList[ nPaperIdx ] ), + aItemText2, + 0 ); + + if ( maPaperList[ nPaperIdx ] == mePaper ) + { + nSelectedItem = nPaperIdx + 1; + } + } + } + + mpSizeValueSet->SetNoSelection(); + mpSizeValueSet->SetSelectHdl( LINK(this, PageSizeControl,ImplSizeHdl ) ); + mpSizeValueSet->Show(); + + mpSizeValueSet->SelectItem( nSelectedItem ); + mpSizeValueSet->Format(); + mpSizeValueSet->StartSelection(); + + maMoreButton.SetClickHdl( LINK( this, PageSizeControl, MoreButtonClickHdl_Impl ) ); + maMoreButton.GrabFocus(); + + FreeResource(); +} + +PageSizeControl::~PageSizeControl(void) +{ + delete mpSizeValueSet; +} + +IMPL_LINK(PageSizeControl, ImplSizeHdl, void *, pControl) +{ + mpSizeValueSet->SetNoSelection(); + if ( pControl == mpSizeValueSet ) + { + const sal_uInt16 nSelectedPaper = mpSizeValueSet->GetSelectItemId(); + const Paper ePaper = maPaperList[nSelectedPaper - 1]; + if ( ePaper != mePaper ) + { + mePaper = ePaper; + mrPagePropPanel.ExecuteSizeChange( mePaper ); + } + } + + mrPagePropPanel.ClosePageSizePopup(); + return 0; +} + +IMPL_LINK(PageSizeControl, MoreButtonClickHdl_Impl, void *, EMPTYARG) +{ + mrPagePropPanel.GetBindings()->GetDispatcher()->Execute( FN_FORMAT_PAGE_SETTING_DLG, SFX_CALLMODE_ASYNCHRON ); + + mrPagePropPanel.ClosePageSizePopup(); + return 0; +} + +} } // end of namespace sw::sidebar + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sw/source/uibase/sidebar/PageSizeControl.hxx b/sw/source/uibase/sidebar/PageSizeControl.hxx new file mode 100644 index 000000000000..256715b2abfd --- /dev/null +++ b/sw/source/uibase/sidebar/PageSizeControl.hxx @@ -0,0 +1,71 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * 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 . + */ +#ifndef INCLUDED_SW_SOURCE_CORE_UIBASE_SIDEBAR_PAGESIZECONTROL_HXX +#define INCLUDED_SW_SOURCE_CORE_UIBASE_SIDEBAR_PAGESIZECONTROL_HXX + +#include <svx/sidebar/PopupControl.hxx> + +#include <i18nutil/paper.hxx> + +#include <vcl/button.hxx> +#include <vcl/field.hxx> +#include <svtools/unitconv.hxx> + +#include <vector> + +namespace svx { namespace sidebar { + class ValueSetWithTextControl; +} } + +namespace sw { namespace sidebar { + +class PagePropertyPanel; + +class PageSizeControl + : public ::svx::sidebar::PopupControl +{ +public: + PageSizeControl( + Window* pParent, + PagePropertyPanel& rPanel, + const Paper ePaper, + const bool bLandscape, + const FieldUnit eFUnit ); + virtual ~PageSizeControl(void); + +private: + ::svx::sidebar::ValueSetWithTextControl* mpSizeValueSet; + PushButton maMoreButton; + // hidden metric field + MetricField maWidthHeightField; + + Paper mePaper; + ::std::vector< Paper > maPaperList; + + PagePropertyPanel& mrPagePropPanel; + + DECL_LINK(ImplSizeHdl, void*); + DECL_LINK(MoreButtonClickHdl_Impl, void*); +}; + +} } // end of namespace sw::sidebar + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sw/source/uibase/sidebar/PropertyPanel.hrc b/sw/source/uibase/sidebar/PropertyPanel.hrc new file mode 100644 index 000000000000..b374ab3dc96b --- /dev/null +++ b/sw/source/uibase/sidebar/PropertyPanel.hrc @@ -0,0 +1,35 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * 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 . + */ +#ifndef _SW_PROPERTY_PANEL_HRC +#define _SW_PROPERTY_PANEL_HRC + +#include "rcid.hrc" + +#define RID_PROPERTYPANEL_SWOBJWRAP_PAGE (RC_PROPERTYPANEL_BEGIN + 1) +#define RID_PROPERTYPANEL_SWPAGE (RC_PROPERTYPANEL_BEGIN + 2) +#define RID_POPUP_SWPAGE_MARGIN (RC_PROPERTYPANEL_BEGIN + 3) +#define RID_POPUP_SWPAGE_ORIENTATION (RC_PROPERTYPANEL_BEGIN + 4) +#define RID_POPUP_SWPAGE_COLUMN (RC_PROPERTYPANEL_BEGIN + 5) +#define RID_POPUP_SWPAGE_SIZE (RC_PROPERTYPANEL_BEGIN + 6) + +#define PROPERTY_PANEL_END RID_POPUP_SWPAGE_SIZE + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sw/source/uibase/sidebar/SwPanelFactory.cxx b/sw/source/uibase/sidebar/SwPanelFactory.cxx new file mode 100644 index 000000000000..94a6eba06d32 --- /dev/null +++ b/sw/source/uibase/sidebar/SwPanelFactory.cxx @@ -0,0 +1,148 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * 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 . + */ + +#include <com/sun/star/ui/XUIElementFactory.hpp> + +#include <PagePropertyPanel.hxx> +#include <WrapPropertyPanel.hxx> +#include <navipi.hxx> + +#include <sfx2/sidebar/SidebarPanelBase.hxx> +#include <sfx2/sfxbasecontroller.hxx> +#include <toolkit/helper/vclunohelper.hxx> +#include <vcl/window.hxx> +#include <rtl/ref.hxx> +#include <comphelper/namedvaluecollection.hxx> +#include <cppuhelper/compbase1.hxx> +#include <cppuhelper/basemutex.hxx> + +#include <boost/bind.hpp> +#include <boost/noncopyable.hpp> + +using namespace css; +using namespace css::uno; + +namespace { + +typedef ::cppu::WeakComponentImplHelper1 < + css::ui::XUIElementFactory + > PanelFactoryInterfaceBase; + +class SwPanelFactory + : private ::boost::noncopyable, + private ::cppu::BaseMutex, + public PanelFactoryInterfaceBase +{ +public: + SwPanelFactory(void); + virtual ~SwPanelFactory(void); + + // XUIElementFactory + cssu::Reference<css::ui::XUIElement> SAL_CALL createUIElement( + const ::rtl::OUString& rsResourceURL, + const ::cssu::Sequence<css::beans::PropertyValue>& rArguments) + throw( + css::container::NoSuchElementException, + css::lang::IllegalArgumentException, + cssu::RuntimeException, std::exception ) SAL_OVERRIDE; +}; + +SwPanelFactory::SwPanelFactory (void) + : PanelFactoryInterfaceBase(m_aMutex) +{ +} + +SwPanelFactory::~SwPanelFactory (void) +{ +} + +Reference<ui::XUIElement> SAL_CALL SwPanelFactory::createUIElement ( + const ::rtl::OUString& rsResourceURL, + const ::cssu::Sequence<css::beans::PropertyValue>& rArguments) + throw( + container::NoSuchElementException, + lang::IllegalArgumentException, + RuntimeException, std::exception) +{ + Reference<ui::XUIElement> xElement; + + const ::comphelper::NamedValueCollection aArguments (rArguments); + Reference<frame::XFrame> xFrame (aArguments.getOrDefault("Frame", Reference<frame::XFrame>())); + Reference<awt::XWindow> xParentWindow (aArguments.getOrDefault("ParentWindow", Reference<awt::XWindow>())); + const sal_uInt64 nBindingsValue (aArguments.getOrDefault("SfxBindings", sal_uInt64(0))); + SfxBindings* pBindings = reinterpret_cast<SfxBindings*>(nBindingsValue); + + ::Window* pParentWindow = VCLUnoHelper::GetWindow(xParentWindow); + if ( ! xParentWindow.is() || pParentWindow==NULL) + throw RuntimeException( + "PanelFactory::createUIElement called without ParentWindow", + NULL); + if ( ! xFrame.is()) + throw RuntimeException( + "PanelFactory::createUIElement called without Frame", + NULL); + if (pBindings == NULL) + throw RuntimeException( + "PanelFactory::createUIElement called without SfxBindings", + NULL); + +#define DoesResourceEndWith(s) rsResourceURL.endsWithAsciiL(s,strlen(s)) + if (DoesResourceEndWith("/PagePropertyPanel")) + { + sw::sidebar::PagePropertyPanel* pPanel = sw::sidebar::PagePropertyPanel::Create( pParentWindow, xFrame, pBindings ); + xElement = sfx2::sidebar::SidebarPanelBase::Create( + rsResourceURL, + xFrame, + pPanel, + ui::LayoutSize(-1,-1,-1)); + } + else if (DoesResourceEndWith("/WrapPropertyPanel")) + { + sw::sidebar::WrapPropertyPanel* pPanel = sw::sidebar::WrapPropertyPanel::Create( pParentWindow, xFrame, pBindings ); + xElement = sfx2::sidebar::SidebarPanelBase::Create( + rsResourceURL, + xFrame, + pPanel, + ui::LayoutSize(-1,-1,-1)); + } + else if (DoesResourceEndWith("/NavigatorPanel")) + { + Window* pPanel = new SwNavigationPI(pBindings, NULL, pParentWindow); + xElement = sfx2::sidebar::SidebarPanelBase::Create( + rsResourceURL, + xFrame, + pPanel, + ui::LayoutSize(0,-1,-1)); + } +#undef DoesResourceEndWith + + return xElement; +} + +} + +extern "C" SAL_DLLPUBLIC_EXPORT css::uno::XInterface * SAL_CALL +org_apache_openoffice_comp_sw_sidebar_SwPanelFactory_get_implementation( + css::uno::XComponentContext *, + css::uno::Sequence<css::uno::Any> const &) +{ + return cppu::acquire(new SwPanelFactory()); +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sw/source/uibase/sidebar/WrapPropertyPanel.cxx b/sw/source/uibase/sidebar/WrapPropertyPanel.cxx new file mode 100644 index 000000000000..96d8d344b6f0 --- /dev/null +++ b/sw/source/uibase/sidebar/WrapPropertyPanel.cxx @@ -0,0 +1,243 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * 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 . + */ + +#include "WrapPropertyPanel.hxx" +#include "PropertyPanel.hrc" + +#include <cmdid.h> +#include <swtypes.hxx> + +#include <sfx2/bindings.hxx> +#include <sfx2/dispatch.hxx> +#include <sfx2/sidebar/ControlFactory.hxx> +#include <sfx2/imagemgr.hxx> +#include <svl/eitem.hxx> +#include <vcl/svapp.hxx> +#include <vcl/settings.hxx> + +#include <com/sun/star/lang/IllegalArgumentException.hpp> + +const char UNO_WRAPOFF[] = ".uno:WrapOff"; +const char UNO_WRAPLEFT[] = ".uno:WrapLeft"; +const char UNO_WRAPRIGHT[] = ".uno:WrapRight"; +const char UNO_WRAPON[] = ".uno:WrapOn"; +const char UNO_WRAPTHROUGH[] = ".uno:WrapThrough"; +const char UNO_WRAPIDEAL[] = ".uno:WrapIdeal"; + +namespace sw { namespace sidebar { + +WrapPropertyPanel* WrapPropertyPanel::Create ( + Window* pParent, + const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XFrame >& rxFrame, + SfxBindings* pBindings) +{ + if (pParent == NULL) + throw ::com::sun::star::lang::IllegalArgumentException("no parent Window given to WrapPropertyPanel::Create", NULL, 0); + if ( ! rxFrame.is()) + throw ::com::sun::star::lang::IllegalArgumentException("no XFrame given to WrapPropertyPanel::Create", NULL, 1); + if (pBindings == NULL) + throw ::com::sun::star::lang::IllegalArgumentException("no SfxBindings given to WrapPropertyPanel::Create", NULL, 2); + + return new WrapPropertyPanel( + pParent, + rxFrame, + pBindings); +} + +WrapPropertyPanel::WrapPropertyPanel( + Window* pParent, + const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XFrame >& rxFrame, + SfxBindings* pBindings ) + : PanelLayout(pParent, "WrapPropertyPanel", "modules/swriter/ui/sidebarwrap.ui", rxFrame) + , mxFrame( rxFrame ) + , mpBindings(pBindings) + // resources + , aWrapIL(6,2) + // controller items + , maSwNoWrapControl(FN_FRAME_NOWRAP, *pBindings, *this) + , maSwWrapLeftControl(FN_FRAME_WRAP, *pBindings, *this) + , maSwWrapRightControl(FN_FRAME_WRAP_RIGHT, *pBindings, *this) + , maSwWrapParallelControl(FN_FRAME_WRAP_LEFT, *pBindings, *this) + , maSwWrapThroughControl(FN_FRAME_WRAPTHRU, *pBindings, *this) + , maSwWrapIdealControl(FN_FRAME_WRAP_IDEAL, *pBindings, *this) +{ + get(mpRBNoWrap, "buttonnone"); + get(mpRBWrapLeft, "buttonbefore"); + get(mpRBWrapRight, "buttonafter"); + get(mpRBWrapParallel, "buttonparallel"); + get(mpRBWrapThrough, "buttonthrough"); + get(mpRBIdealWrap, "buttonoptimal"); + + Initialize(); +} + +WrapPropertyPanel::~WrapPropertyPanel() +{ +} + +void WrapPropertyPanel::Initialize() +{ + Link aLink = LINK(this, WrapPropertyPanel, WrapTypeHdl); + mpRBNoWrap->SetClickHdl(aLink); + mpRBWrapLeft->SetClickHdl(aLink); + mpRBWrapRight->SetClickHdl(aLink); + mpRBWrapParallel->SetClickHdl(aLink); + mpRBWrapThrough->SetClickHdl(aLink); + mpRBIdealWrap->SetClickHdl(aLink); + + aWrapIL.AddImage( UNO_WRAPOFF, + ::GetImage( mxFrame, UNO_WRAPOFF, false ) ); + aWrapIL.AddImage( UNO_WRAPLEFT, + ::GetImage( mxFrame, UNO_WRAPLEFT, false ) ); + aWrapIL.AddImage( UNO_WRAPRIGHT, + ::GetImage( mxFrame, UNO_WRAPRIGHT, false ) ); + aWrapIL.AddImage( UNO_WRAPON, + ::GetImage( mxFrame, UNO_WRAPON, false ) ); + aWrapIL.AddImage( UNO_WRAPTHROUGH, + ::GetImage( mxFrame, UNO_WRAPTHROUGH, false ) ); + aWrapIL.AddImage( UNO_WRAPIDEAL, + ::GetImage( mxFrame, UNO_WRAPIDEAL, false ) ); + + mpRBNoWrap->SetModeRadioImage( aWrapIL.GetImage(UNO_WRAPOFF) ); + if ( Application::GetSettings().GetLayoutRTL() ) + { + mpRBWrapLeft->SetModeRadioImage( aWrapIL.GetImage(UNO_WRAPRIGHT) ); + mpRBWrapRight->SetModeRadioImage( aWrapIL.GetImage(UNO_WRAPLEFT) ); + } + else + { + mpRBWrapLeft->SetModeRadioImage( aWrapIL.GetImage(UNO_WRAPLEFT) ); + mpRBWrapRight->SetModeRadioImage( aWrapIL.GetImage(UNO_WRAPRIGHT) ); + } + mpRBWrapParallel->SetModeRadioImage( aWrapIL.GetImage(UNO_WRAPON) ); + mpRBWrapThrough->SetModeRadioImage( aWrapIL.GetImage(UNO_WRAPTHROUGH) ); + mpRBIdealWrap->SetModeRadioImage( aWrapIL.GetImage(UNO_WRAPIDEAL) ); + + mpRBNoWrap->SetAccessibleName(mpRBNoWrap->GetQuickHelpText()); + mpRBWrapLeft->SetAccessibleName(mpRBWrapLeft->GetQuickHelpText()); + mpRBWrapRight->SetAccessibleName(mpRBWrapRight->GetQuickHelpText()); + mpRBWrapParallel->SetAccessibleName(mpRBWrapParallel->GetQuickHelpText()); + mpRBWrapThrough->SetAccessibleName(mpRBWrapThrough->GetQuickHelpText()); + mpRBIdealWrap->SetAccessibleName(mpRBIdealWrap->GetQuickHelpText()); + + mpBindings->Update( FN_FRAME_NOWRAP ); + mpBindings->Update( FN_FRAME_WRAP ); + mpBindings->Update( FN_FRAME_WRAP_RIGHT ); + mpBindings->Update( FN_FRAME_WRAP_LEFT ); + mpBindings->Update( FN_FRAME_WRAPTHRU ); + mpBindings->Update( FN_FRAME_WRAP_IDEAL ); +} + +IMPL_LINK(WrapPropertyPanel, WrapTypeHdl, void *, EMPTYARG) +{ + sal_uInt16 nSlot = 0; + if ( mpRBWrapLeft->IsChecked() ) + { + nSlot = FN_FRAME_WRAP_LEFT; + } + else if( mpRBWrapRight->IsChecked() ) + { + nSlot = FN_FRAME_WRAP_RIGHT; + } + else if ( mpRBWrapParallel->IsChecked() ) + { + nSlot = FN_FRAME_WRAP; + } + else if( mpRBWrapThrough->IsChecked() ) + { + nSlot = FN_FRAME_WRAPTHRU; + } + else if( mpRBIdealWrap->IsChecked() ) + { + nSlot = FN_FRAME_WRAP_IDEAL; + } + else + { + nSlot = FN_FRAME_NOWRAP; + } + SfxBoolItem bStateItem( nSlot, true ); + mpBindings->GetDispatcher()->Execute( nSlot, SFX_CALLMODE_RECORD, &bStateItem, 0L ); + + return 0; +} + +void WrapPropertyPanel::NotifyItemUpdate( + const sal_uInt16 nSId, + const SfxItemState eState, + const SfxPoolItem* pState, + const bool bIsEnabled) +{ + (void)bIsEnabled; + + if ( eState == SFX_ITEM_AVAILABLE && + pState->ISA(SfxBoolItem) ) + { + //Set Radio Button enable + mpRBNoWrap->Enable(true); + mpRBWrapLeft->Enable(true); + mpRBWrapRight->Enable(true); + mpRBWrapParallel->Enable(true); + mpRBWrapThrough->Enable(true); + mpRBIdealWrap->Enable(true); + + const SfxBoolItem* pBoolItem = static_cast< const SfxBoolItem* >( pState ); + switch( nSId ) + { + case FN_FRAME_WRAP_RIGHT: + mpRBWrapRight->Check( pBoolItem->GetValue() ); + break; + case FN_FRAME_WRAP_LEFT: + mpRBWrapLeft->Check( pBoolItem->GetValue() ); + break; + case FN_FRAME_WRAPTHRU: + mpRBWrapThrough->Check( pBoolItem->GetValue() ); + break; + case FN_FRAME_WRAP_IDEAL: + mpRBIdealWrap->Check( pBoolItem->GetValue() ); + break; + case FN_FRAME_WRAP: + mpRBWrapParallel->Check( pBoolItem->GetValue() ); + break; + case FN_FRAME_NOWRAP: + default: + mpRBNoWrap->Check( pBoolItem->GetValue() ); + break; + } + } + else + { + mpRBNoWrap->Enable(false); + mpRBWrapLeft->Enable(false); + mpRBWrapRight->Enable(false); + mpRBWrapParallel->Enable(false); + mpRBWrapThrough->Enable(false); + mpRBIdealWrap->Enable(false); + + mpRBNoWrap->Check( false ); + mpRBWrapLeft->Check( false ); + mpRBWrapRight->Check( false ); + mpRBWrapParallel->Check( false ); + mpRBWrapThrough->Check( false ); + mpRBIdealWrap->Check( false ); + } +} + +} } // end of namespace ::sw::sidebar + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sw/source/uibase/sidebar/WrapPropertyPanel.hxx b/sw/source/uibase/sidebar/WrapPropertyPanel.hxx new file mode 100644 index 000000000000..bc261e31c67f --- /dev/null +++ b/sw/source/uibase/sidebar/WrapPropertyPanel.hxx @@ -0,0 +1,88 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * 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 . + */ +#ifndef INCLUDED_SW_SOURCE_CORE_UIBASE_SIDEBAR_WRAPPROPERTYPANEL_HXX +#define INCLUDED_SW_SOURCE_CORE_UIBASE_SIDEBAR_WRAPPROPERTYPANEL_HXX + +#include <svx/sidebar/PanelLayout.hxx> +#include <vcl/button.hxx> +#include <vcl/image.hxx> + +#include <sfx2/sidebar/ControllerItem.hxx> +#include <com/sun/star/frame/XFrame.hpp> + +#include <boost/scoped_ptr.hpp> + +namespace sw { namespace sidebar { + + class WrapPropertyPanel + : public PanelLayout + , public ::sfx2::sidebar::ControllerItem::ItemUpdateReceiverInterface + { + public: + static WrapPropertyPanel* Create( + Window* pParent, + const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XFrame>& rxFrame, + SfxBindings* pBindings ); + + // interface of ::sfx2::sidebar::ControllerItem::ItemUpdateReceiverInterface + virtual void NotifyItemUpdate( + const sal_uInt16 nSId, + const SfxItemState eState, + const SfxPoolItem* pState, + const bool bIsEnabled) SAL_OVERRIDE; + + private: + WrapPropertyPanel( + Window* pParent, + const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XFrame >& rxFrame, + SfxBindings* pBindings ); + + virtual ~WrapPropertyPanel(); + + ::com::sun::star::uno::Reference< ::com::sun::star::frame::XFrame > mxFrame; + SfxBindings* mpBindings; + + RadioButton* mpRBNoWrap; + RadioButton* mpRBWrapLeft; + RadioButton* mpRBWrapRight; + RadioButton* mpRBWrapParallel; + RadioButton* mpRBWrapThrough; + RadioButton* mpRBIdealWrap; + + //Image resource. + ImageList aWrapIL; + + // Controller Items + ::sfx2::sidebar::ControllerItem maSwNoWrapControl; + ::sfx2::sidebar::ControllerItem maSwWrapLeftControl; + ::sfx2::sidebar::ControllerItem maSwWrapRightControl; + ::sfx2::sidebar::ControllerItem maSwWrapParallelControl; + ::sfx2::sidebar::ControllerItem maSwWrapThroughControl; + ::sfx2::sidebar::ControllerItem maSwWrapIdealControl; + + void Initialize(); + + DECL_LINK(WrapTypeHdl, void*); + }; + +} } // end of namespace ::sw::sidebar + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |