cGetFile()

cGetFile()

Postby Carles » Fri Aug 25, 2006 6:26 am

Hi,

Has somebody been able to use the function cGetFile() ?

Regards.
Salutacions, saludos, regards

"...programar es fácil, hacer programas es difícil..."

UT Page -> https://carles9000.github.io/
Forum UT -> https://discord.gg/bq8a9yGMWh
Skype -> https://join.skype.com/cnzQg3Kr1dnk
User avatar
Carles
 
Posts: 1139
Joined: Fri Feb 10, 2006 2:34 pm
Location: Barcelona

Postby Antonio Linares » Fri Aug 25, 2006 6:28 am

Carles,

Its still on our todo list. We would like to fix it, or maybe we could implement one ourselves, but it could get complex.
regards, saludos

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

Postby Carles » Fri Aug 25, 2006 6:34 am

Antonio

Nothing is complex for you :lol:

Regrads
Salutacions, saludos, regards

"...programar es fácil, hacer programas es difícil..."

UT Page -> https://carles9000.github.io/
Forum UT -> https://discord.gg/bq8a9yGMWh
Skype -> https://join.skype.com/cnzQg3Kr1dnk
User avatar
Carles
 
Posts: 1139
Joined: Fri Feb 10, 2006 2:34 pm
Location: Barcelona

Postby Antonio Linares » Fri Aug 25, 2006 9:02 am

Carles,

We are building a cGetFile() of our own. We are going to publish a first prototype asap.
regards, saludos

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

Postby Antonio Linares » Fri Aug 25, 2006 10:15 am

Carles,

Here it is:
Code: Select all  Expand view  RUN
#include "FWCE.ch"

function Main()

   MsgInfo( cGetFile( "*.*", "\" ) )
   
return nil

static function cGetFile( cMask, cPath )   

   local oDlg, oBrw, oBtn, aItems, cFileName := ""

   DEFAULT cMask := "*.*", cPath := "\"
   
   aItems = GetItems( cMask, @cPath )

   DEFINE DIALOG oDlg TITLE "Please select a file" ;
      SIZE 220, 210
   
   @ 0.4, 0.7 LISTBOX oBrw ;
      FIELDS aItems[ oBrw:nAt, 1 ], aItems[ oBrw:nAt, 2 ], aItems[ oBrw:nAt, 3 ],;
             aItems[ oBrw:nAt, 4 ] ;
      HEADERS "Name", "T", "Size", "Date" ;
      COLSIZES  100, 15, 70, 40 ;
      SIZE 100, 82 ;
      ON DBLCLICK SelFile( oBrw, cMask, @cPath, @cFileName, oDlg )

   oBrw:SetArray( aItems )
   oBrw:aJustify = { .f., .f., .t., .f. }
   oBrw:bKeyChar = { | nKey | If( nKey == 13,;
                     ( SelFile( oBrw, cMask, @cPath, @cFileName, oDlg ), oBrw:SetFocus() ),) }
   
   @ 5,  3 BUTTON oBtn PROMPT "Ok" ACTION SelFile( oBrw, cMask, @cPath, @cFileName, oDlg )

   @ 5, 10 BUTTON "Cancel" ACTION oDlg:End()
   
   ACTIVATE DIALOG oDlg CENTERED
   
return cFileName

static function CheckItem( oBrw, cMask, cPath )

   local cItem := Eval( oBrw:bLine )[ 1 ]
   local cType := Eval( oBrw:bLine )[ 2 ]
   local aItems

   if cType == "D"
      if cItem == ".."
         cPath = SubStr( cPath, 1, RAt( "\", cPath ) - 1 )
         cPath = SubStr( cPath, 1, RAt( "\", cPath ) - 1 )
         aItems = GetItems( cMask, cPath += "\" )
      else   
         aItems = GetItems( cMask, cPath += cItem + "\" )
      endif   
      oBrw:SetArray( aItems )
      oBrw:nAt = 1
      oBrw:bLine = { || { aItems[ oBrw:nAt, 1 ], aItems[ oBrw:nAt, 2 ],;
                          aItems[ oBrw:nAt, 3 ], aItems[ oBrw:nAt, 4 ] } }
      oBrw:GoTop()
      oBrw:Refresh()
   endif   

return nil

static function GetItems( cMask, cPath )

   local aInfo := Directory( cPath + cMask, "D" )
   local aItems := {}, n
   
   if Len( cPath ) > 1
      AAdd( aItems, { "..", "D", "", "" } )
   endif   

   for n = 1 to Len( aInfo )
      if "D" $ aInfo[ n ][ 5 ]
         AAdd( aItems, { aInfo[ n ][ 1 ], "D", aInfo[ n ][ 2 ],;
               DToC( aInfo[ n ][ 3 ] ) } )
      endif   
   next   
   for n = 1 to Len( aInfo )
      if ! "D" $ aInfo[ n ][ 5 ]
         AAdd( aItems, { aInfo[ n ][ 1 ], "F", Str( aInfo[ n ][ 2 ] ),;
               DToC( aInfo[ n ][ 3 ] ) } )
      endif   
   next   

return aItems

static function SelFile( oBrw, cMask, cPath, cFileName, oDlg )

   if Eval( oBrw:bLine )[ 2 ] == "F"
      cFileName = cPath + Eval( oBrw:bLine )[ 1 ]
      oDlg:End()
   else
      CheckItem( oBrw, cMask, @cPath )
   endif
   
return nil         
regards, saludos

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

Postby Antonio Linares » Sat Aug 26, 2006 6:12 am

Carles,

Using object oriented code, it gets better structured:
Code: Select all  Expand view  RUN
// FWPPC own function cGetFile() implementation

#include "FWCE.ch"

function Main()

   MsgInfo( cGetFile( "*.*", "\" ) )
   
return nil

static function cGetFile( cMask, cPath )   

   local oGetFile := TGetFile():New( cMask, cPath )
   
return oGetFile:cFileName

CLASS TGetFile

   DATA  oDlg
   DATA  oBrw
   DATA  cMask
   DATA  cPath
   DATA  cFileName
   DATA  aItems
   
   METHOD New( cMask, cPath )
   METHOD CheckItem()
   METHOD GetItems()
   METHOD SelItem()
   
ENDCLASS   

METHOD New( cMask, cPath ) CLASS TGetFile

   DEFAULT cMask := "*.*", cPath := "\"
   
   ::cMask = cMask
   ::cPath = cPath
   ::cFileName = ""
   
   ::GetItems()
   
   DEFINE DIALOG ::oDlg TITLE "Please select a file" ;
      SIZE 220, 210
   
   @ 0.4, 0.7 LISTBOX ::oBrw ;
      FIELDS ::aItems[ ::oBrw:nAt, 1 ], ::aItems[ ::oBrw:nAt, 2 ],;
             ::aItems[ ::oBrw:nAt, 3 ], ::aItems[ ::oBrw:nAt, 4 ] ;
      HEADERS "Name", "T", "Size", "Date" ;
      COLSIZES  100, 15, 70, 40 ;
      SIZE 100, 82 ;
      ON DBLCLICK ::SelItem()

   ::oBrw:SetArray( ::aItems )
   ::oBrw:aJustify = { .f., .f., .t., .f. }
   ::oBrw:bKeyChar = { | nKey | If( nKey == 13, ( ::SelItem(), oBrw:SetFocus() ),) }
   
   @ 5,  3 BUTTON oBtn PROMPT "Ok" ACTION ::SelItem()

   @ 5, 10 BUTTON "Cancel" ACTION ::oDlg:End()
   
   ACTIVATE DIALOG ::oDlg CENTERED
     
return Self     

METHOD CheckItem() CLASS TGetFile

   local cItem := Eval( ::oBrw:bLine )[ 1 ]
   local cType := Eval( ::oBrw:bLine )[ 2 ]

   if cType == "D"
      if cItem == ".."
         ::cPath = SubStr( ::cPath, 1, RAt( "\", ::cPath ) - 1 )
         ::cPath = SubStr( ::cPath, 1, RAt( "\", ::cPath ) )
         ::GetItems()
      else   
         ::cPath += cItem + "\"
         ::GetItems()
      endif   
      ::oBrw:SetArray( ::aItems )
      ::oBrw:nAt = 1
      ::oBrw:bLine = { || { ::aItems[ ::oBrw:nAt, 1 ], ::aItems[ ::oBrw:nAt, 2 ],;
                            ::aItems[ ::oBrw:nAt, 3 ], ::aItems[ ::oBrw:nAt, 4 ] } }
      ::oBrw:GoTop()
      ::oBrw:Refresh()
   endif   

return nil

METHOD GetItems() CLASS TGetFile

   local aInfo := Directory( ::cPath + ::cMask, "D" ), n
   
   ::aItems = {}
     
   if Len( ::cPath ) > 1
      AAdd( ::aItems, { "..", "D", "", "" } )
   endif   

   for n = 1 to Len( aInfo )
      if "D" $ aInfo[ n ][ 5 ]
         AAdd( ::aItems, { aInfo[ n ][ 1 ], "D", aInfo[ n ][ 2 ],;
               DToC( aInfo[ n ][ 3 ] ) } )
      endif   
   next   
   for n = 1 to Len( aInfo )
      if ! "D" $ aInfo[ n ][ 5 ]
         AAdd( ::aItems, { aInfo[ n ][ 1 ], "F", Str( aInfo[ n ][ 2 ] ),;
               DToC( aInfo[ n ][ 3 ] ) } )
      endif   
   next   

return nil

METHOD SelItem() CLASS TGetFile

   if Eval( ::oBrw:bLine )[ 2 ] == "F"
      ::cFileName = ::cPath + Eval( ::oBrw:bLine )[ 1 ]
      ::oDlg:End()
   else
      ::CheckItem()
   endif
   
return nil         
regards, saludos

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


Return to FiveWin for Pocket PC

Who is online

Users browsing this forum: No registered users and 38 guests