diff --git a/harbour/ChangeLog b/harbour/ChangeLog
index bbc7cb8bf8..7de78db192 100644
--- a/harbour/ChangeLog
+++ b/harbour/ChangeLog
@@ -16,6 +16,58 @@
The license applies to all entries newer than 2009-04-28.
*/
+2010-08-10 09:58 UTC-0800 Pritpal Bedi (bedipritpal@hotmail.com)
+ * contrib/hbqt/hbqt.ch
+
+ + contrib/hbide/resources/designer.png
+ + contrib/hbide/resources/f-bold-1.png
+ + contrib/hbide/resources/f-generic.png
+ + contrib/hbide/resources/f-image.png
+ + contrib/hbide/resources/f-italic-1.png
+ + contrib/hbide/resources/f-strike-1.png
+ + contrib/hbide/resources/f-underline-1.png
+ + contrib/hbide/resources/f_align_bottom.png
+ + contrib/hbide/resources/f_align_center.png
+ + contrib/hbide/resources/f_align_justify.png
+ + contrib/hbide/resources/f_align_left.png
+ + contrib/hbide/resources/f_align_middle.png
+ + contrib/hbide/resources/f_align_right.png
+ + contrib/hbide/resources/f_align_top.png
+ + contrib/hbide/resources/f_barcode.png
+ + contrib/hbide/resources/f_box_all.png
+ + contrib/hbide/resources/f_box_bottom.png
+ + contrib/hbide/resources/f_box_left.png
+ + contrib/hbide/resources/f_box_matrix.png
+ + contrib/hbide/resources/f_box_plain.png
+ + contrib/hbide/resources/f_box_right.png
+ + contrib/hbide/resources/f_box_shadow.png
+ + contrib/hbide/resources/f_box_top.png
+ + contrib/hbide/resources/f_chart.png
+ + contrib/hbide/resources/f_gradient.png
+
+ * contrib/hbide/hbide.qrc
+ + Added: few more icons.
+
+ * contrib/hbide/hbide.hbp
+ + Added: ideprojectmanager.prg and idetoolbar.prg
+
+ * contrib/hbide/hbide.prg
+ * contrib/hbide/ideactions.prg
+ * contrib/hbide/idedocks.prg
+ * contrib/hbide/ideobject.prg
+ + contrib/hbide/idereportsmanager.prg
+ + contrib/hbide/idetoolbar.prg
+ + Started: implementation of Harbour's Report Designer and Print Engine.
+
+ NOTE: It is a very complex subject and more so I have a little
+ knowledge about Qt's rendering system, so please do not
+ pin high hopes. I still do not know which way it will proceed,
+ will we be successful or failure, will it touch our expectations.
+ It is an ambitious project I ever dreamt of developing one,
+ so I just started. If you can extend help in this direction,
+ every bit will matter. So please gear-up yourselves for next logical
+ evolution of hbIDE.
+
2010-08-08 16:49 UTC+0200 Viktor Szakats (harbour.01 syenar.hu)
+ contrib/rddads/adsextrn.prg
* contrib/rddads/rddads.hbp
diff --git a/harbour/contrib/hbide/hbide.hbp b/harbour/contrib/hbide/hbide.hbp
index 36739a616c..fecd660588 100644
--- a/harbour/contrib/hbide/hbide.hbp
+++ b/harbour/contrib/hbide/hbide.hbp
@@ -48,6 +48,8 @@ ideedit.prg
ideplugins.prg
idedict.prg
idebrowse.prg
+idereportsmanager.prg
+idetoolbar.prg
docviewgenerator.ui
docwriter.ui
diff --git a/harbour/contrib/hbide/hbide.prg b/harbour/contrib/hbide/hbide.prg
index 76fee3a590..0093b3f7aa 100644
--- a/harbour/contrib/hbide/hbide.prg
+++ b/harbour/contrib/hbide/hbide.prg
@@ -149,6 +149,7 @@ CLASS HbIde
DATA oSC /* Shortcuts Manager */
DATA oTM /* Plugin Tools Manager */
DATA oTH /* Themes Manager */
+ DATA oRM /* Reports Manager */
DATA oSetup /* Setup Manager */
DATA oINI /* INI Manager */
@@ -244,6 +245,7 @@ CLASS HbIde
DATA oSourceThumbnailDock
DATA oQScintillaDock
DATA oUpDn
+ DATA oReportsManagerDock
DATA lProjTreeVisible INIT .t.
DATA lDockRVisible INIT .f.
@@ -452,6 +454,8 @@ METHOD HbIde:create( aParams )
::oDK:buildDockWidgets()
/* Toolbar */
::oAC:buildToolBar()
+ /* Build additional Toolbars */
+ ::oDK:buildToolBarPanels()
/* Main Menu */
::oAC:buildMainMenu()
@@ -480,6 +484,9 @@ METHOD HbIde:create( aParams )
/* Browser Manager */
::oBM := IdeBrowseManager():new():create( Self )
+ /* Reports Manager */
+ ::oRM := IdeReportsManager():new():create( Self )
+
/* Fill various elements of the IDE */
::oPM:populate()
::oSM:loadSources()
@@ -491,8 +498,6 @@ METHOD HbIde:create( aParams )
/* Restore Settings */
hbide_restSettings( Self )
/* Again to be displayed in Statusbar */
- //HbXbp_SetCodec( ::cWrkCodec )
- //::oDK:setStatusText( SB_PNL_CODEC, ::cWrkCodec )
::setCodec( ::cWrkCodec )
::oDK:setStatusText( SB_PNL_THEME, ::cWrkTheme )
diff --git a/harbour/contrib/hbide/hbide.qrc b/harbour/contrib/hbide/hbide.qrc
index 30ee75ded2..a2406630bc 100644
--- a/harbour/contrib/hbide/hbide.qrc
+++ b/harbour/contrib/hbide/hbide.qrc
@@ -69,6 +69,7 @@
resources/decreaseindent.png
resources/deleteline.png
resources/description.png
+resources/designer.png
resources/docwriter.png
resources/down.png
resources/down16.png
@@ -238,5 +239,29 @@
resources/zoomout.png
resources/zoomin3.png
resources/zoomout3.png
+resources/f_align_left.png
+resources/f_align_right.png
+resources/f_align_center.png
+resources/f_align_justify.png
+resources/f_align_top.png
+resources/f_align_middle.png
+resources/f_align_bottom.png
+resources/f_box_top.png
+resources/f_box_left.png
+resources/f_box_bottom.png
+resources/f_box_right.png
+resources/f_box_all.png
+resources/f_box_plain.png
+resources/f_box_shadow.png
+resources/f-generic.png
+resources/f-image.png
+resources/f_chart.png
+resources/f_gradient.png
+resources/f_barcode.png
+resources/f-bold-1.png
+resources/f-italic-1.png
+resources/f-underline-1.png
+resources/f-strike-1.png
+
diff --git a/harbour/contrib/hbide/ideactions.prg b/harbour/contrib/hbide/ideactions.prg
index 30f78c23cf..13fe433155 100644
--- a/harbour/contrib/hbide/ideactions.prg
+++ b/harbour/contrib/hbide/ideactions.prg
@@ -557,6 +557,8 @@ METHOD IdeActions:buildMainMenu()
oSubMenu:oWidget:addAction_4( ::oSourceThumbnailDock:oWidget:toggleViewAction() )
oSubMenu:oWidget:addAction_4( ::oQScintillaDock:oWidget:toggleViewAction() )
+ oSubMenu:oWidget:addAction_4( ::oReportsManagerDock:toggleViewAction() )
+
oSubMenu:oWidget:addSeparator()
oSubMenu:oWidget:addAction_4( ::oDockB2:oWidget:toggleViewAction() )
* oSubMenu:oWidget:addAction_4( ::oDockB1:oWidget:toggleViewAction() )
diff --git a/harbour/contrib/hbide/idedocks.prg b/harbour/contrib/hbide/idedocks.prg
index 02eb013ddd..ad9425222d 100644
--- a/harbour/contrib/hbide/idedocks.prg
+++ b/harbour/contrib/hbide/idedocks.prg
@@ -138,6 +138,7 @@ CLASS IdeDocks INHERIT IdeObject
METHOD buildSourceThumbnail()
METHOD buildQScintilla()
METHOD buildUpDownWidget()
+ METHOD buildReportsDesignerWidget()
METHOD buildSystemTray()
METHOD showDlgBySystemTrayIconCommand()
METHOD setViewInitials()
@@ -177,32 +178,33 @@ METHOD IdeDocks:destroy()
::oIde:oProjRoot := NIL
::oIde:oOpenedSources := NIL
- ::disconnect( ::oOutputResult:oWidget , "copyAvailable(bool)" )
+ ::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( ::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( ::oQScintillaDock:oWidget , "visibilityChanged(bool)" )
+ ::disconnect( ::oReportsManagerDock:oWidget , "visibilityChanged(bool)" )
#if 0 /* Not Implemented */
- ::disconnect( ::oDockPT:oWidget , "visibilityChanged(bool)" )
- ::disconnect( ::oDockED:oWidget , "visibilityChanged(bool)" )
- ::disconnect( ::oDockB2:oWidget , "visibilityChanged(bool)" )
+ ::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)" )
+ ::disconnect( ::oSys , "activated(QSystemTrayIcon::ActivationReason)" )
+ ::disconnect( ::qAct1 , "triggered(bool)" )
+ ::disconnect( ::qAct2 , "triggered(bool)" )
ENDIF
FOR EACH qTBtn IN ::aPanels
@@ -259,7 +261,7 @@ METHOD IdeDocks:buildDialog()
::oDlg:setTabPosition( Qt_BottomDockWidgetArea, QTabWidget_South )
::oDlg:setCorner( Qt_BottomLeftCorner, Qt_LeftDockWidgetArea )
::oDlg:setCorner( Qt_BottomRightCorner, Qt_RightDockWidgetArea )
- ::oDlg:resize( 900,470 )
+ ::oDlg:oWidget:resize( 950,520 )
::oIde:oDa := ::oDlg:drawingArea
@@ -317,10 +319,10 @@ METHOD IdeDocks:buildDialog()
aadd( ::aViewsInfo, a_ )
NEXT
IF ascan( ::aViewsInfo, {|e_| e_[ 1 ] == "Main" } ) == 0
- hb_ains( ::aViewsInfo, 1, { "Main", NIL, 0, 0, 0, 0 }, .t. )
+ 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, 0, 0 }, .t. )
+ hb_ains( ::aViewsInfo, 1, { "Stats", NIL, 0, 0, QMdiArea_TabbedView, 0 }, .t. )
ENDIF
/* View Panels */
@@ -371,6 +373,54 @@ METHOD IdeDocks:buildDialog()
/*----------------------------------------------------------------------*/
+METHOD IdeDocks:buildDockWidgets()
+
+ ::buildProjectTree()
+ ::buildEditorTree()
+
+ ::buildFuncList()
+ ::buildSkeletonsTree()
+
+ ::buildHelpWidget()
+ ::buildSkeletonWidget()
+ ::buildFindInFiles()
+ ::buildThemesDock()
+ ::buildPropertiesDock()
+ ::buildEnvironDock()
+
+ ::buildCompileResults()
+ ::buildLinkResults()
+ ::buildOutputResults()
+ ::buildDocViewer()
+ ::buildDocWriter()
+ ::buildFunctionsDock()
+ ::buildSourceThumbnail()
+ ::buildQScintilla()
+ ::buildUpDownWidget()
+ ::buildReportsDesignerWidget()
+
+ /* 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 )
+
+ RETURN Self
+
+/*----------------------------------------------------------------------*/
+
METHOD IdeDocks:buildSystemTray()
IF empty( ::oSys )
@@ -401,6 +451,12 @@ METHOD IdeDocks:execEvent( cEvent, p, p1 )
LOCAL qEvent, qMime, qList, qUrl, i, n, oEdit
SWITCH cEvent
+ CASE "dockReportsManager_visibilityChanged"
+ IF p; ::oRM:show() ; ENDIF
+ IF ! p .AND. ! p1:isVisible()
+ p1:raise()
+ ENDIF
+ EXIT
CASE "dockQScintilla_visibilityChanged"
IF p; ::oBM:show() ; ENDIF
IF ! p .AND. ! p1:isVisible()
@@ -788,54 +844,6 @@ METHOD IdeDocks:showDlgBySystemTrayIconCommand()()
/*----------------------------------------------------------------------*/
-METHOD IdeDocks:buildDockWidgets()
-
- ::buildProjectTree()
- ::buildEditorTree()
-
- ::buildFuncList()
- ::buildSkeletonsTree()
-
- ::buildHelpWidget()
- ::buildSkeletonWidget()
- ::buildFindInFiles()
- ::buildThemesDock()
- ::buildPropertiesDock()
- ::buildEnvironDock()
-
- ::buildCompileResults()
- ::buildLinkResults()
- ::buildOutputResults()
- ::buildDocViewer()
- ::buildDocWriter()
- ::buildFunctionsDock()
- ::buildSourceThumbnail()
- ::buildQScintilla()
- ::buildUpDownWidget()
-
- /* Bottom Docks */
- ::oDlg:oWidget:tabifyDockWidget( ::oDockB:oWidget , ::oDockB1:oWidget )
- ::oDlg:oWidget:tabifyDockWidget( ::oDockB1:oWidget , ::oDockB2:oWidget )
-
- /* Right Docks */
- ::oDlg:oWidget:tabifyDockWidget( ::oHelpDock:oWidget , ::oDocViewDock:oWidget )
- ::oDlg:oWidget:tabifyDockWidget( ::oDocViewDock:oWidget , ::oFuncDock:oWidget )
- ::oDlg:oWidget:tabifyDockWidget( ::oFuncDock:oWidget , ::oFunctionsDock:oWidget )
- ::oDlg:oWidget:tabifyDockWidget( ::oFunctionsDock:oWidget , ::oPropertiesDock:oWidget )
- ::oDlg:oWidget:tabifyDockWidget( ::oPropertiesDock:oWidget , ::oEnvironDock:oWidget )
- ::oDlg:oWidget:tabifyDockWidget( ::oEnvironDock:oWidget , ::oSkeltnDock:oWidget )
- ::oDlg:oWidget:tabifyDockWidget( ::oSkeltnDock:oWidget , ::oThemesDock:oWidget )
- ::oDlg:oWidget:tabifyDockWidget( ::oThemesDock:oWidget , ::oFindDock:oWidget )
- ::oDlg:oWidget:tabifyDockWidget( ::oFindDock:oWidget , ::oDocWriteDock:oWidget )
- ::oDlg:oWidget:tabifyDockWidget( ::oDocWriteDock:oWidget , ::oSourceThumbnailDock:oWidget )
- ::oDlg:oWidget:tabifyDockWidget( ::oSourceThumbnailDock:oWidget, ::oQScintillaDock:oWidget )
-
- ::buildToolBarPanels()
-
- RETURN Self
-
-/*----------------------------------------------------------------------*/
-
METHOD IdeDocks:getADockWidget( nAreas, cObjectName, cWindowTitle, nFlags, cEventVisibility )
LOCAL oDock, nBasic
@@ -1345,6 +1353,7 @@ METHOD IdeDocks:buildToolBarPanels()
aadd( aBtns, { ::oFindDock , "search" } )
aadd( aBtns, { ::oSourceThumbnailDock, "thumbnail" } )
aadd( aBtns, { ::oQScintillaDock , "browser" } )
+ aadd( aBtns, { ::oReportsManagerDock , "designer" } )
aadd( aBtns, {} )
aadd( aBtns, { ::oDockB2 , "builderror" } )
@@ -1359,7 +1368,11 @@ METHOD IdeDocks:buildToolBarPanels()
ENDIF
NEXT
- ::oDlg:oWidget:addToolBar( Qt_RightToolBarArea, ::qTBarDocks )
+ 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()
@@ -1782,6 +1795,17 @@ METHOD IdeDocks:buildQScintilla()
/*----------------------------------------------------------------------*/
+METHOD IdeDocks:buildReportsDesignerWidget()
+ LOCAL nAreas := Qt_LeftDockWidgetArea + Qt_RightDockWidgetArea + Qt_TopDockWidgetArea + Qt_BottomDockWidgetArea
+
+ ::oIde:oReportsManagerDock := ::getADockWidget( nAreas, "dockReportDesigner", "ideReports Designer", QDockWidget_DockWidgetFloatable )
+ ::oDlg:oWidget:addDockWidget_1( Qt_RightDockWidgetArea, ::oReportsManagerDock:oWidget, Qt_Horizontal )
+ ::connect( ::oReportsManagerDock:oWidget, "visibilityChanged(bool)", {|p| ::execEvent( "dockReportsManager_visibilityChanged", p, ::oReportsManagerDock:oWidget ) } )
+
+ RETURN Self
+
+/*----------------------------------------------------------------------*/
+
METHOD IdeDocks:setStatusText( nPart, xValue )
LOCAL oPanel := ::oSBar:getItem( nPart )
diff --git a/harbour/contrib/hbide/ideobject.prg b/harbour/contrib/hbide/ideobject.prg
index 6cc7f2a508..c08794ec96 100644
--- a/harbour/contrib/hbide/ideobject.prg
+++ b/harbour/contrib/hbide/ideobject.prg
@@ -100,6 +100,7 @@ CLASS IdeObject
ACCESS oTM INLINE ::oIde:oTM
ACCESS oTH INLINE ::oIde:oTH
ACCESS oFF INLINE ::oIde:oFF
+ ACCESS oRM INLINE ::oIde:oRM
ACCESS oSetup INLINE ::oIde:oSetup
ACCESS oINI INLINE ::oIde:oINI
@@ -197,6 +198,7 @@ CLASS IdeObject
ACCESS oQScintillaDock INLINE ::oIde:oQScintillaDock
ACCESS oMainToolbar INLINE ::oIde:oMainToolbar
ACCESS oUpDn INLINE ::oIde:oUpDn
+ ACCESS oReportsManagerDock INLINE ::oIde:oReportsManagerDock
ACCESS oSys INLINE ::oIde:oSys
ACCESS oSysMenu INLINE ::oIde:oSysMenu
diff --git a/harbour/contrib/hbide/idereportsmanager.prg b/harbour/contrib/hbide/idereportsmanager.prg
new file mode 100644
index 0000000000..15f5127f5d
--- /dev/null
+++ b/harbour/contrib/hbide/idereportsmanager.prg
@@ -0,0 +1,494 @@
+/*
+ * $Id$
+ */
+
+/*
+ * Harbour Project source code:
+ *
+ * Copyright 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
+ * 07Aug2010
+ */
+/*----------------------------------------------------------------------*/
+/*----------------------------------------------------------------------*/
+/*----------------------------------------------------------------------*/
+
+#include "hbide.ch"
+#include "common.ch"
+#include "hbclass.ch"
+#include "hbqt.ch"
+
+/*----------------------------------------------------------------------*/
+
+CLASS IdeReportsManager INHERIT IdeObject
+
+ DATA oWidget
+ DATA qLayout
+ DATA qToolbar
+ DATA qToolbarL
+ DATA qToolbarAlign
+ DATA qStack
+ DATA qStatus
+ DATA qTabBar
+ DATA qWidget1
+ DATA qWidget2
+ DATA qWidget3
+
+ DATA qSpliter
+ DATA qLayoutD
+ DATA qFrameL
+ DATA qScroll
+ DATA qFrameR
+
+ DATA qLayL
+ DATA qLayR
+ DATA qSplL
+ DATA qSplR
+
+ DATA qTabL0
+ DATA qPageL01
+ DATA qPageL02
+ DATA qPageL01Lay
+ DATA qTreeObjects
+
+ DATA qTabL1
+ DATA qPageL11
+ DATA qPageL12
+ DATA qPageL11Lay
+ DATA qTreeProp
+
+ DATA qEditDesc
+
+ DATA qTabR1
+ DATA qPageR11
+ DATA qPageR11Lay
+ DATA qTreeData
+ DATA qPageR12
+ DATA qPageR13
+
+ DATA qDesign
+ DATA qHRuler
+ DATA qVRuler
+ DATA qPort
+
+ DATA aStatusPnls INIT {}
+
+ METHOD new( oIde )
+ METHOD create( oIde )
+ METHOD destroy()
+ METHOD show()
+ METHOD execEvent( cEvent, p )
+ METHOD buildToolbar()
+ METHOD buildToolbarAlign()
+ METHOD buildToolbarLeft()
+ METHOD buildStacks()
+ METHOD buildStatusBar()
+ METHOD buildTabBar()
+ METHOD buildDesignReport()
+
+ ENDCLASS
+
+/*----------------------------------------------------------------------*/
+
+METHOD IdeReportsManager:new( oIde )
+
+ ::oIde := oIde
+
+ RETURN Self
+
+/*----------------------------------------------------------------------*/
+
+METHOD IdeReportsManager:create( oIde )
+ LOCAL qDock
+
+ DEFAULT oIde TO ::oIde
+ ::oIde := oIde
+
+ qDock := ::oIde:oReportsManagerDock:oWidget
+
+ ::oWidget := QWidget():new()
+
+ qDock:setWidget( ::oWidget )
+
+ /* Layout applied to RM widget */
+ ::qLayout := QGridLayout():new()
+ ::qLayout:setContentsMargins( 0,0,0,0 )
+ ::qLayout:setSpacing( 0 )
+
+ ::oWidget:setLayout( ::qLayout )
+
+ /* Toolbar */
+ ::buildToolbar()
+ ::qLayout:addWidget_1( ::qToolbar:oWidget , 0, 0, 1, 2 )
+ ::buildToolbarAlign()
+ ::qLayout:addWidget_1( ::qToolbarAlign:oWidget , 1, 0, 1, 2 )
+
+ /* Toolbar left */
+ ::buildToolbarLeft()
+ ::qLayout:addWidget_1( ::qToolbarL:oWidget , 2, 0, 2, 1 )
+
+ /* ::qTabBar */
+ ::buildTabBar()
+ ::qLayout:addWidget_1( ::qTabBar , 2, 1, 1, 1 )
+
+ /* Stacked widget */
+ ::buildStacks()
+ ::qLayout:addWidget_1( ::qStack , 3, 1, 1, 1 )
+
+ /* StatusBar */
+ ::buildStatusBar()
+ ::qLayout:addWidget_1( ::qStatus , 4, 0, 1, 2 )
+
+ /* Document manipulation interface */
+ ::buildDesignReport()
+
+ ::qTabBar:setCurrentIndex( 2 )
+ ::oWidget:show()
+
+ RETURN Self
+
+/*----------------------------------------------------------------------*/
+
+METHOD IdeReportsManager:destroy()
+ RETURN Self
+
+/*----------------------------------------------------------------------*/
+
+METHOD IdeReportsManager:show()
+ ::oReportsManagerDock:raise()
+ RETURN Self
+
+/*----------------------------------------------------------------------*/
+
+METHOD IdeReportsManager:execEvent( cEvent, p )
+
+ HB_SYMBOL_UNUSED( p )
+
+ SWITCH cEvent
+ CASE "tabBar_currentChanged"
+ IF !empty( ::qStack ) .AND. p < ::qStack:count()
+ ::qStack:setCurrentIndex( p )
+ ENDIF
+ EXIT
+ CASE "buttonNew_clicked"
+ EXIT
+ CASE "buttonOpen_clicked"
+ EXIT
+ CASE "buttonSave_clicked"
+ EXIT
+ CASE "buttonClose_clicked"
+ EXIT
+ CASE "buttonPrint_clicked"
+ EXIT
+ ENDSWITCH
+
+ RETURN NIL
+
+/*----------------------------------------------------------------------*/
+
+METHOD IdeReportsManager:buildDesignReport()
+
+ ::qLayoutD := QHBoxLayout():new()
+ ::qLayoutD:setContentsMargins( 0,0,0,0 )
+ ::qLayoutD:setSpacing( 1 )
+ ::qWidget3:setLayout( ::qLayoutD )
+
+ ::qSpliter := QSplitter():new()
+ ::qSpliter:setOrientation( Qt_Horizontal )
+
+ ::qLayoutD:addWidget( ::qSpliter )
+
+ ::qFrameL := QFrame():new()
+ ::qSpliter:addWidget( ::qFrameL )
+
+ ::qScroll := QScrollArea():new()
+ ::qScroll:setVerticalScrollBarPolicy( Qt_ScrollBarAsNeeded )
+ ::qScroll:setHorizontalScrollBarPolicy( Qt_ScrollBarAsNeeded )
+ ::qScroll:setWidgetResizable( .f. )
+ ::qScroll:setMinimumWidth( 400 )
+ ::qScroll:setBackgroundRole( QPalette_Dark )
+ ::qSpliter:addWidget( ::qScroll )
+
+ ::qFrameR := QFrame():new()
+ ::qSpliter:addWidget( ::qFrameR )
+
+ ::qLayL := QVBoxLayout():new()
+ ::qLayL:setContentsMargins( 0,0,0,0 )
+ ::qLayL:setSpacing( 1 )
+ ::qFrameL:setLayout( ::qLayL )
+ ::qSplL := QSplitter():new()
+ ::qSplL:setOrientation( Qt_Vertical )
+ ::qLayL:addWidget( ::qSplL )
+
+ ::qLayR := QVBoxLayout():new()
+ ::qLayR:setContentsMargins( 0,0,0,0 )
+ ::qLayR:setSpacing( 1 )
+ ::qFrameR:setLayout( ::qLayR )
+ ::qSplR := QSplitter():new()
+ ::qSplR:setOrientation( Qt_Vertical )
+ ::qLayR:addWidget( ::qSplR )
+
+ ::qFrameL:setMinimumWidth( 100 )
+ ::qFrameR:setMinimumWidth( 100 )
+
+
+ ::qTabL0 := QTabWidget():new()
+ ::qSplL:addWidget( ::qTabL0 )
+ /* Left Pane Objects Page */
+ ::qPageL01 := QWidget():new()
+ ::qTabL0:addTab( ::qPageL01, "Objects" )
+ ::qPageL01Lay := QVBoxLayout():new()
+ ::qPageL01:setLayout( ::qPageL01Lay )
+ ::qPageL01Lay:setContentsMargins( 0,0,0,0 )
+ /* Left Pane Events page */
+ ::qPageL02 := QWidget():new()
+ ::qTabL0:addTab( ::qPageL02, "Else" )
+ /* Left pane Properties Treeview */
+ ::qTreeObjects := QTreeWidget():new()
+ ::qPageL01Lay:addWidget( ::qTreeObjects )
+ ::qTreeObjects:setHeaderHidden( .t. )
+
+
+ ::qTabL1 := QTabWidget():new()
+ ::qSplL:addWidget( ::qTabL1 )
+ /* Left Pane Properties Page */
+ ::qPageL11 := QWidget():new()
+ ::qTabL1:addTab( ::qPageL11, "Props" )
+ ::qPageL11Lay := QVBoxLayout():new()
+ ::qPageL11:setLayout( ::qPageL11Lay )
+ ::qPageL11Lay:setContentsMargins( 0,0,0,0 )
+ /* Left Pane Events page */
+ ::qPageL12 := QWidget():new()
+ ::qTabL1:addTab( ::qPageL12, "Events" )
+ /* Left pane Properties Treeview */
+ ::qTreeProp := QTreeWidget():new()
+ ::qPageL11Lay:addWidget( ::qTreeProp )
+ ::qTreeProp:setHeaderHidden( .t. )
+
+
+ ::qEditDesc := QTextEdit():new()
+ ::qSplL:addWidget( ::qEditDesc )
+ ::qEditDesc:setPlainText( "Interface implemented is just a proof of concept, no promises yet, please." )
+ ::qEditDesc:setMaximumHeight( 120 )
+
+ ::qTabR1 := QTabWidget():new()
+ ::qSplR:addWidget( ::qTabR1 )
+ ::qPageR11 := QWidget():new()
+ ::qTabR1:addTab( ::qPageR11, "Data" )
+ ::qPageR12 := QWidget():new()
+ ::qTabR1:addTab( ::qPageR12, "Variables" )
+ ::qPageR13 := QWidget():new()
+ ::qTabR1:addTab( ::qPageR13, "Functions" )
+
+ ::qPageR11Lay := QVBoxLayout():new()
+ ::qPageR11:setLayout( ::qPageR11Lay )
+ ::qPageR11Lay:setContentsMargins( 0,0,0,0 )
+
+ ::qTreeData := QTreeWidget():new()
+ ::qPageR11Lay:addWidget( ::qTreeData )
+ ::qTreeData:setHeaderHidden( .t. )
+
+ ::qDesign := QFrame():new()
+ ::qScroll:setWidget( ::qDesign )
+ ::qDesign:setBackgroundRole( QPalette_Dark )
+ ::qDesign:setGeometry( QRect():new( 0, 0, 600, 900 ) )
+
+ ::qHRuler := QFrame():new( ::qDesign )
+ ::qHRuler:setGeometry( QRect():new( 30, 0, ::qDesign:width(), 15 ) )
+ ::qHRuler:setStyleSheet( "background-color: rgb(240,240,240);" )
+ ::qVRuler := QFrame():new( ::qDesign )
+ ::qVRuler:setStyleSheet( "background-color: rgb(240,240,240);" )
+ ::qVRuler:setGeometry( QRect():new( 0, 30, 15, ::qDesign:height() ) )
+
+ ::qPort := QFrame():new( ::qDesign )
+ ::qPort:setStyleSheet( "background-color: white;" )
+ ::qPort:setGeometry( QRect():new( 30, 30, ::qDesign:width() - 45, ::qDesign:height() - 45 ) )
+
+
+ ::qWidget1:show()
+ ::qWidget2:show()
+ ::qWidget3:show()
+
+ RETURN Self
+
+/*----------------------------------------------------------------------*/
+
+METHOD IdeReportsManager:buildTabBar()
+
+ ::qTabBar := QTabBar():new()
+ //::qTabBar:setDocumentMode( .t. )
+ ::qTabBar:setShape( QTabBar_TriangularNorth )
+
+ ::qTabBar:addTab( "Code" )
+ ::qTabBar:addTab( "Dialogs" )
+ ::qTabBar:addTab( "Page1" )
+
+ ::connect( ::qTabBar, "currentChanged(int)", {|p| ::execEvent( "tabBar_currentChanged", p ) } )
+
+ RETURN Self
+
+/*----------------------------------------------------------------------*/
+
+METHOD IdeReportsManager:buildStacks()
+
+ ::qStack := QStackedWidget():new()
+
+ ::qWidget1 := QWidget():new()
+ ::qStack:addWidget( ::qWidget1 )
+
+ ::qWidget2 := QWidget():new()
+ ::qStack:addWidget( ::qWidget2 )
+
+ ::qWidget3 := QWidget():new()
+ ::qStack:addWidget( ::qWidget3 )
+
+ RETURN Self
+
+/*----------------------------------------------------------------------*/
+
+METHOD IdeReportsManager:buildToolbar()
+
+ ::qToolbar := IdeToolbar():new()
+ ::qToolbar:orientation := Qt_Horizontal
+ ::qToolbar:create( "ReportManager_Top_Toolbar" )
+
+ ::qToolbar:addToolButton( "New" , "New Report" , hbide_image( "new" ), {|| ::execEvent( "buttonNew_clicked" ) } )
+ ::qToolbar:addToolButton( "Open" , "Open Report" , hbide_image( "open3" ), {|| ::execEvent( "buttonOpen_clicked" ) } )
+ ::qToolbar:addToolButton( "Save" , "Save Report" , hbide_image( "save3" ), {|| ::execEvent( "buttonSave_clicked" ) } )
+ ::qToolbar:addToolButton( "Close", "Close Report", hbide_image( "close3" ), {|| ::execEvent( "buttonClose_clicked" ) } )
+ ::qToolbar:addToolButton( "Print", "Print Report", hbide_image( "print" ), {|| ::execEvent( "buttonPrint_clicked" ) } )
+ ::qToolbar:addSeparator()
+
+ RETURN Self
+
+/*----------------------------------------------------------------------*/
+
+METHOD IdeReportsManager:buildToolbarAlign()
+
+ ::qToolbarAlign := IdeToolbar():new()
+ ::qToolbarAlign:orientation := Qt_Horizontal
+ ::qToolbarAlign:create( "ReportManager_Top_Toolbar_Align" )
+
+ ::qToolbarAlign:addToolButton( "FontG" , "Font", hbide_image( "f-generic" ), {|| ::execEvent( "button_clicked" ) } )
+ ::qToolbarAlign:addSeparator()
+ ::qToolbarAlign:addToolButton( "FontB" , "Text Bold" , hbide_image( "f-bold-1" ), {|| ::execEvent( "button_clicked" ) } )
+ ::qToolbarAlign:addToolButton( "FontI" , "Text Italic" , hbide_image( "f-italic-1" ), {|| ::execEvent( "button_clicked" ) } )
+ ::qToolbarAlign:addToolButton( "FontU" , "Text Underlined" , hbide_image( "f-underline-1" ), {|| ::execEvent( "button_clicked" ) } )
+ ::qToolbarAlign:addToolButton( "FontS" , "Text Strikethrough", hbide_image( "f-strike-1" ), {|| ::execEvent( "button_clicked" ) } )
+ ::qToolbarAlign:addSeparator()
+ ::qToolbarAlign:addToolButton( "JustL" , "Align left" , hbide_image( "f_align_left" ), {|| ::execEvent( "button_clicked" ) } )
+ ::qToolbarAlign:addToolButton( "JustC" , "Align center" , hbide_image( "f_align_center" ), {|| ::execEvent( "button_clicked" ) } )
+ ::qToolbarAlign:addToolButton( "JustR" , "Align right" , hbide_image( "f_align_right" ), {|| ::execEvent( "button_clicked" ) } )
+ ::qToolbarAlign:addToolButton( "JustJ" , "Align justify" , hbide_image( "f_align_justify" ), {|| ::execEvent( "button_clicked" ) } )
+ ::qToolbarAlign:addSeparator()
+ ::qToolbarAlign:addToolButton( "JustT" , "Align top" , hbide_image( "f_align_top" ), {|| ::execEvent( "button_clicked" ) } )
+ ::qToolbarAlign:addToolButton( "JustM" , "Align middle" , hbide_image( "f_align_middle" ), {|| ::execEvent( "button_clicked" ) } )
+ ::qToolbarAlign:addToolButton( "JustB" , "Align bottom" , hbide_image( "f_align_bottom" ), {|| ::execEvent( "button_clicked" ) } )
+ ::qToolbarAlign:addSeparator()
+ ::qToolbarAlign:addToolButton( "BoxT" , "Box-frame top" , hbide_image( "f_box_top" ), {|| ::execEvent( "button_clicked" ) } )
+ ::qToolbarAlign:addToolButton( "BoxL" , "Box-frame left" , hbide_image( "f_box_left" ), {|| ::execEvent( "button_clicked" ) } )
+ ::qToolbarAlign:addToolButton( "BoxB" , "Box-frame bottom" , hbide_image( "f_box_bottom" ), {|| ::execEvent( "button_clicked" ) } )
+ ::qToolbarAlign:addToolButton( "BoxR" , "Box-frame right" , hbide_image( "f_box_right" ), {|| ::execEvent( "button_clicked" ) } )
+ ::qToolbarAlign:addSeparator()
+ ::qToolbarAlign:addToolButton( "BoxA" , "Box-frame all" , hbide_image( "f_box_all" ), {|| ::execEvent( "button_clicked" ) } )
+ ::qToolbarAlign:addToolButton( "BoxP" , "No box-frame" , hbide_image( "f_box_plain" ), {|| ::execEvent( "button_clicked" ) } )
+ ::qToolbarAlign:addToolButton( "BoxS" , "Box shadowed" , hbide_image( "f_box_shadow" ), {|| ::execEvent( "button_clicked" ) } )
+ ::qToolbarAlign:addSeparator()
+
+ RETURN Self
+
+/*----------------------------------------------------------------------*/
+
+METHOD IdeReportsManager:buildToolbarLeft()
+
+ ::qToolbarL := IdeToolbar():new()
+ ::qToolbarL:orientation := Qt_Vertical
+ ::qToolbarL:create( "ReportManager_Left_Toolbar" )
+
+ ::qToolbarL:addToolButton( "Image" , "Image" , hbide_image( "f-image" ), {|| ::execEvent( "buttonNew_clicked" ) } )
+ ::qToolbarL:addToolButton( "Chart" , "Chart" , hbide_image( "f_chart" ), {|| ::execEvent( "buttonNew_clicked" ) } )
+ ::qToolbarL:addToolButton( "Gradient", "Gradient", hbide_image( "f_gradient" ), {|| ::execEvent( "buttonNew_clicked" ) } )
+ ::qToolbarL:addToolButton( "Barcode" , "Barcode" , hbide_image( "f_barcode" ), {|| ::execEvent( "buttonNew_clicked" ) } )
+
+ RETURN Self
+
+/*----------------------------------------------------------------------*/
+
+METHOD IdeReportsManager:buildStatusBar()
+ LOCAL qLabel
+
+ ::qStatus := QStatusBar():new()
+ ::qStatus:setSizeGripEnabled( .f. )
+
+ qLabel := QLabel():new(); qLabel:setMinimumWidth( 40 )
+ ::qStatus:addPermanentWidget( qLabel, 0 )
+ aadd( ::aStatusPnls, qLabel )
+ qLabel:setText( "Ready" )
+
+ qLabel := QLabel():new(); qLabel:setMinimumWidth( 40 )
+ ::qStatus:addPermanentWidget( qLabel, 0 )
+ aadd( ::aStatusPnls, qLabel )
+
+ qLabel := QLabel():new(); qLabel:setMinimumWidth( 40 )
+ ::qStatus:addPermanentWidget( qLabel, 0 )
+ aadd( ::aStatusPnls, qLabel )
+
+ qLabel := QLabel():new(); qLabel:setMinimumWidth( 40 )
+ ::qStatus:addPermanentWidget( qLabel, 1 )
+ aadd( ::aStatusPnls, qLabel )
+
+ RETURN Self
+
+/*------------------------------------------------------------------------*/
+
diff --git a/harbour/contrib/hbide/idetoolbar.prg b/harbour/contrib/hbide/idetoolbar.prg
new file mode 100644
index 0000000000..e4480be703
--- /dev/null
+++ b/harbour/contrib/hbide/idetoolbar.prg
@@ -0,0 +1,222 @@
+/*
+ * $Id$
+ */
+
+/*
+ * Harbour Project source code:
+ *
+ * Copyright 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
+ * 07Aug2010
+ */
+/*----------------------------------------------------------------------*/
+/*----------------------------------------------------------------------*/
+/*----------------------------------------------------------------------*/
+
+#include "hbide.ch"
+#include "common.ch"
+#include "hbclass.ch"
+#include "hbqt.ch"
+
+/*----------------------------------------------------------------------*/
+
+CLASS IdeToolbar INHERIT IdeObject
+
+ DATA oWidget
+ DATA cName
+ DATA oParent
+ DATA hItems INIT {=>}
+
+ DATA allowedAreas INIT Qt_TopToolBarArea
+ DATA initialArea INIT Qt_TopToolBarArea
+ DATA orientation INIT Qt_Horizontal
+ DATA size INIT QSize():new( 16,16 )
+ DATA moveable INIT .f.
+ DATA floatable INIT .f.
+
+ METHOD new( cName, oParent )
+ METHOD create( cName, oParent )
+ METHOD destroy()
+ METHOD execEvent( cEvent, p )
+ METHOD addToolButton( cName, cDesc, cImage, bAction, lCheckable )
+ METHOD setItemChecked( cName, lState )
+ METHOD setItemEnabled( cName, lEnabled )
+
+ ERROR HANDLER onError( ... )
+ ENDCLASS
+
+/*----------------------------------------------------------------------*/
+
+METHOD IdeToolbar:new( cName, oParent )
+
+ ::cName := cName
+ ::oParent := oParent
+
+ RETURN Self
+
+/*----------------------------------------------------------------------*/
+
+METHOD IdeToolbar:create( cName, oParent )
+
+ STATIC nID := 0
+
+ DEFAULT cName TO ::cName
+ DEFAULT oParent TO ::oParent
+ ::cName := cName
+ ::oParent := oParent
+
+ DEFAULT ::cName TO "IdeToolbar_" + hb_ntos( ++nID )
+
+ ::oWidget := QToolbar():new()
+ ::oWidget:setObjectName( ::cName )
+ ::oWidget:setAllowedAreas( ::allowedAreas )
+ ::oWidget:setOrientation( ::orientation )
+ ::oWidget:setIconSize( ::size )
+ ::oWidget:setMovable( ::moveable )
+ ::oWidget:setFloatable( ::floatable )
+
+ RETURN Self
+
+/*----------------------------------------------------------------------*/
+
+METHOD IdeToolbar:onError( ... )
+ LOCAL cMsg := __GetMessage()
+ IF SubStr( cMsg, 1, 1 ) == "_"
+ cMsg := SubStr( cMsg, 2 )
+ ENDIF
+ RETURN ::oWidget:&cMsg( ... )
+
+/*----------------------------------------------------------------------*/
+
+METHOD IdeToolbar:destroy()
+
+ RETURN Self
+
+/*----------------------------------------------------------------------*/
+
+METHOD IdeToolbar:execEvent( cEvent, p )
+
+ HB_SYMBOL_UNUSED( p )
+
+ SWITCH cEvent
+ CASE "buttonNew_clicked"
+ EXIT
+
+ ENDSWITCH
+
+ RETURN NIL
+
+/*----------------------------------------------------------------------*/
+
+METHOD IdeToolbar:addToolButton( cName, cDesc, cImage, bAction, lCheckable )
+ LOCAL oButton, qAction
+
+ STATIC nID := 0
+
+ DEFAULT cName TO "IdeToolButton_" + hb_ntos( ++nID )
+ DEFAULT cDesc TO ""
+ DEFAULT lCheckable TO .f.
+
+ oButton := QToolButton():new( ::oWidget )
+ oButton:setObjectName( cName )
+ oButton:setTooltip( cDesc )
+ oButton:setIcon( cImage )
+ oButton:setCheckable( lCheckable )
+
+ IF hb_isBlock( bAction )
+ ::connect( oButton, "clicked()", bAction )
+ ENDIF
+ #if 1
+ qAction := QWidgetAction():new()
+ qAction:setDefaultWidget( oButton )
+ ::oWidget:addAction( qAction )
+ #else
+ ::oWidget:addWidget( oButton )
+ #endif
+
+ ::hItems[ cName ] := oButton
+ RETURN oButton
+
+/*----------------------------------------------------------------------*/
+
+METHOD IdeToolbar:setItemChecked( cName, lState )
+ LOCAL lOldState
+
+ IF hb_hHasKey( ::hItems, cName )
+ IF ::hItems[ cName ]:isCheckable()
+ lOldState := ::hItems[ cName ]:isChecked()
+ IF hb_isLogical( lState )
+ ::hItems[ cName ]:setChecked( lState )
+ ENDIF
+ ENDIF
+ ENDIF
+
+ RETURN lOldState
+
+/*----------------------------------------------------------------------*/
+
+METHOD IdeToolbar:setItemEnabled( cName, lEnabled )
+ LOCAL lOldEnabled
+
+ IF hb_hHasKey( ::hItems, cName )
+ lOldEnabled := ::hItems[ cName ]:isEnabled()
+ IF hb_isLogical( lEnabled )
+ ::hItems[ cName ]:setEnabled( lEnabled )
+ ENDIF
+ ENDIF
+
+ RETURN lOldEnabled
+
+/*----------------------------------------------------------------------*/
+
diff --git a/harbour/contrib/hbide/resources/designer.png b/harbour/contrib/hbide/resources/designer.png
new file mode 100644
index 0000000000..c3cf8a767d
Binary files /dev/null and b/harbour/contrib/hbide/resources/designer.png differ
diff --git a/harbour/contrib/hbide/resources/f-bold-1.png b/harbour/contrib/hbide/resources/f-bold-1.png
new file mode 100644
index 0000000000..c9cb630343
Binary files /dev/null and b/harbour/contrib/hbide/resources/f-bold-1.png differ
diff --git a/harbour/contrib/hbide/resources/f-generic.png b/harbour/contrib/hbide/resources/f-generic.png
new file mode 100644
index 0000000000..bdbc1a80ac
Binary files /dev/null and b/harbour/contrib/hbide/resources/f-generic.png differ
diff --git a/harbour/contrib/hbide/resources/f-image.png b/harbour/contrib/hbide/resources/f-image.png
new file mode 100644
index 0000000000..68da5027cf
Binary files /dev/null and b/harbour/contrib/hbide/resources/f-image.png differ
diff --git a/harbour/contrib/hbide/resources/f-italic-1.png b/harbour/contrib/hbide/resources/f-italic-1.png
new file mode 100644
index 0000000000..977ea82176
Binary files /dev/null and b/harbour/contrib/hbide/resources/f-italic-1.png differ
diff --git a/harbour/contrib/hbide/resources/f-strike-1.png b/harbour/contrib/hbide/resources/f-strike-1.png
new file mode 100644
index 0000000000..ccee76e29e
Binary files /dev/null and b/harbour/contrib/hbide/resources/f-strike-1.png differ
diff --git a/harbour/contrib/hbide/resources/f-underline-1.png b/harbour/contrib/hbide/resources/f-underline-1.png
new file mode 100644
index 0000000000..0c48721002
Binary files /dev/null and b/harbour/contrib/hbide/resources/f-underline-1.png differ
diff --git a/harbour/contrib/hbide/resources/f_align_bottom.png b/harbour/contrib/hbide/resources/f_align_bottom.png
new file mode 100644
index 0000000000..7eb926db10
Binary files /dev/null and b/harbour/contrib/hbide/resources/f_align_bottom.png differ
diff --git a/harbour/contrib/hbide/resources/f_align_center.png b/harbour/contrib/hbide/resources/f_align_center.png
new file mode 100644
index 0000000000..39b3a40d1f
Binary files /dev/null and b/harbour/contrib/hbide/resources/f_align_center.png differ
diff --git a/harbour/contrib/hbide/resources/f_align_justify.png b/harbour/contrib/hbide/resources/f_align_justify.png
new file mode 100644
index 0000000000..791fa51637
Binary files /dev/null and b/harbour/contrib/hbide/resources/f_align_justify.png differ
diff --git a/harbour/contrib/hbide/resources/f_align_left.png b/harbour/contrib/hbide/resources/f_align_left.png
new file mode 100644
index 0000000000..8d915e6c80
Binary files /dev/null and b/harbour/contrib/hbide/resources/f_align_left.png differ
diff --git a/harbour/contrib/hbide/resources/f_align_middle.png b/harbour/contrib/hbide/resources/f_align_middle.png
new file mode 100644
index 0000000000..00b0e2f4ae
Binary files /dev/null and b/harbour/contrib/hbide/resources/f_align_middle.png differ
diff --git a/harbour/contrib/hbide/resources/f_align_right.png b/harbour/contrib/hbide/resources/f_align_right.png
new file mode 100644
index 0000000000..bdb2b949b7
Binary files /dev/null and b/harbour/contrib/hbide/resources/f_align_right.png differ
diff --git a/harbour/contrib/hbide/resources/f_align_top.png b/harbour/contrib/hbide/resources/f_align_top.png
new file mode 100644
index 0000000000..5db37eecb7
Binary files /dev/null and b/harbour/contrib/hbide/resources/f_align_top.png differ
diff --git a/harbour/contrib/hbide/resources/f_barcode.png b/harbour/contrib/hbide/resources/f_barcode.png
new file mode 100644
index 0000000000..a565c843b0
Binary files /dev/null and b/harbour/contrib/hbide/resources/f_barcode.png differ
diff --git a/harbour/contrib/hbide/resources/f_box_all.png b/harbour/contrib/hbide/resources/f_box_all.png
new file mode 100644
index 0000000000..982eb1d75c
Binary files /dev/null and b/harbour/contrib/hbide/resources/f_box_all.png differ
diff --git a/harbour/contrib/hbide/resources/f_box_bottom.png b/harbour/contrib/hbide/resources/f_box_bottom.png
new file mode 100644
index 0000000000..c700b87c62
Binary files /dev/null and b/harbour/contrib/hbide/resources/f_box_bottom.png differ
diff --git a/harbour/contrib/hbide/resources/f_box_left.png b/harbour/contrib/hbide/resources/f_box_left.png
new file mode 100644
index 0000000000..f77e7307c0
Binary files /dev/null and b/harbour/contrib/hbide/resources/f_box_left.png differ
diff --git a/harbour/contrib/hbide/resources/f_box_matrix.png b/harbour/contrib/hbide/resources/f_box_matrix.png
new file mode 100644
index 0000000000..4ab3384a7a
Binary files /dev/null and b/harbour/contrib/hbide/resources/f_box_matrix.png differ
diff --git a/harbour/contrib/hbide/resources/f_box_plain.png b/harbour/contrib/hbide/resources/f_box_plain.png
new file mode 100644
index 0000000000..e461fb455f
Binary files /dev/null and b/harbour/contrib/hbide/resources/f_box_plain.png differ
diff --git a/harbour/contrib/hbide/resources/f_box_right.png b/harbour/contrib/hbide/resources/f_box_right.png
new file mode 100644
index 0000000000..a0dc71939f
Binary files /dev/null and b/harbour/contrib/hbide/resources/f_box_right.png differ
diff --git a/harbour/contrib/hbide/resources/f_box_shadow.png b/harbour/contrib/hbide/resources/f_box_shadow.png
new file mode 100644
index 0000000000..6f1996a128
Binary files /dev/null and b/harbour/contrib/hbide/resources/f_box_shadow.png differ
diff --git a/harbour/contrib/hbide/resources/f_box_top.png b/harbour/contrib/hbide/resources/f_box_top.png
new file mode 100644
index 0000000000..0fa54f9e1d
Binary files /dev/null and b/harbour/contrib/hbide/resources/f_box_top.png differ
diff --git a/harbour/contrib/hbide/resources/f_chart.png b/harbour/contrib/hbide/resources/f_chart.png
new file mode 100644
index 0000000000..f34da5e8bb
Binary files /dev/null and b/harbour/contrib/hbide/resources/f_chart.png differ
diff --git a/harbour/contrib/hbide/resources/f_gradient.png b/harbour/contrib/hbide/resources/f_gradient.png
new file mode 100644
index 0000000000..b76856a2d1
Binary files /dev/null and b/harbour/contrib/hbide/resources/f_gradient.png differ
diff --git a/harbour/contrib/hbqt/hbqt.ch b/harbour/contrib/hbqt/hbqt.ch
index 22eec94c13..6aceaaf6e2 100644
--- a/harbour/contrib/hbqt/hbqt.ch
+++ b/harbour/contrib/hbqt/hbqt.ch
@@ -2249,10 +2249,29 @@
#define QAbstractItemDelegate_EditNextItem 1 // The view should use the delegate to open an editor on the next item in the view.
#define QAbstractItemDelegate_EditPreviousItem 2 // The view should use the delegate to open an editor on the previous item in the view.
-// The following hints are most useful when models are used that cache data, such as those that manipulate data locally in order to increase performance or conserve network bandwidth.
+//The following hints are most useful when models are used that cache data, such as those that manipulate data locally in order to increase performance or conserve network bandwidth.
#define QAbstractItemDelegate_SubmitModelCache 3 // If the model caches data, it should write out cached data to the underlying data store.
#define QAbstractItemDelegate_RevertModelCache 4 // If the model caches data, it should discard cached data and replace it with data from the underlying data store.
+#define QTabBar_LeftSide 0 // Left side of the tab.
+#define QTabBar_RightSide 1 // Right side of the tab.
+//This enum was introduced in Qt 4.5.
+
+#define QTabBar_SelectLeftTab 0 // Select the tab to the left of the one being removed.
+#define QTabBar_SelectRightTab 1 // Select the tab to the right of the one being removed.
+#define QTabBar_SelectPreviousTab 2 // Select the previously selected tab.
+//This enum was introduced in Qt 4.5.
+
+//enum QTabBar::Shape
+//This enum type lists the built-in shapes supported by QTabBar. Treat these as hints as some styles may not render some of the shapes. However, position should be honored.
+#define QTabBar_RoundedNorth 0 // The normal rounded look above the pages
+#define QTabBar_RoundedSouth 1 // The normal rounded look below the pages
+#define QTabBar_RoundedWest 2 // The normal rounded look on the left side of the pages
+#define QTabBar_RoundedEast 3 // The normal rounded look on the right side the pages
+#define QTabBar_TriangularNorth 4 // Triangular tabs above the pages.
+#define QTabBar_TriangularSouth 5 // Triangular tabs similar to those used in the Excel spreadsheet, for example
+#define QTabBar_TriangularWest 6 // Triangular tabs on the left of the pages.
+#define QTabBar_TriangularEast 7 // Triangular tabs on the right of the pages.
/*----------------------------------------------------------------------*/