/*
 * Xailer source code:
 *
 * ExplorerGroup.prg
 * Clase TExplorerGroup()
 *
 * Copyright 2003, 2007 Jose F. Gimenez
 * Copyright 2003, 2007 Xailer.com
 * All rights reserved
 *
 */

#include "Xailer.ch"


//--------------------------------------------------------------------------

CLASS XExplorerGroup FROM TComponent

PUBLISHED:
   PROPERTY cText          WRITE METHOD SetText
   PROPERTY oIcon          WRITE METHOD SetIcon EDITOR PE_Icon AS TIcon
   PROPERTY lSpecial       INIT .F. WRITE METHOD SetSpecial
   PROPERTY lCollapsible   INIT .T.
   PROPERTY lExpanded      INIT .T. WRITE METHOD SetExpanded
   PROPERTY lVisible       INIT .T. WRITE METHOD SetVisible

PUBLIC:
   PROPERTY oParent     AS TExplorerBar
   PROPERTY nItem       READONLY
   PROPERTY oControl    AS TControl

   METHOD Create( oParent )
   METHOD Refresh()  // --> Nil

RESERVED:
   DATA hIcon

   METHOD Free()
   METHOD GetRect()  INLINE ::oParent:GetItemRect( ::nItem )
   METHOD Show()     INLINE ::SetVisible( .T. )
   METHOD Hide()     INLINE ::SetVisible( .F. )
   METHOD IsVisible()
   METHOD SetText( cText )
   METHOD SetIcon( oIcon )
   METHOD SetSpecial( lSpecial )
   METHOD SetExpanded( lExpanded )
   METHOD SetVisible( lVisible )

ENDCLASS

//--------------------------------------------------------------------------

METHOD Create( oParent, cText, oIcon, lSpecial, lExpanded, lVisible ) CLASS XExplorerGroup

   UPDATE ::oParent     TO oParent
   UPDATE ::cText       TO cText
   UPDATE ::oIcon       TO oIcon
   UPDATE ::lSpecial    TO lSpecial
   UPDATE ::lExpanded   TO lExpanded
   UPDATE ::lVisible    TO lVisible

   AAdd( ::oParent:aItems, Self )
   ::nItem := Len( ::oParent:aItems )
   ::oParent:Refresh()

RETURN Self

//--------------------------------------------------------------------------

METHOD Free() CLASS XExplorerGroup

   IF ::FoIcon != Nil
      ::FoIcon:Destroy()
   ENDIF
   IF !Empty( ::hIcon )
      DestroyIcon( ::hIcon )
   ENDIF

RETURN ::Super:Free()

//--------------------------------------------------------------------------

METHOD Refresh() CLASS XExplorerGroup

   IF ! Empty( ::oParent:Handle ) .AND. ! Empty( ::nItem )
      InvalidateRect( ::oParent:Handle, ::GetRect() )
   ENDIF

RETURN Nil

//--------------------------------------------------------------------------

METHOD SetText( cText ) CLASS XExplorerGroup

   UPDATE ::FcText TO cText
   ::Refresh()

RETURN ::FcText

//--------------------------------------------------------------------------

METHOD SetIcon( oIcon ) CLASS XExplorerGroup

   IF ::FoIcon != Nil
      ::FoIcon:Destroy()
      ::FoIcon := Nil
   ENDIF
   IF !Empty( ::hIcon )
      DestroyIcon( ::hIcon )
      ::hIcon := Nil
   ENDIF

   IF ! Empty( oIcon )
      IF ValType( oIcon ) != "O"
         oIcon := TIcon():Create( oIcon )
      ENDIF
      ::FoIcon := oIcon
      ::hIcon := XA_LoadIcon( ::oIcon:cName, ::oParent:nIconSize, ::oParent:nIconSize )
   ENDIF
   ::Refresh()

RETURN Nil

//--------------------------------------------------------------------------

METHOD SetSpecial( lSpecial ) CLASS XExplorerGroup

   UPDATE ::FlSpecial TO lSpecial
   ::Refresh()

RETURN ::FlSpecial

//--------------------------------------------------------------------------

METHOD SetExpanded( lExpanded ) CLASS XExplorerGroup

   UPDATE ::FlExpanded TO lExpanded

   ::oParent:Refresh()
   IF ::oControl != Nil
      ::oParent:Update()
      IF ::IsVisible() .AND. ::FlExpanded
         ::oControl:Show()
      ELSE
         ::oControl:Hide()
      ENDIF
      ::oParent:AlignControls()
      ::oControl:Refresh()
   ENDIF

RETURN Nil

//--------------------------------------------------------------------------

METHOD SetVisible( lVisible ) CLASS XExplorerGroup

   UPDATE ::FlVisible TO lVisible

   ::oParent:Refresh()
   IF ::oControl != Nil
      ::oParent:Update()
      IF ::IsVisible() .AND. ::FlExpanded
         ::oControl:Show()
      ELSE
         ::oControl:Hide()
      ENDIF
      ::oParent:AlignControls()
      ::oControl:Refresh()
   ENDIF

RETURN Nil

//--------------------------------------------------------------------------

METHOD IsVisible() CLASS XExplorerGroup
RETURN ::FlVisible

//--------------------------------------------------------------------------
