blob: bb12fa93623d9d4a214de1bbf96ec6eace4da47b [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_INPUTHDL_HXX
#define SC_INPUTHDL_HXX
#include "global.hxx"
#include "address.hxx"
#include <tools/fract.hxx>
#include <tools/gen.hxx>
#include <editeng/svxenum.hxx>
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