xref: /AOO41X/main/svtools/inc/svtools/scrwin.hxx (revision cdf0e10c4e3984b49a9502b011690b615761d4a3)
1*cdf0e10cSrcweir /*************************************************************************
2*cdf0e10cSrcweir  *
3*cdf0e10cSrcweir  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4*cdf0e10cSrcweir  *
5*cdf0e10cSrcweir  * Copyright 2000, 2010 Oracle and/or its affiliates.
6*cdf0e10cSrcweir  *
7*cdf0e10cSrcweir  * OpenOffice.org - a multi-platform office productivity suite
8*cdf0e10cSrcweir  *
9*cdf0e10cSrcweir  * This file is part of OpenOffice.org.
10*cdf0e10cSrcweir  *
11*cdf0e10cSrcweir  * OpenOffice.org is free software: you can redistribute it and/or modify
12*cdf0e10cSrcweir  * it under the terms of the GNU Lesser General Public License version 3
13*cdf0e10cSrcweir  * only, as published by the Free Software Foundation.
14*cdf0e10cSrcweir  *
15*cdf0e10cSrcweir  * OpenOffice.org is distributed in the hope that it will be useful,
16*cdf0e10cSrcweir  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17*cdf0e10cSrcweir  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18*cdf0e10cSrcweir  * GNU Lesser General Public License version 3 for more details
19*cdf0e10cSrcweir  * (a copy is included in the LICENSE file that accompanied this code).
20*cdf0e10cSrcweir  *
21*cdf0e10cSrcweir  * You should have received a copy of the GNU Lesser General Public License
22*cdf0e10cSrcweir  * version 3 along with OpenOffice.org.  If not, see
23*cdf0e10cSrcweir  * <http://www.openoffice.org/license.html>
24*cdf0e10cSrcweir  * for a copy of the LGPLv3 License.
25*cdf0e10cSrcweir  *
26*cdf0e10cSrcweir  ************************************************************************/
27*cdf0e10cSrcweir 
28*cdf0e10cSrcweir #ifndef _SCRWIN_HXX
29*cdf0e10cSrcweir #define _SCRWIN_HXX
30*cdf0e10cSrcweir 
31*cdf0e10cSrcweir #include "svtools/svtdllapi.h"
32*cdf0e10cSrcweir 
33*cdf0e10cSrcweir #ifndef _SCRBAR_HXX //autogen
34*cdf0e10cSrcweir #include <vcl/scrbar.hxx>
35*cdf0e10cSrcweir #endif
36*cdf0e10cSrcweir 
37*cdf0e10cSrcweir class DataChangedEvent;
38*cdf0e10cSrcweir 
39*cdf0e10cSrcweir // -------------------------
40*cdf0e10cSrcweir // - ScrollableWindow-Type -
41*cdf0e10cSrcweir // -------------------------
42*cdf0e10cSrcweir 
43*cdf0e10cSrcweir typedef sal_uInt16 ScrollableWindowFlags;
44*cdf0e10cSrcweir 
45*cdf0e10cSrcweir #define SCRWIN_THUMBDRAGGING 1
46*cdf0e10cSrcweir #define SCRWIN_VCENTER		 2
47*cdf0e10cSrcweir #define SCRWIN_HCENTER		 4
48*cdf0e10cSrcweir #define SCRWIN_DEFAULT		 (SCRWIN_THUMBDRAGGING | SCRWIN_VCENTER | SCRWIN_HCENTER)
49*cdf0e10cSrcweir 
50*cdf0e10cSrcweir // --------------------
51*cdf0e10cSrcweir // - ScrollableWindow -
52*cdf0e10cSrcweir // --------------------
53*cdf0e10cSrcweir 
54*cdf0e10cSrcweir class SVT_DLLPUBLIC ScrollableWindow: public Window
55*cdf0e10cSrcweir {
56*cdf0e10cSrcweir private:
57*cdf0e10cSrcweir 	Point			aPixOffset; 		// offset to virtual window (pixel)
58*cdf0e10cSrcweir 	Size			aTotPixSz;			// total size of virtual window (pixel)
59*cdf0e10cSrcweir 	long			nLinePixH;			// size of a line/column (pixel)
60*cdf0e10cSrcweir 	long			nColumnPixW;
61*cdf0e10cSrcweir 
62*cdf0e10cSrcweir 	ScrollBar		aVScroll;			// the scrollbars
63*cdf0e10cSrcweir 	ScrollBar		aHScroll;
64*cdf0e10cSrcweir 	ScrollBarBox	aCornerWin; 		// window in the bottom right corner
65*cdf0e10cSrcweir 	sal_Bool			bScrolling:1,		// user controlled scrolling
66*cdf0e10cSrcweir 					bHandleDragging:1,	// scroll window while dragging
67*cdf0e10cSrcweir 					bHCenter:1,
68*cdf0e10cSrcweir 					bVCenter:1;
69*cdf0e10cSrcweir 
70*cdf0e10cSrcweir #ifdef _SVT_SCRWIN_CXX
71*cdf0e10cSrcweir 	SVT_DLLPRIVATE void			ImpInitialize( ScrollableWindowFlags nFlags );
72*cdf0e10cSrcweir 	DECL_DLLPRIVATE_LINK( ScrollHdl, ScrollBar * );
73*cdf0e10cSrcweir 	DECL_DLLPRIVATE_LINK( EndScrollHdl, ScrollBar * );
74*cdf0e10cSrcweir #endif
75*cdf0e10cSrcweir 
76*cdf0e10cSrcweir public:
77*cdf0e10cSrcweir 					ScrollableWindow( Window* pParent, WinBits nBits = 0,
78*cdf0e10cSrcweir 									  ScrollableWindowFlags = SCRWIN_DEFAULT );
79*cdf0e10cSrcweir 					ScrollableWindow( Window* pParent, const ResId& rId,
80*cdf0e10cSrcweir 									  ScrollableWindowFlags = SCRWIN_DEFAULT );
81*cdf0e10cSrcweir 
82*cdf0e10cSrcweir 	virtual void	Resize();
83*cdf0e10cSrcweir 	virtual void	Command( const CommandEvent& rCEvt );
84*cdf0e10cSrcweir 	virtual void	DataChanged( const DataChangedEvent& rDEvt );
85*cdf0e10cSrcweir 
86*cdf0e10cSrcweir 	virtual void	StartScroll();
87*cdf0e10cSrcweir 	virtual void	EndScroll( long nDeltaX, long nDeltaY );
88*cdf0e10cSrcweir 
89*cdf0e10cSrcweir     using OutputDevice::SetMapMode;
90*cdf0e10cSrcweir 	virtual void	SetMapMode( const MapMode& rNewMapMode );
91*cdf0e10cSrcweir 	virtual MapMode	GetMapMode() const;
92*cdf0e10cSrcweir 
93*cdf0e10cSrcweir 	void			SetTotalSize( const Size& rNewSize );
94*cdf0e10cSrcweir 	Size			GetTotalSize() { return PixelToLogic( aTotPixSz ); }
95*cdf0e10cSrcweir 
96*cdf0e10cSrcweir 	void			SetVisibleSize( const Size& rNewSize );
97*cdf0e10cSrcweir 	sal_Bool			MakeVisible( const Rectangle& rTarget, sal_Bool bSloppy = sal_False );
98*cdf0e10cSrcweir 	Rectangle		GetVisibleArea() const;
99*cdf0e10cSrcweir 
100*cdf0e10cSrcweir 	void			SetLineSize( sal_uLong nHorz, sal_uLong nVert );
101*cdf0e10cSrcweir     using Window::Scroll;
102*cdf0e10cSrcweir 	virtual void	Scroll( long nDeltaX, long nDeltaY, sal_uInt16 nFlags = 0 );
103*cdf0e10cSrcweir 	void			ScrollLines( long nLinesX, long nLinesY );
104*cdf0e10cSrcweir 	void			ScrollPages( long nPagesX, sal_uLong nOverlapX,
105*cdf0e10cSrcweir 								 long nPagesY, sal_uLong nOverlapY );
106*cdf0e10cSrcweir 
107*cdf0e10cSrcweir private:
108*cdf0e10cSrcweir 	SVT_DLLPRIVATE Size			GetOutputSizePixel() const;
109*cdf0e10cSrcweir 	SVT_DLLPRIVATE Size			GetOutputSize() const;
110*cdf0e10cSrcweir };
111*cdf0e10cSrcweir 
112*cdf0e10cSrcweir #endif
113