diff --git a/foxbin2prg.prg b/foxbin2prg.prg index 5267ef7..69e0adb 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -192,6 +192,18 @@ LPARAMETERS tc_InputFile, tcType_na, tcTextName_na, tlGenText_na, tcDontShowErro #DEFINE C_INDEX_F '' #DEFINE C_INDEXES_I '' #DEFINE C_INDEXES_F '' +#DEFINE C_MENU_I '' +#DEFINE C_MENU_F '' +#DEFINE C_OPTION_I '' +#DEFINE C_BARPOP_I '' +#DEFINE C_BARPOP_F '' +#DEFINE C_SETUPCODE_I '*' +#DEFINE C_SETUPCODE_F '*' +#DEFINE C_CLEANUPCODE_I '*' +#DEFINE C_CLEANUPCODE_F '*' +#DEFINE C_MENUCODE_I '*' +#DEFINE C_MENUCODE_F '*' *-- #DEFINE C_TAB CHR(9) #DEFINE C_CR CHR(13) @@ -391,7 +403,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM ENDPROC - PROCEDURE Ejecutar + PROCEDURE ejecutar *-------------------------------------------------------------------------------------------------------------- * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) * tc_InputFile (!v IN ) Nombre del archivo de entrada @@ -726,7 +738,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM PROCEDURE normalizarCapitalizacionArchivos TRY LOCAL lcPath, lcEXE_CAPS, lcOutputFile ; - , loFSO AS SCRIPTING.FileSystemObject + , loFSO AS Scripting.FileSystemObject lcPath = JUSTPATH(THIS.c_Foxbin2prg_FullPath) lcEXE_CAPS = FORCEPATH( 'filename_caps.exe', lcPath ) loFSO = THIS.o_FSO @@ -781,7 +793,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM ******************************************************************************************************************* PROCEDURE RenameFile - LPARAMETERS tcFileName, tcEXE_CAPS, toFSO AS SCRIPTING.FileSystemObject + LPARAMETERS tcFileName, tcEXE_CAPS, toFSO AS Scripting.FileSystemObject LOCAL lcLog THIS.writeLog( '- Se ha solicitado capitalizar el archivo [' + tcFileName + ']' ) @@ -4873,7 +4885,7 @@ DEFINE CLASS c_conversor_prg_a_pjx AS c_conversor_prg_a_bin CASE UPPER( LEFT( tcLine, 10 ) ) == UPPER( '*<.HomeDir' ) toProject._HomeDir = STREXTRACT( tcLine, "'", "'" ) - + ENDCASE ENDFOR ENDWITH && THIS @@ -6144,7 +6156,7 @@ DEFINE CLASS c_conversor_prg_a_mnx AS c_conversor_prg_a_bin ******************************************************************************************************************* PROCEDURE escribirArchivoBin - LPARAMETERS toDatabase + LPARAMETERS toMenu *-- ----------------------------------------------------------------------------------------------------------- #IF .F. LOCAL toMenu AS CL_MENU OF 'FOXBIN2PRG.PRG' @@ -6155,7 +6167,7 @@ DEFINE CLASS c_conversor_prg_a_mnx AS c_conversor_prg_a_bin lnCodError = 0 STORE '' TO lcIndex, lcFieldDef - toMenu.updateDBC( THIS.c_OutputFile ) + toMenu.updateMENU( THIS.c_OutputFile ) *USE IN (SELECT(JUSTSTEM(THIS.c_OutputFile))) @@ -6200,8 +6212,8 @@ DEFINE CLASS c_conversor_prg_a_mnx AS c_conversor_prg_a_bin THIS.c_Type = UPPER(JUSTEXT(THIS.c_OutputFile)) IF tnCodeLines > 1 - toDatabase = NULL - toDatabase = CREATEOBJECT('CL_DBC') + toMenu = NULL + toMenu = CREATEOBJECT('CL_MENU') WITH THIS FOR I = 1 TO tnCodeLines @@ -6215,7 +6227,7 @@ DEFINE CLASS c_conversor_prg_a_mnx AS c_conversor_prg_a_bin CASE NOT llFoxBin2Prg_Completed AND .analizarBloque_FoxBin2Prg( toDatabase, @lcLine, @taCodeLines, @I, tnCodeLines ) llFoxBin2Prg_Completed = .T. - CASE NOT llBloqueDatabase_Completed AND toDatabase.analizarBloque( @lcLine, @taCodeLines, @I, tnCodeLines ) + CASE NOT llBloqueDatabase_Completed AND toMenu.analizarBloque( @lcLine, @taCodeLines, @I, tnCodeLines ) llBloqueDatabase_Completed = .T. ENDCASE @@ -8083,7 +8095,7 @@ DEFINE CLASS c_conversor_pjx_a_prg AS c_conversor_bin_a_prg loProject = CREATEOBJECT('CL_PROJECT') SCATTER MEMO NAME loReg loProject._HomeDir = ['] + ALLTRIM( THIS.get_ValueFromNullTerminatedValue( loReg.HOMEDIR ) ) + ['] - + loProject._ServerInfo = loReg.RESERVED2 loProject._Debug = loReg.DEBUG loProject._Encrypted = loReg.ENCRYPT @@ -8622,36 +8634,33 @@ DEFINE CLASS c_conversor_mnx_a_prg AS c_conversor_bin_a_prg PROCEDURE Convertir *--------------------------------------------------------------------------------------------------- * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) - * toDatabase (@! OUT) Objeto generado de clase CL_DBC con la información leida del texto + * totoMenu (@! OUT) Objeto generado de clase CL_MENU con la información leida del texto * toEx (@! OUT) Objeto con información del error *--------------------------------------------------------------------------------------------------- - LPARAMETERS toDatabase, toEx AS EXCEPTION - DODEFAULT( @toDatabase, @toEx ) + LPARAMETERS toMenu, toEx AS EXCEPTION + DODEFAULT( @toMenu, @toEx ) #IF .F. - LOCAL toDatabase AS CL_DBC OF 'FOXBIN2PRG.PRG' + LOCAL toMenu AS CL_MENU OF 'FOXBIN2PRG.PRG' #ENDIF TRY - LOCAL lnCodError, laDatabases(1), lnDatabases_Count, laDatabases2(1), lnLen ; - , ln_HexFileType, ll_FileHasCDX, ll_FileHasMemo, ll_FileIsDBC, lc_DBC_Name + LOCAL lnCodError, lnLen STORE 0 TO lnCodError - lnDatabases_Count = ADATABASES(laDatabases) - THIS.getDBFmetadata( THIS.c_InputFile, @ln_HexFileType, @ll_FileHasCDX, @ll_FileHasMemo, @ll_FileIsDBC, @lc_DBC_Name ) USE (THIS.c_InputFile) SHARED NOUPDATE ALIAS TABLABIN - OPEN DATABASE (THIS.c_InputFile) SHARED NOUPDATE - - C_FB2PRG_CODE = C_FB2PRG_CODE + THIS.write_PROGRAM_HEADER() *-- Header - toDatabase = CREATEOBJECT('CL_DBC') - C_FB2PRG_CODE = C_FB2PRG_CODE + toDatabase.toText() + C_FB2PRG_CODE = C_FB2PRG_CODE + THIS.write_PROGRAM_HEADER() + + toMenu = CREATEOBJECT('CL_MENU') + toMenu.get_Data() + C_FB2PRG_CODE = C_FB2PRG_CODE + toMenu.toText() *-- Genero el DC2 IF THIS.l_Test - toModulo = C_FB2PRG_CODE + toMenu = C_FB2PRG_CODE ELSE lnLen = LEN( THIS.write_PROGRAM_HEADER() ) DO CASE @@ -8672,7 +8681,6 @@ DEFINE CLASS c_conversor_mnx_a_prg AS c_conversor_bin_a_prg FINALLY USE IN (SELECT("TABLABIN")) - CLOSE DATABASES ENDTRY @@ -8775,8 +8783,8 @@ DEFINE CLASS CL_CUS_BASE AS CUSTOM PROCEDURE toText *--------------------------------------------------------------------------------------------------- * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) - * taConnections (@? OUT) Array de conexiones - * tnConnection_Count (@? OUT) Cantidad de conexiones + * taArray (@? OUT) Array de conexiones + * tnArray_Count (@? OUT) Cantidad de conexiones *--------------------------------------------------------------------------------------------------- ENDPROC @@ -8835,8 +8843,8 @@ DEFINE CLASS CL_COL_BASE AS COLLECTION PROCEDURE toText *--------------------------------------------------------------------------------------------------- * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) - * taConnections (@? OUT) Array de conexiones - * tnConnection_Count (@? OUT) Cantidad de conexiones + * taArray (@? OUT) Array de conexiones + * tnArray_Count (@? OUT) Cantidad de conexiones *--------------------------------------------------------------------------------------------------- ENDPROC ENDDEFINE @@ -13852,3 +13860,551 @@ DEFINE CLASS CL_PROJ_FILE AS CL_CUS_BASE _TimeStamp = 0 ENDDEFINE + + +******************************************************************************************************************* +DEFINE CLASS CL_MENU_COL_BASE AS CL_COL_BASE + _MEMBERDATA = [] ; + + [] ; + + [] ; + + [] ; + + [] + + + #IF .F. + LOCAL THIS AS CL_MENU_BARPOP OF 'FOXBIN2PRG.PRG' + #ENDIF + + oReg = NULL + + + PROCEDURE get_Data + *--------------------------------------------------------------------------------------------------- + * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) + * toReg (v! IN ) Objeto de datos del registro + * toCol_LastLevelName (v! IN ) Objeto collection con la pila de niveles analizados + *--------------------------------------------------------------------------------------------------- + LPARAMETERS toReg, toCol_LastLevelName AS COLLECTION + + TRY + LOCAL I, lcLevelName, lnLastKey, llRetorno, llHayDatos, loReg ; + , loBarPop AS CL_MENU_BARPOP OF 'FOXBIN2PRG.PRG' ; + , loOption AS CL_MENU_OPTION OF 'FOXBIN2PRG.PRG' + + lnLastKey = 0 + THIS.oReg = toReg + lcLevelName = toReg.LevelName + lnLastKey = IIF( toCol_LastLevelName.COUNT=0, 0, toCol_LastLevelName.GETKEY(toReg.LevelName ) ) + + IF lnLastKey = 0 + toCol_LastLevelName.ADD( toReg.LevelName, toReg.LevelName ) + ENDIF + + DO WHILE NOT EOF() + loReg = NULL + SKIP 1 + + IF EOF() + EXIT + ENDIF + + SCATTER MEMO NAME loReg + + IF EMPTY(loReg.NAME) + loReg.NAME = SYS(2015) + ENDIF + + lnLastKey = toCol_LastLevelName.GETKEY(loReg.LevelName) + + DO CASE + CASE EOF() + llRetorno = .T. + EXIT + + CASE lnLastKey > 0 AND lnLastKey < toCol_LastLevelName.COUNT + *-- El nombre del analizado actual ya existe y no es el último, + *-- así que corresponde a un nivel superior. + SKIP -1 + llRetorno = .F. + EXIT + + CASE loReg.ObjType = 2 && Bar or Popup + loBarPop = CREATEOBJECT('CL_MENU_BARPOP') + llHayDatos = loBarPop.get_Data( loReg, toCol_LastLevelName ) + llRetorno = .T. + llRetorno = llHayDatos + THIS.ADD( loBarPop ) + loBarPop = NULL + IF NOT llHayDatos AND toReg.ObjType = 3 + EXIT + ENDIF + + CASE loReg.ObjType = 3 && Option + loOption = CREATEOBJECT('CL_MENU_OPTION') + llHayDatos = loOption.get_Data( loReg, toCol_LastLevelName ) + llRetorno = llHayDatos + THIS.ADD( loOption ) + loOption = NULL + IF NOT llHayDatos AND toReg.ObjType = 3 + EXIT + ENDIF + + OTHERWISE + llRetorno = .T. + EXIT + + ENDCASE + ENDDO + + CATCH TO loEx + IF THIS.l_Debug AND _VFP.STARTMODE = 0 + SET STEP ON + ENDIF + + THROW + + FINALLY + STORE NULL TO loBarPop, loOption + IF toReg.ObjType = 2 + lnLastKey = toCol_LastLevelName.GETKEY(toReg.LevelName) + IF lnLastKey > 0 + toCol_LastLevelName.REMOVE(lnLastKey) + ENDIF + ENDIF + ENDTRY + + RETURN llRetorno + ENDPROC + + + PROCEDURE updateMENU + *--------------------------------------------------------------------------------------------------- + * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) + * tc_InputFile (v! IN ) Nombre del archivo de salida + *--------------------------------------------------------------------------------------------------- + ENDPROC + + +ENDDEFINE + + +******************************************************************************************************************* +DEFINE CLASS CL_MENU AS CL_MENU_COL_BASE + #IF .F. + LOCAL THIS AS CL_MENU OF 'FOXBIN2PRG.PRG' + #ENDIF + + _MEMBERDATA = [] ; + + [] ; + + [] ; + + [] ; + + [] + + + *-- Modulo + _Version = 0 + _SourceFile = '' + + + PROCEDURE INIT + DODEFAULT() + *-- + *THIS.ADDOBJECT("_Options", "CL_MENU_OPTIONS") + ENDPROC + + + PROCEDURE analizarBloque + *--------------------------------------------------------------------------------------------------- + * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) + * tcLine (@! IN/OUT) Contenido de la línea en análisis + * taCodeLines (@! IN ) Array de líneas del programa analizado + * I (@! IN/OUT) Número de línea en análisis + * tnCodeLines (@! IN ) Cantidad de líneas del programa analizado + *--------------------------------------------------------------------------------------------------- + LPARAMETERS tcLine, taCodeLines, I, tnCodeLines + + TRY + LOCAL loOptions AS CL_MENU_BARPOP OF 'FOXBIN2PRG.PRG' + LOCAL llBloqueEncontrado, lcPropName, lcValue, loEx AS EXCEPTION + STORE '' TO lcPropName, lcValue + + IF LEFT(tcLine, LEN(C_MENU_I)) == C_MENU_I + llBloqueEncontrado = .T. + + FOR I = I + 1 TO tnCodeLines + THIS.set_Line( @tcLine, @taCodeLines, I ) + + DO CASE + CASE EMPTY( tcLine ) + LOOP + + CASE C_MENU_F $ tcLine && Fin + EXIT + + CASE C_BARPOP_I $ tcLine + loOption = CREATEOBJECT("CL_MENU_OPTION") + loOption.analizarBloque( @tcLine, @taCodeLines, @I, tnCodeLines ) + THIS.ADD( loOption, loOption._Name ) + + *CASE C_BARPOP_I $ tcLine + * loOptions = THIS._Options + * loOptions.analizarBloque( @tcLine, @taCodeLines, @I, tnCodeLines ) + + OTHERWISE && Otro valor + *-- Estructura a reconocer: + * ID + lcPropName = STREXTRACT( tcLine, '<', '>', 1, 0 ) + lcValue = STREXTRACT( tcLine, '<' + lcPropName + '>', '', 1, 0 ) + THIS.ADDPROPERTY( '_' + lcPropName, lcValue ) + ENDCASE + ENDFOR + ENDIF + + CATCH TO loEx + IF loEx.ERRORNO = 1470 && Incorrect property name. + loEx.USERVALUE = 'I=' + TRANSFORM(I) + ', PropName=[' + TRANSFORM(lcPropName) + '], Value=[' + TRANSFORM(lcValue) + ']' + ENDIF + + IF THIS.l_Debug AND _VFP.STARTMODE = 0 + SET STEP ON + ENDIF + + THROW + + ENDTRY + + RETURN llBloqueEncontrado + ENDPROC + + + PROCEDURE toText + *--------------------------------------------------------------------------------------------------- + * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) + * tc_InputFile (v! IN ) Nombre del archivo de salida + *--------------------------------------------------------------------------------------------------- + *LPARAMETERS tn_HexFileType, tl_FileHasCDX, tl_FileHasMemo, tl_FileIsDBC, tc_DBC_Name, tc_InputFile + + *EXTERNAL ARRAY taOptions + + TRY + LOCAL lcText, lcLastLevelName ; + , loEx AS EXCEPTION ; + , loReg ; + , loCol_LastLevelName AS COLLECTION ; + , loBarPop AS CL_MENU_BARPOP OF 'FOXBIN2PRG.PRG' ; + , loOption AS CL_MENU_OPTION OF 'FOXBIN2PRG.PRG' + + STORE '' TO lcText, lcLastLevelName + loReg = THIS.oReg + loBarPop = THIS.Item(1) + + TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + <<>> + <> + <> + <> + <<>> + <> + ENDTEXT + + *-- Bars and Popups + IF THIS.COUNT > 0 + FOR EACH loBarPop IN THIS FOXOBJECT + lcText = lcText + loBarPop.toText() + ENDFOR + ENDIF + + IF NOT EMPTY(loReg.Procedure) + TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + ON SELECTION MENU <> <> + ENDTEXT + ENDIF + + IF NOT EMPTY(loBarPop.oReg.Procedure) + TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + ON SELECTION POPUP ALL <> + ENDTEXT + ENDIF + + TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + <> + <<>> + <> + <> + <> + <<>> + ENDTEXT + + + CATCH TO loEx + IF THIS.l_Debug AND _VFP.STARTMODE = 0 + SET STEP ON + ENDIF + + THROW + + ENDTRY + + RETURN lcText + ENDPROC + + + PROCEDURE get_Data + LOCAL loReg, loCol_LastLevelName AS COLLECTION + GO TOP + SCATTER MEMO NAME loReg + loCol_LastLevelName = CREATEOBJECT('COLLECTION') + CL_MENU_COL_BASE::get_Data( loReg, loCol_LastLevelName ) + STORE NULL TO loReg, loCol_LastLevelName + ENDPROC + + + PROCEDURE updateMENU + ENDPROC + + +ENDDEFINE + + +******************************************************************************************************************* +DEFINE CLASS CL_MENU_BARPOP AS CL_MENU_COL_BASE + _MEMBERDATA = [] ; + + [] ; + + [] + + #IF .F. + LOCAL THIS AS CL_MENU_BARPOP OF 'FOXBIN2PRG.PRG' + #ENDIF + + + PROCEDURE analizarBloque + *--------------------------------------------------------------------------------------------------- + * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) + * tcLine (@! IN/OUT) Contenido de la línea en análisis + * taCodeLines (@! IN ) Array de líneas del programa analizado + * I (@! IN/OUT) Número de línea en análisis + * tnCodeLines (@! IN ) Cantidad de líneas del programa analizado + *--------------------------------------------------------------------------------------------------- + LPARAMETERS tcLine, taCodeLines, I, tnCodeLines + + TRY + LOCAL loOption AS CL_MENU_OPTIONS OF 'FOXBIN2PRG.PRG' + LOCAL llBloqueEncontrado, lcPropName, lcValue, loEx AS EXCEPTION + STORE '' TO lcPropName, lcValue + + IF LEFT(tcLine, LEN(C_BARPOP_I)) == C_BARPOP_I + llBloqueEncontrado = .T. + + FOR I = I + 1 TO tnCodeLines + THIS.set_Line( @tcLine, @taCodeLines, I ) + + DO CASE + CASE EMPTY( tcLine ) + LOOP + + CASE C_BARPOP_F $ tcLine && Fin + EXIT + + *CASE C_OPTION_I $ tcLine + * loOption = CREATEOBJECT("CL_MENU_OPTION") + * loOption.analizarBloque( @tcLine, @taCodeLines, @I, tnCodeLines ) + * THIS.ADD( loOption, loOption._Name ) + + OTHERWISE && Otro valor + *-- Estructura a reconocer: + * ID + lcPropName = STREXTRACT( tcLine, '<', '>', 1, 0 ) + lcValue = STREXTRACT( tcLine, '<' + lcPropName + '>', '', 1, 0 ) + THIS.ADDPROPERTY( '_' + lcPropName, lcValue ) + ENDCASE + ENDFOR + ENDIF + + CATCH TO loEx + IF loEx.ERRORNO = 1470 && Incorrect property name. + loEx.USERVALUE = 'I=' + TRANSFORM(I) + ', tcLine=' + TRANSFORM(tcLine) + ENDIF + + IF THIS.l_Debug AND _VFP.STARTMODE = 0 + SET STEP ON + ENDIF + + THROW + + ENDTRY + + RETURN llBloqueEncontrado + ENDPROC + + + PROCEDURE toText + *--------------------------------------------------------------------------------------------------- + * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) + * taOptions (@? OUT) Array de información de campos + * tnOption_Count (@? OUT) Cantidad de campos + *--------------------------------------------------------------------------------------------------- + *LPARAMETERS taOptions, tnOption_Count + + *EXTERNAL ARRAY taOptions + + TRY + LOCAL loReg, I, lcText, loEx AS EXCEPTION ; + , loBarPop AS CL_MENU_BARPOP OF 'FOXBIN2PRG.PRG' ; + , loOption AS CL_MENU_OPTION OF 'FOXBIN2PRG.PRG' + lcText = '' + loReg = THIS.oReg + + + TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + <<>> + <<>> BARS Y POPUPS + ENDTEXT + + *-- Options + IF THIS.COUNT > 0 + FOR EACH loOption IN THIS FOXOBJECT + lcText = lcText + loOption.toText() + ENDFOR + ENDIF + + + CATCH TO loEx + IF THIS.l_Debug AND _VFP.STARTMODE = 0 + SET STEP ON + ENDIF + + THROW + + ENDTRY + + RETURN lcText + ENDPROC + + + PROCEDURE updateMENU + ENDPROC + + +ENDDEFINE + + +DEFINE CLASS CL_MENU_OPTION AS CL_MENU_COL_BASE + _MEMBERDATA = [] ; + + [] ; + + [] + + #IF .F. + LOCAL THIS AS CL_MENU_OPTION OF 'FOXBIN2PRG.PRG' + #ENDIF + + + PROCEDURE analizarBloque + *--------------------------------------------------------------------------------------------------- + * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) + * tcLine (@! IN/OUT) Contenido de la línea en análisis + * taCodeLines (@! IN ) Array de líneas del programa analizado + * I (@! IN/OUT) Número de línea en análisis + * tnCodeLines (@! IN ) Cantidad de líneas del programa analizado + *--------------------------------------------------------------------------------------------------- + LPARAMETERS tcLine, taCodeLines, I, tnCodeLines + + TRY + *LOCAL loOption AS CL_MENU_OPTION OF 'FOXBIN2PRG.PRG' + LOCAL llBloqueEncontrado, lcPropName, lcValue, loEx AS EXCEPTION + STORE '' TO lcPropName, lcValue + + IF LEFT(tcLine, LEN(C_OPTION_I)) == C_OPTION_I + llBloqueEncontrado = .T. + + FOR I = I + 1 TO tnCodeLines + THIS.set_Line( @tcLine, @taCodeLines, I ) + + DO CASE + CASE EMPTY( tcLine ) + LOOP + + CASE C_OPTION_F $ tcLine && Fin + EXIT + + *CASE C_OPTION_I $ tcLine + * loOption = CREATEOBJECT("CL_MENU_OPTION") + * loOption.analizarBloque( @tcLine, @taCodeLines, @I, tnCodeLines ) + * THIS.ADD( loOption, loOption._Name ) + + OTHERWISE && Otro valor + *-- Estructura a reconocer: + * ID + lcPropName = STREXTRACT( tcLine, '<', '>', 1, 0 ) + lcValue = STREXTRACT( tcLine, '<' + lcPropName + '>', '', 1, 0 ) + THIS.ADDPROPERTY( '_' + lcPropName, lcValue ) + ENDCASE + ENDFOR + ENDIF + + CATCH TO loEx + IF loEx.ERRORNO = 1470 && Incorrect property name. + loEx.USERVALUE = 'I=' + TRANSFORM(I) + ', tcLine=' + TRANSFORM(tcLine) + ENDIF + + IF THIS.l_Debug AND _VFP.STARTMODE = 0 + SET STEP ON + ENDIF + + THROW + + ENDTRY + + RETURN llBloqueEncontrado + ENDPROC + + + PROCEDURE toText + *--------------------------------------------------------------------------------------------------- + * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) + * taOptions (@? OUT) Array de información de campos + * tnOption_Count (@? OUT) Cantidad de campos + *--------------------------------------------------------------------------------------------------- + *LPARAMETERS taOptions, tnOption_Count + + *EXTERNAL ARRAY taOptions + + TRY + LOCAL loReg, I, lcText, loEx AS EXCEPTION ; + , loBarPop AS CL_MENU_BARPOP OF 'FOXBIN2PRG.PRG' ; + , loOption AS CL_MENU_OPTION OF 'FOXBIN2PRG.PRG' + lcText = '' + loReg = THIS.oReg + + TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 + <<>> + <<>> Options + ENDTEXT + + *-- Bars and Popups + IF THIS.COUNT > 0 + FOR EACH loBarPop IN THIS FOXOBJECT + lcText = lcText + loBarPop.toText() + ENDFOR + ENDIF + + + CATCH TO loEx + IF THIS.l_Debug AND _VFP.STARTMODE = 0 + SET STEP ON + ENDIF + + THROW + + ENDTRY + + RETURN lcText + ENDPROC + + + PROCEDURE updateMENU + ENDPROC + + +ENDDEFINE + +