/*
* 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:
*
* Base class for all object viewers (rviewImage, rviewChart, rviewTable
* and rviewSound). Provides a frame with standard control widgets and
* menus, functions for parsing/advancing the projection string and
* initializing protected variables according to the MDD object that will
* be displayed.
*
* COMMENTS:
* None
*/
#ifndef _RVIEW_DISPLAY_H_
#define _RVIEW_DISPLAY_H_
#include "rasodmg/ref.hh"
#include "rasodmg/marray.hh"
#include "rasodmg/gmarray.hh"
#include "labelManager.hh"
#include "rviewUtils.hh"
/*
* A window containing an display mode + controls
*/
class rviewDisplay: public rviewFrame
{
public:
rviewDisplay(mdd_frame *mf, int es, unsigned int flags=0);
virtual ~rviewDisplay(void);
// must use separate call because no virtual functions beyond level i can
// be called in a constructor of level i. This became necessary when the
// rviewImage class was split up. Returns 0 for OK, -1 for error.
virtual int openViewer(void);
// Same reason for virtual calls (getViewerType()) in the destructor; this
// functions is called from a viewer's destructor to notify its parent of the
// close event.
void closeViewer(void);
virtual void label();
virtual int process(wxObject &obj, wxEvent &evt);
virtual void OnSize(int w, int h);
virtual void OnMenuCommand(int id);
virtual const char *getFrameName(void) const;
virtual rviewFrameType getFrameType(void) const;
virtual int getViewerType(void) const = 0;
// Needs to process user events
virtual int userEvent(const user_event &ue);
// Notify derived classes that they should get ready to die. This is needed
// for stuff like images with movie-playback running.
virtual void prepareToDie(void);
// Notify derived classes that the projection has changed
virtual int newProjection(void);
// get the minterval to use with the projection string
virtual const r_Minterval &getVirtualDomain(void) const;
// Called when an update object has been replaced with a new one
void noLongerUpdate(void);
// Returns the display ID (used in for update displays)
int getIdentifier(void) const;
int getDisplayCounter(void) const;
// sets the ID of the query window in case it's an update object
void setQueryWindow(int qwindowID);
// viewer-related constants
// Default width and height of display window
static const int display_width;
static const int display_height;
// Space reserved around the canvas
static const int display_cnvborder;
// Borders used in display window
static const int display_border;
// Scrollbar steps
static const int display_scrstep;
// Page stepping
static const int display_pgstep;
// Height of control area
static const int display_cheight;
// Height of projection widget
static const int display_pjheight;
// Maximum width of projection widget
static const int display_pjwidth;
// Projection OK-button dimensions
static const int display_pbwidth;
static const int display_pbheight;
// Minimum display window size (to avoid X errors)
static const int display_minwidth;
// Display flags
static const int display_flag_standalone;
static const int display_flag_update;
// modes for advanceProjection()
enum display_advmode_e {
display_advmode_relative,
display_advmode_absolute,
display_advmode_reset
};
protected:
// to allow derived functions to add stuff to the file menu before the quit item
virtual int fileMenuInitHook(wxMenu *menu);
// to allow derived functions to add stuff to the view menu
virtual int viewMenuInitHook(wxMenu *menu);
// for appending menus to the menu bar
virtual int menuBarInitHook(void);
// Called by the derived classes to (un)grey certain widgets
void setModeDimension(int dim);
// Called by derived classes to set minimum size of viewer window
void setMinimumViewerSize(int w, int h);
// Advances projection (+/- buttons)
const char *skipIndexMapping(const char *s);
int advanceProjection(int direction, int advmode=display_advmode_relative);
void newDBState(bool dbstate);
void setDisplayTitle(const char *title=NULL);
// view management
int doSaveView(void);
int doLoadView(void);
int parseViewFile(FILE *fp);
static void writeViewKey(FILE *fp, const char *key);
static void writeViewParam(FILE *fp, const char *key, const char *value);
static void writeViewParam(FILE *fp, const char *key, long value);
static void writeViewParam(FILE *fp, const char *key, double value);
static void writeViewParam(FILE *fp, const char *key, unsigned int num, const long *values);
static void writeViewParam(FILE *fp, const char *key, unsigned int num, const double *values);
static int readVector(const char *value, unsigned int num, long *values);
static int readVector(const char *value, unsigned int num, double *values);
// save the current view to a file descriptor
virtual int saveView(FILE *fp);
// read a parameter from a view file line; returns 0 if unknown key, 1 otherwise
virtual int readView(const char *key, const char *value);
// loading a new view is finished, allow updating of displays before the redraw
virtual void loadViewFinished(void);
unsigned int displayFlags;
r_Ref mddObj;
r_Minterval interv;
r_Point pt1, pt2, mapIndex;
int dimMDD, dimMode, baseSize;
rviewBaseType baseType;
wxMenuBar *mBar;
wxPanel *ctrlPanel;
rviewText *project, *advance;
wxMessage *typeMsg;
rviewButton *projBut, *projPlus, *projMinus;
char projString[STRINGSIZE];
char rootTitle[STRINGSIZE];
int extraSpace;
int totalCtrlHeight;
int displayID;
int qwindowID;
int minViewX, minViewY, mbarHeight;
bool displayOperation;
bool objectInitializedOK;
// number of menus that are always on the menu bar
static const int fixedNumberOfMenus;
private:
// This variable avoids closeViewer() being called more than once
// in case there are viewer classes derived from a common, non-
// abstract base class.
bool closeViewerCalled;
// This global variable is incremented every time a display window is
// opened. It is used to init the displayID member to identify display
// windows by a number.
static int displayCounter;
// file extension of view file
static const char *viewFileExtension;
// size of buffer for view loading
static const unsigned int viewBuffSize;
// view parameter keywords
static const char *view_HeaderLine;
static const char *view_ViewerType;
static const char *view_ProjString;
static const char *view_WindowSize;
};
#endif