示例#1
0
/*****************************
 *
 * Exececute the dialog box procedure
 * Returns when a button is pushed.
 * return value is the ID of the button
 *
 ****************************/
void ShowDlg(t_dlg *dlg)
{
    int        i;
    t_dlgitem *dlgitem;

    XMapWindow(dlg->x11->disp, dlg->win.self);
    XMapSubwindows(dlg->x11->disp, dlg->win.self);
    for (i = 0; (i < dlg->nitem); i++)
    {
        LightBorder(dlg->x11->disp, dlg->dlgitem[i]->win.self, dlg->bg);
    }
    XSetForeground(dlg->x11->disp, dlg->x11->gc, dlg->x11->fg);
    for (i = 0; (i < dlg->nitem); i++)
    {
        dlgitem = dlg->dlgitem[i];
        if ((dlgitem->type == edlgBN) &&
            (dlgitem->u.button.bDefault))
        {
            PushMouse(dlg->x11->disp, dlgitem->win.self,
                      dlgitem->win.width/2, dlgitem->win.height/2);
            dlg->bPop = true;
            break;
        }
    }
    dlg->bGrab = false;
}
示例#2
0
static bool DlgCB(t_x11 *x11,XEvent *event, Window w, void *data)
{
  t_dlg     *dlg=(t_dlg *)data;
  int	    i,nWndProc;
  t_dlgitem *dlgitem;
  
  if ((dlgitem=FindWin(dlg,w))!=NULL) {
    nWndProc=(dlgitem->WndProc)(x11,dlgitem,event);
#ifdef DEBUG
    fprintf(x11->console,
	    "window: %s, nWndProc: %d\n",dlgitem->win.text,nWndProc);
    x11->Flush(x11);
#endif
    switch (nWndProc) {
    case ENTERPRESSED:
      if ((dlgitem->type==edlgBN) && (dlgitem->u.button.bDefault)) {
	if (dlg->cb)
	  dlg->cb(x11,DLG_EXIT,dlgitem->ID,dlgitem->win.text,dlg->data);
	else
	  ExitDlg(dlg);
      }
      else {
	for(i=0; (i<dlg->nitem); i++)
	  if ((dlg->dlgitem[i]->type==edlgBN) && 
	      (dlg->dlgitem[i]->u.button.bDefault)) {
	    PushMouse(x11->disp,dlg->dlgitem[i]->win.self,
		      dlg->dlgitem[i]->win.width/2,
		      dlg->dlgitem[i]->win.height/2);
	    break;
	  }
      }
      break;
    case BNPRESSED:
      if (dlg->cb)
	dlg->cb(x11,DLG_EXIT,dlgitem->ID,dlgitem->win.text,dlg->data);
      else 
	ExitDlg(dlg);
      break;
    case RBPRESSED: {
      int  gid=dlgitem->GroupID;
      t_id tid=RBSelected(dlg,gid);
#ifdef DEBUG
      fprintf(stderr,"RBPRESSED\n");
#endif
      if (tid != -1) {
	t_dlgitem *dit=FindItem(dlg,tid);
	dit->u.radiobutton.bSelect=FALSE;
	ExposeWin(x11->disp,dit->win.self);
      }
      else
	gmx_fatal(FARGS,"No RB Selected initially!\n");
      dlgitem->u.radiobutton.bSelect=TRUE;
      ExposeWin(x11->disp,dlgitem->win.self);
      if (dlg->cb)
	dlg->cb(x11,DLG_SET,dlgitem->ID,dlgitem->win.text,dlg->data);
      break;
    }
    case CBPRESSED:
      ExposeWin(x11->disp,dlgitem->win.self);
      if (dlg->cb)
	dlg->cb(x11,DLG_SET,dlgitem->ID,dlgitem->set,dlg->data);
      break;
    case ETCHANGED:
      ExposeWin(x11->disp,dlgitem->win.self);
      if (dlg->cb)
	dlg->cb(x11,DLG_SET,dlgitem->ID,dlgitem->u.edittext.buf,dlg->data);
      break;
    case HELPPRESSED:
      HelpNow(dlg,dlgitem);
      break;
    case ITEMOK:
      break;
    default:
      gmx_fatal(FARGS,"Invalid return code (%d) from wndproc\n",nWndProc);
    }
  }
  else if (w==dlg->win.self) {
    switch(event->type) {
    case Expose:
      EnterDlg(dlg);
      break;
    case ButtonPress:
    case KeyPress:
      if (HelpPressed(event))
	HelpDlg(dlg);
      else
	XBell(x11->disp,50);
      break;
    default:
      break;
    }
  }
  return FALSE;
}