/* * 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: * * Central definitions of shared objects and constants, global tool functions. * * - All menu codes used in the program (MENU_...) * - Global tool functions for handling collections, base types, projection * strings, X events, ... . See ``Global functions''. * - rviewFrame class which must be the base class of all frames used in rView. * - rviewFrameMgr class for handling all of rView's frames (dispatching events * etc) * - rviewMultiline class for displaying several lines of non-editable text. * - rviewDialog class which is the base class for all rView's dialog windows. * - rviewErrorbox class, derived from rviewDialog. * - rviewProgress class, derived from rviewDialog. * - rviewResults class for displaying database results and dispatching object * viewers. Relies on code provided by rviewMDD for scaling/resampling/endian * conversions. * - rviewAbout class for displaying information about rView itself. * - rviewStringSet class for displaying a set of strings in a scrollable * list box. * * COMMENTS: * none */ /** * @file rviewUtils.hh * * @ingroup Applications */ #ifndef _RVIEW_UTILS_H_ #define _RVIEW_UTILS_H_ #include #include "rasodmg/ref.hh" #include "rasodmg/marray.hh" #include "rasodmg/gmarray.hh" #include "rasodmg/database.hh" #include "labelManager.hh" // #include "wx_scrol.h" #include "wx/xrc/xh_scrol.h" #include "wx/msgout.h" // #define wxUSE_GLCANVAS 1 // need this? -- PB 2006-jan-01 #include #ifdef __VISUALC__ #define DIR_SEPARATOR "\\" #define DIR_SEPARATORC '\\' #else #define DIR_SEPARATOR "/" #define DIR_SEPARATORC '/' #endif extern const int rview_window_extra_height; extern const int rview_choice_sub_width; #define STRINGSIZE 256 // base type to name translations // Identifiers for base types enum rviewBaseType { rbt_none, rbt_bool, rbt_char, rbt_uchar, rbt_short, rbt_ushort, rbt_long, rbt_ulong, rbt_rgb, rbt_float, rbt_double }; // Maximum dimension of data rview can deal with #define MAXIMUM_DIMENSIONS 4 // String names for objects / sets over the various basetypes. extern char *rviewBaseTypes[]; extern char *rviewTypeNames[][MAXIMUM_DIMENSIONS]; extern char *rviewSetNames[][MAXIMUM_DIMENSIONS]; // Base type to image type mapping extern int rviewImageTypes[]; // Possible types: enum rview_image_types { RVIEW_IMGTYPE_NONE, RVIEW_IMGTYPE_MONO, RVIEW_IMGTYPE_GREY, RVIEW_IMGTYPE_HIGH, RVIEW_IMGTYPE_GREY12, RVIEW_IMGTYPE_TRUE24, RVIEW_IMGTYPE_TRUE32 }; // Mouse buttons #define MOUSE_LEFT 1 #define MOUSE_MIDDLE 2 #define MOUSE_RIGHT 4 // Ctrl pressed while mouse event? #define MOUSE_CONTROL 8 // Maximum distance of mouse pointer to an object for manipulating / dragging #define MOUSE_HOTZONE 8 // Menu items enum rview_menu_ident { MENU_DUMMY_IDENT, // 0 is illegal for a menu id // First the ones for the main window MENU_MAIN_FILE_QUERY, MENU_MAIN_FILE_PREFS, MENU_MAIN_FILE_EXIT, MENU_MAIN_VIEW_OPEN, MENU_MAIN_VIEW_CLOSE, MENU_MAIN_COLL_LOOK, MENU_MAIN_COLL_LKSCL, MENU_MAIN_COLL_LKORTH, MENU_MAIN_COLL_CREATE, MENU_MAIN_COLL_DELETE, MENU_MAIN_HELP_ABOUT, // Now the menu items for the results window MENU_RSLT_ITEM_OPENALL, MENU_RSLT_ITEM_THUMBALL, MENU_RSLT_ITEM_CLOSE, MENU_RSLT_SLCT_SLCTALL, MENU_RSLT_SLCT_CLEAR, MENU_RSLT_SLCT_OPEN, MENU_RSLT_SLCT_THUMB, MENU_RSLT_SLCT_DELETE, MENU_RSLT_SLCT_ENDIAN, MENU_RSLT_SLCT_TYPEMAN, MENU_RSLT_SLCT_INFO, // Now the menu items for the display windows MENU_DISP_DATA_INSERT, MENU_DISP_DATA_INSERTPRO, MENU_DISP_DATA_SAVE, MENU_DISP_DATA_CLOSE, MENU_DISP_DATA_SAVETIFF, MENU_DISP_VIEW_SAVE, MENU_DISP_VIEW_LOAD, MENU_DISP_VIEW_SHOW, // Additional menus in charts MENU_CHART_MODE_BAR, MENU_CHART_MODE_LINE, MENU_CHART_MODE_SPLINE, // Additional menus in images MENU_IMAGE_MODE_FLAT, MENU_IMAGE_MODE_SURF, MENU_IMAGE_MODE_VOXEL, MENU_IMAGE_MODE_HEIGHT, MENU_IMAGE_SETUP_RENDER, MENU_IMAGE_SETUP_RCONTROL, MENU_IMAGE_SETUP_CSPACE, MENU_IMAGE_SETUP_MOVIE, MENU_IMAGE_MOVIE_ONCE, MENU_IMAGE_MOVIE_START, MENU_IMAGE_MOVIE_SWITCH, MENU_IMAGE_CSPACE_ON, MENU_IMAGE_CSPACE_FULL, MENU_IMAGE_CSPACE_PROJ, MENU_IMAGE_CSPACE_EDIT, // Additional menus in tables MENU_TABLE_MODE_DECIMAL, MENU_TABLE_MODE_OCTAL, MENU_TABLE_MODE_HEX, // Thumbnail window MENU_THUMB_DATA_CLOSE, MENU_THUMB_SETUP_CSPACE, MENU_THUMB_CSPACE_ON, MENU_THUMB_CSPACE_FULL, MENU_THUMB_CSPACE_EDIT, // Now the menu items for the query window MENU_QUERY_FILE_OPEN, MENU_QUERY_FILE_SAVE, MENU_QUERY_FILE_EXIT, MENU_QUERY_EDIT_CUT, MENU_QUERY_EDIT_COPY, MENU_QUERY_EDIT_PASTE, MENU_QUERY_HELP_HELP, // Total number of menus = first free menu ID for dynamic menus: MENU_TOTAL_NUMBER }; // Hotlist menu has no fixed length. Set upper limit with MENU_QUERY_HOTRANGE, however #define MENU_QUERY_HOTLIST MENU_TOTAL_NUMBER // upper limit for queries in hotlist #define MENU_QUERY_HOTRANGE 64 // Number of display modes #define RVIEW_RESDISP_NUMBER 8 // Flags for each MDD object saying whether it's opened in a display mode #define RVIEW_RESDISP_CHART 1 #define RVIEW_RESDISP_TABLE 2 #define RVIEW_RESDISP_SOUND 4 #define RVIEW_RESDISP_IMGFLAT 8 #define RVIEW_RESDISP_IMGVOLM 16 #define RVIEW_RESDISP_IMGHGHT 32 #define RVIEW_RESDISP_IMGOSECT 64 #define RVIEW_RESDISP_STRVIEW 128 // this one is special because it can't be used from the results window #define RVIEW_RESDISP_IMGSCLD 256 // For frame_list type. Full declaration below. class rviewFrame; class rviewFrameMgr; /* * Types and structures. */ // User events enum rviewUserEvent { usr_none, usr_child_closed, // data = rviewFrame * usr_mdd_dying, // data = r_Ref* usr_db_opened, usr_db_closed, usr_update_closed, // data = r_Ref* usr_viewer_closed, // data = mdd_frame * usr_cspace_changed, // data = colourspaceMapper* usr_typeman_convert, // data = rviewTypeMan * usr_close_viewers }; // The frame list item used but the frameManager. typedef struct frame_list { rviewFrame *frame; frame_list *next; } frame_list; // An MDD object and some flags typedef struct mdd_frame { r_Ref < r_GMarray > mdd; unsigned int flags; } mdd_frame; // Collection descriptor (for lookup / query exection) // mddObjs != NULL ==> collection of marrays // strObjs != NULL ==> collection of strings typedef struct collection_desc { char *collName; char *collType; char *collInfo; int number; mdd_frame *mddObjs; char **strObjs; } collection_desc; // User event used in rviewFrames / frameManager typedef struct user_event { rviewUserEvent type; void *data; } user_event; // Keyword to identifier lookup structure typedef struct keyword_to_ident { int ident; char *keyword; } keyword_to_ident; // same with a const char * typedef struct keyword_to_ident_c { int ident; const char *keyword; } keyword_to_ident_c; /* * Global functions */ // Free all memory allocated by a filled collection descriptor void rviewDeleteCollection(collection_desc *coll); // Generic event handler. Calls the frame manager: void rviewEventHandler(wxObject &obj, wxEvent &evt); // Parse a projection string and return its dimensionality extern int rviewParseProjection(const r_Minterval &interv, r_Point &pt1, r_Point &pt2, const char *projString, unsigned int *freeDims=NULL, r_Point *mapIndex=NULL); // Return an object's base type as integer identifier extern rviewBaseType rviewGetBasetype(r_Object *obj); // Prints the contents of a cell with a given RasDaMan base type into the buffer, returns number // of characters written. extern int rviewPrintTypedCell(const r_Type *baseType, char *buffer, char *data, int numberBase); // Quicksorts a char *[] extern void rviewQuicksortStrings(char *array[], int from, int to); // Init character lookup tables extern void rviewInitCharacterTables(void); // Look up a keyword in a sorted (!) keyword_to_ident array extern int rviewLookupKeyword(const char *key, const keyword_to_ident_c *kti, int tabsize, bool caseSensitive); // Checks if colourspace mapping is possible for a given base type // and sets up some variables if so. class colourspaceMapper; struct colourspace_params_s; extern int rviewCheckInitCspace(rviewBaseType baseType, colourspaceMapper **csmap, r_Ref &mddObj, bool fullRange=FALSE, r_Minterval *domain=NULL, int w=0, int *newPitch=NULL, int *newDepth=NULL, int *newPad=NULL, int *virtualPitch=NULL, const struct colourspace_params_s *cp=NULL); // Smart number conversions: also understand 0x prefix extern long asctol(const char *str); extern int asctoi(const char *str); extern double asctof(const char *str); extern long stringtol(const char *str, char **endptr=NULL); extern double stringtof(const char *str, char **endptr=NULL); // Dynamic string class class DynamicString { public: DynamicString(void); DynamicString(const DynamicString &ds); DynamicString(const char *str); ~DynamicString(void); DynamicString &first(const char *str, unsigned int num); DynamicString &operator=(const DynamicString &ds); DynamicString &operator=(const char *str); bool operator==(const DynamicString &ds) const; bool operator==(const char *str) const; const char *ptr(void) const; operator const char*(void) const; private: char *myString; static const char emptyString[]; }; // A stack template class template class DynamicStack { public: DynamicStack(unsigned int gran=8); DynamicStack(const DynamicStack &src); ~DynamicStack(void); int push(const T &item); int pop(T &item); int peek(T &item) const; unsigned int getNumber(void) const; protected: int ensureFree(void); unsigned int number, max, granularity; T *stack; }; // Frame types enum rviewFrameType { rviewFrameTypeGeneric, rviewFrameTypeMain, rviewFrameTypeQuery, rviewFrameTypePrefs, rviewFrameTypeAbout, rviewFrameTypeDialog, rviewFrameTypeErrorbox, rviewFrameTypeProgress, rviewFrameTypeStrSet, rviewFrameTypeCspace, rviewFrameTypeImgSet, rviewFrameTypeRenCtrl, rviewFrameTypeResult, rviewFrameTypeThumb, rviewFrameTypeDisplay, rviewFrameTypeImage, rviewFrameTypeFltBsImage, rviewFrameTypeFlatImage, rviewFrameTypeRndImage, rviewFrameTypeVolImage, rviewFrameTypeHghtImage, rviewFrameTypeScaledImage, rviewFrameTypeOSectionImage, rviewFrameTypeChart, rviewFrameTypeTable, rviewFrameTypeSound, rviewFrameTypeStringViewer, rviewFrameTypeRenView, rviewFrameTypeNumberOfTypes }; /* * The base class for all frames. This makes managing open frames * in a uniform way possible. Include after wx.h ! */ class rviewFrame: public wxFrame { public: rviewFrame(wxFrame *parent, char *title, int x, int y, int w, int h); virtual ~rviewFrame(void); // When the checkobj(...) method is called the frame checks whether // it knows obj (e.g. it's a button contained in the frame) and claims // the broadcast by returning a value != 0. This is used in frame manager // broadcasts. You should not try to get involved with derived classes // at this point. int checkobj(wxObject &obj); // When the label() method is called the derived frame class // has to relabel all its widgets virtual void label(void) = 0; // The process() method is called for the object that claimed the // checkobj() function. It has to process the event and return a value // != 0 if it did anything, 0 if the event was ignored. The two // functions are separated because the Frame manager broadcast call // has to be re-entrant and we'll get huge problems if the frame // list changes during the loop. virtual int process(wxObject &obj, wxEvent &evt) = 0; // The userEvent method is called to notify frames of events like // the mdd object a frame displays being deleted. virtual int userEvent(const user_event &ue); // Called when the frame is to be killed. May be overloaded, but normally // doesn't have to be. virtual int requestQuit(int level); // Called for mouse events of some logical child. Normally ignored. virtual void childMouseEvent(wxWindow *child, wxMouseEvent &mevt); // The setParent(parent) function makes this frame a (logical) child // of parent. This will remove the frame from the parent's child frame // list when it's deleted. void setParent(rviewFrame *parent); void registerChild(rviewFrame *child); void deregisterChild(rviewFrame *child); // Returns the name of this class virtual const char *getFrameName(void) const; // Returns the identifier of this frame virtual rviewFrameType getFrameType(void) const; // By default each frame is closed by returning TRUE from this wxWindows // function. If you wish to override this behaviour for certain frames, // override the frame's virtual function OnClose(). virtual bool OnClose(void); protected: // For keeping track of child frames rviewFrameMgr *frames; rviewFrame *parentFrame; int frameWidth, frameHeight; private: // Used internally by the checkobj() member function. int checkobj_rec(wxWindow *whence, wxObject &obj); }; /* * The frame manager. Provides central access to frames and * offers functions like automatically re-labeling all existing * frames. Each object of class rviewFrame registers itself here * in the constructor and deregisters itself in the destructor. */ class rviewFrameMgr { public: rviewFrameMgr(void); rviewFrameMgr(bool delChild); ~rviewFrameMgr(void); void registerFrame(rviewFrame *client); void deregisterFrame(rviewFrame *client); int numberOfFrames(void) const; void setDeleteMode(bool delChild); // The following functions cause the frame manager to iterate over // all frames and call specific member functions. Some of these // member functions (e.g. process) can stop the iteration by // claiming the call. void labelAll(void); void broadcastEvent(wxObject &obj, wxEvent &evt); int broadcastQuit(int level); int broadcastUserEvent(const user_event &ue); protected: frame_list *frameList; frame_list *tailList; int listLength; bool deleteChildren; }; /* * A continuous text displayed in multiple lines */ class rviewMultiline { public: rviewMultiline(wxPanel *Panel, int X, int Y, int H, int Lines); rviewMultiline(wxPanel *Panel, const char *Message, int X, int Y, int W, int H, int Lines); ~rviewMultiline(void); // Returns the height used by the messages int getMessageHeight(void) const; void rebuild(const char *Message, int W); // 10 * number of pixels used per character static const int multiline_ppc10; protected: void setupVariables(wxPanel *Panel, int X, int Y, int H, int Lines); wxPanel *parent; wxMessageOutput **msg; int lines; int x, y, lHeight; }; /* * Convenient interface to standard widgets */ #include class rviewText : public wxTextCtrl { public: rviewText(wxPanel *parent, const char *value=NULL, char *label="", int x=-1, int y=-1, int w=-1, int h=-1); rviewText(long style, wxPanel *parent, const char *value=NULL, char *label="", int x=-1, int y=-1, int w=-1, int h=-1); rviewText(wxPanel *parent, const DynamicString &value, char *label="", int x=-1, int y=-1, int w=-1, int h=-1); rviewText(wxPanel *parent, int value, char *label="", int x=-1, int y=-1, int w=-1, int h=-1); rviewText(wxPanel *parent, long value, char *label="", int x=-1, int y=-1, int w=-1, int h=-1); rviewText(wxPanel *parent, double value, bool sciForm=FALSE, char *label="", int x=-1, int y=-1, int w=-1, int h=-1); void SetValue(char *value); void SetValue(const char *value); void SetValue(const DynamicString &value); void SetValue(int value); void SetValue(unsigned int value); void SetValue(long value); void SetValue(double value, bool sciFrom=FALSE); char *GetValue(void); void GetValue(DynamicString &value); void GetValue(int &value); void GetValue(long &value); void GetValue(float &value); void GetValue(double &value); }; class rviewButton : public wxButton { public: rviewButton(wxPanel *parent, char *label="", int x=-1, int y=-1, int w=-1, int h=-1, long style=0); }; // BUG IN wxCoice: NEVER CREATE A (wx|rview)Choice ITEM WITH AN EMPTY LABEL! class rviewChoice : public wxChoice { public: rviewChoice(wxPanel *parent, int n, char *choices[], char *label="X", int x=-1, int y=-1, int w=-1, int h=-1, long style=0); // this is kind of a hack to fix wxWindows' lack of const rviewChoice(wxPanel *parent, int n, const char *choices[], char *label="X", int x=-1, int y=-1, int w=-1, int h=-1, long style=0); }; class rviewCheckBox : public wxCheckBox { public: rviewCheckBox(wxPanel *parent, char *label="", int x=-1, int y=-1, int w=-1, int h=-1); }; class rviewRadioButton : public wxRadioButton { public: rviewRadioButton(wxPanel *parent, char *label="", bool value=FALSE, int x=-1, int y=-1, int w=-1, int h=-1); }; class rviewScrollBar : public wxScrollBar { public: rviewScrollBar(wxPanel *parent, int x=-1, int y=-1, int w=-1, int h=-1, long style=wxHORIZONTAL); }; class rviewSlider : public wxSlider { public: rviewSlider(wxPanel *parent, int value, int min_val, int max_val, int width, char *label="", int x=-1, int y=-1, long style=wxHORIZONTAL); }; /* * The original slider class didn't allow me to pass on arbitrary mouse events * to the (logical) parent which was needed in the orthosection viewer for * automatically loading the data on a button up event. This slider class fixes * this problem and has the same functionality as the original one. Use it * whenever arbitrary mouse events are important. */ class rviewSpecialSlider : public wxGLCanvas { public: rviewSpecialSlider(rviewFrame *logParent, wxPanel *parent, int val, int min, int max, int width=-1, const char *label=NULL); ~rviewSpecialSlider(void); int GetMax(void) const; int GetMin(void) const; int GetValue(void) const; void SetRange(int min, int max); void SetValue(int val); bool PositionInWell(float posx, float posy); virtual void SetLabel(const char *label); virtual void OnPaint(void); virtual void OnEvent(wxMouseEvent &mevt); protected: void getWellVert(int &y0, int &y1); void getBarParams(float &posx, float &posy, float &height); int calcNewValue(float posx, float posy, int &val, bool checky=FALSE); void redrawCore(float x, float y, float bheight); void getUpdateInterval(float oldx, float newx, float &clipx, float &clipw); void updateWell(float oldx, float newx, float posy, float bheight); wxColour background; wxColour foreground; wxColour wellground; wxColour outline; wxColour labelColour; wxBrush bback; wxBrush bfore; wxBrush bwell; wxPen outlinePen; wxFont labelFont; int border, barwidth, barheight; int value, vmin, vmax; int cwidth, cheight; float textx, texty; DynamicString myLabel; rviewFrame *logicalParent; static const int dflt_width; static const int dflt_height; static const int dflt_border; static const int dflt_barwidth; static const int dflt_barheight; }; /* * Dialog box, containing a message and some buttons. */ class rviewDialog: public rviewFrame { public: rviewDialog(const char *title, const char *message, int buttonNo, const char *buttons[]); virtual ~rviewDialog(void); void OnSize(int w, int h); int GetButton(void); // implementations of the rviewFrame virtual functions void label(void); int process(wxObject &obj, wxEvent &evt); virtual const char *getFrameName(void) const; virtual rviewFrameType getFrameType(void) const; // constants // Width and height of the dialog box static const int dialog_width; static const int dialog_height; // Borders used in the dialog box static const int dialog_border; // Width and height of the buttons static const int dialog_buttonsx; static const int dialog_buttonsy; // Height reserved at the bottom for the buttons static const int dialog_bheight; // Number of text lines static const int dialog_lines; // Height of each of these lines static const int dialog_lheight; protected: wxPanel *panel; char **buttonText; //wxTextWindow *msg; rviewMultiline *msg; rviewButton **but; int buttonNumber; int buttonPressed; }; /* * An error box. */ class rviewErrorbox: public rviewDialog { public: // Default error-box: a message and an OK button. rviewErrorbox(const char *message); rviewErrorbox(const char *title, const char *message, int buttonNo, const char *buttons[]); ~rviewErrorbox(void); int activate(void); virtual const char *getFrameName(void) const; virtual rviewFrameType getFrameType(void) const; // creating errorboxes with formatted text static rviewErrorbox *newErrorbox(const char *message, const char *classname=NULL, const char *funcname=NULL); static rviewErrorbox *newErrorbox(const char *title, const char *message, int buttonNo, const char *buttons[], const char *classname=NULL, const char *funcname=NULL); static int reportError(const char *message, const char *classname=NULL, const char *funcname=NULL); static int reportError(const char *title, const char *message, int buttonNo, const char *buttons[], const char *classname=NULL, const char *funcname=NULL); private: static char *buildErrorMessage(const char *message, const char *classname, const char *funcname); }; /* * Progress reports */ class rviewProgress: public rviewDialog { public: // Progress reporter (mostly used by database) rviewProgress(const char *message); ~rviewProgress(void); int process(wxObject &obj, wxEvent &evt); virtual const char *getFrameName(void) const; virtual rviewFrameType getFrameType(void) const; }; /* * Window holding MDD results */ class rviewTypeMan; class rviewResult: public rviewFrame { public: rviewResult(void); rviewResult(collection_desc *collection); ~rviewResult(void); void setCollection(collection_desc *collection); void label(void); int process(wxObject &obj, wxEvent &evt); int userEvent(const user_event &ue); void OnSize(int w, int h); void OnMenuCommand(int id); virtual const char *getFrameName(void) const; virtual rviewFrameType getFrameType(void) const; // constants // X and Y position of result box static const int result_x; static const int result_y; // Width and height of result box static const int result_width; static const int result_height; // Borders used in results box static const int result_border; // Height of a line (collection info) static const int result_lheight; // Space reserved for header (collection info) static const int result_header; // Width of choice item static const int result_cwidth; // Width and height of resample group static const int result_twidth; static const int result_theight; // Width and height of button static const int result_bwidth; static const int result_bheight; protected: void setupVariables(void); void openViewer(int item); int updateSelection(void); void configureGrey(void); int parseResampleString(const char *resStr, double *values); int resampleSelection(void); char *mddDescriptorString(std::ostream &memstr, int number); void convertSelectedItems(void); // for printing information on time-consuming operations like scaling. void operationPrologue(void); void operationEpilogue(const char *opname); collection_desc *coll; char *selectedItems; // bitfield int lastSelected; int cbfactor; // number of units a checkbox is bigger than the size set wxGroupBox *group; wxMessage *collName, *collType, *collInfo; rviewChoice *choice; wxPanel *panel; wxListBox *list; wxMenuBar *mBar; rviewText *resampText; rviewChoice *scaleMode; rviewButton *resampBut; rviewTypeMan *typeManager; }; /* * About rView window */ class rviewAbout: public rviewFrame { public: rviewAbout(void); ~rviewAbout(void); void label(void); int process(wxObject &obj, wxEvent &evt); void OnSize(int w, int h); virtual const char *getFrameName(void) const; virtual rviewFrameType getFrameType(void) const; // constants // Width and height of About window static const int about_width; static const int about_height; // Borders in About window static const int about_border; // Height of panel static const int about_pheight; // Width and height of buttons in About window static const int about_bwidth; static const int about_bheight; // Height of message item static const int about_mheight; protected: void deleteLabels(void); wxPanel *panel; rviewButton *okBut; wxMessage **labels; int numlines; }; /* * rviewStringSet window */ class rviewStringSet: public rviewFrame { public: rviewStringSet(collection_desc *desc); ~rviewStringSet(void); void label(void); int process(wxObject &obj, wxEvent &evt); void OnSize(int w, int h); int getNumItems(void); void addItem(const char *string); char *getItem(int number); virtual const char *getFrameName(void) const; virtual rviewFrameType getFrameType(void) const; // constants // Width and height of the string set window static const int strset_width; static const int strset_height; // Borders in string set window static const int strset_border; // Reserve space at the bottom for the dismiss button static const int strset_reserve; // Width and height of the dismiss button static const int strset_bwidth; static const int strset_bheight; // Height of message fields static const int strset_mheight; protected: wxPanel *panel; wxListBox *list; rviewButton *dismiss; wxMessage *collName, *collType, *collInfo; }; /* * Global variables */ extern labelManager *lman; extern rviewFrameMgr *frameManager; extern unsigned char lowerCaseTable[256]; #if (defined(EARLY_TEMPLATE) && defined(__EXECUTABLE__)) #include "rviewUtils.cpp" #endif #endif