int initDebugPanel( PtWidget_t *widget, ApInfo_t *apinfo, PtCallbackInfo_t *cbinfo ) { extern STATE *snames[]; int stateIndex; int i; char *name; /* eliminate 'unreferenced' warnings */ widget = widget, apinfo = apinfo, cbinfo = cbinfo; /* get the text from the button */ PtGetResource(widget, Pt_ARG_TEXT_STRING, &name, 0); if(name != (char *)NULL) { stateIndex = -1; i = 0; while(snames[i]) { if(!strcmp(name, snames[i]->statename)) { stateIndex = i; break; } i++; } if(stateIndex > -1) { stateDebugDialogSetUser(stateIndex); } } return( Pt_CONTINUE ); }
int tblLastIndex(PtWidget_t *scrollCon, bool row) { tblWidget_t *tbl = NULL; if (PtGetResource(scrollCon, Pt_ARG_POINTER, &tbl, 0) != 0) PtExit(EXIT_FAILURE); if (row) return tbl->rows -1; else return tbl->cols -1; }
int tblSetSize(PtWidget_t *scrollCon, int cols, int rows) { tblWidget_t *tbl = NULL; int i, j; assert(cols >= 0 && rows >= 0); if (PtGetResource(scrollCon, Pt_ARG_POINTER, &tbl, 0) != 0) return 0; /* destroy all sub-widgets */ for (i = 0; i < tbl->cols; i++) { for (j = 0; j < tbl->rows; j++) { PtDestroyWidget(tbl->m[i][j]); } free(tbl->m[i]); free(tbl->m_type[i]); } free(tbl->m); free(tbl->m_type); if ((tbl->cols = cols) == 0 || (tbl->rows = rows) == 0) return 1; if ((tbl->m = (PtWidget_t ***)malloc( sizeof(PtWidget_t **) * tbl->cols)) == NULL) PtExit(EXIT_FAILURE); if ((tbl->m_type = (PtWidgetClassRef_t ***)malloc( sizeof(PtWidgetClassRef_t **) * tbl->cols)) == NULL) PtExit(EXIT_FAILURE); for (i = 0; i < tbl->cols; i++) { if ((tbl->m[i] = (PtWidget_t **)calloc( tbl->rows, sizeof(PtWidget_t *))) == NULL) PtExit(EXIT_FAILURE); if ((tbl->m_type[i] = (PtWidgetClassRef_t **)calloc( tbl->rows, sizeof(PtWidgetClassRef_t *))) == NULL) PtExit(EXIT_FAILURE); } PtReRealizeWidget(scrollCon); return 1; }
int tblDestructionCB(PtWidget_t *w, void *data, PtCallbackInfo_t *cbinfo) { tblWidget_t *tbl = NULL; cbinfo = cbinfo; data = data; /* destroy widgets */ if (!tblSetSize(w, 0, 0)) return Pt_END; /* Pt_HALT */ if (PtGetResource(w, Pt_ARG_POINTER, &tbl, 0) != 0) return Pt_END; free(tbl); return Pt_CONTINUE; }
int showStateDebugDialog( PtWidget_t *widget, ApInfo_t *apinfo, PtCallbackInfo_t *cbinfo ) { int *stateIndex; /* eliminate 'unreferenced' warnings */ widget = widget, apinfo = apinfo, cbinfo = cbinfo; if(!debugDialog) { debugDialog = ApCreateModule(ABM_stateDebugDialog, widget, cbinfo); } PtGetResource(widget, Pt_ARG_USER_DATA, &stateIndex, 0); stateDebugDialogSetUser(*stateIndex); return( Pt_CONTINUE ); }
int tblSetDim(PtWidget_t *scrollCon, PhPoint_t pos, PhDim_t dim) { int c = 0; PtArg_t argsScrCon[2]; tblWidget_t *tbl = NULL; if (PtGetResource(scrollCon, Pt_ARG_POINTER, &tbl, 0) != 0) return 0; tbl->geom = pos; tbl->dim = dim; PtSetArg(&argsScrCon[c++], Pt_ARG_POS, &pos, 0); PtSetArg(&argsScrCon[c++], Pt_ARG_DIM, &dim, 0); PtSetResources(scrollCon, c, argsScrCon); return 1; }
static int ph_SetupWindow(_THIS, int w, int h, int flags) { PtArg_t args[32]; PhPoint_t pos = {0, 0}; PhDim_t* olddim; PhDim_t dim = {w, h}; PhRect_t desktopextent; int nargs = 0; const char* windowpos; const char* iscentered; int x, y; /* check if window size has been changed by Window Manager */ PtGetResource(window, Pt_ARG_DIM, &olddim, 0); if ((olddim->w!=w) || (olddim->h!=h)) { PtSetArg(&args[nargs++], Pt_ARG_DIM, &dim, 0); } if ((flags & SDL_RESIZABLE) == SDL_RESIZABLE) { PtSetArg(&args[nargs++], Pt_ARG_WINDOW_MANAGED_FLAGS, Pt_FALSE, Ph_WM_CLOSE); PtSetArg(&args[nargs++], Pt_ARG_WINDOW_MANAGED_FLAGS, Pt_TRUE, Ph_WM_MAX | Ph_WM_RESTORE | Ph_WM_RESIZE); PtSetArg(&args[nargs++], Pt_ARG_WINDOW_NOTIFY_FLAGS, Pt_TRUE, Ph_WM_RESIZE | Ph_WM_MOVE | Ph_WM_CLOSE | Ph_WM_MAX | Ph_WM_RESTORE); PtSetArg(&args[nargs++], Pt_ARG_WINDOW_RENDER_FLAGS, Pt_TRUE, Ph_WM_RENDER_RESIZE | Ph_WM_RENDER_MAX | Ph_WM_RENDER_COLLAPSE | Ph_WM_RENDER_RETURN); PtSetArg(&args[nargs++], Pt_ARG_RESIZE_FLAGS, Pt_TRUE, Pt_RESIZE_XY_AS_REQUIRED); } else { PtSetArg(&args[nargs++], Pt_ARG_WINDOW_MANAGED_FLAGS, Pt_FALSE, Ph_WM_RESIZE | Ph_WM_MAX | Ph_WM_RESTORE | Ph_WM_CLOSE); PtSetArg(&args[nargs++], Pt_ARG_WINDOW_NOTIFY_FLAGS, Pt_FALSE, Ph_WM_RESIZE | Ph_WM_MAX | Ph_WM_RESTORE); PtSetArg(&args[nargs++], Pt_ARG_WINDOW_NOTIFY_FLAGS, Pt_TRUE, Ph_WM_MOVE | Ph_WM_CLOSE); PtSetArg(&args[nargs++], Pt_ARG_WINDOW_RENDER_FLAGS, Pt_FALSE, Ph_WM_RENDER_RESIZE | Ph_WM_RENDER_MAX | Ph_WM_RENDER_COLLAPSE | Ph_WM_RENDER_RETURN); PtSetArg(&args[nargs++], Pt_ARG_RESIZE_FLAGS, Pt_FALSE, Pt_RESIZE_XY_AS_REQUIRED); } if (((flags & SDL_NOFRAME)==SDL_NOFRAME) || ((flags & SDL_FULLSCREEN)==SDL_FULLSCREEN)) { if ((flags & SDL_RESIZABLE) != SDL_RESIZABLE) { PtSetArg(&args[nargs++], Pt_ARG_WINDOW_RENDER_FLAGS, Pt_FALSE, Pt_TRUE); } else { PtSetArg(&args[nargs++], Pt_ARG_WINDOW_RENDER_FLAGS, Pt_FALSE, Pt_TRUE); PtSetArg(&args[nargs++], Pt_ARG_WINDOW_RENDER_FLAGS, Pt_TRUE, Ph_WM_RENDER_RESIZE | Ph_WM_RENDER_BORDER); } } else { PtSetArg(&args[nargs++], Pt_ARG_WINDOW_RENDER_FLAGS, Pt_TRUE, Ph_WM_RENDER_BORDER | Ph_WM_RENDER_TITLE | Ph_WM_RENDER_CLOSE | Ph_WM_RENDER_MENU | Ph_WM_RENDER_MIN); } if ((flags & SDL_FULLSCREEN) == SDL_FULLSCREEN) { PtSetArg(&args[nargs++], Pt_ARG_POS, &pos, 0); PtSetArg(&args[nargs++], Pt_ARG_BASIC_FLAGS, Pt_TRUE, Pt_BASIC_PREVENT_FILL); PtSetArg(&args[nargs++], Pt_ARG_WINDOW_MANAGED_FLAGS, Pt_TRUE, Ph_WM_FFRONT | Ph_WM_MAX | Ph_WM_TOFRONT | Ph_WM_CONSWITCH); PtSetArg(&args[nargs++], Pt_ARG_WINDOW_STATE, Pt_TRUE, Ph_WM_STATE_ISFRONT | Ph_WM_STATE_ISFOCUS | Ph_WM_STATE_ISALTKEY); } else { PtSetArg(&args[nargs++], Pt_ARG_WINDOW_MANAGED_FLAGS, Pt_FALSE, Ph_WM_FFRONT | Ph_WM_CONSWITCH); PtSetArg(&args[nargs++], Pt_ARG_WINDOW_STATE, Pt_FALSE, Ph_WM_STATE_ISFRONT); PtSetArg(&args[nargs++], Pt_ARG_WINDOW_STATE, Pt_TRUE, Ph_WM_STATE_ISALTKEY); if ((flags & SDL_HWSURFACE) == SDL_HWSURFACE) { PtSetArg(&args[nargs++], Pt_ARG_BASIC_FLAGS, Pt_TRUE, Pt_BASIC_PREVENT_FILL); } else { PtSetArg(&args[nargs++], Pt_ARG_FILL_COLOR, Pg_BLACK, 0); } if (!currently_maximized) { windowpos = SDL_getenv("SDL_VIDEO_WINDOW_POS"); iscentered = SDL_getenv("SDL_VIDEO_CENTERED"); if ((iscentered) || ((windowpos) && (SDL_strcmp(windowpos, "center")==0))) { PhWindowQueryVisible(Ph_QUERY_CONSOLE, 0, 0, &desktopextent); if (desktop_mode.width>w) { pos.x = (desktop_mode.width - w)/2; } if (desktop_mode.height>h) { pos.y = (desktop_mode.height - h)/2; } pos.x+=desktopextent.ul.x; pos.y+=desktopextent.ul.y; PtSetArg(&args[nargs++], Pt_ARG_POS, &pos, 0); } else { if (windowpos) { if (SDL_sscanf(windowpos, "%d,%d", &x, &y) == 2) { if ((x<desktop_mode.width) && (y<desktop_mode.height)) { PhWindowQueryVisible(Ph_QUERY_CONSOLE, 0, 0, &desktopextent); pos.x=x+desktopextent.ul.x; pos.y=y+desktopextent.ul.y; } PtSetArg(&args[nargs++], Pt_ARG_POS, &pos, 0); } } } } /* if window is maximized render it as maximized */ if (currently_maximized) { PtSetArg(&args[nargs++], Pt_ARG_WINDOW_STATE, Pt_TRUE, Ph_WM_STATE_ISMAX); } else { PtSetArg(&args[nargs++], Pt_ARG_WINDOW_STATE, Pt_FALSE, Ph_WM_STATE_ISMAX); } /* do not grab the keyboard by default */ PtSetArg(&args[nargs++], Pt_ARG_WINDOW_STATE, Pt_FALSE, Ph_WM_STATE_ISALTKEY); /* bring the focus to the window */ PtSetArg(&args[nargs++], Pt_ARG_WINDOW_STATE, Pt_TRUE, Ph_WM_STATE_ISFOCUS); /* allow to catch hide event */ PtSetArg(&args[nargs++], Pt_ARG_WINDOW_MANAGED_FLAGS, Pt_TRUE, Ph_WM_HIDE); PtSetArg(&args[nargs++], Pt_ARG_WINDOW_NOTIFY_FLAGS, Pt_TRUE, Ph_WM_HIDE); } PtSetResources(window, nargs, args); PtRealizeWidget(window); PtWindowToFront(window); #if 0 /* FIXME */ PtGetResource(window, Pt_ARG_POS, &olddim, 0); fprintf(stderr, "POSITION: %d, %d\n", olddim->w, olddim->h); #endif return 0; }