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 37 SvIcnVwDataEntry::SvIcnVwDataEntry() 38 : nIcnVwFlags(0),eTextMode(ShowTextDontKnow) 39 { 40 } 41 42 SvIcnVwDataEntry::~SvIcnVwDataEntry() 43 { 44 } 45 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 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 72 SvIconView::~SvIconView() 73 { 74 delete pImp; 75 } 76 77 void SvIconView::SetDefaultFont() 78 { 79 SetFont( GetFont() ); 80 } 81 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 97 void SvIconView::DisconnectFromModel() 98 { 99 SvLBox::DisconnectFromModel(); 100 pImp->SetModel( GetModel(), 0 ); 101 } 102 103 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 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 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 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 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 166 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 175 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 184 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 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 217 sal_uInt16 SvIconView::IsA() 218 { 219 return SV_LISTBOX_ID_ICONVIEW; 220 } 221 222 void SvIconView::RequestingChilds( SvLBoxEntry* pParent ) 223 { 224 if ( !pParent->HasChilds() ) 225 InsertEntry( String::CreateFromAscii("<dummy>"), pParent, sal_False, LIST_APPEND ); 226 } 227 228 void __EXPORT SvIconView::Paint( const Rectangle& rRect ) 229 { 230 pImp->Paint( rRect ); 231 } 232 233 void __EXPORT SvIconView::MouseButtonDown( const MouseEvent& rMEvt ) 234 { 235 pImp->MouseButtonDown( rMEvt ); 236 } 237 238 void __EXPORT SvIconView::MouseButtonUp( const MouseEvent& rMEvt ) 239 { 240 pImp->MouseButtonUp( rMEvt ); 241 } 242 243 void __EXPORT SvIconView::MouseMove( const MouseEvent& rMEvt ) 244 { 245 pImp->MouseMove( rMEvt ); 246 } 247 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 261 void __EXPORT SvIconView::Resize() 262 { 263 pImp->Resize(); 264 SvLBox::Resize(); 265 } 266 267 void __EXPORT SvIconView::GetFocus() 268 { 269 pImp->GetFocus(); 270 SvLBox::GetFocus(); 271 } 272 273 void __EXPORT SvIconView::LoseFocus() 274 { 275 pImp->LoseFocus(); 276 SvLBox::LoseFocus(); 277 } 278 279 void SvIconView::SetUpdateMode( sal_Bool bUpdate ) 280 { 281 Control::SetUpdateMode( bUpdate ); 282 if ( bUpdate ) 283 pImp->UpdateAll(); 284 } 285 286 void SvIconView::SetModel( SvLBoxTreeList* ) 287 { 288 } 289 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 300 void __EXPORT SvIconView::ModelHasCleared() 301 { 302 SvLBox::ModelHasCleared(); 303 pImp->Clear(); 304 } 305 306 void __EXPORT SvIconView::ModelHasInserted( SvListEntry* pEntry ) 307 { 308 if( !(nIcnVwFlags & ICNVW_BLOCK_ENTRYINS ) ) 309 pImp->EntryInserted( (SvLBoxEntry*)pEntry ); 310 } 311 312 void __EXPORT SvIconView::ModelHasInsertedTree( SvListEntry* pEntry ) 313 { 314 pImp->TreeInserted( (SvLBoxEntry*)pEntry ); 315 } 316 317 void __EXPORT SvIconView::ModelIsMoving(SvListEntry* pSource, 318 SvListEntry* /* pTargetParent */ , sal_uLong /* nChildPos */ ) 319 { 320 pImp->MovingEntry( (SvLBoxEntry*)pSource ); 321 } 322 323 void __EXPORT SvIconView::ModelHasMoved(SvListEntry* pSource ) 324 { 325 pImp->EntryMoved( (SvLBoxEntry*)pSource ); 326 } 327 328 void __EXPORT SvIconView::ModelIsRemoving( SvListEntry* pEntry ) 329 { 330 pImp->RemovingEntry( (SvLBoxEntry*)pEntry ); 331 NotifyRemoving( (SvLBoxEntry*)pEntry ); 332 } 333 334 void __EXPORT SvIconView::ModelHasRemoved( SvListEntry* /* pEntry */ ) 335 { 336 pImp->EntryRemoved(); 337 } 338 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 347 void SvIconView::ShowTargetEmphasis( SvLBoxEntry* pEntry, sal_Bool bShow ) 348 { 349 pImp->ShowTargetEmphasis( pEntry, bShow ); 350 } 351 352 Point SvIconView::GetEntryPosition( SvLBoxEntry* pEntry ) const 353 { 354 return ((SvIconView*)this)->pImp->GetEntryPosition( pEntry ); 355 } 356 357 void SvIconView::SetEntryPosition( SvLBoxEntry* pEntry, const Point& rPos) 358 { 359 pImp->SetEntryPosition( pEntry, rPos, sal_False, sal_True ); 360 } 361 362 void SvIconView::SetEntryPosition( SvLBoxEntry* pEntry, const Point& rPos, sal_Bool bAdjustAtGrid ) 363 { 364 pImp->SetEntryPosition( pEntry, rPos, bAdjustAtGrid ); 365 } 366 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 376 void SvIconView::ViewDataInitialized( SvLBoxEntry* pEntry ) 377 { 378 pImp->ViewDataInitialized( pEntry ); 379 } 380 381 SvLBoxEntry* SvIconView::GetDropTarget( const Point& rPos ) 382 { 383 return pImp->GetDropTarget( rPos ); 384 } 385 386 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 393 SvLBoxEntry* SvIconView::GetEntryFromLogicPos( const Point& rDocPos ) const 394 { 395 return ((SvIconView*)this)->pImp->GetEntry( rDocPos ); 396 } 397 398 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 406 void SvIconView::PaintEntry( SvLBoxEntry* pEntry ) 407 { 408 pImp->PaintEntry( pEntry ); 409 } 410 411 412 void SvIconView::PaintEntry( SvLBoxEntry* pEntry, const Point& rPos ) 413 { 414 pImp->PaintEntry( pEntry, rPos ); 415 } 416 417 Rectangle SvIconView::GetFocusRect( SvLBoxEntry* pEntry ) 418 { 419 return pImp->CalcFocusRect( pEntry ); 420 } 421 422 void SvIconView::InvalidateEntry( SvLBoxEntry* pEntry ) 423 { 424 pImp->InvalidateEntry( pEntry ); 425 } 426 427 void SvIconView::SetDragDropMode( DragDropMode nDDMode ) 428 { 429 SvLBox::SetDragDropMode( nDDMode ); 430 pImp->SetDragDropMode( nDDMode ); 431 } 432 433 void SvIconView::SetSelectionMode( SelectionMode eSelectMode ) 434 { 435 SvLBox::SetSelectionMode( eSelectMode ); 436 pImp->SetSelectionMode( eSelectMode ); 437 } 438 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 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 463 void SvIconView::SetCurEntry( SvLBoxEntry* _pEntry ) 464 { 465 pImp->SetCursor( _pEntry ); 466 OnCurrentEntryChanged(); 467 } 468 469 SvLBoxEntry* SvIconView::GetCurEntry() const 470 { 471 return pImp->GetCurEntry(); 472 } 473 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 492 void SvIconView::SetSpaceBetweenEntries( long nX, long nY ) 493 { 494 pImp->SetSpaceBetweenEntries( nX, nY ); 495 } 496 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 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 510 void SvIconView::EnableInplaceEditing( sal_Bool bEnable ) 511 { 512 SvLBox::EnableInplaceEditing( bEnable ); 513 } 514 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 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 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 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 598 sal_Bool SvIconView::EditingEntry( SvLBoxEntry*, Selection& ) 599 { 600 return sal_True; 601 } 602 603 sal_Bool SvIconView::EditedEntry( SvLBoxEntry*, const XubString& ) 604 { 605 return sal_True; 606 } 607 608 609 void SvIconView::WriteDragServerInfo( const Point& rPos, SvLBoxDDInfo* pInfo) 610 { 611 pImp->WriteDragServerInfo( rPos, pInfo ); 612 } 613 614 void SvIconView::ReadDragServerInfo( const Point& rPos, SvLBoxDDInfo* pInfo ) 615 { 616 pImp->ReadDragServerInfo( rPos, pInfo ); 617 } 618 619 void SvIconView::Command( const CommandEvent& rCEvt ) 620 { 621 pImp->PrepareCommandEvent( rCEvt.GetMousePosPixel() ); 622 } 623 624 void SvIconView::SetCurParent( SvLBoxEntry* pNewParent ) 625 { 626 if ( pNewParent && pNewParent->HasChildsOnDemand() ) 627 RequestingChilds( pNewParent ); 628 pImp->SetCurParent( pNewParent ); 629 } 630 631 SvLBoxEntry* SvIconView::GetCurParent() const 632 { 633 return pImp->GetCurParent(); 634 } 635 636 SvViewData* SvIconView::CreateViewData( SvListEntry* ) 637 { 638 SvIcnVwDataEntry* pEntryData = new SvIcnVwDataEntry; 639 return (SvViewData*)pEntryData; 640 } 641 642 void SvIconView::InitViewData( SvViewData* pData, SvListEntry* pEntry ) 643 { 644 SvLBox::InitViewData( pData, pEntry ); 645 pImp->InvalidateBoundingRect( ((SvIcnVwDataEntry*)pData)->aRect ); 646 } 647 648 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 658 sal_uLong SvIconView::GetSelectionCount() const 659 { 660 return (sal_uLong)(pImp->GetSelectionCount()); 661 } 662 663 void SvIconView::SetGrid( long nDX, long nDY ) 664 { 665 pImp->SetGrid( nDX, nDY ); 666 } 667 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 691 void SvIconView::Scroll( long nDeltaX, long nDeltaY, sal_uInt16 ) 692 { 693 pImp->Scroll( nDeltaX, nDeltaY, sal_False ); 694 } 695 696 void SvIconView::PrepareCommandEvent( const CommandEvent& rCEvt ) 697 { 698 pImp->PrepareCommandEvent( rCEvt.GetMousePosPixel() ); 699 } 700 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 709 void SvIconView::DragFinished( sal_Int8 ) 710 { 711 pImp->EndDrag(); 712 } 713 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 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 735 void SvIconView::ShowDDIcon( SvLBoxEntry* pRefEntry, const Point& rPos ) 736 { 737 pImp->ShowDDIcon( pRefEntry, rPos ); 738 } 739 740 void SvIconView::HideDDIcon() 741 { 742 pImp->HideDDIcon(); 743 } 744 745 void SvIconView::HideShowDDIcon( SvLBoxEntry* pRefEntry, const Point& rPos ) 746 { 747 pImp->HideShowDDIcon( pRefEntry, rPos ); 748 } 749 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 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 762 void SvIconView::EndTracking() 763 { 764 pImp->EndTracking(); 765 } 766 767 void SvIconView::MakeVisible( SvLBoxEntry* pEntry ) 768 { 769 pImp->MakeVisible( pEntry ); 770 } 771 772 void SvIconView::PreparePaint( SvLBoxEntry* ) 773 { 774 } 775 776 void SvIconView::AdjustAtGrid( SvLBoxEntry* pEntry ) 777 { 778 pImp->AdjustAtGrid( pEntry ); 779 } 780 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 790 sal_Bool SvIconView::IsEntryPosLocked( const SvLBoxEntry* pEntry ) const 791 { 792 const SvIcnVwDataEntry* pViewData = (const SvIcnVwDataEntry*)GetViewData( (SvListEntry*)pEntry ); 793 return pViewData->IsEntryPosLocked(); 794 } 795 796 void SvIconView::SetTextMode( SvIconViewTextMode eMode, SvLBoxEntry* pEntry ) 797 { 798 pImp->SetTextMode( eMode, pEntry ); 799 } 800 801 SvIconViewTextMode SvIconView::GetTextMode( const SvLBoxEntry* pEntry ) const 802 { 803 return pImp->GetTextMode( pEntry ); 804 } 805 806 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 813 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 820 void SvIconView::ShowFocusRect( const SvLBoxEntry* pEntry ) 821 { 822 pImp->ShowFocusRect( pEntry ); 823 } 824 825 826