LCOV - code coverage report
Current view: top level - sc/source/ui/dbgui - validate.cxx (source / functions) Hit Total Coverage
Test: libreoffice_filtered.info Lines: 0 473 0.0 %
Date: 2012-08-25 Functions: 0 67 0.0 %
Legend: Lines: hit not hit | Branches: + taken - not taken # not executed Branches: 0 0 -

           Branch data     Line data    Source code
       1                 :            : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
       2                 :            : /*************************************************************************
       3                 :            :  *
       4                 :            :  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
       5                 :            :  *
       6                 :            :  * Copyright 2000, 2010 Oracle and/or its affiliates.
       7                 :            :  *
       8                 :            :  * OpenOffice.org - a multi-platform office productivity suite
       9                 :            :  *
      10                 :            :  * This file is part of OpenOffice.org.
      11                 :            :  *
      12                 :            :  * OpenOffice.org is free software: you can redistribute it and/or modify
      13                 :            :  * it under the terms of the GNU Lesser General Public License version 3
      14                 :            :  * only, as published by the Free Software Foundation.
      15                 :            :  *
      16                 :            :  * OpenOffice.org is distributed in the hope that it will be useful,
      17                 :            :  * but WITHOUT ANY WARRANTY; without even the implied warranty of
      18                 :            :  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
      19                 :            :  * GNU Lesser General Public License version 3 for more details
      20                 :            :  * (a copy is included in the LICENSE file that accompanied this code).
      21                 :            :  *
      22                 :            :  * You should have received a copy of the GNU Lesser General Public License
      23                 :            :  * version 3 along with OpenOffice.org.  If not, see
      24                 :            :  * <http://www.openoffice.org/license.html>
      25                 :            :  * for a copy of the LGPLv3 License.
      26                 :            :  *
      27                 :            :  ************************************************************************/
      28                 :            : 
      29                 :            : 
      30                 :            : #ifdef SC_DLLIMPLEMENTATION
      31                 :            : #undef SC_DLLIMPLEMENTATION
      32                 :            : #endif
      33                 :            : 
      34                 :            : #include <comphelper/string.hxx>
      35                 :            : #include <vcl/svapp.hxx>
      36                 :            : #include <svl/aeitem.hxx>
      37                 :            : #include <svl/stritem.hxx>
      38                 :            : #include <svl/eitem.hxx>
      39                 :            : #include <svl/intitem.hxx>
      40                 :            : #include <basic/sbmeth.hxx>
      41                 :            : #include <basic/sbstar.hxx>
      42                 :            : #include <basic/sbmod.hxx>
      43                 :            : #include <sfx2/app.hxx>
      44                 :            : 
      45                 :            : #include "scresid.hxx"
      46                 :            : #include "sc.hrc"       // -> Slot IDs
      47                 :            : 
      48                 :            : #include "stringutil.hxx"
      49                 :            : #include "validat.hxx"
      50                 :            : #include "validate.hrc"
      51                 :            : #include "validate.hxx"
      52                 :            : #include "compiler.hxx"
      53                 :            : #include "formula/opcode.hxx"
      54                 :            : 
      55                 :            : // cell range picker
      56                 :            : #include "tabvwsh.hxx"
      57                 :            : #include <sfx2/viewfrm.hxx>
      58                 :            : #include <sfx2/childwin.hxx>
      59                 :            : #include "reffact.hxx"
      60                 :            : 
      61                 :            : // ============================================================================
      62                 :            : 
      63                 :            : static sal_uInt16 pValueRanges[] =
      64                 :            : {
      65                 :            :     FID_VALID_MODE, FID_VALID_ERRTEXT,
      66                 :            :     FID_VALID_LISTTYPE, FID_VALID_LISTTYPE,
      67                 :            :     0
      68                 :            : };
      69                 :            : 
      70                 :            : 
      71                 :            : // ============================================================================
      72                 :            : 
      73                 :          0 : ScValidationDlg::ScValidationDlg( Window*           pParent,
      74                 :            :                                  const SfxItemSet* pArgSet,
      75                 :            :                                  ScTabViewShell *pTabViewSh,
      76                 :            :                                  SfxBindings *pB /*= NULL*/
      77                 :            :                       ) :
      78                 :          0 :         ScValidationDlgBase( pParent ? pParent : SFX_APP()->GetTopWindow(), TAB_DLG_VALIDATION, pArgSet, pB ),
      79                 :            :             m_bOwnRefHdlr( false ),
      80                 :            :             m_pTabVwSh( pTabViewSh ),
      81                 :          0 :             m_bRefInputting( false )
      82                 :            : {
      83                 :          0 :     AddTabPage( TP_VALIDATION_VALUES,    ScTPValidationValue::Create, 0 );
      84                 :          0 :     AddTabPage( TP_VALIDATION_INPUTHELP, ScTPValidationHelp::Create,  0 );
      85                 :          0 :     AddTabPage( TP_VALIDATION_ERROR,     ScTPValidationError::Create, 0 );
      86                 :          0 :     FreeResource();
      87                 :          0 : }
      88                 :            : 
      89                 :          0 : void ScTPValidationValue::SetReferenceHdl( const ScRange&rRange , ScDocument* pDoc )
      90                 :            : {
      91                 :          0 :     if ( rRange.aStart != rRange.aEnd )
      92                 :          0 :         if ( ScValidationDlg *pValidationDlg = GetValidationDlg() )
      93                 :          0 :             if( m_pRefEdit )
      94                 :          0 :                 pValidationDlg->RefInputStart( m_pRefEdit );
      95                 :            : 
      96                 :          0 :     if ( m_pRefEdit )
      97                 :            :     {
      98                 :          0 :         String  aStr;
      99                 :          0 :         rRange.Format( aStr, SCR_ABS_3D, pDoc );
     100                 :          0 :         m_pRefEdit->SetRefString( aStr );
     101                 :            :     }
     102                 :          0 : }
     103                 :            : 
     104                 :          0 : void ScTPValidationValue:: SetActiveHdl()
     105                 :            : {
     106                 :          0 :     if ( m_pRefEdit ) m_pRefEdit->GrabFocus();
     107                 :            : 
     108                 :          0 :     if ( ScValidationDlg *pValidationDlg = GetValidationDlg() )
     109                 :          0 :         if( m_pRefEdit )
     110                 :            :         {
     111                 :          0 :             pValidationDlg->RefInputDone();
     112                 :            :         }
     113                 :          0 : }
     114                 :            : 
     115                 :          0 : void            ScTPValidationValue::RefInputStartPreHdl( formula::RefEdit* pEdit, formula::RefButton* pButton )
     116                 :            : {
     117                 :          0 :     if ( ScValidationDlg *pValidationDlg = GetValidationDlg() )
     118                 :            :     {
     119                 :          0 :         if( pEdit == m_pRefEdit )
     120                 :            :         {
     121                 :          0 :             if( Window *pPreWnd = pEdit==&maEdMax?&maFtMax:(pEdit==&maEdMin?&maFtMin:NULL) )
     122                 :            :             {
     123                 :          0 :                 pPreWnd->SetParent( pValidationDlg );
     124                 :          0 :                 pPreWnd->Hide();
     125                 :            :             }
     126                 :            : 
     127                 :          0 :             m_pRefEdit->SetParent( pValidationDlg );
     128                 :            :         }
     129                 :            : 
     130                 :          0 :         if( pButton == &m_btnRef )m_btnRef.SetParent( pValidationDlg );
     131                 :            :     }
     132                 :          0 : }
     133                 :            : 
     134                 :          0 : void            ScTPValidationValue::RefInputDonePreHdl()
     135                 :            : {
     136                 :            : 
     137                 :          0 :     if( m_pRefEdit && m_pRefEdit->GetParent()!= this )
     138                 :            :     {
     139                 :          0 :         if( Window *pPreWnd = m_pRefEdit==&maEdMax?&maFtMax:(m_pRefEdit==&maEdMin?&maFtMin:NULL) )
     140                 :            :         {
     141                 :          0 :             pPreWnd->SetParent( this );
     142                 :          0 :             pPreWnd->Show();
     143                 :            :         }
     144                 :            : 
     145                 :          0 :         m_pRefEdit->SetParent( this );
     146                 :            : 
     147                 :          0 :         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
     148                 :            :     }
     149                 :            : 
     150                 :          0 :     if( m_btnRef.GetParent()!=this ) m_btnRef.SetParent( this );
     151                 :          0 : }
     152                 :            : 
     153                 :          0 : void            ScTPValidationValue::RefInputDonePostHdl()
     154                 :            : {
     155                 :            : 
     156                 :            : 
     157                 :          0 :     if( m_pRefEdit && !m_pRefEdit->HasFocus() )
     158                 :          0 :         m_pRefEdit->GrabFocus();
     159                 :            : 
     160                 :          0 : }
     161                 :            : 
     162                 :            : 
     163                 :          0 : sal_Bool ScValidationDlg::Close()
     164                 :            : {
     165                 :          0 :     if( m_bOwnRefHdlr )
     166                 :          0 :         if( SfxTabPage* pPage = GetTabPage( TP_VALIDATION_VALUES ) )
     167                 :          0 :             static_cast<ScTPValidationValue*>(pPage)->RemoveRefDlg();
     168                 :            : 
     169                 :          0 :     return ScValidationDlgBase::Close();
     170                 :            : }
     171                 :            : 
     172                 :          0 : ScValidationDlg::~ScValidationDlg()
     173                 :            : {
     174                 :          0 :     if( m_bOwnRefHdlr )
     175                 :          0 :         RemoveRefDlg( false );
     176                 :          0 : }
     177                 :            : 
     178                 :            : 
     179                 :            : // ============================================================================
     180                 :            : 
     181                 :            : namespace {
     182                 :            : 
     183                 :            : /** Converts the passed ScValidationMode to the position in the list box. */
     184                 :          0 : sal_uInt16 lclGetPosFromValMode( ScValidationMode eValMode )
     185                 :            : {
     186                 :          0 :     sal_uInt16 nLbPos = SC_VALIDDLG_ALLOW_ANY;
     187                 :          0 :     switch( eValMode )
     188                 :            :     {
     189                 :          0 :         case SC_VALID_ANY:      nLbPos = SC_VALIDDLG_ALLOW_ANY;     break;
     190                 :          0 :         case SC_VALID_WHOLE:    nLbPos = SC_VALIDDLG_ALLOW_WHOLE;   break;
     191                 :          0 :         case SC_VALID_DECIMAL:  nLbPos = SC_VALIDDLG_ALLOW_DECIMAL; break;
     192                 :          0 :         case SC_VALID_DATE:     nLbPos = SC_VALIDDLG_ALLOW_DATE;    break;
     193                 :          0 :         case SC_VALID_TIME:     nLbPos = SC_VALIDDLG_ALLOW_TIME;    break;
     194                 :          0 :         case SC_VALID_TEXTLEN:  nLbPos = SC_VALIDDLG_ALLOW_TEXTLEN; break;
     195                 :          0 :         case SC_VALID_LIST:     nLbPos = SC_VALIDDLG_ALLOW_RANGE;   break;
     196                 :          0 :         case SC_VALID_CUSTOM:   nLbPos = SC_VALIDDLG_ALLOW_ANY;     break;  // not supported
     197                 :            :         default:    OSL_FAIL( "lclGetPosFromValMode - unknown validity mode" );
     198                 :            :     }
     199                 :          0 :     return nLbPos;
     200                 :            : }
     201                 :            : 
     202                 :            : /** Converts the passed list box position to an ScValidationMode. */
     203                 :          0 : ScValidationMode lclGetValModeFromPos( sal_uInt16 nLbPos )
     204                 :            : {
     205                 :          0 :     ScValidationMode eValMode = SC_VALID_ANY;
     206                 :          0 :     switch( nLbPos )
     207                 :            :     {
     208                 :          0 :         case SC_VALIDDLG_ALLOW_ANY:     eValMode = SC_VALID_ANY;        break;
     209                 :          0 :         case SC_VALIDDLG_ALLOW_WHOLE:   eValMode = SC_VALID_WHOLE;      break;
     210                 :          0 :         case SC_VALIDDLG_ALLOW_DECIMAL: eValMode = SC_VALID_DECIMAL;    break;
     211                 :          0 :         case SC_VALIDDLG_ALLOW_DATE:    eValMode = SC_VALID_DATE;       break;
     212                 :          0 :         case SC_VALIDDLG_ALLOW_TIME:    eValMode = SC_VALID_TIME;       break;
     213                 :          0 :         case SC_VALIDDLG_ALLOW_RANGE:   eValMode = SC_VALID_LIST;       break;
     214                 :          0 :         case SC_VALIDDLG_ALLOW_LIST:    eValMode = SC_VALID_LIST;       break;
     215                 :          0 :         case SC_VALIDDLG_ALLOW_TEXTLEN: eValMode = SC_VALID_TEXTLEN;    break;
     216                 :            :         default:    OSL_FAIL( "lclGetValModeFromPos - invalid list box position" );
     217                 :            :     }
     218                 :          0 :     return eValMode;
     219                 :            : }
     220                 :            : 
     221                 :            : /** Converts the passed ScConditionMode to the position in the list box. */
     222                 :          0 : sal_uInt16 lclGetPosFromCondMode( ScConditionMode eCondMode )
     223                 :            : {
     224                 :          0 :     sal_uInt16 nLbPos = SC_VALIDDLG_DATA_EQUAL;
     225                 :          0 :     switch( eCondMode )
     226                 :            :     {
     227                 :            :         case SC_COND_NONE:          // may occur in old XML files after Excel import
     228                 :          0 :         case SC_COND_EQUAL:         nLbPos = SC_VALIDDLG_DATA_EQUAL;        break;
     229                 :          0 :         case SC_COND_LESS:          nLbPos = SC_VALIDDLG_DATA_LESS;         break;
     230                 :          0 :         case SC_COND_GREATER:       nLbPos = SC_VALIDDLG_DATA_GREATER;      break;
     231                 :          0 :         case SC_COND_EQLESS:        nLbPos = SC_VALIDDLG_DATA_EQLESS;       break;
     232                 :          0 :         case SC_COND_EQGREATER:     nLbPos = SC_VALIDDLG_DATA_EQGREATER;    break;
     233                 :          0 :         case SC_COND_NOTEQUAL:      nLbPos = SC_VALIDDLG_DATA_NOTEQUAL;     break;
     234                 :          0 :         case SC_COND_BETWEEN:       nLbPos = SC_VALIDDLG_DATA_VALIDRANGE;      break;
     235                 :          0 :         case SC_COND_NOTBETWEEN:    nLbPos = SC_VALIDDLG_DATA_INVALIDRANGE;   break;
     236                 :            :         default:    OSL_FAIL( "lclGetPosFromCondMode - unknown condition mode" );
     237                 :            :     }
     238                 :          0 :     return nLbPos;
     239                 :            : }
     240                 :            : 
     241                 :            : /** Converts the passed list box position to an ScConditionMode. */
     242                 :          0 : ScConditionMode lclGetCondModeFromPos( sal_uInt16 nLbPos )
     243                 :            : {
     244                 :          0 :     ScConditionMode eCondMode = SC_COND_EQUAL;
     245                 :          0 :     switch( nLbPos )
     246                 :            :     {
     247                 :          0 :         case SC_VALIDDLG_DATA_EQUAL:        eCondMode = SC_COND_EQUAL;      break;
     248                 :          0 :         case SC_VALIDDLG_DATA_LESS:         eCondMode = SC_COND_LESS;       break;
     249                 :          0 :         case SC_VALIDDLG_DATA_GREATER:      eCondMode = SC_COND_GREATER;    break;
     250                 :          0 :         case SC_VALIDDLG_DATA_EQLESS:       eCondMode = SC_COND_EQLESS;     break;
     251                 :          0 :         case SC_VALIDDLG_DATA_EQGREATER:    eCondMode = SC_COND_EQGREATER;  break;
     252                 :          0 :         case SC_VALIDDLG_DATA_NOTEQUAL:     eCondMode = SC_COND_NOTEQUAL;   break;
     253                 :          0 :         case SC_VALIDDLG_DATA_VALIDRANGE:      eCondMode = SC_COND_BETWEEN;    break;
     254                 :          0 :         case SC_VALIDDLG_DATA_INVALIDRANGE:   eCondMode = SC_COND_NOTBETWEEN; break;
     255                 :            :         default:    OSL_FAIL( "lclGetCondModeFromPos - invalid list box position" );
     256                 :            :     }
     257                 :          0 :     return eCondMode;
     258                 :            : }
     259                 :            : 
     260                 :            : /** Converts line feed separated string to a formula with strings separated by semicolons.
     261                 :            :     @descr  Keeps all empty strings.
     262                 :            :     Example: abc\ndef\n\nghi -> "abc";"def";"";"ghi".
     263                 :            :     @param rFmlaStr  (out-param) The converted formula string. */
     264                 :          0 : void lclGetFormulaFromStringList( String& rFmlaStr, const String& rStringList, sal_Unicode cFmlaSep )
     265                 :            : {
     266                 :          0 :     rFmlaStr.Erase();
     267                 :          0 :     xub_StrLen nTokenCnt = comphelper::string::getTokenCount(rStringList, '\n');
     268                 :          0 :     for( xub_StrLen nToken = 0, nStringIx = 0; nToken < nTokenCnt; ++nToken )
     269                 :            :     {
     270                 :          0 :         String aToken( rStringList.GetToken( 0, '\n', nStringIx ) );
     271                 :          0 :         ScGlobal::AddQuotes( aToken, '"' );
     272                 :          0 :         ScGlobal::AddToken( rFmlaStr, aToken, cFmlaSep );
     273                 :          0 :     }
     274                 :          0 :     if( !rFmlaStr.Len() )
     275                 :          0 :         rFmlaStr.AssignAscii( "\"\"" );
     276                 :          0 : }
     277                 :            : 
     278                 :            : 
     279                 :            : /** Converts formula with strings separated by semicolons to line feed separated string.
     280                 :            :     @descr  Keeps all empty strings. Ignores all empty tokens (multiple semicolons).
     281                 :            :     Example: "abc";;;"def";"";"ghi" -> abc\ndef\n\nghi.
     282                 :            :     @param rStringList  (out-param) The converted line feed separated string list.
     283                 :            :     @return  true = Conversion successful. */
     284                 :          0 : bool lclGetStringListFromFormula( String& rStringList, const String& rFmlaStr, sal_Unicode cFmlaSep )
     285                 :            : {
     286                 :          0 :     String aQuotes( RTL_CONSTASCII_USTRINGPARAM( "\"\"" ) );
     287                 :          0 :     xub_StrLen nTokenCnt = ScStringUtil::GetQuotedTokenCount(rFmlaStr, aQuotes, cFmlaSep );
     288                 :            : 
     289                 :          0 :     rStringList.Erase();
     290                 :          0 :     bool bIsStringList = (nTokenCnt > 0);
     291                 :          0 :     bool bTokenAdded = false;
     292                 :            : 
     293                 :          0 :     for( xub_StrLen nToken = 0, nStringIx = 0; bIsStringList && (nToken < nTokenCnt); ++nToken )
     294                 :            :     {
     295                 :          0 :         String aToken( ScStringUtil::GetQuotedToken(rFmlaStr, 0, aQuotes, cFmlaSep, nStringIx ) );
     296                 :          0 :         aToken = comphelper::string::strip(aToken, ' ');
     297                 :          0 :         if( aToken.Len() )      // ignore empty tokens, i.e. "a";;"b"
     298                 :            :         {
     299                 :          0 :             bIsStringList = ScGlobal::IsQuoted( aToken, '"' );
     300                 :          0 :             if( bIsStringList )
     301                 :            :             {
     302                 :          0 :                 ScGlobal::EraseQuotes( aToken, '"' );
     303                 :          0 :                 ScGlobal::AddToken( rStringList, aToken, '\n', 1, bTokenAdded );
     304                 :          0 :                 bTokenAdded = true;
     305                 :            :             }
     306                 :            :         }
     307                 :          0 :     }
     308                 :            : 
     309                 :          0 :     return bIsStringList;
     310                 :            : }
     311                 :            : 
     312                 :            : } // namespace
     313                 :            : 
     314                 :            : // ----------------------------------------------------------------------------
     315                 :            : 
     316                 :          0 : ScTPValidationValue::ScTPValidationValue( Window* pParent, const SfxItemSet& rArgSet ) :
     317                 :            :     SfxTabPage( pParent, ScResId( TP_VALIDATION_VALUES ), rArgSet ),
     318                 :            :     maFtAllow ( this, ScResId( FT_ALLOW ) ),
     319                 :            :     maLbAllow ( this, ScResId( LB_ALLOW ) ),
     320                 :            :     maCbAllow ( this, ScResId( TSB_ALLOW_BLANKS ) ),
     321                 :            :     maCbShow  ( this, ScResId( CB_SHOWLIST ) ),
     322                 :            :     maCbSort  ( this, ScResId( CB_SORTLIST ) ),
     323                 :            :     maFtValue ( this, ScResId( FT_VALUE ) ),
     324                 :            :     maLbValue ( this, ScResId( LB_VALUE ) ),
     325                 :            :     maFtMin   ( this, ScResId( FT_MIN ) ),
     326                 :            :     maEdMin   ( this, ScResId( EDT_MIN ) ),
     327                 :            :     maEdList  ( this, ScResId( EDT_LIST ) ),
     328                 :            :     maFtMax   ( this, ScResId( FT_MAX ) ),
     329                 :            :     maEdMax   ( this, ScResId( EDT_MAX ) ),
     330                 :            :     maFtHint  ( this, ScResId( FT_SOURCEHINT ) ),
     331                 :            :     maStrMin  ( ScResId( SCSTR_VALID_MINIMUM ) ),
     332                 :            :     maStrMax  ( ScResId( SCSTR_VALID_MAXIMUM ) ),
     333                 :            :     maStrValue( ScResId( SCSTR_VALID_VALUE ) ),
     334                 :            :     maStrRange( ScResId( SCSTR_VALID_RANGE ) ),
     335                 :            :     maStrList ( ScResId( SCSTR_VALID_LIST ) ),
     336                 :          0 :     m_btnRef( this, ScResId( RB_VALIDITY_REF ) )
     337                 :            : {
     338                 :          0 :     Init();
     339                 :          0 :     FreeResource();
     340                 :            : 
     341                 :            :     // list separator in formulas
     342                 :          0 :     String aListSep = ::ScCompiler::GetNativeSymbol( ocSep );
     343                 :            :     OSL_ENSURE( aListSep.Len() == 1, "ScTPValidationValue::ScTPValidationValue - list separator error" );
     344                 :          0 :     mcFmlaSep = aListSep.Len() ? aListSep.GetChar( 0 ) : ';';
     345                 :          0 :     m_btnRef.Hide(); // cell range picker
     346                 :          0 : }
     347                 :            : 
     348                 :          0 : ScTPValidationValue::~ScTPValidationValue()
     349                 :            : {
     350                 :          0 : }
     351                 :            : 
     352                 :          0 : void ScTPValidationValue::Init()
     353                 :            : {
     354                 :          0 :     maLbAllow.SetSelectHdl( LINK( this, ScTPValidationValue, SelectHdl ) );
     355                 :          0 :     maLbValue.SetSelectHdl( LINK( this, ScTPValidationValue, SelectHdl ) );
     356                 :          0 :     maCbShow.SetClickHdl( LINK( this, ScTPValidationValue, CheckHdl ) );
     357                 :            : 
     358                 :            :     // cell range picker
     359                 :          0 :     maEdMin.SetGetFocusHdl( LINK( this, ScTPValidationValue, EditSetFocusHdl ) );
     360                 :          0 :     maEdMin.SetLoseFocusHdl( LINK( this, ScTPValidationValue, KillFocusHdl ) );
     361                 :          0 :     maEdMax.SetGetFocusHdl( LINK( this, ScTPValidationValue, EditSetFocusHdl ) );
     362                 :          0 :     m_btnRef.SetLoseFocusHdl( LINK( this, ScTPValidationValue, KillFocusHdl ) );
     363                 :          0 :     maEdMax.SetLoseFocusHdl( LINK( this, ScTPValidationValue, KillFocusHdl ) );
     364                 :            : 
     365                 :          0 :     maLbAllow.SelectEntryPos( SC_VALIDDLG_ALLOW_ANY );
     366                 :          0 :     maLbValue.SelectEntryPos( SC_VALIDDLG_DATA_EQUAL );
     367                 :            : 
     368                 :          0 :     SelectHdl( NULL );
     369                 :          0 :     CheckHdl( NULL );
     370                 :          0 : }
     371                 :            : 
     372                 :          0 : SfxTabPage* ScTPValidationValue::Create( Window* pParent, const SfxItemSet& rArgSet )
     373                 :            : {
     374                 :          0 :     return( new ScTPValidationValue( pParent, rArgSet ) );
     375                 :            : }
     376                 :            : 
     377                 :          0 : sal_uInt16* ScTPValidationValue::GetRanges()
     378                 :            : {
     379                 :          0 :     return pValueRanges;
     380                 :            : }
     381                 :            : 
     382                 :          0 : void ScTPValidationValue::Reset( const SfxItemSet& rArgSet )
     383                 :            : {
     384                 :            :     const SfxPoolItem* pItem;
     385                 :            : 
     386                 :          0 :     sal_uInt16 nLbPos = SC_VALIDDLG_ALLOW_ANY;
     387                 :          0 :     if( rArgSet.GetItemState( FID_VALID_MODE, sal_True, &pItem ) == SFX_ITEM_SET )
     388                 :            :         nLbPos = lclGetPosFromValMode( static_cast< ScValidationMode >(
     389                 :          0 :             static_cast< const SfxAllEnumItem* >( pItem )->GetValue() ) );
     390                 :          0 :     maLbAllow.SelectEntryPos( nLbPos );
     391                 :            : 
     392                 :          0 :     nLbPos = SC_VALIDDLG_DATA_EQUAL;
     393                 :          0 :     if( rArgSet.GetItemState( FID_VALID_CONDMODE, sal_True, &pItem ) == SFX_ITEM_SET )
     394                 :            :         nLbPos = lclGetPosFromCondMode( static_cast< ScConditionMode >(
     395                 :          0 :             static_cast< const SfxAllEnumItem* >( pItem )->GetValue() ) );
     396                 :          0 :     maLbValue.SelectEntryPos( nLbPos );
     397                 :            : 
     398                 :            :     // *** check boxes ***
     399                 :          0 :     sal_Bool bCheck = sal_True;
     400                 :          0 :     if( rArgSet.GetItemState( FID_VALID_BLANK, sal_True, &pItem ) == SFX_ITEM_SET )
     401                 :          0 :         bCheck = static_cast< const SfxBoolItem* >( pItem )->GetValue();
     402                 :          0 :     maCbAllow.Check( bCheck );
     403                 :            : 
     404                 :          0 :     sal_Int32 nListType = ValidListType::UNSORTED;
     405                 :          0 :     if( rArgSet.GetItemState( FID_VALID_LISTTYPE, sal_True, &pItem ) == SFX_ITEM_SET )
     406                 :          0 :         nListType = static_cast< const SfxInt16Item* >( pItem )->GetValue();
     407                 :          0 :     maCbShow.Check( nListType != ValidListType::INVISIBLE );
     408                 :          0 :     maCbSort.Check( nListType == ValidListType::SORTEDASCENDING );
     409                 :            : 
     410                 :            :     // *** formulas ***
     411                 :          0 :     String aFmlaStr;
     412                 :          0 :     if ( rArgSet.GetItemState( FID_VALID_VALUE1, sal_True, &pItem ) == SFX_ITEM_SET )
     413                 :          0 :         aFmlaStr = static_cast< const SfxStringItem* >( pItem )->GetValue();
     414                 :          0 :     SetFirstFormula( aFmlaStr );
     415                 :            : 
     416                 :          0 :     aFmlaStr.Erase();
     417                 :          0 :     if ( rArgSet.GetItemState( FID_VALID_VALUE2, sal_True, &pItem ) == SFX_ITEM_SET )
     418                 :          0 :         aFmlaStr = static_cast< const SfxStringItem* >( pItem )->GetValue();
     419                 :          0 :     SetSecondFormula( aFmlaStr );
     420                 :            : 
     421                 :          0 :     SelectHdl( NULL );
     422                 :          0 :     CheckHdl( NULL );
     423                 :          0 : }
     424                 :            : 
     425                 :          0 : sal_Bool ScTPValidationValue::FillItemSet( SfxItemSet& rArgSet )
     426                 :            : {
     427                 :          0 :     sal_Int16 nListType = maCbShow.IsChecked() ?
     428                 :          0 :         (maCbSort.IsChecked() ? ValidListType::SORTEDASCENDING : ValidListType::UNSORTED) :
     429                 :          0 :         ValidListType::INVISIBLE;
     430                 :            : 
     431                 :            :     rArgSet.Put( SfxAllEnumItem( FID_VALID_MODE, sal::static_int_cast<sal_uInt16>(
     432                 :          0 :                     lclGetValModeFromPos( maLbAllow.GetSelectEntryPos() ) ) ) );
     433                 :            :     rArgSet.Put( SfxAllEnumItem( FID_VALID_CONDMODE, sal::static_int_cast<sal_uInt16>(
     434                 :          0 :                     lclGetCondModeFromPos( maLbValue.GetSelectEntryPos() ) ) ) );
     435                 :          0 :     rArgSet.Put( SfxStringItem( FID_VALID_VALUE1, GetFirstFormula() ) );
     436                 :          0 :     rArgSet.Put( SfxStringItem( FID_VALID_VALUE2, GetSecondFormula() ) );
     437                 :          0 :     rArgSet.Put( SfxBoolItem( FID_VALID_BLANK, maCbAllow.IsChecked() ) );
     438                 :          0 :     rArgSet.Put( SfxInt16Item( FID_VALID_LISTTYPE, nListType ) );
     439                 :          0 :     return sal_True;
     440                 :            : }
     441                 :            : 
     442                 :          0 : String ScTPValidationValue::GetFirstFormula() const
     443                 :            : {
     444                 :          0 :     String aFmlaStr;
     445                 :          0 :     if( maLbAllow.GetSelectEntryPos() == SC_VALIDDLG_ALLOW_LIST )
     446                 :          0 :         lclGetFormulaFromStringList( aFmlaStr, maEdList.GetText(), mcFmlaSep );
     447                 :            :     else
     448                 :          0 :         aFmlaStr = maEdMin.GetText();
     449                 :          0 :     return aFmlaStr;
     450                 :            : }
     451                 :            : 
     452                 :          0 : String ScTPValidationValue::GetSecondFormula() const
     453                 :            : {
     454                 :          0 :     return maEdMax.GetText();
     455                 :            : }
     456                 :            : 
     457                 :          0 : void ScTPValidationValue::SetFirstFormula( const String& rFmlaStr )
     458                 :            : {
     459                 :            :     // try if formula is a string list, validation mode must already be set
     460                 :          0 :     String aStringList;
     461                 :          0 :     if( (maLbAllow.GetSelectEntryPos() == SC_VALIDDLG_ALLOW_RANGE) &&
     462                 :          0 :         lclGetStringListFromFormula( aStringList, rFmlaStr, mcFmlaSep ) )
     463                 :            :     {
     464                 :          0 :         maEdList.SetText( aStringList );
     465                 :          0 :         maEdMin.SetText( EMPTY_STRING );
     466                 :            :         // change validation mode to string list
     467                 :          0 :         maLbAllow.SelectEntryPos( SC_VALIDDLG_ALLOW_LIST );
     468                 :            :     }
     469                 :            :     else
     470                 :            :     {
     471                 :          0 :         maEdMin.SetText( rFmlaStr );
     472                 :          0 :         maEdList.SetText( EMPTY_STRING );
     473                 :          0 :     }
     474                 :          0 : }
     475                 :            : 
     476                 :          0 : void ScTPValidationValue::SetSecondFormula( const String& rFmlaStr )
     477                 :            : {
     478                 :          0 :     maEdMax.SetText( rFmlaStr );
     479                 :          0 : }
     480                 :            : 
     481                 :          0 : ScValidationDlg * ScTPValidationValue::GetValidationDlg()
     482                 :            : {
     483                 :          0 :     if( Window *pParent = GetParent() )
     484                 :          0 :         do{
     485                 :          0 :             if ( dynamic_cast<ScValidationDlg*>( pParent ) )
     486                 :          0 :                 return static_cast< ScValidationDlg * >( pParent );
     487                 :            :         }while ( NULL != ( pParent = pParent->GetParent() ) );
     488                 :          0 :     return NULL;
     489                 :            : }
     490                 :            : 
     491                 :          0 : void ScTPValidationValue::SetupRefDlg()
     492                 :            : {
     493                 :          0 :     if( ScValidationDlg *pValidationDlg = GetValidationDlg() )
     494                 :          0 :         if( pValidationDlg->SetupRefDlg() )
     495                 :            :         {
     496                 :          0 :             pValidationDlg->SetHandler( this );
     497                 :          0 :             pValidationDlg->SetSetRefHdl( (ScRefHandlerHelper::PFUNCSETREFHDLTYPE)( &ScTPValidationValue::SetReferenceHdl ) );
     498                 :          0 :             pValidationDlg->SetSetActHdl( (ScRefHandlerHelper::PCOMMONHDLTYPE)( &ScTPValidationValue::SetActiveHdl ) );
     499                 :          0 :             pValidationDlg->SetRefInputStartPreHdl( (ScRefHandlerHelper::PINPUTSTARTDLTYPE)( &ScTPValidationValue::RefInputStartPreHdl ) );
     500                 :          0 :             pValidationDlg->SetRefInputDonePreHdl( (ScRefHandlerHelper::PCOMMONHDLTYPE)( &ScTPValidationValue::RefInputDonePreHdl ) );
     501                 :          0 :             pValidationDlg->SetRefInputDonePostHdl( (ScRefHandlerHelper::PCOMMONHDLTYPE)( &ScTPValidationValue::RefInputDonePostHdl ) );
     502                 :            : 
     503                 :          0 :             if ( maEdMax.IsVisible() ) { m_pRefEdit = &maEdMax; }
     504                 :          0 :             else if ( maEdMin.IsVisible() ) {  m_pRefEdit = &maEdMin; }
     505                 :            : 
     506                 :          0 :             if( m_pRefEdit && !m_pRefEdit->HasFocus() ) m_pRefEdit->GrabFocus();
     507                 :            : 
     508                 :          0 :             if( m_pRefEdit ) m_pRefEdit->SetRefDialog( pValidationDlg );
     509                 :          0 :             m_btnRef.SetReferences( pValidationDlg, m_pRefEdit );
     510                 :            :         }
     511                 :          0 : }
     512                 :            : 
     513                 :          0 : void ScTPValidationValue::RemoveRefDlg()
     514                 :            : {
     515                 :          0 :     if( ScValidationDlg *pValidationDlg = GetValidationDlg() )
     516                 :          0 :         if( pValidationDlg->RemoveRefDlg() )
     517                 :            :         {
     518                 :          0 :             pValidationDlg->SetHandler( NULL );
     519                 :          0 :             pValidationDlg->SetSetRefHdl( NULL );
     520                 :          0 :             pValidationDlg->SetSetActHdl( NULL );
     521                 :          0 :             pValidationDlg->SetRefInputStartPreHdl( NULL );
     522                 :          0 :             pValidationDlg->SetRefInputDonePreHdl( NULL );
     523                 :          0 :             pValidationDlg->SetRefInputDonePostHdl( NULL );
     524                 :            : 
     525                 :          0 :             if( m_pRefEdit ) m_pRefEdit->SetRefDialog( NULL );
     526                 :          0 :             m_pRefEdit = NULL;
     527                 :            : 
     528                 :          0 :             m_btnRef.SetReferences( NULL, NULL );
     529                 :            : 
     530                 :            : #if ! defined( WNT ) && !defined( _MSC_VER )
     531                 :          0 :             TidyListBoxes();
     532                 :            : #endif
     533                 :            :         }
     534                 :          0 : }
     535                 :            : 
     536                 :          0 : void ScTPValidationValue::TidyListBoxes()
     537                 :            : {
     538                 :          0 :     if ( Window *pWnd = GetChild( 0 ) )
     539                 :            :     {
     540                 :          0 :         bool bFindLst = false;
     541                 :          0 :         std::list<Window*> alstOrder;
     542                 :            : 
     543                 :          0 :         do{
     544                 :          0 :             if( pWnd->GetParent() == this )
     545                 :            :             {
     546                 :          0 :                 if ( !bFindLst )
     547                 :            :                 {
     548                 :            :                     try{
     549                 :          0 :                         if( dynamic_cast<ListBox*>(pWnd)||dynamic_cast<ListBox*>(pWnd->GetWindow(WINDOW_CLIENT) ) )
     550                 :          0 :                             bFindLst = true;
     551                 :            :                     }
     552                 :          0 :                     catch( ... )
     553                 :            :                     {
     554                 :          0 :                         if ( *(void**)pWnd == *(void**)&maLbValue )
     555                 :          0 :                             bFindLst = true;
     556                 :          0 :                         else if ( Window *pClient = pWnd->GetWindow( WINDOW_CLIENT ) )
     557                 :          0 :                             if ( *(void**)pClient == *(void**)&maLbValue )
     558                 :          0 :                                 bFindLst = true;
     559                 :            :                     }
     560                 :            :                 }
     561                 :            : 
     562                 :          0 :                 if ( bFindLst )
     563                 :          0 :                     alstOrder.push_back( pWnd->GetWindow( WINDOW_CLIENT ) );
     564                 :            :             }
     565                 :          0 :         }while( NULL != ( pWnd = pWnd->GetWindow( WINDOW_NEXT  ) ) );
     566                 :            : 
     567                 :          0 :         pWnd = GetChild(0);
     568                 :            : 
     569                 :          0 :         while( std::find( alstOrder.begin(), alstOrder.end(), pWnd ) != alstOrder.end() && NULL != ( pWnd = pWnd->GetWindow( WINDOW_NEXT) ) ) ;
     570                 :            : 
     571                 :          0 :         if ( pWnd )
     572                 :            :         {
     573                 :          0 :             for ( std::list<Window*>::iterator i = alstOrder.begin(); i!=alstOrder.end(); ++i )
     574                 :            :             {
     575                 :          0 :                 Window *pParent = (*i)->GetParent();
     576                 :          0 :                 (*i)->SetParent( pWnd );
     577                 :          0 :                 (*i)->SetParent( pParent );
     578                 :            :             }
     579                 :          0 :         }
     580                 :            :     }
     581                 :          0 : }
     582                 :            : 
     583                 :          0 : IMPL_LINK_NOARG(ScTPValidationValue, EditSetFocusHdl)
     584                 :            : {
     585                 :          0 :     sal_uInt16  nPos=maLbAllow.GetSelectEntryPos();
     586                 :            : 
     587                 :          0 :     if ( nPos == SC_VALIDDLG_ALLOW_RANGE )
     588                 :            :     {
     589                 :          0 :         SetupRefDlg();
     590                 :            :     }
     591                 :            : 
     592                 :          0 :     return 0;
     593                 :            : }
     594                 :            : 
     595                 :          0 : IMPL_LINK( ScTPValidationValue, KillFocusHdl, Window *, pWnd )
     596                 :            : {
     597                 :          0 :     if( pWnd == m_pRefEdit || pWnd == &m_btnRef )
     598                 :          0 :         if( ScValidationDlg *pValidationDlg = GetValidationDlg() )
     599                 :          0 :             if ( (pValidationDlg->IsActive() || pValidationDlg->IsChildFocus() ) && !pValidationDlg->IsRefInputting() )
     600                 :          0 :                 if( ( !m_pRefEdit || !m_pRefEdit->HasFocus()) && !m_btnRef.HasFocus() )
     601                 :            :                 {
     602                 :          0 :                     RemoveRefDlg();
     603                 :            :                 }
     604                 :            : 
     605                 :          0 :     return 0;
     606                 :            : }
     607                 :            : 
     608                 :            : // ----------------------------------------------------------------------------
     609                 :            : 
     610                 :          0 : IMPL_LINK_NOARG(ScTPValidationValue, SelectHdl)
     611                 :            : {
     612                 :          0 :     sal_uInt16 nLbPos = maLbAllow.GetSelectEntryPos();
     613                 :          0 :     bool bEnable = (nLbPos != SC_VALIDDLG_ALLOW_ANY);
     614                 :          0 :     bool bRange = (nLbPos == SC_VALIDDLG_ALLOW_RANGE);
     615                 :          0 :     bool bList = (nLbPos == SC_VALIDDLG_ALLOW_LIST);
     616                 :            : 
     617                 :          0 :     maCbAllow.Enable( bEnable );   // Empty cell
     618                 :          0 :     maFtValue.Enable( bEnable );
     619                 :          0 :     maLbValue.Enable( bEnable );
     620                 :          0 :     maFtMin.Enable( bEnable );
     621                 :          0 :     maEdMin.Enable( bEnable );
     622                 :          0 :     maEdList.Enable( bEnable );
     623                 :          0 :     maFtMax.Enable( bEnable );
     624                 :          0 :     maEdMax.Enable( bEnable );
     625                 :            : 
     626                 :          0 :     bool bShowMax = false;
     627                 :          0 :     if( bRange )
     628                 :          0 :         maFtMin.SetText( maStrRange );
     629                 :          0 :     else if( bList )
     630                 :          0 :         maFtMin.SetText( maStrList );
     631                 :            :     else
     632                 :            :     {
     633                 :          0 :         switch( maLbValue.GetSelectEntryPos() )
     634                 :            :         {
     635                 :            :             case SC_VALIDDLG_DATA_EQUAL:
     636                 :          0 :             case SC_VALIDDLG_DATA_NOTEQUAL:     maFtMin.SetText( maStrValue );  break;
     637                 :            : 
     638                 :            :             case SC_VALIDDLG_DATA_LESS:
     639                 :          0 :             case SC_VALIDDLG_DATA_EQLESS:       maFtMin.SetText( maStrMax );    break;
     640                 :            : 
     641                 :            :             case SC_VALIDDLG_DATA_VALIDRANGE:
     642                 :          0 :             case SC_VALIDDLG_DATA_INVALIDRANGE:   bShowMax = true;    // fall through
     643                 :            :             case SC_VALIDDLG_DATA_GREATER:
     644                 :          0 :             case SC_VALIDDLG_DATA_EQGREATER:    maFtMin.SetText( maStrMin );    break;
     645                 :            : 
     646                 :            :             default:
     647                 :            :                 OSL_FAIL( "ScTPValidationValue::SelectHdl - unknown condition mode" );
     648                 :            :         }
     649                 :            :     }
     650                 :            : 
     651                 :          0 :     maCbShow.Show( bRange || bList );
     652                 :          0 :     maCbSort.Show( bRange || bList );
     653                 :          0 :     maFtValue.Show( !bRange && !bList );
     654                 :          0 :     maLbValue.Show( !bRange && !bList );
     655                 :          0 :     maEdMin.Show( !bList );
     656                 :          0 :     maEdList.Show( bList );
     657                 :          0 :     maFtMax.Show( bShowMax );
     658                 :          0 :     maEdMax.Show( bShowMax );
     659                 :          0 :     maFtHint.Show( bRange );
     660                 :          0 :     m_btnRef.Show( bRange );  // cell range picker
     661                 :          0 :     return 0;
     662                 :            : }
     663                 :            : 
     664                 :          0 : IMPL_LINK_NOARG(ScTPValidationValue, CheckHdl)
     665                 :            : {
     666                 :          0 :     maCbSort.Enable( maCbShow.IsChecked() );
     667                 :          0 :     return 0;
     668                 :            : }
     669                 :            : 
     670                 :            : 
     671                 :            : //========================================================================
     672                 :            : //========================================================================
     673                 :            : // Input Help Page
     674                 :            : 
     675                 :          0 : ScTPValidationHelp::ScTPValidationHelp( Window*         pParent,
     676                 :            :                                           const SfxItemSet& rArgSet )
     677                 :            : 
     678                 :            :     :   SfxTabPage      ( pParent,
     679                 :            :                           ScResId( TP_VALIDATION_INPUTHELP ),
     680                 :            :                           rArgSet ),
     681                 :            :         aTsbHelp        ( this, ScResId( TSB_HELP ) ),
     682                 :            :         aFlContent      ( this, ScResId( FL_CONTENT ) ),
     683                 :            :         aFtTitle        ( this, ScResId( FT_TITLE ) ),
     684                 :            :         aEdtTitle       ( this, ScResId( EDT_TITLE ) ),
     685                 :            :         aFtInputHelp    ( this, ScResId( FT_INPUTHELP ) ),
     686                 :            :         aEdInputHelp    ( this, ScResId( EDT_INPUTHELP ) ),
     687                 :            : 
     688                 :          0 :         mrArgSet            ( rArgSet )
     689                 :            : {
     690                 :          0 :     Init();
     691                 :          0 :     FreeResource();
     692                 :          0 : }
     693                 :            : 
     694                 :            : // -----------------------------------------------------------------------
     695                 :            : 
     696                 :          0 : ScTPValidationHelp::~ScTPValidationHelp()
     697                 :            : {
     698                 :          0 : }
     699                 :            : 
     700                 :            : // -----------------------------------------------------------------------
     701                 :            : 
     702                 :          0 : void ScTPValidationHelp::Init()
     703                 :            : {
     704                 :          0 :     aTsbHelp.EnableTriState( false );
     705                 :          0 : }
     706                 :            : 
     707                 :            : //------------------------------------------------------------------------
     708                 :            : 
     709                 :          0 : sal_uInt16* ScTPValidationHelp::GetRanges()
     710                 :            : {
     711                 :          0 :     return pValueRanges;
     712                 :            : }
     713                 :            : 
     714                 :            : // -----------------------------------------------------------------------
     715                 :            : 
     716                 :          0 : SfxTabPage* ScTPValidationHelp::Create( Window* pParent,
     717                 :            :                                          const SfxItemSet&  rArgSet )
     718                 :            : {
     719                 :          0 :     return ( new ScTPValidationHelp( pParent, rArgSet ) );
     720                 :            : }
     721                 :            : 
     722                 :            : // -----------------------------------------------------------------------
     723                 :            : 
     724                 :          0 : void ScTPValidationHelp::Reset( const SfxItemSet& rArgSet )
     725                 :            : {
     726                 :            :     const SfxPoolItem* pItem;
     727                 :            : 
     728                 :          0 :     if ( rArgSet.GetItemState( FID_VALID_SHOWHELP, sal_True, &pItem ) == SFX_ITEM_SET )
     729                 :          0 :         aTsbHelp.SetState( ((const SfxBoolItem*)pItem)->GetValue() ? STATE_CHECK : STATE_NOCHECK );
     730                 :            :     else
     731                 :          0 :         aTsbHelp.SetState( STATE_NOCHECK );
     732                 :            : 
     733                 :          0 :     if ( rArgSet.GetItemState( FID_VALID_HELPTITLE, sal_True, &pItem ) == SFX_ITEM_SET )
     734                 :          0 :         aEdtTitle.SetText( ((const SfxStringItem*)pItem)->GetValue() );
     735                 :            :     else
     736                 :          0 :         aEdtTitle.SetText( EMPTY_STRING );
     737                 :            : 
     738                 :          0 :     if ( rArgSet.GetItemState( FID_VALID_HELPTEXT, sal_True, &pItem ) == SFX_ITEM_SET )
     739                 :          0 :         aEdInputHelp.SetText( ((const SfxStringItem*)pItem)->GetValue() );
     740                 :            :     else
     741                 :          0 :         aEdInputHelp.SetText( EMPTY_STRING );
     742                 :          0 : }
     743                 :            : 
     744                 :            : // -----------------------------------------------------------------------
     745                 :            : 
     746                 :          0 : sal_Bool ScTPValidationHelp::FillItemSet( SfxItemSet& rArgSet )
     747                 :            : {
     748                 :          0 :     rArgSet.Put( SfxBoolItem( FID_VALID_SHOWHELP, aTsbHelp.GetState() == STATE_CHECK ) );
     749                 :          0 :     rArgSet.Put( SfxStringItem( FID_VALID_HELPTITLE, aEdtTitle.GetText() ) );
     750                 :          0 :     rArgSet.Put( SfxStringItem( FID_VALID_HELPTEXT, aEdInputHelp.GetText() ) );
     751                 :            : 
     752                 :          0 :     return sal_True;
     753                 :            : }
     754                 :            : 
     755                 :            : //========================================================================
     756                 :            : //========================================================================
     757                 :            : // Error Alert Page
     758                 :            : 
     759                 :          0 : ScTPValidationError::ScTPValidationError( Window*           pParent,
     760                 :            :                                           const SfxItemSet& rArgSet )
     761                 :            : 
     762                 :            :     :   SfxTabPage      ( pParent,
     763                 :            :                           ScResId( TP_VALIDATION_ERROR ),
     764                 :            :                           rArgSet ),
     765                 :            :         aTsbShow        ( this, ScResId( TSB_SHOW ) ),
     766                 :            :         aFlContent      ( this, ScResId( FL_CONTENT ) ),
     767                 :            :         aFtAction       ( this, ScResId( FT_ACTION ) ),
     768                 :            :         aLbAction       ( this, ScResId( LB_ACTION ) ),
     769                 :            :         aBtnSearch      ( this, ScResId( BTN_SEARCH ) ),
     770                 :            :         aFtTitle        ( this, ScResId( FT_TITLE ) ),
     771                 :            :         aEdtTitle       ( this, ScResId( EDT_TITLE ) ),
     772                 :            :         aFtError        ( this, ScResId( FT_ERROR ) ),
     773                 :            :         aEdError        ( this, ScResId( EDT_ERROR ) ),
     774                 :            : 
     775                 :          0 :         mrArgSet            ( rArgSet )
     776                 :            : {
     777                 :          0 :     Init();
     778                 :          0 :     FreeResource();
     779                 :          0 : }
     780                 :            : 
     781                 :            : // -----------------------------------------------------------------------
     782                 :            : 
     783                 :          0 : ScTPValidationError::~ScTPValidationError()
     784                 :            : {
     785                 :          0 : }
     786                 :            : 
     787                 :            : // -----------------------------------------------------------------------
     788                 :            : 
     789                 :          0 : void ScTPValidationError::Init()
     790                 :            : {
     791                 :          0 :     aLbAction.SetSelectHdl( LINK( this, ScTPValidationError, SelectActionHdl ) );
     792                 :          0 :     aBtnSearch.SetClickHdl( LINK( this, ScTPValidationError, ClickSearchHdl ) );
     793                 :            : 
     794                 :          0 :     aLbAction.SelectEntryPos( 0 );
     795                 :          0 :     aTsbShow.EnableTriState( false );
     796                 :            : 
     797                 :          0 :     SelectActionHdl( NULL );
     798                 :          0 : }
     799                 :            : 
     800                 :            : //------------------------------------------------------------------------
     801                 :            : 
     802                 :          0 : sal_uInt16* ScTPValidationError::GetRanges()
     803                 :            : {
     804                 :          0 :     return pValueRanges;
     805                 :            : }
     806                 :            : 
     807                 :            : // -----------------------------------------------------------------------
     808                 :            : 
     809                 :          0 : SfxTabPage* ScTPValidationError::Create( Window*    pParent,
     810                 :            :                                          const SfxItemSet&  rArgSet )
     811                 :            : {
     812                 :          0 :     return ( new ScTPValidationError( pParent, rArgSet ) );
     813                 :            : }
     814                 :            : 
     815                 :            : // -----------------------------------------------------------------------
     816                 :            : 
     817                 :          0 : void ScTPValidationError::Reset( const SfxItemSet& rArgSet )
     818                 :            : {
     819                 :            :     const SfxPoolItem* pItem;
     820                 :            : 
     821                 :          0 :     if ( rArgSet.GetItemState( FID_VALID_SHOWERR, sal_True, &pItem ) == SFX_ITEM_SET )
     822                 :          0 :         aTsbShow.SetState( ((const SfxBoolItem*)pItem)->GetValue() ? STATE_CHECK : STATE_NOCHECK );
     823                 :            :     else
     824                 :          0 :         aTsbShow.SetState( STATE_CHECK );   // check by default
     825                 :            : 
     826                 :          0 :     if ( rArgSet.GetItemState( FID_VALID_ERRSTYLE, sal_True, &pItem ) == SFX_ITEM_SET )
     827                 :          0 :         aLbAction.SelectEntryPos( ((const SfxAllEnumItem*)pItem)->GetValue() );
     828                 :            :     else
     829                 :          0 :         aLbAction.SelectEntryPos( 0 );
     830                 :            : 
     831                 :          0 :     if ( rArgSet.GetItemState( FID_VALID_ERRTITLE, sal_True, &pItem ) == SFX_ITEM_SET )
     832                 :          0 :         aEdtTitle.SetText( ((const SfxStringItem*)pItem)->GetValue() );
     833                 :            :     else
     834                 :          0 :         aEdtTitle.SetText( EMPTY_STRING );
     835                 :            : 
     836                 :          0 :     if ( rArgSet.GetItemState( FID_VALID_ERRTEXT, sal_True, &pItem ) == SFX_ITEM_SET )
     837                 :          0 :         aEdError.SetText( ((const SfxStringItem*)pItem)->GetValue() );
     838                 :            :     else
     839                 :          0 :         aEdError.SetText( EMPTY_STRING );
     840                 :            : 
     841                 :          0 :     SelectActionHdl( NULL );
     842                 :          0 : }
     843                 :            : 
     844                 :            : // -----------------------------------------------------------------------
     845                 :            : 
     846                 :          0 : sal_Bool ScTPValidationError::FillItemSet( SfxItemSet& rArgSet )
     847                 :            : {
     848                 :          0 :     rArgSet.Put( SfxBoolItem( FID_VALID_SHOWERR, aTsbShow.GetState() == STATE_CHECK ) );
     849                 :          0 :     rArgSet.Put( SfxAllEnumItem( FID_VALID_ERRSTYLE, aLbAction.GetSelectEntryPos() ) );
     850                 :          0 :     rArgSet.Put( SfxStringItem( FID_VALID_ERRTITLE, aEdtTitle.GetText() ) );
     851                 :          0 :     rArgSet.Put( SfxStringItem( FID_VALID_ERRTEXT, aEdError.GetText() ) );
     852                 :            : 
     853                 :          0 :     return sal_True;
     854                 :            : }
     855                 :            : 
     856                 :            : // -----------------------------------------------------------------------
     857                 :            : 
     858                 :          0 : IMPL_LINK_NOARG(ScTPValidationError, SelectActionHdl)
     859                 :            : {
     860                 :          0 :     ScValidErrorStyle eStyle = (ScValidErrorStyle) aLbAction.GetSelectEntryPos();
     861                 :          0 :     sal_Bool bMacro = ( eStyle == SC_VALERR_MACRO );
     862                 :            : 
     863                 :          0 :     aBtnSearch.Enable( bMacro );
     864                 :          0 :     aFtError.Enable( !bMacro );
     865                 :          0 :     aEdError.Enable( !bMacro );
     866                 :            : 
     867                 :          0 :     return( 0L );
     868                 :            : }
     869                 :            : 
     870                 :            : // -----------------------------------------------------------------------
     871                 :            : 
     872                 :          0 : IMPL_LINK_NOARG(ScTPValidationError, ClickSearchHdl)
     873                 :            : {
     874                 :          0 :     Window* pOld = Application::GetDefDialogParent();
     875                 :          0 :     Application::SetDefDialogParent( this );
     876                 :            : 
     877                 :            :     // Use static SfxApplication method to bring up selector dialog for
     878                 :            :     // choosing a script
     879                 :          0 :     ::rtl::OUString aScriptURL = SfxApplication::ChooseScript();
     880                 :            : 
     881                 :          0 :     Application::SetDefDialogParent( pOld );
     882                 :            : 
     883                 :          0 :     if ( aScriptURL != NULL && !aScriptURL.isEmpty() )
     884                 :            :     {
     885                 :          0 :         aEdtTitle.SetText( aScriptURL );
     886                 :            :     }
     887                 :            : 
     888                 :          0 :     return( 0L );
     889                 :            : }
     890                 :            : 
     891                 :          0 : bool ScValidationDlg::EnterRefStatus()
     892                 :            : {
     893                 :          0 :     ScTabViewShell *pTabViewShell = GetTabViewShell();
     894                 :            : 
     895                 :          0 :     if( !pTabViewShell ) return false;
     896                 :            : 
     897                 :          0 :     sal_uInt16 nId  = SLOTID;
     898                 :          0 :     SfxViewFrame* pViewFrm = pTabViewShell->GetViewFrame();
     899                 :          0 :     SfxChildWindow* pWnd = pViewFrm->GetChildWindow( nId );
     900                 :            : 
     901                 :          0 :     if ( pWnd && pWnd->GetWindow()!= this ) pWnd = NULL;
     902                 :            : 
     903                 :          0 :     SC_MOD()->SetRefDialog( nId, pWnd ? false : sal_True );
     904                 :            : 
     905                 :          0 :     return true;
     906                 :            : }
     907                 :            : 
     908                 :          0 : bool ScValidationDlg::LeaveRefStatus()
     909                 :            : {
     910                 :          0 :     ScTabViewShell *pTabViewShell = GetTabViewShell();
     911                 :            : 
     912                 :          0 :     if( !pTabViewShell ) return false;
     913                 :            : 
     914                 :          0 :     sal_uInt16 nId  = SLOTID;
     915                 :          0 :     SfxViewFrame* pViewFrm = pTabViewShell->GetViewFrame();
     916                 :          0 :     if ( pViewFrm->GetChildWindow( nId ) )
     917                 :            :     {
     918                 :          0 :         DoClose( nId );
     919                 :            :     }
     920                 :          0 :     return true;
     921                 :            : }
     922                 :            : 
     923                 :          0 : bool ScValidationDlg::SetupRefDlg()
     924                 :            : {
     925                 :          0 :     if ( m_bOwnRefHdlr ) return false;
     926                 :          0 :     if( EnterRefMode() )
     927                 :            :     {
     928                 :          0 :         SetModal( false );
     929                 :          0 :         return  m_bOwnRefHdlr = true && EnterRefStatus();
     930                 :            :     }
     931                 :            : 
     932                 :          0 :     return false;
     933                 :            : }
     934                 :            : 
     935                 :          0 : bool ScValidationDlg::RemoveRefDlg( sal_Bool bRestoreModal /* = sal_True */ )
     936                 :            : {
     937                 :          0 :     bool bVisLock = false;
     938                 :          0 :     bool bFreeWindowLock = false;
     939                 :            : 
     940                 :          0 :     ScTabViewShell *pTabVwSh = GetTabViewShell();
     941                 :            : 
     942                 :          0 :     if( !pTabVwSh ) return false;
     943                 :            : 
     944                 :          0 :     if ( SfxChildWindow* pWnd = pTabVwSh->GetViewFrame()->GetChildWindow( SID_VALIDITY_REFERENCE ) )
     945                 :            :     {
     946                 :          0 :         bVisLock = static_cast<ScValidityRefChildWin*>(pWnd)->LockVisible( true );
     947                 :          0 :         bFreeWindowLock = static_cast<ScValidityRefChildWin*>(pWnd)->LockFreeWindow( true );
     948                 :            :     }
     949                 :            : 
     950                 :          0 :     if ( !m_bOwnRefHdlr ) return false;
     951                 :          0 :     if( LeaveRefStatus() && LeaveRefMode() )
     952                 :            :     {
     953                 :          0 :         m_bOwnRefHdlr = false;
     954                 :            : 
     955                 :          0 :         if( bRestoreModal )
     956                 :          0 :             SetModal( sal_True );
     957                 :            :     }
     958                 :            : 
     959                 :          0 :     if ( SfxChildWindow* pWnd = pTabVwSh->GetViewFrame()->GetChildWindow( SID_VALIDITY_REFERENCE ) )
     960                 :            :     {
     961                 :          0 :         static_cast<ScValidityRefChildWin*>(pWnd)->LockVisible( bVisLock );
     962                 :          0 :         static_cast<ScValidityRefChildWin*>(pWnd)->LockFreeWindow( bFreeWindowLock );
     963                 :            :     }
     964                 :            : 
     965                 :          0 :     return true;
     966                 :            : }
     967                 :            : 
     968                 :          0 : void ScTPValidationValue::ScRefButtonEx::Click()
     969                 :            : {
     970                 :          0 :     if( ScTPValidationValue *pParent = dynamic_cast< ScTPValidationValue*>( GetParent() ) )
     971                 :          0 :         pParent->OnClick( this );
     972                 :            : 
     973                 :          0 :     formula::RefButton::Click();
     974                 :          0 : }
     975                 :            : 
     976                 :          0 : void ScTPValidationValue::OnClick( Button *pBtn )
     977                 :            : {
     978                 :          0 :     if( pBtn == &m_btnRef )
     979                 :          0 :         SetupRefDlg();
     980                 :          0 : }
     981                 :            : 
     982                 :          0 : sal_Bool ScValidationDlg::IsChildFocus()
     983                 :            : {
     984                 :          0 :     if ( const Window *pWin = Application::GetFocusWindow() )
     985                 :          0 :         while( NULL != ( pWin = pWin->GetParent() ) )
     986                 :          0 :             if( pWin == this )
     987                 :          0 :                 return sal_True;
     988                 :            : 
     989                 :          0 :     return false;
     990                 :            : }
     991                 :            : 
     992                 :            : 
     993                 :          0 : bool    ScValidationDlg::IsAlive()
     994                 :            : {
     995                 :          0 :     return SC_MOD()->IsAliveRefDlg( SLOTID, this );
     996                 :            : }
     997                 :            : 
     998                 :            : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.10