+ contrib/hbide/format.ui
+ Added: dock-widget populated .ui to manage code formatting.
* contrib/hbide/setup.ui
+ Added: <Setup><hbIDE Setup><Formatting> page which contains slots
to define hbFormat specific settings ( work-in-progress ).
* contrib/hbide/hbide.hbp
+ Added: ideformat.prg
: thbformt.prg
: format.ui
* contrib/hbide/ideactions.prg
+ Implemented: <Edit><Format><Format Source> menu prompt which
invokes "Formatting" dock-widget at the right hosting all
attributes of a tearable dock-widget as usual.
* contrib/hbide/idedocks.prg
* contrib/hbide/idemain.prg
* contrib/hbide/idemisc.prg
* contrib/hbide/ideobject.prg
* contrib/hbide/idesaveload.prg
+ contrib/hbide/ideformat.prg
+ Added: "Formatting Manger" class to handle formatting steps.
+ contrib/hbide/thbformt.prg
+ Added: Stripped version of utils/hbformat/hbFormat.prg which
will be placed as a lib in contrib/hbformat once its functionality
gets matured. I have added few more methods which are scheduled
to be implemented in hbIDE interface. As of current, its
working is exactly the same as original taking use of default
swtches.
hbIDE will now onwards be able to format sources on the fly and
with visual interface to present the formatted source for review
before swapping it into current editing instance. Right now it just
displays the source for review. I will be waiting groups comments
before proceeding which direction it should take.
Also note that currently formatting is done with default switches.
Slots are arranged in <setup><Formatting> page. In the coming days
those will come into effect. Placeholder will be hbide.ini itself
instead of hbformat.ini.
Please go through the process quickly and let me know if interface
needs any improvements.
1971 lines
78 KiB
Plaintext
1971 lines
78 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 "hbqtgui.ch"
|
|
|
|
/*----------------------------------------------------------------------*/
|
|
|
|
CLASS IdeDocks INHERIT IdeObject
|
|
|
|
DATA nPass INIT 0
|
|
DATA aPanels INIT {}
|
|
DATA aMdiBtns INIT {}
|
|
DATA aBtnLines INIT {}
|
|
DATA aBtnDocks INIT {}
|
|
DATA oBtnTabClose
|
|
|
|
DATA qMdiToolBar
|
|
DATA qMdiToolBarL
|
|
DATA aViewsInfo INIT {}
|
|
DATA nViewStyle INIT 0
|
|
|
|
DATA qTBtnClose
|
|
|
|
DATA lChanging INIT .f.
|
|
|
|
DATA qTimer
|
|
DATA nPrevWindowState INIT Qt_WindowNoState
|
|
DATA lSystemTrayAvailable INIT .f.
|
|
DATA lMinimizeInSystemTray INIT .t. // .f.
|
|
DATA qAct1
|
|
DATA qAct2
|
|
|
|
METHOD new( oIde )
|
|
METHOD create( oIde )
|
|
METHOD destroy()
|
|
METHOD execEvent( cEvent, p, p1 )
|
|
METHOD setView( cView )
|
|
METHOD buildToolBarPanels()
|
|
METHOD buildHelpWidget()
|
|
METHOD buildSkeletonWidget()
|
|
METHOD buildDialog()
|
|
METHOD buildViewWidget( cView )
|
|
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, cEventVisibility )
|
|
METHOD getPanelIcon( cView )
|
|
METHOD animateComponents( nMode )
|
|
METHOD buildSourceThumbnail()
|
|
METHOD buildQScintilla()
|
|
METHOD buildUpDownWidget()
|
|
METHOD buildReportsDesignerWidget()
|
|
METHOD buildSystemTray()
|
|
METHOD showDlgBySystemTrayIconCommand()
|
|
METHOD setViewInitials()
|
|
METHOD buildMdiToolbar()
|
|
METHOD buildMdiToolbarLeft()
|
|
METHOD getEditorPanelsInfo()
|
|
METHOD restPanelsGeometry()
|
|
METHOD savePanelsGeometry()
|
|
METHOD stackVertically()
|
|
METHOD stackHorizontally()
|
|
METHOD stackMaximized()
|
|
METHOD stackZoom( nMode )
|
|
METHOD restState( nMode )
|
|
METHOD setButtonState( cButton, lChecked )
|
|
METHOD buildFormatWidget()
|
|
|
|
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)" )
|
|
::disconnect( ::oReportsManagerDock:oWidget , "visibilityChanged(bool)" )
|
|
::disconnect( ::oFormatDock: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 ::aMdiBtns
|
|
::disconnect( qTBtn, "clicked()" )
|
|
qTBtn := NIL
|
|
NEXT
|
|
|
|
FOR EACH qTBtn IN ::oIde:aMarkTBtns
|
|
::disconnect( qTBtn, "clicked()" )
|
|
NEXT
|
|
|
|
RETURN Self
|
|
|
|
/*------------------------------------------------------------------------*/
|
|
|
|
METHOD IdeDocks:getEditorPanelsInfo()
|
|
LOCAL b_, a_:= {}
|
|
FOR EACH b_ IN ::aViewsInfo
|
|
IF ::oIde:lCurEditsMdi
|
|
aadd( a_, b_[ 1 ] + "," + ;
|
|
iif( empty( b_[ 2 ] ), "", hbide_nArray2String( { b_[ 2 ]:x(), b_[ 2 ]:y(), b_[ 2 ]:width(), b_[ 2 ]:height() } ) ) + "," + ;
|
|
hb_ntos( b_[ 3 ] ) + "," + hb_ntos( b_[ 4 ] ) + "," + ;
|
|
hb_ntos( ::oStackedWidget:oWidget:viewMode() ) + "," + hb_ntos( ::nViewStyle ) + "," ;
|
|
)
|
|
ELSE
|
|
aadd( a_, b_[ 1 ] + "," + ;
|
|
iif( empty( b_[ 2 ] ), "", hbide_nArray2String( { b_[ 2 ]:x(), b_[ 2 ]:y(), b_[ 2 ]:width(), b_[ 2 ]:height() } ) ) + "," + ;
|
|
hb_ntos( b_[ 3 ] ) + "," + hb_ntos( b_[ 4 ] ) + "," + ;
|
|
hb_ntos( b_[ 5 ] ) + "," + hb_ntos( b_[ 6 ] ) + "," ;
|
|
)
|
|
ENDIF
|
|
NEXT
|
|
RETURN a_
|
|
|
|
/*------------------------------------------------------------------------*/
|
|
|
|
METHOD IdeDocks:buildDialog()
|
|
LOCAL s, aSize, a_, lTiled := .t., x_
|
|
|
|
::oIde:oDlg := XbpDialog():new()
|
|
::oDlg:icon := hbide_image( "hbide" )
|
|
::oDlg:title := "Harbour IDE"
|
|
::oDlg:qtObject := hbide_getUI( "mainwindow" )
|
|
::oDlg:create( , , , , , .f. )
|
|
|
|
::oDlg:setStyleSheet( GetStyleSheet( "QMainWindow", ::nAnimantionMode ) )
|
|
|
|
::oDlg:close := {|| hbide_setClose( hbide_getYesNo( "hbIDE is about to be closed!", "Are you sure?" ) ) }
|
|
::oDlg:setDockOptions( QMainWindow_AllowTabbedDocks + QMainWindow_ForceTabbedDocks )
|
|
::oDlg:setTabPosition( Qt_BottomDockWidgetArea, QTabWidget_South )
|
|
::oDlg:setCorner( Qt_BottomLeftCorner, Qt_LeftDockWidgetArea )
|
|
::oDlg:setCorner( Qt_BottomRightCorner, Qt_RightDockWidgetArea )
|
|
::oDlg:oWidget:resize( 950,520 )
|
|
|
|
::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()
|
|
::oIde:qLayout:setContentsMargins( 0,0,0,0 )
|
|
::oIde:qLayout:setHorizontalSpacing( 0 )
|
|
::oIde:qLayout:setVerticalSpacing( 0 )
|
|
//
|
|
::oDa:setLayout( ::qLayout )
|
|
|
|
IF ::oIde:lCurEditsMdi
|
|
::buildMdiToolbar()
|
|
::qLayout:addWidget( ::qMdiToolbar:oWidget , 0, 0, 1, 2 )
|
|
::buildMdiToolbarLeft()
|
|
::qLayout:addWidget( ::qMdiToolbarL:oWidget , 1, 0, 1, 1 )
|
|
::buildStackedWidget()
|
|
::qLayout:addWidget( ::oStackedWidget:oWidget, 1, 1, 1, 1 )
|
|
::buildSearchReplaceWidget()
|
|
::qLayout:addWidget( ::oSearchReplace:oUI , 2, 0, 1, 2 )
|
|
ELSE
|
|
::buildStackedWidget()
|
|
::qLayout:addWidget( ::oStackedWidget:oWidget, 0, 0, 1, 1 )
|
|
::buildSearchReplaceWidget()
|
|
::qLayout:addWidget( ::oSearchReplace:oUI , 1, 0, 1, 1 )
|
|
ENDIF
|
|
|
|
/* Normalize Views */
|
|
FOR EACH s IN ::oINI:aViews
|
|
a_:= hb_aTokens( s, "," )
|
|
asize( a_, 6 )
|
|
IF ! empty( a_[ 2 ] )
|
|
a_[ 2 ] := hbide_array2Rect( hbide_string2nArray( a_[ 2 ] ) )
|
|
lTiled := .f.
|
|
ENDIF
|
|
DEFAULT a_[ 3 ] TO "0"
|
|
DEFAULT a_[ 4 ] TO "0"
|
|
DEFAULT a_[ 5 ] TO hb_ntos( QMdiArea_TabbedView )
|
|
DEFAULT a_[ 6 ] TO "0"
|
|
a_[ 3 ] := val( a_[ 3 ] )
|
|
a_[ 4 ] := val( a_[ 4 ] )
|
|
a_[ 5 ] := val( a_[ 5 ] )
|
|
a_[ 6 ] := val( a_[ 6 ] )
|
|
aadd( ::aViewsInfo, a_ )
|
|
NEXT
|
|
IF ascan( ::aViewsInfo, {|e_| e_[ 1 ] == "Main" } ) == 0
|
|
hb_ains( ::aViewsInfo, 1, { "Main", NIL, 0, 0, QMdiArea_TabbedView, 0 }, .t. )
|
|
ENDIF
|
|
IF ascan( ::aViewsInfo, {|e_| e_[ 1 ] == "Stats" } ) == 0
|
|
hb_ains( ::aViewsInfo, 1, { "Stats", NIL, 0, 0, QMdiArea_TabbedView, 0 }, .t. )
|
|
ENDIF
|
|
|
|
/* View Panels */
|
|
x_:= aclone( ::aViewsInfo )
|
|
FOR EACH a_ IN ::aViewsInfo
|
|
::buildViewWidget( a_[ 1 ] )
|
|
NEXT
|
|
IF ::oIde:lCurEditsMdi
|
|
IF lTiled
|
|
::oStackedWidget:tileSubWindows()
|
|
ENDIF
|
|
ENDIF
|
|
::setView( "Stats" ) /* Always call with name */
|
|
|
|
IF ::oIde:lCurEditsMdi
|
|
IF x_[ 1,5 ] == QMdiArea_TabbedView
|
|
::oStackedWidget:setViewMode( QMdiArea_TabbedView )
|
|
ENDIF
|
|
|
|
IF x_[ 1,6 ] == 1
|
|
::oStackedWidget:tileSubWindows()
|
|
ELSEIF x_[ 1,6 ] == 2
|
|
::oStackedWidget:cascadeSubWindows()
|
|
ELSEIF x_[ 1,6 ] == 3
|
|
::stackMaximized()
|
|
ELSE
|
|
FOR EACH a_ IN x_
|
|
IF !empty( a_[ 2 ] )
|
|
::oIde:aMdies[ a_:__enumIndex() ]:setGeometry( a_[ 2 ] )
|
|
ENDIF
|
|
::oIde:aMdies[ a_:__enumIndex() ]:setWindowState( a_[ 4 ] )
|
|
NEXT
|
|
ENDIF
|
|
ENDIF
|
|
|
|
::oDlg:oWidget:connect( QEvent_WindowStateChange, {|e| ::execEvent( "QEvent_WindowStateChange", e ) } )
|
|
::oDlg:oWidget:connect( QEvent_Hide , {|e| ::execEvent( "QEvent_Hide" , e ) } )
|
|
|
|
::buildSystemTray()
|
|
|
|
RETURN Self
|
|
|
|
/*----------------------------------------------------------------------*/
|
|
|
|
METHOD IdeDocks:buildDockWidgets()
|
|
|
|
::buildProjectTree()
|
|
::buildEditorTree()
|
|
|
|
::buildFuncList()
|
|
::buildSkeletonsTree()
|
|
|
|
::buildHelpWidget()
|
|
::buildSkeletonWidget()
|
|
::buildFindInFiles()
|
|
::buildThemesDock()
|
|
::buildPropertiesDock()
|
|
::buildEnvironDock()
|
|
|
|
::buildCompileResults()
|
|
::buildLinkResults()
|
|
::buildOutputResults()
|
|
::buildDocViewer()
|
|
::buildDocWriter()
|
|
::buildFunctionsDock()
|
|
::buildSourceThumbnail()
|
|
::buildQScintilla()
|
|
::buildUpDownWidget()
|
|
::buildReportsDesignerWidget()
|
|
::buildFormatWidget()
|
|
|
|
/* 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 )
|
|
::oDlg:oWidget:tabifyDockWidget( ::oQScintillaDock:oWidget , ::oReportsManagerDock:oWidget )
|
|
::oDlg:oWidget:tabifyDockWidget( ::oReportsManagerDock:oWidget , ::oFormatDock:oWidget )
|
|
|
|
RETURN Self
|
|
|
|
/*----------------------------------------------------------------------*/
|
|
|
|
METHOD IdeDocks:buildSystemTray()
|
|
|
|
IF empty( ::oSys )
|
|
::oIde:oSys := QSystemTrayIcon( ::oDlg:oWidget )
|
|
IF ( ::lSystemTrayAvailable := ::oSys:isSystemTrayAvailable() ) .AND. ::lMinimizeInSystemTray
|
|
::oSys:setIcon( hbide_image( "hbide" ) )
|
|
::oSys:connect( "activated(QSystemTrayIcon::ActivationReason)", {|p| ::execEvent( "qSystemTrayIcon_activated", p ) } )
|
|
|
|
::oIde:oSysMenu := QMenu()
|
|
::qAct1 := ::oSysMenu:addAction( hbide_image( "fullscreen" ), "&Show" )
|
|
::oSysMenu:addSeparator()
|
|
::qAct2 := ::oSysMenu:addAction( hbide_image( "exit" ), "&Exit" )
|
|
|
|
::qAct1:connect( "triggered(bool)", {|| ::execEvent( "qSystemTrayIcon_show" ) } )
|
|
::qAct2:connect( "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( cEvent, p, p1 )
|
|
LOCAL qEvent, qMime, qList, qUrl, i, n, oEdit, aMenu
|
|
|
|
SWITCH cEvent
|
|
CASE "dockFormat_visibilityChanged"
|
|
IF p; ::oFmt:show(); ENDIF
|
|
IF ! p .AND. ! p1:isVisible()
|
|
p1:raise()
|
|
ENDIF
|
|
EXIT
|
|
CASE "dockReportsManager_visibilityChanged"
|
|
IF ! p .AND. ! p1:isVisible()
|
|
p1:raise()
|
|
ENDIF
|
|
EXIT
|
|
CASE "dockQScintilla_visibilityChanged"
|
|
IF p; ::oBM:show() ; ENDIF
|
|
IF ! p .AND. ! p1:isVisible()
|
|
p1:raise()
|
|
ENDIF
|
|
EXIT
|
|
CASE "dockSourceThumbnail_visibilityChanged"
|
|
IF p; ::oEM:showThumbnail(); ENDIF
|
|
IF ! p .AND. ! p1:isVisible()
|
|
p1:raise()
|
|
ENDIF
|
|
EXIT
|
|
CASE "dockSkltnsTree_visibilityChanged"
|
|
IF p; ::oSK:showTree(); ENDIF
|
|
IF ! p .AND. ! p1:isVisible()
|
|
p1:raise()
|
|
ENDIF
|
|
EXIT
|
|
CASE "dockHelpDock_visibilityChanged"
|
|
IF ! p .AND. ! p1:isVisible()
|
|
p1:raise()
|
|
ENDIF
|
|
EXIT
|
|
CASE "dockDocViewer_visibilityChanged"
|
|
IF p; ::oHL:show(); ENDIF
|
|
IF ! p .AND. ! p1:isVisible()
|
|
p1:raise()
|
|
ENDIF
|
|
EXIT
|
|
CASE "dockDocWriter_visibilityChanged"
|
|
IF p; ::oDW:show(); ENDIF
|
|
IF ! p .AND. ! p1:isVisible()
|
|
p1:raise()
|
|
ENDIF
|
|
EXIT
|
|
CASE "oFuncDock_visibilityChanged"
|
|
IF ! p .AND. ! p1:isVisible()
|
|
p1:raise()
|
|
ENDIF
|
|
EXIT
|
|
CASE "docFunctions_visibilityChanged"
|
|
IF p; ::oFN:show(); ENDIF
|
|
IF ! p .AND. ! p1:isVisible()
|
|
p1:raise()
|
|
ENDIF
|
|
EXIT
|
|
CASE "dockProperties_visibilityChanged"
|
|
IF p; ::oPM:fetchProperties(); ENDIF
|
|
IF ! p .AND. ! p1:isVisible()
|
|
p1:raise()
|
|
ENDIF
|
|
EXIT
|
|
CASE "docEnvironments_visibilityChanged"
|
|
IF p; ::oEV:show(); ENDIF
|
|
IF ! p .AND. ! p1:isVisible()
|
|
p1:raise()
|
|
ENDIF
|
|
EXIT
|
|
CASE "docSkeletons_visibilityChanged"
|
|
IF p; ::oSK:show(); ENDIF
|
|
IF ! p .AND. ! p1:isVisible()
|
|
p1:raise()
|
|
ENDIF
|
|
EXIT
|
|
CASE "dockThemes_visibilityChanged"
|
|
IF p; ::oTH:show(); ENDIF
|
|
IF ! p .AND. ! p1:isVisible()
|
|
p1:raise()
|
|
ENDIF
|
|
EXIT
|
|
CASE "dockFindInFiles_visibilityChanged"
|
|
IF p; ::oFF:show(); ENDIF
|
|
IF ! p .AND. ! p1:isVisible()
|
|
p1:raise()
|
|
ENDIF
|
|
EXIT
|
|
/* Miscellaneous */
|
|
CASE "qHelpBrw_contextMenuRequested"
|
|
hbide_popupBrwContextMenu( ::qHelpBrw, p )
|
|
EXIT
|
|
CASE "outputConsole_contextMenuRequested"
|
|
aMenu := {}
|
|
aadd( aMenu, { "Clear" , {|| ::oOutputResult:oWidget:clear() } } )
|
|
aadd( aMenu, { "" } )
|
|
aadd( aMenu, { "Select All", {|| ::oOutputResult:oWidget:selectAll() } } )
|
|
aadd( aMenu, { "Copy" , {|| ::oOutputResult:oWidget:copy() } } )
|
|
hbide_execPopup( aMenu, p, ::oOutputResult:oWidget )
|
|
EXIT
|
|
|
|
CASE "QEvent_WindowStateChange"
|
|
qEvent := QWindowStateChangeEventFromPointer( p )
|
|
::nPrevWindowState := qEvent:oldState()
|
|
EXIT
|
|
|
|
CASE "QEvent_Hide"
|
|
IF ::lSystemTrayAvailable .AND. ::lMinimizeInSystemTray
|
|
qEvent := QHideEventFromPointer( p )
|
|
IF ! ::lChanging
|
|
::lChanging := .t.
|
|
IF qEvent:spontaneous()
|
|
IF empty( ::qTimer )
|
|
::qTimer := QTimer()
|
|
::qTimer:setSingleShot( .t. )
|
|
::qTimer:setInterval( 250 )
|
|
//::connect( ::qTimer, "timeout()", {|| ::execEvent( "qTimer_timeOut" ) } )
|
|
::qTimer:connect( "timeout()", {|| ::execEvent( "qTimer_timeOut" ) } )
|
|
ENDIF
|
|
::qTimer:start()
|
|
qEvent:ignore()
|
|
ENDIF
|
|
::lChanging := .f.
|
|
ENDIF
|
|
ENDIF
|
|
EXIT
|
|
|
|
CASE "qTimer_timeOut"
|
|
::oDlg:hide()
|
|
::oSys:setToolTip( ::oDlg:oWidget:windowTitle() )
|
|
::oSys:show()
|
|
EXIT
|
|
|
|
CASE "qSystemTrayIcon_close"
|
|
PostAppEvent( xbeP_Close, NIL, NIL, ::oDlg )
|
|
EXIT
|
|
|
|
CASE "qSystemTrayIcon_show"
|
|
::showDlgBySystemTrayIconCommand()
|
|
EXIT
|
|
|
|
CASE "qSystemTrayIcon_activated"
|
|
IF p == QSystemTrayIcon_Trigger
|
|
::showDlgBySystemTrayIconCommand()
|
|
ELSEIF p == QSystemTrayIcon_DoubleClick
|
|
ELSEIF p == QSystemTrayIcon_Context
|
|
ELSEIF p == QSystemTrayIcon_MiddleClick
|
|
ENDIF
|
|
EXIT
|
|
|
|
CASE "editWidget_dragEnterEvent"
|
|
qEvent := QDragEnterEventFromPointer( p )
|
|
qEvent:acceptProposedAction()
|
|
EXIT
|
|
|
|
CASE "editWidget_dropEvent"
|
|
qEvent := QDropEventFromPointer( p )
|
|
qMime := qEvent:mimeData()
|
|
IF qMime:hasUrls()
|
|
qList := qMime:hbUrlList()
|
|
FOR i := 0 TO qList:size() - 1
|
|
qUrl := QUrl( qList:at( i ) )
|
|
IF hbide_isValidText( qUrl:toLocalFile() )
|
|
::oSM:editSource( hbide_pathToOSPath( qUrl:toLocalFile() ) )
|
|
ENDIF
|
|
NEXT
|
|
ENDIF
|
|
EXIT
|
|
|
|
CASE "projectTree_dragEnterEvent"
|
|
HB_TRACE( HB_TR_DEBUG, "projectTree_dragEnterEvent" )
|
|
QDragEnterEventFromPointer( p ):acceptProposedAction()
|
|
EXIT
|
|
|
|
CASE "projectTree_dropEvent"
|
|
HB_TRACE( HB_TR_DEBUG, "projectTree_dropEvent" )
|
|
qEvent := QDropEventFromPointer( p )
|
|
qMime := qEvent:mimeData()
|
|
IF qMime:hasUrls()
|
|
qList := qMime:hbUrlList()
|
|
FOR i := 0 TO qList:size() - 1
|
|
qUrl := QUrl( qList:at( i ) )
|
|
IF hbide_sourceType( qUrl:toLocalFile() ) == ".hbp"
|
|
::oPM:loadProperties( qUrl:toLocalFile(), .f., .f., .t. )
|
|
ENDIF
|
|
NEXT
|
|
ENDIF
|
|
EXIT
|
|
|
|
CASE "x_mdiArea_subWindowActivated"
|
|
IF ! empty( ::oIde:aMdies )
|
|
IF ( n := ascan( ::oIde:aMdies, {|e| hbqt_IsEqualGcQtPointer( e, p ) } ) ) > 0
|
|
|
|
::setView( ::oIde:aMdies[ n ]:objectName() )
|
|
|
|
IF ! ::oIde:aMdies[ n ]:objectName() == "Stats" .AND. ! empty( ::oEM ) .AND. ! empty( oEdit := ::oEM:getEditorCurrent() )
|
|
oEdit:setDocumentProperties()
|
|
oEdit:qCoEdit:relayMarkButtons()
|
|
oEdit:qCoEdit:toggleLineNumbers()
|
|
oEdit:qCoEdit:toggleHorzRuler()
|
|
oEdit:qCoEdit:toggleCurrentLineHighlightMode()
|
|
oEdit:qCoEdit:dispStatusInfo()
|
|
::oUpDn:show()
|
|
oEdit:changeThumbnail()
|
|
ENDIF
|
|
|
|
ENDIF
|
|
ENDIF
|
|
EXIT
|
|
|
|
/* Left-toolbar actions */
|
|
CASE "buttonViewTabbed_clicked"
|
|
::oStackedWidget:setViewMode( iif( ::oStackedWidget:viewMode() == QMdiArea_TabbedView, QMdiArea_SubWindowView, QMdiArea_TabbedView ) )
|
|
EXIT
|
|
CASE "buttonViewOrganized_clicked"
|
|
::nViewStyle := HBPMDI_STYLE_ORGANIZED
|
|
::restState()
|
|
EXIT
|
|
CASE "buttonSaveLayout_clicked"
|
|
IF ::nViewStyle == HBPMDI_STYLE_ORGANIZED
|
|
::savePanelsGeometry()
|
|
ENDIF
|
|
EXIT
|
|
CASE "buttonViewTiled_clicked"
|
|
::oStackedWidget:tileSubWindows()
|
|
::nViewStyle := HBPMDI_STYLE_TILED
|
|
EXIT
|
|
CASE "buttonViewCascaded_clicked"
|
|
::oStackedWidget:cascadeSubWindows()
|
|
::nViewStyle := HBPMDI_STYLE_CASCADED
|
|
EXIT
|
|
CASE "buttonViewMaximized_clicked"
|
|
::nViewStyle := HBPMDI_STYLE_MAXIMIZED
|
|
::stackMaximized()
|
|
EXIT
|
|
CASE "buttonViewStackedVert_clicked"
|
|
::nViewStyle := HBPMDI_STYLE_TILEDVERT
|
|
::stackVertically()
|
|
EXIT
|
|
CASE "buttonViewStackedHorz_clicked"
|
|
::nViewStyle := HBPMDI_STYLE_TILEDHORZ
|
|
::stackHorizontally()
|
|
EXIT
|
|
CASE "buttonViewZoomedIn_clicked"
|
|
::stackZoom( +1 )
|
|
EXIT
|
|
CASE "buttonViewZoomedOut_clicked"
|
|
::stackZoom( -1 )
|
|
EXIT
|
|
/* Ends: MDI actions */
|
|
|
|
CASE "mdiSubWindow_windowStateChanged"
|
|
IF ! empty( ::oIde:aMdies )
|
|
IF ( n := ascan( ::oIde:aMdies, {|o| o == p } ) ) > 0
|
|
::aViewsInfo[ n, 3 ] := p1[ 1 ]
|
|
::aViewsInfo[ n, 4 ] := p1[ 2 ]
|
|
ENDIF
|
|
IF p1[ 2 ] >= 8 .AND. ::cWrkView != p:objectName()
|
|
::setView( p:objectName() )
|
|
IF p:objectName() != "Stats" .AND. ! empty( ::oEM ) .AND. ! empty( oEdit := ::oEM:getEditorCurrent() )
|
|
oEdit:setDocumentProperties()
|
|
oEdit:qCoEdit:relayMarkButtons()
|
|
oEdit:qCoEdit:toggleLineNumbers()
|
|
oEdit:qCoEdit:toggleHorzRuler()
|
|
oEdit:qCoEdit:toggleCurrentLineHighlightMode()
|
|
oEdit:qCoEdit:dispStatusInfo()
|
|
::oUpDn:show()
|
|
oEdit:changeThumbnail()
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
EXIT
|
|
|
|
ENDSWITCH
|
|
|
|
RETURN Self
|
|
|
|
/*----------------------------------------------------------------------*/
|
|
|
|
METHOD IdeDocks:restState( nMode )
|
|
LOCAL qMdi
|
|
HB_SYMBOL_UNUSED( nMode )
|
|
FOR EACH qMdi IN ::oIde:aMdies
|
|
qMdi:setWindowState( Qt_WindowNoState )
|
|
NEXT
|
|
::restPanelsGeometry()
|
|
RETURN Self
|
|
|
|
/*----------------------------------------------------------------------*/
|
|
|
|
METHOD IdeDocks:stackMaximized()
|
|
LOCAL qObj, qMdi
|
|
qObj := ::oStackedWidget:activeSubWindow()
|
|
FOR EACH qMdi IN ::oIde:aMdies
|
|
qMdi:setWindowState( Qt_WindowMaximized )
|
|
NEXT
|
|
::oStackedWidget:setActiveSubWindow( qObj )
|
|
RETURN Self
|
|
|
|
/*----------------------------------------------------------------------*/
|
|
|
|
METHOD IdeDocks:stackZoom( nMode )
|
|
LOCAL qMdi, nT, nL, nH, nW, qRect
|
|
|
|
HB_SYMBOL_UNUSED( nMode )
|
|
|
|
IF ::nViewStyle == 4 .OR. ::nViewStyle == 5
|
|
IF ::nViewStyle == 4
|
|
nT := 0
|
|
FOR EACH qMdi IN ::oIde:aMdies
|
|
IF ::aViewsInfo[ qMdi:__enumIndex(), 1 ] != "Stats"
|
|
qRect := qMdi:geometry()
|
|
nH := qRect:height() + ( nMode * ( qRect:height() / 4 ) )
|
|
qMdi:setGeometry( QRect( 0, nT, qRect:width(), nH ) )
|
|
nT += nH
|
|
ENDIF
|
|
NEXT
|
|
ELSE
|
|
nL := 0
|
|
FOR EACH qMdi IN ::oIde:aMdies
|
|
IF ::aViewsInfo[ qMdi:__enumIndex(), 1 ] != "Stats"
|
|
qRect := qMdi:geometry()
|
|
nW := qRect:width() + ( nMode * ( qRect:width() / 4 ) )
|
|
qMdi:setGeometry( QRect( nL, 0, nW, qRect:height() ) )
|
|
nL += nW
|
|
ENDIF
|
|
NEXT
|
|
ENDIF
|
|
ENDIF
|
|
RETURN Self
|
|
|
|
/*----------------------------------------------------------------------*/
|
|
|
|
METHOD IdeDocks:stackHorizontally()
|
|
LOCAL qArea, qObj, qVPort, nH, nT, nW, qMdi, nL
|
|
|
|
::restState( 0 )
|
|
|
|
qArea := ::oStackedWidget
|
|
qObj := qArea:activeSubWindow()
|
|
qVPort := qArea:viewport()
|
|
nH := qVPort:height()
|
|
nW := qVPort:width() / ( len( ::oIde:aMdies ) - 1 )
|
|
nT := 0
|
|
nL := 0
|
|
|
|
FOR EACH qMdi IN ::oIde:aMdies
|
|
IF ::aViewsInfo[ qMdi:__enumIndex(), 1 ] != "Stats"
|
|
qMdi:setGeometry( QRect( nL, nT, nW, nH ) )
|
|
nL += nW
|
|
ENDIF
|
|
NEXT
|
|
|
|
::oStackedWidget:setActiveSubWindow( qObj )
|
|
RETURN Self
|
|
|
|
/*----------------------------------------------------------------------*/
|
|
|
|
METHOD IdeDocks:stackVertically()
|
|
LOCAL qArea, qObj, qVPort, nH, nT, nW, qMdi
|
|
|
|
::restState( 0 )
|
|
|
|
qArea := ::oStackedWidget
|
|
qObj := qArea:activeSubWindow()
|
|
qVPort := qArea:viewport()
|
|
nH := qVPort:height() / ( len( ::oIde:aMdies ) - 1 )
|
|
nW := qVPort:width()
|
|
nT := 0
|
|
|
|
FOR EACH qMdi IN ::oIde:aMdies
|
|
IF ::aViewsInfo[ qMdi:__enumIndex(), 1 ] != "Stats"
|
|
qMdi:setGeometry( QRect( 0, nT, nW, nH ) )
|
|
nT += nH
|
|
ENDIF
|
|
NEXT
|
|
|
|
::oStackedWidget:setActiveSubWindow( qObj )
|
|
RETURN Self
|
|
|
|
/*----------------------------------------------------------------------*/
|
|
|
|
METHOD IdeDocks:restPanelsGeometry()
|
|
LOCAL a_, n
|
|
FOR EACH a_ IN ::aViewsInfo
|
|
IF ( n := ascan( ::oIde:aMdies, {|o| o:objectName() == a_[ 1 ] } ) ) > 0
|
|
IF hb_isObject( a_[ 2 ] )
|
|
::oIde:aMdies[ n ]:setGeometry( a_[ 2 ] )
|
|
ENDIF
|
|
ENDIF
|
|
NEXT
|
|
RETURN Self
|
|
|
|
/*------------------------------------------------------------------------*/
|
|
|
|
METHOD IdeDocks:savePanelsGeometry()
|
|
LOCAL a_, n
|
|
FOR EACH a_ IN ::aViewsInfo
|
|
IF ( n := ascan( ::oIde:aMdies, {|o| o:objectName() == a_[ 1 ] } ) ) > 0
|
|
a_[ 2 ] := ::oIde:aMdies[ n ]:geometry()
|
|
ENDIF
|
|
NEXT
|
|
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:getADockWidget( nAreas, cObjectName, cWindowTitle, nFlags, cEventVisibility )
|
|
LOCAL oDock, nBasic
|
|
|
|
DEFAULT nFlags TO 0
|
|
|
|
nBasic := hb_bitOR( QDockWidget_DockWidgetClosable, nFlags )
|
|
|
|
oDock := XbpWindow():new()
|
|
oDock:oWidget := QDockWidget( ::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()
|
|
|
|
IF !empty( cEventVisibility )
|
|
//::connect( oDock:oWidget, cEventVisibility, {|p| ::execEvent( cEventVisibility, p, oDock:oWidget ) } )
|
|
oDock:oWidget:connect( cEventVisibility, {|p| ::execEvent( cEventVisibility, p, oDock:oWidget ) } )
|
|
ENDIF
|
|
|
|
RETURN oDock
|
|
|
|
/*----------------------------------------------------------------------*/
|
|
|
|
METHOD IdeDocks:setViewInitials()
|
|
LOCAL a_
|
|
|
|
FOR EACH a_ IN ::aViewsInfo
|
|
IF a_[ 1 ] != "Stats"
|
|
::setView( a_[ 1 ] )
|
|
|
|
IF ::qTabWidget:count() == 1
|
|
::oEM:setSourceVisibleByIndex( 0 )
|
|
ELSE
|
|
::qTabWidget:setCurrentIndex( 0 )
|
|
::qTabWidget:setCurrentIndex( ::qTabWidget:count() - 1 )
|
|
::qTabWidget:setCurrentIndex( 0 )
|
|
ENDIF
|
|
ENDIF
|
|
NEXT
|
|
|
|
RETURN Self
|
|
|
|
/*------------------------------------------------------------------------*/
|
|
|
|
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( ::aViewsInfo, {|e_| e_[ 1 ] == cView } ) > 0
|
|
MsgBox( "View: " + cView + ", already exists" )
|
|
ELSE
|
|
aadd( ::aViewsInfo, { cView, NIL, 0, 0, 0, 0 } )
|
|
::oTM:addPanelsMenu( cView )
|
|
::buildViewWidget( cView )
|
|
IF ! ::oIde:lCurEditsMdi
|
|
::addPanelButton( cView )
|
|
ENDIF
|
|
::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
|
|
IF ::oIde:lCurEditsMdi
|
|
::oStackedWidget:oWidget:setActiveSubWindow( ::oIde:aMdies[ n ] )
|
|
ELSE
|
|
::oStackedWidget:oWidget:setCurrentIndex( n - 1 )
|
|
ENDIF
|
|
::setStatusText( SB_PNL_VIEW, ::cWrkView )
|
|
ENDIF
|
|
EXIT
|
|
|
|
ENDSWITCH
|
|
|
|
RETURN NIL
|
|
|
|
/*------------------------------------------------------------------------*/
|
|
|
|
METHOD IdeDocks:buildMdiToolbarLeft()
|
|
|
|
::qMdiToolbarL := HbqToolbar():new()
|
|
::qMdiToolbarL:orientation := Qt_Vertical
|
|
::qMdiToolbarL:create( "EditsManager_Left_Toolbar" )
|
|
|
|
::qMdiToolbarL:addToolButton( "ViewTabbed" , "Toggle tabbed view" , hbide_image( "view_tabbed" ), {|| ::execEvent( "buttonViewTabbed_clicked" ) }, .f. )
|
|
::qMdiToolbarL:addSeparator()
|
|
::qMdiToolbarL:addToolButton( "ViewArranged" , "View as arranged" , hbide_image( "view_organized" ), {|| ::execEvent( "buttonViewOrganized_clicked" ) }, .f. )
|
|
::qMdiToolbarL:addToolButton( "SaveLayout" , "Save layout" , hbide_image( "save3" ), {|| ::execEvent( "buttonSaveLayout_clicked" ) }, .f. )
|
|
::qMdiToolbarL:addSeparator()
|
|
::qMdiToolbarL:addToolButton( "ViewCascaded" , "View as cascaded" , hbide_image( "view_cascaded" ), {|| ::execEvent( "buttonViewCascaded_clicked" ) }, .f. )
|
|
::qMdiToolbarL:addToolButton( "viewTiled" , "View as tiled" , hbide_image( "view_tiled" ), {|| ::execEvent( "buttonViewTiled_clicked" ) }, .f. )
|
|
::qMdiToolbarL:addToolButton( "ViewMaximized" , "View Maximized" , hbide_image( "fullscreen" ), {|| ::execEvent( "buttonViewMaximized_clicked" ) }, .f. )
|
|
::qMdiToolbarL:addToolButton( "ViewTiledVert" , "View Vertically Tiled" , hbide_image( "view_vertstacked" ), {|| ::execEvent( "buttonViewStackedVert_clicked" ) }, .f. )
|
|
::qMdiToolbarL:addToolButton( "ViewTiledHorz" , "View Horizontally Tiled" , hbide_image( "view_horzstacked" ), {|| ::execEvent( "buttonViewStackedHorz_clicked" ) }, .f. )
|
|
::qMdiToolbarL:addToolButton( "ViewZoomedIn" , "View Zoom In" , hbide_image( "view_zoomin" ), {|| ::execEvent( "buttonViewZoomedIn_clicked" ) }, .f. )
|
|
::qMdiToolbarL:addToolButton( "ViewZoomedOut" , "View Zoom Out" , hbide_image( "view_zoomout" ), {|| ::execEvent( "buttonViewZoomedOut_clicked" ) }, .f. )
|
|
::qMdiToolbarL:addSeparator()
|
|
::qMdiToolbarL:addToolButton( "ToggleLineNos" , "Toggle Line Numbers" , hbide_image( "togglelinenumber" ), {|| ::oEM:toggleLineNumbers() }, .f. )
|
|
::qMdiToolbarL:addToolButton( "ToggleHorzRuler", "Toggle Horizontal Ruler" , hbide_image( "horzruler" ), {|| ::oEM:toggleHorzRuler() }, .f. )
|
|
::qMdiToolbarL:addToolButton( "ToggleCurLine" , "Toggle Current Line Hilight", hbide_image( "curlinehilight" ), {|| ::oEM:toggleCurrentLineHighlightMode() }, .f. )
|
|
::qMdiToolbarL:addSeparator()
|
|
::qMdiToolbarL:addToolButton( "ToggleCodeComp" , "Toggle Code Completion" , hbide_image( "help1" ), {|| ::oEM:toggleCodeCompetion() }, .f. )
|
|
::qMdiToolbarL:addToolButton( "ToggleCompTips" , "Toggle Completion Tips" , hbide_image( "infotips" ), {|| ::oEM:toggleCompetionTips() }, .f. )
|
|
::qMdiToolbarL:addSeparator()
|
|
::qMdiToolbarL:addToolButton( "ZoomIn" , "Zoom In" , hbide_image( "zoomin3" ), {|| ::oEM:zoom( +1 ) }, .f. )
|
|
::qMdiToolbarL:addToolButton( "ZoomOut" , "Zoom Out" , hbide_image( "zoomout3" ), {|| ::oEM:zoom( -1 ) }, .f. )
|
|
::qMdiToolbarL:addSeparator()
|
|
|
|
RETURN Self
|
|
|
|
/*------------------------------------------------------------------------*/
|
|
|
|
METHOD IdeDocks:buildMdiToolbar()
|
|
LOCAL qTBar, nW := 25
|
|
|
|
STATIC sp0,sp1,sp2,sp3
|
|
IF empty( sp0 )
|
|
sp0 := QLabel(); sp0:setMinimumWidth( nW )
|
|
sp1 := QLabel(); sp1:setMinimumWidth( nW )
|
|
sp2 := QLabel(); sp2:setMinimumWidth( nW )
|
|
sp3 := QLabel(); sp3:setMinimumWidth( nW )
|
|
ENDIF
|
|
|
|
::qMdiToolbar := HbqToolbar():new()
|
|
::qMdiToolbar:orientation := Qt_Horizontal
|
|
::qMdiToolbar:create( "EditsManager_Top_Toolbar" )
|
|
::qMdiToolbar:setStyleSheet( GetStyleSheet( "QToolBar", ::nAnimantionMode ) )
|
|
|
|
qTBar := ::qMdiToolbar
|
|
|
|
qTBar:addWidget( "Panels", ::oIde:oTM:buildPanelsButton() )
|
|
qTBar:addWidget( "Label0", sp0 )
|
|
qTBar:addToolButton( "Undo" , "Undo" , hbide_image( "undo" ), {|| ::oEM:undo() }, .f. )
|
|
qTBar:addToolButton( "Redo" , "Redo" , hbide_image( "redo" ), {|| ::oEM:redo() }, .f. )
|
|
qTBar:addSeparator()
|
|
qTBar:addToolButton( "Cut" , "Cut" , hbide_image( "cut" ), {|| ::oEM:cut() }, .f. )
|
|
qTBar:addToolButton( "Copy" , "Copy" , hbide_image( "copy" ), {|| ::oEM:copy() }, .f. )
|
|
qTBar:addToolButton( "Paste" , "Paste" , hbide_image( "paste" ), {|| ::oEM:paste() }, .f. )
|
|
qTBar:addToolButton( "SelectAll" , "Select all" , hbide_image( "selectall" ), {|| ::oEM:selectAll() }, .f. )
|
|
qTBar:addToolButton( "SelectionMode", "Selection mode" , hbide_image( "stream" ), {|| ::oEM:toggleSelectionMode(), ::oIDE:manageFocusInEditor() }, .t. )
|
|
qTBar:addWidget( "Label1", sp1 )
|
|
qTBar:addToolButton( "Find" , "Find / Replace" , hbide_image( "find" ), {|| ::oEM:find() }, .f. )
|
|
qTBar:addToolButton( "BookMark" , "Toggle Mark" , hbide_image( "bookmark" ), {|| ::oEM:setMark() }, .f. )
|
|
qTBar:addToolButton( "GotoLine" , "Goto Line" , hbide_image( "gotoline3" ), {|| ::oEM:goTo() }, .f. )
|
|
qTBar:addToolButton( "Reload" , "Reload Source" , hbide_image( "view_refresh" ), {|| ::oEM:reload() }, .f. )
|
|
qTBar:addWidget( "Label2", sp2 )
|
|
qTBar:addToolButton( "MoveUp" , "Move Current Line Up" , hbide_image( "movelineup" ), {|| ::oEM:moveLine( -1 ) }, .f. )
|
|
qTBar:addToolButton( "MoveDn" , "Move Current Line Down" , hbide_image( "movelinedown" ), {|| ::oEM:moveLine( 1 ) }, .f. )
|
|
qTBar:addToolButton( "DelLine" , "Delete Current Line" , hbide_image( "deleteline" ), {|| ::oEM:deleteLine() }, .f. )
|
|
qTBar:addToolButton( "Duplicate" , "Duplicate Current Line" , hbide_image( "duplicateline" ), {|| ::oEM:duplicateLine() }, .f. )
|
|
qTBar:addWidget( "Label3", sp3 )
|
|
qTBar:addToolButton( "ToUpper" , "To Upper" , hbide_image( "toupper" ), {|| ::oEM:convertSelection( "ToUpper" ) }, .f. )
|
|
qTBar:addToolButton( "ToLower" , "To Lower" , hbide_image( "tolower" ), {|| ::oEM:convertSelection( "ToLower" ) }, .f. )
|
|
qTBar:addToolButton( "InvertCase", "Invert Case" , hbide_image( "invertcase" ), {|| ::oEM:convertSelection( "Invert" ) }, .f. )
|
|
qTBar:addSeparator()
|
|
qTBar:addToolButton( "BlockCmnt" , "Block Comment" , hbide_image( "blockcomment" ), {|| ::oEM:blockComment() }, .f. )
|
|
qTBar:addToolButton( "StreamCmnt", "Stream Comment" , hbide_image( "streamcomment" ), {|| ::oEM:streamComment() }, .f. )
|
|
qTBar:addSeparator()
|
|
qTBar:addToolButton( "IndentR" , "Indent Right" , hbide_image( "blockindentr" ), {|| ::oEM:indent( 1 ) }, .f. )
|
|
qTBar:addToolButton( "IndentL" , "Indent Left" , hbide_image( "blockindentl" ), {|| ::oEM:indent( -1 ) }, .f. )
|
|
qTBar:addSeparator()
|
|
qTBar:addToolButton( "Sgl2Dbl" , "Single to Double Quotes" , hbide_image( "sgl2dblquote" ), {|| ::oEM:convertDQuotes() }, .f. )
|
|
qTBar:addToolButton( "Dbl2Sgl" , "Double to Single Quotes" , hbide_image( "dbl2sglquote" ), {|| ::oEM:convertQuotes() }, .f. )
|
|
|
|
RETURN Self
|
|
|
|
/*----------------------------------------------------------------------*/
|
|
|
|
METHOD IdeDocks:setButtonState( cButton, lChecked )
|
|
IF ::qMdiToolbar:contains( cButton )
|
|
RETURN ::qMdiToolbar:setItemChecked( cButton, lChecked )
|
|
ELSEIF ::qMdiToolbarL:contains( cButton )
|
|
RETURN ::qMdiToolbarL:setItemChecked( cButton, lChecked )
|
|
ENDIF
|
|
RETURN .f.
|
|
|
|
/*------------------------------------------------------------------------*/
|
|
|
|
METHOD IdeDocks:buildStackedWidget()
|
|
|
|
IF ::oIde:lCurEditsMdi
|
|
::oIde:oStackedWidget := XbpWindow():new( ::oDa )
|
|
::oStackedWidget:oWidget := QMdiArea( ::oDa:oWidget )
|
|
::oStackedWidget:oWidget:setObjectName( "editMdiArea" )
|
|
::oStackedWidget:oWidget:setDocumentMode( .t. )
|
|
::oStackedWidget:oWidget:setTabShape( QTabWidget_Triangular )
|
|
::oStackedWidget:oWidget:setOption( QMdiArea_DontMaximizeSubWindowOnActivation, .t. )
|
|
::oStackedWidget:oWidget:setVerticalScrollBarPolicy( Qt_ScrollBarAsNeeded )
|
|
::oStackedWidget:oWidget:setHorizontalScrollBarPolicy( Qt_ScrollBarAsNeeded )
|
|
::oStackedWidget:oWidget:setActivationOrder( QMdiArea_CreationOrder )
|
|
|
|
::oDa:addChild( ::oStackedWidget )
|
|
|
|
::oStackedWidget:oWidget:connect( "subWindowActivated(QMdiSubWindow*)", {|p| ::execEvent( "mdiArea_subWindowActivated", p ) } )
|
|
|
|
ELSE
|
|
/* Its parent will be drawing area and pages will be XbpTabWidgets() */
|
|
|
|
::oIde:oStackedWidget := XbpWindow():new( ::oDa )
|
|
::oStackedWidget:oWidget := QStackedWidget( ::oDa:oWidget )
|
|
::oStackedWidget:oWidget:setObjectName( "myStackedWidget" )
|
|
::oDa:addChild( ::oStackedWidget )
|
|
ENDIF
|
|
|
|
RETURN Self
|
|
|
|
/*----------------------------------------------------------------------*/
|
|
|
|
METHOD IdeDocks:buildViewWidget( cView )
|
|
LOCAL oFrame, qTBtnClose, qDrop, qMdi, n
|
|
|
|
IF ::oIde:lCurEditsMdi
|
|
qMdi := QMdiSubWindow( ::oStackedWidget:oWidget )
|
|
qMdi:setWindowTitle( cView )
|
|
qMdi:setObjectName( cView )
|
|
IF cView == "Stats"
|
|
qMdi:setWindowIcon( hbide_image( "statistics" ) )
|
|
ELSE
|
|
qMdi:setWindowIcon( ::getPanelIcon( cView ) )
|
|
ENDIF
|
|
|
|
oFrame := XbpWindow():new( ::oStackedWidget )
|
|
oFrame:oWidget := QWidget( ::oStackedWidget:oWidget )
|
|
oFrame:oWidget:setObjectName( cView ) /* This will form the basis of showing at top */
|
|
::oStackedWidget:addChild( oFrame )
|
|
|
|
oFrame:hbLayout := HBPLAYOUT_TYPE_VERTBOX
|
|
oFrame:qLayout:setContentsMargins( 0,0,0,0 )
|
|
|
|
oFrame:oTabWidget := XbpTabWidget():new():create( oFrame, , {0,0}, {200,200}, , .t. )
|
|
|
|
IF !( cView == "Stats" )
|
|
qTBtnClose := QToolButton()
|
|
qTBtnClose:setTooltip( "Close Tab" )
|
|
qTBtnClose:setAutoRaise( .t. )
|
|
qTBtnClose:setIcon( hbide_image( "closetab" ) )
|
|
qTBtnClose:connect( "clicked()", {|| ::oSM:closeSource() } )
|
|
oFrame:oTabWidget:qCornerWidget := qTBtnClose
|
|
oFrame:oTabWidget:oWidget:setCornerWidget( qTBtnClose, Qt_TopRightCorner )
|
|
|
|
qDrop := oFrame:oTabWidget:oWidget
|
|
|
|
qDrop:setAcceptDrops( .t. )
|
|
qDrop:connect( QEvent_DragEnter, {|p| ::execEvent( "editWidget_dragEnterEvent", p ) } )
|
|
qDrop:connect( QEvent_Drop , {|p| ::execEvent( "editWidget_dropEvent" , p ) } )
|
|
ENDIF
|
|
|
|
oFrame:oTabWidget:oWidget:setUsesScrollButtons( .t. )
|
|
oFrame:oTabWidget:oWidget:setMovable( .t. )
|
|
|
|
oFrame:oWidget:show()
|
|
oFrame:oTabWidget:oWidget:show()
|
|
|
|
aadd( ::oIde:aViews, oFrame )
|
|
aadd( ::oIde:aMdies, qMdi )
|
|
|
|
IF ( n := ascan( ::aViewsInfo, {|e_| e_[ 1 ] == cView } ) ) > 0
|
|
IF !empty( ::aViewsInfo[ n, 2 ] )
|
|
qMdi:setGeometry( ::aViewsInfo[ n, 2 ] )
|
|
ELSE
|
|
qMdi:resize( 300, 200 )
|
|
ENDIF
|
|
ENDIF
|
|
qMdi:setWidget( oFrame:oWidget )
|
|
qMdi:show()
|
|
::oStackedWidget:oWidget:addSubWindow( qMdi )
|
|
qMdi:connect( "windowStateChanged(Qt::WindowStates,Qt::WindowStates)", ;
|
|
{|p,p1| ::execEvent( "mdiSubWindow_windowStateChanged", qMdi, { p, p1 } ) } )
|
|
::setView( cView )
|
|
|
|
ELSE
|
|
|
|
oFrame := XbpWindow():new( ::oStackedWidget )
|
|
oFrame:oWidget := QWidget( ::oStackedWidget:oWidget )
|
|
oFrame:oWidget:setObjectName( cView ) /* This will form the basis of showing at top */
|
|
::oStackedWidget:addChild( oFrame )
|
|
|
|
oFrame:hbLayout := HBPLAYOUT_TYPE_VERTBOX
|
|
oFrame:qLayout:setContentsMargins( 0,0,0,0 )
|
|
|
|
oFrame:oTabWidget := XbpTabWidget():new():create( oFrame, , {0,0}, {200,200}, , .t. )
|
|
oFrame:oTabWidget:oWidget:setDocumentMode( .t. )
|
|
|
|
IF !( cView == "Stats" )
|
|
qTBtnClose := QToolButton()
|
|
qTBtnClose:setTooltip( "Close Tab" )
|
|
qTBtnClose:setAutoRaise( .t. )
|
|
qTBtnClose:setIcon( hbide_image( "closetab" ) )
|
|
qTBtnClose:connect( "clicked()", {|| ::oSM:closeSource() } )
|
|
oFrame:oTabWidget:qCornerWidget := qTBtnClose
|
|
oFrame:oTabWidget:oWidget:setCornerWidget( qTBtnClose, Qt_TopRightCorner )
|
|
|
|
qDrop := oFrame:oTabWidget:oWidget
|
|
|
|
qDrop:setAcceptDrops( .t. )
|
|
qDrop:connect( QEvent_DragEnter, {|p| ::execEvent( "editWidget_dragEnterEvent", p ) } )
|
|
qDrop:connect( QEvent_Drop , {|p| ::execEvent( "editWidget_dropEvent" , p ) } )
|
|
|
|
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( cView )
|
|
ENDIF
|
|
|
|
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()
|
|
|
|
IF ::oIde:lCurEditsMdi
|
|
::oUpDn:oUI:setParent( ::qMdiToolbarL:oWidget )
|
|
::oUpDn:oUI:show()
|
|
::qMdiToolbarL:addWidget( "UpDown", ::oUpDn:oUI:oWidget )
|
|
::oUpDn:oUI:hide()
|
|
ENDIF
|
|
|
|
RETURN Self
|
|
|
|
/*----------------------------------------------------------------------*/
|
|
|
|
METHOD IdeDocks:buildToolBarPanels()
|
|
LOCAL a_, aBtns, qAct, qTBtn
|
|
LOCAL qSize := QSize( 20,20 )
|
|
|
|
IF ! ::oIde:lCurEditsMdi
|
|
/* Toolbar Panels */
|
|
::oIde:qTBarPanels := QToolBar()
|
|
::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 )
|
|
|
|
FOR EACH a_ IN ::aViewsInfo
|
|
IF a_[ 1 ] != "Stats"
|
|
::addPanelButton( a_[ 1 ] )
|
|
ENDIF
|
|
NEXT
|
|
|
|
/* Toolbar Line Actions */
|
|
|
|
::oIde:qTBarLines := QToolBar()
|
|
::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, {} )
|
|
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() } } )
|
|
aadd( aBtns, {} )
|
|
aadd( aBtns, { "help1" , "Toggle Code Completion" , {|| ::oEM:toggleCodeCompetion() } } )
|
|
aadd( aBtns, { "infotips" , "Toggle Completion Tips" , {|| ::oEM:toggleCompetionTips() } } )
|
|
FOR EACH a_ IN aBtns
|
|
IF empty( a_ )
|
|
::qTBarLines:addSeparator()
|
|
ELSE
|
|
qTBtn := QToolButton()
|
|
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
|
|
qTBtn:connect( "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()
|
|
qTBtn:setTooltip( a_[ 2 ] )
|
|
qTBtn:setIcon( hbide_image( a_[ 1 ] ) )
|
|
qTBtn:setMaximumWidth( 20 )
|
|
qTBtn:setMaximumHeight( 20 )
|
|
qTBtn:connect( "clicked()", a_[ 3 ] )
|
|
::qTBarLines:addWidget( qTBtn )
|
|
aadd( ::aBtnLines, qTBtn )
|
|
ENDIF
|
|
NEXT
|
|
::qTBarLines:addSeparator()
|
|
ENDIF
|
|
|
|
/* Right-hand docks toolbar */
|
|
::oIde:qTBarDocks := QToolBar()
|
|
::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, { ::oSourceThumbnailDock, "thumbnail" } )
|
|
aadd( aBtns, { ::oQScintillaDock , "browser" } )
|
|
aadd( aBtns, { ::oReportsManagerDock , "designer" } )
|
|
aadd( aBtns, {} )
|
|
aadd( aBtns, { ::oDockB2 , "builderror" } )
|
|
|
|
FOR EACH a_ IN aBtns
|
|
IF empty( a_ )
|
|
::qTBarDocks:addSeparator()
|
|
ELSE
|
|
qAct := a_[ 1 ]:oWidget:toggleViewAction()
|
|
qAct:setIcon( hbide_image( a_[ 2 ] ) )
|
|
::qTBarDocks:addAction( qAct )
|
|
aadd( ::aBtnDocks, qAct )
|
|
ENDIF
|
|
NEXT
|
|
|
|
IF ::oIde:lCurEditsMdi
|
|
::oDlg:oWidget:addToolBar( Qt_TopToolBarArea, ::qTBarDocks )
|
|
ELSE
|
|
::oDlg:oWidget:addToolBar( Qt_RightToolBarArea, ::qTBarDocks )
|
|
ENDIF
|
|
|
|
/* 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 ::oIde:lCurEditsMdi
|
|
IF ( n := ascan( ::aViewsInfo, {|e_| e_[ 1 ] == cView } ) ) > 0
|
|
RETURN hbide_image( "panel_" + hb_ntos( n - 1 ) )
|
|
ENDIF
|
|
ELSE
|
|
IF ( n := ascan( ::aPanels, {|q| q:text() == cView } ) ) > 0
|
|
RETURN hbide_image( "panel_" + hb_ntos( n ) )
|
|
ENDIF
|
|
ENDIF
|
|
RETURN ""
|
|
|
|
/*----------------------------------------------------------------------*/
|
|
|
|
METHOD IdeDocks:addPanelButton( cPanel )
|
|
LOCAL qTBtn
|
|
|
|
STATIC nIndex := 0
|
|
nIndex++
|
|
|
|
qTBtn := QToolButton()
|
|
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 )
|
|
qTBtn:connect( "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, qDrop
|
|
LOCAL nAreas := Qt_LeftDockWidgetArea + Qt_RightDockWidgetArea + Qt_TopDockWidgetArea + Qt_BottomDockWidgetArea
|
|
|
|
::oIde:oDockPT := ::getADockWidget( nAreas, "dockProjectTree", "Projects", QDockWidget_DockWidgetFloatable )
|
|
::oDlg:oWidget:addDockWidget( 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( QSizePolicy_MinimumExpanding, QSizePolicy_Preferred )
|
|
::oProjTree:oWidget:setIconSize( QSize( 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()
|
|
|
|
qDrop := ::oDockPT:oWidget // ::oProjTree:oWidget
|
|
|
|
qDrop:setAcceptDrops( .t. )
|
|
qDrop:connect( QEvent_DragEnter, {|p| ::execEvent( "projectTree_dragEnterEvent", p ) } )
|
|
qDrop:connect( QEvent_Drop , {|p| ::execEvent( "projectTree_dropEvent" , p ) } )
|
|
|
|
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( 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( QSizePolicy_MinimumExpanding, QSizePolicy_Preferred )
|
|
::oEditTree:oWidget:setMinimumWidth( 100 )
|
|
::oEditTree:oWidget:setIconSize( QSize( 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( Qt_LeftDockWidgetArea, ::oSkltnsTreeDock:oWidget, Qt_Vertical )
|
|
::oSkltnsTreeDock:oWidget:connect( "visibilityChanged(bool)", {|p| ::execEvent( "dockSkltnsTree_visibilityChanged", p, ::oSkltnsTreeDock:oWidget ) } )
|
|
|
|
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( Qt_RightDockWidgetArea, ::oFuncDock:oWidget, Qt_Vertical )
|
|
::oFuncDock:oWidget:connect( "visibilityChanged(bool)", {|p| ::execEvent( "oFuncDock_visibilityChanged", p, ::oFuncDock:oWidget ) } )
|
|
|
|
::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( Qt_RightDockWidgetArea, ::oHelpDock:oWidget, Qt_Horizontal )
|
|
|
|
::oIde:qHelpBrw := QTextBrowser( ::oHelpDock:oWidget )
|
|
::qHelpBrw:show()
|
|
::qHelpBrw:setContextMenuPolicy( Qt_CustomContextMenu )
|
|
::qHelpBrw:setOpenExternalLinks( .t. )
|
|
|
|
qUrl := QUrl( "idemainpage.html" )
|
|
qStr := QStringList()
|
|
qStr:append( hb_dirBase() + "docs" )
|
|
|
|
::qHelpBrw:setSearchPaths( qStr )
|
|
::qHelpBrw:setSource( qUrl )
|
|
|
|
::oHelpDock:oWidget:setWidget( ::oIde:qHelpBrw )
|
|
|
|
//::oHelpDock:connect( ::qHelpBrw, "customContextMenuRequested(QPoint)", {|p| ::execEvent( "qHelpBrw_contextMenuRequested", p ) } )
|
|
::qHelpBrw:connect( "customContextMenuRequested(QPoint)", {|p| ::execEvent( "qHelpBrw_contextMenuRequested", p ) } )
|
|
|
|
::oHelpDock:oWidget:connect( "visibilityChanged(bool)", {|p| ::execEvent( "dockHelpDock_visibilityChanged", p, ::oHelpDock:oWidget ) } )
|
|
|
|
RETURN Self
|
|
|
|
/*----------------------------------------------------------------------*/
|
|
|
|
METHOD IdeDocks:buildCompileResults()
|
|
|
|
::oIde:oDockB := ::getADockWidget( Qt_BottomDockWidgetArea, "dockCompileResults", "Compile Results" )
|
|
::oDlg:oWidget:addDockWidget( 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( 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( 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. )
|
|
::oOutputResult:setContextMenuPolicy( Qt_CustomContextMenu )
|
|
|
|
::oDockB2:oWidget:setWidget( ::oOutputResult:oWidget )
|
|
|
|
::oOutputResult:oWidget:connect( "customContextMenuRequested(QPoint)", {|p| ::execEvent( "outputConsole_contextMenuRequested", p ) } )
|
|
::oOutputResult:oWidget:connect( "copyAvailable(bool)", {|l| ::outputDoubleClicked( l ) } )
|
|
|
|
RETURN Self
|
|
|
|
/*----------------------------------------------------------------------*/
|
|
|
|
METHOD IdeDocks:outputDoubleClicked( lSelected )
|
|
LOCAL qCursor, cText
|
|
LOCAL cSource, nLine
|
|
|
|
IF lSelected
|
|
qCursor := ::oOutputResult:oWidget:textCursor()
|
|
cText := qCursor:block():text()
|
|
|
|
IF hbide_parseFNfromStatusMsg( cText, @cSource, @nLine, .T. )
|
|
IF ::oSM:editSource( cSource, 0, 0, 0, NIL, NIL, .f., .t. )
|
|
qCursor := ::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: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()
|
|
|
|
::oIde:aMarkTBtns[ nIndex ]:setMaximumHeight( 12 )
|
|
::oIde:aMarkTBtns[ nIndex ]:setMaximumWidth( 12 )
|
|
::oIde:aMarkTBtns[ nIndex ]:setStyleSheet( "background-color: " + aColors[ nIndex ] + ";" )
|
|
::oIde:aMarkTBtns[ nIndex ]:hide()
|
|
::oIde:aMarkTBtns[ nIndex ]:connect( "clicked()", {|| ::oEM:gotoMark( nIndex ) } )
|
|
|
|
RETURN ::oIde:aMarkTBtns[ nIndex ]
|
|
|
|
/*----------------------------------------------------------------------*/
|
|
|
|
METHOD IdeDocks:animateComponents( nMode )
|
|
LOCAL cStyle, oView
|
|
|
|
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 )
|
|
|
|
::qAnimateAction:setChecked( ::nAnimantionMode != HBIDE_ANIMATION_NONE )
|
|
|
|
/* Main Window */
|
|
::oDlg:setStyleSheet( GetStyleSheet( "QMainWindow", ::nAnimantionMode ) )
|
|
|
|
/* Main Menu Bar with all its submenus */
|
|
::oDlg:menubar():setStyleSheet( GetStyleSheet( "QMenuBar", nMode ), GetStyleSheet( "QMenuPop", nMode ) )
|
|
|
|
/* Toolbars */
|
|
::oMainToolbar:oWidget:setStyleSheet( GetStyleSheet( "QToolBar", nMode ) )
|
|
IF ! ::oIde:lCurEditsMdi
|
|
::qTBarPanels :setStyleSheet( GetStyleSheet( "QToolBarLR5", nMode ) )
|
|
::qTBarLines :setStyleSheet( GetStyleSheet( "QToolBarLR5", nMode ) )
|
|
ENDIF
|
|
::qTBarDocks :setStyleSheet( GetStyleSheet( "QToolBarLR5", nMode ) )
|
|
|
|
IF ::oIde:lCurEditsMdi
|
|
::qMdiToolbar:setStyleSheet( GetStyleSheet( "QToolBar", nMode ) )
|
|
::qMdiToolbarL:setStyleSheet( GetStyleSheet( "QToolBarLR5", nMode ) )
|
|
ENDIF
|
|
/* User defined toolbars */
|
|
::oTM:setStyleSheet( GetStyleSheet( "QToolBarLR5", nMode ) )
|
|
|
|
::oEM:setStyleSheet( nMode )
|
|
::oBM:setStyleSheet( nMode )
|
|
|
|
/* Statusbar */
|
|
::oSBar:oWidget:setStyleSheet( GetStyleSheet( "QStatusBar", nMode ) )
|
|
|
|
/* Docking Widgets */
|
|
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 )
|
|
::oQScintillaDock:oWidget : setStyleSheet( cStyle )
|
|
::oSourceThumbnailDock:oWidget : setStyleSheet( cStyle )
|
|
|
|
::oProjTree:setStyleSheet( GetStyleSheet( "QTreeWidgetHB", ::nAnimantionMode ) )
|
|
|
|
/* Edior Tab Widget */
|
|
FOR EACH oView IN ::aViews
|
|
oView:oTabWidget:oWidget:setStyleSheet( GetStyleSheet( "QTabWidget", nMode ) )
|
|
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( Qt_RightDockWidgetArea, ::oThemesDock:oWidget, Qt_Horizontal )
|
|
::oThemesDock:oWidget:connect( "visibilityChanged(bool)", {|p| ::execEvent( "dockThemes_visibilityChanged", p, ::oThemesDock:oWidget ) } )
|
|
|
|
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( Qt_RightDockWidgetArea, ::oPropertiesDock:oWidget, Qt_Horizontal )
|
|
::oPropertiesDock:oWidget:connect( "visibilityChanged(bool)", {|p| ::execEvent( "dockProperties_visibilityChanged", p, ::oPropertiesDock:oWidget ) } )
|
|
|
|
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( Qt_RightDockWidgetArea, ::oFindDock:oWidget, Qt_Horizontal )
|
|
::oFindDock:oWidget:connect( "visibilityChanged(bool)", {|p| ::execEvent( "dockFindInFiles_visibilityChanged", p, ::oFindDock:oWidget ) } )
|
|
|
|
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( Qt_RightDockWidgetArea, ::oDocViewDock:oWidget, Qt_Horizontal )
|
|
::oDocViewDock:oWidget:connect( "visibilityChanged(bool)", {|p| ::execEvent( "dockDocViewer_visibilityChanged", p, ::oDocViewDock:oWidget ) } )
|
|
|
|
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( Qt_RightDockWidgetArea, ::oDocWriteDock:oWidget, Qt_Horizontal )
|
|
::oDocWriteDock:oWidget:connect( "visibilityChanged(bool)", {|p| ::execEvent( "dockDocWriter_visibilityChanged", p, ::oDocWriteDock:oWidget ) } )
|
|
|
|
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( Qt_RightDockWidgetArea, ::oFunctionsDock:oWidget, Qt_Horizontal )
|
|
::oFunctionsDock:oWidget:connect( "visibilityChanged(bool)", {|p| ::execEvent( "docFunctions_visibilityChanged", p, ::oFunctionsDock:oWidget ) } )
|
|
|
|
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( Qt_RightDockWidgetArea, ::oEnvironDock:oWidget, Qt_Horizontal )
|
|
::oEnvironDock:oWidget:connect( "visibilityChanged(bool)", {|p| ::execEvent( "docEnvironments_visibilityChanged", p, ::oEnvironDock:oWidget ) } )
|
|
|
|
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( Qt_RightDockWidgetArea, ::oSkeltnDock:oWidget, Qt_Horizontal )
|
|
::oSkeltnDock:oWidget:connect( "visibilityChanged(bool)", {|p| ::execEvent( "docSkeletons_visibilityChanged", p, ::oSkeltnDock:oWidget ) } )
|
|
|
|
RETURN Self
|
|
|
|
/*----------------------------------------------------------------------*/
|
|
|
|
METHOD IdeDocks:buildSourceThumbnail()
|
|
LOCAL oDock
|
|
LOCAL nAreas := Qt_LeftDockWidgetArea + Qt_RightDockWidgetArea + Qt_TopDockWidgetArea + Qt_BottomDockWidgetArea
|
|
|
|
oDock := ::getADockWidget( nAreas, "dockSourceThumbnail", "Source Thumbnail", QDockWidget_DockWidgetFloatable )
|
|
::oDlg:oWidget:addDockWidget( Qt_RightDockWidgetArea, oDock:oWidget, Qt_Horizontal )
|
|
oDock:oWidget:connect( "visibilityChanged(bool)", {|p| ::execEvent( "dockSourceThumbnail_visibilityChanged", p, oDock:oWidget ) } )
|
|
::oIde:oSourceThumbnailDock := oDock
|
|
|
|
RETURN Self
|
|
|
|
/*----------------------------------------------------------------------*/
|
|
|
|
METHOD IdeDocks:buildQScintilla()
|
|
LOCAL nAreas := Qt_LeftDockWidgetArea + Qt_RightDockWidgetArea + Qt_TopDockWidgetArea + Qt_BottomDockWidgetArea
|
|
|
|
::oIde:oQScintillaDock := ::getADockWidget( nAreas, "dockQScintilla", "ideDBU", QDockWidget_DockWidgetFloatable )
|
|
::oDlg:oWidget:addDockWidget( Qt_RightDockWidgetArea, ::oQScintillaDock:oWidget, Qt_Horizontal )
|
|
::oQScintillaDock:oWidget:connect( "visibilityChanged(bool)" , {|p| ::execEvent( "dockQScintilla_visibilityChanged", p, ::oQScintillaDock:oWidget ) } )
|
|
|
|
RETURN Self
|
|
|
|
/*----------------------------------------------------------------------*/
|
|
|
|
METHOD IdeDocks:buildReportsDesignerWidget()
|
|
LOCAL nAreas := Qt_LeftDockWidgetArea + Qt_RightDockWidgetArea + Qt_TopDockWidgetArea + Qt_BottomDockWidgetArea
|
|
|
|
::oIde:oReportsManagerDock := ::getADockWidget( nAreas, "dockReportDesigner", "HBReportsManager", QDockWidget_DockWidgetFloatable )
|
|
::oDlg:oWidget:addDockWidget( Qt_RightDockWidgetArea, ::oReportsManagerDock:oWidget, Qt_Horizontal )
|
|
::oReportsManagerDock:oWidget:connect( "visibilityChanged(bool)", {|p| ::execEvent( "dockReportsManager_visibilityChanged", p, ::oReportsManagerDock:oWidget ) } )
|
|
|
|
RETURN Self
|
|
|
|
/*----------------------------------------------------------------------*/
|
|
|
|
METHOD IdeDocks:buildFormatWidget()
|
|
LOCAL nAreas := Qt_LeftDockWidgetArea + Qt_RightDockWidgetArea + Qt_TopDockWidgetArea + Qt_BottomDockWidgetArea
|
|
|
|
::oIde:oFormatDock := ::getADockWidget( nAreas, "dockFormat", "Format Source", QDockWidget_DockWidgetFloatable )
|
|
::oDlg:oWidget:addDockWidget( Qt_RightDockWidgetArea, ::oFormatDock:oWidget, Qt_Horizontal )
|
|
::oFormatDock:oWidget:connect( "visibilityChanged(bool)", {|p| ::execEvent( "dockFormat_visibilityChanged", p, ::oFormatDock:oWidget ) } )
|
|
|
|
RETURN Self
|
|
|
|
/*----------------------------------------------------------------------*/
|
|
|