desde archivo de recursos

Re: desde archivo de recursos

Postby Antonio Linares » Sun Jul 18, 2010 11:32 am

Manuel,

Super bien! :-)

El tag lo podemos usar como el equivalente del nId de los controles de FiveWin :-)

Ando pensando ahora como hacer todo esto genérico, e implementar el REDEFINE de FiveWin
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

Re: desde archivo de recursos

Postby mastintin » Sun Jul 18, 2010 11:48 am

en dos funciones:
Code: Select all  Expand view

HB_FUNC( WINDOWCONTROLCREATE ) // hWnd
{
    WindowController * mynibWindow = [[WindowController alloc]
                                        initWithWindowNibName:@"MainMenu"];  
   
   
    [mynibWindow showWindow: nil]
   
    NSWindow * ventana = [mynibWindow window]
   
     hb_retnl( ( LONG ) ventana );     
     
}  


HB_FUNC( LLAMABOTON ) // hWnd
{
   
    NSWindow * ventana = ( NSWindow * ) hb_parnl( 1 );
    NSView * myview = [ventana contentView ] ;
   
    NSButton * boton = ( NSButton * ) [myview viewWithTag : hb_parnl( 2 ) ];   
   
    [boton setTitle : @"LA monda" ];   
           
   
}  


 
User avatar
mastintin
 
Posts: 1516
Joined: Thu May 27, 2010 2:06 pm

Re: desde archivo de recursos

Postby Antonio Linares » Sun Jul 18, 2010 11:58 am

Manuel,

Vamos acercándonos :-)

Mira este código que ya está funcionando. Ahora creamos un objeto TWindow real! :-)
Aún faltan cosas, pero poquito a poco. Voy a subir este build para que podamos trabajar sobre lo mismo.

samples/testnib.prg
Code: Select all  Expand view

#include "FiveMac.ch"

function Main()

   local oWnd

   DEFINE WINDOW oWnd
   
   @ 20, 20 BUTTON "Another" ACTION Another()

   ACTIVATE WINDOW oWnd

return nil

function Another()

   local oWnd
   
   DEFINE WINDOW oWnd RESOURCE "HudWindow"
   
   ACTIVATE WINDOW oWnd
   
return nil  
 
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

Re: desde archivo de recursos

Postby Antonio Linares » Sun Jul 18, 2010 12:30 pm

Manuel,

Voy a salir ahora con la familia, pero te cuento la que estoy liando :-)

He cogido el prototipo de la Clase View en windows.m y lo he copiado a nibs.m y ahora le asigno un View de los "nuestros" a la ventana del recurso.

Esta funcionando bien, lo único es que ahora pierdo lo controles al cambiar el View. Deberiamos ver si hay una forma de portar los controles de un NSView a otro como hacemos en Windows con SetParent() :-)

Luego seguimos...
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

Re: desde archivo de recursos

Postby Antonio Linares » Sun Jul 18, 2010 12:33 pm

Esto funciona ya, pero como te digo hay que buscar la forma de pasar los controles de un view a otro:

Fijate que uso automaticamente el evento ON CLICK y accedo al titulo con oWnd:SetText(). Es un objeto TWindow real :-)

Code: Select all  Expand view

#include "FiveMac.ch"

function Main()

   local oWnd

   DEFINE WINDOW oWnd
   
   @ 20, 20 BUTTON "Another" ACTION Another()

   ACTIVATE WINDOW oWnd

return nil

function Another()

   local oWnd
   
   DEFINE WINDOW oWnd RESOURCE "HudWindow"
   
   ACTIVATE WINDOW oWnd ;
      ON CLICK oWnd:SetText( Time() ) // MsgInfo( "click" )
   
return nil  
 
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

Re: desde archivo de recursos

Postby Antonio Linares » Sun Jul 18, 2010 12:39 pm

Copio aqui el código y me voy ya :-)

nibs.m
Code: Select all  Expand view
#import <Cocoa/Cocoa.h>
#define HB_DONT_DEFINE_BOOL
#include <hbapi.h>

// NSView * GetView( NSWindow * window );

@interface View : NSView
{
   @public NSWindow * hWnd; 
}
- (BOOL) windowShouldClose : ( NSNotification * ) notification;
- (void) windowWillClose: ( NSNotification * ) notification;
- (void) mouseDown : ( NSEvent *  ) theEvent;
- (void) mouseMoved : ( NSEvent *  ) theEvent;
- (void) keyDown : ( NSEvent *  ) theEvent;
- (void) MenuItem : ( id ) sender;
- (void) BtnClick : ( id ) sender;
- (void) CbxChange : ( id ) sender;
- (void) ChkClick : ( id ) sender;
- (void) RadClick : ( id ) sender;
- (void) TbrClick : ( id ) sender;
- (void) OnTimerEvent : ( NSTimer * ) timer;
- (void) SliderChanged : (id) sender;
@end

@interface WindowController : NSWindowController
{
}
- ( void ) BtnClick : ( id ) sender;
@end

@implementation WindowController

- ( void ) BtnClick : ( id ) sender;
{
   NSRunAlertPanel( @"click", @"", @"OK", NULL, NULL );   
}

@end


HB_FUNC( WNDFROMNIB )
{
   NSString * string = [ [ [ NSString alloc ] initWithCString: ISCHAR( 1 ) ? hb_parc( 1 ) : "" ] autorelease ];
   WindowController * wndController = [ [ WindowController alloc ] initWithWindowNibName : string ];
   NSWindow * window = [ wndController window ];
   NSArray * controls = [ [ window contentView ] subviews ];
   int i;
   View * view = [ [ View alloc ] init ];

   view->hWnd = window;
   [ window setContentView : view ];
   [ window setDelegate : view ];
     
   for( i = 0; i < [ controls count ]; i++ )
   {
      NSControl * control = [ controls objectAtIndex : i ];
      NSString * className = [ control className ];
     
      if( [ className isEqual : @"NSButton" ] )
      {
         NSButton * button = ( NSButton * ) control;
         
         [ button setAction : @selector( BtnClick: ) ];
      }            
   }               
   
   hb_retnl( ( LONG ) window )
}
 
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

Re: desde archivo de recursos

Postby Antonio Linares » Sun Jul 18, 2010 2:43 pm

A lo mejor es tan facil como pasar de un View a otro:
Code: Select all  Expand view

HB_FUNC( WNDFROMNIB )
{
   NSString * string = [ [ [ NSString alloc ] initWithCString: ISCHAR( 1 ) ? hb_parc( 1 ) : "" ] autorelease ];
   NSWindowController * wndController = [ [ NSWindowController alloc ] initWithWindowNibName : string ];
   NSWindow * window = [ wndController window ];
   NSArray * controls = [ [ window contentView ] subviews ];
   int i;
   View * view = [ [ View alloc ] init ];

   view->hWnd = window;
     
   for( i = 0; i < [ controls count ]; i++ )
   {
      NSControl * control = [ controls objectAtIndex : i ];
      NSString * className = [ control className ];
     
      if( [ className isEqual : @"NSButton" ] )
      {
         NSButton * button = ( NSButton * ) control;
         
         [ button setAction : @selector( BtnClick: ) ];
      }  
     
      [ control retain ];
      [ view addSubview : control ];
      [ control removeFromSuperview ];         
   }               
   
     [ window setContentView : view ];
     [ window setDelegate : view ]
   
   hb_retnl( ( LONG ) window )
}
 

Segun esta documentación, se podría hacer:
http://developer.apple.com/mac/library/documentation/Cocoa/Reference/ApplicationKit/Classes/NSView_Class/Reference/NSView.html#//apple_ref/occ/instm/NSView/removeFromSuperview
pero algo debo estar haciendo mal, y tengo que volver a irme otra vez :-)
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

Re: desde archivo de recursos

Postby mastintin » Sun Jul 18, 2010 6:59 pm

Si no entiendo mal el codigo lo que intentas es quedarte con la ventana y una vez la tienes crear nuestro propio view de codigo y ir insertandole los controles copiados del view del nib . ¿No ?
¿ Puede ser que al remover los objetos si estas procesando el nsview "primario" se carge los demas objetos ? .
User avatar
mastintin
 
Posts: 1516
Joined: Thu May 27, 2010 2:06 pm

Re: desde archivo de recursos

Postby Antonio Linares » Sun Jul 18, 2010 8:06 pm

Manuel,

Si, esa es la idea. La cuestion es comprobar si falla por eso y ver una forma de solucionarlo.

Tal vez exista un método para clonar un objeto...
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

Re: desde archivo de recursos

Postby Antonio Linares » Sun Jul 18, 2010 8:41 pm

Tras un montón de pruebas, asi si deja hacerlo :-)

Code: Select all  Expand view
HB_FUNC( WNDFROMNIB )
{
   NSString * string = [ [ [ NSString alloc ] initWithCString: ISCHAR( 1 ) ? hb_parc( 1 ) : "" ] autorelease ];
   NSWindowController * wndController = [ [ NSWindowController alloc ] initWithWindowNibName : string ];
   NSWindow * window = [ wndController window ];
   NSArray * controls = [ [ window contentView ] subviews ];
   View * view = [ [ View alloc ] init ];

   [ window setContentView : view ];
   [ window setDelegate : view ];
   view->hWnd = window;
     
   while( [ controls count ] > 0 )
   {
      NSControl * control = [ controls objectAtIndex : 0 ];
      NSString * className = [ control className ];
     
      [ view addSubview : control ];
     
      if( [ className isEqual : @"NSButton" ] )
      {
         NSButton * button = ( NSButton * ) control;
         
         [ button setAction : @selector( BtnClick: ) ];
      }  
   }            
   
   hb_retnl( ( LONG ) window )
}
 

Ahora hay que comprobar que el mensaje llegue bien...
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

Re: desde archivo de recursos

Postby Antonio Linares » Sun Jul 18, 2010 8:47 pm

Los mensajes llegan bien :-) Ahora hay que implementar los REDEFINEs...

Image
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

Re: desde archivo de recursos

Postby mastintin » Sun Jul 18, 2010 8:52 pm

Otra opcion que me funcionaba era :
Code: Select all  Expand view

HB_FUNC( WNDFROMNIB )
{
   NSString * string = [ [ [ NSString alloc ] initWithCString: ISCHAR( 1 ) ? hb_parc( 1 ) : "" ] autorelease ];
   NSWindowController * wndController = [ [ NSWindowController alloc ] initWithWindowNibName : string ];
   NSWindow * window = [ wndController window ];
   NSView  * myview = [ window contentView ] ;
   NSArray * controls = [ [ window contentView ] subviews ];
   View * view = [ [ View alloc ] init ];
   
   [ window setContentView : view ];
   [ window setDelegate : view ];
   view->hWnd = window;
     
   [ view addSubview : myview ];

   while( [ controls count ] > 0 )
   {
      NSControl * control = [ controls objectAtIndex : 0 ];
      NSString * className = [ control className ];
           
      if( [ className isEqual : @"NSButton" ] )
      {
         NSButton * button = ( NSButton * ) control;
         
         [ button setAction : @selector( BtnClick: ) ];
      }  
   }            
   
   hb_retnl( ( LONG ) window );
}
 
User avatar
mastintin
 
Posts: 1516
Joined: Thu May 27, 2010 2:06 pm

Re: desde archivo de recursos

Postby Antonio Linares » Sun Jul 18, 2010 11:46 pm

Ya está funcionando el REDEFINE BUTTON ... y ya está publicado el nuevo build :-)

Este código ya funciona:
Code: Select all  Expand view

   REDEFINE BUTTON oBtn ID 20 OF oWnd ACTION MsgInfo( "Button click!" )
 


Image
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

Re: desde archivo de recursos

Postby ramirezosvaldo2 » Mon Jul 19, 2010 12:28 am

Hombre, dificil seguirlos

Aun asi me da gusto que se este avanzando pronto.

Saludos
Osvaldo Ramirez
ramirezosvaldo2
 
Posts: 58
Joined: Mon Jan 19, 2009 4:40 pm

Re: desde archivo de recursos

Postby Antonio Linares » Mon Jul 19, 2010 4:58 am

REDEFINE GET ... ya está funcionando. Nuevo build disponible. El ejemplo TestNib.prg lo usa :-)

La única observación es que una vez puesto un NSTextField en la ventana del NIB, hay que cambiarle el nombre de su Clase a Get para que use la de FiveMac que intercepta los eventos que necesitamos (modificación y perdida foco).

Image
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

PreviousNext

Return to FiveMac / FivePhone (iPhone, iPad)

Who is online

Users browsing this forum: No registered users and 6 guests