2010-08-27 09:08 UTC-0800 Pritpal Bedi (bedipritpal@hotmail.com)

* contrib/hbqt/qtgui/hbqt_hbqgraphicsscene.cpp
    ! Minor.

  * contrib/hbide/hbqreportsmanager.prg
    + Implemented: first alfa version to save and load a report.
      Save and Open icons on the HBReportsManger's top-toolbar conatin these actions.
      Now it is easier to play with this tool.
This commit is contained in:
Pritpal Bedi
2010-08-27 16:13:24 +00:00
parent abba013e29
commit e27caca7ef
3 changed files with 221 additions and 58 deletions

View File

@@ -16,6 +16,15 @@
The license applies to all entries newer than 2009-04-28.
*/
2010-08-27 09:08 UTC-0800 Pritpal Bedi (bedipritpal@hotmail.com)
* contrib/hbqt/qtgui/hbqt_hbqgraphicsscene.cpp
! Minor.
* contrib/hbide/hbqreportsmanager.prg
+ Implemented: first alfa version to save and load a report.
Save and Open icons on the HBReportsManger's top-toolbar conatin these actions.
Now it is easier to play with this tool.
2010-08-27 15:49 UTC+0200 Viktor Szakats (harbour.01 syenar.hu)
* src/rtl/hbi18n2.prg
* utils/hbmk2/hbmk2.prg

View File

@@ -143,6 +143,9 @@ CLASS HbqReportsManager
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 ""
@@ -166,8 +169,8 @@ CLASS HbqReportsManager
METHOD buildStatusBar()
METHOD buildTabBar()
METHOD buildDesignReport()
METHOD addField( qPos, cAlias, cField )
METHOD addObject( qPos, cType )
METHOD addField( cAlias, cField, qGeo, qPos )
METHOD addObject( cType, qGeo, qPos )
METHOD fetchBarString( cCode, lCheck )
METHOD loadReport( xData )
METHOD saveReport( lSaveAs )
@@ -181,6 +184,9 @@ CLASS HbqReportsManager
METHOD clear()
METHOD buildReportStream()
METHOD toString()
METHOD openReport()
METHOD parseBuffer( cBuffer )
METHOD presentBlankPage()
ENDCLASS
@@ -395,12 +401,12 @@ METHOD HbqReportsManager:execEvent( cEvent, p, p1, p2 )
IF qMime:hasFormat( "application/x-qabstractitemmodeldatalist" )
IF p2[ 1 ] == "DataTree"
IF p2[ 2 ] != p2[ 3 ]
::addField( QPoint():from( qEvent:scenePos() ), p2[ 2 ], p2[ 3 ] )
::addField( p2[ 2 ], p2[ 3 ], NIL, QPoint():from( qEvent:scenePos() ) )
ENDIF
ENDIF
ELSEIF qMime:hasFormat( "application/x-toolbaricon" )
::addObject( QPoint():from( qEvent:scenePos() ), qMime:html() )
::addObject( qMime:html(), NIL, QPoint():from( qEvent:scenePos() ) )
ELSEIF qMime:hasUrls()
qList := QStringList():from( qMime:hbUrlList() )
@@ -485,6 +491,7 @@ METHOD HbqReportsManager:execEvent( cEvent, p, p1, p2 )
CASE "buttonNew_clicked"
EXIT
CASE "buttonOpen_clicked"
::openReport()
EXIT
CASE "buttonSave_clicked"
::saveReport()
@@ -514,59 +521,45 @@ METHOD HbqReportsManager:execEvent( cEvent, p, p1, p2 )
/*----------------------------------------------------------------------*/
METHOD HbqReportsManager:clear()
METHOD HbqReportsManager:presentBlankPage()
/* Cleanup the environments */
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:loadReport( xData )
METHOD HbqReportsManager:openReport()
LOCAL qFileDlg, qList, cFile
::clear()
qFileDlg := QFileDialog():new( ::oWidget )
IF empty( xData )
IF empty( ::aPages )
aadd( ::aPages, { "Page_1" } )
qFileDlg:setAcceptMode( QFileDialog_AcceptOpen )
qFileDlg:setFileMode( QFileDialog_AnyFile )
qFileDlg:setViewMode( QFileDialog_List )
qFileDlg:setNameFilter( "HB Reports (*.hqr)" )
IF qFileDlg:exec() == 1
qList := QStringList():from( qFileDlg:selectedFiles() )
cFile := qList:at( 0 )
IF !empty( cFile ) .AND. lower( right( cFile, 4 ) ) == ".hqr"
::loadReport( cFile )
ENDIF
::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 } } )
ELSE
// read from - buffer, file
hb_utf8tostr( hb_memoread( "name" ) )
ENDIF
RETURN Self
/*----------------------------------------------------------------------*/
METHOD HbqReportsManager:addSource( cAlias, aStruct )
LOCAL qItem, qItmC, b_
qItem := QTreeWidgetItem():new()
qItem:setText( 0, cAlias )
::qTreeData:addTopLevelItem( qItem )
FOR EACH b_ IN aStruct
qItmC := QTreeWidgetItem():new()
qItmC:setText( 0, b_[ 1 ] )
qItem:addChild( qItmC )
qItem:setExpanded( .t. )
NEXT
aadd( ::aSources, { cAlias, aStruct } )
RETURN Self
/*----------------------------------------------------------------------*/
METHOD HbqReportsManager:saveReport( lSaveAs )
LOCAL cFile, cBuffer, qFileDlg, qList, cExt
LOCAL lSave := .t.
@@ -665,7 +658,95 @@ METHOD HbqReportsManager:buildReportStream()
/*----------------------------------------------------------------------*/
METHOD HbqReportsManager:addObject( qPos, cType )
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
::clear()
IF empty( xData )
::presentBlankPage()
ELSE
IF len( xData ) <= 300 .AND. hb_fileExists( xData )
cBuffer := hb_utf8tostr( hb_memoread( xData ) )
ELSE
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
SWITCH a_[ 1 ]
CASE "Object"
d_:= a_[ 5 ]
::addObject( a_[ 4 ], QRectF():new( d_[ 1,1 ], d_[ 1,2 ], d_[ 1,3 ], d_[ 1,4 ] ), QPointF():new( d_[ 2,1 ], d_[ 2,2 ] ) )
EXIT
CASE "Field"
d_:= a_[ 5 ]
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 )
::addField( cAlias, cField, QRectF():new( d_[ 1,1 ], d_[ 1,2 ], d_[ 1,3 ], d_[ 1,4 ] ), QPointF():new( d_[ 2,1 ], d_[ 2,2 ] ) )
EXIT
ENDSWITCH
NEXT
ENDIF
RETURN Self
/*----------------------------------------------------------------------*/
METHOD HbqReportsManager:addObject( cType, qGeo, qPos )
LOCAL oWidget, cName, nW, nH, qGrad, cCode, qStrList, i
cName := cType + "_" + hb_ntos( ::getNextID( cType ) )
@@ -722,7 +803,7 @@ METHOD HbqReportsManager:addObject( qPos, cType )
::qScene:addItem( oWidget )
oWidget:setGeometry( QRectF():new( 0, 0, nW, nH ) )
oWidget:setGeometry( iif( empty( qGeo ), QRectF():new( 0, 0, nW, nH ), qGeo ) )
IF !empty( qPos )
oWidget:setPos( qPos )
ENDIF
@@ -734,7 +815,7 @@ METHOD HbqReportsManager:addObject( qPos, cType )
/*----------------------------------------------------------------------*/
METHOD HbqReportsManager:addField( qPos, cAlias, cField )
METHOD HbqReportsManager:addField( cAlias, cField, qGeo, qPos )
LOCAL oWidget, nW := 300, nH := 50
LOCAL cName := cAlias + "..." + cField
@@ -743,13 +824,13 @@ METHOD HbqReportsManager:addField( qPos, cAlias, cField )
oWidget := HBQGraphicsItem():new( HBQT_GRAPHICSITEM_SIMPLETEXT )
oWidget:setText( cName )
oWidget:hbSetBlock( {|p,p1,p2| ::execEvent( "graphicsItem_block", p, p1, p2 ) } )
oWidget:setGeometry( QRectF():new( 0, 0, nW, nH ) )
oWidget:setTooltip( cName )
oWidget:setObjectType( "Field" )
oWidget:setObjectName( cName )
::qScene:addItem( oWidget )
oWidget:setGeometry( iif( empty( qGeo ), QRectF():new( 0, 0, nW, nH ), qGeo ) )
IF !empty( qPos )
oWidget:setPos( qPos )
ENDIF
@@ -761,6 +842,50 @@ METHOD HbqReportsManager:addField( qPos, cAlias, cField )
/*----------------------------------------------------------------------*/
METHOD HbqReportsManager:addSource( cAlias, aStruct )
LOCAL qItem, qItmC, b_
qItem := QTreeWidgetItem():new()
qItem:setText( 0, cAlias )
::qTreeData:addTopLevelItem( qItem )
FOR EACH b_ IN aStruct
qItmC := QTreeWidgetItem():new()
qItmC:setText( 0, b_[ 1 ] )
qItem:addChild( qItmC )
qItem:setExpanded( .t. )
NEXT
aadd( ::aSources, { cAlias, aStruct } )
RETURN Self
/*----------------------------------------------------------------------*/
METHOD HbqReportsManager:clear()
LOCAL qObj
FOR EACH qObj IN ::hItems
::qScene:removeItem( qObj )
qObj := NIL
NEXT
::hItems := {=>}
::qTreeObjects:clear()
::qTreeData:clear()
::aObjects := {}
::aPages := {}
::aSources := {}
::aRptObjects := {}
::aRptPages := {}
::aRptSources := {}
RETURN Self
/*----------------------------------------------------------------------*/
METHOD HbqReportsManager:updateObjectsTree( cType, cParent, cName, cSubType )
LOCAL qParent, qItem
@@ -794,8 +919,6 @@ METHOD HbqReportsManager:updateObjectsTree( cType, cParent, cName, cSubType )
qParent:setExpanded( .t. )
ENDIF
ENDCASE
RETURN Self
@@ -1159,3 +1282,30 @@ STATIC FUNCTION rmgr_a2arrayStr( aArray )
/*----------------------------------------------------------------------*/
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( &( "{|| " + cStr + "}" ) )
RECOVER
a_:= {}
ENDSEQUENCE
ErrorBlock( bErr )
RETURN a_
/*----------------------------------------------------------------------*/

View File

@@ -113,6 +113,16 @@ void HBQGraphicsScene::setGeometry( QRectF rect )
emit geometryChanged( m_geometry );
}
void HBQGraphicsScene::updatePageRect()
{
QPrinter p;
p.setOutputFormat( QPrinter::PdfFormat );
p.setOrientation( ( QPrinter::Orientation ) orientation() );
p.setPageSize( ( QPrinter::PageSize ) pageSize() );
p.setFullPage( true );
setSceneRect( 0, 0, p.paperRect( QPrinter::Millimeter ).width() / UNIT, p.paperRect( QPrinter::Millimeter ).height() / UNIT );
}
int HBQGraphicsScene::pageSize()
{
return m_pageSize;
@@ -123,6 +133,7 @@ void HBQGraphicsScene::setPageSize( int pageSize )
updatePageRect();
m_paperRect = sceneRect();
setGeometry( QRect( 10 / UNIT, 10 / UNIT, sceneRect().width() - 10 / UNIT * 2, sceneRect().height()- 10 / UNIT * 2 ) );
}
QRectF HBQGraphicsScene::paperRect()
@@ -155,16 +166,9 @@ void HBQGraphicsScene::setMagnetArea( int magnetArea )
m_magnetArea = magnetArea;
}
void HBQGraphicsScene::updatePageRect()
{
QPrinter p;
p.setOutputFormat( QPrinter::PdfFormat );
p.setOrientation( ( QPrinter::Orientation ) orientation() );
p.setPageSize( ( QPrinter::PageSize ) pageSize() );
p.setFullPage( true );
setSceneRect( 0, 0, p.paperRect( QPrinter::Millimeter ).width() / UNIT, p.paperRect( QPrinter::Millimeter ).height() / UNIT );
}
/*----------------------------------------------------------------------*/
// Mouse Events
/*----------------------------------------------------------------------*/
void HBQGraphicsScene::mouseMoveEvent( QGraphicsSceneMouseEvent * mouseEvent )
{