2009-05-07 08:55 UTC+0200 Viktor Szakats (harbour.01 syenar hu)

* source/rtl/tget.prg
    + Added TIMESTAMP support for GETs.
    % Optimizations using SWITCH and FOR EACH.
This commit is contained in:
Viktor Szakats
2009-05-07 06:56:10 +00:00
parent 7b89750a22
commit a3981c7408
2 changed files with 104 additions and 55 deletions

View File

@@ -17,6 +17,11 @@
past entries belonging to these authors: Viktor Szakats.
*/
2009-05-07 08:55 UTC+0200 Viktor Szakats (harbour.01 syenar hu)
* source/rtl/tget.prg
+ Added TIMESTAMP support for GETs.
% Optimizations using SWITCH and FOR EACH.
2009-05-07 08:16 UTC+0200 Viktor Szakats (harbour.01 syenar hu)
* utils/hbmk2/hbmk2.prg
* utils/hbmk2/hbmk2.hu_HU.po

View File

@@ -430,7 +430,7 @@ METHOD reset() CLASS GET
::lEdit := .F.
::lMinus := .F.
::rejected := .F.
::typeOut := !( ::type $ "CNDL" ) .OR. ( ::nPos == 0 ) /* ; Simple .F. in CA-Cl*pper [vszakats] */
::typeOut := !( ::type $ "CNDTL" ) .OR. ( ::nPos == 0 ) /* ; Simple .F. in CA-Cl*pper [vszakats] */
::display()
ENDIF
@@ -516,7 +516,7 @@ METHOD varPut( xValue ) CLASS GET
LOCAL i
LOCAL aValue
IF ISBLOCK( ::bBlock ) .AND. ValType( xValue ) $ "CNDLU"
IF ISBLOCK( ::bBlock ) .AND. ValType( xValue ) $ "CNDTLU"
aSubs := ::xSubScript
IF ISARRAY( aSubs ) .AND. ! Empty( aSubs )
nLen := Len( aSubs )
@@ -955,7 +955,7 @@ METHOD setColorSpec( cColorSpec ) CLASS GET
#endif
/* NOTE: CA-Cl*pper oddity. [vszakats] */
ELSEIF ValType( cColorSpec ) $ "UNDBA"
ELSEIF ValType( cColorSpec ) $ "UNDTBA"
RETURN NIL
@@ -1042,6 +1042,7 @@ METHOD picture( cPicture ) CLASS GET
LOCAL nAt
LOCAL nFor
LOCAL cNum
LOCAL cChar
IF PCount() > 0
@@ -1072,12 +1073,16 @@ METHOD picture( cPicture ) CLASS GET
IF "D" $ ::cPicFunc
::cPicMask := Set( _SET_DATEFORMAT )
::cPicMask := StrTran( ::cPicmask, "y", "9" )
::cPicMask := StrTran( ::cPicmask, "Y", "9" )
::cPicMask := StrTran( ::cPicmask, "m", "9" )
::cPicMask := StrTran( ::cPicmask, "M", "9" )
::cPicMask := StrTran( ::cPicmask, "d", "9" )
::cPicMask := StrTran( ::cPicmask, "D", "9" )
FOR EACH cChar IN "yYmMdD"
::cPicMask := StrTran( ::cPicmask, cChar, "9" )
NEXT
ELSEIF "T" $ ::cPicFunc
::cPicMask := Set( _SET_TIMEFORMAT )
FOR EACH cChar IN "yYmMdDhHsSfF"
::cPicMask := StrTran( ::cPicmask, cChar, "9" )
NEXT
ENDIF
@@ -1107,7 +1112,7 @@ METHOD picture( cPicture ) CLASS GET
::cPicMask := cPicture
ENDIF
IF ::cType == "D"
IF ::cType == "D" .OR. ::cType == "T"
::cPicMask := LTrim( ::cPicMask )
ENDIF
ENDIF
@@ -1117,18 +1122,24 @@ METHOD picture( cPicture ) CLASS GET
IF Empty( ::cPicMask ) .OR. ::cPicture == NIL
DO CASE
CASE ::cType == "D"
SWITCH ::cType
CASE "D"
::cPicMask := Set( _SET_DATEFORMAT )
::cPicMask := StrTran( ::cPicmask, "y", "9" )
::cPicMask := StrTran( ::cPicmask, "Y", "9" )
::cPicMask := StrTran( ::cPicmask, "m", "9" )
::cPicMask := StrTran( ::cPicmask, "M", "9" )
::cPicMask := StrTran( ::cPicmask, "d", "9" )
::cPicMask := StrTran( ::cPicmask, "D", "9" )
FOR EACH cChar IN "yYmMdD"
::cPicMask := StrTran( ::cPicmask, cChar, "9" )
NEXT
EXIT
CASE ::cType == "N"
CASE "T"
::cPicMask := Set( _SET_TIMEFORMAT )
FOR EACH cChar IN "yYmMdDhHsSfF"
::cPicMask := StrTran( ::cPicmask, cChar, "9" )
NEXT
EXIT
CASE "N"
cNum := Str( ::xVarGet )
IF ( nAt := At( ".", cNum ) ) > 0
@@ -1137,13 +1148,17 @@ METHOD picture( cPicture ) CLASS GET
ELSE
::cPicMask := Replicate( "9", Len( cNum ) )
ENDIF
EXIT
CASE ::cType == "C" .AND. ::cPicFunc == "@9"
CASE "C"
::cPicMask := Replicate( "9", Len( ::xVarGet ) )
::cPicFunc := ""
IF ::cPicFunc == "@9"
::cPicMask := Replicate( "9", Len( ::xVarGet ) )
::cPicFunc := ""
ENDIF
EXIT
ENDCASE
ENDSWITCH
ENDIF
@@ -1151,8 +1166,8 @@ METHOD picture( cPicture ) CLASS GET
::lPicComplex := .F.
IF ! Empty( ::cPicMask )
FOR nFor := 1 TO Len( ::cPicMask )
IF !( SubStr( ::cPicMask, nFor, 1 ) $ "!ANX9#" )
FOR EACH cChar IN ::cPicMask
IF !( cChar $ "!ANX9#" )
::lPicComplex := .T.
EXIT
ENDIF
@@ -1172,7 +1187,7 @@ METHOD PutMask( xValue, lEdit ) CLASS GET
DEFAULT lEdit TO ::hasFocus
IF !( ValType( xValue ) $ "CNDL" )
IF !( ValType( xValue ) $ "CNDTL" )
xValue := ""
ENDIF
@@ -1236,7 +1251,7 @@ METHOD PutMask( xValue, lEdit ) CLASS GET
ENDIF
ENDIF
IF ::cType == "D" .AND. ::badDate
IF ( ::cType == "D" .OR. ::cType == "T" ) .AND. ::badDate
cBuffer := ::cBuffer
ENDIF
@@ -1251,6 +1266,7 @@ METHOD unTransform() CLASS GET
LOCAL nFor
LOCAL lMinus
LOCAL lHasDec
LOCAL cChar
IF ::hasFocus
@@ -1258,8 +1274,8 @@ METHOD unTransform() CLASS GET
IF ISCHARACTER( cBuffer )
DO CASE
CASE ::cType == "C"
SWITCH ::cType
CASE "C"
IF "R" $ ::cPicFunc
xValue := ""
@@ -1271,8 +1287,9 @@ METHOD unTransform() CLASS GET
ELSE
xValue := cBuffer
ENDIF
EXIT
CASE ::cType == "N"
CASE "N"
lMinus := .F.
IF "X" $ ::cPicFunc
@@ -1293,7 +1310,8 @@ METHOD unTransform() CLASS GET
ENDIF
cBuffer := Space( ::FirstEditable() - 1 ) + SubStr( cBuffer, ::FirstEditable(), ::LastEditable() - ::FirstEditable() + 1 )
IF "D" $ ::cPicFunc
IF "D" $ ::cPicFunc .OR. ;
"T" $ ::cPicFunc
FOR nFor := ::FirstEditable() TO ::LastEditable()
IF !::IsEditable( nFor )
cBuffer := Left( cBuffer, nFor - 1 ) + Chr( 1 ) + SubStr( cBuffer, nFor + 1 )
@@ -1337,8 +1355,8 @@ METHOD unTransform() CLASS GET
cBuffer := PadL( StrTran( cBuffer, " ", "" ), Len( cBuffer ) )
IF lMinus
FOR nFor := 1 TO Len( cBuffer )
IF IsDigit( SubStr( cBuffer, nFor, 1 ) ) .OR. SubStr( cBuffer, nFor, 1 ) == "."
FOR EACH cChar IN cBuffer
IF IsDigit( cChar ) .OR. cChar == "."
EXIT
ENDIF
NEXT
@@ -1352,21 +1370,30 @@ METHOD unTransform() CLASS GET
xValue := Val( cBuffer )
CASE ::cType == "L"
EXIT
CASE "L"
cBuffer := Upper( cBuffer )
xValue := "T" $ cBuffer .OR. ;
"Y" $ cBuffer .OR. ;
hb_LangMessage( HB_LANG_ITEM_BASE_TEXT + 1 ) $ cBuffer
EXIT
CASE ::cType == "D"
CASE "D"
IF "E" $ ::cPicFunc
cBuffer := SubStr( cBuffer, 4, 3 ) + SubStr( cBuffer, 1, 3 ) + SubStr( cBuffer, 7 )
ENDIF
xValue := CToD( cBuffer )
EXIT
ENDCASE
CASE "T"
xValue := hb_CToT( cBuffer )
EXIT
ENDSWITCH
ELSE
::lClear := .F.
@@ -1443,10 +1470,18 @@ METHOD badDate() CLASS GET
LOCAL xValue
RETURN ::hasFocus .AND. ;
::type == "D" .AND. ;
( xValue := ::unTransform() ) == hb_SToD() .AND. ;
!( ::cBuffer == Transform( xValue, ::cPicture ) )
IF ::hasFocus
SWITCH ::type
CASE "D"
RETURN ( xValue := ::unTransform() ) == hb_SToD() .AND. ;
!( ::cBuffer == Transform( xValue, ::cPicture ) )
CASE "T"
RETURN ( xValue := ::unTransform() ) == hb_SToT( "" ) .AND. ;
!( ::cBuffer == Transform( xValue, ::cPicture ) )
ENDSWITCH
ENDIF
RETURN .F.
#ifdef HB_C52_UNDOC
@@ -1656,6 +1691,8 @@ METHOD DeleteAll() CLASS GET
::lMinus2 := .F.
CASE ::cType == "D"
xValue := hb_SToD()
CASE ::cType == "T"
xValue := hb_SToT( "" )
CASE ::cType == "L"
xValue := .F.
ENDCASE
@@ -1684,16 +1721,13 @@ METHOD IsEditable( nPos ) CLASS GET
cChar := SubStr( ::cPicMask, nPos, 1 )
DO CASE
CASE ::cType == "C"
RETURN cChar $ "!ANX9#LY"
CASE ::cType == "N"
RETURN cChar $ "9#$*"
CASE ::cType == "D"
RETURN cChar == "9"
CASE ::cType == "L"
RETURN cChar $ "LY#" /* CA-Cl*pper 5.2 undocumented: # allow T,F,Y,N for Logical [ckedem] */
ENDCASE
SWITCH ::cType
CASE "C" ; RETURN cChar $ "!ANX9#LY"
CASE "N" ; RETURN cChar $ "9#$*"
CASE "D"
CASE "T" ; RETURN cChar == "9"
CASE "L" ; RETURN cChar $ "LY#" /* CA-Cl*pper 5.2 undocumented: # allow T,F,Y,N for Logical [ckedem] */
ENDSWITCH
RETURN .F.
@@ -1701,8 +1735,8 @@ METHOD Input( cChar ) CLASS GET
LOCAL cPic
DO CASE
CASE ::cType == "N"
SWITCH ::cType
CASE "N"
DO CASE
CASE cChar == "-"
@@ -1716,20 +1750,30 @@ METHOD Input( cChar ) CLASS GET
CASE ! ( cChar $ "0123456789+" )
RETURN ""
ENDCASE
EXIT
CASE ::cType == "D"
CASE "D"
IF !( cChar $ "0123456789" )
RETURN ""
ENDIF
EXIT
CASE ::cType == "L"
CASE "T"
IF !( cChar $ "0123456789" )
RETURN ""
ENDIF
EXIT
CASE "L"
IF !( Upper( cChar ) $ "YNTF" )
RETURN ""
ENDIF
EXIT
ENDCASE
ENDSWITCH
IF ! Empty( ::cPicFunc )
cChar := Left( Transform( cChar, ::cPicFunc ), 1 ) /* Left needed for @D */