diff --git a/harbour/ChangeLog b/harbour/ChangeLog index cacc18d45b..63e1b87a88 100644 --- a/harbour/ChangeLog +++ b/harbour/ChangeLog @@ -8,6 +8,13 @@ 2009-12-31 13:59 UTC+0100 Foo Bar (foo.bar foobar.org) */ +2009-02-18 00:19 UTC+0100 Viktor Szakats (harbour.01 syenar hu) + * source/rtl/listbox.prg + ! Restored _SET_EXACT dependent code parts to have the + same logic as before my modifications a few years ago. + Przemek, is it right now? I honestly didn't understand + the issue here. + 2009-02-17 23:31 UTC+0100 Viktor Szakats (harbour.01 syenar hu) + contrib/gtalleg/tests + contrib/gtalleg/tests/gtalleg-shared.hbp diff --git a/harbour/source/rtl/listbox.prg b/harbour/source/rtl/listbox.prg index c5679c5fa6..be93c96dd4 100644 --- a/harbour/source/rtl/listbox.prg +++ b/harbour/source/rtl/listbox.prg @@ -59,11 +59,11 @@ #include "inkey.ch" #include "setcurs.ch" -/* NOTE: Harbour doesn't support CA-Cl*pper 5.3 GUI functionality, but +/* NOTE: Harbour doesn't support CA-Cl*pper 5.3 GUI functionality, but it has all related variables and methods. */ -/* NOTE: CA-Cl*pper 5.3 uses a mixture of QQOut(), DevOut(), Disp*() - functions to generate screen output. Harbour uses Disp*() +/* NOTE: CA-Cl*pper 5.3 uses a mixture of QQOut(), DevOut(), Disp*() + functions to generate screen output. Harbour uses Disp*() functions only. [vszakats] */ #ifdef HB_COMPAT_C53 @@ -343,18 +343,30 @@ METHOD findText( cText, nPos, lCaseSensitive, lExact ) CLASS LISTBOX nSize := Len( ::aItems ) - nPos + 1 nPasses := iif( nPos > 1, 2, 1 ) - FOR nPass := 1 TO nPasses + IF Set( _SET_EXACT ) + FOR nPass := 1 TO nPasses + IF ( nPosFound := AScan( ::aItems, iif( lCaseSensitive,; + { | aItem | aItem[ _ITEM_cTEXT ] == cText },; + { | aItem | Lower( aItem[ _ITEM_cTEXT ] ) == cText } ), nPos, nSize ) ) > 0 + EXIT + ENDIF - /* NOTE: Intentionally using "=" comparison to honor the _SET_EXACT setting. */ - IF ( nPosFound := AScan( ::aItems, iif( lCaseSensitive,; - { | aItem | aItem[ _ITEM_cTEXT ] = cText },; - { | aItem | Lower( aItem[ _ITEM_cTEXT ] ) = cText } ), nPos, nSize ) ) > 0 - EXIT - ENDIF + nSize := nPos - 1 + nPos := 1 + NEXT + ELSE + FOR nPass := 1 TO nPasses + /* NOTE: Intentionally using "=" comparison to honor the _SET_EXACT setting. */ + IF ( nPosFound := AScan( ::aItems, iif( lCaseSensitive,; + { | aItem | aItem[ _ITEM_cTEXT ] = cText },; + { | aItem | Lower( aItem[ _ITEM_cTEXT ] ) = cText } ), nPos, nSize ) ) > 0 + EXIT + ENDIF - nSize := nPos - 1 - nPos := 1 - NEXT + nSize := nPos - 1 + nPos := 1 + NEXT + ENDIF IF lOldExact != NIL Set( _SET_EXACT, lOldExact ) @@ -389,18 +401,30 @@ METHOD findData( cData, nPos, lCaseSensitive, lExact ) CLASS LISTBOX nSize := Len( ::aItems ) - nPos + 1 nPasses := iif( nPos > 1, 2, 1 ) - FOR nPass := 1 TO nPasses + IF Set( _SET_EXACT ) + FOR nPass := 1 TO nPasses + IF ( nPosFound := AScan( ::aItems, iif( lCaseSensitive,; + { | aItem | _LISTBOX_ITEMDATA( aItem ) == cData },; + { | aItem | Lower( _LISTBOX_ITEMDATA( aItem ) ) == cData } ), nPos, nSize ) ) > 0 + EXIT + ENDIF - /* NOTE: Intentionally using "=" comparison to honor the _SET_EXACT setting. */ - IF ( nPosFound := AScan( ::aItems, iif( lCaseSensitive,; - { | aItem | _LISTBOX_ITEMDATA( aItem ) = cData },; - { | aItem | Lower( _LISTBOX_ITEMDATA( aItem ) ) = cData } ), nPos, nSize ) ) > 0 - EXIT - ENDIF + nSize := nPos - 1 + nPos := 1 + NEXT + ELSE + FOR nPass := 1 TO nPasses + /* NOTE: Intentionally using "=" comparison to honor the _SET_EXACT setting. */ + IF ( nPosFound := AScan( ::aItems, iif( lCaseSensitive,; + { | aItem | _LISTBOX_ITEMDATA( aItem ) = cData },; + { | aItem | Lower( _LISTBOX_ITEMDATA( aItem ) ) = cData } ), nPos, nSize ) ) > 0 + EXIT + ENDIF - nSize := nPos - 1 - nPos := 1 - NEXT + nSize := nPos - 1 + nPos := 1 + NEXT + ENDIF IF lOldExact != NIL Set( _SET_EXACT, lOldExact ) @@ -929,7 +953,7 @@ METHOD dropDown( lDropDown ) CLASS LISTBOX RETURN ::lDropDown METHOD fBlock( bFBlock ) CLASS LISTBOX - + IF PCount() > 0 ::bFBlock := iif( bFBlock == NIL, NIL, __eInstVar53( Self, "FBLOCK", bFBlock, "B", 1001 ) ) ENDIF @@ -981,7 +1005,7 @@ METHOD right( nRight ) CLASS LISTBOX RETURN ::nRight METHOD sBlock( bSBlock ) CLASS LISTBOX - + IF PCount() > 0 ::bSBlock := iif( bSBlock == NIL, NIL, __eInstVar53( Self, "SBLOCK", bSBlock, "B", 1001 ) ) ENDIF