New free REDEFINE.prg utility

New free REDEFINE.prg utility

Postby Antonio Linares » Sun Jul 13, 2014 2:07 pm

I am aware that using FWH the most hard part is to code the REDEFINEs :-)

Recently I was chatting with Ariel and made me realize that such difficulty is still there, so today that I got some free time, I wrote this REDEFINE.prg utility that writes the REDEFINEs for you :-)

It is not finished yet, we may finish it in the next days, but you can already start using it :-)

redefine.prg
Code: Select all  Expand view
// Automatic REDEFINEs generator

#include "FiveWin.ch"

static cRCSrcCode, aDialogs := {}

function Main()

   local oDlg, oGet, cRCFileName := Space( 250 )
   local oLbx, cDlgName := Space( 50 ), oMemo1, cCode := ""
   local oFont, oMemo2, cPrg := ""

   SetDlgGradient( { { 1, RGB( 199, 216, 237 ), RGB( 237, 242, 248 ) } } )
   
   DEFINE FONT oFont NAME "Courier New" SIZE 0, -14
   
   DEFINE DIALOG oDlg TITLE "RCs REDEFINEs builder" ;
      SIZE 900, 700

   @ 0.7, 1.5 SAY "RC filename:" OF oDlg SIZE 80, 9
   
   @ 0.8, 6 GET oGet VAR cRCFileName OF oDlg SIZE 200, 12 ;
      ACTION ( cRCFileName := cGetFile( "*.rc", "Please select a RC file" ),;
               oGet:oBtn:Refresh(), oGet:SetFocus(),;
               aDialogs := {}, ListDialogs( cRCFileName, oLbx ) )

   @ 2, 1.5 SAY "Dialogs in the RC file:" OF oDlg SIZE 80, 9

   @ 3, 1 LISTBOX oLbx VAR cDlgName ITEMS {} OF oDlg SIZE 80, 164 ;
      ON CHANGE ShowCode( cDlgName, oMemoRC, oMemoPrg )

   @ 2, 16.4 SAY "RC dialog source:" OF oDlg SIZE 80, 9

   @ 3.3, 12 GET oMemoRC VAR cCode MEMO OF oDlg SIZE 345, 157 ;
      FONT oFont HSCROLL

   @ 16, 1 GET oMemoPrg VAR cPrg MEMO OF oDlg SIZE 433, 135 ;
      FONT oFont HSCROLL

   ACTIVATE DIALOG oDlg CENTERED

   oFont:End()

return nil

function ListDialogs( cRCFileName, oLbx )

   local n, cDlgName, lDone

   if ! File( cRCFileName )
      MsgAlert( cRCFileName + " does not exist" )
      return nil
   endif  
   
   cRCSrcCode = MemoRead( cRCFileName )
   oLbx:Reset()
   
   for n = 1 to MLCount( cRCSrcCode )
      cLine = MemoLine( cRCSrcCode,, n )
      SysRefresh()
      if ! SubStr( cLine, 1, 2 ) $ "//,/*"
         if Upper( StrToken( MemoLine( cRCSrcCode,, n ), 2 ) ) == "DIALOG"
            oLbx:Add( cDlgName := StrToken( MemoLine( cRCSrcCode,, n ), 1 ) )
            AAdd( aDialogs, { cDlgName, { cLine } } )
            lDone = .F.
         else
            if ! Empty( aDialogs )
               if Len( AllTrim( cLine ) ) == 1 .and. SubStr( cLine, 1, 1 ) == "}"
                  AAdd( ATail( aDialogs )[ 2 ], "}" )  
                  lDone = .T.
               else  
                  if ! lDone
                     AAdd( ATail( aDialogs )[ 2 ], cLine )  
                  endif  
               endif  
            endif  
         endif
      endif  
   next
   
   oLbx:GoTop()
   
return nil        

function ShowCode( cDlgName, oMemoRC, oMemoPrg )

   local nAt := AScan( aDialogs, { | aDlg | aDlg[ 1 ] == cDlgName } )
   
   if nAt != 0
      oMemoRC:SetText( ArrayToText( aDialogs[ nAt ][ 2 ] ) )
      oMemoPrg:SetText( RcToPrg( cDlgName, aDialogs[ nAt ][ 2 ] ) )
   endif  
   
return nil  

function ArrayToText( aArray )

   local n, cText := ""
   
   for n = 1 to Len( aArray )
      cText += aArray[ n ] + CRLF
   next
   
return cText

function RcToPrg( cDlgName, aRCSource )

   local cFuncName := "function " + cDlgName + "()" + CRLF + CRLF
   local n, cCode := "", aTokens, cToken
   local nSay := 0, nGet := 0, cVars := "   local "
   
   for n = 1 to Len( aRCSource )
      aTokens = hb_ATokens( aRCSource[ n ] )
      cToken = AllTrim( aTokens[ 1 ] )
      // MsgInfo( aTokens[ 1 ] )
      do case
         case cToken == "EDITTEXT"
            cCode += "   REDEFINE GET oGet" + AllTrim( Str( ++nGet ) ) + ;
                     " ID " + StrTran( aTokens[ 2 ], ",", "" ) + ;
                     " OF oDlg" + CRLF + CRLF
            cVars += "oGet" + AllTrim( Str( nGet ) ) + ", "      
                     
         case cToken == "LTEXT"
            cCode += "   REDEFINE SAY oSay" + AllTrim( Str( ++nSay ) ) + ;
                     " ID " + StrTran( aTokens[ 3 ], ",", "" ) + ;
                     " OF oDlg" + " // " + StrTran( aTokens[ 2 ], ",", "" ) + CRLF + CRLF
            cVars += "oSay" + AllTrim( Str( nSay ) ) + ", "      
      endcase
     
   next
   
return cFuncName + cVars + CRLF + CRLF + cCode + "return nil"            


redefine.rc
Code: Select all  Expand view
ico  ICON "./../ICONS/fivewin.ico"

#ifdef __FLAT__
  1 24 "WinXP/WindowsXP.Manifest"
#endif

#ifdef __64__
  1 24 "WinXP/WindowsXP.Manifest64"
#endif


Image
regards, saludos

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

Re: New free REDEFINE.prg utility

Postby Antonio Linares » Sun Jul 13, 2014 2:22 pm

Enhanced version that generates the DEFINE DIALOG and the ACTIVATE DIALOG.

redefine.prg
Code: Select all  Expand view
// Automatic REDEFINEs generator

#include "FiveWin.ch"

static cRCSrcCode, aDialogs := {}

function Main()

   local oDlg, oGet, cRCFileName := Space( 250 )
   local oLbx, cDlgName := Space( 50 ), oMemo1, cCode := ""
   local oFont, oMemo2, cPrg := ""

   SetDlgGradient( { { 1, RGB( 199, 216, 237 ), RGB( 237, 242, 248 ) } } )
   
   DEFINE FONT oFont NAME "Courier New" SIZE 0, -14
   
   DEFINE DIALOG oDlg TITLE "RCs REDEFINEs builder" ;
      SIZE 900, 700

   @ 0.7, 1.5 SAY "RC filename:" OF oDlg SIZE 80, 9
   
   @ 0.8, 6 GET oGet VAR cRCFileName OF oDlg SIZE 200, 12 ;
      ACTION ( cRCFileName := cGetFile( "*.rc", "Please select a RC file" ),;
               oGet:oBtn:Refresh(), oGet:SetFocus(),;
               aDialogs := {}, ListDialogs( cRCFileName, oLbx ) )

   @ 2, 1.5 SAY "Dialogs in the RC file:" OF oDlg SIZE 80, 9

   @ 3, 1 LISTBOX oLbx VAR cDlgName ITEMS {} OF oDlg SIZE 80, 164 ;
      ON CHANGE ShowCode( cDlgName, oMemoRC, oMemoPrg )

   @ 2, 16.4 SAY "RC dialog source:" OF oDlg SIZE 80, 9

   @ 3.3, 12 GET oMemoRC VAR cCode MEMO OF oDlg SIZE 345, 157 ;
      FONT oFont HSCROLL

   @ 16, 1 GET oMemoPrg VAR cPrg MEMO OF oDlg SIZE 433, 135 ;
      FONT oFont HSCROLL

   ACTIVATE DIALOG oDlg CENTERED

   oFont:End()

return nil

function ListDialogs( cRCFileName, oLbx )

   local n, cDlgName, lDone

   if ! File( cRCFileName )
      MsgAlert( cRCFileName + " does not exist" )
      return nil
   endif  
   
   cRCSrcCode = MemoRead( cRCFileName )
   oLbx:Reset()
   
   for n = 1 to MLCount( cRCSrcCode )
      cLine = MemoLine( cRCSrcCode,, n )
      SysRefresh()
      if ! SubStr( cLine, 1, 2 ) $ "//,/*"
         if Upper( StrToken( MemoLine( cRCSrcCode,, n ), 2 ) ) == "DIALOG"
            oLbx:Add( cDlgName := StrToken( MemoLine( cRCSrcCode,, n ), 1 ) )
            AAdd( aDialogs, { cDlgName, { cLine } } )
            lDone = .F.
         else
            if ! Empty( aDialogs )
               if Len( AllTrim( cLine ) ) == 1 .and. SubStr( cLine, 1, 1 ) == "}"
                  AAdd( ATail( aDialogs )[ 2 ], "}" )  
                  lDone = .T.
               else  
                  if ! lDone
                     AAdd( ATail( aDialogs )[ 2 ], cLine )  
                  endif  
               endif  
            endif  
         endif
      endif  
   next
   
   oLbx:GoTop()
   
return nil        

function ShowCode( cDlgName, oMemoRC, oMemoPrg )

   local nAt := AScan( aDialogs, { | aDlg | aDlg[ 1 ] == cDlgName } )
   
   if nAt != 0
      oMemoRC:SetText( ArrayToText( aDialogs[ nAt ][ 2 ] ) )
      oMemoPrg:SetText( RcToPrg( cDlgName, aDialogs[ nAt ][ 2 ] ) )
   endif  
   
return nil  

function ArrayToText( aArray )

   local n, cText := ""
   
   for n = 1 to Len( aArray )
      cText += aArray[ n ] + CRLF
   next
   
return cText

function RcToPrg( cDlgName, aRCSource )

   local cFuncName := "function " + cDlgName + "()" + CRLF + CRLF
   local n, cCode := "", aTokens, cToken
   local nSay := 0, nGet := 0, cVars := "   local "
   local cDlgDefine := CRLF + CRLF + "   DEFINE DIALOG oDlg RESOURCE " + '"' + ;
                       cDlgName + '"'
   local cDlgActivate := "   ACTIVATE DIALOG oDlg CENTERED" + CRLF + CRLF                    
   
   for n = 1 to Len( aRCSource )
      aTokens = hb_ATokens( aRCSource[ n ] )
      cToken = AllTrim( aTokens[ 1 ] )
      // MsgInfo( aTokens[ 1 ] )
      do case
         case cToken == "EDITTEXT"
            cCode += "   REDEFINE GET oGet" + AllTrim( Str( ++nGet ) ) + ;
                     " ID " + StrTran( aTokens[ 2 ], ",", "" ) + ;
                     " OF oDlg" + CRLF + CRLF
            cVars += "oGet" + AllTrim( Str( nGet ) ) + ", "      
                     
         case cToken == "LTEXT"
            cCode += "   REDEFINE SAY oSay" + AllTrim( Str( ++nSay ) ) + ;
                     " ID " + StrTran( aTokens[ 3 ], ",", "" ) + ;
                     " OF oDlg" + " // " + StrTran( aTokens[ 2 ], ",", "" ) + CRLF + CRLF
            cVars += "oSay" + AllTrim( Str( nSay ) ) + ", "      
      endcase
     
   next
   
return cFuncName + cVars + cDlgDefine + CRLF + CRLF + cCode + ;
       cDlgActivate + "return nil"            
regards, saludos

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

Re: New free REDEFINE.prg utility

Postby Antonio Linares » Sun Jul 13, 2014 6:36 pm

Enhanced version with proper support for Push Buttons:

redefine.prg
Code: Select all  Expand view
// Automatic REDEFINEs generator

#include "FiveWin.ch"

static cRCSrcCode, aDialogs := {}

//----------------------------------------------------------------------------//

function Main()

   local oDlg, oGet, cRCFileName := Space( 250 )
   local oLbx, cDlgName := Space( 50 ), oMemo1, cCode := ""
   local oFont, oMemo2, cPrg := ""

   SetDlgGradient( { { 1, RGB( 199, 216, 237 ), RGB( 237, 242, 248 ) } } )
   
   DEFINE FONT oFont NAME "Courier New" SIZE 0, -14
   
   DEFINE DIALOG oDlg TITLE "RCs REDEFINEs builder" ;
      SIZE 900, 700

   @ 0.7, 1.5 SAY "RC filename:" OF oDlg SIZE 80, 9
   
   @ 0.8, 6 GET oGet VAR cRCFileName OF oDlg SIZE 200, 12 ;
      ACTION ( cRCFileName := cGetFile( "*.rc", "Please select a RC file" ),;
               oGet:oBtn:Refresh(), oGet:SetFocus(),;
               aDialogs := {}, ListDialogs( cRCFileName, oLbx ) )

   @ 2, 1.5 SAY "Dialogs in the RC file:" OF oDlg SIZE 80, 9

   @ 3, 1 LISTBOX oLbx VAR cDlgName ITEMS {} OF oDlg SIZE 80, 164 ;
      ON CHANGE ShowCode( cDlgName, oMemoRC, oMemoPrg )

   @ 2, 16.4 SAY "RC dialog source:" OF oDlg SIZE 80, 9

   @ 3.3, 12 GET oMemoRC VAR cCode MEMO OF oDlg SIZE 345, 157 ;
      FONT oFont HSCROLL

   @ 16, 1 GET oMemoPrg VAR cPrg MEMO OF oDlg SIZE 433, 135 ;
      FONT oFont HSCROLL

   ACTIVATE DIALOG oDlg CENTERED

   oFont:End()

return nil

//----------------------------------------------------------------------------//

function ListDialogs( cRCFileName, oLbx )

   local n, cDlgName, lDone

   if ! File( cRCFileName )
      MsgAlert( cRCFileName + " does not exist" )
      return nil
   endif  
   
   cRCSrcCode = MemoRead( cRCFileName )
   oLbx:Reset()
   
   for n = 1 to MLCount( cRCSrcCode )
      cLine = MemoLine( cRCSrcCode,, n )
      SysRefresh()
      if ! SubStr( cLine, 1, 2 ) $ "//,/*"
         if Upper( StrToken( MemoLine( cRCSrcCode,, n ), 2 ) ) == "DIALOG"
            oLbx:Add( cDlgName := StrToken( MemoLine( cRCSrcCode,, n ), 1 ) )
            AAdd( aDialogs, { cDlgName, { cLine } } )
            lDone = .F.
         else
            if ! Empty( aDialogs )
               if Len( AllTrim( cLine ) ) == 1 .and. SubStr( cLine, 1, 1 ) == "}"
                  AAdd( ATail( aDialogs )[ 2 ], "}" )  
                  lDone = .T.
               else  
                  if ! lDone
                     AAdd( ATail( aDialogs )[ 2 ], cLine )  
                  endif  
               endif  
            endif  
         endif
      endif  
   next
   
   oLbx:GoTop()
   
return nil        

//----------------------------------------------------------------------------//

function ShowCode( cDlgName, oMemoRC, oMemoPrg )

   local nAt := AScan( aDialogs, { | aDlg | aDlg[ 1 ] == cDlgName } )
   
   if nAt != 0
      oMemoRC:SetText( ArrayToText( aDialogs[ nAt ][ 2 ] ) )
      oMemoPrg:SetText( RcToPrg( cDlgName, aDialogs[ nAt ][ 2 ] ) )
   endif  
   
return nil  

//----------------------------------------------------------------------------//

function ArrayToText( aArray )

   local n, cText := ""
   
   for n = 1 to Len( aArray )
      cText += aArray[ n ] + CRLF
   next
   
return cText

//----------------------------------------------------------------------------//

function RcToPrg( cDlgName, aRCSource )

   local cFuncName := "function " + cDlgName + "()" + CRLF + CRLF
   local n, cCode := "", aTokens, cToken
   local nSay := 0, nGet := 0, nBtn := 0
   local cVars := "   local "
   local cDlgDefine := CRLF + CRLF + "   DEFINE DIALOG oDlg RESOURCE " + '"' + ;
                       cDlgName + '"'
   local cDlgActivate := "   ACTIVATE DIALOG oDlg CENTERED" + CRLF + CRLF                    
   
   for n = 1 to Len( aRCSource )
      aTokens = hb_ATokens( aRCSource[ n ] )
      cToken = AllTrim( aTokens[ 1 ] )
      // MsgInfo( aTokens[ 1 ] )
      do case
         case cToken == "EDITTEXT"
            cCode += "   REDEFINE GET oGet" + AllTrim( Str( ++nGet ) ) + ;
                     " ID " + StrTran( aTokens[ 2 ], ",", "" ) + ;
                     " OF oDlg" + CRLF + CRLF
            cVars += "oGet" + AllTrim( Str( nGet ) ) + ", "      
                     
         case cToken == "LTEXT"
            cCode += "   REDEFINE SAY oSay" + AllTrim( Str( ++nSay ) ) + ;
                     " ID " + StrTran( aTokens[ 3 ], ",", "" ) + ;
                     " OF oDlg" + " // " + StrTran( aTokens[ 2 ], ",", "" ) + CRLF + CRLF
            cVars += "oSay" + AllTrim( Str( nSay ) ) + ", "      

         case cToken == "PUSHBUTTON"
            // MsgInfo( aRcSource[ n ] )
            cCode += "   REDEFINE BUTTON oBtn" + AllTrim( Str( ++nBtn ) ) + ;
                     " ID " + AllTrim( StrToken( aRcSource[ n ], 2, ',' ) ) + ;
                     " OF oDlg ; // " + ;
                     '"' + StrToken( aRcSource[ n ], 2, '"' ) + '"' + CRLF + ;
                     "      ACTION MsgInfo( " + '"PushButton ' + ;
                     AllTrim( Str( nBtn ) ) + '"' + " )" + CRLF + CRLF
            cVars += "oBtn" + AllTrim( Str( nBtn ) ) + ", "      
      endcase
     
   next
   
   cVars = SubStr( cVars, 1, Len( cVars ) - 2 )
   
return cFuncName + cVars + cDlgDefine + CRLF + CRLF + cCode + ;
       cDlgActivate + "return nil"            
       
//----------------------------------------------------------------------------//      


This code has been automatically generated by this utility, see how usefull it is :-)

Code: Select all  Expand view
  REDEFINE BUTTON oBtn5 ID 4380 OF oDlg ; // "&Top"
      ACTION MsgInfo( "PushButton 5" )

   REDEFINE BUTTON oBtn6 ID 4390 OF oDlg ; // "&Prev"
      ACTION MsgInfo( "PushButton 6" )

   REDEFINE BUTTON oBtn7 ID 4400 OF oDlg ; // "&Next"
      ACTION MsgInfo( "PushButton 7" )

   REDEFINE BUTTON oBtn8 ID 4410 OF oDlg ; // "&Bottom"
      ACTION MsgInfo( "PushButton 8" )
regards, saludos

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

Re: New free REDEFINE.prg utility

Postby Antonio Linares » Mon Jul 14, 2014 1:43 am

Enhanced version (local variables grouped according the type of objects):

redefine.prg
Code: Select all  Expand view
// Automatic REDEFINEs generator

#include "FiveWin.ch"

static cRCSrcCode, aDialogs := {}

//----------------------------------------------------------------------------//

function Main()

   local oDlg, oGet, cRCFileName := Space( 250 )
   local oLbx, cDlgName := Space( 50 ), oMemoRC, cCode := ""
   local oFont, oMemoPrg, cPrg := ""

   SetDlgGradient( { { 1, RGB( 199, 216, 237 ), RGB( 237, 242, 248 ) } } )
   
   DEFINE FONT oFont NAME "Courier New" SIZE 0, -14
   
   DEFINE DIALOG oDlg TITLE "RCs REDEFINEs builder" ;
      SIZE 900, 700

   @ 0.7, 1.5 SAY "RC filename:" OF oDlg SIZE 80, 9
   
   @ 0.8, 6 GET oGet VAR cRCFileName OF oDlg SIZE 200, 12 ;
      ACTION ( cRCFileName := cGetFile( "*.rc", "Please select a RC file" ),;
               oGet:oBtn:Refresh(), oGet:SetFocus(),;
               aDialogs := {}, ListDialogs( cRCFileName, oLbx ) )

   @ 2, 1.5 SAY "Dialogs in the RC file:" OF oDlg SIZE 80, 9

   @ 3, 1 LISTBOX oLbx VAR cDlgName ITEMS {} OF oDlg SIZE 80, 164 ;
      ON CHANGE ShowCode( cDlgName, oMemoRC, oMemoPrg )

   @ 2, 16.4 SAY "RC dialog source:" OF oDlg SIZE 80, 9

   @ 3.3, 12 GET oMemoRC VAR cCode MEMO OF oDlg SIZE 345, 157 ;
      FONT oFont HSCROLL

   @ 16, 1 GET oMemoPrg VAR cPrg MEMO OF oDlg SIZE 433, 135 ;
      FONT oFont HSCROLL

   ACTIVATE DIALOG oDlg CENTERED

   oFont:End()

return nil

//----------------------------------------------------------------------------//

function ListDialogs( cRCFileName, oLbx )

   local n, cDlgName, lDone, cLine

   if ! File( cRCFileName )
      MsgAlert( cRCFileName + " does not exist" )
      return nil
   endif  
   
   cRCSrcCode = MemoRead( cRCFileName )
   oLbx:Reset()
   
   for n = 1 to MLCount( cRCSrcCode )
      cLine = MemoLine( cRCSrcCode,, n )
      SysRefresh()
      if ! SubStr( cLine, 1, 2 ) $ "//,/*"
         if Upper( StrToken( MemoLine( cRCSrcCode,, n ), 2 ) ) == "DIALOG"
            oLbx:Add( cDlgName := StrToken( MemoLine( cRCSrcCode,, n ), 1 ) )
            AAdd( aDialogs, { cDlgName, { cLine } } )
            lDone = .F.
         else
            if ! Empty( aDialogs )
               if Len( AllTrim( cLine ) ) == 1 .and. SubStr( cLine, 1, 1 ) == "}"
                  AAdd( ATail( aDialogs )[ 2 ], "}" )  
                  lDone = .T.
               else  
                  if ! lDone
                     AAdd( ATail( aDialogs )[ 2 ], cLine )  
                  endif  
               endif  
            endif  
         endif
      endif  
   next
   
   oLbx:GoTop()
   
return nil        

//----------------------------------------------------------------------------//

function ShowCode( cDlgName, oMemoRC, oMemoPrg )

   local nAt := AScan( aDialogs, { | aDlg | aDlg[ 1 ] == cDlgName } )
   
   if nAt != 0
      oMemoRC:SetText( ArrayToText( aDialogs[ nAt ][ 2 ] ) )
      oMemoPrg:SetText( RcToPrg( cDlgName, aDialogs[ nAt ][ 2 ] ) )
   endif  
   
return nil  

//----------------------------------------------------------------------------//

function ArrayToText( aArray )

   local n, cText := ""
   
   for n = 1 to Len( aArray )
      cText += aArray[ n ] + CRLF
   next
   
return cText

//----------------------------------------------------------------------------//

function RcToPrg( cDlgName, aRCSource )

   local cFuncName := "function " + cDlgName + "()" + CRLF + CRLF
   local n, cCode := "", aTokens, cToken
   local nSay := 0, nGet := 0, nBtn := 0
   local cVarsSays := "   local "
   local cVarsGets := "   local "
   local cVarsButtons := "   local "
   local cDlgDefine := "   DEFINE DIALOG oDlg RESOURCE " + '"' + ;
                       cDlgName + '"'
   local cId                  
   local cDlgActivate := "   ACTIVATE DIALOG oDlg CENTERED" + CRLF + CRLF
   
   for n = 1 to Len( aRCSource )
      aTokens = hb_ATokens( aRCSource[ n ] )
      cToken = AllTrim( aTokens[ 1 ] )
      do case
         case cToken == "EDITTEXT"
            cId = AllTrim( StrTran( aTokens[ 2 ], ",", "" ) )
            cCode += "   REDEFINE GET oGet" + AllTrim( Str( ++nGet ) ) + ;
                     " ID " + cId + " OF oDlg" + CRLF + CRLF
            cVarsGets += "oGet" + AllTrim( Str( nGet ) ) + ", "      
                     
                     
         case cToken == "LTEXT"
            cId = AllTrim( StrToken( aRCSource[ n ], 2, ',' ) )
            if ! cId $ "0,-1" // We don't redefine 0 and -1 IDs
               cCode += "   REDEFINE SAY oSay" + AllTrim( Str( ++nSay ) ) + ;
                        " ID " + cId + " OF oDlg" + " // " + ;
                        StrTran( aTokens[ 2 ], ",", "" ) + CRLF + CRLF
               cVarsSays += "oSay" + AllTrim( Str( nSay ) ) + ", "      
            endif  

         case cToken == "PUSHBUTTON"
            cId = AllTrim( StrToken( aRcSource[ n ], 2, ',' ) )
            cCode += "   REDEFINE BUTTON oBtn" + AllTrim( Str( ++nBtn ) ) + ;
                     " ID " + cId + " OF oDlg ; // " + ;
                     '"' + StrToken( aRcSource[ n ], 2, '"' ) + '"' + CRLF + ;
                     "      ACTION MsgInfo( " + ;
                     '"' + StrToken( aRcSource[ n ], 2, '"' ) + '"' + " )" + ;
                     CRLF + CRLF
            cVarsButtons += "oBtn" + AllTrim( Str( nBtn ) ) + ", "      
      endcase
     
   next
   
   if Len( cVarsSays ) > Len( "   local " )
      cVarsSays = SubStr( cVarsSays, 1, Len( cVarsSays ) - 2 )
   else
      cVarsSays = ""
   endif
   
   if Len( cVarsGets ) > Len( "   local " )      
      cVarsGets = SubStr( cVarsGets, 1, Len( cVarsGets ) - 2 )
   else
      cVarsGets = ""
   endif
   
   if Len( cVarsButtons ) > Len( "   local " )
      cVarsButtons = SubStr( cVarsButtons, 1, Len( cVarsButtons ) - 2 )
   else  
      cVarsButtons = ""
   endif
         
return cFuncName + ;
       If( ! Empty( cVarsSays ), cVarsSays + CRLF, "" ) + ;
       If( ! Empty( cvarsGets ), cVarsGets + CRLF, "" ) + ;
       If( ! Empty( cVarsButtons ), cVarsButtons + CRLF, "" ) + ;
       If( ! Empty( cVarsSays ) .or. ! Empty( cVarsGets ) .or. ;
           ! Empty( cVarsButtons ), CRLF, "" ) + cDlgDefine + CRLF + ;
       CRLF + cCode + ;
       cDlgActivate + "return nil"            
       
//----------------------------------------------------------------------------//      


Image
regards, saludos

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

Re: New free REDEFINE.prg utility

Postby Kleyber » Mon Jul 14, 2014 12:19 pm

Antonio,

Fantastic!!! It will help me a lot!
Kleyber Derick

FWH / xHb / xDevStudio / SQLLIB
User avatar
Kleyber
 
Posts: 581
Joined: Tue Oct 11, 2005 11:28 am
Location: São Luiz, Brasil

Re: New free REDEFINE.prg utility

Postby Antonio Linares » Mon Jul 14, 2014 4:08 pm

Kleyber,

yes, it seems to be very usefull :-)

And surely it will improve very much as its source code is really simple, so when some more users realize its power, surely it will grow much more :-)
regards, saludos

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

Re: New free REDEFINE.prg utility

Postby Antonio Linares » Mon Jul 14, 2014 4:57 pm

New version with ListBoxes support and othe enhancements:

redefine.prg
Code: Select all  Expand view
// Automatic REDEFINEs generator

#include "FiveWin.ch"

static cRCSrcCode, aDialogs := {}

//----------------------------------------------------------------------------//

function Main()

   local oDlg, oGet, cRCFileName := Space( 250 )
   local oLbx, cDlgName := Space( 50 ), oMemoRC, cCode := ""
   local oFont, oMemoPrg, cPrg := ""

   SetDlgGradient( { { 1, RGB( 199, 216, 237 ), RGB( 237, 242, 248 ) } } )
   
   DEFINE FONT oFont NAME "Courier New" SIZE 0, -14
   
   DEFINE DIALOG oDlg TITLE "RCs REDEFINEs builder" ;
      SIZE 900, 700

   @ 0.7, 1.5 SAY "RC filename:" OF oDlg SIZE 80, 9
   
   @ 0.8, 6 GET oGet VAR cRCFileName OF oDlg SIZE 200, 12 ;
      ACTION ( cRCFileName := cGetFile( "*.rc", "Please select a RC file" ),;
               oGet:oBtn:Refresh(), oGet:SetFocus(),;
               aDialogs := {}, ListDialogs( cRCFileName, oLbx ) )

   @ 2, 1.5 SAY "Dialogs in the RC file:" OF oDlg SIZE 80, 9

   @ 3, 1 LISTBOX oLbx VAR cDlgName ITEMS {} OF oDlg SIZE 80, 164 ;
      ON CHANGE ShowCode( cDlgName, oMemoRC, oMemoPrg )

   @ 2, 16.4 SAY "RC dialog source:" OF oDlg SIZE 80, 9

   @ 3.3, 12 GET oMemoRC VAR cCode MEMO OF oDlg SIZE 345, 157 ;
      FONT oFont HSCROLL

   @ 16, 1 GET oMemoPrg VAR cPrg MEMO OF oDlg SIZE 433, 135 ;
      FONT oFont HSCROLL

   ACTIVATE DIALOG oDlg CENTERED

   oFont:End()

return nil

//----------------------------------------------------------------------------//

function ListDialogs( cRCFileName, oLbx )

   local n, cDlgName, lDone, cLine

   if ! File( cRCFileName )
      MsgAlert( cRCFileName + " does not exist" )
      return nil
   endif  
   
   cRCSrcCode = MemoRead( cRCFileName )
   oLbx:Reset()
   
   for n = 1 to MLCount( cRCSrcCode )
      cLine = MemoLine( cRCSrcCode,, n )
      SysRefresh()
      if ! SubStr( cLine, 1, 2 ) $ "//,/*"
         if Upper( StrToken( MemoLine( cRCSrcCode,, n ), 2 ) ) == "DIALOG"
            oLbx:Add( cDlgName := StrToken( MemoLine( cRCSrcCode,, n ), 1 ) )
            AAdd( aDialogs, { cDlgName, { cLine } } )
            lDone = .F.
         else
            if ! Empty( aDialogs )
               if Len( AllTrim( cLine ) ) == 1 .and. SubStr( cLine, 1, 1 ) == "}"
                  AAdd( ATail( aDialogs )[ 2 ], "}" )  
                  lDone = .T.
               else  
                  if ! lDone
                     AAdd( ATail( aDialogs )[ 2 ], cLine )  
                  endif  
               endif  
            endif  
         endif
      endif  
   next
   
   oLbx:GoTop()
   
return nil        

//----------------------------------------------------------------------------//

function ShowCode( cDlgName, oMemoRC, oMemoPrg )

   local nAt := AScan( aDialogs, { | aDlg | aDlg[ 1 ] == cDlgName } )
   
   if nAt != 0
      oMemoRC:SetText( ArrayToText( aDialogs[ nAt ][ 2 ] ) )
      oMemoPrg:SetText( RcToPrg( cDlgName, aDialogs[ nAt ][ 2 ] ) )
   endif  
   
return nil  

//----------------------------------------------------------------------------//

function ArrayToText( aArray )

   local n, cText := ""
   
   for n = 1 to Len( aArray )
      cText += aArray[ n ] + CRLF
   next
   
return cText

//----------------------------------------------------------------------------//

function RcToPrg( cDlgName, aRCSource )

   local cFuncName := "function " + cDlgName + "()" + CRLF + CRLF
   local n, cCode := "", aTokens, cToken
   local nSay := 0, nGet := 0, nBtn := 0, nLbx := 0
   local cVarsSays := "   local "
   local cVarsGets := "   local "
   local cVarsButtons := "   local "
   local cVarsLbxs := "   local "
   local cDlgDefine := "   DEFINE DIALOG oDlg RESOURCE " + '"' + ;
                       cDlgName + '"'
   local cId                  
   local cDlgActivate := "   ACTIVATE DIALOG oDlg CENTERED" + CRLF + CRLF
   
   for n = 1 to Len( aRCSource )
      aTokens = hb_ATokens( aRCSource[ n ] )
      cToken = AllTrim( aTokens[ 1 ] )
      do case
         case cToken == "EDITTEXT"
            cId = AllTrim( StrTran( aTokens[ 2 ], ",", "" ) )
            cCode += "   REDEFINE GET oGet" + AllTrim( Str( ++nGet ) ) + ;
                     " ID " + cId + " OF oDlg" + CRLF + CRLF
            cVarsGets += "oGet" + AllTrim( Str( nGet ) ) + ", "      

         case cToken == "LISTBOX"
            cId = AllTrim( StrTran( aTokens[ 2 ], ",", "" ) )
            cCode += "   REDEFINE LISTBOX oLbx" + AllTrim( Str( ++nLbx ) ) + ;
                     " ITEMS {}" + ;
                     " ID " + cId + " OF oDlg" + CRLF + CRLF
            cVarsLbxs += "oLbx" + AllTrim( Str( nLbx ) ) + ", "      
                     
         case cToken == "LTEXT"
            cId = AllTrim( StrToken( aRCSource[ n ], 2, ',' ) )
            if ! cId $ "0,-1" // We don't redefine 0 and -1 IDs
               cCode += "   REDEFINE SAY oSay" + AllTrim( Str( ++nSay ) ) + ;
                        " ID " + cId + " OF oDlg" + " // " + ;
                        StrTran( aTokens[ 2 ], ",", "" ) + CRLF + CRLF
               cVarsSays += "oSay" + AllTrim( Str( nSay ) ) + ", "      
            endif  

         case cToken == "PUSHBUTTON"
            cId = AllTrim( StrToken( aRcSource[ n ], 2, ',' ) )
            cCode += "   REDEFINE BUTTON oBtn" + AllTrim( Str( ++nBtn ) ) + ;
                     " ID " + cId + " OF oDlg ; // " + ;
                     '"' + StrToken( aRcSource[ n ], 2, '"' ) + '"' + CRLF + ;
                     "      ACTION MsgInfo( " + ;
                     '"' + StrToken( aRcSource[ n ], 2, '"' ) + '"' + " )" + ;
                     CRLF + CRLF
            cVarsButtons += "oBtn" + AllTrim( Str( nBtn ) ) + ", "      
      endcase
     
   next
   
   if Len( cVarsSays ) > Len( "   local " )
      cVarsSays = SubStr( cVarsSays, 1, Len( cVarsSays ) - 2 )
   else
      cVarsSays = ""
   endif
   
   if Len( cVarsGets ) > Len( "   local " )      
      cVarsGets = SubStr( cVarsGets, 1, Len( cVarsGets ) - 2 )
   else
      cVarsGets = ""
   endif
   
   if Len( cVarsButtons ) > Len( "   local " )
      cVarsButtons = SubStr( cVarsButtons, 1, Len( cVarsButtons ) - 2 )
   else  
      cVarsButtons = ""
   endif

   if Len( cVarsLbxs ) > Len( "   local " )
      cVarsLbxs = SubStr( cVarsLbxs, 1, Len( cVarsLbxs ) - 2 )
   else  
      cVarsLbxs = ""
   endif
         
return cFuncName + ;
       "   local oDlg" + CRLF + ;
       If( ! Empty( cVarsSays ), cVarsSays + CRLF, "" ) + ;
       If( ! Empty( cVarsGets ), cVarsGets + CRLF, "" ) + ;
       If( ! Empty( cVarsButtons ), cVarsButtons + CRLF, "" ) + ;
       If( ! Empty( cVarsLbxs ), cVarsLbxs + CRLF, "" ) + ;
       If( ! Empty( cVarsSays ) .or. ! Empty( cVarsGets ) .or. ;
           ! Empty( cVarsButtons ) .or. ! Empty( cVarsLbxs ), CRLF, "" ) + ;
       If( Empty( cVarsSays ) .and. Empty( cVarsGets ) .and. ;
           Empty( cVarsButtons ) .and. Empty( cVarsLbxs ),;
       CRLF, "" ) + cDlgDefine + CRLF + ;
       CRLF + cCode + ;
       cDlgActivate + "return nil"            
       
//----------------------------------------------------------------------------//      


Image
regards, saludos

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

Re: New free REDEFINE.prg utility

Postby Antonio Linares » Mon Jul 14, 2014 9:57 pm

PellesC compatible on GETs, next PellesC controls support coming:

redefine.prg
Code: Select all  Expand view
// Automatic REDEFINEs generator

#include "FiveWin.ch"

static cRCSrcCode, aDialogs := {}

//----------------------------------------------------------------------------//

function Main()

   local oDlg, oGet, cRCFileName := Space( 250 )
   local oLbx, cDlgName := Space( 50 ), oMemoRC, cCode := ""
   local oFont, oMemoPrg, cPrg := ""

   SetDlgGradient( { { 1, RGB( 199, 216, 237 ), RGB( 237, 242, 248 ) } } )
   
   DEFINE FONT oFont NAME "Courier New" SIZE 0, -14
   
   DEFINE DIALOG oDlg TITLE "RCs REDEFINEs builder" ;
      SIZE 900, 700

   @ 0.7, 1.5 SAY "RC filename:" OF oDlg SIZE 80, 9
   
   @ 0.8, 6 GET oGet VAR cRCFileName OF oDlg SIZE 200, 12 ;
      ACTION ( cRCFileName := cGetFile( "*.rc", "Please select a RC file" ),;
               oGet:oBtn:Refresh(), oGet:SetFocus(),;
               aDialogs := {}, ListDialogs( cRCFileName, oLbx ) )

   @ 2, 1.5 SAY "Dialogs in the RC file:" OF oDlg SIZE 80, 9

   @ 3, 1 LISTBOX oLbx VAR cDlgName ITEMS {} OF oDlg SIZE 80, 164 ;
      ON CHANGE ShowCode( cDlgName, oMemoRC, oMemoPrg )

   @ 2, 16.4 SAY "RC dialog source:" OF oDlg SIZE 80, 9

   @ 3.3, 12 GET oMemoRC VAR cCode MEMO OF oDlg SIZE 345, 157 ;
      FONT oFont HSCROLL

   @ 16, 1 GET oMemoPrg VAR cPrg MEMO OF oDlg SIZE 433, 135 ;
      FONT oFont HSCROLL

   ACTIVATE DIALOG oDlg CENTERED

   oFont:End()

return nil

//----------------------------------------------------------------------------//

function ListDialogs( cRCFileName, oLbx )

   local n, cDlgName, lDone, cLine

   if ! File( cRCFileName )
      MsgAlert( cRCFileName + " does not exist" )
      return nil
   endif  
   
   cRCSrcCode = MemoRead( cRCFileName )
   oLbx:Reset()
   
   for n = 1 to MLCount( cRCSrcCode )
      cLine = MemoLine( cRCSrcCode,, n )
      SysRefresh()
      if ! SubStr( cLine, 1, 2 ) $ "//,/*"
         if Upper( StrToken( MemoLine( cRCSrcCode,, n ), 2 ) ) $ "DIALOGEX"
            oLbx:Add( cDlgName := StrToken( MemoLine( cRCSrcCode,, n ), 1 ) )
            AAdd( aDialogs, { cDlgName, { cLine } } )
            lDone = .F.
         else
            if ! Empty( aDialogs )
               if Len( AllTrim( cLine ) ) == 1 .and. SubStr( cLine, 1, 1 ) == "}"
                  AAdd( ATail( aDialogs )[ 2 ], "}" )  
                  lDone = .T.
               else  
                  if ! lDone
                     AAdd( ATail( aDialogs )[ 2 ], cLine )  
                  endif  
               endif  
            endif  
         endif
      endif  
   next
   
   oLbx:GoTop()
   
return nil        

//----------------------------------------------------------------------------//

function ShowCode( cDlgName, oMemoRC, oMemoPrg )

   local nAt := AScan( aDialogs, { | aDlg | aDlg[ 1 ] == cDlgName } )
   
   if nAt != 0
      oMemoRC:SetText( ArrayToText( aDialogs[ nAt ][ 2 ] ) )
      oMemoPrg:SetText( RcToPrg( cDlgName, aDialogs[ nAt ][ 2 ] ) )
   endif  
   
return nil  

//----------------------------------------------------------------------------//

function ArrayToText( aArray )

   local n, cText := ""
   
   for n = 1 to Len( aArray )
      cText += aArray[ n ] + CRLF
   next
   
return cText

//----------------------------------------------------------------------------//

function RcToPrg( cDlgName, aRCSource )

   local cFuncName := "function " + cDlgName + "()" + CRLF + CRLF
   local n, cCode := "", aTokens, cToken
   local nSay := 0, nGet := 0, nBtn := 0, nLbx := 0
   local cVarsSays := "   local "
   local cVarsGets := "   local "
   local cVarsButtons := "   local "
   local cVarsLbxs := "   local "
   local cDlgDefine := "   DEFINE DIALOG oDlg RESOURCE " + '"' + ;
                       cDlgName + '"'
   local cId                  
   local cDlgActivate := "   ACTIVATE DIALOG oDlg CENTERED" + CRLF + CRLF
   
   for n = 1 to Len( aRCSource )
      aTokens = hb_ATokens( aRCSource[ n ] )
      cToken = AllTrim( aTokens[ 1 ] )
      // XBrowser aTokens
      do case
         case cToken == "EDITTEXT" .or. ;
              ( cToken == "CONTROL" .and. aTokens[ 2 ] == '"Edit",' )
            if cToken == "EDITTEXT"  
               cId = AllTrim( StrTran( aTokens[ 2 ], ",", "" ) )
            else  
               cId = AllTrim( StrToken( aRCSource[ n ], 2, "," ) )
            endif  
            cCode += "   REDEFINE GET oGet" + AllTrim( Str( ++nGet ) ) + ;
                     " ID " + cId + " OF oDlg" + CRLF + CRLF
            cVarsGets += "oGet" + AllTrim( Str( nGet ) ) + ", "      

         case cToken == "LISTBOX"
            cId = AllTrim( StrTran( aTokens[ 2 ], ",", "" ) )
            cCode += "   REDEFINE LISTBOX oLbx" + AllTrim( Str( ++nLbx ) ) + ;
                     " ITEMS {}" + ;
                     " ID " + cId + " OF oDlg" + CRLF + CRLF
            cVarsLbxs += "oLbx" + AllTrim( Str( nLbx ) ) + ", "      
                     
         case cToken == "LTEXT"
            cId = AllTrim( StrToken( aRCSource[ n ], 2, ',' ) )
            if ! cId $ "0,-1" // We don't redefine 0 and -1 IDs
               cCode += "   REDEFINE SAY oSay" + AllTrim( Str( ++nSay ) ) + ;
                        " ID " + cId + " OF oDlg" + " // " + ;
                        StrTran( aTokens[ 2 ], ",", "" ) + CRLF + CRLF
               cVarsSays += "oSay" + AllTrim( Str( nSay ) ) + ", "      
            endif  

         case cToken == "PUSHBUTTON"
            cId = AllTrim( StrToken( aRcSource[ n ], 2, ',' ) )
            cCode += "   REDEFINE BUTTON oBtn" + AllTrim( Str( ++nBtn ) ) + ;
                     " ID " + cId + " OF oDlg ; // " + ;
                     '"' + StrToken( aRcSource[ n ], 2, '"' ) + '"' + CRLF + ;
                     "      ACTION MsgInfo( " + ;
                     '"' + StrToken( aRcSource[ n ], 2, '"' ) + '"' + " )" + ;
                     CRLF + CRLF
            cVarsButtons += "oBtn" + AllTrim( Str( nBtn ) ) + ", "      
      endcase
     
   next
   
   if Len( cVarsSays ) > Len( "   local " )
      cVarsSays = SubStr( cVarsSays, 1, Len( cVarsSays ) - 2 )
   else
      cVarsSays = ""
   endif
   
   if Len( cVarsGets ) > Len( "   local " )      
      cVarsGets = SubStr( cVarsGets, 1, Len( cVarsGets ) - 2 )
   else
      cVarsGets = ""
   endif
   
   if Len( cVarsButtons ) > Len( "   local " )
      cVarsButtons = SubStr( cVarsButtons, 1, Len( cVarsButtons ) - 2 )
   else  
      cVarsButtons = ""
   endif

   if Len( cVarsLbxs ) > Len( "   local " )
      cVarsLbxs = SubStr( cVarsLbxs, 1, Len( cVarsLbxs ) - 2 )
   else  
      cVarsLbxs = ""
   endif
         
return cFuncName + ;
       "   local oDlg" + CRLF + ;
       If( ! Empty( cVarsSays ), cVarsSays + CRLF, "" ) + ;
       If( ! Empty( cVarsGets ), cVarsGets + CRLF, "" ) + ;
       If( ! Empty( cVarsButtons ), cVarsButtons + CRLF, "" ) + ;
       If( ! Empty( cVarsLbxs ), cVarsLbxs + CRLF, "" ) + ;
       If( ! Empty( cVarsSays ) .or. ! Empty( cVarsGets ) .or. ;
           ! Empty( cVarsButtons ) .or. ! Empty( cVarsLbxs ), CRLF, "" ) + ;
       If( Empty( cVarsSays ) .and. Empty( cVarsGets ) .and. ;
           Empty( cVarsButtons ) .and. Empty( cVarsLbxs ),;
       CRLF, "" ) + cDlgDefine + CRLF + ;
       CRLF + cCode + ;
       cDlgActivate + "return nil"            
       
//----------------------------------------------------------------------------//      
regards, saludos

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

Re: New free REDEFINE.prg utility

Postby Antonio Linares » Mon Jul 14, 2014 10:11 pm

Enhanced version:

redefine.prg
Code: Select all  Expand view
// Automatic REDEFINEs generator

#include "FiveWin.ch"

static cRCSrcCode, aDialogs := {}

//----------------------------------------------------------------------------//

function Main()

   local oDlg, oGet, cRCFileName := Space( 250 )
   local oLbx, cDlgName := Space( 50 ), oMemoRC, cCode := ""
   local oFont, oMemoPrg, cPrg := ""

   SetDlgGradient( { { 1, RGB( 199, 216, 237 ), RGB( 237, 242, 248 ) } } )
   
   DEFINE FONT oFont NAME "Courier New" SIZE 0, -14
   
   DEFINE DIALOG oDlg TITLE "RCs REDEFINEs builder" ;
      SIZE 900, 700

   @ 0.7, 1.5 SAY "RC filename:" OF oDlg SIZE 80, 9
   
   @ 0.8, 6 GET oGet VAR cRCFileName OF oDlg SIZE 200, 12 ;
      ACTION ( cRCFileName := cGetFile( "*.rc", "Please select a RC file" ),;
               oGet:oBtn:Refresh(), oGet:SetFocus(),;
               aDialogs := {}, ListDialogs( cRCFileName, oLbx ) )

   @ 2, 1.5 SAY "Dialogs in the RC file:" OF oDlg SIZE 80, 9

   @ 3, 1 LISTBOX oLbx VAR cDlgName ITEMS {} OF oDlg SIZE 80, 164 ;
      ON CHANGE ShowCode( cDlgName, oMemoRC, oMemoPrg )

   @ 2, 16.4 SAY "RC dialog source:" OF oDlg SIZE 80, 9

   @ 3.3, 12 GET oMemoRC VAR cCode MEMO OF oDlg SIZE 345, 157 ;
      FONT oFont HSCROLL

   @ 16, 1 GET oMemoPrg VAR cPrg MEMO OF oDlg SIZE 433, 135 ;
      FONT oFont HSCROLL

   ACTIVATE DIALOG oDlg CENTERED

   oFont:End()

return nil

//----------------------------------------------------------------------------//

function ListDialogs( cRCFileName, oLbx )

   local n, cDlgName, lDone, cLine, oRCFile

   if ! File( cRCFileName )
      MsgAlert( cRCFileName + " does not exist" )
      return nil
   endif  
   
   // cRCSrcCode = MemoRead( cRCFileName )
   oRCFile = TTxtFile():New( cRCFileName )
   oLbx:Reset()
   
   for n = 1 to oRCFile:RecCount() // MLCount( cRCSrcCode )
      cLine = oRCFile:ReadLine() // MemoLine( cRCSrcCode,, n )
      oRcFile:Skip()
      SysRefresh()
      if ! SubStr( cLine, 1, 2 ) $ "//,/*"
         if Upper( StrToken( cLine, 2 ) ) $ "DIALOGEX"
            oLbx:Add( cDlgName := StrToken( cLine, 1 ) )
            AAdd( aDialogs, { cDlgName, { cLine } } )
            lDone = .F.
         else
            if ! Empty( aDialogs )
               if Len( AllTrim( cLine ) ) == 1 .and. SubStr( cLine, 1, 1 ) == "}"
                  AAdd( ATail( aDialogs )[ 2 ], "}" )  
                  lDone = .T.
               else  
                  if ! lDone
                     AAdd( ATail( aDialogs )[ 2 ], cLine )  
                  endif  
               endif  
            endif  
         endif
      endif  
   next
   
   oLbx:GoTop()
   
return nil        

//----------------------------------------------------------------------------//

function ShowCode( cDlgName, oMemoRC, oMemoPrg )

   local nAt := AScan( aDialogs, { | aDlg | aDlg[ 1 ] == cDlgName } )
   
   if nAt != 0
      oMemoRC:SetText( ArrayToText( aDialogs[ nAt ][ 2 ] ) )
      oMemoPrg:SetText( RcToPrg( cDlgName, aDialogs[ nAt ][ 2 ] ) )
   endif  
   
return nil  

//----------------------------------------------------------------------------//

function ArrayToText( aArray )

   local n, cText := ""
   
   for n = 1 to Len( aArray )
      cText += aArray[ n ] + CRLF
   next
   
return cText

//----------------------------------------------------------------------------//

function RcToPrg( cDlgName, aRCSource )

   local cFuncName := "function " + cDlgName + "()" + CRLF + CRLF
   local n, cCode := "", aTokens, cToken
   local nSay := 0, nGet := 0, nBtn := 0, nLbx := 0
   local cVarsSays := "   local "
   local cVarsGets := "   local "
   local cVarsButtons := "   local "
   local cVarsLbxs := "   local "
   local cDlgDefine := "   DEFINE DIALOG oDlg RESOURCE " + '"' + ;
                       cDlgName + '"'
   local cId                  
   local cDlgActivate := "   ACTIVATE DIALOG oDlg CENTERED" + CRLF + CRLF
   
   for n = 1 to Len( aRCSource )
      aTokens = hb_ATokens( aRCSource[ n ] )
      cToken = AllTrim( aTokens[ 1 ] )
      // XBrowser aTokens
      do case
         case cToken == "EDITTEXT" .or. ;
              ( cToken == "CONTROL" .and. Upper( aTokens[ 4 ] ) == '"EDIT",' )
            if cToken == "EDITTEXT"  
               cId = AllTrim( StrTran( aTokens[ 2 ], ",", "" ) )
            else  
               cId = AllTrim( StrToken( aRCSource[ n ], 2, "," ) )
            endif  
            cCode += "   REDEFINE GET oGet" + AllTrim( Str( ++nGet ) ) + ;
                     " ID " + cId + " OF oDlg" + CRLF + CRLF
            cVarsGets += "oGet" + AllTrim( Str( nGet ) ) + ", "      

         case cToken == "LISTBOX"
            cId = AllTrim( StrTran( aTokens[ 2 ], ",", "" ) )
            cCode += "   REDEFINE LISTBOX oLbx" + AllTrim( Str( ++nLbx ) ) + ;
                     " ITEMS {}" + ;
                     " ID " + cId + " OF oDlg" + CRLF + CRLF
            cVarsLbxs += "oLbx" + AllTrim( Str( nLbx ) ) + ", "      
                     
         case cToken == "LTEXT"
            cId = AllTrim( StrToken( aRCSource[ n ], 2, ',' ) )
            if ! cId $ "0,-1" // We don't redefine 0 and -1 IDs
               cCode += "   REDEFINE SAY oSay" + AllTrim( Str( ++nSay ) ) + ;
                        " ID " + cId + " OF oDlg" + " // " + ;
                        StrTran( aTokens[ 2 ], ",", "" ) + CRLF + CRLF
               cVarsSays += "oSay" + AllTrim( Str( nSay ) ) + ", "      
            endif  

         case cToken == "PUSHBUTTON"
            cId = AllTrim( StrToken( aRcSource[ n ], 2, ',' ) )
            cCode += "   REDEFINE BUTTON oBtn" + AllTrim( Str( ++nBtn ) ) + ;
                     " ID " + cId + " OF oDlg ; // " + ;
                     '"' + StrToken( aRcSource[ n ], 2, '"' ) + '"' + CRLF + ;
                     "      ACTION MsgInfo( " + ;
                     '"' + StrToken( aRcSource[ n ], 2, '"' ) + '"' + " )" + ;
                     CRLF + CRLF
            cVarsButtons += "oBtn" + AllTrim( Str( nBtn ) ) + ", "      
      endcase
     
   next
   
   if Len( cVarsSays ) > Len( "   local " )
      cVarsSays = SubStr( cVarsSays, 1, Len( cVarsSays ) - 2 )
   else
      cVarsSays = ""
   endif
   
   if Len( cVarsGets ) > Len( "   local " )      
      cVarsGets = SubStr( cVarsGets, 1, Len( cVarsGets ) - 2 )
   else
      cVarsGets = ""
   endif
   
   if Len( cVarsButtons ) > Len( "   local " )
      cVarsButtons = SubStr( cVarsButtons, 1, Len( cVarsButtons ) - 2 )
   else  
      cVarsButtons = ""
   endif

   if Len( cVarsLbxs ) > Len( "   local " )
      cVarsLbxs = SubStr( cVarsLbxs, 1, Len( cVarsLbxs ) - 2 )
   else  
      cVarsLbxs = ""
   endif
         
return cFuncName + ;
       "   local oDlg" + CRLF + ;
       If( ! Empty( cVarsSays ), cVarsSays + CRLF, "" ) + ;
       If( ! Empty( cVarsGets ), cVarsGets + CRLF, "" ) + ;
       If( ! Empty( cVarsButtons ), cVarsButtons + CRLF, "" ) + ;
       If( ! Empty( cVarsLbxs ), cVarsLbxs + CRLF, "" ) + ;
       If( ! Empty( cVarsSays ) .or. ! Empty( cVarsGets ) .or. ;
           ! Empty( cVarsButtons ) .or. ! Empty( cVarsLbxs ), CRLF, "" ) + ;
       If( Empty( cVarsSays ) .and. Empty( cVarsGets ) .and. ;
           Empty( cVarsButtons ) .and. Empty( cVarsLbxs ),;
       CRLF, "" ) + cDlgDefine + CRLF + ;
       CRLF + cCode + ;
       cDlgActivate + "return nil"            
       
//----------------------------------------------------------------------------//      
regards, saludos

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

Re: New free REDEFINE.prg utility

Postby Antonio Linares » Mon Jul 14, 2014 10:58 pm

regards, saludos

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


Return to FiveWin for Harbour/xHarbour

Who is online

Users browsing this forum: Silvio.Falconi and 45 guests