2010-07-15 18:54 UTC-0800 Pritpal Bedi (bedipritpal@hotmail.com)

* 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.
This commit is contained in:
Pritpal Bedi
2010-07-16 02:05:41 +00:00
parent f1fdb9b02c
commit dd31e942eb
11 changed files with 433 additions and 125 deletions

View File

@@ -16,6 +16,39 @@
The license applies to all entries newer than 2009-04-28.
*/
2010-07-15 18:54 UTC-0800 Pritpal Bedi (bedipritpal@hotmail.com)
* 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.
2010-07-16 00:25 UTC+0200 Viktor Szakats (harbour.01 syenar.hu)
* config/vxworks/diab.mk
+ Implemented support for Wind River Compiler.

View File

@@ -402,6 +402,9 @@ METHOD HbIde:create( aParams )
::oINI:load( ::cProjIni )
ENDIF
/* Load Persistent Scripts - hbide_persist_*.prg | hbs */
hbide_loadPersistentScripts()
/* Load User Dictionaries */
hbide_loadUserDictionaries( Self )

View File

@@ -108,11 +108,13 @@ CLASS IdeBrowseManager INHERIT IdeObject
DATA qVSplitter
DATA qToolBar
DATA qStruct
DATA qRddCombo
DATA aPanels INIT {}
DATA aToolBtns INIT {}
DATA aButtons INIT {}
DATA aIndexAct INIT {}
DATA aRdds INIT { "DBFCDX", "DBFNTX" }
DATA oCurBrw
DATA oCurPanel
@@ -131,7 +133,7 @@ CLASS IdeBrowseManager INHERIT IdeObject
METHOD destroy()
METHOD buildToolbar()
METHOD execEvent( cEvent, p, p1, p2 )
METHOD addTable( cFileDBF, cAlias, aInfo )
METHOD addTable( aInfo )
METHOD addArray( aData, aAttr )
METHOD getPanelNames()
METHOD getPanelsInfo()
@@ -150,6 +152,8 @@ CLASS IdeBrowseManager INHERIT IdeObject
METHOD populateUiStruct()
METHOD populateFieldData()
METHOD updateIndexMenu( qSubWindow )
METHOD buildRddsCombo()
ACCESS currentDriver() INLINE ::qRddCombo:currentText()
ENDCLASS
@@ -385,9 +389,9 @@ METHOD IdeBrowseManager:execEvent( cEvent, p, p1, p2 )
qUrl := QUrl():new( qList:at( i ) )
hb_fNameSplit( qUrl:toLocalFile(), @cPath, @cTable, @cExt )
IF lower( cExt ) == ".dbf"
::addTable( hbide_pathToOSPath( cPath + cTable + cExt ) )
::addTable( { NIL, hbide_pathToOSPath( cPath + cTable + cExt ), NIL, ;
iif( ! ( ::qRddCombo:currentText() $ "DBFCDX.DBFNTX" ), "DBFCDX", ::qRddCombo:currentText() ) } )
ENDIF
HB_TRACE( HB_TR_ALWAYS, cPath, cTable, cExt )
NEXT
ENDIF
EXIT
@@ -415,10 +419,16 @@ METHOD IdeBrowseManager:execEvent( cEvent, p, p1, p2 )
EXIT
CASE "buttonOpen_clicked"
IF !empty( cTable := hbide_fetchAFile( ::oIde:oDlg, "Select a Table", { { "Database File", "*.dbf" } }, ::oIde:cWrkFolderLast ) )
hb_fNameSplit( cTable, @cPath )
::oIde:cWrkFolderLast := cPath
::addTable( cTable )
IF ::currentDriver() $ "DBFCDX,DBFNTX"
IF !empty( cTable := hbide_fetchAFile( ::oIde:oDlg, "Select a Table", { { "Database File", "*.dbf" } }, ::oIde:cWrkFolderLast ) )
hb_fNameSplit( cTable, @cPath )
::oIde:cWrkFolderLast := cPath
::addTable( { NIL, cTable, NIL, ::currentDriver() } )
ENDIF
ELSE
IF !empty( cTable := hbide_execScriptFunction( "tableSelect", ::currentDriver() ) )
::addTable( { NIL, cTable, NIL, ::currentDriver() } )
ENDIF
ENDIF
EXIT
@@ -637,32 +647,15 @@ METHOD IdeBrowseManager:buildUiStruct()
/*----------------------------------------------------------------------*/
METHOD IdeBrowseManager:loadTables()
LOCAL cInfo, aPanel, oCurPanel, cTable
LOCAL cInfo, aInfo, oCurPanel
oCurPanel := ::oCurPanel
FOR EACH cInfo IN ::oINI:aDbuPanelsInfo
aPanel := hb_aTokens( cInfo, "," )
aSize( aPanel, TBL_VRBLS )
DEFAULT aPanel[ TBL_PANEL ] TO ""
DEFAULT aPanel[ TBL_NAME ] TO ""
DEFAULT aPanel[ TBL_ALIAS ] TO ""
DEFAULT aPanel[ TBL_DRIVER ] TO ""
DEFAULT aPanel[ TBL_INDEX ] TO ""
DEFAULT aPanel[ TBL_RECORD ] TO ""
DEFAULT aPanel[ TBL_CURSOR ] TO ""
DEFAULT aPanel[ TBL_GEOMETRY ] TO ""
DEFAULT aPanel[ TBL_ROWPOS ] TO "1"
DEFAULT aPanel[ TBL_COLPOS ] TO "1"
DEFAULT aPanel[ TBL_NEXT ] TO ""
IF ::isPanel( aPanel[ 1 ] )
IF hb_fileExists( cTable := hbide_pathToOSPath( aPanel[ 2 ] ) )
::setPanel( aPanel[ 1 ] )
::addTable( cTable, , aPanel )
ENDIF
aInfo := hb_aTokens( cInfo, "," )
IF ::isPanel( aInfo[ 1 ] )
::setPanel( aInfo[ 1 ] )
::addTable( aInfo )
ENDIF
NEXT
@@ -671,30 +664,14 @@ METHOD IdeBrowseManager:loadTables()
/*----------------------------------------------------------------------*/
METHOD IdeBrowseManager:addTable( cFileDBF, cAlias, aInfo )
METHOD IdeBrowseManager:addTable( aInfo )
LOCAL oBrw, qSubWindow
oBrw := IdeBrowse():new( ::oIde, Self, ::oCurPanel )
oBrw:cTable := cFileDBF
oBrw:cAlias := cAlias
//oBrw:oManager := Self
oBrw:create()
oBrw := IdeBrowse():new( ::oIde, Self, ::oCurPanel, aInfo ):create()
IF empty( oBrw:oBrw )
RETURN Self
ENDIF
IF hb_isArray( aInfo )
oBrw:oBrw:rowPos := val( aInfo[ TBL_ROWPOS ] )
oBrw:oBrw:colPos := val( aInfo[ TBL_COLPOS ] )
oBrw:oBrw:forceStable()
oBrw:setOrder( val( aInfo[ TBL_INDEX ] ) )
oBrw:goto( val( aInfo[ TBL_RECORD ] ) )
oBrw:oBrw:refreshAll()
oBrw:oBrw:forceStable()
ENDIF
qSubWindow := ::oCurPanel:addBrowser( oBrw, aInfo )
::connect( qSubWindow, "aboutToActivate()", {|| ::execEvent( "mdiSubWindow_aboutToActivate", qSubWindow ) } )
@@ -726,6 +703,8 @@ METHOD IdeBrowseManager:buildToolbar()
::buildPanelsButton()
::buildToolButton( {} )
::buildRddsCombo()
::buildToolButton( {} )
::buildToolButton( { "Open a table" , "dc_plus" , "clicked()", {|| ::execEvent( "buttonOpen_clicked" ) }, .f. } )
::buildToolButton( {} )
::buildToolButton( { "Show/hide form view", "formview" , "clicked()", {|| ::execEvent( "buttonShowForm_clicked" ) }, .t. } )
@@ -745,6 +724,24 @@ METHOD IdeBrowseManager:buildToolbar()
/*----------------------------------------------------------------------*/
METHOD IdeBrowseManager:buildRddsCombo()
LOCAL aRdds, cRdd
IF !empty( aRdds := hbide_execScriptFunction( "rdds" ) )
aeval( aRdds, {|e| aadd( ::aRdds, e ) } )
ENDIF
::qRddCombo := QComboBox():new()
::qRddCombo:setToolTip( "Rdd to open next table" )
FOR EACH cRdd IN ::aRdds
::qRddCombo:addItem( cRdd )
NEXT
::qToolBar:addWidget( ::qRddCombo )
RETURN Self
/*----------------------------------------------------------------------*/
METHOD IdeBrowseManager:buildToolButton( aBtn )
LOCAL qBtn
@@ -798,6 +795,7 @@ METHOD IdeBrowseManager:updateIndexMenu( qSubWindow )
::disconnect( qAct, "triggered(bool)" )
qAct := NIL
NEXT
::aIndexAct := {}
::qIndexMenu:clear()
@@ -1063,6 +1061,7 @@ CLASS IdeBrowse INHERIT IdeObject
DATA oManager
DATA oPanel
DATA qMDI
DATA aInfo INIT {}
DATA nType INIT BRW_TYPE_DBF
DATA cAlias INIT ""
@@ -1083,8 +1082,8 @@ CLASS IdeBrowse INHERIT IdeObject
DATA qClose
DATA aIndex INIT {}
METHOD new( oIde, oManager, oPanel )
METHOD create( oIde, oManager, oPanel )
METHOD new( oIde, oManager, oPanel, aInfo )
METHOD create( oIde, oManager, oPanel, aInfo )
METHOD configure()
METHOD destroy()
METHOD execEvent( cEvent, p, p1 )
@@ -1094,13 +1093,19 @@ CLASS IdeBrowse INHERIT IdeObject
METHOD getPP( aStruct )
METHOD skipBlock( nHowMany )
METHOD use()
METHOD exists()
METHOD goTop()
METHOD goBottom()
METHOD goTo( nRec )
METHOD goToAsk()
METHOD recNo()
METHOD lastRec()
ACCESS dbStruct() INLINE ::aStruct
METHOD indexOrd()
METHOD ordName( nOrder )
METHOD IndexKey( nOrder )
METHOD setOrder( nOrder )
METHOD refreshAll()
METHOD getIndexInfo()
@@ -1109,6 +1114,7 @@ CLASS IdeBrowse INHERIT IdeObject
METHOD dispInfo()
METHOD search( cSearch )
METHOD searchAsk()
METHOD next()
METHOD previous()
METHOD buildForm()
@@ -1119,37 +1125,53 @@ CLASS IdeBrowse INHERIT IdeObject
/*----------------------------------------------------------------------*/
METHOD IdeBrowse:new( oIde, oManager, oPanel )
METHOD IdeBrowse:new( oIde, oManager, oPanel, aInfo )
::oIde := oIde
::oManager := oManager
::oPanel := oPanel
::aInfo := aInfo
RETURN Self
/*----------------------------------------------------------------------*/
METHOD IdeBrowse:create( oIde, oManager, oPanel )
LOCAL xVrb, cT, cAlias, bError, oErr, cName
METHOD IdeBrowse:create( oIde, oManager, oPanel, aInfo )
LOCAL xVrb, cT, cName
LOCAL lMissing := .t.
LOCAL lErr := .f.
DEFAULT oIde TO ::oIde
DEFAULT oManager TO ::oManager
DEFAULT oPanel TO ::oPanel
DEFAULT aInfo TO ::aInfo
::oIde := oIde
::oManager := oManager
::oPanel := oPanel
::aInfo := aInfo
IF !empty( ::aData )
::nType := BRW_TYPE_ARRAY
ENDIF
aSize( ::aInfo, TBL_VRBLS )
#if 0
IF empty( ::cAlias )
::cAlias := ::fetchAlias( ::cTable )
DEFAULT ::aInfo[ TBL_PANEL ] TO ::oPanel:cName
DEFAULT ::aInfo[ TBL_NAME ] TO ""
DEFAULT ::aInfo[ TBL_ALIAS ] TO ""
DEFAULT ::aInfo[ TBL_DRIVER ] TO ::oManager:qRddCombo:currentText()
DEFAULT ::aInfo[ TBL_INDEX ] TO ""
DEFAULT ::aInfo[ TBL_RECORD ] TO ""
DEFAULT ::aInfo[ TBL_CURSOR ] TO ""
DEFAULT ::aInfo[ TBL_GEOMETRY ] TO ""
DEFAULT ::aInfo[ TBL_ROWPOS ] TO "1"
DEFAULT ::aInfo[ TBL_COLPOS ] TO "1"
DEFAULT ::aInfo[ TBL_NEXT ] TO ""
::cTable := hbide_pathToOSPath( ::aInfo[ TBL_NAME ] )
hb_fNameSplit( ::cTable, , @cName )
::cTableOnly := cName
::cAlias := ::aInfo[ TBL_ALIAS ]
::cDriver := upper( ::cDriver )
IF ! ::exists()
RETURN Self
ENDIF
#endif
IF ::nType == BRW_TYPE_DBF
IF !empty( ::cAlias ) .AND. empty( ::cTable )
@@ -1159,33 +1181,12 @@ METHOD IdeBrowse:create( oIde, oManager, oPanel )
ENDIF
IF lMissing .AND. !empty( ::cTable )
bError := ErrorBlock( {|o| break( o ) } )
BEGIN SEQUENCE
IF empty( ::cAlias )
USE ( ::cTable ) SHARED NEW VIA ( ::cDriver )
ELSE
cAlias := ::cAlias
USE ( ::cTable ) ALIAS ( cAlias ) SHARED NEW VIA ( ::cDriver )
ENDIF
IF NetErr()
MsgBox( ::cTable, "Could not been opened!" )
lErr := .t.
ENDIF
RECOVER USING oErr
MsgBox( oErr:description, "Error Opening Table" )
RETURN Self
ENDSEQUENCE
ErrorBlock( bError )
IF lErr
IF ! ( ::lOpened := ::use() )
RETURN Self
ENDIF
IF empty( ::cAlias )
::cAlias := alias()
ENDIF
::lOpened := .t.
ENDIF
::aStruct := DbStruct()
::aStruct := ( ::cAlias )->( DbStruct() )
ELSE
FOR EACH xVrb IN ::aData[ 1 ]
cT := valtype( xVrb )
@@ -1214,13 +1215,17 @@ METHOD IdeBrowse:create( oIde, oManager, oPanel )
::oBrw:configure()
::oBrw:forceStable()
::oBrw:rowPos := val( aInfo[ TBL_ROWPOS ] )
::oBrw:colPos := val( aInfo[ TBL_COLPOS ] )
::oBrw:forceStable()
::setOrder( val( aInfo[ TBL_INDEX ] ) )
::goto( val( aInfo[ TBL_RECORD ] ) )
::oBrw:refreshAll()
::oBrw:forceStable()
::oBrw:navigate := {|mp1,mp2| ::execEvent( "browse_navigate", mp1, mp2 ) }
::oBrw:keyboard := {|mp1,mp2| ::execEvent( "browse_keyboard", mp1, mp2 ) }
hb_fNameSplit( ::cTable, , @cName )
::cTableOnly := cName
RETURN Self
/*----------------------------------------------------------------------*/
@@ -1329,7 +1334,6 @@ METHOD IdeBrowse:buildBrowser()
/*----------------------------------------------------------------------*/
METHOD IdeBrowse:execEvent( cEvent, p, p1 )
LOCAL cSearch
HB_SYMBOL_UNUSED( p )
HB_SYMBOL_UNUSED( p1 )
@@ -1344,11 +1348,10 @@ METHOD IdeBrowse:execEvent( cEvent, p, p1 )
CASE "browse_keyboard"
IF p == xbeK_CTRL_F
IF ! empty( cSearch := hbide_fetchAString( ::oWnd:oWidget, "", "FieldNamr", "Search" ) )
::search( cSearch )
ENDIF
::searchAsk()
ELSEIF p == xbeK_CTRL_G
::gotoAsk()
ENDIF
EXIT
@@ -1364,8 +1367,8 @@ METHOD IdeBrowse:dispInfo()
IF !empty( ::qMdi )
::qMdi:setTooltip( ::cTable )
::qMdi:setWindowTitle( "[" + ::cDriver +"][" + hb_ntos( ::indexOrd() ) + "] " + ;
"[" + hb_ntos( ::recno() ) + "/" + hb_ntos( ::lastRec() ) + "] " + ;
::qMdi:setWindowTitle( "[" + ::cDriver +"][" + hb_ntos( ::indexOrd() ) + ":" + ::ordName() + "] " + ;
"[" + hb_ntos( ::recno() ) + "/" + hb_ntos( ::lastRec() ) + "] " + ;
::cTableOnly )
ENDIF
RETURN Self
@@ -1565,20 +1568,34 @@ METHOD IdeBrowse:previous()
/*----------------------------------------------------------------------*/
METHOD IdeBrowse:searchAsk()
LOCAL cSearch
IF !empty( cSearch := hbide_fetchAString( ::oWnd:oWidget, "", ::aStruct[ ::oBrw:colPos, 1 ], "Search" ) )
::search( cSearch )
ENDIF
RETURN Self
/*----------------------------------------------------------------------*/
METHOD IdeBrowse:search( cSearch )
LOCAL nRec
IF ::nType == BRW_TYPE_DBF
IF ( ::cAlias )->( IndexOrd() ) > 0
nRec := ::recNo()
IF ( ::cAlias )->( DbSeek( cSearch ) )
::refreshAll()
IF ! empty( cSearch )
IF ( ::cAlias )->( IndexOrd() ) > 0
nRec := ::recNo()
IF ( ::cAlias )->( DbSeek( cSearch ) )
::refreshAll()
::dispInfo()
ELSE
::goto( nRec )
MsgBox( "Could not find: " + cSearch )
ENDIF
ELSE
::goto( nRec )
MsgBox( "Could not find: " + cSearch )
// Sequential search
ENDIF
ELSE
// Sequential search
ENDIF
ELSE
// Ascan
@@ -1598,6 +1615,28 @@ METHOD IdeBrowse:refreshAll()
/*----------------------------------------------------------------------*/
METHOD IdeBrowse:goToAsk()
LOCAL nRec
IF ! empty( nRec := ( QInputDialog():new() ):getInt( , "Goto", "Record_# ?", , ::recno() ) )
::goto( nRec )
::refreshAll()
ENDIF
RETURN NIL
/*----------------------------------------------------------------------*/
METHOD IdeBrowse:goto( nRec )
IF ::nType == BRW_TYPE_DBF
RETURN ( ::cAlias )->( DbGoto( nRec ) )
ENDIF
RETURN Self
/*----------------------------------------------------------------------*/
METHOD IdeBrowse:goTop()
IF ::nType == BRW_TYPE_DBF
@@ -1674,6 +1713,8 @@ METHOD IdeBrowse:setIndex( cIndex )
::oBrw:refreshAll()
::oBrw:forceStable()
::oBrw:setCurrentIndex( .t. )
::dispInfo()
ENDIF
RETURN Self
@@ -1685,7 +1726,7 @@ METHOD IdeBrowse:getIndexInfo()
IF ::nType == BRW_TYPE_DBF
FOR i := 1 to 50
IF ( cKey := ( ::cAlias )->( indexkey( i ) ) ) == ''
IF ( cKey := ( ::cAlias )->( IndexKey( i ) ) ) == ''
EXIT
ENDIF
aadd( a_, ( ::cAlias )->( OrdName( i ) ) + ' : ' + cKey )
@@ -1698,15 +1739,81 @@ METHOD IdeBrowse:getIndexInfo()
/*----------------------------------------------------------------------*/
METHOD IdeBrowse:goTo( nRec )
METHOD IdeBrowse:ordName( nOrder )
DEFAULT nOrder TO ::indexOrd()
IF ::nType == BRW_TYPE_DBF
( ::cAlias )->( DbGoto( nRec ) )
ELSE
::nIndex := nRec
RETURN ( ::cAlias )->( OrdName( nOrder ) )
ENDIF
RETURN NIL
RETURN ""
/*----------------------------------------------------------------------*/
METHOD IdeBrowse:indexKey( nOrder )
DEFAULT nOrder TO ::indexOrd()
IF ::nType == BRW_TYPE_DBF
RETURN ( ::cAlias )->( IndexKey( nOrder ) )
ENDIF
RETURN ""
/*----------------------------------------------------------------------*/
METHOD IdeBrowse:use()
LOCAL bError, oErr
LOCAL lErr := .f.
SWITCH ::cDriver
CASE "DBFCDX"
CASE "DBFNTX"
bError := ErrorBlock( {|o| break( o ) } )
BEGIN SEQUENCE
IF empty( ::cAlias )
USE ( ::cTable ) SHARED NEW VIA ( ::cDriver )
ELSE
USE ( ::cTable ) ALIAS ( ::cAlias ) SHARED NEW VIA ( ::cDriver )
ENDIF
IF NetErr()
MsgBox( ::cTable, "Could not been opened!" )
lErr := .t.
ENDIF
RECOVER USING oErr
MsgBox( oErr:description, "Error Opening Table" )
RETURN Self
ENDSEQUENCE
ErrorBlock( bError )
EXIT
OTHERWISE
lErr := hbide_execScriptFunction( "tableUse", ::cTable, ::cAlias ) /* cTable holds the information about connection */
EXIT
ENDSWITCH
IF lErr
RETURN .f.
ENDIF
IF empty( ::cAlias )
::cAlias := alias()
ENDIF
RETURN .t.
/*----------------------------------------------------------------------*/
METHOD IdeBrowse:exists()
SWITCH ::cDriver
CASE "DBFCDX"
CASE "DBFNTX"
RETURN hb_fileExists( ::cTable )
OTHERWISE
RETURN hbide_execScriptFunction( "tableExists", ::cTable )
ENDSWITCH
RETURN .f.
/*----------------------------------------------------------------------*/

View File

@@ -74,6 +74,7 @@
STATIC s_aPlugins := { { "", NIL } }
STATIC s_aLoaded := { { "", .f. } }
STATIC s_aPersist := {}
/*----------------------------------------------------------------------*/
@@ -265,3 +266,53 @@ FUNCTION hbide_loadPrototypes( cPath )
RETURN aProto
/*------------------------------------------------------------------------*/
/* Silent Mode */
FUNCTION hbide_compileAScript( cBuffer, cCompFlags )
LOCAL cFile, pHrb
LOCAL bError := ErrorBlock( {|o| break( o ) } )
BEGIN SEQUENCE
cFile := hb_compileFromBuf( cBuffer, cCompFlags )
IF ! Empty( cFile )
pHrb := hb_hrbLoad( HB_HRB_BIND_OVERLOAD, cFile )
ENDIF
END SEQUENCE
ErrorBlock( bError )
RETURN pHrb
/*----------------------------------------------------------------------*/
FUNCTION hbide_loadPersistentScripts()
LOCAL cPath, a_, dir_, cFileName, cBuffer, pHrb
IF !empty( cPath := hbide_setIde():oINI:getResourcesPath() )
a_:= {}
dir_:= directory( cPath + "hbide_persist_*.prg" )
aeval( dir_, {|e_| aadd( a_, e_[ 1 ] ) } )
dir_:= directory( cPath + "hbide_persist_*.hbs" )
aeval( dir_, {|e_| aadd( a_, e_[ 1 ] ) } )
FOR EACH cFileName IN a_
IF !empty( cBuffer := hb_memoRead( cPath + cFileName ) )
IF !empty( pHrb := hbide_compileAScript( cBuffer ) )
aadd( s_aPersist, pHrb )
ENDIF
ENDIF
NEXT
ENDIF
RETURN NIL
/*------------------------------------------------------------------------*/
FUNCTION hbide_execScriptFunction( cFunc, ... )
IF type( "script_" + cFunc + "()" ) == "UI"
RETURN eval( &( "{|...| " + "script_" + cFunc + "( ... )" + "}" ), ... )
ENDIF
RETURN NIL
/*----------------------------------------------------------------------*/

View File

@@ -0,0 +1,92 @@
/*
* $Id$
*/
/*
* Harbour Project source code:
* hbide plugin.
*
* Copyright 2010 Pritpal Bedi <bedipritpal@hotmail.com>
* www - http://harbour-project.org
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2, or (at your option)
* any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this software; see the file COPYING. If not, write to
* the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
* Boston, MA 02111-1307 USA (or visit the web site http://www.gnu.org/).
*
* As a special exception, the Harbour Project gives permission for
* additional uses of the text contained in its release of Harbour.
*
* The exception is that, if you link the Harbour libraries with other
* files to produce an executable, this does not by itself cause the
* resulting executable to be covered by the GNU General Public License.
* Your use of that executable is in no way restricted on account of
* linking the Harbour library code into it.
*
* This exception does not however invalidate any other reasons why
* the executable file might be covered by the GNU General Public License.
*
* This exception applies only to the code released by the Harbour
* Project under the name Harbour. If you copy code from other
* Harbour Project or Free Software Foundation releases into a copy of
* Harbour, as the General Public License permits, the exception does
* not apply to the code that you add in this way. To avoid misleading
* anyone as to the status of such modified files, you must delete
* this exception notice from them.
*
* If you write modifications of your own for Harbour, it is your choice
* whether to permit this exception to apply to your modifications.
* If you do not wish that, delete this exception notice.
*
*/
/*----------------------------------------------------------------------*/
/*----------------------------------------------------------------------//
Script TO handle rdd call from hbide
To be linked with hbIDE, change the name of this file to
hbide_persist_rdds.prg and place inside "resources" folder.
hbIDE will call these functions at appropriate times
when initializing the RDD structures.
Please note that RDDs supposed to be operated as such
must be linked properly with hbIDE build process.
You will need to expand these functions.
//----------------------------------------------------------------------*/
FUNCTION script_rdds()
RETURN {}
/*----------------------------------------------------------------------*/
FUNCTION script_tableExists( cTable )
RETURN .f.
/*----------------------------------------------------------------------*/
FUNCTION script_tableUse( cTable, cAlias )
RETURN .f.
/*----------------------------------------------------------------------*/
FUNCTION script_tableSelect( cDriver )
LOCAL cTable := ""
RETURN cTable
/*----------------------------------------------------------------------*/

View File

@@ -1,5 +1,5 @@
/*
* hbQTgen v1.0 - Harbour Callable Wrappers Generator for Qt v4.5.3+
* hbQTgen v1.0 - Harbour Callable Wrappers Generator for Qt v4.5+
* Please do not modify this document as it is subject to change in future.
* Pritpal Bedi <bedipritpal@hotmail.com>
*/
@@ -59,7 +59,7 @@
:hbDeleteLine() -> NIL
:hbMoveLine( nIDirection ) -> NIL
:hbGetSelectedText() -> cQString
:hbTextUnderCursor() -> cQString
:hbTextUnderCursor( lBCodeComplete ) -> cQString
:hbShowPrototype( cTip, nRows, nCols ) -> NIL
:hbSetCompleter( pCompleter ) -> NIL
:hbSetCurrentLineColor( pColor ) -> NIL
@@ -93,10 +93,10 @@
$PLATFORMS$
Windows, Linux, MacOS, OS2
$VERSION$
4.5.3
4.5 or upper
$FILES$
Prg Source : contrib/hbqt/qtgui/THBQPlainTextEdit.prg
C++ Wrappers : contrib/hbqt/qtgui/HBQPlainTextEdit.cpp
Prg source : contrib/hbqt/qtgui/THBQPlainTextEdit.prg
C++ wrappers : contrib/hbqt/qtgui/HBQPlainTextEdit.cpp
Library : hbqtgui
$SEEALSO$
QPlainTextEdit

View File

@@ -1377,9 +1377,10 @@ void HBQPlainTextEdit::keyPressEvent( QKeyEvent * event )
if( ( ctrlOrShift && event->text().isEmpty() ) )
return;
static QString eow( " ~!@#$%^&*()+{}|:\"<>?,./;'[]\\-=" ); /* end of word */
//static QString eow( " ~!@#$%^&*()+{}|:\"<>?,./;'[]\\-=" ); /* end of word */
static QString eow( "~!@#$%^&*()+{}|:\"<>?,./;'[]\\-=" ); /* end of word */
bool hasModifier = ( event->modifiers() != Qt::NoModifier ) && !ctrlOrShift;
QString completionPrefix = hbTextUnderCursor();
QString completionPrefix = hbTextUnderCursor( true );
if( ( hasModifier ||
event->text().isEmpty() ||
@@ -1408,10 +1409,31 @@ void HBQPlainTextEdit::keyPressEvent( QKeyEvent * event )
/*----------------------------------------------------------------------*/
QString HBQPlainTextEdit::hbTextUnderCursor()
QString HBQPlainTextEdit::hbTextUnderCursor( bool bCodeComplete )
{
QTextCursor tc = textCursor();
tc.select( QTextCursor::WordUnderCursor );
QTextCursor tc( textCursor() );
if( bCodeComplete )
{
tc.movePosition( QTextCursor::PreviousCharacter, QTextCursor::KeepAnchor, 1 );
QString txt = tc.selectedText();
tc.clearSelection();
if( txt == ( QString ) ' ' )
{
tc.select( QTextCursor::WordUnderCursor );
txt = tc.selectedText() + ' ';
return txt;
}
else
{
tc = textCursor();
tc.select( QTextCursor::WordUnderCursor );
return tc.selectedText();
}
}
else
{
tc.select( QTextCursor::WordUnderCursor );
}
return tc.selectedText();
}

View File

@@ -190,7 +190,7 @@ public slots:
void hbReplaceSelection( const QString & txt );
void hbInsertTab( int mode );
QString hbGetSelectedText();
QString hbTextUnderCursor();
QString hbTextUnderCursor( bool bCodeComplete = false );
void hbNumberBlockVisible( bool b );
bool hbNumberBlockVisible();
void hbShowPrototype( const QString & tip, int rows, int cols );

View File

@@ -597,16 +597,16 @@ HB_FUNC( QT_HBQPLAINTEXTEDIT_HBGETSELECTEDTEXT )
}
/*
* QString hbTextUnderCursor()
* QString hbTextUnderCursor( bool bCodeComplete )
*/
HB_FUNC( QT_HBQPLAINTEXTEDIT_HBTEXTUNDERCURSOR )
{
HBQPlainTextEdit * p = hbqt_par_HBQPlainTextEdit( 1 );
if( p )
hb_retc( ( p )->hbTextUnderCursor().toAscii().data() );
hb_retc( ( p )->hbTextUnderCursor( hb_parl( 2 ) ).toAscii().data() );
else
{
HB_TRACE( HB_TR_DEBUG, ( "............................... F=QT_HBQPLAINTEXTEDIT_HBTEXTUNDERCURSOR FP=hb_retc( ( p )->hbTextUnderCursor().toAscii().data() ); p is NULL" ) );
HB_TRACE( HB_TR_DEBUG, ( "............................... F=QT_HBQPLAINTEXTEDIT_HBTEXTUNDERCURSOR FP=hb_retc( ( p )->hbTextUnderCursor( hb_parl( 2 ) ).toAscii().data() ); p is NULL" ) );
}
}

View File

@@ -98,7 +98,7 @@ CREATE CLASS HBQPlainTextEdit INHERIT HbQtObjectHandler, QPlainTextEdit
METHOD hbDeleteLine()
METHOD hbMoveLine( nIDirection )
METHOD hbGetSelectedText()
METHOD hbTextUnderCursor()
METHOD hbTextUnderCursor( lBCodeComplete )
METHOD hbShowPrototype( cTip, nRows, nCols )
METHOD hbSetCompleter( pCompleter )
METHOD hbSetCurrentLineColor( pColor )
@@ -255,8 +255,8 @@ METHOD HBQPlainTextEdit:hbGetSelectedText()
RETURN Qt_HBQPlainTextEdit_hbGetSelectedText( ::pPtr )
METHOD HBQPlainTextEdit:hbTextUnderCursor()
RETURN Qt_HBQPlainTextEdit_hbTextUnderCursor( ::pPtr )
METHOD HBQPlainTextEdit:hbTextUnderCursor( lBCodeComplete )
RETURN Qt_HBQPlainTextEdit_hbTextUnderCursor( ::pPtr, lBCodeComplete )
METHOD HBQPlainTextEdit:hbShowPrototype( cTip, nRows, nCols )

View File

@@ -129,7 +129,7 @@ HB_FUNC( QT_HBQPLAINTEXTEDIT )
void hbDeleteLine()
void hbMoveLine( int iDirection )
QString hbGetSelectedText()
QString hbTextUnderCursor()
QString hbTextUnderCursor( bool bCodeComplete )
void hbShowPrototype( const QString & tip, int rows, int cols )
void hbSetCompleter( QCompleter * completer )
void hbSetCurrentLineColor( const QColor & color )