AERN-RnToRm-Plot 0.2.0.1 → 0.2.0.2
raw patch · 6 files changed
+594/−593 lines, 6 files
Files
- AERN-RnToRm-Plot.cabal +3/−3
- ChangeLog +1/−0
- demos/Demo.hs +0/−124
- demos/FnView.glade +0/−466
- examples/Demo.hs +124/−0
- examples/FnView.glade +466/−0
AERN-RnToRm-Plot.cabal view
@@ -1,5 +1,5 @@ Name: AERN-RnToRm-Plot-Version: 0.2.0.1+Version: 0.2.0.2 Cabal-Version: >= 1.2 Build-Type: Simple License: BSD3@@ -16,9 +16,9 @@ This library extends AERN-RnToRm with support for plotting unary function enclosures in any GL context and a Gtk window for inspecting these enclosures. .- Simple examples of usage can be found in module @Demo.hs@ in folder @tests@.+ Simple examples of usage can be found in module @Demo.hs@ in folder @examples@. Extra-source-files:- demos/Demo.hs demos/FnView.glade src/FnView.glade+ examples/Demo.hs examples/FnView.glade src/FnView.glade ChangeLog README.glade Library
ChangeLog view
@@ -1,3 +1,4 @@+0.2.0.2: 29 July 2009: renamed "demos" folder to "examples" 0.2.0.1: 29 July 2009: fixed dependencies 0.2: 29 July 2009 * enabled mouse zooming and panning in the GL canvas
− demos/Demo.hs
@@ -1,124 +0,0 @@-module Main where--import qualified Data.Number.ER.Real as AERN-import qualified Data.Number.ER.RnToRm as AERNFunc-import qualified Data.Number.ER.RnToRm.Plot.FnView as FNV--import Control.Concurrent as Concurrent-import Control.Concurrent.STM as STM--import qualified Graphics.UI.Gtk as Gtk-import Graphics.UI.Gtk (AttrOp((:=)))-import qualified Graphics.UI.Gtk.Glade as Glade-import qualified Graphics.UI.Gtk.OpenGL as GtkGL-import qualified Graphics.UI.GLUT as GLUT--type B = AERN.BM---type B = AERN.BMPFR-type RA = AERN.RA B-type IRA = AERN.IRA B-type FA = AERNFunc.FAPWP B-type Box a = AERNFunc.Box a-type VarID = AERNFunc.VarID--main =- do- AERN.initialiseBaseArithmetic (0 :: RA)- initGtkGL - fadataTV <- newTVarIO faData- fndataTV <- newTVarIO FNV.defaultFnData- fnviewWindow <- FNV.new (fadataTV, fndataTV) Nothing- forkIO $ signalData fndataTV- Gtk.mainGUI- -faData = - FNV.defaultFaData- {- FNV.dataFAs = [f1,f2]- }--f1 = AERNFunc.tuple [f11,f12,f13]-f2 = AERNFunc.tuple [f21,f22,f23]--ix1 = 6-ix2 = 12-ix3 = 18--g = AERNFunc.scale 10 x-f11 = AERN.cos ix1 $ g -- cos(10x)-f12 = AERN.cos ix2 $ g -- cos(10x)-f13 = AERN.cos ix3 $ g -- cos(10x)--f21 = AERNFunc.integrateUnary 3 f11 dom 0 [-1] -- integ(cos(10x)) - 1-f22 = AERNFunc.integrateUnary 3 f12 dom 0 [-1] -- integ(cos(10x)) - 1-f23 = AERNFunc.integrateUnary 3 f13 dom 0 [-1] -- integ(cos(10x)) - 1---x :: FA-x =- AERNFunc.bisectUnbisectDepth 5 $- AERNFunc.setMaxDegree 3 $- AERNFunc.proj xdom 0--xdom = AERNFunc.fromAscList [(0, dom)]- -const01 :: FA-const01 =- AERNFunc.const xdom [0 AERN.\/ 1]- -dom = domL AERN.\/ domR-(domL, domR) = (-1, 1)-(valLO, valHI) = (-2,2) --fnData =- setExtents domL domR valLO valHI $ - FNV.defaultFnData- {- FNV.dataFAsUpdated = True,- FNV.dataDomName = "x",- FNV.dataFnNames = ["f1","f2"],- FNV.dataResultNames = [["f11", "f12", "f13"],["f21", "f22", "f23"]],- FNV.dataDefaultEvalPoint = 0- }--setExtents left right bot top fnData =- fnData- {- FNV.dataDomL = td left,- FNV.dataDomR = td right,- FNV.dataValLO = td bot,- FNV.dataValHI = td top,- FNV.dataDefaultPlotParams =- FNV.defaultPlotParams- {- FNV.pltprmCoordSystem = - FNV.CoordSystemLinear $- FNV.Rectangle - (tr $ top + 0.1) - (tr $ bot - 0.1) - (tr $ left - 0.1) - (tr $ right + 0.1) - } - }- where- tr = toRational . td- td = fst . AERN.doubleBounds--initGtkGL =- do- Gtk.initGUI- -- enable multithreaded GUI:- Gtk.timeoutAddFull - (Concurrent.yield >> Concurrent.yield >> Concurrent.yield >> return True) - Gtk.priorityDefaultIdle 20- -- see http://haskell.org/gtk2hs/archives/2005/07/24/writing-multi-threaded-guis/- GtkGL.initGL- GLUT.initialize "AERN Function View" [] -- needed for text in GL canvas- -signalData fndataTV =- do- threadDelay 200000 -- 0.2s- atomically $- do- writeTVar fndataTV fnData-
− demos/FnView.glade
@@ -1,466 +0,0 @@-<?xml version="1.0" encoding="UTF-8" standalone="no"?>-<!DOCTYPE glade-interface SYSTEM "glade-2.0.dtd">-<!--Generated with glade3 3.4.5 on Wed Oct 1 15:09:10 2008 -->-<glade-interface>- <widget class="GtkWindow" id="window1">- <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>- <child>- <widget class="GtkHBox" id="hbox1">- <property name="visible">True</property>- <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>- <child>- <widget class="GtkVBox" id="vbox1">- <property name="visible">True</property>- <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>- <child>- <widget class="GtkFrame" id="frame1">- <property name="visible">True</property>- <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>- <property name="label_xalign">0</property>- <property name="shadow_type">GTK_SHADOW_ETCHED_OUT</property>- <child>- <widget class="GtkAlignment" id="canvasAlignment1">- <property name="width_request">500</property>- <property name="height_request">500</property>- <property name="visible">True</property>- <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>- <property name="left_padding">12</property>- <child>- <placeholder/>- </child>- </widget>- </child>- <child>- <widget class="GtkLabel" id="label1">- <property name="visible">True</property>- <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>- <property name="label" translatable="yes">plot</property>- </widget>- <packing>- <property name="type">label_item</property>- </packing>- </child>- </widget>- </child>- <child>- <widget class="GtkHBox" id="hbox2">- <property name="visible">True</property>- <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>- <child>- <widget class="GtkFrame" id="frame2">- <property name="visible">True</property>- <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>- <property name="label_xalign">0</property>- <property name="shadow_type">GTK_SHADOW_ETCHED_OUT</property>- <child>- <widget class="GtkAlignment" id="alignment2">- <property name="visible">True</property>- <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>- <property name="left_padding">12</property>- <child>- <widget class="GtkVBox" id="vbox3">- <property name="visible">True</property>- <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>- <child>- <widget class="GtkComboBox" id="coorSystemCombo1">- <property name="visible">True</property>- <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>- <property name="items" translatable="yes">log + squeeze-linear</property>- </widget>- </child>- <child>- <widget class="GtkHBox" id="hbox6">- <property name="visible">True</property>- <child>- <placeholder/>- </child>- </widget>- <packing>- <property name="position">1</property>- </packing>- </child>- <child>- <widget class="GtkHBox" id="hbox7">- <property name="visible">True</property>- <child>- <placeholder/>- </child>- </widget>- <packing>- <property name="position">2</property>- </packing>- </child>- </widget>- </child>- </widget>- </child>- <child>- <widget class="GtkLabel" id="label2">- <property name="visible">True</property>- <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>- <property name="label" translatable="yes">coord system</property>- <property name="use_markup">True</property>- </widget>- <packing>- <property name="type">label_item</property>- </packing>- </child>- </widget>- </child>- <child>- <widget class="GtkFrame" id="frame3">- <property name="visible">True</property>- <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>- <property name="label_xalign">0</property>- <property name="shadow_type">GTK_SHADOW_ETCHED_OUT</property>- <child>- <widget class="GtkAlignment" id="alignment3">- <property name="visible">True</property>- <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>- <property name="left_padding">12</property>- <child>- <widget class="GtkTable" id="table2">- <property name="visible">True</property>- <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>- <property name="n_rows">4</property>- <property name="n_columns">1</property>- <child>- <placeholder/>- </child>- <child>- <widget class="GtkButton" id="defaultZoomPanButton1">- <property name="visible">True</property>- <property name="can_focus">True</property>- <property name="receives_default">True</property>- <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>- <property name="label" translatable="yes">set to defaults</property>- <property name="response_id">0</property>- </widget>- <packing>- <property name="y_options">GTK_FILL</property>- </packing>- </child>- <child>- <widget class="GtkHBox" id="hbox4">- <property name="visible">True</property>- <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>- <child>- <widget class="GtkLabel" id="label6">- <property name="visible">True</property>- <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>- <property name="xalign">0</property>- <property name="label" translatable="yes">zoom=</property>- </widget>- <packing>- <property name="expand">False</property>- </packing>- </child>- <child>- <widget class="GtkEntry" id="zoomEntry1">- <property name="visible">True</property>- <property name="can_focus">True</property>- <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>- <property name="width_chars">5</property>- <property name="truncate_multiline">True</property>- </widget>- <packing>- <property name="expand">False</property>- <property name="fill">False</property>- <property name="position">1</property>- </packing>- </child>- <child>- <widget class="GtkLabel" id="label7">- <property name="visible">True</property>- <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>- <property name="label" translatable="yes">%</property>- </widget>- <packing>- <property name="expand">False</property>- <property name="position">2</property>- </packing>- </child>- </widget>- <packing>- <property name="top_attach">1</property>- <property name="bottom_attach">2</property>- <property name="y_options">GTK_FILL</property>- </packing>- </child>- <child>- <widget class="GtkTable" id="table3">- <property name="visible">True</property>- <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>- <property name="n_rows">2</property>- <property name="n_columns">3</property>- <child>- <placeholder/>- </child>- <child>- <placeholder/>- </child>- <child>- <widget class="GtkLabel" id="label8">- <property name="visible">True</property>- <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>- <property name="xalign">0</property>- <property name="label" translatable="yes">centre x=</property>- </widget>- <packing>- <property name="x_options">GTK_FILL</property>- </packing>- </child>- <child>- <widget class="GtkLabel" id="label9">- <property name="visible">True</property>- <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>- <property name="xalign">0</property>- <property name="label" translatable="yes">centre y=</property>- </widget>- <packing>- <property name="top_attach">1</property>- <property name="bottom_attach">2</property>- <property name="x_options">GTK_FILL</property>- </packing>- </child>- <child>- <widget class="GtkEntry" id="centreXEntry1">- <property name="visible">True</property>- <property name="can_focus">True</property>- <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>- <property name="width_chars">5</property>- </widget>- <packing>- <property name="left_attach">1</property>- <property name="right_attach">2</property>- <property name="x_options">GTK_FILL</property>- </packing>- </child>- <child>- <widget class="GtkEntry" id="centreYEntry1">- <property name="visible">True</property>- <property name="can_focus">True</property>- <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>- <property name="width_chars">5</property>- </widget>- <packing>- <property name="left_attach">1</property>- <property name="right_attach">2</property>- <property name="top_attach">1</property>- <property name="bottom_attach">2</property>- <property name="x_options">GTK_FILL</property>- </packing>- </child>- </widget>- <packing>- <property name="top_attach">2</property>- <property name="bottom_attach">3</property>- <property name="y_options">GTK_FILL</property>- </packing>- </child>- </widget>- </child>- </widget>- </child>- <child>- <widget class="GtkLabel" id="label3">- <property name="visible">True</property>- <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>- <property name="label" translatable="yes">zoom/pan</property>- <property name="use_markup">True</property>- </widget>- <packing>- <property name="type">label_item</property>- </packing>- </child>- </widget>- <packing>- <property name="position">1</property>- </packing>- </child>- </widget>- <packing>- <property name="position">1</property>- </packing>- </child>- </widget>- </child>- <child>- <widget class="GtkVBox" id="vbox2">- <property name="visible">True</property>- <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>- <child>- <widget class="GtkHBox" id="hbox5">- <property name="visible">True</property>- <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>- <child>- <widget class="GtkButton" id="defaultEvalPointButton1">- <property name="visible">True</property>- <property name="can_focus">True</property>- <property name="receives_default">True</property>- <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>- <property name="label" translatable="yes">default</property>- <property name="response_id">0</property>- </widget>- </child>- <child>- <widget class="GtkLabel" id="domVarLabel1">- <property name="visible">True</property>- <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>- <property name="label" translatable="yes">==</property>- </widget>- <packing>- <property name="position">1</property>- </packing>- </child>- <child>- <widget class="GtkEntry" id="evalPointEntry1">- <property name="visible">True</property>- <property name="can_focus">True</property>- <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>- </widget>- <packing>- <property name="position">2</property>- </packing>- </child>- </widget>- <packing>- <property name="expand">False</property>- <property name="padding">2</property>- </packing>- </child>- <child>- <widget class="GtkTable" id="dimTable1">- <property name="visible">True</property>- <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>- <property name="resize_mode">GTK_RESIZE_IMMEDIATE</property>- <property name="n_rows">4</property>- <property name="n_columns">3</property>- <property name="column_spacing">1</property>- <property name="row_spacing">5</property>- <child>- <placeholder/>- </child>- <child>- <placeholder/>- </child>- <child>- <placeholder/>- </child>- <child>- <placeholder/>- </child>- <child>- <placeholder/>- </child>- <child>- <placeholder/>- </child>- <child>- <placeholder/>- </child>- <child>- <placeholder/>- </child>- <child>- <placeholder/>- </child>- <child>- <placeholder/>- </child>- <child>- <placeholder/>- </child>- <child>- <placeholder/>- </child>- </widget>- <packing>- <property name="expand">False</property>- <property name="padding">2</property>- <property name="position">1</property>- </packing>- </child>- <child>- <placeholder/>- </child>- <child>- <widget class="GtkFrame" id="frame4">- <property name="visible">True</property>- <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>- <property name="label_xalign">0</property>- <property name="shadow_type">GTK_SHADOW_ETCHED_OUT</property>- <child>- <widget class="GtkAlignment" id="alignment1">- <property name="visible">True</property>- <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>- <property name="left_padding">12</property>- <child>- <widget class="GtkHBox" id="hbox3">- <property name="visible">True</property>- <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>- <child>- <widget class="GtkButton" id="exportJPGButton1">- <property name="can_focus">True</property>- <property name="receives_default">True</property>- <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>- <property name="label" translatable="yes">jpg</property>- <property name="response_id">0</property>- </widget>- </child>- <child>- <widget class="GtkButton" id="printTXTButton1">- <property name="visible">True</property>- <property name="can_focus">True</property>- <property name="receives_default">True</property>- <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>- <property name="label" translatable="yes">txt</property>- <property name="response_id">0</property>- </widget>- <packing>- <property name="position">1</property>- </packing>- </child>- <child>- <widget class="GtkVBox" id="vbox4">- <property name="visible">True</property>- <child>- <placeholder/>- </child>- </widget>- <packing>- <property name="position">2</property>- </packing>- </child>- </widget>- </child>- </widget>- </child>- <child>- <widget class="GtkLabel" id="label4">- <property name="visible">True</property>- <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>- <property name="label" translatable="yes">export functions</property>- <property name="use_markup">True</property>- </widget>- <packing>- <property name="type">label_item</property>- </packing>- </child>- </widget>- <packing>- <property name="expand">False</property>- <property name="pack_type">GTK_PACK_END</property>- <property name="position">3</property>- </packing>- </child>- </widget>- <packing>- <property name="position">1</property>- </packing>- </child>- </widget>- </child>- </widget>-</glade-interface>
+ examples/Demo.hs view
@@ -0,0 +1,124 @@+module Main where++import qualified Data.Number.ER.Real as AERN+import qualified Data.Number.ER.RnToRm as AERNFunc+import qualified Data.Number.ER.RnToRm.Plot.FnView as FNV++import Control.Concurrent as Concurrent+import Control.Concurrent.STM as STM++import qualified Graphics.UI.Gtk as Gtk+import Graphics.UI.Gtk (AttrOp((:=)))+import qualified Graphics.UI.Gtk.Glade as Glade+import qualified Graphics.UI.Gtk.OpenGL as GtkGL+import qualified Graphics.UI.GLUT as GLUT++type B = AERN.BM+--type B = AERN.BMPFR+type RA = AERN.RA B+type IRA = AERN.IRA B+type FA = AERNFunc.FAPWP B+type Box a = AERNFunc.Box a+type VarID = AERNFunc.VarID++main =+ do+ AERN.initialiseBaseArithmetic (0 :: RA)+ initGtkGL + fadataTV <- newTVarIO faData+ fndataTV <- newTVarIO FNV.defaultFnData+ fnviewWindow <- FNV.new (fadataTV, fndataTV) Nothing+ forkIO $ signalData fndataTV+ Gtk.mainGUI+ +faData = + FNV.defaultFaData+ {+ FNV.dataFAs = [f1,f2]+ }++f1 = AERNFunc.tuple [f11,f12,f13]+f2 = AERNFunc.tuple [f21,f22,f23]++ix1 = 6+ix2 = 12+ix3 = 18++g = AERNFunc.scale 10 x+f11 = AERN.cos ix1 $ g -- cos(10x)+f12 = AERN.cos ix2 $ g -- cos(10x)+f13 = AERN.cos ix3 $ g -- cos(10x)++f21 = AERNFunc.integrateUnary 3 f11 dom 0 [-1] -- integ(cos(10x)) - 1+f22 = AERNFunc.integrateUnary 3 f12 dom 0 [-1] -- integ(cos(10x)) - 1+f23 = AERNFunc.integrateUnary 3 f13 dom 0 [-1] -- integ(cos(10x)) - 1+++x :: FA+x =+ AERNFunc.bisectUnbisectDepth 5 $+ AERNFunc.setMaxDegree 3 $+ AERNFunc.proj xdom 0++xdom = AERNFunc.fromAscList [(0, dom)]+ +const01 :: FA+const01 =+ AERNFunc.const xdom [0 AERN.\/ 1]+ +dom = domL AERN.\/ domR+(domL, domR) = (-1, 1)+(valLO, valHI) = (-2,2) ++fnData =+ setExtents domL domR valLO valHI $ + FNV.defaultFnData+ {+ FNV.dataFAsUpdated = True,+ FNV.dataDomName = "x",+ FNV.dataFnNames = ["f1","f2"],+ FNV.dataResultNames = [["f11", "f12", "f13"],["f21", "f22", "f23"]],+ FNV.dataDefaultEvalPoint = 0+ }++setExtents left right bot top fnData =+ fnData+ {+ FNV.dataDomL = td left,+ FNV.dataDomR = td right,+ FNV.dataValLO = td bot,+ FNV.dataValHI = td top,+ FNV.dataDefaultPlotParams =+ FNV.defaultPlotParams+ {+ FNV.pltprmCoordSystem = + FNV.CoordSystemLinear $+ FNV.Rectangle + (tr $ top + 0.1) + (tr $ bot - 0.1) + (tr $ left - 0.1) + (tr $ right + 0.1) + } + }+ where+ tr = toRational . td+ td = fst . AERN.doubleBounds++initGtkGL =+ do+ Gtk.initGUI+ -- enable multithreaded GUI:+ Gtk.timeoutAddFull + (Concurrent.yield >> Concurrent.yield >> Concurrent.yield >> return True) + Gtk.priorityDefaultIdle 20+ -- see http://haskell.org/gtk2hs/archives/2005/07/24/writing-multi-threaded-guis/+ GtkGL.initGL+ GLUT.initialize "AERN Function View" [] -- needed for text in GL canvas+ +signalData fndataTV =+ do+ threadDelay 200000 -- 0.2s+ atomically $+ do+ writeTVar fndataTV fnData+
+ examples/FnView.glade view
@@ -0,0 +1,466 @@+<?xml version="1.0" encoding="UTF-8" standalone="no"?>+<!DOCTYPE glade-interface SYSTEM "glade-2.0.dtd">+<!--Generated with glade3 3.4.5 on Wed Oct 1 15:09:10 2008 -->+<glade-interface>+ <widget class="GtkWindow" id="window1">+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>+ <child>+ <widget class="GtkHBox" id="hbox1">+ <property name="visible">True</property>+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>+ <child>+ <widget class="GtkVBox" id="vbox1">+ <property name="visible">True</property>+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>+ <child>+ <widget class="GtkFrame" id="frame1">+ <property name="visible">True</property>+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>+ <property name="label_xalign">0</property>+ <property name="shadow_type">GTK_SHADOW_ETCHED_OUT</property>+ <child>+ <widget class="GtkAlignment" id="canvasAlignment1">+ <property name="width_request">500</property>+ <property name="height_request">500</property>+ <property name="visible">True</property>+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>+ <property name="left_padding">12</property>+ <child>+ <placeholder/>+ </child>+ </widget>+ </child>+ <child>+ <widget class="GtkLabel" id="label1">+ <property name="visible">True</property>+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>+ <property name="label" translatable="yes">plot</property>+ </widget>+ <packing>+ <property name="type">label_item</property>+ </packing>+ </child>+ </widget>+ </child>+ <child>+ <widget class="GtkHBox" id="hbox2">+ <property name="visible">True</property>+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>+ <child>+ <widget class="GtkFrame" id="frame2">+ <property name="visible">True</property>+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>+ <property name="label_xalign">0</property>+ <property name="shadow_type">GTK_SHADOW_ETCHED_OUT</property>+ <child>+ <widget class="GtkAlignment" id="alignment2">+ <property name="visible">True</property>+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>+ <property name="left_padding">12</property>+ <child>+ <widget class="GtkVBox" id="vbox3">+ <property name="visible">True</property>+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>+ <child>+ <widget class="GtkComboBox" id="coorSystemCombo1">+ <property name="visible">True</property>+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>+ <property name="items" translatable="yes">log + squeeze+linear</property>+ </widget>+ </child>+ <child>+ <widget class="GtkHBox" id="hbox6">+ <property name="visible">True</property>+ <child>+ <placeholder/>+ </child>+ </widget>+ <packing>+ <property name="position">1</property>+ </packing>+ </child>+ <child>+ <widget class="GtkHBox" id="hbox7">+ <property name="visible">True</property>+ <child>+ <placeholder/>+ </child>+ </widget>+ <packing>+ <property name="position">2</property>+ </packing>+ </child>+ </widget>+ </child>+ </widget>+ </child>+ <child>+ <widget class="GtkLabel" id="label2">+ <property name="visible">True</property>+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>+ <property name="label" translatable="yes">coord system</property>+ <property name="use_markup">True</property>+ </widget>+ <packing>+ <property name="type">label_item</property>+ </packing>+ </child>+ </widget>+ </child>+ <child>+ <widget class="GtkFrame" id="frame3">+ <property name="visible">True</property>+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>+ <property name="label_xalign">0</property>+ <property name="shadow_type">GTK_SHADOW_ETCHED_OUT</property>+ <child>+ <widget class="GtkAlignment" id="alignment3">+ <property name="visible">True</property>+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>+ <property name="left_padding">12</property>+ <child>+ <widget class="GtkTable" id="table2">+ <property name="visible">True</property>+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>+ <property name="n_rows">4</property>+ <property name="n_columns">1</property>+ <child>+ <placeholder/>+ </child>+ <child>+ <widget class="GtkButton" id="defaultZoomPanButton1">+ <property name="visible">True</property>+ <property name="can_focus">True</property>+ <property name="receives_default">True</property>+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>+ <property name="label" translatable="yes">set to defaults</property>+ <property name="response_id">0</property>+ </widget>+ <packing>+ <property name="y_options">GTK_FILL</property>+ </packing>+ </child>+ <child>+ <widget class="GtkHBox" id="hbox4">+ <property name="visible">True</property>+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>+ <child>+ <widget class="GtkLabel" id="label6">+ <property name="visible">True</property>+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>+ <property name="xalign">0</property>+ <property name="label" translatable="yes">zoom=</property>+ </widget>+ <packing>+ <property name="expand">False</property>+ </packing>+ </child>+ <child>+ <widget class="GtkEntry" id="zoomEntry1">+ <property name="visible">True</property>+ <property name="can_focus">True</property>+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>+ <property name="width_chars">5</property>+ <property name="truncate_multiline">True</property>+ </widget>+ <packing>+ <property name="expand">False</property>+ <property name="fill">False</property>+ <property name="position">1</property>+ </packing>+ </child>+ <child>+ <widget class="GtkLabel" id="label7">+ <property name="visible">True</property>+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>+ <property name="label" translatable="yes">%</property>+ </widget>+ <packing>+ <property name="expand">False</property>+ <property name="position">2</property>+ </packing>+ </child>+ </widget>+ <packing>+ <property name="top_attach">1</property>+ <property name="bottom_attach">2</property>+ <property name="y_options">GTK_FILL</property>+ </packing>+ </child>+ <child>+ <widget class="GtkTable" id="table3">+ <property name="visible">True</property>+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>+ <property name="n_rows">2</property>+ <property name="n_columns">3</property>+ <child>+ <placeholder/>+ </child>+ <child>+ <placeholder/>+ </child>+ <child>+ <widget class="GtkLabel" id="label8">+ <property name="visible">True</property>+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>+ <property name="xalign">0</property>+ <property name="label" translatable="yes">centre x=</property>+ </widget>+ <packing>+ <property name="x_options">GTK_FILL</property>+ </packing>+ </child>+ <child>+ <widget class="GtkLabel" id="label9">+ <property name="visible">True</property>+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>+ <property name="xalign">0</property>+ <property name="label" translatable="yes">centre y=</property>+ </widget>+ <packing>+ <property name="top_attach">1</property>+ <property name="bottom_attach">2</property>+ <property name="x_options">GTK_FILL</property>+ </packing>+ </child>+ <child>+ <widget class="GtkEntry" id="centreXEntry1">+ <property name="visible">True</property>+ <property name="can_focus">True</property>+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>+ <property name="width_chars">5</property>+ </widget>+ <packing>+ <property name="left_attach">1</property>+ <property name="right_attach">2</property>+ <property name="x_options">GTK_FILL</property>+ </packing>+ </child>+ <child>+ <widget class="GtkEntry" id="centreYEntry1">+ <property name="visible">True</property>+ <property name="can_focus">True</property>+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>+ <property name="width_chars">5</property>+ </widget>+ <packing>+ <property name="left_attach">1</property>+ <property name="right_attach">2</property>+ <property name="top_attach">1</property>+ <property name="bottom_attach">2</property>+ <property name="x_options">GTK_FILL</property>+ </packing>+ </child>+ </widget>+ <packing>+ <property name="top_attach">2</property>+ <property name="bottom_attach">3</property>+ <property name="y_options">GTK_FILL</property>+ </packing>+ </child>+ </widget>+ </child>+ </widget>+ </child>+ <child>+ <widget class="GtkLabel" id="label3">+ <property name="visible">True</property>+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>+ <property name="label" translatable="yes">zoom/pan</property>+ <property name="use_markup">True</property>+ </widget>+ <packing>+ <property name="type">label_item</property>+ </packing>+ </child>+ </widget>+ <packing>+ <property name="position">1</property>+ </packing>+ </child>+ </widget>+ <packing>+ <property name="position">1</property>+ </packing>+ </child>+ </widget>+ </child>+ <child>+ <widget class="GtkVBox" id="vbox2">+ <property name="visible">True</property>+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>+ <child>+ <widget class="GtkHBox" id="hbox5">+ <property name="visible">True</property>+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>+ <child>+ <widget class="GtkButton" id="defaultEvalPointButton1">+ <property name="visible">True</property>+ <property name="can_focus">True</property>+ <property name="receives_default">True</property>+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>+ <property name="label" translatable="yes">default</property>+ <property name="response_id">0</property>+ </widget>+ </child>+ <child>+ <widget class="GtkLabel" id="domVarLabel1">+ <property name="visible">True</property>+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>+ <property name="label" translatable="yes">==</property>+ </widget>+ <packing>+ <property name="position">1</property>+ </packing>+ </child>+ <child>+ <widget class="GtkEntry" id="evalPointEntry1">+ <property name="visible">True</property>+ <property name="can_focus">True</property>+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>+ </widget>+ <packing>+ <property name="position">2</property>+ </packing>+ </child>+ </widget>+ <packing>+ <property name="expand">False</property>+ <property name="padding">2</property>+ </packing>+ </child>+ <child>+ <widget class="GtkTable" id="dimTable1">+ <property name="visible">True</property>+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>+ <property name="resize_mode">GTK_RESIZE_IMMEDIATE</property>+ <property name="n_rows">4</property>+ <property name="n_columns">3</property>+ <property name="column_spacing">1</property>+ <property name="row_spacing">5</property>+ <child>+ <placeholder/>+ </child>+ <child>+ <placeholder/>+ </child>+ <child>+ <placeholder/>+ </child>+ <child>+ <placeholder/>+ </child>+ <child>+ <placeholder/>+ </child>+ <child>+ <placeholder/>+ </child>+ <child>+ <placeholder/>+ </child>+ <child>+ <placeholder/>+ </child>+ <child>+ <placeholder/>+ </child>+ <child>+ <placeholder/>+ </child>+ <child>+ <placeholder/>+ </child>+ <child>+ <placeholder/>+ </child>+ </widget>+ <packing>+ <property name="expand">False</property>+ <property name="padding">2</property>+ <property name="position">1</property>+ </packing>+ </child>+ <child>+ <placeholder/>+ </child>+ <child>+ <widget class="GtkFrame" id="frame4">+ <property name="visible">True</property>+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>+ <property name="label_xalign">0</property>+ <property name="shadow_type">GTK_SHADOW_ETCHED_OUT</property>+ <child>+ <widget class="GtkAlignment" id="alignment1">+ <property name="visible">True</property>+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>+ <property name="left_padding">12</property>+ <child>+ <widget class="GtkHBox" id="hbox3">+ <property name="visible">True</property>+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>+ <child>+ <widget class="GtkButton" id="exportJPGButton1">+ <property name="can_focus">True</property>+ <property name="receives_default">True</property>+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>+ <property name="label" translatable="yes">jpg</property>+ <property name="response_id">0</property>+ </widget>+ </child>+ <child>+ <widget class="GtkButton" id="printTXTButton1">+ <property name="visible">True</property>+ <property name="can_focus">True</property>+ <property name="receives_default">True</property>+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>+ <property name="label" translatable="yes">txt</property>+ <property name="response_id">0</property>+ </widget>+ <packing>+ <property name="position">1</property>+ </packing>+ </child>+ <child>+ <widget class="GtkVBox" id="vbox4">+ <property name="visible">True</property>+ <child>+ <placeholder/>+ </child>+ </widget>+ <packing>+ <property name="position">2</property>+ </packing>+ </child>+ </widget>+ </child>+ </widget>+ </child>+ <child>+ <widget class="GtkLabel" id="label4">+ <property name="visible">True</property>+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>+ <property name="label" translatable="yes">export functions</property>+ <property name="use_markup">True</property>+ </widget>+ <packing>+ <property name="type">label_item</property>+ </packing>+ </child>+ </widget>+ <packing>+ <property name="expand">False</property>+ <property name="pack_type">GTK_PACK_END</property>+ <property name="position">3</property>+ </packing>+ </child>+ </widget>+ <packing>+ <property name="position">1</property>+ </packing>+ </child>+ </widget>+ </child>+ </widget>+</glade-interface>