Yes we know we have no signals/slots in pvserver, like we have in Qt. But we have something similar.
// here are our slots, we know they are not the same as in qt :-) // You may insert them in your mask. // But you may also generate them with your tools and // #include "slots_mask1.cpp" static int slotDefineMask(PARAM *p, DATA *d); { if(p == NULL || d == NULL) return 1; return 0; } static int slotNullEvent(PARAM *p, DATA *d) { if(p == NULL || d == NULL) return 1; return 0; } static int slotButtonEvent(PARAM *p, int id, DATA *d) { if(p == NULL || id < 0 || d == NULL) return 1; switch(id) // id = id of widget { default: break; } return 0; } static int slotButtonPressedEvent(PARAM *p, int id, DATA *d) { if(p == NULL || id < 0 || d == NULL) return 1; switch(id) // id = id of widget { default: break; } return 0; } static int slotButtonReleasedEvent(PARAM *p, int id, DATA *d) { if(p == NULL || id < 0 || d == NULL) return 1; switch(id) // id = id of widget { default: break; } return 0; } static int slotTextEvent(PARAM *p, int id, DATA *d, const char *text) { if(p == NULL || id < 0 || d == NULL || text == NULL) return 1; switch(id) // id = id of widget { default: break; } return 0; } static int slotSliderEvent(PARAM *p, int id, DATA *d, int val) { if(p == NULL || id < 0 || d == NULL || val < 0) return 1; switch(id) // id = id of widget { default: break; } return 0; } static int slotCheckboxEvent(PARAM *p, int id, DATA *d, const char *text) { if(p == NULL || id < 0 || d == NULL || text == NULL) return 1; switch(id) // id = id of widget { default: break; } return 0; } static int slotRadioButtonEvent(PARAM *p, int id, DATA *d, const char *text) { if(p == NULL || id < 0 || d == NULL || text == NULL) return 1; switch(id) // id = id of widget { default: break; } return 0; } static int slotGlInitializeEvent(PARAM *p, int id, DATA *d) { if(p == NULL || id < 0 || d == NULL) return 1; switch(id) // id = id of widget { default: break; } return 0; } static int slotGlPaintEvent(PARAM *p, int id, DATA *d) { if(p == NULL || id < 0 || d == NULL) return 1; switch(id) // id = id of widget { default: break; } return 0; } static int slotGlResizeEvent(PARAM *p, int id, DATA *d, int w, int h) { if(p == NULL || id < 0 || d == NULL || w < 0 || h < 0) return 1; switch(id) // id = id of widget { default: break; } return 0; } static int slotGlIdleEvent(PARAM *p, int id, DATA *d) { if(p == NULL || id < 0 || d == NULL) return 1; switch(id) // id = id of widget { default: break; } return 0; } static int slotTabEvent(PARAM *p, int id, DATA *d, int val) { if(p == NULL || id < 0 || d == NULL || val < 0) return 1; switch(id) // id = id of widget { default: break; } return 0; } static int slotTableTextEvent(PARAM *p, int id, DATA *d, int x, int y, const char *str1) { if(p == NULL || id < 0 || d == NULL || x < -1 || y < -1 || str1 == NULL) return 1; switch(id) // id = id of widget { default: break; } return 0; } static int slotTableClickedEvent(PARAM *p, int id, DATA *d, int x, int y, int button) { if(p == NULL || id < 0 || d == NULL || x < -1 || y < -1 || button < 0) return 1; switch(id) // id = id of widget { default: break; } return 0; } static int slotSelectionEvent(PARAM *p, int id, DATA *d, int val, const char *str1) { if(p == NULL || id < 0 || d == NULL || val < 0 || str1 == NULL) return 1; switch(id) // id = id of widget { default: break; } return 0; } static int slotClipboardEvent(PARAM *p, int id, DATA *d, int val) { if(p == NULL || id < 0 || d == NULL || val < 0) return 1; switch(id) // id = id of widget { default: break; } return 0; } static int slotRightMouseEvent(PARAM *p, int id, DATA *d, const char *text) { if(p == NULL || id < 0 || d == NULL || text == NULL) return 1; switch(id) // id = id of widget { default: break; } return 0; } static int slotKeyboardEvent(PARAM *p, int id, DATA *d, int val) { if(p == NULL || id < 0 || d == NULL || val < 0) return 1; switch(id) // id = id of widget { default: break; } return 0; } static int slotMouseMovedEvent(PARAM *p, int id, DATA *d, float xval, float yval) { if(p == NULL || id < 0 || d == NULL || xval < 0.0f || yval < 0.0f) return 1; switch(id) // id = id of widget { default: break; } return 0; } static int slotMousePressedEvent(PARAM *p, int id, DATA *d, float xval, float yval) { if(p == NULL || id < 0 || d == NULL || xval < 0.0f || yval < 0.0f) return 1; switch(id) // id = id of widget { default: break; } return 0; } static int slotMouseReleasedEvent(PARAM *p, int id, DATA *d, float xval, float yval) { if(p == NULL || id < 0 || d == NULL || xval < 0.0f || yval < 0.0f) return 1; switch(id) // id = id of widget { default: break; } return 0; } static int slotUserEvent(PARAM *p, int id, DATA *d, const char *text) { if(p == NULL || id < 0 || d == NULL || text == NULL) return 1; switch(id) // id = id of widget { default: break; } return 0; } int show_mask1(PARAM *p) { DATA d; char event[MAX_EVENT_LENGTH]; char text[MAX_EVENT_LENGTH]; char str1[MAX_EVENT_LENGTH]; int i,w,h,val,x,y,button; float xval, yval; memset(&d,0,sizeof(DATA)); defineMask(p); slotDefineMask(p,&d); readData(&d); // from shared memory, database or something else showData(p,&d); while(1) { pvPollEvent(p,event); switch(pvParseEvent(event, &i, text)) { case NULL_EVENT: readData(&d); // from shared memory, database or something else showData(p,&d); slotNullEvent(p,&d); break; case BUTTON_EVENT: slotButtonEvent(p,i,&d); printf("BUTTON_EVENT id=%d\n",i); break; case BUTTON_PRESSED_EVENT: slotButtonPressedEvent(p,i,&d); printf("BUTTON_PRESSED_EVENT id=%d\n",i); break; case BUTTON_RELEASED_EVENT: slotButtonReleasedEvent(p,i,&d); printf("BUTTON_RELEASED_EVENT id=%d\n",i); break; case TEXT_EVENT: slotTextEvent(p,i,&d,text); printf("TEXT_EVENT id=%d %s\n",i,text); break; case SLIDER_EVENT: sscanf(text,"(%d)",&val); slotSliderEvent(p,i,&d,val); printf("SLIDER_EVENT val=%d\n",val); break; case CHECKBOX_EVENT: slotCheckboxEvent(p,i,&d,text); printf("CHECKBOX_EVENT id=%d %s\n",i,text); break; case RADIOBUTTON_EVENT: slotRadioButtonEvent(p,i,&d,text); printf("RADIOBUTTON_EVENT id=%d %s\n",i,text); break; case GL_INITIALIZE_EVENT: slotGlInitializeEvent(p,i,&d); printf("you have to call initializeGL()\n"); break; case GL_PAINT_EVENT: slotGlPaintEvent(p,i,&d); printf("you have to call paintGL()\n"); break; case GL_RESIZE_EVENT: sscanf(text,"(%d,%d)",&w,&h); slotGlResizeEvent(p,i,&d,w,h); printf("you have to call resizeGL(w,h)\n"); break; case GL_IDLE_EVENT: slotGlIdleEvent(p,i,&d); break; case TAB_EVENT: sscanf(text,"(%d)",&val); slotTabEvent(p,i,&d,val); printf("TAB_EVENT(%d,page=%d)\n",i,val); break; case TABLE_TEXT_EVENT: sscanf(text,"(%d,%d,",&x,&y); pvGetText(text,str1); slotTableTextEvent(p,i,&d,x,y,str1); printf("TABLE_TEXT_EVENT(%d,%d,\"%s\")\n",x,y,str1); break; case TABLE_CLICKED_EVENT: sscanf(text,"(%d,%d,%d)",&x,&y,&button); slotTableClickedEvent(p,i,&d,x,y,button); printf("TABLE_CLICKED_EVENT(%d,%d,button=%d)\n",x,y,button); break; case SELECTION_EVENT: sscanf(text,"(%d,",&val); pvGetText(text,str1); slotSelectionEvent(p,i,&d,val,str1); printf("SELECTION_EVENT(column=%d,\"%s\")\n",val,str1); break; case CLIPBOARD_EVENT: sscanf(text,"(%d",&val); slotClipboardEvent(p,i,&d,val); printf("CLIPBOARD_EVENT(id=%d)\n",val); printf("clipboard = \n%s\n",p->clipboard); break; case RIGHT_MOUSE_EVENT: printf("RIGHT_MOUSE_EVENT id=%d text=%s\n",i,text); slotRightMouseEvent(p,i,&d,text); //pvPopupMenu(p,-1,"Menu1,Menu2,,Menu3"); break; case KEYBOARD_EVENT: sscanf(text,"(%d",&val); slotKeyboardEvent(p,i,&d,val); printf("KEYBOARD_EVENT modifier=%d key=%d\n",i,val); break; case PLOT_MOUSE_MOVED_EVENT: sscanf(text,"(%f,%f)",&xval,&yval); slotMouseMovedEvent(p,i,&d,xval,yval); printf("PLOT_MOUSE_MOVE %f %f\n",xval,yval); break; case PLOT_MOUSE_PRESSED_EVENT: sscanf(text,"(%f,%f)",&xval,&yval); slotMousePressedEvent(p,i,&d,xval,yval); printf("PLOT_MOUSE_PRESSED %f %f\n",xval,yval); break; case PLOT_MOUSE_RELEASED_EVENT: sscanf(text,"(%f,%f)",&xval,&yval); slotMouseReleasedEvent(p,i,&d,xval,yval); printf("PLOT_MOUSE_RELEASED %f %f\n",xval,yval); break; case USER_EVENT: slotUserEvent(p,i,&d,text); printf("USER_EVENT id=%d %s\n",i,text); break; default: printf("UNKNOWN_EVENT id=%d %s\n",i,text); break; } } }