diff options
Diffstat (limited to 'sc/source/ui/miscdlgs/scuiautofmt.cxx')
-rw-r--r-- | sc/source/ui/miscdlgs/scuiautofmt.cxx | 476 |
1 files changed, 476 insertions, 0 deletions
diff --git a/sc/source/ui/miscdlgs/scuiautofmt.cxx b/sc/source/ui/miscdlgs/scuiautofmt.cxx new file mode 100644 index 000000000000..79d7c502921f --- /dev/null +++ b/sc/source/ui/miscdlgs/scuiautofmt.cxx @@ -0,0 +1,476 @@ +/************************************************************************* + * + * 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. + * + ************************************************************************/ + +// MARKER(update_precomp.py): autogen include statement, do not remove +#include "precompiled_sc.hxx" + +#undef SC_DLLIMPLEMENTATION + + + +//------------------------------------------------------------------ + +#include "scitems.hxx" +#include <svx/algitem.hxx> +#include <editeng/boxitem.hxx> +#include <editeng/brshitem.hxx> +#include <editeng/cntritem.hxx> +#include <editeng/colritem.hxx> +#include <editeng/crsditem.hxx> +#include <editeng/fontitem.hxx> +#include <editeng/postitem.hxx> +#include <editeng/shdditem.hxx> +#include <editeng/udlnitem.hxx> +#include <editeng/wghtitem.hxx> +#include <svl/zforlist.hxx> +#include <vcl/msgbox.hxx> +#include <comphelper/processfactory.hxx> + +#include "sc.hrc" +#include "scmod.hxx" +#include "attrib.hxx" +#include "zforauto.hxx" +#include "scitems.hxx" +#include "global.hxx" +#include "globstr.hrc" +#include "autoform.hxx" +#include "strindlg.hxx" +#include "miscdlgs.hrc" +#include "scuiautofmt.hxx" +#include "scresid.hxx" +#include "document.hxx" + +//======================================================================== +// AutoFormat-Dialog: + +ScAutoFormatDlg::ScAutoFormatDlg( Window* pParent, + ScAutoFormat* pAutoFormat, + const ScAutoFormatData* pSelFormatData, + ScDocument* pDoc ) : + + ModalDialog ( pParent, ScResId( RID_SCDLG_AUTOFORMAT ) ), + // + aFlFormat ( this, ScResId( FL_FORMAT ) ), + aLbFormat ( this, ScResId( LB_FORMAT ) ), + pWndPreview ( new ScAutoFmtPreview( this, ScResId( WND_PREVIEW ), pDoc ) ), + aBtnOk ( this, ScResId( BTN_OK ) ), + aBtnCancel ( this, ScResId( BTN_CANCEL ) ), + aBtnHelp ( this, ScResId( BTN_HELP ) ), + aBtnAdd ( this, ScResId( BTN_ADD ) ), + aBtnRemove ( this, ScResId( BTN_REMOVE ) ), + aBtnMore ( this, ScResId( BTN_MORE ) ), + aFlFormatting ( this, ScResId( FL_FORMATTING ) ), + aBtnNumFormat ( this, ScResId( BTN_NUMFORMAT ) ), + aBtnBorder ( this, ScResId( BTN_BORDER ) ), + aBtnFont ( this, ScResId( BTN_FONT ) ), + aBtnPattern ( this, ScResId( BTN_PATTERN ) ), + aBtnAlignment ( this, ScResId( BTN_ALIGNMENT ) ), + aBtnAdjust ( this, ScResId( BTN_ADJUST ) ), + aBtnRename ( this, ScResId( BTN_RENAME ) ), + aStrTitle ( ScResId( STR_ADD_TITLE ) ), + aStrLabel ( ScResId( STR_ADD_LABEL ) ), + aStrClose ( ScResId( STR_BTN_CLOSE ) ), + aStrDelTitle ( ScResId( STR_DEL_TITLE ) ), + aStrDelMsg ( ScResId( STR_DEL_MSG ) ) , + aStrRename ( ScResId( STR_RENAME_TITLE ) ), + // + pFormat ( pAutoFormat ), + pSelFmtData ( pSelFormatData ), + nIndex ( 0 ), + bCoreDataChanged( FALSE ), + bFmtInserted ( FALSE ) +{ + Init(); + pWndPreview->NotifyChange( (*pFormat)[0] ); + FreeResource(); +} + +//------------------------------------------------------------------------ + +__EXPORT ScAutoFormatDlg::~ScAutoFormatDlg() +{ + delete pWndPreview; +} + +//------------------------------------------------------------------------ + +void ScAutoFormatDlg::Init() +{ + USHORT nCount; + String aEntry; + + aLbFormat .SetSelectHdl( LINK( this, ScAutoFormatDlg, SelFmtHdl ) ); + aBtnNumFormat.SetClickHdl ( LINK( this, ScAutoFormatDlg, CheckHdl ) ); + aBtnBorder .SetClickHdl ( LINK( this, ScAutoFormatDlg, CheckHdl ) ); + aBtnFont .SetClickHdl ( LINK( this, ScAutoFormatDlg, CheckHdl ) ); + aBtnPattern .SetClickHdl ( LINK( this, ScAutoFormatDlg, CheckHdl ) ); + aBtnAlignment.SetClickHdl ( LINK( this, ScAutoFormatDlg, CheckHdl ) ); + aBtnAdjust .SetClickHdl ( LINK( this, ScAutoFormatDlg, CheckHdl ) ); + aBtnAdd .SetClickHdl ( LINK( this, ScAutoFormatDlg, AddHdl ) ); + aBtnRemove .SetClickHdl ( LINK( this, ScAutoFormatDlg, RemoveHdl ) ); + aBtnOk .SetClickHdl ( LINK( this, ScAutoFormatDlg, CloseHdl ) ); + aBtnCancel .SetClickHdl ( LINK( this, ScAutoFormatDlg, CloseHdl ) ); + aBtnRename .SetClickHdl ( LINK( this, ScAutoFormatDlg, RenameHdl ) ); + aLbFormat .SetDoubleClickHdl( LINK( this, ScAutoFormatDlg, DblClkHdl ) ); + + aBtnMore.AddWindow( &aBtnRename ); + aBtnMore.AddWindow( &aBtnNumFormat ); + aBtnMore.AddWindow( &aBtnBorder ); + aBtnMore.AddWindow( &aBtnFont ); + aBtnMore.AddWindow( &aBtnPattern ); + aBtnMore.AddWindow( &aBtnAlignment ); + aBtnMore.AddWindow( &aBtnAdjust ); + aBtnMore.AddWindow( &aFlFormatting ); + + nCount = pFormat->GetCount(); + + for ( USHORT i = 0; i < nCount; i++ ) + { + ((*pFormat)[i])->GetName( aEntry ); + aLbFormat.InsertEntry( aEntry ); + } + + if ( nCount == 1 ) + aBtnRemove.Disable(); + + aLbFormat.SelectEntryPos( 0 ); + aBtnRename.Disable(); + aBtnRemove.Disable(); + + nIndex = 0; + UpdateChecks(); + + if ( !pSelFmtData ) + { + aBtnAdd.Disable(); + aBtnRemove.Disable(); + bFmtInserted = TRUE; + } +} + +//------------------------------------------------------------------------ + +void ScAutoFormatDlg::UpdateChecks() +{ + ScAutoFormatData* pData = (*pFormat)[nIndex]; + + aBtnNumFormat.Check( pData->GetIncludeValueFormat() ); + aBtnBorder .Check( pData->GetIncludeFrame() ); + aBtnFont .Check( pData->GetIncludeFont() ); + aBtnPattern .Check( pData->GetIncludeBackground() ); + aBtnAlignment.Check( pData->GetIncludeJustify() ); + aBtnAdjust .Check( pData->GetIncludeWidthHeight() ); +} + +//------------------------------------------------------------------------ +// Handler: +//--------- + +IMPL_LINK( ScAutoFormatDlg, CloseHdl, PushButton *, pBtn ) +{ + if ( pBtn == &aBtnOk || pBtn == &aBtnCancel ) + { + if ( bCoreDataChanged ) + ScGlobal::GetAutoFormat()->Save(); + + EndDialog( (pBtn == &aBtnOk) ? RET_OK : RET_CANCEL ); + } + return 0; +} + +//------------------------------------------------------------------------ + +IMPL_LINK_INLINE_START( ScAutoFormatDlg, DblClkHdl, void *, EMPTYARG ) +{ + if ( bCoreDataChanged ) + ScGlobal::GetAutoFormat()->Save(); + + EndDialog( RET_OK ); + return 0; +} +IMPL_LINK_INLINE_END( ScAutoFormatDlg, DblClkHdl, void *, EMPTYARG ) + +//------------------------------------------------------------------------ + +IMPL_LINK( ScAutoFormatDlg, CheckHdl, Button *, pBtn ) +{ + ScAutoFormatData* pData = (*pFormat)[nIndex]; + BOOL bCheck = ((CheckBox*)pBtn)->IsChecked(); + + if ( pBtn == &aBtnNumFormat ) + pData->SetIncludeValueFormat( bCheck ); + else if ( pBtn == &aBtnBorder ) + pData->SetIncludeFrame( bCheck ); + else if ( pBtn == &aBtnFont ) + pData->SetIncludeFont( bCheck ); + else if ( pBtn == &aBtnPattern ) + pData->SetIncludeBackground( bCheck ); + else if ( pBtn == &aBtnAlignment ) + pData->SetIncludeJustify( bCheck ); + else if ( pBtn == &aBtnAdjust ) + pData->SetIncludeWidthHeight( bCheck ); + + if ( !bCoreDataChanged ) + { + aBtnCancel.SetText( aStrClose ); + bCoreDataChanged = TRUE; + } + + pWndPreview->NotifyChange( pData ); + + return 0; +} + +//------------------------------------------------------------------------ + +IMPL_LINK( ScAutoFormatDlg, AddHdl, void *, EMPTYARG ) +{ + if ( !bFmtInserted && pSelFmtData ) + { + String aStrStandard( ScResId(STR_STANDARD) ); + String aFormatName; + ScStringInputDlg* pDlg; + BOOL bOk = FALSE; + + while ( !bOk ) + { + pDlg = new ScStringInputDlg( this, + aStrTitle, + aStrLabel, + aFormatName, + HID_SC_ADD_AUTOFMT ); + + if ( pDlg->Execute() == RET_OK ) + { + pDlg->GetInputString( aFormatName ); + + if ( (aFormatName.Len() > 0) && (aFormatName != aStrStandard) ) + { + ScAutoFormatData* pNewData + = new ScAutoFormatData( *pSelFmtData ); + + pNewData->SetName( aFormatName ); + bFmtInserted = pFormat->Insert( pNewData ); + + if ( bFmtInserted ) + { + USHORT nAt = pFormat->IndexOf( pNewData ); + + aLbFormat.InsertEntry( aFormatName, nAt ); + aLbFormat.SelectEntry( aFormatName ); + aBtnAdd.Disable(); + + if ( !bCoreDataChanged ) + { + aBtnCancel.SetText( aStrClose ); + bCoreDataChanged = TRUE; + } + + SelFmtHdl( 0 ); + bOk = TRUE; + } + else + delete pNewData; + + } + + if ( !bFmtInserted ) + { + USHORT nRet = ErrorBox( this, + WinBits( WB_OK_CANCEL | WB_DEF_OK), + ScGlobal::GetRscString(STR_INVALID_AFNAME) + ).Execute(); + + bOk = ( nRet == RET_CANCEL ); + } + } + else + bOk = TRUE; + + delete pDlg; + } + } + + return 0; +} + +//------------------------------------------------------------------------ + +IMPL_LINK( ScAutoFormatDlg, RemoveHdl, void *, EMPTYARG ) +{ + if ( (nIndex > 0) && (aLbFormat.GetEntryCount() > 0) ) + { + String aMsg( aStrDelMsg.GetToken( 0, '#' ) ); + + aMsg += aLbFormat.GetSelectEntry(); + aMsg += aStrDelMsg.GetToken( 1, '#' ); + + if ( RET_YES == + QueryBox( this, WinBits( WB_YES_NO | WB_DEF_YES ), aMsg ).Execute() ) + { + aLbFormat.RemoveEntry( nIndex ); + aLbFormat.SelectEntryPos( nIndex-1 ); + + if ( nIndex-1 == 0 ) + aBtnRemove.Disable(); + + if ( !bCoreDataChanged ) + { + aBtnCancel.SetText( aStrClose ); + bCoreDataChanged = TRUE; + } + + pFormat->AtFree( nIndex ); // in der Core loeschen + nIndex--; + + SelFmtHdl( 0 ); + } + } + + SelFmtHdl( 0 ); + + return 0; +} + +IMPL_LINK( ScAutoFormatDlg, RenameHdl, void *, EMPTYARG ) +{ + BOOL bOk = FALSE; + while( !bOk ) + { + + String aFormatName=aLbFormat.GetSelectEntry(); + String aEntry; + + ScStringInputDlg* pDlg = new ScStringInputDlg( this, + aStrRename, + aStrLabel, + aFormatName, + HID_SC_RENAME_AUTOFMT ); + if( pDlg->Execute() == RET_OK ) + { + BOOL bFmtRenamed = FALSE; + pDlg->GetInputString( aFormatName ); + USHORT n; + + if ( aFormatName.Len() > 0 ) + { + for( n = 0; n < pFormat->GetCount(); ++n ) + { + (*pFormat)[n]->GetName(aEntry); + if ( aEntry== aFormatName) + break; + } + if( n >= pFormat->GetCount() ) + { + // Format mit dem Namen noch nicht vorhanden, also + // umbenennen + + aLbFormat.RemoveEntry(nIndex ); + ScAutoFormatData* p=(*pFormat)[ nIndex ]; + ScAutoFormatData* pNewData + = new ScAutoFormatData(*p); + + pFormat->AtFree( nIndex ); + + pNewData->SetName( aFormatName ); + + pFormat->Insert( pNewData); + + USHORT nCount = pFormat->GetCount(); + + aLbFormat.SetUpdateMode(FALSE); + aLbFormat.Clear(); + for ( USHORT i = 0; i < nCount; i++ ) + { + ((*pFormat)[i])->GetName( aEntry ); + aLbFormat.InsertEntry( aEntry ); + } + + aLbFormat.SetUpdateMode( TRUE); + aLbFormat.SelectEntry( aFormatName); + + if ( !bCoreDataChanged ) + { + aBtnCancel.SetText( aStrClose ); + bCoreDataChanged = TRUE; + } + + + SelFmtHdl( 0 ); + bOk = TRUE; + bFmtRenamed = TRUE; + } + } + if( !bFmtRenamed ) + { + bOk = RET_CANCEL == ErrorBox( this, + WinBits( WB_OK_CANCEL | WB_DEF_OK), + ScGlobal::GetRscString(STR_INVALID_AFNAME) + ).Execute(); + } + } + else + bOk = TRUE; + delete pDlg; + } + + return 0; +} + +//------------------------------------------------------------------------ + +IMPL_LINK( ScAutoFormatDlg, SelFmtHdl, void *, EMPTYARG ) +{ + nIndex = aLbFormat.GetSelectEntryPos(); + UpdateChecks(); + + if ( nIndex == 0 ) + { + aBtnRename.Disable(); + aBtnRemove.Disable(); + } + else + { + aBtnRename.Enable(); + aBtnRemove.Enable(); + } + + pWndPreview->NotifyChange( (*pFormat)[nIndex] ); + + return 0; +} + +//------------------------------------------------------------------------ + +String __EXPORT ScAutoFormatDlg::GetCurrFormatName() +{ + String aResult; + + ((*pFormat)[nIndex])->GetName( aResult ); + + return aResult; +} |