* harbour/include/hbvmpub.h
* minor formatting
* harbour/contrib/hbnetio/netio.h
* harbour/contrib/hbnetio/netiosrv.c
+ added new PRG function:
NETIO_RPCFUNC( <pConnectionSocket> [, <sFuncSym> ] ) -> NIL
which allows to set user filter for RPC calls. <sFuncSym> is executed
on each RPC request instead of requested function and receives as
first parameter requested function symbol then function parameters.
A simple wrapper may look like:
static function rpc_filter( sFunc, ... )
? "DO", sFunc:name, "WITH", ...
return sFunc:exec( ... )
and can be activated by:
netio_rpcfunc( pConnectionSocket, @rpc_filter() )
When NETIO_RPCFUNC() is called without valid function symbol then
existing user RPC filter is cleared. Please remember that setting
user RPC filter does not automatically enable RPC support for
given connection socket. RPC support has to be enabled by NETIO_RPC()
function or by 4-th parameter of NETIO_LISTEN() socket.
* contrib/hbide/ideactions.prg
* contrib/hbide/ideprojmanager.prg
* contrib/hbide/idestylesheets.prg
! Fixed few more artifacts.
! Recent Files and Projects Menu was growing crazy,
was a result of not deleting the menu item in XbpMenu() class.
More attention is required yet.
! Fixed Viktor's reported bug.
* contrib/hbxbp/xbpmenubar.prg
! Fixed a very bad type, copy/paste syndrome.
* contrib/hbide/projects/hbide.hbi
! Deleted hard-coded -o directive, no longer needed.
! Project paths are now shown without meta-dat.
* contrib/hbide/resources/projectproperties.ui
! Changed components background behavior not to use gradients.
Now it is plain vanila white.
* contrib/hbide/hbide.prg
* contrib/hbide/idedocks.prg
* contrib/hbide/ideeditor.prg
* contrib/hbide/idemisc.prg
* contrib/hbide/ideobject.prg
* contrib/hbide/ideprojmanager.prg
* contrib/hbide/idesaveload.prg
* contrib/hbide/idestylesheets.prg
! Another round of reforms. And I am almost done with them. But wait...
! Started implementation of .env concept. What was missing from
hbIDE => hbMK2 were the shell commands minimum necessary to
let hbMK2 engine take control of. Now it can be done via
QProcess:setEnvironment() call. I have left under the commented
code in ideprojmanager.prg:
/* Mechanism to supply environment variables to called process */
/* I do not know nixes but assume that Qt must be issueing proper */
/* shell command for the target OS to set them. */
/* If I am not wrong, HBMK2 can have these variables alread set */
/* and hence developer can choose any compiler of his choice. */
/* */
/* Actually, this was the intension in hbIDE.env I commited in IDE root */
I am been able to compile/link/execute hbIDE.exe after setting ( WinXP )
qListSets := QStringList():new()
qListSets:append( "HB_WITH_QT=c:\qt\4.5.3\lib" )
::qProcess:setEnvironment( qListSets )
just before triggering the process.
Your input is desired as I know nothing about make system.
! Fixed many artifacts difficult to jot-down.
+ Implemented not to load any source until brought forward for view.
This has increased the loading speed extremely fast and always
consistent in timing. This feature was hanging on my drawing board
since begining.
This effectively means that sessions with any number of source tabs
will not pose speed panelty.
TODO: Syntax highlighting is a slow process, to speed-up.
* contrib/hbwin/win_err.c
* contrib/hbwin/hbwin.h
* contrib/hbwin/wapi_winbase_mutex.c
* Changed low-level hbwin_SetLastError() to accept lasterror
as parameter.
* contrib/hbwin/wapi_winbase.c
* contrib/hbwin/wapi_winuser.c
+ Added internal handling of GetLastError(). This fixes lost
GetLastError() values with apps linked with MT HVM.
[ I didn't review wapi_commctrl.c, but some lazy checking
on MSDN showed that these are generally not setting GetLastError(). ]
* WAPI_GETSCROLLRANGE() now set ref params even in case of failure.
; TODO: Do some final renaming and rearrangement on the low-level.
* contrib/hbwin/wapi_winbase_mutex.c
* Formatting.
* mpkg_tgz.sh
! Fixed to detect case when tar is mapped to bsdtar
(such is the case on Snow Leopard). Use slightly modified
tar command in this case.
Please review.
; TOFIX?: Unpacking stub script always uses 'tar', maybe this
needs to be fixed, although current command should
work on Snow Leopard.
- Deleted comment no longer valid.
* utils/hbmk2/hbmk2.prg
! Fixed C++ memory manager override to handle zero size memory
request and added protection when free operations are called
with NULL. Thanks Istvan Bisz and Przemek for input.
* harbour/src/rtl/hbznet.c
! do not use DEF_MEM_LEVEL to avoid potential problems when <zutil.h>
is not available
* harbour/contrib/hbnetio/netio.h
* harbour/contrib/hbnetio/netiocli.c
* harbour/contrib/hbnetio/netiosrv.c
+ implemented RPC in HBNETIO protocol
+ added the following client functions:
check if function/procedure exists on the server side:
NETIO_PROCEXISTS( <cProcName> ) -> <lExists>
execute function/procedure on server the side,
do not wait for confirmation:
NETIO_PROCEXEC( <cProcName> [, <params,...>] ) -> <lSent>
execute function/procedure on the server side and wait for
confirmation:
NETIO_PROCEXECW( <cProcName> [, <params,...>] ) -> <lExecuted>
execute function on the server side and wait for its return value:
NETIO_FUNCEXEC( <cFuncName> [, <params,...>] ) -> <xFuncRetVal>
All above functions use default connection set by NETIO_CONNECT()
for RPCs but it's also possible to specify server address and port
in <cProcName>/<cFuncName> just like in <cFileName> parameter in RDD
functions, i.e.:
NETIO_PROCEXISTS( "192.168.0.1:10005:MYFUNC" )
+ added new server side functions to enable/disable/check RPC support:
NETIO_RPC( <pListenSocket> | <pConnectionSocket> [, <lEnable> ] )
-> <lEnabled>
if RPC is enabled for listen socket then connection sockets inherit
this setting.
+ added 4-th parameter <lRPC> to NETIO_LISTEN() function. .T. enable
RPC support in returned listen socket which is later inherited by
connection sockets
* changed protocol version ID - current NETIO clients and servers
cannot be used with old code
* harbour/contrib/hbnetio/utils/netiosrv.prg
* added option to enable RPC support in NETIO server
If you want to make some test then you can execute netiosrv with
non empty 4-th parameter as server, i.e.:
./netiosrv "" "" "" 1
and try this code as client:
proc main()
// pass server address to netio_connect() for non localhost tests
? "NETIO_CONNECT():", netio_connect()
?
? "DATE() function is supported:", netio_procexists( "DATE" )
? "QOUT() function is supported:", netio_procexists( "DATE" )
? "HB_DATETIME() function is supported:", ;
netio_procexists( "HB_DATETIME" )
?
? netio_procexec( "QOUT", repl( "=", 50 ) )
? netio_procexec( "QOUT", "This is RPC TEST", date(), hb_datetime() )
? netio_procexecw( "QOUT", repl( "=", 50 ) )
?
? "SERVER DATE:", netio_funcexec( "DATE" )
? "SERVER TIME:", netio_funcexec( "TIME" )
? "SERVER DATETIME:", netio_funcexec( "HB_DATETIME" )
?
? netio_funcexec( "upper", "hello world !!!" )
return
Please remember that only functions linked with server are available.
If you want to enabled all core functions in netiosrv then please
uncomment this line in netiosrv.prg:
REQUEST __HB_EXTERN__
Have a fun with a new toy. I hope that many Harbour user will find it
very interesting. Please only be careful !!!. This feature allows to
execute remotely _ANY_ code on the server side. _NEVER_ leave open ports
with RPC support for untrusted access.
* contrib/hbide/hbide.prg
* contrib/hbide/idedocks.prg
* contrib/hbide/idemisc.prg
* contrib/hbide/ideprojmanager.prg
! Many artifacts corrected.
! Build process is now very satisfying if selected an
option with right-click on project node in Project Tree window.
! Diabled gradients in any window. Is it ok to fine tune
the windows with plain colors ?
* harbour/src/rtl/gtwin/gtwin.c
+ added support for HB_GTI_ISUNICODE
* harbour/include/hbapifs.h
* added missing 'extern' in some declarations
* harbour/include/hbzlib.ch
+ added HB_ZLIB_STRATEGY_* constants
+ added HB_ZLIB_COMPRESSION_DISABLE
* harbour/include/Makefile
+ harbour/include/hbznet.h
* harbour/include/hbextern.ch
* harbour/src/rtl/Makefile
* harbour/src/rtl/hbinet.c
+ harbour/src/rtl/hbznet.c
+ added support for ZLIB compression in stream sockets.
+ added .prg function:
HB_INETCOMPRESS( <pSocket>, [<nCompressionLevel>], [<nStrategy>] )
which enables ZLIB compression for given HB_INET*() socket.
<pSocket> is a socket created by one of HB_INET*() functions
<nCompressionLevel> is compression factor between 1 (fastest) and
9 (best) (see HB_ZLIB_COMPRESSION_*)
0 (none) disable compression on output data
but decompression is still working.
<nStrategy> is used to tune compression algorithm,
see HB_ZLIB_STRATEGY_*
The compression must be enabled on both connection sides, i.e.
on the server side:
conn := hb_inetAccept( sock )
hb_inetCompress( conn )
and on the client side:
sock := hb_inetConnect( cServer, nPort )
hb_inetCompress( sock )
in the same moment but it's not necessary to enable it at the
beginning of connection. It can be done later, i.e. when both
sides agree to enable connection using some custom protocol.
The compression has effect only on stream connections, i.e.
TCP and it's ignored in datagram connections like UDP.
This function can be executed more then once changing the compression
parameters but it causes that all data in readahead decompression
buffer is discarded. When called with HB_ZLIB_COMPRESSION_DISABLE
as <nCompressionLevel> then support for stream compression is removed
and sockets works again in raw mode.
The compression level and strategy do not have to be the same on both
connection sides. Each side can chose the best settings for data it's
going to send.
This code was written in a way which allows to easy implement
alternative compression methods or other extensions like encryption
in existing HB_INET*() sockets also by non core code. The public C
functions declared in hbznet.h allows to use this extension with raw
harbour sockets two.
* contrib/hbxbp/tests/demoxbp.prg
! Changed to HBQT_SET_RELEASE_METHOD( HBQT_RELEASE_WITH_DELETE )
* contrib/hbide/hbide.prg
* contrib/hbide/ideactions.prg
* contrib/hbide/idedocks.prg
* contrib/hbide/ideeditor.prg
* contrib/hbide/idemisc.prg
* contrib/hbide/ideprojmanager.prg
! Another round of reforms.
Vailton, I had to delete some of your code causing the recursions.
Please note that never ever you should call the methods like
a->b->a. Please check the code and its usability as per
your line-of-thinking. More refinements are under-way.
* INSTALL
+ Added new section: 7. DEBUGGING OPTIONS
So far covered: tracing, memory statistics, valgrind and codeguard.
I'd like to ask our experts to review and if needed extend
these informations (send me suggestions and I'll update it).
* bin/postinst.bat
+ Enabling -debug option on shared tool hbmk2 builds if HB_BUILD_DEBUG=yes.
* contrib/hbide/ideactions.prg
! Typo.
* contrib/hbide/projects/hbide.hbi
! Deleted windows and local environment specific hbmk2
options, plus a few ones which are automatically pulled anyway
via hbqt.hbc (which is in turn pulled by hbxbp.hbc).
Please set HB_WITH_QT to make it find the QT libs. This is
the universal method.
* contrib/hbqt/detect.mk
+ Will now verify if HB_QT_MOC_BIN is pointing to an existing filename.
If not, an error message will be shown, trying to make it clear how
to set it up properly. Many users like to set the dir only, which
makes the build process fail.
* contrib/hbide/hbide.prg
+ Switched to HBQT_RELEASE_WITH_DELETE as suggested by Istvan Bisz.
* contrib/hbqt/generator/hbqtgen.prg
* Minor cosmetic.
* utils/hbmk2/hbmk2.prg
+ Added disctinctive static text which is always linked in
when C++ mm override is active. This makes it easy to
verify if C++ mm override is activated in an executable.
* ChangeLog
! Fixed messed text in latest hbmk2 changes.
2010-01-05 18:48 UTC+0100 Viktor Szakats (harbour.01 syenar.hu)
* utils/hbmk2/hbmk2.pt_BR.po
* utils/hbmk2/hbmk2.hu_HU.po
* utils/hbmk2/hbmk2.prg
+ Added support for C++ input files. Now C++ files will be compiled
in a separate pass where native C++ compiler is used, which
means that C++ compilation mode is now enforced by using .cpp
extension. This also means that it's now possible to build
mixed mode projects with both C and C++ input files.
In general, this feature makes -cpp option unnecessary, its
only purpose now is to override default mode.
+ Added option to override standard C++ memory management functions
with Harbour ones.
Enable with option: -hbcppmm (cmdline) or hbcppmm=yes (in .hbc files)
NOTE1: Suggestions for better names are welcome.
NOTE2: hbide will now crash with mingw if this option is enabled.
Any idea why?
; Please test.
* utils/hbmk2/hbmk2.pt_BR.po
* utils/hbmk2/hbmk2.hu_HU.po
* utils/hbmk2/hbmk2.prg
+ Added support for C++ input files. Now C++ files will be compiled
in a separate pass where native C++ compiler is used, which
means that C++ compilation mode is now enforced by using .cpp
extension. This also means that it's now possible to build
mixed mode projects with both C and C++ input files.
Enable with option: -hbcppmm (cmdline) or hbcppmm=yes (in .hbc files)
NOTE: Suggestions for better names are welcome.
In general, this feature makes -cpp option unnecessary, its
only purpose now is to override default mode.
; Please test.
* utils/hbmk2/hbmk2.prg
- Deleted support for link-related macros in C compilation phase,
these weren't used anymore inside current hbmk2, so it seems safe,
but it's possible nevertheless that it will cause regressions in
some exotic use cases.
* utils/hbmk2/hbmk2.prg
! Fixed parsing -warn option on the commandline and .hbm/.hbp files.
[TOMERGE 2.0]
* contrib/hbqt/generator/hbmk.hbm
! Deleted xhb lib. It's not required and was probably added for
"outdebug" stuff.
* contrib/hbqt/hbqt.hbc
* contrib/hbqt/hbqts.hbc
* contrib/gtqtc/gtqtcs.hbc
* contrib/gtqtc/gtqtc.hbc
+ Added hbcppmm=yes option. This will force C++ memory allocation
functions to be overridden by Harbour mm functions.
* src/vm/fm.c
- Deleted C++ memory allocation functions. This feature now
lives inside hbmk2, and it now doesn't require whole Harbour
to be built in C++ mode.
* contrib/hbqt/*
* Regenerated.
* contrib/hbct/dummy.c
+ Added dummy stubs for all CT functions which are not yet
implemented in Harbour. This file is intentionally not
built, because a link-time error is better than a runtime
one, anyhow we could convert them to real dummies emulating
error behavior and add them to build process.
* contrib/hbqt/generator/hbqtgen.prg
% Optimization to parameter list ptr conversion loop.
; TODO: Regenerate QT sources.
* harbour/contrib/hbct/video.c
% use hb_gtColorToN() function instead of own code to decode Clipper
color in VGAPALETTE()
! added protection against possible transfer buffer overflow in
SETFONT() function
! return -2 when SETFONT() is not implemented
TODO: clean these functions, add support for other DOS compilers,
add some missing functions and redirect few of them like
VGAPALETTE() to hb_gtInfo() in non DOS builds
* harbour/src/rtl/hbgtcore.c
! fixed missing ';' => CHR( 13 ) translation in __KEYBOARD() function
[TOMERGE 2.0]
* contrib/hbxbp/xbpmenubar.prg
* contrib/hbxbp/xbptoolbar.prg
+ Implemented to accept QAction() as menu constructor.
Before only cCaption or XbpMenu() were accepted.
* contrib/hbide/hbide.ch
* contrib/hbide/hbide.prg
* contrib/hbide/ideactions.prg
* contrib/hbide/idedocks.prg
* contrib/hbide/idemisc.prg
* contrib/hbide/ideobject.prg
* contrib/hbide/ideprojmanager.prg
! Next round of reforms.
+ Implemented IdeActions() class which forms the basis
of IDE's menus and toolbars. Now we have greater control
over the uniformity of different actions hooked into
different interface elements, i.e., menu option, toolbar
option or popup option. The same visual experience is
presented in all the three flavours.
It also implies that we can switch on/off any action
only at one place. For example, if you issue this command:
::oAC:getAction( "Save" ):setEnabled( .f. )
then the option will be grayed in any flavour of user
interaction, viz., menu, toolbar, or context menu.
The code is much cleaner and paves the way to be reloaded
with various means.
* contrib/hbide/hbide.prg
* contrib/hbide/ideactions.prg
* contrib/hbide/ideeditor.prg
* contrib/hbide/idemisc.prg
* contrib/hbide/ideobject.prg
* contrib/hbide/ideprojmanager.prg
* contrib/hbide/idesaveload.prg
! Next round of reforms, stay patient.
! Implemented to hold last working project.
! Fixed to not generate error if an open project is tried
to reopen.
! Many small artifacts correctd.
* harbour/ChangeLog
! fixed typo in my recent ChangeLog entry
* harbour/src/vm/fm.c
% minor simplification
* harbour/src/common/hbtrace.c
! fixed possible recursive call reported by Istvan
* contrib/hbgd/hbgd.hbc
+ examples/httpsrv/modulesg.hbp
* examples/httpsrv/uhttpdgd.hbp
* examples/httpsrv/readme.txt
* Merged gd linking logic from uhttpdgd.hbp to hbgd.hbc.
(contains little hack, too) (untested)
+ Added .hbp file to build GD enabled modules.
* Modified readme to reflect above change.
+ Changed .hbp files to use hbgd.hbc and hbct.hbc to
build with hbgd and hbct libs. This is much better
method, since hbmk2 will locate them automatically
plus set header path as well.
* contrib/hbide/idethemes.prg
* contrib/hbide/ideeditor.prg
* contrib/hbide/hbide.prg
* contrib/hbide/ideactions.prg
* contrib/hbide/ideprojmanager.prg
! Reapplied my File() -> hb_FileExists() pacth.
Please note that it's not my favourite pass-time to
find out which of my changes were overwritten and such
practice pretty much defeats the purpose of version
tracking systems like SVN altogther. It's committers
job to properly resolve conflicts, unless there is
as advance request for commit-stop.
Since it's also not very efficient for me to refix all
future File() usages to hb_FileExists(), it would
be much more beneficiary for the whole project if coding
practices like that would be adopted by other developers
and taken care of in future updates. Thanks in advance.
* harbour/src/rtl/gtxwc/gtxwc.c
! cleaned a little bit hack with euro sign support
+ added optional support for input respecting locale settings
To enable it it's necessary to recompile GTXWC with HB_XWC_USE_LOCALE
macro. It can be done globally using
export UH_USER_CFLAGS=-DHB_XWC_USE_LOCALE
and recompiling Harbour core code.
When enabled GTXWC initialize locale at startup (LC_CTYPE only) what
enable national keyboard layout support in default input context
(XLookupString()). Current Harbour core code does not use any
<ctype.h> functions so enabling locale should not effect user
national settings in HVM.
Please test.
* contrib/hbide/hbide.hbp
* contrib/hbide/hbide.prg
* contrib/hbide/ideactions.prg
* contrib/hbide/idedocks.prg
* contrib/hbide/ideeditor.prg
* contrib/hbide/idefindreplace.prg
* contrib/hbide/idemisc.prg
* contrib/hbide/ideobject.prg
* contrib/hbide/ideprojmanager.prg
* contrib/hbide/idesaveload.prg
* contrib/hbide/idethemes.prg
* contrib/hbide/projects/hbide.hbi
+ contrib/hbide/resources/insert-datetime.png
+ contrib/hbide/resources/insert-external-file.png
+ contrib/hbide/resources/insert-procname.png
+ contrib/hbide/resources/readonly.png
* contrib/hbide/resources/tabreadonly.png
* contrib/hbxbp/xbpqtuiloader.prg
A lot of changes are in effect including the patch
sent by Vailton. The code is in the middle of restructing
phase and may take several days to finish. Till the I request
you all to bear with me and may expect some bumps too.
Please do not update this code until I finish preliminaries.
To sumup this commit includes:
! Thourough reclassification of classes and separation of
code fragments in a way that not two developers collide
with each other. One may takeup one segment and the other another.
+ Used hbide_* namespace and have changed almost every function.
+ Implemented, though not in a way I wanted, building a project
via Qt's process classes. You will see a refreshing difference.
+ A major breakthrough in XbpQtUiLoader() class implementation.
Now you can access the child widgets of a .ui component per
this syntax:
oUI:qObj[ "checkMatchCase" ]:setChecked( .t. )
=>
oUI:q_checkMatchCase:seChecked( .t. )
^^
just prefix object name with "q_" ( Q + Underscore ).
This greatly simmplifies coding and allows to exploit child
widgets as real-time objects.
* contrib/hbqt/hbqt_hbevents.cpp
* contrib/hbqt/hbqt_hbslots.cpp
- Deleted old method of slots/events handling.
* contrib/hbide/idethemes.prg
* contrib/hbide/ideeditor.prg
* contrib/hbide/hbide.prg
* contrib/hbide/idemisc.prg
* contrib/hbide/idesaveload.prg
% Using hb_FileExists() instead of File().
! Fixed to not force lowercase on filenames.
* contrib/hbqt/qth/QApplication.qth
* Minor optimizations.
% One static var deleted.
; TOFIX/TOCHECK: argv/argc usage.
* contrib/hbqt/qtgui/QApplication.cpp
* contrib/hbqt/hbqt_garbage.h
* Regenerated.
* contrib/hbxbp/xbpgeneric.prg
- Deleted unused statics.
; TOFIX: HBQT has an irregularity which I couldn't find a
reason yet. It maintains a pointer to QApplication
in a static variable on C level, plus every HBQT
app maintains a copy of the QApp object in a .prg
level STATIC var. Both are inited using C/prg
level init/exit functions.
* INSTALL
+ Added OS/2 to QT supported platforms.
* harbour.spec
+ Merged lib and static subpackages into main one.
hbmk2 requires that both dynamic and static libs (namely hbcplr)
are present for successful linking.
Please test and comment, I can revert old version in
case of any problems.
* contrib/hbqt/filelist.mk
* contrib/hbqt/hbqt_hbevents.cpp
* contrib/hbqt/hbqt_hbslots.cpp
- contrib/hbqt/hbqt_hbevents2.cpp
- contrib/hbqt/hbqt_hbslots2.cpp
* Merged new EVENTS/SLOTS implementation with old one,
removing all existing redundancies and fixing double
definition of low-level classes.
* contrib/hbqt/generator/hbqtgen.prg
! Fixed formatting for one generated headder.
* contrib/hbqt/hbqt_hbqmainwindow.cpp
* contrib/hbqt/qth/QApplication.qth
+ Moved HB_QT declaration to QApplication.
* contrib/hbqt/qtgui/QApplication.cpp
* Regenerated.
* contrib/hbqt/qtgui/QTextCursor.cpp
* contrib/hbqt/qtgui/TQTextCursor.prg
* contrib/hbqt/qtgui/QSyntaxHighlighter.cpp
* contrib/hbqt/qtgui/TQSyntaxHighlighter.prg
* Changed after regeneration.
(Someone pbly changed these files without .qth,
or run older generator, or didn't run generator
after modifying .qth)
* contrib/hbqt/hbqt_hbqsyntaxhighlighter.cpp
! Fixed warning.
* Formatting.
* contrib/hbqt/hbqt_hbqtableview.cpp
* contrib/hbqt/hbqt_hbqmainwindow.cpp
% GC callbacks made 'static'.
* contrib/hbqt/detect.mk
* contrib/hbxbp/Makefile
+ Enabled for OS/2.
* contrib/hbqt/hbqt_hbqmainwindow.cpp
- Deleted mutex handling. (was commented for while with no
problems reported)
* contrib/hbwin/Makefile
* contrib/hbwin/hbwin.h
* contrib/hbwin/hbwapi.h
+ contrib/hbwin/win_err.c
* contrib/hbwin/wapi_winbase.c
+ Added hbwin_SetLastError(), hbwin_GetLastError()
low-level functions to save/get GetLastError() values.
This is required to preserve win lasterror value on .prg
level. The reason we need this is because TlsGetValue()
(called internally by Harbour core) is overwriting this
value. Thanks to Xavi for research.
* contrib/hbwin/wapi_winbase_mutex.c
! Fixed to use hbwin_SetLastError().
; TODO: Call hbwin_SetLastError() after _all_ winapi
calls which modify lasterror value.
Until then, WAPI_GETLASTERROR() is broken.
* contrib/hbwin/hbwinole.h
+ Added self-guard.
/*
This commint is from Vailton Renato and applied as is
Please set me right if something is omitted.
Changes are written below as published on DL.
*/
* contrib/hbide/hbide.ch
* contrib/hbide/hbide.env
* contrib/hbide/hbide.prg
* contrib/hbide/ideactions.prg
* contrib/hbide/ideeditor.prg
* contrib/hbide/idemisc.prg
* contrib/hbide/idesaveload.prg
* contrib/hbide/resources/hb-16x16.png
+ contrib/hbide/resources/hb-32x32.png
+ contrib/hbide/resources/list-developers.png
+ contrib/hbide/resources/list-users.png
+ contrib/hbide/resources/new2.png
+ contrib/hbide/resources/project.png
+ contrib/hbide/resources/vr-16x16.png
! isValidText() some more valid extensions added
! editSource() message appears if the file open is not supported.
! loadIni()
Implemented support for RecentFiles & RECENTPROJECTS sections.
Optimized support for section names regardless of case used.
Enhanced with SWITCH instead of CASE.
Optimized initialization oide:Aini regardless of the amount
expected items in the INI file.
Implemented a basic validation to ignore invalid
sections in the INI file.
+ Added a few new icons for the menu of the application.
! FILE > recent files -> implementation done.
! FILE > recent projects -> implementation done.
! FILE > SAVE AND EXIT -> implementation done.
! FILE > OPEN -> supports opening multiple files
! FILE > REVERT -> implementation done.
+ findEditByFileName() - new method to Find an item in a
Edits[] based on the file name passed as argument.
+ findEditByID() - new method to Find an item in
aEdits[] based on the ID passed as argument.
+ HbIde:closeAllSources() -> implementation done.
! HbIde:closeSource() -> rewritten to support the closeAllSources() method
+ HbIde:closeAllOther() -> implementation done.
+ HbIde:saveSourceAs() -> implementation done.
+ HbIde:updateTitleBar() -> New method to updates the title bar of the
main window, indicating the project and the current filename.
+ HELP > About - implementation done.
+ HELP > Harbour on line - implementation done.
+ HELP > HB Users Mailing - implementation done.
+ HELP > HB Developers Mailing - implementation done.
+ EDIT menu items were attached to the existing options
in ::executeAction()
! IdeFindReplace:show() -> Detect if current edit has any selected text.
! hbide now displays the text "Untitled XX" on creating a new file.
NOTE: Something is not right because when I click the close
button to close the main window and he asks me if I want
to save the files and when I click CANCEL it has to abort
the process and not close the system as it is occurring.
* contrib/hbide/hbide.prg
* contrib/hbide/ideeditor.prg
* contrib/hbide/idemisc.prg
* contrib/hbide/idesaveload.prg
* contrib/hbide/idethemes.prg
+ contrib/hbide/resources/selectionlist.ui
* contrib/hbide/resources/themes.ui
! Changed the way .ppo is presented. Now a new modeless
window displays .ppo source and thus you have more control
over comaprison with original source. You can keep as many
such .ppo windows on the screen.
+ Implemented Editor Themes.
HBIDE provides 5 default themes, along the lines of xMate, viz.,
1. Classic
2. City Lights
3. Evening Glamour
4. Sand Storm
with a few changes, and
5. Pritpal's Favourite.
Themes interface provides for changing the existing themes
as well as constructing a new one based on any exiting themes.
Then user can save them in hbide.hbt file.
HBIDE always loads default 5 themes as above then,
HBIDE looks for hbide.hbt in the same folder where it is.
If it finds one, it attempts to load it. In the loading
process it will merge the duplicate themes, including the
default ones. It means, if you modify an existing default
theme and then save it in hbide.hbt, at next invocation
default theme will be overwritten and your changes are
reflected. But if the name of the theme is changed you have
yours plus default both themes available.
Default theme is "Pritpal's Favourite" which will be applied
to any source file opened. You can override it by applying
new theme to it. Right click on <Editors Tree><_any_source_file_>
and select "Apply Theme" and finally select from a list of
themes presented in a list box by double clicking onto one
of choice. Next time you open HBIDE thus souce will be
applied the last theme selected.
You can re-define various labels on the Themes Dialog including
drop-down list items of different parts of the sources.
Just examine hbide.hbt and change the values of dialog elements.
Differences from xMate implementation:
1. Theme can be applied to indivisual source separately.
2. Theme elements can have <Italic>, <Bold> and <Underline>
attributes.
3. Themes can be copied and re-defined for n numbers.
TODO: To apply themes per project.
To implement some missing parts of source, such as,
background color of selections, etc.
You are encouraged to test this implementation. I will be
more than happy to implement descent thoughts you can imagine.
* contrib/hbqt/tests/demoqt.prg
+ Changed to use new EVENTS/SLOTS layout.
These are currently two STATIC vars, may be better to
add :events / :slots to oWnd and keep them tied to windows,
or threads. It's difficult to find out from current usage.
; Please test.
* contrib/hbqt/filelist.mk
+ contrib/hbqt/hbqt_hbslots2.cpp
+ contrib/hbqt/hbqt_hbevents2.cpp
+ Added new implementation of slots and events.
This fixes potential leaks in old implementation by
moving HB_EVENTS, HB_SLOTS low level per-thread
structures to .prg level and adding proper GC destructors
to them.
To use the new interface in .prg level code, following changes
will have to be applied:
1. Adding new :events, :slots holder variables to .prg level.
2. Init these holder variables with QT_EVENTS_NEW() and QT_SLOTS_NEW().
3. Make these conversions:
QT_CONNECT_EVENT( ... ) -> QT_EVENTS_CONNECT( p, ... )
QT_DISCONNECT_EVENT( ... ) -> QT_EVENTS_DISCONNECT( p, ... )
QT_CONNECT_SIGNAL( ... ) -> QT_SLOTS_CONNECT( p, ... )
QT_DISCONNECT_SIGNAL( ... ) -> QT_SLOTS_DISCONNECT( p, ... )
QT_GETEVENTFILTER() -> QT_EVENTS_PTR( p ) (there is a TOFIX here for the future)
4. Delete these calls:
QT_EVENTS_DESTROY()
QT_SLOTS_DESTROY()
; Pritpal, can you please review this method?
* contrib/hbqt/hbqt_hbdbfmodel.cpp
* contrib/hbqt/hbqt.h
% Memory allocation internals made static.