static int DoFindOne(SearchView *sv,int startafter) { int i, gid; SplineChar *startcur = sv->sd.curchar; /* It is possible that some idiot deleted the current character since */ /* the last search... do some mild checks */ if ( sv->sd.curchar!=NULL && sv->sd.curchar->parent == sv->sd.fv->sf && sv->sd.curchar->orig_pos>=0 && sv->sd.curchar->orig_pos<sv->sd.fv->sf->glyphcnt && sv->sd.curchar==sv->sd.fv->sf->glyphs[sv->sd.curchar->orig_pos] ) /* Looks ok */; else sv->sd.curchar=startcur=NULL; if ( !sv->sd.subpatternsearch ) startafter = false; if ( sv->showsfindnext && sv->sd.curchar!=NULL ) i = sv->sd.fv->map->backmap[sv->sd.curchar->orig_pos]+1-startafter; else { startafter = false; if ( !sv->sd.onlyselected ) i = 0; else { for ( i=0; i<sv->sd.fv->map->enccount; ++i ) if ( sv->sd.fv->selected[i] && (gid=sv->sd.fv->map->map[i])!=-1 && sv->sd.fv->sf->glyphs[gid]!=NULL ) break; } } for ( ; i<sv->sd.fv->map->enccount; ++i ) { if (( !sv->sd.onlyselected || sv->sd.fv->selected[i]) && (gid=sv->sd.fv->map->map[i])!=-1 && sv->sd.fv->sf->glyphs[gid]!=NULL ) { SCSplinePointsUntick(sv->sd.fv->sf->glyphs[gid],sv->sd.fv->active_layer); if ( SearchChar(&sv->sd,gid,startafter) ) break; } startafter = false; } if ( i>=sv->sd.fv->map->enccount ) { ff_post_notice(_("Not Found"),sv->showsfindnext?_("The search pattern was not found again in the font %.100s"):_("The search pattern was not found in the font %.100s"),sv->sd.fv->sf->fontname); sv->sd.curchar = startcur; GGadgetSetTitle8(GWidgetGetControl(sv->gw,CID_Find),_("Find")); sv->showsfindnext = false; return( false ); } SVSelectSC(sv); if ( sv->lastcv!=NULL && sv->lastcv->b.sc==startcur && sv->lastcv->b.fv== sv->sd.fv ) { CVChangeSC(sv->lastcv,sv->sd.curchar); GDrawSetVisible(sv->lastcv->gw,true); GDrawRaise(sv->lastcv->gw); } else sv->lastcv = CharViewCreate(sv->sd.curchar,(FontView *) sv->sd.fv,-1); GGadgetSetTitle8(GWidgetGetControl(sv->gw,CID_Find),_("Find Next")); sv->showsfindnext = true; return( true ); }
static void GCol_ShowTexts(struct gcol_data *d) { double *offs[7] = { &d->col.h, &d->col.s, &d->col.v, &d->col.r, &d->col.g, &d->col.b, &d->col.alpha }; int i; char text[50]; gHSV2RGB((struct hslrgb *) &d->col); sprintf( text, "%3.0f", *offs[0]); GGadgetSetTitle8(GWidgetGetControl(d->gw,cids[0]),text); for ( i=1; i<7; ++i ) { sprintf( text, "%.2f", *offs[i]); GGadgetSetTitle8(GWidgetGetControl(d->gw,cids[i]),text); } }
static void SVCheck(SearchView *sv) { int show = ( sv->sd.sc_srch.layers[ly_fore].splines!=NULL || sv->sd.sc_srch.layers[ly_fore].refs!=NULL ); int showrplall=show, showrpl; if ( sv->sd.sc_srch.changed_since_autosave && sv->showsfindnext ) { GGadgetSetTitle8(GWidgetGetControl(sv->gw,CID_Find),_("Find")); sv->showsfindnext = false; } if ( showrplall ) { if ( sv->sd.sc_srch.layers[ly_fore].splines!=NULL && sv->sd.sc_srch.layers[ly_fore].splines->next==NULL && sv->sd.sc_srch.layers[ly_fore].splines->first->prev==NULL && sv->sd.sc_rpl.layers[ly_fore].splines==NULL && sv->sd.sc_rpl.layers[ly_fore].refs==NULL ) showrplall = false; } showrpl = showrplall; if ( !sv->showsfindnext || sv->sd.curchar==NULL || sv->sd.curchar->parent!=sv->sd.fv->sf || sv->sd.curchar->orig_pos<0 || sv->sd.curchar->orig_pos>=sv->sd.fv->sf->glyphcnt || sv->sd.curchar!=sv->sd.fv->sf->glyphs[sv->sd.curchar->orig_pos] || sv->sd.curchar->changed_since_search ) showrpl = false; if ( sv->findenabled != show ) { GGadgetSetEnabled(GWidgetGetControl(sv->gw,CID_Find),show); GGadgetSetEnabled(GWidgetGetControl(sv->gw,CID_FindAll),show); sv->findenabled = show; } if ( sv->rplallenabled != showrplall ) { GGadgetSetEnabled(GWidgetGetControl(sv->gw,CID_ReplaceAll),showrplall); sv->rplallenabled = showrplall; } if ( sv->rplenabled != showrpl ) { GGadgetSetEnabled(GWidgetGetControl(sv->gw,CID_Replace),showrpl); sv->rplenabled = showrpl; } }
static void BdfP_Mouse(struct bdf_dlg *bd, GEvent *e) { int line = e->u.mouse.y/(bd->fh+1) + bd->cur->top_prop; if ( line<0 || line>bd->cur->bdf->prop_cnt ) return; /* "New" happens when line==bd->cur->bdf->prop_cnt */ if ( e->type == et_mousedown ) { if ( !BdfP_FinishTextField(bd) ) { bd->press_pos = -1; return; } if ( e->u.mouse.x>=4 && e->u.mouse.x<= bd->value_x ) { bd->cur->sel_prop = line; BdfP_PopupMenuProps(bd,e); BdfP_EnableButtons(bd); } else if ( line>=bd->cur->bdf->prop_cnt ) return; else { bd->press_pos = line; bd->cur->sel_prop = -1; GDrawRequestExpose(bd->v,NULL,false ); } } else if ( e->type == et_mouseup ) { int pos = bd->press_pos; bd->press_pos = -1; if ( line>=bd->cur->bdf->prop_cnt || line!=pos ) return; if ( bd->active ) /* Should never happen */ return; bd->cur->sel_prop = line; if ( e->u.mouse.x > bd->value_x ) { BDFFont *bdf = bd->cur->bdf; GGadgetMove(bd->tf,bd->value_x+2,(line-bd->cur->top_prop)*(bd->fh+1)); if ( (bdf->props[line].type&~prt_property) == prt_int || (bdf->props[line].type&~prt_property) == prt_uint ) { char buffer[40]; sprintf( buffer,"%d",bdf->props[line].u.val ); GGadgetSetTitle8(bd->tf,buffer); } else GGadgetSetTitle8(bd->tf,bdf->props[line].u.str ); GGadgetSetVisible(bd->tf,true); bd->active = true; } GDrawRequestExpose(bd->v,NULL,false ); } }
void WordlistLoadToGTextInfo( GGadget* g, int* idx ) { int words_max = 1024*128; GTextInfo** words = WordlistLoadFileToGTextInfoBasic( words_max ); if( !words ) { GGadgetSetTitle8(g,""); return; } if( words[0] ) { GGadgetSetList(g,words,true); GGadgetSetTitle8(g,(char *) (words[0]->text)); *idx = 0; GGadgetSelectOneListItem( g, *idx ); Wordlist_touch( g ); return; } return; }
static int AnchorD_ChangeGlyph(AnchorDlg *a, SplineChar *sc, AnchorPoint *ap) { char buf[32]; struct state *old; if ( ap==NULL || sc==NULL ) return( true ); if ( a->ap==ap ) return( true ); /* Do we already have an entry for the current anchor? */ for ( old = a->orig_vals; old!=NULL && old->ap_pt!=a->ap; old=old->next ); /* If so we've already noted its original state and need do nothing more */ /* but otherwise we must store the current state */ if ( old==NULL ) { old = chunkalloc(sizeof(struct state)); old->sc = a->sc; old->changed = a->sc->changed; old->ap_pt = a->ap; old->ap_vals = *a->ap; memset(&a->ap->xadjust,0,sizeof(DeviceTable)); memset(&a->ap->yadjust,0,sizeof(DeviceTable)); old->next = a->orig_vals; a->orig_vals = old; } AnchorD_Apply(a); AnchorD_FreeChar(a); a->ap = ap; a->sc = sc; a->apos = ap->me; sprintf( buf, "%d", (int) rint(ap->me.x) ); GGadgetSetTitle8(GWidgetGetControl(a->gw,CID_X),buf); sprintf( buf, "%d", (int) rint(ap->me.y) ); GGadgetSetTitle8(GWidgetGetControl(a->gw,CID_Y),buf); AnchorD_FindComplements(a); AnchorD_SetDevTabs(a); AnchorD_ChangeSize(a); AnchorD_SetTitle(a); return( true ); }
unichar_t *FVOpenFont(char *title, const char *defaultfile, int mult) { GRect pos; int i, filter, renamei; GWindow gw; GWindowAttrs wattrs; GGadgetCreateData gcd[11], boxes[5], *varray[9], *harray1[7], *harray2[4], *harray3[9]; GTextInfo label[10]; struct gfc_data d; int bs = GIntGetResource(_NUM_Buttonsize), bsbigger, totwid, spacing; GGadget *tf; unichar_t *temp; char **nlnames; GTextInfo *namelistnames, **filts; int cnt; memset(&d,'\0',sizeof(d)); 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.is_dlg = true; wattrs.undercursor = 1; wattrs.cursor = ct_pointer; wattrs.utf8_window_title = title; pos.x = pos.y = 0; totwid = GGadgetScale(295); bsbigger = 4*bs+4*14>totwid; totwid = bsbigger?4*bs+4*12:totwid; spacing = (totwid-4*bs-2*12)/3; pos.width = GDrawPointsToPixels(NULL,totwid); pos.height = GDrawPointsToPixels(NULL,247); gw = GDrawCreateTopWindow(NULL,&pos,e_h,&d,&wattrs); memset(&label,0,sizeof(label)); memset(&gcd,0,sizeof(gcd)); memset(&boxes,0,sizeof(boxes)); i=0; gcd[i].gd.pos.x = 12; gcd[i].gd.pos.y = 6; gcd[i].gd.pos.width = totwid*100/GIntGetResource(_NUM_ScaleFactor)-24; gcd[i].gd.pos.height = 180; gcd[i].gd.flags = gg_visible | gg_enabled; if ( RecentFiles[0]!=NULL ) gcd[i].gd.flags = gg_visible | gg_enabled | gg_file_pulldown; if ( mult ) gcd[i].gd.flags |= gg_file_multiple; varray[0] = &gcd[i]; varray[1] = NULL; gcd[i++].creator = GFileChooserCreate; label[i].text = (unichar_t *) _("Filter:"); label[i].text_is_1byte = true; gcd[i].gd.label = &label[i]; gcd[i].gd.pos.x = 8; gcd[i].gd.pos.y = 188+6; gcd[i].gd.flags = gg_visible | gg_enabled | gg_utf8_popup; gcd[i].gd.popup_msg = (unichar_t *) _("Display files of this type" ); harray1[0] = GCD_Glue; harray1[1] = &gcd[i]; gcd[i++].creator = GLabelCreate; gcd[i].gd.pos.x = 0; gcd[i].gd.pos.y = gcd[i-1].gd.pos.y-6; gcd[i].gd.flags = gg_visible | gg_enabled | gg_utf8_popup; gcd[i].gd.popup_msg = (unichar_t *) _("Display files of this type"); gcd[i].gd.handle_controlevent = GFD_FilterSelected; harray1[2] = &gcd[i]; harray1[3] = GCD_Glue; harray1[4] = GCD_Glue; harray1[5] = GCD_Glue; harray1[6] = NULL; gcd[i++].creator = GListButtonCreate; boxes[2].gd.flags = gg_visible | gg_enabled; boxes[2].gd.u.boxelements = harray1; boxes[2].creator = GHBoxCreate; varray[2] = &boxes[2]; varray[3] = NULL; label[i].text = (unichar_t *) _("Force glyph names to:"); label[i].text_is_1byte = true; gcd[i].gd.label = &label[i]; gcd[i].gd.pos.x = 8; gcd[i].gd.pos.y = 188+6; gcd[i].gd.flags = gg_visible | gg_enabled | gg_utf8_popup; gcd[i].gd.popup_msg = (unichar_t *) _("In the saved font, force all glyph names to match those in the specified namelist"); harray2[0] = &gcd[i]; gcd[i++].creator = GLabelCreate; renamei = i; gcd[i].gd.pos.x = 0; gcd[i].gd.pos.y = gcd[i-1].gd.pos.y-6; gcd[i].gd.flags = gg_visible | gg_enabled | gg_utf8_popup; gcd[i].gd.popup_msg = (unichar_t *) _("In the saved font, force all glyph names to match those in the specified namelist"); gcd[i].creator = GListButtonCreate; nlnames = AllNamelistNames(); for ( cnt=0; nlnames[cnt]!=NULL; ++cnt); namelistnames = calloc(cnt+3,sizeof(GTextInfo)); namelistnames[0].text = (unichar_t *) _("No Rename"); namelistnames[0].text_is_1byte = true; if ( force_names_when_opening==NULL ) { namelistnames[0].selected = true; gcd[i].gd.label = &namelistnames[0]; } namelistnames[1].line = true; for ( cnt=0; nlnames[cnt]!=NULL; ++cnt) { namelistnames[cnt+2].text = (unichar_t *) nlnames[cnt]; namelistnames[cnt+2].text_is_1byte = true; if ( force_names_when_opening!=NULL && strcmp(_(force_names_when_opening->title),nlnames[cnt])==0 ) { namelistnames[cnt+2].selected = true; gcd[i].gd.label = &namelistnames[cnt+2]; } } harray2[1] = &gcd[i]; harray2[2] = GCD_Glue; harray2[3] = NULL; gcd[i++].gd.u.list = namelistnames; boxes[3].gd.flags = gg_visible | gg_enabled; boxes[3].gd.u.boxelements = harray2; boxes[3].creator = GHBoxCreate; varray[4] = &boxes[3]; varray[5] = NULL; gcd[i].gd.pos.x = 12; gcd[i].gd.pos.y = 216-3; gcd[i].gd.pos.width = -1; gcd[i].gd.flags = gg_visible | gg_enabled | gg_but_default; label[i].text = (unichar_t *) _("_OK"); label[i].text_is_1byte = true; label[i].text_in_resource = true; gcd[i].gd.mnemonic = 'O'; gcd[i].gd.label = &label[i]; gcd[i].gd.handle_controlevent = GFD_Ok; harray3[0] = GCD_Glue; harray3[1] = &gcd[i]; gcd[i++].creator = GButtonCreate; gcd[i].gd.pos.x = -(spacing+bs)*100/GIntGetResource(_NUM_ScaleFactor)-12; gcd[i].gd.pos.y = gcd[i-1].gd.pos.y+3; gcd[i].gd.pos.width = -1; gcd[i].gd.flags = gg_visible | gg_enabled; label[i].text = (unichar_t *) S_("Font|_New"); label[i].text_is_1byte = true; label[i].text_in_resource = true; gcd[i].gd.mnemonic = 'N'; gcd[i].gd.label = &label[i]; gcd[i].gd.handle_controlevent = GFD_New; harray3[2] = GCD_Glue; harray3[3] = &gcd[i]; gcd[i++].creator = GButtonCreate; filter = i; gcd[i].gd.pos.x = (spacing+bs)*100/GIntGetResource(_NUM_ScaleFactor)+12; gcd[i].gd.pos.y = gcd[i-1].gd.pos.y; gcd[i].gd.pos.width = -1; gcd[i].gd.flags = /* gg_visible |*/ gg_enabled; label[i].text = (unichar_t *) _("_Filter"); label[i].text_is_1byte = true; label[i].text_in_resource = true; gcd[i].gd.mnemonic = 'F'; gcd[i].gd.label = &label[i]; gcd[i].gd.handle_controlevent = GFileChooserFilterEh; harray3[4] = &gcd[i]; gcd[i++].creator = GButtonCreate; gcd[i].gd.pos.x = -12; gcd[i].gd.pos.y = gcd[i-1].gd.pos.y; gcd[i].gd.pos.width = -1; gcd[i].gd.flags = gg_visible | gg_enabled | gg_but_cancel; label[i].text = (unichar_t *) _("_Cancel"); label[i].text_is_1byte = true; label[i].text_in_resource = true; gcd[i].gd.label = &label[i]; gcd[i].gd.mnemonic = 'C'; gcd[i].gd.handle_controlevent = GFD_Cancel; harray3[5] = GCD_Glue; harray3[6] = &gcd[i]; harray3[7] = GCD_Glue; harray3[8] = NULL; gcd[i++].creator = GButtonCreate; boxes[4].gd.flags = gg_visible | gg_enabled; boxes[4].gd.u.boxelements = harray3; boxes[4].creator = GHBoxCreate; varray[6] = &boxes[4]; varray[7] = NULL; varray[8] = NULL; boxes[0].gd.pos.x = boxes[0].gd.pos.y = 2; boxes[0].gd.flags = gg_visible | gg_enabled; boxes[0].gd.u.boxelements = varray; boxes[0].creator = GHVGroupCreate; gcd[i].gd.pos.x = 2; gcd[i].gd.pos.y = 2; gcd[i].gd.pos.width = pos.width-4; gcd[i].gd.pos.height = pos.height-4; gcd[i].gd.flags = gg_enabled | gg_visible | gg_pos_in_pixels; gcd[i++].creator = GGroupCreate; GGadgetsCreate(gw,boxes); d.gfc = gcd[0].ret; d.rename = gcd[renamei].ret; filts = StandardFilters(); GGadgetSetList(harray1[2]->ret,filts,true); GHVBoxSetExpandableRow(boxes[0].ret,0); GHVBoxSetExpandableCol(boxes[2].ret,gb_expandglue); GHVBoxSetExpandableCol(boxes[3].ret,gb_expandglue); GHVBoxSetExpandableCol(boxes[4].ret,gb_expandgluesame); GHVBoxFitWindow(boxes[0].ret); free(namelistnames); GGadgetSetUserData(gcd[filter].ret,gcd[0].ret); GFileChooserConnectButtons(gcd[0].ret,harray3[1]->ret,gcd[filter].ret); temp = utf82u_copy(filts[default_font_filter_index]->userdata); GFileChooserSetFilterText(gcd[0].ret,temp); free(temp); GFileChooserGetChildren(gcd[0].ret,NULL, NULL, &tf); if ( RecentFiles[0]!=NULL ) { GGadgetSetList(tf,GTextInfoFromChars(RecentFiles,RECENT_MAX),false); } GGadgetSetTitle8(gcd[0].ret,defaultfile); GWidgetHidePalettes(); GDrawSetVisible(gw,true); while ( !d.done ) GDrawProcessOneEvent(NULL); GDrawDestroyWindow(gw); GDrawProcessPendingEvents(NULL); /* Give the window a chance to vanish... */ GDrawSync(NULL); GDrawProcessPendingEvents(NULL); /* Give the window a chance to vanish... */ free( d.lastpopupfontname ); GTextInfoArrayFree(filts); for ( cnt=0; nlnames[cnt]!=NULL; ++cnt) { free(nlnames[cnt]); } free(nlnames); return(d.ret); }
static int GCol_TextChanged(GGadget *g, GEvent *e) { if ( e->type==et_controlevent && e->u.control.subtype == et_textchanged ) { struct gcol_data *d = GDrawGetUserData(GGadgetGetWindow(g)); double *offs[7] = { &d->col.h, &d->col.s, &d->col.v, &d->col.r, &d->col.g, &d->col.b, &d->col.alpha }; int i, err = false; int low, high; double val; char text[50]; if ( GGadgetGetCid(g)==CID_Alpha ) { low = 3; high=7; /* Didn't actually change the rgb values, but parse them */ /* This is in case we need to clear the error flag */ d->col.hsv = false; d->col.rgb = true; } else if ( GGadgetGetCid(g)>=CID_Hue ) { low = 0; high=3; d->col.hsv = true; d->col.rgb = false; } else { low = 3; high=6; d->col.hsv = false; d->col.rgb = true; } for ( i=low; i<high; ++i ) { val = GetCalmReal8(d->gw,cids[i],_(labnames[i]),&err); if ( err ) break; if ( i==0 ) { val = fmod(val,360); if ( val<0 ) val += 360; } else { if ( val<0 || val>1 ) { err = true; break; } } *offs[i] = val; } if ( err ) { d->col.hsv = d->col.rgb = false; } else if ( d->col.hsv ) { gHSV2RGB((struct hslrgb *) &d->col); for ( i=3; i<6; ++i ) { sprintf( text, "%.2f", *offs[i]); GGadgetSetTitle8(GWidgetGetControl(d->gw,cids[i]),text); } } else { gRGB2HSV((struct hslrgb *) &d->col); sprintf( text, "%3.0f", *offs[0]); GGadgetSetTitle8(GWidgetGetControl(d->gw,cids[0]),text); for ( i=1; i<3; ++i ) { sprintf( text, "%.2f", *offs[i]); GGadgetSetTitle8(GWidgetGetControl(d->gw,cids[i]),text); } } GDrawRequestExpose(d->wheelw,NULL,false); GDrawRequestExpose(d->gradw,NULL,false); GDrawRequestExpose(d->colw,NULL,false); } return( true ); }
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 ); }
void CVCreateHint(CharView *cv,int ishstem,int preservehints) { GRect pos; GWindow gw; GWindowAttrs wattrs; GGadgetCreateData gcd[9], *harray1[4], *harray2[9], *barray[7], *varray[5][2], boxes[5]; GTextInfo label[9]; static CreateHintData chd; char buffer[20]; unichar_t ubuf[20]; chd.done = false; chd.ishstem = ishstem; chd.preservehints = preservehints; chd.cv = cv; if ( chd.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 = _("Create Hint"); wattrs.is_dlg = true; pos.x = pos.y = 0; pos.width = GGadgetScale(GDrawPointsToPixels(NULL,170)); pos.height = GDrawPointsToPixels(NULL,90); chd.gw = gw = GDrawCreateTopWindow(NULL,&pos,chd_e_h,&chd,&wattrs); memset(&label,0,sizeof(label)); memset(&gcd,0,sizeof(gcd)); memset(&boxes,0,sizeof(boxes)); label[0].text = (unichar_t *) _("_Base:"); 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 = 17+5+6; gcd[0].gd.flags = gg_enabled|gg_visible; gcd[0].creator = GLabelCreate; harray2[0] = GCD_Glue; harray2[1] = &gcd[0]; sprintf( buffer, "%g", (double) (ishstem ? cv->p.cy : cv->p.cx) ); label[1].text = (unichar_t *) buffer; label[1].text_is_1byte = true; gcd[1].gd.label = &label[1]; gcd[1].gd.pos.x = 37; gcd[1].gd.pos.y = 17+5; gcd[1].gd.pos.width = 40; gcd[1].gd.flags = gg_enabled|gg_visible; gcd[1].gd.cid = CID_Base; gcd[1].creator = GTextFieldCreate; harray2[2] = &gcd[1]; label[2].text = (unichar_t *) _("_Size:"); label[2].text_is_1byte = true; label[2].text_in_resource = true; gcd[2].gd.label = &label[2]; gcd[2].gd.pos.x = 90; gcd[2].gd.pos.y = 17+5+6; gcd[2].gd.flags = gg_enabled|gg_visible; gcd[2].creator = GLabelCreate; harray2[3] = GCD_Glue; harray2[4] = &gcd[2]; label[3].text = (unichar_t *) "60"; label[3].text_is_1byte = true; gcd[3].gd.label = &label[3]; gcd[3].gd.pos.x = 120; gcd[3].gd.pos.y = 17+5; gcd[3].gd.pos.width = 40; gcd[3].gd.flags = gg_enabled|gg_visible; gcd[3].gd.cid = CID_Width; gcd[3].creator = GTextFieldCreate; harray2[5] = &gcd[3]; harray2[6] = GCD_Glue; harray2[7] = NULL; gcd[4].gd.pos.x = 20-3; gcd[4].gd.pos.y = 17+37; gcd[4].gd.pos.width = -1; gcd[4].gd.pos.height = 0; gcd[4].gd.flags = gg_visible | gg_enabled | gg_but_default; label[4].text = (unichar_t *) _("_OK"); label[4].text_is_1byte = true; label[4].text_in_resource = true; gcd[4].gd.mnemonic = 'O'; gcd[4].gd.label = &label[4]; gcd[4].gd.handle_controlevent = CH_OK; gcd[4].creator = GButtonCreate; barray[0] = GCD_Glue; barray[1] = &gcd[4]; barray[2] = GCD_Glue; gcd[5].gd.pos.x = -20; gcd[5].gd.pos.y = 17+37+3; gcd[5].gd.pos.width = -1; gcd[5].gd.pos.height = 0; gcd[5].gd.flags = gg_visible | gg_enabled | gg_but_cancel; label[5].text = (unichar_t *) _("_Cancel"); label[5].text_is_1byte = true; label[5].text_in_resource = true; gcd[5].gd.label = &label[5]; gcd[5].gd.mnemonic = 'C'; gcd[5].gd.handle_controlevent = CH_Cancel; gcd[5].creator = GButtonCreate; barray[3] = GCD_Glue; barray[4] = &gcd[5]; barray[5] = GCD_Glue; barray[6] = NULL; label[6].text = (unichar_t *) _("Create Horizontal Stem Hint"); /* Initialize to bigger size */ label[6].text_is_1byte = true; gcd[6].gd.label = &label[6]; gcd[6].gd.pos.x = 17; gcd[6].gd.pos.y = 5; gcd[6].gd.flags = gg_enabled|gg_visible; gcd[6].gd.cid = CID_Label; gcd[6].creator = GLabelCreate; harray1[0] = GCD_Glue; harray1[1] = &gcd[6]; harray1[2] = GCD_Glue; harray1[3] = NULL; gcd[7].gd.pos.x = 5; gcd[7].gd.pos.y = 17+31; gcd[7].gd.pos.width = 170-10; gcd[7].gd.flags = gg_enabled|gg_visible; gcd[7].creator = GLineCreate; boxes[2].gd.flags = gg_enabled|gg_visible; boxes[2].gd.u.boxelements = harray1; boxes[2].creator = GHBoxCreate; boxes[3].gd.flags = gg_enabled|gg_visible; boxes[3].gd.u.boxelements = harray2; boxes[3].creator = GHBoxCreate; boxes[4].gd.flags = gg_enabled|gg_visible; boxes[4].gd.u.boxelements = barray; boxes[4].creator = GHBoxCreate; varray[0][0] = &boxes[2]; varray[0][1] = NULL; varray[1][0] = &boxes[3]; varray[1][1] = NULL; varray[2][0] = &gcd[7]; varray[2][1] = NULL; varray[3][0] = &boxes[4]; varray[3][1] = NULL; varray[4][0] = 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[0]; boxes[0].creator = GHVGroupCreate; GGadgetsCreate(gw,boxes); GHVBoxSetExpandableCol(boxes[2].ret,gb_expandglue); GHVBoxSetExpandableCol(boxes[3].ret,gb_expandglue); GHVBoxSetExpandableCol(boxes[4].ret,gb_expandgluesame); GHVBoxFitWindow(boxes[0].ret); } else { gw = chd.gw; sprintf( buffer, "%g", (double) (ishstem ? cv->p.cy : cv->p.cx) ); uc_strcpy(ubuf,buffer); GGadgetSetTitle(GWidgetGetControl(gw,CID_Base),ubuf); GDrawSetTransientFor(gw,(GWindow) -1); } GGadgetSetTitle8(GWidgetGetControl(gw,CID_Label), ishstem ? _("Create Horizontal Stem Hint") : _("Create Vertical Stem Hint")); GWidgetIndicateFocusGadget(GWidgetGetControl(gw,CID_Base)); GTextFieldSelect(GWidgetGetControl(gw,CID_Base),0,-1); GWidgetHidePalettes(); GDrawSetVisible(gw,true); while ( !chd.done ) GDrawProcessOneEvent(NULL); GDrawSetVisible(gw,false); }