| /************************************************************** |
| * |
| * 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 |
| |