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()