+ Add two instance variables, nRow and nCol. Existing in Clipper 5.3.
Only was modified the Hilite and SetPos method, for save in
this variables, the position of cursor.
* source/rtl/tbrowse.prg
! fixed columns width handling when there are frozen columns
+ columns' width get evaluated just before first TBrowse ::Stabilize()
+ little changes to optimize speed
* source/rtl/tbcolumn.prg
! more clipper compatible (cannot set column width to nil)
* source/rtl/tbrowse.prg
! fixed ::DispCell() cursor positioning (broken with latest changes to
implement picture handling)
* changed ::autolite handling
! fixed ::GoBottom() method which was not repainting TBrowse correctly if
available records were less than available rows.
* source/rtl/tbrowse.prg
+ activated scoping
* include/hbapierr.h
include/hbapiitm.h
include/hbvm.h
source/rtl/errorapi.c
source/vm/hvm.c
source/vm/itemapi.c
! fixed va_start() use or, better, changed it to be compatible with OS/2 EMX GCC
compiler which REQUIRES that va_start() calls use a type which cannot be promoted
to something bigger. That is, this call is correct:
va_start(valist, ulUnsignedLongType)
while this one is not:
va_start(valist, usUnsignedShortType)
Using a type which can be promoted to a bigger one leads to memory corruption.
I think this requirement could exist even on other ANSI C compilers.
! Removed workaround inside hb_itemDo() and hb_itemDoC() to prevent this corruption.
* source/rtl/tbrowse.prg
! fixed ::Moved() method which was calling ::Dehilite() even if TBrowse was already
unstable causing wrong painting of current row
* source/rtl/tbrowse.prg
+ added ::MGotoYX(nRow, nCol) method which hilights cell under screen coordinates nRow, nCol
should help following a mouse. NOTE: hacked up and not tested. I'm very busy at the moment.
* NOTE latest change to TBrowse (my previous entry in changelog) fixed a problem but created
a new one :-) I'll have to rethink a little bit ::Stabilize() logic.
* source/debug/debugger.prg
- removed calls to oBrwText:ForceStable() method which is no more available
! SetsUp() and SetsDown() functions where calling ::RefreshAll() and movement methods
without any reason causing a noticeable delay during Sets scrolling.
* source/debug/tbrwtext.prg
- removed empty ::ForceStable() method
* source/rtl/tbrowse.prg
! when a movement happens inside available on screen rows (like a ::Down() from row 1 to
row 2) I have to force repainting of target row or else this sequence (for example)
fails: ::RefreshCurrent():Down():ForceStable() because to paint the row where I issued a
::RefreshCurrent() I have to move one back from ::nNewRowPos, but there I stay since
::nNewRowPos is not to redraw. I'm sure nobody uderstands what I'm clearly unable to
explain :-)
* source/rtl/teditor.prg
- removed a TODO: comment which is no more needed.
* source/rtl/tbrowse.prg
- removed hidden: clause inside class definition (it doesn't work right now)
* source/rtl/tclass.prg
- commented out line 255 (gives infinite loop)
* utils/hbmake/*.prg
+ hbdocdef.ch needs relative path ("..\hbdoc\") to be compiled by gcc system
* source/rtl/tbrowse.prg
! I've fixed all known (to me) issues with latest TBrowse code.
::HitTop/Bottom were set back to .F. if a ::RefreshAll() was issued. This is wrong since only
movement keys can reset them.
Issuing a long sequence of K_UP/K_DN (or CTRL_...) resulted on wrong movement of datasource (you could
even go backward using K_DN :-O)
You could get an out of bounds moving around inside tbrowse.
* Note that original Clipper TBrowse caches displayed rows, so moving left or right does not require
calling ::Skipblock to refresh screen. Present implementation of TBrowse has not such a cache so
a lot more of skipping around is needed.
* source/rtl/tbrowse.prg
* I've rewritten from scratch stabilization and movement keys handling.
They were simply broken in previous TBrowse. They are now nearly 100% clipper compatible.
DBU now works correctly when lastrec() + 1 is reached and leaved.
::stable state and ::HitTop or ::HitBottom were wrongly set _before_ stabilization and not
during as it should. ::GoBottom() was not calling ::goBottomBlock.
Movement handling methods were calling ::skipBlock and they should not, this was
causing unneeded skipping being requested to data source.
I hope these last changes have fixed TBrowse class. Please test it extensively.