diff options
Diffstat (limited to 'sc/source/ui/dbgui/validate.cxx')
-rw-r--r-- | sc/source/ui/dbgui/validate.cxx | 998 |
1 files changed, 0 insertions, 998 deletions
diff --git a/sc/source/ui/dbgui/validate.cxx b/sc/source/ui/dbgui/validate.cxx deleted file mode 100644 index 4fe742c33..000000000 --- a/sc/source/ui/dbgui/validate.cxx +++ /dev/null @@ -1,998 +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. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_sc.hxx" - -#ifdef SC_DLLIMPLEMENTATION -#undef SC_DLLIMPLEMENTATION -#endif - -#include <vcl/svapp.hxx> -#include <svl/aeitem.hxx> -#include <svl/stritem.hxx> -#include <svl/eitem.hxx> -#include <svl/intitem.hxx> -#include <basic/sbmeth.hxx> -#include <basic/sbstar.hxx> -#include <basic/sbmod.hxx> -#include <sfx2/app.hxx> - -#include "scresid.hxx" -#include "sc.hrc" // -> Slot IDs - -#include "validat.hxx" -#include "validate.hrc" -#include "validate.hxx" -#include "compiler.hxx" -#include "formula/opcode.hxx" - -// cell range picker -#include "tabvwsh.hxx" -#include <sfx2/viewfrm.hxx> -#include <sfx2/childwin.hxx> -#include "reffact.hxx" - -// ============================================================================ - -static sal_uInt16 pValueRanges[] = -{ - FID_VALID_MODE, FID_VALID_ERRTEXT, - FID_VALID_LISTTYPE, FID_VALID_LISTTYPE, - 0 -}; - - -// ============================================================================ - -ScValidationDlg::ScValidationDlg( Window* pParent, - const SfxItemSet* pArgSet, - ScTabViewShell *pTabViewSh, - SfxBindings *pB /*= NULL*/ - ) : - ScValidationDlgBase( pParent ? pParent : SFX_APP()->GetTopWindow(), TAB_DLG_VALIDATION, pArgSet, pB ), - m_bOwnRefHdlr( false ), - m_pTabVwSh( pTabViewSh ), - m_bRefInputting( false ) -{ - AddTabPage( TP_VALIDATION_VALUES, ScTPValidationValue::Create, 0 ); - AddTabPage( TP_VALIDATION_INPUTHELP, ScTPValidationHelp::Create, 0 ); - AddTabPage( TP_VALIDATION_ERROR, ScTPValidationError::Create, 0 ); - FreeResource(); -} - -void ScTPValidationValue::SetReferenceHdl( const ScRange&rRange , ScDocument* pDoc ) -{ - if ( rRange.aStart != rRange.aEnd ) - if ( ScValidationDlg *pValidationDlg = GetValidationDlg() ) - if( m_pRefEdit ) - pValidationDlg->RefInputStart( m_pRefEdit ); - - if ( m_pRefEdit ) - { - String aStr; - rRange.Format( aStr, SCR_ABS_3D, pDoc ); - m_pRefEdit->SetRefString( aStr ); - } -} - -void ScTPValidationValue:: SetActiveHdl() -{ - if ( m_pRefEdit ) m_pRefEdit->GrabFocus(); - - if ( ScValidationDlg *pValidationDlg = GetValidationDlg() ) - if( m_pRefEdit ) - { - pValidationDlg->RefInputDone(); - } -} - -void ScTPValidationValue::RefInputStartPreHdl( formula::RefEdit* pEdit, formula::RefButton* pButton ) -{ - if ( ScValidationDlg *pValidationDlg = GetValidationDlg() ) - { - if( pEdit == m_pRefEdit ) - { - if( Window *pPreWnd = pEdit==&maEdMax?&maFtMax:(pEdit==&maEdMin?&maFtMin:NULL) ) - { - pPreWnd->SetParent( pValidationDlg ); - pPreWnd->Hide(); - } - - m_pRefEdit->SetParent( pValidationDlg ); - } - - if( pButton == &m_btnRef )m_btnRef.SetParent( pValidationDlg ); - } -} - -void ScTPValidationValue::RefInputDonePreHdl() -{ - - if( m_pRefEdit && m_pRefEdit->GetParent()!= this ) - { - if( Window *pPreWnd = m_pRefEdit==&maEdMax?&maFtMax:(m_pRefEdit==&maEdMin?&maFtMin:NULL) ) - { - pPreWnd->SetParent( this ); - pPreWnd->Show(); - } - - m_pRefEdit->SetParent( this ); - - m_btnRef.SetParent( m_pRefEdit ); //if Edit SetParent but button not, the tab order will be incorrect, need button to setparent to anthor window and restore parent later in order to restore the tab order - } - - if( m_btnRef.GetParent()!=this ) m_btnRef.SetParent( this ); -} - -void ScTPValidationValue::RefInputDonePostHdl() -{ - - - if( m_pRefEdit && !m_pRefEdit->HasFocus() ) - m_pRefEdit->GrabFocus(); - -} - - -sal_Bool ScValidationDlg::Close() -{ - if( m_bOwnRefHdlr ) - if( SfxTabPage* pPage = GetTabPage( TP_VALIDATION_VALUES ) ) - static_cast<ScTPValidationValue*>(pPage)->RemoveRefDlg(); - - return ScValidationDlgBase::Close(); -} - -ScValidationDlg::~ScValidationDlg() -{ - if( m_bOwnRefHdlr ) - RemoveRefDlg( false ); -} - - -// ============================================================================ - -namespace { - -/** Converts the passed ScValidationMode to the position in the list box. */ -sal_uInt16 lclGetPosFromValMode( ScValidationMode eValMode ) -{ - sal_uInt16 nLbPos = SC_VALIDDLG_ALLOW_ANY; - switch( eValMode ) - { - case SC_VALID_ANY: nLbPos = SC_VALIDDLG_ALLOW_ANY; break; - case SC_VALID_WHOLE: nLbPos = SC_VALIDDLG_ALLOW_WHOLE; break; - case SC_VALID_DECIMAL: nLbPos = SC_VALIDDLG_ALLOW_DECIMAL; break; - case SC_VALID_DATE: nLbPos = SC_VALIDDLG_ALLOW_DATE; break; - case SC_VALID_TIME: nLbPos = SC_VALIDDLG_ALLOW_TIME; break; - case SC_VALID_TEXTLEN: nLbPos = SC_VALIDDLG_ALLOW_TEXTLEN; break; - case SC_VALID_LIST: nLbPos = SC_VALIDDLG_ALLOW_RANGE; break; - case SC_VALID_CUSTOM: nLbPos = SC_VALIDDLG_ALLOW_ANY; break; // not supported - default: OSL_FAIL( "lclGetPosFromValMode - unknown validity mode" ); - } - return nLbPos; -} - -/** Converts the passed list box position to an ScValidationMode. */ -ScValidationMode lclGetValModeFromPos( sal_uInt16 nLbPos ) -{ - ScValidationMode eValMode = SC_VALID_ANY; - switch( nLbPos ) - { - case SC_VALIDDLG_ALLOW_ANY: eValMode = SC_VALID_ANY; break; - case SC_VALIDDLG_ALLOW_WHOLE: eValMode = SC_VALID_WHOLE; break; - case SC_VALIDDLG_ALLOW_DECIMAL: eValMode = SC_VALID_DECIMAL; break; - case SC_VALIDDLG_ALLOW_DATE: eValMode = SC_VALID_DATE; break; - case SC_VALIDDLG_ALLOW_TIME: eValMode = SC_VALID_TIME; break; - case SC_VALIDDLG_ALLOW_RANGE: eValMode = SC_VALID_LIST; break; - case SC_VALIDDLG_ALLOW_LIST: eValMode = SC_VALID_LIST; break; - case SC_VALIDDLG_ALLOW_TEXTLEN: eValMode = SC_VALID_TEXTLEN; break; - default: OSL_FAIL( "lclGetValModeFromPos - invalid list box position" ); - } - return eValMode; -} - -/** Converts the passed ScConditionMode to the position in the list box. */ -sal_uInt16 lclGetPosFromCondMode( ScConditionMode eCondMode ) -{ - sal_uInt16 nLbPos = SC_VALIDDLG_DATA_EQUAL; - switch( eCondMode ) - { - case SC_COND_NONE: // may occur in old XML files after Excel import - case SC_COND_EQUAL: nLbPos = SC_VALIDDLG_DATA_EQUAL; break; - case SC_COND_LESS: nLbPos = SC_VALIDDLG_DATA_LESS; break; - case SC_COND_GREATER: nLbPos = SC_VALIDDLG_DATA_GREATER; break; - case SC_COND_EQLESS: nLbPos = SC_VALIDDLG_DATA_EQLESS; break; - case SC_COND_EQGREATER: nLbPos = SC_VALIDDLG_DATA_EQGREATER; break; - case SC_COND_NOTEQUAL: nLbPos = SC_VALIDDLG_DATA_NOTEQUAL; break; - case SC_COND_BETWEEN: nLbPos = SC_VALIDDLG_DATA_BETWEEN; break; - case SC_COND_NOTBETWEEN: nLbPos = SC_VALIDDLG_DATA_NOTBETWEEN; break; - default: OSL_FAIL( "lclGetPosFromCondMode - unknown condition mode" ); - } - return nLbPos; -} - -/** Converts the passed list box position to an ScConditionMode. */ -ScConditionMode lclGetCondModeFromPos( sal_uInt16 nLbPos ) -{ - ScConditionMode eCondMode = SC_COND_EQUAL; - switch( nLbPos ) - { - case SC_VALIDDLG_DATA_EQUAL: eCondMode = SC_COND_EQUAL; break; - case SC_VALIDDLG_DATA_LESS: eCondMode = SC_COND_LESS; break; - case SC_VALIDDLG_DATA_GREATER: eCondMode = SC_COND_GREATER; break; - case SC_VALIDDLG_DATA_EQLESS: eCondMode = SC_COND_EQLESS; break; - case SC_VALIDDLG_DATA_EQGREATER: eCondMode = SC_COND_EQGREATER; break; - case SC_VALIDDLG_DATA_NOTEQUAL: eCondMode = SC_COND_NOTEQUAL; break; - case SC_VALIDDLG_DATA_BETWEEN: eCondMode = SC_COND_BETWEEN; break; - case SC_VALIDDLG_DATA_NOTBETWEEN: eCondMode = SC_COND_NOTBETWEEN; break; - default: OSL_FAIL( "lclGetCondModeFromPos - invalid list box position" ); - } - return eCondMode; -} - -/** Converts line feed separated string to a formula with strings separated by semicolons. - @descr Keeps all empty strings. - Example: abc\ndef\n\nghi -> "abc";"def";"";"ghi". - @param rFmlaStr (out-param) The converted formula string. */ -void lclGetFormulaFromStringList( String& rFmlaStr, const String& rStringList, sal_Unicode cFmlaSep ) -{ - rFmlaStr.Erase(); - xub_StrLen nTokenCnt = rStringList.GetTokenCount( '\n' ); - for( xub_StrLen nToken = 0, nStringIx = 0; nToken < nTokenCnt; ++nToken ) - { - String aToken( rStringList.GetToken( 0, '\n', nStringIx ) ); - ScGlobal::AddQuotes( aToken, '"' ); - ScGlobal::AddToken( rFmlaStr, aToken, cFmlaSep ); - } - if( !rFmlaStr.Len() ) - rFmlaStr.AssignAscii( "\"\"" ); -} - - -/** Converts formula with strings separated by semicolons to line feed separated string. - @descr Keeps all empty strings. Ignores all empty tokens (multiple semicolons). - Example: "abc";;;"def";"";"ghi" -> abc\ndef\n\nghi. - @param rStringList (out-param) The converted line feed separated string list. - @return true = Conversion successful. */ -bool lclGetStringListFromFormula( String& rStringList, const String& rFmlaStr, sal_Unicode cFmlaSep ) -{ - String aQuotes( RTL_CONSTASCII_USTRINGPARAM( "\"\"" ) ); - xub_StrLen nTokenCnt = rFmlaStr.GetQuotedTokenCount( aQuotes, cFmlaSep ); - - rStringList.Erase(); - bool bIsStringList = (nTokenCnt > 0); - bool bTokenAdded = false; - - for( xub_StrLen nToken = 0, nStringIx = 0; bIsStringList && (nToken < nTokenCnt); ++nToken ) - { - String aToken( rFmlaStr.GetQuotedToken( 0, aQuotes, cFmlaSep, nStringIx ) ); - aToken.EraseLeadingAndTrailingChars(); - if( aToken.Len() ) // ignore empty tokens, i.e. "a";;"b" - { - bIsStringList = ScGlobal::IsQuoted( aToken, '"' ); - if( bIsStringList ) - { - ScGlobal::EraseQuotes( aToken, '"' ); - ScGlobal::AddToken( rStringList, aToken, '\n', 1, bTokenAdded ); - bTokenAdded = true; - } - } - } - - return bIsStringList; -} - -} // namespace - -// ---------------------------------------------------------------------------- - -ScTPValidationValue::ScTPValidationValue( Window* pParent, const SfxItemSet& rArgSet ) : - SfxTabPage( pParent, ScResId( TP_VALIDATION_VALUES ), rArgSet ), - maFtAllow ( this, ScResId( FT_ALLOW ) ), - maLbAllow ( this, ScResId( LB_ALLOW ) ), - maCbAllow ( this, ScResId( TSB_ALLOW_BLANKS ) ), - maCbShow ( this, ScResId( CB_SHOWLIST ) ), - maCbSort ( this, ScResId( CB_SORTLIST ) ), - maFtValue ( this, ScResId( FT_VALUE ) ), - maLbValue ( this, ScResId( LB_VALUE ) ), - maFtMin ( this, ScResId( FT_MIN ) ), - maEdMin ( this, ScResId( EDT_MIN ) ), - maEdList ( this, ScResId( EDT_LIST ) ), - maFtMax ( this, ScResId( FT_MAX ) ), - maEdMax ( this, ScResId( EDT_MAX ) ), - maFtHint ( this, ScResId( FT_SOURCEHINT ) ), - maStrMin ( ScResId( SCSTR_VALID_MINIMUM ) ), - maStrMax ( ScResId( SCSTR_VALID_MAXIMUM ) ), - maStrValue( ScResId( SCSTR_VALID_VALUE ) ), - maStrRange( ScResId( SCSTR_VALID_RANGE ) ), - maStrList ( ScResId( SCSTR_VALID_LIST ) ), - m_btnRef( this, ScResId( RB_VALIDITY_REF ) ) -{ - Init(); - FreeResource(); - - // list separator in formulas - String aListSep = ::ScCompiler::GetNativeSymbol( ocSep ); - OSL_ENSURE( aListSep.Len() == 1, "ScTPValidationValue::ScTPValidationValue - list separator error" ); - mcFmlaSep = aListSep.Len() ? aListSep.GetChar( 0 ) : ';'; - m_btnRef.Hide(); // cell range picker -} - -ScTPValidationValue::~ScTPValidationValue() -{ -} - -void ScTPValidationValue::Init() -{ - maLbAllow.SetSelectHdl( LINK( this, ScTPValidationValue, SelectHdl ) ); - maLbValue.SetSelectHdl( LINK( this, ScTPValidationValue, SelectHdl ) ); - maCbShow.SetClickHdl( LINK( this, ScTPValidationValue, CheckHdl ) ); - - // cell range picker - maEdMin.SetGetFocusHdl( LINK( this, ScTPValidationValue, EditSetFocusHdl ) ); - maEdMin.SetLoseFocusHdl( LINK( this, ScTPValidationValue, KillFocusHdl ) ); - maEdMax.SetGetFocusHdl( LINK( this, ScTPValidationValue, EditSetFocusHdl ) ); - m_btnRef.SetLoseFocusHdl( LINK( this, ScTPValidationValue, KillFocusHdl ) ); - maEdMax.SetLoseFocusHdl( LINK( this, ScTPValidationValue, KillFocusHdl ) ); - - maLbAllow.SelectEntryPos( SC_VALIDDLG_ALLOW_ANY ); - maLbValue.SelectEntryPos( SC_VALIDDLG_DATA_EQUAL ); - - SelectHdl( NULL ); - CheckHdl( NULL ); -} - -SfxTabPage* ScTPValidationValue::Create( Window* pParent, const SfxItemSet& rArgSet ) -{ - return( new ScTPValidationValue( pParent, rArgSet ) ); -} - -sal_uInt16* ScTPValidationValue::GetRanges() -{ - return pValueRanges; -} - -void ScTPValidationValue::Reset( const SfxItemSet& rArgSet ) -{ - const SfxPoolItem* pItem; - - sal_uInt16 nLbPos = SC_VALIDDLG_ALLOW_ANY; - if( rArgSet.GetItemState( FID_VALID_MODE, sal_True, &pItem ) == SFX_ITEM_SET ) - nLbPos = lclGetPosFromValMode( static_cast< ScValidationMode >( - static_cast< const SfxAllEnumItem* >( pItem )->GetValue() ) ); - maLbAllow.SelectEntryPos( nLbPos ); - - nLbPos = SC_VALIDDLG_DATA_EQUAL; - if( rArgSet.GetItemState( FID_VALID_CONDMODE, sal_True, &pItem ) == SFX_ITEM_SET ) - nLbPos = lclGetPosFromCondMode( static_cast< ScConditionMode >( - static_cast< const SfxAllEnumItem* >( pItem )->GetValue() ) ); - maLbValue.SelectEntryPos( nLbPos ); - - // *** check boxes *** - sal_Bool bCheck = sal_True; - if( rArgSet.GetItemState( FID_VALID_BLANK, sal_True, &pItem ) == SFX_ITEM_SET ) - bCheck = static_cast< const SfxBoolItem* >( pItem )->GetValue(); - maCbAllow.Check( bCheck ); - - sal_Int32 nListType = ValidListType::UNSORTED; - if( rArgSet.GetItemState( FID_VALID_LISTTYPE, sal_True, &pItem ) == SFX_ITEM_SET ) - nListType = static_cast< const SfxInt16Item* >( pItem )->GetValue(); - maCbShow.Check( nListType != ValidListType::INVISIBLE ); - maCbSort.Check( nListType == ValidListType::SORTEDASCENDING ); - - // *** formulas *** - String aFmlaStr; - if ( rArgSet.GetItemState( FID_VALID_VALUE1, sal_True, &pItem ) == SFX_ITEM_SET ) - aFmlaStr = static_cast< const SfxStringItem* >( pItem )->GetValue(); - SetFirstFormula( aFmlaStr ); - - aFmlaStr.Erase(); - if ( rArgSet.GetItemState( FID_VALID_VALUE2, sal_True, &pItem ) == SFX_ITEM_SET ) - aFmlaStr = static_cast< const SfxStringItem* >( pItem )->GetValue(); - SetSecondFormula( aFmlaStr ); - - SelectHdl( NULL ); - CheckHdl( NULL ); -} - -sal_Bool ScTPValidationValue::FillItemSet( SfxItemSet& rArgSet ) -{ - sal_Int16 nListType = maCbShow.IsChecked() ? - (maCbSort.IsChecked() ? ValidListType::SORTEDASCENDING : ValidListType::UNSORTED) : - ValidListType::INVISIBLE; - - rArgSet.Put( SfxAllEnumItem( FID_VALID_MODE, sal::static_int_cast<sal_uInt16>( - lclGetValModeFromPos( maLbAllow.GetSelectEntryPos() ) ) ) ); - rArgSet.Put( SfxAllEnumItem( FID_VALID_CONDMODE, sal::static_int_cast<sal_uInt16>( - lclGetCondModeFromPos( maLbValue.GetSelectEntryPos() ) ) ) ); - rArgSet.Put( SfxStringItem( FID_VALID_VALUE1, GetFirstFormula() ) ); - rArgSet.Put( SfxStringItem( FID_VALID_VALUE2, GetSecondFormula() ) ); - rArgSet.Put( SfxBoolItem( FID_VALID_BLANK, maCbAllow.IsChecked() ) ); - rArgSet.Put( SfxInt16Item( FID_VALID_LISTTYPE, nListType ) ); - return sal_True; -} - -String ScTPValidationValue::GetFirstFormula() const -{ - String aFmlaStr; - if( maLbAllow.GetSelectEntryPos() == SC_VALIDDLG_ALLOW_LIST ) - lclGetFormulaFromStringList( aFmlaStr, maEdList.GetText(), mcFmlaSep ); - else - aFmlaStr = maEdMin.GetText(); - return aFmlaStr; -} - -String ScTPValidationValue::GetSecondFormula() const -{ - return maEdMax.GetText(); -} - -void ScTPValidationValue::SetFirstFormula( const String& rFmlaStr ) -{ - // try if formula is a string list, validation mode must already be set - String aStringList; - if( (maLbAllow.GetSelectEntryPos() == SC_VALIDDLG_ALLOW_RANGE) && - lclGetStringListFromFormula( aStringList, rFmlaStr, mcFmlaSep ) ) - { - maEdList.SetText( aStringList ); - maEdMin.SetText( EMPTY_STRING ); - // change validation mode to string list - maLbAllow.SelectEntryPos( SC_VALIDDLG_ALLOW_LIST ); - } - else - { - maEdMin.SetText( rFmlaStr ); - maEdList.SetText( EMPTY_STRING ); - } -} - -void ScTPValidationValue::SetSecondFormula( const String& rFmlaStr ) -{ - maEdMax.SetText( rFmlaStr ); -} - -ScValidationDlg * ScTPValidationValue::GetValidationDlg() -{ - if( Window *pParent = GetParent() ) - do{ - if ( dynamic_cast<ScValidationDlg*>( pParent ) ) - return static_cast< ScValidationDlg * >( pParent ); - }while ( NULL != ( pParent = pParent->GetParent() ) ); - return NULL; -} - -void ScTPValidationValue::SetupRefDlg() -{ - if( ScValidationDlg *pValidationDlg = GetValidationDlg() ) - if( pValidationDlg->SetupRefDlg() ) - { - pValidationDlg->SetHandler( this ); - pValidationDlg->SetSetRefHdl( (ScRefHandlerHelper::PFUNCSETREFHDLTYPE)( &ScTPValidationValue::SetReferenceHdl ) ); - pValidationDlg->SetSetActHdl( (ScRefHandlerHelper::PCOMMONHDLTYPE)( &ScTPValidationValue::SetActiveHdl ) ); - pValidationDlg->SetRefInputStartPreHdl( (ScRefHandlerHelper::PINPUTSTARTDLTYPE)( &ScTPValidationValue::RefInputStartPreHdl ) ); - pValidationDlg->SetRefInputDonePreHdl( (ScRefHandlerHelper::PCOMMONHDLTYPE)( &ScTPValidationValue::RefInputDonePreHdl ) ); - pValidationDlg->SetRefInputDonePostHdl( (ScRefHandlerHelper::PCOMMONHDLTYPE)( &ScTPValidationValue::RefInputDonePostHdl ) ); - - if ( maEdMax.IsVisible() ) { m_pRefEdit = &maEdMax; } - else if ( maEdMin.IsVisible() ) { m_pRefEdit = &maEdMin; } - - if( m_pRefEdit && !m_pRefEdit->HasFocus() ) m_pRefEdit->GrabFocus(); - - if( m_pRefEdit ) m_pRefEdit->SetRefDialog( pValidationDlg ); - m_btnRef.SetReferences( pValidationDlg, m_pRefEdit ); - } -} - -void ScTPValidationValue::RemoveRefDlg() -{ - if( ScValidationDlg *pValidationDlg = GetValidationDlg() ) - if( pValidationDlg->RemoveRefDlg() ) - { - pValidationDlg->SetHandler( NULL ); - pValidationDlg->SetSetRefHdl( NULL ); - pValidationDlg->SetSetActHdl( NULL ); - pValidationDlg->SetRefInputStartPreHdl( NULL ); - pValidationDlg->SetRefInputDonePreHdl( NULL ); - pValidationDlg->SetRefInputDonePostHdl( NULL ); - - if( m_pRefEdit ) m_pRefEdit->SetRefDialog( NULL ); - m_pRefEdit = NULL; - - m_btnRef.SetReferences( NULL, NULL ); - -#if ! defined( WNT ) && !defined( _MSC_VER ) - TidyListBoxes(); -#endif - } -} - -void ScTPValidationValue::TidyListBoxes() -{ - if ( Window *pWnd = GetChild( 0 ) ) - { - bool bFindLst = false; - std::list<Window*> alstOrder; - - do{ - if( pWnd->GetParent() == this ) - { - if ( !bFindLst ) - { - try{ - if( dynamic_cast<ListBox*>(pWnd)||dynamic_cast<ListBox*>(pWnd->GetWindow(WINDOW_CLIENT) ) ) - bFindLst = true; - } - catch( ... ) - { - if ( *(void**)pWnd == *(void**)&maLbValue ) - bFindLst = true; - else if ( Window *pClient = pWnd->GetWindow( WINDOW_CLIENT ) ) - if ( *(void**)pClient == *(void**)&maLbValue ) - bFindLst = true; - } - } - - if ( bFindLst ) - alstOrder.push_back( pWnd->GetWindow( WINDOW_CLIENT ) ); - } - }while( NULL != ( pWnd = pWnd->GetWindow( WINDOW_NEXT ) ) ); - - pWnd = GetChild(0); - - while( std::find( alstOrder.begin(), alstOrder.end(), pWnd ) != alstOrder.end() && NULL != ( pWnd = pWnd->GetWindow( WINDOW_NEXT) ) ) ; - - if ( pWnd ) - { - for ( std::list<Window*>::iterator i = alstOrder.begin(); i!=alstOrder.end(); ++i ) - { - Window *pParent = (*i)->GetParent(); - (*i)->SetParent( pWnd ); - (*i)->SetParent( pParent ); - } - } - } -} - -IMPL_LINK( ScTPValidationValue, EditSetFocusHdl, Edit *, EMPTYARG) -{ - sal_uInt16 nPos=maLbAllow.GetSelectEntryPos(); - - if ( nPos == SC_VALIDDLG_ALLOW_RANGE ) - { - SetupRefDlg(); - } - - return 0; -} - -IMPL_LINK( ScTPValidationValue, KillFocusHdl, Window *, pWnd ) -{ - if( pWnd == m_pRefEdit || pWnd == &m_btnRef ) - if( ScValidationDlg *pValidationDlg = GetValidationDlg() ) - if ( (pValidationDlg->IsActive() || pValidationDlg->IsChildFocus() ) && !pValidationDlg->IsRefInputting() ) - if( ( !m_pRefEdit || !m_pRefEdit->HasFocus()) && !m_btnRef.HasFocus() ) - { - RemoveRefDlg(); - } - - return 0; -} - -// ---------------------------------------------------------------------------- - -IMPL_LINK( ScTPValidationValue, SelectHdl, ListBox*, EMPTYARG ) -{ - sal_uInt16 nLbPos = maLbAllow.GetSelectEntryPos(); - bool bEnable = (nLbPos != SC_VALIDDLG_ALLOW_ANY); - bool bRange = (nLbPos == SC_VALIDDLG_ALLOW_RANGE); - bool bList = (nLbPos == SC_VALIDDLG_ALLOW_LIST); - - maCbAllow.Enable( bEnable ); // Empty cell - maFtValue.Enable( bEnable ); - maLbValue.Enable( bEnable ); - maFtMin.Enable( bEnable ); - maEdMin.Enable( bEnable ); - maEdList.Enable( bEnable ); - maFtMax.Enable( bEnable ); - maEdMax.Enable( bEnable ); - - bool bShowMax = false; - if( bRange ) - maFtMin.SetText( maStrRange ); - else if( bList ) - maFtMin.SetText( maStrList ); - else - { - switch( maLbValue.GetSelectEntryPos() ) - { - case SC_VALIDDLG_DATA_EQUAL: - case SC_VALIDDLG_DATA_NOTEQUAL: maFtMin.SetText( maStrValue ); break; - - case SC_VALIDDLG_DATA_LESS: - case SC_VALIDDLG_DATA_EQLESS: maFtMin.SetText( maStrMax ); break; - - case SC_VALIDDLG_DATA_BETWEEN: - case SC_VALIDDLG_DATA_NOTBETWEEN: bShowMax = true; // fall through - case SC_VALIDDLG_DATA_GREATER: - case SC_VALIDDLG_DATA_EQGREATER: maFtMin.SetText( maStrMin ); break; - - default: - OSL_FAIL( "ScTPValidationValue::SelectHdl - unknown condition mode" ); - } - } - - maCbShow.Show( bRange || bList ); - maCbSort.Show( bRange || bList ); - maFtValue.Show( !bRange && !bList ); - maLbValue.Show( !bRange && !bList ); - maEdMin.Show( !bList ); - maEdList.Show( bList ); - maFtMax.Show( bShowMax ); - maEdMax.Show( bShowMax ); - maFtHint.Show( bRange ); - m_btnRef.Show( bRange ); // cell range picker - return 0; -} - -IMPL_LINK( ScTPValidationValue, CheckHdl, CheckBox*, EMPTYARG ) -{ - maCbSort.Enable( maCbShow.IsChecked() ); - return 0; -} - - -//======================================================================== -//======================================================================== -// Input Help Page - -ScTPValidationHelp::ScTPValidationHelp( Window* pParent, - const SfxItemSet& rArgSet ) - - : SfxTabPage ( pParent, - ScResId( TP_VALIDATION_INPUTHELP ), - rArgSet ), - aTsbHelp ( this, ScResId( TSB_HELP ) ), - aFlContent ( this, ScResId( FL_CONTENT ) ), - aFtTitle ( this, ScResId( FT_TITLE ) ), - aEdtTitle ( this, ScResId( EDT_TITLE ) ), - aFtInputHelp ( this, ScResId( FT_INPUTHELP ) ), - aEdInputHelp ( this, ScResId( EDT_INPUTHELP ) ), - - mrArgSet ( rArgSet ) -{ - Init(); - FreeResource(); -} - -// ----------------------------------------------------------------------- - -ScTPValidationHelp::~ScTPValidationHelp() -{ -} - -// ----------------------------------------------------------------------- - -void ScTPValidationHelp::Init() -{ - aTsbHelp.EnableTriState( false ); -} - -//------------------------------------------------------------------------ - -sal_uInt16* ScTPValidationHelp::GetRanges() -{ - return pValueRanges; -} - -// ----------------------------------------------------------------------- - -SfxTabPage* ScTPValidationHelp::Create( Window* pParent, - const SfxItemSet& rArgSet ) -{ - return ( new ScTPValidationHelp( pParent, rArgSet ) ); -} - -// ----------------------------------------------------------------------- - -void ScTPValidationHelp::Reset( const SfxItemSet& rArgSet ) -{ - const SfxPoolItem* pItem; - - if ( rArgSet.GetItemState( FID_VALID_SHOWHELP, sal_True, &pItem ) == SFX_ITEM_SET ) - aTsbHelp.SetState( ((const SfxBoolItem*)pItem)->GetValue() ? STATE_CHECK : STATE_NOCHECK ); - else - aTsbHelp.SetState( STATE_NOCHECK ); - - if ( rArgSet.GetItemState( FID_VALID_HELPTITLE, sal_True, &pItem ) == SFX_ITEM_SET ) - aEdtTitle.SetText( ((const SfxStringItem*)pItem)->GetValue() ); - else - aEdtTitle.SetText( EMPTY_STRING ); - - if ( rArgSet.GetItemState( FID_VALID_HELPTEXT, sal_True, &pItem ) == SFX_ITEM_SET ) - aEdInputHelp.SetText( ((const SfxStringItem*)pItem)->GetValue() ); - else - aEdInputHelp.SetText( EMPTY_STRING ); -} - -// ----------------------------------------------------------------------- - -sal_Bool ScTPValidationHelp::FillItemSet( SfxItemSet& rArgSet ) -{ - rArgSet.Put( SfxBoolItem( FID_VALID_SHOWHELP, aTsbHelp.GetState() == STATE_CHECK ) ); - rArgSet.Put( SfxStringItem( FID_VALID_HELPTITLE, aEdtTitle.GetText() ) ); - rArgSet.Put( SfxStringItem( FID_VALID_HELPTEXT, aEdInputHelp.GetText() ) ); - - return sal_True; -} - -//======================================================================== -//======================================================================== -// Error Alert Page - -ScTPValidationError::ScTPValidationError( Window* pParent, - const SfxItemSet& rArgSet ) - - : SfxTabPage ( pParent, - ScResId( TP_VALIDATION_ERROR ), - rArgSet ), - aTsbShow ( this, ScResId( TSB_SHOW ) ), - aFlContent ( this, ScResId( FL_CONTENT ) ), - aFtAction ( this, ScResId( FT_ACTION ) ), - aLbAction ( this, ScResId( LB_ACTION ) ), - aBtnSearch ( this, ScResId( BTN_SEARCH ) ), - aFtTitle ( this, ScResId( FT_TITLE ) ), - aEdtTitle ( this, ScResId( EDT_TITLE ) ), - aFtError ( this, ScResId( FT_ERROR ) ), - aEdError ( this, ScResId( EDT_ERROR ) ), - - mrArgSet ( rArgSet ) -{ - Init(); - FreeResource(); -} - -// ----------------------------------------------------------------------- - -ScTPValidationError::~ScTPValidationError() -{ -} - -// ----------------------------------------------------------------------- - -void ScTPValidationError::Init() -{ - aLbAction.SetSelectHdl( LINK( this, ScTPValidationError, SelectActionHdl ) ); - aBtnSearch.SetClickHdl( LINK( this, ScTPValidationError, ClickSearchHdl ) ); - - aLbAction.SelectEntryPos( 0 ); - aTsbShow.EnableTriState( false ); - - SelectActionHdl( NULL ); -} - -//------------------------------------------------------------------------ - -sal_uInt16* ScTPValidationError::GetRanges() -{ - return pValueRanges; -} - -// ----------------------------------------------------------------------- - -SfxTabPage* ScTPValidationError::Create( Window* pParent, - const SfxItemSet& rArgSet ) -{ - return ( new ScTPValidationError( pParent, rArgSet ) ); -} - -// ----------------------------------------------------------------------- - -void ScTPValidationError::Reset( const SfxItemSet& rArgSet ) -{ - const SfxPoolItem* pItem; - - if ( rArgSet.GetItemState( FID_VALID_SHOWERR, sal_True, &pItem ) == SFX_ITEM_SET ) - aTsbShow.SetState( ((const SfxBoolItem*)pItem)->GetValue() ? STATE_CHECK : STATE_NOCHECK ); - else - aTsbShow.SetState( STATE_CHECK ); // check by default - - if ( rArgSet.GetItemState( FID_VALID_ERRSTYLE, sal_True, &pItem ) == SFX_ITEM_SET ) - aLbAction.SelectEntryPos( ((const SfxAllEnumItem*)pItem)->GetValue() ); - else - aLbAction.SelectEntryPos( 0 ); - - if ( rArgSet.GetItemState( FID_VALID_ERRTITLE, sal_True, &pItem ) == SFX_ITEM_SET ) - aEdtTitle.SetText( ((const SfxStringItem*)pItem)->GetValue() ); - else - aEdtTitle.SetText( EMPTY_STRING ); - - if ( rArgSet.GetItemState( FID_VALID_ERRTEXT, sal_True, &pItem ) == SFX_ITEM_SET ) - aEdError.SetText( ((const SfxStringItem*)pItem)->GetValue() ); - else - aEdError.SetText( EMPTY_STRING ); - - SelectActionHdl( NULL ); -} - -// ----------------------------------------------------------------------- - -sal_Bool ScTPValidationError::FillItemSet( SfxItemSet& rArgSet ) -{ - rArgSet.Put( SfxBoolItem( FID_VALID_SHOWERR, aTsbShow.GetState() == STATE_CHECK ) ); - rArgSet.Put( SfxAllEnumItem( FID_VALID_ERRSTYLE, aLbAction.GetSelectEntryPos() ) ); - rArgSet.Put( SfxStringItem( FID_VALID_ERRTITLE, aEdtTitle.GetText() ) ); - rArgSet.Put( SfxStringItem( FID_VALID_ERRTEXT, aEdError.GetText() ) ); - - return sal_True; -} - -// ----------------------------------------------------------------------- - -IMPL_LINK( ScTPValidationError, SelectActionHdl, ListBox*, EMPTYARG ) -{ - ScValidErrorStyle eStyle = (ScValidErrorStyle) aLbAction.GetSelectEntryPos(); - sal_Bool bMacro = ( eStyle == SC_VALERR_MACRO ); - - aBtnSearch.Enable( bMacro ); - aFtError.Enable( !bMacro ); - aEdError.Enable( !bMacro ); - - return( 0L ); -} - -// ----------------------------------------------------------------------- - -IMPL_LINK( ScTPValidationError, ClickSearchHdl, PushButton*, EMPTYARG ) -{ - Window* pOld = Application::GetDefDialogParent(); - Application::SetDefDialogParent( this ); - - // Use static SfxApplication method to bring up selector dialog for - // choosing a script - ::rtl::OUString aScriptURL = SfxApplication::ChooseScript(); - - Application::SetDefDialogParent( pOld ); - - if ( aScriptURL != NULL && aScriptURL.getLength() != 0 ) - { - aEdtTitle.SetText( aScriptURL ); - } - - return( 0L ); -} - -bool ScValidationDlg::EnterRefStatus() -{ - ScTabViewShell *pTabViewShell = GetTabViewShell(); - - if( !pTabViewShell ) return false; - - sal_uInt16 nId = SLOTID; - SfxViewFrame* pViewFrm = pTabViewShell->GetViewFrame(); - SfxChildWindow* pWnd = pViewFrm->GetChildWindow( nId ); - - if ( pWnd && pWnd->GetWindow()!= this ) pWnd = NULL; - - SC_MOD()->SetRefDialog( nId, pWnd ? false : sal_True ); - - return true; -} - -bool ScValidationDlg::LeaveRefStatus() -{ - ScTabViewShell *pTabViewShell = GetTabViewShell(); - - if( !pTabViewShell ) return false; - - sal_uInt16 nId = SLOTID; - SfxViewFrame* pViewFrm = pTabViewShell->GetViewFrame(); - if ( pViewFrm->GetChildWindow( nId ) ) - { - DoClose( nId ); - } - return true; -} - -bool ScValidationDlg::SetupRefDlg() -{ - if ( m_bOwnRefHdlr ) return false; - if( EnterRefMode() ) - { - SetModal( false ); - return m_bOwnRefHdlr = true && EnterRefStatus(); - } - - return false; -} - -bool ScValidationDlg::RemoveRefDlg( sal_Bool bRestoreModal /* = sal_True */ ) -{ - bool bVisLock = false; - bool bFreeWindowLock = false; - - ScTabViewShell *pTabVwSh = GetTabViewShell(); - - if( !pTabVwSh ) return false; - - if ( SfxChildWindow* pWnd = pTabVwSh->GetViewFrame()->GetChildWindow( SID_VALIDITY_REFERENCE ) ) - { - bVisLock = static_cast<ScValidityRefChildWin*>(pWnd)->LockVisible( true ); - bFreeWindowLock = static_cast<ScValidityRefChildWin*>(pWnd)->LockFreeWindow( true ); - } - - if ( !m_bOwnRefHdlr ) return false; - if( LeaveRefStatus() && LeaveRefMode() ) - { - m_bOwnRefHdlr = false; - - if( bRestoreModal ) - SetModal( sal_True ); - } - - if ( SfxChildWindow* pWnd = pTabVwSh->GetViewFrame()->GetChildWindow( SID_VALIDITY_REFERENCE ) ) - { - static_cast<ScValidityRefChildWin*>(pWnd)->LockVisible( bVisLock ); - static_cast<ScValidityRefChildWin*>(pWnd)->LockFreeWindow( bFreeWindowLock ); - } - - return true; -} - -void ScTPValidationValue::ScRefButtonEx::Click() -{ - if( ScTPValidationValue *pParent = dynamic_cast< ScTPValidationValue*>( GetParent() ) ) - pParent->OnClick( this ); - - formula::RefButton::Click(); -} - -void ScTPValidationValue::OnClick( Button *pBtn ) -{ - if( pBtn == &m_btnRef ) - SetupRefDlg(); -} - -sal_Bool ScValidationDlg::IsChildFocus() -{ - if ( const Window *pWin = Application::GetFocusWindow() ) - while( NULL != ( pWin = pWin->GetParent() ) ) - if( pWin == this ) - return sal_True; - - return false; -} - - -bool ScValidationDlg::IsAlive() -{ - return SC_MOD()->IsAliveRefDlg( SLOTID, this ); -} - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |