diff options
Diffstat (limited to 'cui/source/tabpages/border.cxx')
-rw-r--r-- | cui/source/tabpages/border.cxx | 1224 |
1 files changed, 0 insertions, 1224 deletions
diff --git a/cui/source/tabpages/border.cxx b/cui/source/tabpages/border.cxx deleted file mode 100644 index a13cb4958..000000000 --- a/cui/source/tabpages/border.cxx +++ /dev/null @@ -1,1224 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -// include --------------------------------------------------------------- -#include <sfx2/app.hxx> -#include <sfx2/objsh.hxx> -#include <sfx2/module.hxx> -#include <svx/dialogs.hrc> -#include <svx/dialmgr.hxx> -#define _SVX_BORDER_CXX - -#include <cuires.hrc> -#include "border.hrc" -#include "helpid.hrc" - -#define LINESTYLE_HTML_MAX 5 - -#include <svx/xtable.hxx> // XColorTable -#include <svx/drawitem.hxx> -#include <editeng/boxitem.hxx> -#include <editeng/shaditem.hxx> -#include "border.hxx" -#include <svx/dlgutil.hxx> -#include <dialmgr.hxx> -#include "svx/htmlmode.hxx" -#include <vcl/msgbox.hxx> -#include "svx/flagsdef.hxx" -#include <sfx2/request.hxx> -#include <svl/intitem.hxx> -#include <sfx2/itemconnect.hxx> -#include <sal/macros.h> -#include "borderconn.hxx" - -using namespace ::editeng; - -// ----------------------------------------------------------------------- - -/* - * [Beschreibung:] - * TabPage zum Einstellen der Rahmen-Attribute. - * Benoetigt - * ein SvxShadowItem: Schatten - * ein SvxBoxItem: Linien links,rechts,oben,unten ), - * ein SvxBoxInfo: Linien vertikal,horizontal, Abstaende, Flags ) - * - * Linien koennen drei Zustaende haben. - * 1. Show ( -> gueltige Werte ) - * 2. Hide ( -> NULL-Pointer ) - * 3. DontCare ( -> gesonderte Valid-Flags im InfoItem ) - */ - -// static ---------------------------------------------------------------- - -static sal_uInt16 pRanges[] = -{ - SID_ATTR_BORDER_INNER, SID_ATTR_BORDER_SHADOW, - SID_ATTR_ALIGN_MARGIN, SID_ATTR_ALIGN_MARGIN, - SID_ATTR_BORDER_CONNECT, SID_ATTR_BORDER_CONNECT, - SID_SW_COLLAPSING_BORDERS, SID_SW_COLLAPSING_BORDERS, - SID_ATTR_BORDER_DIAG_TLBR, SID_ATTR_BORDER_DIAG_BLTR, - 0 -}; - -sal_Bool SvxBorderTabPage::bSync = sal_True; - -// ----------------------------------------------------------------------- -void lcl_SetDecimalDigitsTo1(MetricField& rField) -{ - sal_Int64 nMin = rField.Denormalize( rField.GetMin( FUNIT_TWIP ) ); - rField.SetDecimalDigits(1); - rField.SetMin( rField.Normalize( nMin ), FUNIT_TWIP ); -} -// ----------------------------------------------------------------------- - -SvxBorderTabPage::SvxBorderTabPage( Window* pParent, - const SfxItemSet& rCoreAttrs ) - - : SfxTabPage( pParent, CUI_RES( RID_SVXPAGE_BORDER ), rCoreAttrs ), - - aFlBorder ( this, CUI_RES( FL_BORDER ) ), - aDefaultFT ( this, CUI_RES( FT_DEFAULT ) ), - aWndPresets ( this, CUI_RES( WIN_PRESETS ) ), - aUserDefFT ( this, CUI_RES( FT_USERDEF ) ), - aFrameSel ( this, CUI_RES( WIN_FRAMESEL ) ), - - aFlSep1 ( this, CUI_RES( FL_SEPARATOR1 ) ), - aFlLine ( this, CUI_RES( FL_LINE ) ), - aStyleFT ( this, CUI_RES( FT_STYLE ) ), - aLbLineStyle ( this, CUI_RES( LB_LINESTYLE ) ), - aColorFT ( this, CUI_RES( FT_COLOR ) ), - aLbLineColor ( this, CUI_RES( LB_LINECOLOR ) ), - aWidthFT ( this, CUI_RES( FT_WIDTH ) ), - aLineWidthMF ( this, CUI_RES( MF_LINEWIDTH ) ), - - aFlSep2 ( this, CUI_RES( FL_SEPARATOR2 ) ), - aDistanceFL ( this, CUI_RES( FL_DISTANCE ) ), - aLeftFT ( this, CUI_RES( FT_LEFT ) ), - aLeftMF ( this, CUI_RES( MF_LEFT ) ), - aRightFT ( this, CUI_RES( FT_RIGHT ) ), - aRightMF ( this, CUI_RES( MF_RIGHT ) ), - aTopFT ( this, CUI_RES( FT_TOP ) ), - aTopMF ( this, CUI_RES( MF_TOP ) ), - aBottomFT ( this, CUI_RES( FT_BOTTOM ) ), - aBottomMF ( this, CUI_RES( MF_BOTTOM ) ), - aSynchronizeCB ( this, CUI_RES( CB_SYNC ) ), - - aFlShadow ( this, CUI_RES( FL_SHADOW ) ), - aFtShadowPos ( this, CUI_RES( FT_SHADOWPOS ) ), - aWndShadows ( this, CUI_RES( WIN_SHADOWS ) ), - aFtShadowSize ( this, CUI_RES( FT_SHADOWSIZE ) ), - aEdShadowSize ( this, CUI_RES( ED_SHADOWSIZE ) ), - aFtShadowColor ( this, CUI_RES( FT_SHADOWCOLOR ) ), - aLbShadowColor ( this, CUI_RES( LB_SHADOWCOLOR ) ), - aPropertiesFL ( this, CUI_RES( FL_PROPERTIES ) ), - aMergeWithNextCB( this, CUI_RES( CB_MERGEWITHNEXT ) ), - aMergeAdjacentBordersCB( this, CUI_RES( CB_MERGEADJACENTBORDERS ) ), - aShadowImgLst( CUI_RES(IL_SDW_BITMAPS)), - aBorderImgLst( CUI_RES(IL_PRE_BITMAPS)), - nMinValue(0), - nSWMode(0), - mbHorEnabled( false ), - mbVerEnabled( false ), - mbTLBREnabled( false ), - mbBLTREnabled( false ), - mbUseMarginItem( false ) - -{ - // diese Page braucht ExchangeSupport - SetExchangeSupport(); - - /* Use SvxMarginItem instead of margins from SvxBoxItem, if present. - -> Remember this state in mbUseMarginItem, because other special handling - is needed across various functions... */ - mbUseMarginItem = rCoreAttrs.GetItemState(GetWhich(SID_ATTR_ALIGN_MARGIN),sal_True) != SFX_ITEM_UNKNOWN; - - // Metrik einstellen - FieldUnit eFUnit = GetModuleFieldUnit( rCoreAttrs ); - - if( mbUseMarginItem ) - { - // copied from SvxAlignmentTabPage - switch ( eFUnit ) - { - // #103396# the default value (1pt) can't be accurately represented in - // inches or pica with two decimals, so point is used instead. - case FUNIT_PICA: - case FUNIT_INCH: - case FUNIT_FOOT: - case FUNIT_MILE: - eFUnit = FUNIT_POINT; - break; - - case FUNIT_CM: - case FUNIT_M: - case FUNIT_KM: - eFUnit = FUNIT_MM; - break; - default: ;//prevent warning - } - } - else - { - switch ( eFUnit ) - { - case FUNIT_M: - case FUNIT_KM: - eFUnit = FUNIT_MM; - break; - default: ; //prevent warning - } - } - - SetFieldUnit( aEdShadowSize, eFUnit ); - - sal_uInt16 nWhich = GetWhich( SID_ATTR_BORDER_INNER, sal_False ); - sal_Bool bIsDontCare = sal_True; - - if ( rCoreAttrs.GetItemState( nWhich, sal_True ) >= SFX_ITEM_AVAILABLE ) - { - // Absatz oder Tabelle - const SvxBoxInfoItem* pBoxInfo = - (const SvxBoxInfoItem*)&( rCoreAttrs.Get( nWhich ) ); - - mbHorEnabled = pBoxInfo->IsHorEnabled(); - mbVerEnabled = pBoxInfo->IsVerEnabled(); - mbTLBREnabled = sfx::ItemWrapperHelper::IsKnownItem( rCoreAttrs, SID_ATTR_BORDER_DIAG_TLBR ); - mbBLTREnabled = sfx::ItemWrapperHelper::IsKnownItem( rCoreAttrs, SID_ATTR_BORDER_DIAG_BLTR ); - - if(pBoxInfo->IsDist()) - { - SetFieldUnit(aLeftMF, eFUnit); - SetFieldUnit(aRightMF, eFUnit); - SetFieldUnit(aTopMF, eFUnit); - SetFieldUnit(aBottomMF, eFUnit); - aSynchronizeCB.Check(bSync); - aSynchronizeCB.SetClickHdl(LINK(this, SvxBorderTabPage, SyncHdl_Impl)); - aLeftMF.SetModifyHdl(LINK(this, SvxBorderTabPage, ModifyDistanceHdl_Impl)); - aRightMF.SetModifyHdl(LINK(this, SvxBorderTabPage, ModifyDistanceHdl_Impl)); - aTopMF.SetModifyHdl(LINK(this, SvxBorderTabPage, ModifyDistanceHdl_Impl)); - aBottomMF.SetModifyHdl(LINK(this, SvxBorderTabPage, ModifyDistanceHdl_Impl)); - } - else - { - aFlSep2.Hide(); - aDistanceFL.Hide(); - aLeftFT.Hide(); - aLeftMF.Hide(); - aRightFT.Hide(); - aRightMF.Hide(); - aTopFT.Hide(); - aTopMF.Hide(); - aBottomFT.Hide(); - aBottomMF.Hide(); - aSynchronizeCB.Hide(); - } - bIsDontCare = !pBoxInfo->IsValid( VALID_DISABLE ); - } - if(!mbUseMarginItem && eFUnit == FUNIT_MM && SFX_MAPUNIT_TWIP == rCoreAttrs.GetPool()->GetMetric( GetWhich( SID_ATTR_BORDER_INNER ) )) - { - //#i91548# changing the number of decimal digits changes the minimum values, too - lcl_SetDecimalDigitsTo1(aLeftMF); - lcl_SetDecimalDigitsTo1(aRightMF); - lcl_SetDecimalDigitsTo1(aTopMF); - lcl_SetDecimalDigitsTo1(aBottomMF); - lcl_SetDecimalDigitsTo1(aEdShadowSize); - } - - svx::FrameSelFlags nFlags = svx::FRAMESEL_OUTER; - if( mbHorEnabled ) - nFlags |= svx::FRAMESEL_INNER_HOR; - if( mbVerEnabled ) - nFlags |= svx::FRAMESEL_INNER_VER; - if( mbTLBREnabled ) - nFlags |= svx::FRAMESEL_DIAG_TLBR; - if( mbBLTREnabled ) - nFlags |= svx::FRAMESEL_DIAG_BLTR; - if( bIsDontCare ) - nFlags |= svx::FRAMESEL_DONTCARE; - aFrameSel.Initialize( nFlags ); - - aFrameSel.SetSelectHdl(LINK(this, SvxBorderTabPage, LinesChanged_Impl)); - aLbLineStyle.SetSelectHdl( LINK( this, SvxBorderTabPage, SelStyleHdl_Impl ) ); - aLbLineColor.SetSelectHdl( LINK( this, SvxBorderTabPage, SelColHdl_Impl ) ); - aLineWidthMF.SetModifyHdl( LINK( this, SvxBorderTabPage, ModifyWidthHdl_Impl ) ); - aLbShadowColor.SetSelectHdl( LINK( this, SvxBorderTabPage, SelColHdl_Impl ) ); - aWndPresets.SetSelectHdl( LINK( this, SvxBorderTabPage, SelPreHdl_Impl ) ); - aWndShadows.SetSelectHdl( LINK( this, SvxBorderTabPage, SelSdwHdl_Impl ) ); - - FillValueSets(); - FillLineListBox_Impl(); - - // ColorBox aus der XColorTable fuellen. - SfxObjectShell* pDocSh = SfxObjectShell::Current(); - const SfxPoolItem* pItem = NULL; - XColorTable* pColorTable = NULL; - - DBG_ASSERT( pDocSh, "DocShell not found!" ); - - if ( pDocSh ) - { - pItem = pDocSh->GetItem( SID_COLOR_TABLE ); - if ( pItem != NULL ) - pColorTable = ( (SvxColorTableItem*)pItem )->GetColorTable(); - } - - DBG_ASSERT( pColorTable, "ColorTable not found!" ); - - if ( pColorTable ) - { - // fuellen der Linienfarben-Box - aLbLineColor.SetUpdateMode( sal_False ); - - for ( long i = 0; i < pColorTable->Count(); ++i ) - { - XColorEntry* pEntry = pColorTable->GetColor(i); - aLbLineColor.InsertEntry( pEntry->GetColor(), pEntry->GetName() ); - } - aLbLineColor.SetUpdateMode( sal_True ); - // dann nur noch in die Schattenfarben-Box kopieren - aLbShadowColor.CopyEntries( aLbLineColor ); - } - FreeResource(); - - // connections - - bool bSupportsShadow = !SfxItemPool::IsSlot( GetWhich( SID_ATTR_BORDER_SHADOW ) ); - if( bSupportsShadow ) - AddItemConnection( svx::CreateShadowConnection( rCoreAttrs, aWndShadows, aEdShadowSize, aLbShadowColor ) ); - else - HideShadowControls(); - - if( mbUseMarginItem ) - AddItemConnection( svx::CreateMarginConnection( rCoreAttrs, aLeftMF, aRightMF, aTopMF, aBottomMF ) ); - if( aFrameSel.IsBorderEnabled( svx::FRAMEBORDER_TLBR ) ) - AddItemConnection( svx::CreateFrameLineConnection( SID_ATTR_BORDER_DIAG_TLBR, aFrameSel, svx::FRAMEBORDER_TLBR ) ); - if( aFrameSel.IsBorderEnabled( svx::FRAMEBORDER_BLTR ) ) - AddItemConnection( svx::CreateFrameLineConnection( SID_ATTR_BORDER_DIAG_BLTR, aFrameSel, svx::FRAMEBORDER_BLTR ) ); - // #i43593# - item connection doesn't work for Writer, - // because the Writer item sets contain these items - // checkbox "Merge with next paragraph" only visible for Writer dialog format.paragraph - AddItemConnection( new sfx::CheckBoxConnection( SID_ATTR_BORDER_CONNECT, aMergeWithNextCB, sfx::ITEMCONN_DEFAULT ) ); - aMergeWithNextCB.Hide(); - // checkbox "Merge adjacent line styles" only visible for Writer dialog format.table - AddItemConnection( new sfx::CheckBoxConnection( SID_SW_COLLAPSING_BORDERS, aMergeAdjacentBordersCB, sfx::ITEMCONN_DEFAULT ) ); - aMergeAdjacentBordersCB.Hide(); -} - -// ----------------------------------------------------------------------- - -SvxBorderTabPage::~SvxBorderTabPage() -{ -} - -// ----------------------------------------------------------------------- - -sal_uInt16* SvxBorderTabPage::GetRanges() -{ - return pRanges; -} - -// ----------------------------------------------------------------------- - -SfxTabPage* SvxBorderTabPage::Create( Window* pParent, - const SfxItemSet& rAttrSet ) -{ - return ( new SvxBorderTabPage( pParent, rAttrSet ) ); -} - -// ----------------------------------------------------------------------- - -void SvxBorderTabPage::ResetFrameLine_Impl( svx::FrameBorderType eBorder, const SvxBorderLine* pCoreLine, bool bValid ) -{ - if( aFrameSel.IsBorderEnabled( eBorder ) ) - { - if( bValid ) - aFrameSel.ShowBorder( eBorder, pCoreLine ); - else - aFrameSel.SetBorderDontCare( eBorder ); - } -} - -// ----------------------------------------------------------------------- - -void SvxBorderTabPage::Reset( const SfxItemSet& rSet ) -{ - SfxTabPage::Reset( rSet ); - - const SvxBoxItem* pBoxItem; - const SvxBoxInfoItem* pBoxInfoItem; - sal_uInt16 nWhichBox = GetWhich(SID_ATTR_BORDER_OUTER); - SfxMapUnit eCoreUnit; - - pBoxItem = (const SvxBoxItem*)GetItem( rSet, SID_ATTR_BORDER_OUTER ); - - pBoxInfoItem = (const SvxBoxInfoItem*)GetItem( rSet, SID_ATTR_BORDER_INNER, sal_False ); - - eCoreUnit = rSet.GetPool()->GetMetric( nWhichBox ); - - if ( pBoxItem && pBoxInfoItem ) // -> Don't Care - { - ResetFrameLine_Impl( svx::FRAMEBORDER_LEFT, pBoxItem->GetLeft(), pBoxInfoItem->IsValid( VALID_LEFT ) ); - ResetFrameLine_Impl( svx::FRAMEBORDER_RIGHT, pBoxItem->GetRight(), pBoxInfoItem->IsValid( VALID_RIGHT ) ); - ResetFrameLine_Impl( svx::FRAMEBORDER_TOP, pBoxItem->GetTop(), pBoxInfoItem->IsValid( VALID_TOP ) ); - ResetFrameLine_Impl( svx::FRAMEBORDER_BOTTOM, pBoxItem->GetBottom(), pBoxInfoItem->IsValid( VALID_BOTTOM ) ); - ResetFrameLine_Impl( svx::FRAMEBORDER_VER, pBoxInfoItem->GetVert(), pBoxInfoItem->IsValid( VALID_VERT ) ); - ResetFrameLine_Impl( svx::FRAMEBORDER_HOR, pBoxInfoItem->GetHori(), pBoxInfoItem->IsValid( VALID_HORI ) ); - - //------------------- - // Abstand nach innen - //------------------- - if( !mbUseMarginItem ) - { - if ( aLeftMF.IsVisible() ) - { - SetMetricValue( aLeftMF, pBoxInfoItem->GetDefDist(), eCoreUnit ); - SetMetricValue( aRightMF, pBoxInfoItem->GetDefDist(), eCoreUnit ); - SetMetricValue( aTopMF, pBoxInfoItem->GetDefDist(), eCoreUnit ); - SetMetricValue( aBottomMF, pBoxInfoItem->GetDefDist(), eCoreUnit ); - - nMinValue = static_cast<long>(aLeftMF.GetValue()); - - if ( pBoxInfoItem->IsMinDist() ) - { - aLeftMF.SetFirst( nMinValue ); - aRightMF.SetFirst( nMinValue ); - aTopMF.SetFirst( nMinValue ); - aBottomMF.SetFirst( nMinValue ); - } - - if ( pBoxInfoItem->IsDist() ) - { - if( rSet.GetItemState( nWhichBox, sal_True ) >= SFX_ITEM_DEFAULT ) - { - sal_Bool bIsAnyBorderVisible = aFrameSel.IsAnyBorderVisible(); - if( !bIsAnyBorderVisible || !pBoxInfoItem->IsMinDist() ) - { - aLeftMF.SetMin( 0 ); - aLeftMF.SetFirst( 0 ); - aRightMF.SetMin( 0 ); - aRightMF.SetFirst( 0 ); - aTopMF.SetMin( 0 ); - aTopMF.SetFirst( 0 ); - aBottomMF.SetMin( 0 ); - aBottomMF.SetFirst( 0 ); - } - long nLeftDist = pBoxItem->GetDistance( BOX_LINE_LEFT); - SetMetricValue( aLeftMF, nLeftDist, eCoreUnit ); - long nRightDist = pBoxItem->GetDistance( BOX_LINE_RIGHT); - SetMetricValue( aRightMF, nRightDist, eCoreUnit ); - long nTopDist = pBoxItem->GetDistance( BOX_LINE_TOP); - SetMetricValue( aTopMF, nTopDist, eCoreUnit ); - long nBottomDist = pBoxItem->GetDistance( BOX_LINE_BOTTOM); - SetMetricValue( aBottomMF, nBottomDist, eCoreUnit ); - - // ist der Abstand auf nicht-default gesetzt, - // dann soll der Wert auch nicht - // mehr autom. veraendert werden - - // if the distance is set with no active border line - // or it is null with an active border line - // no automatic changes should be made - const long nDefDist = bIsAnyBorderVisible ? pBoxInfoItem->GetDefDist() : 0; - sal_Bool bDiffDist = (nDefDist != nLeftDist || - nDefDist != nRightDist || - nDefDist != nTopDist || - nDefDist != nBottomDist); - if((pBoxItem->GetDistance() || - bIsAnyBorderVisible) && bDiffDist ) - { - aLeftMF.SetModifyFlag(); - aRightMF.SetModifyFlag(); - aTopMF.SetModifyFlag(); - aBottomMF.SetModifyFlag(); - } - } - else - { - // #106224# different margins -> do not fill the edits - aLeftMF.SetText( String() ); - aRightMF.SetText( String() ); - aTopMF.SetText( String() ); - aBottomMF.SetText( String() ); - } - } - aLeftMF.SaveValue(); - aRightMF.SaveValue(); - aTopMF.SaveValue(); - aBottomMF.SaveValue(); - } - } - } - else - { - // ResetFrameLine-Aufrufe einsparen: - aFrameSel.HideAllBorders(); - } - - //------------------------------------------------------------- - // Linie/Linienfarbe in Controllern darstellen, wenn eindeutig: - //------------------------------------------------------------- - { - // Do all visible lines show the same line widths? - long nWidth; - SvxBorderStyle nStyle; - bool bWidthEq = aFrameSel.GetVisibleWidth( nWidth, nStyle ); - if( bWidthEq ) - { - // Determine the width first as some styles can be missing depending on it - sal_Int64 nWidthPt = static_cast<sal_Int64>(MetricField::ConvertDoubleValue( - sal_Int64( nWidth ), aLineWidthMF.GetDecimalDigits( ), - MAP_TWIP,aLineWidthMF.GetUnit() )); - aLineWidthMF.SetValue( nWidthPt ); - aLbLineStyle.SetWidth( nWidth ); - - // then set the style - aLbLineStyle.SelectEntry( nStyle ); - } - else - aLbLineStyle.SelectEntryPos( 1 ); - - // Do all visible lines show the same line color? - Color aColor; - bool bColorEq = aFrameSel.GetVisibleColor( aColor ); - if( !bColorEq ) - aColor.SetColor( COL_BLACK ); - - sal_uInt16 nSelPos = aLbLineColor.GetEntryPos( aColor ); - if( nSelPos == LISTBOX_ENTRY_NOTFOUND ) - nSelPos = aLbLineColor.InsertEntry( aColor, SVX_RESSTR( RID_SVXSTR_COLOR_USER ) ); - - aLbLineColor.SelectEntryPos( nSelPos ); - aLbLineStyle.SetColor( aColor ); - - // Select all visible lines, if they are all equal. - if( bWidthEq && bColorEq ) - aFrameSel.SelectAllVisibleBorders(); - - // set the current style and color (caches style in control even if nothing is selected) - SelStyleHdl_Impl( &aLbLineStyle ); - SelColHdl_Impl( &aLbLineColor ); - } - - sal_Bool bEnable = aWndShadows.GetSelectItemId() > 1 ; - aFtShadowSize.Enable(bEnable); - aEdShadowSize.Enable(bEnable); - aFtShadowColor.Enable(bEnable); - aLbShadowColor.Enable(bEnable); - - aWndPresets.SetNoSelection(); - - // - keine Line - sollte nicht selektiert sein - - if ( aLbLineStyle.GetSelectEntryPos() == 0 ) - { - aLbLineStyle.SelectEntryPos( 1 ); - SelStyleHdl_Impl( &aLbLineStyle ); - } - - const SfxPoolItem* pItem; - SfxObjectShell* pShell; - if(SFX_ITEM_SET == rSet.GetItemState(SID_HTML_MODE, sal_False, &pItem) || - ( 0 != (pShell = SfxObjectShell::Current()) && - 0 != (pItem = pShell->GetItem(SID_HTML_MODE)))) - { - sal_uInt16 nHtmlMode = ((SfxUInt16Item*)pItem)->GetValue(); - if(nHtmlMode & HTMLMODE_ON) - { - //Im Html-Mode gibt es keinen Schatten und nur komplette Umrandungen - aFtShadowPos .Disable(); - aWndShadows .Disable(); - aFtShadowSize .Disable(); - aEdShadowSize .Disable(); - aFtShadowColor.Disable(); - aLbShadowColor.Disable(); - aFlShadow .Disable(); - - sal_uInt16 nLBCount = aLbLineStyle.GetEntryCount(); - // ist es ein Absatzdialog, dann alle Linien fuer - // Sw-Export, sonst ist die Page nicht da - if(!(mbHorEnabled || mbVerEnabled) - && 0 == (nHtmlMode & HTMLMODE_FULL_ABS_POS) && - SFX_ITEM_AVAILABLE > rSet.GetItemState(GetWhich( SID_ATTR_PARA_LINESPACE ))) - { - for( sal_uInt16 i = nLBCount - 1; i > LINESTYLE_HTML_MAX; --i) - aLbLineStyle.RemoveEntry(i); - } - - if( !(nSWMode & SW_BORDER_MODE_TABLE) ) - { - aUserDefFT.Disable(); - aFrameSel.Disable(); - aWndPresets.RemoveItem(3); - aWndPresets.RemoveItem(4); - aWndPresets.RemoveItem(5); - } - } - } - - LinesChanged_Impl( 0 ); -} - -// ----------------------------------------------------------------------- - -int SvxBorderTabPage::DeactivatePage( SfxItemSet* _pSet ) -{ - if ( _pSet ) - FillItemSet( *_pSet ); - - return LEAVE_PAGE; -} - -// ----------------------------------------------------------------------- - -#define IS_DONT_CARE(a) ((a).GetState() == svx::FRAMESTATE_DONTCARE ) - -sal_Bool SvxBorderTabPage::FillItemSet( SfxItemSet& rCoreAttrs ) -{ - bool bAttrsChanged = SfxTabPage::FillItemSet( rCoreAttrs ); - - sal_Bool bPut = sal_True; - sal_uInt16 nBoxWhich = GetWhich( SID_ATTR_BORDER_OUTER ); - sal_uInt16 nBoxInfoWhich = rCoreAttrs.GetPool()->GetWhich( SID_ATTR_BORDER_INNER, sal_False ); - const SfxItemSet& rOldSet = GetItemSet(); - SvxBoxItem aBoxItem ( nBoxWhich ); - SvxBoxInfoItem aBoxInfoItem ( nBoxInfoWhich ); - SvxBoxItem* pOldBoxItem = (SvxBoxItem*)GetOldItem( rCoreAttrs, SID_ATTR_BORDER_OUTER ); - - SfxMapUnit eCoreUnit = rOldSet.GetPool()->GetMetric( nBoxWhich ); - const SfxPoolItem* pOld = 0; - - //------------------ - // Umrandung aussen: - //------------------ - typedef ::std::pair<svx::FrameBorderType,sal_uInt16> TBorderPair; - TBorderPair eTypes1[] = { - TBorderPair(svx::FRAMEBORDER_TOP,BOX_LINE_TOP), - TBorderPair(svx::FRAMEBORDER_BOTTOM,BOX_LINE_BOTTOM), - TBorderPair(svx::FRAMEBORDER_LEFT,BOX_LINE_LEFT), - TBorderPair(svx::FRAMEBORDER_RIGHT,BOX_LINE_RIGHT), - }; - - for (sal_uInt32 i=0; i < SAL_N_ELEMENTS(eTypes1); ++i) - aBoxItem.SetLine( aFrameSel.GetFrameBorderStyle( eTypes1[i].first ), eTypes1[i].second ); - - //-------------------------------- - // Umrandung hor/ver und TableFlag - //-------------------------------- - TBorderPair eTypes2[] = { - TBorderPair(svx::FRAMEBORDER_HOR,BOXINFO_LINE_HORI), - TBorderPair(svx::FRAMEBORDER_VER,BOXINFO_LINE_VERT) - }; - for (sal_uInt32 j=0; j < SAL_N_ELEMENTS(eTypes2); ++j) - aBoxInfoItem.SetLine( aFrameSel.GetFrameBorderStyle( eTypes2[j].first ), eTypes2[j].second ); - - aBoxInfoItem.EnableHor( mbHorEnabled ); - aBoxInfoItem.EnableVer( mbVerEnabled ); - - //------------------- - // Abstand nach Innen - //------------------- - if( aLeftMF.IsVisible() ) - { - // #i40405# enable distance controls for next dialog call - aBoxInfoItem.SetDist( sal_True ); - - if( !mbUseMarginItem ) - { - // #106224# all edits empty: do nothing - if( aLeftMF.GetText().Len() || aRightMF.GetText().Len() || - aTopMF.GetText().Len() || aBottomMF.GetText().Len() ) - { - if ( ((mbHorEnabled || mbVerEnabled || (nSWMode & SW_BORDER_MODE_TABLE)) && - (aLeftMF.IsModified()||aRightMF.IsModified()|| - aTopMF.IsModified()||aBottomMF.IsModified()) )|| - aFrameSel.GetFrameBorderState( svx::FRAMEBORDER_TOP ) != svx::FRAMESTATE_HIDE - || aFrameSel.GetFrameBorderState( svx::FRAMEBORDER_BOTTOM ) != svx::FRAMESTATE_HIDE - || aFrameSel.GetFrameBorderState( svx::FRAMEBORDER_LEFT ) != svx::FRAMESTATE_HIDE - || aFrameSel.GetFrameBorderState( svx::FRAMEBORDER_RIGHT ) != svx::FRAMESTATE_HIDE ) - { - SvxBoxInfoItem* pOldBoxInfoItem = (SvxBoxInfoItem*)GetOldItem( - rCoreAttrs, SID_ATTR_BORDER_INNER ); - if ( - !pOldBoxItem || - aLeftMF .GetText() != aLeftMF .GetSavedValue() || - aRightMF .GetText() != aRightMF .GetSavedValue() || - aTopMF .GetText() != aTopMF .GetSavedValue() || - aBottomMF.GetText() != aBottomMF.GetSavedValue() || - nMinValue == aLeftMF .GetValue() || - nMinValue == aRightMF .GetValue() || - nMinValue == aTopMF .GetValue() || - nMinValue == aBottomMF.GetValue() || - (pOldBoxInfoItem && !pOldBoxInfoItem->IsValid(VALID_DISTANCE)) - ) - { - aBoxItem.SetDistance( (sal_uInt16)GetCoreValue( aLeftMF, eCoreUnit ), BOX_LINE_LEFT ); - aBoxItem.SetDistance( (sal_uInt16)GetCoreValue( aRightMF, eCoreUnit ), BOX_LINE_RIGHT ); - aBoxItem.SetDistance( (sal_uInt16)GetCoreValue( aTopMF, eCoreUnit ), BOX_LINE_TOP ); - aBoxItem.SetDistance( (sal_uInt16)GetCoreValue( aBottomMF, eCoreUnit ), BOX_LINE_BOTTOM); - } - else - { - aBoxItem.SetDistance(pOldBoxItem->GetDistance(BOX_LINE_LEFT ), BOX_LINE_LEFT); - aBoxItem.SetDistance(pOldBoxItem->GetDistance(BOX_LINE_RIGHT), BOX_LINE_RIGHT); - aBoxItem.SetDistance(pOldBoxItem->GetDistance(BOX_LINE_TOP ), BOX_LINE_TOP); - aBoxItem.SetDistance(pOldBoxItem->GetDistance(BOX_LINE_BOTTOM), BOX_LINE_BOTTOM); - } - aBoxInfoItem.SetValid( VALID_DISTANCE, sal_True ); - } - else - aBoxInfoItem.SetValid( VALID_DISTANCE, sal_False ); - } - } - } - - //------------------------------------------ - // Don't Care Status im Info-Item vermerken: - //------------------------------------------ - aBoxInfoItem.SetValid( VALID_TOP, aFrameSel.GetFrameBorderState( svx::FRAMEBORDER_TOP ) != svx::FRAMESTATE_DONTCARE ); - aBoxInfoItem.SetValid( VALID_BOTTOM, aFrameSel.GetFrameBorderState( svx::FRAMEBORDER_BOTTOM ) != svx::FRAMESTATE_DONTCARE ); - aBoxInfoItem.SetValid( VALID_LEFT, aFrameSel.GetFrameBorderState( svx::FRAMEBORDER_LEFT ) != svx::FRAMESTATE_DONTCARE ); - aBoxInfoItem.SetValid( VALID_RIGHT, aFrameSel.GetFrameBorderState( svx::FRAMEBORDER_RIGHT ) != svx::FRAMESTATE_DONTCARE ); - aBoxInfoItem.SetValid( VALID_HORI, aFrameSel.GetFrameBorderState( svx::FRAMEBORDER_HOR ) != svx::FRAMESTATE_DONTCARE ); - aBoxInfoItem.SetValid( VALID_VERT, aFrameSel.GetFrameBorderState( svx::FRAMEBORDER_VER ) != svx::FRAMESTATE_DONTCARE ); - - // - // Put oder Clear der Umrandung? - // - bPut = sal_True; - - if ( SFX_ITEM_DEFAULT == rOldSet.GetItemState( nBoxWhich, sal_False )) - { - bPut = aBoxItem != (const SvxBoxItem&)(rOldSet.Get(nBoxWhich)) ? sal_True : sal_False; - } - if( SFX_ITEM_DEFAULT == rOldSet.GetItemState( nBoxInfoWhich, sal_False ) ) - { - const SvxBoxInfoItem& rOldBoxInfo = (const SvxBoxInfoItem&) - rOldSet.Get(nBoxInfoWhich); - - aBoxInfoItem.SetMinDist( rOldBoxInfo.IsMinDist() ); - aBoxInfoItem.SetDefDist( rOldBoxInfo.GetDefDist() ); - bPut |= (aBoxInfoItem != rOldBoxInfo ); - } - - if ( bPut ) - { - if ( !pOldBoxItem || !( *pOldBoxItem == aBoxItem ) ) - { - rCoreAttrs.Put( aBoxItem ); - bAttrsChanged |= sal_True; - } - pOld = GetOldItem( rCoreAttrs, SID_ATTR_BORDER_INNER, sal_False ); - - if ( !pOld || !( *(const SvxBoxInfoItem*)pOld == aBoxInfoItem ) ) - { - rCoreAttrs.Put( aBoxInfoItem ); - bAttrsChanged |= sal_True; - } - } - else - { - rCoreAttrs.ClearItem( nBoxWhich ); - rCoreAttrs.ClearItem( nBoxInfoWhich ); - } - - return bAttrsChanged; -} - -// ----------------------------------------------------------------------- - -void SvxBorderTabPage::HideShadowControls() -{ - aFtShadowPos.Hide(); - aWndShadows.Hide(); - aFtShadowSize.Hide(); - aEdShadowSize.Hide(); - aFtShadowColor.Hide(); - aLbShadowColor.Hide(); - aFlShadow.Hide(); -} - -// ----------------------------------------------------------------------- - -IMPL_LINK( SvxBorderTabPage, SelPreHdl_Impl, void *, EMPTYARG ) -{ - const svx::FrameBorderState SHOW = svx::FRAMESTATE_SHOW; - const svx::FrameBorderState HIDE = svx::FRAMESTATE_HIDE; - const svx::FrameBorderState DONT = svx::FRAMESTATE_DONTCARE; - - static const svx::FrameBorderState ppeStates[][ svx::FRAMEBORDERTYPE_COUNT ] = - { /* Left Right Top Bot Hor Ver TLBR BLTR */ -/* ---------------------+--------------------------------------------------- */ -/* IID_PRE_CELL_NONE */ { HIDE, HIDE, HIDE, HIDE, HIDE, HIDE, HIDE, HIDE }, -/* IID_PRE_CELL_ALL */ { SHOW, SHOW, SHOW, SHOW, HIDE, HIDE, HIDE, HIDE }, -/* IID_PRE_CELL_LR */ { SHOW, SHOW, HIDE, HIDE, HIDE, HIDE, HIDE, HIDE }, -/* IID_PRE_CELL_TB */ { HIDE, HIDE, SHOW, SHOW, HIDE, HIDE, HIDE, HIDE }, -/* IID_PRE_CELL_L */ { SHOW, HIDE, HIDE, HIDE, HIDE, HIDE, HIDE, HIDE }, -/* IID_PRE_CELL_DIAG */ { HIDE, HIDE, HIDE, HIDE, HIDE, HIDE, SHOW, SHOW }, -/* IID_PRE_HOR_NONE */ { HIDE, HIDE, HIDE, HIDE, HIDE, HIDE, HIDE, HIDE }, -/* IID_PRE_HOR_OUTER */ { SHOW, SHOW, SHOW, SHOW, HIDE, HIDE, HIDE, HIDE }, -/* IID_PRE_HOR_HOR */ { HIDE, HIDE, SHOW, SHOW, SHOW, HIDE, HIDE, HIDE }, -/* IID_PRE_HOR_ALL */ { SHOW, SHOW, SHOW, SHOW, SHOW, HIDE, HIDE, HIDE }, -/* IID_PRE_HOR_OUTER2 */ { SHOW, SHOW, SHOW, SHOW, DONT, HIDE, HIDE, HIDE }, -/* IID_PRE_VER_NONE */ { HIDE, HIDE, HIDE, HIDE, HIDE, HIDE, HIDE, HIDE }, -/* IID_PRE_VER_OUTER */ { SHOW, SHOW, SHOW, SHOW, HIDE, HIDE, HIDE, HIDE }, -/* IID_PRE_VER_VER */ { SHOW, SHOW, HIDE, HIDE, HIDE, SHOW, HIDE, HIDE }, -/* IID_PRE_VER_ALL */ { SHOW, SHOW, SHOW, SHOW, HIDE, SHOW, HIDE, HIDE }, -/* IID_PRE_VER_OUTER2 */ { SHOW, SHOW, SHOW, SHOW, HIDE, DONT, HIDE, HIDE }, -/* IID_PRE_TABLE_NONE */ { HIDE, HIDE, HIDE, HIDE, HIDE, HIDE, HIDE, HIDE }, -/* IID_PRE_TABLE_OUTER */ { SHOW, SHOW, SHOW, SHOW, HIDE, HIDE, HIDE, HIDE }, -/* IID_PRE_TABLE_OUTERH */ { SHOW, SHOW, SHOW, SHOW, SHOW, HIDE, HIDE, HIDE }, -/* IID_PRE_TABLE_ALL */ { SHOW, SHOW, SHOW, SHOW, SHOW, SHOW, HIDE, HIDE }, -/* IID_PRE_TABLE_OUTER2 */ { SHOW, SHOW, SHOW, SHOW, DONT, DONT, HIDE, HIDE } - }; - - // first hide and deselect all frame borders - aFrameSel.HideAllBorders(); - aFrameSel.DeselectAllBorders(); - - // Using image ID to find correct line in table above. - sal_uInt16 nLine = GetPresetImageId( aWndPresets.GetSelectItemId() ) - 1; - - // Apply all styles from the table - for( int nBorder = 0; nBorder < svx::FRAMEBORDERTYPE_COUNT; ++nBorder ) - { - svx::FrameBorderType eBorder = svx::GetFrameBorderTypeFromIndex( nBorder ); - switch( ppeStates[ nLine ][ nBorder ] ) - { - case SHOW: aFrameSel.SelectBorder( eBorder ); break; - case HIDE: /* nothing to do */ break; - case DONT: aFrameSel.SetBorderDontCare( eBorder ); break; - } - } - - // Show all lines that have been selected above - if( aFrameSel.IsAnyBorderSelected() ) - { - // any visible style, but "no-line" in line list box? -> use hair-line - if( (aLbLineStyle.GetSelectEntryPos() == 0) || (aLbLineStyle.GetSelectEntryPos() == LISTBOX_ENTRY_NOTFOUND) ) - aLbLineStyle.SelectEntryPos( 1 ); - - // set current style to all previously selected lines - SelStyleHdl_Impl( &aLbLineStyle ); - SelColHdl_Impl( &aLbLineColor ); - } - - // Presets ValueSet does not show a selection (used as push buttons). - aWndPresets.SetNoSelection(); - - LinesChanged_Impl( 0 ); - return 0; -} - -// ----------------------------------------------------------------------- - -IMPL_LINK( SvxBorderTabPage, SelSdwHdl_Impl, void *, EMPTYARG ) -{ - sal_Bool bEnable = aWndShadows.GetSelectItemId() > 1; - aFtShadowSize.Enable(bEnable); - aEdShadowSize.Enable(bEnable); - aFtShadowColor.Enable(bEnable); - aLbShadowColor.Enable(bEnable); - return 0; -} - -// ----------------------------------------------------------------------- - -IMPL_LINK( SvxBorderTabPage, SelColHdl_Impl, ListBox *, pLb ) -{ - ColorListBox* pColLb = (ColorListBox*)pLb; - - if ( pLb == &aLbLineColor ) - { - aFrameSel.SetColorToSelection( pColLb->GetSelectEntryColor() ); - aLbLineStyle.SetColor( pColLb->GetSelectEntryColor() ); - } - - return 0; -} - -IMPL_LINK( SvxBorderTabPage, ModifyWidthHdl_Impl, void *, EMPTYARG ) -{ - sal_Int64 nVal = static_cast<sal_Int64>(MetricField::ConvertDoubleValue( - aLineWidthMF.GetValue( ), - aLineWidthMF.GetDecimalDigits( ), - aLineWidthMF.GetUnit(), MAP_TWIP )); - aLbLineStyle.SetWidth( nVal ); - - aFrameSel.SetStyleToSelection( nVal, - SvxBorderStyle( aLbLineStyle.GetSelectEntryStyle() ) ); - - return 0; -} - -// ----------------------------------------------------------------------- - -IMPL_LINK( SvxBorderTabPage, SelStyleHdl_Impl, ListBox *, pLb ) -{ - if ( pLb == &aLbLineStyle ) - { - sal_Int64 nVal = static_cast<sal_Int64>(MetricField::ConvertDoubleValue( - aLineWidthMF.GetValue( ), - aLineWidthMF.GetDecimalDigits( ), - aLineWidthMF.GetUnit(), MAP_TWIP )); - aFrameSel.SetStyleToSelection ( nVal, - SvxBorderStyle( aLbLineStyle.GetSelectEntryStyle() ) ); - } - - return 0; -} - -// ============================================================================ -// ValueSet handling -// ============================================================================ - -// number of preset images to show -const sal_uInt16 SVX_BORDER_PRESET_COUNT = 5; - -// number of shadow images to show -const sal_uInt16 SVX_BORDER_SHADOW_COUNT = 5; - -// ---------------------------------------------------------------------------- - -sal_uInt16 SvxBorderTabPage::GetPresetImageId( sal_uInt16 nValueSetIdx ) const -{ - // table with all sets of predefined border styles - static const sal_uInt16 ppnImgIds[][ SVX_BORDER_PRESET_COUNT ] = - { - // simple cell without diagonal frame borders - { IID_PRE_CELL_NONE, IID_PRE_CELL_ALL, IID_PRE_CELL_LR, IID_PRE_CELL_TB, IID_PRE_CELL_L }, - // simple cell with diagonal frame borders - { IID_PRE_CELL_NONE, IID_PRE_CELL_ALL, IID_PRE_CELL_LR, IID_PRE_CELL_TB, IID_PRE_CELL_DIAG }, - // with horizontal inner frame border - { IID_PRE_HOR_NONE, IID_PRE_HOR_OUTER, IID_PRE_HOR_HOR, IID_PRE_HOR_ALL, IID_PRE_HOR_OUTER2 }, - // with vertical inner frame border - { IID_PRE_VER_NONE, IID_PRE_VER_OUTER, IID_PRE_VER_VER, IID_PRE_VER_ALL, IID_PRE_VER_OUTER2 }, - // with horizontal and vertical inner frame borders - { IID_PRE_TABLE_NONE, IID_PRE_TABLE_OUTER, IID_PRE_TABLE_OUTERH, IID_PRE_TABLE_ALL, IID_PRE_TABLE_OUTER2 } - }; - - // find correct set of presets - int nLine = 0; - if( !mbHorEnabled && !mbVerEnabled ) - nLine = (mbTLBREnabled || mbBLTREnabled) ? 1 : 0; - else if( mbHorEnabled && !mbVerEnabled ) - nLine = 2; - else if( !mbHorEnabled && mbVerEnabled ) - nLine = 3; - else - nLine = 4; - - DBG_ASSERT( (1 <= nValueSetIdx) && (nValueSetIdx <= SVX_BORDER_PRESET_COUNT), - "SvxBorderTabPage::GetPresetImageId - wrong index" ); - return ppnImgIds[ nLine ][ nValueSetIdx - 1 ]; -} - -sal_uInt16 SvxBorderTabPage::GetPresetStringId( sal_uInt16 nValueSetIdx ) const -{ - // string resource IDs for each image (in order of the IID_PRE_* image IDs) - static const sal_uInt16 pnStrIds[] = - { - RID_SVXSTR_TABLE_PRESET_NONE, - RID_SVXSTR_PARA_PRESET_ALL, - RID_SVXSTR_PARA_PRESET_LEFTRIGHT, - RID_SVXSTR_PARA_PRESET_TOPBOTTOM, - RID_SVXSTR_PARA_PRESET_ONLYLEFT, - RID_SVXSTR_PARA_PRESET_DIAGONAL, - - RID_SVXSTR_TABLE_PRESET_NONE, - RID_SVXSTR_TABLE_PRESET_ONLYOUTER, - RID_SVXSTR_HOR_PRESET_ONLYHOR, - RID_SVXSTR_TABLE_PRESET_OUTERALL, - RID_SVXSTR_TABLE_PRESET_OUTERINNER, - - RID_SVXSTR_TABLE_PRESET_NONE, - RID_SVXSTR_TABLE_PRESET_ONLYOUTER, - RID_SVXSTR_VER_PRESET_ONLYVER, - RID_SVXSTR_TABLE_PRESET_OUTERALL, - RID_SVXSTR_TABLE_PRESET_OUTERINNER, - - RID_SVXSTR_TABLE_PRESET_NONE, - RID_SVXSTR_TABLE_PRESET_ONLYOUTER, - RID_SVXSTR_TABLE_PRESET_OUTERHORI, - RID_SVXSTR_TABLE_PRESET_OUTERALL, - RID_SVXSTR_TABLE_PRESET_OUTERINNER - }; - return pnStrIds[ GetPresetImageId( nValueSetIdx ) - 1 ]; -} - -// ---------------------------------------------------------------------------- - -void SvxBorderTabPage::FillPresetVS() -{ - ImageList& rImgList = aBorderImgLst; - Size aImgSize( rImgList.GetImage( IID_PRE_CELL_NONE ).GetSizePixel() ); - - // basic initialization of the ValueSet - aWndPresets.SetColCount( SVX_BORDER_PRESET_COUNT ); - aWndPresets.SetStyle( aWndPresets.GetStyle() | WB_ITEMBORDER | WB_DOUBLEBORDER ); - aWndPresets.SetSizePixel( aWndPresets.CalcWindowSizePixel( aImgSize ) ); - - // insert images and help texts - for( sal_uInt16 nVSIdx = 1; nVSIdx <= SVX_BORDER_PRESET_COUNT; ++nVSIdx ) - { - aWndPresets.InsertItem( nVSIdx ); - aWndPresets.SetItemImage( nVSIdx, rImgList.GetImage( GetPresetImageId( nVSIdx ) ) ); - aWndPresets.SetItemText( nVSIdx, CUI_RESSTR( GetPresetStringId( nVSIdx ) ) ); - } - - // show the control - aWndPresets.SetNoSelection(); - aWndPresets.Show(); -} - -// ---------------------------------------------------------------------------- - -void SvxBorderTabPage::FillShadowVS() -{ - ImageList& rImgList = aShadowImgLst; - Size aImgSize( rImgList.GetImage( IID_SHADOWNONE ).GetSizePixel() ); - - // basic initialization of the ValueSet - aWndShadows.SetColCount( SVX_BORDER_SHADOW_COUNT ); - aWndShadows.SetStyle( aWndShadows.GetStyle() | WB_ITEMBORDER | WB_DOUBLEBORDER ); - aWndShadows.SetSizePixel( aWndShadows.CalcWindowSizePixel( aImgSize ) ); - - // image resource IDs - static const sal_uInt16 pnImgIds[ SVX_BORDER_SHADOW_COUNT ] = - { IID_SHADOWNONE, IID_SHADOW_BOT_RIGHT, IID_SHADOW_TOP_RIGHT, IID_SHADOW_BOT_LEFT, IID_SHADOW_TOP_LEFT }; - // string resource IDs for each image - static const sal_uInt16 pnStrIds[ SVX_BORDER_SHADOW_COUNT ] = - { RID_SVXSTR_SHADOW_STYLE_NONE, RID_SVXSTR_SHADOW_STYLE_BOTTOMRIGHT, RID_SVXSTR_SHADOW_STYLE_TOPRIGHT, RID_SVXSTR_SHADOW_STYLE_BOTTOMLEFT, RID_SVXSTR_SHADOW_STYLE_TOPLEFT }; - - // insert images and help texts - for( sal_uInt16 nVSIdx = 1; nVSIdx <= SVX_BORDER_SHADOW_COUNT; ++nVSIdx ) - { - aWndShadows.InsertItem( nVSIdx ); - aWndShadows.SetItemImage( nVSIdx, rImgList.GetImage( pnImgIds[ nVSIdx - 1 ] ) ); - aWndShadows.SetItemText( nVSIdx, CUI_RESSTR( pnStrIds[ nVSIdx - 1 ] ) ); - } - - // show the control - aWndShadows.SelectItem( 1 ); - aWndShadows.Show(); -} - -// ---------------------------------------------------------------------------- - -void SvxBorderTabPage::FillValueSets() -{ - FillPresetVS(); - FillShadowVS(); -} - -// ============================================================================ -Color lcl_mediumColor( Color aMain, Color /*aDefault*/ ) -{ - return SvxBorderLine::threeDMediumColor( aMain ); -} - -void SvxBorderTabPage::FillLineListBox_Impl() -{ - aLbLineStyle.SetSourceUnit( FUNIT_TWIP ); - - aLbLineStyle.SetNone( SVX_RESSTR( RID_SVXSTR_NONE ) ); - - // Simple lines - aLbLineStyle.InsertEntry( SvxBorderLine::getWidthImpl( SOLID ), SOLID ); - aLbLineStyle.InsertEntry( SvxBorderLine::getWidthImpl( DOTTED ), DOTTED ); - aLbLineStyle.InsertEntry( SvxBorderLine::getWidthImpl( DASHED ), DASHED ); - - // Double lines - aLbLineStyle.InsertEntry( SvxBorderLine::getWidthImpl( DOUBLE ), DOUBLE ); - aLbLineStyle.InsertEntry( SvxBorderLine::getWidthImpl( THINTHICK_SMALLGAP ), THINTHICK_SMALLGAP, 20 ); - aLbLineStyle.InsertEntry( SvxBorderLine::getWidthImpl( THINTHICK_MEDIUMGAP ), THINTHICK_MEDIUMGAP ); - aLbLineStyle.InsertEntry( SvxBorderLine::getWidthImpl( THINTHICK_LARGEGAP ), THINTHICK_LARGEGAP ); - aLbLineStyle.InsertEntry( SvxBorderLine::getWidthImpl( THICKTHIN_SMALLGAP ), THICKTHIN_SMALLGAP, 20 ); - aLbLineStyle.InsertEntry( SvxBorderLine::getWidthImpl( THICKTHIN_MEDIUMGAP ), THICKTHIN_MEDIUMGAP ); - aLbLineStyle.InsertEntry( SvxBorderLine::getWidthImpl( THICKTHIN_LARGEGAP ), THICKTHIN_LARGEGAP ); - - // Engraved / Embossed - aLbLineStyle.InsertEntry( SvxBorderLine::getWidthImpl( EMBOSSED ), EMBOSSED, 15, - &SvxBorderLine::threeDLightColor, &SvxBorderLine::threeDDarkColor, - &lcl_mediumColor ); - aLbLineStyle.InsertEntry( SvxBorderLine::getWidthImpl( ENGRAVED ), ENGRAVED, 15, - &SvxBorderLine::threeDDarkColor, &SvxBorderLine::threeDLightColor, - &lcl_mediumColor ); - - // Inset / Outset - aLbLineStyle.InsertEntry( SvxBorderLine::getWidthImpl( OUTSET ), OUTSET, 10, - &SvxBorderLine::lightColor, &SvxBorderLine::darkColor ); - aLbLineStyle.InsertEntry( SvxBorderLine::getWidthImpl( INSET ), INSET, 10, - &SvxBorderLine::darkColor, &SvxBorderLine::lightColor ); - - sal_Int64 nVal = static_cast<sal_Int64>(MetricField::ConvertDoubleValue( - aLineWidthMF.GetValue( ), - aLineWidthMF.GetDecimalDigits( ), - aLineWidthMF.GetUnit(), MAP_TWIP )); - aLbLineStyle.SetWidth( nVal ); -} - -// ----------------------------------------------------------------------- -IMPL_LINK( SvxBorderTabPage, LinesChanged_Impl, void*, EMPTYARG ) -{ - if(!mbUseMarginItem && aLeftMF.IsVisible()) - { - sal_Bool bLineSet = aFrameSel.IsAnyBorderVisible(); - sal_Bool bMinAllowed = 0 != (nSWMode & (SW_BORDER_MODE_FRAME|SW_BORDER_MODE_TABLE)); - sal_Bool bSpaceModified = aLeftMF .IsModified()|| - aRightMF .IsModified()|| - aTopMF .IsModified()|| - aBottomMF.IsModified(); - - if(bLineSet) - { - if(!bMinAllowed) - { - aLeftMF .SetFirst(nMinValue); - aRightMF .SetFirst(nMinValue); - aTopMF .SetFirst(nMinValue); - aBottomMF.SetFirst(nMinValue); - } - if(!bSpaceModified) - { - aLeftMF .SetValue(nMinValue); - aRightMF .SetValue(nMinValue); - aTopMF .SetValue(nMinValue); - aBottomMF.SetValue(nMinValue); - } - } - else - { - aLeftMF .SetMin(0); - aRightMF .SetMin(0); - aTopMF .SetMin(0); - aBottomMF.SetMin(0); - aLeftMF .SetFirst(0); - aRightMF .SetFirst(0); - aTopMF .SetFirst(0); - aBottomMF.SetFirst(0); - if(!bSpaceModified) - { - aLeftMF .SetValue(0); - aRightMF .SetValue(0); - aTopMF .SetValue(0); - aBottomMF.SetValue(0); - } - } - //fuer Tabellen ist alles erlaubt - sal_uInt16 nValid = VALID_TOP|VALID_BOTTOM|VALID_LEFT|VALID_RIGHT; - - //fuer Rahmen und Absatz wird das Edit disabled, wenn keine Border gesetzt ist - if(nSWMode & (SW_BORDER_MODE_FRAME|SW_BORDER_MODE_PARA)) - { - if(bLineSet) - { - nValid = (aFrameSel.GetFrameBorderState( svx::FRAMEBORDER_TOP) == svx::FRAMESTATE_SHOW) ? VALID_TOP : 0; - nValid |= (aFrameSel.GetFrameBorderState( svx::FRAMEBORDER_BOTTOM) == svx::FRAMESTATE_SHOW) ? VALID_BOTTOM : 0; - nValid |= (aFrameSel.GetFrameBorderState( svx::FRAMEBORDER_LEFT) == svx::FRAMESTATE_SHOW) ? VALID_LEFT : 0; - nValid |= (aFrameSel.GetFrameBorderState( svx::FRAMEBORDER_RIGHT ) == svx::FRAMESTATE_SHOW) ? VALID_RIGHT : 0; - } - else - nValid = 0; - } - aLeftFT.Enable(0 != (nValid&VALID_LEFT)); - aRightFT.Enable(0 != (nValid&VALID_RIGHT)); - aTopFT.Enable(0 != (nValid&VALID_TOP)); - aBottomFT.Enable(0 != (nValid&VALID_BOTTOM)); - aLeftMF.Enable(0 != (nValid&VALID_LEFT)); - aRightMF.Enable(0 != (nValid&VALID_RIGHT)); - aTopMF.Enable(0 != (nValid&VALID_TOP)); - aBottomMF.Enable(0 != (nValid&VALID_BOTTOM)); - aSynchronizeCB.Enable( aRightMF.IsEnabled() || aTopMF.IsEnabled() || - aBottomMF.IsEnabled() || aLeftMF.IsEnabled() ); - } - return 0; -} - -// ----------------------------------------------------------------------- - -IMPL_LINK( SvxBorderTabPage, ModifyDistanceHdl_Impl, MetricField*, pField) -{ - if ( bSync ) - { - sal_Int64 nVal = pField->GetValue(); - if(pField != &aLeftMF) - aLeftMF.SetValue(nVal); - if(pField != &aRightMF) - aRightMF.SetValue(nVal); - if(pField != &aTopMF) - aTopMF.SetValue(nVal); - if(pField != &aBottomMF) - aBottomMF.SetValue(nVal); - } - return 0; -} - -IMPL_LINK( SvxBorderTabPage, SyncHdl_Impl, CheckBox*, pBox) -{ - bSync = pBox->IsChecked(); - return 0; -} - -void SvxBorderTabPage::DataChanged( const DataChangedEvent& rDCEvt ) -{ - if( (rDCEvt.GetType() == DATACHANGED_SETTINGS) && (rDCEvt.GetFlags() & SETTINGS_STYLE) ) - FillValueSets(); - - SfxTabPage::DataChanged( rDCEvt ); -} - -void SvxBorderTabPage::PageCreated (SfxAllItemSet aSet) -{ - SFX_ITEMSET_ARG (&aSet,pSWModeItem,SfxUInt16Item,SID_SWMODE_TYPE,sal_False); - SFX_ITEMSET_ARG (&aSet,pFlagItem,SfxUInt32Item,SID_FLAG_TYPE,sal_False); - if (pSWModeItem) - { - nSWMode = pSWModeItem->GetValue(); - // #i43593# - // show checkbox <aMergeWithNextCB> for format.paragraph - if ( nSWMode == SW_BORDER_MODE_PARA ) - { - aMergeWithNextCB.Show(); - aPropertiesFL.Show(); - } - // show checkbox <aMergeAdjacentBordersCB> for format.paragraph - else if ( nSWMode == SW_BORDER_MODE_TABLE ) - { - aMergeAdjacentBordersCB.Show(); - aPropertiesFL.Show(); - } - } - if (pFlagItem) - if ( ( pFlagItem->GetValue() & SVX_HIDESHADOWCTL ) == SVX_HIDESHADOWCTL ) - HideShadowControls(); -} - -// ============================================================================ - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |