* source/rtl/memoread.c
* Previous change reverted. hb_retc( NULL ) was intentional
and is an optimized version of hb_retc( "" ). Both will return
an empty string.
% hb_fsClose() calls reduced.
* src/rtl/tbcolumn.prg
* src/rtl/tbrowse.prg
! :SetColumn() retval made compatible.
! :ColWidth() retval made compatible.
% Using array functions to speed up a few things.
% Got rid of the predefined 4096 long array in every
columns plus the browse object.
; More and more incompatibilities are popping up, some
of them quite strange, and only coming up in a large
app's sophisticated browse stressing environment.
- Removing rightmost column while active will do RTE,
- If headsep is initialized after the columns and cargo,
browse will sometimes behave strangely (headsep value
disappears??)
- Moving columns off the visible area will screw up
internals.
- Modifying columns is slow because of the unconditional
:configure() calls.
* src/rtl/set.c
! Fixed an incompatibility in Set(_SET_EXIT) which caused
ReadExit() to set the SET value even if called without
a parameter. Similar incompatibility can exist with other
sets, but I didn't chk them.
Now ReadExit() works as expected.
* src/rtl/tbrowse.prg
! Typo.
* src/rtl/tbrowse.prg
+ :ColorRect() partial support added. The missing part is
that in C52 :ColorRect() will update the screen probably
using some internal buffers for the data, because
the skipblock for example is not evaluated.
* src/rtl/filesys.c
* Some cleanup, optim, comments, added static.
* src/rtl/tbrowse.prg
! Fixed to not display headsep/footsep when there's no
header/footer.
! Fixed to display headsep/footsep with the width of
colsep.
* makefile.bc
! Added DEBUG_LIB for Harbour exes to make them compile
in debug mode.
* souce/rtl/gtapi.c
! hb_gtSetColorStr() previous change reverted. The mistake
was on my side most probably.
* source/rtl/tbrowse.prg
! :Moved() fixed to always DeHilite() (independently from
the autolite value). This is in sync with C52 docs
(see autolite .ng), and testing has shown it to be
compatible. Only :stabilize should be affected by the
autolite setting.
+ TODO: added about missing ColorRect functionality.
* source/rtl/tbrowse.prg
! Fixed color handling to take into account ::defcolor
of TBColumn. Now TBrowse coloring is C52 compatible.
For speed wierd cases are not handled like if the value
of ::defcolor is improper.
* source/rtl/tgetlist.prg
* source/rtl/ttopbar.prg
* source/rtl/tbrowse.prg
! DevPos() -> SetPos() (TBrowse() had plenty of them)
! Few missing color params added to DispOut*()
* harbour/source/rtl/tbrowse.prg
! Fixed cell padding inside ::DispCell(). Character or memo fields have to be
padded right. Number fields have to be padded left.
+ 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.