/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/*************************************************************************
 *
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
 * 
 * Copyright 2000, 2010 Oracle and/or its affiliates.
 *
 * OpenOffice.org - a multi-platform office productivity suite
 *
 * This file is part of OpenOffice.org.
 *
 * OpenOffice.org is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Lesser General Public License version 3
 * only, as published by the Free Software Foundation.
 *
 * OpenOffice.org is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU Lesser General Public License version 3 for more details
 * (a copy is included in the LICENSE file that accompanied this code).
 *
 * You should have received a copy of the GNU Lesser General Public License
 * version 3 along with OpenOffice.org.  If not, see
 * <http://www.openoffice.org/license.html>
 * for a copy of the LGPLv3 License.
 *
 ************************************************************************/

// MARKER(update_precomp.py): autogen include statement, do not remove
#include "precompiled_svtools.hxx"

#include <svtools/svlbox.hxx>
#include <svtools/svicnvw.hxx>
#include <svimpicn.hxx>
#include <svtools/svlbitm.hxx>

#define ICNVW_BLOCK_ENTRYINS	0x0001

SvIcnVwDataEntry::SvIcnVwDataEntry()
    : nIcnVwFlags(0),eTextMode(ShowTextDontKnow)
{
}

SvIcnVwDataEntry::~SvIcnVwDataEntry()
{
}

SvIconView::SvIconView( Window* pParent, WinBits nWinStyle ) :
    SvLBox( pParent, nWinStyle | WB_BORDER )
{
    nIcnVwFlags = 0;
    pImp = new SvImpIconView( this, GetModel(), nWinStyle | WB_ICON );
    pImp->mpViewData = 0;
    SetSelectionMode( SINGLE_SELECTION );
    SetLineColor();
    const StyleSettings& rStyleSettings = GetSettings().GetStyleSettings();
    SetBackground( Wallpaper( rStyleSettings.GetFieldColor() ) );
    SetDefaultFont();
}

SvIconView::SvIconView( Window* pParent , const ResId& rResId ) :
    SvLBox( pParent, rResId )
{
    pImp = new SvImpIconView( this, GetModel(), WB_BORDER | WB_ICON );
    nIcnVwFlags = 0;
    pImp->mpViewData = 0;
    SetLineColor();
    const StyleSettings& rStyleSettings = GetSettings().GetStyleSettings();
    SetBackground( Wallpaper( rStyleSettings.GetFieldColor() ) );
    SetDefaultFont();
    pImp->SetSelectionMode( GetSelectionMode() );
}

SvIconView::~SvIconView()
{
    delete pImp;
}

void SvIconView::SetDefaultFont()
{
    SetFont( GetFont() );
}

SvLBoxEntry* SvIconView::CreateEntry( const XubString& rStr,
    const Image& rCollEntryBmp, const Image& rExpEntryBmp )
{
    SvLBoxEntry* pEntry = new SvLBoxEntry;

    SvLBoxContextBmp* pContextBmp =
      new SvLBoxContextBmp( pEntry,0, rCollEntryBmp,rExpEntryBmp, 0xffff );
    pEntry->AddItem( pContextBmp );

    SvLBoxString* pString = new SvLBoxString( pEntry, 0, rStr );
    pEntry->AddItem( pString );

    return pEntry;
}

void SvIconView::DisconnectFromModel()
{
    SvLBox::DisconnectFromModel();
    pImp->SetModel( GetModel(), 0 );
}


SvLBoxEntry* SvIconView::InsertEntry( const XubString& rText,
    SvLBoxEntry* pParent, sal_Bool bChildsOnDemand, sal_uLong nPos )
{
    SvLBoxEntry* pEntry = CreateEntry(
        rText, aCollapsedEntryBmp, aExpandedEntryBmp );
    pEntry->EnableChildsOnDemand( bChildsOnDemand );

    if ( !pParent )
        SvLBox::Insert( pEntry, nPos );
    else
        SvLBox::Insert( pEntry, pParent, nPos );
    return pEntry;
}

SvLBoxEntry* SvIconView::InsertEntry( const XubString& rText,
    const Image& rExpEntryBmp,
    const Image& rCollEntryBmp,
    SvLBoxEntry* pParent, sal_Bool bChildsOnDemand, sal_uLong nPos)
{
    SvLBoxEntry* pEntry = CreateEntry(
        rText, rCollEntryBmp, rExpEntryBmp );

    pEntry->EnableChildsOnDemand( bChildsOnDemand );
    if ( !pParent )
        SvLBox::Insert( pEntry, nPos );
    else
        SvLBox::Insert( pEntry, pParent, nPos );
    return pEntry;
}


void SvIconView::SetEntryText(SvLBoxEntry* pEntry, const XubString& rStr)
{
    SvLBoxString* pItem = (SvLBoxString*)(pEntry->GetFirstItem(SV_ITEM_ID_LBOXSTRING));
    if ( pItem )
    {
        pItem->SetText( pEntry, rStr );
        GetModel()->InvalidateEntry( pEntry );
    }
}

void SvIconView::SetExpandedEntryBmp(SvLBoxEntry* pEntry, const Image& rBmp)
{
    SvLBoxContextBmp* pItem = (SvLBoxContextBmp*)(pEntry->GetFirstItem(SV_ITEM_ID_LBOXCONTEXTBMP));
    if ( pItem )
    {
        pItem->SetBitmap2( rBmp );
        GetModel()->InvalidateEntry( pEntry );
    }
}

void SvIconView::SetCollapsedEntryBmp(SvLBoxEntry* pEntry,
    const Image& rBmp )
{
    SvLBoxContextBmp* pItem = (SvLBoxContextBmp*)(pEntry->GetFirstItem(SV_ITEM_ID_LBOXCONTEXTBMP));
    if ( pItem )
    {
        pItem->SetBitmap1( rBmp );
        GetModel()->InvalidateEntry( pEntry );
    }
}

XubString SvIconView::GetEntryText(SvLBoxEntry* pEntry ) const
{
    XubString aStr;
    SvLBoxString* pItem = (SvLBoxString*)(pEntry->GetFirstItem(SV_ITEM_ID_LBOXSTRING));
    if ( pItem )
        aStr = pItem->GetText();
    return aStr;
}

Image SvIconView::GetExpandedEntryBmp(SvLBoxEntry* pEntry) const
{
    Image aBmp;
    SvLBoxContextBmp* pItem = (SvLBoxContextBmp*)(pEntry->GetFirstItem(SV_ITEM_ID_LBOXCONTEXTBMP));
    if ( pItem )
        aBmp = pItem->GetBitmap2();
    return aBmp;
}

Image SvIconView::GetCollapsedEntryBmp(SvLBoxEntry* pEntry) const
{
    Image aBmp;
    SvLBoxContextBmp* pItem = (SvLBoxContextBmp*)(pEntry->GetFirstItem(SV_ITEM_ID_LBOXCONTEXTBMP));
    if ( pItem )
        aBmp = pItem->GetBitmap1();
    return aBmp;
}


SvLBoxEntry* SvIconView::CloneEntry( SvLBoxEntry* pSource )
{
    XubString aStr;
    Image aCollEntryBmp;
    Image aExpEntryBmp;

    SvLBoxString* pStringItem = (SvLBoxString*)(pSource->GetFirstItem(SV_ITEM_ID_LBOXSTRING));
    if ( pStringItem )
        aStr = pStringItem->GetText();
    SvLBoxContextBmp* pBmpItem =(SvLBoxContextBmp*)(pSource->GetFirstItem(SV_ITEM_ID_LBOXCONTEXTBMP));
    if ( pBmpItem )
    {
        aCollEntryBmp = pBmpItem->GetBitmap1();
        aExpEntryBmp  = pBmpItem->GetBitmap2();
    }
    SvLBoxEntry* pEntry = CreateEntry( aStr, aCollEntryBmp, aExpEntryBmp );
    pEntry->SvListEntry::Clone( pSource );
    pEntry->EnableChildsOnDemand( pSource->HasChildsOnDemand() );
    pEntry->SetUserData( pSource->GetUserData() );
    return pEntry;
}


sal_uInt16 SvIconView::IsA()
{
    return SV_LISTBOX_ID_ICONVIEW;
}

void SvIconView::RequestingChilds( SvLBoxEntry* pParent )
{
    if ( !pParent->HasChilds() )
        InsertEntry( String::CreateFromAscii("<dummy>"), pParent, sal_False, LIST_APPEND );
}

void SvIconView::Paint( const Rectangle& rRect )
{
    pImp->Paint( rRect );
}

void SvIconView::MouseButtonDown( const MouseEvent& rMEvt )
{
    pImp->MouseButtonDown( rMEvt );
}

void SvIconView::MouseButtonUp( const MouseEvent& rMEvt )
{
    pImp->MouseButtonUp( rMEvt );
}

void SvIconView::MouseMove( const MouseEvent& rMEvt )
{
    pImp->MouseMove( rMEvt );
}

void SvIconView::KeyInput( const KeyEvent& rKEvt )
{
    // unter OS/2 bekommen wir auch beim Editieren Key-Up/Down
    if( IsEditingActive() )
        return;

    nImpFlags |= SVLBOX_IS_TRAVELSELECT;
    sal_Bool bKeyUsed = pImp->KeyInput( rKEvt );
    if ( !bKeyUsed )
        SvLBox::KeyInput( rKEvt );
    nImpFlags &= ~SVLBOX_IS_TRAVELSELECT;
}

void SvIconView::Resize()
{
    pImp->Resize();
    SvLBox::Resize();
}

void SvIconView::GetFocus()
{
    pImp->GetFocus();
    SvLBox::GetFocus();
}

void SvIconView::LoseFocus()
{
    pImp->LoseFocus();
    SvLBox::LoseFocus();
}

void SvIconView::SetUpdateMode( sal_Bool bUpdate )
{
    Control::SetUpdateMode( bUpdate );
    if ( bUpdate )
        pImp->UpdateAll();
}

void SvIconView::SetModel( SvLBoxTreeList* )
{
}

void SvIconView::SetModel( SvLBoxTreeList* pNewModel, SvLBoxEntry* pParent )
{
    nIcnVwFlags |= ICNVW_BLOCK_ENTRYINS;
    SvLBox::SetModel( pNewModel );
    nIcnVwFlags &= (~ICNVW_BLOCK_ENTRYINS);
    if ( pParent && pParent->HasChildsOnDemand() )
        RequestingChilds( pParent );
    pImp->SetModel( pNewModel, pParent );
}

void SvIconView::ModelHasCleared()
{
    SvLBox::ModelHasCleared();
    pImp->Clear();
}

void SvIconView::ModelHasInserted( SvListEntry* pEntry )
{
    if( !(nIcnVwFlags & ICNVW_BLOCK_ENTRYINS ) )
        pImp->EntryInserted( (SvLBoxEntry*)pEntry );
}

void SvIconView::ModelHasInsertedTree( SvListEntry* pEntry )
{
    pImp->TreeInserted( (SvLBoxEntry*)pEntry );
}

void SvIconView::ModelIsMoving(SvListEntry* pSource,
        SvListEntry* /* pTargetParent */ , sal_uLong /* nChildPos */ )
{
    pImp->MovingEntry( (SvLBoxEntry*)pSource );
}

void SvIconView::ModelHasMoved(SvListEntry* pSource )
{
    pImp->EntryMoved( (SvLBoxEntry*)pSource );
}

void SvIconView::ModelIsRemoving( SvListEntry* pEntry )
{
    pImp->RemovingEntry( (SvLBoxEntry*)pEntry );
    NotifyRemoving( (SvLBoxEntry*)pEntry );
}

void SvIconView::ModelHasRemoved( SvListEntry* /* pEntry */ )
{
    pImp->EntryRemoved();
}

void SvIconView::ModelHasEntryInvalidated( SvListEntry* pEntry )
{
    // die einzelnen Items des Entries reinitialisieren
    SvLBox::ModelHasEntryInvalidated( pEntry );
    // painten
    pImp->ModelHasEntryInvalidated( pEntry );
}

void SvIconView::ShowTargetEmphasis( SvLBoxEntry* pEntry, sal_Bool bShow )
{
    pImp->ShowTargetEmphasis( pEntry, bShow );
}

Point SvIconView::GetEntryPosition( SvLBoxEntry* pEntry ) const
{
    return ((SvIconView*)this)->pImp->GetEntryPosition( pEntry );
}

void SvIconView::SetEntryPosition( SvLBoxEntry* pEntry, const Point& rPos)
{
    pImp->SetEntryPosition( pEntry, rPos, sal_False, sal_True );
}

void SvIconView::SetEntryPosition( SvLBoxEntry* pEntry, const Point& rPos, sal_Bool bAdjustAtGrid )
{
    pImp->SetEntryPosition( pEntry, rPos, bAdjustAtGrid );
}

void SvIconView::SetFont( const Font& rFont )
{
    Font aTempFont( rFont );
    aTempFont.SetTransparent( sal_True );
    SvLBox::SetFont( aTempFont );
    RecalcViewData();
    pImp->ChangedFont();
}

void SvIconView::ViewDataInitialized( SvLBoxEntry* pEntry )
{
    pImp->ViewDataInitialized( pEntry );
}

SvLBoxEntry* SvIconView::GetDropTarget( const Point& rPos )
{
    return pImp->GetDropTarget( rPos );
}

SvLBoxEntry* SvIconView::GetEntry( const Point& rPixPos, sal_Bool ) const
{
    Point aPos( rPixPos );
    aPos -= GetMapMode().GetOrigin();
    return ((SvIconView*)this)->pImp->GetEntry( aPos );
}

SvLBoxEntry* SvIconView::GetEntryFromLogicPos( const Point& rDocPos ) const
{
    return ((SvIconView*)this)->pImp->GetEntry( rDocPos );
}


void SvIconView::StateChanged( StateChangedType i_nStateChange )
{
    SvLBox::StateChanged( i_nStateChange );
    if ( i_nStateChange == STATE_CHANGE_STYLE )
        pImp->SetStyle( GetStyle() );
}

void SvIconView::PaintEntry( SvLBoxEntry* pEntry )
{
    pImp->PaintEntry( pEntry );
}


void SvIconView::PaintEntry( SvLBoxEntry* pEntry, const Point& rPos )
{
    pImp->PaintEntry( pEntry, rPos );
}

Rectangle SvIconView::GetFocusRect( SvLBoxEntry* pEntry )
{
    return pImp->CalcFocusRect( pEntry );
}

void SvIconView::InvalidateEntry( SvLBoxEntry* pEntry )
{
    pImp->InvalidateEntry( pEntry );
}

void SvIconView::SetDragDropMode( DragDropMode nDDMode )
{
    SvLBox::SetDragDropMode( nDDMode );
    pImp->SetDragDropMode( nDDMode );
}

void SvIconView::SetSelectionMode( SelectionMode eSelectMode )
{
    SvLBox::SetSelectionMode( eSelectMode );
    pImp->SetSelectionMode( eSelectMode );
}

sal_Bool SvIconView::Select( SvLBoxEntry* pEntry, sal_Bool bSelect )
{
    EndEditing();
    sal_Bool bRetVal = SvListView::Select( pEntry, bSelect );
    if( bRetVal )
    {
        pImp->EntrySelected( pEntry, bSelect );
        pHdlEntry = pEntry;
        SelectHdl();
    }
    return bRetVal;
}

void SvIconView::SelectAll( sal_Bool bSelect, sal_Bool )
{
    SvLBoxEntry* pEntry = pImp->GetCurParent();
    pEntry = FirstChild( pEntry );
    while( pEntry )
    {
        Select( pEntry, bSelect );
        pEntry = NextSibling( pEntry );
    }
}

void SvIconView::SetCurEntry( SvLBoxEntry* _pEntry )
{
    pImp->SetCursor( _pEntry );
    OnCurrentEntryChanged();
}

SvLBoxEntry* SvIconView::GetCurEntry() const
{
    return pImp->GetCurEntry();
}

void SvIconView::Arrange()
{
#ifdef DBG_UTIL
    sal_uInt16 n=1;
    if( n == 1 && n-1 == 0 )
    {
        pImp->Arrange();
    }
    else
    {
        pImp->AdjustAtGrid();
    }
#else
    pImp->Arrange();
#endif
}


void SvIconView::SetSpaceBetweenEntries( long nX, long nY )
{
    pImp->SetSpaceBetweenEntries( nX, nY );
}

sal_Bool SvIconView::NotifyMoving( SvLBoxEntry* pTarget, SvLBoxEntry* pEntry,
    SvLBoxEntry*& rpNewParent, sal_uLong& rNewChildPos )
{
    return pImp->NotifyMoving(pTarget,pEntry,rpNewParent,rNewChildPos);
}

sal_Bool SvIconView::NotifyCopying( SvLBoxEntry* pTarget, SvLBoxEntry* pEntry,
    SvLBoxEntry*& rpNewParent, sal_uLong& rNewChildPos )
{
    return pImp->NotifyCopying(pTarget,pEntry,rpNewParent,rNewChildPos);
}


void SvIconView::EnableInplaceEditing( sal_Bool bEnable )
{
    SvLBox::EnableInplaceEditing( bEnable );
}

void SvIconView::EditingRequest( SvLBoxEntry* pEntry, SvLBoxItem* pItem,
                                 const Point& )
{
    if ( pItem->IsA() == SV_ITEM_ID_LBOXSTRING )
    {
        Selection aSel( SELECTION_MIN, SELECTION_MAX );
        if ( EditingEntry( pEntry, aSel ) )
        {
            SelectAll( sal_False );
            EditItemText( pEntry, (SvLBoxString*)pItem, aSel );
        }
    }
}


void SvIconView::EditItemText( SvLBoxEntry* pEntry, SvLBoxItem* pItem,
    const Selection& rSel )
{
    DBG_ASSERT(pEntry&&pItem,"EditItemText:Params?");
    pCurEdEntry = pEntry;
    pCurEdItem = pItem;
    Rectangle aRect( pImp->CalcTextRect( pEntry, (SvLBoxString*)pItem,0,sal_True ));

    aRect.Bottom() += 4;
    pImp->MakeVisible( aRect ); // vor der Umrechnung in Pixel-Koord. rufen!
    aRect.Bottom() -= 4;

    Point aPos( aRect.TopLeft() );
    aPos += GetMapMode().GetOrigin(); // Dok-Koord. -> Window-Koord.
    aRect.SetPos( aPos );

    aRect.Bottom() += 2; // sieht huebscher aus

#ifdef OS2

#if OS2_SINGLE_LINE_EDIT
    aRect.Left() -= 3;
    aRect.Right() += 3;
    aRect.Top() -= 3;
    aRect.Bottom() += 3;
#else
    aRect.Left() -= 10;
    aRect.Right() += 10;
    aRect.Top() -= 5;
    aRect.Bottom() += 5;
#endif

#endif // OS2
    EditText( ((SvLBoxString*)pItem)->GetText(), aRect, rSel, sal_True );
}

void SvIconView::EditEntry( SvLBoxEntry* pEntry )
{
    if( !pEntry )
        pEntry = pImp->GetCurEntry();
    if( pEntry )
    {
        SvLBoxString* pItem = (SvLBoxString*)(pEntry->GetFirstItem(SV_ITEM_ID_LBOXSTRING));
        if( pItem )
        {
            Selection aSel( SELECTION_MIN, SELECTION_MAX );
            if( EditingEntry( pEntry, aSel ) )
            {
                SelectAll( sal_False );
                EditItemText( pEntry, pItem, aSel );
            }
        }
    }
}

void SvIconView::EditedText( const XubString& rStr )
{
    XubString aRefStr( ((SvLBoxString*)pCurEdItem)->GetText() );
    if ( EditedEntry( pCurEdEntry, rStr ) )
    {
        ((SvLBoxString*)pCurEdItem)->SetText( pCurEdEntry, rStr );
        pModel->InvalidateEntry( pCurEdEntry );
    }
    if( GetSelectionMode()==SINGLE_SELECTION && !GetSelectionCount())
        Select( pCurEdEntry );
}


sal_Bool SvIconView::EditingEntry( SvLBoxEntry*, Selection& )
{
    return sal_True;
}

sal_Bool SvIconView::EditedEntry( SvLBoxEntry*, const XubString& )
{
    return sal_True;
}


void SvIconView::WriteDragServerInfo( const Point& rPos, SvLBoxDDInfo* pInfo)
{
    pImp->WriteDragServerInfo( rPos, pInfo );
}

void SvIconView::ReadDragServerInfo( const Point& rPos, SvLBoxDDInfo* pInfo )
{
    pImp->ReadDragServerInfo( rPos, pInfo );
}

void SvIconView::Command( const CommandEvent& rCEvt )
{
    pImp->PrepareCommandEvent( rCEvt.GetMousePosPixel() );
}

void SvIconView::SetCurParent( SvLBoxEntry* pNewParent )
{
    if ( pNewParent && pNewParent->HasChildsOnDemand() )
        RequestingChilds( pNewParent );
    pImp->SetCurParent( pNewParent );
}

SvLBoxEntry* SvIconView::GetCurParent() const
{
    return pImp->GetCurParent();
}

SvViewData* SvIconView::CreateViewData( SvListEntry* )
{
    SvIcnVwDataEntry* pEntryData = new SvIcnVwDataEntry;
    return (SvViewData*)pEntryData;
}

void SvIconView::InitViewData( SvViewData* pData, SvListEntry* pEntry )
{
    SvLBox::InitViewData( pData, pEntry );
    pImp->InvalidateBoundingRect( ((SvIcnVwDataEntry*)pData)->aRect );
}

Region SvIconView::GetDragRegion() const
{
    Rectangle aRect;
    SvLBoxEntry* pEntry = GetCurEntry();
    if( pEntry )
        aRect = pImp->GetBoundingRect( pEntry );
    Region aRegion( aRect );
    return aRegion;
}

sal_uLong SvIconView::GetSelectionCount() const
{
    return (sal_uLong)(pImp->GetSelectionCount());
}

void SvIconView::SetGrid( long nDX, long nDY )
{
    pImp->SetGrid( nDX, nDY );
}

void SvIconView::ModelNotification( sal_uInt16 nActionId, SvListEntry* pEntry1,
    SvListEntry* pEntry2, sal_uLong nPos )
{
    SvLBox::ModelNotification( nActionId, pEntry1, pEntry2, nPos );
    switch( nActionId )
    {
        case LISTACTION_RESORTING:
            SetUpdateMode( sal_False );
            break;

        case LISTACTION_RESORTED:
            SetUpdateMode( sal_True );
            Arrange();
            break;

        case LISTACTION_CLEARED:
            if( IsUpdateMode() )
                Update();
            break;
    }
}


void SvIconView::Scroll( long nDeltaX, long nDeltaY, sal_uInt16 )
{
    pImp->Scroll( nDeltaX, nDeltaY, sal_False );
}

void SvIconView::PrepareCommandEvent( const CommandEvent& rCEvt )
{
    pImp->PrepareCommandEvent( rCEvt.GetMousePosPixel() );
}

void SvIconView::StartDrag( sal_Int8 nAction, const Point& rPos )
{
    pImp->SttDrag( rPos );
    SvLBoxEntry* pEntry = GetEntry( rPos, sal_True );
    pImp->mpViewData = pEntry;
    SvLBox::StartDrag( nAction, rPos );
}

void SvIconView::DragFinished( sal_Int8 )
{
    pImp->EndDrag();
}

sal_Int8 SvIconView::AcceptDrop( const AcceptDropEvent& rEvt )
{
    if( pImp->mpViewData )
        pImp->HideDDIcon();
    sal_Int8 nRet = SvLBox::AcceptDrop( rEvt );
    if( DND_ACTION_NONE != nRet )
        pImp->ShowDDIcon( pImp->mpViewData, rEvt.maPosPixel );

    return nRet;
}

sal_Int8 SvIconView::ExecuteDrop( const ExecuteDropEvent& rEvt )
{
    if( pImp->mpViewData )
    {
        pImp->HideDDIcon();
        pImp->mpViewData = 0;
    }
    return SvLBox::ExecuteDrop( rEvt );
}

void SvIconView::ShowDDIcon( SvLBoxEntry* pRefEntry, const Point& rPos )
{
    pImp->ShowDDIcon( pRefEntry, rPos );
}

void SvIconView::HideDDIcon()
{
    pImp->HideDDIcon();
}

void SvIconView::HideShowDDIcon( SvLBoxEntry* pRefEntry, const Point& rPos )
{
    pImp->HideShowDDIcon( pRefEntry, rPos );
}

void SvIconView::SelectRect( const Rectangle& rRect, sal_Bool bAdd,
    SvPtrarr* pRects, short nOffs )
{
    pImp->SelectRect( rRect, bAdd, pRects, nOffs );
}

void SvIconView::CalcScrollOffsets( const Point& rRefPosPixel, long& rX, long& rY,
    sal_Bool b, sal_uInt16 nBorderWidth )
{
    pImp->CalcScrollOffsets( rRefPosPixel, rX, rY, b, nBorderWidth );
}

void SvIconView::EndTracking()
{
    pImp->EndTracking();
}

void SvIconView::MakeVisible( SvLBoxEntry* pEntry )
{
    pImp->MakeVisible( pEntry );
}

void SvIconView::PreparePaint( SvLBoxEntry* )
{
}

void SvIconView::AdjustAtGrid( SvLBoxEntry* pEntry )
{
    pImp->AdjustAtGrid( pEntry );
}

void SvIconView::LockEntryPos( SvLBoxEntry* pEntry, sal_Bool bLock )
{
    SvIcnVwDataEntry* pViewData = (SvIcnVwDataEntry*)GetViewData( pEntry );
    if( bLock )
        pViewData->SetVwFlags( ICNVW_FLAG_POS_LOCKED );
    else
        pViewData->ClearVwFlags( ICNVW_FLAG_POS_LOCKED );
}

sal_Bool SvIconView::IsEntryPosLocked( const SvLBoxEntry* pEntry ) const
{
    const SvIcnVwDataEntry* pViewData = (const SvIcnVwDataEntry*)GetViewData( (SvListEntry*)pEntry );
    return pViewData->IsEntryPosLocked();
}

void SvIconView::SetTextMode( SvIconViewTextMode eMode, SvLBoxEntry* pEntry )
{
    pImp->SetTextMode( eMode, pEntry );
}

SvIconViewTextMode SvIconView::GetTextMode( const SvLBoxEntry* pEntry ) const
{
    return pImp->GetTextMode( pEntry );
}

SvLBoxEntry* SvIconView::GetNextEntry( const Point& rPixPos, SvLBoxEntry* pCurEntry, sal_Bool  ) const
{
    Point aPos( rPixPos );
    aPos -= GetMapMode().GetOrigin();
    return ((SvIconView*)this)->pImp->GetNextEntry( aPos, pCurEntry );
}

SvLBoxEntry* SvIconView::GetPrevEntry( const Point& rPixPos, SvLBoxEntry* pCurEntry, sal_Bool  ) const
{
    Point aPos( rPixPos );
    aPos -= GetMapMode().GetOrigin();
    return ((SvIconView*)this)->pImp->GetPrevEntry( aPos, pCurEntry );
}

void SvIconView::ShowFocusRect( const SvLBoxEntry* pEntry )
{
    pImp->ShowFocusRect( pEntry );
}


/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
