Page 1 of 1

Problema para implementar los splitters

Posted: Wed Jul 28, 2010 1:06 pm
by mastintin
estoy en la implementacion de los splitters y la tengo mas o menos perfilada aun lejos de ser operativa si que se visualiza .
Pero me encuentro ante un problema que afecta a toda la arquitectura de las clases de fivemac .Se trata de la manera que se asignan "los contenedores" de cada control .
Me eXplico mejor con un poco de código .....
supongamos la clase button ....
Su codigo creador :

Code: Select all



NSView * GetView( NSWindow * window );

HB_FUNC( BTNCREATE ) 
{
   NSButton * button = [ [ NSButton alloc ] 
                       initWithFrame : NSMakeRect( hb_parnl( 2 ), hb_parnl( 1 ), hb_parnl( 3 ), hb_parnl( 4 ) ) ];
   NSString * string = [ [ [ NSString alloc ] initWithCString: ISCHAR( 5 ) ? hb_parc( 5 ) : "" ] autorelease ];
   NSWindow * window = ( NSWindow * ) hb_parnl( 6 );

   [ button setBezelStyle : NSRoundedBezelStyle ];
   [ button setTitle : string ];
   
   [ GetView( window ) addSubview : button ];

   [ button setAction : @selector( BtnClick: ) ];
   
   hb_retnl( ( LONG ) button );
}   
 
Vamos en concreto a esta linea :

Code: Select all

 [ GetView( window ) addSubview : button ];
 
Todos los controles tienen vistas y aqui asignamos que el boton es una "subvista" de la vista principal del control
En los split existen varias vistas en el mismo control y ninguna es principal .El boton se tiene que asignar a una de esas vistas que no tienen subvistas que devolver por lo que el codigo falla .

Si yo creo una funcion similar pero cambiando un poco el codigo :

Code: Select all

HB_FUNC( BTNCREATEFROMVIEW ) 
{
    NSButton * button = [ [ NSButton alloc ] 
                         initWithFrame : NSMakeRect( hb_parnl( 2 ), hb_parnl( 1 ), hb_parnl( 3 ), hb_parnl( 4 ) ) ];
    NSString * string = [ [ [ NSString alloc ] initWithCString: ISCHAR( 5 ) ? hb_parc( 5 ) : "" ] autorelease ];
    
    NSView * view = ( NSView * ) hb_parnl( 6 );
        
    [ button setBezelStyle : NSRoundedBezelStyle ];
    [ button setTitle : string ];
    
    [ view addSubview : button ];
    
    [ button setAction : @selector( BtnClick: ) ];
    
    hb_retnl( ( LONG ) button );
}   
 

Ya me funciona sin problemas en las vistas de los splits.
No se como se podrá solucionar facilmente , pero si que requiere que repensemos esta manera de asignar los contenedores.

Re: Problema para implementar los splitters

Posted: Thu Jul 29, 2010 7:54 pm
by mastintin
Resuelto el problema . Fué mas facil de lo que en un principiuo parecía .
Lo he resuelto modificando una función un poco :

Code: Select all

NSView * GetView( NSWindow * window )
{
    if( [ [ window className ] isEqual : @"NSView" ] )  
    {
        return ( ( NSView * ) window )  ;
    }
    else
    {
          if( [ [ window className ] isEqual : @"NSPanel" ] )
      return [ window contentView ];
   else
      return [ ( ( NSTabViewItem * ) window ) view ];
    }
}   

 
el resultado es estupendo .
Os pongo algo para veais como está quedando :
Image

Re: Problema para implementar los splitters

Posted: Sat Jul 31, 2010 7:45 am
by Antonio Linares
Que bonitooooo! :-D

Manuel, cuando puedas enviamelo y publicamos un nuevo build, gracias! :-)