Primera consulta sobre fiveMac

User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Re: Primera consulta sobre fiveMac

Post by Antonio Linares »

Manuel,

Respecto a CurDir() yo creo que la solución es no usarlo y especificar una trayectoria absoluta.

Otra opción muy interesante, es la que comentas de poner las DBFs dentro de la propia carpeta del ejecutable.
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
mastintin
Posts: 1502
Joined: Thu May 27, 2010 2:06 pm

Re: Primera consulta sobre fiveMac

Post by mastintin »

He cambiado la ruta del dbf en el ejemplo browse :

USE /Applications/browse.app/Test

He tenido en cuenta que las aplicaciones siempre se deben de instalar en la carpeta "aplicaciones" y he metido el dbf dentro del programa . Funciona a la perfección.
dejo una captura del Monitor de actividad donde se ve funcionando la aplicacion browse compilada en nativo a 64bits.
Image

Saludos.
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Re: Primera consulta sobre fiveMac

Post by Antonio Linares »

Manuel,

Muy bien! :-)

Excelente idea la de usar la carpeta de la aplicación para guardar los datos, DBFs, etc que necesite :-)
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
mastintin
Posts: 1502
Joined: Thu May 27, 2010 2:06 pm

Re: Primera consulta sobre fiveMac

Post by mastintin »

He mirado como podria conseguir una aplicacion la referencia de su paquete , para poder introducir en el una imagen( o cualquier cosa ) y poder llamarla sin tener que saber la ruta absoluta donde se tiene instalado el programa .
He creado esta funcion para cargarla , puede que no este bien , que tenga algun gazapo y ademas no puedo probarla pues ahora mismo estoy sobre windows , pero la idea es esa mas o menos ...La he llamado resfile para emular imagenes en recursos y el secreto esta en la clase NSBundle que es una clase de manejo del paquete .
Saludos.

Code: Select all

HB_FUNC( IMGSETRESFILE )
{
   NSImageView * image = ( NSImageView * ) hb_parnl( 1 );
   NSString * string = [ [ [ NSString alloc ] initWithCString: ISCHAR( 2 ) ? hb_parc( 2 ) : "" ] autorelease ];
   NSString *myImagePath = [[[NSBundle mainBundle] resourcePath]  stringByAppendingString:@"/"+string];
   
   
   [ image setImage : [ [ NSImage alloc ] initWithContentsOfFile : myImagePath ] ];
}
 
User avatar
mastintin
Posts: 1502
Joined: Thu May 27, 2010 2:06 pm

Re: Primera consulta sobre fiveMac

Post by mastintin »

He estado corrigiendo el archivo makefile que viene en la distrbución con los nombres correctos de las librerias para que funcione . .

Code: Select all


# FiveMac makefile sample (c) FiveTech Software 2007
# Use TABs instead of spaces
# just type make to build it

all : ./one.app/Contents/MacOS/one
    ./one.app/Contents/MacOS/one
    reset
    
PRG_OBJS = ./one.o  \
    ./two.o \
    ./three.o   \

./one.app/Contents/MacOS/one : $(PRG_OBJS)
    if [ ! -d one.app ]; then mkdir one.app; fi
    if [ ! -d one.app/Contents ]; then mkdir one.app/Contents; fi
    if [ ! -d one.app/Contents/MacOS ]; then mkdir one.app/Contents/MacOS; fi
    gcc one.o two.o three.o -o ./one.app/Contents/MacOS/one -L./../lib -lfive -lfivec -L./../../harbour/lib -lhbdebug -lhbvm -lhbrtl -lhblang -lhbrdd -lhbrtl -lgtstd -lgttrm -lhbvm -lhbmacro -lhbpp -lrddntx -lrddcdx -lrddfpt -lhbsix -lhbcommon -framework Cocoa

./%.c : ./%.prg
    ./../../harbour/bin/harbour $< -o./$@ -n -I./../../harbour/include -I./../include

./%.o : ./%.c
    gcc -c -o $@ -I./../../harbour/include $< 


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

Re: Primera consulta sobre fiveMac

Post by mastintin »

una captura de browse funcionando con la dbf dentro del contenedor y con su propio icono tambien en el contenedor .
Image
Saludos.
User avatar
mastintin
Posts: 1502
Joined: Thu May 27, 2010 2:06 pm

Re: Primera consulta sobre fiveMac

Post by mastintin »

Continuo avanzando con el tema del contenedor ... he conseguido que el ejemplo testimg encuentre la imagen dentro de la carpetas Resources del contenedor ...
_ son los siguientes :
en el archivo fivemac.ch
esto es algo provisional y rapido :

Code: Select all

#xcommand @ <nRow>, <nCol> RESIMAGE [ <oImg> ] ;
             [ OF <oWnd> ] ;
                 [ SIZE <nWidth>, <nHeight> ] ;
                 [ FILENAME <cFileName> ] ;
              => ;
                 [ <oImg> := ] TImage():New( <nRow>, <nCol>, <nWidth>, <nHeight>, [<oWnd>],;
                                             [<cFileName>] , .t. )
                               

 
en la clase image :

Añade el metodo :

Code: Select all

  METHOD SetResfile(cFileName) INLINE ImgSetresFile( ::hWnd , cFileName )
 
modificado metodo :

Code: Select all

METHOD New( nTop, nLeft, nWidth, nHeight, oWnd, cFileName, lres ) CLASS TImage

   DEFAULT nWidth := 100, nHeight := 100
   DEFAULT lres:= .f.

   ::hWnd = ImgCreate( nTop, nLeft, nWidth, nHeight, oWnd:hWnd )
   ::oWnd  = oWnd

   if lres
     if ! Empty( cFileName )   
       ::SetresFile( cFileName )
   endif  
  else
   if ! Empty( cFileName ) .and. File( cFileName )
      ::SetFile( cFileName )
   endif   
   endif
   oWnd:AddControl( Self )
   
return Self   

 
Añadida function al archivo images.m de la api .

Code: Select all

HB_FUNC( IMGSETRESFILE )
{
    NSImageView * image = ( NSImageView * ) hb_parnl( 1 );
    NSString * string = [ [ [ NSString alloc ] initWithCString: ISCHAR( 2 ) ? hb_parc( 2 ) : "" ] autorelease ];
    NSString *myImagePath = [[[NSBundle mainBundle] resourcePath]  stringByAppendingString:string];
    [ image setImage : [ [ NSImage alloc ] initWithContentsOfFile : myImagePath ] ];
    
    
}
 
cambiando en el programa la linea :

@ 100, 139 RESIMAGE oImg OF oWnd SIZE 107, 91 FILENAME "/error.tif"

Funciona perfectamente y sabe en todo momento donde debe buscar los archivos de imagen . Supongo que sacar la ruta del contenedor no será demasiado complicado .
Saludos.

---------------- editado para añadir ---------------------

Con esta otra funcion conseguimos el path de la carpeta resource correcto :

Code: Select all

HB_FUNC( RESPATH )
{
        NSString *bundlePath = [[NSBundle mainBundle] resourcePath];
        hb_retc( [ bundlePath cStringUsingEncoding : NSASCIIStringEncoding ] );
}  
 
Y con esta otra el path de la aplicacion :

Code: Select all

HB_FUNC( APPPATH )
{
        NSString *bundlePath = [[NSBundle mainBundle] resourcePath];
        NSString *secondParentPath = [[bundlePath stringByDeletingLastPathComponent] stringByDeletingLastPathComponent];
        hb_retc( [ secondParentPath cStringUsingEncoding : NSASCIIStringEncoding ] );
}  

 
:-))
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Re: Primera consulta sobre fiveMac

Post by Antonio Linares »

Manuel,
He estado corrigiendo el archivo makefile que viene en la distrbución con los nombres correctos de las librerias para que funcione . .
Actualizado para el próximo build que publiquemos :-)

Muchas gracias! :-)
regards, saludos

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

Re: Primera consulta sobre fiveMac

Post by Antonio Linares »

Manuel,
browse funcionando con la dbf dentro del contenedor y con su propio icono tambien en el contenedor
Muy bien! :-)

Podrias publicar aqui el código del ejemplo browse.prg modificado ? gracias

En que subcarpeta has situado el icono ? Algún requerimiento en especial en cuanto a tamaño, formato, etc ?

Muchas gracias por tus valiosas aportaciones! :-)
regards, saludos

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

Re: Primera consulta sobre fiveMac

Post by Antonio Linares »

Manuel,

gracias por las funciones AppPath() y ResPath(). Añadidas para el próximo build de FiveMac.

Hemos probado hb_ArgV( 0 ) y devuelve bien el path del ejecutable. Esto es algo propio de los compiladores en C.

Vamos ahora a probar tu trabajo relativo a las imágenes. Muchas gracias por tus aportaciones que estan siendo muy interesantes y útiles :-)
regards, saludos

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

Re: Primera consulta sobre fiveMac

Post by Antonio Linares »

Manuel,

La nueva cláusula del comando para imágenes creemos que es preferible implementarla de esta manera por mantener la mayor compatibilidad posible con FiveWin:

Code: Select all

#xcommand @ <nRow>, <nCol> IMAGE [ <oImg> ] ;
                 [ OF <oWnd> ] ;
                 [ SIZE <nWidth>, <nHeight> ] ;
                 [ FILENAME <cFileName> ] ;
                 [ <resource: NAME, RESOURCE, RESNAME> <cResName> ] ;
              => ;
                 [ <oImg> := ] TImage():New( <nRow>, <nCol>, <nWidth>, <nHeight>, [<oWnd>],;
                                             [<cFileName>], [<cResName>] )
 
regards, saludos

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

Re: Primera consulta sobre fiveMac

Post by Antonio Linares »

Manuel,

Hemos publicado un nuevo build de FiveMac con _ más recientes :-)

Gracias!
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
mastintin
Posts: 1502
Joined: Thu May 27, 2010 2:06 pm

Re: Primera consulta sobre fiveMac

Post by mastintin »

en browse he realizado "a mano" (parte de ello se puede hacer en build.sh ) lo siguiente :

He colocado dentro de brwse.app el fichero test.dbf ( se podría crear un carpeta llamada dbf para colocar todos los archivos dbf dentro) .
Detro de la carpeta Contents he creado una carpeta Resources donde he metido todas las imagenes que se necesiten en el programa , en esta caso el icono .
El icono lo he realizado con el programa Icon composer ( en developper->applications->utilidades) y tiene un formato ICNS con todos los tamaños dentro (512,256,128,32,16) .
Tambien he introducido dentro de Contents un archivo info.plist ( archivo xml con información del programa ) donde le he dicho como se llama el icono del programa .
A nivel de codigo el cambio es minimo :
so lo he puesto estas dos lineas :

Code: Select all

 local cpath:=apppath()
   USE  ( cpath+"/Test" )
 
Adjunto el ejectutable :
http://rapidshare.com/files/404424172/browse.zip.html
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Re: Primera consulta sobre fiveMac

Post by Antonio Linares »

Manuel,

Gracias! :-)
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
mastintin
Posts: 1502
Joined: Thu May 27, 2010 2:06 pm

Re: Primera consulta sobre fiveMac

Post by mastintin »

Antonio la funcion apppath() creo que se puede simplificar asi ( FUNCIONA ) :

Code: Select all

 HB_FUNC( APPPATH2 )
{
   NSString *buPath = [[NSBundle mainBundle] bundlePath];
   hb_retc( [ buPath cStringUsingEncoding : NSASCIIStringEncoding ] );
} 
 
Por otro lado he realizado estas funciones para el manejo de imagenes FUNCIONA( por lo menos scalenonen y scaleajustratio ) :

Code: Select all


 HB_FUNC( IMGSETSCALENONE )
{
   NSImageView * image = ( NSImageView * ) hb_parnl( 1 );
 
   [ image setImageScaling : NSImageScaleNone ];
} 

  HB_FUNC( IMGSETSCALEAJUST )
{
   NSImageView * image = ( NSImageView * ) hb_parnl( 1 );
 
   [ image setImageScaling : NSImageScaleProportionallyDown ];
}

 HB_FUNC( IMGSETSCALEINDEPENDEN )
{
   NSImageView * image = ( NSImageView * ) hb_parnl( 1 );
 
   [ image setImageScaling : NSImageScaleAxesIndependently ];
}

 HB_FUNC( IMGSETSCALEAJUSTRATIO )
{
   NSImageView * image = ( NSImageView * ) hb_parnl( 1 );
 
   [ image setImageScaling :NSImageScaleProportionallyUpOrDown  ];
}
 
Tambien para el toolbar ( sin probar ) :
(nota ) no lo he conseguido probar porque al intentar compilar toolbars.m me da este error :

toolbars.m: In function ‘HB_FUN_TBRCREATE’:
toolbars.m:54: warning: class 'ToolBar' does not implement the 'NSToolbarDelegate' protocol

Code: Select all

HB_FUNC( TBSETMODEICOLBL )
{
 ToolBar * toolbar = ( ToolBar * ) hb_parnl( 1 );
[toolbar setDisplayMode : NSToolbarDisplayModeIconAndLabel   ] ;
}

HB_FUNC( TBSETMODEICO )
{
 ToolBar * toolbar = ( ToolBar * ) hb_parnl( 1 );
[toolbar setDisplayMode : NSToolbarDisplayModeIconOnly   ] ;
}

HB_FUNC( TBSETMODEICOLBL )
{
 ToolBar * toolbar = ( ToolBar * ) hb_parnl( 1 );
[toolbar setDisplayMode : NSToolbarDisplayModeLabelOnly   ] ;
}

HB_FUNC( TBSETMODEDEFAULT )
{
 ToolBar * toolbar = ( ToolBar * ) hb_parnl( 1 );
[toolbar setDisplayMode : NSToolbarDisplayModeDefault  ] ;
}
 
Probablemente se podra realizar una sola función que resuma todas ;-)

Saludos.
Post Reply