diff --git a/TESTS/DATOS_READONLY/fb2p_dbc.dbc b/TESTS/DATOS_READONLY/fb2p_dbc.dbc new file mode 100644 index 0000000..c72c78c Binary files /dev/null and b/TESTS/DATOS_READONLY/fb2p_dbc.dbc differ diff --git a/TESTS/DATOS_READONLY/fb2p_dbc.dct b/TESTS/DATOS_READONLY/fb2p_dbc.dct new file mode 100644 index 0000000..078324e Binary files /dev/null and b/TESTS/DATOS_READONLY/fb2p_dbc.dct differ diff --git a/TESTS/DATOS_READONLY/fb2p_dbc.dcx b/TESTS/DATOS_READONLY/fb2p_dbc.dcx new file mode 100644 index 0000000..2580acb Binary files /dev/null and b/TESTS/DATOS_READONLY/fb2p_dbc.dcx differ diff --git a/TESTS/DATOS_READONLY/fb2p_frm_1.sct b/TESTS/DATOS_READONLY/fb2p_frm_1.sct index 5324983..4e33748 100644 Binary files a/TESTS/DATOS_READONLY/fb2p_frm_1.sct and b/TESTS/DATOS_READONLY/fb2p_frm_1.sct differ diff --git a/TESTS/DATOS_READONLY/fb2p_frm_1.scx b/TESTS/DATOS_READONLY/fb2p_frm_1.scx index 0391e14..9872f01 100644 Binary files a/TESTS/DATOS_READONLY/fb2p_frm_1.scx and b/TESTS/DATOS_READONLY/fb2p_frm_1.scx differ diff --git a/TESTS/DATOS_READONLY/fb2p_frm_2.sct b/TESTS/DATOS_READONLY/fb2p_frm_2.sct index 803343d..6a6564f 100644 Binary files a/TESTS/DATOS_READONLY/fb2p_frm_2.sct and b/TESTS/DATOS_READONLY/fb2p_frm_2.sct differ diff --git a/TESTS/DATOS_READONLY/fb2p_frm_2.scx b/TESTS/DATOS_READONLY/fb2p_frm_2.scx index d52cd12..b96bca4 100644 Binary files a/TESTS/DATOS_READONLY/fb2p_frm_2.scx and b/TESTS/DATOS_READONLY/fb2p_frm_2.scx differ diff --git a/TESTS/ut__foxbin2prg.prg b/TESTS/ut__foxbin2prg.prg index ac937ce..caffe54 100644 --- a/TESTS/ut__foxbin2prg.prg +++ b/TESTS/ut__foxbin2prg.prg @@ -287,7 +287,7 @@ DEFINE CLASS ut__foxbin2prg AS FxuTestCase OF FxuTestCase.prg *-- DATOS DE ENTRADA STORE 0 TO lnCodError - lc_File = 'fb2p_foxuser.frx' + lc_File = 'FB2P_FOXUSER.FRX' lc_InputFile = FORCEPATH( lc_File, 'TESTS\DATOS_READONLY' ) lc_OutputFile = FORCEPATH( lc_File, 'TESTS\DATOS_TEST' ) lcTipoBinario = UPPER( JUSTEXT( lc_OutputFile ) ) @@ -361,7 +361,7 @@ DEFINE CLASS ut__foxbin2prg AS FxuTestCase OF FxuTestCase.prg *-- DATOS DE ENTRADA STORE 0 TO lnCodError - lc_File = 'fb2p_foxuser.lbx' + lc_File = 'FB2P_FOXUSER.LBX' lc_InputFile = FORCEPATH( lc_File, 'TESTS\DATOS_READONLY' ) lc_OutputFile = FORCEPATH( lc_File, 'TESTS\DATOS_TEST' ) lcTipoBinario = UPPER( JUSTEXT( lc_OutputFile ) ) @@ -433,7 +433,7 @@ DEFINE CLASS ut__foxbin2prg AS FxuTestCase OF FxuTestCase.prg *-- DATOS DE ENTRADA STORE 0 TO lnCodError - lc_File = 'fb2p_frm_1.scx' + lc_File = 'FB2P_FRM_1.SCX' lc_InputFile = FORCEPATH( lc_File, 'TESTS\DATOS_READONLY' ) lc_OutputFile = FORCEPATH( lc_File, 'TESTS\DATOS_TEST' ) lcTipoBinario = UPPER( JUSTEXT( lc_OutputFile ) ) @@ -515,7 +515,7 @@ DEFINE CLASS ut__foxbin2prg AS FxuTestCase OF FxuTestCase.prg *-- DATOS DE ENTRADA STORE 0 TO lnCodError - lc_File = 'fb2p_test.vcx' + lc_File = 'FB2P_TEST.VCX' lc_InputFile = FORCEPATH( lc_File, 'TESTS\DATOS_READONLY' ) lc_OutputFile = FORCEPATH( lc_File, 'TESTS\DATOS_TEST' ) lcTipoBinario = UPPER( JUSTEXT( lc_OutputFile ) ) @@ -597,7 +597,7 @@ DEFINE CLASS ut__foxbin2prg AS FxuTestCase OF FxuTestCase.prg *-- DATOS DE ENTRADA STORE 0 TO lnCodError - lc_File = 'fb2p_test_bug_metodo_movido.vcx' + lc_File = 'FB2P_TEST_BUG_METODO_MOVIDO.VCX' lc_InputFile = FORCEPATH( lc_File, 'TESTS\DATOS_READONLY' ) lc_OutputFile = FORCEPATH( lc_File, 'TESTS\DATOS_TEST' ) lcTipoBinario = UPPER( JUSTEXT( lc_OutputFile ) ) @@ -679,7 +679,7 @@ DEFINE CLASS ut__foxbin2prg AS FxuTestCase OF FxuTestCase.prg *-- DATOS DE ENTRADA STORE 0 TO lnCodError - lc_File = 'fb2p_test_bug_estructural.vcx' + lc_File = 'FB2P_TEST_BUG_ESTRUCTURAL.VCX' lc_InputFile = FORCEPATH( lc_File, 'TESTS\DATOS_READONLY' ) lc_OutputFile = FORCEPATH( lc_File, 'TESTS\DATOS_TEST' ) lcTipoBinario = UPPER( JUSTEXT( lc_OutputFile ) ) diff --git a/TESTS/ut__foxbin2prg__c_conversor_base__doBackup.PRG b/TESTS/ut__foxbin2prg__c_conversor_base__doBackup.PRG new file mode 100644 index 0000000..8deb05e --- /dev/null +++ b/TESTS/ut__foxbin2prg__c_conversor_base__doBackup.PRG @@ -0,0 +1,122 @@ +DEFINE CLASS ut__foxbin2prg__c_conversor_base__doBackup AS FxuTestCase OF FxuTestCase.prg + + #IF .F. + LOCAL THIS AS ut__foxbin2prg__c_conversor_base__doBackup OF ut__foxbin2prg__c_conversor_base__doBackup.PRG + #ENDIF + + #DEFINE C_FB2P_VALUE_I '' + #DEFINE C_FB2P_VALUE_F '' + #DEFINE CR_LF CHR(13) + CHR(10) + #DEFINE C_CR CHR(13) + #DEFINE C_LF CHR(10) + #DEFINE C_TAB CHR(9) + #DEFINE C_PROC 'PROCEDURE' + #DEFINE C_ENDPROC 'ENDPROC' + #DEFINE C_TEXT 'TEXT' + #DEFINE C_ENDTEXT 'ENDTEXT' + #DEFINE C_IF_F '#IF .F.' + #DEFINE C_ENDIF '#ENDIF' + #DEFINE C_DEFINE_CLASS 'DEFINE CLASS' + #DEFINE C_ENDDEFINE_CLASS 'ENDDEFINE' + icObj = NULL + + + ******************************************************************************************************************************************* + FUNCTION SETUP + PUBLIC oFXU_LIB AS CL_FXU_CONFIG OF 'TESTS\fxu_lib_objetos_y_funciones_de_soporte.PRG' + LOCAL loObj AS c_conversor_base OF "FOXBIN2PRG.PRG" + SET PROCEDURE TO 'TESTS\fxu_lib_objetos_y_funciones_de_soporte.PRG' + oFXU_LIB = CREATEOBJECT('CL_FXU_CONFIG') + oFXU_LIB.setup_comun() + + THIS.icObj = NEWOBJECT("c_conversor_bin_a_prg", "FOXBIN2PRG.PRG") + loObj = THIS.icObj + loObj.l_Test = .T. + + ENDFUNC + + + ******************************************************************************************************************************************* + FUNCTION TearDown + #IF .F. + PUBLIC oFXU_LIB AS CL_FXU_CONFIG OF 'TESTS\fxu_lib_objetos_y_funciones_de_soporte.PRG' + #ENDIF + THIS.icObj = NULL + + IF VARTYPE(oFXU_LIB) = "O" + oFXU_LIB.teardown_comun() + oFXU_LIB = NULL + ENDIF + RELEASE PROCEDURE 'TESTS\fxu_lib_objetos_y_funciones_de_soporte.PRG' + + ENDFUNC + + + ******************************************************************************************************************************************* + FUNCTION Evaluate_results + LPARAMETERS toEx AS EXCEPTION, tnCodError_Esperado, tcBackFile_1, tcBackFile_2, tcBackFile_3 + + #IF .F. + PUBLIC oFXU_LIB AS CL_FXU_CONFIG OF 'TESTS\fxu_lib_objetos_y_funciones_de_soporte.PRG' + #ENDIF + LOCAL loObj AS c_conversor_bin_a_prg OF "FOXBIN2PRG.PRG" + loObj = THIS.icObj + + IF PCOUNT() = 0 + THIS.messageout( "* Support method, not a valid test." ) + RETURN .T. + ENDIF + + IF ISNULL(toEx) + *-- Visualización de valores + THIS.messageout( 'BackFile_1: ' + TRANSFORM(tcBackFile_1) ) + THIS.messageout( 'BackFile_2: ' + TRANSFORM(tcBackFile_2) ) + THIS.messageout( 'BackFile_3: ' + TRANSFORM(tcBackFile_3) ) + + + *-- Evaluación de valores + THIS.assertequals( .T., FILE(tcBackFile_1), "Existencia del archivo " + tcBackFile_1 ) + THIS.assertequals( .T., FILE(tcBackFile_2), "Existencia del archivo " + tcBackFile_2 ) + IF NOT EMPTY(tcBackFile_3) + THIS.assertequals( .T., FILE(tcBackFile_3), "Existencia del archivo " + tcBackFile_3 ) + ENDIF + + ELSE + *-- Evaluación de errores + THIS.messageout( "Error " + TRANSFORM(toEx.ERRORNO) + ', ' + TRANSFORM(toEx.MESSAGE) ) + THIS.messageout( toEx.PROCEDURE + ', ' + TRANSFORM(toEx.LINENO) ) + THIS.messageout( TRANSFORM(toEx.LINECONTENTS) ) + + THIS.assertequals( tnCodError_Esperado, toEx.ERRORNO, 'Error' ) + ENDIF + ENDFUNC + + + ******************************************************************************************************************************************* + FUNCTION Deberia_HacerElBackupDelArchivoIndicado + + #IF .F. + PUBLIC oFXU_LIB AS CL_FXU_CONFIG OF 'TESTS\fxu_lib_objetos_y_funciones_de_soporte.PRG' + #ENDIF + + LOCAL lnCodError, lcMenError, lnCodError_Esperado ; + , lcMemo, lcMemo_Salida, lcMemo_Esperado, lcBackFile_1, lcBackFile_2, lcBackFile_3 ; + , loEx AS EXCEPTION + LOCAL loObj AS c_conversor_bin_a_prg OF "FOXBIN2PRG.PRG" + loObj = THIS.icObj + loEx = NULL + loObj.c_OutputFile = FORCEPATH( 'FB2P_DBC.DBC', oFXU_LIB.cPathDatosTest ) + + *-- DATOS DE ENTRADA + STORE 0 TO lnCodError + COPY FILE ( FORCEPATH( 'FB2P_DBC.D??', oFXU_LIB.cPathDatosReadOnly ) ) TO ( FORCEPATH( 'FB2P_DBC.D??', oFXU_LIB.cPathDatosTest ) ) + + *-- TEST + loObj.doBackup( @loEx, .F., @lcBackFile_1, @lcBackFile_2, @lcBackFile_3 ) + + THIS.Evaluate_results( loEx, lnCodError_Esperado, lcBackFile_1, lcBackFile_2, lcBackFile_3 ) + + ENDFUNC + + +ENDDEFINE diff --git a/foxbin2prg.prg b/foxbin2prg.prg index bf43637..05a9b36 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -51,6 +51,7 @@ * 07/12/2013 FDBOZZO v1.11 Arreglo del bug de _amembers detectado por Edgar K.con la clase BlowFish.vcx (http://www.tortugaproductiva.galeon.com/docs/blowfish/index.html) * 07/12/2013 FDBOZZO v1.12 Agregado soporte preliminar de conversión de reportes y etiquetas (FRX/LBX) * 08/12/2013 FDBOZZO v1.13 Arreglo bug "Error 1924, TOREG is not an object" +* 15/12/2013 FDBOZZO v1.14 Arreglo de bug AutoCenter y registro COMMENT en regeneración de forms * *--------------------------------------------------------------------------------------------------- * TESTEO Y REPORTE DE BUGS (AGRADECIMIENTOS) @@ -62,6 +63,8 @@ * 06/12/2013 Fidel Charny REPORTE BUG: Cuando hay métodos que tienen el mismo nombre, aparecen mezclados en objetos a los que no corresponden (arreglado en v.1.10) * 07/12/2013 Edgar Kummers REPORTE BUG: Cuando se parsea una clase con un _memberdata largo, se parsea mal y se corrompe el valor (arreglado en v.1.11) * 08/12/2013 Fidel Charny REPORTE BUG: Cuando se convierten algunos reportes da "Error 1924, TOREG is not an object" (arreglado en v.1.13) +* 14/12/2013 Arturo Ramos REPORTE BUG: La regeneración de los forms (SCX) no respeta la propiedad AutoCenter, estando pero no funcionando. (arreglado en v.1.14) +* 14/12/2013 Fidel Charny REPORRE BUG: La regeneración de los forms (SCX) no regenera el último registro COMMENT (arreglado en v.1.14) * *--------------------------------------------------------------------------------------------------- * TRAMIENTOS ESPECIALES DE ASIGNACIONES DE PROPIEDADES: @@ -364,7 +367,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM l_ReportSort_Enabled = .T. && Para Unit Testing se puede cambiar a .F. para buscar diferencias lFileMode = .F. nClassTimeStamp = '' - n_FB2PRG_Version = 1.13 + n_FB2PRG_Version = 1.14 o_Conversor = NULL c_VC2 = 'VC2' c_SC2 = 'SC2' @@ -629,6 +632,7 @@ DEFINE CLASS c_conversor_base AS SESSION + [] ; + [] ; + [] ; + + [] ; + [] ; + [] ; + [] ; @@ -945,27 +949,70 @@ DEFINE CLASS c_conversor_base AS SESSION ******************************************************************************************************************* PROCEDURE doBackup - LOCAL lcNext_Bak, lcExt_X, lcExt_T - lcNext_Bak = THIS.getNext_BAK( THIS.c_OutputFile ) - lcExt_X = JUSTEXT( THIS.c_OutputFile ) - lcExt_T = LEFT(lcExt_X,2) + 'T' + LPARAMETERS toEx, tlRelanzarError, tcBakFile_1, tcBakFile_2, tcBakFile_3 - DO CASE - CASE JUSTEXT( THIS.c_OutputFile ) = lcExt_X - IF FILE( FORCEEXT(THIS.c_OutputFile,lcExt_X) ) - THIS.writeLog( 'backup de: ' + FORCEEXT(THIS.c_OutputFile,lcExt_X) + '/' + lcExt_T ) + TRY + LOCAL lcNext_Bak, lcExt_1, lcExt_2, lcExt_3 + STORE '' TO tcBakFile_1, tcBakFile_2, tcBakFile_3 + lcNext_Bak = THIS.getNext_BAK( THIS.c_OutputFile ) + lcExt_1 = JUSTEXT( THIS.c_OutputFile ) + tcBakFile_1 = FORCEEXT(THIS.c_OutputFile, lcExt_1 + lcNext_Bak) - COPY FILE (FORCEEXT(THIS.c_OutputFile,lcExt_X)) TO (FORCEEXT(THIS.c_OutputFile, lcExt_X + lcNext_Bak)) + DO CASE + CASE lcExt_1 = 'DBF' + *-- DBF + lcExt_2 = 'FPT' + lcExt_3 = 'CDX' + tcBakFile_2 = FORCEEXT(THIS.c_OutputFile, lcExt_2 + lcNext_Bak) + tcBakFile_3 = FORCEEXT(THIS.c_OutputFile, lcExt_3 + lcNext_Bak) - IF FILE( FORCEEXT(THIS.c_OutputFile,lcExt_T) ) - COPY FILE (FORCEEXT(THIS.c_OutputFile,lcExt_T)) TO (FORCEEXT(THIS.c_OutputFile,lcExt_T + lcNext_Bak)) + CASE lcExt_1 = 'DBC' + *-- DBC + lcExt_2 = 'DCT' + lcExt_3 = 'DCX' + tcBakFile_2 = FORCEEXT(THIS.c_OutputFile, lcExt_2 + lcNext_Bak) + tcBakFile_3 = FORCEEXT(THIS.c_OutputFile, lcExt_3 + lcNext_Bak) + + OTHERWISE + *-- PJX, VCX, SCX, FRX, LBX, MNX + lcExt_2 = LEFT(lcExt_1,2) + 'T' + tcBakFile_2 = FORCEEXT(THIS.c_OutputFile, lcExt_2 + lcNext_Bak) + + ENDCASE + + IF NOT EMPTY(lcExt_1) AND FILE( FORCEEXT(THIS.c_OutputFile, lcExt_1) ) + IF EMPTY(lcExt_3) + THIS.writeLog( 'backup de: ' + FORCEEXT(THIS.c_OutputFile,lcExt_1) + '/' + lcExt_2 ) + ELSE + THIS.writeLog( 'backup de: ' + FORCEEXT(THIS.c_OutputFile,lcExt_1) + '/' + lcExt_2 + '/' + lcExt_3 ) + ENDIF + + *COPY FILE ( FORCEEXT(THIS.c_OutputFile, lcExt_1) ) TO ( FORCEEXT(THIS.c_OutputFile, lcExt_1 + lcNext_Bak) ) + RENAME ( FORCEEXT(THIS.c_OutputFile, lcExt_1) ) TO ( tcBakFile_1 ) + + IF NOT EMPTY(lcExt_2) AND FILE( FORCEEXT(THIS.c_OutputFile, lcExt_2) ) + *COPY FILE ( FORCEEXT(THIS.c_OutputFile, lcExt_2) ) TO ( FORCEEXT(THIS.c_OutputFile, lcExt_2 + lcNext_Bak) ) + RENAME ( FORCEEXT(THIS.c_OutputFile, lcExt_2) ) TO ( tcBakFile_2 ) + ENDIF + + IF NOT EMPTY(lcExt_3) AND FILE( FORCEEXT(THIS.c_OutputFile, lcExt_3) ) + *COPY FILE ( FORCEEXT(THIS.c_OutputFile, lcExt_3) ) TO ( FORCEEXT(THIS.c_OutputFile, lcExt_3 + lcNext_Bak) ) + RENAME ( FORCEEXT(THIS.c_OutputFile, lcExt_3) ) TO ( tcBakFile_3 ) ENDIF ENDIF - - OTHERWISE - ERROR 'Tipo de archivo [' + JUSTFNAME(THIS.c_OutputFile) + '] no soportado para backup!' - ENDCASE + CATCH TO loEx + IF THIS.l_Debug AND _VFP.STARTMODE = 0 + SET STEP ON + ENDIF + + IF tlRelanzarError + THROW + ENDIF + + ENDTRY + + RETURN ENDPROC @@ -1311,6 +1358,274 @@ DEFINE CLASS c_conversor_base AS SESSION ENDFUNC + ******************************************************************************************************************* + PROCEDURE sortPropsAndValues_SetAndGetSCXPropNames + *-------------------------------------------------------------------------------------------------------------- + * PARÁMETROS: !=Obligatorio, ?=Opcional, @=Pasar por referencia, v=Pasar por valor (IN/OUT) + * tcOperation (!v IN ) Operación a realizar ("SETNAME" o "GETNAME") + * tcPropName (!v IN ) Nombre de la propiedad + *-------------------------------------------------------------------------------------------------------------- + LPARAMETERS tcOperation, tcPropName + LOCAL lcPropName, lnPropType + lcPropName = tcPropName + tcOperation = UPPER(EVL(tcOperation,'')) + lnPropType = 0 && System property + + DO CASE + CASE tcOperation == 'GETNAME' + lcPropName = SUBSTR(tcPropName,5) + CASE NOT tcOperation == 'SETNAME' + ERROR 'Operación no reconocida. Solo re reconoce SETNAME y GETNAME.' + CASE lcPropName == 'ButtonCount' + lcPropName = 'A005' + lcPropName + CASE lcPropName == 'ColumnCount' + lcPropName = 'A010' + lcPropName + CASE lcPropName == 'Value' + lcPropName = 'A015' + lcPropName + CASE lcPropName == 'Comment' + lcPropName = 'A020' + lcPropName + CASE lcPropName == 'ControlSource' + lcPropName = 'A025' + lcPropName + CASE lcPropName == 'DataSession' + lcPropName = 'A030' + lcPropName + CASE lcPropName == 'DeleteMark' + lcPropName = 'A035' + lcPropName + CASE lcPropName == 'ScaleMode' + lcPropName = 'A040' + lcPropName + CASE lcPropName == 'Tag' + lcPropName = 'A045' + lcPropName + CASE lcPropName == 'Top' + lcPropName = 'A050' + lcPropName + CASE lcPropName == 'Left' + lcPropName = 'A055' + lcPropName + CASE lcPropName == 'Height' + lcPropName = 'A060' + lcPropName + CASE lcPropName == 'Width' + lcPropName = 'A065' + lcPropName + CASE lcPropName == 'MaxLength' + lcPropName = 'A070' + lcPropName + CASE lcPropName == 'Alias' + lcPropName = 'A075' + lcPropName + CASE lcPropName == 'BufferModeOverride' + lcPropName = 'A080' + lcPropName + CASE lcPropName == 'Order' + lcPropName = 'A085' + lcPropName + CASE lcPropName == 'OrderDirection' + lcPropName = 'A090' + lcPropName + CASE lcPropName == 'CursorSource' + lcPropName = 'A095' + lcPropName + CASE lcPropName == 'Exclusive' + lcPropName = 'A100' + lcPropName + CASE lcPropName == 'Filter' + lcPropName = 'A105' + lcPropName + CASE lcPropName == 'Panel' + lcPropName = 'A110' + lcPropName + CASE lcPropName == 'ReadOnly' + lcPropName = 'A115' + lcPropName + CASE lcPropName == 'RecordSource' + lcPropName = 'A120' + lcPropName + CASE lcPropName == 'RecordSourceType' + lcPropName = 'A125' + lcPropName + CASE lcPropName == 'NoDataOnLoad' + lcPropName = 'A130' + lcPropName + CASE lcPropName == 'OpenViews' + lcPropName = 'A135' + lcPropName + CASE lcPropName == 'AutoOpenTables' + lcPropName = 'A140' + lcPropName + CASE lcPropName == 'AutoCloseTables' + lcPropName = 'A145' + lcPropName + CASE lcPropName == 'InitialSelectedAlias' + lcPropName = 'A150' + lcPropName + CASE lcPropName == 'DataSource' + lcPropName = 'A155' + lcPropName + CASE lcPropName == 'DataSourceType ' + lcPropName = 'A160' + lcPropName + CASE lcPropName == 'Desktop' + lcPropName = 'A165' + lcPropName + CASE lcPropName == 'ShowWindow' + lcPropName = 'A170' + lcPropName + CASE lcPropName == 'ScrollBars' + lcPropName = 'A175' + lcPropName + CASE lcPropName == 'ShowInTaskBar' + lcPropName = 'A180' + lcPropName + CASE lcPropName == 'DoCreate' + lcPropName = 'A185' + lcPropName + CASE lcPropName == 'Tag' + lcPropName = 'A190' + lcPropName + CASE lcPropName == 'OLEDragMode' + lcPropName = 'A195' + lcPropName + CASE lcPropName == 'OLEDragPicture' + lcPropName = 'A200' + lcPropName + CASE lcPropName == 'OLEDropMode' + lcPropName = 'A205' + lcPropName + CASE lcPropName == 'OLEDropEffects' + lcPropName = 'A210' + lcPropName + CASE lcPropName == 'ShowTips' + lcPropName = 'A215' + lcPropName + CASE lcPropName == 'BufferMode' + lcPropName = 'A220' + lcPropName + CASE lcPropName == 'AutoCenter' + lcPropName = 'A225' + lcPropName + CASE lcPropName == 'AutoSize' + lcPropName = 'A230' + lcPropName + CASE lcPropName == 'WordWrap' + lcPropName = 'A235' + lcPropName + CASE lcPropName == 'Picture' + lcPropName = 'A240' + lcPropName + CASE lcPropName == 'BackStyle' + lcPropName = 'A245' + lcPropName + CASE lcPropName == 'BorderStyle' + lcPropName = 'A250' + lcPropName + CASE lcPropName == 'BorderWidth' + lcPropName = 'A255' + lcPropName + CASE lcPropName == 'Caption' + lcPropName = 'A260' + lcPropName + CASE lcPropName == 'ControlBox' + lcPropName = 'A265' + lcPropName + CASE lcPropName == 'Closable' + lcPropName = 'A270' + lcPropName + CASE lcPropName == 'Curvature' + lcPropName = 'A275' + lcPropName + CASE lcPropName == 'FontBold' + lcPropName = 'A280' + lcPropName + CASE lcPropName == 'FontCondense' + lcPropName = 'A285' + lcPropName + CASE lcPropName == 'FontExtend' + lcPropName = 'A290' + lcPropName + CASE lcPropName == 'FontItalic' + lcPropName = 'A295' + lcPropName + CASE lcPropName == 'FontName' + lcPropName = 'A300' + lcPropName + CASE lcPropName == 'FontOutline' + lcPropName = 'A305' + lcPropName + CASE lcPropName == 'FontShadow' + lcPropName = 'A310' + lcPropName + CASE lcPropName == 'FontSize' + lcPropName = 'A315' + lcPropName + CASE lcPropName == 'FontStrikethru' + lcPropName = 'A320' + lcPropName + CASE lcPropName == 'FontUnderline' + lcPropName = 'A325' + lcPropName + CASE lcPropName == 'HalfHeightCaption' + lcPropName = 'A330' + lcPropName + CASE lcPropName == 'Margin' + lcPropName = 'A335' + lcPropName + CASE lcPropName == 'MaxButton' + lcPropName = 'A340' + lcPropName + CASE lcPropName == 'MinButton' + lcPropName = 'A345' + lcPropName + CASE lcPropName == 'Movable' + lcPropName = 'A350' + lcPropName + CASE lcPropName == 'MaxHeight' + lcPropName = 'A355' + lcPropName + CASE lcPropName == 'MaxWidth' + lcPropName = 'A360' + lcPropName + CASE lcPropName == 'MinHeight' + lcPropName = 'A365' + lcPropName + CASE lcPropName == 'MinWidth' + lcPropName = 'A370' + lcPropName + CASE lcPropName == 'MaxTop' + lcPropName = 'A375' + lcPropName + CASE lcPropName == 'MaxLeft' + lcPropName = 'A380' + lcPropName + CASE lcPropName == 'MDIForm' + lcPropName = 'A385' + lcPropName + CASE lcPropName == 'MousePointer' + lcPropName = 'A390' + lcPropName + CASE lcPropName == 'MouseIcon' + lcPropName = 'A395' + lcPropName + CASE lcPropName == 'Visible' + lcPropName = 'A400' + lcPropName + CASE lcPropName == 'ClipControls' + lcPropName = 'A405' + lcPropName + CASE lcPropName == 'DrawMode' + lcPropName = 'A410' + lcPropName + CASE lcPropName == 'DrawStyle' + lcPropName = 'A415' + lcPropName + CASE lcPropName == 'DrawWidth' + lcPropName = 'A420' + lcPropName + CASE lcPropName == 'FillStyle' + lcPropName = 'A425' + lcPropName + CASE lcPropName == 'Enabled' + lcPropName = 'A430' + lcPropName + CASE lcPropName == 'Icon' + lcPropName = 'A435' + lcPropName + CASE lcPropName == 'KeyPreview' + lcPropName = 'A440' + lcPropName + CASE lcPropName == 'TabIndex' + lcPropName = 'A445' + lcPropName + CASE lcPropName == 'TabStop' + lcPropName = 'A450' + lcPropName + CASE lcPropName == 'TitleBar' + lcPropName = 'A455' + lcPropName + CASE lcPropName == 'WindowType' + lcPropName = 'A460' + lcPropName + CASE lcPropName == 'WindowState' + lcPropName = 'A465' + lcPropName + CASE lcPropName == 'LockScreen' + lcPropName = 'A470' + lcPropName + CASE lcPropName == 'AlwaysOnTop' + lcPropName = 'A475' + lcPropName + CASE lcPropName == 'AlwaysOnBottom' + lcPropName = 'A480' + lcPropName + CASE lcPropName == 'SizeBox' + lcPropName = 'A485' + lcPropName + CASE lcPropName == 'SpecialEffect' + lcPropName = 'A490' + lcPropName + CASE lcPropName == 'ZoomBox' + lcPropName = 'A495' + lcPropName + CASE lcPropName == 'ZOrderSet' + lcPropName = 'A500' + lcPropName + CASE lcPropName == 'HelpContextID' + lcPropName = 'A505' + lcPropName + CASE lcPropName == 'WhatsThisHelpID' + lcPropName = 'A510' + lcPropName + CASE lcPropName == 'WhatsThisHelp' + lcPropName = 'A515' + lcPropName + CASE lcPropName == 'WhatsThisButton' + lcPropName = 'A520' + lcPropName + CASE lcPropName == 'RightToLeft' + lcPropName = 'A525' + lcPropName + CASE lcPropName == 'DefOleLCID' + lcPropName = 'A530' + lcPropName + CASE lcPropName == 'MacDesktop' + lcPropName = 'A535' + lcPropName + CASE lcPropName == 'ColorSource' + lcPropName = 'A540' + lcPropName + CASE lcPropName == 'ForeColor' + lcPropName = 'A545' + lcPropName + CASE lcPropName == 'DisableForeColor' + lcPropName = 'A550' + lcPropName + CASE lcPropName == 'BackColor' + lcPropName = 'A555' + lcPropName + CASE lcPropName == 'FillColor' + lcPropName = 'A560' + lcPropName + CASE lcPropName == 'HScrollSmallChange' + lcPropName = 'A565' + lcPropName + CASE lcPropName == 'VScrollSmallChange' + lcPropName = 'A570' + lcPropName + CASE lcPropName == 'ContinuousScroll' + lcPropName = 'A575' + lcPropName + CASE lcPropName == 'Themes' + lcPropName = 'A580' + lcPropName + CASE lcPropName == 'BindControls' + lcPropName = 'A585' + lcPropName + CASE lcPropName == 'AllowOutput' + lcPropName = 'A590' + lcPropName + CASE lcPropName == 'Dockable' + lcPropName = 'A595' + lcPropName + CASE lcPropName == 'Name' + lnPropType = 1 && System "Name" property + lcPropName = 'A999' + lcPropName + OTHERWISE + lnPropType = 2 && User property + lcPropName = 'A998' + lcPropName + ENDCASE + + RETURN lcPropName + ENDPROC + + ******************************************************************************************************************* PROCEDURE sortPropsAndValues * KNOWLEDGE BASE: @@ -1330,89 +1645,120 @@ DEFINE CLASS c_conversor_base AS SESSION EXTERNAL ARRAY taPropsAndValues TRY - LOCAL I, X, lnArrayCols, laPropsAndValues(1,2) + LOCAL I, X, lnArrayCols, laPropsAndValues(1,2), lcPropName lnArrayCols = ALEN( taPropsAndValues, 2 ) DIMENSION laPropsAndValues( tnPropsAndValues_Count, lnArrayCols ) ACOPY( taPropsAndValues, laPropsAndValues ) - IF m.tnSortType >= 1 - * CON SORT: - * - A las que no tienen '.' les pongo 'A' por delante, y al resto 'B' por delante para que queden al final - FOR I = 1 TO m.tnPropsAndValues_Count - IF '.' $ laPropsAndValues(I,1) - IF m.tnSortType = 2 AND JUSTEXT( laPropsAndValues(I,1) ) == 'Name' - laPropsAndValues(I,1) = JUSTSTEM( laPropsAndValues(I,1) ) + '.' + CHR(255) + 'Name' - ENDIF + WITH THIS AS C_CONVERSOR_BASE OF 'FOXBIN2PRG.PRG' + IF m.tnSortType >= 1 + * CON SORT: + * - A las que no tienen '.' les pongo 'A' por delante, y al resto 'B' por delante para que queden al final + FOR I = 1 TO m.tnPropsAndValues_Count + IF '.' $ laPropsAndValues(I,1) + *IF m.tnSortType = 2 AND JUSTEXT( laPropsAndValues(I,1) ) == 'Name' + * laPropsAndValues(I,1) = JUSTSTEM( laPropsAndValues(I,1) ) + '.' + CHR(255) + 'Name' + *ENDIF - laPropsAndValues(I,1) = 'B' + laPropsAndValues(I,1) - ELSE - IF m.tnSortType = 2 AND laPropsAndValues(I,1) == 'Name' - laPropsAndValues(I,1) = CHR(255) + 'Name' - ENDIF + *laPropsAndValues(I,1) = 'B' + laPropsAndValues(I,1) + IF m.tnSortType = 2 + laPropsAndValues(I,1) = 'B' + JUSTSTEM(laPropsAndValues(I,1)) + '.' ; + + .sortPropsAndValues_SetAndGetSCXPropNames( 'SETNAME', JUSTEXT(laPropsAndValues(I,1)) ) + ELSE + laPropsAndValues(I,1) = 'B' + laPropsAndValues(I,1) + ENDIF + ELSE + *IF m.tnSortType = 2 AND laPropsAndValues(I,1) == 'Name' + * laPropsAndValues(I,1) = CHR(255) + 'Name' + *ENDIF - laPropsAndValues(I,1) = 'A' + laPropsAndValues(I,1) + *laPropsAndValues(I,1) = 'A' + laPropsAndValues(I,1) + IF m.tnSortType = 2 + laPropsAndValues(I,1) = .sortPropsAndValues_SetAndGetSCXPropNames( 'SETNAME', laPropsAndValues(I,1) ) + ELSE + laPropsAndValues(I,1) = 'A' + laPropsAndValues(I,1) + ENDIF + ENDIF + ENDFOR + + IF .l_PropSort_Enabled + ASORT( laPropsAndValues, 1, -1, 0, 1) ENDIF - ENDFOR - IF THIS.l_PropSort_Enabled - ASORT( laPropsAndValues, 1, -1, 0, 1) + + FOR I = 1 TO m.tnPropsAndValues_Count + *taPropsAndValues(I,1) = SUBSTR( laPropsAndValues(I,1), 2 ) && Quitar el carácter agregado + + *-- Quitar caracteres agregados antes del SORT + IF '.' $ laPropsAndValues(I,1) + IF m.tnSortType = 2 + taPropsAndValues(I,1) = JUSTSTEM( SUBSTR( laPropsAndValues(I,1), 2 ) ) + '.' ; + + .sortPropsAndValues_SetAndGetSCXPropNames( 'GETNAME', JUSTEXT(laPropsAndValues(I,1)) ) + ELSE + taPropsAndValues(I,1) = SUBSTR( laPropsAndValues(I,1), 2 ) + ENDIF + ELSE + IF m.tnSortType = 2 + taPropsAndValues(I,1) = .sortPropsAndValues_SetAndGetSCXPropNames( 'GETNAME', laPropsAndValues(I,1) ) + ELSE + taPropsAndValues(I,1) = SUBSTR( laPropsAndValues(I,1), 2 ) + ENDIF + ENDIF + + taPropsAndValues(I,2) = laPropsAndValues(I,2) + + IF lnArrayCols >= 3 + taPropsAndValues(I,3) = laPropsAndValues(I,3) + ENDIF + + *DO CASE + *CASE m.tnSortType <> 2 + * *-- Saltear + *CASE taPropsAndValues(I,1) == CHR(255) + 'Name' + * taPropsAndValues(I,1) = 'Name' + *CASE JUSTEXT( taPropsAndValues(I,1) ) == CHR(255) + 'Name' + * taPropsAndValues(I,1) = JUSTSTEM( taPropsAndValues(I,1) ) + '.Name' + *ENDCASE + ENDFOR + + ELSE && m.tnSortType = 0 + *-- SIN SORT: Creo 2 arrays, el bueno y el temporal, y al terminar agrego el temporal al bueno. + *-- Debo separar las props.normales de las de los objetos (ocurre cuando es un ADD OBJECT) + X = 0 + + *-- PRIMERO las que no tienen punto + FOR I = 1 TO m.tnPropsAndValues_Count + IF EMPTY( laPropsAndValues(I,1) ) + LOOP + ENDIF + + IF NOT '.' $ laPropsAndValues(I,1) + X = X + 1 + taPropsAndValues(X,1) = laPropsAndValues(I,1) + taPropsAndValues(X,2) = laPropsAndValues(I,2) + IF lnArrayCols >= 3 + taPropsAndValues(X,3) = laPropsAndValues(I,3) + ENDIF + ENDIF + ENDFOR + + *-- LUEGO las demás props. + FOR I = 1 TO m.tnPropsAndValues_Count + IF EMPTY( laPropsAndValues(I,1) ) + LOOP + ENDIF + + IF '.' $ laPropsAndValues(I,1) + X = X + 1 + taPropsAndValues(X,1) = laPropsAndValues(I,1) + taPropsAndValues(X,2) = laPropsAndValues(I,2) + IF lnArrayCols >= 3 + taPropsAndValues(X,3) = laPropsAndValues(I,3) + ENDIF + ENDIF + ENDFOR ENDIF - - - FOR I = 1 TO m.tnPropsAndValues_Count - taPropsAndValues(I,1) = SUBSTR( laPropsAndValues(I,1), 2 ) && Quitar el carácter agregado - taPropsAndValues(I,2) = laPropsAndValues(I,2) - IF lnArrayCols >= 3 - taPropsAndValues(I,3) = laPropsAndValues(I,3) - ENDIF - - DO CASE - CASE m.tnSortType <> 2 - *-- Saltear - CASE taPropsAndValues(I,1) == CHR(255) + 'Name' - taPropsAndValues(I,1) = 'Name' - CASE JUSTEXT( taPropsAndValues(I,1) ) == CHR(255) + 'Name' - taPropsAndValues(I,1) = JUSTSTEM( taPropsAndValues(I,1) ) + '.Name' - ENDCASE - ENDFOR - - ELSE && m.tnSortType = 0 - *-- SIN SORT: Creo 2 arrays, el bueno y el temporal, y al terminar agrego el temporal al bueno. - *-- Debo separar las props.normales de las de los objetos (ocurre cuando es un ADD OBJECT) - X = 0 - - *-- PRIMERO las que no tienen punto - FOR I = 1 TO m.tnPropsAndValues_Count - IF EMPTY( laPropsAndValues(I,1) ) - LOOP - ENDIF - - IF NOT '.' $ laPropsAndValues(I,1) - X = X + 1 - taPropsAndValues(X,1) = laPropsAndValues(I,1) - taPropsAndValues(X,2) = laPropsAndValues(I,2) - IF lnArrayCols >= 3 - taPropsAndValues(X,3) = laPropsAndValues(I,3) - ENDIF - ENDIF - ENDFOR - - *-- LUEGO las demás props. - FOR I = 1 TO m.tnPropsAndValues_Count - IF EMPTY( laPropsAndValues(I,1) ) - LOOP - ENDIF - - IF '.' $ laPropsAndValues(I,1) - X = X + 1 - taPropsAndValues(X,1) = laPropsAndValues(I,1) - taPropsAndValues(X,2) = laPropsAndValues(I,2) - IF lnArrayCols >= 3 - taPropsAndValues(X,3) = laPropsAndValues(I,3) - ENDIF - ENDIF - ENDFOR - ENDIF + ENDWITH && THIS AS C_CONVERSOR_BASE OF 'FOXBIN2PRG.PRG' *-- VER ESTO SI HACE FALTA, SOBRE LO DE PONER LOS METODOS AL FINAL Y ADAPTAR *-- Agregar propiedades primero @@ -3253,7 +3599,7 @@ DEFINE CLASS c_conversor_prg_a_vcx AS c_conversor_prg_a_bin C_FB2PRG_CODE = FILETOSTR( THIS.c_InputFile ) lnCodeLines = ALINES( laCodeLines, C_FB2PRG_CODE ) - THIS.doBackup() + THIS.doBackup( .F., .T. ) *-- Creo la librería THIS.createClasslib() @@ -3517,7 +3863,7 @@ DEFINE CLASS c_conversor_prg_a_scx AS c_conversor_prg_a_bin C_FB2PRG_CODE = FILETOSTR( THIS.c_InputFile ) lnCodeLines = ALINES( laCodeLines, C_FB2PRG_CODE ) - THIS.doBackup() + THIS.doBackup( .F., .T. ) *-- Creo el form THIS.createForm() @@ -3686,59 +4032,56 @@ DEFINE CLASS c_conversor_prg_a_scx AS c_conversor_prg_a_bin THIS.insert_AllObjects( @loClase ) - - IF .F. &&NOT loClase._BaseClass == 'dataenvironment' - *-- Inserto el COMMENT - INSERT INTO TABLABIN ; - ( PLATFORM ; - , UNIQUEID ; - , TIMESTAMP ; - , CLASS ; - , CLASSLOC ; - , BASECLASS ; - , OBJNAME ; - , PARENT ; - , PROPERTIES ; - , PROTECTED ; - , METHODS ; - , OLE ; - , OLE2 ; - , RESERVED1 ; - , RESERVED2 ; - , RESERVED3 ; - , RESERVED4 ; - , RESERVED5 ; - , RESERVED6 ; - , RESERVED7 ; - , RESERVED8 ; - , USER) ; - VALUES ; - ( 'COMMENT' ; - , 'RESERVED' ; - , loClase._TimeStamp ; - , '' ; - , '' ; - , '' ; - , loClase._ObjName ; - , '' ; - , '' ; - , '' ; - , '' ; - , '' ; - , '' ; - , '' ; - , IIF(loClase._OlePublic, 'OLEPublic', '') ; - , '' ; - , '' ; - , '' ; - , '' ; - , '' ; - , '' ; - , '' ) - ENDIF - ENDFOR && I = 1 TO toModulo._Clases_Count + *-- Inserto el COMMENT final + INSERT INTO TABLABIN ; + ( PLATFORM ; + , UNIQUEID ; + , TIMESTAMP ; + , CLASS ; + , CLASSLOC ; + , BASECLASS ; + , OBJNAME ; + , PARENT ; + , PROPERTIES ; + , PROTECTED ; + , METHODS ; + , OLE ; + , OLE2 ; + , RESERVED1 ; + , RESERVED2 ; + , RESERVED3 ; + , RESERVED4 ; + , RESERVED5 ; + , RESERVED6 ; + , RESERVED7 ; + , RESERVED8 ; + , USER) ; + VALUES ; + ( 'COMMENT' ; + , 'RESERVED' ; + , 0 ; + , '' ; + , '' ; + , '' ; + , '' ; + , '' ; + , '' ; + , '' ; + , '' ; + , '' ; + , '' ; + , '' ; + , '' ; + , '' ; + , '' ; + , '' ; + , '' ; + , '' ; + , '' ; + , '' ) + USE IN (SELECT("TABLABIN")) COMPILE FORM (THIS.c_OutputFile) @@ -3798,7 +4141,7 @@ DEFINE CLASS c_conversor_prg_a_pjx AS c_conversor_prg_a_bin C_FB2PRG_CODE = FILETOSTR( THIS.c_InputFile ) lnCodeLines = ALINES( laCodeLines, C_FB2PRG_CODE ) - THIS.doBackup() + THIS.doBackup( .F., .T. ) *-- Creo solo la cabecera del proyecto THIS.createProject() @@ -4504,7 +4847,7 @@ DEFINE CLASS c_conversor_prg_a_frx AS c_conversor_prg_a_bin C_FB2PRG_CODE = FILETOSTR( THIS.c_InputFile ) lnCodeLines = ALINES( laCodeLines, C_FB2PRG_CODE ) - THIS.doBackup() + THIS.doBackup( .F., .T. ) *-- Creo el reporte THIS.createReport()