* src/rtl/hbsocket.c
! hb_socketSetReuseAddr() changed on win platforms to use
SO_EXCLUSIVEADDRUSE instead of SO_REUSEADDR. See http://paste.lisp.org/display/59751.
Rough patch, maybe the logic isn't applied to the right place,
maybe extra win version checks are required, please test it
and patch it further if needed.
* src/rtl/hbinet.c
* s_inetBind() changed back to call hb_socketSetReuseAddr() also
on win platforms.
* contrib/hbwin/tests/testole.prg
+ Added shortcut creation example.
* contrib/hbide/idemisc.prg
! Fixed HBIDE_PATHNORMALIZED() to _never_ lowercase passed
filename. As discussed very long time ago, such behavior
is not portable. For comparison purposes HB_FILEMATCH()
should be used, for other purposes _no_ change should be
done by hbide in filename casing. Ever.
This is brute force fix only applied to low-level code.
It will cause regressions on the higher level, which have
to be fixed.
; TODO: Delete this second parameter from all calls, now
the value is ignored.
; TOFIX: Review all
HBIDE_PATHNORMALIZED() and
HBIDE_PATHNORMALIZED( p, .T. )
calls if they are used in comparison context and change
caller code to use HB_FILEMATCH().
; TOFIX: All current code which uses LOWER()/UPPER() to
"normalize" filename before comparison with '=='
operator should also be changed to HB_FILEMATCH().
(except for cases where extension is used in the
sense of file type).
; TOFIX: Rest of cases where LOWER()/UPPER() is applied to
filenames.
! Fixed HBIDE_PATHFILE() to never uppercase drive letter.
It's not strictly required since all so far known systems
supporting drive letter are case insensitive, but it's
nevertheless not the job of hbide to reformat pathnames.
* contrib/hbide/ideactions.prg
* contrib/hbide/idesaveload.prg
* contrib/hbide/ideharbourhelp.prg
* contrib/hbide/ideeditor.prg
* contrib/hbide/ideprojmanager.prg
* contrib/hbide/idesources.prg
! Fixed some code to use HB_FILEMATCH() instead of unconditional
uppercasing/lowercasing. Please review and finish this modification,
there might be more hidden places and might have overlooked anything
in this patch.
* contrib/hbide/hbqreportsmanager.prg
* contrib/hbide/idebrowse.prg
* contrib/hbide/ideedit.prg
* contrib/hbide/ideeditor.prg
* contrib/hbide/idefindreplace.prg
* contrib/hbide/idefunctions.prg
* contrib/hbide/ideharbourhelp.prg
* contrib/hbide/idemain.prg
* contrib/hbide/idemisc.prg
* contrib/hbide/ideprojmanager.prg
* contrib/hbide/idesaveload.prg
* contrib/hbide/ideshortcuts.prg
* contrib/hbide/idethemes.prg
* contrib/hbide/idetools.prg
* contrib/hbqt/hbqt_hbmk2_plugin.hbs
* contrib/hbqt/qtcore/hbqt.h
* contrib/hbqt/qtcore/hbqt_misc.prg
* contrib/hbqt/qtcore/hbqt_pointer.cpp
* contrib/hbqt/qtcore/qth/HBQEvents.qth
* contrib/hbqt/qtcore/qth/HBQSlots.qth
* contrib/hbqt/qtcore/qth/HBQString.qth
* contrib/hbqt/qtcore/qth/QAbstractEventDispatcher.qth
* contrib/hbqt/qtcore/qth/QAbstractItemModel.qth
* contrib/hbqt/qtcore/qth/QMetaObject.qth
* contrib/hbqt/qtcore/qth/QMetaType.qth
* contrib/hbqt/qtgui/qth/QBitmap.qth
* contrib/hbqt/qtgui/qth/QBrush.qth
* contrib/hbqt/qtgui/qth/QColor.qth
* contrib/hbqt/qtgui/qth/QComboBox.qth
* contrib/hbqt/qtgui/qth/QWidget.qth
* contrib/hbqt/qtgui/THbQtUI.prg
* contrib/hbxbp/xbpbrowse.prg
* contrib/hbxbp/xbpdialog.prg
* contrib/hbxbp/xbplistbox.prg
* contrib/hbxbp/xbprtf.prg
* contrib/hbxbp/xbptabpage.prg
* contrib/hbxbp/xbptreeview.prg
* contrib/hbqt/utils/hbqtgen.prg
! Changed: massively to produce optimized and 0 fault
tolerant code.
* contrib/hbqt/qt*/*.cpp, *.prg, *.txt
* Re-generated, whichever fall into above changes.
This commit addresses a lot of issues:
1. Parameters checking is now mandatory. You have to supply
the correct number of parameters. No defaults are assumed.
PLUS you need to supply correct type of parameter.
2. PRG class representation is changed.
Now you can get fairly good documentation from looking
at the class declaration. You will never have to refer
the method body which has no meaning as such.
Here is a snippet:
METHOD itemAbove // ( oQTreeWidgetItem ) -> oQTreeWidgetItem
METHOD itemAt // ( oQPoint ) -> oQTreeWidgetItem
// ( nX, nY ) -> oQTreeWidgetItem
METHOD itemBelow // ( oQTreeWidgetItem ) -> oQTreeWidgetItem
METHOD itemWidget // ( oQTreeWidgetItem, nColumn ) -> oQWidget
METHOD openPersistentEditor // ( oQTreeWidgetItem, nColumn ) -> NIL
The methods with variable number and type of parameters
are shown beneth first call.
3. Accordingly, class_*.txt documentation is also updated.
4. A method call now never accepts a pointer, only an
hbQT object. This fixes one/half of the issue - one sided.
TODO: fix sending raw pointers to PRG code from C++ code.
:-)) hbIDE is up and running with all its glory, no GPFs.
Some regression would be possible but you will have
RTE popping up, so easily fixable.
* contrib/hbqt/qtwebkit/g/TQWebSecurityOrigin.prg
* contrib/hbqt/qtwebkit/g/TQWebSettings.prg
* contrib/hbqt/qtwebkit/g/TQWebView.prg
* contrib/hbide/hbqreportsmanager.prg
* contrib/hbide/hbqtoolbar.prg
* contrib/hbide/ideactions.prg
* contrib/hbide/idebrowse.prg
* contrib/hbide/idedocks.prg
* contrib/hbide/idedocwriter.prg
* contrib/hbide/ideedit.prg
* contrib/hbide/ideeditor.prg
* contrib/hbide/idefindreplace.prg
* contrib/hbide/idefunctions.prg
* contrib/hbide/ideharbourhelp.prg
* contrib/hbide/idemisc.prg
* contrib/hbide/ideprojmanager.prg
* contrib/hbide/idesaveload.prg
* contrib/hbide/ideshortcuts.prg
* contrib/hbide/ideskeletons.prg
* contrib/hbide/idethemes.prg
* contrib/hbide/idetools.prg
! Adopted to latest changes.
* contrib/hbxbp/hbpprocess.prg
* contrib/hbxbp/xbp3state.prg
* contrib/hbxbp/xbpappevent.prg
* contrib/hbxbp/xbpbitmap.prg
* contrib/hbxbp/xbpbrowse.prg
* contrib/hbxbp/xbpcheckbox.prg
* contrib/hbxbp/xbpclipboard.prg
* contrib/hbxbp/xbpcombobox.prg
* contrib/hbxbp/xbpdialog.prg
* contrib/hbxbp/xbpfiledialog.prg
* contrib/hbxbp/xbpfontdialog.prg
* contrib/hbxbp/xbphtmlviewer.prg
* contrib/hbxbp/xbplistbox.prg
* contrib/hbxbp/xbpmenubar.prg
* contrib/hbxbp/xbpmle.prg
* contrib/hbxbp/xbpprintdialog.prg
* contrib/hbxbp/xbppushbutton.prg
* contrib/hbxbp/xbpradiobutton.prg
* contrib/hbxbp/xbprtf.prg
* contrib/hbxbp/xbpscrollbar.prg
* contrib/hbxbp/xbpsle.prg
* contrib/hbxbp/xbpspinbutton.prg
* contrib/hbxbp/xbpstatic.prg
* contrib/hbxbp/xbpstatusbar.prg
* contrib/hbxbp/xbptabpage.prg
* contrib/hbxbp/xbptoolbar.prg
* contrib/hbxbp/xbptreeview.prg
* contrib/hbxbp/xbpwindow.prg
* Adopted to latest changes.
* contrib/hbqt/tests/demoqt.prg
* Adopted to latest changes.
* contrib/hbqt/utils/hbqtgen.prg
+ Implemented: many-t-one class method call on PRG level.
NOTES: this implementation is a leap forward in the evolution of hbQT.
Now any method call returns the Harbour compatible type.
It means any Qt method call which is expected to return a
hbQT object was returning a pointer to the object, now returns
a hbQT class object instance instead.
So, the code like this:
qCursor := QTextCursor():from( qDoc:textCursor() )
=>
qCursor := qDoc:textCursor()
And this implementation is exactly like Qt itself
where you can pass the return object directly as an
argument to the another method call.
pw := iif( abs( ::pen():widthF() ) > 0, abs( ::pen():widthF() ), 1 )
See hbIDE code to review how it is simplified by now.
WARNING: regression is highly possible and may be hbIDE become
unstable for some time.
3rd party libraries: adopt new code to your advantage.
Many things are incompatible now.
+ contrib/hbide/resources/view_refresh.png
* contrib/hbide/hbide.qrc
+ Added: one more image.
* contrib/hbide/hbide.prg
* contrib/hbide/idedocks.prg
* contrib/hbide/ideedit.prg
* contrib/hbide/ideeditor.prg
+ Added: "Reload Source" icon on the MDI area top-toolbar.
This facilitates to reload the source from disk. If the source
in the editor in modified state, a confirmation dialog is presented.
! Rearranged: MDI area left-toolbar icons to break them
in more logical units.
! Fixed: under MDI editing mode "Find" icon had stopped to work.
! Fixed: "Horizontal/Vertical" split option was not refreshed
under context menu after first activation.
* 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
+ Added: methods to control code completions and completion tips.
+ contrib/hbide/resources/help1.png
+ contrib/hbide/resources/infotips.png
* contrib/hbide/hbide.qrc
+ Added: two more images foe code completions and completion tips.
* contrib/hbide/idedocks.prg
* contrib/hbide/ideedit.prg
* contrib/hbide/ideeditor.prg
+ Added: controls to toggle code completions and completion tips.
The settings are not saved for the next run and are applicable
per editing instance.
* contrib/hbqt/qth/HBQPlainTextEdit.qth
* contrib/hbqt/qtgui/THBQPlainTextEdit.prg
* contrib/hbqt/qtgui/HBQPlainTextEdit.cpp
* contrib/hbqt/doc/en/class_hbqplaintextedit.txt
* contrib/hbqt/hbqt_hbqplaintextedit.cpp
* contrib/hbqt/hbqt_hbqplaintextedit.h
+ Added: one more method call.
* contrib/hbide/idebrowse.prg
* contrib/hbide/ideedit.prg
* contrib/hbide/ideeditor.prg
+ Implemented: <intellisense><code completion> for
FIELD-> and someAlias-> table fields for tables opened in ideDBU.
How it Works:
1. Open few tables in ideDBU.
2. In some editor instance type "FIELD->"
It will set the field completion mode ON.
3. type some letter starting a field, say, "a"
Code completion dialog will open with all fields
starting with "a" contained in all the tables opened.
4. To get list of all fields in all tables,
after typing FIELD-> type "x" and then press back space.
5. To get field completions for a particular alias,
type "that_Particular_alias->" and then some letter.
6. To get all fields in an alias type "alias" then "->" then "x" then press "backspace".
Presentation:
FIELD-> FieldName ( TableName ) FieldsOrdinalNumber, FieldType, FieldLength, DecPlaces
=>
SaleAmount ( Invoice ) 13, N, 12, 2
Invoice-> FieldName FieldsOrdinalNumber, FieldType, FieldLength, DecPlaces
=>
SaleAmount 13, N, 12, 2
* 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/hbqt/hbqt_hbqplaintextedit.cpp
! Adjusted horizontal position of proto-tip.
* contrib/hbide/hbide.prg
* contrib/hbide/ideedit.prg
* contrib/hbide/ideeditor.prg
* contrib/hbide/idesources.prg
! Changed: the way sources were alerted to be saved if in modified
state when exiting hbIDE. Now <Cancel> option is not provided.
+ Implemented: proto-tip highlights the current argument corresponding
to the cursor position within the function's opening brace and
end of the line.
* contrib/hbqt/hbqt_hbqplaintextedit.cpp
! Changed: threshhold to activate codec ompletion list from 3 to 1.
+ contrib/hbide/idehbprotos.prg
+ Added: Harbour prototypes generated auto from Harbour documentation
text file spread in harbour/../doc/en folders.
* contrib/hbide/hbide.hbp
+ Added: idehbprotos.prg.
* contrib/hbide/ideeditor.prg
* contrib/hbide/ideharbourhelp.prg
* contrib/hbide/idesaveload.prg
+ Implemented: in-place Harbour keywords and prototypes as a .prg list.
Now no need to have Harbour installed on the machine to have them.
* contrib/hbide/hbide.prg
* contrib/hbide/idedocks.prg
* contrib/hbide/ideedit.prg
* contrib/hbide/ideeditor.prg
* contrib/hbide/idefunctions.prg
* contrib/hbide/ideharbourhelp.prg
+ Implemented: Harbour function definitions which are part of
Harbour documentation files in /doc/en folders viewable in
Documentation Viewer available as code completion lists.
For this to happen, you must have Harbour's root path
provided in Documentation Viewer dialog.
So, as an example, if definitions are loaded ok, you
must see a list of QWeb*() functions as soon as you type "Web"
in an editing instance.
Please provide your input what else is missing.
* contrib/hbide/hbide.prg
* contrib/hbide/idedocks.prg
! More fix to previous. Now the visibility of source behavior is Ok.
* contrib/hbide/ideeditor.prg
! Changed: numeric to character events notation.
* contrib/hbide/idesaveload.prg
! Minor.
+ contrib/hbide/editor.ui
+ Added: to be used a little while.
* contrib/hbide/setup.ui
+ Added: <Selections><Code Completion>
1. Completion List with Arguments ?
2. Complete Code including Arguments ?
* contrib/hbide/hbide.hbp
* contrib/hbide/idebrowse.prg
* contrib/hbide/ideedit.prg
* contrib/hbide/ideeditor.prg
* contrib/hbide/idefunctions.prg
* contrib/hbide/idesaveload.prg
+ Implemented: a better control over code completion feature.
Now completion list can be presented with argument list intact,
i.e., hbide_isValidSource( cSourceFile ) can be presented
either as (default) hbide_isValidSource OR
hbide_isValidSource( cSourceFile )
Similarily, code can also be completed including arguments
list or without it. Please experiment.
* 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/hbqt/hbqt.ch
* contrib/hbqt/hbqt_hbslots.cpp
* contrib/hbqt/hbqt_hbslots.h
+ Added: more slots covering QMdiArea and QMdiSubWindow classes.
* contrib/hbxbp/xbpbrowse.prg
! Reworked: event handelling methods more spontaneous.
+ contrib/hbide/resources/browser.png
+ contrib/hbide/resources/formview.png
+ contrib/hbide/resources/thumbnail.png
+ contrib/hbide/resources/view_cascaded.png
+ contrib/hbide/resources/view_organized.png
+ contrib/hbide/resources/view_tabbed.png
+ contrib/hbide/resources/view_tiled.png
* contrib/hbide/hbide.qrc
+ Added: few images as above.
* contrib/hbide/hbide.prg
* contrib/hbide/ideactions.prg
* contrib/hbide/idebrowse.prg
* contrib/hbide/idedocks.prg
* contrib/hbide/ideeditor.prg
* contrib/hbide/idemisc.prg
* contrib/hbide/ideskeletons.prg
* contrib/hbide/idestylesheets.prg
* contrib/hbide/idethemes.prg
* contrib/hbide/idetools.prg
+ Reworked: application theme management.
Now it includes the missing components from previous.
+ Reworked: ideDBU interface.
Now it is hosted in a MDI interface which is more natural
to table management, including relational views. User can
rearrange and resize the browsers to his personal tastes.
Here is the layout hirarchy of ideDBU:
hbIDE
ideDBU - docking pane, right-hand, floatable, dockable.
Toolbar
Add a table, Form View, Tabbed View, Original View,
Cascaded View, Tiled View, Remove browser,
Panels - create button, switch menu
Panels - user defined, only one visible at a time
Panel 1
Browser 1 - .dbf, an array ( TODO, functionality is there )
Browser 2
Browser n
Panel 2
Browser 1
Browser 2
Browser n
Panel n
Browser 1
Browser 2
Browser n
Panels retain their last contents and are presented
on next run as is. The only exception being panel "Main"
is always the first visible.
NOTE: there is a lot on my drawing board.
So far I was struggling to make the behavior of
XbpBrowser stable per TBrowse specs and interface
design. Rest will follow soon.
* contrib/hbide/ideedit.prg
* contrib/hbide/ideeditor.prg
* contrib/hbide/idetools.prg
% Minor fix in "buttonBrowse_clicked" event which was causing
RTE when there was no other Tool defined.
! Fix to Ctrl+G which stopped working after keyboard macros
synchronization few days back.
! Thumbnail window is closed if a source is closed. To
activate it for another source you need to activate it again.
However, switching over to another source, it stays as is.
+ Reimplemented: split behavior of current editing instance.
Before it was done in fixed halved window plus split
was available verically and horintally any level deep.
This was neither appropriate nor desired behavior.
Now split is presented in resizable window either horizontally
or vertically. The behavior can be changed if all splitted
windows are closed first and then again split is initiated.
Above anomalies reported by Viktor, thanks.
Please test and report back any fix is not upto mark.
* contrib/hbxbp/xbpbrowse.prg
! Some more tweaking in event handelling.
* contrib/hbide/idebrowse.prg
* contrib/hbide/idedocks.prg
* contrib/hbide/ideeditor.prg
+ Prepared: to honor multiple panels to host views of ideDBU
sessions plus arranged to host a tree-view at the left
if there will be a need in the future.
+ Added: toolbar to ideDBU interface with ounly one button
<Open> to add a table to the view. Now table open dialog
is not presented at the time of invocation.
+ Improved: ideDBU view to take care of available
space more intelligently.
* contrib/hbide/hbide.hbp
* contrib/hbide/hbide.prg
* contrib/hbide/ideactions.prg
+ contrib/hbide/idebrowse.prg
* contrib/hbide/idedocks.prg
* contrib/hbide/ideeditor.prg
* contrib/hbide/ideobject.prg
* contrib/hbxbp/xbpbrowse.prg
+ Implemented: database tables manager ( dbu ).
A work-in-progress but you can have a feel of it.
1. "View"->"Browser Widget"->Select a Table.
2. Hide the widget and repeat process 1, select another table.
3. The widget will now contain both browsers.
NOTE: many surprises may be there, just bear with me,
it is a quick commit. Refinements are scheduled for
this whole week.
* 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/hbide.ch
* contrib/hbide/hbide.prg
* contrib/hbide/ideactions.prg
* contrib/hbide/idedocks.prg
* contrib/hbide/ideeditor.prg
* contrib/hbide/ideenviron.prg
* contrib/hbide/idefindreplace.prg
* contrib/hbide/idefunctions.prg
* contrib/hbide/ideobject.prg
* contrib/hbide/ideprojmanager.prg
* contrib/hbide/idesaveload.prg
* contrib/hbide/ideshortcuts.prg
* contrib/hbide/idesources.prg
* contrib/hbide/idetools.prg
+ Remodelled: ::aINI - hbide.ini variables container.
It is now encapsulated in a object - ::aINI => ::oINI.
This implementation has made this construct extendible to
any extent. Earlier it was a real mess to add one more
option on top of the existing one.
* contrib/hbide/resources/curlinehilight.png
+ contrib/hbide/resources/horzruler.png
* contrib/hbide/resources/togglelinenumber.png
* contrib/hbide/resources/toolsutilities.ui
* contrib/hbide/resources/toolsutilities.uic
* contrib/hbide/resources/setup.ui
* contrib/hbide/resources/setup.uic
* contrib/hbqt/qth/HBQPlainTextEdit.qth
* contrib/hbqt/qth/QTableWidget.qth
- contrib/hbqt/qth/HBQSyntaxHighLighter.qth
+ contrib/hbqt/qth/HBQSyntaxHighlighter.qth
* contrib/hbqt/doc/en/class_hbqplaintextedit.txt
* contrib/hbqt/doc/en/class_hbqsyntaxhighlighter.txt
* contrib/hbqt/qtgui/HBQPlainTextEdit.cpp
* contrib/hbqt/qtgui/QTableWidget.cpp
* contrib/hbqt/qtgui/THBQPlainTextEdit.prg
* contrib/hbqt/qtgui/HBQSyntaxHighlighter.cpp
* contrib/hbqt/qtgui/THBQSyntaxHighlighter.prg
* contrib/hbqt/hbqt_hbqplaintextedit.cpp
* contrib/hbqt/hbqt_hbqplaintextedit.h
* contrib/hbqt/hbqt_hbqsyntaxhighlighter.cpp
* contrib/hbqt/hbqt_hbqsyntaxhighlighter.h
* contrib/hbide/hbide.hbp
* contrib/hbide/hbide.ch
* contrib/hbide/hbide.prg
+ contrib/hbide/idedict.prg
* contrib/hbide/idedocks.prg
* contrib/hbide/ideedit.prg
* contrib/hbide/ideeditor.prg
* contrib/hbide/idemisc.prg
* contrib/hbide/ideobject.prg
* contrib/hbide/idesaveload.prg
* contrib/hbide/ideshortcuts.prg
* contrib/hbide/idestylesheets.prg
* contrib/hbide/idethemes.prg
* contrib/hbide/idetools.prg
% Widened padding for menubar prompts to show up at a proper distance.
+ Controlled "RETURN" keyword not to jump to first indentation place,
with env variable - HBIDE_RETURN_ATBEGINING=yes. Scheduled to be
included in "Setup" interface.
+ Allowed hbIDE execution with any text type file. It was accepting .PRG.CPP only.
+ Broadened the scope of keyword coloring for any case, mixed or absolute.
It was all lower or all upper previously.
+ Prepared ground for user defined keywords through user dictionaries.
+ Added new flags in "Setup" dialog ( yet not active ).
Please have a look into the contents of different pages and
let me know what else can qualify to be included therein.
+ More macro for Tools parameter - ${source_fullname_less_ext}
% Tools & Utilities dialog made modeless. At times it is desirable
to execute a tool multiple times and also to gather output logs.
+ Tools & Utilities dialog now remembers its last opened position.
+ Implemented: user-configurable 5 toolbars which can be populated
through Tool & Utilities interface. Invoke "Tools & Utilities"
interface and play with the toolbars. You will find it really
rewarding. I am also trying to find a way to hook
"Kayboard Mappings" macros to be included under this interface.
Your input is welcome. I will write the help in about a week,
but interface is straight enough to grab/grasp/use.
+ Implemented: to switch on/off horizontal ruler.
+ Implemented: to remember the last settings for next run for
Horizontal Ruler, Line Numbers display and Current Line highlighting.
* contrib/hbqt/hbqt_hbqplaintextedit.cpp
* contrib/hbide/hbide.prg
* contrib/hbide/idedocks.prg
* contrib/hbide/ideedit.prg
* contrib/hbide/ideeditor.prg
* contrib/hbide/idefindreplace.prg
* contrib/hbide/ideobject.prg
+ Implemented: interface to find next/previous occurance of selected
text in the current editing instance.
The moment some text is selected in the editor, two tool-buttons will
automatically show-up on the lower-right corner of the editing window
to facilitate you execute "find" operation for selected text up or down.
Buttons will disappear where there is no more selected text.
The feature was requested by Antonio Linares.
* contrib/hbqt/generator/hbqtgen.prg
! A minor fix, no effect on sources.
* 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
+ Added more PRG callable methods.
* contrib/hbide/hbide.prg
* contrib/hbide/ideactions.prg
* contrib/hbide/idedocks.prg
* contrib/hbide/idedocwriter.prg
* contrib/hbide/ideedit.prg
* contrib/hbide/ideeditor.prg
* contrib/hbide/idefunctions.prg
* contrib/hbide/ideharbourhelp.prg
* contrib/hbide/idemisc.prg
* contrib/hbide/ideobject.prg
* contrib/hbide/ideprojmanager.prg
* contrib/hbide/ideshortcuts.prg
+ Implemented: selection "persistancy" controllable programatically"
Ctrl+F11 is designated for this task. A slot in "Keyboard Mappings"
is also provided. By default persistant selection is disabled and
hence behaves exectly like it was before persistancy and more natural
like other editors. Ctrl+F11 toggles it on/off and if switched on,
behaviour will follow the implemenation just before this commit.
If selection mode is activated programatically, behavior remains
the same as before. Please test, bumps are expected.
% Some major artifacts how cursor should behave after paste, etc.
+ Implemented: document writer is now capable to pulls the existing
help body and correctly reinstates the changes. This implies that
for your sources help it can be used in real-time. Please test
and post if you find difficulties.
TODO: the same behavior with disk files.
* contrib/hbqt/hbqt_hbqplaintextedit.cpp
* contrib/hbide/hbide.prg
* contrib/hbide/ideactions.prg
* contrib/hbide/ideedit.prg
* contrib/hbide/ideeditor.prg
* contrib/hbide/ideshortcuts.prg
% Shifted: all actions which operate on editing instance, to
the micro levels. This implies that ::IdeEdit() object can be
used independent of interface constraints and hence becomes
eligible to be included in hbXBP as a HBP class.
This also implies that hbIDEMap can be manipulated through
Keyboard Mappings macros the same way as main editing instance
with the exception that it cannot be editied. For example,
you can call ::zoom( nPointSizeORKey ) to adjust its size.
You can also use Ctrl+C to copy and can use block operations.
+ Added: <Edit><Format><Replace Spaces with Tabs> option. Tabs
are set to stop at same distance of 3 characters which
makes it possible to modify sources with/without tabs but
with same visual display.
* 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/ideedit.prg
* contrib/hbide/ideeditor.prg
* contrib/hbide/idesaveload.prg
* contrib/hbide/ideshortcuts.prg
+ Implemented: proper hbIDEMap protocol. Now you can keep open
"Source Thumbnail" dock and keep on clicking the tabs. Current
source map will be displayed inside.
hbIDEMap Features:
1. hbIDEMap carries highlighted code lines which are visible
in main editing instance window. Navigaing the editor also
changes highlighted area corresponding to main instance.
2. All keyboard mappings are active in the map also which implies
that you can exercise copy operations which can be pasted
in the current code, a very useful feature.
* contrib/hbqt/hbqt_hbqplaintextedit.cpp
* contrib/hbqt/hbqt_hbqplaintextedit.h
* contrib/hbide/hbide.prg
* contrib/hbide/ideactions.prg
* contrib/hbide/idedocks.prg
* contrib/hbide/ideedit.prg
* contrib/hbide/ideeditor.prg
* contrib/hbide/ideobject.prg
! Fixed: selected text when viewed in a narrow window and
using horizontal scrollbars was showing incorrectly.
+ Implemented: current source's thumbnail view.
It is presented in a right-hand docking widget which
can be activated via <View> menu. it is almost identical with
current editor but with a significant difference that
it is loaded from the disk whenever the dock is brought to view.
It contains smaller font and is entirely idependent
of main editing instance.
It is just a quick commit. Refinement will follow.
Please submit your suggestions.
Re-compile hbQT alongwith hbIDE.
* contrib/hbide/hbide.prg
* contrib/hbide/ideedit.prg
* contrib/hbide/ideeditor.prg
* contrib/hbide/idetags.prg
+ Implemented: Context-menu option "Goto Function" looks
for the function/method in the current source first,
and if found, jumps to that, otherwise it rellies on
tagging. It implies that functions in current source
are always can be reached with "Goto Function" option
which operates on word under cursor.
* contrib/hbqt/hbqt_hbqplaintextedit.cpp
* contrib/hbqt/hbqt_hbqplaintextedit.h
* contrib/hbide/ideedit.prg
* contrib/hbide/ideeditor.prg
* contrib/hbide/ideshortcuts.prg
+ Prepared to handle three modes of selections programatically.
F11 Line Selection is broken currently.
* 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/idedocwriter.prg
% Guarded against inserting help if "readonly" flag is ON.
* contrib/hbide/ideedit.prg
* contrib/hbide/ideeditor.prg
* contrib/hbide/ideshortcuts.prg
+ Added: navigational methods plus methods pertaining to
line operations into public API. Naviagable methods are :
::up(), ::down(), ::pageUp(), ::pageDown(), ::goTop(),
::goBottom(), ::right(), ::left(), ::end(), ::home(),
::panEnd(), ::panHome().
//
These methods can be used in combination with selection modes.
+ Grouped: public methods list by category which is displayed
under visually distinguished colors. Now it is easy to find
a method of interest easily. Before it was a literal mess.
* contrib/hbide/resources/tabreadonly.png
! Changed: to reflect clearly visible readonly status.
* contrib/hbide/ideedit.prg
* contrib/hbide/ideeditor.prg
+ Implemented: <MainMenu><Edit><Switch ReadOnly Mode> plus
file's "readonly" attribute obtained by hb_fGetAttr() == 33
( please correct me if it is not OK on all systems ).
"Switch ReadOnly Mode" toggles the readonly status of the
current source in focus only if on disk attribute is normal.
ReadOnly status is permanent if disk attribute equals 33 and
cannot be toggled.
While in readonly mode, cut/paste/alter operation are suspened,
only copy operation is supported. Copy can be performed with
mouse and keyboard both and all three modes are available.
* 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/idedocks.prg
* contrib/hbide/ideedit.prg
* contrib/hbide/ideeditor.prg
! Fixed: the artifacts reported by Mindaugas and Itamar.
! Optimized: C++ code.
! Fixed: many other artifacts, i.e., status-bar panel was wrongly
reporting selection mode.
Mindaugas, can you please test again ?
* 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/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.
* contrib/hbqt/doc/en/class_hbqplaintextedit.txt
* contrib/hbqt/qtgui/HBQPlainTextEdit.cpp
* contrib/hbqt/qtgui/THBQPlainTextEdit.prg
* contrib/hbqt/qth/HBQPlainTextEdit.qth
* contrib/hbqt/hbqt_hbqplaintextedit.cpp
* contrib/hbqt/hbqt_hbqplaintextedit.h
* contrib/hbide/idedocks.prg
* contrib/hbide/ideedit.prg
* contrib/hbide/ideeditor.prg
* contrib/hbide/ideshortcuts.prg
+ Added more public methods and default macros.
* contrib/hbide/idethemes.prg
+ Implemented: persistent blocks per all three modes; stream, column and line.
This follows xMate footsteps but enhanced to suit any scenarion. By xMate
footsteps, I mean, blocks are streamed to clipboard when cut/copied/pasted
as per the standard rules. Enhancement describes that blocks cut/copied
as such are subject to be pasted in the same format as are copied. Last
cut/copy operation is pasted and if clipboard contain data which matches
last cut/copy action within from hbIDE, its format is used to paste; but
if it is alien text then "stream" is applied by default.
Block remain persistent until another selection action is not initiated or
is explicitly cleared with Sh+F11. There is no need to use any other key
to make it persistent.
Cut/copy operation can be carried on any time after block is visible.
This effectively empowers hbIDE for a variety of applications. One
block per source can remain active for entire duration of that instance.
Just click on required instance and activate copy operation. Go anywhere
on another instance and carry a paste operation. Thus blocks are movable
across instances and are also available for external clipboard operations.
All supported actions on blocks are now fully functional for all three flavours.
You will really like "Indents" action on column selections. Now more actions
can be defined for blocks, so please submit your requests supported with
use-case.
In the coming days on-line documentation to explore this feature will be
posted at http://hbide.vouch.info, stay tuned.
Please forward your suggessions or bug reports. It was such a complex logic
that for sure I found it extremely difficult to carry all debug operations,
so your input will be of immense value.
* contrib/hbqt/THbQtUI.prg
+ Added functionality for "WhatsThis" feature of Qt.
- contrib/hbide/resources/projectproperties.ui
- contrib/hbide/resources/projectproperties.uic
- Deleted: no longer required dialog.
* contrib/hbide/resources/projectpropertiesex.ui
* contrib/hbide/resources/projectpropertiesex.uic
* contrib/hbide/resources/shortcuts.ui
* contrib/hbide/resources/shortcuts.uic
% Shifted: tooltips to WhatsThis slot. Shift+F1 key is the
universal key to activate it. Alternatively "?" icon appears
on the left of "X" button in titlebat; press it and move over
the dialog; where "WhatsThis" will be defined, cursor will
change its shape and click there, tooltip like popup will open.
* 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.hbp
+ contrib/hbide/ideedit.prg
+ Added: new source file which contains code to handle
editing window at the micro level. It was going unmanageable
in single file due to heavy changed needed for future.
* contrib/hbide/ideeditor.prg
- IdeEdit() class moved to ideedit.prg.
+ Implemented: base protocol to keep all the three variants of
selections, viz., stream, column and line, persistant. It is a
work in progress and may be some features of "cut" may not be
working as expected yet.
Please play with it a little and tell me about the artifacts
it must respect to.