From 7c14118efc4544400046bb724dd5f6d46ad16c1e Mon Sep 17 00:00:00 2001 From: fernando Date: Thu, 2 Jan 2014 01:24:51 +0100 Subject: [PATCH] Changeset: 122 Fin desarrollo Menu > Texto > Menu! :-) --- foxbin2prg.pjt | Bin 304062 -> 310794 bytes foxbin2prg.pjx | Bin 1582 -> 1582 bytes foxbin2prg.prg | 562 ++++++++++++++++++++++++++----------------------- 3 files changed, 293 insertions(+), 269 deletions(-) diff --git a/foxbin2prg.pjt b/foxbin2prg.pjt index e43a5b078375e68ad57104ec88c2deffbb332913..24a1d60af4eb79e587afc45ffbe898441ac0b91c 100644 GIT binary patch delta 25599 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 BF@pdA delta 19232 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 delta 76 zcmZ3-vyO+wfR{&ZBg-}x4r3D&6H60A^T~%;s&t_o69y=73sF#TQvd=}6R=nnP@IR6 PfkDB<*xX`rChJiEP&^JC diff --git a/foxbin2prg.prg b/foxbin2prg.prg index a17a5e6..60ffe64 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -1194,14 +1194,14 @@ DEFINE CLASS c_conversor_base AS SESSION * RETURN: Memo desindentado *--------------------------------------------------------------------------------------------------- LPARAMETERS tcMemo, tcIndentacion - + LOCAL lcMemo, laLines(1), I lcMemo = '' - + FOR I = 1 TO ALINES( laLines, tcMemo ) lcMemo = lcMemo + SUBSTR( laLines(I), LEN(tcIndentacion) + 1 ) + CR_LF ENDFOR - + RETURN lcMemo ENDPROC @@ -2852,24 +2852,24 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base CREATE TABLE (THIS.c_OutputFile) ; ( 'OBJTYPE' Numeric(2) ; , 'OBJCODE' Numeric(2) ; - , 'NAME' Memo ; - , 'PROMPT' Memo ; - , 'COMMAND' Memo ; - , 'MESSAGE' Memo ; + , 'NAME' MEMO ; + , 'PROMPT' MEMO ; + , 'COMMAND' MEMO ; + , 'MESSAGE' MEMO ; , 'PROCTYPE' Numeric(1) ; - , 'PROCEDURE' Memo ; + , 'PROCEDURE' MEMO ; , 'SETUPTYPE' Numeric(1) ; - , 'SETUP' Memo ; + , 'SETUP' MEMO ; , 'CLEANTYPE' Numeric(1) ; - , 'CLEANUP' Memo ; - , 'MARK' Character(1) ; - , 'KEYNAME' Memo ; - , 'KEYLABEL' Memo ; - , 'SKIPFOR' Memo ; + , 'CLEANUP' MEMO ; + , 'MARK' CHARACTER(1) ; + , 'KEYNAME' MEMO ; + , 'KEYLABEL' MEMO ; + , 'SKIPFOR' MEMO ; , 'NAMECHANGE' Logical ; , 'NUMITEMS' Numeric(2) ; - , 'LEVELNAME' Character(10) ; - , 'ITEMNUM' Character(3) ; + , 'LEVELNAME' CHARACTER(10) ; + , 'ITEMNUM' CHARACTER(3) ; , 'COMMENT' MEMORY(4) ; , 'LOCATION' Numeric(2) ; , 'SCHEME' Numeric(2) ; @@ -14185,13 +14185,13 @@ DEFINE CLASS CL_MENU_COL_BASE AS CL_COL_BASE * y luego al generar el código lo muestran como Comando si es una sola línea, y si no como Procedure. *--------------------------------------------------------------------------------------------------- LPARAMETERS tcExpr, tcProcName, tcProcCode, tcSourceCode, tnIndentation, tlAddProcEndproc - + LOCAL laProcLines(1), lnLine_Count, I tcProcName = '' tcProcCode = '' tnIndentation = EVL(tnIndentation,0) lnLine_Count = ALINES( laProcLines, tcExpr ) - + IF lnLine_Count > 1 *-- ES UN PROCEDIMIENTO tcProcCode = tcExpr @@ -14218,14 +14218,15 @@ DEFINE CLASS CL_MENU_COL_BASE AS CL_COL_BASE ENDIF ENDIF ENDIF - + *-- Si se indicó indentación, se reprocesa el código del procedimiento IF NOT EMPTY(tcProcCode) AND (tnIndentation <> 0 OR tlAddProcEndproc) lnLine_Count = ALINES( laProcLines, tcProcCode ) tcProcCode = '' IF tlAddProcEndproc - tcProcCode = '*' + REPLICATE('-',34) + CR_LF + 'PROCEDURE <>' + CR_LF + *tcProcCode = '*' + REPLICATE('-',34) + CR_LF + 'PROCEDURE <>' + CR_LF + tcProcCode = 'PROCEDURE <>' + CR_LF ENDIF DO CASE @@ -14256,7 +14257,7 @@ DEFINE CLASS CL_MENU_COL_BASE AS CL_COL_BASE tcProcCode = tcProcCode + 'ENDPROC &' + '& <>' + CR_LF ENDIF ENDIF - + ENDPROC @@ -14321,30 +14322,6 @@ DEFINE CLASS CL_MENU AS CL_MENU_COL_BASE THIS.oReg = toConversor.emptyRecord() loReg = THIS.oReg - WITH loReg - .OBJCODE = 22 - .PROCTYPE = 1 - .MARK = CHR(4) - .LOCATION = 1 - .SETUPTYPE = 1 - .CLEANTYPE = 1 - .ITEMNUM = STR(0,3) - lcExpr = ALLTRIM( STREXTRACT( C_FB2PRG_CODE, 'ON SELECTION MENU _MSYSMENU ', CR_LF ) ) - - IF NOT EMPTY(lcExpr) - THIS.AnalizarSiExpresionEsComandoOProcedimiento( lcExpr, @lcProcName, @lcProcCode, @C_FB2PRG_CODE, -1, .F. ) - - IF EMPTY(lcProcCode) - *-- Comando - .PROCEDURE = lcExpr - ELSE - *-- Procedure - lcProcCode = STRTRAN( lcProcCode, '<>', lcProcName ) - .PROCEDURE = lcProcCode - ENDIF - ENDIF - ENDWITH - FOR I = I + 0 TO tnCodeLines THIS.set_Line( @tcLine, @taCodeLines, I ) @@ -14357,7 +14334,7 @@ DEFINE CLASS CL_MENU AS CL_MENU_COL_BASE CASE NOT llBloque_MenuType_Analizado AND LEFT( tcLine, LEN(C_MENUTYPE_I) ) == C_MENUTYPE_I toConversor.n_MenuType = INT( VAL( STREXTRACT( tcLine, C_MENUTYPE_I, C_MENUTYPE_F ) ) ) - loReg.OBJTYPE = toConversor.n_MenuType + loReg.ObjType = toConversor.n_MenuType llBloque_MenuType_Analizado = .T. CASE NOT llBloque_SetupCode_Analizado AND THIS.analizarBloque_SetupCode( @tcLine, @taCodeLines, @I, tnCodeLines, toConversor ) @@ -14373,7 +14350,7 @@ DEFINE CLASS CL_MENU AS CL_MENU_COL_BASE llBloque_Procedure_Analizado = .T. OTHERWISE && Otro valor - *-- No hay otros valores que reconocer + *EXIT ENDCASE ENDFOR @@ -14426,7 +14403,7 @@ DEFINE CLASS CL_MENU AS CL_MENU_COL_BASE ENDFOR I = I - 1 - THIS.oReg.Setup = SUBSTR( lcText, 3 ) && Quito el primer CR_LF + THIS.oReg.SETUP = SUBSTR( lcText, 3 ) && Quito el primer CR_LF ENDIF CATCH TO loEx @@ -14512,18 +14489,92 @@ DEFINE CLASS CL_MENU AS CL_MENU_COL_BASE TRY LOCAL loOptions AS CL_MENU_OPTION OF 'FOXBIN2PRG.PRG' LOCAL loBarPop AS CL_MENU_BARPOP OF 'FOXBIN2PRG.PRG' - LOCAL llBloqueEncontrado, lcPropName, lcValue, lcComment, loEx AS EXCEPTION ; + LOCAL llBloqueEncontrado, lcExpr, lcProcName, lcProcCode, lcComment, loReg, loEx AS EXCEPTION ; , llBloque_SetupCode_Analizado - STORE '' TO lcPropName, lcValue, lcComment + STORE '' TO lcExpr, lcProcName, lcProcCode, lcComment + loReg = THIS.oReg IF LEFT(tcLine, LEN(C_MENUCODE_I)) == C_MENUCODE_I llBloqueEncontrado = .T. + *-- HEADER + WITH loReg + .OBJCODE = 22 + .PROCTYPE = 1 + .MARK = CHR(4) + .LOCATION = 1 + .SETUPTYPE = 1 + .CLEANTYPE = 1 + .ITEMNUM = STR(0,3) + + IF .ObjType = 4 && Shortcut menu + lcExpr = ALLTRIM( STREXTRACT( C_FB2PRG_CODE, 'ON SELECTION POPUP ALL ', CR_LF ) ) + + IF NOT EMPTY(lcExpr) + THIS.AnalizarSiExpresionEsComandoOProcedimiento( lcExpr, @lcProcName, @lcProcCode, @C_FB2PRG_CODE, -1, .F. ) + + IF EMPTY(lcProcCode) + *-- Comando + .PROCEDURE = lcExpr + ELSE + *-- Procedure + lcProcCode = STRTRAN( lcProcCode, '<>', lcProcName ) + .PROCEDURE = lcProcCode + ENDIF + ENDIF + ELSE && .OBJTYPE = 1 ó 5 + lcExpr = ALLTRIM( STREXTRACT( C_FB2PRG_CODE, 'ON SELECTION MENU _MSYSMENU ', CR_LF ) ) + + IF NOT EMPTY(lcExpr) + THIS.AnalizarSiExpresionEsComandoOProcedimiento( lcExpr, @lcProcName, @lcProcCode, @C_FB2PRG_CODE, -1, .F. ) + + IF EMPTY(lcProcCode) + *-- Comando + .PROCEDURE = lcExpr + ELSE + *-- Procedure + lcProcCode = STRTRAN( lcProcCode, '<>', lcProcName ) + .PROCEDURE = lcProcCode + ENDIF + ENDIF + ENDIF + ENDWITH + + loBarPop = CREATEOBJECT('CL_MENU_BARPOP') loBarPop.c_ParentName = '' loBarPop.n_ParentCode = THIS.oReg.OBJCODE + loBarPop.n_ParentType = THIS.oReg.ObjType loBarPop.analizarBloque( @tcLine, @taCodeLines, @I, @tnCodeLines, toConversor ) - THIS.Add( loBarPop ) + THIS.ADD( loBarPop ) + + IF loReg.ObjType = 4 && Shortcut menu + *-- Creo option + loOption = CREATEOBJECT("CL_MENU_OPTION") + loOption.oReg = toConversor.emptyRecord() + WITH loOption.oReg + .ObjType = 3 + .OBJCODE = 77 + .PROMPT = '\><><> ENDTEXT - IF NOT EMPTY(loReg.Setup) + IF NOT EMPTY(loReg.SETUP) TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 <<>> <> @@ -14645,74 +14700,35 @@ DEFINE CLASS CL_MENU AS CL_MENU_COL_BASE IF EMPTY(lcProcCode) *-- Comando - lcText = lcText + 'ON SELECTION MENU ' + loBarPop.Name + ' ' + lcExpr + CR_LF - *TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 - * ON SELECTION MENU <> <> - *ENDTEXT + lcText = lcText + 'ON SELECTION MENU ' + loBarPop.NAME + ' ' + lcExpr + CR_LF ELSE *-- Procedure - lcProcName = EVL( lcProcName, CHRTRAN('SELECTION MENU ' + loBarPop.Name, ' ', '_') ) - lcText = lcText + 'ON SELECTION MENU ' + loBarPop.Name + ' DO ' + lcProcName + CR_LF - * ON SELECTION MENU <> DO <> && - *TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 - * ON SELECTION MENU <> DO <> - *ENDTEXT + lcProcName = EVL( lcProcName, CHRTRAN('SELECTION MENU ' + loBarPop.NAME, ' ', '_') + '_FB2P' ) + lcText = lcText + 'ON SELECTION MENU ' + loBarPop.NAME + ' DO ' + lcProcName + CR_LF lcProcCode = STRTRAN( lcProcCode, '<>', lcProcName ) lcEndProcedures = lcEndProcedures + lcProcCode + CR_LF ENDIF ENDIF -*!* *-- Procedimiento del Menu Bar (ObjType:2, ObjCode:1) -*!* IF NOT EMPTY(loBarPop.PROCEDURE) -*!* lcExpr = loBarPop.PROCEDURE -*!* THIS.AnalizarSiExpresionEsComandoOProcedimiento( lcExpr, @lcProcName, @lcProcCode, '', 1, .T. ) - -*!* IF EMPTY(lcProcCode) -*!* *-- Comando -*!* TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 -*!* ON SELECTION POPUP ALL <> -*!* ENDTEXT -*!* ELSE -*!* *-- Procedure -*!* lcProcName = EVL( lcProcName, CHRTRAN('SELECTION POPUP ALL', ' ', '_') ) -*!* * ON SELECTION POPUP ALL DO <> && -*!* TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 -*!* ON SELECTION POPUP ALL DO <> -*!* ENDTEXT -*!* lcProcCode = STRTRAN( lcProcCode, '<>', lcProcName ) -*!* lcEndProcedures = lcEndProcedures + lcProcCode + CR_LF -*!* ENDIF -*!* ENDIF - CASE loHeader.ObjType = 4 - *-- Propecimiento principal de _MSYSMENU (ObjType:1, ObjCode:22) -*!* IF NOT EMPTY(loReg.PROCEDURE) -*!* lcExpr = loReg.PROCEDURE -*!* THIS.AnalizarSiExpresionEsComandoOProcedimiento( lcExpr, @lcProcName, @lcProcCode, '', 1, .T. ) + IF NOT EMPTY(loHeader.PROCEDURE) + lcExpr = loHeader.PROCEDURE + THIS.AnalizarSiExpresionEsComandoOProcedimiento( lcExpr, @lcProcName, @lcProcCode, '', 1, .T. ) -*!* IF EMPTY(lcProcCode) -*!* *-- Comando -*!* TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 -*!* ON SELECTION POPUP <> <> -*!* ENDTEXT -*!* ELSE -*!* *-- Procedure -*!* lcProcName = EVL( lcProcName, CHRTRAN('SELECTION POPUP ' + THIS.Item(1).Item(1).Item(1).oReg.Name, ' ', '_') ) -*!* * ON SELECTION POPUP <> DO <> && -*!* TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 -*!* ON SELECTION POPUP <> DO <> -*!* ENDTEXT -*!* lcProcCode = STRTRAN( lcProcCode, '<>', lcProcName ) -*!* lcEndProcedures = lcEndProcedures + lcProcCode + CR_LF -*!* ENDIF -*!* ENDIF + IF EMPTY(lcProcCode) + *-- Comando + lcText = lcText + 'ON SELECTION POPUP ALL ' + lcExpr + CR_LF + ELSE + *-- Procedure + lcText = lcText + 'ON SELECTION POPUP ALL ' + loBarPop.NAME + ' DO ' + lcProcName + CR_LF + lcProcCode = STRTRAN( lcProcCode, '<>', lcProcName ) + lcEndProcedures = lcEndProcedures + lcProcCode + CR_LF + ENDIF + ENDIF - lcText = lcText + 'ACTIVATE POPUP ' + THIS.Item(1).Item(1).Item(1).oReg.Name + CR_LF - *TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 - * ACTIVATE POPUP <> - *ENDTEXT + lcText = lcText + 'ACTIVATE POPUP ' + THIS.ITEM(1).ITEM(1).ITEM(1).oReg.NAME + CR_LF ENDCASE - + TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 <> ENDTEXT @@ -14724,7 +14740,7 @@ DEFINE CLASS CL_MENU AS CL_MENU_COL_BASE + lcEndProcedures ; + C_PROC_CODE_F + CR_LF ENDIF - + IF NOT EMPTY(loReg.Cleanup) TEXT TO lcText ADDITIVE TEXTMERGE NOSHOW FLAGS 1+2 PRETEXT 1+2 <<>> @@ -14773,7 +14789,7 @@ DEFINE CLASS CL_MENU AS CL_MENU_COL_BASE #ENDIF SELECT TABLABIN - + IF THIS.l_Debug toConversor.writeLog( '' ) toConversor.writeLog( REPLICATE('-',80) ) @@ -14795,8 +14811,8 @@ DEFINE CLASS CL_MENU AS CL_MENU_COL_BASE * tnNivel (v! IN ) Nivel de indentación (solo para debug) * toConversor (v! IN ) Referencia al conversor para poder usar sus métodos *--------------------------------------------------------------------------------------------------- - LPARAMETERS toObj as Collection, tnNivel, toConversor - LOCAL loReg, loEx as Exception + LPARAMETERS toObj AS COLLECTION, tnNivel, toConversor + LOCAL loReg, loEx AS EXCEPTION #IF .F. LOCAL toConversor AS c_conversor_prg_a_mnx OF 'FOXBIN2PRG.PRG' @@ -14810,33 +14826,33 @@ DEFINE CLASS CL_MENU AS CL_MENU_COL_BASE IF THIS.l_Debug toConversor.writeLog( REPLICATE(C_TAB,tnNivel) ; + 'ObjType=' + TRANSFORM(loReg.ObjType) ; - + ', ObjCode=' + TRANSFORM(loReg.ObjCode) ; + + ', ObjCode=' + TRANSFORM(loReg.OBJCODE) ; + ', Name=' + TRANSFORM(loReg.NAME) ; - + ', LevelName=' + TRANSFORM(loReg.LEVELNAME) ; - + ', ItemNum=' + TRANSFORM(loReg.ItemNum) ; - + ', Location=' + TRANSFORM(loReg.Location) ; + + ', LevelName=' + TRANSFORM(loReg.LevelName) ; + + ', ItemNum=' + TRANSFORM(loReg.ITEMNUM) ; + + ', Location=' + TRANSFORM(loReg.LOCATION) ; + ', Prompt=' + TRANSFORM(loReg.PROMPT) ; - + ', Message=' + TRANSFORM(loReg.Message) ; + + ', Message=' + TRANSFORM(loReg.MESSAGE) ; + ', KeyName=' + TRANSFORM(loReg.KEYNAME) ; + ', KeyLabel=' + TRANSFORM(loReg.KeyLabel) ; - + ', Comment=' + TRANSFORM(loReg.Comment) ; - + ', SkipFor=' + TRANSFORM(loReg.SkipFor) ) + + ', Comment=' + TRANSFORM(loReg.COMMENT) ; + + ', SkipFor=' + TRANSFORM(loReg.SKIPFOR) ) ENDIF - + ELSE IF THIS.l_Debug toConversor.writeLog( REPLICATE(C_TAB,tnNivel) ; - + 'Objeto [' + toObj.Class + '] sin registro oReg (nivel ' + TRANSFORM(tnNivel) + ')' ) + + 'Objeto [' + toObj.CLASS + '] sin registro oReg (nivel ' + TRANSFORM(tnNivel) + ')' ) ENDIF - + ENDIF - - IF toObj.Count > 0 THEN + + IF toObj.COUNT > 0 THEN FOR EACH loReg IN toObj FOXOBJECT THIS.UpdateMenu_Recursivo( loReg, tnNivel + 1, @toConversor ) ENDFOR ENDIF - + CATCH TO loEx IF THIS.l_Debug AND _VFP.STARTMODE = 0 SET STEP ON @@ -14858,6 +14874,7 @@ DEFINE CLASS CL_MENU_BARPOP AS CL_MENU_COL_BASE + [] ; + [] ; + [] ; + + [] ; + [] #IF .F. @@ -14866,6 +14883,7 @@ DEFINE CLASS CL_MENU_BARPOP AS CL_MENU_COL_BASE c_ParentName = '' n_ParentCode = 0 + n_ParentType = 0 PROCEDURE analizarBloque @@ -14888,67 +14906,78 @@ DEFINE CLASS CL_MENU_BARPOP AS CL_MENU_COL_BASE LOCAL llBloqueEncontrado, lcSubName, lcComment, lnLast_I, loReg, lcExpr, lcProcName, lcProcCode ; , loEx AS EXCEPTION STORE '' TO lcSubName, lcComment, lcExpr, lcProcName, lcProcCode - - THIS.oReg = toConversor.emptyRecord() - loReg = THIS.oReg - loReg.OBJTYPE = 2 - loReg.PROCTYPE = 1 - loReg.ITEMNUM = STR(0,3) - *LEFT( tcLine, 13 ) == 'DEFINE POPUP ' - llBloqueEncontrado = .T. + THIS.oReg = toConversor.emptyRecord() + loReg = THIS.oReg + loReg.ObjType = 2 + loReg.PROCTYPE = 1 + loReg.ITEMNUM = STR(0,3) + llBloqueEncontrado = .T. - FOR I = I + 0 TO tnCodeLines - STORE '' TO lcExpr, lcProcName, lcProcCode - THIS.set_Line( @tcLine, @taCodeLines, I ) + FOR I = I + 0 TO tnCodeLines + STORE '' TO lcExpr, lcProcName, lcProcCode + THIS.set_Line( @tcLine, @taCodeLines, I ) - DO CASE - CASE EMPTY( tcLine ) - LOOP + DO CASE + CASE EMPTY( tcLine ) + LOOP - CASE toConversor.lineIsOnlyCommentAndNoMetadata( @tcLine, @lcComment ) - LOOP && Saltear comentarios + CASE toConversor.lineIsOnlyCommentAndNoMetadata( @tcLine, @lcComment ) + LOOP && Saltear comentarios - CASE LEFT( tcLine, LEN(C_MENUCODE_F) ) == C_MENUCODE_F + CASE LEFT( tcLine, LEN(C_MENUCODE_F) ) == C_MENUCODE_F + EXIT + + CASE LEFT( tcLine, LEN(C_MENUCODE_I) ) == C_MENUCODE_I + loReg.OBJCODE = 1 + loReg.NAME = '_MSYSMENU' + loReg.LevelName = loReg.NAME + loReg.SCHEME = IIF( loReg.OBJCODE = 1, 3, 4 ) + + IF THIS.n_ParentType = 4 EXIT - - CASE LEFT( tcLine, LEN(C_MENUCODE_I) ) == C_MENUCODE_I - loReg.OBJCODE = 1 - loReg.NAME = '_MSYSMENU' - loReg.LEVELNAME = loReg.NAME + ELSE lcExpr = STREXTRACT( C_FB2PRG_CODE, 'ON SELECTION POPUP ALL ', CR_LF ) THIS.AnalizarSiExpresionEsComandoOProcedimiento( lcExpr, @lcProcName, @lcProcCode, @C_FB2PRG_CODE, -1 ) loReg.PROCEDURE = EVL(lcProcCode, lcExpr) - - CASE LEFT( tcLine, 13 ) == 'DEFINE POPUP ' - loReg.OBJCODE = 0 - loReg.NAME = ALLTRIM( GETWORDNUM( tcLine, 3 ) ) - loReg.LEVELNAME = loReg.NAME - lcExpr = ALLTRIM( STREXTRACT( C_FB2PRG_CODE, 'ON SELECTION POPUP ' + loReg.NAME + ' ', CR_LF ) ) - THIS.AnalizarSiExpresionEsComandoOProcedimiento( lcExpr, @lcProcName, @lcProcCode, @C_FB2PRG_CODE, -1 ) - loReg.PROCEDURE = EVL(lcProcCode, lcExpr) + ENDIF + CASE LEFT( tcLine, LEN('ON SELECTION POPUP ' + loReg.NAME) ) == 'ON SELECTION POPUP ' + loReg.NAME + EXIT - CASE LEFT( tcLine, 11 ) == 'DEFINE PAD ' OR LEFT( tcLine, 11 ) == 'DEFINE BAR ' - loOption = CREATEOBJECT("CL_MENU_OPTION") - lnLast_I = I - loOption.c_ParentName = loReg.LEVELNAME - loOption.n_ParentCode = loReg.OBJCODE - IF NOT loOption.analizarBloque( @tcLine, @taCodeLines, @I, tnCodeLines, toConversor ) - I = lnLast_I - llBloqueEncontrado = .F. - EXIT - ENDIF - THIS.ADD( loOption ) - loOption.oReg.ITEMNUM = STR(THIS.Count,3) - loReg.NUMITEMS = THIS.Count - loReg.SCHEME = IIF( loReg.OBJCODE = 1, 3, 4 ) - loOption = NULL + CASE LEFT( tcLine, 13 ) == 'DEFINE POPUP ' + loReg.OBJCODE = 0 + loReg.NAME = ALLTRIM( GETWORDNUM( tcLine, 3 ) ) + IF RIGHT(loReg.NAME,5) == '_FB2P' && Originalmente era vacío y se la había puesto un nombre temporal. + loReg.NAME = '' + ENDIF + loReg.LevelName = loReg.NAME + lcExpr = ALLTRIM( STREXTRACT( C_FB2PRG_CODE, 'ON SELECTION POPUP ' + loReg.NAME + ' ', CR_LF ) ) + THIS.AnalizarSiExpresionEsComandoOProcedimiento( lcExpr, @lcProcName, @lcProcCode, @C_FB2PRG_CODE, -1 ) + loReg.PROCEDURE = EVL(lcProcCode, lcExpr) - OTHERWISE && Otro valor - *-- No - ENDCASE - ENDFOR + CASE LEFT( tcLine, 11 ) == 'DEFINE PAD ' OR LEFT( tcLine, 11 ) == 'DEFINE BAR ' + loOption = CREATEOBJECT("CL_MENU_OPTION") + lnLast_I = I + loOption.c_ParentName = loReg.LevelName + loOption.n_ParentCode = loReg.OBJCODE + loOption.n_ParentType = loReg.ObjType + IF NOT loOption.analizarBloque( @tcLine, @taCodeLines, @I, tnCodeLines, toConversor ) + I = lnLast_I + llBloqueEncontrado = .F. + EXIT + ENDIF + THIS.ADD( loOption ) + loOption.oReg.ITEMNUM = STR(THIS.COUNT,3) + loReg.NUMITEMS = THIS.COUNT + loReg.SCHEME = IIF( loReg.OBJCODE = 1, 3, 4 ) + loOption = NULL + + OTHERWISE && Otro valor + I = I - 1 + EXIT + ENDCASE + ENDFOR *ENDIF CATCH TO loEx @@ -15018,16 +15047,16 @@ DEFINE CLASS CL_MENU_BARPOP AS CL_MENU_COL_BASE lcText = lcText + loOption.toText(loReg, tnNivel+0, @tcEndProcedures, toHeader) ENDFOR ENDIF - + *-- Procedure del POPUP o MENU IF NOT EMPTY(loReg.PROCEDURE) lcExpr = loReg.PROCEDURE THIS.AnalizarSiExpresionEsComandoOProcedimiento( lcExpr, @lcProcName, @lcProcCode, '', 1, .T. ) IF EMPTY(lcProcName) - lcText = lcText + lcTab + 'ON SELECTION POPUP ' + IIF( loReg.OBJCODE = 0, loReg.Name, 'ALL' ) + ' ' + lcExpr + CR_LF + lcText = lcText + lcTab + 'ON SELECTION POPUP ' + IIF( loReg.OBJCODE = 0, loReg.NAME, 'ALL' ) + ' ' + lcExpr + CR_LF ELSE - lcText = lcText + lcTab + 'ON SELECTION POPUP ' + IIF( loReg.OBJCODE = 0, loReg.Name, 'ALL' ) + ' DO ' + lcProcName + CR_LF + lcText = lcText + lcTab + 'ON SELECTION POPUP ' + IIF( loReg.OBJCODE = 0, loReg.NAME, 'ALL' ) + ' DO ' + lcProcName + CR_LF tcEndProcedures = tcEndProcedures + STRTRAN( lcProcCode, '<>', lcProcName ) + CR_LF ENDIF @@ -15063,6 +15092,7 @@ DEFINE CLASS CL_MENU_OPTION AS CL_MENU_COL_BASE + [] ; + [] ; + [] ; + + [] ; + [] #IF .F. @@ -15071,6 +15101,7 @@ DEFINE CLASS CL_MENU_OPTION AS CL_MENU_COL_BASE c_ParentName = '' n_ParentCode = 0 + n_ParentType = 0 PROCEDURE analizarBloque @@ -15110,10 +15141,13 @@ DEFINE CLASS CL_MENU_OPTION AS CL_MENU_COL_BASE CASE toConversor.lineIsOnlyCommentAndNoMetadata( @tcLine, @lcComment ) LOOP && Saltear comentarios + CASE LEFT( tcLine, LEN(C_MENUCODE_F) ) == C_MENUCODE_F + EXIT + CASE LEFT( tcLine, LEN(C_MENUCODE_I) ) == C_MENUCODE_I - loReg.OBJTYPE = 2 + loReg.ObjType = 2 loReg.OBJCODE = 1 - + CASE THIS.analizarBloque_DefinePAD( @tcLine, @taCodeLines, @I, tnCodeLines, toConversor ) IF EMPTY(loReg.PROMPT) *-- Esta opción no corresponde a este nivel. Debe subir. @@ -15123,7 +15157,7 @@ DEFINE CLASS CL_MENU_OPTION AS CL_MENU_COL_BASE IF loReg.OBJCODE <> 77 EXIT ENDIF - + CASE THIS.analizarBloque_DefineBAR( @tcLine, @taCodeLines, @I, tnCodeLines, toConversor ) IF EMPTY(loReg.PROMPT) *-- Esta opción no corresponde a este nivel. Debe subir. @@ -15133,12 +15167,13 @@ DEFINE CLASS CL_MENU_OPTION AS CL_MENU_COL_BASE IF loReg.OBJCODE <> 77 EXIT ENDIF - + CASE LEFT( tcLine, 13 ) == 'DEFINE POPUP ' loBarPop = CREATEOBJECT("CL_MENU_BARPOP") lnLast_I = I - loBarPop.c_ParentName = loReg.LEVELNAME + loBarPop.c_ParentName = loReg.LevelName loBarPop.n_ParentCode = loReg.OBJCODE + loBarPop.n_ParentType = loReg.ObjType THIS.ADD( loBarPop ) IF NOT loBarPop.analizarBloque( @tcLine, @taCodeLines, @I, tnCodeLines, toConversor ) I = I - 1 @@ -15147,14 +15182,15 @@ DEFINE CLASS CL_MENU_OPTION AS CL_MENU_COL_BASE EXIT OTHERWISE && Otro valor - *-- No + I = I - 1 + EXIT ENDCASE ENDFOR - CATCH TO loEx WHEN loEx.Message = 'Nivel_Anterior' + CATCH TO loEx WHEN loEx.MESSAGE = 'Nivel_Anterior' *-- OK. Volver a evaluar en el nivel anterior llBloqueEncontrado = .F. - + CATCH TO loEx IF THIS.l_Debug AND _VFP.STARTMODE = 0 SET STEP ON @@ -15202,17 +15238,13 @@ DEFINE CLASS CL_MENU_OPTION AS CL_MENU_COL_BASE *-------------------------------- IF LEFT( tcLine, 11 ) == 'DEFINE PAD ' llBloqueEncontrado = .T. - loReg = THIS.oReg - loReg.OBJTYPE = 3 - lcPadName = ALLTRIM( STREXTRACT( tcLine, 'PAD ' , ' OF' ) ) - *IF LEFT(lcPadName,1) == '_' AND LEN(lcPadName) = 10 - * *-- Es un nombre temporal, no se guarda. - *ELSE - loReg.NAME = lcPadName - *ENDIF - loReg.LEVELNAME = ALLTRIM( STREXTRACT( tcLine, ' OF ', ' PROMPT ' ) ) + loReg = THIS.oReg + loReg.ObjType = 3 + lcPadName = ALLTRIM( STREXTRACT( tcLine, 'PAD ' , ' OF' ) ) + loReg.NAME = lcPadName + loReg.LevelName = ALLTRIM( STREXTRACT( tcLine, ' OF ', ' PROMPT ' ) ) - IF loReg.LEVELNAME # THIS.c_ParentName + IF loReg.LevelName # THIS.c_ParentName EXIT ENDIF @@ -15241,12 +15273,12 @@ DEFINE CLASS CL_MENU_OPTION AS CL_MENU_COL_BASE lnNegObject = INT( AT( ',' + PADR( ALLTRIM(GETWORDNUM( lcExpr, 2, ',' )), 6, '_' ) ; , '______,NONE__,LEFT__,MIDDLE,RIGHT_' ) / 7 - 1 ) loReg.LOCATION = lnNegContainer + lnNegObject * 2^4 - + CASE LEFT( tcLine, 4 ) == 'KEY ' lcExpr = ALLTRIM( STREXTRACT( tcLine, 'KEY ', ';', 1, 2 ) ) lnPos = AT( ',', lcExpr ) loReg.KEYNAME = ALLTRIM( LEFT( lcExpr, lnPos-1 ) ) - loReg.KEYLABEL = ALLTRIM( STREXTRACT( lcExpr, '"', '"' ) ) + loReg.KeyLabel = ALLTRIM( STREXTRACT( lcExpr, '"', '"' ) ) CASE LEFT( tcLine, 9 ) == 'SKIP FOR ' loReg.SKIPFOR = ALLTRIM( STREXTRACT( tcLine, 'SKIP FOR ', ';', 1, 2 ) ) @@ -15271,14 +15303,14 @@ DEFINE CLASS CL_MENU_OPTION AS CL_MENU_COL_BASE ENDFOR ENDIF && ';' $ tcLine - + * Estructuras ejemplo a analizar: *-------------------------------- * ON PAD _3YM1DR90Z OF _MSYSMENU ACTIVATE POPUP OpciónA_CS * ON PAD _3YM1DR90Z OF _MSYSMENU wait window "algo" - * ON PAD _3YM1DR90Z OF _MSYSMENU DO Menu1_Opción_A_2_Sub_SNIPPET && + * ON PAD _3YM1DR90Z OF _MSYSMENU DO Menu1_Opción_A_2_Sub_SNIPPET *-------------------------------- - + *-- ANALISIS DEL "ON PAD" u "ON SELECTION PAD" FOR I = I + 1 TO tnCodeLines THIS.set_Line( @tcLine, @taCodeLines, I ) @@ -15294,13 +15326,15 @@ DEFINE CLASS CL_MENU_OPTION AS CL_MENU_COL_BASE EXIT CASE LEFT( tcLine, 17 ) == 'ON SELECTION PAD ' - lcExpr = ALLTRIM( STREXTRACT( tcLine, ' OF ' + loReg.LEVELNAME + ' ', '', 1, 2 ) ) + lcExpr = ALLTRIM( STREXTRACT( tcLine, ' OF ' + loReg.LevelName + ' ', '', 1, 2 ) ) THIS.AnalizarSiExpresionEsComandoOProcedimiento( lcExpr, @lcProcName, @lcProcCode, @C_FB2PRG_CODE, -1, .F. ) - + DO CASE - *CASE ' &'+'& ' $ lcExpr - CASE NOT EMPTY(lcProcCode) - *lcProcName = ALLTRIM( STREXTRACT( lcExpr, 'DO ', '&'+'&', 1, 2 ) ) + CASE EMPTY(lcProcCode) + loReg.OBJCODE = 67 + loReg.COMMAND = lcExpr + + OTHERWISE loReg.PROCEDURE = STRTRAN( lcProcCode, '<>', lcProcName ) IF EMPTY( loReg.PROCEDURE ) @@ -15311,10 +15345,6 @@ DEFINE CLASS CL_MENU_OPTION AS CL_MENU_COL_BASE loReg.PROCTYPE = 1 ENDIF - OTHERWISE - loReg.OBJCODE = 67 - loReg.COMMAND = lcExpr - ENDCASE I = I + 1 @@ -15386,17 +15416,18 @@ DEFINE CLASS CL_MENU_OPTION AS CL_MENU_COL_BASE *-------------------------------- IF LEFT( tcLine, 11 ) == 'DEFINE BAR ' llBloqueEncontrado = .T. - loReg = THIS.oReg - loReg.OBJTYPE = 3 - lcBarName = ALLTRIM( STREXTRACT( tcLine, 'BAR ' , ' OF' ) ) - *IF LEFT(lcBarName,1) == '_' + loReg = THIS.oReg + loReg.ObjType = 3 + lcBarName = ALLTRIM( STREXTRACT( tcLine, 'BAR ' , ' OF' ) ) + IF NOT ISDIGIT(lcBarName) *-- Es un BAR del sistema loReg.NAME = lcBarName ENDIF - loReg.LEVELNAME = ALLTRIM( STREXTRACT( tcLine, ' OF ', ' PROMPT ' ) ) - IF loReg.LEVELNAME # THIS.c_ParentName + loReg.LevelName = ALLTRIM( STREXTRACT( tcLine, ' OF ', ' PROMPT ' ) ) + + IF loReg.LevelName # THIS.c_ParentName EXIT ENDIF @@ -15425,12 +15456,12 @@ DEFINE CLASS CL_MENU_OPTION AS CL_MENU_COL_BASE lnNegObject = INT( AT( ',' + PADR( ALLTRIM(GETWORDNUM( lcExpr, 2, ',' )), 6, '_' ) ; , '______,NONE__,LEFT__,MIDDLE,RIGHT_' ) / 7 - 1 ) loReg.LOCATION = lnNegContainer + lnNegObject * 2^4 - + CASE LEFT( tcLine, 4 ) == 'KEY ' lcExpr = ALLTRIM( STREXTRACT( tcLine, 'KEY ', ';', 1, 2 ) ) lnPos = AT( ',', lcExpr ) loReg.KEYNAME = ALLTRIM( LEFT( lcExpr, lnPos-1 ) ) - loReg.KEYLABEL = ALLTRIM( STREXTRACT( lcExpr, '"', '"' ) ) + loReg.KeyLabel = ALLTRIM( STREXTRACT( lcExpr, '"', '"' ) ) CASE LEFT( tcLine, 9 ) == 'SKIP FOR ' loReg.SKIPFOR = ALLTRIM( STREXTRACT( tcLine, 'SKIP FOR ', ';', 1, 2 ) ) @@ -15458,17 +15489,18 @@ DEFINE CLASS CL_MENU_OPTION AS CL_MENU_COL_BASE IF LEFT(lcBarName,1) == '_' *-- Es un BAR del Sistema, así que no tiene ON BAR ni nada más. loReg.OBJCODE = 78 && Bar# + I = I + 1 EXIT ENDIF - + * Estructuras ejemplo a analizar: *-------------------------------- * ON BAR _3YM1DR90Z OF _MSYSMENU ACTIVATE POPUP OpciónA_CS * ON BAR _3YM1DR90Z OF _MSYSMENU wait window "algo" - * ON BAR _3YM1DR90Z OF _MSYSMENU DO Menu1_Opción_A_2_Sub_SNIPPET && + * ON BAR _3YM1DR90Z OF _MSYSMENU DO Menu1_Opción_A_2_Sub_SNIPPET *-------------------------------- - + *-- ANALISIS DEL "ON BAR" u "ON SELECTION BAR" FOR I = I + 1 TO tnCodeLines THIS.set_Line( @tcLine, @taCodeLines, I ) @@ -15484,13 +15516,11 @@ DEFINE CLASS CL_MENU_OPTION AS CL_MENU_COL_BASE EXIT CASE LEFT( tcLine, 17 ) == 'ON SELECTION BAR ' - lcExpr = ALLTRIM( STREXTRACT( tcLine, ' OF ' + loReg.LEVELNAME + ' ', '', 1, 2 ) ) + lcExpr = ALLTRIM( STREXTRACT( tcLine, ' OF ' + loReg.LevelName + ' ', '', 1, 2 ) ) THIS.AnalizarSiExpresionEsComandoOProcedimiento( lcExpr, @lcProcName, @lcProcCode, @C_FB2PRG_CODE, -1, .F. ) - + DO CASE - *CASE ' &'+'& ' $ lcExpr CASE NOT EMPTY(lcProcCode) - *lcProcName = ALLTRIM( STREXTRACT( lcExpr, 'DO ', '&'+'&', 1, 2 ) ) loReg.PROCEDURE = STRTRAN( lcProcCode, '<>', lcProcName ) IF EMPTY( loReg.PROCEDURE ) @@ -15521,7 +15551,6 @@ DEFINE CLASS CL_MENU_OPTION AS CL_MENU_COL_BASE ENDFOR I = I - 1 - *THIS.oReg.Cleanup = lcText ENDIF CATCH TO loEx @@ -15558,9 +15587,6 @@ DEFINE CLASS CL_MENU_OPTION AS CL_MENU_COL_BASE lcTab = REPLICATE(CHR(9),tnNivel) loBarPop = toParentReg - *-- Actualización de procedimientos - *lcProcName = THIS.get_ProcNameFromSnippet(loReg) - *-- Options (ObjType:3) DO CASE CASE toParentReg.ObjType = 2 AND toParentReg.OBJCODE = 0 @@ -15576,21 +15602,21 @@ DEFINE CLASS CL_MENU_OPTION AS CL_MENU_COL_BASE ENDTEXT ENDCASE - + IF loReg.OBJCODE = 80 && Procedure de BAR o PAD *-- Reemplazo el nombre definitivo lcExpr = loReg.PROCEDURE THIS.AnalizarSiExpresionEsComandoOProcedimiento( lcExpr, @lcProcName, @lcProcCode, '', 1, .T. ) IF EMPTY(lcProcName) - lcProcName = CHRTRAN( ALLTRIM( STREXTRACT( lcText, 'DEFINE ', 'PROMPT ' ) ), ' ', '_' ) + lcProcName = CHRTRAN( ALLTRIM( STREXTRACT( lcText, 'DEFINE ', 'PROMPT ' ) ), ' ', '_' ) + '_FB2P' ENDIF lcText = STRTRAN( lcText, '<>', lcProcName ) tcEndProcedures = tcEndProcedures + STRTRAN( lcProcCode, '<>', lcProcName ) + CR_LF ENDIF - - + + *-- Menu Bar or Popup (ObjType:2, ObjCode:0 ó 1) IF THIS.COUNT > 0 FOR EACH loBarPop IN THIS FOXOBJECT @@ -15616,8 +15642,8 @@ DEFINE CLASS CL_MENU_OPTION AS CL_MENU_COL_BASE RETURN lcText ENDPROC - - + + PROCEDURE get_DefineBarText *--------------------------------------------------------------------------------------------------- * PARÁMETROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT) @@ -15629,29 +15655,29 @@ DEFINE CLASS CL_MENU_OPTION AS CL_MENU_COL_BASE LPARAMETERS toReg, toBarPop, tnNivel, toHeader TRY - LOCAL lcText, lcTab, loEx as Exception ; + LOCAL lcText, lcTab, loEx AS EXCEPTION ; , loBarPop AS CL_MENU_BARPOP OF 'FOXBIN2PRG.PRG' lcTab = REPLICATE(CHR(9),tnNivel) lcText = '' *-- DEFINE BAR *lcText = lcTab + '*----------------------------------' + CR_LF - lcText = lcText + lcTab + 'DEFINE BAR ' + ALLTRIM( EVL( toReg.Name, toReg.ItemNum ) ) + ' OF ' + ALLTRIM(toReg.LevelName) ; + lcText = lcText + lcTab + 'DEFINE BAR ' + ALLTRIM( EVL( toReg.NAME, toReg.ITEMNUM ) ) + ' OF ' + ALLTRIM(toReg.LevelName) ; + ' PROMPT "' + toReg.PROMPT + '"' - IF NOT EMPTY(toReg.KeyName) - lcText = lcText + ' ;' + CR_LF + lcTab + ' KEY ' + toReg.KeyName + ', "' + toReg.KeyLabel + '"' + IF NOT EMPTY(toReg.KEYNAME) + lcText = lcText + ' ;' + CR_LF + lcTab + ' KEY ' + toReg.KEYNAME + ', "' + toReg.KeyLabel + '"' ENDIF IF NOT EMPTY(toReg.SKIPFOR) lcText = lcText + ' ;' + CR_LF + lcTab + ' SKIP FOR ' + toReg.SKIPFOR ENDIF - IF NOT EMPTY(toReg.ResName) - IF toReg.SysRes = 1 - lcText = lcText + ' ;' + CR_LF + lcTab + ' PICTRES ' + toReg.ResName + IF NOT EMPTY(toReg.RESNAME) + IF toReg.SYSRES = 1 + lcText = lcText + ' ;' + CR_LF + lcTab + ' PICTRES ' + toReg.RESNAME ELSE - lcText = lcText + ' ;' + CR_LF + lcTab + ' PICTURE "' + toReg.ResName + '"' + lcText = lcText + ' ;' + CR_LF + lcTab + ' PICTURE "' + toReg.RESNAME + '"' ENDIF ENDIF @@ -15668,17 +15694,16 @@ DEFINE CLASS CL_MENU_OPTION AS CL_MENU_COL_BASE lcText = lcText + CR_LF IF toReg.OBJCODE = 77 && Submenu - loBarPop = THIS.Item(1).oReg - lcText = lcText + lcTab + 'ON BAR ' + ALLTRIM( EVL( toReg.Name, toReg.ItemNum ) ) + ' OF ' + ALLTRIM(toReg.LevelName) ; - + ' ACTIVATE POPUP ' + ALLTRIM(loBarPop.Name) + loBarPop = THIS.ITEM(1).oReg + lcText = lcText + lcTab + 'ON BAR ' + ALLTRIM( EVL( toReg.NAME, toReg.ITEMNUM ) ) + ' OF ' + ALLTRIM(toReg.LevelName) ; + + ' ACTIVATE POPUP ' + ALLTRIM(loBarPop.NAME) ELSE - lcText = lcText + lcTab + 'ON SELECTION BAR ' + ALLTRIM( EVL( toReg.Name, toReg.ItemNum ) ) + ' OF ' + ALLTRIM(toReg.LevelName) - + lcText = lcText + lcTab + 'ON SELECTION BAR ' + ALLTRIM( EVL( toReg.NAME, toReg.ITEMNUM ) ) + ' OF ' + ALLTRIM(toReg.LevelName) + DO CASE CASE toReg.OBJCODE = 67 && Command - lcText = lcText + ' ' + ALLTRIM(toReg.Command) + lcText = lcText + ' ' + ALLTRIM(toReg.COMMAND) CASE toReg.OBJCODE = 80 && Procedure - *lcText = lcText + ' DO <>' + ' &'+'& ' lcText = lcText + ' DO <>' ENDCASE ENDIF @@ -15710,38 +15735,38 @@ DEFINE CLASS CL_MENU_OPTION AS CL_MENU_COL_BASE LPARAMETERS toReg, toBarPop, tnNivel, toHeader TRY - LOCAL lcText, lcTab, lnContainer, lnObject, loEx as Exception ; + LOCAL lcText, lcTab, lnContainer, lnObject, loEx AS EXCEPTION ; , loBarPop AS CL_MENU_BARPOP OF 'FOXBIN2PRG.PRG' lcTab = REPLICATE(CHR(9),tnNivel) - toReg.Name = EVL(toReg.Name,SYS(2015)) + toReg.NAME = EVL(toReg.NAME,SYS(2015)) lcText = '' *-- DEFINE PAD *lcText = lcTab + '*----------------------------------' + CR_LF - lcText = lcText + lcTab + 'DEFINE PAD ' + ALLTRIM(toReg.Name) + ' OF ' + ALLTRIM(toReg.LevelName) ; + lcText = lcText + lcTab + 'DEFINE PAD ' + ALLTRIM(toReg.NAME) + ' OF ' + ALLTRIM(toReg.LevelName) ; + ' PROMPT "' + toReg.PROMPT + '"' ; + ' COLOR SCHEME ' + TRANSFORM(toBarPop.SCHEME) - IF NOT EMPTY(toReg.Location) - lnContainer = toReg.Location % 2^4 - lnObject = INT( (toReg.Location - lnContainer) / 2^4 ) + IF NOT EMPTY(toReg.LOCATION) + lnContainer = toReg.LOCATION % 2^4 + lnObject = INT( (toReg.LOCATION - lnContainer) / 2^4 ) lcText = lcText + ' ;' + CR_LF + lcTab + ' NEGOTIATE ' + GETWORDNUM('NONE,LEFT,MIDDLE,RIGHT',lnContainer+1,',') ; + ', ' + GETWORDNUM('NONE,LEFT,MIDDLE,RIGHT',lnObject+1,',') ENDIF - IF NOT EMPTY(toReg.KeyName) - lcText = lcText + ' ;' + CR_LF + lcTab + ' KEY ' + toReg.KeyName + ', "' + toReg.KeyLabel + '"' + IF NOT EMPTY(toReg.KEYNAME) + lcText = lcText + ' ;' + CR_LF + lcTab + ' KEY ' + toReg.KEYNAME + ', "' + toReg.KeyLabel + '"' ENDIF IF NOT EMPTY(toReg.SKIPFOR) lcText = lcText + ' ;' + CR_LF + lcTab + ' SKIP FOR ' + toReg.SKIPFOR ENDIF - IF NOT EMPTY(toReg.ResName) - IF toReg.SysRes = 1 - lcText = lcText + ' ;' + CR_LF + lcTab + ' PICTRES ' + toReg.ResName + IF NOT EMPTY(toReg.RESNAME) + IF toReg.SYSRES = 1 + lcText = lcText + ' ;' + CR_LF + lcTab + ' PICTRES ' + toReg.RESNAME ELSE - lcText = lcText + ' ;' + CR_LF + lcTab + ' PICTURE "' + toReg.ResName + '"' + lcText = lcText + ' ;' + CR_LF + lcTab + ' PICTURE "' + toReg.RESNAME + '"' ENDIF ENDIF @@ -15760,17 +15785,16 @@ DEFINE CLASS CL_MENU_OPTION AS CL_MENU_COL_BASE lcText = lcText + CR_LF IF toReg.OBJCODE = 77 && Submenu - loBarPop = THIS.Item(1).oReg - lcText = lcText + lcTab + 'ON PAD ' + ALLTRIM(toReg.Name) + ' OF ' + ALLTRIM(toReg.LevelName) ; - + ' ACTIVATE POPUP ' + ALLTRIM(loBarPop.Name) + loBarPop = THIS.ITEM(1).oReg + lcText = lcText + lcTab + 'ON PAD ' + ALLTRIM(toReg.NAME) + ' OF ' + ALLTRIM(toReg.LevelName) ; + + ' ACTIVATE POPUP ' + ALLTRIM(loBarPop.NAME) ELSE - lcText = lcText + lcTab + 'ON SELECTION PAD ' + ALLTRIM(toReg.Name) + ' OF ' + ALLTRIM(toReg.LevelName) - + lcText = lcText + lcTab + 'ON SELECTION PAD ' + ALLTRIM(toReg.NAME) + ' OF ' + ALLTRIM(toReg.LevelName) + DO CASE CASE toReg.OBJCODE = 67 && Command - lcText = lcText + ' ' + ALLTRIM(toReg.Command) + lcText = lcText + ' ' + ALLTRIM(toReg.COMMAND) CASE toReg.OBJCODE = 80 && Procedure - *lcText = lcText + ' DO <>' + ' &'+'& ' lcText = lcText + ' DO <>' ENDCASE ENDIF