-- | -- -- 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