Problema para implementar los splitters

Problema para implementar los splitters

Postby mastintin » Wed Jul 28, 2010 1:06 pm

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  Expand view



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  Expand view

 [ 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  Expand view

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.
User avatar
mastintin
 
Posts: 1516
Joined: Thu May 27, 2010 2:06 pm

Re: Problema para implementar los splitters

Postby mastintin » Thu Jul 29, 2010 7:54 pm

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  Expand view

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
User avatar
mastintin
 
Posts: 1516
Joined: Thu May 27, 2010 2:06 pm

Re: Problema para implementar los splitters

Postby Antonio Linares » Sat Jul 31, 2010 7:45 am

Que bonitooooo! :-D

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

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 41313
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain


Return to FiveMac / FivePhone (iPhone, iPad)

Who is online

Users browsing this forum: No registered users and 7 guests