xref: /trunk/main/svtools/source/contnr/svicnvw.cxx (revision 5900e8ec)
1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 
23 
24 // MARKER(update_precomp.py): autogen include statement, do not remove
25 #include "precompiled_svtools.hxx"
26 
27 #include <svtools/svlbox.hxx>
28 #include <svtools/svicnvw.hxx>
29 #include <svimpicn.hxx>
30 #include <svtools/svlbitm.hxx>
31 
32 #ifndef GCC
33 #endif
34 
35 #define ICNVW_BLOCK_ENTRYINS	0x0001
36 
SvIcnVwDataEntry()37 SvIcnVwDataEntry::SvIcnVwDataEntry()
38 	: nIcnVwFlags(0),eTextMode(ShowTextDontKnow)
39 {
40 }
41 
~SvIcnVwDataEntry()42 SvIcnVwDataEntry::~SvIcnVwDataEntry()
43 {
44 }
45 
SvIconView(Window * pParent,WinBits nWinStyle)46 SvIconView::SvIconView( Window* pParent, WinBits nWinStyle ) :
47 	SvLBox( pParent, nWinStyle | WB_BORDER )
48 {
49 	nIcnVwFlags = 0;
50 	pImp = new SvImpIconView( this, GetModel(), nWinStyle | WB_ICON );
51 	pImp->mpViewData = 0;
52 	SetSelectionMode( SINGLE_SELECTION );
53 	SetLineColor();
54 	const StyleSettings& rStyleSettings = GetSettings().GetStyleSettings();
55 	SetBackground( Wallpaper( rStyleSettings.GetFieldColor() ) );
56 	SetDefaultFont();
57 }
58 
SvIconView(Window * pParent,const ResId & rResId)59 SvIconView::SvIconView( Window* pParent , const ResId& rResId ) :
60 	SvLBox( pParent, rResId )
61 {
62 	pImp = new SvImpIconView( this, GetModel(), WB_BORDER | WB_ICON );
63 	nIcnVwFlags = 0;
64 	pImp->mpViewData = 0;
65 	SetLineColor();
66 	const StyleSettings& rStyleSettings = GetSettings().GetStyleSettings();
67 	SetBackground( Wallpaper( rStyleSettings.GetFieldColor() ) );
68 	SetDefaultFont();
69 	pImp->SetSelectionMode( GetSelectionMode() );
70 }
71 
~SvIconView()72 SvIconView::~SvIconView()
73 {
74 	delete pImp;
75 }
76 
SetDefaultFont()77 void SvIconView::SetDefaultFont()
78 {
79 	SetFont( GetFont() );
80 }
81 
CreateEntry(const XubString & rStr,const Image & rCollEntryBmp,const Image & rExpEntryBmp)82 SvLBoxEntry* SvIconView::CreateEntry( const XubString& rStr,
83 	const Image& rCollEntryBmp, const Image& rExpEntryBmp )
84 {
85 	SvLBoxEntry* pEntry = new SvLBoxEntry;
86 
87 	SvLBoxContextBmp* pContextBmp =
88 	  new SvLBoxContextBmp( pEntry,0, rCollEntryBmp,rExpEntryBmp, 0xffff );
89 	pEntry->AddItem( pContextBmp );
90 
91 	SvLBoxString* pString = new SvLBoxString( pEntry, 0, rStr );
92 	pEntry->AddItem( pString );
93 
94 	return pEntry;
95 }
96 
DisconnectFromModel()97 void SvIconView::DisconnectFromModel()
98 {
99 	SvLBox::DisconnectFromModel();
100 	pImp->SetModel( GetModel(), 0 );
101 }
102 
103 
InsertEntry(const XubString & rText,SvLBoxEntry * pParent,sal_Bool bChildsOnDemand,sal_uLong nPos)104 SvLBoxEntry* SvIconView::InsertEntry( const XubString& rText,
105 	SvLBoxEntry* pParent, sal_Bool bChildsOnDemand, sal_uLong nPos )
106 {
107 	SvLBoxEntry* pEntry = CreateEntry(
108 		rText, aCollapsedEntryBmp, aExpandedEntryBmp );
109 	pEntry->EnableChildsOnDemand( bChildsOnDemand );
110 
111 	if ( !pParent )
112 		SvLBox::Insert( pEntry, nPos );
113 	else
114 		SvLBox::Insert( pEntry, pParent, nPos );
115 	return pEntry;
116 }
117 
InsertEntry(const XubString & rText,const Image & rExpEntryBmp,const Image & rCollEntryBmp,SvLBoxEntry * pParent,sal_Bool bChildsOnDemand,sal_uLong nPos)118 SvLBoxEntry* SvIconView::InsertEntry( const XubString& rText,
119 	const Image& rExpEntryBmp,
120 	const Image& rCollEntryBmp,
121 	SvLBoxEntry* pParent, sal_Bool bChildsOnDemand, sal_uLong nPos)
122 {
123 	SvLBoxEntry* pEntry = CreateEntry(
124 		rText, rCollEntryBmp, rExpEntryBmp );
125 
126 	pEntry->EnableChildsOnDemand( bChildsOnDemand );
127 	if ( !pParent )
128 		SvLBox::Insert( pEntry, nPos );
129 	else
130 		SvLBox::Insert( pEntry, pParent, nPos );
131 	return pEntry;
132 }
133 
134 
SetEntryText(SvLBoxEntry * pEntry,const XubString & rStr)135 void SvIconView::SetEntryText(SvLBoxEntry* pEntry, const XubString& rStr)
136 {
137 	SvLBoxString* pItem = (SvLBoxString*)(pEntry->GetFirstItem(SV_ITEM_ID_LBOXSTRING));
138 	if ( pItem )
139 	{
140 		pItem->SetText( pEntry, rStr );
141 		GetModel()->InvalidateEntry( pEntry );
142 	}
143 }
144 
SetExpandedEntryBmp(SvLBoxEntry * pEntry,const Image & rBmp)145 void SvIconView::SetExpandedEntryBmp(SvLBoxEntry* pEntry, const Image& rBmp)
146 {
147 	SvLBoxContextBmp* pItem = (SvLBoxContextBmp*)(pEntry->GetFirstItem(SV_ITEM_ID_LBOXCONTEXTBMP));
148 	if ( pItem )
149 	{
150 		pItem->SetBitmap2( rBmp );
151 		GetModel()->InvalidateEntry( pEntry );
152 	}
153 }
154 
SetCollapsedEntryBmp(SvLBoxEntry * pEntry,const Image & rBmp)155 void SvIconView::SetCollapsedEntryBmp(SvLBoxEntry* pEntry,
156 	const Image& rBmp )
157 {
158 	SvLBoxContextBmp* pItem = (SvLBoxContextBmp*)(pEntry->GetFirstItem(SV_ITEM_ID_LBOXCONTEXTBMP));
159 	if ( pItem )
160 	{
161 		pItem->SetBitmap1( rBmp );
162 		GetModel()->InvalidateEntry( pEntry );
163 	}
164 }
165 
GetEntryText(SvLBoxEntry * pEntry) const166 XubString SvIconView::GetEntryText(SvLBoxEntry* pEntry ) const
167 {
168 	XubString aStr;
169 	SvLBoxString* pItem = (SvLBoxString*)(pEntry->GetFirstItem(SV_ITEM_ID_LBOXSTRING));
170 	if ( pItem )
171 		aStr = pItem->GetText();
172 	return aStr;
173 }
174 
GetExpandedEntryBmp(SvLBoxEntry * pEntry) const175 Image SvIconView::GetExpandedEntryBmp(SvLBoxEntry* pEntry) const
176 {
177 	Image aBmp;
178 	SvLBoxContextBmp* pItem = (SvLBoxContextBmp*)(pEntry->GetFirstItem(SV_ITEM_ID_LBOXCONTEXTBMP));
179 	if ( pItem )
180 		aBmp = pItem->GetBitmap2();
181 	return aBmp;
182 }
183 
GetCollapsedEntryBmp(SvLBoxEntry * pEntry) const184 Image SvIconView::GetCollapsedEntryBmp(SvLBoxEntry* pEntry) const
185 {
186 	Image aBmp;
187 	SvLBoxContextBmp* pItem = (SvLBoxContextBmp*)(pEntry->GetFirstItem(SV_ITEM_ID_LBOXCONTEXTBMP));
188 	if ( pItem )
189 		aBmp = pItem->GetBitmap1();
190 	return aBmp;
191 }
192 
193 
CloneEntry(SvLBoxEntry * pSource)194 SvLBoxEntry* SvIconView::CloneEntry( SvLBoxEntry* pSource )
195 {
196 	XubString aStr;
197 	Image aCollEntryBmp;
198 	Image aExpEntryBmp;
199 
200 	SvLBoxString* pStringItem = (SvLBoxString*)(pSource->GetFirstItem(SV_ITEM_ID_LBOXSTRING));
201 	if ( pStringItem )
202 		aStr = pStringItem->GetText();
203 	SvLBoxContextBmp* pBmpItem =(SvLBoxContextBmp*)(pSource->GetFirstItem(SV_ITEM_ID_LBOXCONTEXTBMP));
204 	if ( pBmpItem )
205 	{
206 		aCollEntryBmp = pBmpItem->GetBitmap1();
207 		aExpEntryBmp  = pBmpItem->GetBitmap2();
208 	}
209 	SvLBoxEntry* pEntry = CreateEntry( aStr, aCollEntryBmp, aExpEntryBmp );
210 	pEntry->SvListEntry::Clone( pSource );
211 	pEntry->EnableChildsOnDemand( pSource->HasChildsOnDemand() );
212 	pEntry->SetUserData( pSource->GetUserData() );
213 	return pEntry;
214 }
215 
216 
IsA()217 sal_uInt16 SvIconView::IsA()
218 {
219 	return SV_LISTBOX_ID_ICONVIEW;
220 }
221 
RequestingChilds(SvLBoxEntry * pParent)222 void SvIconView::RequestingChilds( SvLBoxEntry* pParent )
223 {
224 	if ( !pParent->HasChilds() )
225 		InsertEntry( String::CreateFromAscii("<dummy>"), pParent, sal_False, LIST_APPEND );
226 }
227 
Paint(const Rectangle & rRect)228 void __EXPORT SvIconView::Paint( const Rectangle& rRect )
229 {
230 	pImp->Paint( rRect );
231 }
232 
MouseButtonDown(const MouseEvent & rMEvt)233 void __EXPORT SvIconView::MouseButtonDown( const MouseEvent& rMEvt )
234 {
235 	pImp->MouseButtonDown( rMEvt );
236 }
237 
MouseButtonUp(const MouseEvent & rMEvt)238 void __EXPORT SvIconView::MouseButtonUp( const MouseEvent& rMEvt )
239 {
240 	pImp->MouseButtonUp( rMEvt );
241 }
242 
MouseMove(const MouseEvent & rMEvt)243 void __EXPORT SvIconView::MouseMove( const MouseEvent& rMEvt )
244 {
245 	pImp->MouseMove( rMEvt );
246 }
247 
KeyInput(const KeyEvent & rKEvt)248 void __EXPORT SvIconView::KeyInput( const KeyEvent& rKEvt )
249 {
250 	// unter OS/2 bekommen wir auch beim Editieren Key-Up/Down
251 	if( IsEditingActive() )
252 		return;
253 
254 	nImpFlags |= SVLBOX_IS_TRAVELSELECT;
255 	sal_Bool bKeyUsed = pImp->KeyInput( rKEvt );
256 	if ( !bKeyUsed )
257 		SvLBox::KeyInput( rKEvt );
258 	nImpFlags &= ~SVLBOX_IS_TRAVELSELECT;
259 }
260 
Resize()261 void __EXPORT SvIconView::Resize()
262 {
263 	pImp->Resize();
264 	SvLBox::Resize();
265 }
266 
GetFocus()267 void __EXPORT SvIconView::GetFocus()
268 {
269 	pImp->GetFocus();
270 	SvLBox::GetFocus();
271 }
272 
LoseFocus()273 void __EXPORT SvIconView::LoseFocus()
274 {
275 	pImp->LoseFocus();
276 	SvLBox::LoseFocus();
277 }
278 
SetUpdateMode(sal_Bool bUpdate)279 void SvIconView::SetUpdateMode( sal_Bool bUpdate )
280 {
281 	Control::SetUpdateMode( bUpdate );
282 	if ( bUpdate )
283 		pImp->UpdateAll();
284 }
285 
SetModel(SvLBoxTreeList *)286 void SvIconView::SetModel( SvLBoxTreeList* )
287 {
288 }
289 
SetModel(SvLBoxTreeList * pNewModel,SvLBoxEntry * pParent)290 void SvIconView::SetModel( SvLBoxTreeList* pNewModel, SvLBoxEntry* pParent )
291 {
292 	nIcnVwFlags |= ICNVW_BLOCK_ENTRYINS;
293 	SvLBox::SetModel( pNewModel );
294 	nIcnVwFlags &= (~ICNVW_BLOCK_ENTRYINS);
295 	if ( pParent && pParent->HasChildsOnDemand() )
296 		RequestingChilds( pParent );
297 	pImp->SetModel( pNewModel, pParent );
298 }
299 
ModelHasCleared()300 void __EXPORT SvIconView::ModelHasCleared()
301 {
302 	SvLBox::ModelHasCleared();
303 	pImp->Clear();
304 }
305 
ModelHasInserted(SvListEntry * pEntry)306 void __EXPORT SvIconView::ModelHasInserted( SvListEntry* pEntry )
307 {
308 	if( !(nIcnVwFlags & ICNVW_BLOCK_ENTRYINS ) )
309 		pImp->EntryInserted( (SvLBoxEntry*)pEntry );
310 }
311 
ModelHasInsertedTree(SvListEntry * pEntry)312 void __EXPORT SvIconView::ModelHasInsertedTree( SvListEntry* pEntry )
313 {
314 	pImp->TreeInserted( (SvLBoxEntry*)pEntry );
315 }
316 
ModelIsMoving(SvListEntry * pSource,SvListEntry *,sal_uLong)317 void __EXPORT SvIconView::ModelIsMoving(SvListEntry* pSource,
318 		SvListEntry* /* pTargetParent */ , sal_uLong /* nChildPos */ )
319 {
320 	pImp->MovingEntry( (SvLBoxEntry*)pSource );
321 }
322 
ModelHasMoved(SvListEntry * pSource)323 void __EXPORT SvIconView::ModelHasMoved(SvListEntry* pSource )
324 {
325 	pImp->EntryMoved( (SvLBoxEntry*)pSource );
326 }
327 
ModelIsRemoving(SvListEntry * pEntry)328 void __EXPORT SvIconView::ModelIsRemoving( SvListEntry* pEntry )
329 {
330 	pImp->RemovingEntry( (SvLBoxEntry*)pEntry );
331 	NotifyRemoving( (SvLBoxEntry*)pEntry );
332 }
333 
ModelHasRemoved(SvListEntry *)334 void __EXPORT SvIconView::ModelHasRemoved( SvListEntry* /* pEntry */ )
335 {
336 	pImp->EntryRemoved();
337 }
338 
ModelHasEntryInvalidated(SvListEntry * pEntry)339 void __EXPORT SvIconView::ModelHasEntryInvalidated( SvListEntry* pEntry )
340 {
341 	// die einzelnen Items des Entries reinitialisieren
342 	SvLBox::ModelHasEntryInvalidated( pEntry );
343 	// painten
344 	pImp->ModelHasEntryInvalidated( pEntry );
345 }
346 
ShowTargetEmphasis(SvLBoxEntry * pEntry,sal_Bool bShow)347 void SvIconView::ShowTargetEmphasis( SvLBoxEntry* pEntry, sal_Bool bShow )
348 {
349 	pImp->ShowTargetEmphasis( pEntry, bShow );
350 }
351 
GetEntryPosition(SvLBoxEntry * pEntry) const352 Point SvIconView::GetEntryPosition( SvLBoxEntry* pEntry ) const
353 {
354 	return ((SvIconView*)this)->pImp->GetEntryPosition( pEntry );
355 }
356 
SetEntryPosition(SvLBoxEntry * pEntry,const Point & rPos)357 void SvIconView::SetEntryPosition( SvLBoxEntry* pEntry, const Point& rPos)
358 {
359 	pImp->SetEntryPosition( pEntry, rPos, sal_False, sal_True );
360 }
361 
SetEntryPosition(SvLBoxEntry * pEntry,const Point & rPos,sal_Bool bAdjustAtGrid)362 void SvIconView::SetEntryPosition( SvLBoxEntry* pEntry, const Point& rPos, sal_Bool bAdjustAtGrid )
363 {
364 	pImp->SetEntryPosition( pEntry, rPos, bAdjustAtGrid );
365 }
366 
SetFont(const Font & rFont)367 void SvIconView::SetFont( const Font& rFont )
368 {
369 	Font aTempFont( rFont );
370 	aTempFont.SetTransparent( sal_True );
371 	SvLBox::SetFont( aTempFont );
372 	RecalcViewData();
373 	pImp->ChangedFont();
374 }
375 
ViewDataInitialized(SvLBoxEntry * pEntry)376 void SvIconView::ViewDataInitialized( SvLBoxEntry* pEntry )
377 {
378 	pImp->ViewDataInitialized( pEntry );
379 }
380 
GetDropTarget(const Point & rPos)381 SvLBoxEntry* SvIconView::GetDropTarget( const Point& rPos )
382 {
383 	return pImp->GetDropTarget( rPos );
384 }
385 
GetEntry(const Point & rPixPos,sal_Bool) const386 SvLBoxEntry* SvIconView::GetEntry( const Point& rPixPos, sal_Bool ) const
387 {
388 	Point aPos( rPixPos );
389 	aPos -= GetMapMode().GetOrigin();
390 	return ((SvIconView*)this)->pImp->GetEntry( aPos );
391 }
392 
GetEntryFromLogicPos(const Point & rDocPos) const393 SvLBoxEntry* SvIconView::GetEntryFromLogicPos( const Point& rDocPos ) const
394 {
395 	return ((SvIconView*)this)->pImp->GetEntry( rDocPos );
396 }
397 
398 
StateChanged(StateChangedType i_nStateChange)399 void SvIconView::StateChanged( StateChangedType i_nStateChange )
400 {
401     SvLBox::StateChanged( i_nStateChange );
402     if ( i_nStateChange == STATE_CHANGE_STYLE )
403 	    pImp->SetStyle( GetStyle() );
404 }
405 
PaintEntry(SvLBoxEntry * pEntry)406 void SvIconView::PaintEntry( SvLBoxEntry* pEntry )
407 {
408 	pImp->PaintEntry( pEntry );
409 }
410 
411 
PaintEntry(SvLBoxEntry * pEntry,const Point & rPos)412 void SvIconView::PaintEntry( SvLBoxEntry* pEntry, const Point& rPos )
413 {
414 	pImp->PaintEntry( pEntry, rPos );
415 }
416 
GetFocusRect(SvLBoxEntry * pEntry)417 Rectangle SvIconView::GetFocusRect( SvLBoxEntry* pEntry )
418 {
419 	return pImp->CalcFocusRect( pEntry );
420 }
421 
InvalidateEntry(SvLBoxEntry * pEntry)422 void SvIconView::InvalidateEntry( SvLBoxEntry* pEntry )
423 {
424 	pImp->InvalidateEntry( pEntry );
425 }
426 
SetDragDropMode(DragDropMode nDDMode)427 void SvIconView::SetDragDropMode( DragDropMode nDDMode )
428 {
429 	SvLBox::SetDragDropMode( nDDMode );
430 	pImp->SetDragDropMode( nDDMode );
431 }
432 
SetSelectionMode(SelectionMode eSelectMode)433 void SvIconView::SetSelectionMode( SelectionMode eSelectMode )
434 {
435 	SvLBox::SetSelectionMode( eSelectMode );
436 	pImp->SetSelectionMode( eSelectMode );
437 }
438 
Select(SvLBoxEntry * pEntry,sal_Bool bSelect)439 sal_Bool SvIconView::Select( SvLBoxEntry* pEntry, sal_Bool bSelect )
440 {
441 	EndEditing();
442 	sal_Bool bRetVal = SvListView::Select( pEntry, bSelect );
443 	if( bRetVal )
444 	{
445 		pImp->EntrySelected( pEntry, bSelect );
446 		pHdlEntry = pEntry;
447 		SelectHdl();
448 	}
449 	return bRetVal;
450 }
451 
SelectAll(sal_Bool bSelect,sal_Bool)452 void SvIconView::SelectAll( sal_Bool bSelect, sal_Bool )
453 {
454 	SvLBoxEntry* pEntry = pImp->GetCurParent();
455 	pEntry = FirstChild( pEntry );
456 	while( pEntry )
457 	{
458 		Select( pEntry, bSelect );
459 		pEntry = NextSibling( pEntry );
460 	}
461 }
462 
SetCurEntry(SvLBoxEntry * _pEntry)463 void SvIconView::SetCurEntry( SvLBoxEntry* _pEntry )
464 {
465     pImp->SetCursor( _pEntry );
466     OnCurrentEntryChanged();
467 }
468 
GetCurEntry() const469 SvLBoxEntry* SvIconView::GetCurEntry() const
470 {
471 	return pImp->GetCurEntry();
472 }
473 
Arrange()474 void SvIconView::Arrange()
475 {
476 #ifdef DBG_UTIL
477 	sal_uInt16 n=1;
478 	if( n == 1 && n-1 == 0 )
479 	{
480 		pImp->Arrange();
481 	}
482 	else
483 	{
484 		pImp->AdjustAtGrid();
485 	}
486 #else
487 	pImp->Arrange();
488 #endif
489 }
490 
491 
SetSpaceBetweenEntries(long nX,long nY)492 void SvIconView::SetSpaceBetweenEntries( long nX, long nY )
493 {
494 	pImp->SetSpaceBetweenEntries( nX, nY );
495 }
496 
NotifyMoving(SvLBoxEntry * pTarget,SvLBoxEntry * pEntry,SvLBoxEntry * & rpNewParent,sal_uLong & rNewChildPos)497 sal_Bool SvIconView::NotifyMoving( SvLBoxEntry* pTarget, SvLBoxEntry* pEntry,
498 	SvLBoxEntry*& rpNewParent, sal_uLong& rNewChildPos )
499 {
500 	return pImp->NotifyMoving(pTarget,pEntry,rpNewParent,rNewChildPos);
501 }
502 
NotifyCopying(SvLBoxEntry * pTarget,SvLBoxEntry * pEntry,SvLBoxEntry * & rpNewParent,sal_uLong & rNewChildPos)503 sal_Bool SvIconView::NotifyCopying( SvLBoxEntry* pTarget, SvLBoxEntry* pEntry,
504 	SvLBoxEntry*& rpNewParent, sal_uLong& rNewChildPos )
505 {
506 	return pImp->NotifyCopying(pTarget,pEntry,rpNewParent,rNewChildPos);
507 }
508 
509 
EnableInplaceEditing(sal_Bool bEnable)510 void SvIconView::EnableInplaceEditing( sal_Bool bEnable )
511 {
512 	SvLBox::EnableInplaceEditing( bEnable );
513 }
514 
EditingRequest(SvLBoxEntry * pEntry,SvLBoxItem * pItem,const Point &)515 void SvIconView::EditingRequest( SvLBoxEntry* pEntry, SvLBoxItem* pItem,
516 								 const Point& )
517 {
518 	if ( pItem->IsA() == SV_ITEM_ID_LBOXSTRING )
519 	{
520 		Selection aSel( SELECTION_MIN, SELECTION_MAX );
521 		if ( EditingEntry( pEntry, aSel ) )
522 		{
523 			SelectAll( sal_False );
524 			EditItemText( pEntry, (SvLBoxString*)pItem, aSel );
525 		}
526 	}
527 }
528 
529 
EditItemText(SvLBoxEntry * pEntry,SvLBoxItem * pItem,const Selection & rSel)530 void SvIconView::EditItemText( SvLBoxEntry* pEntry, SvLBoxItem* pItem,
531 	const Selection& rSel )
532 {
533 	DBG_ASSERT(pEntry&&pItem,"EditItemText:Params?");
534 	pCurEdEntry = pEntry;
535 	pCurEdItem = pItem;
536 	Rectangle aRect( pImp->CalcTextRect( pEntry, (SvLBoxString*)pItem,0,sal_True ));
537 
538 	aRect.Bottom() += 4;
539 	pImp->MakeVisible( aRect ); // vor der Umrechnung in Pixel-Koord. rufen!
540 	aRect.Bottom() -= 4;
541 
542 	Point aPos( aRect.TopLeft() );
543 	aPos += GetMapMode().GetOrigin(); // Dok-Koord. -> Window-Koord.
544 	aRect.SetPos( aPos );
545 
546 	aRect.Bottom() += 2; // sieht huebscher aus
547 
548 #ifdef OS2
549 
550 #if OS2_SINGLE_LINE_EDIT
551 	aRect.Left() -= 3;
552 	aRect.Right() += 3;
553 	aRect.Top() -= 3;
554 	aRect.Bottom() += 3;
555 #else
556 	aRect.Left() -= 10;
557 	aRect.Right() += 10;
558 	aRect.Top() -= 5;
559 	aRect.Bottom() += 5;
560 #endif
561 
562 #endif // OS2
563 	EditText( ((SvLBoxString*)pItem)->GetText(), aRect, rSel, sal_True );
564 }
565 
EditEntry(SvLBoxEntry * pEntry)566 void SvIconView::EditEntry( SvLBoxEntry* pEntry )
567 {
568 	if( !pEntry )
569 		pEntry = pImp->GetCurEntry();
570 	if( pEntry )
571 	{
572 		SvLBoxString* pItem = (SvLBoxString*)(pEntry->GetFirstItem(SV_ITEM_ID_LBOXSTRING));
573 		if( pItem )
574 		{
575 			Selection aSel( SELECTION_MIN, SELECTION_MAX );
576 			if( EditingEntry( pEntry, aSel ) )
577 			{
578 				SelectAll( sal_False );
579 				EditItemText( pEntry, pItem, aSel );
580 			}
581 		}
582 	}
583 }
584 
EditedText(const XubString & rStr)585 void SvIconView::EditedText( const XubString& rStr )
586 {
587 	XubString aRefStr( ((SvLBoxString*)pCurEdItem)->GetText() );
588 	if ( EditedEntry( pCurEdEntry, rStr ) )
589 	{
590 		((SvLBoxString*)pCurEdItem)->SetText( pCurEdEntry, rStr );
591 		pModel->InvalidateEntry( pCurEdEntry );
592 	}
593 	if( GetSelectionMode()==SINGLE_SELECTION && !GetSelectionCount())
594 		Select( pCurEdEntry );
595 }
596 
597 
EditingEntry(SvLBoxEntry *,Selection &)598 sal_Bool SvIconView::EditingEntry( SvLBoxEntry*, Selection& )
599 {
600 	return sal_True;
601 }
602 
EditedEntry(SvLBoxEntry *,const XubString &)603 sal_Bool SvIconView::EditedEntry( SvLBoxEntry*, const XubString& )
604 {
605 	return sal_True;
606 }
607 
608 
WriteDragServerInfo(const Point & rPos,SvLBoxDDInfo * pInfo)609 void SvIconView::WriteDragServerInfo( const Point& rPos, SvLBoxDDInfo* pInfo)
610 {
611 	pImp->WriteDragServerInfo( rPos, pInfo );
612 }
613 
ReadDragServerInfo(const Point & rPos,SvLBoxDDInfo * pInfo)614 void SvIconView::ReadDragServerInfo( const Point& rPos, SvLBoxDDInfo* pInfo )
615 {
616 	pImp->ReadDragServerInfo( rPos, pInfo );
617 }
618 
Command(const CommandEvent & rCEvt)619 void SvIconView::Command( const CommandEvent& rCEvt )
620 {
621 	pImp->PrepareCommandEvent( rCEvt.GetMousePosPixel() );
622 }
623 
SetCurParent(SvLBoxEntry * pNewParent)624 void SvIconView::SetCurParent( SvLBoxEntry* pNewParent )
625 {
626 	if ( pNewParent && pNewParent->HasChildsOnDemand() )
627 		RequestingChilds( pNewParent );
628 	pImp->SetCurParent( pNewParent );
629 }
630 
GetCurParent() const631 SvLBoxEntry* SvIconView::GetCurParent() const
632 {
633 	return pImp->GetCurParent();
634 }
635 
CreateViewData(SvListEntry *)636 SvViewData* SvIconView::CreateViewData( SvListEntry* )
637 {
638 	SvIcnVwDataEntry* pEntryData = new SvIcnVwDataEntry;
639 	return (SvViewData*)pEntryData;
640 }
641 
InitViewData(SvViewData * pData,SvListEntry * pEntry)642 void SvIconView::InitViewData( SvViewData* pData, SvListEntry* pEntry )
643 {
644 	SvLBox::InitViewData( pData, pEntry );
645 	pImp->InvalidateBoundingRect( ((SvIcnVwDataEntry*)pData)->aRect );
646 }
647 
GetDragRegion() const648 Region SvIconView::GetDragRegion() const
649 {
650 	Rectangle aRect;
651 	SvLBoxEntry* pEntry = GetCurEntry();
652 	if( pEntry )
653 		aRect = pImp->GetBoundingRect( pEntry );
654 	Region aRegion( aRect );
655 	return aRegion;
656 }
657 
GetSelectionCount() const658 sal_uLong SvIconView::GetSelectionCount() const
659 {
660 	return (sal_uLong)(pImp->GetSelectionCount());
661 }
662 
SetGrid(long nDX,long nDY)663 void SvIconView::SetGrid( long nDX, long nDY )
664 {
665 	pImp->SetGrid( nDX, nDY );
666 }
667 
ModelNotification(sal_uInt16 nActionId,SvListEntry * pEntry1,SvListEntry * pEntry2,sal_uLong nPos)668 void SvIconView::ModelNotification( sal_uInt16 nActionId, SvListEntry* pEntry1,
669 	SvListEntry* pEntry2, sal_uLong nPos )
670 {
671 	SvLBox::ModelNotification( nActionId, pEntry1, pEntry2, nPos );
672 	switch( nActionId )
673 	{
674 		case LISTACTION_RESORTING:
675 			SetUpdateMode( sal_False );
676 			break;
677 
678 		case LISTACTION_RESORTED:
679 			SetUpdateMode( sal_True );
680 			Arrange();
681 			break;
682 
683 		case LISTACTION_CLEARED:
684 			if( IsUpdateMode() )
685 				Update();
686 			break;
687 	}
688 }
689 
690 
Scroll(long nDeltaX,long nDeltaY,sal_uInt16)691 void SvIconView::Scroll( long nDeltaX, long nDeltaY, sal_uInt16 )
692 {
693 	pImp->Scroll( nDeltaX, nDeltaY, sal_False );
694 }
695 
PrepareCommandEvent(const CommandEvent & rCEvt)696 void SvIconView::PrepareCommandEvent( const CommandEvent& rCEvt )
697 {
698 	pImp->PrepareCommandEvent( rCEvt.GetMousePosPixel() );
699 }
700 
StartDrag(sal_Int8 nAction,const Point & rPos)701 void SvIconView::StartDrag( sal_Int8 nAction, const Point& rPos )
702 {
703 	pImp->SttDrag( rPos );
704 	SvLBoxEntry* pEntry = GetEntry( rPos, sal_True );
705 	pImp->mpViewData = pEntry;
706 	SvLBox::StartDrag( nAction, rPos );
707 }
708 
DragFinished(sal_Int8)709 void SvIconView::DragFinished( sal_Int8 )
710 {
711 	pImp->EndDrag();
712 }
713 
AcceptDrop(const AcceptDropEvent & rEvt)714 sal_Int8 SvIconView::AcceptDrop( const AcceptDropEvent& rEvt )
715 {
716 	if( pImp->mpViewData )
717 		pImp->HideDDIcon();
718 	sal_Int8 nRet = SvLBox::AcceptDrop( rEvt );
719 	if( DND_ACTION_NONE != nRet )
720 		pImp->ShowDDIcon( pImp->mpViewData, rEvt.maPosPixel );
721 
722 	return nRet;
723 }
724 
ExecuteDrop(const ExecuteDropEvent & rEvt)725 sal_Int8 SvIconView::ExecuteDrop( const ExecuteDropEvent& rEvt )
726 {
727 	if( pImp->mpViewData )
728 	{
729 		pImp->HideDDIcon();
730 		pImp->mpViewData = 0;
731 	}
732 	return SvLBox::ExecuteDrop( rEvt );
733 }
734 
ShowDDIcon(SvLBoxEntry * pRefEntry,const Point & rPos)735 void SvIconView::ShowDDIcon( SvLBoxEntry* pRefEntry, const Point& rPos )
736 {
737 	pImp->ShowDDIcon( pRefEntry, rPos );
738 }
739 
HideDDIcon()740 void SvIconView::HideDDIcon()
741 {
742 	pImp->HideDDIcon();
743 }
744 
HideShowDDIcon(SvLBoxEntry * pRefEntry,const Point & rPos)745 void SvIconView::HideShowDDIcon( SvLBoxEntry* pRefEntry, const Point& rPos )
746 {
747 	pImp->HideShowDDIcon( pRefEntry, rPos );
748 }
749 
SelectRect(const Rectangle & rRect,sal_Bool bAdd,SvPtrarr * pRects,short nOffs)750 void SvIconView::SelectRect( const Rectangle& rRect, sal_Bool bAdd,
751 	SvPtrarr* pRects, short nOffs )
752 {
753 	pImp->SelectRect( rRect, bAdd, pRects, nOffs );
754 }
755 
CalcScrollOffsets(const Point & rRefPosPixel,long & rX,long & rY,sal_Bool b,sal_uInt16 nBorderWidth)756 void SvIconView::CalcScrollOffsets( const Point& rRefPosPixel, long& rX, long& rY,
757 	sal_Bool b, sal_uInt16 nBorderWidth )
758 {
759 	pImp->CalcScrollOffsets( rRefPosPixel, rX, rY, b, nBorderWidth );
760 }
761 
EndTracking()762 void SvIconView::EndTracking()
763 {
764 	pImp->EndTracking();
765 }
766 
MakeVisible(SvLBoxEntry * pEntry)767 void SvIconView::MakeVisible( SvLBoxEntry* pEntry )
768 {
769 	pImp->MakeVisible( pEntry );
770 }
771 
PreparePaint(SvLBoxEntry *)772 void SvIconView::PreparePaint( SvLBoxEntry* )
773 {
774 }
775 
AdjustAtGrid(SvLBoxEntry * pEntry)776 void SvIconView::AdjustAtGrid( SvLBoxEntry* pEntry )
777 {
778 	pImp->AdjustAtGrid( pEntry );
779 }
780 
LockEntryPos(SvLBoxEntry * pEntry,sal_Bool bLock)781 void SvIconView::LockEntryPos( SvLBoxEntry* pEntry, sal_Bool bLock )
782 {
783 	SvIcnVwDataEntry* pViewData = (SvIcnVwDataEntry*)GetViewData( pEntry );
784 	if( bLock )
785 		pViewData->SetVwFlags( ICNVW_FLAG_POS_LOCKED );
786 	else
787 		pViewData->ClearVwFlags( ICNVW_FLAG_POS_LOCKED );
788 }
789 
IsEntryPosLocked(const SvLBoxEntry * pEntry) const790 sal_Bool SvIconView::IsEntryPosLocked( const SvLBoxEntry* pEntry ) const
791 {
792 	const SvIcnVwDataEntry* pViewData = (const SvIcnVwDataEntry*)GetViewData( (SvListEntry*)pEntry );
793 	return pViewData->IsEntryPosLocked();
794 }
795 
SetTextMode(SvIconViewTextMode eMode,SvLBoxEntry * pEntry)796 void SvIconView::SetTextMode( SvIconViewTextMode eMode, SvLBoxEntry* pEntry )
797 {
798 	pImp->SetTextMode( eMode, pEntry );
799 }
800 
GetTextMode(const SvLBoxEntry * pEntry) const801 SvIconViewTextMode SvIconView::GetTextMode( const SvLBoxEntry* pEntry ) const
802 {
803 	return pImp->GetTextMode( pEntry );
804 }
805 
GetNextEntry(const Point & rPixPos,SvLBoxEntry * pCurEntry,sal_Bool) const806 SvLBoxEntry* SvIconView::GetNextEntry( const Point& rPixPos, SvLBoxEntry* pCurEntry, sal_Bool  ) const
807 {
808 	Point aPos( rPixPos );
809 	aPos -= GetMapMode().GetOrigin();
810 	return ((SvIconView*)this)->pImp->GetNextEntry( aPos, pCurEntry );
811 }
812 
GetPrevEntry(const Point & rPixPos,SvLBoxEntry * pCurEntry,sal_Bool) const813 SvLBoxEntry* SvIconView::GetPrevEntry( const Point& rPixPos, SvLBoxEntry* pCurEntry, sal_Bool  ) const
814 {
815 	Point aPos( rPixPos );
816 	aPos -= GetMapMode().GetOrigin();
817 	return ((SvIconView*)this)->pImp->GetPrevEntry( aPos, pCurEntry );
818 }
819 
ShowFocusRect(const SvLBoxEntry * pEntry)820 void SvIconView::ShowFocusRect( const SvLBoxEntry* pEntry )
821 {
822 	pImp->ShowFocusRect( pEntry );
823 }
824 
825 
826