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); } } }
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; }