/* * Xailer source code: * * FolderPage.prg * Clase TFolderPage() * * Copyright 2003, 2007 Jose F. Gimenez * Copyright 2003, 2007 Xailer.com * All rights reserved * */ #include "Xailer.ch" //-------------------------------------------------------------------------- CLASS XFolderPage FROM TScrollingWinControl PUBLISHED: PROPERTY cText INIT "" WRITE METHOD SetText READ INLINE ::FcText PROPERTY nImage INIT 0 WRITE METHOD SetImage EDITOR PE_ImageIndex PROPERTY nClrText INIT clWindowText WRITE METHOD SetClrText EDITOR PE_Color PROPERTY lTransparent INIT .F. PROPERTY nOpacity INIT 0 PUBLIC: PROPERTY nItem INIT 0 METHOD Select() INLINE ::oParent:nIndex := ::nItem // --> nItem METHOD Delete() INLINE ::oParent:DeleteItem( ::nItem ) // --> lSuccess METHOD Enable() // --> .T. METHOD Disable() // --> .F. RESERVED: EVENT OnEnter METHOD Create( oParent, nItem, cText, xImage, cTooltip, nClrText, lEnabled ) CONSTRUCTOR METHOD Scale( nScale ) VIRTUAL METHOD SetItem( cText, xImage, cTooltip, nClrText ) METHOD WMSetFocus() METHOD WMEraseBkgnd() METHOD WMPaint() EXTERN XFolderPage_WMEraseBkGnd() METHOD WMPrintClient() EXTERN XFolderPage_WMEraseBkGnd() PROTECTED: PROPERTY lBorder INIT .F. PROPERTY lVisible INIT .F. PROPERTY nBkgndMarginX PROPERTY nBkgndMarginY PROPERTY nGradient PROPERTY nClrPaneEnd PROPERTY cTheme INIT "Tab" DATA nCtlStyle INIT nOr( WS_CHILD, WS_CLIPSIBLINGS, WS_CLIPCHILDREN ) DATA nClassStyle INIT 0 EVENT OnCheckState EVENT OnClick EVENT OnDblClick EVENT OnExit EVENT OnPaint EVENT OnPainted METHOD SetText( cText ) METHOD SetImage( nImage ) METHOD SetClrText( nClrtext ) FRIEND CLASS XFolder ENDCLASS //-------------------------------------------------------------------------- METHOD Create( oParent, nItem, cText, xImage, cTooltip, nClrText, lEnabled ) CLASS XFolderPage DEFAULT xImage TO ::nImage UPDATE ::oParent TO oParent UPDATE ::nItem TO nItem UPDATE ::FcText TO cText UPDATE ::FcTooltip TO cTooltip UPDATE ::FnClrText TO nClrText UPDATE ::FlEnabled TO lEnabled IF ValType( xImage ) == "C" ::FnImage := ::oParent:AddImage( xImage ) ELSEIF ValType( xImage ) == "N" ::FnImage := xImage ENDIF IF AScan( ::oParent:aItems, {| oItem | oItem == Self } ) == 0 IF Empty( ::nItem ) .OR. ::nItem > Len( ::oParent:aItems ) AAdd( ::oParent:aItems, Self ) ::nItem := Len( ::oParent:aItems ) ELSE AAdd( ::oParent:aItems, Nil ) AIns( ::oParent:aItems, ::nItem ) ::oParent:aItems[ ::nItem ] := Self nItem := ::nItem + 1 WHILE nItem < Len( ::oParent:aItems ) ::oParent:aItems[ nItem ]:nItem := nItem++ ENDDO ENDIF ENDIF IF ! Empty( ::oParent:Handle ) TabCtrl_InsertItem( ::oParent:Handle, ::nItem, ::FcText, ::FnImage ) ::oParent:UpdateClientRect() ::SetBounds( -3, -1, ::oParent:nClientWidth + 3, ::oParent:nClientHeight + 1 ) ::lVisible := ( Len( ::oParent:aItems ) == 1 ) IF GetWindowTheme( ::oParent:Handle ) == 0 ::cTheme := "" ENDIF ::Super:Create() ::oParent:SetShortCuts() ENDIF RETURN Self //-------------------------------------------------------------------------- METHOD SetItem( cText, xImage, cTooltip, nClrText ) CLASS XFolderPage UPDATE ::FcText TO cText UPDATE ::cTooltip TO cTooltip UPDATE ::FnClrText TO nClrText IF ValType( xImage ) == "C" ::FnImage := ::oParent:AddImage( xImage ) ELSEIF ValType( xImage ) == "N" ::FnImage := xImage ENDIF IF !Empty( ::oParent:Handle ) .AND. ::lCreated TabCtrl_SetItem( ::oParent:Handle, ::nItem, ::FcText, ::FnImage ) ::oParent:UpdateClientRect() ::oParent:SetShortCuts() ENDIF RETURN .T. //-------------------------------------------------------------------------- METHOD SetText( cText ) CLASS XFolderPage UPDATE ::FcText TO cText IF !Empty( ::oParent:Handle ) .AND. ::lCreated TabCtrl_SetItem( ::oParent:Handle, ::nItem, ::FcText, ::FnImage ) ::oParent:UpdateClientRect() ::oParent:SetShortCuts() ENDIF RETURN ::FcText //-------------------------------------------------------------------------- METHOD SetImage( nImage ) CLASS XFolderPage IF nImage != Nil IF ValType( nImage ) == "C" ::FnImage := ::oParent:AddImage( nImage ) ELSEIF ValType( nImage ) == "N" ::FnImage := nImage ENDIF IF !Empty( ::oParent:Handle ) .AND. ::lCreated TabCtrl_SetItem( ::oParent:Handle, ::nItem, ::FcText, ::FnImage ) ::oParent:UpdateClientRect() ENDIF ENDIF RETURN ::FnImage //-------------------------------------------------------------------------- METHOD SetClrText( nClrText ) CLASS XFolderPage UPDATE ::FnClrText TO nClrText ::oParent:Refresh() RETURN ::FnClrText //-------------------------------------------------------------------------- METHOD Enable() CLASS XFolderPage ::oParent:Refresh() RETURN ::Super:Enable() //-------------------------------------------------------------------------- METHOD Disable() CLASS XFolderPage ::oParent:Refresh() RETURN ::Super:Disable() //-------------------------------------------------------------------------- METHOD WMSetFocus( hCtl ) CLASS XFolderPage LOCAL n IF ! ::lVisible FOR n := 1 TO Len( ::oParent:aItems ) IF ::oParent:aItems[ n ] == Self ::oParent:nIndex := n EXIT ENDIF NEXT AEval( ::oParent:aItems, {| oPage | oPage:lVisible := .F. } ) ::SetBounds( -3, -1, ::nClientWidth + 3, ::nClientHeight + 1 ) ::lVisible := .T. ENDIF ::oForm:OnChangeFocus( GetControlFromHandle( hCtl ), Self ) ::oForm:RequestState() ::GoFirstControl() RETURN 0 //--------------------------------------------------------------------------