* contrib/hbide/hbqreportsmanager.prg
* contrib/hbide/ideactions.prg
* contrib/hbide/idebrowse.prg
* contrib/hbide/idefindreplace.prg
* contrib/hbide/idehome.prg
* contrib/hbide/idemain.prg
* contrib/hbide/idemisc.prg
* contrib/hbide/ideprojmanager.prg
* contrib/hbide/idesaveload.prg
* contrib/hbide/ideshortcuts.prg
* contrib/hbide/idethemes.prg
! Changed: hbIDE => HbIDE.
Formatting and code cleanup.
* contrib/hbide/ideedit.prg
* contrib/hbqt/qtgui/hbqt_hbqplaintextedit.cpp
! Optimized: Column selection mode.
% Code cleanup.
2750 lines
89 KiB
Plaintext
2750 lines
89 KiB
Plaintext
/*
|
|
* $Id$
|
|
*/
|
|
|
|
/*
|
|
* Harbour Project source code:
|
|
*
|
|
* Copyright 2010 Pritpal Bedi <pritpal@vouchcac.com>
|
|
* www - http://harbour-project.org
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License as published by
|
|
* the Free Software Foundation; either version 2, or (at your option)
|
|
* any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this software; see the file COPYING. If not, write to
|
|
* the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
|
|
* Boston, MA 02111-1307 USA (or visit the web site http://www.gnu.org/).
|
|
*
|
|
* As a special exception, the Harbour Project gives permission for
|
|
* additional uses of the text contained in its release of Harbour.
|
|
*
|
|
* The exception is that, if you link the Harbour libraries with other
|
|
* files to produce an executable, this does not by itself cause the
|
|
* resulting executable to be covered by the GNU General Public License.
|
|
* Your use of that executable is in no way restricted on account of
|
|
* linking the Harbour library code into it.
|
|
*
|
|
* This exception does not however invalidate any other reasons why
|
|
* the executable file might be covered by the GNU General Public License.
|
|
*
|
|
* This exception applies only to the code released by the Harbour
|
|
* Project under the name Harbour. If you copy code from other
|
|
* Harbour Project or Free Software Foundation releases into a copy of
|
|
* Harbour, as the General Public License permits, the exception does
|
|
* not apply to the code that you add in this way. To avoid misleading
|
|
* anyone as to the status of such modified files, you must delete
|
|
* this exception notice from them.
|
|
*
|
|
* If you write modifications of your own for Harbour, it is your choice
|
|
* whether to permit this exception to apply to your modifications.
|
|
* If you do not wish that, delete this exception notice.
|
|
*
|
|
*/
|
|
/*----------------------------------------------------------------------*/
|
|
/*----------------------------------------------------------------------*/
|
|
/*----------------------------------------------------------------------*/
|
|
/*
|
|
* EkOnkar
|
|
* ( The LORD is ONE )
|
|
*
|
|
* Harbour-Qt IDE
|
|
*
|
|
* Pritpal Bedi <bedipritpal@hotmail.com>
|
|
* 07Aug2010
|
|
*/
|
|
/*----------------------------------------------------------------------*/
|
|
/*----------------------------------------------------------------------*/
|
|
/*----------------------------------------------------------------------*/
|
|
|
|
#include "hbide.ch"
|
|
#include "common.ch"
|
|
#include "hbclass.ch"
|
|
#include "hbqtgui.ch"
|
|
|
|
#define UNIT 0.1
|
|
|
|
#define INI_KEY( cKey, n ) cKey + "_" + hb_ntos( n ) + "="
|
|
|
|
#define hbqt_screen_heightMM ( QDesktopWidget():height() / QDesktopWidget():physicalDpiY() * 25.4 )
|
|
#define hbqt_screen_widthMM ( QDesktopWidget():width() / QDesktopWidget():physicalDpiX() * 25.4 )
|
|
|
|
#define HBQT_GRAPHICSVIEW_ZOOM_IN 1
|
|
#define HBQT_GRAPHICSVIEW_ZOOM_OUT 2
|
|
#define HBQT_GRAPHICSVIEW_ZOOM_WYSIWYG 3
|
|
#define HBQT_GRAPHICSVIEW_ZOOM_ORIGINAL 4
|
|
|
|
#define HQR_BARCODE_3OF9 1
|
|
|
|
#define TO_MMS( n ) ( ( n ) * 10 / 25.4 )
|
|
|
|
#define SHP_ACT_RECTANGLE 1
|
|
#define SHP_ACT_ROUNDRECT 2
|
|
#define SHP_ACT_ELLIPSE 3
|
|
#define SHP_ACT_LINEVERT 4
|
|
#define SHP_ACT_LINEHORZ 5
|
|
#define SHP_ACT_LINEDIAGRIGHT 6
|
|
#define SHP_ACT_LINEDIAGLEFT 7
|
|
#define SHP_ACT_ARC 8
|
|
#define SHP_ACT_CHORD 9
|
|
#define SHP_ACT_DIAMOND 10
|
|
#define SHP_ACT_TRIANGLE 11
|
|
|
|
#define NUM_SHAPES 11
|
|
|
|
#define __graphicsScene_block__ 2001
|
|
#define __treeObjects_clicked__ 2002
|
|
#define __tabBar_currentChanged__ 2003
|
|
#define __buttonNew_clicked__ 2004
|
|
#define __buttonOpen_clicked__ 2005
|
|
#define __buttonSave_clicked__ 2006
|
|
#define __buttonClose_clicked__ 2007
|
|
#define __buttonPrint_clicked__ 2008
|
|
#define __buttonToBack_clicked__ 2009
|
|
#define __buttonToFront_clicked__ 2010
|
|
#define __buttonRotateL_clicked__ 2011
|
|
#define __buttonRotateR_clicked__ 2012
|
|
#define __buttonPortrait_clicked__ 2013
|
|
#define __buttonLandscape_clicked__ 2014
|
|
#define __buttonFontG_clicked__ 2015
|
|
#define __buttonFontB_clicked__ 2016
|
|
#define __buttonFontI_clicked__ 2017
|
|
#define __buttonFontU_clicked__ 2018
|
|
#define __buttonFontS_clicked__ 2019
|
|
#define __buttonJustL_clicked__ 2020
|
|
#define __buttonJustC_clicked__ 2021
|
|
#define __buttonJustR_clicked__ 2022
|
|
#define __buttonJustJ_clicked__ 2023
|
|
#define __buttonJustT_clicked__ 2024
|
|
#define __buttonJustM_clicked__ 2025
|
|
#define __buttonJustB_clicked__ 2026
|
|
#define __buttonBoxT_clicked__ 2027
|
|
#define __buttonBoxL_clicked__ 2028
|
|
#define __buttonBoxB_clicked__ 2029
|
|
#define __buttonBoxR_clicked__ 2030
|
|
#define __buttonBoxA_clicked__ 2031
|
|
#define __buttonBoxP_clicked__ 2032
|
|
#define __buttonBoxS_clicked__ 2033
|
|
#define __buttonZoom_clicked__ 2034
|
|
#define __buttonGrid_clicked__ 2035
|
|
#define __buttonNew0_clicked__ 2036 // Tobe assined
|
|
#define __buttonShapes_clicked__ 2037
|
|
#define __QEvent_MousePressMenu__ 2038
|
|
#define __QEvent_MouseMoveMenu__ 2039
|
|
#define __QEvent_MouseReleaseMenu__ 2040
|
|
|
|
/*----------------------------------------------------------------------*/
|
|
|
|
STATIC hIDs := {=>}
|
|
|
|
/*----------------------------------------------------------------------*/
|
|
|
|
CLASS HbqReportsManager
|
|
|
|
DATA qParent
|
|
|
|
DATA oWidget
|
|
DATA qLayout
|
|
DATA qToolbar
|
|
DATA qToolbarL
|
|
DATA qToolbarAlign
|
|
DATA qStack
|
|
DATA qStatus
|
|
DATA qTabBar
|
|
DATA qWidget1
|
|
DATA qWidget2
|
|
DATA qWidget3
|
|
|
|
DATA qPaper
|
|
|
|
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 qView
|
|
DATA qScene
|
|
|
|
DATA aStatusPnls INIT {}
|
|
DATA aItems INIT {}
|
|
DATA hItems INIT {=>}
|
|
DATA hObjTree INIT {=>}
|
|
DATA qCurGraphicsItem
|
|
DATA hHqrObjects INIT {=>}
|
|
|
|
DATA aPages INIT {}
|
|
DATA aSources INIT {}
|
|
DATA aObjects INIT {}
|
|
DATA aRptPages INIT {}
|
|
DATA aRptSources INIT {}
|
|
DATA aRptObjects INIT {}
|
|
|
|
DATA lNew INIT .t.
|
|
DATA cSaved INIT ""
|
|
|
|
DATA nScreenDpiX INIT 96
|
|
DATA nScreenDpiY INIT 96
|
|
|
|
/* Report's Properties */
|
|
DATA symposis INIT "HBReports Designer"
|
|
DATA version INIT 0.1
|
|
DATA title INIT "Report"
|
|
DATA author INIT "HbIDE"
|
|
DATA created INIT date()
|
|
DATA modified INIT date()
|
|
|
|
DATA xData
|
|
DATA qPos INIT QPoint( -1,-1 )
|
|
DATA qDrag
|
|
DATA qDropAction
|
|
DATA qByte
|
|
DATA qMime
|
|
DATA qPix
|
|
DATA qAct
|
|
DATA qShapesMenu
|
|
DATA aShapesAct INIT array( NUM_SHAPES )
|
|
|
|
METHOD new( qParent )
|
|
METHOD create( qParent )
|
|
METHOD destroy()
|
|
METHOD execEvent( nEvent, p, p1, p2 )
|
|
METHOD buildToolbar()
|
|
METHOD buildToolbarAlign()
|
|
METHOD buildToolbarLeft()
|
|
METHOD buildStacks()
|
|
METHOD buildStatusBar()
|
|
METHOD buildTabBar()
|
|
METHOD buildDesignReport()
|
|
METHOD addField( cAlias, cField, qPos, qGeo )
|
|
METHOD addObject( cType, qPos, qGeo )
|
|
METHOD loadReport( xData )
|
|
METHOD saveReport( lSaveAs )
|
|
METHOD prepareReport()
|
|
METHOD getNextID( cType )
|
|
METHOD getImageOfType( cType )
|
|
METHOD updateObjectsTree( cType, cParent, cName, cSubType )
|
|
METHOD contextMenuItem( p1, p2 )
|
|
METHOD contextMenuScene( p1 )
|
|
METHOD addSource( cAlias, aStruct )
|
|
METHOD clear()
|
|
METHOD buildReportStream()
|
|
METHOD toString()
|
|
METHOD openReport()
|
|
METHOD parseBuffer( cBuffer )
|
|
METHOD presentBlankPage()
|
|
METHOD printReport( qPrinter )
|
|
METHOD printPreview( qPrinter )
|
|
METHOD paintRequested( qPrinter )
|
|
METHOD zoom( nMode )
|
|
|
|
METHOD objectSelected( hqrObject )
|
|
METHOD execMenuShapes()
|
|
|
|
ENDCLASS
|
|
|
|
/*----------------------------------------------------------------------*/
|
|
|
|
METHOD HbqReportsManager:new( qParent )
|
|
::qParent := qParent
|
|
RETURN Self
|
|
|
|
/*----------------------------------------------------------------------*/
|
|
|
|
METHOD HbqReportsManager:create( qParent )
|
|
|
|
DEFAULT qParent TO ::qParent
|
|
::qParent := qParent
|
|
|
|
::oWidget := QWidget( ::qParent )
|
|
|
|
/* Layout applied to RM widget */
|
|
::qLayout := QGridLayout()
|
|
::qLayout:setContentsMargins( 0,0,0,0 )
|
|
::qLayout:setSpacing( 0 )
|
|
|
|
::oWidget:setLayout( ::qLayout )
|
|
|
|
/* Toolbar */
|
|
::buildToolbar()
|
|
::qLayout:addWidget( ::qToolbar:oWidget , 0, 0, 1, 2 )
|
|
::buildToolbarAlign()
|
|
::qLayout:addWidget( ::qToolbarAlign:oWidget , 1, 0, 1, 2 )
|
|
|
|
/* Toolbar left */
|
|
::buildToolbarLeft()
|
|
::qLayout:addWidget( ::qToolbarL:oWidget , 2, 0, 2, 1 )
|
|
|
|
/* ::qTabBar */
|
|
::buildTabBar()
|
|
::qLayout:addWidget( ::qTabBar , 2, 1, 1, 1 )
|
|
|
|
/* Stacked widget */
|
|
::buildStacks()
|
|
::qLayout:addWidget( ::qStack , 3, 1, 1, 1 )
|
|
|
|
/* StatusBar */
|
|
::buildStatusBar()
|
|
::qLayout:addWidget( ::qStatus , 4, 0, 1, 2 )
|
|
|
|
/* Document manipulation interface */
|
|
::buildDesignReport()
|
|
|
|
::qTabBar:setCurrentIndex( 2 )
|
|
|
|
RETURN Self
|
|
|
|
/*----------------------------------------------------------------------*/
|
|
|
|
METHOD HbqReportsManager:destroy()
|
|
|
|
::qTreeObjects:disconnect( "itemClicked(QTreeWidgetItem*,int)" )
|
|
|
|
::qParent := NIL
|
|
|
|
::aSources := NIL
|
|
::aPages := NIL
|
|
::qToolbar := NIL
|
|
::qToolbarAlign := NIL
|
|
::qToolbarL := NIL
|
|
|
|
::qLayoutD := NIL
|
|
::qSpliter := NIL
|
|
::qFrameL := NIL
|
|
|
|
::qScene := NIL
|
|
|
|
::qView := NIL
|
|
::qFrameR := NIL
|
|
|
|
::qLayL := NIL
|
|
::qSplL := NIL
|
|
|
|
::qLayR := NIL
|
|
|
|
::qTabL0 := NIL
|
|
::qTabL1 := NIL
|
|
::qTabR1 := NIL
|
|
|
|
::qPageL01 := NIL
|
|
::qPageL02 := NIL
|
|
::qPageL11 := NIL
|
|
|
|
::qTreeObjects := NIL
|
|
|
|
::qPageL12 := NIL
|
|
|
|
::qTreeProp := NIL
|
|
::qEditDesc := NIL
|
|
|
|
::qSplR := NIL
|
|
::qPageR11 := NIL
|
|
::qPageR12 := NIL
|
|
::qPageR13 := NIL
|
|
|
|
::qPageR11Lay := NIL
|
|
|
|
::qTreeData := NIL
|
|
::qPageR11Lay := NIL
|
|
|
|
RETURN Self
|
|
|
|
/*----------------------------------------------------------------------*/
|
|
|
|
METHOD HbqReportsManager:buildDesignReport()
|
|
|
|
::qLayoutD := QHBoxLayout()
|
|
::qLayoutD:setContentsMargins( 0,0,0,0 )
|
|
::qLayoutD:setSpacing( 1 )
|
|
::qWidget3:setLayout( ::qLayoutD )
|
|
|
|
::qSpliter := QSplitter()
|
|
::qSpliter:setOrientation( Qt_Horizontal )
|
|
|
|
::qLayoutD:addWidget( ::qSpliter )
|
|
|
|
::qFrameL := QFrame()
|
|
::qSpliter:addWidget( ::qFrameL )
|
|
|
|
::qScene := HBQGraphicsScene()
|
|
::qScene:hbSetBlock( {|p,p1,p2| ::execEvent( __graphicsScene_block__, p, p1, p2 ) } )
|
|
|
|
::qView := QGraphicsView( ::qDesign )
|
|
::qView:setMouseTracking( .t. )
|
|
::qView:setScene( ::qScene )
|
|
//
|
|
::qSpliter:addWidget( ::qView )
|
|
|
|
::qFrameR := QFrame()
|
|
::qSpliter:addWidget( ::qFrameR )
|
|
|
|
::qLayL := QVBoxLayout()
|
|
::qLayL:setContentsMargins( 0,0,0,0 )
|
|
::qLayL:setSpacing( 1 )
|
|
::qFrameL:setLayout( ::qLayL )
|
|
::qSplL := QSplitter()
|
|
::qSplL:setOrientation( Qt_Vertical )
|
|
::qLayL:addWidget( ::qSplL )
|
|
|
|
::qLayR := QVBoxLayout()
|
|
::qLayR:setContentsMargins( 0,0,0,0 )
|
|
::qLayR:setSpacing( 1 )
|
|
::qFrameR:setLayout( ::qLayR )
|
|
::qSplR := QSplitter()
|
|
::qSplR:setOrientation( Qt_Vertical )
|
|
::qLayR:addWidget( ::qSplR )
|
|
|
|
::qFrameL:setMinimumWidth( 100 )
|
|
::qFrameR:setMinimumWidth( 100 )
|
|
|
|
|
|
::qTabL0 := QTabWidget()
|
|
::qSplL:addWidget( ::qTabL0 )
|
|
/* Left Pane Objects Page */
|
|
::qPageL01 := QWidget()
|
|
::qTabL0:addTab( ::qPageL01, "Objects" )
|
|
::qPageL01Lay := QVBoxLayout()
|
|
::qPageL01:setLayout( ::qPageL01Lay )
|
|
::qPageL01Lay:setContentsMargins( 0,0,0,0 )
|
|
/* Left Pane Events page */
|
|
::qPageL02 := QWidget()
|
|
::qTabL0:addTab( ::qPageL02, "Else" )
|
|
/* Left pane Properties Treeview */
|
|
::qTreeObjects := QTreeWidget()
|
|
::qPageL01Lay:addWidget( ::qTreeObjects )
|
|
::qTreeObjects:setHeaderHidden( .t. )
|
|
::qTreeObjects:setObjectName( "ObjectsTree" )
|
|
::qTreeObjects:setIconSize( QSize( 12,12 ) )
|
|
::qTreeObjects:setIndentation( 12 )
|
|
::qTreeObjects:connect( "itemClicked(QTreeWidgetItem*,int)", {|p,p1| ::execEvent( __treeObjects_clicked__, p, p1 ) } )
|
|
|
|
::qTabL1 := QTabWidget()
|
|
::qSplL:addWidget( ::qTabL1 )
|
|
/* Left Pane Properties Page */
|
|
::qPageL11 := QWidget()
|
|
::qTabL1:addTab( ::qPageL11, "Props" )
|
|
::qPageL11Lay := QVBoxLayout()
|
|
::qPageL11:setLayout( ::qPageL11Lay )
|
|
::qPageL11Lay:setContentsMargins( 0,0,0,0 )
|
|
/* Left Pane Events page */
|
|
::qPageL12 := QWidget()
|
|
::qTabL1:addTab( ::qPageL12, "Events" )
|
|
/* Left pane Properties Treeview */
|
|
::qTreeProp := QTreeWidget()
|
|
::qPageL11Lay:addWidget( ::qTreeProp )
|
|
::qTreeProp:setHeaderHidden( .t. )
|
|
::qTreeProp:setObjectName( "PropertiesTree" )
|
|
|
|
|
|
::qEditDesc := QTextEdit()
|
|
::qSplL:addWidget( ::qEditDesc )
|
|
::qEditDesc:setPlainText( "Interface implemented is just a proof of concept, no promises yet, please." )
|
|
::qEditDesc:setMaximumHeight( 120 )
|
|
|
|
::qTabR1 := QTabWidget()
|
|
::qSplR:addWidget( ::qTabR1 )
|
|
::qPageR11 := QWidget()
|
|
::qTabR1:addTab( ::qPageR11, "Data" )
|
|
::qPageR12 := QWidget()
|
|
::qTabR1:addTab( ::qPageR12, "Variables" )
|
|
::qPageR13 := QWidget()
|
|
::qTabR1:addTab( ::qPageR13, "Functions" )
|
|
|
|
::qPageR11Lay := QVBoxLayout()
|
|
::qPageR11:setLayout( ::qPageR11Lay )
|
|
::qPageR11Lay:setContentsMargins( 0,0,0,0 )
|
|
|
|
::qTreeData := QTreeWidget()
|
|
::qPageR11Lay:addWidget( ::qTreeData )
|
|
::qTreeData:setHeaderHidden( .t. )
|
|
::qTreeData:setObjectName( "DataTree" )
|
|
::qTreeData:setDragEnabled( .t. )
|
|
|
|
::loadReport()
|
|
|
|
::qScene:setPageSize( QPrinter_A4 )
|
|
::zoom( HBQT_GRAPHICSVIEW_ZOOM_WYSIWYG )
|
|
::qToolbarAlign:setItemChecked( "Grid", ::qScene:showGrid() )
|
|
//
|
|
::qScene:setLeftMagnet( .t. )
|
|
::qScene:setTopMagnet( .t. )
|
|
::qScene:setRightMagnet( .t. )
|
|
::qScene:setBottomMagnet( .t. )
|
|
|
|
::qLayoutD:setStretch( 1,1 )
|
|
|
|
RETURN Self
|
|
|
|
/*----------------------------------------------------------------------*/
|
|
|
|
METHOD HbqReportsManager:execEvent( nEvent, p, p1, p2 )
|
|
LOCAL qMime, i, qList, cFile, nArea, aStruct, cAlias, cPath, qRC, qIcon, cType
|
|
|
|
SWITCH nEvent
|
|
CASE __graphicsScene_block__
|
|
DO CASE
|
|
CASE p == 21001
|
|
::nScreenDpiX := p1
|
|
::nScreenDpiY := p2
|
|
|
|
CASE p == 21107 // Left button pressed nowhere on an item
|
|
IF ! empty( ::qCurGraphicsItem )
|
|
::qCurGraphicsItem := NIL
|
|
::qTreeObjects:setCurrentItem( QTreeWidgetItem() )
|
|
ENDIF
|
|
|
|
CASE p == QEvent_GraphicsSceneContextMenu
|
|
::contextMenuScene( p1 )
|
|
|
|
CASE p == QEvent_GraphicsSceneDragEnter
|
|
HB_TRACE( HB_TR_DEBUG, "QEvent_GraphicsSceneDragEnter", valtype( p1 ), p1 )
|
|
p1:acceptProposedAction()
|
|
|
|
CASE p == QEvent_GraphicsSceneDragMove
|
|
HB_TRACE( HB_TR_DEBUG, "QEvent_GraphicsSceneDragMove", valtype( p1 ), p1 )
|
|
p1:acceptProposedAction()
|
|
|
|
CASE p == QEvent_GraphicsSceneDragLeave
|
|
p1:acceptProposedAction()
|
|
|
|
CASE p == QEvent_GraphicsSceneDrop
|
|
qMime := p1:mimeData()
|
|
IF qMime:hasFormat( "application/x-qabstractitemmodeldatalist" )
|
|
IF p2[ 1 ] == "DataTree"
|
|
IF p2[ 2 ] != p2[ 3 ]
|
|
::addField( p2[ 2 ], p2[ 3 ], p1:scenePos(), NIL )
|
|
ENDIF
|
|
ENDIF
|
|
ELSEIF qMime:hasFormat( "application/x-toolbaricon" )
|
|
::addObject( qMime:html(), p1:scenePos(), NIL )
|
|
ELSEIF qMime:hasFormat( "application/x-menuitem" )
|
|
cType := qMime:html()
|
|
SWITCH cType
|
|
CASE "Rectangle" ; EXIT
|
|
CASE "Ellipse" ; EXIT
|
|
CASE "Arc" ; EXIT
|
|
CASE "Chord" ; EXIT
|
|
CASE "Triangle" ; EXIT
|
|
CASE "Diamond" ; EXIT
|
|
CASE "Rounded Rectangle" ; cType := "RoundRect" ; EXIT
|
|
CASE "Horizontal Line" ; cType := "LineH" ; EXIT
|
|
CASE "Vertical Line" ; cType := "LineV" ; EXIT
|
|
CASE "Diagonal Line Right"; cType := "LineDR" ; EXIT
|
|
CASE "Diagonal Line Left" ; cType := "LineDL" ; EXIT
|
|
ENDSWITCH
|
|
::addObject( cType, p1:scenePos(), NIL )
|
|
|
|
ELSEIF qMime:hasUrls()
|
|
qList := qMime:urls()
|
|
FOR i := 0 TO qList:size() - 1
|
|
cFile := qList:at( i ):toLocalFile()
|
|
|
|
IF ".dbf" == right( lower( cFile ), 4 )
|
|
hb_fNameSplit( cFile, @cPath, @cAlias )
|
|
|
|
BEGIN SEQUENCE
|
|
nArea := select()
|
|
USE ( cFile ) ALIAS "RPTDUMMY" NEW SHARED VIA "DBFCDX"
|
|
IF ! neterr()
|
|
aStruct := DbStruct()
|
|
DbCloseArea()
|
|
::addSource( upper( substr( cAlias, 1, 1 ) ) + lower( substr( cAlias, 2 ) ), aStruct )
|
|
ENDIF
|
|
select( nArea )
|
|
END SEQUENCE
|
|
ENDIF
|
|
NEXT
|
|
ENDIF
|
|
|
|
p1:acceptProposedAction()
|
|
p1:accept()
|
|
HB_TRACE( HB_TR_DEBUG, "QEvent_GraphicsSceneDrop", 1000, p1:dropAction() )
|
|
ENDCASE
|
|
EXIT
|
|
|
|
CASE __treeObjects_clicked__
|
|
IF hb_hHasKey( ::hItems, p:text( 0 ) )
|
|
::qScene:clearSelection()
|
|
//::hItems[ qItem:text( 0 ) ]:setSelected( .t. )
|
|
::hItems[ p:text( 0 ) ]:oWidget:setSelected( .t. )
|
|
ENDIF
|
|
EXIT
|
|
|
|
CASE __tabBar_currentChanged__
|
|
IF !empty( ::qStack ) .AND. p < ::qStack:count()
|
|
::qStack:setCurrentIndex( p )
|
|
ENDIF
|
|
EXIT
|
|
|
|
CASE "dataTree_dropEvent"
|
|
CASE "dataTree_mouseReleseEvent"
|
|
CASE "dataTree_dragMoveEvent"
|
|
CASE "dataTree_dragEnterEvent"
|
|
EXIT
|
|
|
|
CASE __QEvent_MouseMoveMenu__
|
|
IF empty( ::qPos ) .OR. empty( ::qAct )
|
|
EXIT
|
|
ENDIF
|
|
|
|
qRC := QRect( ::qPos:x() - 5, ::qPos:y() - 5, 10, 10 ):normalized()
|
|
|
|
IF qRC:contains( p:pos() )
|
|
qIcon := QIcon( ::qAct:icon() )
|
|
|
|
::qByte := QByteArray( ::qAct:text() )
|
|
|
|
::qMime := QMimeData()
|
|
::qMime:setData( "application/x-menuitem", ::qByte )
|
|
::qMime:setHtml( ::qAct:text() )
|
|
|
|
::qPix := qIcon:pixmap( 16,16 )
|
|
|
|
::qDrag := QDrag( hbide_setIde():oDlg:oWidget )
|
|
::qDrag:setMimeData( ::qMime )
|
|
::qDrag:setPixmap( ::qPix )
|
|
::qDrag:setHotSpot( QPoint( 15,15 ) )
|
|
::qDrag:setDragCursor( ::qPix, Qt_MoveAction )
|
|
|
|
::qDropAction := ::qDrag:exec( Qt_MoveAction )
|
|
ENDIF
|
|
::qDrag := NIL
|
|
::qPos := NIL
|
|
::qAct := NIL
|
|
EXIT
|
|
CASE __QEvent_MouseReleaseMenu__
|
|
::qDrag := NIL
|
|
::qPos := NIL
|
|
::qAct := NIL
|
|
EXIT
|
|
CASE __QEvent_MousePressMenu__
|
|
::qPos := p:pos()
|
|
::qAct := ::qShapesMenu:actionAt( ::qPos )
|
|
EXIT
|
|
|
|
CASE __buttonShapes_clicked__
|
|
::execMenuShapes()
|
|
EXIT
|
|
CASE __buttonLandscape_clicked__
|
|
::qScene:setOrientation( QPrinter_Landscape )
|
|
EXIT
|
|
CASE __buttonPortrait_clicked__
|
|
::qScene:setOrientation( QPrinter_Portrait )
|
|
EXIT
|
|
CASE __buttonRotateL_clicked__
|
|
IF !empty( ::qCurGraphicsItem )
|
|
::qCurGraphicsItem:rotate( -10 )
|
|
ENDIF
|
|
EXIT
|
|
CASE __buttonRotateR_clicked__
|
|
IF !empty( ::qCurGraphicsItem )
|
|
::qCurGraphicsItem:rotate( 10 )
|
|
ENDIF
|
|
EXIT
|
|
CASE __buttonToBack_clicked__
|
|
EXIT
|
|
CASE __buttonToFront_clicked__
|
|
EXIT
|
|
CASE __buttonNew_clicked__
|
|
EXIT
|
|
CASE __buttonOpen_clicked__
|
|
::openReport()
|
|
EXIT
|
|
CASE __buttonSave_clicked__
|
|
::saveReport()
|
|
EXIT
|
|
CASE __buttonClose_clicked__
|
|
EXIT
|
|
CASE __buttonPrint_clicked__
|
|
::printPreview()
|
|
EXIT
|
|
CASE __buttonGrid_clicked__
|
|
::qScene:setShowGrid( ::qToolbarAlign:setItemChecked( "Grid" ) )
|
|
EXIT
|
|
CASE __buttonZoom_clicked__
|
|
DO CASE
|
|
CASE p == 1
|
|
::zoom( HBQT_GRAPHICSVIEW_ZOOM_IN )
|
|
CASE p == 2
|
|
::zoom( HBQT_GRAPHICSVIEW_ZOOM_OUT )
|
|
CASE p == 3
|
|
::zoom( HBQT_GRAPHICSVIEW_ZOOM_WYSIWYG )
|
|
CASE p == 4
|
|
::zoom( HBQT_GRAPHICSVIEW_ZOOM_ORIGINAL )
|
|
ENDCASE
|
|
EXIT
|
|
ENDSWITCH
|
|
|
|
RETURN Self
|
|
|
|
/*----------------------------------------------------------------------*/
|
|
|
|
METHOD HbqReportsManager:objectSelected( hqrObject )
|
|
LOCAL cName := hqrObject:cName
|
|
|
|
IF hb_hHasKey( ::hObjTree, cName )
|
|
::qCurGraphicsItem := ::hItems[ cName ]
|
|
::qTreeObjects:setCurrentItem( ::hObjTree[ cName ] )
|
|
ELSE
|
|
::qCurGraphicsItem := NIL
|
|
ENDIF
|
|
|
|
RETURN Self
|
|
|
|
/*----------------------------------------------------------------------*/
|
|
|
|
METHOD HbqReportsManager:presentBlankPage()
|
|
|
|
aadd( ::aPages, { "Page_1" } )
|
|
|
|
::qScene:setPageSize( QPrinter_A4 )
|
|
::qScene:setOrientation( QPrinter_Portrait )
|
|
|
|
::updateObjectsTree( "ReportName", NIL, "Report" )
|
|
::updateObjectsTree( "Page", "Report", "Page_1" )
|
|
|
|
::addSource( "Customer", { { "Title" ,"C",35,0 }, { "Street","C",20,0 }, { "Revenue","N",12,2 } } )
|
|
::addSource( "Invoice" , { { "Number","C",10,0 }, { "Date" ,"D",08,0 }, { "Amount" ,"N",12,2 } } )
|
|
|
|
RETURN Self
|
|
|
|
/*----------------------------------------------------------------------*/
|
|
|
|
METHOD HbqReportsManager:openReport()
|
|
LOCAL qFileDlg, qList, cFile
|
|
|
|
qFileDlg := QFileDialog( ::oWidget )
|
|
|
|
qFileDlg:setAcceptMode( QFileDialog_AcceptOpen )
|
|
qFileDlg:setFileMode( QFileDialog_AnyFile )
|
|
qFileDlg:setViewMode( QFileDialog_List )
|
|
qFileDlg:setNameFilter( "HB Reports (*.hqr)" )
|
|
|
|
IF qFileDlg:exec() == 1
|
|
qList := qFileDlg:selectedFiles()
|
|
cFile := qList:at( 0 )
|
|
IF !empty( cFile ) .AND. lower( right( cFile, 4 ) ) == ".hqr"
|
|
::loadReport( cFile )
|
|
ENDIF
|
|
ENDIF
|
|
|
|
RETURN Self
|
|
|
|
/*----------------------------------------------------------------------*/
|
|
|
|
METHOD HbqReportsManager:saveReport( lSaveAs )
|
|
LOCAL cFile, cBuffer, qFileDlg, qList, cExt
|
|
LOCAL lSave := .t.
|
|
|
|
DEFAULT lSaveAs TO .f.
|
|
|
|
IF lSaveAs .OR. ::lNew .OR. empty( ::cSaved )
|
|
qFileDlg := QFileDialog( ::oWidget )
|
|
|
|
qFileDlg:setAcceptMode( QFileDialog_AcceptSave )
|
|
qFileDlg:setFileMode( QFileDialog_AnyFile )
|
|
qFileDlg:setViewMode( QFileDialog_List )
|
|
qFileDlg:setNameFilter( "HB Reports (*.hqr)" )
|
|
|
|
IF qFileDlg:exec() == 1
|
|
qList := qFileDlg:selectedFiles()
|
|
cFile := qList:at( 0 )
|
|
hb_fNameSplit( cFile, , , @cExt )
|
|
IF empty( cExt )
|
|
cFile += ".hqr"
|
|
ENDIF
|
|
|
|
::cSaved := cFile
|
|
ELSE
|
|
lSave := .f.
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF lSave .AND. !empty( ::cSaved )
|
|
cBuffer := ::buildReportStream()
|
|
hb_memowrit( ::cSaved, hb_strtoutf8( cBuffer ) )
|
|
|
|
RETURN hb_fileExists( ::cSaved )
|
|
ENDIF
|
|
|
|
RETURN .f.
|
|
|
|
/*----------------------------------------------------------------------*/
|
|
|
|
METHOD HbqReportsManager:prepareReport()
|
|
RETURN Self
|
|
|
|
/*----------------------------------------------------------------------*/
|
|
|
|
METHOD HbqReportsManager:toString()
|
|
RETURN ::buildReportStream()
|
|
|
|
/*----------------------------------------------------------------------*/
|
|
|
|
METHOD HbqReportsManager:buildReportStream()
|
|
LOCAL txt_:= {}, n, a_, s, oWidget, qPos, qTran
|
|
|
|
aadd( txt_, "[GENERAL]" )
|
|
aadd( txt_, "" )
|
|
aadd( txt_, "Symposis" + "=" + "HBReportsManager" )
|
|
aadd( txt_, "Version" + "=" + hb_ntos( ::version ) )
|
|
aadd( txt_, "Title" + "=" + ::title )
|
|
aadd( txt_, "Author" + "=" + ::author )
|
|
aadd( txt_, "DateCreated" + "=" + dtos( ::created ) )
|
|
aadd( txt_, "DateModified" + "=" + dtos( ::modified ) )
|
|
aadd( txt_, "Properties" + "=" + "" )
|
|
aadd( txt_, "" )
|
|
aadd( txt_, "[SOURCES]" )
|
|
aadd( txt_, "" )
|
|
FOR EACH a_ IN ::aSources
|
|
n := a_:__enumIndex()
|
|
aadd( txt_, INI_KEY( "source", n ) + a_[ 1 ] + "," + rmgr_a2arrayStr( a_[ 2 ] ) )
|
|
NEXT
|
|
aadd( txt_, "" )
|
|
aadd( txt_, "[PAGES]" )
|
|
aadd( txt_, "" )
|
|
FOR EACH a_ IN ::aPages
|
|
n := a_:__enumIndex()
|
|
aadd( txt_, INI_KEY( "page", n ) + rmgr_a2arrayStr( a_ ) )
|
|
NEXT
|
|
aadd( txt_, "" )
|
|
aadd( txt_, "[OBJECTS]" )
|
|
aadd( txt_, "" )
|
|
FOR EACH a_ IN ::aObjects
|
|
n := a_:__enumIndex()
|
|
IF hb_hHasKey( ::hItems, a_[ 3 ] )
|
|
oWidget := ::hItems[ a_[ 3 ] ]:oWidget
|
|
qPos := oWidget:scenePos()
|
|
qTran := oWidget:transform()
|
|
|
|
a_[ 5 ] := { { 0, 0, oWidget:width(), oWidget:height() }, ;
|
|
{ qPos:x(), qPos:y() }, ;
|
|
{ qTran:m11(), qTran:m12(), qTran:m13(), qTran:m21(), qTran:m22(), qTran:m23(), qTran:m31(), qTran:m32(), qTran:m33() }, ;
|
|
}
|
|
|
|
aadd( txt_, INI_KEY( "object", n ) + rmgr_a2arrayStr( a_ ) )
|
|
ENDIF
|
|
NEXT
|
|
aadd( txt_, "" )
|
|
|
|
s := ""
|
|
aeval( txt_, {|e| s += e + chr( 13 ) + chr( 10 ) } )
|
|
|
|
RETURN s
|
|
|
|
/*----------------------------------------------------------------------*/
|
|
|
|
METHOD HbqReportsManager:parseBuffer( cBuffer )
|
|
LOCAL aTxt, s, nPart, cKey, cVal
|
|
|
|
aTxt := hb_ATokens( StrTran( cBuffer, Chr( 13 ) ), Chr( 10 ) )
|
|
|
|
FOR EACH s IN aTxt
|
|
s := alltrim( s )
|
|
IF empty( s )
|
|
LOOP
|
|
ENDIF
|
|
|
|
SWITCH Upper( s )
|
|
CASE "[GENERAL]" ; nPart := "HQR_GENERAL" ; EXIT
|
|
CASE "[SOURCES]" ; nPart := "HQR_SOURCES" ; EXIT
|
|
CASE "[PAGES]" ; nPart := "HQR_PAGES" ; EXIT
|
|
CASE "[OBJECTS]" ; nPart := "HQR_OBJECTS" ; EXIT
|
|
OTHERWISE
|
|
DO CASE
|
|
CASE nPart == "HQR_GENERAL"
|
|
CASE nPart == "HQR_SOURCES"
|
|
IF rmgr_keyValuePair( s, @cKey, @cVal, "=" )
|
|
IF rmgr_keyValuePair( cVal, @cKey, @cVal, "," )
|
|
aadd( ::aRptSources, { "Source", rmgr_evalAsArray( cVal ) } )
|
|
ENDIF
|
|
ENDIF
|
|
CASE nPart == "HQR_PAGES"
|
|
IF rmgr_keyValuePair( s, @cKey, @cVal, "=" )
|
|
aadd( ::aRptPages, { "Page", rmgr_evalAsArray( cVal ) } )
|
|
ENDIF
|
|
CASE nPart == "HQR_OBJECTS"
|
|
IF rmgr_keyValuePair( s, @cKey, @cVal, "=" )
|
|
aadd( ::aRptObjects, rmgr_evalAsArray( cVal ) )
|
|
ENDIF
|
|
ENDCASE
|
|
ENDSWITCH
|
|
NEXT
|
|
|
|
RETURN Self
|
|
|
|
/*----------------------------------------------------------------------*/
|
|
|
|
METHOD HbqReportsManager:loadReport( xData )
|
|
LOCAL cBuffer, a_, d_, n, cName, cAlias, cField, oWidget
|
|
LOCAL aGeo, aPt, aTran
|
|
LOCAL qGeo, qPt, qTran
|
|
|
|
::clear()
|
|
|
|
IF empty( xData )
|
|
::presentBlankPage()
|
|
::lNew := .t.
|
|
|
|
ELSE
|
|
::lNew := .f.
|
|
|
|
IF Len( xData ) <= 300 .AND. hb_fileExists( xData )
|
|
::cSaved := xData
|
|
cBuffer := hb_utf8tostr( hb_memoread( xData ) )
|
|
|
|
IF !empty( ::qParent )
|
|
::qParent:setWindowTitle( "HBReportsManager : " + ::cSaved )
|
|
ENDIF
|
|
ELSE
|
|
::cSaved := ""
|
|
cBuffer := xData
|
|
ENDIF
|
|
|
|
::parseBuffer( cBuffer )
|
|
|
|
::qScene:setPageSize( QPrinter_A4 )
|
|
::qScene:setOrientation( QPrinter_Portrait )
|
|
|
|
::updateObjectsTree( "ReportName", NIL, "Report" )
|
|
::updateObjectsTree( "Page", "Report", "Page_1" )
|
|
|
|
FOR EACH a_ IN ::aRptSources
|
|
::addSource( a_[ 1 ], a_[ 2 ] )
|
|
NEXT
|
|
|
|
FOR EACH a_ IN ::aRptObjects
|
|
d_:= a_[ 5 ] ; aGeo := d_[ 1 ] ; aPt := d_[ 2 ] ; aTran := d_[ 3 ]
|
|
|
|
qGeo := QRectF( aGeo[ 1 ], aGeo[ 2 ], aGeo[ 3 ], aGeo[ 4 ] )
|
|
qPt := QPointF( aPt[ 1 ], aPt[ 2 ] )
|
|
|
|
SWITCH a_[ 1 ]
|
|
CASE "Object"
|
|
oWidget := ::addObject( a_[ 4 ], qPt, qGeo )
|
|
EXIT
|
|
CASE "Field"
|
|
cName := a_[ 3 ] ; n := at( "...", cName ) ; cAlias := substr( cName, 1, n-1 )
|
|
cField := substr( cName, n + 3 ) ; n := at( "_", cField ) ; cField := substr( cField, 1, n-1 )
|
|
oWidget := ::addField( cAlias, cField, qPt, qGeo )
|
|
EXIT
|
|
ENDSWITCH
|
|
|
|
qTran := QTransform()
|
|
qTran : setMatrix( aTran[ 1 ], aTran[ 2 ], aTran[ 3 ], aTran[ 4 ], aTran[ 5 ], aTran[ 6 ], aTran[ 7 ], aTran[ 8 ], aTran[ 9 ] )
|
|
oWidget : setTransform( qTran )
|
|
NEXT
|
|
ENDIF
|
|
|
|
RETURN Self
|
|
|
|
/*----------------------------------------------------------------------*/
|
|
|
|
METHOD HbqReportsManager:addObject( cType, qPos, qGeo )
|
|
LOCAL cName, qGrad, oHqrObject, aGeo, aPos
|
|
|
|
aPos := iif( empty( qPos ), NIL, { qPos:x(), qPos:y() } )
|
|
aGeo := iif( empty( qGeo ), NIL, { qGeo:x(), qGeo:y(), qGeo:width(), qGeo:height() } )
|
|
|
|
cName := cType + "_" + hb_ntos( ::getNextID( cType ) )
|
|
|
|
oHqrObject := HqrGraphicsItem():new( Self, /*cParent*/, cType, cName, aPos, aGeo )
|
|
|
|
SWITCH cType
|
|
CASE "Image"
|
|
oHqrObject:setPixmap( QPixmap( app_image( "hbide" ) ) )
|
|
oHqrObject:setBorderWidth( 2 )
|
|
EXIT
|
|
CASE "Chart"
|
|
EXIT
|
|
CASE "Gradient"
|
|
qGrad := QLinearGradient()
|
|
qGrad:setColorAt( 0, QColor( 195,225,255 ) )
|
|
qGrad:setColorAt( 1, QColor( Qt_darkBlue ):darker( 150 ) )
|
|
qGrad:setCoordinateMode( QGradient_StretchToDeviceMode )
|
|
oHqrObject:setBrush( QBrush( qGrad ) )
|
|
oHqrObject:setPen( QPen( Qt_NoPen ) )
|
|
EXIT
|
|
CASE "Barcode"
|
|
oHqrObject:setText( "Harbour" )
|
|
oHqrObject:setBarcodeType( HQR_BARCODE_3OF9 )
|
|
EXIT
|
|
CASE "Text"
|
|
oHqrObject:setText( "Harbour" )
|
|
EXIT
|
|
ENDSWITCH
|
|
|
|
::hItems[ cName ] := oHqrObject
|
|
::updateObjectsTree( "Object", "Page_1", cName, cType )
|
|
aadd( ::aObjects, { "Object", "Page_1", cName, cType, {} } )
|
|
|
|
RETURN oHqrObject:oWidget
|
|
|
|
/*----------------------------------------------------------------------*/
|
|
|
|
METHOD HbqReportsManager:addField( cAlias, cField, qPos, qGeo )
|
|
LOCAL cName, oHqrObject, aGeo, aPos
|
|
|
|
aPos := iif( empty( qPos ), NIL, { qPos:x(), qPos:y() } )
|
|
aGeo := iif( empty( qGeo ), NIL, { qGeo:x(), qGeo:y(), qGeo:width(), qGeo:height() } )
|
|
|
|
cName := cAlias + "..." + cField
|
|
cName := cName + "_" + hb_ntos( ::getNextID( cName ) )
|
|
|
|
oHqrObject := HqrGraphicsItem():new( Self, /*cParent*/, "Field", cName, aPos, aGeo )
|
|
|
|
oHqrObject:setText( cName )
|
|
|
|
::hItems[ cName ] := oHqrObject
|
|
::updateObjectsTree( "Field", "Page_1", cName, "Field" )
|
|
aadd( ::aObjects, { "Field", "Page_1", cName, "Field", {} } )
|
|
|
|
RETURN oHqrObject:oWidget
|
|
|
|
/*----------------------------------------------------------------------*/
|
|
|
|
METHOD HbqReportsManager:addSource( cAlias, aStruct )
|
|
LOCAL qItem, qItmC, b_
|
|
|
|
qItem := QTreeWidgetItem()
|
|
qItem:setText( 0, cAlias )
|
|
::qTreeData:addTopLevelItem( qItem )
|
|
|
|
FOR EACH b_ IN aStruct
|
|
qItmC := QTreeWidgetItem()
|
|
qItmC:setText( 0, b_[ 1 ] )
|
|
qItem:addChild( qItmC )
|
|
qItem:setExpanded( .t. )
|
|
NEXT
|
|
|
|
aadd( ::aSources, { cAlias, aStruct } )
|
|
|
|
RETURN Self
|
|
|
|
/*----------------------------------------------------------------------*/
|
|
|
|
METHOD HbqReportsManager:clear()
|
|
LOCAL oHrqObject, qObj
|
|
|
|
FOR EACH oHrqObject IN ::hItems
|
|
qObj := oHrqObject:oWidget
|
|
::qScene:removeItem( qObj )
|
|
qObj := NIL
|
|
NEXT
|
|
::hItems := {=>}
|
|
|
|
::qTreeObjects:clear()
|
|
::qTreeData:clear()
|
|
|
|
::aObjects := {}
|
|
::aPages := {}
|
|
::aSources := {}
|
|
|
|
::aRptObjects := {}
|
|
::aRptPages := {}
|
|
::aRptSources := {}
|
|
|
|
hIDs := {=>}
|
|
|
|
::qScene:invalidate()
|
|
|
|
RETURN Self
|
|
|
|
/*----------------------------------------------------------------------*/
|
|
|
|
METHOD HbqReportsManager:updateObjectsTree( cType, cParent, cName, cSubType )
|
|
LOCAL qParent, qItem
|
|
|
|
DO CASE
|
|
CASE cType == "ReportName"
|
|
qItem := QTreeWidgetItem() ; qItem:setText( 0, cName )
|
|
qItem:setIcon( 0, QIcon( app_image( "r-report" ) ) )
|
|
::qTreeObjects:addTopLevelItem( qItem )
|
|
::hObjTree[ cName ] := qItem
|
|
qItem:setExpanded( .t. )
|
|
|
|
CASE cType == "Page" .OR. cType == "Object" .OR. cType == "Field"
|
|
IF hb_hHasKey( ::hObjTree, cParent )
|
|
qParent := ::hObjTree[ cParent ]
|
|
ENDIF
|
|
IF !empty( qParent )
|
|
IF hb_hHasKey( ::hObjTree, cName )
|
|
//
|
|
ENDIF
|
|
qItem := QTreeWidgetItem() ; qItem:setText( 0, cName )
|
|
qParent:addChild( qItem )
|
|
::hObjTree[ cName ] := qItem
|
|
|
|
IF cType == "Page"
|
|
qItem:setIcon( 0, QIcon( app_image( "r-page" ) ) )
|
|
ELSEIF cType == "Object"
|
|
qItem:setIcon( 0, QIcon( ::getImageOfType( cSubType ) ) )
|
|
ELSEIF cType == "Field"
|
|
qItem:setIcon( 0, QIcon( ::getImageOfType( "Field" ) ) )
|
|
ENDIF
|
|
|
|
qParent:setExpanded( .t. )
|
|
ENDIF
|
|
ENDCASE
|
|
|
|
RETURN Self
|
|
|
|
/*----------------------------------------------------------------------*/
|
|
|
|
METHOD HbqReportsManager:zoom( nMode )
|
|
|
|
SWITCH nMode
|
|
CASE HBQT_GRAPHICSVIEW_ZOOM_IN
|
|
::qView:scale( 1.1, 1.1 )
|
|
EXIT
|
|
CASE HBQT_GRAPHICSVIEW_ZOOM_OUT
|
|
::qView:scale( 0.9, 0.9 )
|
|
EXIT
|
|
CASE HBQT_GRAPHICSVIEW_ZOOM_WYSIWYG
|
|
::qView:resetMatrix()
|
|
::qView:scale( ::nScreenDpiX / 25.4 / 10.0, ::nScreenDpiY / 25.4 / 10.0 )
|
|
::qView:centerOn( 0.0, 0.0 )
|
|
EXIT
|
|
CASE HBQT_GRAPHICSVIEW_ZOOM_ORIGINAL
|
|
::qView:resetMatrix()
|
|
::qView:centerOn( 0.0, 0.0 )
|
|
EXIT
|
|
ENDSWITCH
|
|
|
|
RETURN sELF
|
|
|
|
/*----------------------------------------------------------------------*/
|
|
|
|
METHOD HbqReportsManager:contextMenuScene( p1 )
|
|
LOCAL qMenu, qAct, aAct := {}
|
|
|
|
qMenu := QMenu( ::qView )
|
|
aadd( aAct, qMenu:addAction( "Refresh" ) )
|
|
aadd( aAct, qMenu:addAction( "Zoom+" ) )
|
|
|
|
IF ! empty( qAct := qMenu:exec( p1:screenPos() ) )
|
|
SWITCH qAct:text()
|
|
CASE "Refresh"
|
|
EXIT
|
|
CASE "Zoom+"
|
|
EXIT
|
|
ENDSWITCH
|
|
ENDIF
|
|
|
|
RETURN Self
|
|
|
|
/*----------------------------------------------------------------------*/
|
|
|
|
METHOD HbqReportsManager:contextMenuItem( p1, p2 )
|
|
LOCAL qMenu, qAct, aAct := {}
|
|
|
|
HB_SYMBOL_UNUSED( p2 )
|
|
|
|
qMenu := QMenu()
|
|
aadd( aAct, qMenu:addAction( "Cut" ) )
|
|
aadd( aAct, qMenu:addAction( "Copy" ) )
|
|
|
|
IF ! empty( qAct := qMenu:exec( p1:screenPos() ) )
|
|
SWITCH qAct:text()
|
|
CASE "Cut"
|
|
EXIT
|
|
CASE "Copy"
|
|
EXIT
|
|
ENDSWITCH
|
|
ENDIF
|
|
|
|
RETURN Self
|
|
|
|
/*----------------------------------------------------------------------*/
|
|
|
|
METHOD HbqReportsManager:buildTabBar()
|
|
|
|
::qTabBar := QTabBar()
|
|
::qTabBar:setShape( QTabBar_TriangularNorth )
|
|
|
|
::qTabBar:addTab( "Code" )
|
|
::qTabBar:addTab( "Dialogs" )
|
|
::qTabBar:addTab( "Page_1" )
|
|
|
|
::qTabBar:connect( "currentChanged(int)", {|p| ::execEvent( __tabBar_currentChanged__, p ) } )
|
|
|
|
RETURN Self
|
|
|
|
/*----------------------------------------------------------------------*/
|
|
|
|
METHOD HbqReportsManager:buildStacks()
|
|
|
|
::qStack := QStackedWidget()
|
|
|
|
::qWidget1 := QWidget()
|
|
::qStack:addWidget( ::qWidget1 )
|
|
|
|
::qWidget2 := QWidget()
|
|
::qStack:addWidget( ::qWidget2 )
|
|
|
|
::qWidget3 := QWidget()
|
|
::qStack:addWidget( ::qWidget3 )
|
|
|
|
RETURN Self
|
|
|
|
/*----------------------------------------------------------------------*/
|
|
|
|
METHOD HbqReportsManager:buildStatusBar()
|
|
LOCAL qLabel
|
|
|
|
::qStatus := QStatusBar()
|
|
::qStatus:setSizeGripEnabled( .f. )
|
|
|
|
qLabel := QLabel(); qLabel:setMinimumWidth( 40 )
|
|
::qStatus:addPermanentWidget( qLabel, 0 )
|
|
aadd( ::aStatusPnls, qLabel )
|
|
qLabel:setText( "Ready" )
|
|
|
|
qLabel := QLabel(); qLabel:setMinimumWidth( 40 )
|
|
::qStatus:addPermanentWidget( qLabel, 0 )
|
|
aadd( ::aStatusPnls, qLabel )
|
|
|
|
qLabel := QLabel(); qLabel:setMinimumWidth( 40 )
|
|
::qStatus:addPermanentWidget( qLabel, 0 )
|
|
aadd( ::aStatusPnls, qLabel )
|
|
|
|
qLabel := QLabel(); qLabel:setMinimumWidth( 40 )
|
|
::qStatus:addPermanentWidget( qLabel, 1 )
|
|
aadd( ::aStatusPnls, qLabel )
|
|
|
|
RETURN Self
|
|
|
|
/*----------------------------------------------------------------------*/
|
|
|
|
METHOD HbqReportsManager:getImageOfType( cType )
|
|
LOCAL cImage
|
|
|
|
DO CASE
|
|
CASE cType == "Image" ; cImage := "f-image"
|
|
CASE cType == "Barcode" ; cImage := "f_barcode"
|
|
CASE cType == "Chart" ; cImage := "f_chart"
|
|
CASE cType == "Gradient" ; cImage := "f_gradient"
|
|
CASE cType == "Text" ; cImage := "text"
|
|
CASE cType == "Field" ; cImage := "text"
|
|
CASE cType == "Rectangle" ; cImage := "rp_rectangle"
|
|
CASE cType == "RoundRect" ; cImage := "rp_roundrectangle"
|
|
CASE cType == "Ellipse" ; cImage := "rp_ellipse"
|
|
CASE cType == "LineH" ; cImage := "rp_linehorz"
|
|
CASE cType == "LineV" ; cImage := "rp_linevert"
|
|
CASE cType == "LineDR" ; cImage := "rp_linediagright"
|
|
CASE cType == "LineDL" ; cImage := "rp_linediagleft"
|
|
CASE cType == "Arc" ; cImage := "rp_arc"
|
|
CASE cType == "Chord" ; cImage := "rp_chord"
|
|
CASE cType == "Diamond" ; cImage := "rp_diamond"
|
|
CASE cType == "Triangle" ; cImage := "rp_triangle"
|
|
ENDCASE
|
|
|
|
RETURN app_image( cImage )
|
|
|
|
/*----------------------------------------------------------------------*/
|
|
|
|
METHOD HbqReportsManager:getNextID( cType )
|
|
|
|
IF ! hb_hHasKey( hIDs, cType )
|
|
hIDs[ cType ] := 0
|
|
ENDIF
|
|
|
|
RETURN ++hIDs[ cType ]
|
|
|
|
/*----------------------------------------------------------------------*/
|
|
|
|
METHOD HbqReportsManager:buildToolbar()
|
|
LOCAL qTBar
|
|
|
|
qTBar := HbqToolbar():new()
|
|
qTBar:orientation := Qt_Horizontal
|
|
qTBar:create( "ReportManager_Top_Toolbar" )
|
|
|
|
qTBar:addToolButton( "New" , "New Report" , app_image( "new" ), {|| ::execEvent( __buttonNew_clicked__ ) } )
|
|
qTBar:addToolButton( "Open" , "Open Report" , app_image( "open3" ), {|| ::execEvent( __buttonOpen_clicked__ ) } )
|
|
qTBar:addToolButton( "Save" , "Save Report" , app_image( "save3" ), {|| ::execEvent( __buttonSave_clicked__ ) } )
|
|
qTBar:addToolButton( "Close" , "Close Report" , app_image( "close3" ), {|| ::execEvent( __buttonClose_clicked__ ) } )
|
|
qTBar:addToolButton( "Print" , "Print Report" , app_image( "print" ), {|| ::execEvent( __buttonPrint_clicked__ ) } )
|
|
qTBar:addSeparator()
|
|
qTBar:addToolButton( "ToBack" , "Push to back" , app_image( "toback" ), {|| ::execEvent( __buttonToBack_clicked__ ) }, .f., .f. )
|
|
qTBar:addToolButton( "ToFront" , "Bring to front" , app_image( "tofront" ), {|| ::execEvent( __buttonToFront_clicked__ ) }, .f., .f. )
|
|
qTBar:addSeparator()
|
|
qTBar:addToolButton( "RotateL" , "Rotate anti-clock wise", app_image( "unload_1" ), {|| ::execEvent( __buttonRotateL_clicked__ ) }, .f., .f. )
|
|
qTBar:addToolButton( "RotateR" , "Rotate clock wise" , app_image( "load_1" ), {|| ::execEvent( __buttonRotateR_clicked__ ) }, .f., .f. )
|
|
qTBar:addSeparator()
|
|
qTBar:addToolButton( "Portrait" , "Portrait orientation" , app_image( "r-portrait" ), {|| ::execEvent( __buttonPortrait_clicked__ ) }, .f., .f. )
|
|
qTBar:addToolButton( "Landscape", "Landscape orientation" , app_image( "r-landscape" ), {|| ::execEvent( __buttonLandscape_clicked__ ) }, .f., .f. )
|
|
qTBar:addSeparator()
|
|
|
|
::qToolbar := qTBar
|
|
|
|
RETURN Self
|
|
|
|
/*----------------------------------------------------------------------*/
|
|
|
|
METHOD HbqReportsManager:buildToolbarAlign()
|
|
LOCAL qTBar
|
|
|
|
qTBar := HbqToolbar():new()
|
|
qTBar:orientation := Qt_Horizontal
|
|
qTBar:create( "ReportManager_Top_Toolbar_Align" )
|
|
|
|
qTBar:addToolButton( "FontG" , "Font" , app_image( "f-generic" ), {|| ::execEvent( __buttonFontG_clicked__ ) }, .f., .f. )
|
|
qTBar:addSeparator()
|
|
qTBar:addToolButton( "FontB" , "Text Bold" , app_image( "f-bold-1" ), {|| ::execEvent( __buttonFontB_clicked__ ) } )
|
|
qTBar:addToolButton( "FontI" , "Text Italic" , app_image( "f-italic-1" ), {|| ::execEvent( __buttonFontI_clicked__ ) } )
|
|
qTBar:addToolButton( "FontU" , "Text Underlined" , app_image( "f-underline-1" ), {|| ::execEvent( __buttonFontU_clicked__ ) } )
|
|
qTBar:addToolButton( "FontS" , "Text Strikethrough", app_image( "f-strike-1" ), {|| ::execEvent( __buttonFontS_clicked__ ) } )
|
|
qTBar:addSeparator()
|
|
qTBar:addToolButton( "JustL" , "Align left" , app_image( "f_align_left" ), {|| ::execEvent( __buttonJustL_clicked__ ) } )
|
|
qTBar:addToolButton( "JustC" , "Align center" , app_image( "f_align_center" ), {|| ::execEvent( __buttonJustC_clicked__ ) } )
|
|
qTBar:addToolButton( "JustR" , "Align right" , app_image( "f_align_right" ), {|| ::execEvent( __buttonJustR_clicked__ ) } )
|
|
qTBar:addToolButton( "JustJ" , "Align justify" , app_image( "f_align_justify" ), {|| ::execEvent( __buttonJustJ_clicked__ ) } )
|
|
qTBar:addSeparator()
|
|
qTBar:addToolButton( "JustT" , "Align top" , app_image( "f_align_top" ), {|| ::execEvent( __buttonJustT_clicked__ ) } )
|
|
qTBar:addToolButton( "JustM" , "Align middle" , app_image( "f_align_middle" ), {|| ::execEvent( __buttonJustM_clicked__ ) } )
|
|
qTBar:addToolButton( "JustB" , "Align bottom" , app_image( "f_align_bottom" ), {|| ::execEvent( __buttonJustB_clicked__ ) } )
|
|
qTBar:addSeparator()
|
|
qTBar:addToolButton( "BoxT" , "Box-frame top" , app_image( "f_box_top" ), {|| ::execEvent( __buttonBoxT_clicked__ ) }, .t., .f. )
|
|
qTBar:addToolButton( "BoxL" , "Box-frame left" , app_image( "f_box_left" ), {|| ::execEvent( __buttonBoxL_clicked__ ) }, .t., .f. )
|
|
qTBar:addToolButton( "BoxB" , "Box-frame bottom" , app_image( "f_box_bottom" ), {|| ::execEvent( __buttonBoxB_clicked__ ) }, .t., .f. )
|
|
qTBar:addToolButton( "BoxR" , "Box-frame right" , app_image( "f_box_right" ), {|| ::execEvent( __buttonBoxR_clicked__ ) }, .t., .f. )
|
|
qTBar:addSeparator()
|
|
qTBar:addToolButton( "BoxA" , "Box-frame all" , app_image( "f_box_all" ), {|| ::execEvent( __buttonBoxA_clicked__ ) } )
|
|
qTBar:addToolButton( "BoxP" , "No box-frame" , app_image( "f_box_plain" ), {|| ::execEvent( __buttonBoxP_clicked__ ) } )
|
|
qTBar:addToolButton( "BoxS" , "Box shadowed" , app_image( "f_box_shadow" ), {|| ::execEvent( __buttonBoxS_clicked__ ) } )
|
|
qTBar:addSeparator()
|
|
qTBar:addToolButton( "ZoomIn" , "Zoom In" , app_image( "zoomin3" ), {|| ::execEvent( __buttonZoom_clicked__, 1 ) } )
|
|
qTBar:addToolButton( "ZoomOut", "Zoom Out" , app_image( "zoomout3" ), {|| ::execEvent( __buttonZoom_clicked__, 2 ) } )
|
|
qTBar:addToolButton( "ZoomWYS", "Zoom WYSIWYG" , app_image( "zoomin" ), {|| ::execEvent( __buttonZoom_clicked__, 3 ) } )
|
|
qTBar:addToolButton( "ZoomOrg", "Zoom Original" , app_image( "zoomout" ), {|| ::execEvent( __buttonZoom_clicked__, 4 ) } )
|
|
qTBar:addSeparator()
|
|
qTBar:addToolButton( "Grid" , "Show Grid" , app_image( "grid" ), {|| ::execEvent( __buttonGrid_clicked__ ) }, .t., .f. )
|
|
qTBar:addSeparator()
|
|
|
|
::qToolbarAlign := qTBar
|
|
|
|
RETURN Self
|
|
|
|
/*----------------------------------------------------------------------*/
|
|
|
|
METHOD HbqReportsManager:buildToolbarLeft()
|
|
LOCAL qTBar
|
|
|
|
qTBar := HbqToolbar():new()
|
|
qTBar:orientation := Qt_Vertical
|
|
qTBar:create( "ReportManager_Left_Toolbar" )
|
|
|
|
qTBar:addToolButton( "Image" , "Image" , app_image( "f-image" ), {|| ::execEvent( __buttonNew_clicked__ ) }, .t., .t. )
|
|
qTBar:addToolButton( "Chart" , "Chart" , app_image( "f_chart" ), {|| ::execEvent( __buttonNew_clicked__ ) }, .t., .t. )
|
|
qTBar:addToolButton( "Gradient", "Gradient", app_image( "f_gradient" ), {|| ::execEvent( __buttonNew_clicked__ ) }, .t., .t. )
|
|
qTBar:addToolButton( "Barcode" , "Barcode" , app_image( "f_barcode" ), {|| ::execEvent( __buttonNew_clicked__ ) }, .t., .t. )
|
|
qTBar:addToolButton( "Text" , "Text" , app_image( "text" ), {|| ::execEvent( __buttonNew_clicked__ ) }, .t., .t. )
|
|
qTBar:addSeparator()
|
|
qTBar:addToolButton( "Shapes" , "Shapes" , app_image( "rp_shapes" ), {|| ::execEvent( __buttonShapes_clicked__ ) }, .t., .f. )
|
|
|
|
::qToolbarL := qTBar
|
|
|
|
RETURN Self
|
|
|
|
/*----------------------------------------------------------------------*/
|
|
|
|
METHOD HbqReportsManager:execMenuShapes()
|
|
LOCAL qPos, qBtn
|
|
|
|
IF empty( ::qShapesMenu )
|
|
::qShapesMenu := QMenu()
|
|
|
|
::aShapesAct[ SHP_ACT_RECTANGLE ] := ::qShapesMenu:addAction( QIcon( app_image( "rp_rectangle" ) ), "Rectangle" )
|
|
::aShapesAct[ SHP_ACT_ROUNDRECT ] := ::qShapesMenu:addAction( QIcon( app_image( "rp_roundrectangle") ), "Rounded Rectangle" )
|
|
::aShapesAct[ SHP_ACT_ELLIPSE ] := ::qShapesMenu:addAction( QIcon( app_image( "rp_ellipse" ) ), "Ellipse" )
|
|
::aShapesAct[ SHP_ACT_LINEHORZ ] := ::qShapesMenu:addAction( QIcon( app_image( "rp_linehorz" ) ), "Horizontal Line" )
|
|
::aShapesAct[ SHP_ACT_LINEVERT ] := ::qShapesMenu:addAction( QIcon( app_image( "rp_linevert" ) ), "Vertical Line" )
|
|
::aShapesAct[ SHP_ACT_LINEDIAGRIGHT ] := ::qShapesMenu:addAction( QIcon( app_image( "rp_linediagright" ) ), "Diagonal Line Right" )
|
|
::aShapesAct[ SHP_ACT_LINEDIAGLEFT ] := ::qShapesMenu:addAction( QIcon( app_image( "rp_linediagleft" ) ), "Diagonal Line Left" )
|
|
::aShapesAct[ SHP_ACT_ARC ] := ::qShapesMenu:addAction( QIcon( app_image( "rp_arc" ) ), "Arc" )
|
|
::aShapesAct[ SHP_ACT_CHORD ] := ::qShapesMenu:addAction( QIcon( app_image( "rp_chord" ) ), "Chord" )
|
|
::aShapesAct[ SHP_ACT_DIAMOND ] := ::qShapesMenu:addAction( QIcon( app_image( "rp_diamond" ) ), "Diamond" )
|
|
::aShapesAct[ SHP_ACT_TRIANGLE ] := ::qShapesMenu:addAction( QIcon( app_image( "rp_triangle" ) ), "Triangle" )
|
|
|
|
::qShapesMenu:connect( QEvent_MouseButtonPress , {|p| ::execEvent( __QEvent_MousePressMenu__ , p ) } )
|
|
::qShapesMenu:connect( QEvent_MouseMove , {|p| ::execEvent( __QEvent_MouseMoveMenu__ , p ) } )
|
|
::qShapesMenu:connect( QEvent_MouseButtonRelease, {|p| ::execEvent( __QEvent_MouseReleaseMenu__, p ) } )
|
|
ENDIF
|
|
|
|
qBtn := ::qToolbarL:getItem( "Shapes" )
|
|
//
|
|
qPos := ::qToolbarL:mapToGlobal( qBtn:pos() )
|
|
qPos:setX( qPos:x() + qBtn:width() / 2 )
|
|
qPos:setY( qPos:y() + qBtn:height() / 2 )
|
|
|
|
::qShapesMenu:exec( qPos )
|
|
|
|
qBtn:setChecked( .f. )
|
|
RETURN Self
|
|
|
|
/*----------------------------------------------------------------------*/
|
|
|
|
STATIC FUNCTION rmgr_xtos( x )
|
|
SWITCH valtype( x )
|
|
CASE "C" ; RETURN x
|
|
CASE "D" ; RETURN dtos( x )
|
|
CASE "L" ; RETURN iif( x, "YES", "NO" )
|
|
CASE "N" ; RETURN hb_ntos( x )
|
|
ENDSWITCH
|
|
RETURN ""
|
|
|
|
STATIC FUNCTION rmgr_array2String( aArray )
|
|
LOCAL a_, s, x
|
|
|
|
s := ""
|
|
FOR EACH a_ IN aArray
|
|
FOR EACH x IN a_
|
|
s += rmgr_xtos( x ) + " "
|
|
NEXT
|
|
s := trim( s ) + ","
|
|
NEXT
|
|
|
|
RETURN s
|
|
|
|
STATIC FUNCTION rmgr_a2arrayStr( aArray )
|
|
LOCAL s, x
|
|
|
|
s := "{"
|
|
FOR EACH x IN aArray
|
|
SWITCH valtype( x )
|
|
CASE "C"
|
|
s += '"' + x + '"' ; EXIT
|
|
CASE "N"
|
|
s += hb_ntos( x ) ; EXIT
|
|
CASE "D"
|
|
s += "stod(" + dtos( x ) + ")" ; EXIT
|
|
CASE "L"
|
|
s += iif( x, ".t.", ".f." ) ; EXIT
|
|
CASE "A"
|
|
s += rmgr_a2arrayStr( x ) ; EXIT
|
|
OTHERWISE
|
|
s += "NIL" ; EXIT
|
|
ENDSWITCH
|
|
s += ","
|
|
NEXT
|
|
s := iif( Len( s ) == 1, s, substr( s, 1, len( s ) - 1 ) ) + "}"
|
|
|
|
RETURN s
|
|
|
|
/*----------------------------------------------------------------------*/
|
|
|
|
STATIC FUNCTION rmgr_generateNextColor()
|
|
RETURN QColor( hb_random( 0,255 ), hb_random( 0,255 ), hb_random( 0,255 ), 255 )
|
|
|
|
/*----------------------------------------------------------------------*/
|
|
|
|
STATIC FUNCTION rmgr_keyValuePair( s, cKey, cVal, cDlm )
|
|
LOCAL n
|
|
|
|
DEFAULT cDlm TO "="
|
|
|
|
IF ( n := at( cDlm, s ) ) > 0
|
|
cKey := alltrim( substr( s, 1, n - 1 ) )
|
|
cVal := alltrim( substr( s, n + 1 ) )
|
|
RETURN .t.
|
|
ENDIF
|
|
RETURN .f.
|
|
|
|
/*----------------------------------------------------------------------*/
|
|
|
|
STATIC FUNCTION rmgr_evalAsArray( cStr )
|
|
LOCAL a_, bErr := ErrorBlock( {|| break() } )
|
|
|
|
BEGIN SEQUENCE
|
|
a_:= Eval( hb_macroBlock( cStr ) )
|
|
RECOVER
|
|
a_:= {}
|
|
ENDSEQUENCE
|
|
|
|
ErrorBlock( bErr )
|
|
RETURN a_
|
|
|
|
/*----------------------------------------------------------------------*/
|
|
/* */
|
|
/* NOTE: the code below is works of someone else I do not remmeber */
|
|
/* the name. Please let me know who that is so due credits be */
|
|
/* given to him. I had downloaded this code many years back */
|
|
/* and adopted to Vouch32 library and Vouch32 Active-X Server. */
|
|
|
|
STATIC FUNCTION fetchBarString( cCode, lCheck, nType )
|
|
STATIC cCars := '1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ-. *$/+%'
|
|
STATIC aBarras := { '1110100010101110',; // 1
|
|
'1011100010101110',; // 2
|
|
'1110111000101010',; // 3
|
|
'1010001110101110',; // 4
|
|
'1110100011101010',; // 5
|
|
'1011100011101010',; // 6
|
|
'1010001011101110',; // 7
|
|
'1110100010111010',; // 8
|
|
'1011100010111010',; // 9
|
|
'1010001110111010',; // 0
|
|
'1110101000101110',; // A
|
|
'1011101000101110',; // B
|
|
'1110111010001010',; // C
|
|
'1010111000101110',; // D
|
|
'1110101110001010',; // E
|
|
'1011101110001010',;
|
|
'1010100011101110',;
|
|
'1110101000111010',;
|
|
'1011101000111010',;
|
|
'1010111000111010',;
|
|
'1110101010001110',; // K
|
|
'1011101010001110',;
|
|
'1110111010100010',;
|
|
'1010111010001110',;
|
|
'1110101110100010',;
|
|
'1011101110100010',; // p
|
|
'1010101110001110',;
|
|
'1110101011100010',;
|
|
'1011101011100010',;
|
|
'1010111011100010',;
|
|
'1110001010101110',;
|
|
'1000111010101110',;
|
|
'1110001110101010',;
|
|
'1000101110101110',;
|
|
'1110001011101010',;
|
|
'1000111011101010',; // Z
|
|
'1000101011101110',; // -
|
|
'1110001010111010',; // .
|
|
'1000111010111010',; // ' '
|
|
'1000101110111010',; // *
|
|
'1000100010100010',;
|
|
'1000100010100010',;
|
|
'1000101000100010',;
|
|
'1010001000100010' }
|
|
|
|
LOCAL cCar, m, n, cBarra := '', nCheck := 0
|
|
|
|
DEFAULT lCheck TO .f.
|
|
DEFAULT nType TO HQR_BARCODE_3OF9
|
|
|
|
DO CASE
|
|
CASE nType == HQR_BARCODE_3OF9
|
|
cCode := upper( cCode )
|
|
IF Len( cCode ) > 32
|
|
cCode := left( cCode,32 )
|
|
ENDIF
|
|
|
|
cCode := '*' + cCode + '*'
|
|
FOR n := 1 TO Len( cCode )
|
|
cCar := substr( cCode,n,1 )
|
|
m := at( cCar, cCars )
|
|
IF m > 0
|
|
cBarra := cBarra + aBarras[ m ]
|
|
nCheck += ( m-1 )
|
|
ENDIF
|
|
NEXT
|
|
|
|
IF lCheck
|
|
cBarra += aBarras[ nCheck % 43 + 1 ]
|
|
ENDIF
|
|
ENDCASE
|
|
|
|
RETURN cBarra
|
|
|
|
/*----------------------------------------------------------------------*/
|
|
|
|
METHOD HbqReportsManager:printPreview( qPrinter )
|
|
LOCAL qDlg //, qInfo //, qList, i, qStr
|
|
|
|
qPrinter := QPrinter()
|
|
|
|
#if 0
|
|
qInfo := QPrinterInfo( qPrinter )
|
|
qList := qInfo:availablePrinters()
|
|
FOR i := 0 TO qList:size() - 1
|
|
qStr := qList:at( i )
|
|
NEXT
|
|
#endif
|
|
qPrinter:setOutputFormat( QPrinter_PdfFormat )
|
|
qPrinter:setOrientation( ::qScene:orientation() )
|
|
qPrinter:setPaperSize( ::qScene:pageSize() )
|
|
// qPrinter:setFullPage( .t. )
|
|
|
|
qDlg := QPrintPreviewDialog( qPrinter, ::qView )
|
|
qDlg:connect( "paintRequested(QPrinter*)", {|p| ::paintRequested( p ) } )
|
|
|
|
qDlg:setWindowTitle( "HBReportGenerator : " + iif( !empty( ::cSaved ), ::cSaved, "Untitled" ) )
|
|
qDlg:move( 20, 20 )
|
|
qDlg:resize( 400, 600 )
|
|
qDlg:exec()
|
|
qDlg:disconnect( "paintRequested(QPrinter*)" )
|
|
|
|
RETURN NIL //qStr
|
|
|
|
/*----------------------------------------------------------------------*/
|
|
|
|
METHOD HbqReportsManager:paintRequested( qPrinter )
|
|
::printReport( qPrinter )
|
|
RETURN Self
|
|
|
|
/*----------------------------------------------------------------------*/
|
|
|
|
METHOD HbqReportsManager:printReport( qPrinter )
|
|
LOCAL qPainter, a_, qRectF, oHqrObject, qT
|
|
|
|
qPainter := QPainter()
|
|
qPainter:begin( qPrinter )
|
|
|
|
qPainter:setWindow( ::qScene:paperRect() )
|
|
qPainter:setViewPort( 0, 0, qPrinter:width(), qPrinter:height() )
|
|
FOR EACH a_ IN ::aObjects
|
|
IF hb_hHasKey( ::hItems, a_[ 3 ] )
|
|
oHqrObject := ::hItems[ a_[ 3 ] ]
|
|
qRectF := oHqrObject:geometry()
|
|
qRectF := QRectF( TO_MMS( qRectF:x() ), TO_MMS( qRectF:y() ), TO_MMS( qRectF:width() ), TO_MMS( qRectF:height() ) )
|
|
|
|
qT := oHqrObject:transform()
|
|
//HB_TRACE( HB_TR_DEBUG, qT:m11(), qT:m12(), qT:m13(), qT:m21(), qT:m22(), qT:m23(), qT:m31(), qT:m32(), qT:m33() )
|
|
qT:translate( 0,0 )
|
|
qPainter:resetMatrix()
|
|
qPainter:setWorldTransform( qT )
|
|
|
|
oHqrObject:draw( qPainter, qRectF, .f. )
|
|
ENDIF
|
|
NEXT
|
|
qPainter:end()
|
|
|
|
RETURN Self
|
|
|
|
/*----------------------------------------------------------------------*/
|
|
// HqrGraphicsItem() Class
|
|
/*----------------------------------------------------------------------*/
|
|
|
|
CLASS HqrGraphicsItem
|
|
|
|
DATA oRM
|
|
DATA oWidget
|
|
DATA cParent
|
|
|
|
/* Constructor data */
|
|
DATA cType INIT ""
|
|
DATA cName INIT ""
|
|
|
|
DATA nX INIT 0
|
|
DATA nY INIT 0
|
|
DATA aPos INIT {}
|
|
DATA aGeometry INIT {}
|
|
|
|
/* Runtime data */
|
|
DATA cText INIT ""
|
|
DATA qPen
|
|
DATA qBrush
|
|
DATA qGBrush
|
|
DATA qBgBrush
|
|
DATA qPixmap
|
|
DATA qFont
|
|
DATA xData
|
|
DATA qGeometry
|
|
|
|
DATA nBarcodeType INIT HQR_BARCODE_3OF9
|
|
DATA nTextFlags INIT Qt_AlignCenter
|
|
DATA nBorderWidth INIT 0
|
|
DATA nLineStyle INIT HBQT_GRAPHICSITEM_LINE_HORIZONTAL
|
|
DATA nBackgroundMode INIT Qt_TransparentMode
|
|
DATA nOpacity INIT 100
|
|
DATA nWidth INIT 200
|
|
DATA nHeight INIT 100
|
|
DATA nStartAngle INIT 30
|
|
DATA nSpanAngle INIT 120
|
|
DATA nLineType INIT HBQT_GRAPHICSITEM_LINE_HORIZONTAL
|
|
|
|
DATA nPointSize INIT 3.5
|
|
|
|
METHOD new( oRM, cParent, cType, cName, aPos, aGeometry )
|
|
METHOD execEvent( cEvent, p, p1, p2 )
|
|
METHOD contextMenu( p1, p2 )
|
|
METHOD update()
|
|
|
|
ACCESS text() INLINE ::setText()
|
|
ACCESS textFlags() INLINE ::setTextFlags()
|
|
ACCESS pen() INLINE ::setPen()
|
|
ACCESS brush() INLINE ::setBrush()
|
|
ACCESS backgroundBrush() INLINE ::setBackgroundBrush()
|
|
ACCESS font() INLINE ::setFont()
|
|
ACCESS barcodeType() INLINE ::setBarcodeType()
|
|
ACCESS gradient() INLINE ::setBrush()
|
|
ACCESS pixmap() INLINE ::setPixmap()
|
|
ACCESS borderWidth() INLINE ::setBorderWidth()
|
|
ACCESS lineStyle() INLINE ::setLineStyle()
|
|
ACCESS backgroundMode() INLINE ::setBackgroundMode()
|
|
ACCESS opacity() INLINE ::setOpacity()
|
|
ACCESS width() INLINE ::setWidth()
|
|
ACCESS height() INLINE ::setHeight()
|
|
ACCESS geometry() INLINE ::setGeometry()
|
|
ACCESS pos() INLINE ::setPos()
|
|
ACCESS lineType() INLINE ::setLineType()
|
|
|
|
METHOD setText( ... ) SETGET
|
|
METHOD setPen( ... ) SETGET
|
|
METHOD setBrush( ... ) SETGET
|
|
METHOD setBackgroundBrush( ... ) SETGET
|
|
METHOD setFont( ... ) SETGET
|
|
METHOD setGradient( ... ) SETGET
|
|
METHOD setPixmap( ... ) SETGET
|
|
METHOD setTextFlags( ... ) SETGET
|
|
METHOD setBarcodeType( ... ) SETGET
|
|
METHOD setBorderWidth( ... ) SETGET
|
|
METHOD setLineStyle( ... ) SETGET
|
|
METHOD setBackgroundMode( ... ) SETGET
|
|
METHOD setOpacity( ... ) SETGET
|
|
METHOD setWidth( ... ) SETGET
|
|
METHOD setHeight( ... ) SETGET
|
|
METHOD setGeometry( ... ) SETGET
|
|
METHOD setPos( ... ) SETGET
|
|
METHOD setLineType( ... ) SETGET
|
|
|
|
METHOD draw( qPainter, qRectF, lDrawSelection )
|
|
METHOD setupPainter( qPainter, lDrawSelection )
|
|
METHOD drawBarcode( qPainter, qRectF )
|
|
METHOD drawImage( qPainter, qRectF )
|
|
METHOD drawChart( qPainter, qRect )
|
|
METHOD drawText( qPainter, qRectF )
|
|
METHOD drawField( qPainter, qRectF )
|
|
METHOD drawGradient( qPainter, qRectF )
|
|
METHOD drawLine( qPainter, qRect )
|
|
METHOD drawRect( qPainter, qRectF )
|
|
METHOD drawRoundRect( qPainter, qRectF )
|
|
METHOD drawEllipse( qPainter, qRectF )
|
|
METHOD drawPie( qPainter, qRectF )
|
|
METHOD drawArc( qPainter, qRectF )
|
|
METHOD drawChord( qPainter, qRectF )
|
|
METHOD drawDiamond( qPainter, qRectF )
|
|
METHOD drawTriangle( qPainter, qRectF )
|
|
METHOD drawSelection( qPainter, qRect )
|
|
|
|
ERROR HANDLER OnError( ... )
|
|
ENDCLASS
|
|
|
|
/*----------------------------------------------------------------------*/
|
|
|
|
METHOD HqrGraphicsItem:new( oRM, cParent, cType, cName, aPos, aGeometry )
|
|
|
|
HB_TRACE( HB_TR_DEBUG, "HqrGraphicsItem:new" )
|
|
|
|
::oRM := oRM
|
|
::cParent := cParent
|
|
::cType := cType
|
|
::cName := cName
|
|
::aPos := aPos
|
|
::aGeometry := aGeometry
|
|
|
|
SWITCH cType
|
|
CASE "Image"
|
|
::nWidth := 300 ; ::nHeight := 300
|
|
::oWidget := HBQGraphicsItem( HBQT_GRAPHICSITEM_PICTURE )
|
|
EXIT
|
|
CASE "Chart"
|
|
::nWidth := 400 ; ::nHeight := 250
|
|
::oWidget := HBQGraphicsItem( HBQT_GRAPHICSITEM_CHART )
|
|
EXIT
|
|
CASE "Gradient"
|
|
::nWidth := 300 ; ::nHeight := 50
|
|
::oWidget := HBQGraphicsItem( HBQT_GRAPHICSITEM_RECT )
|
|
EXIT
|
|
CASE "Barcode"
|
|
::nWidth := 300 ; ::nHeight := 200
|
|
::oWidget := HBQGraphicsItem( HBQT_GRAPHICSITEM_BARCODE )
|
|
EXIT
|
|
CASE "Text"
|
|
::nWidth := 300 ; ::nHeight := 50
|
|
::oWidget := HBQGraphicsItem( HBQT_GRAPHICSITEM_SIMPLETEXT )//, ::oRM:qScene )
|
|
EXIT
|
|
CASE "Field"
|
|
::nWidth := 300 ; ::nHeight := 50
|
|
::oWidget := HBQGraphicsItem( HBQT_GRAPHICSITEM_SIMPLETEXT )
|
|
EXIT
|
|
//
|
|
CASE "Rectangle"
|
|
::nWidth := 300 ; ::nHeight := 300
|
|
::oWidget := HBQGraphicsItem( HBQT_GRAPHICSITEM_RECT )
|
|
EXIT
|
|
CASE "RoundRect"
|
|
::nWidth := 300 ; ::nHeight := 300
|
|
::oWidget := HBQGraphicsItem( HBQT_GRAPHICSITEM_ROUNDRECT )
|
|
EXIT
|
|
CASE "Ellipse"
|
|
::nWidth := 300 ; ::nHeight := 300
|
|
::oWidget := HBQGraphicsItem( HBQT_GRAPHICSITEM_ELLIPSE )
|
|
EXIT
|
|
CASE "Arc"
|
|
::nWidth := 300 ; ::nHeight := 300
|
|
::oWidget := HBQGraphicsItem( HBQT_GRAPHICSITEM_ARC )
|
|
EXIT
|
|
CASE "Chord"
|
|
::nWidth := 300 ; ::nHeight := 300
|
|
::oWidget := HBQGraphicsItem( HBQT_GRAPHICSITEM_CHORD )
|
|
EXIT
|
|
CASE "LineH"
|
|
::nWidth := 300 ; ::nHeight := 50
|
|
::oWidget := HBQGraphicsItem( HBQT_GRAPHICSITEM_LINE )
|
|
::nLineType := HBQT_GRAPHICSITEM_LINE_HORIZONTAL
|
|
EXIT
|
|
CASE "LineV"
|
|
::nWidth := 50 ; ::nHeight := 300
|
|
::oWidget := HBQGraphicsItem( HBQT_GRAPHICSITEM_LINE )
|
|
::nLineType := HBQT_GRAPHICSITEM_LINE_VERTICAL
|
|
EXIT
|
|
CASE "LineDR"
|
|
::nWidth := 300 ; ::nHeight := 300
|
|
::oWidget := HBQGraphicsItem( HBQT_GRAPHICSITEM_LINE )
|
|
::nLineType := HBQT_GRAPHICSITEM_LINE_BACKWARDDIAGONAL
|
|
EXIT
|
|
CASE "LineDL"
|
|
::nWidth := 300 ; ::nHeight := 300
|
|
::oWidget := HBQGraphicsItem( HBQT_GRAPHICSITEM_LINE )
|
|
::nLineType := HBQT_GRAPHICSITEM_LINE_FORWARDDIAGONAL
|
|
EXIT
|
|
CASE "Diamond"
|
|
::nWidth := 300 ; ::nHeight := 300
|
|
::oWidget := HBQGraphicsItem( HBQT_GRAPHICSITEM_ROUNDRECT )
|
|
EXIT
|
|
CASE "Triangle"
|
|
::nWidth := 300 ; ::nHeight := 300
|
|
::oWidget := HBQGraphicsItem( HBQT_GRAPHICSITEM_ROUNDRECT )
|
|
EXIT
|
|
ENDSWITCH
|
|
|
|
::oWidget:setObjectType( cType )
|
|
::oWidget:setObjectName( cName )
|
|
::oWidget:setTooltip( cName )
|
|
|
|
::oWidget:hbSetBlock( {|p,p1,p2| ::execEvent( "graphicsItem_block", p, p1, p2 ) } )
|
|
|
|
::oRM:qScene:addItem( ::oWidget )
|
|
|
|
DEFAULT ::aGeometry TO { 0, 0, ::nWidth, ::nHeight }
|
|
::setGeometry( ::aGeometry[ 1 ], ::aGeometry[ 2 ], ::aGeometry[ 3 ], ::aGeometry[ 4 ] )
|
|
IF !empty( ::aPos )
|
|
::setPos( ::aPos[ 1 ], ::aPos[ 2 ] )
|
|
ENDIF
|
|
|
|
RETURN Self
|
|
|
|
/*----------------------------------------------------------------------*/
|
|
|
|
METHOD HqrGraphicsItem:onError( ... )
|
|
LOCAL cMsg := __GetMessage()
|
|
IF SubStr( cMsg, 1, 1 ) == "_"
|
|
cMsg := SubStr( cMsg, 2 )
|
|
ENDIF
|
|
RETURN ::oWidget:&cMsg( ... )
|
|
|
|
/*----------------------------------------------------------------------*/
|
|
|
|
METHOD HqrGraphicsItem:execEvent( cEvent, p, p1, p2 )
|
|
|
|
HB_TRACE( HB_TR_DEBUG, "HqrGraphicsItem:execEvent", P, P1, P2 )
|
|
|
|
DO CASE
|
|
CASE cEvent == "graphicsItem_block"
|
|
DO CASE
|
|
CASE p == 21101
|
|
::oRM:objectSelected( Self )
|
|
|
|
CASE p == 21017
|
|
::draw( p1, p2 )
|
|
|
|
CASE p == QEvent_GraphicsSceneContextMenu
|
|
::contextMenu( p1, p2 )
|
|
|
|
ENDCASE
|
|
ENDCASE
|
|
|
|
RETURN Self
|
|
|
|
/*----------------------------------------------------------------------*/
|
|
|
|
METHOD HqrGraphicsItem:contextMenu( p1, p2 )
|
|
LOCAL qMenu, qAct
|
|
|
|
HB_SYMBOL_UNUSED( p2 )
|
|
|
|
qMenu := QMenu()
|
|
qMenu:addAction( "Cut" )
|
|
qMenu:addAction( "Copy" )
|
|
|
|
IF ! empty( qAct := qMenu:exec( p1:screenPos() ) )
|
|
SWITCH qAct:text()
|
|
CASE "Cut"
|
|
EXIT
|
|
CASE "Copy"
|
|
EXIT
|
|
ENDSWITCH
|
|
ENDIF
|
|
RETURN NIL
|
|
|
|
/*----------------------------------------------------------------------*/
|
|
|
|
METHOD HqrGraphicsItem:update()
|
|
::oWidget:update()
|
|
RETURN Self
|
|
|
|
/*----------------------------------------------------------------------*/
|
|
|
|
METHOD HqrGraphicsItem:setText( ... )
|
|
LOCAL a_:= hb_aParams()
|
|
IF empty( a_ )
|
|
RETURN ::cText
|
|
ENDIF
|
|
IF HB_ISSTRING( a_[ 1 ] )
|
|
::cText := a_[ 1 ]
|
|
::update()
|
|
ENDIF
|
|
RETURN ::cText
|
|
|
|
/*----------------------------------------------------------------------*/
|
|
|
|
METHOD HqrGraphicsItem:setTextFlags( ... )
|
|
LOCAL a_:= hb_aParams()
|
|
SWITCH Len( a_ )
|
|
CASE 0
|
|
EXIT
|
|
OTHERWISE
|
|
IF HB_ISNUMERIC( a_[ 1 ] )
|
|
::nTextFlags := a_[ 1 ]
|
|
ENDIF
|
|
::update()
|
|
EXIT
|
|
ENDSWITCH
|
|
RETURN ::nTextFlags
|
|
|
|
/*----------------------------------------------------------------------*/
|
|
|
|
METHOD HqrGraphicsItem:setPen( ... )
|
|
LOCAL a_:= hb_aParams()
|
|
SWITCH Len( a_ )
|
|
CASE 0
|
|
IF empty( ::qPen )
|
|
::qPen := QPen( Qt_black )
|
|
::qPen:setStyle( Qt_SolidLine )
|
|
ENDIF
|
|
RETURN ::qPen
|
|
OTHERWISE
|
|
IF HB_ISOBJECT( a_[ 1 ] )
|
|
::qPen := a_[ 1 ]
|
|
ELSE
|
|
::qPen := QPen( ... )
|
|
ENDIF
|
|
::update()
|
|
ENDSWITCH
|
|
RETURN ::qPen
|
|
|
|
/*----------------------------------------------------------------------*/
|
|
|
|
METHOD HqrGraphicsItem:setBrush( ... )
|
|
LOCAL a_:= hb_aParams()
|
|
SWITCH Len( a_ )
|
|
CASE 0
|
|
IF empty( ::qBrush )
|
|
::qBrush := QBrush()
|
|
ENDIF
|
|
EXIT
|
|
OTHERWISE
|
|
IF HB_ISOBJECT( a_[ 1 ] )
|
|
::qBrush := a_[ 1 ]
|
|
ELSE
|
|
::qBrush := QBrush( ... )
|
|
ENDIF
|
|
::update()
|
|
EXIT
|
|
ENDSWITCH
|
|
RETURN ::qBrush
|
|
|
|
/*----------------------------------------------------------------------*/
|
|
|
|
METHOD HqrGraphicsItem:setBackgroundBrush( ... )
|
|
LOCAL a_:= hb_aParams()
|
|
SWITCH Len( a_ )
|
|
CASE 0
|
|
IF empty( ::qBgBrush )
|
|
::qBgBrush := QBrush()
|
|
ENDIF
|
|
EXIT
|
|
OTHERWISE
|
|
IF HB_ISOBJECT( a_[ 1 ] )
|
|
::qBgBrush := a_[ 1 ]
|
|
ELSE
|
|
::qBgBrush := QBrush( ... )
|
|
ENDIF
|
|
::update()
|
|
EXIT
|
|
ENDSWITCH
|
|
RETURN ::qBgBrush
|
|
|
|
/*----------------------------------------------------------------------*/
|
|
|
|
METHOD HqrGraphicsItem:setFont( ... )
|
|
LOCAL a_:= hb_aParams()
|
|
SWITCH Len( a_ )
|
|
CASE 0
|
|
IF empty( ::qFont )
|
|
::qFont := QFont( "Serif" )
|
|
::qFont:setPointSizeF( ::nPointSize )
|
|
::qFont:setStyleStrategy( QFont_PreferMatch )
|
|
::qFont:setStyleStrategy( QFont_ForceOutline )
|
|
ENDIF
|
|
EXIT
|
|
OTHERWISE
|
|
IF HB_ISOBJECT( a_[ 1 ] )
|
|
::qFont := a_[ 1 ]
|
|
ELSE
|
|
::qFont := QFont( ... )
|
|
ENDIF
|
|
::nPointSize := ::qFont:pointSize()
|
|
::update()
|
|
EXIT
|
|
ENDSWITCH
|
|
RETURN ::qFont
|
|
|
|
/*----------------------------------------------------------------------*/
|
|
|
|
METHOD HqrGraphicsItem:setBarcodeType( ... )
|
|
LOCAL a_:= hb_aParams()
|
|
SWITCH Len( a_ )
|
|
CASE 0
|
|
EXIT
|
|
OTHERWISE
|
|
IF HB_ISNUMERIC( a_[ 1 ] )
|
|
::nBarcodeType := a_[ 1 ]
|
|
ENDIF
|
|
::update()
|
|
EXIT
|
|
ENDSWITCH
|
|
RETURN ::nBarcodeType
|
|
|
|
/*----------------------------------------------------------------------*/
|
|
|
|
METHOD HqrGraphicsItem:setGradient( ... )
|
|
LOCAL a_:= hb_aParams()
|
|
SWITCH Len( a_ )
|
|
CASE 0
|
|
IF empty( ::qGBrush )
|
|
::qGBrush := QBrush()
|
|
ENDIF
|
|
EXIT
|
|
OTHERWISE
|
|
IF HB_ISOBJECT( a_[ 1 ] )
|
|
::qGBrush := a_[ 1 ]
|
|
ELSE
|
|
::qGBrush := QBrush( ... )
|
|
ENDIF
|
|
::update()
|
|
EXIT
|
|
ENDSWITCH
|
|
RETURN ::qGBrush
|
|
|
|
/*----------------------------------------------------------------------*/
|
|
|
|
METHOD HqrGraphicsItem:setPixmap( ... )
|
|
LOCAL a_:= hb_aParams()
|
|
SWITCH Len( a_ )
|
|
CASE 0
|
|
IF empty( ::qPixmap )
|
|
::qPixmap := QPixmap()
|
|
ENDIF
|
|
EXIT
|
|
OTHERWISE
|
|
IF HB_ISOBJECT( a_[ 1 ] )
|
|
::qPixmap := a_[ 1 ]
|
|
ELSE
|
|
::qPixmap := QPixmap( ... )
|
|
ENDIF
|
|
::update()
|
|
EXIT
|
|
ENDSWITCH
|
|
RETURN ::qPixmap
|
|
|
|
/*----------------------------------------------------------------------*/
|
|
|
|
METHOD HqrGraphicsItem:setBorderWidth( ... )
|
|
LOCAL a_:= hb_aParams()
|
|
SWITCH Len( a_ )
|
|
CASE 0
|
|
EXIT
|
|
OTHERWISE
|
|
IF HB_ISNUMERIC( a_[ 1 ] )
|
|
::nBorderWidth := a_[ 1 ]
|
|
ENDIF
|
|
::update()
|
|
EXIT
|
|
ENDSWITCH
|
|
RETURN ::nBorderWidth
|
|
|
|
/*----------------------------------------------------------------------*/
|
|
|
|
METHOD HqrGraphicsItem:setWidth( ... )
|
|
LOCAL a_:= hb_aParams()
|
|
SWITCH Len( a_ )
|
|
CASE 0
|
|
RETURN ::oWidget:width()
|
|
OTHERWISE
|
|
IF HB_ISNUMERIC( a_[ 1 ] )
|
|
::nWidth := a_[ 1 ]
|
|
::oWidget:setWidth( ::nWidth )
|
|
ENDIF
|
|
::update()
|
|
EXIT
|
|
ENDSWITCH
|
|
RETURN ::nBorderWidth
|
|
|
|
/*----------------------------------------------------------------------*/
|
|
|
|
METHOD HqrGraphicsItem:setHeight( ... )
|
|
LOCAL a_:= hb_aParams()
|
|
SWITCH Len( a_ )
|
|
CASE 0
|
|
RETURN ::oWidget:height()
|
|
OTHERWISE
|
|
IF HB_ISNUMERIC( a_[ 1 ] )
|
|
::nHeight := a_[ 1 ]
|
|
::oWidget:setHeight( ::nHeight )
|
|
ENDIF
|
|
::update()
|
|
EXIT
|
|
ENDSWITCH
|
|
RETURN ::nBorderWidth
|
|
|
|
/*----------------------------------------------------------------------*/
|
|
|
|
METHOD HqrGraphicsItem:setGeometry( ... )
|
|
LOCAL qRectF, qPos, a_:= hb_aParams()
|
|
SWITCH Len( a_ )
|
|
CASE 0
|
|
qPos := ::oWidget:pos()
|
|
RETURN QRectF( qPos:x(), qPos:y(), ::width(), ::height() )
|
|
CASE 1
|
|
IF HB_ISOBJECT( a_[ 1 ] )
|
|
qRectF := a_[ 1 ]
|
|
::oWidget:setPos( QPointF( qRectF:x(), qRectF:y() ) )
|
|
::oWidget:setWidth( qRectF:width() )
|
|
::oWidget:setHeight( qRectF:height() )
|
|
::update()
|
|
ENDIF
|
|
EXIT
|
|
CASE 4
|
|
::oWidget:setPos( QPointF( a_[ 1 ], a_[ 2 ] ) )
|
|
::oWidget:setWidth( a_[ 3 ] )
|
|
::oWidget:setHeight( a_[ 4 ] )
|
|
::update()
|
|
EXIT
|
|
ENDSWITCH
|
|
RETURN QRectF( 0, 0, ::nWidth, ::nHeight )
|
|
|
|
/*----------------------------------------------------------------------*/
|
|
|
|
METHOD HqrGraphicsItem:setPos( ... )
|
|
LOCAL a_:= hb_aParams()
|
|
SWITCH Len( a_ )
|
|
CASE 0
|
|
RETURN ::oWidget:pos()
|
|
CASE 1
|
|
IF HB_ISOBJECT( a_[ 1 ] )
|
|
::oWidget:setPos( a_[ 1 ] )
|
|
::update()
|
|
ENDIF
|
|
EXIT
|
|
CASE 2
|
|
::oWidget:setPos( QPointF( a_[ 1 ], a_[ 2 ] ) )
|
|
::update()
|
|
EXIT
|
|
ENDSWITCH
|
|
RETURN ::oWidget:pos()
|
|
|
|
/*----------------------------------------------------------------------*/
|
|
|
|
METHOD HqrGraphicsItem:setLineStyle( ... )
|
|
LOCAL a_:= hb_aParams()
|
|
SWITCH Len( a_ )
|
|
CASE 0
|
|
EXIT
|
|
OTHERWISE
|
|
IF HB_ISNUMERIC( a_[ 1 ] )
|
|
::nLineStyle := a_[ 1 ]
|
|
ENDIF
|
|
::update()
|
|
EXIT
|
|
ENDSWITCH
|
|
RETURN ::nLineStyle
|
|
|
|
/*----------------------------------------------------------------------*/
|
|
|
|
METHOD HqrGraphicsItem:setBackgroundMode( ... )
|
|
LOCAL a_:= hb_aParams()
|
|
SWITCH Len( a_ )
|
|
CASE 0
|
|
EXIT
|
|
OTHERWISE
|
|
IF HB_ISNUMERIC( a_[ 1 ] )
|
|
::nBackgroundMode := a_[ 1 ]
|
|
ENDIF
|
|
::update()
|
|
EXIT
|
|
ENDSWITCH
|
|
RETURN ::nBackgroundMode
|
|
|
|
/*----------------------------------------------------------------------*/
|
|
|
|
METHOD HqrGraphicsItem:setOpacity( ... )
|
|
LOCAL a_:= hb_aParams()
|
|
SWITCH Len( a_ )
|
|
CASE 0
|
|
EXIT
|
|
OTHERWISE
|
|
IF HB_ISNUMERIC( a_[ 1 ] )
|
|
::nOpacity := a_[ 1 ]
|
|
ENDIF
|
|
::update()
|
|
EXIT
|
|
ENDSWITCH
|
|
RETURN ::nOpacity
|
|
|
|
/*----------------------------------------------------------------------*/
|
|
|
|
METHOD HqrGraphicsItem:setLineType( ... )
|
|
LOCAL a_:= hb_aParams()
|
|
SWITCH Len( a_ )
|
|
CASE 0
|
|
EXIT
|
|
OTHERWISE
|
|
IF HB_ISNUMERIC( a_[ 1 ] )
|
|
::nLineType := a_[ 1 ]
|
|
ENDIF
|
|
::update()
|
|
EXIT
|
|
ENDSWITCH
|
|
RETURN ::nLineType
|
|
|
|
/*----------------------------------------------------------------------*/
|
|
|
|
METHOD HqrGraphicsItem:setupPainter( qPainter, lDrawSelection )
|
|
LOCAL qFont
|
|
|
|
qPainter:setPen( ::pen() )
|
|
qPainter:setBrush( ::brush() )
|
|
|
|
qFont := ::font()
|
|
|
|
qFont:setPixelSize( iif( lDrawSelection, ::nPointSize / UNIT, TO_MMS( ::nPointSize / UNIT ) ) )
|
|
qPainter:setFont( qFont )
|
|
|
|
qPainter:setBackgroundMode( ::backgroundMode() )
|
|
qPainter:setBackground( ::backgroundBrush() )
|
|
|
|
qPainter:setOpacity( ::opacity() / 100.0 )
|
|
qPainter:setRenderHint( QPainter_TextAntialiasing )
|
|
|
|
RETURN Self
|
|
|
|
/*----------------------------------------------------------------------*/
|
|
|
|
METHOD HqrGraphicsItem:drawSelection( qPainter, qRect )
|
|
LOCAL a, p, lt, rt, lb, rb
|
|
LOCAL drawSelectionBorder := .t.
|
|
LOCAL iResizeHandle := 2 / UNIT
|
|
LOCAL nW, nH
|
|
|
|
qPainter:save()
|
|
|
|
nW := qRect:width() ; nH := qRect:height()
|
|
|
|
IF ::oWidget:isSelected()
|
|
a := QBrush()
|
|
a:setColor( QColor( 255,0,0 ) )
|
|
a:setStyle( Qt_SolidPattern )
|
|
IF drawSelectionBorder
|
|
p := QPen()
|
|
p:setStyle( Qt_DashLine )
|
|
p:setBrush( a )
|
|
qPainter:setPen( p )
|
|
qPainter:drawRect( qRect )
|
|
ENDIF
|
|
lt := QPainterPath()
|
|
lt:moveTo( 0,0 )
|
|
lt:lineTo( 0, iResizeHandle )
|
|
lt:lineTo( iResizeHandle, 0 )
|
|
qPainter:fillPath( lt, a )
|
|
|
|
rt := QPainterPath()
|
|
rt:moveTo( nW,0 )
|
|
rt:lineTo( nW, iResizeHandle )
|
|
rt:lineTo( nW-iResizeHandle, 0 )
|
|
qPainter:fillPath( rt,a )
|
|
|
|
lb := QPainterPath()
|
|
lb:moveTo( 0, nH )
|
|
lb:lineTo( 0, nH - iResizeHandle )
|
|
lb:lineTo( iResizeHandle, nH )
|
|
qPainter:fillPath( lb,a )
|
|
|
|
rb := QPainterPath()
|
|
rb:moveTo( nW, nH )
|
|
rb:lineTo( nW, nH - iResizeHandle )
|
|
rb:lineTo( nW-iResizeHandle, nH )
|
|
qPainter:fillPath( rb,a )
|
|
ELSE
|
|
IF drawSelectionBorder
|
|
a := QBrush()
|
|
a:setColor( QColor( 100,100,100,200 ) )
|
|
a:setStyle( Qt_SolidPattern )
|
|
|
|
p := QPen()
|
|
p:setStyle( Qt_DashDotDotLine )
|
|
p:setBrush( a )
|
|
qPainter:setPen( p )
|
|
qPainter:drawRect( qRect )
|
|
ELSE
|
|
qPainter:setPen( "QColor", QColor( 0, 0, 0, 100 ) )
|
|
|
|
qPainter:drawLine( 0 , 0 , 0 , 2*iResizeHandle )
|
|
qPainter:drawLine( 0 , 0 , 2*iResizeHandle , 0 )
|
|
qPainter:drawLine( nW, 0 , nW-2*iResizeHandle, 0 )
|
|
qPainter:drawLine( nW, 0 , nW , 2*iResizeHandle )
|
|
qPainter:drawLine( nW, nH, nW-2*iResizeHandle, nH )
|
|
qPainter:drawLine( nW, nH, nW , nH-2*iResizeHandle )
|
|
qPainter:drawLine( 0 , nH, 2*iResizeHandle , nH )
|
|
qPainter:drawLine( 0 , nH, 0 , nH-2*iResizeHandle )
|
|
ENDIF
|
|
ENDIF
|
|
qPainter:restore()
|
|
RETURN Self
|
|
|
|
/*----------------------------------------------------------------------*/
|
|
|
|
METHOD HqrGraphicsItem:draw( qPainter, qRectF, lDrawSelection )
|
|
|
|
DEFAULT lDrawSelection TO .t.
|
|
|
|
::setupPainter( qPainter, lDrawSelection )
|
|
|
|
SWITCH ::cType
|
|
CASE "Barcode" ; ::drawBarcode( qPainter, qRectF ) ; EXIT
|
|
CASE "Image" ; ::drawImage( qPainter, qRectF ) ; EXIT
|
|
CASE "Chart" ; ::drawChart( qPainter, qRectF ) ; EXIT
|
|
CASE "Gradient" ; ::drawGradient( qPainter, qRectF ) ; EXIT
|
|
CASE "Text" ; ::drawText( qPainter, qRectF ) ; EXIT
|
|
CASE "Field" ; ::drawField( qPainter, qRectF ) ; EXIT
|
|
CASE "Rectangle" ; ::drawRect( qPainter, qRectF ) ; EXIT
|
|
CASE "RoundRect" ; ::drawRoundRect( qPainter, qRectF ) ; EXIT
|
|
CASE "Ellipse" ; ::drawEllipse( qPainter, qRectF ) ; EXIT
|
|
CASE "LineH" ; ::drawLine( qPainter, qRectF ) ; EXIT
|
|
CASE "LineV" ; ::drawLine( qPainter, qRectF ) ; EXIT
|
|
CASE "LineDR" ; ::drawLine( qPainter, qRectF ) ; EXIT
|
|
CASE "LineDL" ; ::drawLine( qPainter, qRectF ) ; EXIT
|
|
CASE "Arc" ; ::drawArc( qPainter, qRectF ) ; EXIT
|
|
CASE "Chord" ; ::drawChord( qPainter, qRectF ) ; EXIT
|
|
CASE "Diamond" ; ::drawDiamond( qPainter, qRectF ) ; EXIT
|
|
CASE "Triangle" ; ::drawTriangle( qPainter, qRectF ) ; EXIT
|
|
ENDSWITCH
|
|
|
|
IF lDrawSelection
|
|
::drawSelection( qPainter, qRectF )
|
|
ENDIF
|
|
RETURN Self
|
|
|
|
/*----------------------------------------------------------------------*/
|
|
|
|
METHOD HqrGraphicsItem:drawRect( qPainter, qRectF )
|
|
qPainter:drawRect( qRectF )
|
|
RETURN Self
|
|
|
|
/*----------------------------------------------------------------------*/
|
|
|
|
METHOD HqrGraphicsItem:drawRoundRect( qPainter, qRectF )
|
|
qPainter:drawRoundedRect( qRectF, 10/UNIT, 10/UNIT )
|
|
RETURN Self
|
|
|
|
/*----------------------------------------------------------------------*/
|
|
|
|
METHOD HqrGraphicsItem:drawEllipse( qPainter, qRectF )
|
|
qPainter:drawEllipse( qRectF )
|
|
RETURN Self
|
|
|
|
/*----------------------------------------------------------------------*/
|
|
|
|
METHOD HqrGraphicsItem:drawLine( qPainter, qRect )
|
|
|
|
SWITCH ::lineType()
|
|
CASE HBQT_GRAPHICSITEM_LINE_VERTICAL
|
|
qPainter:drawLine( qRect:x() + qRect:width() / 2, qRect:y(), qRect:x() + qRect:width() / 2, qRect:y() + qRect:height() )
|
|
EXIT
|
|
case HBQT_GRAPHICSITEM_LINE_HORIZONTAL
|
|
qPainter:drawLine( qRect:x(), qRect:y() + qRect:height() / 2, qRect:x() + qRect:width(), qRect:y() + qRect:height() / 2 )
|
|
EXIT
|
|
case HBQT_GRAPHICSITEM_LINE_BACKWARDDIAGONAL
|
|
qPainter:drawLine( qRect:right(), qRect:y(), qRect:x(), qRect:bottom() )
|
|
EXIT
|
|
case HBQT_GRAPHICSITEM_LINE_FORWARDDIAGONAL
|
|
qPainter:drawLine( QPointF( qRect:x(), qRect:y() ), QPointF( qRect:right(), qRect:bottom() ) )
|
|
EXIT
|
|
ENDSWITCH
|
|
RETURN Self
|
|
|
|
/*----------------------------------------------------------------------*/
|
|
|
|
METHOD HqrGraphicsItem:drawPie( qPainter, qRectF )
|
|
qPainter:drawPie( qRectF, ::nStartAngle * 16, ::nSpanAngle * 16 )
|
|
RETURN Self
|
|
|
|
/*----------------------------------------------------------------------*/
|
|
|
|
METHOD HqrGraphicsItem:drawDiamond( qPainter, qRectF )
|
|
LOCAL p := QPainterPath()
|
|
LOCAL x := qRectF:x(), y := qRectF:y(), w := qRectF:width(), h := qRectF:height()
|
|
|
|
p:moveTo( x, y + h / 2 )
|
|
p:lineTo( x + w / 2, y )
|
|
p:lineTo( x + w, y + h / 2 )
|
|
p:lineTo( x + w / 2, y + h )
|
|
p:lineTo( x, y + h / 2 )
|
|
|
|
qPainter:drawPath( p )
|
|
|
|
RETURN Self
|
|
|
|
/*----------------------------------------------------------------------*/
|
|
|
|
METHOD HqrGraphicsItem:drawTriangle( qPainter, qRectF )
|
|
LOCAL p := QPainterPath()
|
|
|
|
p:moveTo( qRectF:x(), qRectF:y() + qRectF:height() )
|
|
p:lineTo( qRectF:x() + qRectF:width() / 2, qRectF:y() )
|
|
p:lineTo( qRectF:x() + qRectF:width(), qRectF:y() + qRectF:height() )
|
|
p:lineTo( qRectF:x(), qRectF:y() + qRectF:height() )
|
|
|
|
qPainter:drawPath( p )
|
|
|
|
RETURN Self
|
|
|
|
/*----------------------------------------------------------------------*/
|
|
|
|
METHOD HqrGraphicsItem:drawArc( qPainter, qRectF )
|
|
qPainter:drawArc( qRectF, ::nStartAngle * 16, ::nSpanAngle * 16 )
|
|
RETURN Self
|
|
|
|
/*----------------------------------------------------------------------*/
|
|
|
|
METHOD HqrGraphicsItem:drawChord( qPainter, qRectF )
|
|
qPainter:drawChord( qRectF, ::nStartAngle * 16, ::nSpanAngle * 16 )
|
|
RETURN Self
|
|
|
|
/*----------------------------------------------------------------------*/
|
|
|
|
METHOD HqrGraphicsItem:drawText( qPainter, qRectF )
|
|
qPainter:drawText( qRectF, ::textFlags(), ::text() )
|
|
RETURN Self
|
|
|
|
/*----------------------------------------------------------------------*/
|
|
|
|
METHOD HqrGraphicsItem:drawField( qPainter, qRectF )
|
|
qPainter:drawText( qRectF, ::textFlags(), ::text() )
|
|
RETURN Self
|
|
|
|
/*----------------------------------------------------------------------*/
|
|
|
|
METHOD HqrGraphicsItem:drawGradient( qPainter, qRectF )
|
|
qPainter:drawRect( qRectF )
|
|
RETURN Self
|
|
|
|
/*----------------------------------------------------------------------*/
|
|
|
|
METHOD HqrGraphicsItem:drawBarcode( qPainter, qRectF )
|
|
LOCAL rc, w, x, i, cCode
|
|
|
|
rc := qRectF:adjusted( 5, 5, -10, -10 )
|
|
cCode := fetchBarString( ::text() )
|
|
w := rc:width() / Len( cCode )
|
|
x := 0.0
|
|
|
|
FOR i := 1 TO Len( cCode )
|
|
IF substr( cCode, i, 1 ) == "1"
|
|
qPainter:fillRect( QRectF( rc:x() + x, rc:y(), w, rc:height() ), QColor( Qt_black ) )
|
|
ELSE
|
|
qPainter:fillRect( QRectF( rc:x() + x, rc:y(), w, rc:height() ), QColor( Qt_white ) )
|
|
ENDIF
|
|
x += w
|
|
NEXT
|
|
|
|
RETURN Self
|
|
|
|
/*----------------------------------------------------------------------*/
|
|
|
|
METHOD HqrGraphicsItem:drawImage( qPainter, qRectF )
|
|
LOCAL qPix, image, rc, img, point
|
|
LOCAL drawTextType := HBQT_GRAPHICSITEM_TEXT_DRAW_ABOVE
|
|
LOCAL paintType := HBQT_GRAPHICSITEM_RESIZE_PICTURE_TO_ITEM_KEEP_ASPECT_RATIO
|
|
LOCAL borderWidth := 0
|
|
LOCAL borderColor := 0, pen, textH, sw, sh, cx, cy, cw, ch, textColor := 0
|
|
LOCAL cText := "Picture"
|
|
LOCAL qObj := ::oWidget
|
|
|
|
rc := qRectF:adjusted( 1, 1, -2, -2 )
|
|
|
|
textH := 0
|
|
sw := 0
|
|
sh := 0
|
|
|
|
IF drawTextType == HBQT_GRAPHICSITEM_TEXT_DRAW_ABOVE .OR. ::drawTextType == HBQT_GRAPHICSITEM_TEXT_DRAW_BELOW
|
|
textH := qPainter:font():pixelSize()
|
|
ENDIF
|
|
|
|
qPix := ::pixmap()
|
|
image := qPix:toImage()
|
|
|
|
IF image:isNull()
|
|
qPainter:drawRect( qRectF )
|
|
ELSE
|
|
img := QImage( 0, 0 )
|
|
point := qRectF:topLeft()
|
|
cx := 0; cy := 0; cw := qPix:width(); ch := qPix:height()
|
|
|
|
SWITCH paintType
|
|
CASE HBQT_GRAPHICSITEM_RESIZE_PICTURE_TO_ITEM_KEEP_ASPECT_RATIO
|
|
img := QImage( image:scaled( rc:width(), rc:height() - textH, Qt_KeepAspectRatio, Qt_SmoothTransformation ) )
|
|
EXIT
|
|
CASE HBQT_GRAPHICSITEM_RESIZE_PICTURE_TO_ITEM_IGNORE_ASPECT_RATIO
|
|
img := QImage( image:scaled( rc:width(), rc:height() - textH, Qt_IgnoreAspectRatio, Qt_SmoothTransformation ) )
|
|
EXIT
|
|
CASE HBQT_GRAPHICSITEM_CENTER_PICTURE_TO_ITEM
|
|
point:setX( point:x() + ( rc:width() - image:width() ) / 2 )
|
|
point:setY( point:y() + ( rc:height() - image:height() - textH ) / 2 )
|
|
IF point:x() < 0
|
|
cx := abs( point:x() )
|
|
cw -= 2 * cx
|
|
point:setX( 0 )
|
|
ENDIF
|
|
IF point:y() < 0
|
|
cy := abs( point:y() )
|
|
ch -= 2 * cy
|
|
point:setY( 0 )
|
|
ENDIF
|
|
img := QImage( image:copy( cx, cy, cw, ch ) )
|
|
EXIT
|
|
CASE HBQT_GRAPHICSITEM_RESIZE_ITEM_TO_PICTURE
|
|
img := image
|
|
sw := img:width() - qObj:width()
|
|
sh := img:height() - ( qObj:height() - textH )
|
|
EXIT
|
|
ENDSWITCH
|
|
|
|
IF drawTextType == HBQT_GRAPHICSITEM_TEXT_DRAW_ABOVE
|
|
point:setY( point:y() + textH )
|
|
ENDIF
|
|
|
|
qPainter:drawImage( point, img )
|
|
ENDIF
|
|
qPainter:setPen( QPen( textColor ) )
|
|
|
|
SWITCH drawTextType
|
|
CASE HBQT_GRAPHICSITEM_TEXT_DRAW_TOP
|
|
qPainter:drawText( rc, Qt_AlignTop + Qt_AlignHCenter, cText )
|
|
EXIT
|
|
CASE HBQT_GRAPHICSITEM_TEXT_DRAW_BOTTOM
|
|
qPainter:drawText( rc, Qt_AlignBottom + Qt_AlignHCenter, cText )
|
|
EXIT
|
|
CASE HBQT_GRAPHICSITEM_TEXT_DRAW_ABOVE
|
|
qPainter:drawText( rc, Qt_AlignTop + Qt_AlignHCenter, cText )
|
|
EXIT
|
|
CASE HBQT_GRAPHICSITEM_TEXT_DRAW_BELOW
|
|
qPainter:drawText( rc, Qt_AlignBottom + Qt_AlignHCenter, cText )
|
|
EXIT
|
|
ENDSWITCH
|
|
|
|
IF !empty( sw ) .OR. !empty( sh )
|
|
qObj:setWidth( qObj:width() + sw )
|
|
qObj:setHeight( qObj:height() + sh )
|
|
ENDIF
|
|
|
|
IF borderWidth > 0
|
|
pen := QPen()
|
|
pen:setWidth( borderWidth )
|
|
pen:setColor( borderColor )
|
|
pen:setJoinStyle( Qt_MiterJoin )
|
|
qPainter:setPen( pen )
|
|
qPainter:setBrush( QBrush( Qt_NoBrush ) )
|
|
qPainter:drawRect( rc:x() + borderWidth / 2, rc:y() + borderWidth / 2, ;
|
|
rc:width() - borderWidth, rc:height() - borderWidth )
|
|
ENDIF
|
|
|
|
RETURN Self
|
|
|
|
/*----------------------------------------------------------------------*/
|
|
|
|
METHOD HqrGraphicsItem:drawChart( qPainter, qRect )
|
|
LOCAL qFMetrix, maxpv, minnv, absMaxVal, powVal, chartStep, powStep, maxHeight, valstep, maxLabelWidth
|
|
LOCAL pw, rc, maxval, y, i, x, cv, barWidth, lg, py, f, cMaxVal, nDec, nFHeight, nLabelWidth, br, nPlanes
|
|
LOCAL m_drawBorder := .t.
|
|
LOCAL m_showLabels := .t.
|
|
LOCAL m_showGrid := .t.
|
|
LOCAL m_barsIdentation := 1.0 / UNIT
|
|
LOCAL nColorFactor := 1.7
|
|
|
|
qFMetrix := qPainter:fontMetrics()
|
|
nFHeight := qFMetrix:height()
|
|
|
|
IF empty( ::xData )
|
|
::xData := {}
|
|
|
|
aadd( ::xData, { "Bananas", 040.0, rmgr_generateNextColor() } )
|
|
aadd( ::xData, { "Oranges", 150.0, rmgr_generateNextColor() } )
|
|
aadd( ::xData, { "Mangoes", 095.0, rmgr_generateNextColor() } )
|
|
ENDIF
|
|
|
|
maxpv := 0
|
|
minnv := 0
|
|
aeval( ::xData, {|e_| iif( e_[ 2 ] < 0, minnv := min( minnv, e_[ 2 ] ), NIL ), iif( e_[ 2 ] > 0, maxpv := max( maxpv, e_[ 2 ] ), NIL ) } )
|
|
|
|
absMaxVal := maxpv - minnv
|
|
cMaxVal := hb_ntos( absMaxVal )
|
|
nDec := at( ".", cMaxVal )
|
|
|
|
powVal := iif( absMaxVal < 1, 10.0 ^ ( Len( substr( cMaxVal, nDec+1 ) ) + 1 ), 1 )
|
|
maxpv *= powVal
|
|
minnv *= powVal
|
|
|
|
maxpv := maxpv
|
|
minnv := -minnv
|
|
minnv := -minnv
|
|
|
|
qPainter:fillRect( qRect, ::brush() )
|
|
|
|
IF m_drawBorder
|
|
qPainter:drawRect( qRect )
|
|
ENDIF
|
|
|
|
pw := iif( abs( ::pen():widthF() ) > 0, abs( ::pen():widthF() ), 1 )
|
|
rc := qRect:adjusted( pw / 2, pw / 2, -pw, -pw )
|
|
|
|
f := 2
|
|
chartStep := ( 10.0 ^ ( Len( substr( cMaxVal, 1, nDec - 1 ) ) - 1 ) ) / f
|
|
powStep := iif( chartStep < 1, 10, 1 )
|
|
chartStep *= powStep
|
|
maxpv *= powStep
|
|
minnv *= powStep
|
|
powVal *= powStep
|
|
maxpv := maxpv + ( iif( ( maxpv % chartStep ) != 0, ( chartStep - ( maxpv % chartStep ) ), 0 ) ) / powVal
|
|
minnv := minnv - ( iif( ( - minnv % chartStep ) != 0, ( chartStep - ( - minnv % chartStep ) ), 0 ) ) / powVal
|
|
maxVal := maxpv - minnv
|
|
|
|
maxHeight := rc:height() - nFHeight
|
|
valstep := maxHeight / ( maxVal / chartStep )
|
|
|
|
IF ( valstep < nFHeight )
|
|
chartStep *= ( ( ( nFHeight / valstep ) ) + 1 )
|
|
valstep := ( ( ( nFHeight / valstep ) ) + 1 ) * valstep
|
|
ENDIF
|
|
|
|
nPlanes := maxVal / chartStep + 1 + iif( maxVal % chartStep != 0, 1, 0 )
|
|
|
|
IF m_showLabels
|
|
maxLabelWidth := 0
|
|
FOR i := 1 TO nPlanes
|
|
nLabelWidth := qFMetrix:width( hb_ntos( Int( ( maxVal * i - chartStep * i ) / powVal ) ) )
|
|
IF maxLabelWidth < nLabelWidth
|
|
maxLabelWidth := nLabelWidth
|
|
ENDIF
|
|
NEXT
|
|
y := 0
|
|
FOR i := 1 TO nPlanes
|
|
qPainter:drawText( QRectF( rc:x(), rc:y() + y, maxLabelWidth, nFHeight ), ;
|
|
Qt_AlignRight + Qt_AlignVCenter, hb_ntos( Int( ( maxpv - chartStep * ( i - 1 ) ) / powVal ) ) )
|
|
y += valstep
|
|
NEXT
|
|
|
|
qPainter:drawLine( rc:x() + maxLabelWidth + 1 / UNIT / 4, rc:y(), rc:x() + maxLabelWidth + 1 / UNIT / 4, rc:y() + qRect:height() )
|
|
rc := rc:adjusted( maxLabelWidth + 1 / UNIT / 4, 0, 0, 0 )
|
|
ENDIF
|
|
|
|
IF m_showGrid
|
|
y := nFHeight / 2
|
|
FOR i := 1 TO nPlanes
|
|
qPainter:drawLine( rc:x(), rc:y() + y, rc:x() + rc:width(), rc:y() + y )
|
|
y += valstep
|
|
NEXT
|
|
ENDIF
|
|
|
|
rc := rc:adjusted( 0, nFHeight / 2, 0, 0 )
|
|
x := m_barsIdentation
|
|
barWidth := ( rc:width() - m_barsIdentation * ( Len( ::xData ) + 1 ) ) / len( ::xData )
|
|
py := maxHeight / maxVal
|
|
|
|
FOR EACH cv IN ::xData
|
|
lg := QLinearGradient( QPointF( x + barWidth / 2, 0.0 ), QPointF( x + barWidth, 0.0 ) )
|
|
//
|
|
lg:setSpread( QGradient_ReflectSpread )
|
|
lg:setColorAt( 0, cv[ 3 ] )
|
|
lg:setColorAt( 1, QColor( cv[ 3 ]:red() * nColorFactor, cv[ 3 ]:green() * nColorFactor, cv[ 3 ]:blue() * nColorFactor, cv[ 3 ]:alpha() ) )
|
|
//
|
|
br := QBrush( lg )
|
|
//
|
|
qPainter:fillRect( QRectF( rc:x() + x, rc:y() + py * maxpv - py * cv[ 2 ] * powVal, barWidth, py * cv[ 2 ] * powVal ), br )
|
|
|
|
IF m_showLabels
|
|
qPainter:drawText( QRectF( rc:x() + x - m_barsIdentation / 2, rc:y() + py * maxpv - iif( cv[ 2 ] >= 0, nFHeight, 0 ), ;
|
|
barWidth + m_barsIdentation, nFHeight ), Qt_AlignCenter, hb_ntos( Int( cv[ 2 ] ) ) )
|
|
ENDIF
|
|
x += barWidth + m_barsIdentation
|
|
NEXT
|
|
|
|
#if 0 /* Legend */
|
|
qPainter:fillRect( qRect, ::brush() )
|
|
qPainter:drawRect( qRect )
|
|
qPainter:translate( qRect:topLeft() )
|
|
qreal y := 1 / UNIT
|
|
qreal vstep := ( qRect:height() - y - 1 / UNIT * val:size() ) / Len( ::aData )
|
|
FOR EACH cv IN ::aData
|
|
{
|
|
qPainter:fillRect( QRectF( 1 / UNIT / 2, y, m_legendColorqRectWidth, vstep ), QBrush( cv[ 3 ] ) )
|
|
qPainter:drawText( QRectF( 1 / UNIT + m_legendColorqRectWidth, y, qRect:width() - ( 1 / UNIT + m_legendColorqRectWidth ), vstep ),
|
|
Qt_AlignVCenter + Qt_AlignLeft, cv[ 1 ] )
|
|
y += vstep + 1 / UNIT
|
|
}
|
|
#endif
|
|
|
|
RETURN Self
|
|
|
|
/*----------------------------------------------------------------------*/
|