domingo, 1 de agosto de 2010

Pie Chart - Facade para o Google Charts

Bom, resolvi desenvolver um facade para o google chart, está super simples de entender. Espero adicionar mais gráficos com o tempo além de dar maior suporte aos principais recursos do GoogleChart.

Exemplo de Uso:
Sub Initialize()
 Dim pie As New Pie(500, 200)
 
 Dim pieSlice As New PieSlice("Felipe","100")
 Call pie.addSlice(pieSlice)
 Set pieSlice = New PieSlice("Rotilho","200")
 Call pie.addSlice(pieSlice)
 Set pieSlice = New PieSlice("FelipeRotilho","150")
 Call pie.addSlice(pieSlice)
 Call pie.setChartType("p3")
 
 Print pie.getURL()
End Sub

Imagem gerada a partir método .getURL

Source Code:
Const errNotImplemented = 13001
Const googleChartURL = "http://chart.apis.google.com/chart?"
%REM
 Class Chart
 Description: Chart class monta um link do Google Chart
 Atualizado no dia 2, de Agosto de 2010.
%END REM
Class Chart
 Private chartType As String
 
 %REM
  Sub setChartType
  Description: Types: p, p3 e pc
 %END REM
 Public Sub setChartType(strType As String)
  chartType = "cht=" + strType + |&|
 End Sub
 
 %REM
  Function getChartType
  Description: Comments for Function
 %END REM
 Public Function getChartType As String
  getChartType = chartType
 End Function
 
 %REM
  Function getURL
  Description: Retorna URL do Google Chart
 %END REM
 Public Function getURL As String
  Error errNotImplemented, "Function não implementada"
 End Function
 
End Class
%REM
 Class Pie
 Description: Comments for Class
%END REM
Class Pie As Chart
 Private x As String
 Private y As String
 Private index As Integer
 Private slices() As PieSlice
 %REM
  Sub New
  Description: Constructor
 %END REM
 Public Sub New(x As Double, y As Double)
  Me.x = CStr(x)
  Me.y = CStr(y)
  Call Me.setChartType("p3")
 End Sub
 
 %REM
  Function getURL
  Description: Comments for Function
 %END REM
 Public Function getURL As String
  Dim link As String
  link = googleChartURL
  link = link + Me.getChartType()
  link = link + Me.getChartSize()
  link = link + Me.getValues()
  link = link + Me.getLabels()
  getURL = link
 End Function
 
 %REM
  Sub addSlice
  Description: Comments for Sub
 %END REM
 Public Sub addSlice(pieSlice As PieSlice)
  Set slices(nextPosition) = pieSlice
 End Sub
 
 
 %REM
  Function getValues
  Description: Comments for Function
 %END REM
 Public Function getValues As String
  Dim values As String
  values = "chd=t:"
  
  Dim i As Integer
  For i = 0 To index - 1
   values = values + slices(i).getValue()
   If i < (index - 1) Then
    values = values + "," 
   End If
  Next
  getValues = values + |&|
 End Function
 
 %REM
  Function getLabels
  Description: Comments for Function
 %END REM
 Public Function getLabels As String
  Dim labels As String
  labels = |chl=|
  
  Dim i As Integer
  For i = 0 To index - 1
   labels = labels + slices(i).getLabel()
   If i < (index - 1) Then
    labels = labels + "|"
   End If
  Next
  getLabels = labels + |&|
 End Function
 
 
 %REM
  Function nextPosition
  Description: Comments for Function
 %END REM
 Private Function nextPosition As Integer
  ReDim Preserve slices(index)
  nextPosition = index
  index = index + 1
 End Function
 
 %REM
  Function getChartSize
  Description: Comments for Function
 %END REM
 Private Function getChartSize As String
  getChartSize = |chs=| +CStr(x) + |x| + CStr(y) + |&|
 End Function
 
End Class
%REM
 Class PieSlice
 Description: Slice of Pie
%END REM
Class PieSlice
 Private label As String
 Private value As String
 %REM
  Sub New
  Description: Comments for Sub
 %END REM
 Public Sub New(label As String, value As String)
  Me.label = label
  Me.value = value
 End Sub
 
 %REM
  Function getLabel
  Description: Comments for Function
 %END REM
 Public Function getLabel As String
  getLabel = label
 End Function
 
 %REM
  Function getValue
  Description: Comments for Function
 %END REM
 Public Function getValue As String
  getValue = value
 End Function
End Class