// 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"
//----------------------------------------------------------------------------//
//----------------------------------------------------------------------------//
function RcToPrg( cDlgName, aRCSource )
local cFuncName := "function " + cDlgName + "()" + CRLF + CRLF
local n, cCode := "", aTokens, cToken
local nSay := 0, nGet := 0, nBtn := 0, nLbx := 0, nChec := 0 // <------CAMBIOS
local cVarsSays := " local "
local cVarsGets := " local "
local cVarsButtons := " local "
local cVarsLbxs := " local "
local cVarsCheckBox := " 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 == "AUTOCHECKBOX" .OR. cToken == "CHECKBOX" // <------CAMBIOS
cId = AllTrim( StrToken( aRcSource[ n ], 2, ',' ) )
cCode += " REDEFINE CHECKBOX oCheck" + AllTrim( Str( ++nChec ) ) + ;
" ID " + cId + " OF oDlg // " + ;
'"' + StrToken( aRcSource[ n ], 2, '"' ) + '"' + CRLF + ;
CRLF
cVarsCheckBox += "oCheck" + AllTrim( Str( nChec ) ) + ", " // <------CAMBIOS
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( cVarsCheckBox ), cVarsCheckBox + CRLF, "" ) + ; // <------CAMBIOS
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"
// 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"
//----------------------------------------------------------------------------//
// 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, nChec := 0
local cVarsSays := " local "
local cVarsGets := " local "
local cVarsButtons := " local "
local cVarsLbxs := " local "
local cVarsCheckBox := " 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 == "AUTOCHECKBOX" .OR. cToken == "CHECKBOX"
cId = AllTrim( StrToken( aRcSource[ n ], 2, ',' ) )
cCode += " REDEFINE CHECKBOX oCheck" + AllTrim( Str( ++nChec ) ) + ;
" ID " + cId + " OF oDlg // " + ;
'"' + StrToken( aRcSource[ n ], 2, '"' ) + '"' + CRLF + ;
CRLF
cVarsCheckBox += "oCheck" + AllTrim( Str( nChec ) ) + ", "
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
if Len( cVarsCheckBox ) > Len( " local " )
cVarsCheckBox = SubStr( cVarsCheckBox, 1, Len( cVarsCheckBox ) - 2 )
else
cVarsCheckBox = ""
endif
return cFuncName + ;
" local oDlg" + CRLF + ;
If( ! Empty( cVarsSays ), cVarsSays + CRLF, "" ) + ;
If( ! Empty( cVarsCheckBox ), cVarsCheckBox + 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"
//----------------------------------------------------------------------------//
// 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, nChk := 0
local cVarsSays := " local "
local cVarsGets := " local "
local cVarsButtons := " local "
local cVarsLbxs := " local "
local cVarsCheckBox := " 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 == "AUTOCHECKBOX" .OR. cToken == "CHECKBOX"
cId = AllTrim( StrToken( aRcSource[ n ], 2, ',' ) )
cCode += " REDEFINE CHECKBOX oCheck" + AllTrim( Str( ++nChk ) ) + ;
" ID " + cId + " OF oDlg // " + ;
'"' + StrToken( aRcSource[ n ], 2, '"' ) + '"' + CRLF + ;
CRLF
cVarsCheckBox += "oCheck" + AllTrim( Str( nChk ) ) + ", "
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
if Len( cVarsCheckBox ) > Len( " local " )
cVarsCheckBox = SubStr( cVarsCheckBox, 1, Len( cVarsCheckBox ) - 2 )
else
cVarsCheckBox = ""
endif
return cFuncName + ;
" local oDlg" + CRLF + ;
If( ! Empty( cVarsSays ), cVarsSays + CRLF, "" ) + ;
If( ! Empty( cVarsCheckBox ), cVarsCheckBox + 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"
//----------------------------------------------------------------------------//
Return to FiveWin para Harbour/xHarbour
Users browsing this forum: cmsoft, Google [Bot] and 56 guests