/************************************************************** * * 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_INPUTHDL_HXX #define SC_INPUTHDL_HXX #include "global.hxx" #include "address.hxx" #include #include #include class ScDocument; class ScTabView; class ScTabViewShell; class ScInputWindow; class ScPatternAttr; class EditEngine; class ScEditEngineDefaulter; class EditView; class EditTextObject; class ScInputHdlState; class TypedScStrCollection; class ScRangeFindList; class Timer; class KeyEvent; class CommandEvent; struct ESelection; //======================================================================== // ScInputHandler //======================================================================== class ScInputHandler { private: ScInputWindow* pInputWin; ScEditEngineDefaulter* pEngine; // editierte Daten in der Tabelle EditView* pTableView; // aktive EditView dazu EditView* pTopView; // EditView in der Eingabezeile TypedScStrCollection* pColumnData; TypedScStrCollection* pFormulaData; TypedScStrCollection* pFormulaDataPara; Window* pTipVisibleParent; sal_uLong nTipVisible; Window* pTipVisibleSecParent; sal_uLong nTipVisibleSec; String aManualTip; String aAutoSearch; sal_uInt16 nAutoPos; sal_Bool bUseTab; // Blaettern moeglich sal_Bool bTextValid; // Text noch nicht in Edit-Engine String aCurrentText; String aFormText; // fuer Funktions-Autopilot xub_StrLen nFormSelStart; // Selektion fuer Funktions-Autopilot xub_StrLen nFormSelEnd; sal_uInt16 nAutoPar; // autom.parentheses than can be overwritten ScAddress aCursorPos; ScInputMode eMode; sal_Bool bModified; sal_Bool bSelIsRef; sal_Bool bFormulaMode; sal_Bool bInRangeUpdate; sal_Bool bParenthesisShown; sal_Bool bCreatingFuncView; sal_Bool bInEnterHandler; sal_Bool bCommandErrorShown; sal_Bool bInOwnChange; sal_Bool bProtected; sal_Bool bCellHasPercentFormat; sal_uLong nValidation; SvxCellHorJustify eAttrAdjust; Fraction aScaleX; // fuer Ref-MapMode Fraction aScaleY; ScTabViewShell* pRefViewSh; ScTabViewShell* pActiveViewSh; const ScPatternAttr* pLastPattern; SfxItemSet* pEditDefaults; sal_Bool bLastIsSymbol; ScInputHdlState* pLastState; Timer* pDelayTimer; ScRangeFindList* pRangeFindList; static sal_Bool bAutoComplete; // aus App-Optionen static sal_Bool bOptLoaded; #ifdef _INPUTHDL_CXX private: void UpdateActiveView(); void SyncViews( EditView* pSourceView = NULL ); sal_Bool StartTable( sal_Unicode cTyped, sal_Bool bFromCommand ); void RemoveSelection(); void UpdateFormulaMode(); void InvalidateAttribs(); void ImplCreateEditEngine(); DECL_LINK( DelayTimer, Timer* ); void GetColData(); void UseColData(); void NextAutoEntry( sal_Bool bBack ); void UpdateAdjust( sal_Unicode cTyped ); void GetFormulaData(); void UseFormulaData(); void NextFormulaEntry( sal_Bool bBack ); void PasteFunctionData(); void PasteManualTip(); EditView* GetFuncEditView(); void RemoveAdjust(); void RemoveRangeFinder(); void DeleteRangeFinder(); void UpdateParenthesis(); void UpdateAutoCorrFlag(); void ResetAutoPar(); void AutoParAdded(); sal_Bool CursorAtClosingPar(); void SkipClosingPar(); DECL_LINK( ModifyHdl, void* ); DECL_LINK( ShowHideTipVisibleParentListener, VclWindowEvent* ); DECL_LINK( ShowHideTipVisibleSecParentListener, VclWindowEvent* ); #endif public: ScInputHandler(); virtual ~ScInputHandler(); void SetMode( ScInputMode eNewMode ); sal_Bool IsInputMode() const { return (eMode != SC_INPUT_NONE); } sal_Bool IsEditMode() const { return (eMode != SC_INPUT_NONE && eMode != SC_INPUT_TYPE); } sal_Bool IsTopMode() const { return (eMode == SC_INPUT_TOP); } const String& GetEditString(); const String& GetFormString() const { return aFormText; } const ScAddress& GetCursorPos() const { return aCursorPos; } sal_Bool GetTextAndFields( ScEditEngineDefaulter& rDestEngine ); sal_Bool KeyInput( const KeyEvent& rKEvt, sal_Bool bStartEdit = sal_False ); void EnterHandler( sal_uInt8 nBlockMode = 0 ); void CancelHandler(); void SetReference( const ScRange& rRef, ScDocument* pDoc ); void AddRefEntry(); sal_Bool InputCommand( const CommandEvent& rCEvt, sal_Bool bForce ); void InsertFunction( const String& rFuncName, sal_Bool bAddPar = sal_True ); void ClearText(); void InputSelection( EditView* pView ); void InputChanged( EditView* pView, sal_Bool bFromNotify = sal_False ); void ViewShellGone(ScTabViewShell* pViewSh); void SetRefViewShell(ScTabViewShell* pRefVsh) {pRefViewSh=pRefVsh;} void NotifyChange( const ScInputHdlState* pState, sal_Bool bForce = sal_False, ScTabViewShell* pSourceSh = NULL, sal_Bool bStopEditing = sal_True); void UpdateCellAdjust( SvxCellHorJustify eJust ); void ResetDelayTimer(); //BugId 54702 void HideTip(); void HideTipBelow(); void ShowTipCursor(); void ShowTip( const String& rText ); // am Cursor void ShowTipBelow( const String& rText ); void SetRefScale( const Fraction& rX, const Fraction& rY ); void UpdateRefDevice(); EditView* GetActiveView(); EditView* GetTableView() { return pTableView; } EditView* GetTopView() { return pTopView; } sal_Bool DataChanging( sal_Unicode cTyped = 0, sal_Bool bFromCommand = sal_False ); void DataChanged( sal_Bool bFromTopNotify = sal_False, sal_Bool bSetModified = sal_True ); sal_Bool TakesReturn() const { return ( nTipVisible != 0 ); } void SetModified() { bModified = sal_True; } sal_Bool GetSelIsRef() const { return bSelIsRef; } void SetSelIsRef(sal_Bool bSet) { bSelIsRef = bSet; } void ShowRefFrame(); ScRangeFindList* GetRangeFindList() { return pRangeFindList; } void UpdateRange( sal_uInt16 nIndex, const ScRange& rNew ); // Kommunikation mit Funktionsautopilot void InputGetSelection ( xub_StrLen& rStart, xub_StrLen& rEnd ); void InputSetSelection ( xub_StrLen nStart, xub_StrLen nEnd ); void InputReplaceSelection ( const String& rStr ); String InputGetFormulaStr (); sal_Bool IsFormulaMode() const { return bFormulaMode; } ScInputWindow* GetInputWindow() { return pInputWin; } void SetInputWindow( ScInputWindow* pNew ) { pInputWin = pNew; } void StopInputWinEngine( sal_Bool bAll ); sal_Bool IsInEnterHandler() const { return bInEnterHandler; } sal_Bool IsInOwnChange() const { return bInOwnChange; } sal_Bool IsModalMode( SfxObjectShell* pDocSh ); void ForgetLastPattern(); void UpdateSpellSettings( sal_Bool bFromStartTab = sal_False ); void FormulaPreview(); Size GetTextSize(); // in 1/100mm // eigentlich private, fuer SID_INPUT_SUM public void InitRangeFinder( const String& rFormula ); static void SetAutoComplete(sal_Bool bSet) { bAutoComplete = bSet; } }; //======================================================================== // ScInputHdlState //======================================================================== class ScInputHdlState { friend class ScInputHandler; public: ScInputHdlState( const ScAddress& rCurPos, const ScAddress& rStartPos, const ScAddress& rEndPos, const String& rString, const EditTextObject* pData ); ScInputHdlState( const ScInputHdlState& rCpy ); ~ScInputHdlState(); ScInputHdlState& operator= ( const ScInputHdlState& r ); int operator==( const ScInputHdlState& r ) const; int operator!=( const ScInputHdlState& r ) const { return !operator==( r ); } const ScAddress& GetPos() const { return aCursorPos; } const ScAddress& GetStartPos() const { return aStartPos; } const ScAddress& GetEndPos() const { return aEndPos; } const String& GetString() const { return aString; } const EditTextObject* GetEditData() const { return pEditData; } private: ScAddress aCursorPos; ScAddress aStartPos; ScAddress aEndPos; String aString; EditTextObject* pEditData; }; #endif