/* * $Id$ */ /* * Harbour Project source code: * * Copyright 2009-2010 Pritpal Bedi * 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 * 28Dec2009 */ /*----------------------------------------------------------------------*/ /*----------------------------------------------------------------------*/ /*----------------------------------------------------------------------*/ #include "hbide.ch" #include "common.ch" #include "hbclass.ch" #include "xbp.ch" #include "appevent.ch" #include "hbqtgui.ch" /*----------------------------------------------------------------------*/ #define __QEvent_WindowStateChange__ 2001 #define __QEvent_Hide__ 2002 #define __qSystemTrayIcon_activated__ 2003 #define __qSystemTrayIcon_show__ 2004 #define __qSystemTrayIcon_close__ 2005 #define __qTimer_timeOut__ 2006 #define __buttonViewTabbed_clicked__ 2007 #define __x_mdiArea_subWindowActivated__ 2008 #define __buttonViewOrganized_clicked__ 2009 #define __buttonSaveLayout_clicked__ 2010 #define __buttonViewCascaded_clicked__ 2011 #define __buttonViewTiled_clicked__ 2012 #define __buttonViewMaximized_clicked__ 2013 #define __buttonViewStackedVert_clicked__ 2014 #define __buttonViewStackedHorz_clicked__ 2015 #define __buttonViewZoomedIn_clicked__ 2016 #define __buttonViewZoomedOut_clicked__ 2017 #define __mdiArea_subWindowActivated__ 2018 #define __editWidget_dragEnterEvent__ 2019 #define __editWidget_dragMoveEvent__ 2020 #define __editWidget_dropEvent__ 2021 #define __mdiSubWindow_windowStateChanged__ 2022 #define __projectTree_dragEnterEvent__ 2023 #define __projectTree_dropEvent__ 2024 #define __dockSkltnsTree_visibilityChanged__ 2025 #define __oFuncDock_visibilityChanged__ 2026 #define __qHelpBrw_contextMenuRequested__ 2027 #define __dockHelpDock_visibilityChanged__ 2028 #define __outputConsole_contextMenuRequested__ 2029 #define __dockThemes_visibilityChanged__ 2030 #define __dockProperties_visibilityChanged__ 2031 #define __dockFindInFiles_visibilityChanged__ 2032 #define __dockDocViewer_visibilityChanged__ 2033 #define __dockDocWriter_visibilityChanged__ 2034 #define __docFunctions_visibilityChanged__ 2035 #define __docEnvironments_visibilityChanged__ 2036 #define __docSkeletons_visibilityChanged__ 2037 #define __dockSourceThumbnail_visibilityChanged__ 2038 #define __dockQScintilla_visibilityChanged__ 2039 #define __dockReportsManager_visibilityChanged__ 2040 #define __dockFormat_visibilityChanged__ 2041 #define __dockCuiEd_visibilityChanged__ 2042 #define __dockUISrc_visibilityChanged__ 2043 /*----------------------------------------------------------------------*/ 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 qTBtnClose DATA lChanging INIT .f. DATA qTimer DATA nPrevWindowState INIT Qt_WindowNoState DATA lSystemTrayAvailable INIT .f. DATA lMinimizeInSystemTray INIT .f. /* TODO: make it user definable */ DATA qAct1 DATA qAct2 DATA cOldView INIT "" METHOD new( oIde ) METHOD create( oIde ) METHOD destroy() METHOD execEvent( nEvent, 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 ) 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() METHOD hideAllDocks() METHOD setToolbarSize( nSize ) METHOD buildCuiEdWidget() METHOD buildUISrcDock() ENDCLASS /*----------------------------------------------------------------------*/ METHOD IdeDocks:new( oIde ) ::oIde := oIde RETURN Self /*----------------------------------------------------------------------*/ METHOD IdeDocks:create( oIde ) DEFAULT oIde TO ::oIde ::oIde := oIde RETURN Self /*----------------------------------------------------------------------*/ METHOD IdeDocks:hideAllDocks() // Left ::oDockPT : hide() ::oDockED : hide() ::oSkltnsTreeDock : hide() // Right ::oEnvironDock : hide() ::oPropertiesDock : hide() ::oThemesDock : hide() ::oDocViewDock : hide() ::oDocWriteDock : hide() ::oFindDock : hide() ::oFunctionsDock : hide() ::oSkeltnDock : hide() ::oHelpDock : hide() ::oFuncDock : hide() ::oSourceThumbnailDock : hide() ::oQScintillaDock : hide() ::oReportsManagerDock : hide() ::oFormatDock : hide() ::oCuiEdDock : hide() ::oUiSrcDock : hide() // Bottom ::oDockB2 : hide() ::oDockB1 : hide() ::oDockB : hide() RETURN Self /*----------------------------------------------------------------------*/ METHOD IdeDocks:destroy() LOCAL qTmp FOR EACH qTmp IN ::oIde:aViews qTmp:oTabWidget:oWidget:disconnect( QEvent_DragEnter ) qTmp:oTabWidget:oWidget:disconnect( QEvent_DragMove ) qTmp:oTabWidget:oWidget:disconnect( QEvent_Drop ) NEXT ::oDlg:oWidget : disconnect( QEvent_WindowStateChange ) ::oDlg:oWidget : disconnect( QEvent_Hide ) ::oIde:oProjRoot := NIL ::oIde:oOpenedSources := NIL ::oOutputResult:oWidget : disconnect( "copyAvailable(bool)" ) ::oEnvironDock:oWidget : disconnect( "visibilityChanged(bool)" ) ::oPropertiesDock:oWidget : disconnect( "visibilityChanged(bool)" ) ::oThemesDock:oWidget : disconnect( "visibilityChanged(bool)" ) ::oDocViewDock:oWidget : disconnect( "visibilityChanged(bool)" ) ::oDocWriteDock:oWidget : disconnect( "visibilityChanged(bool)" ) ::oFindDock:oWidget : disconnect( "visibilityChanged(bool)" ) ::oFunctionsDock:oWidget : disconnect( "visibilityChanged(bool)" ) ::oSkeltnDock:oWidget : disconnect( "visibilityChanged(bool)" ) ::oHelpDock:oWidget : disconnect( "visibilityChanged(bool)" ) ::oFuncDock:oWidget : disconnect( "visibilityChanged(bool)" ) ::oSourceThumbnailDock:oWidget: disconnect( "visibilityChanged(bool)" ) ::oQScintillaDock:oWidget : disconnect( "visibilityChanged(bool)" ) ::oReportsManagerDock:oWidget : disconnect( "visibilityChanged(bool)" ) ::oFormatDock:oWidget : disconnect( "visibilityChanged(bool)" ) ::oCuiEdDock:oWidget : disconnect( "visibilityChanged(bool)" ) ::oUiSrcDock:oWidget : disconnect( "visibilityChanged(bool)" ) #if 0 /* Not Implemented */ ::oDockPT:oWidget : disconnect( "visibilityChanged(bool)" ) ::oDockED:oWidget : disconnect( "visibilityChanged(bool)" ) ::oDockB2:oWidget : disconnect( "visibilityChanged(bool)" ) #endif IF !empty( ::oSys ) ::oIde:oSys : disconnect( "activated(QSystemTrayIcon::ActivationReason)" ) IF HB_ISOBJECT( ::qAct1 ) ::qAct1 : disconnect( "triggered(bool)" ) ::qAct2 : disconnect( "triggered(bool)" ) ENDIF ::oIde:oSys := NIL ::qAct1 := NIL ::qAct2 := NIL ENDIF IF !empty( ::qTimer ) ::qTimer:disconnect( "timeout()" ) ::qTimer:stop() ::qTimer := NIL ENDIF ::oIde:oOutputResult := NIL ::oIde:oEnvironDock := NIL ::oIde:oPropertiesDock := NIL ::oIde:oThemesDock := NIL ::oIde:oDocViewDock := NIL ::oIde:oDocWriteDock := NIL ::oIde:oFindDock := NIL ::oIde:oFunctionsDock := NIL ::oIde:oSkeltnDock := NIL ::oIde:oHelpDock := NIL ::oIde:oFuncDock := NIL ::oIde:oSourceThumbnailDock := NIL ::oIde:oQScintillaDock := NIL ::oIde:oReportsManagerDock := NIL ::oIde:oFormatDock := NIL ::oIde:oCuiEdDock := NIL ::oIde:oUiSrcDock := NIL ::oIde:oDockPT := NIL ::oIde:oDockED := NIL ::oIde:oDockB2 := NIL ::oIde:oDockB1 := NIL ::oIde:oLinkResult := NIL ::oIde:oSys := NIL ::qAct1 := NIL ::qAct2 := NIL ::oIde:oDockB := NIL ::oIde:oCompileResult := NIL FOR EACH qTmp IN ::aPanels qTmp:disconnect( "clicked()" ) qTmp := NIL NEXT FOR EACH qTmp IN ::aMdiBtns qTmp:disconnect( "clicked()" ) qTmp := NIL NEXT FOR EACH qTmp IN ::oIde:aMarkTBtns qTmp:disconnect( "clicked()" ) qTmp := NIL NEXT FOR EACH qTmp IN ::oIde:aMdies qTmp:disconnect( "windowStateChanged(Qt::WindowStates,Qt::WindowStates)" ) qTmp := NIL NEXT IF HB_ISOBJECT( ::qMdiToolBar ) ::qMdiToolBar:destroy() ::qMdiToolBar := NIL ENDIF IF HB_ISOBJECT( ::qMdiToolBarL ) ::qMdiToolBarL:destroy() ::qMdiToolBarL := NIL ENDIF ::nPass := NIL ::aPanels := NIL ::aMdiBtns := NIL ::aBtnLines := NIL ::aBtnDocks := NIL ::oBtnTabClose := NIL ::aViewsInfo := NIL ::qTBtnClose := NIL ::qTimer := NIL ::nPrevWindowState := NIL RETURN Self /*------------------------------------------------------------------------*/ METHOD IdeDocks:getEditorPanelsInfo() LOCAL b_, a_:= {} FOR EACH b_ IN ::aViewsInfo 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( ::oINI:nEditsViewStyle ) + "," ; ) NEXT RETURN a_ /*----------------------------------------------------------------------*/ METHOD IdeDocks:buildDialog() LOCAL s, aSize, a_, x_, lNew := .f. ::oIde:oDlg := XbpDialog():new() ::oDlg:icon := hbide_image( "hbide" ) ::oDlg:title := "Harbour IDE" ::oDlg:create( , , , , , .f. ) ::oDlg:oWidget:setStyleSheet( GetStyleSheet( "QMainWindow", ::nAnimantionMode ) ) ::oDlg:close := {|| hbide_setClose( hbide_getYesNo( "hbIDE is about to be closed!", "Are you sure?" ) ), ; PostAppEvent( xbeP_Close, , , ::oDlg ) } //::oDlg:setDockOptions( QMainWindow_AllowTabbedDocks + QMainWindow_ForceTabbedDocks ) ::oDlg:setTabShape( ::oINI:nDocksTabShape ) ::oDlg:setTabPosition( Qt_RightDockWidgetArea , ::oINI:nDocksRightTabPos ) ::oDlg:setTabPosition( Qt_BottomDockWidgetArea, ::oINI:nDocksBottomTabPos ) ::oDlg:setTabPosition( Qt_LeftDockWidgetArea , ::oINI:nDocksLeftTabPos ) ::oDlg:setTabPosition( Qt_TopDockWidgetArea , ::oINI:nDocksTopTabPos ) ::oDlg:setCorner( Qt_BottomLeftCorner, Qt_LeftDockWidgetArea ) ::oDlg:setCorner( Qt_BottomRightCorner, Qt_RightDockWidgetArea ) ::oDlg:oWidget:resize( 1000,570 ) ::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 ) ::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:oWidget , 2, 0, 1, 2 ) // Changed /* 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 ] ) ) 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 lNew := .t. hb_ains( ::aViewsInfo, 1, { "Main", NIL, 0, 0, QMdiArea_TabbedView, 0 }, .t. ) ENDIF /* View Panels */ x_:= aclone( ::aViewsInfo ) FOR EACH a_ IN ::aViewsInfo ::buildViewWidget( a_[ 1 ] ) NEXT ::setView( "Main" ) IF lNew ::oStackedWidget:setViewMode( QMdiArea_TabbedView ) ::oINI:nEditsViewStyle := HBPMDI_STYLE_MAXIMIZED ::stackMaximized() ELSE IF x_[ 1,5 ] == QMdiArea_TabbedView ::oStackedWidget:setViewMode( QMdiArea_TabbedView ) ENDIF IF x_[ 1,6 ] == HBPMDI_STYLE_TILED ::oStackedWidget:tileSubWindows() ELSEIF x_[ 1,6 ] == HBPMDI_STYLE_CASCADED ::oStackedWidget:cascadeSubWindows() ELSEIF x_[ 1,6 ] == HBPMDI_STYLE_MAXIMIZED ::oINI:nEditsViewStyle := HBPMDI_STYLE_MAXIMIZED ::stackMaximized() ELSEIF x_[ 1,6 ] == HBPMDI_STYLE_TILEDVERT ::oINI:nEditsViewStyle := HBPMDI_STYLE_TILEDVERT ::stackVertically() ELSEIF x_[ 1,6 ] == HBPMDI_STYLE_TILEDHORZ ::oINI:nEditsViewStyle := HBPMDI_STYLE_TILEDHORZ ::stackHorizontally() 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() ::buildCuiEdWidget() ::buildUiSrcDock() /* 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 ) ::oDlg:oWidget:tabifyDockWidget( ::oFormatDock:oWidget , ::oCuiEdDock:oWidget ) ::oDlg:oWidget:tabifyDockWidget( ::oCuiEdDock:oWidget , ::oUiSrcDock:oWidget ) RETURN Self /*----------------------------------------------------------------------*/ METHOD IdeDocks:buildSystemTray() IF empty( ::oSys ) ::oIde:oSys := QSystemTrayIcon( ::oDlg:oWidget ) IF ( ::lSystemTrayAvailable := ::oSys:isSystemTrayAvailable() ) .AND. ::lMinimizeInSystemTray ::oSys:setIcon( QIcon( hbide_image( "hbide" ) ) ) ::oSys:connect( "activated(QSystemTrayIcon::ActivationReason)", {|p| ::execEvent( __qSystemTrayIcon_activated__, p ) } ) ::oIde:oSysMenu := QMenu() ::qAct1 := ::oSysMenu:addAction( QIcon( hbide_image( "fullscreen" ) ), "&Show" ) ::oSysMenu:addSeparator() ::qAct2 := ::oSysMenu:addAction( QIcon( 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( nEvent, p, p1 ) LOCAL qEvent, qMime, qList, qUrl, i, n, oEdit, aMenu IF ::lQuitting RETURN Self ENDIF SWITCH nEvent CASE __dockUISrc_visibilityChanged__ IF p; ::oUiS:show(); ENDIF IF ! p .AND. ! p1:isVisible() p1:raise() ENDIF EXIT CASE __dockCuiEd_visibilityChanged__ IF p; ::oCUI:show(); ENDIF IF ! p .AND. ! p1:isVisible() p1:raise() ENDIF EXIT CASE __dockFormat_visibilityChanged__ IF p; ::oFmt:show(); ENDIF IF ! p .AND. ! p1:isVisible() p1:raise() ENDIF EXIT CASE __dockReportsManager_visibilityChanged__ IF !empty( p1 ) IF ! p .AND. ! p1:isVisible() p1:raise() ENDIF ENDIF EXIT CASE __dockQScintilla_visibilityChanged__ IF p; ::oBM:show() ; ENDIF IF !empty( p1 ) IF ! p .AND. ! p1:isVisible() p1:raise() ENDIF ENDIF EXIT CASE __dockSourceThumbnail_visibilityChanged__ IF p; ::oEM:showThumbnail(); ENDIF IF !empty( p1 ) IF ! p .AND. ! p1:isVisible() p1:raise() ENDIF ENDIF EXIT CASE __dockSkltnsTree_visibilityChanged__ IF p; ::oSK:showTree(); ENDIF IF !empty( p1 ) IF ! p .AND. ! p1:isVisible() p1:raise() ENDIF ENDIF EXIT CASE __dockHelpDock_visibilityChanged__ IF !empty( p1 ) IF ! p .AND. ! p1:isVisible() p1:raise() ENDIF ENDIF EXIT CASE __dockDocViewer_visibilityChanged__ IF p; ::oHL:show(); ENDIF IF !empty( p1 ) IF ! p .AND. ! p1:isVisible() p1:raise() ENDIF ENDIF EXIT CASE __dockDocWriter_visibilityChanged__ IF p; ::oDW:show(); ENDIF IF !empty( p1 ) IF ! p .AND. ! p1:isVisible() p1:raise() ENDIF ENDIF EXIT CASE __oFuncDock_visibilityChanged__ IF !empty( p1 ) IF ! p .AND. ! p1:isVisible() p1:raise() ENDIF ENDIF EXIT CASE __docFunctions_visibilityChanged__ IF p; ::oFN:show(); ENDIF IF !empty( p1 ) IF ! p .AND. ! p1:isVisible() p1:raise() ENDIF ENDIF EXIT CASE __dockProperties_visibilityChanged__ IF p; ::oPM:fetchProperties(); ENDIF IF !empty( p1 ) IF ! p .AND. ! p1:isVisible() p1:raise() ENDIF ENDIF EXIT CASE __docEnvironments_visibilityChanged__ IF p; ::oEV:show(); ENDIF IF !empty( p1 ) IF ! p .AND. ! p1:isVisible() p1:raise() ENDIF ENDIF EXIT CASE __docSkeletons_visibilityChanged__ IF p; ::oSK:show(); ENDIF IF !empty( p1 ) IF ! p .AND. ! p1:isVisible() p1:raise() ENDIF ENDIF EXIT CASE __dockThemes_visibilityChanged__ IF p; ::oTH:show(); ENDIF IF !empty( p1 ) IF ! p .AND. ! p1:isVisible() p1:raise() ENDIF ENDIF EXIT CASE __dockFindInFiles_visibilityChanged__ IF p; ::oFF:show(); ENDIF IF !empty( p1 ) IF ! p .AND. ! p1:isVisible() p1:raise() ENDIF 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 ::nPrevWindowState := p:oldState() EXIT CASE QEvent_Hide IF ::lSystemTrayAvailable .AND. ::lMinimizeInSystemTray qEvent := p IF ! ::lChanging ::lChanging := .t. IF qEvent:spontaneous() IF empty( ::qTimer ) ::qTimer := QTimer() ::qTimer:setSingleShot( .t. ) ::qTimer:setInterval( 250 ) ::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_dragMoveEvent__ CASE __editWidget_dragEnterEvent__ p:acceptProposedAction() EXIT CASE __editWidget_dropEvent__ qMime := p:mimeData() IF qMime:hasUrls() qList := qMime:urls() FOR i := 0 TO qList:size() - 1 qUrl := qList:at( i ) IF hbide_isValidText( qUrl:toLocalFile() ) ::oSM:editSource( hbide_pathToOSPath( qUrl:toLocalFile() ) ) ENDIF NEXT p:setDropAction( Qt_CopyAction ) p:accept() qList := NIL ENDIF qMime := NIL EXIT CASE __projectTree_dragEnterEvent__ p:acceptProposedAction() EXIT CASE __projectTree_dropEvent__ qMime := p:mimeData() IF qMime:hasUrls() qList := qMime:urls() FOR i := 0 TO qList:size() - 1 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_IsEqual( 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__ ::oINI:nEditsViewStyle := HBPMDI_STYLE_ORGANIZED ::restState() EXIT CASE __buttonSaveLayout_clicked__ IF ::oINI:nEditsViewStyle == HBPMDI_STYLE_ORGANIZED ::savePanelsGeometry() ENDIF EXIT CASE __buttonViewTiled_clicked__ ::oStackedWidget:tileSubWindows() ::oINI:nEditsViewStyle := HBPMDI_STYLE_TILED EXIT CASE __buttonViewCascaded_clicked__ ::oStackedWidget:cascadeSubWindows() ::oINI:nEditsViewStyle := HBPMDI_STYLE_CASCADED EXIT CASE __buttonViewMaximized_clicked__ ::oINI:nEditsViewStyle := HBPMDI_STYLE_MAXIMIZED ::stackMaximized() EXIT CASE __buttonViewStackedVert_clicked__ ::oINI:nEditsViewStyle := HBPMDI_STYLE_TILEDVERT ::stackVertically() EXIT CASE __buttonViewStackedHorz_clicked__ ::oINI:nEditsViewStyle := 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 ! 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 ::oINI:nEditsViewStyle == 4 .OR. ::oINI:nEditsViewStyle == 5 IF ::oINI:nEditsViewStyle == 4 nT := 0 FOR EACH qMdi IN ::oIde:aMdies qRect := qMdi:geometry() nH := qRect:height() + ( nMode * ( qRect:height() / 4 ) ) qMdi:setGeometry( QRect( 0, nT, qRect:width(), nH ) ) nT += nH NEXT ELSE nL := 0 FOR EACH qMdi IN ::oIde:aMdies qRect := qMdi:geometry() nW := qRect:width() + ( nMode * ( qRect:width() / 4 ) ) qMdi:setGeometry( QRect( nL, 0, nW, qRect:height() ) ) nL += nW 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 ) nT := 0 nL := 0 FOR EACH qMdi IN ::oIde:aMdies qMdi:setGeometry( QRect( nL, nT, nW, nH ) ) nL += nW 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 ) nW := qVPort:width() nT := 0 FOR EACH qMdi IN ::oIde:aMdies qMdi:setGeometry( QRect( 0, nT, nW, nH ) ) nT += nH 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 ) 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() RETURN oDock /*----------------------------------------------------------------------*/ METHOD IdeDocks:setViewInitials() LOCAL a_ FOR EACH a_ IN ::aViewsInfo ::setView( a_[ 1 ] ) IF ::qTabWidget:count() == 1 ::oEM:setSourceVisibleByIndex( 0 ) ELSE #if 0 ::qTabWidget:setCurrentIndex( 0 ) ::qTabWidget:setCurrentIndex( ::qTabWidget:count() - 1 ) ::qTabWidget:setCurrentIndex( 0 ) #endif ENDIF NEXT RETURN Self /*------------------------------------------------------------------------*/ METHOD IdeDocks:setView( cView ) LOCAL n, nIndex ::cOldView := ::oIde:cWrkView 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 ) ::setView( cView ) ENDIF ENDIF EXIT OTHERWISE IF ( n := ascan( ::aViews, {|o| iif( HB_ISSTRING( o:oWidget:objectName() ), o:oWidget:objectName() == cView, .f. ) } ) ) > 0 ::oIde:cWrkView := cView ::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 ::oStackedWidget:oWidget:setActiveSubWindow( ::oIde:aMdies[ n ] ) ::setStatusText( SB_PNL_VIEW, ::cWrkView ) ENDIF EXIT ENDSWITCH RETURN NIL /*------------------------------------------------------------------------*/ METHOD IdeDocks:setToolbarSize( nSize ) ::qMdiToolbarL:size := QSize( nSize,nSize ) ::qMdiToolbarL:setIconSize( ::qMdiToolbarL:size ) ::qMdiToolbarL:setMaximumWidth( nSize + 8 ) ::qMdiToolbar:size := QSize( nSize,nSize ) ::qMdiToolbar:setIconSize( ::qMdiToolbar:size ) ::qMdiToolbar:setMaximumHeight( nSize + 8 ) RETURN Self /*----------------------------------------------------------------------*/ METHOD IdeDocks:buildMdiToolbarLeft() ::qMdiToolbarL := HbqToolbar():new() ::qMdiToolbarL:orientation := Qt_Vertical ::qMdiToolbarL:size := QSize( val( ::oINI:cToolbarSize ), val( ::oINI:cToolbarSize ) ) ::qMdiToolbarL:create( "EditsManager_Left_Toolbar" ) ::qMdiToolbarL:setWindowTitle( "Toolbar: Editing Area's Left" ) ::qMdiToolbarL:setObjectName( "ToolbarEditingAreaLeft" ) ::qMdiToolbarL:setStyleSheet( GetStyleSheet( "QToolBar", ::nAnimantionMode ) ) ::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() IF ! ::oINI:lShowEditsLeftToolbar ::qMdiToolbarL:hide() ENDIF 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:size := QSize( val( ::oINI:cToolbarSize ), val( ::oINI:cToolbarSize ) ) ::qMdiToolbar:create( "EditsManager_Top_Toolbar" ) ::qMdiToolbar:setStyleSheet( GetStyleSheet( "QToolBar", ::nAnimantionMode ) ) ::qMdiToolbar:setObjectName( "ToolbarEditingAreaTop" ) ::qMdiToolbar:setWindowTitle( "Toolbar: Editing Area's Top" ) 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. ) IF ! ::oINI:lShowEditsTopToolbar ::qMdiToolbar:hide() ENDIF 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() ::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 ) } ) RETURN Self /*----------------------------------------------------------------------*/ METHOD IdeDocks:buildViewWidget( cView ) LOCAL oFrame, qTBtnClose, qDrop, qMdi, n qMdi := QMdiSubWindow() qMdi:setWindowTitle( cView ) qMdi:setObjectName( cView ) qMdi:setWindowIcon( QIcon( ::getPanelIcon( cView ) ) ) oFrame := XbpWindow():new( ::oStackedWidget ) oFrame:oWidget := QWidget( ::oStackedWidget:oWidget ) oFrame:oWidget:setObjectName( cView ) ::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. ) qTBtnClose := QToolButton() qTBtnClose:setTooltip( "Close Tab" ) qTBtnClose:setAutoRaise( .t. ) qTBtnClose:setIcon( QIcon( 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_DragMove , {|p| ::execEvent( __editWidget_dragMoveEvent__ , p ) } ) qDrop:connect( QEvent_Drop , {|p| ::execEvent( __editWidget_dropEvent__ , p ) } ) 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 ) ::oStackedWidget:oWidget:addSubWindow( qMdi ) qMdi:connect( "windowStateChanged(Qt::WindowStates,Qt::WindowStates)", ; {|p,p1| ::execEvent( __mdiSubWindow_windowStateChanged__, qMdi, { p, p1 } ) } ) ::setView( cView ) 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() ::oUpDn:oUI:setParent( ::qMdiToolbarL:oWidget ) ::oUpDn:oUI:show() ::qMdiToolbarL:addWidget( "UpDown", ::oUpDn:oUI:oWidget ) ::oUpDn:oUI:hide() RETURN Self /*----------------------------------------------------------------------*/ METHOD IdeDocks:buildToolBarPanels() LOCAL a_, qAct LOCAL qSize := QSize( 20,20 ) LOCAL aBtns := {} /* Right-hand docks toolbar */ 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, { ::oCuiEdDock , "cuied" } ) aadd( aBtns, { ::oUiSrcDock , "fileprg" } ) aadd( aBtns, {} ) aadd( aBtns, { ::oDockB2 , "builderror" } ) ::oIde:qTBarDocks := HBQToolBar():new( "ToolBar_Docks" ) ::qTBarDocks:cName := "ToolBar_Docks" ::qTBarDocks:allowedAreas := Qt_LeftToolBarArea + Qt_RightToolBarArea + Qt_TopToolBarArea + Qt_BottomToolBarArea ::qTBarDocks:size := qSize ::qTBarDocks:create() ::qTBarDocks:setStyleSheet( GetStyleSheet( "QToolBarLR5", ::nAnimantionMode ) ) ::qTBarDocks:setWindowTitle( "ToolBar: Dockable Widgets" ) ::qTBarDocks:setToolButtonStyle( Qt_ToolButtonIconOnly ) FOR EACH a_ IN aBtns IF empty( a_ ) ::qTBarDocks:addSeparator() ELSE qAct := a_[ 1 ]:oWidget:toggleViewAction() qAct:setIcon( QIcon( hbide_image( a_[ 2 ] ) ) ) ::qTBarDocks:addAction( a_[ 2 ], qAct ) ENDIF NEXT ::oDlg:oWidget:addToolBar( Qt_TopToolBarArea, ::qTBarDocks:oWidget ) /* 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( ::aViewsInfo, {|e_| e_[ 1 ] == cView } ) ) > 0 RETURN hbide_image( "panel_" + hb_ntos( n ) ) ENDIF RETURN "" /*----------------------------------------------------------------------*/ 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:oWidget: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, QIcon( hbide_image( "fl_exe" ) ) ) aadd( ::aProjData, { oItem, "Executables", ::oProjRoot, NIL, NIL } ) oItem := ::oProjRoot:addItem( "Libs" ) oItem:oWidget:setIcon( 0, QIcon( hbide_image( "fl_lib" ) ) ) aadd( ::aProjData, { oItem, "Libs" , ::oProjRoot, NIL, NIL } ) oItem := ::oProjRoot:addItem( "Dlls" ) oItem:oWidget:setIcon( 0, QIcon( 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() ::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. ) ::qHelpBrw:setSource( QUrl( "qrc:///docs/faq.htm" ) ) ::oHelpDock:oWidget:setWidget( ::oIde:qHelpBrw ) ::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 STATIC qTBtn ::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 ) qTBtn := QToolButton( ::oSBar:oWidget ) qTBtn:setTooltip( "Toggle Mark" ) qTBtn:setIcon( QIcon( hbide_image( "bookmark" ) ) ) qTBtn:connect( "clicked()", {|| ::oEM:setMark() } ) qTBtn:setMaximumHeight( 16 ) qTBtn:setMaximumWidth( 16 ) qTBtn:setAutoRaise( .t. ) ::oSBar:oWidget:addWidget( qTBtn ) FOR i := 1 TO 6 ::oSBar:oWidget:addWidget( ::getMarkWidget( i ) ) NEXT RETURN Self /*----------------------------------------------------------------------*/ METHOD IdeDocks:setStatusText( nPart, xValue ) LOCAL oPanel IF ! HB_ISOBJECT( ::oSBar ) RETURN Self ENDIF oPanel := ::oSBar:getItem( nPart ) SWITCH nPart CASE SB_PNL_MAIN oPanel:caption := '' + xValue + "" EXIT CASE SB_PNL_READY EXIT CASE SB_PNL_LINE EXIT CASE SB_PNL_COLUMN EXIT CASE SB_PNL_INS EXIT CASE SB_PNL_SELECTEDCHARS oPanel:caption := iif( xValue == 0, "", "Sel: " + hb_ntos( xValue ) ) EXIT CASE SB_PNL_MODIFIED oPanel:caption := xValue EXIT CASE SB_PNL_STREAM 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 := "Enc: " + xValue + "" EXIT CASE SB_PNL_ENVIRON xValue := iif( empty( xValue ), "default", xValue ) oPanel:caption := "Env: " + xValue + "" EXIT CASE SB_PNL_VIEW oPanel:caption := "Panel: " + xValue + "" EXIT CASE SB_PNL_PROJECT xValue := iif( empty( xValue ), "none", xValue ) oPanel:caption := "Prj: " + xValue + "" EXIT CASE SB_PNL_THEME xValue := iif( empty( xValue ), "Bare Minimum", xValue ) oPanel:caption := "Theme: " + xValue + "" EXIT ENDSWITCH RETURN Self /*----------------------------------------------------------------------*/ METHOD IdeDocks:dispEnvironment( cEnviron ) ::setStatusText( SB_PNL_ENVIRON, cEnviron ) RETURN Self /*----------------------------------------------------------------------*/ METHOD IdeDocks:getMarkWidget( nIndex ) LOCAL aColors := { "rgb( 255,255,127 )", "rgb( 175,175,255 )", "rgb( 255,175,175 )", ; "rgb( 175,255,175 )", "rgb( 255,190,125 )", "rgb( 175,255,255 )" } ::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, oMenu 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:oWidget:setStyleSheet( GetStyleSheet( "QMainWindow", ::nAnimantionMode ) ) /* Main Menu Bar with all its submenus */ ::oDlg:menubar():oWidget:setStyleSheet( GetStyleSheet( "QMenuBar", nMode ) ) FOR EACH oMenu IN ::oDlg:menubar():childList() oMenu:oWidget:setStyleSheet( GetStyleSheet( "QMenuPop", nMode ) ) NEXT /* Toolbars */ ::oMainToolbar:oWidget:setStyleSheet( GetStyleSheet( "QToolBar", nMode ) ) ::qTBarDocks :setStyleSheet( GetStyleSheet( "QToolBarLR5", nMode ) ) ::qMdiToolbar:setStyleSheet( GetStyleSheet( "QToolBar", nMode ) ) ::qMdiToolbarL:setStyleSheet( GetStyleSheet( "QToolBarLR5", nMode ) ) /* 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:oWidget: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 /*----------------------------------------------------------------------*/ METHOD IdeDocks:buildCuiEdWidget() LOCAL nAreas := Qt_LeftDockWidgetArea + Qt_RightDockWidgetArea + Qt_TopDockWidgetArea + Qt_BottomDockWidgetArea ::oIde:oCuiEdDock := ::getADockWidget( nAreas, "dockCuiEd", "CUI Screen Designer", QDockWidget_DockWidgetFloatable ) ::oDlg:oWidget:addDockWidget( Qt_RightDockWidgetArea, ::oCuiEdDock:oWidget, Qt_Horizontal ) ::oCuiEdDock:oWidget:connect( "visibilityChanged(bool)", {|p| ::execEvent( __dockCuiEd_visibilityChanged__, p, ::oCuiEdDock:oWidget ) } ) RETURN Self /*----------------------------------------------------------------------*/ METHOD IdeDocks:buildUISrcDock() LOCAL nAreas := Qt_LeftDockWidgetArea + Qt_RightDockWidgetArea + Qt_TopDockWidgetArea + Qt_BottomDockWidgetArea ::oIde:oUISrcDock := ::getADockWidget( nAreas, "dockUISrc", "UI Source Manager", QDockWidget_DockWidgetFloatable ) ::oDlg:oWidget:addDockWidget( Qt_RightDockWidgetArea, ::oUISrcDock:oWidget, Qt_Horizontal ) ::oUISrcDock:oWidget:connect( "visibilityChanged(bool)", {|p| ::execEvent( __dockUISrc_visibilityChanged__, p, ::oUISrcDock:oWidget ) } ) RETURN Self /*----------------------------------------------------------------------*/