summaryrefslogtreecommitdiffstats
path: root/testsuites/vstf/vstf_scripts/vstf/controller/reporters/report/pdf/element.py
diff options
context:
space:
mode:
Diffstat (limited to 'testsuites/vstf/vstf_scripts/vstf/controller/reporters/report/pdf/element.py')
-rw-r--r--testsuites/vstf/vstf_scripts/vstf/controller/reporters/report/pdf/element.py821
1 files changed, 0 insertions, 821 deletions
diff --git a/testsuites/vstf/vstf_scripts/vstf/controller/reporters/report/pdf/element.py b/testsuites/vstf/vstf_scripts/vstf/controller/reporters/report/pdf/element.py
deleted file mode 100644
index 6622281b..00000000
--- a/testsuites/vstf/vstf_scripts/vstf/controller/reporters/report/pdf/element.py
+++ /dev/null
@@ -1,821 +0,0 @@
-##############################################################################
-# Copyright (c) 2015 Huawei Technologies Co.,Ltd and others.
-#
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Apache License, Version 2.0
-# which accompanies this distribution, and is available at
-# http://www.apache.org/licenses/LICENSE-2.0
-##############################################################################
-
-
-__doc__ = """
-it contains the base element for pdf
-eImage is used to draw picture on the pdf document
-eDataTable is used to draw table on the pdf document
-eGraphicsTable is used to draw plot on the pdf document
-eParagraph is used to draw text on the pdf document
-"""
-from reportlab.platypus import Image, Table
-from reportlab.graphics.shapes import Drawing
-from reportlab.graphics.charts.lineplots import LinePlot
-from reportlab.graphics.charts.linecharts import HorizontalLineChart
-from reportlab.platypus.paragraph import Paragraph
-from reportlab.graphics.widgets.markers import makeMarker
-from reportlab.graphics.charts.legends import Legend
-from reportlab.graphics.charts.textlabels import Label
-from reportlab.graphics.charts.axes import XValueAxis
-from reportlab.graphics.shapes import Group
-from reportlab.graphics.charts.barcharts import VerticalBarChart
-from vstf.controller.reporters.report.pdf.styles import *
-
-
-class eImage(Image):
- """ an image(digital picture)which contains the function of auto zoom picture """
-
- def __init__(
- self,
- filename,
- width=None,
- height=None,
- kind='direct',
- mask="auto",
- lazy=1,
- hAlign='CENTRE',
- vAlign='BOTTOM'):
- Image.__init__(self, filename, None, None, kind, mask, lazy)
- print height, width
- print self.drawHeight, self.drawWidth
- if self.drawWidth * height > self.drawHeight * width:
- self.drawHeight = width * self.drawHeight / self.drawWidth
- self.drawWidth = width
- else:
- self.drawWidth = height * self.drawWidth / self.drawHeight
- self.drawHeight = height
- self.hAlign = hAlign
- self.vAlign = vAlign
- print self.drawHeight, self.drawWidth
-
-
-class eTable(object):
- """ an abstract table class, which is contains the base functions to create table """
-
- def __init__(self, data, style=TableStyle(name="default")):
- self._tablestyle = style
- self._table = []
- self._spin = False
- self._colWidths = None
- self._data = self.analysisData(data)
- if self._data:
- self.create()
-
- def analysisData(self, data):
- raise NotImplementedError("abstract eTable")
-
- def create(self):
- self._table = Table(self._data, style=self._style, splitByRow=1)
- self._table.hAlign = self._tablestyle.table_hAlign
- self._table.vAlign = self._tablestyle.table_vAlign
- self._table.colWidths = self._tablestyle.table_colWidths
- if self._spin or self._colWidths:
- self._table.colWidths = self._colWidths
- self._table.rowHeights = self._tablestyle.table_rowHeights
-
- @property
- def table(self):
- return self._table
-
-
-class eCommonTable(eTable):
-
- def analysisData(self, data):
- self._style = [
- ('ALIGN', (0, 0), (-1, -1), 'CENTER'),
- ('VALIGN', (0, 0), (-1, -1), 'MIDDLE'),
- ('GRID', (0, 0), (-1, -1), 0.5, colors.grey),
- ('BOX', (0, 0), (-1, -1), 1.2, colors.black)
- ]
- return data
-
-
-class eConfigTable(eTable):
-
- def analysisData(self, data):
- self._style = [
- ('ALIGN', (0, 0), (-1, -1), 'CENTER'),
- ('VALIGN', (0, 0), (-1, -1), 'MIDDLE'),
- ('GRID', (0, 0), (-1, -1), 0.5, colors.grey),
- ('BOX', (0, 0), (-1, -1), 1, colors.black),
- ('SPAN', (2, 0), (3, 0)),
- ('SPAN', (2, 1), (3, 1)),
- ('SPAN', (2, 8), (3, 8)),
- ('SPAN', (2, 9), (3, 9)),
- ('SPAN', (2, 10), (3, 10)),
- ('SPAN', (0, 0), (0, 7)),
- ('SPAN', (0, 8), (0, 10)),
- ('SPAN', (0, 11), (0, 19)),
- ('SPAN', (1, 2), (1, 6)),
- ('SPAN', (1, 12), (1, 13)),
- ('SPAN', (1, 14), (1, 16)),
- ('SPAN', (1, 17), (1, 19)),
- ('SPAN', (2, 3), (2, 6))
- ]
- return data
-
-
-class eSummaryTable(eTable):
-
- def analysisData(self, data):
- self._style = [
- ('ALIGN', (0, 0), (-1, -1), 'CENTER'),
- ('VALIGN', (0, 0), (-1, -1), 'MIDDLE'),
- ('GRID', (0, 0), (-1, -1), 0.5, colors.grey),
- ('BOX', (0, 0), (-1, -1), 1, colors.black),
- ('SPAN', (0, 0), (0, 1)),
- ('SPAN', (1, 0), (4, 0)),
- ('SPAN', (5, 0), (-1, 0))
- ]
- return data
-
-
-class eGitInfoTable(eTable):
-
- def analysisData(self, data):
- self._style = [
- ('ALIGN', (0, 0), (-1, -1), 'CENTER'),
- ('VALIGN', (0, 0), (-1, -1), 'MIDDLE'),
- ('GRID', (0, 0), (-1, -1), 0.5, colors.grey),
- ('BOX', (0, 0), (-1, -1), 1, colors.black),
- ('SPAN', (0, 0), (0, 2)),
- ('SPAN', (0, 3), (0, 5)),
- ('SPAN', (0, 6), (0, 8))
- ]
- return data
-
-
-class eScenarioTable(eTable):
-
- def analysisData(self, data):
- self._style = [
- ('ALIGN', (0, 0), (-1, -1), 'CENTER'),
- ('VALIGN', (0, 0), (-1, -1), 'MIDDLE'),
- ('GRID', (0, 0), (-1, -1), 0.5, colors.grey),
- ('BOX', (0, 0), (-1, -1), 1, colors.black),
- ('ALIGN', (2, 1), (-1, -1), 'LEFT'),
- ('SPAN', (0, 1), (0, 6)),
- ('SPAN', (0, 7), (0, 12)),
- ('SPAN', (0, 13), (0, 16)),
- ('SPAN', (0, 17), (0, 20))
- ]
- return data
-
-
-class eOptionsTable(eTable):
-
- def analysisData(self, data):
- self._style = [
- ('ALIGN', (0, 0), (-1, -1), 'CENTER'),
- ('VALIGN', (0, 0), (-1, -1), 'MIDDLE'),
- ('GRID', (0, 0), (-1, -1), 0.5, colors.grey),
- ('BOX', (0, 0), (-1, -1), 1, colors.black),
- ('SPAN', (2, 0), (4, 0)),
- ('SPAN', (2, 1), (4, 1)),
- ('SPAN', (0, 0), (0, -1)),
- ('SPAN', (1, 2), (1, 16)),
- ('SPAN', (1, 17), (1, 19)),
- ('SPAN', (1, 20), (1, 22)),
- ('SPAN', (1, 23), (1, 24)),
- ('SPAN', (2, 2), (2, 4)),
- ('SPAN', (2, 5), (2, 12)),
- ('SPAN', (2, 13), (2, 16)),
- ('SPAN', (2, 17), (2, 19)),
- ('SPAN', (2, 20), (2, 22)),
- ('SPAN', (2, 23), (2, 24))
- ]
- return data
-
-
-class eProfileTable(eTable):
-
- def analysisData(self, data):
- self._style = [
- ('ALIGN', (0, 0), (-1, -1), 'CENTER'),
- ('VALIGN', (0, 0), (-1, -1), 'MIDDLE'),
- ('GRID', (0, 0), (-1, -1), 0.5, colors.grey),
- ('BOX', (0, 0), (-1, -1), 1, colors.black),
- ('SPAN', (0, 1), (0, -1)),
- ('SPAN', (1, 0), (2, 0)),
- ]
- return data
-
-
-class eDataTable(eTable):
-
- def analysisData(self, data):
- result = data
- self._style = [
- ('ALIGN', (0, 0), (-1, -1), 'CENTER'),
- ('VALIGN', (0, 0), (-1, -1), 'MIDDLE'),
- ('LEADING', (0, 0), (-1, -1), 18),
- ('GRID', (0, 0), (-1, -1), 0.5, colors.grey),
- ('BOX', (0, 0), (-1, -1), 1, colors.black),
- ('LINEBEFORE', (1, 0), (1, -1), 0.8, colors.black),
- # ('LINEBEFORE', (3, 0), (3, -1), 1, colors.black),
- # ('LINEBEFORE', (5, 0), (5, -1), 1, colors.black),
- ('LINEBELOW', (0, 0), (-1, 0), 0.8, colors.black),
- # ('SPAN', (0, 0), (0, 1)),
- # ('SPAN', (1, 0), (2, 0)),
- # ('SPAN', (3, 0), (4, 0))
- ]
- if self._spin is True:
- print "start spin"
- result = map(list, zip(*result))
- style = []
- for value in self._style:
- value = list(value)
- value[1] = (value[1][1], value[1][0])
- value[2] = (value[2][1], value[2][0])
- if value[0] == 'LINEBELOW':
- value[0] = 'LINEAFTER'
- elif value[0] == 'LINEBEFORE':
- value[0] = 'LINEABOVE'
- value = tuple(value)
- style.append(value)
- self._style = style
- return result
-
-
-class eGraphicsTable(eTable):
-
- def analysisData(self, data):
- self._style = [
- ('ALIGN', (0, 0), (-1, -1), 'CENTER'),
- ('VALIGN', (0, 0), (-1, -1), 'MIDDLE')
- ]
- return data
-
-
-class noScaleXValueAxis(XValueAxis):
-
- def __init__(self):
- XValueAxis.__init__(self)
-
- def makeTickLabels(self):
- g = Group()
- if not self.visibleLabels:
- return g
-
- f = self._labelTextFormat # perhaps someone already set it
- if f is None:
- f = self.labelTextFormat or (self._allIntTicks() and '%.0f' or str)
- elif f is str and self._allIntTicks():
- f = '%.0f'
- elif hasattr(f, 'calcPlaces'):
- f.calcPlaces(self._tickValues)
- post = self.labelTextPostFormat
- scl = self.labelTextScale
- pos = [self._x, self._y]
- d = self._dataIndex
- pos[1 - d] = self._labelAxisPos()
- labels = self.labels
- if self.skipEndL != 'none':
- if self.isXAxis:
- sk = self._x
- else:
- sk = self._y
- if self.skipEndL == 'start':
- sk = [sk]
- else:
- sk = [sk, sk + self._length]
- if self.skipEndL == 'end':
- del sk[0]
- else:
- sk = []
-
- nticks = len(self._tickValues)
- nticks1 = nticks - 1
- for i, tick in enumerate(self._tickValues):
- label = i - nticks
- if label in labels:
- label = labels[label]
- else:
- label = labels[i]
- if f and label.visible:
- v = self.scale(i)
- if sk:
- for skv in sk:
- if abs(skv - v) < 1e-6:
- v = None
- break
- if v is not None:
- if scl is not None:
- t = tick * scl
- else:
- t = tick
- if isinstance(f, str):
- txt = f % t
- elif isSeq(f):
- # it's a list, use as many items as we get
- if i < len(f):
- txt = f[i]
- else:
- txt = ''
- elif hasattr(f, '__call__'):
- if isinstance(f, TickLabeller):
- txt = f(self, t)
- else:
- txt = f(t)
- else:
- raise ValueError('Invalid labelTextFormat %s' % f)
- if post:
- txt = post % txt
- pos[d] = v
- label.setOrigin(*pos)
- label.setText(txt)
-
- # special property to ensure a label doesn't project beyond
- # the bounds of an x-axis
- if self.keepTickLabelsInside:
- if isinstance(
- self, XValueAxis): # not done yet for y axes
- a_x = self._x
- if not i: # first one
- x0, y0, x1, y1 = label.getBounds()
- if x0 < a_x:
- label = label.clone(dx=label.dx + a_x - x0)
- if i == nticks1: # final one
- a_x1 = a_x + self._length
- x0, y0, x1, y1 = label.getBounds()
- if x1 > a_x1:
- label = label.clone(
- dx=label.dx - x1 + a_x1)
- g.add(label)
-
- return g
-
- def ___calcScaleFactor(self):
- """Calculate the axis' scale factor.
- This should be called only *after* the axis' range is set.
- Returns a number.
- """
- self._scaleFactor = self._length / (len(self._tickValues) + 1)
- return self._scaleFactor
-
- def scale(self, value):
- """Converts a numeric value to a plotarea position.
- The chart first configures the axis, then asks it to
- """
- assert self._configured, "Axis cannot scale numbers before it is configured"
- if value is None:
- value = 0
- # this could be made more efficient by moving the definition of org and
- # sf into the configuration
- org = (self._x, self._y)[self._dataIndex]
- sf = self._length / (len(self._tickValues) + 1)
- if self.reverseDirection:
- sf = -sf
- org += self._length
- return org + sf * (value + 1)
-
-
-class noScaleLinePlot(LinePlot):
-
- def __init__(self):
- LinePlot.__init__(self)
- self.xValueAxis = noScaleXValueAxis()
-
- def calcPositions(self):
- """Works out where they go.
-
- Sets an attribute _positions which is a list of
- lists of (x, y) matching the data.
- """
- self._seriesCount = len(self.data)
- self._rowLength = max(map(len, self.data))
-
- self._positions = []
- for rowNo in range(len(self.data)):
- line = []
- len_row = len(self.data[rowNo])
- for colNo in range(len_row):
- datum = self.data[rowNo][colNo] # x, y value
- x = self.x + self.width / (len_row + 1) * (colNo + 1)
- self.xValueAxis.labels[colNo].x = self.x + \
- self.width / (len_row + 1) * (colNo + 1)
- y = self.yValueAxis.scale(datum[1])
- # print self.width, " ", x
- line.append((x, y))
- self._positions.append(line)
-
-
-# def _innerDrawLabel(self, rowNo, colNo, x, y):
-# return None
-class eLinePlot(object):
-
- def __init__(self, data, style):
- self._lpstyle = style
- self._linename = data[0]
- self._data = self.analysisData(data[1:])
- if self._data:
- self.create()
-
- @property
- def draw(self):
- return self._draw
-
- def analysisData(self, data):
- columns = len(data)
- # print data
- data = map(list, zip(*data))
- rows = len(data)
-
- for i in range(rows):
- for j in range(columns):
- data[i][j] = float(data[i][j])
- self._linename = self._linename[1:]
- """
- delcnt = 0
- delrows = []
- for i in range(columns):
- delrows.append(0.0)
- del_line = [self._linename[0]]
- for i in range(rows):
- for j in range(columns):
- data[i][j] = float(data[i][j])
- if data[i] == delrows:
- delcnt += 1
- del_line.append(self._linename[i])
- for i in range(delcnt):
- data.remove(delrows)
- for name in del_line:
- self._linename.remove(name)
-
- rows = len(data)
- """
- # print rows
- # print data
- xvalueSteps = data[0]
- xvalueMin = data[0][0]
- xvalueMax = data[0][0]
- yvalueMin = data[1][0]
- yvalueMax = data[1][0]
- yvalueSteps = []
- result = []
- for j in range(columns):
- if xvalueMin > data[0][j]:
- xvalueMin = data[0][j]
- if xvalueMax < data[0][j]:
- xvalueMax = data[0][j]
-
- for i in range(rows - 1):
- lst = []
- for j in range(columns):
- lst.append((data[0][j], data[i + 1][j]))
- if yvalueMin > data[i + 1][j]:
- yvalueMin = data[i + 1][j]
- if yvalueMax < data[i + 1][j]:
- yvalueMax = data[i + 1][j]
- yvalueSteps.append(int(data[i + 1][j] * 2.5) / 2.5)
- result.append(tuple(lst))
- xvalueMin = int(xvalueMin) / 100 * 100
- xvalueMax = int(xvalueMax) / 100 * 100 + 200
- yvalueMin = int(yvalueMin) * 1.0 - 1
- if yvalueMin < 0:
- yvalueMin = 0.0
- yvalueMax = int(yvalueMax) + 2.0
- yvalueSteps.append(yvalueMin)
- yvalueSteps.append(yvalueMax)
- yvalueSteps = {}.fromkeys(yvalueSteps).keys()
-
- self._xvalue = (xvalueMin, xvalueMax, xvalueSteps)
- self._yvalue = (yvalueMin, yvalueMax, yvalueSteps)
- print result
- return result
-
- def create(self):
- lpw = self._lpstyle.width
- lph = self._lpstyle.height
- draw = Drawing(lpw, lph)
- line_cnts = len(self._linename)
- # lp = noScaleLinePlot()
- lp = LinePlot()
- lg_line = (line_cnts + 3) / 4
- lp.x = self._lpstyle.left
- lp.y = self._lpstyle.bottom
-
- lp.height = lph - self._lpstyle.bottom * (lg_line + 1.5)
- lp.width = lpw - lp.x * 2
- lp.data = self._data
- lp.joinedLines = 1
- lp.strokeWidth = self._lpstyle.strokeWidth
- line_cnts = len(self._data)
- sytle_cnts = len(self._lpstyle.linestyle)
- color_paris = []
- for i in range(line_cnts):
- styleIndex = i % sytle_cnts
- lp.lines[i].strokeColor = self._lpstyle.linestyle[styleIndex][0]
- lp.lines[i].symbol = makeMarker(
- self._lpstyle.linestyle[styleIndex][1])
- lp.lines[i].strokeWidth = self._lpstyle.linestyle[styleIndex][2]
- color_paris.append(
- (self._lpstyle.linestyle[styleIndex][0], self._linename[i]))
- # lp.lineLabels[i].strokeColor = self._lpstyle.linestyle[styleIndex][0]
-
- lp.lineLabelFormat = self._lpstyle.format[0]
-
- lp.strokeColor = self._lpstyle.strokeColor
-
- lp.xValueAxis.valueMin, lp.xValueAxis.valueMax, lp.xValueAxis.valueSteps = self._xvalue
- # valueMin, valueMax, xvalueSteps = self._xvalue
- # lp.xValueAxis.valueStep = (lp.xValueAxis.valueMax - lp.xValueAxis.valueMin)/len(xvalueSteps)
- # lp.xValueAxis.valueSteps = map(lambda x: str(x), xvalueSteps)
-
- lp.yValueAxis.valueMin, lp.yValueAxis.valueMax, lp.yValueAxis.valueSteps = self._yvalue
-
- # lp.xValueAxis.forceZero = 0
- # lp.xValueAxis.avoidBoundFrac = 1
- # lp.xValueAxis.tickDown = 3
- # lp.xValueAxis.visibleGrid = 1
- # lp.xValueAxis.categoryNames = '64 256 512 1400 1500 4096'.split(' ')
-
- lp.xValueAxis.labelTextFormat = self._lpstyle.format[1]
- lp.yValueAxis.labelTextFormat = self._lpstyle.format[2]
-
- delsize = int(lp.xValueAxis.valueMax / 2000)
- lp.xValueAxis.labels.fontSize = self._lpstyle.labelsfont
- lp.xValueAxis.labels.angle = 25
-
- lp.yValueAxis.labels.fontSize = self._lpstyle.labelsfont
- lp.lineLabels.fontSize = self._lpstyle.labelsfont - delsize
- draw.add(lp)
-
- lg = Legend()
- lg.colorNamePairs = color_paris
- lg.fontName = 'Helvetica'
- lg.fontSize = 7
-
- lg.x = self._lpstyle.left * 3
- lg.y = self._lpstyle.bottom * (1 + lg_line) + lp.height
-
- lg.dxTextSpace = 5
- lg.dy = 5
- lg.dx = 20
- lg.deltax = 60
- lg.deltay = 0
- lg.columnMaximum = 1
- lg.alignment = 'right'
- draw.add(lg)
- self._draw = draw
-
-
-class eHorizontalLineChart(object):
-
- def __init__(self, data, style):
- self._lcstyle = style
- if len(data) < 1:
- return
- self._linename = data[0]
- self._data = self.analysisData(data[1:])
- if self._data:
- self.create()
-
- @property
- def draw(self):
- return self._draw
-
- def analysisData(self, data):
- columns = len(data)
- data = map(list, zip(*data))
- self._catNames = data[0]
- self._linename = self._linename[1:]
- data = data[1:]
- rows = len(data)
-
- yvalueMin = float(data[0][0])
- yvalueMax = float(data[0][0])
- yvalueSteps = []
- result = []
-
- for rowNo in range(rows):
- for columnNo in range(columns):
- data[rowNo][columnNo] = float(data[rowNo][columnNo])
- if yvalueMin > data[rowNo][columnNo]:
- yvalueMin = data[rowNo][columnNo]
- if yvalueMax < data[rowNo][columnNo]:
- yvalueMax = data[rowNo][columnNo]
- yvalueSteps.append(int(data[rowNo][columnNo] * 1.0) / 1.0)
- result.append(tuple(data[rowNo]))
-
- yvalueMin = int(yvalueMin) * 1.0 - 1
- if yvalueMin < 0:
- yvalueMin = 0.0
- yvalueMax = int(yvalueMax) + 2.0
- yvalueSteps.append(yvalueMin)
- yvalueSteps.append(yvalueMax)
- yvalueSteps = {}.fromkeys(yvalueSteps).keys()
-
- self._value = (yvalueMin, yvalueMax, yvalueSteps)
- print result
- return result
-
- def create(self):
- dw = self._lcstyle.width
- dh = self._lcstyle.height
- draw = Drawing(dw, dh)
-
- lc = HorizontalLineChart()
- line_cnts = len(self._linename)
-
- lg_line = (line_cnts + 3) / 4
- lc.height = dh - self._lcstyle.bottom * (lg_line + 1.5)
- lc.width = dw - lc.x * 2
- lc.x = self._lcstyle.left
- lc.y = self._lcstyle.bottom
-
- lc.data = self._data
-
- lc.strokeColor = self._lcstyle.strokeColor
- lc.strokeWidth = self._lcstyle.strokeWidth
- lc.useAbsolute = 1
- lc.groupSpacing = lc.width * 2.0 / len(self._catNames)
- lc.joinedLines = 1
- lc.lineLabelFormat = self._lcstyle.format[0]
-
- lc.valueAxis.valueMin, lc.valueAxis.valueMax, lc.valueAxis.valueSteps = self._value
- lc.valueAxis.labelTextFormat = self._lcstyle.format[1]
- lc.valueAxis.labels.fontSize = self._lcstyle.labelsfont
-
- lc.categoryAxis.categoryNames = self._catNames
- lc.categoryAxis.labels.boxAnchor = 'ne'
- lc.categoryAxis.labels.dx = lc.width / 2.0 / len(self._catNames)
- lc.categoryAxis.labels.dy = -6
- lc.categoryAxis.labels.angle = 10
- lc.categoryAxis.labels.fontSize = self._lcstyle.labelsfont
- # lc.categoryAxis.visibleGrid = 1
- # lc.categoryAxis.tickUp = 100
- # lc.categoryAxis.tickDown = 50
- # lc.categoryAxis.gridEnd = dh
- sytle_cnts = len(self._lcstyle.linestyle)
- color_paris = []
- for i in range(line_cnts):
- styleIndex = i % sytle_cnts
- lc.lines[i].strokeColor = self._lcstyle.linestyle[styleIndex][0]
- lc.lines[i].symbol = makeMarker(
- self._lcstyle.linestyle[styleIndex][1])
- lc.lines[i].strokeWidth = self._lcstyle.linestyle[styleIndex][2]
- color_paris.append(
- (self._lcstyle.linestyle[styleIndex][0], self._linename[i]))
-
- lc.lineLabels.fontSize = self._lcstyle.labelsfont - 2
-
- draw.add(lc)
-
- lg = Legend()
- lg.colorNamePairs = color_paris
- lg.fontName = 'Helvetica'
- lg.fontSize = 7
- # lg.x = dw /2
- # lg.y = self._lcstyle.bottom *(1.5 + lg_line)
-
- lg.x = self._lcstyle.left * 3
- lg.y = self._lcstyle.bottom * (1 + lg_line) + lc.height
-
- lg.dxTextSpace = 5
- lg.dy = 5
- lg.dx = 20
- lg.deltax = 60
- lg.deltay = 0
- lg.columnMaximum = 1
- lg.alignment = 'right'
- draw.add(lg)
- self._draw = draw
-
-
-class eBarChartColumn(object):
-
- def __init__(self, data, style):
- self._bcstyle = style
- if len(data) < 4:
- return
- self._data = self.analysisData(data)
- if self._data:
- self.create()
-
- @property
- def draw(self):
- return self._draw
-
- def analysisData(self, data):
- self._ytitle = data[0]
- self._name = data[1]
- self._bar = data[2]
- bar_data = data[3]
- result = []
- for bar in bar_data:
- bar = map(lambda x: float(x), bar)
- result.append(tuple(bar))
- return result
-
- def create(self):
- dw = self._bcstyle.width
- dh = self._bcstyle.height
- draw = Drawing(dw, dh)
-
- bc = VerticalBarChart()
- bar_cnt = len(self._bar)
- lg_line = (bar_cnt + 3) / 4
-
- bc.width = dw - self._bcstyle.left - self._bcstyle.right
- bc.height = dh - self._bcstyle.top - self._bcstyle.bottom
- if bar_cnt > 1:
- bc.height -= lg_line * 15
-
- bc.x = self._bcstyle.left
- bc.y = self._bcstyle.bottom
- color_paris = []
- for i in range(bar_cnt):
- bc.bars[i].fillColor = self._bcstyle.pillarstyle[self._bar[i]][0]
- color_paris.append(
- (self._bcstyle.pillarstyle[
- self._bar[i]][0],
- self._bar[i]))
-
- bc.fillColor = self._bcstyle.background
- bc.barLabels.fontName = 'Helvetica'
- bc.barLabelFormat = self._bcstyle.pillarstyle[self._bar[0]][1]
- bc.barLabels.fontSize = self._bcstyle.labelsfont
- bc.barLabels.dy = self._bcstyle.labelsfont
- bc.valueAxis.labels.fontName = 'Helvetica'
- bc.valueAxis.labels.fontSize = self._bcstyle.labelsfont
- bc.valueAxis.forceZero = 1
- bc.valueAxis.valueMin = 0
-
- bc.data = self._data
- bc.barSpacing = self._bcstyle.barSpacing
- bc.groupSpacing = self._bcstyle.groupSpacing / bar_cnt
- bc.valueAxis.avoidBoundFrac = 1
- bc.valueAxis.gridEnd = dw - self._bcstyle.right
- bc.valueAxis.tickLeft = self._bcstyle.tick
- bc.valueAxis.visibleGrid = 1
- bc.categoryAxis.categoryNames = self._name
- bc.categoryAxis.tickDown = self._bcstyle.tick
- bc.categoryAxis.labels.fontName = 'Helvetica'
- bc.categoryAxis.labels.fontSize = self._bcstyle.labelsfont
- bc.categoryAxis.labels.dy = -27
- bc.categoryAxis.labels.angle = -90
- draw.add(bc)
- lb = Label()
- lb.fontName = 'Helvetica'
- lb.fontSize = 7
- lb.x = 12
- lb.y = 80
- lb.angle = 90
- lb.textAnchor = 'middle'
- lb.maxWidth = 100
- lb.height = 20
- lb._text = self._ytitle
- draw.add(lb)
- if bar_cnt > 1:
- lg = Legend()
- lg.colorNamePairs = color_paris
- lg.fontName = 'Helvetica'
- lg.fontSize = 7
-
- lg.x = self._bcstyle.left + bc.width / (bar_cnt + 1)
- lg.y = dh - self._bcstyle.top - lg_line * 5
-
- lg.dxTextSpace = 5
- lg.dy = 5
- lg.dx = 25
- lg.deltax = 80
- lg.deltay = 0
- lg.columnMaximum = 1
- lg.alignment = 'right'
- draw.add(lg)
-
- self._draw = draw
-
-
-class eParagraph(object):
-
- def __init__(self, data, style):
- self._pstyle = style
- self._data = self.analysisData(data)
- self.create()
-
- def analysisData(self, data):
- result = ""
- for dstr in data:
- if self._pstyle.name == 'ps_body':
- # dstr = "<i>" + dstr + "</i><br/>"
- dstr = dstr + "<br/>"
- else:
- dstr = dstr + "<br/>"
- result += dstr
- return result
-
- def create(self):
- self._para = Paragraph(self._data, self._pstyle)
-
- @property
- def para(self):
- return self._para