void TransformDlgCreate(void *data,void (*transfunc)(void *,real *,int,BVTFunc *,enum fvtrans_flags), int (*getorigin)(void *,BasePoint *,int), enum transdlg_flags flags, enum cvtools cvt) { GRect pos; GWindow gw; GWindowAttrs wattrs; GGadgetCreateData gcd[12+TCnt*25], boxes[4], *subarray[TCnt*27], *array[2*(TCnt+8)+4], *buttons[13], *origarray[4]; GTextInfo label[9+TCnt*24]; static TransData td; int i, y, gci, subai, ai; int32 len; GGadget *orig; BasePoint junk; GTextInfo **ti; static int done = false; if ( !done ) { int i; for ( i=0; transformtypes[i].text!=NULL; ++i ) transformtypes[i].text = (unichar_t *) _((char *) transformtypes[i].text); for ( i=0; origin[i].text!=NULL; ++i ) origin[i].text = (unichar_t *) _((char *) origin[i].text); done = true; } td.userdata = data; td.transfunc = transfunc; td.getorigin = getorigin; td.done = false; if ( td.gw==NULL ) { memset(&wattrs,0,sizeof(wattrs)); wattrs.mask = wam_events|wam_cursor|wam_utf8_wtitle|wam_undercursor|wam_isdlg|wam_restrict; wattrs.event_masks = ~(1<<et_charup); wattrs.restrict_input_to_me = 1; wattrs.undercursor = 1; wattrs.cursor = ct_pointer; wattrs.utf8_window_title = _("Transform"); wattrs.is_dlg = true; pos.x = pos.y = 0; pos.width = GGadgetScale(GDrawPointsToPixels(NULL,TBlock_Width)); pos.height = GDrawPointsToPixels(NULL,TBlock_Top+TCnt*TBlock_Height+110); td.gw = gw = GDrawCreateTopWindow(NULL,&pos,trans_e_h,&td,&wattrs); memset(&label,0,sizeof(label)); memset(&gcd,0,sizeof(gcd)); memset(&boxes,0,sizeof(boxes)); label[0].text = (unichar_t *) _("Origin:"); label[0].text_is_1byte = true; label[0].text_in_resource = true; gcd[0].gd.label = &label[0]; gcd[0].gd.pos.x = 5; gcd[0].gd.pos.y = 4; gcd[0].gd.flags = (getorigin==NULL) ? gg_visible : (gg_visible | gg_enabled); gcd[0].creator = GLabelCreate; gcd[1].gd.pos.x = 5; gcd[1].gd.pos.y = 4; gcd[1].gd.flags = (getorigin==NULL) ? gg_visible : (gg_visible | gg_enabled); gcd[1].gd.label = &origin[1]; gcd[1].gd.u.list = origin; gcd[1].gd.cid = CID_Origin; gcd[1].creator = GListButtonCreate; origin[1].selected = true; origarray[0] = &gcd[0]; origarray[1] = &gcd[1]; origarray[2] = GCD_Glue; origarray[3] = NULL; boxes[3].gd.flags = gg_enabled|gg_visible; boxes[3].gd.u.boxelements = origarray; boxes[3].creator = GHBoxCreate; array[0] = &boxes[3]; array[1] = NULL; gci = 2; subai = 0; ai = 2; for ( i=0; i<TCnt; ++i ) { array[ai++] = MakeTransBlock(&td,i,gcd+gci,label+gci,subarray+subai); array[ai++] = NULL; gci += 23; subai += 27; } y = TBlock_Top+TCnt*TBlock_Height+4; gcd[gci].gd.pos.x = 10; gcd[gci].gd.pos.y = y; gcd[gci].gd.flags = (flags&tdf_enableback) ? (gg_visible | gg_enabled) : gg_visible; label[gci].text = (unichar_t *) _("Transform _All Layers"); label[gci].text_is_1byte = true; label[gci].text_in_resource = true; gcd[gci].gd.label = &label[gci]; gcd[gci].gd.cid = CID_AllLayers; gcd[gci++].creator = GCheckBoxCreate; array[ai++] = &gcd[gci-1]; array[ai++] = NULL; y += 16; gcd[gci].gd.pos.x = 10; gcd[gci].gd.pos.y = y; gcd[gci].gd.flags = (flags&tdf_enableback) ? (gg_visible | gg_enabled) : gg_visible; label[gci].text = (unichar_t *) _("Transform _Guide Layer Too"); label[gci].text_is_1byte = true; label[gci].text_in_resource = true; gcd[gci].gd.label = &label[gci]; gcd[gci].gd.cid = CID_DoGrid; gcd[gci++].creator = GCheckBoxCreate; array[ai++] = &gcd[gci-1]; array[ai++] = NULL; y += 16; gcd[gci].gd.pos.x = 10; gcd[gci].gd.pos.y = y; gcd[gci].gd.flags = (flags&tdf_enableback) ? (gg_visible | gg_enabled | gg_cb_on) : gg_visible; label[gci].text = (unichar_t *) _("Transform _Width Too"); label[gci].text_is_1byte = true; label[gci].text_in_resource = true; gcd[gci].gd.label = &label[gci]; gcd[gci].gd.cid = CID_DoWidth; gcd[gci++].creator = GCheckBoxCreate; array[ai++] = &gcd[gci-1]; array[ai++] = NULL; y += 16; gcd[gci].gd.pos.x = 10; gcd[gci].gd.pos.y = y; gcd[gci].gd.flags = gg_visible | (flags&tdf_enablekerns ? gg_enabled : 0) | (flags&tdf_defaultkerns ? gg_cb_on : 0); label[gci].text = (unichar_t *) _("Transform kerning _classes too"); label[gci].text_is_1byte = true; label[gci].text_in_resource = true; gcd[gci].gd.label = &label[gci]; gcd[gci].gd.cid = CID_DoKerns; gcd[gci++].creator = GCheckBoxCreate; array[ai++] = &gcd[gci-1]; array[ai++] = NULL; y += 16; gcd[gci].gd.pos.x = 10; gcd[gci].gd.pos.y = y; gcd[gci].gd.flags = gg_visible | (flags&tdf_enableback ? gg_enabled : 0) | (flags&tdf_enablekerns ? gg_cb_on : 0); label[gci].text = (unichar_t *) _("Transform simple positioning features & _kern pairs"); label[gci].text_is_1byte = true; label[gci].text_in_resource = true; gcd[gci].gd.label = &label[gci]; gcd[gci].gd.cid = CID_DoSimplePos; gcd[gci++].creator = GCheckBoxCreate; array[ai++] = &gcd[gci-1]; array[ai++] = NULL; y += 16; gcd[gci].gd.pos.x = 10; gcd[gci].gd.pos.y = y; gcd[gci].gd.flags = gg_visible | gg_enabled; label[gci].text = (unichar_t *) _("Round To _Int"); label[gci].text_is_1byte = true; label[gci].text_in_resource = true; gcd[gci].gd.label = &label[gci]; gcd[gci].gd.cid = CID_Round2Int; gcd[gci++].creator = GCheckBoxCreate; array[ai++] = &gcd[gci-1]; array[ai++] = NULL; y += 24; array[ai++] = GCD_Glue; array[ai++] = NULL; gcd[gci].gd.pos.x = 30-3; gcd[gci].gd.pos.y = y; gcd[gci].gd.flags = gg_visible | gg_enabled | gg_but_default; label[gci].text = (unichar_t *) _("_OK"); label[gci].text_is_1byte = true; label[gci].text_in_resource = true; gcd[gci].gd.mnemonic = 'O'; gcd[gci].gd.label = &label[gci]; gcd[gci].gd.handle_controlevent = Trans_OK; gcd[gci++].creator = GButtonCreate; buttons[0] = GCD_Glue; buttons[1] = &gcd[gci-1]; buttons[2] = GCD_Glue; buttons[3] = GCD_Glue; gcd[gci].gd.flags = gg_visible | gg_enabled; label[gci].text = (unichar_t *) _("_Apply"); label[gci].text_is_1byte = true; label[gci].text_in_resource = true; gcd[gci].gd.label = &label[gci]; gcd[gci].gd.handle_controlevent = Trans_OK; gcd[gci].gd.cid = CID_Apply; gcd[gci++].creator = GButtonCreate; buttons[4] = GCD_Glue; buttons[5] = &gcd[gci-1]; buttons[6] = GCD_Glue; buttons[7] = GCD_Glue; gcd[gci].gd.pos.x = -30; gcd[gci].gd.pos.y = gcd[gci-1].gd.pos.y+3; gcd[gci].gd.flags = gg_visible | gg_enabled | gg_but_cancel; label[gci].text = (unichar_t *) _("_Cancel"); label[gci].text_is_1byte = true; label[gci].text_in_resource = true; gcd[gci].gd.label = &label[gci]; gcd[gci].gd.mnemonic = 'C'; gcd[gci].gd.handle_controlevent = Trans_Cancel; gcd[gci++].creator = GButtonCreate; buttons[8] = GCD_Glue; buttons[9] = &gcd[gci-1]; buttons[10] = GCD_Glue; buttons[11] = NULL; boxes[2].gd.flags = gg_enabled|gg_visible; boxes[2].gd.u.boxelements = buttons; boxes[2].creator = GHBoxCreate; array[ai++] = &boxes[2]; array[ai++] = NULL; array[ai++] = NULL; boxes[0].gd.pos.x = boxes[0].gd.pos.y = 2; boxes[0].gd.flags = gg_enabled|gg_visible; boxes[0].gd.u.boxelements = array; boxes[0].creator = GHVGroupCreate; GGadgetsCreate(gw,boxes); GHVBoxSetExpandableRow(boxes[0].ret,gb_expandglue); GHVBoxSetExpandableCol(boxes[2].ret,gb_expandgluesame); GHVBoxSetExpandableCol(boxes[3].ret,gb_expandglue); for ( i=0; i<TCnt; ++i ) { GHVBoxSetPadding( GWidgetGetControl(gw,CID_ClockBox+i*TBlock_CIDOffset),0,0); GHVBoxSetPadding( GWidgetGetControl(gw,CID_HVBox+i*TBlock_CIDOffset),0,0); GHVBoxSetExpandableCol( GWidgetGetControl(gw,CID_HBox+i*TBlock_CIDOffset),gb_expandglue); } GGadgetSelectOneListItem( GWidgetGetControl(gw,CID_Type), 1); GWidgetToDesiredSize(gw); } else GDrawSetTransientFor(td.gw,(GWindow) -1); gw = td.gw; GGadgetSetEnabled( GWidgetGetControl(gw,CID_AllLayers), flags&tdf_enableback); GGadgetSetEnabled( GWidgetGetControl(gw,CID_DoGrid), flags&tdf_enableback); GGadgetSetEnabled( GWidgetGetControl(gw,CID_DoSimplePos), flags&tdf_enableback); GGadgetSetEnabled( GWidgetGetControl(gw,CID_DoKerns), flags&tdf_enablekerns); GGadgetSetVisible( GWidgetGetControl(gw,CID_Apply), flags&tdf_addapply); if ( !(flags&tdf_enableback) ) { GGadgetSetChecked( GWidgetGetControl(gw,CID_AllLayers), false ); GGadgetSetChecked( GWidgetGetControl(gw,CID_DoGrid), false ); } GGadgetSetChecked( GWidgetGetControl(gw,CID_DoKerns), !(flags&tdf_enablekerns)?false:(flags&tdf_defaultkerns)?true:false ); /* Yes, this is set differently from the previous, that's intended */ GGadgetSetChecked( GWidgetGetControl(gw,CID_DoSimplePos), !(flags&tdf_enableback)?false:(flags&tdf_enablekerns)?true:false ); orig = GWidgetGetControl(gw,CID_Origin); GGadgetSetEnabled( orig, getorigin!=NULL ); ti = GGadgetGetList(orig,&len); for ( i=0; i<len; ++i ) { ti[i]->disabled = !getorigin(data,&junk,i); if ( ti[i]->disabled && ti[i]->selected ) { ti[i]->selected = false; ti[0]->selected = true; GGadgetSetTitle(orig,ti[0]->text); } } if ( cvt!=cvt_none ) { int index = cvt == cvt_scale ? 4 : cvt == cvt_flip ? 5 : cvt == cvt_rotate ? 2 : cvt == cvt_skew ? 6 : /* 3d rot*/ 7 ; GGadget *firstoption = GWidgetGetControl(td.gw,CID_Type); GEvent dummy; GGadgetSelectOneListItem( firstoption, index ); memset(&dummy,0,sizeof(dummy)); dummy.type = et_controlevent; dummy.u.control.subtype = et_listselected; Trans_TypeChange( firstoption, &dummy ); } for ( i=0; i<TCnt; ++i ) { int index = GGadgetGetFirstListSelectedItem(GWidgetGetControl(td.gw,CID_Type+i*TBlock_CIDOffset)); if ( selcid[index]!=0 ) { GGadget *tf = GWidgetGetControl(td.gw,selcid[index]+i*TBlock_CIDOffset); GWidgetIndicateFocusGadget(tf); GTextFieldSelect(tf,0,-1); break; } } GWidgetHidePalettes(); GDrawSetVisible(gw,true); while ( !td.done ) GDrawProcessOneEvent(NULL); GDrawSetVisible(gw,false); }
void SFShowKernPairs(SplineFont *sf,SplineChar *sc,AnchorClass *ac,int layer) { KPData kpd; GRect pos; GWindow gw; GWindowAttrs wattrs; GGadgetCreateData gcd[9], boxes[6], *hvarray[3][3], *harray[3], *barray[10], *varray[5]; GTextInfo label[9]; FontRequest rq; int as, ds, ld,i; static int done=false; static GFont *font=NULL; memset(&kpd,0,sizeof(kpd)); kpd.sf = sf; kpd.sc = sc; kpd.ac = ac; kpd.layer = layer; kpd.first = true; kpd.last_index = kpd.selected = -1; if ( ac==NULL ) KPBuildKernList(&kpd); else KPBuildAnchorList(&kpd); if ( kpd.kcnt==0 ) return; memset(&wattrs,0,sizeof(wattrs)); wattrs.mask = wam_events|wam_cursor|wam_utf8_wtitle|wam_undercursor|wam_isdlg|wam_restrict; wattrs.event_masks = ~(1<<et_charup); wattrs.restrict_input_to_me = 1; wattrs.undercursor = 1; wattrs.cursor = ct_pointer; wattrs.utf8_window_title = ac==NULL?_("Kern Pairs"):_("Anchored Pairs"); wattrs.is_dlg = true; pos.x = pos.y = 0; pos.width = GGadgetScale(200); pos.height = GDrawPointsToPixels(NULL,500); kpd.gw = gw = GDrawCreateTopWindow(NULL,&pos,kpd_e_h,&kpd,&wattrs); memset(&label,0,sizeof(label)); memset(&gcd,0,sizeof(gcd)); memset(&boxes,0,sizeof(boxes)); label[0].text = (unichar_t *) _("_Size:"); label[0].text_is_1byte = true; label[0].text_in_resource = true; gcd[0].gd.label = &label[0]; gcd[0].gd.pos.x = 5; gcd[0].gd.pos.y = 5+6; gcd[0].gd.flags = gg_enabled|gg_visible; gcd[0].creator = GLabelCreate; hvarray[0][0] = &gcd[0]; gcd[1].gd.label = &sizes[1]; gcd[1].gd.label->selected = true; gcd[1].gd.pos.x = 50; gcd[1].gd.pos.y = 5; gcd[1].gd.flags = gg_enabled|gg_visible; gcd[1].gd.cid = CID_Size; gcd[1].gd.u.list = sizes; gcd[1].gd.handle_controlevent = KP_ChangeSize; gcd[1].creator = GListButtonCreate; hvarray[0][1] = &gcd[1]; hvarray[0][2] = NULL; label[2].text = (unichar_t *) _("Sort By:"); label[2].text_is_1byte = true; gcd[2].gd.label = &label[2]; gcd[2].gd.pos.x = gcd[0].gd.pos.x; gcd[2].gd.pos.y = gcd[0].gd.pos.y+25; gcd[2].gd.flags = gg_enabled|gg_visible; gcd[2].creator = GLabelCreate; hvarray[1][0] = &gcd[2]; if ( !done ) { done = true; for ( i=0; sortby[i].text!=NULL; ++i ) sortby[i].text = (unichar_t *) _((char *) sortby[i].text); } gcd[3].gd.label = &sortby[0]; gcd[3].gd.label->selected = true; gcd[3].gd.pos.x = 50; gcd[3].gd.pos.y = gcd[1].gd.pos.y+25; gcd[3].gd.flags = gg_enabled|gg_visible; gcd[3].gd.cid = CID_SortBy; gcd[3].gd.u.list = sortby; gcd[3].gd.handle_controlevent = KP_ChangeSort; gcd[3].creator = GListButtonCreate; hvarray[1][1] = &gcd[3]; hvarray[1][2] = NULL; hvarray[2][0] = NULL; boxes[2].gd.flags = gg_enabled|gg_visible; boxes[2].gd.u.boxelements = hvarray[0]; boxes[2].creator = GHVBoxCreate; varray[0] = &boxes[2]; gcd[4].gd.pos.width = 40; gcd[4].gd.pos.height = 250; gcd[4].gd.flags = gg_visible | gg_enabled; gcd[4].gd.u.drawable_e_h = kpdv_e_h; gcd[4].creator = GDrawableCreate; gcd[5].gd.flags = gg_enabled|gg_visible|gg_sb_vert; gcd[5].gd.cid = CID_ScrollBar; gcd[5].gd.handle_controlevent = KP_Scrolled; gcd[5].creator = GScrollBarCreate; harray[0] = &gcd[4]; harray[1] = &gcd[5]; harray[2] = NULL; boxes[3].gd.flags = gg_enabled|gg_visible; boxes[3].gd.u.boxelements = harray; boxes[3].creator = GHBoxCreate; varray[1] = &boxes[3]; gcd[6].gd.pos.x = 20-3; gcd[6].gd.pos.y = 17+37; gcd[6].gd.pos.width = -1; gcd[6].gd.pos.height = 0; gcd[6].gd.flags = gg_visible | gg_enabled | gg_but_default; label[6].text = (unichar_t *) _("_OK"); label[6].text_is_1byte = true; label[6].text_in_resource = true; gcd[6].gd.label = &label[6]; gcd[6].gd.cid = CID_OK; gcd[6].gd.handle_controlevent = KP_OK; gcd[6].creator = GButtonCreate; gcd[7].gd.pos.x = -20; gcd[7].gd.pos.y = gcd[6].gd.pos.y+3; gcd[7].gd.pos.width = -1; gcd[7].gd.pos.height = 0; gcd[7].gd.flags = gg_visible | gg_enabled | gg_but_cancel; label[7].text = (unichar_t *) _("_Cancel"); label[7].text_is_1byte = true; label[7].text_in_resource = true; gcd[7].gd.label = &label[7]; gcd[7].gd.cid = CID_Cancel; gcd[7].gd.handle_controlevent = KP_Cancel; gcd[7].creator = GButtonCreate; barray[0] = GCD_Glue; barray[1] = &gcd[6]; barray[2] = GCD_Glue; barray[3] = GCD_Glue; barray[4] = &gcd[7]; barray[5] = GCD_Glue; barray[6] = NULL; boxes[4].gd.flags = gg_enabled|gg_visible; boxes[4].gd.u.boxelements = barray; boxes[4].creator = GHBoxCreate; varray[2] = &boxes[4]; varray[3] = NULL; boxes[0].gd.flags = gg_enabled|gg_visible; boxes[0].gd.u.boxelements = varray; boxes[0].creator = GVBoxCreate; GGadgetsCreate(gw,boxes); GHVBoxSetExpandableRow(boxes[0].ret,1); GHVBoxSetExpandableCol(boxes[3].ret,0); GHVBoxSetExpandableCol(boxes[4].ret,gb_expandgluesame); GHVBoxSetPadding(boxes[0].ret,0,2); GHVBoxSetPadding(boxes[3].ret,0,0); kpd.v = GDrawableGetWindow(gcd[4].ret);; GGadgetGetSize(gcd[4].ret,&pos); kpd.sb_width = pos.width; GGadgetGetSize(gcd[3].ret,&pos); kpd.header_height = pos.y+pos.height+4; kpd.bdf = SplineFontPieceMeal(kpd.sf,kpd.layer,(intpt) (gcd[1].gd.label->userdata),72,true,NULL); if ( font==NULL ) { memset(&rq,'\0',sizeof(rq)); rq.utf8_family_name = SANS_UI_FAMILIES; rq.point_size = -12; rq.weight = 400; font = GDrawInstanciateFont(GDrawGetDisplayOfWindow(gw),&rq); font = GResourceFindFont("Combinations.Font",font); } kpd.font = font; GDrawFontMetrics(kpd.font,&as,&ds,&ld); kpd.fh = as+ds; kpd.as = as; kpd.uh = (4*kpd.bdf->pixelsize/3)+kpd.fh+6; kpd.vpad = kpd.bdf->pixelsize/5 + 3; GHVBoxFitWindow(boxes[0].ret); GDrawSetVisible(kpd.v,true); GDrawSetVisible(kpd.gw,true); while ( !kpd.done ) GDrawProcessOneEvent(NULL); free( kpd.kerns ); GDrawDestroyWindow(gw); }
SearchView *SVCreate(FontView *fv) { SearchView *sv; GRect pos; GWindow gw; GWindowAttrs wattrs; GGadgetCreateData gcd[14], boxes[6], *butarray[14], *allowarray[6], *fudgearray[4], *halfarray[3], *varray[14]; GTextInfo label[14]; FontRequest rq; int as, ds, ld; char fudgebuf[20]; int k, sel_pos, efdo_pos; static GFont *plainfont = NULL, *boldfont=NULL; if ( searcher!=NULL ) { if ( SVAttachFV(fv,true)) { GDrawSetVisible(fv->sv->gw,true); GDrawRaise(fv->sv->gw); return( searcher ); } else return( NULL ); } searcher = sv = SVFillup( gcalloc(1,sizeof(SearchView)), fv ); memset(&wattrs,0,sizeof(wattrs)); wattrs.mask = wam_events|wam_cursor|wam_isdlg/*|wam_icon*/; wattrs.is_dlg = true; wattrs.event_masks = -1; wattrs.event_masks = -1; wattrs.cursor = ct_pointer; /*wattrs.icon = icon;*/ pos.width = 600; pos.height = 400; pos.x = GGadgetScale(104)+6; DefaultY(&pos); sv->gw = gw = GDrawCreateTopWindow(NULL,&pos,sv_e_h,&sv->cv_srch,&wattrs); SVSetTitle(sv); if ( plainfont==NULL ) { memset(&rq,0,sizeof(rq)); rq.utf8_family_name = SANS_UI_FAMILIES; rq.point_size = 12; rq.weight = 400; plainfont = GDrawInstanciateFont(NULL,&rq); plainfont = GResourceFindFont("SearchView.Font",plainfont); GDrawDecomposeFont(plainfont, &rq); rq.weight = 700; boldfont = GDrawInstanciateFont(NULL,&rq); boldfont = GResourceFindFont("SearchView.BoldFont",boldfont); } sv->plain = plainfont; sv->bold = boldfont; GDrawFontMetrics(sv->plain,&as,&ds,&ld); sv->fh = as+ds; sv->as = as; SVCharViewInits(sv); memset(&label,0,sizeof(label)); memset(&gcd,0,sizeof(gcd)); memset(&boxes,0,sizeof(boxes)); k=0; label[k].text = (unichar_t *) _("Allow:"); label[k].text_is_1byte = true; gcd[k].gd.label = &label[k]; gcd[k].gd.pos.x = 5; gcd[k].gd.pos.y = GDrawPixelsToPoints(NULL,sv->cv_y+sv->cv_height+8); gcd[k].gd.flags = gg_enabled|gg_visible|gg_utf8_popup; gcd[k].gd.cid = CID_Allow; gcd[k].gd.popup_msg = (unichar_t *) _("Allow a match even if the search pattern has\nto be transformed by a combination of the\nfollowing transformations."); gcd[k].creator = GLabelCreate; allowarray[k] = &gcd[k]; ++k; label[k].text = (unichar_t *) _("Flipping"); label[k].text_is_1byte = true; gcd[k].gd.label = &label[k]; gcd[k].gd.pos.x = 35; gcd[k].gd.pos.y = gcd[0].gd.pos.y-3; gcd[k].gd.flags = gg_enabled|gg_visible|gg_cb_on|gg_utf8_popup; gcd[k].gd.cid = CID_Flipping; gcd[k].gd.popup_msg = (unichar_t *) _("Allow a match even if the search pattern has\nto be transformed by a combination of the\nfollowing transformations."); gcd[k].creator = GCheckBoxCreate; allowarray[k] = &gcd[k]; ++k; label[k].text = (unichar_t *) _("Scaling"); label[k].text_is_1byte = true; gcd[k].gd.label = &label[k]; gcd[k].gd.pos.x = 100; gcd[k].gd.pos.y = gcd[1].gd.pos.y; gcd[k].gd.flags = gg_enabled|gg_visible|gg_utf8_popup; gcd[k].gd.cid = CID_Scaling; gcd[k].gd.popup_msg = (unichar_t *) _("Allow a match even if the search pattern has\nto be transformed by a combination of the\nfollowing transformations."); gcd[k].creator = GCheckBoxCreate; allowarray[k] = &gcd[k]; ++k; label[k].text = (unichar_t *) _("Rotating"); label[k].text_is_1byte = true; gcd[k].gd.label = &label[k]; gcd[k].gd.pos.x = 170; gcd[k].gd.pos.y = gcd[1].gd.pos.y; gcd[k].gd.flags = gg_enabled|gg_visible|gg_utf8_popup; gcd[k].gd.cid = CID_Rotating; gcd[k].gd.popup_msg = (unichar_t *) _("Allow a match even if the search pattern has\nto be transformed by a combination of the\nfollowing transformations."); gcd[k].creator = GCheckBoxCreate; allowarray[k] = &gcd[k]; allowarray[++k] = GCD_Glue; allowarray[5] = NULL; label[k].text = (unichar_t *) _("_Match Fuzziness:"); label[k].text_is_1byte = true; label[k].text_in_resource = true; gcd[k].gd.label = &label[k]; gcd[k].gd.flags = gg_enabled|gg_visible; gcd[k].creator = GLabelCreate; fudgearray[0] = &gcd[k++]; sprintf(fudgebuf,"%g",old_fudge); label[k].text = (unichar_t *) fudgebuf; label[k].text_is_1byte = true; label[k].text_in_resource = true; gcd[k].gd.label = &label[k]; gcd[k].gd.flags = gg_enabled|gg_visible; gcd[k].gd.cid = CID_Fuzzy; gcd[k].creator = GTextFieldCreate; fudgearray[1] = &gcd[k++]; fudgearray[2] = GCD_Glue; fudgearray[3] = NULL; efdo_pos = k; label[k].text = (unichar_t *) _("Endpoints specify minimum length and direction only"); label[k].text_is_1byte = true; gcd[k].gd.label = &label[k]; gcd[k].gd.pos.x = 5; gcd[k].gd.pos.y = gcd[1].gd.pos.y+18; gcd[k].gd.flags = gg_enabled|gg_visible|gg_utf8_popup; gcd[k].gd.cid = CID_Endpoints; gcd[k].gd.popup_msg = (unichar_t *) _( "If the search pattern is a single open contour\n" "then do not match the end points. They merely\n" "specify the direction from which the curve should\n" "move toward the next point (which will be matched),\n" "and the minimum distance between the first matched\n" "point and the one before it. The endpoints of the\n" "replace contour will also only be used for positioning.\n" "\n" "This allows you to match a right angle corner\n" "without needed to specify exactly how long the edges\n" "are which form the right angle."); gcd[k++].creator = GCheckBoxCreate; sel_pos = k; label[k].text = (unichar_t *) _("Search Selected Chars Only"); label[k].text_is_1byte = true; gcd[k].gd.label = &label[k]; gcd[k].gd.pos.x = 5; gcd[k].gd.pos.y = gcd[1].gd.pos.y+18; gcd[k].gd.flags = gg_enabled|gg_visible|gg_utf8_popup; gcd[k].gd.cid = CID_Selected; gcd[k].gd.popup_msg = (unichar_t *) _("Only search characters selected in the fontview.\nNormally we search all characters in the font."); gcd[k++].creator = GCheckBoxCreate; label[k].text = (unichar_t *) _("Find Next"); /* Start with this to allow sufficient space */ label[k].text_is_1byte = true; gcd[k].gd.label = &label[k]; gcd[k].gd.pos.x = 5; gcd[k].gd.pos.y = gcd[sel_pos].gd.pos.y+24; gcd[k].gd.flags = gg_visible|gg_but_default; gcd[k].gd.cid = CID_Find; gcd[k].gd.handle_controlevent = SV_Find; gcd[k].creator = GButtonCreate; butarray[0] = GCD_Glue; butarray[1] = GCD_Glue; butarray[2] = &gcd[k++]; label[k].text = (unichar_t *) _("Find All"); label[k].text_is_1byte = true; gcd[k].gd.label = &label[k]; gcd[k].gd.pos.x = 0; gcd[k].gd.pos.y = gcd[k-1].gd.pos.y+3; gcd[k].gd.flags = gg_visible; gcd[k].gd.cid = CID_FindAll; gcd[k].gd.handle_controlevent = SV_FindAll; gcd[k].creator = GButtonCreate; butarray[3] = GCD_Glue; butarray[4] = &gcd[k++]; label[k].text = (unichar_t *) _("Replace"); label[k].text_is_1byte = true; gcd[k].gd.label = &label[k]; gcd[k].gd.pos.x = 0; gcd[k].gd.pos.y = gcd[k-1].gd.pos.y; gcd[k].gd.flags = gg_visible; gcd[k].gd.cid = CID_Replace; gcd[k].gd.handle_controlevent = SV_RplFind; gcd[k].creator = GButtonCreate; butarray[5] = GCD_Glue; butarray[6] = &gcd[k++]; label[k].text = (unichar_t *) _("Replace All"); label[k].text_is_1byte = true; gcd[k].gd.label = &label[k]; gcd[k].gd.pos.x = 0; gcd[k].gd.pos.y = gcd[k-2].gd.pos.y; gcd[k].gd.flags = gg_visible; gcd[k].gd.cid = CID_ReplaceAll; gcd[k].gd.handle_controlevent = SV_RplAll; gcd[k].creator = GButtonCreate; butarray[7] = GCD_Glue; butarray[8] = &gcd[k++]; label[k].text = (unichar_t *) _("_Cancel"); label[k].text_is_1byte = true; label[k].text_in_resource = true; gcd[k].gd.label = &label[k]; gcd[k].gd.pos.x = 0; gcd[k].gd.pos.y = gcd[k-3].gd.pos.y; gcd[k].gd.flags = gg_enabled|gg_visible|gg_but_cancel; gcd[k].gd.cid = CID_Cancel; gcd[k].gd.handle_controlevent = SV_Cancel; gcd[k].creator = GButtonCreate; butarray[9] = GCD_Glue; butarray[10] = &gcd[k++]; butarray[11] = GCD_Glue; butarray[12] = GCD_Glue; butarray[13] = NULL; boxes[2].gd.flags = gg_enabled|gg_visible; boxes[2].gd.u.boxelements = allowarray; boxes[2].creator = GHBoxCreate; boxes[3].gd.flags = gg_enabled|gg_visible; boxes[3].gd.u.boxelements = fudgearray; boxes[3].creator = GHBoxCreate; halfarray[0] = &boxes[2]; halfarray[1] = &boxes[3]; halfarray[2] = NULL; boxes[4].gd.flags = gg_enabled|gg_visible; boxes[4].gd.u.boxelements = halfarray; boxes[4].creator = GHBoxCreate; boxes[5].gd.flags = gg_enabled|gg_visible; boxes[5].gd.u.boxelements = butarray; boxes[5].creator = GHBoxCreate; varray[0] = GCD_Glue; varray[1] = NULL; varray[2] = &boxes[4]; varray[3] = NULL; varray[4] = &gcd[efdo_pos]; varray[5] = NULL; varray[6] = GCD_Glue; varray[7] = NULL; varray[8] = &gcd[sel_pos]; varray[9] = NULL; varray[10] = &boxes[5]; varray[11]= NULL; varray[12] = NULL; boxes[0].gd.pos.x = boxes[0].gd.pos.y = 2; boxes[0].gd.flags = gg_enabled|gg_visible; boxes[0].gd.u.boxelements = varray; boxes[0].gd.cid = CID_TopBox; boxes[0].creator = GHVGroupCreate; GGadgetsCreate(gw,boxes); GHVBoxSetExpandableRow(boxes[0].ret,0); GHVBoxSetPadding(boxes[2].ret,6,3); GHVBoxSetExpandableCol(boxes[2].ret,gb_expandglue); GHVBoxSetExpandableCol(boxes[3].ret,gb_expandglue); GHVBoxSetExpandableCol(boxes[5].ret,gb_expandglue); GGadgetResize(boxes[0].ret,pos.width,pos.height); GGadgetSetTitle8(GWidgetGetControl(gw,CID_Find),_("Find")); sv->showsfindnext = false; GDrawRequestTimer(gw,1000,1000,NULL); sv->button_height = GDrawPointsToPixels(gw,100); GDrawResize(gw,650,400); /* Force a resize event */ GDrawSetVisible(sv->gw,true); return( sv ); }
static void StartDeltaDisplay(QGData *qg) { GWindowAttrs wattrs; GRect pos; GWindow gw, oldgw = qg->gw; GGadgetCreateData gcd[8], boxes[5], *harray[4], *harray2[5], *butarray[8], *varray[4]; GTextInfo label[8]; int i, k; FontRequest rq; int as, ds, ld; static GFont *valfont=NULL; static int sorts_translated = 0; if (!sorts_translated) { for (i=0; i<sizeof(sorts)/sizeof(sorts[0]); i++) sorts[i].text = (unichar_t *) _((char *) sorts[i].text); for (i=0; i<sizeof(glyphsorts)/sizeof(glyphsorts[0]); i++) glyphsorts[i].text = (unichar_t *) _((char *) glyphsorts[i].text); sorts_translated=1; } memset(&wattrs,0,sizeof(wattrs)); wattrs.mask = wam_events|wam_cursor|wam_utf8_wtitle|wam_undercursor|wam_isdlg; wattrs.event_masks = -1; wattrs.cursor = ct_mypointer; wattrs.utf8_window_title = _("Potential spots for Delta instructions"); wattrs.is_dlg = true; wattrs.undercursor = 1; pos.x = pos.y = 0; pos.width = GDrawPointsToPixels(NULL,200); pos.height = GDrawPointsToPixels(NULL,300); qg->gw = gw = GDrawCreateTopWindow(NULL,&pos,qg_e_h,qg,&wattrs); qg->done = false; if ( valfont==NULL ) { memset(&rq,0,sizeof(rq)); rq.utf8_family_name = "Helvetica"; rq.point_size = 11; rq.weight = 400; valfont = GDrawInstanciateFont(gw,&rq); valfont = GResourceFindFont("Validate.Font",valfont); } qg->font = valfont; GDrawWindowFontMetrics(gw,qg->font,&as,&ds,&ld); qg->fh = as+ds; qg->as = as; memset(&label,0,sizeof(label)); memset(&gcd,0,sizeof(gcd)); memset(&boxes,0,sizeof(boxes)); k = 0; label[k].text = (unichar_t *) _("Sort:"); label[k].text_is_1byte = true; gcd[k].gd.label = &label[k]; gcd[k].gd.flags = gg_enabled|gg_visible; gcd[k++].creator = GLabelCreate; sorts[0].selected = true; sorts[1].selected = sorts[2].selected = false; sorts[2].disabled = qg->fv==NULL; gcd[k].gd.u.list = sorts; gcd[k].gd.cid = CID_Sort; gcd[k].gd.flags = gg_enabled|gg_visible; gcd[k].gd.handle_controlevent = QGSorter; gcd[k++].creator = GListButtonCreate; label[k].text = (unichar_t *) _("Glyph:"); label[k].text_is_1byte = true; gcd[k].gd.label = &label[k]; gcd[k].gd.flags = gg_enabled|gg_visible; gcd[k++].creator = GLabelCreate; gcd[k].gd.u.list = glyphsorts; gcd[k].gd.flags = gg_enabled|gg_visible; gcd[k].gd.cid = CID_GlyphSort; gcd[k].gd.handle_controlevent = QGSorter; gcd[k++].creator = GListButtonCreate; if ( qg->fv==NULL ) gcd[k-1].gd.flags = gcd[k-2].gd.flags = gg_enabled; harray2[0] = &gcd[k-4]; harray2[1] = &gcd[k-3]; harray2[2] = &gcd[k-2]; harray2[3] = &gcd[k-1]; harray2[4] = NULL; gcd[k].gd.flags = gg_visible | gg_enabled; gcd[k].gd.u.drawable_e_h = qgv_e_h; gcd[k++].creator = GDrawableCreate; gcd[k].gd.flags = gg_visible | gg_enabled | gg_sb_vert; gcd[k].gd.handle_controlevent = QG_VScroll; gcd[k++].creator = GScrollBarCreate; harray[0] = &gcd[k-2]; harray[1] = &gcd[k-1]; harray[2] = NULL; harray[3] = NULL; gcd[k].gd.flags = gg_visible | gg_enabled | gg_but_default; label[k].text = (unichar_t *) _("_OK"); label[k].text_is_1byte = true; label[k].text_in_resource = true; gcd[k].gd.label = &label[k]; gcd[k].gd.handle_controlevent = QG_OK; gcd[k++].creator = GButtonCreate; butarray[0] = GCD_Glue; butarray[1] = &gcd[k-1]; butarray[2] = GCD_Glue; butarray[3] = NULL; boxes[2].gd.flags = gg_enabled|gg_visible; boxes[2].gd.u.boxelements = harray; boxes[2].creator = GHVGroupCreate; boxes[3].gd.flags = gg_enabled|gg_visible; boxes[3].gd.u.boxelements = butarray; boxes[3].creator = GHBoxCreate; boxes[4].gd.flags = gg_enabled|gg_visible; boxes[4].gd.u.boxelements = harray2; boxes[4].creator = GHBoxCreate; varray[0] = &boxes[4]; varray[1] = &boxes[2]; varray[2] = &boxes[3]; varray[3] = NULL; boxes[0].gd.flags = gg_enabled|gg_visible; boxes[0].gd.u.boxelements = varray; boxes[0].creator = GVBoxCreate; GGadgetsCreate(gw,boxes); qg->vsb = gcd[5].ret; qg->v = GDrawableGetWindow(gcd[4].ret); GHVBoxSetExpandableRow(boxes[0].ret,1); GHVBoxSetExpandableCol(boxes[2].ret,0); GHVBoxSetPadding(boxes[2].ret,0,0); GHVBoxSetExpandableCol(boxes[3].ret,gb_expandglue); GHVBoxFitWindow(boxes[0].ret); QGDoSort(qg); GDrawSetVisible(gw,true); while ( !qg->done ) GDrawProcessOneEvent(NULL); GDrawDestroyWindow(gw); qgnodeFree(&qg->list); qg->gw = oldgw; }