Пример #1
0
static int WndProcST(t_x11 *x11, t_dlgitem *dlgitem, XEvent *event)
{
    t_statictext *st;
    t_windata    *win;
    int           i, dy;

    if (dlgitem->type != edlgST)
    {
        gmx_incons("st processing");
    }
    st  = &(dlgitem->u.statictext);
    win = &(dlgitem->win);

    switch (event->type)
    {
        case Expose:
            dy = XTextHeight(x11->font)+OFFS_Y;
            for (i = 0; (i < st->nlines); i++)
            {
                TextInRect(x11, win->self, st->lines[i],
                           0, OFFS_Y+i*dy, win->width, dy, eXLeft, eYCenter);
            }
            break;
        default:
            return DefWndProc(x11, dlgitem, event);
    }
    return ITEMOK;
}
Пример #2
0
static int WndProcBN(t_x11 *x11, t_dlgitem *dlgitem, XEvent *event)
{
    t_windata *win;
    int        x, w, th;

    if (dlgitem->type != edlgBN)
    {
        gmx_incons("button processing");
    }
    win = &(dlgitem->win);
    w   = XTextWidth(x11->font, win->text, strlen(win->text));
    x   = (win->width-w)/2;
    th  = XTextHeight(x11->font)+OFFS_Y;
    switch (event->type)
    {
        case Expose:
            RectWin(x11->disp, x11->gc, win, x11->fg);
            TextInRect(x11, win->self, win->text, 0, 0, win->width, th, eXCenter, eYCenter);
            break;
        case ButtonPress:
            return BNPRESSED;
        case EnterNotify:
            XDrawLine(x11->disp, win->self, x11->gc, x-1, th, x+w, th);
            break;
        case LeaveNotify:
            XSetForeground(x11->disp, x11->gc, x11->bg);
            XDrawLine(x11->disp, win->self, x11->gc, x-1, th, x+w, th);
            XSetForeground(x11->disp, x11->gc, x11->fg);
            break;
        default:
            return DefWndProc(x11, dlgitem, event);
    }
    return ITEMOK;
}
Пример #3
0
static int WndProcGB(t_x11 *x11, t_dlgitem *dlgitem, XEvent *event)
{
    t_windata *win;
    int        x, y;

    if (dlgitem->type != edlgGB)
    {
        gmx_incons("gb processing");
    }
    win = &(dlgitem->win);

    x = XTextWidth(x11->font, win->text, strlen(win->text));
    y = XTextHeight(x11->font);
    switch (event->type)
    {
        case Expose:
            XSetForeground(x11->disp, x11->gc, x11->fg);
            XDrawRoundRect(x11->disp, win->self, x11->gc, 0, y/2,
                           win->width-1, win->height-y/2-1);
            XClearArea(x11->disp, win->self, OFFS_X, 0, x+OFFS_X, y, False);
            TextInRect(x11, win->self, win->text, 2*OFFS_X, 0, x, y, eXCenter, eYCenter);
            break;
        case EnterNotify:
        case LeaveNotify:
            break;
        default:
            return DefWndProc(x11, dlgitem, event);
    }
    return ITEMOK;
}
Пример #4
0
t_dlgitem *CreateGroupBox(t_x11 *x11,
                          const char *szLab, t_id id,
                          int nitems, t_id items[],
                          int x0, int y0, int w, int h, int bw)
{
    t_dlgitem *dlgitem;

    dlgitem = newitem(x11);
    if (h == 0)
    {
        h = XTextHeight(x11->font)+OFFS_Y;
    }
    if (w == 0)
    {
        w = XTextWidth(x11->font, szLab, strlen(szLab))+2*OFFS_X;
    }
    InitWin(&(dlgitem->win), x0, y0, w, h, bw, szLab);
    dlgitem->GroupID           = id;
    dlgitem->ID                = id;
    dlgitem->type              = edlgGB;
    dlgitem->u.groupbox.nitems = nitems;
    snew(dlgitem->u.groupbox.item, nitems);
    memcpy((char *)dlgitem->u.groupbox.item, (char *)items,
           nitems*sizeof(items[0]));
    dlgitem->WndProc = WndProcGB;

    return dlgitem;
}
Пример #5
0
t_dlgitem *CreateEditText(t_x11 *x11,
			  const char *title,
			  int screenbuf,char *buf, t_id id,t_id groupid,
			  int x0,int y0,int w,int h,int bw)
{
  t_dlgitem *dlgitem;
  t_edittext *et;
  
  dlgitem=newitem(x11);
  if (h==0) h=XTextHeight(x11->font)+OFFS_Y;
  if (w==0) {
    char *test;

    snew(test,screenbuf);
    memset(test,'w',screenbuf);
    w=XTextWidth(x11->font,test,screenbuf)+
      XTextWidth(x11->font,title,strlen(title))+
      2*XCARET+2*OFFS_X;
    sfree(test);
  }
  InitWin(&(dlgitem->win),x0,y0,w,h,bw,title);
  dlgitem->ID=id;
  dlgitem->GroupID=groupid;
  dlgitem->type=edlgET;
  et=&(dlgitem->u.edittext);
  snew(et->buf,STRLEN);
  strcpy(et->buf,buf);
  et->buflen=screenbuf;
  et->strbegin=0;
  et->bChanged=FALSE;
  dlgitem->WndProc=WndProcET;

  return dlgitem;
}
Пример #6
0
t_dlgitem *CreateCheckBox(t_x11 *x11,
                          const char *szLab, gmx_bool bCheckedInitial, t_id id,
                          t_id groupid,
                          int x0, int y0, int w, int h, int bw)
{
    t_dlgitem *dlgitem;

    dlgitem = newitem(x11);
    if (h == 0)
    {
        h = XTextHeight(x11->font)+OFFS_Y;
    }
    if (w == 0)
    {
        w = XTextWidth(x11->font, szLab, strlen(szLab))+OFFS_X+h;
    }
    InitWin(&(dlgitem->win), x0, y0, w, h, bw, szLab);
    dlgitem->ID                  = id;
    dlgitem->GroupID             = groupid;
    dlgitem->type                = edlgCB;
    dlgitem->u.checkbox.bChecked = bCheckedInitial;
    dlgitem->WndProc             = WndProcCB;

    return dlgitem;
}
Пример #7
0
t_dlgitem *CreateStaticText(t_x11 *x11,
                            int nlines, char * const * lines, t_id id,
                            t_id groupid,
                            int x0, int y0, int w, int h, int bw)
{
    t_dlgitem *dlgitem;
    int        i;

    dlgitem = newitem(x11);
    if (h == 0)
    {
        h = (XTextHeight(x11->font)+OFFS_Y)*nlines+OFFS_Y;
    }
    if (w == 0)
    {
        for (i = 0; (i < nlines); i++)
        {
            w = max(w, XTextWidth(x11->font, lines[i], strlen(lines[i])));
        }
        w += 2*OFFS_X;
    }
    InitWin(&(dlgitem->win), x0, y0, w, h, bw, NULL);
    dlgitem->ID                  = id;
    dlgitem->GroupID             = groupid;
    dlgitem->type                = edlgST;
    dlgitem->u.statictext.nlines = nlines;
    snew(dlgitem->u.statictext.lines, nlines);
    for (i = 0; (i < nlines); i++)
    {
        dlgitem->u.statictext.lines[i] = strdup(lines[i]);
    }
    dlgitem->WndProc = WndProcST;

    return dlgitem;
}
Пример #8
0
static t_sc *init_sc(t_x11 *x11,Window Parent,char *rgb)
{
  t_sc   *sc;
  Window w;
  int    i;

  snew(sc,1);
  InitWin(&sc->wd,0,0,400,300,1,"Show Colours");
  sc->wd.self=XCreateSimpleWindow(x11->disp,Parent,sc->wd.x,sc->wd.y,
				  sc->wd.width,sc->wd.height,
				  sc->wd.bwidth,WHITE,BLACK);
  x11->RegisterCallback(x11,sc->wd.self,Parent,scCallBack,sc);
  x11->SetInputMask(x11,sc->wd.self,ButtonPressMask | ExposureMask |
		    StructureNotifyMask);
  InitWin(&sc->but,0,0,sc->wd.width-2,XTextHeight(x11->font)+2,1,"Quit");
  sc->but.self=XCreateSimpleWindow(x11->disp,sc->wd.self,sc->but.x,sc->but.y,
				   sc->but.width,sc->but.height,
				   sc->but.bwidth,BLACK,BLACK);
  x11->RegisterCallback(x11,sc->but.self,sc->but.self,BCallBack,sc);
  x11->SetInputMask(x11,sc->but.self,ButtonPressMask | ExposureMask | 
		    StructureNotifyMask | EnterWindowMask |
		    LeaveWindowMask);

  read_col(x11,sc,rgb);
  fprintf(stderr,"%d colors found\n",sc->ncol);
  fprintf(stderr,"%6s%6s%6s\t\t%-20s\n","Red","Green","Blue","name");
  for(i=0; (i<sc->ncol); i++) {
    sc->col[i].wd.self=w=XCreateSimpleWindow(x11->disp,sc->wd.self,0,0,1,1,0,
					     BLACK,sc->col[i].xc.pixel);
    x11->RegisterCallback(x11,w,sc->wd.self,ColCallBack,&(sc->col[i]));
    x11->SetInputMask(x11,w,ButtonPressMask);
  }
  
  return sc;
}
Пример #9
0
t_dlgitem *CreateRadioButton(t_x11 *x11,
                             const char *szLab, gmx_bool bSet, t_id id,
                             t_id groupid,
                             int x0, int y0, int w, int h, int bw)
{
    t_dlgitem *dlgitem;

    dlgitem = newitem(x11);
    if (h == 0)
    {
        h = XTextHeight(x11->font)+OFFS_Y;
    }
    if (w == 0)
    {
        w = XTextWidth(x11->font, szLab, strlen(szLab))+OFFS_X+h;
    }
    InitWin(&(dlgitem->win), x0, y0, w, h, bw, szLab);
    dlgitem->ID                    = id;
    dlgitem->GroupID               = groupid;
    dlgitem->type                  = edlgRB;
    dlgitem->u.radiobutton.bSelect = bSet;
    dlgitem->WndProc               = WndProcRB;

    return dlgitem;
}
Пример #10
0
/*****************************
 *
 * Routines to create dialog items, all items have an id
 * which you can use to extract info. It is possible to have
 * multiple items with the same id but it may then not be possible
 * to extract information.
 * All routines take the position relative to the parent dlg
 * and the size and border width.
 * If the width and height are set to zero initially, they will
 * be calculated and set by the routine. With the dlgitem manipulation
 * routines listed below, the application can then move the items around
 * on the dlg box, and if wished resize them.
 *
 ****************************/
t_dlgitem *CreateButton(t_x11 *x11,
                        const char *szLab, gmx_bool bDef, t_id id, t_id groupid,
                        int x0, int y0, int w, int h, int bw)
{
    t_dlgitem *dlgitem;
    char      *lab;

    dlgitem = newitem(x11);
    if (h == 0)
    {
        h = XTextHeight(x11->font)+2*OFFS_Y;
    }
    if (w == 0)
    {
        w = XTextWidth(x11->font, szLab, strlen(szLab))+2*OFFS_X;
    }
    if (bDef)
    {
        snew(lab, strlen(szLab)+7); /* 6 for >> << and 1 for \0 */
        sprintf(lab, ">> %s <<", szLab);
    }
    else
    {
        lab = strdup(szLab);
    }
    InitWin(&(dlgitem->win), x0, y0, w, h, bw, szLab);
    sfree(lab);
    dlgitem->ID                = id;
    dlgitem->GroupID           = groupid;
    dlgitem->type              = edlgBN;
    dlgitem->u.button.bDefault = bDef;
    dlgitem->WndProc           = WndProcBN;

    return dlgitem;
}
Пример #11
0
static gmx_bool xrCallBack(struct t_x11 *x11, XEvent *event, Window w, void *data)
{
    t_app   *app;
    t_xrama *xr;
    char     buf[256];
    int      i;

    (void)XTextHeight(x11->font);
    app = (t_app *)data;
    xr  = app->xr;
    scx = app->xrwd.width/(2.0*M_PI);
    scy = app->xrwd.height/(2.0*M_PI);
    switch (event->type)
    {
        case Expose:
            XClearWindow(x11->disp, app->xrwd.self);
            XDrawLine(x11->disp, app->xrwd.self, x11->gc,
                      SX(0), SY(-M_PI)+1, SX(0), SY(M_PI)-1);
            XDrawLine(x11->disp, app->xrwd.self, x11->gc,
                      SX(-M_PI)+1, SY(0), SX(M_PI)-1, SY(0));
            TextInRect(x11, app->xrwd.self, "Phi", SX(M_PI)-50, SY(0)+4, 46, 20, eXRight, eYTop);
            TextInRect(x11, app->xrwd.self, "Psi", SX(0)+4, 4, 46, 20, eXLeft, eYTop);
            for (i = 0; (i < xr->npp); i++)
            {
                if (app->bShowGly || !app->bIsGly[i])
                {
                    plot_pp(x11, app->xrwd.self, &(xr->pp[i]), xr->dih);
                }
            }
            break;
        case ButtonPress:
            if (label_pp(x11, app->xrwd.self, xr->npp, xr->pp, xr->dih,
                         event->xbutton.x, event->xbutton.y))
            {
                ExposeWin(x11->disp, app->xrwd.self);
            }
            break;
        case ConfigureNotify:
            app->xrwd.width  = event->xconfigure.width;
            app->xrwd.height = event->xconfigure.height;
            break;
    }
    if (app->status == esGo)
    {
        if (!new_data(app->xr))
        {
            app->status = ebStop;
        }
        else
        {
            ExposeWin(x11->disp, app->xrwd.self);
            sprintf(buf, "Rama: t=%.2f", app->xr->t);
            XSetStandardProperties(x11->disp, app->wd.self, buf,
                                   "Rama", 0, NULL, 0, NULL);

        }
    }
    return FALSE;
}
Пример #12
0
static void plot_pp(t_x11 *x11,Window w,t_phipsi *pp,t_dih dih[])
{
  int x0,y0;
  int th=(XTextHeight(x11->font)+6)/2;
  
  x0=SX(dih[pp->iphi].ang);
  y0=SY(dih[pp->ipsi].ang);
  XFillRectangle(x11->disp,w,x11->gc,x0-1,y0-1,4,4);
  /* Draw Label ? */
  if (pp->bShow) 
    TextInRect(x11,w,pp->label,x0+6,y0-th,30,2*th,eXLeft,eYCenter);
}
Пример #13
0
void SpecialTextInRect(t_x11 *x11, XFontStruct *font, Drawable win,
                       const char *s, int x, int y, int width, int height,
                       eXPos eX, eYPos eY)
{
    int          fw, fh, x0, y0;
    XFontStruct *f;

    if (font)
    {
        XSetFont(x11->disp, x11->gc, font->fid);
        f = font;
    }
    else
    {
        f = x11->font;
    }

    fw = XTextWidth(f, s, strlen(s));
    fh = XTextHeight(f);
    switch (eX)
    {
        case eXLeft:
            x0 = x;
            break;
        case eXRight:
            x0 = x+width-fw;
            break;
        case eXCenter:
        default:
            x0 = x+(width-fw)/2;
            break;
    }
    switch (eY)
    {
        case eYTop:
            y0 = y+f->ascent;
            break;
        case eYBottom:
            y0 = y+height-f->descent;
            break;
        case eYCenter:
        default:
            y0 = y+(height-fh)/2+f->ascent;
            break;
    }
    XDrawString(x11->disp, win, x11->gc, x0, y0, s, strlen(s));
    if (font)
    {
        XSetFont(x11->disp, x11->gc, x11->font->fid);
    }
}
Пример #14
0
static void size_app(t_x11 *x11,t_app *app)
{
  int i,dx,th;

  th=XTextHeight(x11->font)+4;
  dx=app->wd.width/ebutNR;
  for(i=0; (i<ebutNR); i++) {
    app->but[i].width=dx-4;
    app->but[i].height=th+4;
    XMoveResizeWindow(x11->disp,app->but[i].self,i*dx+2,2,dx-4,th+4);
  }
  XMoveResizeWindow(x11->disp,app->xrwd.self,2,th+10,
		    app->wd.width-6,app->wd.height-th-10-4);
}
Пример #15
0
t_butbox *init_bbox(t_x11 *x11, Window Parent, Window SendTo,
                    int width, unsigned long fg, unsigned long bg)
{
    t_butbox          *bbox;
    static const char *lbut[IDBUTNR] = {
        "< X-Rotate >", "< Y-Rotate >", "< Z-Rotate >",
        "< X-Move >", "< Y-Move >", "< Z-Move >", "< Scale >",
    };
    int                i, y0, h0;
    t_mwbut           *but;
    Window             DrawOn;

    snew(bbox, 1);
    bbox->nbut = IDBUTNR;
    snew(bbox->b, bbox->nbut);
    y0 = XTextHeight(x11->font)+2*(AIR+BORDER);

    InitWin(&(bbox->wd), 0, 0, /*width,(y0+AIR)*IDBUTNR+AIR+2*BORDER,*/ 1, 1,
            1, "Button Box");
    width        -= 2*AIR+2*BORDER;
    bbox->wd.self = XCreateSimpleWindow(x11->disp, Parent,
                                        bbox->wd.x, bbox->wd.y, bbox->wd.width,
                                        bbox->wd.height, bbox->wd.bwidth,
                                        fg, bg);
    x11->RegisterCallback(x11, bbox->wd.self, Parent, BBCallBack, bbox);
    x11->SetInputMask(x11, bbox->wd.self, StructureNotifyMask);

    DrawOn = bbox->wd.self;
    h0     = AIR;
    for (i = 0; (i < bbox->nbut); i++)
    {
        but = &(bbox->b[i]);
        InitWin(&but->wd, AIR, h0, width, y0, 1, lbut[i]);
        h0            += y0+AIR;
        but->wd.Parent = SendTo;
        but->ID        = i;
        but->wd.self   = XCreateSimpleWindow(x11->disp, DrawOn,
                                             but->wd.x, but->wd.y,
                                             but->wd.width, but->wd.height,
                                             but->wd.bwidth, bg, bg);
        x11->RegisterCallback(x11, but->wd.self, DrawOn, ButtonCallBack, but);
        x11->SetInputMask(x11, but->wd.self, ExposureMask | ButtonPressMask |
                          EnterLeave);
    }
    return bbox;
}
Пример #16
0
static gmx_bool VBCallBack(t_x11 *x11, XEvent *event, Window w, void *data)
{
    t_butbox  *vbox;
    int        y0;

    if (event->type == Expose)
    {
        vbox = (t_butbox *)data;
        y0   = XTextHeight(x11->font)+2*AIR+1;
        XSetForeground(x11->disp, x11->gc, WHITE);
        XClearArea(x11->disp, vbox->wd.self, 1, 1, vbox->wd.width-2, y0-1, False);
        TextInRect(x11, vbox->wd.self, vbox->wd.text,
                   1, 1, vbox->wd.width-2, y0-1, eXLeft, eYCenter);
        XDrawLine(x11->disp, vbox->wd.self, x11->gc, 0, y0, vbox->wd.width, y0);
        XSetForeground(x11->disp, x11->gc, x11->fg);
    }
    return FALSE;
}
Пример #17
0
/*****************************
 *
 * Window Procedures and helpful functions
 *
 ****************************/
static void ShowCaret(t_x11 *x11, t_dlgitem *dlgitem)
{
  t_edittext *et;

  if (dlgitem->type == edlgET) {
    int x,y1,y2;
    
    et=&(dlgitem->u.edittext);
    x=XTextWidth(x11->font,dlgitem->win.text,strlen(dlgitem->win.text))+XCARET+
      XTextWidth(x11->font,(char*) &(et->buf[et->strbegin]),et->pos);
    y1=(dlgitem->win.height-XTextHeight(x11->font))/2;
    y2=(dlgitem->win.height-y1);
    y1--, y2++;
    XDrawLine(x11->disp,dlgitem->win.self,x11->gc,x-XCARET,y1,x+XCARET,y1);
    XDrawLine(x11->disp,dlgitem->win.self,x11->gc,x,y1,x,y2);
    XDrawLine(x11->disp,dlgitem->win.self,x11->gc,x-XCARET,y2,x+XCARET,y2);
  }
}
Пример #18
0
static gmx_bool scCallBack(struct t_x11 *x11, XEvent *event, Window w, void *data)
{
    t_sc  *sc;
    int    i;
    int    nx, ny, X, Y, Dx, Dy, th;
    float  x, y, dx, dy;

    th = XTextHeight(x11->font)+6;
    sc = (t_sc *)data;
    switch (event->type)
    {
    case ConfigureNotify:
        x = sc->wd.width = event->xconfigure.width;
        y = sc->wd.height = event->xconfigure.height-th;
        if ((x >= 100) && (y >= 100))
        {
#ifdef DEBUG
            printf("Disp: %x, But: %x, Font: %x x: %d, th: %d\n",
                   x11->disp, sc->but.self, x11->font, (int)x, th);
#endif
            XResizeWindow(x11->disp, sc->but.self, (int)x-4, th-4);
            nx = sqrt(sc->ncol);
            ny = sc->ncol/nx;
            while (nx*ny < sc->ncol)
            {
                ny++;
            }
            dx = ((float)x) / nx;
            dy = ((float)y) / ny;
            for (i = 0; (i < sc->ncol); i++)
            {
                X  = x = (i%nx) * dx;
                Y  = y = (i/nx) * dy;
                Dx = (int)(x+dx)-X;
                Dy = (int)(y+dy)-Y;
                XMoveWindow(x11->disp, sc->col[i].wd.self, X, th+Y);
                XResizeWindow(x11->disp, sc->col[i].wd.self, Dx, Dy);
            }
        }
        break;
    }
    return FALSE;
}
Пример #19
0
void move_man(t_x11 *x11, t_manager *man, int width, int height)
{
    int x0, y0, mw, mh, hb;
    int th;

#ifdef DEBUG
    std::fprintf(stderr, "Move manager %dx%d\n", width, height);
#endif
    man->wd.width  = width;
    man->wd.height = height;

    /* Move all subwindows, resize only Mol window */
    x0 = width-EWIDTH-AIR-4*BORDER;           /* Starting of ewin etc. */
    y0 = AIR;

    /* Mol Window */
    mw = x0-2*AIR-4*BORDER;
    mh = height-y0-AIR-2*BORDER;
    XMoveResizeWindow(x11->disp, man->molw->wd.self, AIR, y0, mw, mh);

    /* Title Window */
    th = XTextHeight(x11->font);
    XMoveResizeWindow(x11->disp, man->title.self, 0, 0, mw, th+AIR);

    /* Legend Window */
    XMoveResizeWindow(x11->disp, man->legw->wd.self, x0, y0, EWIDTH, LEGHEIGHT);
    y0 += LEGHEIGHT+AIR+2*BORDER;

    if (y0 > height)
    {
        std::printf("Error: Windows falling out of main window!\n");
    }

    /* Button Box */
    hb = height-y0-AIR-2*BORDER;
    XMoveResizeWindow(x11->disp, man->bbox->wd.self, x0, y0, EWIDTH, hb);

    /* Video Box */
    x0 = (mw-man->vbox->wd.width)/2;
    y0 = (mh-2-AIR-man->vbox->wd.height);
    XMoveWindow(x11->disp, man->vbox->wd.self, x0, y0);
}
Пример #20
0
t_pulldown *init_pd(t_x11 *x11, Window Parent, int width,
                    unsigned long fg, unsigned long bg,
                    int nmenu, int *nsub, t_mentry *ent[], const char **title)
{
    t_pulldown *pd;
    int         i;

    snew(pd, 1);
    pd->title = title;
    pd->nmenu = nmenu;
    pd->nsel  = -1;
    snew(pd->m, nmenu);
    snew(pd->xpos, nmenu+1);
    pd->xpos[0] = 5;
    for (i = 1; (i <= nmenu); i++)
    {
        pd->xpos[i] = 20+pd->xpos[i-1]+
            XTextWidth(x11->font, title[i-1], std::strlen(title[i-1]));
    }
    if (pd->xpos[nmenu] > width)
    {
        std::printf("Menu too wide\n");
    }

    InitWin(&(pd->wd), 0, 0, width, XTextHeight(x11->font)+2, 0, "PullDown");
    pd->wd.self = XCreateSimpleWindow(x11->disp, Parent,
                                      pd->wd.x, pd->wd.y,
                                      pd->wd.width, pd->wd.height,
                                      pd->wd.bwidth, fg, bg);
    x11->RegisterCallback(x11, pd->wd.self, Parent, PDCallBack, pd);
    x11->SetInputMask(x11, pd->wd.self, ExposureMask | ButtonPressMask |
                      OwnerGrabButtonMask | ButtonReleaseMask);
    XMapWindow(x11->disp, pd->wd.self);

    for (i = 0; (i < nmenu); i++)
    {
        pd->m[i] = init_menu(x11, Parent, fg, bg, nsub[i], ent[i], 1);
    }

    return pd;
}
Пример #21
0
static t_app *init_app(t_x11 *x11, int argc, char *argv[])
{
    static const char *but_nm[ebutNR] = { "Quit", "Start", "Stop", "Rewind", "Toggle Gly" };
    XSizeHints         hints;
    Pixmap             pm;
    int                th;
    t_app             *app;
    t_windata         *wd;
    int                i, dx;

    snew(app, 1);
    th = XTextHeight(x11->font)+4;
    InitWin(&(app->wd), 0, 0, MAXDEG+6, MAXDEG+6+th+6, 0, "Ramachandran Movie");
    dx           = app->wd.width/ebutNR;
    app->wd.self = XCreateSimpleWindow(x11->disp, x11->root, app->wd.x, app->wd.y,
                                       app->wd.width, app->wd.height,
                                       app->wd.bwidth, x11->fg, x11->bg);
    x11->RegisterCallback(x11, app->wd.self, x11->root, mainCallBack, app);
    x11->SetInputMask(x11, app->wd.self, StructureNotifyMask);
    hints.flags = 0;
    pm          = XCreatePixmapFromBitmapData(x11->disp, x11->root, (char *)rama_bits,
                                              rama_width, rama_height, WHITE, BLACK, 1);
    XSetStandardProperties(x11->disp, app->wd.self, app->wd.text,
                           "Rama", pm, argv, argc, &hints);
    x11->RegisterCallback(x11, app->wd.self, x11->root, appCallBack, app);
    x11->SetInputMask(x11, app->wd.self, ButtonPressMask | ExposureMask |
                      StructureNotifyMask);

    app->xr = init_xrama(x11, app->wd.self, th+6, app);
    for (i = 0; (i < ebutNR); i++)
    {
        wd = &(app->but[i]);
        InitWin(wd, i*dx+2, 2, dx-4, th, 1, but_nm[i]);
        wd->self = XCreateSimpleWindow(x11->disp, app->wd.self,
                                       wd->x, wd->y, wd->width, wd->height,
                                       wd->bwidth, x11->fg, x11->bg);
        x11->RegisterCallback(x11, wd->self, app->wd.self, appCallBack, app);
        x11->SetInputMask(x11, wd->self, ButtonPressMask | ExposureMask);
    }
    return app;
}
Пример #22
0
static void move_gmx(t_x11 *x11, t_gmx *gmx, int width, int height,
                     bool bSizePD)
{
    int y0, wl, hl;
#ifdef DEBUG
    fprintf(stderr, "Move gmx %dx%d\n", width, height);
#endif
    y0 = XTextHeight(x11->font);
    /* Resize PD-Menu */
    if (bSizePD)
    {
        XResizeWindow(x11->disp, gmx->pd->wd.self, width, y0);
    }

    XMoveWindow(x11->disp, gmx->man->wd.self, 0, y0+1);
    XResizeWindow(x11->disp, gmx->man->wd.self, width, height-y0-1);

    wl = gmx->logo->wd.width;
    hl = gmx->logo->wd.height;
    XMoveWindow(x11->disp, gmx->logo->wd.self, (width-wl)/2, (height-y0-hl)/2);
}
Пример #23
0
t_butbox *init_vbox(t_x11 *x11, Window Parent, Window SendTo, unsigned long fg, unsigned long bg)
{
    Pixmap             pm;
    unsigned char     *data;
    t_butbox          *vb;
    int                i, ID, x, y0;

    snew(vb, 1);
    vb->nbut = IDNR-IDBUTNR-1;
    snew(vb->b, vb->nbut);

    /* VBox holder */
    y0 = XTextHeight(x11->font)+2*AIR+2;
    InitWin(&vb->wd, 0, 0, vb->nbut*(play_width+AIR)+AIR,
            y0+play_height+2*AIR, 1, "VCR - Control");
    vb->wd.self = XCreateSimpleWindow(x11->disp, Parent,
                                      vb->wd.x, vb->wd.y, vb->wd.width, vb->wd.height,
                                      vb->wd.bwidth, WHITE, BLACK);
    x11->RegisterCallback(x11, vb->wd.self, Parent, VBCallBack, vb);
    x11->SetInputMask(x11, vb->wd.self, ExposureMask);

    x = AIR;
    (void)CWBackPixmap;
    for (i = 0; (i < vb->nbut); i++)
    {
        ID = IDBUTNR+i+1;
        switch (ID)
        {
            case IDREWIND:
                data = &(rewind_bits[0]);
                break;
            case IDSTEP:
                data = play_bits;
                break;
            case IDFF:
                data = ff_bits;
                break;
            case IDSTOP_ANI:
                data = stop_ani_bits;
                break;
            default:
                fprintf(stderr, "Invalid bitmap in init_vbox %d\n", ID);
                exit(1);
        }
        /* Rely on the fact that all bitmaps are equal size */
        pm = XCreatePixmapFromBitmapData(x11->disp, x11->root,
                                         (char *)data, play_width, play_height,
                                         BLACK, LIGHTGREY, x11->depth);
        vb->b[i].ID        = ID;
        vb->b[i].wd.Parent = SendTo;
        vb->b[i].wd.self   =
            XCreateSimpleWindow(x11->disp, vb->wd.self,
                                x, y0+AIR, play_width, play_height, 0, WHITE, BLACK);
        XSetWindowBackgroundPixmap(x11->disp, vb->b[i].wd.self, pm);

        x11->RegisterCallback(x11, vb->b[i].wd.self, vb->wd.self,
                              ButtonCallBack, &(vb->b[i]));
        x11->SetInputMask(x11, vb->b[i].wd.self,
                          ButtonPressMask | StructureNotifyMask);
        x += play_width+AIR;
    }

    return vb;
}
Пример #24
0
void DrawLoad(t_x11 *x11,t_windata *Win,int nloads,int *loadinfo)
{
  static char *Strings[] = { "Unbalance","Single Node","Your Ad Here ?"};
  int  i,y0,bwidth,boff,bar,bmax,bmin,ym,yh;
  int  *lb;
  real bav,bscale;
  char maxstr[6];

  return;
  
  XClearWindow(x11->disp, Win->self);
  y0=XTextHeight(x11->font)+AIR;
  yh=(Win->height-y0)/2;
  ym=y0+yh;
  XSetForeground(x11->disp,x11->gc,WHITE);
  XDrawLine(x11->disp,Win->self,x11->gc,0,y0,Win->width,y0);
    
  if (nloads >= 2) {
    TextInRect(x11,Win->self,Strings[0],AIR,0,Win->width-2*AIR,y0,
	       eXLeft,eYCenter);
    if (loadinfo[0] == 0) {
      nloads--;
      lb=&loadinfo[1];
    }
    else {
      lb=loadinfo;
      if (loadinfo[nloads-1] == 0) 
	nloads--;
    }
    bwidth = (Win->width) / nloads;
    boff   = (Win->width % nloads)/2;
    bav    = 0.0; 
    
    bmax=bmin=lb[0];
    
    for (i=1; (i<nloads); i++) {
      bmax = max (bmax,lb[i]);
      bmin = min (bmin,lb[i]);
      bav += lb[i];
    }
    bav/=nloads;
    bscale = (yh-2)/max(fabs(bmax-bav),fabs(bav-bmin));
    sprintf(maxstr,"(%d%%)",(int)(100.0*(bmax-bav)/bav));
    TextInRect(x11,Win->self,maxstr,AIR,0,Win->width-2*AIR,y0,
	       eXRight,eYCenter);

    XDrawLine(x11->disp,Win->self,x11->gc,0,ym,Win->width,ym);
    if (bmax-bmin) {
      for(i=0; i<nloads; i++) {
	bar=(lb[i]-bav)*bscale;
	if (bar != 0) {
	  if (bar > 0)
	    XFillRectangle(x11->disp,Win->self,x11->gc,
			   (i*bwidth)+boff+1,ym-bar+1,bwidth-2,bar);
	  else
	    XFillRectangle(x11->disp,Win->self,x11->gc,
			   (i*bwidth)+boff+1,ym,bwidth-2,-bar);
	}
      }
      
    }
  }
  else {
    TextInRect(x11,Win->self,Strings[1],AIR,0,Win->width,y0,eXLeft,eYCenter);
    TextInRect(x11,Win->self,Strings[2],AIR,y0,Win->width,
	       Win->height-y0,eXLeft,eYCenter);
  }
  XSetForeground(x11->disp,x11->gc,x11->fg);
}
Пример #25
0
t_menu *init_menu(t_x11 *x11,Window Parent,unsigned long fg,unsigned long bg,
		  int nent,t_mentry ent[],int ncol)
{
  int       i,mlen,mht,area,ht;
  int       j,k,l;
  int       frows,fcol;
  t_menu    *m;
  t_child   *kid;
  t_windata *w;

  snew(m,1);
  m->nitem=nent;
  m->Parent=Parent;

  /* Calculate dimensions of the menu */
  mlen=0;
  for(i=0; (i<nent); i++)
    mlen=max(mlen,XTextWidth(x11->font,ent[i].str,strlen(ent[i].str)));
  mht=XTextHeight(x11->font);
  /* Now we have the biggest single box, add a border of 2 pixels */
  mlen+=20; /* We need extra space at the left for checkmarks */
  mht+=4;
  /* Calculate the area of the menu */
  area=mlen*mht;
  ht=sqrt(area);
  /* No the number of rows per column, only beyond 8 rows */
  if (ncol == 0) {
    if (nent > 8)
      frows=(1+ht/mht);
    else
      frows=nent;
    fcol=nent/frows;
  }
  else {
    fcol=ncol;
    frows=nent/ncol;
    if (nent % ncol)
      frows++;
  }
  InitWin(&(m->wd),10,10,fcol*mlen,frows*mht,1,"Menu");
  snew(m->item,nent);
  m->wd.self=XCreateSimpleWindow(x11->disp,Parent,
				 m->wd.x, m->wd.y,
				 m->wd.width,m->wd.height,
				 m->wd.bwidth,fg,bg);
  x11->RegisterCallback(x11,m->wd.self,Parent,MenuCallBack,m);
  x11->SetInputMask(x11,m->wd.self,ExposureMask | 
		    OwnerGrabButtonMask | ButtonReleaseMask);

  for(j=l=0; (j<fcol); j++)
    for(k=0; (k<frows) && (l<nent); k++,l++) {
      kid=&(m->item[l]);
      kid->m=&(ent[l]);
      kid->Parent=Parent; 
      w=&(kid->wd);
      InitWin(w,j*mlen,k*mht,mlen-2,mht-2,1,NULL);
      w->self=XCreateSimpleWindow(x11->disp,m->wd.self,
				  w->x,w->y,w->width,w->height,
				  w->bwidth,bg,bg);
      x11->RegisterCallback(x11,w->self,m->wd.self,
			    ChildCallBack,kid);
      x11->SetInputMask(x11,w->self,
			ButtonPressMask | ButtonReleaseMask | 
			OwnerGrabButtonMask | ExposureMask | 
			EnterWindowMask | LeaveWindowMask);
    }

  return m;
}