static int _GroupSBSizes(struct groupdlg *grp, Group *group, int lpos, int depth) { int i, len; group->lpos = lpos++; len = 5+8*depth+ grp->as + 5 + GDrawGetText8Width(grp->v,group->name,-1); if ( group->glyphs!=NULL ) len += 5 + GDrawGetText8Width(grp->v,group->glyphs,-1); if ( len > grp->maxl ) grp->maxl = len; if ( group->open ) { for ( i=0; i< group->kid_cnt; ++i ) lpos = _GroupSBSizes(grp,group->kids[i],lpos,depth+1); } return( lpos ); }
static int warningsv_e_h(GWindow gw, GEvent *event) { int i; extern GBox _ggadget_Default_Box; if (( event->type==et_mouseup || event->type==et_mousedown ) && (event->u.mouse.button>=4 && event->u.mouse.button<=7) ) { return( GGadgetDispatchEvent(errdata.vsb,event)); } switch ( event->type ) { case et_expose: /*GDrawFillRect(gw,&event->u.expose.rect,GDrawGetDefaultBackground(NULL));*/ GDrawSetFont(gw,errdata.font); for ( i=0; i<errdata.linecnt && i+errdata.offtop<errdata.cnt; ++i ) { int xs, xe; int s_l = errdata.start_l, s_c = errdata.start_c, e_l = errdata.end_l, e_c = errdata.end_c; GRect r; if ( s_l>e_l ) { s_l = e_l; s_c = e_c; e_l = errdata.start_l; e_c = errdata.start_c; } if ( GDrawHasCairo(gw)&gc_pango ) GDrawLayoutInit(gw,errdata.errlines[i+errdata.offtop],-1,NULL); if ( i+errdata.offtop >= s_l && i+errdata.offtop <= e_l ) { if ( i+errdata.offtop > s_l ) xs = 0; else if ( GDrawHasCairo(gw)&gc_pango ) { GRect pos; GDrawLayoutIndexToPos(gw,s_c,&pos); xs = pos.x+3; } else xs = GDrawGetText8Width(gw,errdata.errlines[i+errdata.offtop],s_c,NULL); if ( i+errdata.offtop < e_l ) xe = 3000; else if ( GDrawHasCairo(gw)&gc_pango ) { GRect pos; GDrawLayoutIndexToPos(gw,s_c,&pos); xe = pos.x+pos.width+3; } else xe = GDrawGetText8Width(gw,errdata.errlines[i+errdata.offtop],e_c,NULL); r.x = xs+3; r.width = xe-xs; r.y = i*errdata.fh; r.height = errdata.fh; GDrawFillRect(gw,&r,ACTIVE_BORDER); } if ( GDrawHasCairo(gw)&gc_pango ) GDrawLayoutDraw(gw,3,i*errdata.fh+errdata.as,MAIN_FOREGROUND); else GDrawDrawBiText8(gw,3,i*errdata.fh+errdata.as,errdata.errlines[i+errdata.offtop],-1,NULL,MAIN_FOREGROUND); } break; case et_char: return( ErrChar(event)); break; case et_mousedown: if ( event->u.mouse.button==3 ) { warnpopupmenu[1].ti.disabled = errdata.start_l == -1; warnpopupmenu[3].ti.disabled = errdata.cnt == 0; GMenuCreatePopupMenu(gw,event, warnpopupmenu); } else { if ( errdata.down ) return( true ); MouseToPos(event,&errdata.start_l,&errdata.start_c); errdata.down = true; } case et_mousemove: case et_mouseup: if ( !errdata.down ) return( true ); MouseToPos(event,&errdata.end_l,&errdata.end_c); GDrawRequestExpose(gw,NULL,false); if ( event->type==et_mouseup ) { errdata.down = false; if ( errdata.start_l == errdata.end_l && errdata.start_c == errdata.end_c ) { errdata.start_l = errdata.end_l = -1; } else { GDrawGrabSelection(gw,sn_primary); GDrawAddSelectionType(gw,sn_primary,"UTF8_STRING",&errdata,1, sizeof(char), genutf8data,noop); GDrawAddSelectionType(gw,sn_primary,"STRING",&errdata,1, sizeof(char), genutf8data,noop); } } break; case et_selclear: errdata.start_l = errdata.end_l = -1; GDrawRequestExpose(gw,NULL,false); break; case et_timer: break; case et_focus: break; } return( true ); }