FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveMac / FivePhone (iPhone, iPad) Primera consulta sobre fiveMac
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: Primera consulta sobre fiveMac
Posted: Wed Jun 30, 2010 06:00 PM

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
Posts: 1516
Joined: Thu May 27, 2010 02:06 PM
Re: Primera consulta sobre fiveMac
Posted: Wed Jun 30, 2010 09:51 PM
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.


Saludos.
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: Primera consulta sobre fiveMac
Posted: Wed Jun 30, 2010 10:28 PM

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
Posts: 1516
Joined: Thu May 27, 2010 02:06 PM
Re: Primera consulta sobre fiveMac
Posted: Thu Jul 01, 2010 03:32 PM
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 (fw): Select all Collapse
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 ] ];
}
Posts: 1516
Joined: Thu May 27, 2010 02:06 PM
Re: Primera consulta sobre fiveMac
Posted: Thu Jul 01, 2010 06:51 PM
He estado corrigiendo el archivo makefile que viene en la distrbución con los nombres correctos de las librerias para que funcione . .
Code (fw): Select all Collapse
# 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 $<
Posts: 1516
Joined: Thu May 27, 2010 02:06 PM
Re: Primera consulta sobre fiveMac
Posted: Thu Jul 01, 2010 07:46 PM
una captura de browse funcionando con la dbf dentro del contenedor y con su propio icono tambien en el contenedor .

Saludos.
Posts: 1516
Joined: Thu May 27, 2010 02:06 PM
Re: Primera consulta sobre fiveMac
Posted: Thu Jul 01, 2010 08:57 PM
Continuo avanzando con el tema del contenedor ... he conseguido que el ejemplo testimg encuentre la imagen dentro de la carpetas Resources del contenedor ...
los cambios son los siguientes :
en el archivo fivemac.ch
esto es algo provisional y rapido :
Code (fw): Select all Collapse
#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 (fw): Select all Collapse
  METHOD SetResfile(cFileName) INLINE ImgSetresFile( ::hWnd , cFileName )


modificado metodo :
Code (fw): Select all Collapse
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 (fw): Select all Collapse
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 (fw): Select all Collapse
HB_FUNC( RESPATH )
{
        NSString *bundlePath = [[NSBundle mainBundle] resourcePath];
        hb_retc( [ bundlePath cStringUsingEncoding : NSASCIIStringEncoding ] );
}


Y con esta otra el path de la aplicacion :

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


:-))
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: Primera consulta sobre fiveMac
Posted: Thu Jul 01, 2010 09:45 PM
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
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: Primera consulta sobre fiveMac
Posted: Thu Jul 01, 2010 09:48 PM
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
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: Primera consulta sobre fiveMac
Posted: Thu Jul 01, 2010 11:27 PM

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
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: Primera consulta sobre fiveMac
Posted: Thu Jul 01, 2010 11:46 PM
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 (fw): Select all Collapse
#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
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: Primera consulta sobre fiveMac
Posted: Fri Jul 02, 2010 12:01 AM

Manuel,

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

Gracias!

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 1516
Joined: Thu May 27, 2010 02:06 PM
Re: Primera consulta sobre fiveMac
Posted: Fri Jul 02, 2010 05:57 AM
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 (fw): Select all Collapse
 local cpath:=apppath()
   USE  ( cpath+"/Test" )

Adjunto el ejectutable :
http://rapidshare.com/files/404424172/browse.zip.html
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: Primera consulta sobre fiveMac
Posted: Fri Jul 02, 2010 07:01 AM

Manuel,

Gracias! :-)

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 1516
Joined: Thu May 27, 2010 02:06 PM
Re: Primera consulta sobre fiveMac
Posted: Fri Jul 02, 2010 10:20 AM
Antonio la funcion apppath() creo que se puede simplificar asi ( FUNCIONA ) :
Code (fw): Select all Collapse
 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 (fw): Select all Collapse
 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 (fw): Select all Collapse
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.