diff options
Diffstat (limited to 'cui/source/tabpages/align.cxx')
-rw-r--r-- | cui/source/tabpages/align.cxx | 299 |
1 files changed, 299 insertions, 0 deletions
diff --git a/cui/source/tabpages/align.cxx b/cui/source/tabpages/align.cxx new file mode 100644 index 000000000000..f275cc084877 --- /dev/null +++ b/cui/source/tabpages/align.cxx @@ -0,0 +1,299 @@ +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2008 by Sun Microsystems, Inc. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * $RCSfile: align.cxx,v $ + * $Revision: 1.26.272.1 $ + * + * 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. + * + ************************************************************************/ + +// MARKER(update_precomp.py): autogen include statement, do not remove +#include "precompiled_cui.hxx" + +// include --------------------------------------------------------------- + +#include "align.hxx" + +#include <svx/svxenum.hxx> +#include <svx/dialogs.hrc> +#include <cuires.hrc> +#include "align.hrc" +#include <svx/rotmodit.hxx> + +#include <svx/algitem.hxx> +#include <svx/frmdiritem.hxx> +#include <dialmgr.hxx> +#include <svx/dlgutil.hxx> +#include <tools/shl.hxx> +#include <sfx2/app.hxx> +#include <sfx2/module.hxx> +#include <sfx2/itemconnect.hxx> +#include <svl/cjkoptions.hxx> +#include <svl/languageoptions.hxx> +#include <svtools/localresaccess.hxx> +#include <svx/flagsdef.hxx> //CHINA001 +#include <svl/intitem.hxx> //CHINA001 +#include <sfx2/request.hxx> //CHINA001 + +namespace svx { + +// item connections =========================================================== + +// horizontal alignment ------------------------------------------------------- + +typedef sfx::ValueItemWrapper< SvxHorJustifyItem, SvxCellHorJustify, USHORT > HorJustItemWrapper; +typedef sfx::ListBoxConnection< HorJustItemWrapper > HorJustConnection; + +static const HorJustConnection::MapEntryType s_pHorJustMap[] = +{ + { ALIGNDLG_HORALIGN_STD, SVX_HOR_JUSTIFY_STANDARD }, + { ALIGNDLG_HORALIGN_LEFT, SVX_HOR_JUSTIFY_LEFT }, + { ALIGNDLG_HORALIGN_CENTER, SVX_HOR_JUSTIFY_CENTER }, + { ALIGNDLG_HORALIGN_RIGHT, SVX_HOR_JUSTIFY_RIGHT }, + { ALIGNDLG_HORALIGN_BLOCK, SVX_HOR_JUSTIFY_BLOCK }, + { ALIGNDLG_HORALIGN_FILL, SVX_HOR_JUSTIFY_REPEAT }, + { LISTBOX_ENTRY_NOTFOUND, SVX_HOR_JUSTIFY_STANDARD } +}; + +// vertical alignment --------------------------------------------------------- + +typedef sfx::ValueItemWrapper< SvxVerJustifyItem, SvxCellVerJustify, USHORT > VerJustItemWrapper; +typedef sfx::ListBoxConnection< VerJustItemWrapper > VerJustConnection; + +static const VerJustConnection::MapEntryType s_pVerJustMap[] = +{ + { ALIGNDLG_VERALIGN_STD, SVX_VER_JUSTIFY_STANDARD }, + { ALIGNDLG_VERALIGN_TOP, SVX_VER_JUSTIFY_TOP }, + { ALIGNDLG_VERALIGN_MID, SVX_VER_JUSTIFY_CENTER }, + { ALIGNDLG_VERALIGN_BOTTOM, SVX_VER_JUSTIFY_BOTTOM }, + { LISTBOX_ENTRY_NOTFOUND, SVX_VER_JUSTIFY_STANDARD } +}; + +// cell rotate mode ----------------------------------------------------------- + +typedef sfx::ValueItemWrapper< SvxRotateModeItem, SvxRotateMode, USHORT > RotateModeItemWrapper; +typedef sfx::ValueSetConnection< RotateModeItemWrapper > RotateModeConnection; + +static const RotateModeConnection::MapEntryType s_pRotateModeMap[] = +{ + { IID_BOTTOMLOCK, SVX_ROTATE_MODE_BOTTOM }, + { IID_TOPLOCK, SVX_ROTATE_MODE_TOP }, + { IID_CELLLOCK, SVX_ROTATE_MODE_STANDARD }, + { VALUESET_ITEM_NOTFOUND, SVX_ROTATE_MODE_STANDARD } +}; + +// ============================================================================ + +static USHORT s_pRanges[] = +{ + SID_ATTR_ALIGN_HOR_JUSTIFY,SID_ATTR_ALIGN_VER_JUSTIFY, + SID_ATTR_ALIGN_STACKED,SID_ATTR_ALIGN_LINEBREAK, + SID_ATTR_ALIGN_INDENT,SID_ATTR_ALIGN_INDENT, + SID_ATTR_ALIGN_DEGREES,SID_ATTR_ALIGN_DEGREES, + SID_ATTR_ALIGN_LOCKPOS,SID_ATTR_ALIGN_LOCKPOS, + SID_ATTR_ALIGN_HYPHENATION,SID_ATTR_ALIGN_HYPHENATION, + SID_ATTR_ALIGN_ASIANVERTICAL,SID_ATTR_ALIGN_ASIANVERTICAL, + SID_ATTR_FRAMEDIRECTION,SID_ATTR_FRAMEDIRECTION, + SID_ATTR_ALIGN_SHRINKTOFIT,SID_ATTR_ALIGN_SHRINKTOFIT, + 0 +}; + +// ============================================================================ + +AlignmentTabPage::AlignmentTabPage( Window* pParent, const SfxItemSet& rCoreAttrs ) : + + SfxTabPage( pParent, CUI_RES( RID_SVXPAGE_ALIGNMENT ), rCoreAttrs ), + + maFlAlignment ( this, CUI_RES( FL_ALIGNMENT ) ), + maFtHorAlign ( this, CUI_RES( FT_HORALIGN ) ), + maLbHorAlign ( this, CUI_RES( LB_HORALIGN ) ), + maFtIndent ( this, CUI_RES( FT_INDENT ) ), + maEdIndent ( this, CUI_RES( ED_INDENT ) ), + maFtVerAlign ( this, CUI_RES( FT_VERALIGN ) ), + maLbVerAlign ( this, CUI_RES( LB_VERALIGN ) ), + + maFlOrient ( this, CUI_RES( FL_ORIENTATION ) ), + maCtrlDial ( this, CUI_RES( CTR_DIAL ) ), + maFtRotate ( this, CUI_RES( FT_DEGREES ) ), + maNfRotate ( this, CUI_RES( NF_DEGREES ) ), + maFtRefEdge ( this, CUI_RES( FT_BORDER_LOCK ) ), + maVsRefEdge ( this, CUI_RES( CTR_BORDER_LOCK ) ), + maCbStacked ( this, CUI_RES( BTN_TXTSTACKED ) ), + maCbAsianMode ( this, CUI_RES( BTN_ASIAN_VERTICAL ) ), + maOrientHlp ( maCtrlDial, maNfRotate, maCbStacked ), + + maFlProperties ( this, CUI_RES( FL_WRAP ) ), + maBtnWrap ( this, CUI_RES( BTN_WRAP ) ), + maBtnHyphen ( this, CUI_RES( BTN_HYPH ) ), + maBtnShrink ( this, CUI_RES( BTN_SHRINK ) ), + maFtFrameDir ( this, CUI_RES( FT_TEXTFLOW ) ), + maLbFrameDir ( this, CUI_RES( LB_FRAMEDIR ) ) +{ + InitVsRefEgde(); + + // windows to be disabled, if stacked text is turned ON + maOrientHlp.AddDependentWindow( maFtRotate, STATE_CHECK ); + maOrientHlp.AddDependentWindow( maFtRefEdge, STATE_CHECK ); + maOrientHlp.AddDependentWindow( maVsRefEdge, STATE_CHECK ); + // windows to be disabled, if stacked text is turned OFF + maOrientHlp.AddDependentWindow( maCbAsianMode, STATE_NOCHECK ); + + Link aLink = LINK( this, AlignmentTabPage, UpdateEnableHdl ); + + maLbHorAlign.SetSelectHdl( aLink ); + maBtnWrap.SetClickHdl( aLink ); + + // Asian vertical mode + maCbAsianMode.Show( SvtCJKOptions().IsVerticalTextEnabled() ); + + // CTL frame direction + maLbFrameDir.InsertEntryValue( CUI_RESSTR( RID_SVXSTR_FRAMEDIR_LTR ), FRMDIR_HORI_LEFT_TOP ); + maLbFrameDir.InsertEntryValue( CUI_RESSTR( RID_SVXSTR_FRAMEDIR_RTL ), FRMDIR_HORI_RIGHT_TOP ); + maLbFrameDir.InsertEntryValue( CUI_RESSTR( RID_SVXSTR_FRAMEDIR_SUPER ), FRMDIR_ENVIRONMENT ); + if( !SvtLanguageOptions().IsCTLFontEnabled() ) + { + maFtFrameDir.Hide(); + maLbFrameDir.Hide(); + } + + // diese Page braucht ExchangeSupport + SetExchangeSupport(); + + FreeResource(); + + AddItemConnection( new sfx::DummyItemConnection( SID_ATTR_ALIGN_HOR_JUSTIFY, maFtHorAlign, sfx::ITEMCONN_HIDE_UNKNOWN ) ); + AddItemConnection( new HorJustConnection( SID_ATTR_ALIGN_HOR_JUSTIFY, maLbHorAlign, s_pHorJustMap, sfx::ITEMCONN_HIDE_UNKNOWN ) ); + AddItemConnection( new sfx::DummyItemConnection( SID_ATTR_ALIGN_INDENT, maFtIndent, sfx::ITEMCONN_HIDE_UNKNOWN ) ); + AddItemConnection( new sfx::UInt16MetricConnection( SID_ATTR_ALIGN_INDENT, maEdIndent, FUNIT_TWIP, sfx::ITEMCONN_HIDE_UNKNOWN ) ); + AddItemConnection( new sfx::DummyItemConnection( SID_ATTR_ALIGN_VER_JUSTIFY, maFtVerAlign, sfx::ITEMCONN_HIDE_UNKNOWN ) ); + AddItemConnection( new VerJustConnection( SID_ATTR_ALIGN_VER_JUSTIFY, maLbVerAlign, s_pVerJustMap, sfx::ITEMCONN_HIDE_UNKNOWN ) ); + AddItemConnection( new DialControlConnection( SID_ATTR_ALIGN_DEGREES, maCtrlDial, sfx::ITEMCONN_HIDE_UNKNOWN ) ); + AddItemConnection( new sfx::DummyItemConnection( SID_ATTR_ALIGN_DEGREES, maFtRotate, sfx::ITEMCONN_HIDE_UNKNOWN ) ); + AddItemConnection( new sfx::DummyItemConnection( SID_ATTR_ALIGN_LOCKPOS, maFtRefEdge, sfx::ITEMCONN_HIDE_UNKNOWN ) ); + AddItemConnection( new RotateModeConnection( SID_ATTR_ALIGN_LOCKPOS, maVsRefEdge, s_pRotateModeMap, sfx::ITEMCONN_HIDE_UNKNOWN ) ); + AddItemConnection( new OrientStackedConnection( SID_ATTR_ALIGN_STACKED, maOrientHlp ) ); + AddItemConnection( new sfx::DummyItemConnection( SID_ATTR_ALIGN_STACKED, maCbStacked, sfx::ITEMCONN_HIDE_UNKNOWN ) ); + AddItemConnection( new sfx::CheckBoxConnection( SID_ATTR_ALIGN_ASIANVERTICAL, maCbAsianMode, sfx::ITEMCONN_HIDE_UNKNOWN ) ); + AddItemConnection( new sfx::CheckBoxConnection( SID_ATTR_ALIGN_LINEBREAK, maBtnWrap, sfx::ITEMCONN_HIDE_UNKNOWN ) ); + AddItemConnection( new sfx::CheckBoxConnection( SID_ATTR_ALIGN_HYPHENATION, maBtnHyphen, sfx::ITEMCONN_HIDE_UNKNOWN ) ); + AddItemConnection( new sfx::CheckBoxConnection( SID_ATTR_ALIGN_SHRINKTOFIT, maBtnShrink, sfx::ITEMCONN_HIDE_UNKNOWN ) ); + AddItemConnection( new sfx::DummyItemConnection( SID_ATTR_FRAMEDIRECTION, maFtFrameDir, sfx::ITEMCONN_HIDE_UNKNOWN ) ); + AddItemConnection( new FrameDirListBoxConnection( SID_ATTR_FRAMEDIRECTION, maLbFrameDir, sfx::ITEMCONN_HIDE_UNKNOWN ) ); +} + +AlignmentTabPage::~AlignmentTabPage() +{ +} + +SfxTabPage* AlignmentTabPage::Create( Window* pParent, const SfxItemSet& rAttrSet ) +{ + return new AlignmentTabPage( pParent, rAttrSet ); +} + +USHORT* AlignmentTabPage::GetRanges() +{ + return s_pRanges; +} + +void AlignmentTabPage::Reset( const SfxItemSet& rCoreAttrs ) +{ + SfxTabPage::Reset( rCoreAttrs ); + UpdateEnableControls(); +} + +int AlignmentTabPage::DeactivatePage( SfxItemSet* _pSet ) +{ + if( _pSet ) + FillItemSet( *_pSet ); + return LEAVE_PAGE; +} + +void AlignmentTabPage::DataChanged( const DataChangedEvent& rDCEvt ) +{ + SfxTabPage::DataChanged( rDCEvt ); + if( (rDCEvt.GetType() == DATACHANGED_SETTINGS) && (rDCEvt.GetFlags() & SETTINGS_STYLE) ) + { + svt::OLocalResourceAccess aLocalResAcc( CUI_RES( RID_SVXPAGE_ALIGNMENT ), RSC_TABPAGE ); + InitVsRefEgde(); + } +} + +void AlignmentTabPage::InitVsRefEgde() +{ + // remember selection - is deleted in call to ValueSet::Clear() + USHORT nSel = maVsRefEdge.GetSelectItemId(); + + ResId aResId( GetSettings().GetStyleSettings().GetHighContrastMode() ? IL_LOCK_BMPS_HC : IL_LOCK_BMPS, CUI_MGR() ); + ImageList aImageList( aResId ); + Size aItemSize( aImageList.GetImage( IID_BOTTOMLOCK ).GetSizePixel() ); + + maVsRefEdge.Clear(); + maVsRefEdge.SetStyle( maVsRefEdge.GetStyle() | WB_ITEMBORDER | WB_DOUBLEBORDER ); + + maVsRefEdge.SetColCount( 3 ); + maVsRefEdge.InsertItem( IID_BOTTOMLOCK, aImageList.GetImage( IID_BOTTOMLOCK ), String( CUI_RES( STR_BOTTOMLOCK ) ) ); + maVsRefEdge.InsertItem( IID_TOPLOCK, aImageList.GetImage( IID_TOPLOCK ), String( CUI_RES( STR_TOPLOCK ) ) ); + maVsRefEdge.InsertItem( IID_CELLLOCK, aImageList.GetImage( IID_CELLLOCK ), String( CUI_RES( STR_CELLLOCK ) ) ); + + maVsRefEdge.SetSizePixel( maVsRefEdge.CalcWindowSizePixel( aItemSize ) ); + + maVsRefEdge.SelectItem( nSel ); +} + +void AlignmentTabPage::UpdateEnableControls() +{ + USHORT nHorAlign = maLbHorAlign.GetSelectEntryPos(); + bool bHorLeft = (nHorAlign == ALIGNDLG_HORALIGN_LEFT); + bool bHorBlock = (nHorAlign == ALIGNDLG_HORALIGN_BLOCK); + bool bHorFill = (nHorAlign == ALIGNDLG_HORALIGN_FILL); + + // indent edit field only for left alignment + maFtIndent.Enable( bHorLeft ); + maEdIndent.Enable( bHorLeft ); + + // rotation/stacked disabled for fill alignment + maOrientHlp.Enable( !bHorFill ); + + // hyphenation only for automatic line breaks or for block alignment + maBtnHyphen.Enable( maBtnWrap.IsChecked() || bHorBlock ); + + // shrink only without automatic line break, and not for block and fill + maBtnShrink.Enable( (maBtnWrap.GetState() == STATE_NOCHECK) && !bHorBlock && !bHorFill ); + + // visibility of fixed lines + maFlAlignment.Show( maLbHorAlign.IsVisible() || maEdIndent.IsVisible() || maLbVerAlign.IsVisible() ); + maFlOrient.Show( maCtrlDial.IsVisible() || maVsRefEdge.IsVisible() || maCbStacked.IsVisible() || maCbAsianMode.IsVisible() ); + maFlProperties.Show( maBtnWrap.IsVisible() || maBtnHyphen.IsVisible() || maBtnShrink.IsVisible() || maLbFrameDir.IsVisible() ); +} + +IMPL_LINK( AlignmentTabPage, UpdateEnableHdl, void*, EMPTYARG ) +{ + UpdateEnableControls(); + return 0; +} + +// ============================================================================ + +} // namespace svx + |