HPlot-0.3: Example.hs
-- |
--
-- Demonstrates the basic usage of the PlplotCanvas
-- to embed a plot in a Gnome application.
--
-- (C) Yakov ZAYTSEV, Roman Salmin, 2009
--
module Main where
import Graphics.UI.Gtk
import Graphics.UI.Gtk.Glade
import Graphics.UI.Gtk.Gdk.Events
import Graphics.PLplot
type PlotData = [(Double, Double)]
data1 = [(i, i*i / 10) | i <- [1..10]] :: PlotData
data2 = [(i, 5 - abs (i - 5)) | i <- [0..10]] :: PlotData
main = drawWithHPlot example2
example2 :: (PLplot p) => PLplotM p ()
example2 = do
ssub 2 1
adv 0
plotList [(line, data1, ["x", "y", "y = x*x / 10"])
, (bin [BinCentred], data2, ["some", "some value", "something"])]
plotList :: (PLplot p) => [(PlotData -> PLplotM p (), PlotData, [String])]-> PLplotM p ()
plotList [] = adv 0
plotList (x:xs) = plotOneHlp x >> adv 0 >> plotList xs
plotOneHlp :: (PLplot p) => (PlotData -> PLplotM p (), PlotData, [String])-> PLplotM p ()
plotOneHlp (f, content, titles) = do
col0 15 -- Set color to black
wid 2 -- Set the pen width
vsta -- Set the viewport
let minx = minimum $ map fst content
let maxx = maximum $ map fst content
let miny = minimum $ map snd content
let maxy = maximum $ map snd content
wind (minx - 0.5) (maxx + 0.5) miny (maxy + 1) -- Set the window
box "bcnst" 0.0 0 "bcnstv" 0.0 0 -- Set the box
lab (titles !! 0) (titles !! 1) (titles !! 2) -- Draw some labels
-- Draw the line
col0 1 -- Set the pen color
f content
drawWithHPlot :: PLplotM PlplotCanvas () -> IO ()
drawWithHPlot plotf = do
initGUI
Just xml <- xmlNew "example.glade"
window1 <- xmlGetWidget xml castToWindow "window1"
onDestroy window1 mainQuit
onKeyPress window1 keyHandler
canvas <- plplotCanvasNew
plplotCanvasSetSize canvas 1000 700
containerAdd window1 canvas
widgetShowAll window1
runPLplot canvas $ plotf
mainGUI
keyHandler :: Event -> IO Bool
keyHandler ekey = do
let key = eventKeyName ekey
if (key == "q" || key == "Q")
then mainQuit >> return True
else return True