blob: ec04c4cdb54c38d078bc282f7e0fd99c2c37c46f [file] [log] [blame]
/**************************************************************
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*
*************************************************************/
#ifndef SC_VALIDATE_HXX
#define SC_VALIDATE_HXX
#include <sfx2/tabdlg.hxx>
#include <vcl/edit.hxx>
#include <vcl/fixed.hxx>
#include <vcl/lstbox.hxx>
#include <svtools/svmedit.hxx>
//<!--Added by PengYunQuan for Validity Cell Range Picker
#include "anyrefdg.hxx"
//-->Added by PengYunQuan for Validity Cell Range Picker
// ============================================================================
//<!--Added by PengYunQuan for Validity Cell Range Picker
struct ScRefHandlerCaller{
virtual ~ScRefHandlerCaller(){}
};
class ScRefHandlerHelper
{
protected:
ScRefHandlerCaller *m_pHandler;
void (ScRefHandlerCaller::*m_pSetReferenceHdl)( const ScRange& , ScDocument* );
void (ScRefHandlerCaller::*m_pSetActiveHdl)();
void (ScRefHandlerCaller::*m_pRefInputStartPreHdl)( ScRefEdit* pEdit, ScRefButton* pButton );
void (ScRefHandlerCaller::*m_pRefInputStartPostHdl)( ScRefEdit* pEdit, ScRefButton* pButton );
void (ScRefHandlerCaller::*m_pRefInputDonePreHdl)();
void (ScRefHandlerCaller::*m_pRefInputDonePostHdl)();
public:
typedef void (ScRefHandlerCaller::*PFUNCSETREFHDLTYPE)( const ScRange& , ScDocument* );
typedef void (ScRefHandlerCaller::*PCOMMONHDLTYPE)();
typedef void (ScRefHandlerCaller::*PINPUTSTARTDLTYPE)( ScRefEdit* pEdit, ScRefButton* pButton );
PFUNCSETREFHDLTYPE SetSetRefHdl( PFUNCSETREFHDLTYPE pNewHdl )
{
PFUNCSETREFHDLTYPE pOldHdl = m_pSetReferenceHdl;
m_pSetReferenceHdl = pNewHdl;
return pOldHdl;
}
PCOMMONHDLTYPE SetSetActHdl( PCOMMONHDLTYPE pNewHdl )
{
PCOMMONHDLTYPE pOldHdl = m_pSetActiveHdl;
m_pSetActiveHdl = pNewHdl;
return pOldHdl;
}
ScRefHandlerCaller *SetHandler( ScRefHandlerCaller *pNewHandler )
{
ScRefHandlerCaller *pOldHandler = m_pHandler;
m_pHandler = pNewHandler;
return pOldHandler;
}
void SetRefInputStartPreHdl( PINPUTSTARTDLTYPE pNewHdl ){ m_pRefInputStartPreHdl = pNewHdl; }
void SetRefInputDonePostHdl( void (ScRefHandlerCaller::*pNewHdl)() ){ m_pRefInputDonePostHdl = pNewHdl; }
void SetRefInputStartPostHdl( PINPUTSTARTDLTYPE pNewHdl ){ m_pRefInputStartPostHdl = pNewHdl; }
void SetRefInputDonePreHdl( void (ScRefHandlerCaller::*pNewHdl)() ){ m_pRefInputDonePreHdl = pNewHdl; }
ScRefHandlerHelper():m_pHandler(NULL), m_pSetReferenceHdl( NULL ), m_pSetActiveHdl(NULL), m_pRefInputStartPreHdl( NULL ), m_pRefInputStartPostHdl( NULL ), m_pRefInputDonePreHdl( NULL ), m_pRefInputDonePostHdl( NULL ){}
};
//-->Added by PengYunQuan for Validity Cell Range Picker
/** The "Validity" tab dialog. */
//<!--Modified by PengYunQuan for Validity Cell Range Picker
//class ScValidationDlg : public SfxTabDialog
class ScValidationDlg :public ScRefHdlrImpl<ScValidationDlg, SfxTabDialog, false>, public ScRefHandlerHelper
//-->Modified by PengYunQuan for Validity Cell Range Picker
{
//<!--Added by PengYunQuan for Validity Cell Range Picker
typedef ScRefHdlrImpl<ScValidationDlg, SfxTabDialog, false> ScValidationDlgBase;
DECL_LINK( OkHdl, Button * );
bool m_bOwnRefHdlr:1;
ScTabViewShell *m_pTabVwSh;
bool m_bRefInputting:1;
bool EnterRefStatus();
bool LeaveRefStatus();
//-->Added by PengYunQuan for Validity Cell Range Picker
public:
//<!--Modified by PengYunQuan for Validity Cell Range Picker
//explicit ScValidationDlg( Window* pParent, const SfxItemSet* pArgSet );
explicit ScValidationDlg( Window* pParent, const SfxItemSet* pArgSet, ScTabViewShell * pTabViewSh, SfxBindings *pB = NULL );
//-->Modified by PengYunQuan for Validity Cell Range Picker
//<!--Added by PengYunQuan for Validity Cell Range Picker
virtual ~ScValidationDlg();
inline static ScValidationDlg * Find1AliveObject( Window *pAncestor );
bool IsAlive();
inline ScTabViewShell * GetTabViewShell();
bool SetupRefDlg();
bool RemoveRefDlg( sal_Bool bRestoreModal = sal_True );
virtual void SetModal( sal_Bool bModal ){ ScValidationDlgBase::SetModalInputMode( bModal ); }
virtual void SetReference( const ScRange& rRef, ScDocument* pDoc )
{
if ( m_pHandler && m_pSetReferenceHdl )
(m_pHandler->*m_pSetReferenceHdl)( rRef, pDoc );
}
virtual void SetActive()
{
if ( m_pHandler && m_pSetActiveHdl )
(m_pHandler->*m_pSetActiveHdl)();
}
void CloseRefDialog()
{
DBG_ASSERT( false, "should not execute here!!!when the edit kill focus, should remove refhandler.\r\n" );
if ( IsInExecute() )
EndDialog( sal_False );
else if ( GetStyle() & WB_CLOSEABLE )
Close();
}
bool IsRefInputting(){ return m_bRefInputting; }
virtual void RefInputStart( ScRefEdit* pEdit, ScRefButton* pButton = NULL )
{
if( !CanInputStart( pEdit ) )
return;
if ( m_pHandler && m_pRefInputStartPreHdl )
(m_pHandler->*m_pRefInputStartPreHdl)( pEdit, pButton );
m_bRefInputting = true;
ScValidationDlgBase::RefInputStart( pEdit, pButton );
if ( m_pHandler && m_pRefInputStartPostHdl )
(m_pHandler->*m_pRefInputStartPostHdl)( pEdit, pButton );
}
virtual void RefInputDone( sal_Bool bForced = sal_False )
{
if( !CanInputDone( bForced ) )
return;
if ( m_pHandler && m_pRefInputDonePreHdl )
(m_pHandler->*m_pRefInputDonePreHdl)();
ScValidationDlgBase::RefInputDone( bForced );
m_bRefInputting = false;
if ( m_pHandler && m_pRefInputDonePostHdl )
(m_pHandler->*m_pRefInputDonePostHdl)();
}
sal_Bool IsChildFocus();
enum { SLOTID = SID_VALIDITY_REFERENCE };
sal_Bool Close();
//-->Added by PengYunQuan for Validity Cell Range Picker
};
// ============================================================================
/** The tab page "Criteria" from the Validation dialog. */
//<!--Modified by PengYunQuan for Validity Cell Range Picker
//class ScTPValidationValue : public SfxTabPage
class ScTPValidationValue : public ScRefHandlerCaller, public SfxTabPage
//-->Modified by PengYunQuan for Validity Cell Range Picker
{
public:
explicit ScTPValidationValue( Window* pParent, const SfxItemSet& rArgSet );
virtual ~ScTPValidationValue();
static SfxTabPage* Create( Window* pParent, const SfxItemSet& rArgSet );
static sal_uInt16* GetRanges();
virtual sal_Bool FillItemSet( SfxItemSet& rArgSet );
virtual void Reset( const SfxItemSet& rArgSet );
private:
void Init();
String GetFirstFormula() const;
String GetSecondFormula() const;
void SetFirstFormula( const String& rFmlaStr );
void SetSecondFormula( const String& rFmlaStr );
DECL_LINK( SelectHdl, ListBox* );
DECL_LINK( CheckHdl, CheckBox* );
FixedText maFtAllow;
ListBox maLbAllow;
CheckBox maCbAllow; /// Allow blank cells.
CheckBox maCbShow; /// Show selection list in cell.
CheckBox maCbSort; /// Sort selection list in cell.
FixedText maFtValue;
ListBox maLbValue;
FixedText maFtMin;
//<!--Modified by PengYunQuan for Validity Cell Range Picker
//Edit maEdMin;
ScRefEdit maEdMin;
//-->Modified by PengYunQuan for Validity Cell Range Picker
MultiLineEdit maEdList; /// Entries for explicit list
FixedText maFtMax;
//<!--Modified by PengYunQuan for Validity Cell Range Picker
//Edit maEdMax;
ScRefEdit maEdMax;
//-->Modified by PengYunQuan for Validity Cell Range Picker
FixedText maFtHint; /// Hint text for cell range validity.
String maStrMin;
String maStrMax;
String maStrValue;
String maStrRange;
String maStrList;
sal_Unicode mcFmlaSep; /// List separator in formulas.
//<!--Added by PengYunQuan for Validity Cell Range Picker
DECL_LINK( EditSetFocusHdl, Edit *);
DECL_LINK( KillFocusHdl, Window *);
void OnClick( Button *pBtn );
ScRefEdit *m_pRefEdit;
class ScRefButtonEx:public ::ScRefButton
{
void Click();
public:
ScRefButtonEx( Window* pParent, const ResId& rResId, ScRefEdit* pEdit = NULL, ScRefHandler *pRefHdlr = NULL ): ::ScRefButton( pParent, rResId, pEdit, pRefHdlr ){}
}m_btnRef;
friend class ScRefButtonEx;
void SetReferenceHdl( const ScRange& , ScDocument* );
void SetActiveHdl();
void RefInputStartPreHdl( ScRefEdit* pEdit, ScRefButton* pButton );
void RefInputDonePreHdl();
void RefInputDonePostHdl();
ScValidationDlg * GetValidationDlg();
//TYPEINFO();
void TidyListBoxes();
public:
sal_uInt16 GetAllowEntryPos();
String GetMinText();
void SetupRefDlg();
void RemoveRefDlg();
//-->Added by PengYunQuan for Validity Cell Range Picker
};
//==================================================================
class ScTPValidationHelp : public SfxTabPage
{
private:
TriStateBox aTsbHelp;
FixedLine aFlContent;
FixedText aFtTitle;
Edit aEdtTitle;
FixedText aFtInputHelp;
MultiLineEdit aEdInputHelp;
const SfxItemSet& mrArgSet;
void Init();
// Handler ------------------------
// DECL_LINK( SelectHdl, ListBox * );
public:
ScTPValidationHelp( Window* pParent, const SfxItemSet& rArgSet );
~ScTPValidationHelp();
static SfxTabPage* Create ( Window* pParent, const SfxItemSet& rArgSet );
static sal_uInt16* GetRanges ();
virtual sal_Bool FillItemSet ( SfxItemSet& rArgSet );
virtual void Reset ( const SfxItemSet& rArgSet );
};
//==================================================================
class ScTPValidationError : public SfxTabPage
{
private:
TriStateBox aTsbShow;
FixedLine aFlContent;
FixedText aFtAction;
ListBox aLbAction;
PushButton aBtnSearch;
FixedText aFtTitle;
Edit aEdtTitle;
FixedText aFtError;
MultiLineEdit aEdError;
const SfxItemSet& mrArgSet;
void Init();
// Handler ------------------------
DECL_LINK( SelectActionHdl, ListBox * );
DECL_LINK( ClickSearchHdl, PushButton * );
public:
ScTPValidationError( Window* pParent, const SfxItemSet& rArgSet );
~ScTPValidationError();
static SfxTabPage* Create ( Window* pParent, const SfxItemSet& rArgSet );
static sal_uInt16* GetRanges ();
virtual sal_Bool FillItemSet ( SfxItemSet& rArgSet );
virtual void Reset ( const SfxItemSet& rArgSet );
};
//<!--Added by PengYunQuan for Validity Cell Range Picker
inline ScTabViewShell *ScValidationDlg::GetTabViewShell()
{
return m_pTabVwSh;
}
inline ScValidationDlg * ScValidationDlg::Find1AliveObject( Window *pAncestor )
{
return static_cast<ScValidationDlg *>( SC_MOD()->Find1RefWindow( SLOTID, pAncestor ) );
}
//-->Added by PengYunQuan for Validity Cell Range Picker
#endif // SC_VALIDATE_HXX