module Graphics.GChart.ChartItems.Data where import Graphics.GChart.Types import Graphics.GChart.ChartItems.Util import Graphics.GChart.DataEncoding import Data.List(intercalate) -- Chart Data 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])