* contrib/hbqt/doc/en/class_hbqplaintextedit.txt
* contrib/hbqt/hbqt_hbqplaintextedit.cpp
* contrib/hbqt/hbqt_hbqplaintextedit.h
* contrib/hbqt/qtgui/HBQPlainTextEdit.cpp
* contrib/hbqt/qtgui/THBQPlainTextEdit.prg
* contrib/hbqt/qth/HBQPlainTextEdit.qth
! Changed: the space character not to terminate the code completion dialog.
It is needed for commands to be selected at next level.
+ contrib/hbide/plugins/hbide_script_rdds.prg
+ Added a dummy script to supply the required info
for different actions of an RDD operation if another
RDD is linked with hbIDE. DBFCDX and DBFNTX are
linked by default.
To make this feature functional, this dummy script has
to be popiulated with real-time code and be copied inside
"resources" folder with another name prefixed as:
hbide_persist_myrdd.prg
A complete example will be published in the meantime.
* contrib/hbide/hbide.prg
* contrib/hbide/idebrowse.prg
* contrib/hbide/ideplugins.prg
+ Implemented: persistent record/order/rowpos/colpos
of ideDBU views. Now tables are opened in the same
state of last run.
+ Totally reworked table-management engine. Now supports
external RDDs if linked which take effect automatically
for database operations, i.e., /rdds/exists/select/open;
more actions will follow.
* contrib/hbide/hbide.hbp
- Deleted: ideprotos.prg
- contrib/hbide/plugins/example_gui.hbs
+ contrib/hbide/plugins/hbide_script_qtgui.hbs
+ Added: the prefix "hbide_script_" to hbide callable script files.
- contrib/hbide/plugins/savebackup.hbs
+ contrib/hbide/plugins/hbide_plugin_savebackup.hbs
+ Added: the prefix "hbide_plugin_" to hbIDE plugin files.
+ contrib/hbide/resources/file-open.png
* contrib/hbide/hbide.qrc
+ Added: one more image for tool-buttons on "Files" page of "Setup".
* contrib/hbide/editor.ui
* contrib/hbide/environments.ui
* contrib/hbide/setup.ui
% Modified and Added: some of the components.
* contrib/hbide/hbide.prg
* contrib/hbide/ideeditor.prg
* contrib/hbide/ideenviron.prg
* contrib/hbide/ideharbourhelp.prg
* contrib/hbide/idehbprotos.prg
* contrib/hbide/idemisc.prg
* contrib/hbide/ideplugins.prg
* contrib/hbide/ideprojmanager.prg
* contrib/hbide/idesaveload.prg
* contrib/hbide/ideskeletons.prg
* contrib/hbide/idesources.prg
* contrib/hbide/idethemes.prg
+ Implemented: hbIDE installation independent paths to hold
various files and components. Now only hbide.ini reference is
required to load all other parameters pointing to next
needed locations for various components. It also effectively
means that hbIDE can be distributed as stand alone single
executable ( if linked statically with Qt ) or only with
Qt's run-time .dlls. hbIDE now makes no assumptions itself.
User has to furnish few infos, though, interfaced at a single point.
The Interface to hold information : <Setup><Files>
The Paths and Files Interpretation:
0. hbide.ini Path - File - Cmd Line: APPDATA|HOME/hbide
1. Harbour's Root Path - Path - No Assumptions: should be provided
2. Hbmk2 Executable Location - File - Default: hb_getenv("HBIDE_DIR_HBMK2")/hbmk2
3. Resources [Plugins,Scripts,etc] - Path - Default: _Path_of_hbIDE_ini_
4. Temporary Files - Path - Reserved: TODO
5. Environments [.env] - File - Default: _Path_of_hbIDE_ini_dot_env
6. Keyboard Mappings [.scu] - File - Default: _Path_of_hbIDE_ini_dot_scu
7. Code Snippets [.skl] - File - Default: _Path_of_hbIDE_ini_dot_skl
8. Syntax Highlighter Themes [.hbt]- File - Default: _Path_of_hbIDE_ini_dot_hbt
The interface provides for a quick editing of .env.skl.hbt files in-place.
Interface also provides for viewing facility of hbide.ini file.
Plugins and scripts have gone prefix and usage changes:
1. _Path_to_Resources/hbide_auto_*.hbs|prg are automatically executed
just after hbIDE appears on the screen.
2. _Path_to_Resources/hbide_plugin_*.prg|hbs|hrb can be defined to be
executed as per previous instructions.
3. _Path_to_Resources/hbide_protos_* are automatically loaded for
code completion lists leading to proto-tips. [New - details below]
+ Implemented: auto loading of code completion lists and proto-tips.
Any file as hbide_protos_SOMENAME_with_or_without_extention placed in
_Resources_ folder will be automatically loaded at startup. These files
are plain text files. The following rules apply:
1. Each proto must be placed on one line.
2. Blank lines are permissible.
3. Commands can be placed on multiple lines,
each line ending with ";" except the last one, like:
COPY [TO <(f)>] [SDF] [FIELDS <fields,...>] ;
[FOR <for>] [WHILE <while>] [NEXT <next>] ;
[RECORD <rec>] [<rest:REST>] [ALL] [CODEPAGE <cp>]
4. Functions must be opened with a brace without any preceeding space:
MyFunction ( abd, cde, efg ) => Wrong
MyFunction( abd, cde, efg ) => Right
I must be omitting some more facts which may have been changed|removed.
Also regression is possible, please make few tests and report back if
something went weired.
* contrib/hbide/ideedit.prg
! .hbs extension treated as .prg for editing operations
and syntax highlighting.
* contrib/hbide/ideeditor.prg
! .hbs extension treated as a source.
* contrib/hbide/ideplugins.prg
! deleted redundant code.
* contrib/hbide/ideprojmanager.prg
! Enabled to compile a source and run it without any project
definition ( Reported by Antonio Linares ).
* contrib/hbide/idesaveload.prg
! Included .hbs as valid text file extension.
* contrib/hbide/idebrowse.prg
* contrib/hbide/idedocks.prg
* contrib/hbide/ideplugins.prg
* contrib/hbide/idesaveload.prg
+ Implemented: drg/drop support in "Projects" tree.
Now you can drop .hbp project files onto it.
% Fixed: RTE when a table was being opened twice.
Now an alert message is flashed to this effect.
! Fixed: right-side dock widgets visibility behavior.
Before next clicked dock was hidden under the tabs and
user had to click again on the tab.
* contrib/hbide/hbide.prg
* contrib/hbide/idebrowse.prg
* contrib/hbide/idedocks.prg
* contrib/hbide/ideplugins.prg
+ Implemented: drag and drop support at two points:
1. When a valid text file supported by hbIDE
is dragged and dropped on editor widget.
2. When a .dbf file is dropped on ideDBU widget.
Please feel free to extend your comments.
* contrib/hbide/idemisc.prg
+ #include "hbextern.ch"
* contrib/hbide/ideplugins.prg
* contrib/hbide/hbide.prg
+ Implemented: execution of auto scripts.
Any .prg placed in /plugins folder with "auto_" prefix,
f.e., /harbour/contrib/hbide/plugins/auto_setenv.prg
will be executed just after hbIDE dialog is made visible.
hbIDE itself is passed as only parameter sent to the
script. The idea is to allow developers of miscllaneous
GUI libraries to setup their own environment variables.
Another aspect of this feature could be changing the
behavior of hbIDE itself through its various component
objects, though it may need some more API functions.
An idea which can be extended and offers developers
greater control over the affairs.
! Modified last commit's missing entry.
2010-07-04 14:17 UTC-0800 Pritpal Bedi (bedipritpal@hotmail.com)
* contrib/hbqt/hbqt_hbqplaintextedit.cpp
! Fixed: horizontal selection where background color was
missed by a couple of pixels to the left.
* contrib/hbide/idefindreplace.prg
! Fixed to not "find" twice if "Return" is pressed.
* contrib/hbide/ideedit.prg
* contrib/hbide/ideplugins.prg
+ Added support for .hbs extension (handled similarly as .prg).
The logic is very fuzzy here, it could be greatly simplified
like it is in hbrun or hbmk2. I don't understand why hbide
is trying to guess the filename, shouldn't it be the basic
input parameter? or even better the result of a DIRECTORY()
scan, as we've discussed?
* contrib/hbide/plugins/savebackup.prg
- Deleted .ch header reference to make it work as source
code plugin.
- contrib/hbide/plugins/savebackup.hrb
- Delete prebuilt .hrb. It's better to use the source version
by default.
* contrib/hbide/toolsutilities.ui
+ Added "Plugin" "Init at startup" slots.
* contrib/hbqt/hbqt_hbslots.cpp
+ Deactivated: one tracelog entry.
* contrib/hbide/hbide.prg
* contrib/hbide/ideactions.prg
* contrib/hbide/idedocks.prg
* contrib/hbide/ideedit.prg
* contrib/hbide/ideeditor.prg
* contrib/hbide/idemisc.prg
* contrib/hbide/ideplugins.prg
* contrib/hbide/ideprojmanager.prg
* contrib/hbide/idethemes.prg
* contrib/hbide/idetools.prg
% Fixed: docking widgets had stopped to be resizable.
+ Enhanced: plugins are now supported in .prg format also.
+ REQUESTed all hbQT and hbXBP classes for scripts to be
completely functional.
+ Added: "Plugins" combo-box and "Init at startup" checkbox in
"Tools & Utilities" dialog below to "Command Line Parameters".
If "Init at startup" checkbox is checked then this plugin
is initialized at startup. Such defined plugins can be placed
on user-defined toolbars and can be executed directly from
there.
"Parameters" editbox can hold the parameters passed to the plugin.
The format of such parameters is like command line but with one
difference that string parameter are enclosed in double quotes and
separated by spaces. For example: "open" 100 100 700 500.
+ Initialized: plugins at the startup which are flagged as such
through "Tools & Utilities" interface. It facilitate to hook
user defined parameters, object tweakings, etc at the startup.
For example, user can setup compiler and or build environment
with hb_setEnv() functions.
+ Top-Toolbar icon "Run as Script". This option allow you to run
source of current editing instance as a script. It is especially
handy to debug isolated dialogs etc on the fly. Below is an
example to test a dialog:
FUNCTION Main()
LOCAL oDlg
LOCAL nT := 10, nL := 10, nW := 300, nH := 200
oDlg := QDialog():new()
oDlg:move( nT, nL )
oDlg:resize( nW, nH )
oDlg:exec()
RETURN NIL
NOTE: no preprocessor is available, so all variable must be self contained.
Preceived, thoughtof, tested, by Antonio Linares, thanks.
* contrib/hbide/plugins/savebackup.hrb
* contrib/hbide/plugins/savebackup.prg
! Fine tuned to receive correct number of parameters.
* contrib/hbqt/doc/en/class_hbqplaintextedit.txt
* contrib/hbqt/hbqt_hbqplaintextedit.cpp
* contrib/hbqt/hbqt_hbqplaintextedit.h
* contrib/hbqt/qtgui/HBQPlainTextEdit.cpp
* contrib/hbqt/qtgui/THBQPlainTextEdit.prg
* contrib/hbqt/qth/HBQPlainTextEdit.qth
* contrib/hbide/hbide.prg
* contrib/hbide/idedocks.prg
+ Added Icon: Toggle current Line Highlight in "Lines" toolbar.
Public API method is ::toggleCurrentLineHilight().
* contrib/hbide/ideedit.prg
* contrib/hbide/ideeditor.prg
* contrib/hbide/ideenviron.prg
! Reverted: line edits font - monospace to GUI.
* contrib/hbide/ideobject.prg
* contrib/hbide/ideplugins.prg
! tuned to send oIDE and cVer as first and second
argument to {plugin}_init( oIde, cVer ).
* contrib/hbide/ideprojmanager.prg
! Reverted: line edits font - monospace to GUI.
* contrib/hbide/ideshortcuts.prg
+ Public Method - ::toggleCurrentLineHilight().
Toggles displaying current line in distinct color.
* contrib/hbide/idethemes.prg
+ Activated: Selection Background slot.
It facilitates to control the color of selections per theme basis.
+ Prepared to toggle matching braces mode - both vs single.
"Setup" dialog will contain its place holder.
% Fixed many other artifacts coming into way, and possibly
might have broken a few ones, please report.
* contrib/hbide/hbide.prg
* contrib/hbide/ideplugins.prg
% Changed: plugins are loaded on first call instead of
loading all plugins at startup. Now the overhead is negligible.
+ contrib/hbide/plugins
+ contrib/hbide/plugins/savebackup.hrb
+ contrib/hbide/plugins/savebackup.prg
+ Source and corresponding .hrb ( -gh ) plugin.
In practice .prg is never required for this purpose.
The source accompanying here is for demonstration purposes
which exposes elements to comprehend.
+ contrib/hbide/resources/selectionline.png
+ Image to be activated when "Line" selection mode is on.
* contrib/hbqt/hbqt_hbqplaintextedit.cpp
* contrib/hbide/hbide.hbp
+ Added ideplugin.prg
* contrib/hbide/idethemes.prg
+ Added more keywords for syntax-highlighting.
* contrib/hbide/hbide.prg
* contrib/hbide/idedocks.prg
* contrib/hbide/ideedit.prg
* contrib/hbide/ideeditor.prg
+ contrib/hbide/ideplugins.prg
+ Priliminary commit to handle plugins.
* contrib/hbide/ideshortcuts.prg
+ Implemented: a very simple yet powerful interface to hook plugins.
The idea got polished with Francesco Perillo's description of the thought.
Creating a hbIDE plugin
=======================
A .hrb ( compiled with -gh as the minimum ), i.e., savebackup.prg,
having two mandatory functions:
1. hrb_file_name_without_extension_plus_underscrore_plus_INIT()
savebackup_INIT( ... ) -> TRUE/FALSE
2. hrb_file_name_without_extension_plus_underscrore_plus_EXEC()
savebackup_EXEC( oIde, ... ) -> xValue
savebackup_INIT() will be used to establish hand-shake and it must
return a logical indicating success or failure. Currently it is
called with "1.0" as version no but is scheduled to be enhanced
in future.
If hand-shake is successful, means, savebackup_INIT( ... ) returns
with TRUE, savebackup_EXEC( oIde, ... ) is called as per user
request. oIDE is sent as the first argument followed by user supplied
arguments. Within this function in .hrb, all action takes place.
User can write n number of functions withing the same source but
all other functions will always be STATIC ones.
The whole hbIDE object is passed with each execution and hence
user is having utmost control over what he wants to accomplish.
Location of the Plugin
======================
All plugins ( .hrb ) must reside within "plugins" sub-folder from hbIDE.exe
location. The location is determined with return value of
hb_dirBase() + hb_osPathSeparator() + "plugins" + hb_osPathSeparator().
Loading Plugins
===============
At startup hbIDE looks into "plugins" folder for all .hrb files.
It then tries to establish hand-shake with them. If successful, a
handle is retained in static array. When an execution request is
encountered, this static array is searched for and
savebackup_EXEC( oIDE, ... ) is called and return value is passed
back to the caller macro.
Executing Plugins in hbIDE
==========================
A public method ::execPlugin( cPlugin, ... ) is implemented under
"Keyboard Mappings". ::execPlugin is called with plugin name, which
essentially is the .hrb file name. So in demo example, it is
"savebackup". Final expression would be like :
::execPlugin( "savebackup", "saveas" )
Here "saveas" is the identifier which is used in this demo to invoke
STATIC FUNCTION savebackup_saveAs( oIde )
Author of plugin has to decide how and what he would like to pass
what and in how many. So simply build a macro to call a plugin
with parameters, that's it.
I am hopeful that you, brilliant programmers, with help extending hbIDE
to an amazing levels. Send your critics to the list to enrich this thought.