xref: /AOO41X/main/svtools/source/contnr/svicnvw.cxx (revision 5900e8ec128faec89519683efce668ccd8cc6084)
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