diff options
Diffstat (limited to 'sc/source/ui/inc/gridwin.hxx')
-rw-r--r-- | sc/source/ui/inc/gridwin.hxx | 426 |
1 files changed, 426 insertions, 0 deletions
diff --git a/sc/source/ui/inc/gridwin.hxx b/sc/source/ui/inc/gridwin.hxx new file mode 100644 index 000000000000..a2283bf2b7de --- /dev/null +++ b/sc/source/ui/inc/gridwin.hxx @@ -0,0 +1,426 @@ +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2000, 2010 Oracle and/or its affiliates. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * This file is part of OpenOffice.org. + * + * OpenOffice.org is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 3 + * only, as published by the Free Software Foundation. + * + * OpenOffice.org is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License version 3 for more details + * (a copy is included in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU Lesser General Public License + * version 3 along with OpenOffice.org. If not, see + * <http://www.openoffice.org/license.html> + * for a copy of the LGPLv3 License. + * + ************************************************************************/ + +#ifndef SC_GRIDWIN_HXX +#define SC_GRIDWIN_HXX + +#include <tools/string.hxx> +#include <svtools/transfer.hxx> +#include "viewutil.hxx" +#include "viewdata.hxx" +#include "cbutton.hxx" +#include <svx/sdr/overlay/overlayobject.hxx> +#include <com/sun/star/sheet/DataPilotFieldOrientation.hpp> +#include <basegfx/matrix/b2dhommatrix.hxx> + +#include <vector> +#include <memory> +#include <boost/shared_ptr.hpp> + +// --------------------------------------------------------------------------- + +struct ScTableInfo; +class ScViewSelectionEngine; +class ScDPObject; +class ScDPFieldPopupWindow; +class ScDPFieldButton; +class ScOutputData; +class ScFilterListBox; +class AutoFilterPopup; +class SdrObject; +class SdrEditView; +class ScNoteMarker; +class FloatingWindow; +class SdrHdlList; +class ScTransferObj; +struct SpellCallbackInfo; + + // Maus-Status (nMouseStatus) + +#define SC_GM_NONE 0 +#define SC_GM_TABDOWN 1 +#define SC_GM_DBLDOWN 2 +#define SC_GM_FILTER 3 +#define SC_GM_IGNORE 4 +#define SC_GM_WATERUNDO 5 +#define SC_GM_URLDOWN 6 + + // Page-Drag-Modus + +#define SC_PD_NONE 0 +#define SC_PD_RANGE_L 1 +#define SC_PD_RANGE_R 2 +#define SC_PD_RANGE_T 4 +#define SC_PD_RANGE_B 8 +#define SC_PD_RANGE_TL (SC_PD_RANGE_T|SC_PD_RANGE_L) +#define SC_PD_RANGE_TR (SC_PD_RANGE_T|SC_PD_RANGE_R) +#define SC_PD_RANGE_BL (SC_PD_RANGE_B|SC_PD_RANGE_L) +#define SC_PD_RANGE_BR (SC_PD_RANGE_B|SC_PD_RANGE_R) +#define SC_PD_BREAK_H 16 +#define SC_PD_BREAK_V 32 + + +class ScHideTextCursor +{ +private: + ScViewData* pViewData; + ScSplitPos eWhich; + +public: + ScHideTextCursor( ScViewData* pData, ScSplitPos eW ); + ~ScHideTextCursor(); +}; + +// --------------------------------------------------------------------------- +// predefines +namespace sdr { namespace overlay { class OverlayObjectList; }} + +class ScGridWindow : public Window, public DropTargetHelper, public DragSourceHelper +{ + // ScFilterListBox wird immer fuer Auswahlliste benutzt + friend class ScFilterListBox; + +private: + // #114409# + ::sdr::overlay::OverlayObjectList* mpOOCursors; + ::sdr::overlay::OverlayObjectList* mpOOSelection; + ::sdr::overlay::OverlayObjectList* mpOOAutoFill; + ::sdr::overlay::OverlayObjectList* mpOODragRect; + ::sdr::overlay::OverlayObjectList* mpOOHeader; + ::sdr::overlay::OverlayObjectList* mpOOShrink; + + ::boost::shared_ptr<Rectangle> mpAutoFillRect; + + /** + * Stores current visible column and row ranges, used to avoid expensive + * operations on objects that are outside visible area. + */ + struct VisibleRange + { + SCCOL mnCol1; + SCCOL mnCol2; + SCROW mnRow1; + SCROW mnRow2; + + VisibleRange(); + + bool isInside(SCCOL nCol, SCROW nRow) const; + }; + VisibleRange maVisibleRange; + +private: + ScViewData* pViewData; + ScSplitPos eWhich; + ScHSplitPos eHWhich; + ScVSplitPos eVWhich; + + ScNoteMarker* pNoteMarker; + + ScFilterListBox* pFilterBox; + FloatingWindow* pFilterFloat; + ::std::auto_ptr<ScDPFieldPopupWindow> mpDPFieldPopup; + ::std::auto_ptr<ScDPFieldButton> mpFilterButton; + + USHORT nCursorHideCount; + + BOOL bMarking; + + USHORT nButtonDown; + BOOL bEEMouse; // Edit-Engine hat Maus + BYTE nMouseStatus; + BYTE nNestedButtonState; // track nested button up/down calls + + BOOL bDPMouse; // DataPilot-D&D (neue Pivottabellen) + long nDPField; + ScDPObject* pDragDPObj; //! name? + + BOOL bRFMouse; // RangeFinder-Drag + BOOL bRFSize; + USHORT nRFIndex; + SCsCOL nRFAddX; + SCsROW nRFAddY; + + USHORT nPagebreakMouse; // Pagebreak-Modus Drag + SCCOLROW nPagebreakBreak; + SCCOLROW nPagebreakPrev; + ScRange aPagebreakSource; + ScRange aPagebreakDrag; + BOOL bPagebreakDrawn; + + BYTE nPageScript; + + long nLastClickX; + long nLastClickY; + + BOOL bDragRect; + SCCOL nDragStartX; + SCROW nDragStartY; + SCCOL nDragEndX; + SCROW nDragEndY; + InsCellCmd meDragInsertMode; + + USHORT nCurrentPointer; + + BOOL bIsInScroll; + BOOL bIsInPaint; + + ScDDComboBoxButton aComboButton; + + Point aCurMousePos; + + USHORT nPaintCount; + Rectangle aRepaintPixel; + BOOL bNeedsRepaint; + + BOOL bAutoMarkVisible; + ScAddress aAutoMarkPos; + + BOOL bListValButton; + ScAddress aListValPos; + + Rectangle aInvertRect; + + DECL_LINK( PopupModeEndHdl, FloatingWindow* ); + DECL_LINK( PopupSpellingHdl, SpellCallbackInfo* ); + + BOOL TestMouse( const MouseEvent& rMEvt, BOOL bAction ); + + BOOL DoPageFieldSelection( SCCOL nCol, SCROW nRow ); + bool DoAutoFilterButton( SCCOL nCol, SCROW nRow, const MouseEvent& rMEvt ); + void DoPushButton( SCCOL nCol, SCROW nRow, const MouseEvent& rMEvt ); + + void DPMouseMove( const MouseEvent& rMEvt ); + void DPMouseButtonUp( const MouseEvent& rMEvt ); + void DPTestMouse( const MouseEvent& rMEvt, BOOL bMove ); + + /** + * Check if the mouse click is on a field popup button. + * + * @return bool true if the field popup menu has been launched and no + * further mouse event handling is necessary, false otherwise. + */ + bool DPTestFieldPopupArrow(const MouseEvent& rMEvt, const ScAddress& rPos, ScDPObject* pDPObj); + void DPLaunchFieldPopupMenu( + const Point& rScrPos, const Size& rScrSize, const ScAddress& rPos, ScDPObject* pDPObj); + + void RFMouseMove( const MouseEvent& rMEvt, BOOL bUp ); + + void PagebreakMove( const MouseEvent& rMEvt, BOOL bUp ); + + void UpdateDragRect( BOOL bShowRange, const Rectangle& rPosRect ); + + BOOL IsAutoFilterActive( SCCOL nCol, SCROW nRow, SCTAB nTab ); + void ExecFilter( ULONG nSel, SCCOL nCol, SCROW nRow, + const String& aValue, bool bCheckForDates ); + void FilterSelect( ULONG nSel ); + + void ExecDataSelect( SCCOL nCol, SCROW nRow, const String& rStr ); + + void ExecPageFieldSelect( SCCOL nCol, SCROW nRow, BOOL bHasSelection, const String& rStr ); + + BOOL HasScenarioButton( const Point& rPosPixel, ScRange& rScenRange ); + + BOOL DropScroll( const Point& rMousePos ); + + sal_Int8 AcceptPrivateDrop( const AcceptDropEvent& rEvt ); + sal_Int8 ExecutePrivateDrop( const ExecuteDropEvent& rEvt ); + sal_Int8 DropTransferObj( ScTransferObj* pTransObj, SCCOL nDestPosX, SCROW nDestPosY, + const Point& rLogicPos, sal_Int8 nDndAction ); + + void HandleMouseButtonDown( const MouseEvent& rMEvt ); + + BOOL DrawMouseButtonDown(const MouseEvent& rMEvt); + BOOL DrawMouseButtonUp(const MouseEvent& rMEvt); + BOOL DrawMouseMove(const MouseEvent& rMEvt); + BOOL DrawKeyInput(const KeyEvent& rKEvt); + BOOL DrawCommand(const CommandEvent& rCEvt); + BOOL DrawHasMarkedObj(); + void DrawEndAction(); + void DrawMarkDropObj( SdrObject* pObj ); + SdrObject* GetEditObject(); + BOOL IsMyModel(SdrEditView* pSdrView); + //void DrawStartTimer(); + + void DrawRedraw( ScOutputData& rOutputData, ScUpdateMode eMode, ULONG nLayer ); + void DrawSdrGrid( const Rectangle& rDrawingRect, OutputDevice* pContentDev ); + //BOOL DrawBeforeScroll(); + void DrawAfterScroll(/*BOOL bVal*/); + //void DrawMarks(); + //BOOL NeedDrawMarks(); + void DrawComboButton( const Point& rCellPos, + long nCellSizeX, + long nCellSizeY, + BOOL bArrowState, + BOOL bBtnIn = FALSE ); + Rectangle GetListValButtonRect( const ScAddress& rButtonPos ); + + void DrawPagePreview( SCCOL nX1, SCROW nY1, SCCOL nX2, SCROW nY2, OutputDevice* pContentDev ); + + BOOL GetEditUrl( const Point& rPos, + String* pName=0, String* pUrl=0, String* pTarget=0 ); + BOOL GetEditUrlOrError( BOOL bSpellErr, const Point& rPos, + String* pName=0, String* pUrl=0, String* pTarget=0 ); + + BOOL HitRangeFinder( const Point& rMouse, BOOL& rCorner, USHORT* pIndex = NULL, + SCsCOL* pAddX = NULL, SCsROW* pAddY = NULL ); + + USHORT HitPageBreak( const Point& rMouse, ScRange* pSource = NULL, + SCCOLROW* pBreak = NULL, SCCOLROW* pPrev = NULL ); + + void PasteSelection( const Point& rPosPixel ); + + void SelectForContextMenu( const Point& rPosPixel, SCsCOL nCellX, SCsROW nCellY ); + + void GetSelectionRects( ::std::vector< Rectangle >& rPixelRects ); + +protected: + using Window::Resize; + virtual void Resize( const Size& rSize ); + virtual void PrePaint(); + virtual void Paint( const Rectangle& rRect ); + virtual void KeyInput(const KeyEvent& rKEvt); + virtual void GetFocus(); + virtual void LoseFocus(); + + virtual void RequestHelp( const HelpEvent& rEvt ); + virtual void Command( const CommandEvent& rCEvt ); + + virtual sal_Int8 AcceptDrop( const AcceptDropEvent& rEvt ); + virtual sal_Int8 ExecuteDrop( const ExecuteDropEvent& rEvt ); + virtual void StartDrag( sal_Int8 nAction, const Point& rPosPixel ); + +public: + ScGridWindow( Window* pParent, ScViewData* pData, ScSplitPos eWhichPos ); + ~ScGridWindow(); + + // #i70788# flush and get overlay + ::sdr::overlay::OverlayManager* getOverlayManager(); + void flushOverlayManager(); + + virtual void DataChanged( const DataChangedEvent& rDCEvt ); + + virtual void MouseButtonDown( const MouseEvent& rMEvt ); + virtual void MouseButtonUp( const MouseEvent& rMEvt ); + virtual void MouseMove( const MouseEvent& rMEvt ); + virtual long PreNotify( NotifyEvent& rNEvt ); + virtual void Tracking( const TrackingEvent& rTEvt ); + + virtual ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessible > CreateAccessible(); + + void FakeButtonUp(); + + Point GetMousePosPixel() const; + void UpdateStatusPosSize(); + + void ClickExtern(); + + void SetPointer( const Pointer& rPointer ); + + void MoveMouseStatus( ScGridWindow &rDestWin ); + + void ScrollPixel( long nDifX, long nDifY ); + void UpdateEditViewPos(); + + void UpdateFormulas(); + + void DoAutoFilterMenue( SCCOL nCol, SCROW nRow, BOOL bDataSelect ); + void DoScenarioMenue( const ScRange& rScenRange ); + + void LaunchPageFieldMenu( SCCOL nCol, SCROW nRow ); + void LaunchDPFieldMenu( SCCOL nCol, SCROW nRow ); + + ::com::sun::star::sheet::DataPilotFieldOrientation GetDPFieldOrientation( SCCOL nCol, SCROW nRow ) const; + + void DrawButtons( SCCOL nX1, SCROW nY1, SCCOL nX2, SCROW nY2, + ScTableInfo& rTabInfo, OutputDevice* pContentDev ); + + using Window::Draw; + void Draw( SCCOL nX1, SCROW nY1, SCCOL nX2, SCROW nY2, + ScUpdateMode eMode = SC_UPDATE_ALL ); + + void InvertSimple( SCCOL nX1, SCROW nY1, SCCOL nX2, SCROW nY2, + BOOL bTestMerge = FALSE, BOOL bRepeat = FALSE ); + +//UNUSED2008-05 void DrawDragRect( SCCOL nX1, SCROW nY1, SCCOL nX2, SCROW nY2 ); + + void CreateAnchorHandle(SdrHdlList& rHdl, const ScAddress& rAddress); + + void HideCursor(); + void ShowCursor(); + void DrawCursor(); + void DrawAutoFillMark(); + void UpdateAutoFillMark(BOOL bMarked, const ScRange& rMarkRange); + + void UpdateListValPos( BOOL bVisible, const ScAddress& rPos ); + + BOOL ShowNoteMarker( SCsCOL nPosX, SCsROW nPosY, BOOL bKeyboard ); + void HideNoteMarker(); + + MapMode GetDrawMapMode( BOOL bForce = FALSE ); + + void ContinueDrag(); + + void StopMarking(); + void UpdateInputContext(); + + void CheckInverted() { if (nPaintCount) bNeedsRepaint = TRUE; } + + void DoInvertRect( const Rectangle& rPixel ); + + void CheckNeedsRepaint(); + + void UpdateDPFromFieldPopupMenu(); + + // #114409# + void CursorChanged(); + void DrawLayerCreated(); + + void DeleteCursorOverlay(); + void UpdateCursorOverlay(); + void DeleteSelectionOverlay(); + void UpdateSelectionOverlay(); + void DeleteAutoFillOverlay(); + void UpdateAutoFillOverlay(); + void DeleteDragRectOverlay(); + void UpdateDragRectOverlay(); + void DeleteHeaderOverlay(); + void UpdateHeaderOverlay(); + void DeleteShrinkOverlay(); + void UpdateShrinkOverlay(); + void UpdateAllOverlays(); + +protected: + // #114409# + void ImpCreateOverlayObjects(); + void ImpDestroyOverlayObjects(); + +}; + + + +#endif + |