2010-02-14 17:34 UTC-0800 Pritpal Bedi (pritpal@vouchcac.com)
* contrib/gtwvg/wvgscrlb.prg
! Defined method :configure() as VIRTUAL.
* contrib/hbqt/qth/HBQPlainTextEdit.qth
* contrib/hbqt/hbqt_hbqplaintextedit.cpp
* contrib/hbqt/hbqt_hbqplaintextedit.h
* contrib/hbqt/qtgui/HBQPlainTextEdit.cpp
* contrib/hbqt/qtgui/THBQPlainTextEdit.prg
+ Added class variable :block which can be set with qEdit:hbSetEventBlock( bBlock ).
I did not set it via the constructor as it is implementation specific.
The goal was to capture mouse or other events which are consumed by
parent class itself and are not forwarded to the widget. At present
it is used to inform double-click event to qEdit and is scheduled
to be extended.
* contrib/hbqt/hbqt_misc.prg
+ Added method :from(), synonymous to :configure() to avoid grasping confusion.
Now both syntaxes are supported:
qCursor := QTextCursor():configure( qEdit:textCursor() )
qCursor := QTextCursor():from( qEdit:textCursor() )
* contrib/hbide/ideactions.prg
* contrib/hbide/idedocks.prg
* contrib/hbide/ideeditor.prg
* contrib/hbide/idefindreplace.prg
* contrib/hbide/idemisc.prg
* contrib/hbide/ideprojmanager.prg
+ Project Management: enabled "Launch Parameters" which are supplied to the
executable if "Launch..." is selected with build
or otherwise.
: supressed auto expansion of "Current Project" at startup.
Was a constant cause of annoyance if the project tree
been fairly large.
+ Docking Windows: reworked to occupy proper corners.
Please delete idesettings.ini.
! Find_Replace Dialog: set to find from begining if "Find What" is changed.
! Code Skeletons: fixed to not append blank lines while called.
: selection menu appears at the current cursor coordinates.
+ Editor: double-click on some word place the selection in copy buffer in case
that word is selected. This feature I always wished-for in xMate.
+ Editor: highly .prg code suited indentation engine. It comprise so many
factors to explain. Please test. I feel you will be really happy.
Also let me know what else can be implemented. Code is now
under my grasp and probably more ideas are already building up.
This commit is contained in:
@@ -17,6 +17,57 @@
|
||||
past entries belonging to author(s): Viktor Szakats.
|
||||
*/
|
||||
|
||||
2010-02-14 17:34 UTC-0800 Pritpal Bedi (pritpal@vouchcac.com)
|
||||
* contrib/gtwvg/wvgscrlb.prg
|
||||
! Defined method :configure() as VIRTUAL.
|
||||
|
||||
* contrib/hbqt/qth/HBQPlainTextEdit.qth
|
||||
* contrib/hbqt/hbqt_hbqplaintextedit.cpp
|
||||
* contrib/hbqt/hbqt_hbqplaintextedit.h
|
||||
* contrib/hbqt/qtgui/HBQPlainTextEdit.cpp
|
||||
* contrib/hbqt/qtgui/THBQPlainTextEdit.prg
|
||||
+ Added class variable :block which can be set with qEdit:hbSetEventBlock( bBlock ).
|
||||
I did not set it via the constructor as it is implementation specific.
|
||||
The goal was to capture mouse or other events which are consumed by
|
||||
parent class itself and are not forwarded to the widget. At present
|
||||
it is used to inform double-click event to qEdit and is scheduled
|
||||
to be extended.
|
||||
|
||||
* contrib/hbqt/hbqt_misc.prg
|
||||
+ Added method :from(), synonymous to :configure() to avoid grasping confusion.
|
||||
Now both syntaxes are supported:
|
||||
qCursor := QTextCursor():configure( qEdit:textCursor() )
|
||||
qCursor := QTextCursor():from( qEdit:textCursor() )
|
||||
|
||||
* contrib/hbide/ideactions.prg
|
||||
* contrib/hbide/idedocks.prg
|
||||
* contrib/hbide/ideeditor.prg
|
||||
* contrib/hbide/idefindreplace.prg
|
||||
* contrib/hbide/idemisc.prg
|
||||
* contrib/hbide/ideprojmanager.prg
|
||||
|
||||
+ Project Management: enabled "Launch Parameters" which are supplied to the
|
||||
executable if "Launch..." is selected with build
|
||||
or otherwise.
|
||||
: supressed auto expansion of "Current Project" at startup.
|
||||
Was a constant cause of annoyance if the project tree
|
||||
been fairly large.
|
||||
+ Docking Windows: reworked to occupy proper corners.
|
||||
Please delete idesettings.ini.
|
||||
|
||||
! Find_Replace Dialog: set to find from begining if "Find What" is changed.
|
||||
|
||||
! Code Skeletons: fixed to not append blank lines while called.
|
||||
: selection menu appears at the current cursor coordinates.
|
||||
|
||||
+ Editor: double-click on some word place the selection in copy buffer in case
|
||||
that word is selected. This feature I always wished-for in xMate.
|
||||
|
||||
+ Editor: highly .prg code suited indentation engine. It comprise so many
|
||||
factors to explain. Please test. I feel you will be really happy.
|
||||
Also let me know what else can be implemented. Code is now
|
||||
under my grasp and probably more ideas are already building up.
|
||||
|
||||
2010-02-14 21:59 UTC+0100 Viktor Szakats (harbour.01 syenar.hu)
|
||||
* contrib/hbwin/tests/testdll1.prg
|
||||
+ Displaying success/failure.
|
||||
|
||||
@@ -136,7 +136,7 @@ CLASS WvgScrollBar INHERIT WvgWindow, DataRef
|
||||
|
||||
METHOD new( oParent, oOwner, aPos, aSize, aPresParams, lVisible )
|
||||
METHOD create( oParent, oOwner, aPos, aSize, aPresParams, lVisible )
|
||||
METHOD configure( oParent, oOwner, aPos, aSize, aPresParams, lVisible )
|
||||
METHOD configure( oParent, oOwner, aPos, aSize, aPresParams, lVisible ) VIRTUAL
|
||||
METHOD destroy()
|
||||
METHOD handleEvent( nMessage, aNM )
|
||||
|
||||
|
||||
@@ -367,6 +367,8 @@ METHOD IdeActions:buildToolBar()
|
||||
oTBar:addItem( ::getAction( "ZoomOut" ), , , , , , "ZoomOut" )
|
||||
oTBar:addItem( , , , , , nSep )
|
||||
|
||||
oTBar:oWidget:setAllowedAreas( Qt_TopToolBarArea )
|
||||
|
||||
/* ComboBox to Manage Views */
|
||||
::oIde:qViewsCombo := QComboBox():new()
|
||||
oTBar:oWidget:addWidget( ::qViewsCombo )
|
||||
|
||||
@@ -258,6 +258,8 @@ METHOD IdeDocks:buildDialog()
|
||||
::oDlg:close := {|| hbide_getYesNo( "hbIDE is about to be closed!", "Are you sure?" ) }
|
||||
::oDlg:oWidget:setDockOptions( QMainWindow_AllowTabbedDocks + QMainWindow_ForceTabbedDocks )
|
||||
::oDlg:oWidget:setTabPosition( Qt_BottomDockWidgetArea, QTabWidget_South )
|
||||
::oDlg:oWidget:setCorner( Qt_BottomLeftCorner, Qt_LeftDockWidgetArea )
|
||||
::oDlg:oWidget:setCorner( Qt_BottomRightCorner, Qt_RightDockWidgetArea )
|
||||
|
||||
::oIde:oDa := ::oDlg:drawingArea
|
||||
|
||||
@@ -783,7 +785,8 @@ METHOD IdeDocks:buildSkeletonWidget()
|
||||
::oSkeltn:oWidget := QDockWidget():new( ::oDlg:oWidget )
|
||||
::oSkeltn:oWidget:setObjectName( "dockSkeleton" )
|
||||
::oDlg:addChild( ::oSkeltn )
|
||||
::oSkeltn:oWidget:setFeatures( QDockWidget_DockWidgetClosable + QDockWidget_DockWidgetFloatable )
|
||||
::oSkeltn:oWidget:setFeatures( QDockWidget_DockWidgetClosable + QDockWidget_DockWidgetFloatable + ;
|
||||
QDockWidget_DockWidgetVerticalTitleBar )
|
||||
::oSkeltn:oWidget:setAllowedAreas( Qt_RightDockWidgetArea )
|
||||
::oSkeltn:oWidget:setWindowTitle( "Code Skeletons" )
|
||||
::oSkeltn:oWidget:setFocusPolicy( Qt_NoFocus )
|
||||
@@ -793,7 +796,6 @@ METHOD IdeDocks:buildSkeletonWidget()
|
||||
::oSkeltn:oWidget:setWidget( ::oIde:oSkeltnUI:oWidget )
|
||||
|
||||
::oDlg:oWidget:addDockWidget_1( Qt_RightDockWidgetArea, ::oSkeltn:oWidget, Qt_Horizontal )
|
||||
::oSkeltn:hide()
|
||||
|
||||
oUI := ::oIde:oSkeltnUI
|
||||
|
||||
@@ -811,6 +813,8 @@ METHOD IdeDocks:buildSkeletonWidget()
|
||||
//::oSkeltnUI:q_editCode:setFont( ::oFont:oWidget )
|
||||
aeval( ::aSkltns, {|e_| ::oSkeltnUI:q_listNames:addItem( e_[ 1 ] ) } )
|
||||
|
||||
::oSkeltn:hide()
|
||||
|
||||
RETURN Self
|
||||
|
||||
/*----------------------------------------------------------------------*/
|
||||
|
||||
@@ -1353,6 +1353,8 @@ CLASS IdeEdit INHERIT IdeObject
|
||||
DATA lModified INIT .F.
|
||||
DATA lIndentIt INIT .f.
|
||||
DATA lUpdatePrevWord INIT .f.
|
||||
DATA lCopyWhenDblClicked INIT .f.
|
||||
DATA cCurLineText INIT ""
|
||||
|
||||
METHOD new( oEditor, nMode )
|
||||
METHOD create( oEditor, nMode )
|
||||
@@ -1376,6 +1378,8 @@ CLASS IdeEdit INHERIT IdeObject
|
||||
METHOD findLastIndent()
|
||||
METHOD reLayMarkButtons()
|
||||
METHOD presentSkeletons()
|
||||
METHOD handleCurrentIndent()
|
||||
METHOD handlePreviousWord( lUpdatePrevWord )
|
||||
|
||||
ENDCLASS
|
||||
|
||||
@@ -1416,8 +1420,11 @@ METHOD IdeEdit:create( oEditor, nMode )
|
||||
|
||||
::connectEditSignals( Self )
|
||||
|
||||
Qt_Events_Connect( ::pEvents, ::qEdit, QEvent_KeyPress, {|p| ::execKeyEvent( 101, QEvent_KeyPress, p ) } )
|
||||
Qt_Events_Connect( ::pEvents, ::qEdit, QEvent_Wheel , {|p| ::execKeyEvent( 102, QEvent_Wheel , p ) } )
|
||||
Qt_Events_Connect( ::pEvents, ::qEdit, QEvent_KeyPress , {|p| ::execKeyEvent( 101, QEvent_KeyPress, p ) } )
|
||||
Qt_Events_Connect( ::pEvents, ::qEdit, QEvent_Wheel , {|p| ::execKeyEvent( 102, QEvent_Wheel , p ) } )
|
||||
Qt_Events_Connect( ::pEvents, ::qEdit, QEvent_MouseButtonDblClick, {|p| ::execKeyEvent( 103, QEvent_MouseButtonDblClick, p ) } )
|
||||
|
||||
::qEdit:hbSetEventBlock( {|p| ::execKeyEvent( 115, 1001, p ) } )
|
||||
|
||||
RETURN Self
|
||||
|
||||
@@ -1447,9 +1454,9 @@ METHOD IdeEdit:disconnectEditSignals( oEdit )
|
||||
::disConnect( oEdit:qEdit, "textChanged()" )
|
||||
::disConnect( oEdit:qEdit, "selectionChanged()" )
|
||||
::disConnect( oEdit:qEdit, "cursorPositionChanged()" )
|
||||
::disConnect( oEdit:qEdit, "copyAvailable(bool)" )
|
||||
|
||||
#if 0
|
||||
::disConnect( oEdit:qEdit, "copyAvailable(bool)" )
|
||||
::disConnect( oEdit:qEdit, "modificationChanged(bool)" )
|
||||
::disConnect( oEdit:qEdit, "updateRequest(QRect,int)" )
|
||||
::disConnect( oEdit:qEdit, "redoAvailable(bool)" )
|
||||
@@ -1467,9 +1474,9 @@ METHOD IdeEdit:connectEditSignals( oEdit )
|
||||
::Connect( oEdit:qEdit, "textChanged()" , {| | ::execEvent( 2, oEdit, ) } )
|
||||
::Connect( oEdit:qEdit, "selectionChanged()" , {|p | ::execEvent( 6, oEdit, p ) } )
|
||||
::Connect( oEdit:qEdit, "cursorPositionChanged()" , {| | ::execEvent( 9, oEdit, ) } )
|
||||
::Connect( oEdit:qEdit, "copyAvailable(bool)" , {|p | ::execEvent( 3, oEdit, p ) } )
|
||||
|
||||
#if 0
|
||||
::Connect( oEdit:qEdit, "copyAvailable(bool)" , {|p | ::execEvent( 3, oEdit, p ) } )
|
||||
::Connect( oEdit:qEdit, "modificationChanged(bool)" , {|p | ::execEvent( 4, oEdit, p ) } )
|
||||
::Connect( oEdit:qEdit, "updateRequest(QRect,int)" , {|p,p1| ::execEvent( 8, oEdit, p, p1 ) } )
|
||||
::Connect( oEdit:qEdit, "redoAvailable(bool)" , {|p | ::execEvent( 5, oEdit, p ) } )
|
||||
@@ -1481,7 +1488,7 @@ METHOD IdeEdit:connectEditSignals( oEdit )
|
||||
/*----------------------------------------------------------------------*/
|
||||
|
||||
METHOD IdeEdit:execEvent( nMode, oEdit, p, p1 )
|
||||
LOCAL pAct, qAct, n, qCursor, qEdit, oo, nSpaces
|
||||
LOCAL pAct, qAct, n, qCursor, qEdit, oo
|
||||
|
||||
HB_SYMBOL_UNUSED( p1 )
|
||||
|
||||
@@ -1515,10 +1522,12 @@ METHOD IdeEdit:execEvent( nMode, oEdit, p, p1 )
|
||||
ENDCASE
|
||||
ENDIF
|
||||
EXIT
|
||||
|
||||
CASE textChanged
|
||||
hbide_dbg( "textChanged()" )
|
||||
::oEditor:setTabImage( qEdit )
|
||||
EXIT
|
||||
|
||||
CASE selectionChanged
|
||||
hbide_dbg( "selectionChanged()" )
|
||||
::oEditor:qCqEdit := qEdit
|
||||
@@ -1533,29 +1542,23 @@ METHOD IdeEdit:execEvent( nMode, oEdit, p, p1 )
|
||||
qEdit:highlightSelectedColumns( ::isColumnSelectionEnabled )
|
||||
|
||||
::oDK:setStatusText( SB_PNL_SELECTEDCHARS, len( qCursor:selectedText() ) )
|
||||
|
||||
EXIT
|
||||
|
||||
CASE cursorPositionChanged
|
||||
hbide_dbg( "cursorPositionChanged()" )
|
||||
::oEditor:dispEditInfo( qEdit )
|
||||
IF ::lUpdatePrevWord
|
||||
::lUpdatePrevWord := .f.
|
||||
hbide_handlePreviousWord( ::qEdit )
|
||||
ENDIF
|
||||
|
||||
IF ::lIndentIt
|
||||
::lIndentIt := .f.
|
||||
IF ( nSpaces := ::findLastIndent() ) > 0
|
||||
qCursor := QTextCursor():configure( ::qEdit:textCursor() )
|
||||
qCursor:insertText( space( nSpaces ) )
|
||||
ENDIF
|
||||
ENDIF
|
||||
|
||||
::handlePreviousWord( ::lUpdatePrevWord )
|
||||
::handleCurrentIndent()
|
||||
EXIT
|
||||
#if 0
|
||||
|
||||
CASE copyAvailable
|
||||
//hbide_dbg( "copyAvailable(bool)", p )
|
||||
IF p .AND. ::lCopyWhenDblClicked
|
||||
::qEdit:copy()
|
||||
ENDIF
|
||||
::lCopyWhenDblClicked := .f.
|
||||
EXIT
|
||||
|
||||
#if 0
|
||||
CASE modificationChanged
|
||||
//hbide_dbg( "modificationChanged(bool)", p )
|
||||
EXIT
|
||||
@@ -1607,6 +1610,7 @@ METHOD IdeEdit:execKeyEvent( nMode, nEvent, p )
|
||||
EXIT
|
||||
CASE Qt_Key_Return
|
||||
CASE Qt_Key_Enter
|
||||
::handlePreviousWord( .t. )
|
||||
::lIndentIt := .t.
|
||||
EXIT
|
||||
CASE Qt_Key_Tab
|
||||
@@ -1663,9 +1667,20 @@ METHOD IdeEdit:execKeyEvent( nMode, nEvent, p )
|
||||
ENDSWITCH
|
||||
|
||||
EXIT
|
||||
|
||||
CASE QEvent_Wheel
|
||||
EXIT
|
||||
|
||||
CASE QEvent_MouseButtonDblClick
|
||||
::lCopyWhenDblClicked := .t.
|
||||
EXIT
|
||||
|
||||
CASE 1001
|
||||
IF p == QEvent_MouseButtonDblClick
|
||||
::lCopyWhenDblClicked := .t.
|
||||
ENDIF
|
||||
EXIT
|
||||
|
||||
ENDSWITCH
|
||||
|
||||
RETURN .F. /* Important */
|
||||
@@ -1673,19 +1688,18 @@ METHOD IdeEdit:execKeyEvent( nMode, nEvent, p )
|
||||
/*----------------------------------------------------------------------*/
|
||||
|
||||
METHOD IdeEdit:presentSkeletons()
|
||||
LOCAL qCrs, qMenu, pAct, cAct, n, a_, qAct, nPos, nCol, s
|
||||
LOCAL qCrs, qMenu, pAct, cAct, n, a_, qAct, nPos, nCol, s, qRc
|
||||
|
||||
IF !empty( ::aSkltns )
|
||||
qCrs := QTextCursor():configure( ::qEdit:textCursor() )
|
||||
|
||||
//qRc := QRect():configure( ::qEdit:cursorRect() )
|
||||
qRc := QRect():configure( ::qEdit:cursorRect( qCrs ) )
|
||||
|
||||
qMenu := QMenu():new( ::qEdit )
|
||||
FOR EACH a_ IN ::aSkltns
|
||||
qMenu:addAction( a_[ 1 ] )
|
||||
NEXT
|
||||
|
||||
pAct := qMenu:exec_1( ::qEdit:mapToGlobal( QPoint():new( 100,100 ) ) )
|
||||
pAct := qMenu:exec_1( ::qEdit:mapToGlobal( QPoint():new( qRc:x(), qRc:y() ) ) )
|
||||
IF !hbqt_isEmptyQtPointer( pAct )
|
||||
qAct := QAction():configure( pAct )
|
||||
cAct := qAct:text()
|
||||
@@ -1698,7 +1712,7 @@ METHOD IdeEdit:presentSkeletons()
|
||||
s := space( nCol ) + s
|
||||
ENDIF
|
||||
NEXT
|
||||
qCrs:insertText( hbide_arrayToMemo( a_ ) )
|
||||
qCrs:insertText( hbide_arrayToMemoEx( a_ ) )
|
||||
qCrs:setPosition( nPos )
|
||||
::qEdit:setTextCursor( qCrs )
|
||||
ENDIF
|
||||
@@ -1824,6 +1838,90 @@ METHOD IdeEdit:caseInvert()
|
||||
|
||||
/*----------------------------------------------------------------------*/
|
||||
|
||||
METHOD IdeEdit:handlePreviousWord( lUpdatePrevWord )
|
||||
LOCAL qCursor, qTextBlock, cText, cWord, nB, nL, qEdit, lPrevOnly, nCol, nSpace, nSpaces, nOff
|
||||
|
||||
IF ! lUpdatePrevWord
|
||||
RETURN Self
|
||||
ENDIF
|
||||
::lUpdatePrevWord := .f.
|
||||
|
||||
qEdit := ::qEdit
|
||||
|
||||
qCursor := QTextCursor():configure( qEdit:textCursor() )
|
||||
qTextBlock := QTextBlock():configure( qCursor:block() )
|
||||
cText := qTextBlock:text()
|
||||
nCol := qCursor:columnNumber()
|
||||
IF ( substr( cText, nCol - 1, 1 ) == " " )
|
||||
RETURN nil
|
||||
ENDIF
|
||||
nSpace := iif( substr( cText, nCol, 1 ) == " ", 1, 0 )
|
||||
cWord := hbide_getPreviousWord( cText, nCol + 1 )
|
||||
|
||||
IF !empty( cWord ) .AND. hbide_isHarbourKeyword( cWord )
|
||||
lPrevOnly := left( lower( ltrim( cText ) ), len( cWord ) ) == lower( cWord )
|
||||
|
||||
nL := len( cWord ) + nSpace
|
||||
nB := qCursor:position() - nL
|
||||
|
||||
qCursor:beginEditBlock()
|
||||
qCursor:setPosition( nB )
|
||||
qCursor:movePosition( QTextCursor_NextCharacter, QTextCursor_KeepAnchor, nL )
|
||||
qCursor:removeSelectedText()
|
||||
qCursor:insertText( upper( cWord ) + space( nSpace ) )
|
||||
qCursor:endEditBlock()
|
||||
qEdit:setTextCursor( qCursor )
|
||||
|
||||
IF hbide_isStartingKeyword( cWord )
|
||||
IF lPrevOnly
|
||||
qCursor:setPosition( nB )
|
||||
IF ( nCol := qCursor:columnNumber() ) > 0
|
||||
qCursor:beginEditBlock()
|
||||
qCursor:movePosition( QTextCursor_StartOfBlock )
|
||||
qCursor:movePosition( QTextCursor_NextCharacter, QTextCursor_KeepAnchor, nCol )
|
||||
qCursor:removeSelectedText()
|
||||
qCursor:movePosition( QTextCursor_NextCharacter, QTextCursor_MoveAnchor, nL )
|
||||
qCursor:endEditBlock()
|
||||
qEdit:setTextCursor( qCursor )
|
||||
ENDIF
|
||||
ENDIF
|
||||
|
||||
ELSEIF hbide_isMinimumIndentableKeyword( cWord )
|
||||
IF lPrevOnly
|
||||
qCursor:setPosition( nB )
|
||||
IF ( nCol := qCursor:columnNumber() ) >= 0
|
||||
qCursor:beginEditBlock()
|
||||
qCursor:movePosition( QTextCursor_StartOfBlock )
|
||||
qCursor:movePosition( QTextCursor_NextCharacter, QTextCursor_KeepAnchor, nCol )
|
||||
qCursor:removeSelectedText()
|
||||
qCursor:insertText( space( ::nTabSpaces ) )
|
||||
qCursor:movePosition( QTextCursor_NextCharacter, QTextCursor_MoveAnchor, nL )
|
||||
qEdit:setTextCursor( qCursor )
|
||||
qCursor:endEditBlock()
|
||||
ENDIF
|
||||
ENDIF
|
||||
|
||||
ELSEIF hbide_isIndentableKeyword( cWord )
|
||||
IF lPrevOnly
|
||||
nSpaces := hbide_getFrontSpacesAndWord( cText )
|
||||
IF nSpaces > 0 .AND. ( nOff := nSpaces % ::nTabSpaces ) > 0
|
||||
qCursor:setPosition( nB )
|
||||
qCursor:beginEditBlock()
|
||||
qCursor:movePosition( QTextCursor_PreviousCharacter, QTextCursor_KeepAnchor, nOff )
|
||||
qCursor:removeSelectedText()
|
||||
qCursor:movePosition( QTextCursor_NextCharacter, QTextCursor_MoveAnchor, nL )
|
||||
qEdit:setTextCursor( qCursor )
|
||||
qCursor:endEditBlock()
|
||||
ENDIF
|
||||
ENDIF
|
||||
ENDIF
|
||||
|
||||
ENDIF
|
||||
|
||||
RETURN .t.
|
||||
|
||||
/*----------------------------------------------------------------------*/
|
||||
|
||||
METHOD IdeEdit:findLastIndent()
|
||||
LOCAL qCursor, qTextBlock, cText, cWord
|
||||
LOCAL nSpaces := 0
|
||||
@@ -1831,6 +1929,7 @@ METHOD IdeEdit:findLastIndent()
|
||||
qCursor := QTextCursor():configure( ::qEdit:textCursor() )
|
||||
qTextBlock := QTextBlock():configure( qCursor:block() )
|
||||
|
||||
qTextBlock := QTextBlock():configure( qTextBlock:previous() )
|
||||
DO WHILE .t.
|
||||
IF !( qTextBlock:isValid() )
|
||||
EXIT
|
||||
@@ -1851,8 +1950,114 @@ METHOD IdeEdit:findLastIndent()
|
||||
|
||||
/*----------------------------------------------------------------------*/
|
||||
|
||||
METHOD IdeEdit:handleCurrentIndent()
|
||||
LOCAL qCursor, nSpaces
|
||||
|
||||
IF ::lIndentIt
|
||||
::lIndentIt := .f.
|
||||
IF ( nSpaces := ::findLastIndent() ) > 0
|
||||
qCursor := QTextCursor():configure( ::qEdit:textCursor() )
|
||||
qCursor:insertText( space( nSpaces ) )
|
||||
ENDIF
|
||||
ENDIF
|
||||
|
||||
RETURN Self
|
||||
|
||||
/*----------------------------------------------------------------------*/
|
||||
|
||||
FUNCTION hbide_getPreviousWord( cText, nPos )
|
||||
LOCAL cWord, n
|
||||
|
||||
cText := alltrim( substr( cText, 1, nPos ) )
|
||||
IF ( n := rat( " ", cText ) ) > 0
|
||||
cWord := substr( cText, n + 1 )
|
||||
ELSE
|
||||
cWord := cText
|
||||
ENDIF
|
||||
|
||||
RETURN cWord
|
||||
|
||||
/*----------------------------------------------------------------------*/
|
||||
|
||||
FUNCTION hbide_getFirstWord( cText )
|
||||
LOCAL cWord, n
|
||||
|
||||
cText := alltrim( cText )
|
||||
IF ( n := at( " ", cText ) ) > 0
|
||||
cWord := left( cText, n-1 )
|
||||
ELSE
|
||||
cWord := cText
|
||||
ENDIF
|
||||
|
||||
RETURN cWord
|
||||
|
||||
/*----------------------------------------------------------------------*/
|
||||
|
||||
FUNCTION hbide_getFrontSpacesAndWord( cText, cWord )
|
||||
LOCAL n := 0
|
||||
|
||||
DO WHILE .t.
|
||||
IF substr( cText, ++n, 1 ) != " "
|
||||
EXIT
|
||||
ENDIF
|
||||
ENDDO
|
||||
n--
|
||||
|
||||
cWord := hbide_getFirstWord( cText )
|
||||
|
||||
RETURN n
|
||||
|
||||
/*----------------------------------------------------------------------*/
|
||||
|
||||
FUNCTION hbide_isStartingKeyword( cWord )
|
||||
STATIC s_b_ := { ;
|
||||
'function' => NIL,;
|
||||
'class' => NIL,;
|
||||
'method' => NIL }
|
||||
|
||||
RETURN Lower( cWord ) $ s_b_
|
||||
|
||||
/*----------------------------------------------------------------------*/
|
||||
|
||||
FUNCTION hbide_isMinimumIndentableKeyword( cWord )
|
||||
STATIC s_b_ := { ;
|
||||
'local' => NIL,;
|
||||
'static' => NIL,;
|
||||
'return' => NIL,;
|
||||
'default' => NIL }
|
||||
|
||||
RETURN Lower( cWord ) $ s_b_
|
||||
|
||||
/*----------------------------------------------------------------------*/
|
||||
|
||||
FUNCTION hbide_isIndentableKeyword( cWord )
|
||||
STATIC s_b_ := { ;
|
||||
'if' => NIL,;
|
||||
'else' => NIL,;
|
||||
'elseif' => NIL,;
|
||||
'docase' => NIL,;
|
||||
'case' => NIL,;
|
||||
'otherwise' => NIL,;
|
||||
'do' => NIL,;
|
||||
'while' => NIL,;
|
||||
'switch' => NIL,;
|
||||
'for' => NIL,;
|
||||
'next' => NIL,;
|
||||
'begin' => NIL,;
|
||||
'sequence' => NIL,;
|
||||
'try' => NIL,;
|
||||
'catch' => NIL,;
|
||||
'always' => NIL,;
|
||||
'recover' => NIL,;
|
||||
'finally' => NIL }
|
||||
|
||||
RETURN Lower( cWord ) $ s_b_
|
||||
|
||||
/*----------------------------------------------------------------------*/
|
||||
|
||||
FUNCTION hbide_isHarbourKeyword( cWord )
|
||||
STATIC s_b_ := { 'function' => NIL,;
|
||||
STATIC s_b_ := { ;
|
||||
'function' => NIL,;
|
||||
'return' => NIL,;
|
||||
'static' => NIL,;
|
||||
'local' => NIL,;
|
||||
@@ -1904,133 +2109,4 @@ FUNCTION hbide_isHarbourKeyword( cWord )
|
||||
|
||||
/*----------------------------------------------------------------------*/
|
||||
|
||||
FUNCTION hbide_isIndentableKeyword( cWord )
|
||||
LOCAL s_b_ := { 'function' => NIL,;
|
||||
'if' => NIL,;
|
||||
'else' => NIL,;
|
||||
'elseif' => NIL,;
|
||||
'docase' => NIL,;
|
||||
'case' => NIL,;
|
||||
'otherwise' => NIL,;
|
||||
'do' => NIL,;
|
||||
'while' => NIL,;
|
||||
'switch' => NIL,;
|
||||
'for' => NIL,;
|
||||
'class' => NIL,;
|
||||
'method' => NIL,;
|
||||
'begin' => NIL,;
|
||||
'sequence' => NIL,;
|
||||
'try' => NIL,;
|
||||
'catch' => NIL,;
|
||||
'always' => NIL,;
|
||||
'recover' => NIL,;
|
||||
'finally' => NIL }
|
||||
|
||||
RETURN Lower( cWord ) $ s_b_
|
||||
|
||||
/*----------------------------------------------------------------------*/
|
||||
|
||||
FUNCTION hbide_isStartingKeyword( cWord )
|
||||
STATIC s_b_ := { 'function' => NIL,;
|
||||
'method' => NIL }
|
||||
|
||||
RETURN Lower( cWord ) $ s_b_
|
||||
|
||||
/*----------------------------------------------------------------------*/
|
||||
|
||||
FUNCTION hbide_handlePreviousWord( qEdit )
|
||||
LOCAL qCursor, qTextBlock, cText, nPos, cWord, nB, nL
|
||||
|
||||
qCursor := QTextCursor():configure( qEdit:textCursor() )
|
||||
qTextBlock := QTextBlock():configure( qCursor:block() )
|
||||
cText := qTextBlock:text()
|
||||
nPos := qCursor:columnNumber()
|
||||
IF ( substr( cText, nPos - 1, 1 ) == " " )
|
||||
RETURN nil
|
||||
ENDIF
|
||||
|
||||
cWord := hbide_getPreviousWord( cText, nPos + 1 )
|
||||
|
||||
IF !empty( cWord )
|
||||
nL := len( cWord + " " )
|
||||
nB := qCursor:position() - nL
|
||||
|
||||
IF hbide_isHarbourKeyword( cWord )
|
||||
//qEdit:setToolTip( cWord )
|
||||
|
||||
qCursor:beginEditBlock()
|
||||
qCursor:setPosition( nB )
|
||||
qCursor:movePosition( QTextCursor_NextCharacter, QTextCursor_KeepAnchor, nL )
|
||||
qCursor:removeSelectedText()
|
||||
qCursor:insertText( upper( cWord ) + " " )
|
||||
|
||||
qEdit:setTextCursor( qCursor )
|
||||
qCursor:endEditBlock()
|
||||
ENDIF
|
||||
|
||||
IF hbide_isStartingKeyword( cWord )
|
||||
qCursor:setPosition( nB )
|
||||
nPos := qCursor:columnNumber()
|
||||
|
||||
IF nPos > 0
|
||||
qCursor:beginEditBlock()
|
||||
qCursor:movePosition( QTextCursor_StartOfBlock )
|
||||
|
||||
qCursor:movePosition( QTextCursor_NextCharacter, QTextCursor_KeepAnchor, nPos )
|
||||
qCursor:removeSelectedText()
|
||||
|
||||
qCursor:movePosition( QTextCursor_NextCharacter, QTextCursor_MoveAnchor, nL )
|
||||
qCursor:endEditBlock()
|
||||
ENDIF
|
||||
ENDIF
|
||||
ENDIF
|
||||
RETURN .t.
|
||||
|
||||
/*----------------------------------------------------------------------*/
|
||||
|
||||
FUNCTION hbide_getPreviousWord( cText, nPos )
|
||||
LOCAL cWord, n
|
||||
|
||||
cText := alltrim( substr( cText, 1, nPos ) )
|
||||
IF ( n := rat( " ", cText ) ) > 0
|
||||
cWord := substr( cText, n + 1 )
|
||||
ELSE
|
||||
cWord := cText
|
||||
ENDIF
|
||||
|
||||
RETURN cWord
|
||||
|
||||
/*----------------------------------------------------------------------*/
|
||||
|
||||
FUNCTION hbide_getFirstWord( cText )
|
||||
LOCAL cWord, n
|
||||
|
||||
cText := alltrim( cText )
|
||||
IF ( n := at( " ", cText ) ) > 0
|
||||
cWord := left( cText, n-1 )
|
||||
ELSE
|
||||
cWord := cText
|
||||
ENDIF
|
||||
|
||||
RETURN cWord
|
||||
|
||||
/*----------------------------------------------------------------------*/
|
||||
|
||||
FUNCTION hbide_getFrontSpacesAndWord( cText, cWord )
|
||||
LOCAL n := 0
|
||||
|
||||
DO WHILE .t.
|
||||
IF substr( cText, ++n, 1 ) != " "
|
||||
EXIT
|
||||
ENDIF
|
||||
ENDDO
|
||||
n--
|
||||
|
||||
cWord := hbide_getFirstWord( cText )
|
||||
|
||||
RETURN n
|
||||
|
||||
/*----------------------------------------------------------------------*/
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -128,6 +128,8 @@ METHOD IdeFindReplace:create( oIde )
|
||||
::oUI:signal( "buttonClose" , "clicked()", ;
|
||||
{|| ::oIde:aIni[ INI_HBIDE, FindDialogGeometry ] := hbide_posAndSize( ::oUI:oWidget ), ::oUI:hide() } )
|
||||
|
||||
::oUI:signal( "comboFindWhat", "editTextChanged(text)", {|| ::oUI:q_radioEntire:setChecked( .t. ) } )
|
||||
|
||||
::oUI:signal( "comboFindWhat", "currentIndexChanged(text)", ;
|
||||
{|p| ::oIde:oSBar:getItem( SB_PNL_SEARCH ):caption := "FIND: " + p } )
|
||||
|
||||
|
||||
@@ -490,6 +490,17 @@ FUNCTION hbide_arrayToMemo( a_ )
|
||||
|
||||
/*----------------------------------------------------------------------*/
|
||||
|
||||
FUNCTION hbide_arrayToMemoEx( a_ )
|
||||
LOCAL s := ""
|
||||
|
||||
aeval( a_, {|e| s += e + CRLF } )
|
||||
|
||||
s := substr( s, 1, len( s ) - 2 )
|
||||
|
||||
RETURN s
|
||||
|
||||
/*----------------------------------------------------------------------*/
|
||||
|
||||
FUNCTION hbide_memoToArray( s )
|
||||
LOCAL aLine := hb_ATokens( StrTran( RTrim( s ), CRLF, _EOL ), _EOL )
|
||||
LOCAL nNewSize := 0
|
||||
|
||||
@@ -622,9 +622,9 @@ METHOD IdeProjManager:fetchProperties()
|
||||
::oUI:q_editSources :setPlainText( hbide_arrayToMemo( ::aPrjProps[ PRJ_PRP_SOURCES , 1 ] ) )
|
||||
::oUI:q_editMetaData :setPlainText( hbide_arrayToMemo( ::aPrjProps[ PRJ_PRP_METADATA, 1 ] ) )
|
||||
|
||||
::oUI:q_editLaunchParams:setText( ::oProject:launchParams )
|
||||
::oUI:q_editLaunchExe:setText( ::oProject:launchProgram )
|
||||
#if 0
|
||||
::oUI:q_editLaunchParams:setText()
|
||||
::oUI:q_editLaunchExe:setText()
|
||||
::oUI:q_editHbp:setPlainText()
|
||||
#endif
|
||||
ENDIF
|
||||
@@ -1223,7 +1223,7 @@ METHOD IdeProjManager:setCurrentProject( cProjectName )
|
||||
IF !empty( oItem := hbide_findProjTreeItem( ::oIDE, ::cWrkProject, "Project Name" ) )
|
||||
oItem:oWidget:setForeground( 0, ::qBrushWrkProject )
|
||||
//oItem:oWidget:setBackground( 0, ::qBrushWrkProject )
|
||||
hbide_expandChildren( ::oIDE, oItem )
|
||||
//hbide_expandChildren( ::oIDE, oItem )
|
||||
::oProjTree:oWidget:setCurrentItem( oItem:oWidget )
|
||||
ENDIF
|
||||
ENDIF
|
||||
@@ -1402,7 +1402,11 @@ METHOD IdeProjManager:closeProject( cProjectTitle )
|
||||
METHOD IdeProjManager:promptForPath( cObjPathName, cTitle, cObjFileName, cObjPath2, cObjPath3 )
|
||||
LOCAL cTemp, cPath, cFile
|
||||
|
||||
cTemp := ::oProject:expandMeta( ::oUI:qObj[ cObjPathName ]:Text() )
|
||||
IF hb_isObject( ::oProject )
|
||||
cTemp := ::oProject:expandMeta( ::oUI:qObj[ cObjPathName ]:Text() )
|
||||
ELSE
|
||||
cTemp := ""
|
||||
ENDIF
|
||||
|
||||
IF !hb_isChar( cObjFileName )
|
||||
cPath := hbide_fetchADir( ::oDlg, cTitle, cTemp )
|
||||
@@ -1421,9 +1425,9 @@ METHOD IdeProjManager:promptForPath( cObjPathName, cTitle, cObjFileName, cObjPat
|
||||
IF Right( cPath, 1 ) $ '/\'
|
||||
cPath := Left( cPath, Len( cPath ) - 1 )
|
||||
ENDIF
|
||||
|
||||
cPath := ::oProject:applyMeta( cPath )
|
||||
|
||||
IF hb_isObject( ::oProject )
|
||||
cPath := ::oProject:applyMeta( cPath )
|
||||
ENDIF
|
||||
::oUI:qObj[ cObjPathName ]:setText( cPath )
|
||||
|
||||
IF hb_isChar( cObjPath2 ) .AND. Empty( ::oUI:qObj[ cObjPath2 ]:Text() )
|
||||
@@ -1623,7 +1627,7 @@ METHOD IdeProjManager:finished( nExitCode, nExitStatus, oProcess )
|
||||
* 03/01/2010 - 09:24:50
|
||||
*/
|
||||
METHOD IdeProjManager:launchProject( cProject )
|
||||
LOCAL cTargetFN, cTmp, oProject, qProcess
|
||||
LOCAL cTargetFN, cTmp, oProject, qProcess, qStr
|
||||
|
||||
IF empty( cProject )
|
||||
cProject := ::oPM:getCurrentProject()
|
||||
@@ -1650,10 +1654,17 @@ METHOD IdeProjManager:launchProject( cProject )
|
||||
#if 1
|
||||
qProcess := QProcess():new()
|
||||
qProcess:setWorkingDirectory( hbide_pathToOSPath( oProject:wrkDirectory ) )
|
||||
qProcess:startDetached_2( cTargetFN )
|
||||
IF !empty( oProject:launchParams )
|
||||
qStr := QStringList():new()
|
||||
qStr:append( oProject:launchParams )
|
||||
qProcess:startDetached_1( cTargetFN, qStr )
|
||||
ELSE
|
||||
qProcess:startDetached_2( cTargetFN )
|
||||
ENDIF
|
||||
qProcess:waitForStarted()
|
||||
qProcess:pPtr := NIL
|
||||
qProcess := NIL
|
||||
|
||||
#else
|
||||
::oProcess := HbpProcess():new()
|
||||
::oProcess:output := {|s| hbide_dbg( s ) }
|
||||
|
||||
@@ -102,6 +102,9 @@ HBQPlainTextEdit::HBQPlainTextEdit( QWidget * parent ) : QPlainTextEdit( parent
|
||||
|
||||
HBQPlainTextEdit::~HBQPlainTextEdit()
|
||||
{
|
||||
if( block )
|
||||
hb_itemRelease( block );
|
||||
|
||||
disconnect( this, SIGNAL( blockCountChanged( int ) ) );
|
||||
disconnect( this, SIGNAL( updateRequest( const QRect &, int ) ) );
|
||||
disconnect( this, SIGNAL( cursorPositionChanged() ) );
|
||||
@@ -109,6 +112,52 @@ HBQPlainTextEdit::~HBQPlainTextEdit()
|
||||
delete lineNumberArea;
|
||||
}
|
||||
|
||||
void HBQPlainTextEdit::hbSetEventBlock( PHB_ITEM pBlock )
|
||||
{
|
||||
if( pBlock )
|
||||
{
|
||||
block = hb_itemNew( pBlock );
|
||||
}
|
||||
}
|
||||
|
||||
bool HBQPlainTextEdit::event( QEvent *event )
|
||||
{
|
||||
if( event->type() == QEvent::KeyPress )
|
||||
{
|
||||
QKeyEvent *keyEvent =( QKeyEvent * )event;
|
||||
if( ( keyEvent->key() == Qt::Key_Tab ) && ( keyEvent->modifiers() & Qt::ControlModifier ) )
|
||||
{
|
||||
return false;
|
||||
}
|
||||
else
|
||||
{
|
||||
if( ( keyEvent->key() == Qt::Key_Tab ) && !( keyEvent->modifiers() & Qt::ControlModifier & Qt::AltModifier & Qt::ShiftModifier ) )
|
||||
{
|
||||
this->insertTab( 0 );
|
||||
return true;
|
||||
}
|
||||
else if( ( keyEvent->key() == Qt::Key_Backtab ) && ( keyEvent->modifiers() & Qt::ShiftModifier ) )
|
||||
{
|
||||
this->insertTab( 1 );
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
return QPlainTextEdit::event( event );
|
||||
}
|
||||
|
||||
void HBQPlainTextEdit::mouseDoubleClickEvent( QMouseEvent *event )
|
||||
{
|
||||
HB_TRACE( HB_TR_ALWAYS, ( "void HBQPlainTextEdit::mouseDblClickEvent( QMouseEvent * %p )", event ) );
|
||||
if( block )
|
||||
{
|
||||
PHB_ITEM p1 = hb_itemPutNI( NULL, QEvent::MouseButtonDblClick );
|
||||
hb_vmEvalBlockV( block, 1, p1 );
|
||||
hb_itemRelease( p1 );
|
||||
}
|
||||
QPlainTextEdit::mouseDoubleClickEvent( event );
|
||||
}
|
||||
|
||||
void HBQPlainTextEdit::paintEvent( QPaintEvent * event )
|
||||
{
|
||||
QPainter painter( viewport() );
|
||||
@@ -184,6 +233,7 @@ void HBQPlainTextEdit::lineNumberAreaPaintEvent( QPaintEvent *event )
|
||||
++blockNumber;
|
||||
}
|
||||
}
|
||||
|
||||
#if 0
|
||||
void HBQPlainTextEdit::contextMenuEvent( QContextMenuEvent *event )
|
||||
{
|
||||
@@ -343,32 +393,6 @@ void HBQPlainTextEdit::setSpaces( int newSpaces )
|
||||
}
|
||||
}
|
||||
|
||||
bool HBQPlainTextEdit::event( QEvent *event )
|
||||
{
|
||||
if( event->type() == QEvent::KeyPress )
|
||||
{
|
||||
QKeyEvent *keyEvent =( QKeyEvent * )event;
|
||||
if( ( keyEvent->key() == Qt::Key_Tab ) && ( keyEvent->modifiers() & Qt::ControlModifier ) )
|
||||
{
|
||||
return false;
|
||||
}
|
||||
else
|
||||
{
|
||||
if( ( keyEvent->key() == Qt::Key_Tab ) && !( keyEvent->modifiers() & Qt::ControlModifier & Qt::AltModifier & Qt::ShiftModifier ) )
|
||||
{
|
||||
this->insertTab( 0 );
|
||||
return true;
|
||||
}
|
||||
else if( ( keyEvent->key() == Qt::Key_Backtab ) && ( keyEvent->modifiers() & Qt::ShiftModifier ) )
|
||||
{
|
||||
this->insertTab( 1 );
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
return QPlainTextEdit::event( event );
|
||||
}
|
||||
|
||||
int HBQPlainTextEdit::getIndex( const QTextCursor &crQTextCursor )
|
||||
{
|
||||
QTextBlock b;
|
||||
|
||||
@@ -76,6 +76,7 @@ public:
|
||||
HBQPlainTextEdit( QWidget * parent = 0 );
|
||||
~HBQPlainTextEdit();
|
||||
|
||||
PHB_ITEM block;
|
||||
QColor m_currentLineColor;
|
||||
long m_matchingBegin;
|
||||
long m_matchingEnd;
|
||||
@@ -103,6 +104,7 @@ public:
|
||||
bool numberBlockVisible() { return numberBlock; }
|
||||
void highlightCurrentLine( bool b ) { highlightCurLine = b; }
|
||||
bool highlightCurrentLine() { return highlightCurLine; }
|
||||
void hbSetEventBlock( PHB_ITEM pBlock );
|
||||
|
||||
private:
|
||||
QVector<int> bookMark;
|
||||
@@ -125,6 +127,7 @@ private:
|
||||
protected:
|
||||
bool event( QEvent * event );
|
||||
void resizeEvent( QResizeEvent * event );
|
||||
void mouseDoubleClickEvent( QMouseEvent * event );
|
||||
#if 0
|
||||
void contextMenuEvent( QContextMenuEvent * event );
|
||||
void keyPressEvent( QKeyEvent * event );
|
||||
|
||||
@@ -61,6 +61,7 @@ CLASS HbQtObjectHandler
|
||||
VAR pPtr
|
||||
|
||||
METHOD configure( xObject )
|
||||
METHOD from( xObject ) INLINE ::configure( xObject )
|
||||
|
||||
ERROR HANDLER onError()
|
||||
|
||||
|
||||
@@ -259,6 +259,14 @@ HB_FUNC( QT_HBQPLAINTEXTEDIT_HIGHLIGHTCURRENTLINE_1 )
|
||||
hb_retl( hbqt_par_HBQPlainTextEdit( 1 )->highlightCurrentLine() );
|
||||
}
|
||||
|
||||
/*
|
||||
* void hbSetEventBlock( PHB_ITEM block )
|
||||
*/
|
||||
HB_FUNC( QT_HBQPLAINTEXTEDIT_HBSETEVENTBLOCK )
|
||||
{
|
||||
hbqt_par_HBQPlainTextEdit( 1 )->hbSetEventBlock( hb_param( 2, HB_IT_ANY ) );
|
||||
}
|
||||
|
||||
/*
|
||||
* void updateLineNumberAreaWidth( int newBlockCount )
|
||||
*/
|
||||
|
||||
@@ -80,6 +80,7 @@ CREATE CLASS HBQPlainTextEdit INHERIT HbQtObjectHandler, QPlainTextEdit
|
||||
METHOD numberBlockVisible_1()
|
||||
METHOD highlightCurrentLine( lB )
|
||||
METHOD highlightCurrentLine_1()
|
||||
METHOD hbSetEventBlock( xBlock )
|
||||
METHOD updateLineNumberAreaWidth( nNewBlockCount )
|
||||
METHOD caseUpper()
|
||||
METHOD caseLower()
|
||||
@@ -163,6 +164,10 @@ METHOD HBQPlainTextEdit:highlightCurrentLine_1()
|
||||
RETURN Qt_HBQPlainTextEdit_highlightCurrentLine_1( ::pPtr )
|
||||
|
||||
|
||||
METHOD HBQPlainTextEdit:hbSetEventBlock( xBlock )
|
||||
RETURN Qt_HBQPlainTextEdit_hbSetEventBlock( ::pPtr, xBlock )
|
||||
|
||||
|
||||
METHOD HBQPlainTextEdit:updateLineNumberAreaWidth( nNewBlockCount )
|
||||
RETURN Qt_HBQPlainTextEdit_updateLineNumberAreaWidth( ::pPtr, nNewBlockCount )
|
||||
|
||||
|
||||
@@ -108,6 +108,7 @@ HB_FUNC( QT_HBQPLAINTEXTEDIT )
|
||||
bool numberBlockVisible()
|
||||
void highlightCurrentLine(bool b)
|
||||
bool highlightCurrentLine()
|
||||
void hbSetEventBlock( PHB_ITEM block )
|
||||
</PROTOS>
|
||||
|
||||
<SLOTS>
|
||||
|
||||
Reference in New Issue
Block a user