/*
 * Xailer source code:
 *
 * LabelBuddy.prg
 * Label con control emparejado
 *
 * Copyright 2006 Jose Lalin
 * Copyright 2003, 2007 Xailer.com
 * All rights reserved
 *
 */

#include "Xailer.ch"

//--------------------------------------------------------------------------

CLASS XLabelBuddy FROM TLabel

PUBLISHED:
   PROPERTY nBuddyAlign    INIT baLEFT ;
                           VALUES baLEFT, baLEFTTOP, baLEFTBOTTOM, ;
                                  baRIGHT, baRIGHTTOP, baRIGHTBOTTOM, ;
                                  baTOPLEFT, baTOPCENTER, baTOPRIGHT, ;
                                  baBOTTOMLEFT, baBOTTOMCENTER, baBOTTOMRIGHT ;
                           WRITE INLINE ( ::FnBuddyAlign := Value, ::SetPosition() )

   PROPERTY nBuddyOffset   INIT 80 WRITE INLINE ( ::FnBuddyOffset := Value, ::SetPosition() )
   PROPERTY nVAlignment    INIT vaCENTER

   PROPERTY oBuddy         EDITOR PE_LabelBuddy AS TControl

RESERVED:
   METHOD SetPosition()
   METHOD ShortCut( cKey )

ENDCLASS

//--------------------------------------------------------------------------

METHOD SetPosition() CLASS XLabelBuddy

   IF ::oBuddy != Nil
      WITH OBJECT ::oBuddy
         SWITCH ::nBuddyAlign
            CASE baLEFT
               ::nLeft := :nLeft - ::nBuddyOffset
               ::nTop  := :nTop + Round( Max( :nHeight - ::nHeight, 0 ) / 2, 0 )
               EXIT
            CASE baLEFTTOP
               ::nLeft := :nLeft - ::nBuddyOffset
               ::nTop  := :nTop
               EXIT
            CASE baLEFTBOTTOM
               ::nLeft := :nLeft - ::nBuddyOffset
               ::nTop  := :nTop + :nHeight - ::nHeight
               EXIT
            CASE baRIGHT
               ::nLeft := :nLeft + ::nBuddyOffset
               ::nTop  := :nTop + Round( Max( :nHeight - ::nHeight, 0 ) / 2, 0 )
               EXIT
            CASE baRIGHTTOP
               ::nLeft := :nLeft + ::nBuddyOffset
               ::nTop  := :nTop
               EXIT
            CASE baRIGHTBOTTOM
               ::nLeft := :nLeft + ::nBuddyOffset
               ::nTop  := :nTop + :nHeight - ::nHeight
               EXIT
            CASE baTOPLEFT
               ::nLeft := :nLeft
               ::nTop  := :nTop - ::nBuddyOffset
               EXIT
            CASE baTOPCENTER
               ::nLeft := :nLeft + Round( Max( :nWidth - ::nWidth, 0 ) / 2, 0 )
               ::nTop  := :nTop - ::nBuddyOffset
               EXIT
            CASE baTOPRIGHT
               ::nLeft := :nLeft + :nWidth - ::nWidth
               ::nTop  := :nTop - ::nBuddyOffset
               EXIT
            CASE baBOTTOMLEFT
               ::nLeft := :nLeft
               ::nTop  := :nTop + ::nBuddyOffset
               EXIT
            CASE baBOTTOMCENTER
               ::nLeft := :nLeft + Round( Max( :nWidth - ::nWidth, 0 ) / 2, 0 )
               ::nTop  := :nTop + ::nBuddyOffset
               EXIT
            CASE baBOTTOMRIGHT
               ::nLeft := :nLeft + :nWidth - ::nWidth
               ::nTop  := :nTop + ::nBuddyOffset
               EXIT
         END
      END WITH
   ENDIF

RETURN Nil

//--------------------------------------------------------------------------

METHOD ShortCut( cKey ) CLASS XLabelBuddy

	IF ::oBuddy != NIL
		::oBuddy:SetFocus()
		RETURN 0
	ENDIF

RETURN Nil

//--------------------------------------------------------------------------
