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:
@@ -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
|
||||
|
||||
@@ -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_
|
||||
|
||||
/*----------------------------------------------------------------------*/
|
||||
|
||||
@@ -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 )
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user