/* * Xailer source code: * * TabsFolderPage.prg * Clase TTabsFolderPage * * Copyright 2003, 2016 Ignacio Ortiz de Zuñiga * Copyright 2003, 2016 José Giménez * Copyright 2003, 2016 Xailer.com * All rights reserved * */ #include "Xailer.ch" //-------------------------------------------------------------------------- CLASS XTabsFolderPage FROM TScrollingWinControl PUBLISHED: PROPERTY cText INIT "" WRITE INLINE ( ::FcText := Value, ::UpdateTabs(.t.), Value ) READ INLINE ::FcText PROPERTY cTooltip INIT "" WRITE INLINE ( ::FcTooltip := Value, ::oParent:SetTooltipZones() ) PROPERTY nImage INIT 0 WRITE INLINE ( ::FnImage := Value, ::UpdateTabs(.t.), Value ); EDITOR PE_ImageIndex PROPERTY nSize INIT 0 WRITE INLINE ( ::FnSize := Value, ::UpdateTabs(.t.), Value ); READ INLINE ::GetSize() PROPERTY nAlignment INIT taCENTER WRITE INLINE ( ::FnAlignment := Value, ::UpdateTabs(), Value ); VALUES taLEFT, taRIGHT, taCENTER PROPERTY nBmpAlignment INIT taLEFT WRITE INLINE ( ::FnBmpAlignment := Value, ::UpdateTabs(), Value ); VALUES taLEFT, taRIGHT PROPERTY lVisible INIT .T. WRITE INLINE ( ::FlVisible := Value, ::UpdateTabs(.t.), Value ) PROPERTY lEnabled INIT .T. WRITE INLINE IIf( Value, ::Enable(), ::Disable() ), ::UpdateTabs(), Value PROPERTY lTransparent INIT .T. PROPERTY nOpacity INIT 0 PROPERTY nClrText INIT Nil WRITE INLINE ::FnClrText := Value EDITOR PE_ColorOrNil PROPERTY nClrTextHot INIT Nil EDITOR PE_ColorOrNil EVENT OnCreate( oSender ) // --> Nil EVENT OnClick( oSender, nX, nY ) // --> Nil EVENT OnRClick( oSender, nX, nY ) // --> Nil EVENT OnClose( oSender, nX, nY ) // --> lResult PUBLIC: PROPERTY oParent READONLY AS TTabsFolder PROPERTY nItem INIT 0 METHOD Create( oParent, nItem, cText, nImage, cTooltip, nSize, nAlignment,; nBmpAlignment, lVisible, lEnabled ) CONSTRUCTOR METHOD Select() INLINE ::oParent:nIndex := ::nItem // --> Nil METHOD Selected() INLINE (::oParent:nIndex == ::nItem ) // --> lValue METHOD Delete() INLINE ::oParent:DeleteItem( ::nItem ) // --> Nil RESERVED: DATA nOrgPos INIT 0 DATA lCloseHot INIT .F. DATA lCanShow INIT .F. METHOD Paint( hDC, aPoint ) EXTERN XTabsItem_Paint() METHOD PaintFrame( hDC, BYREF aRect, lSelect ) EXTERN XTabsItem_PaintFrame() METHOD CalcRect( nOffset, nSize, nMax ) EXTERN XTabsItem_CalcRect() METHOD GetRect( lClient ) EXTERN XTabsItem_GetRect() METHOD SetRect( aRect ) INLINE ::aPaintRect := aRect METHOD IsFirst() INLINE ::oParent:TabIsFirst( ::nItem ) // --> lValue METHOD IsLast() INLINE ::oParent:TabIsLast( ::nItem ) // --> lValue METHOD IsCursorOnClose( aPoint, aRect )EXTERN XTabsItem_IsCursorOnClose() METHOD IsVisible() INLINE ::lVisible METHOD Show( nCmdShow ) METHOD Hide() METHOD Scale( nScale ) VIRTUAL METHOD WMSetFocus() METHOD Enable() // --> .T. METHOD Disable() // --> .F. METHOD UpdateTabs( lFull ) INLINE ::oParent:Refresh( lFull ) METHOD WMEraseBkgnd() INLINE 1 METHOD WMPaint() EXTERN XWinControl_WMEraseBkgnd() PUBLIC: PROPERTY oFont PROPERTY cMessage PROPERTY cBalloon PROPERTY cTooltipTitle PROPERTY nLeft PROPERTY nTop PROPERTY nWidth PROPERTY nHeight PROPERTY nClientHeight PROPERTY nClientWidth PROPERTY nTooltipIcon PROPERTY nVirtualHeight PROPERTY nVirtualWidth PROPERTY nAlign INIT alNONE PROPERTY nAnchors PROPERTY lParentFont PROPERTY lAlignKeepSpace PROPERTY lAlignShiftOnRotate PROPERTY nAlignMarginBottom PROPERTY nAlignMarginLeft PROPERTY nAlignMarginRight PROPERTY nAlignMarginTop PROPERTY nAlignWeight PROPERTY lTabStop INIT .F. PROPERTY lBorder INIT .F. PROPERTY l3D INIT .F. PROPERTY Cargo PROTECTED: DATA nCtlStyle INIT nOr( WS_CHILD, WS_CLIPSIBLINGS, WS_CLIPCHILDREN ) DATA nClassStyle INIT 0 EVENT OnCheckState EVENT OnDblClick EVENT OnEnter EVENT OnExit EVENT OnPaint EVENT OnPainted DATA aPaintRect INIT {0,0,0,0} METHOD GetSize() EXTERN XTabsItem_GetSize() ENDCLASS //------------------------------------------------------------------------------ METHOD Create( oParent, nItem, cText, nImage, cTooltip, nSize, nAlignment,; nBmpAlignment, lVisible, lEnabled ) CLASS XTabsFolderPage LOCAL oItem UPDATE ::oParent TO oParent UPDATE ::nItem TO nItem UPDATE ::FcText TO cText UPDATE ::FnImage TO nImage UPDATE ::FcTooltip TO cTooltip UPDATE ::FnSize TO nSize UPDATE ::FnAlignment TO nAlignment UPDATE ::FnBmpAlignment TO nBmpAlignment UPDATE ::FlEnabled TO lEnabled lVisible := ::FlVisible ::FlVisible := .F. 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 ::Super:Create( ::oParent ) IF lVisible ::FlVisible := .T. ENDIF WITH OBJECT ::oParent IF ! Empty( :Handle ) ::SetBounds( 0, 0, :nClientWidth, :nClientHeight ) :CalcItemsRect() :SetShortCuts() :SetTooltipZones() //::Select() ENDIF END ::nOrgPos := ::nItem ::OnCreate() RETURN Self //------------------------------------------------------------------------------ METHOD Show( nCmdShow ) CLASS XTabsFolderPage DEFAULT nCmdShow TO SW_SHOW IF ! Empty( ::Handle ) IF ! IsWindowVisible( ::Handle ) ShowWindow( ::Handle, nCmdShow ) ENDIF IF ::nAlign != alNONE ::oParent:AlignControls() ELSE UpdateWindow( ::Handle ) ENDIF ::OnShow() ENDIF RETURN Nil //-------------------------------------------------------------------------- METHOD Hide() CLASS XTabsFolderPage ::lFocused := .F. IF ! Empty( ::Handle ) ShowWindow( ::Handle, SW_HIDE ) IF ::nAlign != alNONE .AND. ::nAlign != alCLIENT ::oParent:AlignControls() ENDIF ::OnHide() ENDIF RETURN Nil //------------------------------------------------------------------------------ METHOD WMSetFocus( hCtl ) CLASS XTabsFolderPage LOCAL n, aItems IF ! ::IsVisible() aItems := ::oParent:aItems FOR n := 1 TO Len( aItems ) IF aItems[ n ] == Self ::oParent:nIndex := n EXIT ENDIF NEXT AEval( aItems, {| oItem | IIf( !( oItem == Self ), oItem:Hide(), ) } ) ::SetBounds( 0, 0, ::nClientWidth, ::nClientHeight ) ::Show() ENDIF ::oForm:OnChangeFocus( GetControlFromHandle( hCtl ), Self ) ::oForm:RequestState() ::GoFirstControl() RETURN 0 //------------------------------------------------------------------------------ METHOD Enable() CLASS XTabsFolderPage AEval( ::aControls, {|oCtl| oCtl:Enable() } ) RETURN ::Super:Enable() //------------------------------------------------------------------------------ METHOD Disable() CLASS XTabsFolderPage AEval( ::aControls, {|oCtl| oCtl:Disable() } ) RETURN ::Super:Disable() //------------------------------------------------------------------------------