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