GreyLab.cpp

Go to the documentation of this file.
00001 //GreyLab.cpp
00002 
00003 /*************************************************************/
00004 //
00005 // GreyLabWindow
00006 //
00007 // Main class of GreyLab
00008 //
00009 //-------------------------------------------------------------
00010 //
00011 // v 1.40 - 2008/03/10 - Matlab export
00012 // v 1.39 - 2007/12/13 - More z-axis plotting options
00013 // v 1.38 - 2007/11/26 - Added graph label store and retrieve and fixed some graph ranging bugs
00014 // v 1.37 - 2007/10/29 - Fixed window drift and minimise bugs
00015 // v 1.36 - 2007/09/23 - Changes to allow <ChA> etc use
00016 // v 1.35 - 2007/08/26 - Matrix data type loading
00017 // v 1.34 - 2007/08/16 - Colour interpolated AA stroked lines option
00018 // v 1.33 - 2007/06/12 - 2.17.2 improvements
00019 // v 1.32 - 2007/06/09 - Improvements to ranging
00020 // v 1.31 - 2007/05/30 - Zoomback feature and GUI tidying
00021 // v 1.30 - 2007/05/29 - Changes to load header file
00022 // v 1.29 - 2007/04/04 - Improvements to plot outputs
00023 // v 1.28 - 2007/04/01 - Updates
00024 // v 1.27 - 2007/03/23 - Changes to linescan offsets + fixes
00025 // v 1.26 - 2007/03/14 - Changes to gradient display
00026 // v 1.25 - 2007/02/17 - Changes for 2.14.0
00027 // v 1.24 - 2007/02/09 - X target range and better autoranging
00028 // v 1.23 - 2007/02/08 - Save draw directory
00029 // v 1.22 - 2007/02/07 - Couple of bug fixes
00030 // v 1.21 - 2007/02/07 - Info in title bar
00031 // v 1.20 - 2007/02/01 - ysd scatter option
00032 // v 1.19 - 2007/01/06 - Changes for 2.11.0
00033 // v 1.18 - 2006/11/23 - Changes for 2.10.2
00034 // v 1.17 - 2006/11/19 - Autorange Z and equal range Z
00035 // v 1.16 - 2006/11/18 - Lots of changes for 2.10.0
00036 // v 1.15 - 2006/11/13 - Export all columns options (2.9.0)
00037 // v 1.14 - 2006/11/10 - Added autoranging X axis when sweep selection changes
00038 // v 1.13 - 2006/09/09 - Linescan reverse order and window positioning fix
00039 // v 1.12 - 2006/09/07 - Acorn export of data
00040 // v 1.11 - 2006/08/28 - Colourscale interpolation (2.8.0)
00041 // v 1.10 - 2006/08/28 - Moved a few functions to DataAnalysis.cpp
00042 // v 1.9 - 2006/08/27 - Bug fixes and improvements to linescans (2.7.0)
00043 // v 1.8 - 2006/08/18 - Plane calculation (v2.4.2)
00044 // v 1.7 - 2006/08/16 - Acorn CryoMeas binary stuff (v2.4.0)
00045 // v 1.6 - 2006/08/11 - Automatic captions (v2.3.2)
00046 // v 1.5 - 2006/08/08 - Interpolation of missing data points (v2.3.0)
00047 // v 1.4 - 2006/07/31 - Better handling of the SD mess (v2.2.3)
00048 // v 1.3 - 2006/07/11 - Improvements to auto ranging on analysis tab (v2.2.2)
00049 // v 1.2 - 2006/07/10 - Scatter plotting amd other additions and fixes (v2.2.1)
00050 // v 1.1 - 2006/07/07 - Additions and fixes (v2.1.0)
00051 // v 1.0 - 2006/04/19 - Initial release
00052 //
00053 // See LICENSE.txt for distribution and usage restrictions
00054 // Copyright (c) 2005-2007 Simon Chorley
00055 // www.mylaboratory.co.uk - greylab@mylaboratory.co.uk
00056 //
00057 /*************************************************************/
00058 
00059 
00060 ///GreyLab main window functions
00061 /**
00062  * Provides implementation of GreyLabWindow functions to do various tasks.
00063  * @file GreyLab.cpp
00064  * @version 1.40 - 2008/03/10
00065  */
00066 
00067 
00068 #include "GreyLab.h"
00069 
00070 #include <fstream>
00071 #include <iostream>
00072 #include <ctime>
00073 
00074 #include "icons.h"
00075 
00076 //#ifdef LINUX64
00077 //#define FLIP_BUTTON "~"
00078 //#else
00079 #define FLIP_BUTTON "±"
00080 //#endif
00081 
00082 ///Message map
00083 FXDEFMAP(GreyLabWindow) GreyLabWindowMap[]={
00084         FXMAPFUNCS(SEL_COMMAND, GreyLabWindow::ID_KEYWORD,      GreyLabWindow::ID_KEYWORD+36,   GreyLabWindow::cmdKeyword),
00085         FXMAPFUNCS(SEL_COMMAND, GreyLabWindow::ID_GS_STOREDLABEL,       GreyLabWindow::ID_GS_STOREDLABEL+NUM_STORED_LABELS-1,   GreyLabWindow::cmdUseStoredLabels),
00086         FXMAPFUNCS(SEL_COMMAND, GreyLabWindow::ID_LS_STOREDLABEL,       GreyLabWindow::ID_LS_STOREDLABEL+NUM_STORED_LABELS-1,   GreyLabWindow::cmdUseStoredLabels),
00087         FXMAPFUNCS(SEL_COMMAND, GreyLabWindow::ID_HM_STOREDLABEL,       GreyLabWindow::ID_HM_STOREDLABEL+NUM_STORED_LABELS-1,   GreyLabWindow::cmdUseStoredLabels),
00088 
00089         FXMAPFUNC(SEL_COMMAND,                          GreyLabWindow::ID_PANEL,                        GreyLabWindow::cmdPanel),
00090         FXMAPFUNC(SEL_COMMAND,                          GreyLabWindow::ID_LOADPROJ,                     GreyLabWindow::cmdLoadProject),
00091         FXMAPFUNC(SEL_COMMAND,                          GreyLabWindow::ID_LOADPROJPLOT,         GreyLabWindow::cmdLoadProjectPlot),
00092         FXMAPFUNC(SEL_COMMAND,                          GreyLabWindow::ID_SAVEPROJ,                     GreyLabWindow::cmdSaveProject),
00093         FXMAPFUNC(SEL_COMMAND,                          GreyLabWindow::ID_BROWSE,                       GreyLabWindow::cmdLoadBrowse),
00094         FXMAPFUNC(SEL_COMMAND,                          GreyLabWindow::ID_LOAD,                         GreyLabWindow::cmdLoad),
00095         FXMAPFUNC(SEL_COMMAND,                          GreyLabWindow::ID_LOADMETHOD,           GreyLabWindow::cmdLoadMethod),
00096         FXMAPFUNC(SEL_COMMAND,                          GreyLabWindow::ID_ACORNEXPORT,          GreyLabWindow::cmdAcornExport),
00097         FXMAPFUNC(SEL_COMMAND,                          GreyLabWindow::ID_TEXTFONT,                     GreyLabWindow::cmdSelectTextFont),
00098         FXMAPFUNC(SEL_COMMAND,                          GreyLabWindow::ID_SYMFONT,                      GreyLabWindow::cmdSelectSymbolFont),
00099         FXMAPFUNC(SEL_COMMAND,                          GreyLabWindow::ID_NUMFONT,                      GreyLabWindow::cmdSelectNumberFont),
00100         FXMAPFUNC(SEL_COMMAND,                          GreyLabWindow::ID_AAMETHOD,                     GreyLabWindow::cmdBuildFont),
00101         FXMAPFUNC(SEL_COMMAND,                          GreyLabWindow::ID_DRAWMODEOFF,          GreyLabWindow::cmdDrawModeOff),
00102         FXMAPFUNC(SEL_COMMAND,                          GreyLabWindow::ID_ALL_REDRAW,           GreyLabWindow::cmdAllRedraw),
00103 
00104         FXMAPFUNC(SEL_SELECTED,                         GreyLabWindow::ID_SD_SWEEPS,            GreyLabWindow::cmdSDSelectSweeps),
00105         FXMAPFUNC(SEL_DESELECTED,                       GreyLabWindow::ID_SD_SWEEPS,            GreyLabWindow::cmdSDSelectSweeps),
00106         FXMAPFUNC(SEL_CHANGED,                          GreyLabWindow::ID_SD_SWEEPS,            GreyLabWindow::cmdSDSelectSweeps),
00107         
00108         FXMAPFUNC(SEL_COMMAND,                          GreyLabWindow::ID_DA_YSDCHANGE,         GreyLabWindow::cmdDAysdChange),
00109         FXMAPFUNC(SEL_CHANGED,                          GreyLabWindow::ID_DA_YSDCHANGE,         GreyLabWindow::cmdDAysdChange),
00110         FXMAPFUNC(SEL_CHANGED,                          GreyLabWindow::ID_DA_RANGE,                     GreyLabWindow::cmdDARangeChange),
00111         FXMAPFUNC(SEL_CHANGED,                          GreyLabWindow::ID_DA_SWEEPCHANGE,       GreyLabWindow::cmdDASweepChange),
00112         FXMAPFUNC(SEL_COMMAND,                          GreyLabWindow::ID_DA_AUTOX,                     GreyLabWindow::cmdDAAutoTarget),
00113         FXMAPFUNC(SEL_COMMAND,                          GreyLabWindow::ID_DA_XRANGE,            GreyLabWindow::cmdDAXChange),
00114         FXMAPFUNC(SEL_COMMAND,                          GreyLabWindow::ID_DA_SSELECT,           GreyLabWindow::cmdDASSelect),
00115         FXMAPFUNC(SEL_CHANGED,                          GreyLabWindow::ID_DA_XPARSE,            GreyLabWindow::cmdDAParse),
00116         FXMAPFUNC(SEL_CHANGED,                          GreyLabWindow::ID_DA_YPARSE,            GreyLabWindow::cmdDAParse),
00117         FXMAPFUNC(SEL_CHANGED,                          GreyLabWindow::ID_DA_ZPARSE,            GreyLabWindow::cmdDAParse),
00118         FXMAPFUNC(SEL_COMMAND,                          GreyLabWindow::ID_DA_PROCESS,           GreyLabWindow::cmdDAProcess),
00119         FXMAPFUNC(SEL_COMMAND,                          GreyLabWindow::ID_DA_EXPORT,            GreyLabWindow::cmdDAExport),
00120 
00121         FXMAPFUNC(SEL_COMMAND,                          GreyLabWindow::ID_GS_FLIPX,                     GreyLabWindow::cmdGSFlipX),
00122         FXMAPFUNC(SEL_COMMAND,                          GreyLabWindow::ID_GS_FLIPY,                     GreyLabWindow::cmdGSFlipY),
00123         FXMAPFUNC(SEL_COMMAND,                          GreyLabWindow::ID_GS_SYMMETRICZ,        GreyLabWindow::cmdGSSymmetricZ),
00124         FXMAPFUNC(SEL_CHANGED,                          GreyLabWindow::ID_GS_DIALZ,                     GreyLabWindow::cmdGSDialZ),
00125         FXMAPFUNC(SEL_COMMAND,                          GreyLabWindow::ID_GS_DIALZ,                     GreyLabWindow::cmdGSDialZ),
00126         FXMAPFUNC(SEL_COMMAND,                          GreyLabWindow::ID_GS_AUTORANGE,         GreyLabWindow::cmdGSAutoRange),
00127         FXMAPFUNC(SEL_COMMAND,                          GreyLabWindow::ID_GS_ZROUND,            GreyLabWindow::cmdGSSetZRange),
00128         FXMAPFUNC(SEL_COMMAND,                          GreyLabWindow::ID_GS_SAVELABELS,        GreyLabWindow::cmdSaveLabels),
00129 //      FXMAPFUNC(SEL_COMMAND,                          GreyLabWindow::ID_GS_AUTOCAPTION,       GreyLabWindow::cmdGSAutoCaption),
00130         FXMAPFUNC(SEL_COMMAND,                          GreyLabWindow::ID_GS_DRAW,                      GreyLabWindow::cmdGSDrawPalette),
00131         FXMAPFUNC(SEL_COMMAND,                          GreyLabWindow::ID_GS_ZOOMBACK,          GreyLabWindow::cmdGSZoomBack),
00132         FXMAPFUNC(SEL_COMMAND,                          GreyLabWindow::ID_GS_LOADGRAD,          GreyLabWindow::cmdGSLoadGrad),
00133         FXMAPFUNC(SEL_COMMAND,                          GreyLabWindow::ID_GS_SAVEGRAD,          GreyLabWindow::cmdGSSaveGrad),
00134         FXMAPFUNC(SEL_COMMAND,                          GreyLabWindow::ID_GS_RECALCREQ,         GreyLabWindow::cmdGSRecalcReq),
00135         FXMAPFUNC(SEL_COMMAND,                          GreyLabWindow::ID_GS_PLANE,                     GreyLabWindow::cmdGSPlane),
00136         FXMAPFUNC(SEL_COMMAND,                          GreyLabWindow::ID_GS_CLEARPLANE,        GreyLabWindow::cmdGSRemovePlane),
00137         FXMAPFUNC(SEL_COMMAND,                          GreyLabWindow::ID_GS_EXPORT,            GreyLabWindow::cmdGSExport),
00138         FXMAPFUNC(SEL_COMMAND,                          GreyLabWindow::ID_GS_REDRAW,            GreyLabWindow::cmdGSRedraw),
00139         FXMAPFUNC(SEL_LEFTBUTTONRELEASE,        GreyLabWindow::ID_GS_GRAD,                      GreyLabWindow::cmdGSRedraw),
00140         FXMAPFUNC(SEL_CHANGED,                          GreyLabWindow::ID_GS_GRAD,                      GreyLabWindow::cmdGSGradient),
00141         FXMAPFUNC(SEL_COMMAND,                          GreyLabWindow::ID_GS_GRADIENT,          GreyLabWindow::cmdGSEditGradient),
00142         FXMAPFUNC(SEL_COMMAND,                          GreyLabWindow::ID_GS_BROWSE,            GreyLabWindow::cmdGSBrowse),
00143         FXMAPFUNC(SEL_COMMAND,                          GreyLabWindow::ID_GS_SAVE,                      GreyLabWindow::cmdGSSave),
00144         FXMAPFUNC(SEL_COMMAND,                          GreyLabWindow::ID_GS_HIRES,                     GreyLabWindow::cmdGSHiresSave),
00145 
00146         FXMAPFUNC(SEL_LEFTBUTTONPRESS,          LineWinDialog::ID_LS_ZOOM,                      GreyLabWindow::cmdLSZoom),
00147         FXMAPFUNC(SEL_LEFTBUTTONRELEASE,        LineWinDialog::ID_LS_ZOOM,                      GreyLabWindow::cmdLSZoom),
00148         FXMAPFUNC(SEL_MOTION,                           LineWinDialog::ID_LS_ZOOM,                      GreyLabWindow::cmdLSZoom),
00149         FXMAPFUNC(SEL_LEFTBUTTONPRESS,          DataWinDialog::ID_LS_SELREQ,            GreyLabWindow::cmdLSSelectReq),
00150         FXMAPFUNC(SEL_LEFTBUTTONRELEASE,        DataWinDialog::ID_LS_SELREQ,            GreyLabWindow::cmdLSSelectReq),
00151         FXMAPFUNC(SEL_RIGHTBUTTONPRESS,         DataWinDialog::ID_LS_SELREQ,            GreyLabWindow::cmdLSSelectReq),
00152         FXMAPFUNC(SEL_RIGHTBUTTONRELEASE,       DataWinDialog::ID_LS_SELREQ,            GreyLabWindow::cmdLSSelectReq),
00153         FXMAPFUNC(SEL_MOTION,                           DataWinDialog::ID_LS_SELREQ,            GreyLabWindow::cmdLSSelectReq),
00154         FXMAPFUNC(SEL_COMMAND,                          GreyLabWindow::ID_LS_DRAW,                      GreyLabWindow::cmdLSDrawPalette),
00155         FXMAPFUNC(SEL_COMMAND,                          GreyLabWindow::ID_LS_ZOOMBACK,          GreyLabWindow::cmdLSZoomBack),
00156         FXMAPFUNC(SEL_COMMAND,                          GreyLabWindow::ID_LS_SAVELABELS,        GreyLabWindow::cmdSaveLabels),
00157         FXMAPFUNC(SEL_COMMAND,                          GreyLabWindow::ID_LS_COPYPARAMS,        GreyLabWindow::cmdLSCopyParams),
00158         FXMAPFUNC(SEL_SELECTED,                         GreyLabWindow::ID_LS_SELECTTRACE,       GreyLabWindow::cmdLSSelectTrace),
00159         FXMAPFUNC(SEL_DOUBLECLICKED,            GreyLabWindow::ID_LS_SELECTTRACE,       GreyLabWindow::cmdLSSelectTrace),
00160         FXMAPFUNC(SEL_COMMAND,                          GreyLabWindow::ID_LS_NEWTRACE,          GreyLabWindow::cmdLSNewTrace),
00161         FXMAPFUNC(SEL_COMMAND,                          GreyLabWindow::ID_LS_TRACEUP,           GreyLabWindow::cmdLSUpTrace),
00162         FXMAPFUNC(SEL_COMMAND,                          GreyLabWindow::ID_LS_TRACEDOWN,         GreyLabWindow::cmdLSDownTrace),
00163         FXMAPFUNC(SEL_COMMAND,                          GreyLabWindow::ID_LS_PLOTFLIP,          GreyLabWindow::cmdLSFlipTrace),
00164         FXMAPFUNC(SEL_DOUBLECLICKED,            GreyLabWindow::ID_LS_TRACEADDCOL,       GreyLabWindow::cmdLSAddColourTrace),
00165         FXMAPFUNC(SEL_DOUBLECLICKED,            GreyLabWindow::ID_LS_TRACEREMOVECOL,    GreyLabWindow::cmdLSRemoveColourTrace),
00166         FXMAPFUNC(SEL_COMMAND,                          GreyLabWindow::ID_LS_TRACEUPCOL,        GreyLabWindow::cmdLSUpColourTrace),
00167         FXMAPFUNC(SEL_COMMAND,                          GreyLabWindow::ID_LS_TRACEDOWNCOL,      GreyLabWindow::cmdLSDownColourTrace),
00168         FXMAPFUNC(SEL_COMMAND,                          GreyLabWindow::ID_LS_UPDATETRACE,       GreyLabWindow::cmdLSUpdateTrace),
00169         FXMAPFUNC(SEL_CHANGED,                          GreyLabWindow::ID_LS_UPDATETRACE,       GreyLabWindow::cmdLSUpdateTrace),
00170         FXMAPFUNC(SEL_COMMAND,                          GreyLabWindow::ID_LS_DRAWMODE,          GreyLabWindow::cmdLSDrawMode),
00171         FXMAPFUNC(SEL_COMMAND,                          GreyLabWindow::ID_LS_EXPORT,            GreyLabWindow::cmdLSExport),
00172         FXMAPFUNC(SEL_COMMAND,                          GreyLabWindow::ID_LS_REDRAW,            GreyLabWindow::cmdLSRedraw),
00173         FXMAPFUNC(SEL_COMMAND,                          GreyLabWindow::ID_LS_BROWSE,            GreyLabWindow::cmdLSBrowse),
00174         FXMAPFUNC(SEL_COMMAND,                          GreyLabWindow::ID_LS_SAVE,                      GreyLabWindow::cmdLSSave),
00175         FXMAPFUNC(SEL_COMMAND,                          GreyLabWindow::ID_LS_HIRES,                     GreyLabWindow::cmdLSHiresSave),
00176 
00177         FXMAPFUNC(SEL_COMMAND,                          GreyLabWindow::ID_HM_FLIPX,                     GreyLabWindow::cmdHMFlipX),
00178         FXMAPFUNC(SEL_COMMAND,                          GreyLabWindow::ID_HM_FLIPY,                     GreyLabWindow::cmdHMFlipY),
00179         FXMAPFUNC(SEL_COMMAND,                          GreyLabWindow::ID_HM_SAVELABELS,        GreyLabWindow::cmdSaveLabels),
00180         FXMAPFUNC(SEL_COMMAND,                          GreyLabWindow::ID_HM_COPYPARAMS,        GreyLabWindow::cmdHMCopyParams),
00181         FXMAPFUNC(SEL_COMMAND,                          GreyLabWindow::ID_HM_MOTIONSEL,         GreyLabWindow::cmdHMMotionChange),
00182         FXMAPFUNC(SEL_COMMAND,                          GreyLabWindow::ID_HM_DRAWMODE,          GreyLabWindow::cmdHMDrawMode),
00183         FXMAPFUNC(SEL_COMMAND,                          GreyLabWindow::ID_HM_RECALCREQ,         GreyLabWindow::cmdHMRecalcReq),
00184         FXMAPFUNC(SEL_COMMAND,                          GreyLabWindow::ID_HM_REDRAW,            GreyLabWindow::cmdHMRedraw),
00185         FXMAPFUNC(SEL_COMMAND,                          GreyLabWindow::ID_HM_BROWSE,            GreyLabWindow::cmdHMBrowse),
00186         FXMAPFUNC(SEL_COMMAND,                          GreyLabWindow::ID_HM_SAVE,                      GreyLabWindow::cmdHMSave)
00187 };
00188 
00189 
00190 FXIMPLEMENT(GreyLabWindow,FXMainWindow,GreyLabWindowMap,ARRAYNUMBER(GreyLabWindowMap))
00191 
00192 
00193 ///Constructor
00194 /**
00195  * Generates the user interface widgets and initialises various values.
00196  * @param a Application object pointer.
00197  */
00198 GreyLabWindow::GreyLabWindow(FXApp *a) : FXMainWindow(a, FXStringFormat("GreyLab %d.%d.%d", MAJORV, MINORV, BUILDV), (FXIcon*)(new FXGIFIcon(a, ic_greylab32, 0, IMAGE_OPAQUE)), (FXIcon*)(new FXGIFIcon(a, ic_greylab16, 0, IMAGE_OPAQUE)), DECOR_BORDER|DECOR_CLOSE|DECOR_TITLE|DECOR_MENU|DECOR_MINIMIZE/*|DECOR_STRETCHABLE*/)
00199 {
00200         keysMenupane = new FXMenuPane(this);
00201         new FXMenuCommand(keysMenupane, "$dir$ - Parent directory", NULL, this, ID_KEYWORD+0);
00202         new FXMenuCommand(keysMenupane, "$file$ - Data file name", NULL, this, ID_KEYWORD+1);
00203         new FXMenuCommand(keysMenupane, "$name$ - File name (no ext)", NULL, this, ID_KEYWORD+29);
00204         new FXMenuCommand(keysMenupane, "$fsize$ - Data file size", NULL, this, ID_KEYWORD+32);
00205         new FXMenuCommand(keysMenupane, "$fdate$ - Data file date", NULL, this, ID_KEYWORD+33);
00206         new FXMenuCommand(keysMenupane, "$sfdate$ - Data file short date", NULL, this, ID_KEYWORD+34);
00207         new FXMenuCommand(keysMenupane, "$date$ - Today's date", NULL, this, ID_KEYWORD+2);
00208         new FXMenuCommand(keysMenupane, "$sdate$ - Today's short date", NULL, this, ID_KEYWORD+3);
00209         new FXMenuCommand(keysMenupane, "$nsweeps$ - Number of sweeps", NULL, this, ID_KEYWORD+4);
00210         new FXMenuCommand(keysMenupane, "$nsd$ - Number of SD items", NULL, this, ID_KEYWORD+5);
00211         new FXMenuCommand(keysMenupane, "$colsw$ - Columns per sweep", NULL, this, ID_KEYWORD+6);
00212         new FXMenuCommand(keysMenupane, "$npoints$ - Number of data points", NULL, this, ID_KEYWORD+7);
00213         new FXMenuCommand(keysMenupane, "$xmin$ - X minimum", NULL, this, ID_KEYWORD+8);
00214         new FXMenuCommand(keysMenupane, "$xmax$ - X maximum", NULL, this, ID_KEYWORD+9);
00215         new FXMenuCommand(keysMenupane, "$xwin$ - X sample window", NULL, this, ID_KEYWORD+10);
00216         new FXMenuCommand(keysMenupane, "$ymin$ - Y minimum", NULL, this, ID_KEYWORD+11);
00217         new FXMenuCommand(keysMenupane, "$ymax$ - Y maximum", NULL, this, ID_KEYWORD+12);
00218         new FXMenuCommand(keysMenupane, "$ysd$ - Y SD name", NULL, this, ID_KEYWORD+13);
00219         new FXMenuCommand(keysMenupane, "$ysdch$ - Y SD channel", NULL, this, ID_KEYWORD+36);
00220         new FXMenuCommand(keysMenupane, "$ss$ - Start sweep", NULL, this, ID_KEYWORD+14);
00221         new FXMenuCommand(keysMenupane, "$es$ - End sweep", NULL, this, ID_KEYWORD+15);
00222         new FXMenuCommand(keysMenupane, "$stride$ - Sweep stride", NULL, this, ID_KEYWORD+16);
00223         new FXMenuCommand(keysMenupane, "$xcol$ - X column name", NULL, this, ID_KEYWORD+17);
00224         new FXMenuCommand(keysMenupane, "$zcol$ - Z column name", NULL, this, ID_KEYWORD+18);
00225         new FXMenuCommand(keysMenupane, "$xfunc$ - X function", NULL, this, ID_KEYWORD+19);
00226         new FXMenuCommand(keysMenupane, "$yfunc$ - Y function", NULL, this, ID_KEYWORD+20);
00227         new FXMenuCommand(keysMenupane, "$zfunc$ - Z function", NULL, this, ID_KEYWORD+21);
00228         new FXMenuCommand(keysMenupane, "$diff$ - Differentiation info", NULL, this, ID_KEYWORD+22);
00229         new FXMenuCommand(keysMenupane, "$int$ - Integration info", NULL, this, ID_KEYWORD+23);
00230         new FXMenuCommand(keysMenupane, "$scatter$ - Scatter column name", NULL, this, ID_KEYWORD+24);
00231         new FXMenuCommand(keysMenupane, "$interp$ - Interpolation info", NULL, this, ID_KEYWORD+25);
00232         new FXMenuCommand(keysMenupane, "$gamma$ - Gamma correction", NULL, this, ID_KEYWORD+26);
00233         new FXMenuCommand(keysMenupane, "$sd(0,0)$ - SD value", NULL, this, ID_KEYWORD+27);
00234         new FXMenuCommand(keysMenupane, "$sssd(0)$ - Start sweep SD value", NULL, this, ID_KEYWORD+28);
00235         new FXMenuCommand(keysMenupane, "$plane$ - Subtraction plane", NULL, this, ID_KEYWORD+30);
00236         new FXMenuCommand(keysMenupane, "$cmap$ - Colourmap name", NULL, this, ID_KEYWORD+31);
00237         new FXMenuCommand(keysMenupane, "$ctour$ - Contour spacing", NULL, this, ID_KEYWORD+35);
00238 
00239         int i;
00240         gslabelsMenupane = new FXMenuPane(this);
00241         for (i = 0; i < NUM_STORED_LABELS; ++i)
00242                 gslabelsMenucommand[i] = new FXMenuCommand(gslabelsMenupane, "____________|____________|________|________|________", NULL, this, ID_GS_STOREDLABEL+i);
00243         lslabelsMenupane = new FXMenuPane(this);
00244         for (i = 0; i < NUM_STORED_LABELS; ++i)
00245                 lslabelsMenucommand[i] = new FXMenuCommand(lslabelsMenupane, "____________|____________|________|________", NULL, this, ID_LS_STOREDLABEL+i);
00246         hmlabelsMenupane = new FXMenuPane(this);
00247         for (i = 0; i < NUM_STORED_LABELS; ++i)
00248                 hmlabelsMenucommand[i] = new FXMenuCommand(hmlabelsMenupane, "____________|____________|________|________|________", NULL, this, ID_HM_STOREDLABEL+i);
00249 
00250 //Create widgets
00251         FXVerticalFrame *contentsFrame = new FXVerticalFrame(this, LAYOUT_SIDE_TOP|FRAME_NONE|LAYOUT_FILL_X|LAYOUT_FILL_Y);
00252         contentsTabbook = new FXTabBook(contentsFrame, this, ID_PANEL, PACK_UNIFORM_WIDTH|PACK_UNIFORM_HEIGHT|LAYOUT_FILL_X|LAYOUT_FILL_Y|LAYOUT_RIGHT);
00253 
00254 
00255 // Main tab ========================================
00256         mainTab = new FXTabItem(contentsTabbook, "&Main", NULL);
00257         FXVerticalFrame *maintabFrame = new FXVerticalFrame(contentsTabbook, LAYOUT_SIDE_TOP|LAYOUT_FILL_X|FRAME_THICK|FRAME_RAISED);
00258 
00259         FXGroupBox *projectGroupbox = new FXGroupBox(maintabFrame, "Project", GROUPBOX_TITLE_LEFT|FRAME_GROOVE|LAYOUT_FILL_X);
00260         FXHorizontalFrame *projectFrame = new FXHorizontalFrame(projectGroupbox, LAYOUT_CENTER_Y|LAYOUT_FILL_X|FRAME_NONE);
00261         new FXButton(projectFrame, "Load Project", NULL, this, ID_LOADPROJ, FRAME_RAISED|LAYOUT_CENTER_Y|LAYOUT_LEFT);
00262         new FXButton(projectFrame, "Load Project and Replot", NULL, this, ID_LOADPROJPLOT, FRAME_RAISED|LAYOUT_CENTER_Y|LAYOUT_LEFT);
00263         new FXButton(projectFrame, "Save Project", NULL, this, ID_SAVEPROJ, FRAME_RAISED|LAYOUT_CENTER_Y|LAYOUT_LEFT);
00264         graphsetCheckbutton = new FXCheckButton(projectFrame, "Ignore graph settings", NULL, 0, CHECKBUTTON_NORMAL|LAYOUT_LEFT|LAYOUT_CENTER_Y, 0, 0, 0, 0, 0, 0, 0, 0);
00265 
00266         // Main tab files
00267         FXGroupBox *filesGroupbox = new FXGroupBox(maintabFrame, "File", GROUPBOX_TITLE_LEFT|FRAME_GROOVE|LAYOUT_FILL_X);
00268         FXVerticalFrame* filesFrame = new FXVerticalFrame(filesGroupbox, LAYOUT_SIDE_TOP|LAYOUT_FILL_X);
00269         FXHorizontalFrame *filemainFrame = new FXHorizontalFrame(filesFrame, LAYOUT_SIDE_TOP|FRAME_NONE|LAYOUT_FILL_X|PACK_UNIFORM_HEIGHT);
00270         new FXLabel(filemainFrame, "Input:", NULL, 0, 0, 0, 0, 0, 0, 0, 0);
00271         pathTextfield = new FXTextField(filemainFrame, 10, NULL, 0, FRAME_SUNKEN|LAYOUT_FILL_X);
00272         browseButton = new FXButton(filemainFrame, "...", NULL, this, ID_BROWSE, FRAME_RAISED|LAYOUT_TOP|LAYOUT_LEFT);
00273         new FXButton(filemainFrame, "  &Load  ", NULL, this, ID_LOAD, FRAME_RAISED|LAYOUT_RIGHT|ICON_BEFORE_TEXT);
00274         FXGroupBox *sdmethodGroupbox = new FXGroupBox(filesFrame, "Load Method", FRAME_GROOVE|LAYOUT_FILL_Y|LAYOUT_FILL_X|LAYOUT_CENTER_Y);
00275         sdasciiRadiobutton = new FXRadioButton(sdmethodGroupbox, "LabVIEW/Origin CryoMeas datafile with SD", this, ID_LOADMETHOD, CHECKBUTTON_NORMAL);
00276 //      sdlabviewRadiobutton = new FXRadioButton(sdmethodGroupbox, "CryoMeas LabVIEW file with SD", this, ID_LOADMETHOD, CHECKBUTTON_NORMAL);
00277 //      sdoriginRadiobutton = new FXRadioButton(sdmethodGroupbox, "Origin exported data with SD", this, ID_LOADMETHOD, CHECKBUTTON_NORMAL);
00278         sdacornRadiobutton = new FXRadioButton(sdmethodGroupbox, "Acorn CryoMeas datafile", this, ID_LOADMETHOD, CHECKBUTTON_NORMAL);
00279         sdsmartRadiobutton = new FXRadioButton(sdmethodGroupbox, "Intelligently load tab separated data file", this, ID_LOADMETHOD, CHECKBUTTON_NORMAL);
00280         FXHorizontalFrame *smartFrame = new FXHorizontalFrame(sdmethodGroupbox, LAYOUT_SIDE_TOP|FRAME_NONE|LAYOUT_FILL_X|PACK_UNIFORM_HEIGHT, 0, 0, 0, 0, 30, 0, 0, 0);
00281         new FXLabel(smartFrame, "Use row ", NULL, 0, 0, 0, 0, 0, 0, 0, 0);
00282         smarttitlesTextfield = new FXTextField(smartFrame, 3, NULL, 0, FRAME_SUNKEN);
00283         new FXLabel(smartFrame, " for column headers and skip ", NULL, 0, 0, 0, 0, 0, 0, 0, 0);
00284         smartdataTextfield = new FXTextField(smartFrame, 3, NULL, 0, FRAME_SUNKEN);
00285         new FXLabel(smartFrame, " rows before data", NULL, 0, 0, 0, 0, 0, 0, 0, 0);
00286         sddumbRadiobutton = new FXRadioButton(sdmethodGroupbox, "Manually specify all parameters", this, ID_LOADMETHOD, CHECKBUTTON_NORMAL);
00287         FXHorizontalFrame *dumbFrame = new FXHorizontalFrame(sdmethodGroupbox, LAYOUT_SIDE_TOP|FRAME_NONE|LAYOUT_FILL_X|PACK_UNIFORM_HEIGHT, 0, 0, 0, 0, 30, 0, 0, 0);
00288         new FXLabel(dumbFrame, "Data starts at row ", NULL, 0, 0, 0, 0, 0, 0, 0, 0);
00289         dumbdataTextfield = new FXTextField(dumbFrame, 3, NULL, 0, FRAME_SUNKEN);
00290         new FXLabel(dumbFrame, " and there are ", NULL, 0, 0, 0, 0, 0, 0, 0, 0);
00291         dumbcolsperTextfield = new FXTextField(dumbFrame, 3, NULL, 0, FRAME_SUNKEN);
00292         new FXLabel(dumbFrame, " columns per sweep", NULL, 0, 0, 0, 0, 0, 0, 0, 0);
00293         sdmatrixRadiobutton = new FXRadioButton(sdmethodGroupbox, "Data matrix", this, ID_LOADMETHOD, CHECKBUTTON_NORMAL);
00294         FXHorizontalFrame *matrixFrame = new FXHorizontalFrame(sdmethodGroupbox, LAYOUT_SIDE_TOP|FRAME_NONE|LAYOUT_FILL_X|PACK_UNIFORM_HEIGHT, 0, 0, 0, 0, 30, 0, 0, 0);
00295         new FXLabel(matrixFrame, "Matrix starts at row ", NULL, 0, 0, 0, 0, 0, 0, 0, 0);
00296         matrixdataTextfield = new FXTextField(matrixFrame, 3, NULL, 0, FRAME_SUNKEN);
00297         FXHorizontalFrame *miscFrame = new FXHorizontalFrame(filesGroupbox, LAYOUT_SIDE_TOP|FRAME_NONE|LAYOUT_FILL_X|PACK_UNIFORM_HEIGHT);
00298         new FXButton(miscFrame, "Load data and export as Acorn LabAssist text file", NULL, this, ID_ACORNEXPORT, FRAME_RAISED|LAYOUT_RIGHT);
00299         new FXLabel(miscFrame, "Separator", NULL, LAYOUT_LEFT, 0, 0, 0, 0, 0, 0, 0);
00300         separatorTextfield = new FXTextField(miscFrame, 3, NULL, 0, FRAME_SUNKEN);
00301 
00302         FXGroupBox *coloursGroupbox = new FXGroupBox(maintabFrame, "Colours", GROUPBOX_TITLE_LEFT|FRAME_GROOVE|LAYOUT_FILL_X);
00303         FXHorizontalFrame *clipFrame = new FXHorizontalFrame(coloursGroupbox, LAYOUT_TOP|LAYOUT_FILL_X|FRAME_NONE);
00304         new FXLabel(clipFrame, "Low clip colour:", NULL, LAYOUT_SIDE_TOP|LAYOUT_LEFT|PACK_UNIFORM_WIDTH|LAYOUT_LEFT);
00305         lcolColourwell = new FXColorWell(clipFrame, FXRGB(0,0,128), this, ID_ALL_REDRAW, LAYOUT_SIDE_TOP|COLORWELL_OPAQUEONLY|LAYOUT_FIX_WIDTH|LAYOUT_LEFT, 0, 0, 50, 0);
00306         new FXLabel(clipFrame, "High clip colour:", NULL, LAYOUT_SIDE_TOP|LAYOUT_LEFT|PACK_UNIFORM_WIDTH|LAYOUT_LEFT);
00307         hcolColourwell = new FXColorWell(clipFrame, FXRGB(255,200,200), this, ID_ALL_REDRAW, LAYOUT_SIDE_TOP|COLORWELL_OPAQUEONLY|LAYOUT_FIX_WIDTH|LAYOUT_LEFT, 0, 0, 50, 0);
00308         new FXLabel(clipFrame, "Missing data colour:", NULL, LAYOUT_SIDE_TOP|LAYOUT_LEFT|PACK_UNIFORM_WIDTH|LAYOUT_LEFT);
00309         nodataColourwell = new FXColorWell(clipFrame, FXRGB(255,200,0), this, ID_ALL_REDRAW, LAYOUT_SIDE_TOP|COLORWELL_OPAQUEONLY|LAYOUT_FIX_WIDTH|LAYOUT_LEFT, 0, 0, 50, 0);
00310 
00311         FXGroupBox *fontGroupbox = new FXGroupBox(maintabFrame, "Font", GROUPBOX_TITLE_LEFT|FRAME_GROOVE|LAYOUT_FILL_X);
00312         FXHorizontalFrame *textfontmainFrame = new FXHorizontalFrame(fontGroupbox, LAYOUT_SIDE_TOP|FRAME_NONE|LAYOUT_FILL_X|PACK_UNIFORM_HEIGHT);
00313         new FXLabel(textfontmainFrame, "Text font:", NULL, 0, 0, 0, 0, 0, 0, 0, 0);
00314         textfontTextfield = new FXTextField(textfontmainFrame, 10, NULL, 0, FRAME_SUNKEN|LAYOUT_FILL_X|TEXTFIELD_READONLY|TEXTFIELD_AUTOGRAY);
00315         new FXButton(textfontmainFrame, "Select", NULL, this, ID_TEXTFONT, FRAME_RAISED|LAYOUT_TOP|LAYOUT_LEFT);
00316         FXHorizontalFrame *symfontmainFrame = new FXHorizontalFrame(fontGroupbox, LAYOUT_SIDE_TOP|FRAME_NONE|LAYOUT_FILL_X|PACK_UNIFORM_HEIGHT);
00317         new FXLabel(symfontmainFrame, "Symbol font:", NULL, 0, 0, 0, 0, 0, 0, 0, 0);
00318         symfontTextfield = new FXTextField(symfontmainFrame, 10, NULL, 0, FRAME_SUNKEN|LAYOUT_FILL_X|TEXTFIELD_READONLY|TEXTFIELD_AUTOGRAY);
00319         new FXButton(symfontmainFrame, "Select", NULL, this, ID_SYMFONT, FRAME_RAISED|LAYOUT_TOP|LAYOUT_LEFT);
00320         FXHorizontalFrame *numfontmainFrame = new FXHorizontalFrame(fontGroupbox, LAYOUT_SIDE_TOP|FRAME_NONE|LAYOUT_FILL_X|PACK_UNIFORM_HEIGHT);
00321         new FXLabel(numfontmainFrame, "Number font size multiplier:", NULL, 0, 0, 0, 0, 0, 0, 0, 0);
00322         numfontTextfield = new FXTextField(numfontmainFrame, 5, this, ID_NUMFONT, FRAME_SUNKEN|TEXTFIELD_REAL|LAYOUT_CENTER_Y);
00323         FXGroupBox *fontaaGroupbox = new FXGroupBox(fontGroupbox, "Font antialiasing", FRAME_GROOVE|LAYOUT_FILL_Y|LAYOUT_CENTER_Y);
00324         aaresredRadiobutton = new FXRadioButton(fontaaGroupbox, "Resolution reduction (best quality - averages double resolution font)", this, ID_AAMETHOD, CHECKBUTTON_NORMAL);
00325         aagaussianRadiobutton = new FXRadioButton(fontaaGroupbox, "Gaussian (for systems with limited font scaling)", this, ID_AAMETHOD, CHECKBUTTON_NORMAL);
00326         fontaaGroupbox->hide();
00327 
00328 
00329 // Hdr tab ===============================================
00330         sdTab = new FXTabItem(contentsTabbook, "&Hdr", NULL);
00331         FXVerticalFrame* hdtabFrame = new FXVerticalFrame(contentsTabbook, LAYOUT_SIDE_TOP|LAYOUT_FILL_X|FRAME_THICK|FRAME_RAISED);
00332         hdText = new FXText(hdtabFrame, NULL, 0, FRAME_SUNKEN|LAYOUT_FILL_X|TEXT_READONLY|TEXT_SHOWACTIVE|LAYOUT_FILL_Y);
00333 
00334 
00335 // SD tab ===============================================
00336         sdTab = new FXTabItem(contentsTabbook, "&SD", NULL);
00337         FXVerticalFrame* sdtabFrame = new FXVerticalFrame(contentsTabbook, LAYOUT_SIDE_TOP|LAYOUT_FILL_X|FRAME_THICK|FRAME_RAISED);
00338 
00339         FXGroupBox *sdinfoGroupbox = new FXGroupBox(sdtabFrame, "SD Information", FRAME_GROOVE|LAYOUT_FILL_X|LAYOUT_SIDE_TOP);
00340         FXHorizontalFrame *sdinfoFrame = new FXHorizontalFrame(sdinfoGroupbox, LAYOUT_TOP|LAYOUT_FILL_X|FRAME_NONE, 0, 0, 0, 0, 0, 0, 0, 0);
00341         FXVerticalFrame *sd1Frame = new FXVerticalFrame(sdinfoFrame, LAYOUT_TOP|LAYOUT_FILL_X|FRAME_NONE, 0, 0, 0, 0, 10, 20);
00342         FXVerticalFrame *sd2Frame = new FXVerticalFrame(sdinfoFrame, LAYOUT_TOP|LAYOUT_FILL_X|FRAME_NONE, 0, 0, 0, 0, 20, 10);
00343         FXHorizontalFrame *sdnsweepsFrame = new FXHorizontalFrame(sd1Frame, LAYOUT_SIDE_TOP|FRAME_NONE|LAYOUT_FILL_X|PACK_UNIFORM_HEIGHT|LAYOUT_LEFT, 0, 0, 0, 0, 0, 0, 0, 0);
00344         new FXLabel(sdnsweepsFrame, "Number of sweeps:", NULL, 0, 0, 0, 0, 0, 0, 0, 0);
00345         sdnsweepsTextfield = new FXTextField(sdnsweepsFrame, 10, NULL, 0, TEXTFIELD_REAL|FRAME_SUNKEN|LAYOUT_RIGHT);
00346         FXHorizontalFrame *sdncolsFrame = new FXHorizontalFrame(sd2Frame, LAYOUT_SIDE_TOP|FRAME_NONE|LAYOUT_FILL_X|PACK_UNIFORM_HEIGHT|LAYOUT_LEFT, 0, 0, 0, 0, 0, 0, 0, 0);
00347         new FXLabel(sdncolsFrame, "Columns per sweep:", NULL, 0, 0, 0, 0, 0, 0, 0, 0);
00348         sdncolsTextfield = new FXTextField(sdncolsFrame, 10, NULL, 0, TEXTFIELD_INTEGER|FRAME_SUNKEN|LAYOUT_RIGHT);
00349         FXHorizontalFrame *sdnsdFrame = new FXHorizontalFrame(sd1Frame, LAYOUT_SIDE_TOP|FRAME_NONE|LAYOUT_FILL_X|PACK_UNIFORM_HEIGHT|LAYOUT_LEFT, 0, 0, 0, 0, 0, 0, 0, 0);
00350         new FXLabel(sdnsdFrame, "Number of SD items:", NULL, 0, 0, 0, 0, 0, 0, 0, 0);
00351         sdnsdTextfield = new FXTextField(sdnsdFrame, 10, NULL, 0, TEXTFIELD_INTEGER|FRAME_SUNKEN|LAYOUT_RIGHT);
00352         FXHorizontalFrame *sdnptsFrame = new FXHorizontalFrame(sd2Frame, LAYOUT_SIDE_TOP|FRAME_NONE|LAYOUT_FILL_X|PACK_UNIFORM_HEIGHT|LAYOUT_LEFT, 0, 0, 0, 0, 0, 0, 0, 0);
00353         new FXLabel(sdnptsFrame, "Number of points:", NULL, 0, 0, 0, 0, 0, 0, 0, 0);
00354         sdnptsTextfield = new FXTextField(sdnptsFrame, 10, NULL, 0, TEXTFIELD_INTEGER|FRAME_SUNKEN|LAYOUT_RIGHT);
00355 
00356         sdIconlist = new FXIconList(sdtabFrame, this, ID_SD_SWEEPS, ICONLIST_EXTENDEDSELECT|ICONLIST_AUTOSIZE|ICONLIST_DETAILED|FRAME_SUNKEN|LAYOUT_FILL_X|LAYOUT_FILL_Y);
00357 
00358 
00359 // Analysis tab ========================================
00360         analysisTab = new FXTabItem(contentsTabbook, "&Data", NULL);
00361         FXVerticalFrame* databFrame = new FXVerticalFrame(contentsTabbook, LAYOUT_SIDE_TOP|LAYOUT_FILL_X|FRAME_THICK|FRAME_RAISED);
00362 
00363         FXGroupBox *dasettingsGroupbox = new FXGroupBox(databFrame, "Data Selection", FRAME_GROOVE|LAYOUT_FILL_X|LAYOUT_SIDE_TOP);
00364         FXHorizontalFrame *dasettingsFrame = new FXHorizontalFrame(dasettingsGroupbox, LAYOUT_TOP|LAYOUT_FILL_X|FRAME_NONE, 0, 0, 0, 0, 0, 0, 0, 0);
00365         FXVerticalFrame *da1Frame = new FXVerticalFrame(dasettingsFrame, LAYOUT_TOP|LAYOUT_FILL_X|FRAME_NONE, 0, 0, 0, 0);
00366         FXVerticalFrame *da2Frame = new FXVerticalFrame(dasettingsFrame, LAYOUT_TOP|LAYOUT_FILL_X|FRAME_NONE, 0, 0, 0, 0);
00367         FXVerticalFrame *da3Frame = new FXVerticalFrame(dasettingsFrame, LAYOUT_TOP|LAYOUT_FILL_X|LAYOUT_FILL_Y|PACK_UNIFORM_HEIGHT|FRAME_NONE, 0, 0, 0, 0);
00368         FXHorizontalFrame *daxcolFrame = new FXHorizontalFrame(da1Frame, LAYOUT_BOTTOM|FRAME_NONE|LAYOUT_FILL_X|PACK_UNIFORM_HEIGHT|LAYOUT_LEFT, 0, 0, 0, 0, 0, 0, 0, 0);
00369         new FXLabel(daxcolFrame, "X column:", NULL, 0, 0, 0, 0, 0, 0, 0, 0);
00370         daxcolListbox = new FXListBox(daxcolFrame, this, ID_DA_XRANGE, FRAME_SUNKEN|LISTBOX_NORMAL|LAYOUT_RIGHT, 0, 0, 0, 0);
00371         FXHorizontalFrame *dazcolFrame = new FXHorizontalFrame(da2Frame, LAYOUT_BOTTOM|FRAME_NONE|LAYOUT_FILL_X|PACK_UNIFORM_HEIGHT|LAYOUT_LEFT, 0, 0, 0, 0, 0, 0, 0, 0);
00372         new FXLabel(dazcolFrame, "Z column:", NULL, 0, 0, 0, 0, 0, 0, 0, 0);
00373         dazcolListbox = new FXListBox(dazcolFrame, NULL, 0, FRAME_SUNKEN|LISTBOX_NORMAL|LAYOUT_RIGHT, 0, 0, 0, 0);
00374         FXHorizontalFrame *dasselectFrame = new FXHorizontalFrame(da3Frame, LAYOUT_BOTTOM|FRAME_NONE|LAYOUT_FILL_X|PACK_UNIFORM_HEIGHT|LAYOUT_LEFT, 0, 0, 0, 0, 0, 0, 0, 0);
00375         dasweepselectCheckbutton = new FXCheckButton(dasselectFrame, "Select sweeps from table", this, ID_DA_SSELECT, CHECKBUTTON_NORMAL|LAYOUT_LEFT|LAYOUT_CENTER_Y);
00376         FXHorizontalFrame *dassweepFrame = new FXHorizontalFrame(da1Frame, LAYOUT_BOTTOM|FRAME_NONE|LAYOUT_FILL_X|PACK_UNIFORM_HEIGHT|LAYOUT_LEFT, 0, 0, 0, 0, 0, 0, 0, 0);
00377         new FXLabel(dassweepFrame, "Start sweep:", NULL, 0, 0, 0, 0, 0, 0, 0, 0);
00378         dassweepTextfield = new FXTextField(dassweepFrame, 5, this, ID_DA_SWEEPCHANGE, TEXTFIELD_INTEGER|FRAME_SUNKEN|LAYOUT_RIGHT);
00379         FXHorizontalFrame *daesweepFrame = new FXHorizontalFrame(da2Frame, LAYOUT_BOTTOM|FRAME_NONE|LAYOUT_FILL_X|PACK_UNIFORM_HEIGHT|LAYOUT_LEFT, 0, 0, 0, 0, 0, 0, 0, 0);
00380         new FXLabel(daesweepFrame, "End sweep:", NULL, 0, 0, 0, 0, 0, 0, 0, 0);
00381         daesweepTextfield = new FXTextField(daesweepFrame, 5, this, ID_DA_SWEEPCHANGE, TEXTFIELD_INTEGER|FRAME_SUNKEN|LAYOUT_RIGHT);
00382         FXHorizontalFrame *dastrideFrame = new FXHorizontalFrame(da3Frame, LAYOUT_BOTTOM|FRAME_NONE|LAYOUT_FILL_X|PACK_UNIFORM_HEIGHT|LAYOUT_LEFT, 0, 0, 0, 0, 0, 0, 0, 0);
00383         new FXLabel(dastrideFrame, "Sweep stride:", NULL, 0, 0, 0, 0, 0, 0, 0, 0);
00384         dastrideTextfield = new FXTextField(dastrideFrame, 5, this, ID_DA_XRANGE, TEXTFIELD_INTEGER|FRAME_SUNKEN|LAYOUT_RIGHT);
00385         FXHorizontalFrame *daxinminFrame = new FXHorizontalFrame(da1Frame, LAYOUT_BOTTOM|FRAME_NONE|LAYOUT_FILL_X|PACK_UNIFORM_HEIGHT|LAYOUT_LEFT, 0, 0, 0, 0, 0, 0, 0, 0);
00386         new FXLabel(daxinminFrame, "X min:", NULL, 0, 0, 0, 0, 0, 0, 0, 0);
00387         daxinminTextfield = new FXTextField(daxinminFrame, 10, this, ID_DA_RANGE, TEXTFIELD_REAL|FRAME_SUNKEN|LAYOUT_RIGHT);
00388         FXHorizontalFrame *daxinmaxFrame = new FXHorizontalFrame(da2Frame, LAYOUT_BOTTOM|FRAME_NONE|LAYOUT_FILL_X|PACK_UNIFORM_HEIGHT|LAYOUT_LEFT, 0, 0, 0, 0, 0, 0, 0, 0);
00389         new FXLabel(daxinmaxFrame, "X max:", NULL, 0, 0, 0, 0, 0, 0, 0, 0);
00390         daxinmaxTextfield = new FXTextField(daxinmaxFrame, 10, this, ID_DA_RANGE, TEXTFIELD_REAL|FRAME_SUNKEN|LAYOUT_RIGHT);
00391         FXHorizontalFrame *daxautoFrame = new FXHorizontalFrame(da3Frame, LAYOUT_BOTTOM|FRAME_NONE|LAYOUT_FILL_X|PACK_UNIFORM_HEIGHT|LAYOUT_LEFT, 0, 0, 0, 0, 0, 0, 0, 0);
00392         daxautoCheckbutton = new FXCheckButton(daxautoFrame, "Auto target range", this, ID_DA_AUTOX, CHECKBUTTON_NORMAL|LAYOUT_LEFT|LAYOUT_CENTER_Y);
00393 
00394         FXGroupBox *daformulaGroupbox = new FXGroupBox(databFrame, "Data Transforms", FRAME_GROOVE|LAYOUT_FILL_X|LAYOUT_SIDE_TOP);
00395         FXHorizontalFrame *datargetFrame = new FXHorizontalFrame(daformulaGroupbox, LAYOUT_TOP|LAYOUT_FILL_X|FRAME_NONE, 0, 0, 0, 0, 0, 0, 0, 0);
00396         FXVerticalFrame *daf1Frame = new FXVerticalFrame(datargetFrame, LAYOUT_TOP|LAYOUT_FILL_X|FRAME_NONE, 0, 0, 0, 0);
00397         FXVerticalFrame *daf2Frame = new FXVerticalFrame(datargetFrame, LAYOUT_TOP|LAYOUT_FILL_X|FRAME_NONE, 0, 0, 0, 0);
00398         FXVerticalFrame *daf3Frame = new FXVerticalFrame(datargetFrame, LAYOUT_TOP|LAYOUT_FILL_X|FRAME_NONE, 0, 0, 0, 0);
00399         FXHorizontalFrame *daysdFrame = new FXHorizontalFrame(daf3Frame, LAYOUT_BOTTOM|FRAME_NONE|LAYOUT_FILL_X|PACK_UNIFORM_HEIGHT|LAYOUT_LEFT, 0, 0, 0, 0, 0, 0, 0, 0);
00400         new FXLabel(daysdFrame, "Y SD:", NULL, 0, 0, 0, 0, 0, 0, 0, 0);
00401         daysdListbox = new FXListBox(daysdFrame, this, ID_DA_YSDCHANGE, FRAME_SUNKEN|LISTBOX_NORMAL|LAYOUT_RIGHT, 0, 0, 0, 0);
00402         FXHorizontalFrame *dayminFrame = new FXHorizontalFrame(daf1Frame, LAYOUT_BOTTOM|FRAME_NONE|LAYOUT_FILL_X|PACK_UNIFORM_HEIGHT|LAYOUT_LEFT, 0, 0, 0, 0, 0, 0, 0, 0);
00403         new FXLabel(dayminFrame, "Y min:", NULL, 0, 0, 0, 0, 0, 0, 0, 0);
00404         dayminTextfield = new FXTextField(dayminFrame, 9, this, ID_DA_RANGE, TEXTFIELD_REAL|FRAME_SUNKEN|LAYOUT_RIGHT);
00405         FXHorizontalFrame *daymaxFrame = new FXHorizontalFrame(daf2Frame, LAYOUT_BOTTOM|FRAME_NONE|LAYOUT_FILL_X|PACK_UNIFORM_HEIGHT|LAYOUT_LEFT, 0, 0, 0, 0, 0, 0, 0, 0);
00406         new FXLabel(daymaxFrame, "Y max:", NULL, 0, 0, 0, 0, 0, 0, 0, 0);
00407         daymaxTextfield = new FXTextField(daymaxFrame, 9, this, ID_DA_RANGE, TEXTFIELD_REAL|FRAME_SUNKEN|LAYOUT_RIGHT);
00408         FXHorizontalFrame *daxtgtminFrame = new FXHorizontalFrame(daf1Frame, LAYOUT_BOTTOM|FRAME_NONE|LAYOUT_FILL_X|PACK_UNIFORM_HEIGHT|LAYOUT_LEFT, 0, 0, 0, 0, 0, 0, 0, 0);
00409         new FXLabel(daxtgtminFrame, "X target min:", NULL, 0, 0, 0, 0, 0, 0, 0, 0);
00410         daxtgtminTextfield = new FXTextField(daxtgtminFrame, 9, this, ID_DA_RANGE, TEXTFIELD_REAL|FRAME_SUNKEN|LAYOUT_RIGHT);
00411         FXHorizontalFrame *daxtgtmaxFrame = new FXHorizontalFrame(daf2Frame, LAYOUT_BOTTOM|FRAME_NONE|LAYOUT_FILL_X|PACK_UNIFORM_HEIGHT|LAYOUT_LEFT, 0, 0, 0, 0, 0, 0, 0, 0);
00412         new FXLabel(daxtgtmaxFrame, "X target max:", NULL, 0, 0, 0, 0, 0, 0, 0, 0);
00413         daxtgtmaxTextfield = new FXTextField(daxtgtmaxFrame, 9, this, ID_DA_RANGE, TEXTFIELD_REAL|FRAME_SUNKEN|LAYOUT_RIGHT);
00414         FXHorizontalFrame *daxtgtresFrame = new FXHorizontalFrame(daf3Frame, LAYOUT_BOTTOM|FRAME_NONE|LAYOUT_FILL_X|PACK_UNIFORM_HEIGHT|LAYOUT_LEFT, 0, 0, 0, 0, 0, 0, 0, 0);
00415         new FXLabel(daxtgtresFrame, "X sample window:", NULL, 0, 0, 0, 0, 0, 0, 0, 0);
00416         daxtgtresTextfield = new FXTextField(daxtgtresFrame, 9, NULL, 0, TEXTFIELD_REAL|FRAME_SUNKEN|LAYOUT_RIGHT);
00417         FXHorizontalFrame *dascatterFrame = new FXHorizontalFrame(daformulaGroupbox, LAYOUT_BOTTOM|FRAME_NONE|LAYOUT_FILL_X|PACK_UNIFORM_HEIGHT|LAYOUT_LEFT, 0, 0, 0, 0, 0, 0, 0, 0);
00418         dascatterCheckbutton = new FXCheckButton(dascatterFrame, "Plot colourscale as a scatter graph, Y column is:", this, ID_DA_YSDCHANGE, CHECKBUTTON_NORMAL|LAYOUT_LEFT|LAYOUT_SIDE_TOP, 0, 0, 0, 0, 0, 0, 0, 0);
00419         dascatterListbox = new FXListBox(dascatterFrame, this, ID_DA_YSDCHANGE, FRAME_SUNKEN|LISTBOX_NORMAL|LAYOUT_LEFT, 0, 0, 0, 0);
00420         FXHorizontalFrame *daxformulaFrame = new FXHorizontalFrame(daformulaGroupbox, LAYOUT_BOTTOM|FRAME_NONE|LAYOUT_FILL_X|PACK_UNIFORM_HEIGHT|LAYOUT_LEFT, 0, 0, 0, 0, 0, 0, 0, 0);
00421         new FXLabel(daxformulaFrame, "X function:", NULL, 0, 0, 0, 0, 0, 0, 0, 0);
00422         dastatusTextfield[0] = new FXTextField(daxformulaFrame, 20, NULL, 0, LAYOUT_FILL_X|TEXT_WORDWRAP|TEXTFIELD_READONLY, 0, 0, 0, 0);
00423         dafunctionText[0] = new FXText(daformulaGroupbox, this, ID_DA_XPARSE, FRAME_SUNKEN|LAYOUT_FILL_X|TEXT_WORDWRAP|LAYOUT_FIX_HEIGHT, 0, 0, 0, 35);
00424         FXHorizontalFrame *dayformulaFrame = new FXHorizontalFrame(daformulaGroupbox, LAYOUT_BOTTOM|FRAME_NONE|LAYOUT_FILL_X|PACK_UNIFORM_HEIGHT|LAYOUT_LEFT, 0, 0, 0, 0, 0, 0, 0, 0);
00425         new FXLabel(dayformulaFrame, "Y function:", NULL, 0, 0, 0, 0, 0, 0, 0, 0);
00426         dastatusTextfield[1] = new FXTextField(dayformulaFrame, 20, NULL, 0, LAYOUT_FILL_X|TEXT_WORDWRAP|TEXTFIELD_READONLY, 0, 0, 0, 0);
00427         dafunctionText[1] = new FXText(daformulaGroupbox, this, ID_DA_YPARSE, FRAME_SUNKEN|LAYOUT_FILL_X|TEXT_WORDWRAP|LAYOUT_FIX_HEIGHT, 0, 0, 0, 35);
00428         FXHorizontalFrame *dazformulaFrame = new FXHorizontalFrame(daformulaGroupbox, LAYOUT_BOTTOM|FRAME_NONE|LAYOUT_FILL_X|PACK_UNIFORM_HEIGHT|LAYOUT_LEFT, 0, 0, 0, 0, 0, 0, 0, 0);
00429         new FXLabel(dazformulaFrame, "Z function:", NULL, 0, 0, 0, 0, 0, 0, 0, 0);
00430         dastatusTextfield[2] = new FXTextField(dazformulaFrame, 20, NULL, 0, LAYOUT_FILL_X|TEXT_WORDWRAP|TEXTFIELD_READONLY, 0, 0, 0, 0);
00431         dafunctionText[2] = new FXText(daformulaGroupbox, this, ID_DA_ZPARSE, FRAME_SUNKEN|LAYOUT_FILL_X|TEXT_WORDWRAP|LAYOUT_FIX_HEIGHT, 0, 0, 0, 35);
00432 
00433         FXGroupBox *dadiffGroupbox = new FXGroupBox(databFrame, "Differentiation", FRAME_GROOVE|LAYOUT_FILL_X|LAYOUT_SIDE_TOP);
00434         FXHorizontalFrame *dadiffFrame = new FXHorizontalFrame(dadiffGroupbox, LAYOUT_BOTTOM|FRAME_NONE|LAYOUT_FILL_X|PACK_UNIFORM_HEIGHT|LAYOUT_LEFT, 0, 0, 0, 0, 0, 0, 0, 0);
00435         dadiffCheckbutton = new FXCheckButton(dadiffFrame, "Differentiate along ", NULL, 0, CHECKBUTTON_NORMAL|LAYOUT_LEFT|LAYOUT_SIDE_TOP, 0, 0, 0, 0, 0, 0, 0, 0);
00436 //      dadiffTogglebutton = new FXToggleButton(dadiffFrame, "Y", "X", NULL, NULL, NULL, 0, TOGGLEBUTTON_NORMAL|LAYOUT_LEFT);
00437         dadiffPopup = new FXPopup(this);
00438         new FXOption(dadiffPopup, " X", NULL, NULL, 0, JUSTIFY_HZ_APART|ICON_AFTER_TEXT);
00439         new FXOption(dadiffPopup, " Y", NULL, NULL, 0, JUSTIFY_HZ_APART|ICON_AFTER_TEXT);
00440         new FXOption(dadiffPopup, " XY", NULL, NULL, 0, JUSTIFY_HZ_APART|ICON_AFTER_TEXT);
00441         dadiffOptionmenu = new FXOptionMenu(dadiffFrame, dadiffPopup, LAYOUT_CENTER_Y|FRAME_RAISED|JUSTIFY_HZ_APART|ICON_AFTER_TEXT);
00442         daorderCheckbutton = new FXCheckButton(dadiffFrame, "Do integration first )", NULL, 0, CHECKBUTTON_NORMAL|LAYOUT_RIGHT|LAYOUT_SIDE_TOP, 0, 0, 0, 0, 0, 0, 0, 0);
00443         new FXLabel(dadiffFrame, "(", NULL, LAYOUT_RIGHT, 0, 0, 0, 0, 0, 0, 0);
00444         FXGroupBox *daintGroupbox = new FXGroupBox(databFrame, "Integration", FRAME_GROOVE|LAYOUT_FILL_X|LAYOUT_SIDE_TOP);
00445         FXHorizontalFrame *daintFrame = new FXHorizontalFrame(daintGroupbox, LAYOUT_BOTTOM|FRAME_NONE|LAYOUT_FILL_X|PACK_UNIFORM_HEIGHT|LAYOUT_LEFT, 0, 0, 0, 0, 0, 0, 0, 0);
00446         daintCheckbutton = new FXCheckButton(daintFrame, "Integrate along ", NULL, 0, CHECKBUTTON_NORMAL|LAYOUT_LEFT|LAYOUT_SIDE_TOP, 0, 0, 0, 0, 0, 0, 0, 0);
00447         daintTogglebutton = new FXToggleButton(daintFrame, " Y ", " X ", NULL, NULL, NULL, 0, LAYOUT_LEFT|FRAME_SUNKEN);
00448         new FXLabel(daintFrame, " and set X/Y value ", NULL, 0, 0, 0, 0, 0, 0, 0, 0);
00449         daintzeroTextfield = new FXTextField(daintFrame, 8, NULL, 0, LAYOUT_LEFT|FRAME_SUNKEN, 0, 0, 0, 0);
00450         new FXLabel(daintFrame, " as the origin", NULL, 0, 0, 0, 0, 0, 0, 0, 0);
00451 
00452         FXHorizontalFrame *daprocessFrame = new FXHorizontalFrame(databFrame, LAYOUT_SIDE_TOP|FRAME_NONE|LAYOUT_FILL_X);
00453         daprocessButton = new FXButton(daprocessFrame, "  &Process  ", NULL, this, ID_DA_PROCESS, FRAME_RAISED|LAYOUT_RIGHT|ICON_BEFORE_TEXT);
00454         FXHorizontalFrame *daexportFrame = new FXHorizontalFrame(databFrame, LAYOUT_SIDE_TOP|FRAME_NONE|LAYOUT_FILL_X);
00455         new FXButton(daexportFrame, "&Export data", NULL, this, ID_DA_EXPORT, FRAME_RAISED|LAYOUT_RIGHT|ICON_BEFORE_TEXT);
00456         daexportallCheckbutton = new FXCheckButton(daexportFrame, "Export all columns", NULL, 0, CHECKBUTTON_NORMAL|LAYOUT_RIGHT|LAYOUT_CENTER_Y, 0, 0, 0, 0, 0, 0, 0, 0);
00457 
00458 
00459 // Greyscale tab ========================================
00460         greyscaleTab = new FXTabItem(contentsTabbook, "&2D", NULL);
00461         FXVerticalFrame* gstabFrame = new FXVerticalFrame(contentsTabbook, LAYOUT_SIDE_TOP|LAYOUT_FILL_X|FRAME_THICK|FRAME_RAISED);
00462 
00463         // Greyscale tab axes
00464         FXGroupBox *gsaxesGroupbox = new FXGroupBox(gstabFrame, "Axes", GROUPBOX_TITLE_LEFT|FRAME_GROOVE|LAYOUT_FILL_X|LAYOUT_FILL_Y);
00465         FXHorizontalFrame *gsparamstopFrame = new FXHorizontalFrame(gsaxesGroupbox, LAYOUT_FILL_X|LAYOUT_FILL_Y|FRAME_NONE, 0, 0, 0, 0, 0, 0, 0, 0);
00466         FXVerticalFrame *gsparamsmainFrame = new FXVerticalFrame(gsparamstopFrame, LAYOUT_TOP|LAYOUT_FILL_X|LAYOUT_FILL_Y|FRAME_NONE, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
00467         FXHorizontalFrame *gsparamstitleFrame = new FXHorizontalFrame(gsparamsmainFrame, LAYOUT_TOP|LAYOUT_CENTER_X|LAYOUT_FILL_Y|FRAME_NONE, 0, 0, 0, 0, 0, 0, 0, 0);
00468         gstitleCheckbutton = new FXCheckButton(gsparamstitleFrame, "", this, ID_GS_REDRAW, CHECKBUTTON_NORMAL|LAYOUT_LEFT|LAYOUT_CENTER_Y);
00469         gstitleTextfield = new FXTextField(gsparamstitleFrame, 50, this, ID_GS_REDRAW, FRAME_SUNKEN|LAYOUT_LEFT|LAYOUT_CENTER_Y);
00470         gstitlekeysMenubutton = new FXMenuButton(gsparamstitleFrame, "", NULL, keysMenupane, MENUBUTTON_ATTACH_CENTER|LAYOUT_FILL_Y|LAYOUT_LEFT|FRAME_RAISED);
00471         FXHorizontalFrame *gsparamssubtitleFrame = new FXHorizontalFrame(gsparamsmainFrame, LAYOUT_TOP|LAYOUT_CENTER_X|LAYOUT_FILL_Y|FRAME_NONE, 0, 0, 0, 0, 0, 0, 0);
00472         gssubtitleCheckbutton = new FXCheckButton(gsparamssubtitleFrame, "", this, ID_GS_REDRAW, CHECKBUTTON_NORMAL|LAYOUT_LEFT|LAYOUT_CENTER_Y);
00473         gssubtitleTextfield = new FXTextField(gsparamssubtitleFrame, 50, this, ID_GS_REDRAW, FRAME_SUNKEN|LAYOUT_LEFT|LAYOUT_CENTER_Y);
00474         gssubtitlekeysMenubutton = new FXMenuButton(gsparamssubtitleFrame, "", NULL, keysMenupane, MENUBUTTON_ATTACH_CENTER|LAYOUT_FILL_Y|LAYOUT_LEFT|FRAME_RAISED);
00475         FXHorizontalFrame *gsparams1mainFrame = new FXHorizontalFrame(gsparamsmainFrame, LAYOUT_TOP|LAYOUT_FILL_X|LAYOUT_FILL_Y|FRAME_NONE, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
00476         FXSpring *gsyparamsSpring = new FXSpring(gsparams1mainFrame, LAYOUT_FILL_X|LAYOUT_FILL_Y, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0);
00477         FXVerticalFrame *gsyparamsFrame = new FXVerticalFrame(gsyparamsSpring, LAYOUT_FILL_X|LAYOUT_FILL_Y|FRAME_NONE|PACK_UNIFORM_HEIGHT, 0, 0, 0, 0);
00478         gsymaxTextfield = new FXTextField(gsyparamsFrame, 8, this, ID_GS_RECALCREQ, TEXTFIELD_REAL|FRAME_SUNKEN|LAYOUT_RIGHT|LAYOUT_TOP);
00479         gsylabelTextfield = new FXTextField(gsyparamsFrame, 10, this, ID_GS_REDRAW, FRAME_SUNKEN|LAYOUT_RIGHT|LAYOUT_CENTER_Y);
00480         gsylabelrotCheckbutton = new FXCheckButton(gsyparamsFrame, "Rotate", this, ID_GS_REDRAW, CHECKBUTTON_NORMAL|LAYOUT_RIGHT|LAYOUT_CENTER_Y);
00481         FXHorizontalFrame *gsyminparamsFrame = new FXHorizontalFrame(gsyparamsFrame, FRAME_NONE|LAYOUT_RIGHT, 0, 0, 0, 0, 0, 0, 0, 0);
00482         new FXButton(gsyminparamsFrame, FLIP_BUTTON, NULL, this, ID_GS_FLIPY, FRAME_RAISED|LAYOUT_LEFT|ICON_BEFORE_TEXT);
00483         gsyminTextfield = new FXTextField(gsyminparamsFrame, 8, this, ID_GS_RECALCREQ, TEXTFIELD_REAL|FRAME_SUNKEN);
00484         FXSpring *gsdataparamsSpring = new FXSpring(gsparams1mainFrame, LAYOUT_FILL_X|LAYOUT_FILL_Y, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0);
00485         FXVerticalFrame *gsdataFrame = new FXVerticalFrame(gsdataparamsSpring, LAYOUT_FILL_X|LAYOUT_FILL_Y|FRAME_LINE|PACK_UNIFORM_HEIGHT, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
00486         new FXButton(gsdataFrame, "Drawing", NULL, this, ID_GS_DRAW, FRAME_RAISED|LAYOUT_CENTER_X|LAYOUT_CENTER_Y|ICON_BEFORE_TEXT);
00487         FXSpring *gszparamsSpring = new FXSpring(gsparams1mainFrame, LAYOUT_FILL_X|LAYOUT_FILL_Y, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0);
00488         FXHorizontalFrame *gszrampparamsFrame = new FXHorizontalFrame(gszparamsSpring, LAYOUT_FILL_Y|FRAME_NONE, 0, 0, 0, 0);
00489         FXVerticalFrame *gszrampFrame = new FXVerticalFrame(gszrampparamsFrame, LAYOUT_FILL_Y|LAYOUT_FIX_WIDTH|FRAME_LINE, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0);
00490         FXVerticalFrame *gszparamsFrame = new FXVerticalFrame(gszrampparamsFrame, LAYOUT_FILL_X|LAYOUT_FILL_Y|FRAME_NONE, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
00491         gszmaxTextfield = new FXTextField(gszparamsFrame, 8, this, ID_GS_REDRAW, TEXTFIELD_REAL|FRAME_SUNKEN|LAYOUT_LEFT|LAYOUT_TOP);
00492         gszlabelTextfield = new FXTextField(gszparamsFrame, 10, this, ID_GS_REDRAW, FRAME_SUNKEN|LAYOUT_LEFT|LAYOUT_CENTER_Y);
00493         FXHorizontalFrame *gszlabelsparamsFrame = new FXHorizontalFrame(gszparamsFrame, LAYOUT_CENTER_Y|FRAME_NONE, 0, 0, 0, 0, 0, 0, 0, 0);
00494         gszlabelMenupane = new FXMenuPane(this);
00495         gshidegradzlabelMenucheck = new FXMenuCheck(gszlabelMenupane, "Hide gradient", this, ID_GS_REDRAW);
00496         gshidescalezlabelMenucheck = new FXMenuCheck(gszlabelMenupane, "Hide scale", this, ID_GS_REDRAW);
00497         gshidelabelzlabelMenucheck = new FXMenuCheck(gszlabelMenupane, "Hide label", this, ID_GS_REDRAW);
00498         gszlabelrotMenucheck = new FXMenuCheck(gszlabelMenupane, "Rotate label", this, ID_GS_REDRAW);
00499         gszscaleshowendsMenucheck = new FXMenuCheck(gszlabelMenupane, "Display tick values", this, ID_GS_REDRAW);
00500         gszzoomscaleMenucheck = new FXMenuCheck(gszlabelMenupane, "Auto Z scale", NULL, 0);
00501         gszscaleroundMenucheck = new FXMenuCheck(gszlabelMenupane, "Round Z range", this, ID_GS_ZROUND);
00502         new FXMenuCommand(gszlabelMenupane, "Symmetrise Z", NULL, this, ID_GS_SYMMETRICZ);
00503         gszlabelMenubutton = new FXMenuButton(gszlabelsparamsFrame, "Options", NULL, gszlabelMenupane, MENUBUTTON_ATTACH_CENTER|LAYOUT_LEFT|LAYOUT_CENTER_Y|LAYOUT_FILL_Y|FRAME_SUNKEN|ICON_AFTER_TEXT);
00504         gszminTextfield = new FXTextField(gszparamsFrame, 8, this, ID_GS_REDRAW, TEXTFIELD_REAL|FRAME_SUNKEN|LAYOUT_LEFT|LAYOUT_BOTTOM);
00505 //      FXVerticalFrame *gszdialsFrame = new FXVerticalFrame(gszrampparamsFrame, LAYOUT_FILL_Y|FRAME_NONE, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
00506         FXHorizontalFrame *gsparams2mainFrame = new FXHorizontalFrame(gsparamsmainFrame, LAYOUT_SIDE_TOP|LAYOUT_FILL_X|FRAME_NONE, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
00507         FXSpring *gsb1paramsSpring = new FXSpring(gsparams2mainFrame, LAYOUT_FILL_X|LAYOUT_FILL_Y, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0);
00508         FXHorizontalFrame *gsaxislblFrame = new FXHorizontalFrame(gsb1paramsSpring, LAYOUT_BOTTOM|FRAME_NONE|LAYOUT_LEFT);
00509         new FXButton(gsaxislblFrame, "M+", NULL, this, ID_GS_SAVELABELS, FRAME_RAISED|LAYOUT_LEFT|ICON_BEFORE_TEXT);
00510         gsgraphlabelsMenubutton = new FXMenuButton(gsaxislblFrame, "MR", NULL, gslabelsMenupane, MENUBUTTON_ATTACH_CENTER|ICON_AFTER_TEXT|LAYOUT_LEFT|FRAME_RAISED);
00511         FXSpring *gsxparamsSpring = new FXSpring(gsparams2mainFrame, LAYOUT_FILL_X|LAYOUT_FILL_Y, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0);
00512         FXVerticalFrame *gsbottomparamsFrame = new FXVerticalFrame(gsxparamsSpring, LAYOUT_FILL_X|FRAME_NONE, 0, 0, 0, 0, 0, 0, 0, 0);
00513         FXHorizontalFrame *gsxparamsFrame = new FXHorizontalFrame(gsbottomparamsFrame, LAYOUT_FILL_X|FRAME_NONE);
00514         gsxminTextfield = new FXTextField(gsxparamsFrame, 8, this, ID_GS_RECALCREQ, TEXTFIELD_REAL|FRAME_SUNKEN|LAYOUT_LEFT|LAYOUT_TOP);
00515         gsxlabelTextfield = new FXTextField(gsxparamsFrame, 15, this, ID_GS_REDRAW, FRAME_SUNKEN|LAYOUT_CENTER_X|LAYOUT_TOP);
00516         new FXButton(gsxparamsFrame, FLIP_BUTTON, NULL, this, ID_GS_FLIPX, FRAME_RAISED|LAYOUT_TOP|LAYOUT_CENTER_X|ICON_BEFORE_TEXT);
00517         gsxmaxTextfield = new FXTextField(gsxparamsFrame, 8, this, ID_GS_RECALCREQ, TEXTFIELD_REAL|FRAME_SUNKEN|LAYOUT_RIGHT|LAYOUT_TOP);
00518         FXHorizontalFrame *gszoomparamsFrame = new FXHorizontalFrame(gsbottomparamsFrame, LAYOUT_FILL_X|FRAME_NONE, 0, 0, 0, 0, 0, 0, 0, 0);
00519         new FXButton(gszoomparamsFrame, " Auto range ", NULL, this, ID_GS_AUTORANGE, FRAME_RAISED|LAYOUT_BOTTOM|LAYOUT_LEFT|ICON_BEFORE_TEXT);
00520         gszoombackButton = new FXButton(gszoomparamsFrame, " Zoom back ", NULL, this, ID_GS_ZOOMBACK, FRAME_RAISED|LAYOUT_BOTTOM|LAYOUT_LEFT|ICON_BEFORE_TEXT);
00521         gszoombackButton->disable();
00522         FXSpring *gsb2paramsSpring = new FXSpring(gsparams2mainFrame, LAYOUT_FILL_X|LAYOUT_FILL_Y, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0);
00523 //      FXVerticalFrame *gslim1Frame = new FXVerticalFrame(gsb2paramsSpring, LAYOUT_BOTTOM|FRAME_NONE|LAYOUT_RIGHT, 0, 0, 0, 0, 0, 0, 0, 0);
00524         FXHorizontalFrame *gsgammaparamsFrame = new FXHorizontalFrame(gsb2paramsSpring, FRAME_NONE|LAYOUT_BOTTOM|LAYOUT_RIGHT|LAYOUT_FILL_Y);
00525         gsgammaTextfield = new FXTextField(gsgammaparamsFrame, 5, this, ID_GS_REDRAW, TEXTFIELD_REAL|LAYOUT_BOTTOM|FRAME_SUNKEN|LAYOUT_RIGHT);
00526         new FXLabel(gsgammaparamsFrame, "G", NULL, LAYOUT_RIGHT|LAYOUT_BOTTOM);
00527         FXVerticalFrame *gsparamsdialsFrame = new FXVerticalFrame(gsparamstopFrame, LAYOUT_TOP|LAYOUT_FILL_Y|FRAME_NONE, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
00528         gszmaxSlider = new FXSlider(gsparamsdialsFrame, this, ID_GS_DIALZ, SLIDER_VERTICAL|LAYOUT_FILL_Y);
00529         gszmaxSlider->setRange(-200, 200);
00530         gszmaxSlider->setValue(0);
00531         gszmaxSlider->setIncrement(10);
00532 //      gszmaxDial = new FXDial(gsparamsdialsFrame, this, ID_GS_DIALZ, DIAL_NORMAL|DIAL_VERTICAL|DIAL_HAS_NOTCH|LAYOUT_FILL_Y);
00533 //      gszmaxDial->setNotchSpacing(180);
00534 //      gszmaxDial->setRange(-200, 200);
00535 //      gszmaxDial->setRevolutionIncrement(400);
00536 //      gszmaxDial->setNotchOffset(-900);
00537         gsrealtimeCheckbutton = new FXCheckButton(gsparamsdialsFrame, "", NULL, 0, CHECKBUTTON_NORMAL|LAYOUT_LEFT);
00538         gszminSlider = new FXSlider(gsparamsdialsFrame, this, ID_GS_DIALZ, SLIDER_VERTICAL|LAYOUT_FILL_Y);
00539         gszminSlider->setRange(-200, 200);
00540         gszminSlider->setValue(0);
00541         gszminSlider->setIncrement(10);
00542 //      gszminDial = new FXDial(gsparamsdialsFrame, this, ID_GS_DIALZ, DIAL_NORMAL|DIAL_VERTICAL|DIAL_HAS_NOTCH|LAYOUT_FILL_Y);
00543 //      gszminDial->setNotchSpacing(180);
00544 //      gszminDial->setRange(-200, 200);
00545 //      gszminDial->setRevolutionIncrement(400);
00546 //      gszminDial->setNotchOffset(-900);
00547 
00548         // Greyscale tab plot settings
00549         FXGroupBox *gsplotGroupbox = new FXGroupBox(gstabFrame, "Plot", GROUPBOX_TITLE_LEFT|FRAME_GROOVE|LAYOUT_FILL_X|LAYOUT_FILL_Y);
00550         FXVerticalFrame *gsplotmainFrame = new FXVerticalFrame(gsplotGroupbox, LAYOUT_SIDE_TOP|LAYOUT_FILL_X|FRAME_NONE, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
00551         FXHorizontalFrame *gsdataresFrame = new FXHorizontalFrame(gsplotmainFrame, LAYOUT_SIDE_TOP|LAYOUT_FILL_X|FRAME_NONE);
00552         FXSpring *gsscaleSpring = new FXSpring(gsdataresFrame, LAYOUT_FILL_X, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0);
00553         FXHorizontalFrame *gsscaleFrame = new FXHorizontalFrame(gsscaleSpring, LAYOUT_SIDE_TOP|LAYOUT_FILL_X|FRAME_NONE, 0, 0, 0, 0, 0, 0, 0, 0);
00554         new FXLabel(gsscaleFrame, "Image data size ", NULL);
00555         gsxresTextfield = new FXTextField(gsscaleFrame, 4, this, ID_GS_RECALCREQ, TEXTFIELD_INTEGER|FRAME_SUNKEN);
00556         new FXLabel(gsscaleFrame, " x ", NULL);
00557         gsyresTextfield = new FXTextField(gsscaleFrame, 4, this, ID_GS_RECALCREQ, TEXTFIELD_INTEGER|FRAME_SUNKEN);
00558         FXHorizontalFrame *gsinterpFrame = new FXHorizontalFrame(gsscaleSpring, LAYOUT_SIDE_TOP|LAYOUT_FILL_X|FRAME_NONE, 0, 0, 0, 0, 0, 0, 0, 0);
00559         new FXLabel(gsinterpFrame, "Interpolate along ", NULL);
00560         gsxinterpCheckbutton = new FXCheckButton(gsinterpFrame, "X", this, ID_GS_RECALCREQ, CHECKBUTTON_NORMAL|LAYOUT_LEFT);
00561         gsyinterpCheckbutton = new FXCheckButton(gsinterpFrame, "Y", this, ID_GS_RECALCREQ, CHECKBUTTON_NORMAL|LAYOUT_LEFT);
00562         FXSpring *gscontourSpring = new FXSpring(gsdataresFrame, LAYOUT_FILL_X, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0);
00563         FXHorizontalFrame *gscontourFrame = new FXHorizontalFrame(gscontourSpring, LAYOUT_FILL_X|FRAME_NONE, 0, 0, 0, 0, 0, 0, 0, 0);
00564         gscontourCheckbutton = new FXCheckButton(gscontourFrame, "Contour plot", this, ID_GS_REDRAW, CHECKBUTTON_NORMAL|LAYOUT_LEFT|LAYOUT_CENTER_Y);
00565         gscontourcolColourwell = new FXColorWell(gscontourFrame, FXRGBA(0,0,0,64), this, ID_GS_REDRAW, LAYOUT_LEFT|LAYOUT_FIX_WIDTH|LAYOUT_CENTER_Y, 0, 0, 25, 0);
00566         gscontouraltCheckbutton = new FXCheckButton(gscontourFrame, "(Alternative style)", this, ID_GS_REDRAW, CHECKBUTTON_NORMAL|LAYOUT_LEFT|LAYOUT_CENTER_Y);
00567         FXHorizontalFrame *gscontour2Frame = new FXHorizontalFrame(gscontourSpring, FRAME_NONE, 0, 0, 0, 0, 0, 0, 0, 0);
00568         new FXLabel(gscontour2Frame, "Contour spacing ", NULL);
00569         gscontourspaceTextfield = new FXTextField(gscontour2Frame, 8, this, ID_GS_REDRAW, TEXTFIELD_REAL|FRAME_SUNKEN|LAYOUT_LEFT|LAYOUT_CENTER_Y);
00570         FXHorizontalFrame *gsgridFrame = new FXHorizontalFrame(gsplotmainFrame, LAYOUT_SIDE_TOP|LAYOUT_FILL_X|FRAME_NONE, 0, 0, 0, 0, 0, 0, 0, 0);
00571         FXGroupBox *gsxgridGroupbox = new FXGroupBox(gsgridFrame, "X axis", GROUPBOX_TITLE_LEFT|FRAME_GROOVE|LAYOUT_FILL_X|LAYOUT_FILL_Y);
00572         FXVerticalFrame *gsxgridFrame = new FXVerticalFrame(gsxgridGroupbox, LAYOUT_SIDE_TOP|LAYOUT_FILL_X|FRAME_NONE, 0, 0, 0, 0, 0, 0, 0, 0);
00573         FXHorizontalFrame *gsxmajorgridFrame = new FXHorizontalFrame(gsxgridFrame, LAYOUT_SIDE_TOP|LAYOUT_FILL_X|FRAME_NONE, 0, 0, 0, 0, 0, 0, 0, 0);
00574         new FXLabel(gsxmajorgridFrame, "Major tick: ", NULL);
00575         gsxmajortickTextfield = new FXTextField(gsxmajorgridFrame, 7, this, ID_GS_REDRAW, TEXTFIELD_REAL|FRAME_SUNKEN);
00576         gsxmajorcolColourwell = new FXColorWell(gsxmajorgridFrame, FXRGBA(0,0,0,128), this, ID_GS_REDRAW, LAYOUT_SIDE_TOP|LAYOUT_FIX_WIDTH|LAYOUT_RIGHT, 0, 0, 30, 0);
00577         gsxmajorgridCheckbutton = new FXCheckButton(gsxmajorgridFrame, "Plot grid", this, ID_GS_REDRAW, CHECKBUTTON_NORMAL|LAYOUT_RIGHT);
00578         FXHorizontalFrame *gsxminorgridFrame = new FXHorizontalFrame(gsxgridFrame, LAYOUT_SIDE_TOP|LAYOUT_FILL_X|FRAME_NONE, 0, 0, 0, 0, 0, 0, 0, 0);
00579         new FXLabel(gsxminorgridFrame, "Minor tick: ", NULL);
00580         gsxminortickTextfield = new FXTextField(gsxminorgridFrame, 7, this, ID_GS_REDRAW, TEXTFIELD_REAL|FRAME_SUNKEN);
00581         gsxminorcolColourwell = new FXColorWell(gsxminorgridFrame, FXRGBA(0,0,0,64), this, ID_GS_REDRAW, LAYOUT_SIDE_TOP|LAYOUT_FIX_WIDTH|LAYOUT_RIGHT, 0, 0, 30, 0);
00582         gsxminorgridCheckbutton = new FXCheckButton(gsxminorgridFrame, "Plot grid", this, ID_GS_REDRAW, CHECKBUTTON_NORMAL|LAYOUT_RIGHT);
00583         FXGroupBox *gsygridGroupbox = new FXGroupBox(gsgridFrame, "Y axis", GROUPBOX_TITLE_LEFT|FRAME_GROOVE|LAYOUT_FILL_X|LAYOUT_FILL_Y);
00584         FXVerticalFrame *gsygridFrame = new FXVerticalFrame(gsygridGroupbox, LAYOUT_SIDE_TOP|LAYOUT_FILL_X|FRAME_NONE, 0, 0, 0, 0, 0, 0, 0, 0);
00585         FXHorizontalFrame *gsymajorgridFrame = new FXHorizontalFrame(gsygridFrame, LAYOUT_SIDE_TOP|LAYOUT_FILL_X|FRAME_NONE, 0, 0, 0, 0, 0, 0, 0, 0);
00586         new FXLabel(gsymajorgridFrame, "Major tick: ", NULL);
00587         gsymajortickTextfield = new FXTextField(gsymajorgridFrame, 7, this, ID_GS_REDRAW, TEXTFIELD_REAL|FRAME_SUNKEN);
00588         gsymajorcolColourwell = new FXColorWell(gsymajorgridFrame, FXRGBA(0,0,0,128), this, ID_GS_REDRAW, LAYOUT_SIDE_TOP|LAYOUT_FIX_WIDTH|LAYOUT_RIGHT, 0, 0, 30, 0);
00589         gsymajorgridCheckbutton = new FXCheckButton(gsymajorgridFrame, "Plot grid", this, ID_GS_REDRAW, CHECKBUTTON_NORMAL|LAYOUT_RIGHT);
00590         FXHorizontalFrame *gsyminorgridFrame = new FXHorizontalFrame(gsygridFrame, LAYOUT_SIDE_TOP|LAYOUT_FILL_X|FRAME_NONE, 0, 0, 0, 0, 0, 0, 0, 0);
00591         new FXLabel(gsyminorgridFrame, "Minor tick: ", NULL);
00592         gsyminortickTextfield = new FXTextField(gsyminorgridFrame, 7, this, ID_GS_REDRAW, TEXTFIELD_REAL|FRAME_SUNKEN);
00593         gsyminorcolColourwell = new FXColorWell(gsyminorgridFrame, FXRGBA(0,0,0,64), this, ID_GS_REDRAW, LAYOUT_SIDE_TOP|LAYOUT_FIX_WIDTH|LAYOUT_RIGHT, 0, 0, 30, 0);
00594         gsyminorgridCheckbutton = new FXCheckButton(gsyminorgridFrame, "Plot grid", this, ID_GS_REDRAW, CHECKBUTTON_NORMAL|LAYOUT_RIGHT);
00595 
00596         // Greyscale tab gradient
00597         FXGroupBox *gradGroupbox = new FXGroupBox(gstabFrame, "Gradient", GROUPBOX_TITLE_LEFT|FRAME_GROOVE|LAYOUT_FILL_X);
00598         FXHorizontalFrame *gradmainFrame = new FXHorizontalFrame(gradGroupbox, LAYOUT_SIDE_TOP|LAYOUT_FILL_X|FRAME_NONE, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
00599         zgradGradient = new FXGradientBar(gradmainFrame, this, ID_GS_GRAD, GRADIENTBAR_HORIZONTAL|GRADIENTBAR_CONTROLS_BOTTOM|FRAME_NONE|LAYOUT_FILL_X, 0, 0, 0, 0);
00600 
00601         FXHorizontalFrame *gradops1mainFrame = new FXHorizontalFrame(gradGroupbox, LAYOUT_TOP|LAYOUT_CENTER_X|FRAME_NONE, 0, 0, 0, 0, 0, 0, 0, 0);
00602         new FXLabel(gradops1mainFrame, "Blend:", NULL, LAYOUT_CENTER_Y, 0, 0, 0, 0, 0, 0, 0, 0);
00603         new FXRadioButton(gradops1mainFrame, "Linear", zgradGradient, FXGradientBar::ID_BLEND_LINEAR, LAYOUT_CENTER_Y|LAYOUT_CENTER_X|ICON_BEFORE_TEXT);
00604         new FXRadioButton(gradops1mainFrame, "Power law", zgradGradient, FXGradientBar::ID_BLEND_POWER, LAYOUT_CENTER_Y|LAYOUT_CENTER_X|ICON_BEFORE_TEXT);
00605         new FXRadioButton(gradops1mainFrame, "Sine", zgradGradient, FXGradientBar::ID_BLEND_SINE, LAYOUT_CENTER_Y|LAYOUT_CENTER_X|ICON_BEFORE_TEXT);
00606         new FXRadioButton(gradops1mainFrame, "Increasing", zgradGradient, FXGradientBar::ID_BLEND_INCREASING, LAYOUT_CENTER_Y|LAYOUT_CENTER_X|ICON_BEFORE_TEXT);
00607         new FXRadioButton(gradops1mainFrame, "Decreasing", zgradGrad