Files
harbour-core/harbour/contrib/hbide/idedocks.prg
Pritpal Bedi 4618f04be4 2010-06-18 18:14 UTC-0800 Pritpal Bedi (bedipritpal@hotmail.com)
* contrib/hbide/hbide.ch
  * contrib/hbide/hbide.prg
  * contrib/hbide/ideactions.prg
  * contrib/hbide/idedocks.prg
  * contrib/hbide/ideeditor.prg
  * contrib/hbide/ideenviron.prg
  * contrib/hbide/idefindreplace.prg
  * contrib/hbide/idefunctions.prg
  * contrib/hbide/ideobject.prg
  * contrib/hbide/ideprojmanager.prg
  * contrib/hbide/idesaveload.prg
  * contrib/hbide/ideshortcuts.prg
  * contrib/hbide/idesources.prg
  * contrib/hbide/idetools.prg
    + Remodelled: ::aINI - hbide.ini variables container.
      It is now encapsulated in a object - ::aINI => ::oINI.
      This implementation has made this construct extendible to 
      any extent. Earlier it was a real mess to add one more 
      option on top of the existing one.
2010-06-19 01:17:42 +00:00

1303 lines
49 KiB
Plaintext

/*
* $Id$
*/
/*
* Harbour Project source code:
*
* Copyright 2009-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.
*
*/
/*----------------------------------------------------------------------*/
/*----------------------------------------------------------------------*/
/*----------------------------------------------------------------------*/
/*
* EkOnkar
* ( The LORD is ONE )
*
* Harbour-Qt IDE
*
* Pritpal Bedi <pritpal@vouchcac.com>
* 28Dec2009
*/
/*----------------------------------------------------------------------*/
/*----------------------------------------------------------------------*/
/*----------------------------------------------------------------------*/
#include "hbide.ch"
#include "common.ch"
#include "hbclass.ch"
#include "xbp.ch"
#include "appevent.ch"
#include "hbqt.ch"
/*----------------------------------------------------------------------*/
#define docEnvironments_visibilityChanged 301
#define dockFindInFiles_visibilityChanged 302
#define dockThemes_visibilityChanged 303
#define dockProperties_visibilityChanged 304
#define dockDocViewer_visibilityChanged 305
#define docFunctions_visibilityChanged 306
#define dockDocWriter_visibilityChanged 307
#define docSkeletons_visibilityChanged 308
#define dockSkltnsTree_visibilityChanged 309
#define dockHelpDock_visibilityChanged 310
#define oFuncDock_visibilityChanged 311
#define dockSourceThumbnail_visibilityChanged 312
#define dockQScintilla_visibilityChanged 313
#define qTimer_timeOut 401
#define qSystemTrayIcon_show 402
#define qSystemTrayIcon_close 403
#define qSystemTrayIcon_activated 404
/*----------------------------------------------------------------------*/
CLASS IdeDocks INHERIT IdeObject
DATA nPass INIT 0
DATA aPanels INIT {}
DATA aBtnLines INIT {}
DATA aBtnDocks INIT {}
DATA oBtnTabClose
DATA qTBtnClose
DATA lChanging INIT .f.
DATA qTimer
DATA nPrevWindowState
DATA lSystemTrayAvailable INIT .f.
DATA lMinimizeInSystemTray INIT .t. // .f.
DATA qAct1
DATA qAct2
METHOD new( oIde )
METHOD create( oIde )
METHOD destroy()
METHOD execEvent( nMode, p )
METHOD setView( cView )
METHOD buildToolBarPanels()
METHOD buildHelpWidget()
METHOD buildSkeletonWidget()
METHOD buildDialog()
METHOD buildViewWidget( cObjectName )
METHOD buildStackedWidget()
METHOD buildSearchReplaceWidget()
METHOD buildDockWidgets()
METHOD buildProjectTree()
METHOD buildEditorTree()
METHOD buildFuncList()
METHOD buildFunctionsDock()
METHOD buildSkeletonsTree()
METHOD buildCompileResults()
METHOD buildLinkResults()
METHOD buildOutputResults()
METHOD buildFindInFiles()
METHOD buildThemesDock()
METHOD buildPropertiesDock()
METHOD buildEnvironDock()
METHOD buildDocViewer()
METHOD buildDocWriter()
METHOD outputDoubleClicked( lSelected )
METHOD buildStatusBar()
METHOD setStatusText( nPart, xValue )
METHOD getMarkWidget( nIndex )
METHOD dispEnvironment( cEnviron )
METHOD addPanelButton( cPanel )
METHOD disblePanelButton( qTBtn )
METHOD getADockWidget( nAreas, cObjectName, cWindowTitle, nFlags )
METHOD getPanelIcon( cView )
METHOD animateComponents( nMode )
METHOD buildSourceThumbnail()
METHOD buildQScintilla()
METHOD buildUpDownWidget()
METHOD buildSystemTray()
METHOD showDlgBySystemTrayIconCommand()
ENDCLASS
/*----------------------------------------------------------------------*/
METHOD IdeDocks:new( oIde )
::oIde := oIde
RETURN Self
/*----------------------------------------------------------------------*/
METHOD IdeDocks:create( oIde )
DEFAULT oIde TO ::oIde
::oIde := oIde
RETURN Self
/*----------------------------------------------------------------------*/
METHOD IdeDocks:destroy()
LOCAL qTBtn
::oIde:oProjRoot := NIL
::oIde:oOpenedSources := NIL
::disconnect( ::oOutputResult:oWidget , "copyAvailable(bool)" )
::disconnect( ::oEnvironDock:oWidget , "visibilityChanged(bool)" )
::disconnect( ::oPropertiesDock:oWidget, "visibilityChanged(bool)" )
::disconnect( ::oThemesDock:oWidget , "visibilityChanged(bool)" )
::disconnect( ::oDocViewDock:oWidget , "visibilityChanged(bool)" )
::disconnect( ::oDocWriteDock:oWidget , "visibilityChanged(bool)" )
::disconnect( ::oFindDock:oWidget , "visibilityChanged(bool)" )
::disconnect( ::oFunctionsDock:oWidget , "visibilityChanged(bool)" )
::disconnect( ::oSkeltnDock:oWidget , "visibilityChanged(bool)" )
::disconnect( ::oHelpDock:oWidget , "visibilityChanged(bool)" )
::disconnect( ::oFuncDock:oWidget , "visibilityChanged(bool)" )
::disconnect( ::oSourceThumbnailDock:oWidget, "visibilityChanged(bool)" )
::disconnect( ::oQScintillaDock:oWidget, "visibilityChanged(bool)" )
#if 0 /* Not Implemented */
::disconnect( ::oDockPT:oWidget , "visibilityChanged(bool)" )
::disconnect( ::oDockED:oWidget , "visibilityChanged(bool)" )
::disconnect( ::oDockB2:oWidget , "visibilityChanged(bool)" )
#endif
IF !empty( ::oSys )
::disconnect( ::oSys , "activated(QSystemTrayIcon::ActivationReason)" )
::disconnect( ::qAct1 , "triggered(bool)" )
::disconnect( ::qAct2 , "triggered(bool)" )
ENDIF
FOR EACH qTBtn IN ::aPanels
::disconnect( qTBtn, "clicked()" )
qTBtn := NIL
NEXT
FOR EACH qTBtn IN ::aBtnLines
::disconnect( qTBtn, "clicked()" )
qTBtn := NIL
NEXT
FOR EACH qTBtn IN ::oIde:aMarkTBtns
::disconnect( qTBtn, "clicked()" )
NEXT
RETURN Self
/*----------------------------------------------------------------------*/
METHOD IdeDocks:buildDialog()
LOCAL s, aSize
::oIde:oDlg := XbpDialog():new()
::oDlg:icon := hbide_image( "hbide" )
::oDlg:title := "Harbour IDE"
::oDlg:qtObject := HbQtUI():new( hbide_uic( "mainwindow" ) ):build()
::oDlg:create( , , , , , .f. )
::oDlg:setStyleSheet( GetStyleSheet( "QMainWindow", ::nAnimantionMode ) )
::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 )
::oDlg:oWidget:resize( 900,470 )
::oIde:oDa := ::oDlg:drawingArea
SetAppWindow( ::oDlg )
// Center on Desktop and decorate
aSize := AppDesktop():currentSize()
::oDlg:setPos( { ( aSize[ 1 ] - ::oDlg:currentSize()[ 1 ] ) / 2, ;
( aSize[ 2 ] - ::oDlg:currentSize()[ 2 ] ) / 2 } )
::oIde:setPosAndSizeByIniEx( ::oDlg:oWidget, ::oINI:cMainWindowGeometry )
/* StatusBar */
::buildStatusBar()
/* Attach GRID Layout to Editor Area - Futuristic */
::oIde:qLayout := QGridLayout():new()
::oIde:qLayout:setContentsMargins( 0,0,0,0 )
::oIde:qLayout:setHorizontalSpacing( 0 )
::oIde:qLayout:setVerticalSpacing( 0 )
//
::oDa:oWidget:setLayout( ::qLayout )
::buildStackedWidget()
::qLayout:addWidget_1( ::oStackedWidget:oWidget, 0, 0, 1, 1 )
#if 1
::buildSearchReplaceWidget()
::qLayout:addWidget_1( ::oSearchReplace:oUI, 1, 0, 1, 1 )
#endif
/* View Panels */
::buildViewWidget( "Stats" ) /* At stayrtup displaying various statistics */
::buildViewWidget( "Main" ) /* Main Panel to hold editor tabs */
FOR EACH s IN ::oINI:aViews
::buildViewWidget( s ) /* All other panels user created */
NEXT
::setView( "Stats" ) /* Always call with name */
::oDlg:connectEvent( ::oDlg:oWidget, QEvent_WindowStateChange, {|e| ::execEvent( QEvent_WindowStateChange, e ) } )
::oDlg:connectEvent( ::oDlg:oWidget, QEvent_Hide , {|e| ::execEvent( QEvent_Hide, e ) } )
#if 1
::buildSystemTray()
#endif
RETURN Self
/*----------------------------------------------------------------------*/
METHOD IdeDocks:buildSystemTray()
IF empty( ::oSys )
::oIde:oSys := QSystemTrayIcon():new( ::oDlg:oWidget )
IF ( ::lSystemTrayAvailable := ::oSys:isSystemTrayAvailable() ) .AND. ::lMinimizeInSystemTray
::oSys:setIcon( hbide_image( "hbide" ) )
::connect( ::oSys, "activated(QSystemTrayIcon::ActivationReason)", {|p| ::execEvent( qSystemTrayIcon_activated, p ) } )
::oIde:oSysMenu := QMenu():new( ::oDlg:oWidget )
::qAct1 := ::oSysMenu:addAction_1( hbide_image( "fullscreen" ), "&Show" )
::oSysMenu:addSeparator()
::qAct2 := ::oSysMenu:addAction_1( hbide_image( "exit" ), "&Exit" )
::connect( ::qAct1, "triggered(bool)", {|| ::execEvent( qSystemTrayIcon_show ) } )
::connect( ::qAct2, "triggered(bool)", {|| ::execEvent( qSystemTrayIcon_close ) } )
::oSys:setContextMenu( ::oSysMenu )
::oSys:hide()
::oSys:setToolTip( "Harbour's Integrated Development Environment (v1.0)" )
ENDIF
ENDIF
RETURN nil
/*----------------------------------------------------------------------*/
METHOD IdeDocks:execEvent( nMode, p )
LOCAL qEvent
DO CASE
CASE nMode == 2 /* HelpWidget:contextMenuRequested(qPoint) */
hbide_popupBrwContextMenu( ::qHelpBrw, p )
CASE nMode == dockQScintilla_visibilityChanged
IF p; ::oEM:qscintilla(); ENDIF
CASE nMode == dockSourceThumbnail_visibilityChanged
IF p; ::oEM:showThumbnail(); ENDIF
/* Left Panel Docks */
CASE nMode == dockSkltnsTree_visibilityChanged
IF p; ::oSK:showTree(); ENDIF
/* Right Panel Docks */
CASE nMode == dockHelpDock_visibilityChanged
IF p; ::oHelpDock:oWidget:raise(); ENDIF
CASE nMode == dockDocViewer_visibilityChanged
IF p; ::oHL:show(); ::oDocViewDock:oWidget:raise(); ENDIF
CASE nMode == dockDocWriter_visibilityChanged
IF p; ::oDW:show(); ::oDocWriteDock:oWidget:raise(); ENDIF
CASE nMode == oFuncDock_visibilityChanged
IF p; ::oFuncDock:oWidget:raise(); ENDIF
CASE nMode == docFunctions_visibilityChanged
IF p; ::oFN:show(); ::oFunctionsDock:oWidget:raise(); ENDIF
CASE nMode == dockProperties_visibilityChanged
IF p; ::oPM:fetchProperties(); ::oPropertiesDock:oWidget:raise(); ENDIF
CASE nMode == docEnvironments_visibilityChanged
IF p; ::oEV:show(); ::oEnvironDock:oWidget:raise(); ENDIF
CASE nMode == docSkeletons_visibilityChanged
IF p; ::oSK:show(); ::oSkeltnDock:oWidget:raise(); ENDIF
CASE nMode == dockThemes_visibilityChanged
IF p; ::oTH:show(); ::oThemesDock:oWidget:raise(); ENDIF
CASE nMode == dockFindInFiles_visibilityChanged
IF p; ::oFF:show(); ::oFindDock:oWidget:raise(); ENDIF
CASE nMode == QEvent_WindowStateChange
qEvent := QWindowStateChangeEvent():from( p )
::nPrevWindowState := qEvent:oldState()
CASE nMode == QEvent_Hide
IF ::lSystemTrayAvailable .AND. ::lMinimizeInSystemTray
qEvent := QHideEvent():from( p )
IF ! ::lChanging
::lChanging := .t.
IF qEvent:spontaneous()
IF empty( ::qTimer )
::qTimer := QTimer():New()
::qTimer:setSingleShot( .t. )
::qTimer:setInterval( 250 )
::connect( ::qTimer, "timeout()", {|| ::execEvent( qTimer_timeOut ) } )
ENDIF
::qTimer:start()
qEvent:ignore()
ENDIF
::lChanging := .f.
ENDIF
ENDIF
CASE nMode == qTimer_timeOut
::oDlg:hide()
::oSys:setToolTip( ::oDlg:oWidget:windowTitle() )
::oSys:show()
CASE nMode == qSystemTrayIcon_close
PostAppEvent( xbeP_Close, NIL, NIL, ::oDlg )
CASE nMode == qSystemTrayIcon_show
::showDlgBySystemTrayIconCommand()
CASE nMode == qSystemTrayIcon_activated
IF p == QSystemTrayIcon_Trigger
::showDlgBySystemTrayIconCommand()
ELSEIF p == QSystemTrayIcon_DoubleClick
ELSEIF p == QSystemTrayIcon_Context
ELSEIF p == QSystemTrayIcon_MiddleClick
ENDIF
ENDCASE
RETURN Self
/*----------------------------------------------------------------------*/
METHOD IdeDocks:showDlgBySystemTrayIconCommand()()
::oSys:hide()
IF hb_bitAnd( ::nPrevWindowState, Qt_WindowMaximized ) == Qt_WindowMaximized
::oDlg:oWidget:showMaximized()
ELSEIF hb_bitAnd( ::nPrevWindowState, Qt_WindowFullScreen ) == Qt_WindowFullScreen
::oDlg:oWidget:showFullScreen()
ELSE
::oDlg:oWidget:showNormal()
ENDIF
::oDlg:oWidget:raise()
::oDlg:oWidget:activateWindow()
RETURN Self
/*----------------------------------------------------------------------*/
METHOD IdeDocks:buildDockWidgets()
::buildProjectTree()
::buildEditorTree()
::buildFuncList()
::buildSkeletonsTree()
::buildHelpWidget()
::buildSkeletonWidget()
::buildFindInFiles()
::buildThemesDock()
::buildPropertiesDock()
::buildEnvironDock()
::buildCompileResults()
::buildLinkResults()
::buildOutputResults()
::buildDocViewer()
::buildDocWriter()
::buildFunctionsDock()
::buildSourceThumbnail()
::buildQScintilla()
::buildUpDownWidget()
/* Bottom Docks */
::oDlg:oWidget:tabifyDockWidget( ::oDockB:oWidget , ::oDockB1:oWidget )
::oDlg:oWidget:tabifyDockWidget( ::oDockB1:oWidget , ::oDockB2:oWidget )
/* Right Docks */
::oDlg:oWidget:tabifyDockWidget( ::oHelpDock:oWidget , ::oDocViewDock:oWidget )
::oDlg:oWidget:tabifyDockWidget( ::oDocViewDock:oWidget , ::oFuncDock:oWidget )
::oDlg:oWidget:tabifyDockWidget( ::oFuncDock:oWidget , ::oFunctionsDock:oWidget )
::oDlg:oWidget:tabifyDockWidget( ::oFunctionsDock:oWidget , ::oPropertiesDock:oWidget )
::oDlg:oWidget:tabifyDockWidget( ::oPropertiesDock:oWidget, ::oEnvironDock:oWidget )
::oDlg:oWidget:tabifyDockWidget( ::oEnvironDock:oWidget , ::oSkeltnDock:oWidget )
::oDlg:oWidget:tabifyDockWidget( ::oSkeltnDock:oWidget , ::oThemesDock:oWidget )
::oDlg:oWidget:tabifyDockWidget( ::oThemesDock:oWidget , ::oFindDock:oWidget )
::oDlg:oWidget:tabifyDockWidget( ::oFindDock:oWidget , ::oDocWriteDock:oWidget )
::oDlg:oWidget:tabifyDockWidget( ::oDocWriteDock:oWidget , ::oSourceThumbnailDock:oWidget )
::oDlg:oWidget:tabifyDockWidget( ::oSourceThumbnailDock:oWidget, ::oQScintillaDock:oWidget )
::buildToolBarPanels()
RETURN Self
/*----------------------------------------------------------------------*/
METHOD IdeDocks:getADockWidget( nAreas, cObjectName, cWindowTitle, nFlags )
LOCAL oDock, nBasic
DEFAULT nFlags TO 0
nBasic := hb_bitOR( QDockWidget_DockWidgetClosable, nFlags )
oDock := XbpWindow():new()
oDock:oWidget := QDockWidget():new( ::oDlg:oWidget )
oDock:oWidget:setObjectName( cObjectName )
::oDlg:addChild( oDock )
oDock:oWidget:setFeatures( nBasic )
oDock:oWidget:setAllowedAreas( nAreas )
oDock:oWidget:setWindowTitle( cWindowTitle )
oDock:oWidget:setFocusPolicy( Qt_NoFocus )
oDock:oWidget:setStyleSheet( getStyleSheet( "QDockWidget", ::nAnimantionMode ) )
oDock:hide()
RETURN oDock
/*----------------------------------------------------------------------*/
METHOD IdeDocks:setView( cView )
LOCAL n, nIndex
SWITCH cView
CASE "New..."
cView := hbide_fetchAString( ::qViewsCombo, cView, "Name the View", "New View" )
IF cView != "New..." .AND. cView != "Stats" .AND. cView != "Main"
IF ascan( ::oINI:aViews, {|e| e == cView } ) > 0
MsgBox( "View: " + cView + ", already exists" )
ELSE
aadd( ::oIde:oINI:aViews, cView )
::oTM:addPanelsMenu( cView )
::buildViewWidget( cView )
::addPanelButton( cView )
::setView( cView )
ENDIF
ENDIF
EXIT
OTHERWISE
IF ( n := ascan( ::aViews, {|o| o:oWidget:objectName() == cView } ) ) > 0
::oIde:cWrkView := cView
IF !( cView == "Stats" )
::oIde:qTabWidget := ::aViews[ n ]:oTabWidget:oWidget
::oIde:oTabParent := ::aViews[ n ]
nIndex := ::oIde:qTabWidget:currentIndex()
IF nIndex + 1 == ::oIde:qTabWidget:count()
IF !( ::oIde:lClosing )
::oIde:qTabWidget:setCurrentIndex( 0 )
::oIde:qTabWidget:setCurrentIndex( nIndex ) /* TODO: Must be last saved */
ENDIF
ENDIF
ENDIF
::oStackedWidget:oWidget:setCurrentIndex( n - 1 )
::setStatusText( SB_PNL_VIEW, ::cWrkView )
ENDIF
EXIT
ENDSWITCH
RETURN NIL
/*----------------------------------------------------------------------*/
METHOD IdeDocks:buildStackedWidget()
/* Its parent will be drawing area and pages will be XbpTabWidgets() */
::oIde:oStackedWidget := XbpWindow():new( ::oDa )
::oStackedWidget:oWidget := QStackedWidget():new( ::oDa:oWidget )
::oStackedWidget:oWidget:setObjectName( "myStackedWidget" )
::oDa:addChild( ::oStackedWidget )
RETURN Self
/*----------------------------------------------------------------------*/
METHOD IdeDocks:buildViewWidget( cObjectName )
LOCAL oFrame, qTBtnClose
oFrame := XbpWindow():new( ::oStackedWidget )
oFrame:oWidget := QWidget():new( ::oStackedWidget:oWidget )
oFrame:oWidget:setObjectName( cObjectName ) /* This will form the basis of showing at top */
::oStackedWidget:addChild( oFrame )
oFrame:hbLayout := HBPLAYOUT_TYPE_VERTBOX
//oFrame:qLayout:setContentsMargins( 2, 2, 2, 2 )
oFrame:qLayout:setContentsMargins( 0,0,0,0 )
oFrame:oTabWidget := XbpTabWidget():new():create( oFrame, , {0,0}, {200,200}, , .t. )
IF !( cObjectName == "Stats" )
qTBtnClose := QToolButton():new()
qTBtnClose:setTooltip( "Close Tab" )
qTBtnClose:setAutoRaise( .t. )
qTBtnClose:setIcon( hbide_image( "closetab" ) )
::connect( qTBtnClose, "clicked()", {|| ::oSM:closeSource() } )
oFrame:oTabWidget:qCornerWidget := qTBtnClose
oFrame:oTabWidget:oWidget:setCornerWidget( qTBtnClose, Qt_TopRightCorner )
ENDIF
oFrame:oTabWidget:oWidget:setUsesScrollButtons( .t. )
oFrame:oTabWidget:oWidget:setMovable( .t. )
aadd( ::oIde:aViews, oFrame )
oFrame:oWidget:show()
oFrame:oTabWidget:oWidget:show()
::oStackedWidget:oWidget:addWidget( oFrame:oWidget )
::setView( cObjectName )
RETURN oFrame
/*----------------------------------------------------------------------*/
METHOD IdeDocks:buildSearchReplaceWidget()
::oIde:oSearchReplace := IdeSearchReplace():new( ::oIde ):create()
::oSearchReplace:oUI:hide()
RETURN Self
/*----------------------------------------------------------------------*/
METHOD IdeDocks:buildUpDownWidget()
::oIde:oUpDn := IdeUpDown():new( ::oIde ):create()
::oUpDn:oUI:hide()
RETURN Self
/*----------------------------------------------------------------------*/
METHOD IdeDocks:buildToolBarPanels()
LOCAL s, qTBtn, a_, aBtns, qAct
LOCAL qSize := QSize():new( 20,20 )
/* Toolbar Panels */
::oIde:qTBarPanels := QToolBar():new()
::qTBarPanels:setStyleSheet( GetStyleSheet( "QToolBarLR5", ::nAnimantionMode ) )
::qTBarPanels:setObjectName( "ToolBar_Panels" )
::qTBarPanels:setWindowTitle( "ToolBar: Editor Panels" )
::qTBarPanels:setAllowedAreas( Qt_LeftToolBarArea + Qt_RightToolBarArea + Qt_TopToolBarArea + Qt_BottomToolBarArea )
::qTBarPanels:setIconSize( qSize )
::oDlg:oWidget:addToolBar( Qt_LeftToolBarArea, ::qTBarPanels )
::addPanelButton( "Main" )
FOR EACH s IN ::oINI:aViews
::addPanelButton( s )
NEXT
/* Toolbar Line Actions */
::oIde:qTBarLines := QToolBar():new()
::qTBarLines:setStyleSheet( GetStyleSheet( "QToolBarLR5", ::nAnimantionMode ) )
::qTBarLines:setObjectName( "ToolBar_Lines" )
::qTBarLines:setWindowTitle( "ToolBar: Lines and Blocks" )
::qTBarLines:setIconSize( qSize )
::qTBarPanels:setAllowedAreas( Qt_LeftToolBarArea + Qt_RightToolBarArea + Qt_TopToolBarArea + Qt_BottomToolBarArea )
::oDlg:oWidget:addToolBar( Qt_LeftToolBarArea, ::qTBarLines )
aBtns := {}
aadd( aBtns, { "movelineup" , "Move Current Line Up" , {|| ::oEM:moveLine( -1 ) } } )
aadd( aBtns, { "movelinedown" , "Move Current Line Down" , {|| ::oEM:moveLine( 1 ) } } )
aadd( aBtns, { "deleteline" , "Delete Current Line" , {|| ::oEM:deleteLine() } } )
aadd( aBtns, { "duplicateline" , "Duplicate Current Line" , {|| ::oEM:duplicateLine() } } )
aadd( aBtns, {} )
#if 0
aadd( aBtns, { "togglelinenumber", "Toggle Line Numbers" , {|| ::oEM:toggleLineNumbers() } } )
aadd( aBtns, { "curlinehilight" , "Toggle Current Line Hilight", {|| ::oEM:toggleCurrentLineHighlightMode() } } )
#endif
aadd( aBtns, { "togglelinenumber", "Toggle Line Numbers" , {|| ::oEM:toggleLineNumbers() } } )
aadd( aBtns, { "horzruler" , "Toggle Horizontal Ruler" , {|| ::oEM:toggleHorzRuler() } } )
aadd( aBtns, { "curlinehilight" , "Toggle Current Line Hilight", {|| ::oEM:toggleCurrentLineHighlightMode() } } )
FOR EACH a_ IN aBtns
IF empty( a_ )
::qTBarLines:addSeparator()
ELSE
qTBtn := QToolButton():new()
qTBtn:setTooltip( a_[ 2 ] )
qTBtn:setIcon( hbide_image( a_[ 1 ] ) )
qTBtn:setMaximumWidth( 20 )
qTBtn:setMaximumHeight( 20 )
IF a_[ 1 ] $ "togglelinenumber,curlinehilight,horzruler"
//qTBtn:setCheckable( .t. )
ENDIF
::connect( qTBtn, "clicked()", a_[ 3 ] )
::qTBarLines:addWidget( qTBtn )
aadd( ::aBtnLines, qTBtn )
ENDIF
NEXT
::qTBarLines:addSeparator()
aBtns := {}
aadd( aBtns, { "toupper" , "To Upper" , {|| ::oEM:convertSelection( "ToUpper" ) } } )
aadd( aBtns, { "tolower" , "To Lower" , {|| ::oEM:convertSelection( "ToLower" ) } } )
aadd( aBtns, { "invertcase" , "Invert Case" , {|| ::oEM:convertSelection( "Invert" ) } } )
aadd( aBtns, {} )
aadd( aBtns, { "blockcomment" , "Block Comment" , {|| ::oEM:blockComment() } } )
aadd( aBtns, { "streamcomment", "Stream Comment" , {|| ::oEM:streamComment() } } )
aadd( aBtns, {} )
aadd( aBtns, { "blockindentr" , "Indent Right" , {|| ::oEM:indent( 1 ) } } )
aadd( aBtns, { "blockindentl" , "Indent Left" , {|| ::oEM:indent( -1 ) } } )
aadd( aBtns, {} )
aadd( aBtns, { "sgl2dblquote" , "Single to Double Quotes", {|| ::oEM:convertDQuotes() } } )
aadd( aBtns, { "dbl2sglquote" , "Double to Single Quotes", {|| ::oEM:convertQuotes() } } )
FOR EACH a_ IN aBtns
IF empty( a_ )
::qTBarLines:addSeparator()
ELSE
qTBtn := QToolButton():new()
qTBtn:setTooltip( a_[ 2 ] )
qTBtn:setIcon( hbide_image( a_[ 1 ] ) )
qTBtn:setMaximumWidth( 20 )
qTBtn:setMaximumHeight( 20 )
::connect( qTBtn, "clicked()", a_[ 3 ] )
::qTBarLines:addWidget( qTBtn )
aadd( ::aBtnLines, qTBtn )
ENDIF
NEXT
::qTBarLines:addSeparator()
/* Right-hand docks toolbar */
::oIde:qTBarDocks := QToolBar():new()
::qTBarDocks:setStyleSheet( GetStyleSheet( "QToolBarLR5", ::nAnimantionMode ) )
::qTBarDocks:setObjectName( "ToolBar_Docks" )
::qTBarDocks:setWindowTitle( "ToolBar: Dockable Widgets" )
::qTBarDocks:setIconSize( qSize )
::qTBarDocks:setToolButtonStyle( Qt_ToolButtonIconOnly )
::qTBarDocks:setAllowedAreas( Qt_LeftToolBarArea + Qt_RightToolBarArea + Qt_TopToolBarArea + Qt_BottomToolBarArea )
aBtns := {}
aadd( aBtns, { ::oDockPT , "projtree" } )
aadd( aBtns, { ::oDockED , "editstree" } )
aadd( aBtns, { ::oSkltnsTreeDock, "projtree" } )
aadd( aBtns, {} )
aadd( aBtns, { ::oHelpDock , "help" } )
aadd( aBtns, { ::oDocViewDock , "harbourhelp" } )
aadd( aBtns, { ::oDocWriteDock , "docwriter" } )
aadd( aBtns, { ::oFuncDock , "dc_function" } )
aadd( aBtns, { ::oFunctionsDock , "ffn" } )
aadd( aBtns, { ::oPropertiesDock, "properties" } )
aadd( aBtns, { ::oEnvironDock , "envconfig" } )
aadd( aBtns, { ::oSkeltnDock , "codeskeletons" } )
aadd( aBtns, { ::oThemesDock , "syntaxhiliter" } )
aadd( aBtns, { ::oFindDock , "search" } )
aadd( aBtns, {} )
aadd( aBtns, { ::oDockB2 , "builderror" } )
FOR EACH a_ IN aBtns
IF empty( a_ )
::qTBarDocks:addSeparator()
ELSE
qAct := QAction():from( a_[ 1 ]:oWidget:toggleViewAction() )
qAct:setIcon( hbide_image( a_[ 2 ] ) )
::qTBarDocks:addAction( qAct )
aadd( ::aBtnDocks, qAct )
ENDIF
NEXT
::oDlg:oWidget:addToolBar( Qt_RightToolBarArea, ::qTBarDocks )
/* User defined toolbars via Tools & Utilities */
::oTM:buildUserToolbars()
RETURN Self
/*----------------------------------------------------------------------*/
METHOD IdeDocks:disblePanelButton( qTBtn )
LOCAL q
FOR EACH q IN ::aPanels
q:setEnabled( !( q == qTBtn ) )
NEXT
RETURN Self
/*----------------------------------------------------------------------*/
METHOD IdeDocks:getPanelIcon( cView )
LOCAL n
IF ( n := ascan( ::aPanels, {|q| q:text() == cView } ) ) > 0
RETURN hbide_image( "panel_" + hb_ntos( n ) )
ENDIF
RETURN ""
/*----------------------------------------------------------------------*/
METHOD IdeDocks:addPanelButton( cPanel )
LOCAL qTBtn
STATIC nIndex := 0
nIndex++
qTBtn := QToolButton():new()
qTBtn:setMaximumHeight( 20 )
qTBtn:setMaximumWidth( 20 )
qTBtn:setText( cPanel )
qTBtn:setTooltip( "Panel: " + cPanel )
qTBtn:setIcon( hbide_image( "panel_" + hb_ntos( nIndex ) ) )
aadd( ::aPanels, qTBtn )
::qTBarPanels:addWidget( qTBtn )
::connect( qTBtn, "clicked()", {|| ::setView( cPanel ) } )
nIndex := iif( nIndex >= 7, 0, nIndex )
IF !empty( ::qViewsCombo )
::qViewsCombo:setCurrentIndex( len( ::aPanels ) + 1 )
endif
RETURN Self
/*----------------------------------------------------------------------*/
METHOD IdeDocks:buildProjectTree()
LOCAL i, oItem
LOCAL nAreas := Qt_LeftDockWidgetArea + Qt_RightDockWidgetArea + Qt_TopDockWidgetArea + Qt_BottomDockWidgetArea
::oIde:oDockPT := ::getADockWidget( nAreas, "dockProjectTree", "Projects", QDockWidget_DockWidgetFloatable )
::oDlg:oWidget:addDockWidget_1( Qt_LeftDockWidgetArea, ::oDockPT:oWidget, Qt_Vertical )
::oIde:oProjTree := XbpTreeView():new()
::oProjTree:hasLines := .T.
::oProjTree:hasButtons := .T.
::oProjTree:create( ::oDockPT, , { 0,0 }, { 100,10 }, , .t. )
::oProjTree:setStyleSheet( GetStyleSheet( "QTreeWidgetHB", ::nAnimantionMode ) )
::oProjTree:oWidget:setMinimumWidth( 100 )
::oProjTree:oWidget:setSizePolicy_1( QSizePolicy_MinimumExpanding, QSizePolicy_Preferred )
::oProjTree:oWidget:setIconSize( QSize():new( 12,12 ) )
::oProjTree:oWidget:setIndentation( 12 )
* ::oProjTree:itemMarked := {|oItem| ::manageItemSelected( 0, oItem ), ::oCurProjItem := oItem }
::oProjTree:itemMarked := {|oItem| ::oIde:oCurProjItem := oItem } //, ::oIde:manageFocusInEditor() }
::oProjTree:itemSelected := {|oItem| ::oIde:manageItemSelected( oItem ) }
::oProjTree:hbContextMenu := {|mp1, mp2, oXbp| ::oIde:manageProjectContext( mp1, mp2, oXbp ) }
::oIde:oProjRoot := ::oProjTree:rootItem:addItem( "Projects" )
oItem := ::oProjRoot:addItem( "Executables" )
oItem:oWidget:setIcon( 0, hbide_image( "fl_exe" ) )
aadd( ::aProjData, { oItem, "Executables", ::oProjRoot, NIL, NIL } )
oItem := ::oProjRoot:addItem( "Libs" )
oItem:oWidget:setIcon( 0, hbide_image( "fl_lib" ) )
aadd( ::aProjData, { oItem, "Libs" , ::oProjRoot, NIL, NIL } )
oItem := ::oProjRoot:addItem( "Dlls" )
oItem:oWidget:setIcon( 0, hbide_image( "fl_dll" ) )
aadd( ::aProjData, { oItem, "Dlls" , ::oProjRoot, NIL, NIL } )
::oProjRoot:expand( .t. )
//
FOR i := 1 TO len( ::aProjects )
::oIde:updateProjectTree( ::aProjects[ i, 3 ] )
NEXT
/* Insert Project Tree Into Dock Widget */
::oDockPT:oWidget:setWidget( ::oProjTree:oWidget )
::oDockPT:hide()
RETURN Self
/*----------------------------------------------------------------------*/
METHOD IdeDocks:buildEditorTree()
LOCAL nAreas := Qt_LeftDockWidgetArea + Qt_RightDockWidgetArea + Qt_TopDockWidgetArea + Qt_BottomDockWidgetArea
::oIde:oDockED := ::getADockWidget( nAreas, "dockEditorTabs", "Editors", QDockWidget_DockWidgetFloatable )
::oDlg:oWidget:addDockWidget_1( Qt_LeftDockWidgetArea, ::oDockED:oWidget, Qt_Vertical )
::oIde:oEditTree := XbpTreeView():new()
::oEditTree:hasLines := .T.
::oEditTree:hasButtons := .T.
::oEditTree:create( ::oDockED, , { 0,0 }, { 100,10 }, , .t. )
::oEditTree:oWidget:setSizePolicy_1( QSizePolicy_MinimumExpanding, QSizePolicy_Preferred )
::oEditTree:oWidget:setMinimumWidth( 100 )
::oEditTree:oWidget:setIconSize( QSize():new( 12,12 ) )
::oEditTree:oWidget:setIndentation( 12 )
* ::oEditTree:oWidget:setRootIsDecorated( .f. )
* ::oEditTree:itemMarked := {|oItem| ::manageItemSelected( 0, oItem ), ::oCurProjItem := oItem }
::oEditTree:itemMarked := {|oItem| ::oIde:oCurProjItem := oItem }
::oEditTree:itemSelected := {|oItem| ::oIde:manageItemSelected( oItem ) }
::oEditTree:hbContextMenu := {|mp1, mp2, oXbp| ::oIde:manageProjectContext( mp1, mp2, oXbp ) }
::oIde:oOpenedSources := ::oEditTree:rootItem:addItem( "Editors" )
::oOpenedSources:expand( .t. )
/* Insert Project Tree Into Dock Widget */
::oDockED:oWidget:setWidget( ::oEditTree:oWidget )
::oDockED:hide()
RETURN Self
/*----------------------------------------------------------------------*/
METHOD IdeDocks:buildSkeletonsTree()
LOCAL nAreas := Qt_LeftDockWidgetArea + Qt_RightDockWidgetArea + Qt_TopDockWidgetArea + Qt_BottomDockWidgetArea
::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 ) } )
RETURN Self
/*----------------------------------------------------------------------*/
METHOD IdeDocks:buildFuncList()
LOCAL nAreas := Qt_LeftDockWidgetArea + Qt_RightDockWidgetArea + Qt_TopDockWidgetArea + Qt_BottomDockWidgetArea
::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 ) } )
::oIde:oFuncList := XbpListBox():new( ::oFuncDock ):create( , , { 0,0 }, { 100,400 }, , .t. )
::oFuncList:oWidget:setEditTriggers( QAbstractItemView_NoEditTriggers )
//::oFuncList:ItemMarked := {|mp1, mp2, oXbp| ::gotoFunction( mp1, mp2, oXbp ) }
::oFuncList:ItemSelected := {|mp1, mp2, oXbp| ::oIde:gotoFunction( mp1, mp2, oXbp ) }
/* Harbour Extension : prefixed with "hb" */
::oFuncList:hbContextMenu := {|mp1, mp2, oXbp| ::oIde:manageFuncContext( mp1, mp2, oXbp ) }
::oFuncDock:oWidget:setWidget( ::oFuncList:oWidget )
RETURN Self
/*----------------------------------------------------------------------*/
METHOD IdeDocks:buildHelpWidget()
LOCAL qUrl, qStr
::oIde:oHelpDock := ::getADockWidget( Qt_RightDockWidgetArea, "dockHelp", "hbIDE Help", QDockWidget_DockWidgetFloatable )
::oDlg:oWidget:addDockWidget_1( Qt_RightDockWidgetArea, ::oHelpDock:oWidget, Qt_Horizontal )
::oIde:qHelpBrw := QTextBrowser():new( ::oHelpDock:oWidget )
::qHelpBrw:show()
::qHelpBrw:setContextMenuPolicy( Qt_CustomContextMenu )
::qHelpBrw:setOpenExternalLinks( .t. )
qUrl := QUrl():new( "idemainpage.html" )
qStr := QStringList():new()
qStr:append( hb_dirBase() + "docs" )
::qHelpBrw:setSearchPaths( qStr )
::qHelpBrw:setSource( qUrl )
::oHelpDock:oWidget:setWidget( ::oIde:qHelpBrw )
::oHelpDock:connect( ::qHelpBrw, "customContextMenuRequested(QPoint)", {|p| ::execEvent( 2, p ) } )
::connect( ::oHelpDock:oWidget, "visibilityChanged(bool)", {|p| ::execEvent( dockHelpDock_visibilityChanged, p ) } )
RETURN Self
/*----------------------------------------------------------------------*/
METHOD IdeDocks:buildCompileResults()
::oIde:oDockB := ::getADockWidget( Qt_BottomDockWidgetArea, "dockCompileResults", "Compile Results" )
::oDlg:oWidget:addDockWidget_1( Qt_BottomDockWidgetArea, ::oDockB:oWidget, Qt_Horizontal )
::oIde:oCompileResult := XbpMLE():new( ::oDockB ):create( , , { 0,0 }, { 100,400 }, , .t. )
::oDockB:oWidget:setWidget( ::oCompileResult:oWidget )
RETURN Self
/*----------------------------------------------------------------------*/
METHOD IdeDocks:buildLinkResults()
::oIde:oDockB1 := ::getADockWidget( Qt_BottomDockWidgetArea, "dockLinkResults", "Link Results" )
::oDlg:oWidget:addDockWidget_1( Qt_BottomDockWidgetArea, ::oDockB1:oWidget, Qt_Horizontal )
::oIde:oLinkResult := XbpMLE():new( ::oDockB1 ):create( , , { 0,0 }, { 100, 400 }, , .T. )
::oDockB1:oWidget:setWidget( ::oLinkResult:oWidget )
RETURN Self
/*----------------------------------------------------------------------*/
METHOD IdeDocks:buildOutputResults()
LOCAL nAreas := Qt_TopDockWidgetArea + Qt_BottomDockWidgetArea
::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. )
::oOutputResult:oWidget:setAcceptRichText( .T. )
::oOutputResult:oWidget:setReadOnly( .T. )
::oDockB2:oWidget:setWidget( ::oOutputResult:oWidget )
::connect( ::oIde:oOutputResult:oWidget, "copyAvailable(bool)", {|l| ::outputDoubleClicked( l ) } )
RETURN Self
/*----------------------------------------------------------------------*/
METHOD IdeDocks:outputDoubleClicked( lSelected )
LOCAL qCursor, cText
LOCAL cSource, nLine
IF lSelected
qCursor := QTextCursor():configure( ::oOutputResult:oWidget:textCursor() )
cText := QTextBlock():configure( qCursor:block() ):text()
IF hbide_parseFNfromStatusMsg( cText, @cSource, @nLine, .T. )
IF ::oSM:editSource( cSource, 0, 0, 0, NIL, NIL, .f., .t. )
qCursor := QTextCursor():configure( ::oIde:qCurEdit:textCursor() )
nLine := iif( nLine < 1, 0, nLine - 1 )
qCursor:setPosition( 0 )
qCursor:movePosition( QTextCursor_Down, QTextCursor_MoveAnchor, nLine )
::oIde:qCurEdit:setTextCursor( qCursor )
::oIde:qCurEdit:centerCursor()
::oIde:manageFocusInEditor()
ENDIF
ENDIF
ENDIF
RETURN nLine
/*----------------------------------------------------------------------*/
METHOD IdeDocks:buildStatusBar()
LOCAL i
::oIde:oSBar := XbpStatusBar():new()
::oSBar:create( ::oDlg, , { 0,0 }, { ::oDlg:currentSize()[ 1 ], 30 } )
::oSBar:oWidget:showMessage( "" )
::oSBar:oWidget:setStyleSheet( GetStyleSheet( "QStatusBar", ::nAnimantionMode ) )
::oSBar:getItem( SB_PNL_MAIN ):autosize := XBPSTATUSBAR_AUTOSIZE_SPRING
::oSBar:addItem( "", , , , "Ready" ):oWidget:setMinimumWidth( 40 )
::oSBar:addItem( "", , , , "Line" ):oWidget:setMinimumWidth( 110 )
::oSBar:addItem( "", , , , "Column" ):oWidget:setMinimumWidth( 40 )
::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( "", , , , "Encoding" ):oWidget:setMinimumWidth( 20 )
::oSBar:addItem( "", , , , "Environ" ):oWidget:setMinimumWidth( 20 )
::oSBar:addItem( "", , , , "View" ):oWidget:setMinimumWidth( 20 )
::oSBar:addItem( "", , , , "Project" ):oWidget:setMinimumWidth( 20 )
::oSBar:addItem( "", , , , "Theme" ):oWidget:setMinimumWidth( 20 )
FOR i := 1 TO 6
::oSBar:oWidget:addWidget( ::getMarkWidget( i ) )
NEXT
RETURN Self
/*----------------------------------------------------------------------*/
METHOD IdeDocks:buildThemesDock()
LOCAL nAreas := Qt_LeftDockWidgetArea + Qt_RightDockWidgetArea + Qt_TopDockWidgetArea + Qt_BottomDockWidgetArea
::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 ) } )
RETURN Self
/*----------------------------------------------------------------------*/
METHOD IdeDocks:buildPropertiesDock()
LOCAL nAreas := Qt_LeftDockWidgetArea + Qt_RightDockWidgetArea + Qt_TopDockWidgetArea + Qt_BottomDockWidgetArea
::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 ) } )
RETURN Self
/*----------------------------------------------------------------------*/
METHOD IdeDocks:buildFindInFiles()
LOCAL nAreas := Qt_LeftDockWidgetArea + Qt_RightDockWidgetArea + Qt_TopDockWidgetArea + Qt_BottomDockWidgetArea
::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 ) } )
RETURN Self
/*----------------------------------------------------------------------*/
METHOD IdeDocks:buildDocViewer()
LOCAL nAreas := Qt_LeftDockWidgetArea + Qt_RightDockWidgetArea + Qt_TopDockWidgetArea + Qt_BottomDockWidgetArea
::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 ) } )
RETURN Self
/*----------------------------------------------------------------------*/
METHOD IdeDocks:buildDocWriter()
LOCAL nAreas := Qt_LeftDockWidgetArea + Qt_RightDockWidgetArea + Qt_TopDockWidgetArea + Qt_BottomDockWidgetArea
::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 ) } )
RETURN Self
/*----------------------------------------------------------------------*/
METHOD IdeDocks:buildFunctionsDock()
LOCAL nAreas := Qt_LeftDockWidgetArea + Qt_RightDockWidgetArea + Qt_TopDockWidgetArea + Qt_BottomDockWidgetArea
::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 ) } )
RETURN Self
/*----------------------------------------------------------------------*/
METHOD IdeDocks:buildEnvironDock()
LOCAL nAreas := Qt_LeftDockWidgetArea + Qt_RightDockWidgetArea + Qt_TopDockWidgetArea + Qt_BottomDockWidgetArea
::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 ) } )
RETURN Self
/*----------------------------------------------------------------------*/
METHOD IdeDocks:buildSkeletonWidget()
LOCAL nAreas := Qt_LeftDockWidgetArea + Qt_RightDockWidgetArea + Qt_TopDockWidgetArea + Qt_BottomDockWidgetArea
::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 ) } )
RETURN Self
/*----------------------------------------------------------------------*/
METHOD IdeDocks:buildSourceThumbnail()
LOCAL nAreas := Qt_LeftDockWidgetArea + Qt_RightDockWidgetArea + Qt_TopDockWidgetArea + Qt_BottomDockWidgetArea
::oIde:oSourceThumbnailDock := ::getADockWidget( nAreas, "dockSourceThumbnail", "Source Thumbnail", QDockWidget_DockWidgetFloatable )
::oDlg:oWidget:addDockWidget_1( Qt_RightDockWidgetArea, ::oSourceThumbnailDock:oWidget, Qt_Horizontal )
::connect( ::oSourceThumbnailDock:oWidget, "visibilityChanged(bool)", {|p| ::execEvent( dockSourceThumbnail_visibilityChanged, p ) } )
RETURN Self
/*----------------------------------------------------------------------*/
METHOD IdeDocks:buildQScintilla()
LOCAL nAreas := Qt_LeftDockWidgetArea + Qt_RightDockWidgetArea + Qt_TopDockWidgetArea + Qt_BottomDockWidgetArea
::oIde:oQScintillaDock := ::getADockWidget( nAreas, "dockQScintilla", "QScintilla Widget", QDockWidget_DockWidgetFloatable )
::oDlg:oWidget:addDockWidget_1( Qt_RightDockWidgetArea, ::oQScintillaDock:oWidget, Qt_Horizontal )
::connect( ::oQScintillaDock:oWidget, "visibilityChanged(bool)", {|p| ::execEvent( dockQScintilla_visibilityChanged, p ) } )
RETURN Self
/*----------------------------------------------------------------------*/
METHOD IdeDocks:setStatusText( nPart, xValue )
LOCAL oPanel := ::oSBar:getItem( nPart )
SWITCH nPart
CASE SB_PNL_MAIN
oPanel:caption := '<font color="2343212"><b>' + xValue + "</b></font>"
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
oPanel:caption := iif( empty( xValue ), "St", xValue )
EXIT
CASE SB_PNL_EDIT
EXIT
CASE SB_PNL_SEARCH
oPanel:caption := "Find: " + xValue
EXIT
CASE SB_PNL_CODEC
xValue := iif( empty( xValue ), "default", xValue )
oPanel:caption := "<font color = brown >Encoding: " + xValue + "</font>"
EXIT
CASE SB_PNL_ENVIRON
xValue := iif( empty( xValue ), "default", xValue )
oPanel:caption := "<font color = blue >Env: " + xValue + "</font>"
EXIT
CASE SB_PNL_VIEW
oPanel:caption := "<font color = green >View: " + xValue + "</font>"
EXIT
CASE SB_PNL_PROJECT
xValue := iif( empty( xValue ), "none", xValue )
oPanel:caption := "<font color = darkred >Proj: " + xValue + "</font>"
EXIT
CASE SB_PNL_THEME
xValue := iif( empty( xValue ), "Bare Minimum", xValue )
oPanel:caption := "<font color = blue >Theme: " + xValue + "</font>"
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 )" }
::oIde:aMarkTBtns[ nIndex ] := QToolButton():new()
::oIde:aMarkTBtns[ nIndex ]:setMaximumHeight( 12 )
::oIde:aMarkTBtns[ nIndex ]:setMaximumWidth( 12 )
::oIde:aMarkTBtns[ nIndex ]:setStyleSheet( "background-color: " + aColors[ nIndex ] + ";" )
::oIde:aMarkTBtns[ nIndex ]:hide()
::connect( ::oIde:aMarkTBtns[ nIndex ], "clicked()", {|| ::oEM:gotoMark( nIndex ) } )
RETURN ::oIde:aMarkTBtns[ nIndex ]
/*----------------------------------------------------------------------*/
METHOD IdeDocks:animateComponents( nMode )
LOCAL cStyle
IF nMode == NIL
::oIde:nAnimantionMode := iif( ::nAnimantionMode == HBIDE_ANIMATION_NONE, HBIDE_ANIMATION_GRADIENT, HBIDE_ANIMATION_NONE )
nMode := ::nAnimantionMode
ENDIF
::oIde:nAnimantionMode := nMode
::oIde:oINI:cIdeAnimated := hb_ntos( ::nAnimantionMode )
::oDlg:menubar():setStyleSheet( GetStyleSheet( "QMenuBar", nMode ) )
::qTBarPanels:setStyleSheet( GetStyleSheet( "QToolBarLR5", nMode ) )
::qTBarLines:setStyleSheet( GetStyleSheet( "QToolBarLR5", nMode ) )
::qTBarDocks:setStyleSheet( GetStyleSheet( "QToolBarLR5", nMode ) )
::oMainToolbar:setStyleSheet( GetStyleSheet( "QToolBar", nMode ) )
::oSBar:oWidget:setStyleSheet( GetStyleSheet( "QStatusBar", nMode ) )
cStyle := GetStyleSheet( "QDockWidget", nMode )
::oDockPT:oWidget :setStyleSheet( cStyle )
::oDockED:oWidget :setStyleSheet( cStyle )
::oSkltnsTreeDock:oWidget:setStyleSheet( cStyle )
::oHelpDock:oWidget :setStyleSheet( cStyle )
::oDocViewDock:oWidget :setStyleSheet( cStyle )
::oDocWriteDock:oWidget :setStyleSheet( cStyle )
::oFuncDock:oWidget :setStyleSheet( cStyle )
::oFunctionsDock:oWidget :setStyleSheet( cStyle )
::oPropertiesDock:oWidget:setStyleSheet( cStyle )
::oEnvironDock:oWidget :setStyleSheet( cStyle )
::oSkeltnDock:oWidget :setStyleSheet( cStyle )
::oThemesDock:oWidget :setStyleSheet( cStyle )
::oFindDock:oWidget :setStyleSheet( cStyle )
::oDockB2:oWidget :setStyleSheet( cStyle )
#if 1
// should be iteration
::qTabWidget:setStyleSheet( GetStyleSheet( "QTabWidget", nMode ) )
#endif
RETURN Self
/*----------------------------------------------------------------------*/