module Graphics.GChart.ChartItems.Data where
import Graphics.GChart.Types
import Graphics.GChart.ChartItems.Util
import Graphics.GChart.DataEncoding
import Data.List(intercalate)
instance ChartItem ChartData where
set cData = updateChart $ \chart -> chart { chartData = Just cData }
encode datas = asList ("chd", encodeData datas)
where encodeData (Simple d) = encodeSimple d
encodeData (Text d) = encodeText d
encodeData (Extended d) = encodeExtended d
instance ChartItem ChartDataScales where
set scales = updateChart $ \chart -> chart { chartDataScales = Just scales }
encode (CDS scales) = asList ("chds", intercalate "," $ map (\(min,max) -> showFloat min ++ "," ++ showFloat max) scales)
instance ChartDataEncodable Int where
addEncodedChartData d cd@(Simple old) = Simple $ old ++ [d]
addEncodedChartData d cd@(Extended old) = Extended $ old ++ [d]
addEncodedChartData d _ = error "Invalid type for specified encoding. Use float data"
instance ChartDataEncodable Float where
addEncodedChartData d cd@(Text old) = Text $ old ++ [d]
addEncodedChartData d _ = error "Invalid type for specified encoding. Use int data"
instance ChartItem QREncoding where
set qrEnc = updateChart $ \chart -> chart { qrEncoding = Just qrEnc }
encode qrEnc = asList ("choe", encStr)
where encStr = case qrEnc of
UTF8 -> "UTF-8"
Shift_JIS -> "Shift_JIS"
ISO8859_1 -> "ISO-8859-1"
instance ChartItem ChartLabelData where
set chld = updateChart $ \chart -> chart { chartLabelData = Just chld }
encode (QRLabelData ec m) = asList ("chld", concat [show ec, "|", show m])