Una de las cosas que he encontrado y que he implementado para el group es el concepto de anclaje en la ventana
En una ventana , por defecto todos los controles se anclan a la parte izquierda y abajo lo que hace que si se redimensiona la ventana , lo que aparezca quede colocado con un diseño penoso .
MacOsx tiene solucionado esto de una forma elegante , anclando el control a donde tu quieras y redimensionandolo o no a antojo .
Esto que he implementado en los tgroup realmente se debería implementar a nivel de tcontrol ( creo yo ) , pero como no estoy muy "ducho" en clases de fivewin dejo el trabajo para otros .
Ahora Tgroup puede ser un objeto contenedor de controles .
Las modificaciones :
en windows.m :
Code: Select all
NSView * GetView( NSWindow * window )
{
if([ [ window className ] isEqual : @"NSBox" ] )
{
//NSLog([ window className ]);
return [ window contentView ];
}
else {
if( [ [ window className ] isEqual : @"NSView" ] )
{
return ( ( NSView * ) window ) ;
}
else
{
if( [ [ window className ] isEqual : @"NSPanel" ] )
return [ window contentView ];
else
return [ ( ( NSTabViewItem * ) window ) view ];
}
}
}
Code: Select all
HB_FUNC( BOXHIDE )
{
NSBox * box = ( NSBox * ) hb_parnl( 1 );
[box setHidden:YES];
}
HB_FUNC( BOXSHOW )
{
NSBox * box = ( NSBox * ) hb_parnl( 1 );
[box setHidden:NO];
}
HB_FUNC( BOXAUTOAJUST )
{
NSBox * box = ( NSBox * ) hb_parnl( 1 );
[ box setAutoresizingMask : hb_parnl( 2 ) ];
}
Code: Select all
#include "FiveMac.ch"
#define NoMovil 0
#define AnclaRight 1
#define AnchoMovil 2
#define AnclaLeft 4
#define AnclaTop 8
#define AltoMovil 16
#define AnclaBottom 32
// para usar varios defines usar la funcion nOr()
//----------------------------------------------------------------------------//
CLASS TGroup FROM TControl
DATA nAnclaje
METHOD New( nTop, nLeft, nWidth, nHeight, oWnd, cPrompt, nStyle )
METHOD SetText( cText ) INLINE GetSetText( ::hWnd, cText )
METHOD GetText() INLINE GetGetText( ::hWnd )
METHOD SetStyle( nStyle ) INLINE BoxSetStyle( ::hWnd, nStyle )
METHOD GetStyle() INLINE BoxGetStyle( ::hWnd )
METHOD Hide() INLINE BoxHide( ::hWnd )
METHOD Show() INLINE BoxShow( ::hWnd )
METHOD Anclaje(nAnclaje) INLINE (::nAnclaje:= nAnclaje , BOXAUTOAJUST(::hwnd,::nAnclaje) )
ENDCLASS
//----------------------------------------------------------------------------//
METHOD New( nTop, nLeft, nWidth, nHeight, oWnd, cPrompt, nStyle ) CLASS TGroup
DEFAULT nWidth := 100, nHeight := 100, oWnd := GetWndDefault(),;
cPrompt := "Group", nStyle := 1
::hWnd = BoxCreate( nTop, nLeft, nWidth, nHeight, oWnd:hWnd, cPrompt, nStyle )
::oWnd = oWnd
::aControls = {}
oWnd:AddControl( Self )
return Self
//----------------------------------------------------------------------------//