packages feed

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