From a85a40c0a3044aa5fa8569c95bb8dc2306682e48 Mon Sep 17 00:00:00 2001 From: Pritpal Bedi Date: Wed, 10 Feb 2010 09:07:40 +0000 Subject: [PATCH] 2010-02-10 01:00 UTC-0800 Pritpal Bedi (pritpal@vouchcac.com) * contrib/hbide/docs/idemainpage.html * contrib/hbide/docs/multiviews.html * contrib/hbide/hbide.ch * contrib/hbide/hbide.prg * contrib/hbide/idedocks.prg * contrib/hbide/ideeditor.prg * contrib/hbide/idefindreplace.prg * contrib/hbide/idemisc.prg * contrib/hbide/ideprojmanager.prg * contrib/hbide/idesources.prg + Extended Find-in-files search to sub-folders. + Implemented navigation in "hbIDE Help" under context menu. % Normalized status-bar panels, added distinct colors where required. --- harbour/ChangeLog | 16 +++ harbour/contrib/hbide/docs/idemainpage.html | 10 +- harbour/contrib/hbide/docs/multiviews.html | 2 +- harbour/contrib/hbide/hbide.ch | 15 +- harbour/contrib/hbide/hbide.prg | 4 +- harbour/contrib/hbide/idedocks.prg | 147 ++++++++++++-------- harbour/contrib/hbide/ideeditor.prg | 8 +- harbour/contrib/hbide/idefindreplace.prg | 51 +++++-- harbour/contrib/hbide/idemisc.prg | 10 +- harbour/contrib/hbide/ideprojmanager.prg | 2 +- harbour/contrib/hbide/idesources.prg | 7 +- 11 files changed, 174 insertions(+), 98 deletions(-) diff --git a/harbour/ChangeLog b/harbour/ChangeLog index cacd9b471d..142b7cb515 100644 --- a/harbour/ChangeLog +++ b/harbour/ChangeLog @@ -17,6 +17,22 @@ past entries belonging to author(s): Viktor Szakats. */ +2010-02-10 01:00 UTC-0800 Pritpal Bedi (pritpal@vouchcac.com) + * contrib/hbide/docs/idemainpage.html + * contrib/hbide/docs/multiviews.html + + * contrib/hbide/hbide.ch + * contrib/hbide/hbide.prg + * contrib/hbide/idedocks.prg + * contrib/hbide/ideeditor.prg + * contrib/hbide/idefindreplace.prg + * contrib/hbide/idemisc.prg + * contrib/hbide/ideprojmanager.prg + * contrib/hbide/idesources.prg + + Extended Find-in-files search to sub-folders. + + Implemented navigation in "hbIDE Help" under context menu. + % Normalized status-bar panels, added distinct colors where required. + 2010-02-09 18:25 UTC-0800 Pritpal Bedi (pritpal@vouchcac.com) + contrib/hbide/docs + contrib/hbide/docs/idemainpage.html diff --git a/harbour/contrib/hbide/docs/idemainpage.html b/harbour/contrib/hbide/docs/idemainpage.html index 5fbb1f8d67..8af3367ee1 100644 --- a/harbour/contrib/hbide/docs/idemainpage.html +++ b/harbour/contrib/hbide/docs/idemainpage.html @@ -2,15 +2,15 @@ -

hbIDE Help

+

hbIDE Help

This effort may not bring desired results but hopefully solve some of the issues supporting the project.

-

Interface Elements

-

Multi Views

-

+

Interface Elements

+

Multi Views

+

Please bear with me if things appear to be simple.

Pritpal Bedi

-

_a_student_of_software_analysis_&_design

+

\ No newline at end of file diff --git a/harbour/contrib/hbide/docs/multiviews.html b/harbour/contrib/hbide/docs/multiviews.html index 13438fd4c8..4854691dd3 100644 --- a/harbour/contrib/hbide/docs/multiviews.html +++ b/harbour/contrib/hbide/docs/multiviews.html @@ -2,7 +2,7 @@ -

Multi Views

+

Multi Views

hbIDE interface provides multiple views to organize your sources in a convenient way. The creation of a panel is a few clicks away. Switching is even simple.

diff --git a/harbour/contrib/hbide/hbide.ch b/harbour/contrib/hbide/hbide.ch index d5952a0b28..888db281b1 100644 --- a/harbour/contrib/hbide/hbide.ch +++ b/harbour/contrib/hbide/hbide.ch @@ -138,14 +138,13 @@ #define SB_PNL_INS 5 #define SB_PNL_SELECTEDCHARS 6 #define SB_PNL_MODIFIED 7 -#define SB_PNL_M_2 8 -#define SB_PNL_ENVIRON 8 -#define SB_PNL_STREAM 9 -#define SB_PNL_EDIT 10 -#define SB_PNL_SEARCH 11 -#define SB_PNL_CODEC 12 -#define SB_PNL_PROJECT 13 -#define SB_PNL_VIEW 14 +#define SB_PNL_STREAM 8 +#define SB_PNL_EDIT 9 +#define SB_PNL_SEARCH 10 +#define SB_PNL_CODEC 11 +#define SB_PNL_ENVIRON 12 +#define SB_PNL_VIEW 13 +#define SB_PNL_PROJECT 14 #define TAB_OTAB 1 #define TAB_OEDITOR 2 diff --git a/harbour/contrib/hbide/hbide.prg b/harbour/contrib/hbide/hbide.prg index a5ef8c08f8..0a615a5b7d 100644 --- a/harbour/contrib/hbide/hbide.prg +++ b/harbour/contrib/hbide/hbide.prg @@ -362,6 +362,7 @@ METHOD HbIde:create( cProjIni ) hbide_restSettings( Self ) /* Again to be displayed in Statusbar */ HbXbp_SetCodec( ::cWrkCodec ) + ::oDK:setStatusText( SB_PNL_CODEC, ::cWrkCodec ) /* Display cWrkEnvironment in StatusBar */ ::oDK:dispEnvironment( ::cWrkEnvironment ) @@ -1177,7 +1178,8 @@ METHOD HbIde:setCodec( cCodec ) HbXbp_SetCodec( ::cWrkCodec ) - ::oSBar:getItem( SB_PNL_CODEC ):caption := ::cWrkCodec + //::oSBar:getItem( SB_PNL_CODEC ):caption := ::cWrkCodec + ::oDK:setStatusText( SB_PNL_CODEC, ::cWrkCodec ) RETURN Self diff --git a/harbour/contrib/hbide/idedocks.prg b/harbour/contrib/hbide/idedocks.prg index c483c72e19..b1cb03c3bd 100644 --- a/harbour/contrib/hbide/idedocks.prg +++ b/harbour/contrib/hbide/idedocks.prg @@ -171,10 +171,10 @@ METHOD IdeDocks:setView( cView ) /*----------------------------------------------------------------------*/ METHOD IdeDocks:execEvent( nMode, p ) - LOCAL nIndex + LOCAL nIndex, aMenu DO CASE - CASE nMode == 1 + CASE nMode == 1 /* StackedWidget:currentChanged(int) */ IF p >= 0 .AND. p <= len( ::aViews ) ::oIde:nCurView := p @@ -188,6 +188,20 @@ METHOD IdeDocks:execEvent( nMode, p ) ENDIF ::setStatusText( SB_PNL_VIEW, iif( p == 0, "Main", ::aINI[ INI_VIEWS, ::nCurView ] ) ) ENDIF + + CASE nMode == 2 /* HelpWidget:contextMenuRequested(qPoint) */ + aMenu := {} + + aadd( aMenu, { "Back" , {|| ::qHelpBrw:backward() } } ) + aadd( aMenu, { "Forward" , {|| ::qHelpBrw:forward() } } ) + aadd( aMenu, { "Home" , {|| ::qHelpBrw:home() } } ) + aadd( aMenu, { "" } ) + aadd( aMenu, { "Reload" , {|| ::qHelpBrw:reload() } } ) + aadd( aMenu, { "" } ) + aadd( aMenu, { "Select All", {|| ::qHelpBrw:selectAll() } } ) + aadd( aMenu, { "Copy" , {|| ::qHelpBrw:copy() } } ) + + hbide_execPopup( aMenu, p, ::qHelpBrw ) ENDCASE RETURN Self @@ -435,11 +449,12 @@ METHOD IdeDocks:buildFuncList() /*----------------------------------------------------------------------*/ METHOD IdeDocks:buildHelpWidget() - STATIC qUrl + LOCAL qUrl, qStr - IF empty( qUrl ) - qUrl := QUrl():new( "docs/idemainpage.html" ) - ENDIF + qUrl := QUrl():new( "idemainpage.html" ) + qStr := QStringList():new() + //qStr:append( "./" ) + qStr:append( hb_dirBase() + "docs" ) ::oIde:oHelp := XbpWindow():new() ::oHelp:oWidget := QDockWidget():new( ::oDlg:oWidget ) @@ -451,12 +466,17 @@ METHOD IdeDocks:buildHelpWidget() ::oHelp:oWidget:setFocusPolicy( Qt_NoFocus ) ::oIde:qHelpBrw := QTextBrowser():new( ::oHelp:oWidget ) - ::oIde:qHelpBrw:show() - ::oIde:qHelpBrw:setOpenExternalLinks( .t. ) + ::qHelpBrw:show() + ::qHelpBrw:setContextMenuPolicy( Qt_CustomContextMenu ) + ::qHelpBrw:setOpenExternalLinks( .t. ) + + ::qHelpBrw:setSearchPaths( qStr ) ::qHelpBrw:setSource( qUrl ) ::oHelp:oWidget:setWidget( ::oIde:qHelpBrw ) + ::oHelp:connect( ::qHelpBrw, "customContextMenuRequested(QPoint)", {|p| ::execEvent( 2, p ) } ) + // ::oHelp:connect( ::qHelpBrw ) ::oDlg:oWidget:addDockWidget_1( Qt_RightDockWidgetArea, ::oHelp:oWidget, Qt_Horizontal ) @@ -570,16 +590,16 @@ METHOD IdeDocks:buildStatusBar() ::oSBar:addItem( "", , , , "Ready" ):oWidget:setMinimumWidth( 80 ) ::oSBar:addItem( "", , , , "Line" ):oWidget:setMinimumWidth( 110 ) ::oSBar:addItem( "", , , , "Column" ):oWidget:setMinimumWidth( 40 ) - ::oSBar:addItem( "", , , , "Ins" ):oWidget:setMinimumWidth( 30 ) - ::oSBar:addItem( "", , , , "M_1" ):oWidget:setMinimumWidth( 30 ) - ::oSBar:addItem( "", , , , "Modified" ):oWidget:setMinimumWidth( 50 ) - ::oSBar:addItem( "", , , , "Environ" ):oWidget:setMinimumWidth( 30 ) + ::oSBar:addItem( "", , , , "Ins" ):oWidget:setMinimumWidth( 20 ) + ::oSBar:addItem( "", , , , "SelChar" ):oWidget:setMinimumWidth( 20 ) + ::oSBar:addItem( "", , , , "Modified" ):oWidget:setMinimumWidth( 20 ) ::oSBar:addItem( "", , , , "Stream" ):oWidget:setMinimumWidth( 20 ) ::oSBar:addItem( "", , , , "Edit" ):oWidget:setMinimumWidth( 20 ) ::oSBar:addItem( "", , , , "Search" ):oWidget:setMinimumWidth( 20 ) ::oSBar:addItem( "", , , , "Codec" ):oWidget:setMinimumWidth( 20 ) - ::oSBar:addItem( "", , , , "Project" ):oWidget:setMinimumWidth( 20 ) + ::oSBar:addItem( "", , , , "Environ" ):oWidget:setMinimumWidth( 20 ) ::oSBar:addItem( "", , , , "View" ):oWidget:setMinimumWidth( 20 ) + ::oSBar:addItem( "", , , , "Project" ):oWidget:setMinimumWidth( 20 ) FOR i := 1 TO 6 ::oSBar:oWidget:addWidget( ::getMarkWidget( i ) ) @@ -588,6 +608,59 @@ METHOD IdeDocks:buildStatusBar() /*----------------------------------------------------------------------*/ +METHOD IdeDocks:setStatusText( nPart, xValue ) + LOCAL oPanel := ::oSBar:getItem( nPart ) + + SWITCH nPart + + CASE SB_PNL_MAIN + oPanel:caption := '' + xValue + "" + EXIT + CASE SB_PNL_READY + EXIT + CASE SB_PNL_LINE + EXIT + CASE SB_PNL_COLUMN + EXIT + CASE SB_PNL_INS + EXIT + CASE SB_PNL_SELECTEDCHARS + oPanel:caption := iif( xValue == 0, "", "Sel: " + hb_ntos( xValue ) ) + EXIT + CASE SB_PNL_MODIFIED + oPanel:caption := xValue + EXIT + CASE SB_PNL_STREAM + EXIT + CASE SB_PNL_EDIT + EXIT + CASE SB_PNL_SEARCH + oPanel:caption := "Find: " + xValue + EXIT + CASE SB_PNL_CODEC + oPanel:caption := "Codec: " + xValue + "" + EXIT + CASE SB_PNL_ENVIRON + oPanel:caption := "Env: " + xValue + "" + EXIT + CASE SB_PNL_VIEW + oPanel:caption := "View: " + xValue + "" + EXIT + CASE SB_PNL_PROJECT + oPanel:caption := "Proj: " + xValue + "" + EXIT + ENDSWITCH + + RETURN Self + +/*----------------------------------------------------------------------*/ + +METHOD IdeDocks:dispEnvironment( cEnviron ) + ::setStatusText( SB_PNL_ENVIRON, cEnviron ) + RETURN Self + +/*----------------------------------------------------------------------*/ + METHOD IdeDocks:getMarkWidget( nIndex ) LOCAL aColors := { "rgb( 255,255,127 )", "rgb( 175,175,255 )", "rgb( 255,175,175 )", ; "rgb( 175,255,175 )", "rgb( 255,190,125 )", "rgb( 175,255,255 )" } @@ -650,54 +723,6 @@ METHOD IdeDocks:toggleBottomDocks() /*----------------------------------------------------------------------*/ -METHOD IdeDocks:dispEnvironment( cEnviron ) - ::setStatusText( SB_PNL_ENVIRON, cEnviron ) - RETURN Self - -/*----------------------------------------------------------------------*/ - -METHOD IdeDocks:setStatusText( nPart, xValue ) - LOCAL oPanel := ::oSBar:getItem( nPart ) - - SWITCH nPart - CASE SB_PNL_MAIN - EXIT - CASE SB_PNL_READY - EXIT - CASE SB_PNL_LINE - EXIT - CASE SB_PNL_COLUMN - EXIT - CASE SB_PNL_INS - EXIT - CASE SB_PNL_SELECTEDCHARS - oPanel:caption := iif( xValue == 0, "", "Sel: " + hb_ntos( xValue ) ) - EXIT - CASE SB_PNL_MODIFIED - oPanel:caption := iif( xValue, "Modified", "" ) - EXIT - CASE SB_PNL_VIEW - oPanel:caption := "View: " + xValue + "" - EXIT - CASE SB_PNL_ENVIRON - oPanel:caption := "Env: " + xValue - EXIT - CASE SB_PNL_STREAM - EXIT - CASE SB_PNL_EDIT - EXIT - CASE SB_PNL_SEARCH - EXIT - CASE SB_PNL_CODEC - EXIT - CASE SB_PNL_PROJECT - EXIT - ENDSWITCH - - RETURN Self - -/*----------------------------------------------------------------------*/ - METHOD IdeDocks:buildFindInFiles() LOCAL oXbp diff --git a/harbour/contrib/hbide/ideeditor.prg b/harbour/contrib/hbide/ideeditor.prg index 52245b9105..80bb8a4817 100644 --- a/harbour/contrib/hbide/ideeditor.prg +++ b/harbour/contrib/hbide/ideeditor.prg @@ -1163,17 +1163,17 @@ hbide_dbg( "IdeEditor:destroy()", 0 ) ::oEdit:destroy() IF !Empty( ::qDocument ) - ::qDocument := NIL + ::qDocument := NIL ENDIF IF !Empty( ::qHiliter ) - ::qHiliter := NIL + ::qHiliter := NIL ENDIF ::oEdit := NIL IF !Empty( ::qLayout ) - ::qLayout := NIL + ::qLayout := NIL ENDIF IF ( n := ascan( ::aTabs, {|e_| e_[ TAB_OEDITOR ] == Self } ) ) > 0 @@ -1313,7 +1313,7 @@ METHOD IdeEditor:setTabImage( qEdit ) ENDIF ::qTabWidget:setTabIcon( nIndex, ::resPath + cIcon ) - ::oSBar:getItem( SB_PNL_MODIFIED ):caption := iif( lModified, "Modified", iif( lReadOnly, "ReadOnly", " " ) ) + ::oDK:setStatusText( SB_PNL_MODIFIED, iif( lModified, "Modified", iif( lReadOnly, "ReadOnly", " " ) ) ) RETURN Self diff --git a/harbour/contrib/hbide/idefindreplace.prg b/harbour/contrib/hbide/idefindreplace.prg index c7355cc59e..8235e2fd5c 100644 --- a/harbour/contrib/hbide/idefindreplace.prg +++ b/harbour/contrib/hbide/idefindreplace.prg @@ -211,7 +211,7 @@ METHOD IdeFindReplace:replace() nFound++ ::replaceSelection( cReplWith ) ENDDO - ::oSBar:getItem( SB_PNL_MAIN ):caption := 'Replaced [' + hb_ntos( nFound ) + "] : "+ cReplWith + "" + ::oDK:setStatusText( SB_PNL_MAIN, "Replaced [" + hb_ntos( nFound ) + "] : " + cReplWith ) ::oUI:q_buttonReplace:setEnabled( .f. ) ::oUI:q_checkGlobal:setChecked( .f. ) ::oUI:q_checkNoPrompting:setChecked( .f. ) @@ -295,7 +295,7 @@ METHOD IdeFindReplace:updateFindReplaceData( cMode ) ENDIF ENDIF // - ::oSBar:getItem( SB_PNL_SEARCH ):caption := "FIND: " + cData + ::oDK:setStatusText( SB_PNL_SEARCH, cData ) ELSE cData := QLineEdit():configure( ::oUI:q_comboReplaceWith:lineEdit() ):text() IF !empty( cData ) @@ -692,6 +692,7 @@ METHOD IdeFindInFiles:find() LOCAL aFolderSrc := {} LOCAL aProjSrc := {} LOCAL aProjs := {} + LOCAL aPaths := {} IF empty( ::cOrigExpr := ::oUI:q_comboExpr:currentText() ) RETURN Self @@ -737,14 +738,15 @@ METHOD IdeFindInFiles:find() /* Process Folder */ IF ::oUI:q_checkFolders:isChecked() .AND. ! empty( cFolder ) - IF right( cFolder, 1 ) != hb_osPathSeparator() - cFolder += hb_osPathSeparator() - ENDIF - FOR EACH cExt IN aFilter - cMask := hbide_pathToOsPath( cFolder + cExt ) - aDir := directory( cMask, "D" ) - FOR EACH a_ IN aDir - aadd( aFolderSrc, cFolder + a_[ 1 ] ) + hbide_fetchSubPaths( @aPaths, cFolder, ::oUI:q_checkSubFolders:isChecked() ) + + FOR EACH cFolder IN aPaths + FOR EACH cExt IN aFilter + cMask := hbide_pathToOsPath( cFolder + cExt ) + aDir := directory( cMask ) + FOR EACH a_ IN aDir + aadd( aFolderSrc, cFolder + a_[ 1 ] ) + NEXT NEXT NEXT ENDIF @@ -851,6 +853,31 @@ METHOD IdeFindInFiles:find() /*----------------------------------------------------------------------*/ +STATIC FUNCTION hbide_fetchSubPaths( aPaths, cRootPath, lSubs ) + LOCAL aDir, a_ + + DEFAULT lSubs TO .t. + + IF right( cRootPath, 1 ) != hb_osPathSeparator() + cRootPath += hb_osPathSeparator() + ENDIF + cRootPath := hbide_pathToOSPath( cRootPath ) + + aadd( aPaths, cRootPath ) + + IF lSubs + aDir := directory( cRootPath + "*.", "D" ) + FOR EACH a_ IN aDir + IF a_[ 5 ] == "D" .AND. left( a_[ 1 ], 1 ) != "." + hbide_fetchSubPaths( @aPaths, cRootPath + a_[ 1 ] ) + ENDIF + NEXT + ENDIF + + RETURN NIL + +/*----------------------------------------------------------------------*/ + METHOD IdeFindInFiles:findInABunch( aFiles ) LOCAL s, cExpr, nLine, aLines, aBuffer, cLine, nNoMatch, aMatch, regEx @@ -888,6 +915,7 @@ METHOD IdeFindInFiles:findInABunch( aFiles ) NEXT ELSE cExpr := lower( ::cOrigExpr ) +hbide_dbg( cExpr, "llllllllllllllllllll" ) FOR EACH cLine IN aBuffer nLine++ IF cExpr $ lower( cLine ) @@ -981,7 +1009,8 @@ METHOD IdeFindInFiles:showLog( nType, cMsg, aLines ) FOR EACH a_ IN aLines nL := a_[ 1 ] cL := a_[ 2 ] - nB := at( cExp, cL ) + //nB := at( cExp, cL ) + nB := at( cExp, iif( ::lMatchCase, cL, lower( cL ) ) ) cPre := substr( cL, 1, nB - 1 ) cPost := substr( cL, nB + len( cExp ) ) cT := substr( cL, nB, len( cExp ) ) diff --git a/harbour/contrib/hbide/idemisc.prg b/harbour/contrib/hbide/idemisc.prg index a1479c2681..864584caab 100644 --- a/harbour/contrib/hbide/idemisc.prg +++ b/harbour/contrib/hbide/idemisc.prg @@ -97,7 +97,7 @@ PROCEDURE hbide_justACall() /*----------------------------------------------------------------------*/ -FUNCTION hbide_execPopup( aPops, aPos, qParent ) +FUNCTION hbide_execPopup( aPops, aqPos, qParent ) LOCAL i, qPop, qPoint, qAct, cAct, xRet, pAct, a_, qSub, b_ qPop := QMenu():new( iif( hb_isObject( qParent ), qParent, NIL ) ) @@ -121,7 +121,11 @@ FUNCTION hbide_execPopup( aPops, aPos, qParent ) ENDIF NEXT - qPoint := QPoint():new( aPos[ 1 ], aPos[ 2 ] ) + IF hb_isArray( aqPos ) + qPoint := QPoint():new( aqPos[ 1 ], aqPos[ 2 ] ) + ELSE + qPoint := QPoint():configure( qParent:mapToGlobal( aqPos ) ) + ENDIF pAct := qPop:exec_1( qPoint ) IF !hbqt_isEmptyQtPointer( pAct ) qAct := QAction():configure( pAct ) @@ -148,7 +152,7 @@ FUNCTION hbide_execPopup( aPops, aPos, qParent ) NEXT ENDIF - qPop:pPtr := NIL + qPop := NIL RETURN xRet diff --git a/harbour/contrib/hbide/ideprojmanager.prg b/harbour/contrib/hbide/ideprojmanager.prg index 403c8378cd..f823b778f2 100644 --- a/harbour/contrib/hbide/ideprojmanager.prg +++ b/harbour/contrib/hbide/ideprojmanager.prg @@ -1203,7 +1203,7 @@ METHOD IdeProjManager:setCurrentProject( cProjectName ) IF lValid IF !Empty( ::oSBar ) - ::oSBar:getItem( SB_PNL_PROJECT ):caption := ::cWrkProject + ::oDK:setStatusText( SB_PNL_PROJECT, ::cWrkProject ) ENDIF ::oIDE:updateTitleBar() diff --git a/harbour/contrib/hbide/idesources.prg b/harbour/contrib/hbide/idesources.prg index 829b235648..3e09e583d1 100644 --- a/harbour/contrib/hbide/idesources.prg +++ b/harbour/contrib/hbide/idesources.prg @@ -195,7 +195,7 @@ METHOD IdeSourcesManager:saveSource( nTab, lCancel, lAs ) ::createTags() ::updateFuncList() ::qTabWidget:setTabIcon( nIndex, ::resPath + "tabunmodified.png" ) - ::oSBar:getItem( SB_PNL_MODIFIED ):caption := " " + ::oDK:setStatusText( SB_PNL_MODIFIED, " " ) ENDIF RETURN .T. @@ -248,7 +248,7 @@ METHOD IdeSourcesManager:closeSource( nTab, lCanCancel, lCanceled ) LOCAL lSave, n, oEditor DEFAULT nTab TO ::oEM:getTabCurrent() - +hbide_dbg( "<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<", 0 ) IF !empty( oEditor := ::oEM:getEditorByTabPosition( nTab ) ) DEFAULT lCanCancel TO .F. @@ -275,8 +275,9 @@ METHOD IdeSourcesManager:closeSource( nTab, lCanCancel, lCanceled ) RETURN .F. ENDIF ENDIF - +hbide_dbg( "<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<", 1 ) oEditor:destroy() +hbide_dbg( "<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<", 21 ) ::oIde:updateTitleBar() ENDIF