1*5900e8ecSAndrew Rist /**************************************************************
2cdf0e10cSrcweir *
3*5900e8ecSAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one
4*5900e8ecSAndrew Rist * or more contributor license agreements. See the NOTICE file
5*5900e8ecSAndrew Rist * distributed with this work for additional information
6*5900e8ecSAndrew Rist * regarding copyright ownership. The ASF licenses this file
7*5900e8ecSAndrew Rist * to you under the Apache License, Version 2.0 (the
8*5900e8ecSAndrew Rist * "License"); you may not use this file except in compliance
9*5900e8ecSAndrew Rist * with the License. You may obtain a copy of the License at
10*5900e8ecSAndrew Rist *
11*5900e8ecSAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0
12*5900e8ecSAndrew Rist *
13*5900e8ecSAndrew Rist * Unless required by applicable law or agreed to in writing,
14*5900e8ecSAndrew Rist * software distributed under the License is distributed on an
15*5900e8ecSAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*5900e8ecSAndrew Rist * KIND, either express or implied. See the License for the
17*5900e8ecSAndrew Rist * specific language governing permissions and limitations
18*5900e8ecSAndrew Rist * under the License.
19*5900e8ecSAndrew Rist *
20*5900e8ecSAndrew Rist *************************************************************/
21*5900e8ecSAndrew Rist
22*5900e8ecSAndrew Rist
23cdf0e10cSrcweir
24cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove
25cdf0e10cSrcweir #include "precompiled_svtools.hxx"
26cdf0e10cSrcweir
27cdf0e10cSrcweir #include "datwin.hxx"
28cdf0e10cSrcweir
29cdf0e10cSrcweir #ifndef GCC
30cdf0e10cSrcweir #endif
31cdf0e10cSrcweir
32cdf0e10cSrcweir #ifndef _APP_HXX //autogen
33cdf0e10cSrcweir #include <vcl/svapp.hxx>
34cdf0e10cSrcweir #endif
35cdf0e10cSrcweir
36cdf0e10cSrcweir #ifndef _HELP_HXX
37cdf0e10cSrcweir #include <vcl/help.hxx>
38cdf0e10cSrcweir #endif
39cdf0e10cSrcweir #ifndef _IMAGE_HXX
40cdf0e10cSrcweir #include <vcl/image.hxx>
41cdf0e10cSrcweir #endif
42cdf0e10cSrcweir
43cdf0e10cSrcweir #include <tools/debug.hxx>
44cdf0e10cSrcweir
DECLARE_LIST(BrowserColumns,BrowserColumn *)45cdf0e10cSrcweir DECLARE_LIST( BrowserColumns, BrowserColumn* )
46cdf0e10cSrcweir
47cdf0e10cSrcweir //===================================================================
48cdf0e10cSrcweir void ButtonFrame::Draw( OutputDevice& rDev )
49cdf0e10cSrcweir {
50cdf0e10cSrcweir Color aOldFillColor = rDev.GetFillColor();
51cdf0e10cSrcweir Color aOldLineColor = rDev.GetLineColor();
52cdf0e10cSrcweir
53cdf0e10cSrcweir const StyleSettings &rSettings = rDev.GetSettings().GetStyleSettings();
54cdf0e10cSrcweir Color aColLight( rSettings.GetLightColor() );
55cdf0e10cSrcweir Color aColShadow( rSettings.GetShadowColor() );
56cdf0e10cSrcweir Color aColFace( rSettings.GetFaceColor() );
57cdf0e10cSrcweir
58cdf0e10cSrcweir rDev.SetLineColor( aColFace );
59cdf0e10cSrcweir rDev.SetFillColor( aColFace );
60cdf0e10cSrcweir rDev.DrawRect( aRect );
61cdf0e10cSrcweir
62cdf0e10cSrcweir if( rDev.GetOutDevType() == OUTDEV_WINDOW )
63cdf0e10cSrcweir {
64cdf0e10cSrcweir Window *pWin = (Window*) &rDev;
65cdf0e10cSrcweir if( bPressed )
66cdf0e10cSrcweir pWin->DrawSelectionBackground( aRect, 0, sal_True, sal_False, sal_False );
67cdf0e10cSrcweir }
68cdf0e10cSrcweir else
69cdf0e10cSrcweir {
70cdf0e10cSrcweir rDev.SetLineColor( bPressed ? aColShadow : aColLight );
71cdf0e10cSrcweir rDev.DrawLine( aRect.TopLeft(), Point( aRect.Right(), aRect.Top() ) );
72cdf0e10cSrcweir rDev.DrawLine( aRect.TopLeft(), Point( aRect.Left(), aRect.Bottom() - 1 ) );
73cdf0e10cSrcweir rDev.SetLineColor( bPressed ? aColLight : aColShadow );
74cdf0e10cSrcweir rDev.DrawLine( aRect.BottomRight(), Point( aRect.Right(), aRect.Top() ) );
75cdf0e10cSrcweir rDev.DrawLine( aRect.BottomRight(), Point( aRect.Left(), aRect.Bottom() ) );
76cdf0e10cSrcweir }
77cdf0e10cSrcweir
78cdf0e10cSrcweir if ( aText.Len() )
79cdf0e10cSrcweir {
80cdf0e10cSrcweir String aVal = rDev.GetEllipsisString(aText,aInnerRect.GetWidth() - 2*MIN_COLUMNWIDTH);
81cdf0e10cSrcweir
82cdf0e10cSrcweir Font aFont( rDev.GetFont() );
83cdf0e10cSrcweir sal_Bool bOldTransp = aFont.IsTransparent();
84cdf0e10cSrcweir if ( !bOldTransp )
85cdf0e10cSrcweir {
86cdf0e10cSrcweir aFont.SetTransparent( sal_True );
87cdf0e10cSrcweir rDev.SetFont( aFont );
88cdf0e10cSrcweir }
89cdf0e10cSrcweir
90cdf0e10cSrcweir Color aOldColor = rDev.GetTextColor();
91cdf0e10cSrcweir if (m_bDrawDisabled)
92cdf0e10cSrcweir rDev.SetTextColor(rSettings.GetDisableColor());
93cdf0e10cSrcweir
94cdf0e10cSrcweir rDev.DrawText( Point(
95cdf0e10cSrcweir ( aInnerRect.Left() + aInnerRect.Right() ) / 2 - ( rDev.GetTextWidth(aVal) / 2 ),
96cdf0e10cSrcweir aInnerRect.Top() ), aVal );
97cdf0e10cSrcweir
98cdf0e10cSrcweir // restore settings
99cdf0e10cSrcweir if ( !bOldTransp )
100cdf0e10cSrcweir {
101cdf0e10cSrcweir aFont.SetTransparent(sal_False);
102cdf0e10cSrcweir rDev.SetFont( aFont );
103cdf0e10cSrcweir }
104cdf0e10cSrcweir if (m_bDrawDisabled)
105cdf0e10cSrcweir rDev.SetTextColor(aOldColor);
106cdf0e10cSrcweir }
107cdf0e10cSrcweir
108cdf0e10cSrcweir if ( bCurs )
109cdf0e10cSrcweir {
110cdf0e10cSrcweir rDev.SetLineColor( Color( COL_BLACK ) );
111cdf0e10cSrcweir rDev.SetFillColor();
112cdf0e10cSrcweir rDev.DrawRect( Rectangle(
113cdf0e10cSrcweir Point( aRect.Left(), aRect.Top() ), Point( aRect.Right(), aRect.Bottom() ) ) );
114cdf0e10cSrcweir }
115cdf0e10cSrcweir
116cdf0e10cSrcweir rDev.SetLineColor( aOldLineColor );
117cdf0e10cSrcweir rDev.SetFillColor( aOldFillColor );
118cdf0e10cSrcweir }
119cdf0e10cSrcweir
120cdf0e10cSrcweir //-------------------------------------------------------------------
121cdf0e10cSrcweir
BrowserColumn(sal_uInt16 nItemId,const class Image & rImage,const String & rTitle,sal_uLong nWidthPixel,const Fraction & rCurrentZoom,HeaderBarItemBits nFlags)122cdf0e10cSrcweir BrowserColumn::BrowserColumn( sal_uInt16 nItemId, const class Image &rImage,
123cdf0e10cSrcweir const String& rTitle, sal_uLong nWidthPixel, const Fraction& rCurrentZoom,
124cdf0e10cSrcweir HeaderBarItemBits nFlags )
125cdf0e10cSrcweir : _nId( nItemId ),
126cdf0e10cSrcweir _nWidth( nWidthPixel ),
127cdf0e10cSrcweir _aImage( rImage ),
128cdf0e10cSrcweir _aTitle( rTitle ),
129cdf0e10cSrcweir _bFrozen( sal_False ),
130cdf0e10cSrcweir _nFlags( nFlags )
131cdf0e10cSrcweir {
132cdf0e10cSrcweir double n = (double)_nWidth;
133cdf0e10cSrcweir n *= (double)rCurrentZoom.GetDenominator();
134cdf0e10cSrcweir n /= (double)rCurrentZoom.GetNumerator();
135cdf0e10cSrcweir _nOriginalWidth = n>0 ? (long)(n+0.5) : -(long)(-n+0.5);
136cdf0e10cSrcweir }
137cdf0e10cSrcweir
~BrowserColumn()138cdf0e10cSrcweir BrowserColumn::~BrowserColumn()
139cdf0e10cSrcweir {
140cdf0e10cSrcweir }
141cdf0e10cSrcweir
142cdf0e10cSrcweir //-------------------------------------------------------------------
143cdf0e10cSrcweir
SetWidth(sal_uLong nNewWidthPixel,const Fraction & rCurrentZoom)144cdf0e10cSrcweir void BrowserColumn::SetWidth(sal_uLong nNewWidthPixel, const Fraction& rCurrentZoom)
145cdf0e10cSrcweir {
146cdf0e10cSrcweir _nWidth = nNewWidthPixel;
147cdf0e10cSrcweir double n = (double)_nWidth;
148cdf0e10cSrcweir n *= (double)rCurrentZoom.GetDenominator();
149cdf0e10cSrcweir n /= (double)rCurrentZoom.GetNumerator();
150cdf0e10cSrcweir _nOriginalWidth = n>0 ? (long)(n+0.5) : -(long)(-n+0.5);
151cdf0e10cSrcweir }
152cdf0e10cSrcweir
153cdf0e10cSrcweir //-------------------------------------------------------------------
154cdf0e10cSrcweir
Draw(BrowseBox & rBox,OutputDevice & rDev,const Point & rPos,sal_Bool bCurs)155cdf0e10cSrcweir void BrowserColumn::Draw( BrowseBox& rBox, OutputDevice& rDev, const Point& rPos, sal_Bool bCurs )
156cdf0e10cSrcweir {
157cdf0e10cSrcweir if ( _nId == 0 )
158cdf0e10cSrcweir {
159cdf0e10cSrcweir // paint handle column
160cdf0e10cSrcweir ButtonFrame( rPos, Size( Width()-1, rBox.GetDataRowHeight()-1 ),
161cdf0e10cSrcweir String(), sal_False, bCurs,
162cdf0e10cSrcweir 0 != (BROWSER_COLUMN_TITLEABBREVATION&_nFlags) ).Draw( rDev );
163cdf0e10cSrcweir Color aOldLineColor = rDev.GetLineColor();
164cdf0e10cSrcweir rDev.SetLineColor( Color( COL_BLACK ) );
165cdf0e10cSrcweir rDev.DrawLine(
166cdf0e10cSrcweir Point( rPos.X(), rPos.Y()+rBox.GetDataRowHeight()-1 ),
167cdf0e10cSrcweir Point( rPos.X() + Width() - 1, rPos.Y()+rBox.GetDataRowHeight()-1 ) );
168cdf0e10cSrcweir rDev.DrawLine(
169cdf0e10cSrcweir Point( rPos.X() + Width() - 1, rPos.Y() ),
170cdf0e10cSrcweir Point( rPos.X() + Width() - 1, rPos.Y()+rBox.GetDataRowHeight()-1 ) );
171cdf0e10cSrcweir rDev.SetLineColor( aOldLineColor );
172cdf0e10cSrcweir
173cdf0e10cSrcweir rBox.DoPaintField( rDev,
174cdf0e10cSrcweir Rectangle(
175cdf0e10cSrcweir Point( rPos.X() + 2, rPos.Y() + 2 ),
176cdf0e10cSrcweir Size( Width()-1, rBox.GetDataRowHeight()-1 ) ),
177cdf0e10cSrcweir GetId(),
178cdf0e10cSrcweir BrowseBox::BrowserColumnAccess() );
179cdf0e10cSrcweir }
180cdf0e10cSrcweir else
181cdf0e10cSrcweir {
182cdf0e10cSrcweir // paint data column
183cdf0e10cSrcweir long nWidth = Width() == LONG_MAX ? rBox.GetDataWindow().GetSizePixel().Width() : Width();
184cdf0e10cSrcweir
185cdf0e10cSrcweir rBox.DoPaintField( rDev,
186cdf0e10cSrcweir Rectangle(
187cdf0e10cSrcweir Point( rPos.X() + MIN_COLUMNWIDTH, rPos.Y() ),
188cdf0e10cSrcweir Size( nWidth-2*MIN_COLUMNWIDTH, rBox.GetDataRowHeight()-1 ) ),
189cdf0e10cSrcweir GetId(),
190cdf0e10cSrcweir BrowseBox::BrowserColumnAccess() );
191cdf0e10cSrcweir }
192cdf0e10cSrcweir }
193cdf0e10cSrcweir
194cdf0e10cSrcweir //-------------------------------------------------------------------
195cdf0e10cSrcweir
ZoomChanged(const Fraction & rNewZoom)196cdf0e10cSrcweir void BrowserColumn::ZoomChanged(const Fraction& rNewZoom)
197cdf0e10cSrcweir {
198cdf0e10cSrcweir double n = (double)_nOriginalWidth;
199cdf0e10cSrcweir n *= (double)rNewZoom.GetNumerator();
200cdf0e10cSrcweir n /= (double)rNewZoom.GetDenominator();
201cdf0e10cSrcweir
202cdf0e10cSrcweir _nWidth = n>0 ? (long)(n+0.5) : -(long)(-n+0.5);
203cdf0e10cSrcweir }
204cdf0e10cSrcweir
205cdf0e10cSrcweir //-------------------------------------------------------------------
206cdf0e10cSrcweir
BrowserDataWin(BrowseBox * pParent)207cdf0e10cSrcweir BrowserDataWin::BrowserDataWin( BrowseBox* pParent )
208cdf0e10cSrcweir :Control( pParent, WinBits(WB_CLIPCHILDREN) )
209cdf0e10cSrcweir ,DragSourceHelper( this )
210cdf0e10cSrcweir ,DropTargetHelper( this )
211cdf0e10cSrcweir ,pHeaderBar( 0 )
212cdf0e10cSrcweir ,pEventWin( pParent )
213cdf0e10cSrcweir ,pCornerWin( 0 )
214cdf0e10cSrcweir ,pDtorNotify( 0 )
215cdf0e10cSrcweir ,bInPaint( sal_False )
216cdf0e10cSrcweir ,bInCommand( sal_False )
217cdf0e10cSrcweir ,bNoScrollBack( sal_False )
218cdf0e10cSrcweir ,bNoHScroll( sal_False )
219cdf0e10cSrcweir ,bNoVScroll( sal_False )
220cdf0e10cSrcweir ,bUpdateMode( sal_True )
221cdf0e10cSrcweir ,bResizeOnPaint( sal_False )
222cdf0e10cSrcweir ,bUpdateOnUnlock( sal_False )
223cdf0e10cSrcweir ,bInUpdateScrollbars( sal_False )
224cdf0e10cSrcweir ,bHadRecursion( sal_False )
225cdf0e10cSrcweir ,bOwnDataChangedHdl( sal_False )
226cdf0e10cSrcweir ,bCallingDropCallback( sal_False )
227cdf0e10cSrcweir ,nUpdateLock( 0 )
228cdf0e10cSrcweir ,nCursorHidden( 0 )
229cdf0e10cSrcweir ,m_nDragRowDividerLimit( 0 )
230cdf0e10cSrcweir ,m_nDragRowDividerOffset( 0 )
231cdf0e10cSrcweir {
232cdf0e10cSrcweir aMouseTimer.SetTimeoutHdl( LINK( this, BrowserDataWin, RepeatedMouseMove ) );
233cdf0e10cSrcweir aMouseTimer.SetTimeout( 100 );
234cdf0e10cSrcweir }
235cdf0e10cSrcweir
236cdf0e10cSrcweir //-------------------------------------------------------------------
~BrowserDataWin()237cdf0e10cSrcweir BrowserDataWin::~BrowserDataWin()
238cdf0e10cSrcweir {
239cdf0e10cSrcweir if( pDtorNotify )
240cdf0e10cSrcweir *pDtorNotify = sal_True;
241cdf0e10cSrcweir }
242cdf0e10cSrcweir
243cdf0e10cSrcweir //-------------------------------------------------------------------
LeaveUpdateLock()244cdf0e10cSrcweir void BrowserDataWin::LeaveUpdateLock()
245cdf0e10cSrcweir {
246cdf0e10cSrcweir if ( !--nUpdateLock )
247cdf0e10cSrcweir {
248cdf0e10cSrcweir DoOutstandingInvalidations();
249cdf0e10cSrcweir if (bUpdateOnUnlock )
250cdf0e10cSrcweir {
251cdf0e10cSrcweir Control::Update();
252cdf0e10cSrcweir bUpdateOnUnlock = sal_False;
253cdf0e10cSrcweir }
254cdf0e10cSrcweir }
255cdf0e10cSrcweir }
256cdf0e10cSrcweir
257cdf0e10cSrcweir //-------------------------------------------------------------------
InitSettings_Impl(Window * pWin,sal_Bool bFont,sal_Bool bForeground,sal_Bool bBackground)258cdf0e10cSrcweir void InitSettings_Impl( Window *pWin,
259cdf0e10cSrcweir sal_Bool bFont, sal_Bool bForeground, sal_Bool bBackground )
260cdf0e10cSrcweir {
261cdf0e10cSrcweir const StyleSettings& rStyleSettings =
262cdf0e10cSrcweir pWin->GetSettings().GetStyleSettings();
263cdf0e10cSrcweir
264cdf0e10cSrcweir if ( bFont )
265cdf0e10cSrcweir {
266cdf0e10cSrcweir Font aFont = rStyleSettings.GetFieldFont();
267cdf0e10cSrcweir if ( pWin->IsControlFont() )
268cdf0e10cSrcweir aFont.Merge( pWin->GetControlFont() );
269cdf0e10cSrcweir pWin->SetZoomedPointFont( aFont );
270cdf0e10cSrcweir }
271cdf0e10cSrcweir
272cdf0e10cSrcweir if ( bFont || bForeground )
273cdf0e10cSrcweir {
274cdf0e10cSrcweir Color aTextColor = rStyleSettings.GetWindowTextColor();
275cdf0e10cSrcweir if ( pWin->IsControlForeground() )
276cdf0e10cSrcweir aTextColor = pWin->GetControlForeground();
277cdf0e10cSrcweir pWin->SetTextColor( aTextColor );
278cdf0e10cSrcweir }
279cdf0e10cSrcweir
280cdf0e10cSrcweir if ( bBackground )
281cdf0e10cSrcweir {
282cdf0e10cSrcweir if( pWin->IsControlBackground() )
283cdf0e10cSrcweir pWin->SetBackground( pWin->GetControlBackground() );
284cdf0e10cSrcweir else
285cdf0e10cSrcweir pWin->SetBackground( rStyleSettings.GetWindowColor() );
286cdf0e10cSrcweir }
287cdf0e10cSrcweir }
288cdf0e10cSrcweir
289cdf0e10cSrcweir //-------------------------------------------------------------------
Update()290cdf0e10cSrcweir void BrowserDataWin::Update()
291cdf0e10cSrcweir {
292cdf0e10cSrcweir if ( !nUpdateLock )
293cdf0e10cSrcweir Control::Update();
294cdf0e10cSrcweir else
295cdf0e10cSrcweir bUpdateOnUnlock = sal_True;
296cdf0e10cSrcweir }
297cdf0e10cSrcweir
298cdf0e10cSrcweir //-------------------------------------------------------------------
DataChanged(const DataChangedEvent & rDCEvt)299cdf0e10cSrcweir void BrowserDataWin::DataChanged( const DataChangedEvent& rDCEvt )
300cdf0e10cSrcweir {
301cdf0e10cSrcweir if ( (rDCEvt.GetType() == DATACHANGED_SETTINGS) &&
302cdf0e10cSrcweir (rDCEvt.GetFlags() & SETTINGS_STYLE) )
303cdf0e10cSrcweir {
304cdf0e10cSrcweir if( !bOwnDataChangedHdl )
305cdf0e10cSrcweir {
306cdf0e10cSrcweir InitSettings_Impl( this, sal_True, sal_True, sal_True );
307cdf0e10cSrcweir Invalidate();
308cdf0e10cSrcweir InitSettings_Impl( GetParent(), sal_True, sal_True, sal_True );
309cdf0e10cSrcweir GetParent()->Invalidate();
310cdf0e10cSrcweir GetParent()->Resize();
311cdf0e10cSrcweir }
312cdf0e10cSrcweir }
313cdf0e10cSrcweir else
314cdf0e10cSrcweir Control::DataChanged( rDCEvt );
315cdf0e10cSrcweir }
316cdf0e10cSrcweir
317cdf0e10cSrcweir //-------------------------------------------------------------------
Paint(const Rectangle & rRect)318cdf0e10cSrcweir void BrowserDataWin::Paint( const Rectangle& rRect )
319cdf0e10cSrcweir {
320cdf0e10cSrcweir if ( !nUpdateLock && GetUpdateMode() )
321cdf0e10cSrcweir {
322cdf0e10cSrcweir if ( bInPaint )
323cdf0e10cSrcweir {
324cdf0e10cSrcweir aInvalidRegion.Insert( new Rectangle( rRect ) );
325cdf0e10cSrcweir return;
326cdf0e10cSrcweir }
327cdf0e10cSrcweir bInPaint = sal_True;
328cdf0e10cSrcweir ( (BrowseBox*) GetParent() )->PaintData( *this, rRect );
329cdf0e10cSrcweir bInPaint = sal_False;
330cdf0e10cSrcweir DoOutstandingInvalidations();
331cdf0e10cSrcweir }
332cdf0e10cSrcweir else
333cdf0e10cSrcweir aInvalidRegion.Insert( new Rectangle( rRect ) );
334cdf0e10cSrcweir }
335cdf0e10cSrcweir
336cdf0e10cSrcweir //-------------------------------------------------------------------
337cdf0e10cSrcweir
CreateBrowseEvent(const Point & rPosPixel)338cdf0e10cSrcweir BrowseEvent BrowserDataWin::CreateBrowseEvent( const Point& rPosPixel )
339cdf0e10cSrcweir {
340cdf0e10cSrcweir BrowseBox *pBox = GetParent();
341cdf0e10cSrcweir
342cdf0e10cSrcweir // seek to row under mouse
343cdf0e10cSrcweir long nRelRow = rPosPixel.Y() < 0
344cdf0e10cSrcweir ? -1
345cdf0e10cSrcweir : rPosPixel.Y() / pBox->GetDataRowHeight();
346cdf0e10cSrcweir long nRow = nRelRow < 0 ? -1 : nRelRow + pBox->nTopRow;
347cdf0e10cSrcweir
348cdf0e10cSrcweir // find column under mouse
349cdf0e10cSrcweir long nMouseX = rPosPixel.X();
350cdf0e10cSrcweir long nColX = 0;
351cdf0e10cSrcweir sal_uInt16 nCol;
352cdf0e10cSrcweir for ( nCol = 0;
353cdf0e10cSrcweir nCol < pBox->pCols->Count() && nColX < GetSizePixel().Width();
354cdf0e10cSrcweir ++nCol )
355cdf0e10cSrcweir if ( pBox->pCols->GetObject(nCol)->IsFrozen() || nCol >= pBox->nFirstCol )
356cdf0e10cSrcweir {
357cdf0e10cSrcweir nColX += pBox->pCols->GetObject(nCol)->Width();
358cdf0e10cSrcweir if ( nMouseX < nColX )
359cdf0e10cSrcweir break;
360cdf0e10cSrcweir }
361cdf0e10cSrcweir sal_uInt16 nColId = BROWSER_INVALIDID;
362cdf0e10cSrcweir if ( nCol < pBox->pCols->Count() )
363cdf0e10cSrcweir nColId = pBox->pCols->GetObject(nCol)->GetId();
364cdf0e10cSrcweir
365cdf0e10cSrcweir // compute the field rectangle and field relative MouseEvent
366cdf0e10cSrcweir Rectangle aFieldRect;
367cdf0e10cSrcweir if ( nCol < pBox->pCols->Count() )
368cdf0e10cSrcweir {
369cdf0e10cSrcweir nColX -= pBox->pCols->GetObject(nCol)->Width();
370cdf0e10cSrcweir aFieldRect = Rectangle(
371cdf0e10cSrcweir Point( nColX, nRelRow * pBox->GetDataRowHeight() ),
372cdf0e10cSrcweir Size( pBox->pCols->GetObject(nCol)->Width(),
373cdf0e10cSrcweir pBox->GetDataRowHeight() ) );
374cdf0e10cSrcweir }
375cdf0e10cSrcweir
376cdf0e10cSrcweir // assemble and return the BrowseEvent
377cdf0e10cSrcweir return BrowseEvent( this, nRow, nCol, nColId, aFieldRect );
378cdf0e10cSrcweir }
379cdf0e10cSrcweir
380cdf0e10cSrcweir //-------------------------------------------------------------------
AcceptDrop(const AcceptDropEvent & _rEvt)381cdf0e10cSrcweir sal_Int8 BrowserDataWin::AcceptDrop( const AcceptDropEvent& _rEvt )
382cdf0e10cSrcweir {
383cdf0e10cSrcweir bCallingDropCallback = sal_True;
384cdf0e10cSrcweir sal_Int8 nReturn = DND_ACTION_NONE;
385cdf0e10cSrcweir nReturn = GetParent()->AcceptDrop( BrowserAcceptDropEvent( this, _rEvt ) );
386cdf0e10cSrcweir bCallingDropCallback = sal_False;
387cdf0e10cSrcweir return nReturn;
388cdf0e10cSrcweir }
389cdf0e10cSrcweir
390cdf0e10cSrcweir //-------------------------------------------------------------------
ExecuteDrop(const ExecuteDropEvent & _rEvt)391cdf0e10cSrcweir sal_Int8 BrowserDataWin::ExecuteDrop( const ExecuteDropEvent& _rEvt )
392cdf0e10cSrcweir {
393cdf0e10cSrcweir bCallingDropCallback = sal_True;
394cdf0e10cSrcweir sal_Int8 nReturn = DND_ACTION_NONE;
395cdf0e10cSrcweir nReturn = GetParent()->ExecuteDrop( BrowserExecuteDropEvent( this, _rEvt ) );
396cdf0e10cSrcweir bCallingDropCallback = sal_False;
397cdf0e10cSrcweir return nReturn;
398cdf0e10cSrcweir }
399cdf0e10cSrcweir
400cdf0e10cSrcweir //-------------------------------------------------------------------
StartDrag(sal_Int8 _nAction,const Point & _rPosPixel)401cdf0e10cSrcweir void BrowserDataWin::StartDrag( sal_Int8 _nAction, const Point& _rPosPixel )
402cdf0e10cSrcweir {
403cdf0e10cSrcweir if ( !GetParent()->bRowDividerDrag )
404cdf0e10cSrcweir {
405cdf0e10cSrcweir Point aEventPos( _rPosPixel );
406cdf0e10cSrcweir aEventPos.Y() += GetParent()->GetTitleHeight();
407cdf0e10cSrcweir GetParent()->StartDrag( _nAction, aEventPos );
408cdf0e10cSrcweir }
409cdf0e10cSrcweir }
410cdf0e10cSrcweir
411cdf0e10cSrcweir //-------------------------------------------------------------------
Command(const CommandEvent & rEvt)412cdf0e10cSrcweir void BrowserDataWin::Command( const CommandEvent& rEvt )
413cdf0e10cSrcweir {
414cdf0e10cSrcweir // Scrollmaus-Event?
415cdf0e10cSrcweir BrowseBox *pBox = GetParent();
416cdf0e10cSrcweir if ( ( (rEvt.GetCommand() == COMMAND_WHEEL) ||
417cdf0e10cSrcweir (rEvt.GetCommand() == COMMAND_STARTAUTOSCROLL) ||
418cdf0e10cSrcweir (rEvt.GetCommand() == COMMAND_AUTOSCROLL) ) &&
419cdf0e10cSrcweir ( HandleScrollCommand( rEvt, &pBox->aHScroll, pBox->pVScroll ) ) )
420cdf0e10cSrcweir return;
421cdf0e10cSrcweir
422cdf0e10cSrcweir Point aEventPos( rEvt.GetMousePosPixel() );
423cdf0e10cSrcweir long nRow = pBox->GetRowAtYPosPixel( aEventPos.Y(), sal_False);
424cdf0e10cSrcweir MouseEvent aMouseEvt( aEventPos, 1, MOUSE_SELECT, MOUSE_LEFT );
425cdf0e10cSrcweir if ( COMMAND_CONTEXTMENU == rEvt.GetCommand() && rEvt.IsMouseEvent() &&
426cdf0e10cSrcweir nRow < pBox->GetRowCount() && !pBox->IsRowSelected(nRow) )
427cdf0e10cSrcweir {
428cdf0e10cSrcweir sal_Bool bDeleted = sal_False;
429cdf0e10cSrcweir pDtorNotify = &bDeleted;
430cdf0e10cSrcweir bInCommand = sal_True;
431cdf0e10cSrcweir MouseButtonDown( aMouseEvt );
432cdf0e10cSrcweir if( bDeleted )
433cdf0e10cSrcweir return;
434cdf0e10cSrcweir MouseButtonUp( aMouseEvt );
435cdf0e10cSrcweir if( bDeleted )
436cdf0e10cSrcweir return;
437cdf0e10cSrcweir pDtorNotify = 0;
438cdf0e10cSrcweir bInCommand = sal_False;
439cdf0e10cSrcweir }
440cdf0e10cSrcweir
441cdf0e10cSrcweir aEventPos.Y() += GetParent()->GetTitleHeight();
442cdf0e10cSrcweir CommandEvent aEvt( aEventPos, rEvt.GetCommand(),
443cdf0e10cSrcweir rEvt.IsMouseEvent(), rEvt.GetData() );
444cdf0e10cSrcweir bInCommand = sal_True;
445cdf0e10cSrcweir sal_Bool bDeleted = sal_False;
446cdf0e10cSrcweir pDtorNotify = &bDeleted;
447cdf0e10cSrcweir GetParent()->Command( aEvt );
448cdf0e10cSrcweir if( bDeleted )
449cdf0e10cSrcweir return;
450cdf0e10cSrcweir pDtorNotify = 0;
451cdf0e10cSrcweir bInCommand = sal_False;
452cdf0e10cSrcweir
453cdf0e10cSrcweir if ( COMMAND_STARTDRAG == rEvt.GetCommand() )
454cdf0e10cSrcweir MouseButtonUp( aMouseEvt );
455cdf0e10cSrcweir
456cdf0e10cSrcweir Control::Command( rEvt );
457cdf0e10cSrcweir }
458cdf0e10cSrcweir
459cdf0e10cSrcweir //-------------------------------------------------------------------
460cdf0e10cSrcweir
ImplRowDividerHitTest(const BrowserMouseEvent & _rEvent)461cdf0e10cSrcweir sal_Bool BrowserDataWin::ImplRowDividerHitTest( const BrowserMouseEvent& _rEvent )
462cdf0e10cSrcweir {
463cdf0e10cSrcweir if ( ! ( GetParent()->IsInteractiveRowHeightEnabled()
464cdf0e10cSrcweir && ( _rEvent.GetRow() >= 0 )
465cdf0e10cSrcweir && ( _rEvent.GetRow() < GetParent()->GetRowCount() )
466cdf0e10cSrcweir && ( _rEvent.GetColumnId() == 0 )
467cdf0e10cSrcweir )
468cdf0e10cSrcweir )
469cdf0e10cSrcweir return sal_False;
470cdf0e10cSrcweir
471cdf0e10cSrcweir long nDividerDistance = GetParent()->GetDataRowHeight() - ( _rEvent.GetPosPixel().Y() % GetParent()->GetDataRowHeight() );
472cdf0e10cSrcweir return ( nDividerDistance <= 4 );
473cdf0e10cSrcweir }
474cdf0e10cSrcweir
475cdf0e10cSrcweir //-------------------------------------------------------------------
476cdf0e10cSrcweir
MouseButtonDown(const MouseEvent & rEvt)477cdf0e10cSrcweir void BrowserDataWin::MouseButtonDown( const MouseEvent& rEvt )
478cdf0e10cSrcweir {
479cdf0e10cSrcweir aLastMousePos = OutputToScreenPixel( rEvt.GetPosPixel() );
480cdf0e10cSrcweir
481cdf0e10cSrcweir BrowserMouseEvent aBrowserEvent( this, rEvt );
482cdf0e10cSrcweir if ( ( aBrowserEvent.GetClicks() == 1 ) && ImplRowDividerHitTest( aBrowserEvent ) )
483cdf0e10cSrcweir {
484cdf0e10cSrcweir StartRowDividerDrag( aBrowserEvent.GetPosPixel() );
485cdf0e10cSrcweir return;
486cdf0e10cSrcweir }
487cdf0e10cSrcweir
488cdf0e10cSrcweir GetParent()->MouseButtonDown( BrowserMouseEvent( this, rEvt ) );
489cdf0e10cSrcweir }
490cdf0e10cSrcweir
491cdf0e10cSrcweir //-------------------------------------------------------------------
492cdf0e10cSrcweir
MouseMove(const MouseEvent & rEvt)493cdf0e10cSrcweir void BrowserDataWin::MouseMove( const MouseEvent& rEvt )
494cdf0e10cSrcweir {
495cdf0e10cSrcweir // Pseudo MouseMoves verhindern
496cdf0e10cSrcweir Point aNewPos = OutputToScreenPixel( rEvt.GetPosPixel() );
497cdf0e10cSrcweir if ( ( aNewPos == aLastMousePos ) )
498cdf0e10cSrcweir return;
499cdf0e10cSrcweir aLastMousePos = aNewPos;
500cdf0e10cSrcweir
501cdf0e10cSrcweir // transform to a BrowseEvent
502cdf0e10cSrcweir BrowserMouseEvent aBrowserEvent( this, rEvt );
503cdf0e10cSrcweir GetParent()->MouseMove( aBrowserEvent );
504cdf0e10cSrcweir
505cdf0e10cSrcweir // pointer shape
506cdf0e10cSrcweir PointerStyle ePointerStyle = POINTER_ARROW;
507cdf0e10cSrcweir if ( ImplRowDividerHitTest( aBrowserEvent ) )
508cdf0e10cSrcweir ePointerStyle = POINTER_VSIZEBAR;
509cdf0e10cSrcweir SetPointer( Pointer( ePointerStyle ) );
510cdf0e10cSrcweir
511cdf0e10cSrcweir // dragging out of the visible area?
512cdf0e10cSrcweir if ( rEvt.IsLeft() &&
513cdf0e10cSrcweir ( rEvt.GetPosPixel().Y() > GetSizePixel().Height() ||
514cdf0e10cSrcweir rEvt.GetPosPixel().Y() < 0 ) )
515cdf0e10cSrcweir {
516cdf0e10cSrcweir // repeat the event
517cdf0e10cSrcweir aRepeatEvt = rEvt;
518cdf0e10cSrcweir aMouseTimer.Start();
519cdf0e10cSrcweir }
520cdf0e10cSrcweir else
521cdf0e10cSrcweir // killing old repeat-event
522cdf0e10cSrcweir if ( aMouseTimer.IsActive() )
523cdf0e10cSrcweir aMouseTimer.Stop();
524cdf0e10cSrcweir }
525cdf0e10cSrcweir
526cdf0e10cSrcweir //-------------------------------------------------------------------
527cdf0e10cSrcweir
IMPL_LINK_INLINE_START(BrowserDataWin,RepeatedMouseMove,void *,EMPTYARG)528cdf0e10cSrcweir IMPL_LINK_INLINE_START( BrowserDataWin, RepeatedMouseMove, void *, EMPTYARG )
529cdf0e10cSrcweir {
530cdf0e10cSrcweir GetParent()->MouseMove( BrowserMouseEvent( this, aRepeatEvt ) );
531cdf0e10cSrcweir return 0;
532cdf0e10cSrcweir }
IMPL_LINK_INLINE_END(BrowserDataWin,RepeatedMouseMove,void *,EMPTYARG)533cdf0e10cSrcweir IMPL_LINK_INLINE_END( BrowserDataWin, RepeatedMouseMove, void *, EMPTYARG )
534cdf0e10cSrcweir
535cdf0e10cSrcweir //-------------------------------------------------------------------
536cdf0e10cSrcweir
537cdf0e10cSrcweir void BrowserDataWin::MouseButtonUp( const MouseEvent& rEvt )
538cdf0e10cSrcweir {
539cdf0e10cSrcweir // Pseudo MouseMoves verhindern
540cdf0e10cSrcweir Point aNewPos = OutputToScreenPixel( rEvt.GetPosPixel() );
541cdf0e10cSrcweir aLastMousePos = aNewPos;
542cdf0e10cSrcweir
543cdf0e10cSrcweir // Move an die aktuelle Position simulieren
544cdf0e10cSrcweir MouseMove( rEvt );
545cdf0e10cSrcweir
546cdf0e10cSrcweir // eigentliches Up-Handling
547cdf0e10cSrcweir ReleaseMouse();
548cdf0e10cSrcweir if ( aMouseTimer.IsActive() )
549cdf0e10cSrcweir aMouseTimer.Stop();
550cdf0e10cSrcweir GetParent()->MouseButtonUp( BrowserMouseEvent( this, rEvt ) );
551cdf0e10cSrcweir }
552cdf0e10cSrcweir
553cdf0e10cSrcweir //-------------------------------------------------------------------
554cdf0e10cSrcweir
StartRowDividerDrag(const Point & _rStartPos)555cdf0e10cSrcweir void BrowserDataWin::StartRowDividerDrag( const Point& _rStartPos )
556cdf0e10cSrcweir {
557cdf0e10cSrcweir long nDataRowHeight = GetParent()->GetDataRowHeight();
558cdf0e10cSrcweir // the exact separation pos of the two rows
559cdf0e10cSrcweir long nDragRowDividerCurrentPos = _rStartPos.Y();
560cdf0e10cSrcweir if ( ( nDragRowDividerCurrentPos % nDataRowHeight ) > nDataRowHeight / 2 )
561cdf0e10cSrcweir nDragRowDividerCurrentPos += nDataRowHeight;
562cdf0e10cSrcweir nDragRowDividerCurrentPos /= nDataRowHeight;
563cdf0e10cSrcweir nDragRowDividerCurrentPos *= nDataRowHeight;
564cdf0e10cSrcweir
565cdf0e10cSrcweir m_nDragRowDividerOffset = nDragRowDividerCurrentPos - _rStartPos.Y();
566cdf0e10cSrcweir
567cdf0e10cSrcweir m_nDragRowDividerLimit = nDragRowDividerCurrentPos - nDataRowHeight;
568cdf0e10cSrcweir
569cdf0e10cSrcweir GetParent()->bRowDividerDrag = sal_True;
570cdf0e10cSrcweir GetParent()->ImplStartTracking();
571cdf0e10cSrcweir
572cdf0e10cSrcweir Rectangle aDragSplitRect( 0, m_nDragRowDividerLimit, GetOutputSizePixel().Width(), nDragRowDividerCurrentPos );
573cdf0e10cSrcweir ShowTracking( aDragSplitRect, SHOWTRACK_SMALL );
574cdf0e10cSrcweir
575cdf0e10cSrcweir StartTracking();
576cdf0e10cSrcweir }
577cdf0e10cSrcweir
578cdf0e10cSrcweir //-------------------------------------------------------------------
579cdf0e10cSrcweir
Tracking(const TrackingEvent & rTEvt)580cdf0e10cSrcweir void BrowserDataWin::Tracking( const TrackingEvent& rTEvt )
581cdf0e10cSrcweir {
582cdf0e10cSrcweir if ( !GetParent()->bRowDividerDrag )
583cdf0e10cSrcweir return;
584cdf0e10cSrcweir
585cdf0e10cSrcweir Point aMousePos = rTEvt.GetMouseEvent().GetPosPixel();
586cdf0e10cSrcweir // stop resizing at our bottom line
587cdf0e10cSrcweir if ( aMousePos.Y() > GetOutputSizePixel().Height() )
588cdf0e10cSrcweir aMousePos.Y() = GetOutputSizePixel().Height();
589cdf0e10cSrcweir
590cdf0e10cSrcweir if ( rTEvt.IsTrackingEnded() )
591cdf0e10cSrcweir {
592cdf0e10cSrcweir HideTracking();
593cdf0e10cSrcweir GetParent()->bRowDividerDrag = sal_False;
594cdf0e10cSrcweir GetParent()->ImplEndTracking();
595cdf0e10cSrcweir
596cdf0e10cSrcweir if ( !rTEvt.IsTrackingCanceled() )
597cdf0e10cSrcweir {
598cdf0e10cSrcweir long nNewRowHeight = aMousePos.Y() + m_nDragRowDividerOffset - m_nDragRowDividerLimit;
599cdf0e10cSrcweir
600cdf0e10cSrcweir // care for minimum row height
601cdf0e10cSrcweir if ( nNewRowHeight < GetParent()->QueryMinimumRowHeight() )
602cdf0e10cSrcweir nNewRowHeight = GetParent()->QueryMinimumRowHeight();
603cdf0e10cSrcweir
604cdf0e10cSrcweir GetParent()->SetDataRowHeight( nNewRowHeight );
605cdf0e10cSrcweir GetParent()->RowHeightChanged();
606cdf0e10cSrcweir }
607cdf0e10cSrcweir }
608cdf0e10cSrcweir else
609cdf0e10cSrcweir {
610cdf0e10cSrcweir GetParent()->ImplTracking();
611cdf0e10cSrcweir
612cdf0e10cSrcweir long nDragRowDividerCurrentPos = aMousePos.Y() + m_nDragRowDividerOffset;
613cdf0e10cSrcweir
614cdf0e10cSrcweir // care for minimum row height
615cdf0e10cSrcweir if ( nDragRowDividerCurrentPos < m_nDragRowDividerLimit + GetParent()->QueryMinimumRowHeight() )
616cdf0e10cSrcweir nDragRowDividerCurrentPos = m_nDragRowDividerLimit + GetParent()->QueryMinimumRowHeight();
617cdf0e10cSrcweir
618cdf0e10cSrcweir Rectangle aDragSplitRect( 0, m_nDragRowDividerLimit, GetOutputSizePixel().Width(), nDragRowDividerCurrentPos );
619cdf0e10cSrcweir ShowTracking( aDragSplitRect, SHOWTRACK_SMALL );
620cdf0e10cSrcweir }
621cdf0e10cSrcweir }
622cdf0e10cSrcweir
623cdf0e10cSrcweir //-------------------------------------------------------------------
624cdf0e10cSrcweir
KeyInput(const KeyEvent & rEvt)625cdf0e10cSrcweir void BrowserDataWin::KeyInput( const KeyEvent& rEvt )
626cdf0e10cSrcweir {
627cdf0e10cSrcweir // pass to parent window
628cdf0e10cSrcweir if ( !GetParent()->ProcessKey( rEvt ) )
629cdf0e10cSrcweir Control::KeyInput( rEvt );
630cdf0e10cSrcweir }
631cdf0e10cSrcweir
632cdf0e10cSrcweir //-------------------------------------------------------------------
633cdf0e10cSrcweir
RequestHelp(const HelpEvent & rHEvt)634cdf0e10cSrcweir void BrowserDataWin::RequestHelp( const HelpEvent& rHEvt )
635cdf0e10cSrcweir {
636cdf0e10cSrcweir pEventWin = this;
637cdf0e10cSrcweir GetParent()->RequestHelp( rHEvt );
638cdf0e10cSrcweir pEventWin = GetParent();
639cdf0e10cSrcweir }
640cdf0e10cSrcweir
641cdf0e10cSrcweir //===================================================================
642cdf0e10cSrcweir
BrowseEvent(Window * pWindow,long nAbsRow,sal_uInt16 nColumn,sal_uInt16 nColumnId,const Rectangle & rRect)643cdf0e10cSrcweir BrowseEvent::BrowseEvent( Window* pWindow,
644cdf0e10cSrcweir long nAbsRow, sal_uInt16 nColumn, sal_uInt16 nColumnId,
645cdf0e10cSrcweir const Rectangle& rRect ):
646cdf0e10cSrcweir pWin(pWindow),
647cdf0e10cSrcweir nRow(nAbsRow),
648cdf0e10cSrcweir aRect(rRect),
649cdf0e10cSrcweir nCol(nColumn),
650cdf0e10cSrcweir nColId(nColumnId)
651cdf0e10cSrcweir {
652cdf0e10cSrcweir }
653cdf0e10cSrcweir
654cdf0e10cSrcweir //===================================================================
BrowserMouseEvent(BrowserDataWin * pWindow,const MouseEvent & rEvt)655cdf0e10cSrcweir BrowserMouseEvent::BrowserMouseEvent( BrowserDataWin *pWindow,
656cdf0e10cSrcweir const MouseEvent& rEvt ):
657cdf0e10cSrcweir MouseEvent(rEvt),
658cdf0e10cSrcweir BrowseEvent( pWindow->CreateBrowseEvent( rEvt.GetPosPixel() ) )
659cdf0e10cSrcweir {
660cdf0e10cSrcweir }
661cdf0e10cSrcweir
662cdf0e10cSrcweir //-------------------------------------------------------------------
663cdf0e10cSrcweir
BrowserMouseEvent(Window * pWindow,const MouseEvent & rEvt,long nAbsRow,sal_uInt16 nColumn,sal_uInt16 nColumnId,const Rectangle & rRect)664cdf0e10cSrcweir BrowserMouseEvent::BrowserMouseEvent( Window *pWindow, const MouseEvent& rEvt,
665cdf0e10cSrcweir long nAbsRow, sal_uInt16 nColumn, sal_uInt16 nColumnId,
666cdf0e10cSrcweir const Rectangle& rRect ):
667cdf0e10cSrcweir MouseEvent(rEvt),
668cdf0e10cSrcweir BrowseEvent( pWindow, nAbsRow, nColumn, nColumnId, rRect )
669cdf0e10cSrcweir {
670cdf0e10cSrcweir }
671cdf0e10cSrcweir
672cdf0e10cSrcweir //===================================================================
673cdf0e10cSrcweir
BrowserAcceptDropEvent(BrowserDataWin * pWindow,const AcceptDropEvent & rEvt)674cdf0e10cSrcweir BrowserAcceptDropEvent::BrowserAcceptDropEvent( BrowserDataWin *pWindow, const AcceptDropEvent& rEvt )
675cdf0e10cSrcweir :AcceptDropEvent(rEvt)
676cdf0e10cSrcweir ,BrowseEvent( pWindow->CreateBrowseEvent( rEvt.maPosPixel ) )
677cdf0e10cSrcweir {
678cdf0e10cSrcweir }
679cdf0e10cSrcweir
680cdf0e10cSrcweir //===================================================================
681cdf0e10cSrcweir
BrowserExecuteDropEvent(BrowserDataWin * pWindow,const ExecuteDropEvent & rEvt)682cdf0e10cSrcweir BrowserExecuteDropEvent::BrowserExecuteDropEvent( BrowserDataWin *pWindow, const ExecuteDropEvent& rEvt )
683cdf0e10cSrcweir :ExecuteDropEvent(rEvt)
684cdf0e10cSrcweir ,BrowseEvent( pWindow->CreateBrowseEvent( rEvt.maPosPixel ) )
685cdf0e10cSrcweir {
686cdf0e10cSrcweir }
687cdf0e10cSrcweir
688cdf0e10cSrcweir //===================================================================
689cdf0e10cSrcweir
690cdf0e10cSrcweir //-------------------------------------------------------------------
691cdf0e10cSrcweir
SetUpdateMode(sal_Bool bMode)692cdf0e10cSrcweir void BrowserDataWin::SetUpdateMode( sal_Bool bMode )
693cdf0e10cSrcweir {
694cdf0e10cSrcweir DBG_ASSERT( !bUpdateMode || aInvalidRegion.Count() == 0,
695cdf0e10cSrcweir "invalid region not empty" );
696cdf0e10cSrcweir if ( bMode == bUpdateMode )
697cdf0e10cSrcweir return;
698cdf0e10cSrcweir
699cdf0e10cSrcweir bUpdateMode = bMode;
700cdf0e10cSrcweir if ( bMode )
701cdf0e10cSrcweir DoOutstandingInvalidations();
702cdf0e10cSrcweir }
703cdf0e10cSrcweir
704cdf0e10cSrcweir //-------------------------------------------------------------------
DoOutstandingInvalidations()705cdf0e10cSrcweir void BrowserDataWin::DoOutstandingInvalidations()
706cdf0e10cSrcweir {
707cdf0e10cSrcweir for ( Rectangle* pRect = aInvalidRegion.First();
708cdf0e10cSrcweir pRect;
709cdf0e10cSrcweir pRect = aInvalidRegion.Next() )
710cdf0e10cSrcweir {
711cdf0e10cSrcweir Control::Invalidate( *pRect );
712cdf0e10cSrcweir delete pRect;
713cdf0e10cSrcweir }
714cdf0e10cSrcweir aInvalidRegion.Clear();
715cdf0e10cSrcweir }
716cdf0e10cSrcweir
717cdf0e10cSrcweir //-------------------------------------------------------------------
718cdf0e10cSrcweir
Invalidate(sal_uInt16 nFlags)719cdf0e10cSrcweir void BrowserDataWin::Invalidate( sal_uInt16 nFlags )
720cdf0e10cSrcweir {
721cdf0e10cSrcweir if ( !GetUpdateMode() )
722cdf0e10cSrcweir {
723cdf0e10cSrcweir for ( Rectangle* pRect = aInvalidRegion.First();
724cdf0e10cSrcweir pRect;
725cdf0e10cSrcweir pRect = aInvalidRegion.Next() )
726cdf0e10cSrcweir delete pRect;
727cdf0e10cSrcweir aInvalidRegion.Clear();
728cdf0e10cSrcweir aInvalidRegion.Insert( new Rectangle( Point( 0, 0 ), GetOutputSizePixel() ) );
729cdf0e10cSrcweir }
730cdf0e10cSrcweir else
731cdf0e10cSrcweir Window::Invalidate( nFlags );
732cdf0e10cSrcweir }
733cdf0e10cSrcweir
734cdf0e10cSrcweir //-------------------------------------------------------------------
735cdf0e10cSrcweir
Invalidate(const Rectangle & rRect,sal_uInt16 nFlags)736cdf0e10cSrcweir void BrowserDataWin::Invalidate( const Rectangle& rRect, sal_uInt16 nFlags )
737cdf0e10cSrcweir {
738cdf0e10cSrcweir if ( !GetUpdateMode() )
739cdf0e10cSrcweir aInvalidRegion.Insert( new Rectangle( rRect ) );
740cdf0e10cSrcweir else
741cdf0e10cSrcweir Window::Invalidate( rRect, nFlags );
742cdf0e10cSrcweir }
743cdf0e10cSrcweir
744cdf0e10cSrcweir //===================================================================
745cdf0e10cSrcweir
Tracking(const TrackingEvent & rTEvt)746cdf0e10cSrcweir void BrowserScrollBar::Tracking( const TrackingEvent& rTEvt )
747cdf0e10cSrcweir {
748cdf0e10cSrcweir sal_uLong nPos = GetThumbPos();
749cdf0e10cSrcweir if ( nPos != _nLastPos )
750cdf0e10cSrcweir {
751cdf0e10cSrcweir String aTip( String::CreateFromInt32(nPos) );
752cdf0e10cSrcweir aTip += '/';
753cdf0e10cSrcweir if ( _pDataWin->GetRealRowCount().Len() )
754cdf0e10cSrcweir aTip += _pDataWin->GetRealRowCount();
755cdf0e10cSrcweir else
756cdf0e10cSrcweir aTip += String::CreateFromInt32(GetRangeMax());
757cdf0e10cSrcweir
758cdf0e10cSrcweir Rectangle aRect( GetPointerPosPixel(), Size( GetTextHeight(), GetTextWidth( aTip ) ) );
759cdf0e10cSrcweir if ( _nTip )
760cdf0e10cSrcweir Help::UpdateTip( _nTip, this, aRect, aTip );
761cdf0e10cSrcweir else
762cdf0e10cSrcweir _nTip = Help::ShowTip( this, aRect, aTip );
763cdf0e10cSrcweir _nLastPos = nPos;
764cdf0e10cSrcweir }
765cdf0e10cSrcweir
766cdf0e10cSrcweir ScrollBar::Tracking( rTEvt );
767cdf0e10cSrcweir }
768cdf0e10cSrcweir
769cdf0e10cSrcweir //-------------------------------------------------------------------
770cdf0e10cSrcweir
EndScroll()771cdf0e10cSrcweir void BrowserScrollBar::EndScroll()
772cdf0e10cSrcweir {
773cdf0e10cSrcweir if ( _nTip )
774cdf0e10cSrcweir Help::HideTip( _nTip );
775cdf0e10cSrcweir _nTip = 0;
776cdf0e10cSrcweir ScrollBar::EndScroll();
777cdf0e10cSrcweir }
778cdf0e10cSrcweir
779cdf0e10cSrcweir
780