366 lines
14 KiB
Plaintext
366 lines
14 KiB
Plaintext
**
|
|
** wwwebgraphs.fxp
|
|
**
|
|
SET PROCEDURE TO wwWebGraphs ADDITIVE
|
|
SET PROCEDURE TO wwUtils ADDITIVE
|
|
SET PROCEDURE TO wwAPI ADDITIVE
|
|
RETURN
|
|
EXTERNAL ARRAY laGraphs, laLabels, laLegend
|
|
ENDPROC
|
|
*
|
|
DEFINE CLASS wwWebGraphs AS Relation
|
|
ngRaphtype = 0
|
|
ccAption = ""
|
|
ooWc = .NULL.
|
|
coWcprogid = "OWC10.ChartSpace"
|
|
cpHysicalpath = ""
|
|
clOgicalpath = ""
|
|
niMagetimeout = 300
|
|
ciMagename = ""
|
|
niMagewidth = 750
|
|
niMageheight = 480
|
|
cbAckcolor = "lightyellow"
|
|
csEries1color = "darkred"
|
|
csEries2color = "darkblue"
|
|
csEries3color = "darkgreen"
|
|
csEries4color = "orange"
|
|
csEries5color = "purple"
|
|
csEries6color = "pink"
|
|
nMaxColors = 6
|
|
nsHowlegend = 1
|
|
*
|
|
FUNCTION Init
|
|
LPARAMETER llNoexistcheck
|
|
|
|
IF .NOT. llNoexistcheck .AND. .NOT. isComobject(thIs.coWcprogid)
|
|
RETURN .F.
|
|
ENDIF
|
|
thIs.ooWc = CREATEOBJECT(thIs.coWcprogid)
|
|
IF VARTYPE(thIs.ooWc)<>"O"
|
|
RETURN .F.
|
|
ENDIF
|
|
RETURN
|
|
ENDFUNC
|
|
*
|
|
FUNCTION GraphSetup
|
|
LOCAL loGraph
|
|
loGraph = thIs.ooWc.chArts.adD()
|
|
loGraph.tyPe = thIs.ngRaphtype
|
|
IF thIs.nsHowlegend>0
|
|
loGraph.haSlegend = .T.
|
|
ENDIF
|
|
loGraph.plOtarea.inTerior.coLor = thIs.cbAckcolor
|
|
IF .NOT. EMPTY(thIs.ccAption)
|
|
thIs.ooWc.haSchartspacetitle = .T.
|
|
thIs.ooWc.chArtspacetitle.caPtion = thIs.ccAption
|
|
thIs.ooWc.chArtspacetitle.foNt.boLd = .T.
|
|
ENDIF
|
|
RETURN loGraph
|
|
ENDFUNC
|
|
*
|
|
PROCEDURE ShowGraphFromCursor
|
|
LOCAL x, y, loGraph, lnFields, lnRows, lnSeries, lcElement, lcArray, lnx, ocOnst
|
|
lnFields = AFIELDS(laFields, ALIAS())
|
|
lnRows = RECCOUNT()
|
|
lnSeries = lnFields-1
|
|
DIMENSION laLabels[lnRows]
|
|
FOR x = 1 TO lnSeries
|
|
lcArray = "DIMENSION laValues"+TRANSFORM(x)+"["+ ;
|
|
TRANSFORM(lnRows)+"]"
|
|
&lcArray
|
|
ENDFOR
|
|
x = 0
|
|
SCAN
|
|
x = x+1
|
|
laLabels[x] = TRIM(EVALUATE(FIELD(2)))
|
|
FOR y = 1 TO lnSeries
|
|
lcElement = "laValues"+TRANSFORM(y)+"["+TRANSFORM(x)+"]"
|
|
&lcElement = EVALUATE(FIELD(y+1))
|
|
ENDFOR
|
|
ENDSCAN
|
|
ocOnst = thIs.ooWc.coNstants
|
|
loGraph = thIs.grAphsetup()
|
|
lnx = 0
|
|
FOR x = 1 TO lnSeries
|
|
loGraph.seRiescollection.adD()
|
|
loSeries = loGraph.seRiescollection(x-1)
|
|
lnx = lnx + 1
|
|
IF .NOT. INLIST(thIs.ngRaphtype, 18, 19, 58, 59)
|
|
|
|
IF lnx > this.nMaxColors && 6 culori maxim
|
|
lnx = 1
|
|
ENDIF
|
|
|
|
loSeries.inTerior.coLor = EVALUATE("THIS.cSeries"+ ;
|
|
TRANSFORM(lnx)+"Color")
|
|
ELSE
|
|
IF x>1
|
|
EXIT
|
|
ENDIF
|
|
ENDIF
|
|
lcArray = "@laValues"+TRANSFORM(x)
|
|
loSeries.caPtion = PROPER(STRTRAN(TRIM(laFields(x+1,1)), "_", " "))
|
|
loSeries.seTdata(ocOnst.chDimcategories,ocOnst.chDataliteral, ;
|
|
@laLabels)
|
|
loSeries.SetData(oConst.chDimValues, oConst.chDataLiteral, &lcArray)
|
|
ENDFOR
|
|
ENDPROC
|
|
*
|
|
PROCEDURE ShowGraphFromArray
|
|
LPARAMETER laLabels, laSeries1, lcSeries1, laSeries2, lcSeries2, ;
|
|
laSeries3, lcSeries3, laSeries4, lcSeries4, laSeries5, ;
|
|
lcSeries5, laSeries6, lcSeries6
|
|
LOCAL x, loGraph, lnSeries, lcArray, lcLabel
|
|
lnSeries = (PCOUNT()-1)/2
|
|
loGraph = thIs.grAphsetup()
|
|
ocOnst = thIs.ooWc.coNstants
|
|
FOR x = 1 TO lnSeries
|
|
loGraph.seRiescollection.adD()
|
|
IF .NOT. INLIST(thIs.ngRaphtype, 18, 19)
|
|
loGraph.seRiescollection(x-1).inTerior.coLor = ;
|
|
EVALUATE("THIS.cSeries"+ ;
|
|
TRANSFORM(x)+"Color")
|
|
ENDIF
|
|
lcArray = "@laSeries"+TRANSFORM(x)
|
|
lcLabel = EVALUATE("lcSeries"+TRANSFORM(x))
|
|
loGraph.seRiescollection(x-1).caPtion = lcLabel
|
|
loGraph.seRiescollection(x-1).seTdata(ocOnst.chDimcategories, ;
|
|
ocOnst.chDataliteral,@laLabels)
|
|
loGraph.SeriesCollection(x-1).SetData(oConst.chDimValues, oConst.chDataLiteral, &lcArray)
|
|
ENDFOR
|
|
ENDPROC
|
|
*
|
|
PROCEDURE ShowGraphFromMultiDimensionalArray
|
|
LPARAMETER laGraphs, laLegend
|
|
LOCAL loGraph, lnSeries, lnRows, llLegend, x, y
|
|
lnSeries = ALEN(laGraphs, 2)-1
|
|
lnRows = ALEN(laGraphs, 1)
|
|
loGraph = thIs.grAphsetup()
|
|
IF TYPE('ALEN(laLegend)')="N"
|
|
llLegend = .T.
|
|
ELSE
|
|
llLegend = .F.
|
|
loGraph.haSlegend = .F.
|
|
ENDIF
|
|
ocOnst = thIs.ooWc.coNstants
|
|
DIMENSION laLabels[lnRows]
|
|
FOR y = 1 TO lnRows
|
|
laLabels[y] = laGraphs(y,1)
|
|
ENDFOR
|
|
FOR x = 2 TO lnSeries+1
|
|
loGraph.seRiescollection.adD()
|
|
IF .NOT. INLIST(thIs.ngRaphtype, 18, 19)
|
|
loGraph.seRiescollection(x-2).inTerior.coLor = ;
|
|
EVALUATE("THIS.cSeries"+ ;
|
|
TRANSFORM(x)+"Color")
|
|
ENDIF
|
|
DIMENSION laArray[lnRows]
|
|
FOR y = 1 TO lnRows
|
|
laArray[y] = laGraphs(y,x)
|
|
ENDFOR
|
|
IF llLegend
|
|
loGraph.seRiescollection(x-2).caPtion = laLegend(x-1)
|
|
ENDIF
|
|
loGraph.seRiescollection(x-2).seTdata(ocOnst.chDimcategories, ;
|
|
ocOnst.chDataliteral,@laLabels)
|
|
loGraph.seRiescollection(x-2).seTdata(ocOnst.chDimvalues, ;
|
|
ocOnst.chDataliteral,@laArray)
|
|
ENDFOR
|
|
ENDPROC
|
|
*
|
|
FUNCTION GetOutput
|
|
thIs.seTgraphicsoptions(thIs.ooWc.chArts(0))
|
|
deLetefiles(thIs.cpHysicalpath+"IMG*.gif",thIs.niMagetimeout)
|
|
thIs.ciMagename = "IMG"+SYS(2015)+TRANSFORM(apPlication.prOcessid)+".gif"
|
|
thIs.ooWc.exPortpicture(thIs.cpHysicalpath+thIs.ciMagename,"gif", ;
|
|
thIs.niMagewidth,thIs.niMageheight)
|
|
RETURN '<img src="'+thIs.clOgicalpath+thIs.ciMagename+'">'
|
|
ENDFUNC
|
|
*
|
|
PROCEDURE Clear
|
|
thIs.ooWc.clEar()
|
|
ENDPROC
|
|
*
|
|
FUNCTION ShowGraphInForm
|
|
LPARAMETER lcFormcaption
|
|
LOCAL loForm, as, foRm
|
|
loForm = CREATEOBJECT("GraphForm")
|
|
loForm.adDobject("oPicture","image")
|
|
loForm.heIght = thIs.niMageheight
|
|
loForm.wiDth = thIs.niMagewidth
|
|
loForm.auTocenter = .T.
|
|
IF .NOT. EMPTY(lcFormcaption)
|
|
loForm.caPtion = lcFormcaption
|
|
ENDIF
|
|
loForm.opIcture.leFt = 0
|
|
loForm.opIcture.toP = 0
|
|
loForm.opIcture.heIght = thIs.niMageheight
|
|
loForm.opIcture.wiDth = thIs.niMagewidth
|
|
loForm.opIcture.piCture = thIs.cpHysicalpath+thIs.ciMagename
|
|
loForm.opIcture.viSible = .T.
|
|
loForm.shOw()
|
|
RETURN loForm
|
|
ENDFUNC
|
|
*
|
|
PROCEDURE GetGraphTypes
|
|
LPARAMETER lcCursorname
|
|
IF EMPTY(lcCursorname)
|
|
lcCursorname = "wwWebGraphTypes"
|
|
ENDIF
|
|
CREATE CURSOR (lcCursorname) (naMe C (80), id I)
|
|
TEXT TO lcVar
|
|
#define chChartTypeColumnClustered 0
|
|
#define chChartTypeColumnStacked 1
|
|
#define chChartTypeColumnStacked100 2
|
|
#define chChartTypeBarClustered 3
|
|
#define chChartTypeBarStacked 4
|
|
#define chChartTypeBarStacked100 5
|
|
#define chChartTypeLine 6
|
|
#define chChartTypeLineStacked 8
|
|
#define chChartTypeLineStacked100 10
|
|
#define chChartTypeLineMarkers 7
|
|
#define chChartTypeLineStackedMarkers 9
|
|
#define chChartTypeLineStacked100Markers 11
|
|
#define chChartTypeSmoothLine 12
|
|
#define chChartTypeSmoothLineStacked 14
|
|
#define chChartTypeSmoothLineStacked100 16
|
|
#define chChartTypeSmoothLineMarkers 13
|
|
#define chChartTypeSmoothLineStackedMarkers 15
|
|
#define chChartTypeSmoothLineStacked100Markers 17
|
|
#define chChartTypePie 18
|
|
#define chChartTypePieExploded 19
|
|
#define chChartTypePieStacked 20
|
|
#define chChartTypeScatterMarkers 21
|
|
#define chChartTypeScatterLine 25
|
|
#define chChartTypeScatterLineMarkers 24
|
|
#define chChartTypeScatterLineFilled 26
|
|
#define chChartTypeScatterSmoothLine 23
|
|
#define chChartTypeScatterSmoothLineMarkers 22
|
|
#define chChartTypeBubble 27
|
|
#define chChartTypeBubbleLine 28
|
|
#define chChartTypeArea 29
|
|
#define chChartTypeAreaStacked 30
|
|
#define chChartTypeAreaStacked100 31
|
|
#define chChartTypeDoughnut 32
|
|
#define chChartTypeDoughnutExploded 33
|
|
#define chChartTypeRadarLine 34
|
|
#define chChartTypeRadarLineMarkers 35
|
|
#define chChartTypeRadarLineFilled 36
|
|
#define chChartTypeRadarSmoothLine 37
|
|
#define chChartTypeRadarSmoothLineMarkers 38
|
|
#define chChartTypeStockHLC 39
|
|
#define chChartTypeStockOHLC 40
|
|
#define chChartTypePolarMarkers 41
|
|
#define chChartTypePolarLine 42
|
|
#define chChartTypePolarLineMarkers 43
|
|
#define chChartTypePolarSmoothLine 44
|
|
#define chChartTypePolarSmoothLineMarkers 45
|
|
#define chChartTypeColumn3D 46
|
|
#define chChartTypeColumnClustered3D 47
|
|
#define chChartTypeColumnStacked3D 48
|
|
#define chChartTypeColumnStacked1003D 49
|
|
#define chChartTypeBar3D 50
|
|
#define chChartTypeBarClustered3D 51
|
|
#define chChartTypeBarStacked3D 52
|
|
#define chChartTypeBarStacked1003D 53
|
|
#define chChartTypeLine3D 54
|
|
#define chChartTypeLineOverlapped3D 55
|
|
#define chChartTypeLineStacked3D 56
|
|
#define chChartTypeLineStacked1003D 57
|
|
#define chChartTypePie3D 58
|
|
#define chChartTypePieExploded3D 59
|
|
#define chChartTypeArea3D 60
|
|
#define chChartTypeAreaOverlapped3D 61
|
|
#define chChartTypeAreaStacked3D 62
|
|
#define chChartTypeAreaStacked1003D 63
|
|
ENDTEXT
|
|
lnLines = ALINES(laLines, lcVar)
|
|
FOR x = 1 TO lnLines
|
|
lcValue = exTract(laLines(x)," ",CHR(13), ,.T.)
|
|
INSERT INTO (lcCursorname) (naMe, id) VALUES ;
|
|
(exTract(laLines(x),"#define "," "), VAL(lcValue))
|
|
ENDFOR
|
|
REPLACE naMe WITH STRTRAN(naMe, "chChartType", "") ALL
|
|
ENDPROC
|
|
*
|
|
PROCEDURE SetGraphicsOptions
|
|
LPARAMETER loChart
|
|
RETURN
|
|
ENDPROC
|
|
*
|
|
PROCEDURE nGraphType_Assign
|
|
LPARAMETER lvGraphtype
|
|
IF VARTYPE(lvGraphtype)="N"
|
|
thIs.ngRaphtype = lvGraphtype
|
|
RETURN
|
|
ENDIF
|
|
IF VARTYPE(lvGraphtype)="C"
|
|
lvGraphtype = UPPER(lvGraphtype)
|
|
DO CASE
|
|
CASE lvGraphtype="BAR3D"
|
|
thIs.ngRaphtype = 50
|
|
CASE lvGraphtype="BAR"
|
|
thIs.ngRaphtype = 0
|
|
CASE lvGraphtype="PIE3D"
|
|
thIs.ngRaphtype = 58
|
|
CASE lvGraphtype="PIE"
|
|
thIs.ngRaphtype = 18
|
|
CASE lvGraphtype="PIEEXPLODED3D"
|
|
thIs.ngRaphtype = 59
|
|
CASE lvGraphtype="PIEEXPLODED"
|
|
thIs.ngRaphtype = 19
|
|
CASE lvGraphtype="COLUMN3D"
|
|
thIs.ngRaphtype = 51
|
|
CASE lvGraphtype="COLUMN"
|
|
thIs.ngRaphtype = 3
|
|
CASE lvGraphtype="LINE3D"
|
|
thIs.ngRaphtype = 54
|
|
CASE lvGraphtype="LINEPOINTS"
|
|
thIs.ngRaphtype = 7
|
|
CASE lvGraphtype="LINE"
|
|
thIs.ngRaphtype = 6
|
|
ENDCASE
|
|
ENDIF
|
|
ENDPROC
|
|
*
|
|
ENDDEFINE
|
|
*
|
|
DEFINE CLASS GraphForm AS Form
|
|
shOwwindow = 2
|
|
caPtion = "Graph Results"
|
|
maXbutton = .F.
|
|
boRderstyle = 2
|
|
ENDDEFINE
|
|
*
|
|
FUNCTION IsCOMObject
|
|
LPARAMETER lcProgid, lcClassid, lcClassdescript
|
|
IF EMPTY(lcProgid)
|
|
RETURN .F.
|
|
ENDIF
|
|
loApi = CREATEOBJECT("wwAPI")
|
|
lcClassid = loApi.reAdregistrystring(-2147483648,lcProgid+"\CLSID","")
|
|
IF ISNULL(lcClassid)
|
|
lcClassid = ""
|
|
lcClassdescription = ""
|
|
RETURN .F.
|
|
ENDIF
|
|
lcClassdescript = loApi.reAdregistrystring(-2147483648,lcProgid,"")
|
|
IF ISNULL(lcClassdescript)
|
|
lcClassdescript = ""
|
|
ENDIF
|
|
RETURN .T.
|
|
ENDFUNC
|
|
|
|
FUNCTION DeleteFiles
|
|
PARAMETER lcFilespec, lnTimeout
|
|
PRIVATE lnX, lnFiles, loApi
|
|
lnTimeout = IIF(EMPTY(lnTimeout), 300, lnTimeout)
|
|
lnFiles = ADIR(laFiles, lcFilespec)
|
|
FOR lnX = 1 TO lnFiles
|
|
ldTime = CTOT(DTOC(laFiles(lnX,3))+" "+laFiles(lnX,4))
|
|
IF ldTime+lnTimeout<DATETIME()
|
|
ERASE (ADDBS(JUSTPATH(lcFilespec))+laFiles(lnX,1))
|
|
ENDIF
|
|
ENDFOR
|
|
RETURN .T.
|
|
ENDFUNC |