Chart-fltkhs-0.1.0.4: examples/Example5.hs
{-# LANGUAGE OverloadedStrings
, BangPatterns
, MultiWayIf
, LambdaCase
, TemplateHaskell
#-}
module Main where
import Control.Monad ( void )
import qualified Graphics.UI.FLTK.LowLevel.FL as FL
import Graphics.UI.FLTK.LowLevel.Fl_Types
import Graphics.UI.FLTK.LowLevel.FLTKHS as FL
import Control.Lens
import Graphics.Rendering.Chart.Easy as Ch
import Graphics.Rendering.Chart.Backend.FLTKHS
values :: [ (String,Double,Bool) ]
values = [ ("Mexico City",19.2,False), ("Mumbai",12.9,False), ("Sydney",4.3,False), ("London",8.3,False), ("New York",8.2,True) ]
pitem (s,v,o) = pitem_value .~ v
$ pitem_label .~ s
$ pitem_offset .~ (if o then 25 else 0)
$ def
chart = toRenderable layout
where
values = [ ("Mexico City",19.2,e), ("Mumbai",12.9,e), ("Sydney",4.3,e), ("London",8.3,e), ("New York",8.2,e1) ]
e = 0
e1 = 25
pitem (s,v,o) = pitem_value .~ v
$ pitem_label .~ s
$ pitem_offset .~ o
$ def
layout = pie_title .~ "Relative Population"
$ pie_plot . pie_data .~ map pitem values
$ def
drawChart :: Ref Widget -> IO ()
drawChart widget = do
rectangle' <- getRectangle widget
withFlClip rectangle' $
renderToWidgetEC widget $ do
pie_title .= "Relative Population"
pie_plot . pie_data .= map pitem values
main :: IO ()
main = do
let width = 800
height = 600
window' <- doubleWindowNew (Size (Width width) (Height height))
Nothing
Nothing
begin window'
widget' <- widgetCustom
(FL.Rectangle (Position (X 0) (Y 0)) (Size (Width width) (Height height)))
Nothing
drawChart
defaultCustomWidgetFuncs
end window'
showWidget window'
void FL.run