COVISE Core
CoviseBase.h
Go to the documentation of this file.
1/* This file is part of COVISE.
2
3 You can use it under the terms of the GNU Lesser General Public License
4 version 2.1 or later, see lgpl-2.1.txt.
5
6 * License: LGPL 2+ */
7
8#ifndef COVISE_BASE_H
9#define COVISE_BASE_H
10
11#if !defined(__linux__) && !defined(_WIN32)
12#define COVISE_Signals
13#endif
14
15#include <covise/covise.h>
16#include <util/coTypes.h>
17#include <string>
18#include <functional>
19#ifndef _WIN32
20#include <dirent.h>
21#endif
22
23#ifdef COVISE_USE_X11
24#include <X11/Intrinsic.h>
25#include <X11/StringDefs.h>
26#include <X11/keysym.h>
27#endif
28
29#ifdef COVISE_Signals
31#endif
32
33#include <covise/covise_msg.h>
34
35namespace covise
36{
37
38class ApplicationProcess;
39class coDistributedObject;
40
41const int MAXTOKENS = 10;
42
44{
45 DESCRIPTION = 0, //0
48 PARIN, //3
49 PAROUT //4
50};
51
53{
54 string mapName;
55 vector<float> mapValues;
56};
57
58/*
59 * Covise callbacks
60 */
61typedef void CoviseCallback(void *userData, void *callbackData);
62typedef std::function<void(const covise::Message &)> CoviseCallback2;
63typedef void CoviseParamCallback(bool inMapLoading, void *userData, void *callbackData);
64
66{
67public:
68 CoviseBase();
69
70 enum
71 {
72 MAX_PORTS = 4096
73 };
74 enum
75 {
77 DEL_OBJ
78 };
79
80protected:
81 // Error flag
82 static int error;
83
84 // Communication data
85 static char *reply_keyword;
86 static char *reply_param_name;
87 static char *reply_param_type;
88 static const char **reply_buffer;
90 static vector<string> tokenlist;
92 static int socket_id;
97 static char *emergency_data;
98 static const char *module_description;
99 static bool master;
100
101 static char *port_name[MAX_PORTS];
102 static char *port_description[MAX_PORTS];
103 static enum appl_port_type port_type[MAX_PORTS];
104 static const char *port_default[MAX_PORTS];
105 static char *port_datatype[MAX_PORTS];
106 static char *port_dependency[MAX_PORTS];
107 static int port_required[MAX_PORTS];
108
109#ifdef COVISE_USE_X11
110 static XtInputId X_id;
111 static XtAppContext appContext;
112#endif
113
114 // Flag for initialization
115 static int init_flag;
116
117 static char *feedback_info;
118
119 // protected member funcs
120 static void remove_socket(int sock_id);
121 static std::string get_description_message();
122 static std::string get_param_description(appl_port_type type);
123 static void doProgress();
124 static void doCustom(Message *m);
125 static void doMasterSwitch();
126 static void doSlaveSwitch();
127//static int doQuit();
128#ifndef _WIN32
129#ifdef COVISE_Signals
130 static void signal_handler(int signo, void *);
131#endif
132#endif
133 static void init_emergency_message(void);
134#ifdef COVISE_USE_X11
135 static void socketCommunicationCB(XtPointer client_data, int *source, XtInputId *id);
136#endif
137
138 // callback stuff
140 static void *progressUserData;
143 static void *quitUserData;
144 static void *quitCallbackData;
146 static void *quitInfoUserData;
152 static void *paramUserData;
153 static void *paramCallbackData;
154 static void callProgressCallback(void);
155 static void callQuitCallback(void);
156 static void callQuitInfoCallback(void);
157 static void callCustomCallback(const covise::Message& msg);
158 static void callMasterSwitchCallback(void);
159 static void callParamCallback(bool inMapLoading);
160
161public:
162 static int parseMessage(char *line, char *token[], int tmax, const char *sep);
163
164 static void set_progress_callback(CoviseCallback *f, void *userData);
165 static void set_quit_callback(CoviseCallback *f, void *userData);
166 static void set_quit_info_callback(CoviseCallback *f, void *userData);
167 static void set_custom_callback(const CoviseCallback2 &f);
168 static void set_param_callback(CoviseParamCallback *f, void *userData);
169 static void remove_progress_callback();
170 static void remove_quit_callback();
171 static void remove_quit_info_callback();
172 static void remove_custom_callback();
173 static void remove_param_callback();
174
175 static void set_master_switch_callback(CoviseCallback *f, void *userData);
176 static void remove_master_switch_callback();
177
178 static bool is_master()
179 {
180 return master;
181 };
182
183 static int request_param(const char *name);
184 static void enable_param(const char *name);
185 static void disable_param(const char *name);
186 static void hide_param(const char *name);
187 static void show_param(const char *name);
188 static void cancel_param(const char *name);
189 static void reopen_param(const char *name);
190
191 static int get_reply_passwd(const char **host, const char **user, const char **passwd);
192 static int get_reply_cli(const char **command);
193 static int get_reply_int_slider(long *min, long *max, long *val);
194 static int get_reply_float_slider(float *min, float *max, float *val);
195 static int get_reply_int_vector(int pos, long *val);
196 static int get_reply_float_vector(int pos, float *val);
197 static int get_reply_int_scalar(long *val);
198 static int get_reply_int64_scalar(int64_t *val);
199 static int get_reply_float_scalar(float *val);
200 static int get_reply_boolean(int *);
201 static int get_reply_string(const char **string);
202 static int get_reply_browser(const char **file);
203 static int get_reply_timer(long *start, long *delta, long *state);
204 static int get_reply_arrayset(const char **msg_buf);
205 static int get_reply_choice(int *selected_pos);
206 static int get_reply_choice(int pos, string *choiceLabels);
207 static int get_reply_colormapchoice(int *selected_pos);
208 static int get_reply_colormapchoice(TColormapChoice *values);
209 static int get_reply_material(string *value);
210 static int get_reply_colormap(float *min, float *max, int *len, colormap_type *type);
211 static int get_reply_colormap(int pos, float *r, float *g, float *b, float *a, float *x);
212 static int get_reply_color(float *r, float *g, float *b, float *a);
213
214 static int update_slider_param(const char *name, long min, long max, long val);
215 static int update_slider_param(const char *name, float min, float max, float val);
216 static int update_scalar_param(const char *name, long val);
217 static int update_scalar_param(const char *name, float val);
218 static int update_vector_param(const char *name, int num, long *list);
219 static int update_vector_param(const char *name, int num, float *list);
220 static int update_string_param(const char *name, char *string);
221 static int update_text_param(const char *name, char *text, int linenum);
222 static int update_boolean_param(const char *name, int val);
223 static int update_choice_param(const char *name, int len, const char *const *list, int pos);
224 static int update_timer_param(const char *name, long start, long delta, long state);
225 static int update_colormap_param(const char *name, float min, float max, const string &cmap);
226 static int update_material_param(const char *name, const string &value);
227 static int update_colormapchoice_param(const char *name, int num, int pos, TColormapChoice *list);
228 static int update_color_param(const char *name, float r, float g, float b, float a);
229
230 static int get_socket_id();
231 static const char *get_instance()
232 {
233 if (instance.empty())
234 {
235 return nullptr;
236 }
237 return instance.c_str();
238 }
239 static const char *get_host()
240 {
241 if (h_name.empty())
242 {
243 return nullptr;
244 }
245 return h_name.c_str();
246 }
247 static const char *get_module()
248 {
249 if (m_name.empty())
250 {
251 return nullptr;
252 }
253 return m_name.c_str();
254 }
255 static const char *get_reply_param_name()
256 {
257 return reply_param_name;
258 }
259
260 //
261 // Messages to COVISE environment
262 //
263
265 static void sendWarning(const char *fmt, ...)
266#ifdef __GNUC__
267 __attribute__((format(printf, 1, 2)))
268#endif
269 ;
270
272 static void sendError(const char *fmt, ...)
273#ifdef __GNUC__
274 __attribute__((format(printf, 1, 2)))
275#endif
276 ;
277
279 static void sendInfo(const char *string, ...)
280#ifdef __GNUC__
281 __attribute__((format(printf, 1, 2)))
282#endif
283 ;
284 static int send_message(covise_msg_type type, const char *msg_string);
285 static int send_ui_message(const char *keyword, const char *string);
286
287 static int send_feedback_message(const char *keyword, const char *string);
288 static void set_feedback_info(const char *string);
289 static const char *get_feedback_info();
290 static char get_feedback_type();
291 static void send_quit_request();
292 static void log_message(int line, const char *file, const char *comment);
293
295
296 //
297 // File Open Utilities by Uwe Woessner
298 //
299 // define const char * functions as well...
300 static FILE *fopen(const char *file, const char *mode, char **returnPath = NULL);
301 static int open(const char *file, int mode);
302#if !defined(_WIN32) && !defined(__alpha) && !defined(_AIX)
303 static DIR *opendir(const char *file);
304#endif
305 static void getname(char *buf, const char *file, const char *addpath = NULL);
306 static bool getnameinpath(char *buf, const char *file, const char *path);
307
308 // Add Interactor for feedback
309 static void addInteractor(coDistributedObject *obj, const char *name, const char *value);
310
311 // Print out description for -d option
312 static void printDesc(const char *callname);
313};
314}
315#endif
#define APPLEXPORT
Definition: coExport.h:57
#define NULL
Definition: covise_list.h:22
GLsizei const GLchar *const * string
Definition: khronos-glext.h:6750
GLsizei GLsizei GLuint * obj
Definition: khronos-glext.h:6733
GLuint start
Definition: khronos-glext.h:6343
GLenum mode
Definition: khronos-glext.h:6908
GLint GLint GLsizei GLsizei GLsizei GLint GLenum format
Definition: khronos-glext.h:6344
GLsizei const GLfloat * value
Definition: khronos-glext.h:6760
GLsizei const GLchar ** path
Definition: khronos-glext.h:7952
GLfloat f
Definition: khronos-glext.h:8258
GLboolean GLboolean GLboolean b
Definition: khronos-glext.h:6895
GLboolean GLenum GLenum GLvoid * values
Definition: khronos-glext.h:6369
GLboolean GLboolean g
Definition: khronos-glext.h:6895
GLuint GLfloat * val
Definition: khronos-glext.h:7898
typedef void(APIENTRY *GLDEBUGPROCARB)(GLenum source
GLenum GLuint GLenum GLsizei const GLchar * buf
Definition: khronos-glext.h:8469
GLuint const GLchar * name
Definition: khronos-glext.h:6722
GLuint GLuint num
Definition: khronos-glext.h:10593
GLdouble GLdouble GLdouble r
Definition: khronos-glext.h:6457
GLenum GLsizei len
Definition: khronos-glext.h:7440
GLboolean GLboolean GLboolean GLboolean a
Definition: khronos-glext.h:6895
const GLfloat * m
Definition: khronos-glext.h:12117
GLenum type
Definition: khronos-glext.h:6279
GLint GLint GLint GLint GLint x
Definition: khronos-glext.h:6346
GLsizei GLsizei GLchar * source
Definition: khronos-glext.h:6739
enum appl_port_type CoviseBase
Definition: CoviseBase.cpp:51
int min(int a, int b)
Definition: cutil_math.h:60
int max(int a, int b)
Definition: cutil_math.h:55
list of all chemical elements
Definition: coConfig.h:27
colormap_type
Definition: covise_msg.h:80
void CoviseCallback(void *userData, void *callbackData)
Definition: CoviseBase.h:61
void CoviseParamCallback(bool inMapLoading, void *userData, void *callbackData)
Definition: CoviseBase.h:63
covise_msg_type
Definition: message_types.h:65
const int MAXTOKENS
Definition: CoviseBase.h:41
appl_port_type
Definition: CoviseBase.h:44
@ INPUT_PORT
Definition: CoviseBase.h:46
@ PARIN
Definition: CoviseBase.h:48
@ OUTPUT_PORT
Definition: CoviseBase.h:47
@ DESCRIPTION
Definition: CoviseBase.h:45
@ PAROUT
Definition: CoviseBase.h:49
std::function< void(const covise::Message &)> CoviseCallback2
Definition: CoviseBase.h:62
static void addpath(const char *variable, std::string value)
Definition: environment.cpp:100
Definition: message.h:76
Definition: covise_appproc.h:20
Definition: CoviseBase.h:53
string mapName
Definition: CoviseBase.h:54
vector< float > mapValues
Definition: CoviseBase.h:55
Definition: CoviseBase.h:66
static int no_of_reply_tokens
Definition: CoviseBase.h:89
static void * paramUserData
Definition: CoviseBase.h:152
static ApplicationProcess * appmod
Definition: CoviseBase.h:294
@ ADD_OBJ
Definition: CoviseBase.h:76
static std::string instance
Definition: CoviseBase.h:95
static vector< string > tokenlist
Definition: CoviseBase.h:90
static int init_flag
Definition: CoviseBase.h:115
static void * quitInfoCallbackData
Definition: CoviseBase.h:147
static CoviseCallback2 customCallbackFunc
Definition: CoviseBase.h:148
static void * progressUserData
Definition: CoviseBase.h:140
static Message emergency_message
Definition: CoviseBase.h:96
static void cancel_param(const char *name)
static const char * get_host()
Definition: CoviseBase.h:239
static int socket_id
Definition: CoviseBase.h:92
static void reopen_param(const char *name)
static CoviseCallback * quitCallbackFunc
Definition: CoviseBase.h:142
static void * masterSwitchUserData
Definition: CoviseBase.h:150
static int error
Definition: CoviseBase.h:82
static void * quitInfoUserData
Definition: CoviseBase.h:146
static const char ** reply_buffer
Definition: CoviseBase.h:88
static char * reply_keyword
Definition: CoviseBase.h:85
static CoviseCallback * masterSwitchCallbackFunc
Definition: CoviseBase.h:149
static void * quitCallbackData
Definition: CoviseBase.h:144
static bool master
Definition: CoviseBase.h:99
static const char * module_description
Definition: CoviseBase.h:98
static CoviseParamCallback * paramCallbackFunc
Definition: CoviseBase.h:151
static std::string h_name
Definition: CoviseBase.h:93
static char * emergency_data
Definition: CoviseBase.h:97
static const char * get_instance()
Definition: CoviseBase.h:231
static Message * applMsg
Definition: CoviseBase.h:91
static void * quitUserData
Definition: CoviseBase.h:143
static CoviseCallback * progressCallbackFunc
Definition: CoviseBase.h:139
static void * paramCallbackData
Definition: CoviseBase.h:153
static const char * get_reply_param_name()
Definition: CoviseBase.h:255
static std::string m_name
Definition: CoviseBase.h:94
static const char * get_module()
Definition: CoviseBase.h:247
static void * progressCallbackData
Definition: CoviseBase.h:141
static bool is_master()
Definition: CoviseBase.h:178
static CoviseCallback * quitInfoCallbackFunc
Definition: CoviseBase.h:145
static void addInteractor(coDistributedObject *obj, const char *name, const char *value)
static char * feedback_info
Definition: CoviseBase.h:117
static char * reply_param_type
Definition: CoviseBase.h:87
static char * reply_param_name
Definition: CoviseBase.h:86
Definition: coDistributedObject.h:296