From a776467075f2ba38eb81c53101314777d8b4bb2f Mon Sep 17 00:00:00 2001 From: Pritpal Bedi Date: Mon, 3 May 2010 07:49:22 +0000 Subject: [PATCH] 2010-05-03 00:38 UTC-0800 Pritpal Bedi (pritpal@vouchcac.com) * contrib/hbxbp/xbptoolbar.prg ! Issued: setWindowaTitle() for main menubar. + contrib/hbide/resources/keyboardmappings.png + Icon for "keyboard Mappings" menu option. * contrib/hbide/hbide.prg * contrib/hbide/ideactions.prg * contrib/hbide/idedocks.prg * contrib/hbide/ideeditor.prg * contrib/hbide/idefindreplace.prg * contrib/hbide/idemisc.prg * contrib/hbide/ideobject.prg * contrib/hbide/ideshortcuts.prg + Implemented: almost all the docks can be placed on any of the areas. Exception is "Output Console" which is only dockable to top or bottom. + Main toolbar and statusbar featured to toggle. Statusbar, however is session dependant, i.e., is not saved for next run. ! Many artifacts fixed for Search/Replace engine, all the three variants. ! "Exppression" edit fixed to respect "Enter" key press to start searching. ! More artifacts I must be forgetting. --- harbour/ChangeLog | 23 +++++++ harbour/contrib/hbide/hbide.prg | 49 ++++---------- harbour/contrib/hbide/ideactions.prg | 10 ++- harbour/contrib/hbide/idedocks.prg | 61 +++++++++-------- harbour/contrib/hbide/ideeditor.prg | 54 +++++++++++++-- harbour/contrib/hbide/idefindreplace.prg | 55 +++++++++------- harbour/contrib/hbide/idemisc.prg | 7 +- harbour/contrib/hbide/ideobject.prg | 1 + harbour/contrib/hbide/ideshortcuts.prg | 62 ++++++++++++++++++ .../hbide/resources/keyboardmappings.png | Bin 0 -> 691 bytes harbour/contrib/hbxbp/xbptoolbar.prg | 13 ++-- 11 files changed, 229 insertions(+), 106 deletions(-) create mode 100644 harbour/contrib/hbide/resources/keyboardmappings.png diff --git a/harbour/ChangeLog b/harbour/ChangeLog index d8960a4ed4..3e93a0c945 100644 --- a/harbour/ChangeLog +++ b/harbour/ChangeLog @@ -17,6 +17,29 @@ past entries belonging to author(s): Viktor Szakats. */ +2010-05-03 00:38 UTC-0800 Pritpal Bedi (pritpal@vouchcac.com) + * contrib/hbxbp/xbptoolbar.prg + ! Issued: setWindowaTitle() for main menubar. + + + contrib/hbide/resources/keyboardmappings.png + + Icon for "keyboard Mappings" menu option. + + * contrib/hbide/hbide.prg + * contrib/hbide/ideactions.prg + * contrib/hbide/idedocks.prg + * contrib/hbide/ideeditor.prg + * contrib/hbide/idefindreplace.prg + * contrib/hbide/idemisc.prg + * contrib/hbide/ideobject.prg + * contrib/hbide/ideshortcuts.prg + + Implemented: almost all the docks can be placed on any of the areas. + Exception is "Output Console" which is only dockable to top or bottom. + + Main toolbar and statusbar featured to toggle. Statusbar, however is + session dependant, i.e., is not saved for next run. + ! Many artifacts fixed for Search/Replace engine, all the three variants. + ! "Exppression" edit fixed to respect "Enter" key press to start searching. + ! More artifacts I must be forgetting. + 2010-05-02 18:11 UTC-0800 Pritpal Bedi (pritpal@vouchcac.com) * contrib/hbqt/hbqt_hbqplaintextedit.cpp % Fixed to honor right-to-left selection. diff --git a/harbour/contrib/hbide/hbide.prg b/harbour/contrib/hbide/hbide.prg index 4218863f9f..93c5b26c19 100644 --- a/harbour/contrib/hbide/hbide.prg +++ b/harbour/contrib/hbide/hbide.prg @@ -268,6 +268,7 @@ CLASS HbIde DATA aMarkTBtns INIT array( 6 ) DATA lClosing INIT .f. + DATA lStatusBarVisible INIT .t. METHOD new( aParams ) METHOD create( aParams ) @@ -323,8 +324,6 @@ METHOD HbIde:new( aParams ) METHOD HbIde:create( aParams ) LOCAL qPixmap, qSplash, n, cView -HB_TRACE( HB_TR_ALWAYS, "HbIde:create( cProjIni )", "#Params=" ) - qPixmap := QPixmap():new( hb_dirBase() + "resources" + hb_osPathSeparator() + "hbidesplash.png" ) qSplash := QSplashScreen():new() * qSplash:setWindowFlags( hb_bitOr( Qt_WindowStaysOnTopHint, qSplash:windowFlags() ) ) @@ -460,21 +459,6 @@ HB_TRACE( HB_TR_ALWAYS, "HbIde:create( cProjIni )", "#Params=" ) /* Display cWrkEnvironment in StatusBar */ ::oDK:dispEnvironment( ::cWrkEnvironment ) - /* These docks must not be visible even IDE exits them open */ - #if 0 - ::oPropertiesDock:hide() - ::oEnvironDock:hide() - ::oThemesDock:hide() - ::oSkeltnDock:hide() - ::oHelpDock:hide() - ::oFindDock:hide() - ::oDockB1:hide() - ::oDockB2:hide() - ::oDockB:hide() - ::oDocViewDock:hide() - ::oDocWriteDock:hide() - #endif - #if 0 /* for screen capture */ n := seconds() DO WHILE .t. @@ -535,24 +519,6 @@ HB_TRACE( HB_TR_ALWAYS, "HbIde:create( cProjIni )", "#Params=" ) CASE ::mp1 == xbeK_ESC ::oSM:closeSource() - CASE ::mp1 == xbeK_CTRL_G - ::oEM:goto() - - CASE ::mp1 == xbeK_CTRL_F - IF !empty( ::qCurEdit ) - ::oFR:show() - ENDIF - - CASE ::mp1 == xbeK_CTRL_N - IF !empty( ::qCurEdit ) - ::oFR:find() - ENDIF - - CASE ::mp1 == xbeK_CTRL_R - IF !empty( ::qCurEdit ) - ::oFR:replace() - ENDIF - ENDCASE ENDIF @@ -654,6 +620,15 @@ METHOD HbIde:showApplicationCursor( nCursor ) METHOD HbIde:execAction( cKey ) SWITCH cKey + CASE "ToggleStatusBar" + IF ::lStatusBarVisible + ::oSBar:oWidget:hide() + ELSE + ::oSBar:oWidget:show() + ENDIF + ::lStatusBarVisible := ! ::lStatusBarVisible + EXIT + CASE "Tools" ::oTM:show() EXIT @@ -862,10 +837,10 @@ METHOD HbIde:execEditorAction( cKey ) ::oEM:insertText( cKey ) EXIT CASE "ZoomIn" - ::oEM:zoom( 1 ) + ::oEM:zoom( +1 ) EXIT CASE "ZoomOut" - ::oEM:zoom( 0 ) + ::oEM:zoom( -1 ) EXIT CASE "FormatBraces" ::oEM:formatBraces() diff --git a/harbour/contrib/hbide/ideactions.prg b/harbour/contrib/hbide/ideactions.prg index af7b76f358..5c6bed6376 100644 --- a/harbour/contrib/hbide/ideactions.prg +++ b/harbour/contrib/hbide/ideactions.prg @@ -309,7 +309,7 @@ METHOD IdeActions:loadActions() aadd( aAct, { "Environments" , "Environments..." , "envconfig" , "" , "No", "Yes" } ) aadd( aAct, { "GotoFunc" , "Goto Function" , "dc_function" , "" , "No", "Yes" } ) - aadd( aAct, { "Shortcuts" , "Keyboard Mappings" , "" , "" , "No", "Yes" } ) + aadd( aAct, { "Shortcuts" , "Keyboard Mappings" , "keyboardmappings","" , "No", "Yes" } ) * aadd( aAct, { "Tools" , "Tools & Utilities" , "tools" , "" , "No", "Yes" } ) RETURN aAct @@ -325,10 +325,14 @@ METHOD IdeActions:buildToolBar() oTBar:imageHeight := 22 oTBar:create( , , { 0, ::oDlg:currentSize()[ 2 ]-60 }, { ::oDlg:currentSize()[ 1 ], 60 } ) oTBar:setStyleSheet( GetStyleSheet( "QToolBar", ::nAnimantionMode ) ) - oTBar:oWidget:setMaximumHeight( 28 ) + //oTBar:oWidget:setMaximumHeight( 28 ) + #if 0 oTBar:oWidget:setAllowedAreas( Qt_TopToolBarArea ) oTBar:oWidget:setMovable( .f. ) oTBar:oWidget:setFloatable( .f. ) + #else + oTBar:oWidget:setAllowedAreas( Qt_LeftToolBarArea + Qt_RightToolBarArea + Qt_TopToolBarArea + Qt_BottomToolBarArea ) + #endif oTBar:buttonClick := {|oButton| ::oIde:execAction( oButton:key ) } @@ -518,9 +522,11 @@ METHOD IdeActions:buildMainMenu() oSubMenu:addItem( { "Toggle Animation", {|| oIde:execAction( "Animate" ) } } ) oSubMenu:oWidget:addSeparator() + oSubMenu:oWidget:addAction_4( ::oIde:oMainToolbar:oWidget:toggleViewAction() ) oSubMenu:oWidget:addAction_4( ::qTBarPanels:toggleViewAction() ) oSubMenu:oWidget:addAction_4( ::qTBarLines:toggleViewAction() ) oSubMenu:oWidget:addAction_4( ::qTBarDocks:toggleViewAction() ) + oSubMenu:addItem( { "Toggle Statusbar", {|| oIde:execAction( "ToggleStatusBar" ) } } ) oSubMenu:oWidget:addSeparator() oSubMenu:oWidget:addAction_4( ::oDockPT:oWidget:toggleViewAction() ) oSubMenu:oWidget:addAction_4( ::oDockED:oWidget:toggleViewAction() ) diff --git a/harbour/contrib/hbide/idedocks.prg b/harbour/contrib/hbide/idedocks.prg index 185e2ce52f..950c1665bb 100644 --- a/harbour/contrib/hbide/idedocks.prg +++ b/harbour/contrib/hbide/idedocks.prg @@ -128,7 +128,7 @@ CLASS IdeDocks INHERIT IdeObject METHOD dispEnvironment( cEnviron ) METHOD addPanelButton( cPanel ) METHOD disblePanelButton( qTBtn ) - METHOD getADockWidget( nArea, cObjectName, cWindowTitle, nFlags ) + METHOD getADockWidget( nAreas, cObjectName, cWindowTitle, nFlags ) METHOD getPanelIcon( cView ) METHOD animateComponents( nMode ) @@ -295,7 +295,7 @@ METHOD IdeDocks:buildDockWidgets() /*----------------------------------------------------------------------*/ -METHOD IdeDocks:getADockWidget( nArea, cObjectName, cWindowTitle, nFlags ) +METHOD IdeDocks:getADockWidget( nAreas, cObjectName, cWindowTitle, nFlags ) LOCAL oDock, nBasic DEFAULT nFlags TO 0 @@ -307,7 +307,7 @@ METHOD IdeDocks:getADockWidget( nArea, cObjectName, cWindowTitle, nFlags ) oDock:oWidget:setObjectName( cObjectName ) ::oDlg:addChild( oDock ) oDock:oWidget:setFeatures( nBasic ) - oDock:oWidget:setAllowedAreas( nArea ) + oDock:oWidget:setAllowedAreas( nAreas ) oDock:oWidget:setWindowTitle( cWindowTitle ) oDock:oWidget:setFocusPolicy( Qt_NoFocus ) oDock:oWidget:setStyleSheet( getStyleSheet( "QDockWidget", ::nAnimantionMode ) ) @@ -482,10 +482,7 @@ METHOD IdeDocks:buildToolBarPanels() ::qTBarPanels:setObjectName( "ToolBar_Panels" ) ::qTBarPanels:setWindowTitle( "ToolBar: Editor Panels" ) ::qTBarPanels:setAllowedAreas( Qt_LeftToolBarArea + Qt_RightToolBarArea + Qt_TopToolBarArea + Qt_BottomToolBarArea ) - //::qTBarPanels:setOrientation( Qt_Vertical ) ::qTBarPanels:setIconSize( qSize ) - //::qTBarPanels:setMovable( .f. ) - //::qTBarPanels:setFloatable( .f. ) ::oDlg:oWidget:addToolBar( Qt_LeftToolBarArea, ::qTBarPanels ) @@ -502,10 +499,6 @@ METHOD IdeDocks:buildToolBarPanels() ::qTBarLines:setWindowTitle( "ToolBar: Lines and Blocks" ) ::qTBarLines:setIconSize( qSize ) ::qTBarPanels:setAllowedAreas( Qt_LeftToolBarArea + Qt_RightToolBarArea + Qt_TopToolBarArea + Qt_BottomToolBarArea ) - * ::qTBarLines:setAllowedAreas( Qt_LeftToolBarArea ) - * ::qTBarLines:setOrientation( Qt_Vertical ) - * ::qTBarLines:setMovable( .f. ) - * ::qTBarLines:setFloatable( .f. ) ::oDlg:oWidget:addToolBar( Qt_LeftToolBarArea, ::qTBarLines ) @@ -573,12 +566,7 @@ METHOD IdeDocks:buildToolBarPanels() ::qTBarDocks:setIconSize( QSize():new( 16,16 ) ) ::qTBarDocks:setToolButtonStyle( Qt_ToolButtonIconOnly ) ::qTBarPanels:setAllowedAreas( Qt_LeftToolBarArea + Qt_RightToolBarArea + Qt_TopToolBarArea + Qt_BottomToolBarArea ) - #if 0 - ::qTBarDocks:setAllowedAreas( Qt_RightToolBarArea ) - ::qTBarDocks:setOrientation( Qt_Vertical ) - ::qTBarDocks:setMovable( .f. ) - ::qTBarDocks:setFloatable( .f. ) - #endif + aBtns := {} aadd( aBtns, { ::oDockPT , "projtree" } ) aadd( aBtns, { ::oDockED , "editstree" } ) @@ -596,8 +584,6 @@ METHOD IdeDocks:buildToolBarPanels() aadd( aBtns, { ::oFindDock , "search" } ) aadd( aBtns, {} ) aadd( aBtns, { ::oDockB2 , "builderror" } ) - * aadd( aBtns, { ::oDockB1 , "builderror" } ) - * aadd( aBtns, { ::oDockB , "builderror" } ) FOR EACH a_ IN aBtns IF empty( a_ ) @@ -665,8 +651,9 @@ METHOD IdeDocks:addPanelButton( cPanel ) METHOD IdeDocks:buildProjectTree() LOCAL i, oItem + LOCAL nAreas := Qt_LeftDockWidgetArea + Qt_RightDockWidgetArea + Qt_TopDockWidgetArea + Qt_BottomDockWidgetArea - ::oIde:oDockPT := ::getADockWidget( Qt_LeftDockWidgetArea, "dockProjectTree", "Projects", QDockWidget_DockWidgetFloatable ) + ::oIde:oDockPT := ::getADockWidget( nAreas, "dockProjectTree", "Projects", QDockWidget_DockWidgetFloatable ) ::oDlg:oWidget:addDockWidget_1( Qt_LeftDockWidgetArea, ::oDockPT:oWidget, Qt_Vertical ) ::oIde:oProjTree := XbpTreeView():new() @@ -713,8 +700,9 @@ METHOD IdeDocks:buildProjectTree() /*----------------------------------------------------------------------*/ METHOD IdeDocks:buildEditorTree() + LOCAL nAreas := Qt_LeftDockWidgetArea + Qt_RightDockWidgetArea + Qt_TopDockWidgetArea + Qt_BottomDockWidgetArea - ::oIde:oDockED := ::getADockWidget( Qt_LeftDockWidgetArea, "dockEditorTabs", "Editors", QDockWidget_DockWidgetFloatable ) + ::oIde:oDockED := ::getADockWidget( nAreas, "dockEditorTabs", "Editors", QDockWidget_DockWidgetFloatable ) ::oDlg:oWidget:addDockWidget_1( Qt_LeftDockWidgetArea, ::oDockED:oWidget, Qt_Vertical ) ::oIde:oEditTree := XbpTreeView():new() @@ -746,8 +734,9 @@ METHOD IdeDocks:buildEditorTree() /*----------------------------------------------------------------------*/ METHOD IdeDocks:buildSkeletonsTree() + LOCAL nAreas := Qt_LeftDockWidgetArea + Qt_RightDockWidgetArea + Qt_TopDockWidgetArea + Qt_BottomDockWidgetArea - ::oIde:oSkltnsTreeDock := ::getADockWidget( Qt_LeftDockWidgetArea, "dockSkltnsTree", "Skeletons", QDockWidget_DockWidgetFloatable ) + ::oIde:oSkltnsTreeDock := ::getADockWidget( nAreas, "dockSkltnsTree", "Skeletons", QDockWidget_DockWidgetFloatable ) ::oDlg:oWidget:addDockWidget_1( Qt_LeftDockWidgetArea, ::oSkltnsTreeDock:oWidget, Qt_Vertical ) ::connect( ::oSkltnsTreeDock:oWidget, "visibilityChanged(bool)", {|p| ::execEvent( dockSkltnsTree_visibilityChanged, p ) } ) @@ -757,8 +746,9 @@ METHOD IdeDocks:buildSkeletonsTree() /*----------------------------------------------------------------------*/ METHOD IdeDocks:buildFuncList() + LOCAL nAreas := Qt_LeftDockWidgetArea + Qt_RightDockWidgetArea + Qt_TopDockWidgetArea + Qt_BottomDockWidgetArea - ::oIde:oFuncDock := ::getADockWidget( Qt_RightDockWidgetArea, "dockFuncList", "Functions List", QDockWidget_DockWidgetFloatable ) + ::oIde:oFuncDock := ::getADockWidget( nAreas, "dockFuncList", "Functions List", QDockWidget_DockWidgetFloatable ) ::oDlg:oWidget:addDockWidget_1( Qt_RightDockWidgetArea, ::oFuncDock:oWidget, Qt_Vertical ) ::connect( ::oFuncDock:oWidget, "visibilityChanged(bool)", {|p| ::execEvent( oFuncDock_visibilityChanged, p ) } ) @@ -830,8 +820,9 @@ METHOD IdeDocks:buildLinkResults() /*----------------------------------------------------------------------*/ METHOD IdeDocks:buildOutputResults() + LOCAL nAreas := Qt_TopDockWidgetArea + Qt_BottomDockWidgetArea - ::oIde:oDockB2 := ::getADockWidget( Qt_BottomDockWidgetArea, "dockOutputResults", "Output Console", QDockWidget_DockWidgetFloatable ) + ::oIde:oDockB2 := ::getADockWidget( nAreas, "dockOutputResults", "Output Console", QDockWidget_DockWidgetFloatable ) ::oDlg:oWidget:addDockWidget_1( Qt_BottomDockWidgetArea, ::oDockB2:oWidget, Qt_Horizontal ) ::oIde:oOutputResult := XbpRtf():new( ::oDockB2 ):create( , , { 0,0 }, { 100, 400 }, , .T. ) @@ -904,8 +895,9 @@ METHOD IdeDocks:buildStatusBar() /*----------------------------------------------------------------------*/ METHOD IdeDocks:buildThemesDock() + LOCAL nAreas := Qt_LeftDockWidgetArea + Qt_RightDockWidgetArea + Qt_TopDockWidgetArea + Qt_BottomDockWidgetArea - ::oIde:oThemesDock := ::getADockWidget( Qt_RightDockWidgetArea, "dockThemes", "Theme Manager", QDockWidget_DockWidgetFloatable ) + ::oIde:oThemesDock := ::getADockWidget( nAreas, "dockThemes", "Theme Manager", QDockWidget_DockWidgetFloatable ) ::oDlg:oWidget:addDockWidget_1( Qt_RightDockWidgetArea, ::oThemesDock:oWidget, Qt_Horizontal ) ::connect( ::oThemesDock:oWidget, "visibilityChanged(bool)", {|p| ::execEvent( dockThemes_visibilityChanged, p ) } ) @@ -915,8 +907,9 @@ METHOD IdeDocks:buildThemesDock() /*----------------------------------------------------------------------*/ METHOD IdeDocks:buildPropertiesDock() + LOCAL nAreas := Qt_LeftDockWidgetArea + Qt_RightDockWidgetArea + Qt_TopDockWidgetArea + Qt_BottomDockWidgetArea - ::oIde:oPropertiesDock := ::getADockWidget( Qt_RightDockWidgetArea, "dockProperties", "Project Properties", QDockWidget_DockWidgetFloatable ) + ::oIde:oPropertiesDock := ::getADockWidget( nAreas, "dockProperties", "Project Properties", QDockWidget_DockWidgetFloatable ) ::oDlg:oWidget:addDockWidget_1( Qt_RightDockWidgetArea, ::oPropertiesDock:oWidget, Qt_Horizontal ) ::connect( ::oPropertiesDock:oWidget, "visibilityChanged(bool)", {|p| ::execEvent( dockProperties_visibilityChanged, p ) } ) @@ -926,8 +919,9 @@ METHOD IdeDocks:buildPropertiesDock() /*----------------------------------------------------------------------*/ METHOD IdeDocks:buildFindInFiles() + LOCAL nAreas := Qt_LeftDockWidgetArea + Qt_RightDockWidgetArea + Qt_TopDockWidgetArea + Qt_BottomDockWidgetArea - ::oIde:oFindDock := ::getADockWidget( Qt_RightDockWidgetArea, "dockFindInFiles", "Find in Files", QDockWidget_DockWidgetFloatable ) + ::oIde:oFindDock := ::getADockWidget( nAreas, "dockFindInFiles", "Find in Files", QDockWidget_DockWidgetFloatable ) ::oDlg:oWidget:addDockWidget_1( Qt_RightDockWidgetArea, ::oFindDock:oWidget, Qt_Horizontal ) ::connect( ::oFindDock:oWidget, "visibilityChanged(bool)", {|p| ::execEvent( dockFindInFiles_visibilityChanged, p ) } ) @@ -937,8 +931,9 @@ METHOD IdeDocks:buildFindInFiles() /*----------------------------------------------------------------------*/ METHOD IdeDocks:buildDocViewer() + LOCAL nAreas := Qt_LeftDockWidgetArea + Qt_RightDockWidgetArea + Qt_TopDockWidgetArea + Qt_BottomDockWidgetArea - ::oIde:oDocViewDock := ::getADockWidget( Qt_RightDockWidgetArea, "dockDocViewer", "Harbour Documentation", QDockWidget_DockWidgetFloatable ) + ::oIde:oDocViewDock := ::getADockWidget( nAreas, "dockDocViewer", "Harbour Documentation", QDockWidget_DockWidgetFloatable ) ::oDlg:oWidget:addDockWidget_1( Qt_RightDockWidgetArea, ::oDocViewDock:oWidget, Qt_Horizontal ) ::connect( ::oDocViewDock:oWidget, "visibilityChanged(bool)", {|p| ::execEvent( dockDocViewer_visibilityChanged, p ) } ) @@ -948,8 +943,9 @@ METHOD IdeDocks:buildDocViewer() /*----------------------------------------------------------------------*/ METHOD IdeDocks:buildDocWriter() + LOCAL nAreas := Qt_LeftDockWidgetArea + Qt_RightDockWidgetArea + Qt_TopDockWidgetArea + Qt_BottomDockWidgetArea - ::oIde:oDocWriteDock := ::getADockWidget( Qt_RightDockWidgetArea, "dockDocWriter", "Documentation Writer", QDockWidget_DockWidgetFloatable ) + ::oIde:oDocWriteDock := ::getADockWidget( nAreas, "dockDocWriter", "Documentation Writer", QDockWidget_DockWidgetFloatable ) ::oDlg:oWidget:addDockWidget_1( Qt_RightDockWidgetArea, ::oDocWriteDock:oWidget, Qt_Horizontal ) ::connect( ::oDocWriteDock:oWidget, "visibilityChanged(bool)", {|p| ::execEvent( dockDocWriter_visibilityChanged, p ) } ) @@ -959,8 +955,9 @@ METHOD IdeDocks:buildDocWriter() /*----------------------------------------------------------------------*/ METHOD IdeDocks:buildFunctionsDock() + LOCAL nAreas := Qt_LeftDockWidgetArea + Qt_RightDockWidgetArea + Qt_TopDockWidgetArea + Qt_BottomDockWidgetArea - ::oIde:oFunctionsDock := ::getADockWidget( Qt_RightDockWidgetArea, "dockFunctions", "Projects Functions Lookup", QDockWidget_DockWidgetFloatable ) + ::oIde:oFunctionsDock := ::getADockWidget( nAreas, "dockFunctions", "Projects Functions Lookup", QDockWidget_DockWidgetFloatable ) ::oDlg:oWidget:addDockWidget_1( Qt_RightDockWidgetArea, ::oFunctionsDock:oWidget, Qt_Horizontal ) ::connect( ::oFunctionsDock:oWidget, "visibilityChanged(bool)", {|p| ::execEvent( docFunctions_visibilityChanged, p ) } ) @@ -970,8 +967,9 @@ METHOD IdeDocks:buildFunctionsDock() /*----------------------------------------------------------------------*/ METHOD IdeDocks:buildEnvironDock() + LOCAL nAreas := Qt_LeftDockWidgetArea + Qt_RightDockWidgetArea + Qt_TopDockWidgetArea + Qt_BottomDockWidgetArea - ::oIde:oEnvironDock := ::getADockWidget( Qt_RightDockWidgetArea, "dockEnvironments", "Compiler Environments", QDockWidget_DockWidgetFloatable ) + ::oIde:oEnvironDock := ::getADockWidget( nAreas, "dockEnvironments", "Compiler Environments", QDockWidget_DockWidgetFloatable ) ::oDlg:oWidget:addDockWidget_1( Qt_RightDockWidgetArea, ::oEnvironDock:oWidget, Qt_Horizontal ) ::connect( ::oEnvironDock:oWidget, "visibilityChanged(bool)", {|p| ::execEvent( docEnvironments_visibilityChanged, p ) } ) @@ -981,8 +979,9 @@ METHOD IdeDocks:buildEnvironDock() /*----------------------------------------------------------------------*/ METHOD IdeDocks:buildSkeletonWidget() + LOCAL nAreas := Qt_LeftDockWidgetArea + Qt_RightDockWidgetArea + Qt_TopDockWidgetArea + Qt_BottomDockWidgetArea - ::oIde:oSkeltnDock := ::getADockWidget( Qt_RightDockWidgetArea, "dockSkeleton", "Code Skeletons", QDockWidget_DockWidgetFloatable ) + ::oIde:oSkeltnDock := ::getADockWidget( nAreas, "dockSkeleton", "Code Skeletons", QDockWidget_DockWidgetFloatable ) ::oDlg:oWidget:addDockWidget_1( Qt_RightDockWidgetArea, ::oSkeltnDock:oWidget, Qt_Horizontal ) ::connect( ::oSkeltnDock:oWidget, "visibilityChanged(bool)", {|p| ::execEvent( docSkeletons_visibilityChanged, p ) } ) diff --git a/harbour/contrib/hbide/ideeditor.prg b/harbour/contrib/hbide/ideeditor.prg index 7f402e9ddf..ba8a9878fd 100644 --- a/harbour/contrib/hbide/ideeditor.prg +++ b/harbour/contrib/hbide/ideeditor.prg @@ -711,7 +711,7 @@ METHOD IdeEditsManager:insertText( cKey ) RETURN Self ENDIF IF !( hbide_isValidText( cFile ) ) - MsgBox( 'File type unknown or unsupported: ' + cFile ) + MsgBox( "File type unknown or unsupported: " + cFile ) RETURN Self ENDIF cText := hb_memoread( cFile ) @@ -830,6 +830,7 @@ METHOD IdeEditsManager:RemoveTrailingSpaces() /*----------------------------------------------------------------------*/ METHOD IdeEditsManager:zoom( nKey ) + #if 0 LOCAL nPointSize, qFont, oEdit, oEditor IF ! empty( oEditor := ::getEditorCurrent() ) @@ -851,6 +852,13 @@ METHOD IdeEditsManager:zoom( nKey ) NEXT ENDIF ENDIF + #endif + LOCAL oEdit + + IF !empty( oEdit := ::getEditObjectCurrent() ) + oEdit:zoom( nKey ) + ENDIF + RETURN Self /*----------------------------------------------------------------------*/ @@ -916,11 +924,12 @@ METHOD IdeEditsManager:goto( nLine ) nLine := qCursor:blockNumber() qGo := QInputDialog():new( ::oDlg:oWidget ) + qGo:setInputMode( 1 ) qGo:setIntMinimum( 1 ) - qGo:setIntMaximum( nRows + 1 ) + qGo:setIntMaximum( nRows ) qGo:setIntValue( nLine + 1 ) qGo:setLabelText( "Goto Line Number [1-" + hb_ntos( nRows ) + "]" ) - qGo:setWindowTitle( "Harbour-Qt" ) + qGo:setWindowTitle( "Harbour" ) ::setPosByIni( qGo, GotoDialogGeometry ) qGo:exec() @@ -1410,6 +1419,9 @@ CLASS IdeEdit INHERIT IdeObject DATA nProtoCol INIT -1 DATA isSuspended INIT .f. + DATA fontFamily INIT "Courier New" + DATA pointSize INIT 10 + DATA currentPointSize INIT 10 DATA qFont DATA aBlockCopyContents INIT {} @@ -1475,6 +1487,7 @@ CLASS IdeEdit INHERIT IdeObject METHOD pasteBlockContents() METHOD insertBlockContents( aCord ) METHOD deleteBlockContents( aCord ) + METHOD zoom( nKey ) ENDCLASS @@ -1543,12 +1556,43 @@ METHOD IdeEdit:create( oEditor, nMode ) /*----------------------------------------------------------------------*/ +METHOD IdeEdit:zoom( nKey ) + + DEFAULT nKey TO 0 + + IF nKey == 1 + IF ::currentPointSize + 1 < 30 + ::currentPointSize++ + ENDIF + + ELSEIF nKey == -1 + IF ::currentPointSize - 1 > 5 + ::currentPointSize-- + ENDIF + + ELSEIF nKey == 0 + ::currentPointSize := ::pointSize + + ELSEIF nKey >= 5 .AND. nKey <= 30 + ::currentPointSize := nKey + + ELSE + RETURN Self + + ENDIF + + ::setFont() + + RETURN Self + +/*----------------------------------------------------------------------*/ + METHOD IdeEdit:setFont() ::qFont := QFont():new() - ::qFont:setFamily( "Courier New" ) + ::qFont:setFamily( ::fontFamily ) ::qFont:setFixedPitch( .t. ) - ::qFont:setPointSize( 10 ) + ::qFont:setPointSize( ::currentPointSize ) ::qEdit:setFont( ::qFont ) diff --git a/harbour/contrib/hbide/idefindreplace.prg b/harbour/contrib/hbide/idefindreplace.prg index 5cce53fc7f..a1075a299c 100644 --- a/harbour/contrib/hbide/idefindreplace.prg +++ b/harbour/contrib/hbide/idefindreplace.prg @@ -216,10 +216,9 @@ METHOD IdeSearchReplace:beginFind() ::oUI:q_radioTop:setChecked( .t. ) ::oUI:show() - ::oUI:oWidget:activateWindow() ::cFind := "" - ::oUI:q_comboFind:setFocus( Qt_MouseFocusReason ) + ::qFindLineEdit:activateWindow() ::qFindLineEdit:setFocus_1() ::qFindLineEdit:selectAll() @@ -278,6 +277,8 @@ METHOD IdeSearchReplace:startFromTop() CLASS IdeFindReplace INHERIT IdeObject + DATA qLineEdit + METHOD new( oIde ) METHOD create( oIde ) METHOD destroy() @@ -303,7 +304,10 @@ METHOD IdeFindReplace:new( oIde ) METHOD IdeFindReplace:destroy() - ::oUI:destroy() + IF !empty( ::oUI ) + ::disConnect( ::qLineEdit, "returnPressed()" ) + ::oUI:destroy() + ENDIF RETURN Self @@ -315,7 +319,7 @@ METHOD IdeFindReplace:create( oIde ) ::oIde := oIde - ::oUI := HbQtUI():new( ::oIde:resPath + "finddialog.uic", ::oIde:oDlg:oWidget ):build() + ::oUI := HbQtUI():new( hbide_uic( "finddialog" ), ::oIde:oDlg:oWidget ):build() ::oUI:setWindowFlags( Qt_Sheet ) aeval( ::oIde:aIni[ INI_FIND ], {|e| ::oUI:q_comboFindWhat:addItem( e ) } ) @@ -339,12 +343,15 @@ METHOD IdeFindReplace:create( oIde ) ::oUI:q_comboReplaceWith:setEnabled( p == 0 ), ; iif( p == 1, ::oUI:q_buttonReplace:setEnabled( .f. ), NIL ) } ) + ::qLineEdit := QLineEdit():configure( ::oUI:q_comboFindWhat:lineEdit() ) + ::connect( ::qLineEdit, "returnPressed()", {|| ::onClickFind() } ) + RETURN Self /*----------------------------------------------------------------------*/ METHOD IdeFindReplace:show() - LOCAL cText, qLineEdit + LOCAL cText ::oUI:q_buttonReplace:setEnabled( .f. ) ::oUI:q_checkGlobal:setEnabled( .f. ) @@ -353,11 +360,10 @@ METHOD IdeFindReplace:show() ::oIde:setPosByIni( ::oUI:oWidget, FindDialogGeometry ) ::oUI:q_comboFindWhat:setFocus() - qLineEdit := QLineEdit():configure( ::oUI:q_comboFindWhat:lineEdit() ) IF !empty( cText := ::oEM:getSelectedText() ) - qLineEdit:setText( cText ) + ::qLineEdit:setText( cText ) ENDIF - qLineEdit:selectAll() + ::qLineEdit:selectAll() ::oUI:show() @@ -457,7 +463,7 @@ METHOD IdeFindReplace:onClickFind() ::oUI:q_buttonReplace:setEnabled( .f. ) ::oUI:q_checkGlobal:setEnabled( .f. ) ::oUI:q_checkNoPrompting:setEnabled( .f. ) - + ::oUI:q_buttonFind:activateWindow() ::oUI:q_buttonFind:setFocus_1() ENDIF @@ -477,8 +483,7 @@ METHOD IdeFindReplace:find( lWarn ) nFlags += iif( ::oUI:q_checkMatchCase:isChecked(), QTextDocument_FindCaseSensitively, 0 ) nFlags += iif( ::oUI:q_radioUp:isChecked(), QTextDocument_FindBackward, 0 ) - //IF !( lFound := ::qCurEdit:find( cText, nFlags ) ) .and. lWarn - IF !( lFound := ::oEM:getEditCurrent():find( cText, nFlags ) ) .and. lWarn + IF !( lFound := ::oEM:getEditCurrent():find( cText, nFlags ) ) .AND. lWarn hbide_showWarning( "Cannot find : " + cText ) ENDIF ENDIF @@ -567,6 +572,8 @@ CLASS IdeFindInFiles INHERIT IdeObject DATA lShowOnCreate INIT .T. DATA lInDockWindow INIT .F. + DATA qEditFind + METHOD new( oIde, lShowOnCreate ) METHOD create( oIde, lShowOnCreate ) METHOD destroy() @@ -610,6 +617,8 @@ METHOD IdeFindInFiles:destroy() LOCAL qItem IF !empty( ::oUI ) + ::disConnect( ::qEditFind, "returnPressed()" ) + FOR EACH qItem IN ::aItems qItem := NIL NEXT @@ -688,19 +697,21 @@ METHOD IdeFindInFiles:buildUI() /* Attach all signals */ // - ::oUI:signal( "buttonClose" , "clicked()" , {| | ::execEvent( "buttonClose" ) } ) - ::oUI:signal( "buttonFolder" , "clicked()" , {| | ::execEvent( "buttonFolder" ) } ) - ::oUI:signal( "buttonFind" , "clicked()" , {| | ::execEvent( "buttonFind" ) } ) - ::oUI:signal( "buttonRepl" , "clicked()" , {| | ::execEvent( "buttonRepl" ) } ) - ::oUI:signal( "buttonStop" , "clicked()" , {| | ::execEvent( "buttonStop" ) } ) - ::oUI:signal( "checkAll" , "stateChanged(int)" , {|p| ::execEvent( "checkAll", p ) } ) - ::oUI:signal( "comboFind" , "currentIndexChanged(QString)", {|p| ::execEvent( "comboFind", p ) } ) - ::oUI:signal( "checkListOnly", "stateChanged(int)" , {|p| ::execEvent( "checkListOnly", p ) } ) - ::oUI:signal( "checkFolders" , "stateChanged(int)" , {|p| ::execEvent( "checkFolders", p ) } ) - ::oUI:signal( "editResults" , "copyAvailable(bool)" , {|l| ::execEvent( "editResults", l ) } ) + ::oUI:signal( "buttonClose" , "clicked()" , {| | ::execEvent( "buttonClose" ) } ) + ::oUI:signal( "buttonFolder" , "clicked()" , {| | ::execEvent( "buttonFolder" ) } ) + ::oUI:signal( "buttonFind" , "clicked()" , {| | ::execEvent( "buttonFind" ) } ) + ::oUI:signal( "buttonRepl" , "clicked()" , {| | ::execEvent( "buttonRepl" ) } ) + ::oUI:signal( "buttonStop" , "clicked()" , {| | ::execEvent( "buttonStop" ) } ) + ::oUI:signal( "checkAll" , "stateChanged(int)" , {|p| ::execEvent( "checkAll", p ) } ) + ::oUI:signal( "comboExpr" , "currentIndexChanged(QString)", {|p| ::execEvent( "comboFind", p ) } ) + ::oUI:signal( "checkListOnly", "stateChanged(int)" , {|p| ::execEvent( "checkListOnly", p ) } ) + ::oUI:signal( "checkFolders" , "stateChanged(int)" , {|p| ::execEvent( "checkFolders", p ) } ) + ::oUI:signal( "editResults" , "copyAvailable(bool)" , {|l| ::execEvent( "editResults", l ) } ) ::oUI:signal( "editResults" , "customContextMenuRequested(QPoint)", {|p| ::execEvent( "editResults-contextMenu", p ) } ) -HB_TRACE( HB_TR_ALWAYS, "-------------------------", 1 ) + ::qEditFind := QLineEdit():from( ::oUI:q_comboExpr:lineEdit() ) + ::connect( ::qEditFind, "returnPressed()", {|| ::execEvent( "buttonFind" ) } ) + RETURN Self /*----------------------------------------------------------------------*/ diff --git a/harbour/contrib/hbide/idemisc.prg b/harbour/contrib/hbide/idemisc.prg index 7d680d4143..bb11cb6c03 100644 --- a/harbour/contrib/hbide/idemisc.prg +++ b/harbour/contrib/hbide/idemisc.prg @@ -186,10 +186,11 @@ FUNCTION hbide_posAndSize( qWidget ) /*----------------------------------------------------------------------*/ -FUNCTION hbide_showWarning( cMsg, cInfo, cTitle ) +FUNCTION hbide_showWarning( cMsg, cInfo, cTitle, qParent ) LOCAL oMB - DEFAULT cTitle TO "Information" + DEFAULT cTitle TO "Information" + DEFAULT qParent TO SetAppWindow():pWidget oMB := QMessageBox():new() oMB:setText( cMsg ) @@ -197,7 +198,7 @@ FUNCTION hbide_showWarning( cMsg, cInfo, cTitle ) oMB:setInformativeText( cInfo ) ENDIF oMB:setIcon( QMessageBox_Critical ) - oMB:setParent( SetAppWindow():pWidget ) + oMB:setParent( qParent ) oMB:setWindowFlags( Qt_Dialog ) oMB:setWindowTitle( cTitle ) diff --git a/harbour/contrib/hbide/ideobject.prg b/harbour/contrib/hbide/ideobject.prg index 2bbc2963d3..b855c7d7ba 100644 --- a/harbour/contrib/hbide/ideobject.prg +++ b/harbour/contrib/hbide/ideobject.prg @@ -196,6 +196,7 @@ CLASS IdeObject ACCESS lTabCloseRequested INLINE ::oIde:lTabCloseRequested ACCESS isColumnSelectionEnabled INLINE ::oIde:isColumnSelectionEnabled ACCESS lLineNumbersVisible INLINE ::oIde:lLineNumbersVisible + ACCESS lStatusBarVisible INLINE ::oIde:lStatusBarVisible ACCESS aMarkTBtns INLINE ::oIde:aMarkTBtns diff --git a/harbour/contrib/hbide/ideshortcuts.prg b/harbour/contrib/hbide/ideshortcuts.prg index 0c8995a7c3..85f9b171be 100644 --- a/harbour/contrib/hbide/ideshortcuts.prg +++ b/harbour/contrib/hbide/ideshortcuts.prg @@ -169,6 +169,12 @@ CLASS IdeShortcuts INHERIT IdeObject METHOD launch( cProj ) METHOD insert( cText ) METHOD separator( cSep ) + METHOD findAgain() + METHOD replace() + METHOD toUpper() + METHOD toLower() + METHOD invertCase() + METHOD zoom( nKey ) ENDCLASS @@ -1034,6 +1040,42 @@ METHOD IdeShortcuts:separator( cSep ) /*----------------------------------------------------------------------*/ +METHOD IdeShortcuts:findAgain() + IF !empty( ::qCurEdit ) + ::oFR:find() + ENDIF + RETURN Self + +/*----------------------------------------------------------------------*/ + +METHOD IdeShortcuts:replace() + IF !empty( ::qCurEdit ) + ::oFR:replace() + ENDIF + RETURN Self + +/*----------------------------------------------------------------------*/ + +METHOD IdeShortcuts:toUpper() + RETURN ::oEM:convertSelection( "ToUpper" ) + +/*----------------------------------------------------------------------*/ + +METHOD IdeShortcuts:toLower() + RETURN ::oEM:convertSelection( "ToLower" ) + +/*----------------------------------------------------------------------*/ + +METHOD IdeShortcuts:invertCase() + RETURN ::oEM:convertSelection( "Invert" ) + +/*----------------------------------------------------------------------*/ + +METHOD IdeShortcuts:zoom( nKey ) + RETURN ::oEM:zoom( nKey ) + +/*----------------------------------------------------------------------*/ + METHOD IdeShortcuts:loadMethods() #if 0 aadd( ::aMethods, { '', ; @@ -1067,6 +1109,12 @@ METHOD IdeShortcuts:loadMethods() aadd( ::aMethods, { 'findDlg()', ; 'findDlg()', ; 'Invokes "Find and Replace" dialog.' } ) + aadd( ::aMethods, { 'findAgain()', ; + 'findAgain()', ; + 'Finds last search string without opening the dialog.' } ) + aadd( ::aMethods, { 'replace()', ; + 'replace()', ; + 'Replaces last replace string if some text is already selected without opening the dialog.' } ) aadd( ::aMethods, { 'findDlgEx()', ; 'findDlgEx()', ; 'Invokes extended "Find and Replace" dialog at the bottom of editing area.' } ) @@ -1085,6 +1133,15 @@ METHOD IdeShortcuts:loadMethods() aadd( ::aMethods, { 'streamComment()', ; 'streamComment()', ; 'Encloses currently selected text in Anci-C like comments /* */' } ) + aadd( ::aMethods, { 'toUpper()', ; + 'toUpper()', ; + 'Converts currently selected text to upper-case.' } ) + aadd( ::aMethods, { 'toLower()', ; + 'toLower()', ; + 'Converts currently selected text to lower-case.' } ) + aadd( ::aMethods, { 'invertCase()', ; + 'invertCase()', ; + 'Inverts case of currently selected text: upper => lower; lower => upper.' } ) aadd( ::aMethods, { 'build( cProj )', ; 'build( "" )', ; 'Builds if it is already loaded. All sources are saved if found in modified state before "build" is initiated.' } ) @@ -1116,6 +1173,9 @@ METHOD IdeShortcuts:loadMethods() 'execTool( "", "", "", .f., .f. )', ; 'Executes a program or file with parameters and other attributes.' + CRLF + ; 'http://hbide.vouch.info/ ( Topic: Tools and Utilities )' } ) + aadd( ::aMethods, { 'zoom( nVal )' , ; + 'zoom( +1 )' , ; + 'Zooms in/out the current editing instance. nVal: 1-one size up; -1-one size less; NIL-original size; 5~30-to size.' } ) RETURN Self @@ -1141,6 +1201,8 @@ METHOD IdeShortcuts:loadDftSCuts() * aadd( b_, { "Revert to Saved" , "R" , "NO", "NO" , "YES", "", '::revertToSaved()' , "" , "", "" } ) aadd( b_, { "Find Dialog" , "F" , "NO", "YES", "NO" , "", '::findDlg()' , "find" , "", "" } ) + aadd( b_, { "Find Again" , "N" , "NO", "YES", "NO" , "", '::findAgain()' , "" , "", "" } ) + aadd( b_, { "Replace" , "R" , "NO", "YES", "NO" , "", '::replace()' , "" , "", "" } ) aadd( b_, { "Find Dialog Ex" , "F" , "NO", "YES", "YES", "", '::findDlgEx()' , "find" , "", "" } ) aadd( b_, { "Goto Line" , "G" , "NO", "YES", "NO" , "", '::gotoLine()' , "gotoline" , "", "" } ) diff --git a/harbour/contrib/hbide/resources/keyboardmappings.png b/harbour/contrib/hbide/resources/keyboardmappings.png new file mode 100644 index 0000000000000000000000000000000000000000..4b60dfbe3ad99703629176f5c48381e735d2b38a GIT binary patch literal 691 zcmV;k0!;mhP)Gw0!+d(Q9t&$)LP{_$b|3!sn{ z|3w}rnPt(#j|s<+Ldr07q|6i`F(eZj7?;2$3GsLWcDo%mMdq`Cx!#4v z#gi5w*X6oaUF~b9ct{ioqUeT+6ftyynT7$zm<190imYHJ5d1tbF9c<{SwviAPWR8W=gY9%19SkIZ(g1Zg5>rjzt#%hOS!`-5xh0(Fh_d5qLZvc)ebzs)`sDnwb2A z{(-?hrpWT14Mm0bZFW1S;-o+lAL6TVcJ<1o0$*i?EwmJZ)9r?0b3msy#F^`>F?4ox zjR{qvK_{7PP4CxQOp@KZ(>-+TXp=8Os-o{dz!-W-kxpob4~;^B-w&y*40>w| z6qgJBkCU;qfR;0-ANJh6b$pqIn3$VKc={`TWM)Dw@E||iiB}_|!L)!an>RIecXd3- z&&$nzGyZOB;Q5Q;g+O3hbz~H`ww`TfjEDdDH`391RdsD%IK1Mg< literal 0 HcmV?d00001 diff --git a/harbour/contrib/hbxbp/xbptoolbar.prg b/harbour/contrib/hbxbp/xbptoolbar.prg index c51ac22179..ce96d8721a 100644 --- a/harbour/contrib/hbxbp/xbptoolbar.prg +++ b/harbour/contrib/hbxbp/xbptoolbar.prg @@ -154,6 +154,7 @@ METHOD XbpToolbar:create( oParent, oOwner, aPos, aSize, aPresParams, lVisible ) ::oWidget := QToolBar():new( ::oParent:oWidget ) ::oWidget:setObjectName( "XBPTOOLBARMAIN" ) + ::oWidget:setWindowTitle( "Toolbar: Main" ) ::oParent:oWidget:addToolBar_1( ::oWidget ) IF ::imageWidth > 0 .and. ::imageHeight > 0 @@ -295,8 +296,8 @@ METHOD XbpToolbar:execSlot( cSlot, p ) IF cSlot == "triggered(bool)" ::buttonClick( p ) - ENDIF - + ENDIF + RETURN NIL /*----------------------------------------------------------------------*/ @@ -363,7 +364,7 @@ METHOD XbpToolbar:buttonClick( ... ) ::sl_lbClick := a_[ 1 ] ELSEIF len( a_ ) >= 1 .AND. hb_isBlock( ::sl_lbClick ) eval( ::sl_lbClick, a_[ 1 ], NIL, Self ) - ENDIF + ENDIF RETURN Self /*----------------------------------------------------------------------*/ @@ -374,7 +375,7 @@ METHOD XbpToolbar:change( ... ) ::sl_change := a_[ 1 ] ELSEIF len( a_ ) >= 0 .AND. hb_isBlock( ::sl_change ) eval( ::sl_change, NIL, NIL, Self ) - ENDIF + ENDIF RETURN Self /*----------------------------------------------------------------------*/ @@ -385,7 +386,7 @@ METHOD XbpToolbar:buttonMenuClick( ... ) ::sl_buttonMenuClick := a_[ 1 ] ELSEIF len( a_ ) >= 0 .AND. hb_isBlock( ::sl_buttonMenuClick ) eval( ::sl_buttonMenuClick, NIL, NIL, Self ) - ENDIF + ENDIF RETURN Self /*----------------------------------------------------------------------*/ @@ -396,7 +397,7 @@ METHOD XbpToolbar:buttonDropDown( ... ) ::sl_buttonDropDown := a_[ 1 ] ELSEIF len( a_ ) >= 0 .AND. hb_isBlock( ::sl_buttonDropDown ) eval( ::sl_buttonDropDown, NIL, NIL, Self ) - ENDIF + ENDIF RETURN Self /*----------------------------------------------------------------------*/