/*
* This file is part of rasdaman community.
*
* Rasdaman community is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Rasdaman community is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with rasdaman community. If not, see .
*
* Copyright 2003, 2004, 2005, 2006, 2007, 2008, 2009 Peter Baumann /
rasdaman GmbH.
*
* For more information please see
* or contact Peter Baumann via .
/
/**
* PURPOSE:
*
* Class definitions for the regular object viewers and their support
* classes:
* - rviewImage hierarchy, including pixmapCanvas, rendererControl
* and rviewImageSetup. Source in rviewImage.cpp.
* - rviewChart (chartCanvas). Source in rviewChart.cpp.
* - rviewTable (tableCanvas). Source in rviewTable.cpp.
* COMMENTS:
* None
*/
/**
* @file rviewDmodes.hh
*
* @ingroup Applications
*/
#ifndef _RVIEW_DMODES_H_
#define _RVIEW_DMODES_H_
#include "rasodmg/ref.hh"
#include "rasodmg/marray.hh"
#include "rasodmg/gmarray.hh"
#include "labelManager.hh"
#include "rviewUtils.hh"
#include "rviewDisplay.hh"
#include "rviewColMap.hh"
#ifdef __VISUALC__
struct vertex;
struct vertex_fp;
struct graph_env;
struct tex_desc;
struct voxel_desc;
struct mesh_desc;
struct mdd_desc;
#else
typedef struct vertex;
typedef struct vertex_fp;
typedef struct graph_env;
typedef struct tex_desc;
typedef struct voxel_desc;
typedef struct mesh_desc;
typedef struct mdd_desc;
#endif
class rviewImage;
class rviewRenderImage;
// Possible display formats
enum rviewImageMode {
rim_none,
rim_surf,
rim_voxel
};
// Flags for light direction
#define RVIEW_LIGHTDIR_LEFT 1
#define RVIEW_LIGHTDIR_RIGHT 2
#define RVIEW_LIGHTDIR_DOWN 4
#define RVIEW_LIGHTDIR_UP 8
#define RVIEW_LIGHTDIR_FRONT 16
#define RVIEW_LIGHTDIR_BACK 32
typedef struct rview_image_setup {
unsigned long zpro, clipz;
double pixelThresholdLow, pixelThresholdHigh, weightThreshold;
int weightQuantisation;
bool useRgbBrightness;
bool useLights;
double lightsAmbient;
double lightsGain;
double lightsAngle;
double lightsScintAngle;
int lightsDir;
int lightsDist;
int kernelSize, kernelType;
bool useVoxCol;
double voxColour;
int gridSize;
double scaleHeight;
} rview_image_setup;
/*
* Image setup window for customizing the renderer.
*/
class rviewImageSetup: public rviewFrame
{
public:
rviewImageSetup(rview_image_setup *ris, rviewRenderImage *parentWin);
~rviewImageSetup(void);
void unlinkParent(void);
void OnSize(int w, int h);
void label(void);
int process(wxObject &obj, wxEvent &evt);
void updateSettings(const rview_image_setup &ris);
void readNewSetup(void);
virtual const char *getFrameName(void) const;
virtual rviewFrameType getFrameType(void) const;
static int parseLightDirection(const char *dir);
// constants
// Borders used in setup window
static const int imgset_border;
// Height of text widgets in setup window
static const int imgset_theight;
// Height of checkboxes in setup window
static const int imgset_chkheight;
// Height of group boxes in setup window
static const int imgset_renheight;
static const int imgset_voxheight;
static const int imgset_hgtheight;
// Dimensions of buttons in setup window
static const int imgset_bwidth;
static const int imgset_bheight;
// Dimensions of checkboxes in setup window
static const int imgset_chowidth;
static const int imgset_choheight;
// Setup window dimensions
static const int imgset_width;
static const int imgset_height;
protected:
rviewRenderImage *parent;
wxPanel *panel;
wxGroupBox *renderGroup, *voxelGroup, *heightGroup;
rviewText *zproWidget, *clipzWidget;
rviewText *pixThreshLowWidget, *pixThreshHighWidget, *wgtThreshWidget, *wgtQuantWidget;
rviewCheckBox *useRgbBrightness;
rviewCheckBox *useLights;
rviewChoice *kernelSize, *kernelType;
rviewText *lightsAmbient, *lightsGain, *lightsAngle, *lightsScintAngle;
rviewText *lightsDir, *lightsDist;
rviewCheckBox *useVoxCol;
rviewText *voxColour;
rviewText *gridSize, *scaleHeight;
rviewButton *okBut, *cancelBut;
rview_image_setup oldSetup, *imgSetup;
static const char *normalKernelSizes[];
static const keyword_to_ident_c normalKernelTypes[];
};
/*
* Renderer playback control window
*/
class rendererControl: public rviewFrame
{
public:
rendererControl(float drx, float dry, float drz, int mode, rviewRenderImage *parentWin);
~rendererControl(void);
void unlinkParent(void);
void setActiveMode(int mode);
void OnSize(int w, int h);
void label(void);
int process(wxObject &obj, wxEvent &evt);
virtual const char *getFrameName(void) const;
virtual rviewFrameType getFrameType(void) const;
// constants
// Borders used in renderer control window
static const int rctrl_border;
// Button dimensions
static const int rctrl_bwidth;
static const int rctrl_bheight;
// Reset button dimensions
static const int rctrl_rwidth;
static const int rctrl_rheight;
// Slider height
static const int rctrl_sheight;
// Window dimensions
static const int rctrl_width;
static const int rctrl_height;
protected:
void updateParameters(void);
wxPanel *panel;
rviewSlider *rotx, *roty, *rotz;
rviewButton *resetX, *resetY, *resetZ;
rviewButton *actionBut, *closeBut;
rviewRenderImage *parent;
int active;
};
/*
* Renderer current view window (rotation, offset, scale)
*/
class rendererCurrentView: public rviewFrame
{
public:
rendererCurrentView(const vertex_fp &angles, long off, double scale, rviewRenderImage *parentWin);
~rendererCurrentView(void);
void unlinkParent(void);
void OnSize(int w, int h);
void label(void);
int process(wxObject &obj, wxEvent &evt);
virtual const char *getFrameName(void) const;
virtual rviewFrameType getFrameType(void) const;
void updateView(const vertex_fp &angles, long off, double scale);
// constants
// Borders used in renderer view window
static const int rcview_border;
// Button dimensions
static const int rcview_bwidth;
static const int rcview_bheight;
// Text widget height
static const int rcview_theight;
// Window dimensions
static const int rcview_width;
static const int rcview_height;
protected:
void updateParameters(void);
wxPanel *panel;
rviewButton *applyButton, *closeButton;
rviewText *rotx, *roty, *rotz;
rviewText *zoff;
rviewText *cubeScale;
rviewRenderImage *parent;
};
class wxPixmap;
/*
* Container class for wxPixmap.
*/
class pixmapCanvas: public wxCanvas
{
public:
pixmapCanvas(rviewImage *parent, int x, int y, int w, int h, long style=0);
~pixmapCanvas(void);
void setPixmap(wxPixmap *pmap);
void updateDisplay(bool borders=FALSE);
void OnPaint(void);
void OnEvent(wxMouseEvent &mevt);
void SetAspectRatio(double ratio); // 0 for none
void ToggleDragBox(bool clearMode);
void SetDragBox(int x0, int y0, int x1, int y1);
bool HasDragBox(void) const;
bool GetDragBox(int &x0, int &y0, int &x1, int &y1) const;
void UpdateDragBox(int x1, int y1);
void AdjustDragBox(int x1, int y1);
protected:
void paintCore(int x, int y);
void adjustBoxToRatio(void);
wxPixmap *pixmap;
wxDC *myDC;
wxBrush brush;
wxBrush border;
wxBrush textBack;
wxPen bpen;
wxPen fpen;
wxFont *font;
rviewImage *parentWin;
int pixWidth, pixHeight;
int offX, offY;
int rect_x0, rect_y0, rect_x1, rect_y1;
double aspectRatio;
wxRect textBBox;
};
// Flags used when settings are updated
#define RVIEW_IFLAG_VOXEL 1
#define RVIEW_IFLAG_LIGHT 2
#define RVIEW_IFLAG_HEIGHT 4
/*
* Abstract base class for all windows containing an image + controls
*/
class rviewImage: public rviewDisplay
{
public:
rviewImage(mdd_frame *mf, int es, unsigned int flags=0);
virtual ~rviewImage(void);
virtual int openViewer(void);
virtual void label(void);
virtual int process(wxObject &obj, wxEvent &evt);
virtual void processMouseEvent(wxMouseEvent &mevt);
virtual int userEvent(const user_event &ue);
virtual void prepareToDie(void);
virtual int newProjection(void)=0;
virtual int requestQuit(int level);
virtual void OnSize(int w, int h);
virtual void OnMenuCommand(int id);
virtual bool OnClose(void); // overload from rviewFrame
virtual const char *getFrameName(void) const;
virtual rviewFrameType getFrameType(void) const;
// Default flags for wxPixmap class (dithering etc)
static int getPixmapFlags(void);
// constants
// Slider dimensions
static const int image_swidth;
static const int image_sheight;
// Playback buttons dimensions
static const int image_pbwidth;
static const int image_pbheight;
// Minimum size of image
static const int image_minwidth;
static const int image_minheight;
// Checkbox dimensions
static const int image_chkwidth;
static const int image_chkheight;
// Bounding box checkbox dimensions
static const int image_bbwidth;
static const int image_bbheight;
// Text field dimensions
static const int image_twidth;
static const int image_theight;
// Button dimensions
static const int image_bwidth;
static const int image_bheight;
// Offsets of drag box in canvas
static const int image_dragtoff;
static const int image_dragtspace;
// Distance from the border at which to autoscroll
static const int image_draghotzone;
// Extra space reserved on control panel
static const int image_ctrly;
static const int image_totaly;
protected:
void updatePixmap(char *oldData, char *newData);
void configureCspace(bool state);
void setCspaceProjMode(bool pmode);
void resizeImage(void);
void openViewerEpilogue(rviewFrameType ft);
int freeDimsFromProjection(int &dim1, int &dim2, r_Point *map);
void ensureViewCspace(void);
void deleteViewCspace(void);
virtual void projectObjectHook(void);
virtual void configureMode(void);
virtual char *initMode(void)=0;
virtual bool cspaceRangeHook(bool suggest);
virtual char *movieNewFrame(void);
virtual void rotateObject(wxMouseEvent &mevt);
virtual int fileMenuInitHook(wxMenu *menu);
virtual int configMenuInitHook(wxMenu *menu);
// Query viewer capabilities
virtual bool modeNeedsCspace(rviewBaseType bt) const;
virtual bool canRotateObject(void) const;
virtual bool moviePossible(void) const;
virtual bool showScaleSlider(void) const;
// view management
virtual int saveView(FILE *fp);
virtual int readView(const char *key, const char *value);
virtual void loadViewFinished(void);
wxPixmap *pixmap;
pixmapCanvas *pcanv;
rviewSlider *scaleSlider;
int pixWidth, pixHeight, pixPitch, pixPad, pixDepth;
int virtualPitch;
char *imgData;
double scaleValue;
int scrollx, scrolly;
float mousex, mousey;
int mousebut;
unsigned int freeDims;
// For intensity to RGB translations (ushort)
colourspaceMapper *csmap;
bool doValToCspace;
bool doFullRangeCspace;
bool doProjRangeCspace;
// base type allows cspace mapping?
bool cspaceForType;
// image fully initialized?
bool initPhaseFinished;
r_Minterval *csInterv;
// shared by flat and height field which don't have a shared derivation path
rviewButton *playFwd, *playBack, *playStop;
int playDirection;
int lastMovieMode;
// colourspace parameters for view loading
colourspace_params *cspar;
// view parameters
static const char *view_ScrollPos;
static const char *view_UseCspace;
static const char *view_CspaceFull;
static const char *view_CspaceProj;
static const char *view_CspaceMeans;
static const char *view_CspaceSigmas;
static const char *view_CspaceType;
static const char *view_CspaceRange;
static const char *view_ScaleValue;
};
/*
* Base class for flat images, i.e. 2D orthogonal projections
*/
class rviewFlatBaseImage: public rviewImage
{
public:
rviewFlatBaseImage(mdd_frame *mf, int es, unsigned int flags=0);
virtual ~rviewFlatBaseImage(void);
virtual int newProjection(void);
virtual int openViewer(void);
virtual const char *getFrameName(void) const;
virtual rviewFrameType getFrameType(void) const;
protected:
virtual char *initMode(void);
char *projectImage(void);
};
/*
* Standard flat images
*/
class rviewFlatImage: public rviewFlatBaseImage
{
public:
rviewFlatImage(mdd_frame *mf, unsigned int flags=0);
~rviewFlatImage(void);
void OnSize(int w, int h);
virtual int openViewer(void);
virtual void label(void);
virtual int process(wxObject &obj, wxEvent &evt);
virtual const char *getFrameName(void) const;
virtual rviewFrameType getFrameType(void) const;
virtual int getViewerType(void) const;
protected:
virtual char *initMode(void);
virtual bool moviePossible(void) const;
virtual char *movieNewFrame(void);
};
/*
* Abstract base class for all rendered images (voxel, height field, whatever...)
*/
class rviewRenderImage: public rviewImage
{
public:
rviewRenderImage(mdd_frame *mf, int es, unsigned int flags=0);
virtual ~rviewRenderImage(void);
virtual void label(void);
virtual int process(wxObject &obj, wxEvent &evt);
virtual int newProjection(void);
virtual void prepareToDie(void);
virtual int requestQuit(int level);
virtual int userEvent(const user_event &ue);
virtual void OnSize(int w, int h);
virtual void OnMenuCommand(int id);
virtual bool OnClose(void);
virtual const char *getFrameName(void) const;
virtual rviewFrameType getFrameType(void) const;
void closeEditor(bool newSetup);
void updateSettings(int setFlags);
void closeRendererControls(void);
void setAutoRotation(float rx, float ry, float rz);
void setCurrentView(const vertex_fp &angles, long off, double scale);
protected:
virtual char *initMode(void);
virtual char *setupEnvironment(int w, int h)=0;
virtual void rotateObject(wxMouseEvent &mevt);
virtual bool doUpdate(int updateFlags)=0;
virtual void redrawSettingsChanged(void);
virtual void fillBuffer(void)=0;
virtual void fillBackgroundCore(rviewBaseType bt, double minVal);
virtual int configMenuInitHook(wxMenu *menu);
virtual int viewMenuInitHook(wxMenu *menu);
virtual bool canRotateObject(void) const;
virtual void updateCurrentView(void);
int setupEnvBase(int w, int h, r_Ref &mdd, colourspaceMapper **csm, r_Minterval *csdom);
char *setupGraphEnv(void);
void fillBufferBackground(bool doCspace, bool &cspaceOK, r_Ref& obj, colourspaceMapper **csm, r_Minterval *csdom, rviewBaseType bt, bool fullRange, double *useMinVal=NULL);
void translateBufferToCspace(rviewBaseType bt, double *useMinVal=NULL, double *useMaxVal=NULL);
static void rotateCube(int axis, float angle, vertex_fp *matrix);
void rotateCube(int axis, float angle);
void getLightPos(vertex_fp *lpos);
virtual int saveView(FILE *fp);
virtual int readView(const char *key, const char *value);
virtual void loadViewFinished(void);
// convert rotation matrix to angles and back
void matrixToAngles(vertex_fp &angles) const;
void anglesToMatrix(const vertex_fp &angles);
int rendererPlayback;
vertex_fp *geomData, *geomUse;
vertex_fp *rot;
graph_env *graphEnv;
union {unsigned long l; float f; double d;} voxColour;
long zoff;
double cubeScale;
// Rotation angle increments for renderer playback
float drx, dry, drz;
// Setup options
rview_image_setup setup;
rviewImageSetup *setupWindow;
rendererControl *rcontrol;
rendererCurrentView *rcurview;
// view keywords
static const char *view_ZProject;
static const char *view_ZClip;
static const char *view_PixThreshLow;
static const char *view_PixThreshHigh;
static const char *view_WeightThresh;
static const char *view_WeightQuant;
static const char *view_UseRGBBright;
static const char *view_UseLighting;
static const char *view_LightAmbient;
static const char *view_LightGain;
static const char *view_LightAngle;
static const char *view_LightScint;
static const char *view_LightDir;
static const char *view_LightDist;
static const char *view_KernelSize;
static const char *view_KernelType;
static const char *view_UseVoxColour;
static const char *view_VoxColour;
static const char *view_GridSize;
static const char *view_ScaleHeight;
static const char *view_Rotation;
static const char *view_ZOffset;
};
/*
* Class for visualizations of volumetric images (3D texture mapper &
* voxel renderer).
*/
class rviewVolumeImage: public rviewRenderImage
{
public:
rviewVolumeImage(mdd_frame *mf, unsigned int flags=0);
virtual ~rviewVolumeImage(void);
virtual void label(void);
virtual int process(wxObject &obj, wxEvent &evt);
virtual void OnSize(int w, int h);
virtual void OnMenuCommand(int id);
virtual int openViewer(void);
virtual const char *getFrameName(void) const;
virtual rviewFrameType getFrameType(void) const;
virtual int getViewerType(void) const;
protected:
virtual char *initMode(void);
virtual char *setupEnvironment(int w, int h);
virtual bool doUpdate(int updateFlags);
virtual void fillBuffer(void);
virtual int saveView(FILE *fp);
virtual int readView(const char *key, const char *value);
virtual void loadViewFinished(void);
rviewCheckBox *boundingBox;
rviewImageMode imode;
int lastMode;
tex_desc *texDesc;
voxel_desc *voxDesc;
bool initVoxParams;
bool doBoundingBox;
static const char *view_VolumeMode;
static const char *view_UseBBox;
};
/*
* Class for visualizing data as heightfields.
*/
class rviewHeightImage: public rviewRenderImage
{
public:
rviewHeightImage(mdd_frame *mf, unsigned int flags=0);
virtual ~rviewHeightImage(void);
virtual void label(void);
virtual int process(wxObject &obj, wxEvent &evt);
virtual int newProjection(void);
virtual void prepareToDie(void);
virtual int requestQuit(int level);
virtual int openViewer(void);
virtual const char *getFrameName(void) const;
virtual rviewFrameType getFrameType(void) const;
virtual int getViewerType(void) const;
protected:
int depthForHeightfield(void) const;
virtual char *initMode(void);
virtual char *setupEnvironment(int w, int h);
virtual char *movieNewFrame(void);
virtual bool doUpdate(int updateFlags);
virtual void redrawSettingsChanged(void);
virtual void fillBackgroundCore(rviewBaseType bt, double minVal);
virtual void fillBuffer(void);
virtual bool cspaceRangeHook(bool suggest);
virtual bool moviePossible(void) const;
virtual bool modeNeedsCspace(rviewBaseType bt) const;
mdd_desc *mddDesc;
mesh_desc *meshDesc;
// for colourspace mapping of heightfields.
r_Ref dummyMDD;
};
/*
* An image scaled by the DBMS
*/
class r_Fast_Base_Scale;
class rviewScaledImage: public rviewFlatBaseImage
{
public:
rviewScaledImage(collection_desc *cd, r_Fast_Base_Scale *scaler, unsigned int flags=0);
~rviewScaledImage(void);
virtual void processMouseEvent(wxMouseEvent &mevt);
virtual void label(void);
virtual int process(wxObject &obj, wxEvent &evt);
virtual int openViewer(void);
virtual void OnSize(int w, int h);
virtual int newProjection(void);
virtual const char *getFrameName(void) const;
virtual rviewFrameType getFrameType(void) const;
virtual int getViewerType(void) const;
virtual const r_Minterval &getVirtualDomain(void) const;
protected:
virtual char *initMode(void);
virtual void projectObjectHook(void);
char *projectImage(void);
bool showScaleSlider(void) const;
void scaleViewBy(double scale);
void newView(bool loadImage=TRUE);
void projectionStringForView(void);
double getLastScale(void) const;
// view management
virtual int saveView(FILE *fp);
virtual int readView(const char *key, const char *value);
virtual void loadViewFinished(void);
void ensureLoadedView(void);
rviewButton *zoomInBut;
rviewButton *zoomOutBut;
rviewButton *lastZoomBut;
rviewButton *zoomBoxBut;
rviewText *scaleString;
bool boxState;
typedef struct {
double scale;
r_Point low, high;
int dim1, dim2;
} view_desc_t;
bool compareViews(const view_desc_t &v1, const view_desc_t &v2);
// The current view
view_desc_t thisView;
r_Minterval fullDomain;
bool dontLoad;
double initialScale;
view_desc_t *loadedView;
DynamicStack viewHistory;
r_Fast_Base_Scale *scaleObject;
collection_desc *collDesc;
static const double scaleStep;
// view parameters
static const char *view_CurrentBox;
static const char *view_BoxScale;
};
// Structure for static conversion of MDD -> pixmap
typedef struct rviewFlatProjEnv {
// initialized by caller
r_GMarray *mddPtr;
r_Point pt1, pt2;
int dim1, dim2;
rviewBaseType bt;
double scale;
bool doCspace;
colourspaceMapper *csmap;
int cspaceState;
// initialized by prepareFlatProjection()
int width, height;
int pitch, pad, depth;
} rviewFlatProjEnv;
// Setup variables for projecting images
int rviewPrepareFlatProjection(rviewFlatProjEnv &penv);
// Project an MDD object into an image bitmap
int rviewPerformFlatProjection(rviewFlatProjEnv &env, char *data);
enum rviewChartMode {
rcm_none,
rcm_bar,
rcm_line,
rcm_spline
};
/*
* Canvas displaying a chart
*/
class chartCanvas: public wxCanvas
{
public:
chartCanvas(wxWindow *parent, int x, int y, int w, int h, long style=0);
~chartCanvas(void);
void setData(mdd_frame *mf, rviewBaseType bt);
void setVars(int s, double cs, int ds, bool cy, rviewChartMode cm);
int setProjection(r_Point &p1, r_Point &p2);
void OnPaint(void);
// constants
// Space reserved on top / bottom of chart
static const int chcanv_cospace;
// Length of a corrdinate axis marker line
static const int chcanv_colength;
// Start exponential axis numbering when |exponent| >= x
static const int chcanv_exponents;
protected:
// Core-functionality of chart modes
void redrawBar(wxDC *cdc, int height, int dim, int startOff, int endOff, float scale, float posx, float stepx, float orgy);
void redrawLine(wxDC *cdc, int dim, int startOff, int endOff, float scale, float posx, float stepx, float orgy);
void redrawSpline(wxDC *cdc, int dim, int startOff, int endOff, float scale, float posx, float stepx, float orgy);
r_Ref mddObj;
int step, dimMDD;
r_Point pt1, pt2;
double min, max, costep;
rviewBaseType baseType;
rviewChartMode cmode;
wxBrush brush, back;
wxBrush brush_r, brush_g, brush_b;
wxPen pen, pen_r, pen_g, pen_b;
wxFont *font;
bool cosys;
char format[10];
int coleft, datastep;
int scroll;
};
/*
* A class for drawing charts
*/
class rviewChart: public rviewDisplay
{
public:
rviewChart(mdd_frame *mf, unsigned int flags=0);
~rviewChart(void);
void label(void);
int process(wxObject &obj, wxEvent &evt);
int newProjection(void);
virtual int openViewer(void);
void OnSize(int w, int h);
void OnMenuCommand(int id);
virtual const char *getFrameName(void) const;
virtual rviewFrameType getFrameType(void) const;
virtual int getViewerType(void) const;
// constants
// Text widget dimensions (step)
static const int chart_twidth;
static const int chart_theight;
// checkbox dims
static const int chart_cwidth;
static const int chart_cheight;
// Minimum size of viewer
static const int chart_minwidth;
static const int chart_minheight;
static const int chart_ctrly;
static const int chart_totaly;
protected:
virtual int saveView(FILE *fp);
virtual int readView(const char *key, const char *value);
virtual void loadViewFinished(void);
void checkModeMenu(void);
chartCanvas *canvas;
int step, datastep;
int lastMode;
double costep;
int scroll;
bool cosys;
rviewChartMode cmode;
rviewText *stText, *coText, *dataText;
rviewCheckBox *csBox;
static const char *view_StepSize;
static const char *view_Markers;
static const char *view_ScrollPos;
static const char *view_CoSys;
static const char *view_ChartMode;
};
/*
* Canvas for plotting text onto
*/
class textCanvas: public wxCanvas
{
public:
textCanvas(wxWindow *parent, int x, int y, int w, int h, long style=0);
~textCanvas(void);
void setData(mdd_frame *mf, rviewBaseType bt, unsigned int bs);
void setStep(int sx, int sy);
void setCoSys(bool cs, int &cl, int &ct);
void setProjection(r_Point &pt1, r_Point &pt2, unsigned int fd, r_Point *mapIndex=NULL);
void setNumberBase(int newBase);
void OnPaint(void);
void CalcTextExtent(char *b, float &width, float &height);
void EstimateCellSize(int &width, int &height);
// constants
// Space around coordinate system
static const int txcanv_cospace;
// Default space between columns
static const int txcanv_colspace;
// Border used in text canvas
static const int txcanv_border;
protected:
r_Ref mddObj;
int stepx, stepy, dimMDD;
int scrollX, scrollY;
int coleft, cotop;
int dim1, dim2;
unsigned int freeDims;
r_Point pt1, pt2;
int numberBase;
bool cosys;
rviewBaseType baseType;
unsigned int baseSize;
wxBrush fore, back;
wxPen pen;
wxFont *font;
};
/*
* Class for displaying tables
*/
class rviewTable: public rviewDisplay
{
public:
rviewTable(mdd_frame *mf, unsigned int flags=0);
~rviewTable(void);
void label(void);
int process(wxObject &obj, wxEvent &evt);
int newProjection(void);
void newTableSize(void);
virtual int openViewer(void);
virtual const char *getFrameName(void) const;
virtual rviewFrameType getFrameType(void) const;
virtual int getViewerType(void) const;
void OnSize(int w, int h);
void OnMenuCommand(int id);
// constants
// Dimensions of additional wxText items (configs)
static const int table_twidth;
static const int table_theight;
// Dimensions of check box
static const int table_cwidth;
static const int table_cheight;
// Minimum dimensions of table
static const int table_minwidth;
static const int table_minheight;
static const int table_ctrly;
static const int table_totaly;
protected:
void EstimateCellSize(int &width, int &height);
virtual int saveView(FILE *fp);
virtual int readView(const char *key, const char *value);
virtual void loadViewFinished(void);
void checkModeMenu(void);
textCanvas *canvas;
int stepx, stepy;
int scrollx, scrolly;
int fieldsx, fieldsy;
int lastMode;
unsigned int freeDims;
bool cosys;
rviewText *sxText, *syText;
rviewCheckBox *csBox;
int numberBase;
static const char *view_StepSize;
static const char *view_ScrollPos;
static const char *view_CoSys;
static const char *view_NumBase;
};
/*
* Class for displaying strings
*/
class rviewStringViewer: public rviewDisplay
{
public:
rviewStringViewer(mdd_frame *mf, unsigned int flags=0);
~rviewStringViewer(void);
int newProjection(void);
virtual int openViewer(void);
virtual const char *getFrameName(void) const;
virtual rviewFrameType getFrameType(void) const;
virtual int getViewerType(void) const;
void OnSize(int w, int h);
// constants
static const int strview_msgheight;
static const int strview_minwidth;
static const int strview_minheight;
static const int strview_ctrly;
static const int strview_totaly;
protected:
unsigned int freeDims;
wxMessage *msgString;
};
#endif