desde archivo de recursos
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
Re: desde archivo de recursos
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
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
Re: desde archivo de recursos
en dos funciones:
Code: Select all
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" ];
}
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
Re: desde archivo de recursos
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
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
#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
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
Re: desde archivo de recursos
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...
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...
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
Re: desde archivo de recursos
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
Fijate que uso automaticamente el evento ON CLICK y accedo al titulo con oWnd:SetText(). Es un objeto TWindow real
Code: Select all
#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
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
Re: desde archivo de recursos
Copio aqui el código y me voy ya
nibs.m
nibs.m
Code: Select all
#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 );
}
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
Re: desde archivo de recursos
A lo mejor es tan facil como pasar de un View a otro:
Segun esta documentación, se podría hacer:
http://developer.apple.com/mac/library/ ... mSuperview
pero algo debo estar haciendo mal, y tengo que volver a irme otra vez
Code: Select all
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 );
}
http://developer.apple.com/mac/library/ ... mSuperview
pero algo debo estar haciendo mal, y tengo que volver a irme otra vez
Re: desde archivo de recursos
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 ? .
¿ Puede ser que al remover los objetos si estas procesando el nsview "primario" se carge los demas objetos ? .
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
Re: desde archivo de recursos
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...
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...
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
Re: desde archivo de recursos
Tras un montón de pruebas, asi si deja hacerlo
Ahora hay que comprobar que el mensaje llegue bien...
Code: Select all
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 );
}
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
Re: desde archivo de recursos
Los mensajes llegan bien Ahora hay que implementar los REDEFINEs...
Re: desde archivo de recursos
Otra opcion que me funcionaba era :
Code: Select all
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 );
}
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
Re: desde archivo de recursos
Ya está funcionando el REDEFINE BUTTON ... y ya está publicado el nuevo build
Este código ya funciona:
Este código ya funciona:
Code: Select all
REDEFINE BUTTON oBtn ID 20 OF oWnd ACTION MsgInfo( "Button click!" )
-
- Posts: 49
- Joined: Mon Jan 19, 2009 4:40 pm
Re: desde archivo de recursos
Hombre, dificil seguirlos
Aun asi me da gusto que se este avanzando pronto.
Saludos
Osvaldo Ramirez
Aun asi me da gusto que se este avanzando pronto.
Saludos
Osvaldo Ramirez
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
Re: desde archivo de recursos
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).
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).