Пример #1
0
static void AddDlgItemGroups(t_dlg *dlg, int gridx, int gridy, 
			     t_dlgitemlist **grid, bool bAutoPosition)
{
  t_dlgitemlist *item;
  int x1,y1,w1,h1;
  int x,y,dw,dh;
  float w,h;
  
  w=h=0;
  for(x=0; (x<gridx); x++)
    for(y=0; (y<gridy); y++) {
      item=&(grid[x][y]);
      if (item->nitem) {
	if (!item->list) {
	  printf("Error: empty list with non-empty nitem (%d)\n",item->nitem);
	  printf("       at grid point: %d,%d\n",x,y);
	  printf("       with size: %dx%d\n",item->w,item->h);
	  exit(1);
	}
	else {
	  AddDlgItems(dlg,item->nitem,item->list);
	  dw=item->w;
	  dh=item->h;
	  w=max(w,((float) QueryDlgItemW(dlg,item->list[0]->ID))/dw);
	  h=max(h,((float) QueryDlgItemH(dlg,item->list[0]->ID))/dh);
	}
      }
    }
  w1=gridx*w;
  h1=gridy*h;
  SetDlgSize(dlg,w1,h1,bAutoPosition);
#ifdef DEBUG
  printf("Dimensions of grid cell: %8.3f x %8.3f\n",w,h);
  printf("Dimensions of window:    %d x %d\n",w1,h1);
#endif
  
  for(x=0; (x<gridx); x++) 
    for(y=0; (y<gridy); y++) {
      item=&(grid[x][y]);
      if (item->nitem) {
	x1=x*w;
	y1=y*h;
	w1=item->w*w;
	h1=item->h*h;
#ifdef DEBUG
	printf("New size: %d x %d at %d, %d\n",w1,h1,x1,y1);
#endif
	SetDlgItemSize(dlg,item->list[0]->ID,w1,h1);
	SetDlgItemPos(dlg,item->list[0]->ID,x1,y1);
      }
    }
}
Пример #2
0
bool SetDlgItemSize(t_dlg *dlg, t_id id, int w, int h)
{
    t_dlgitem *dlgitem;
#ifdef DEBUG
    int        old_w, old_h;
#endif

    if ((dlgitem = FindItem(dlg, id)) != NULL)
    {
#ifdef DEBUG
        old_w = dlgitem->win.width;
        old_h = dlgitem->win.height;
#endif
        if (w)
        {
            dlgitem->win.width = w;
        }
        if (h)
        {
            dlgitem->win.height = h;
        }
#ifdef DEBUG
        std::fprintf(dlg->x11->console,
                     "Size window from: %dx%d to %dx%d\n", old_w, old_h,
                     dlgitem->win.width, dlgitem->win.height);
        dlg->x11->Flush(dlg->x11);
#endif
        if (dlgitem->win.self)
        {
            XResizeWindow(dlg->x11->disp, dlgitem->win.self, dlgitem->win.width,
                          dlgitem->win.height);
        }
        if ((w) && (dlgitem->type == edlgGB))
        {
            int  i;
            t_id gid = dlgitem->GroupID;
            t_id id  = dlgitem->ID;
            for (i = 0; (i < dlg->nitem); i++)
            {
                t_dlgitem *child = dlg->dlgitem[i];
                if ((child->GroupID == gid) && (child->ID != id))
                {
                    SetDlgItemSize(dlg, child->ID, w-4*OFFS_X, 0);
                }
            }
        }
        return true;
    }
    return false;
}