1 /* Copyright (C) 2000-2012 by George Williams */ 2 /* 3 * Redistribution and use in source and binary forms, with or without 4 * modification, are permitted provided that the following conditions are met: 5 6 * Redistributions of source code must retain the above copyright notice, this 7 * list of conditions and the following disclaimer. 8 9 * Redistributions in binary form must reproduce the above copyright notice, 10 * this list of conditions and the following disclaimer in the documentation 11 * and/or other materials provided with the distribution. 12 13 * The name of the author may not be used to endorse or promote products 14 * derived from this software without specific prior written permission. 15 16 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED 17 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 18 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO 19 * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 20 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 21 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; 22 * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 23 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 24 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 25 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 26 */ 27 28 #ifndef FONTFORGE_GGADGET_H 29 #define FONTFORGE_GGADGET_H 30 31 #include "gdraw.h" 32 #include "intl.h" 33 struct giocontrol; 34 35 #ifndef MAX 36 #define MAX(x,y) (((x) > (y)) ? (x) : (y)) 37 #endif 38 #ifndef MIN 39 #define MIN(x,y) (((x) < (y)) ? (x) : (y)) 40 #endif 41 42 typedef struct gtextinfo { 43 unichar_t *text; 44 GImage *image; 45 Color fg; 46 Color bg; 47 void *userdata; 48 GFont *font; 49 unsigned int disabled: 1; 50 unsigned int image_precedes: 1; 51 unsigned int checkable: 1; /* Only for menus */ 52 unsigned int checked: 1; /* Only for menus */ 53 unsigned int selected: 1; /* Only for lists (used internally for menu(bar)s, when cursor is on the line) */ 54 unsigned int line: 1; /* Only for menus */ 55 unsigned int text_is_1byte: 1; /* If passed in as 1byte (ie. iso-8859-1) text, will be converted */ 56 unsigned int text_in_resource: 1; /* the text field is actually an index into the string resource table */ 57 unsigned int changed: 1; /* If a row/column widget changed this */ 58 unichar_t mnemonic; /* Only for menus and menubars */ 59 /* should really be in menuitem, but that wastes space and complicates GTextInfoDraw */ 60 char* text_untranslated; /* used to simplify hotkey lookup for menus. */ 61 /* 62 * text_untranslated is either the GMenuItem2 shortcut or the GTextInfo prior 63 * to translation occurring. The shortcut text is considered first 64 * to allow the code to make the value explicit. This is useful in 65 * cases where the menu text to be translated (GTextInfo.text 66 * prior to calling sgettext() on it) is specially designed for 67 * translation, like File|New is. Having the hotkey of "New|No 68 * Shortcut" will give a text_untranslated of "New|No Shortcut". 69 * See HKTextInfoToUntranslatedText() for stripping out any 70 * potential underscore and the trailing "|Rest" string. 71 * 72 * Using a pointer like this relies on the GMenuItems used to make 73 * the menus are a static structure that outlasts the 74 * menu/gtextinfo itself. 75 **/ 76 } GTextInfo; 77 78 #define GTEXTINFO_EMPTY { NULL, NULL, 0x000000, 0x000000, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, '\0' } 79 80 81 typedef struct gtextinfo2 { 82 unichar_t *text; 83 GImage *image; 84 Color fg; 85 Color bg; 86 void *userdata; 87 GFont *font; 88 unsigned int disabled: 1; 89 unsigned int image_precedes: 1; 90 unsigned int checkable: 1; /* Only for menus */ 91 unsigned int checked: 1; /* Only for menus */ 92 unsigned int selected: 1; /* Only for lists (used internally for menu(bar)s, when cursor is on the line) */ 93 unsigned int line: 1; /* Only for menus */ 94 unsigned int text_is_1byte: 1; /* If passed in as 1byte (ie. iso-8859-1) text, will be converted */ 95 unsigned int text_in_resource: 1; /* the text field is actually an index into the string resource table */ 96 unsigned int changed: 1; /* If a row/column widget changed this */ 97 unsigned int sort_me_first_in_list: 1; /* used for directories in file chooser widgets */ 98 unichar_t mnemonic; /* Only for menus and menubars */ 99 /* should really be in menuitem, but that wastes space and complicates GTextInfoDraw */ 100 } GTextInfo2; 101 102 #define GTEXTINFO2_EMPTY { NULL, NULL, 0x000000, 0x000000, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '\0' } 103 104 105 typedef struct gmenuitem { 106 GTextInfo ti; 107 unichar_t shortcut; 108 short short_mask; 109 struct gmenuitem *sub; 110 void (*moveto)(struct gwindow *base,struct gmenuitem *mi,GEvent *); /* called before creating submenu */ 111 void (*invoke)(struct gwindow *base,struct gmenuitem *mi,GEvent *); /* called on mouse release */ 112 int mid; 113 } GMenuItem; 114 115 #define GMENUITEM_LINE { { NULL, NULL, COLOR_DEFAULT, COLOR_DEFAULT, NULL, NULL, 0, 1, 0, 0, 0, 1, 0, 0, 0, '\0' }, '\0', 0, NULL, NULL, NULL, 0 } 116 #define GMENUITEM_EMPTY { GTEXTINFO_EMPTY, '\0', 0, NULL, NULL, NULL, 0 } 117 118 119 typedef struct gmenuitem2 { 120 GTextInfo ti; 121 char *shortcut; 122 struct gmenuitem2 *sub; 123 void (*moveto)(struct gwindow *base,struct gmenuitem *mi,GEvent *); /* called before creating submenu */ 124 void (*invoke)(struct gwindow *base,struct gmenuitem *mi,GEvent *); /* called on mouse release */ 125 int mid; 126 } GMenuItem2; 127 128 #define GMENUITEM2_LINE { { NULL, NULL, COLOR_DEFAULT, COLOR_DEFAULT, NULL, NULL, 0, 1, 0, 0, 0, 1, 0, 0, 0, '\0' }, NULL, NULL, NULL, NULL, 0 } 129 #define GMENUITEM2_EMPTY { GTEXTINFO_EMPTY, NULL, NULL, NULL, NULL, 0 } 130 131 typedef struct tabinfo { 132 unichar_t *text; 133 struct ggadgetcreatedata *gcd; 134 unsigned int disabled: 1; 135 unsigned int selected: 1; 136 unsigned int text_is_1byte: 1; /* If passed in as 1byte (ie. iso-8859-1) text, will be converted */ 137 unsigned int text_in_resource: 1; /* the text field is actually an index into the string resource table */ 138 unsigned char nesting; 139 } GTabInfo; 140 141 #define GTABINFO_EMPTY { NULL, NULL, 0, 0, 0, 0, 0 } 142 143 144 enum border_type { bt_none, bt_box, bt_raised, bt_lowered, bt_engraved, 145 bt_embossed, bt_double }; 146 enum border_shape { bs_rect, bs_roundrect, bs_elipse, bs_diamond }; 147 enum box_flags { 148 box_foreground_border_inner = 1, /* 1 point line */ 149 box_foreground_border_outer = 2, /* 1 point line */ 150 box_active_border_inner = 4, /* 1 point line */ 151 box_foreground_shadow_outer = 8, /* 1 point line, bottom&right */ 152 box_do_depressed_background = 0x10, 153 box_draw_default = 0x20, /* if a default button draw a depressed rect around button */ 154 box_generate_colors = 0x40, /* use border_brightest to compute other border cols */ 155 box_gradient_bg = 0x80 156 }; 157 typedef struct gbox { 158 unsigned char border_type; 159 unsigned char border_shape; 160 unsigned char border_width; /* In points */ 161 unsigned char padding; /* In points */ 162 unsigned char rr_radius; /* In points */ 163 unsigned char flags; 164 Color border_brightest; /* used for left upper part of elipse */ 165 Color border_brighter; 166 Color border_darkest; /* used for right lower part of elipse */ 167 Color border_darker; 168 Color main_background; 169 Color main_foreground; 170 Color disabled_background; 171 Color disabled_foreground; 172 Color active_border; 173 Color depressed_background; 174 Color gradient_bg_end; 175 Color border_inner; 176 Color border_outer; 177 } GBox; 178 179 #define GBOX_EMPTY { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ,0 ,0 ,0 ,0 } 180 181 182 typedef struct ggadget GGadget; 183 typedef struct ggadget *GGadgetSet; 184 185 enum sb_type { sb_upline, sb_downline, sb_uppage, sb_downpage, sb_track, sb_trackrelease }; 186 struct scrollbarinit { int32 sb_min, sb_max, sb_pagesize, sb_pos; }; 187 188 typedef int (*GGadgetHandler)(GGadget *,GEvent *); 189 typedef unichar_t **(*GTextCompletionHandler)(GGadget *,int from_tab); 190 191 enum gg_flags { gg_visible=1, gg_enabled=2, gg_pos_in_pixels=4, 192 gg_sb_vert=8, gg_line_vert=gg_sb_vert, 193 gg_but_default=0x10, gg_but_cancel=0x20, 194 gg_cb_on=0x40, gg_rad_startnew=0x80, 195 gg_rad_continueold=0x100, /* even if not previous */ 196 gg_list_alphabetic=0x100, gg_list_multiplesel=0x200, 197 gg_list_exactlyone=0x400, gg_list_internal=0x800, 198 gg_group_prevlabel=0x1000, gg_group_end=0x2000, 199 gg_textarea_wrap=0x4000, 200 gg_tabset_scroll=0x8000, gg_tabset_filllines=0x10000, gg_tabset_fill1line = 0x20000, 201 gg_tabset_nowindow=gg_textarea_wrap, 202 gg_rowcol_alphabetic=gg_list_alphabetic, 203 gg_rowcol_vrules=0x40000, gg_rowcol_hrules=0x800000, 204 gg_rowcol_displayonly=0x1000000, 205 gg_dontcopybox=0x10000000, 206 gg_pos_use0=0x20000000, gg_pos_under=0x40000000, 207 gg_pos_newline = (int) 0x80000000, 208 /* Reuse some flag values for different widgets */ 209 gg_file_pulldown=gg_sb_vert, gg_file_multiple = gg_list_multiplesel, 210 gg_text_xim = gg_tabset_scroll, 211 gg_tabset_vert = gg_sb_vert 212 }; 213 214 typedef struct ggadgetdata { 215 GRect pos; 216 GBox *box; 217 unichar_t mnemonic; 218 unichar_t shortcut; 219 uint8 short_mask; 220 uint8 cols; /* for rowcol */ 221 short cid; 222 GTextInfo *label; /* Overloaded with a GGadgetCreateData * for hvboxes (their label is a gadget) */ 223 union { 224 GTextInfo *list; /* for List Widgets (and ListButtons, RowCols etc) */ 225 GTabInfo *tabs; /* for Tab Widgets */ 226 GMenuItem *menu; /* for menus */ 227 GMenuItem2 *menu2; /* for menus (alternate) */ 228 struct ggadgetcreatedata **boxelements; /* An array of things to go in the box */ 229 struct matrixinit *matrix; 230 GDrawEH drawable_e_h; /* Drawable event handler */ 231 GTextCompletionHandler completion; 232 struct scrollbarinit *sbinit; 233 Color col; 234 int radiogroup; 235 } u; 236 enum gg_flags flags; 237 const char *popup_msg; /* Brief help message, utf-8 encoded */ 238 GGadgetHandler handle_controlevent; 239 } GGadgetData; 240 241 #define GGADGETDATA_EMPTY { GRECT_EMPTY, NULL, '\0', '\0', 0, 0, 0, NULL, { NULL }, 0, NULL, NULL } 242 243 244 typedef struct ggadgetcreatedata { 245 GGadget *(*creator)(struct gwindow *base, GGadgetData *gd,void *data); 246 GGadgetData gd; 247 void *data; 248 GGadget *ret; 249 } GGadgetCreateData; 250 251 #define GGADGETCREATEDATA_EMPTY { NULL, GGADGETDATA_EMPTY, NULL, NULL } 252 253 254 #define GCD_Glue ((GGadgetCreateData *) -1) /* Special entries */ 255 #define GCD_ColSpan ((GGadgetCreateData *) -2) /* for box elements */ 256 #define GCD_RowSpan ((GGadgetCreateData *) -3) 257 #define GCD_HPad10 ((GGadgetCreateData *) -4) 258 259 enum ghvbox_expand { gb_expandglue=-4, gb_expandgluesame=-3, gb_samesize=-2, 260 gb_expandall=-1 }; 261 enum editor_commands { ec_cut, ec_clear, ec_copy, ec_paste, ec_undo, ec_redo, 262 ec_selectall, ec_search, ec_backsearch, ec_backword, ec_deleteword, 263 ec_max }; 264 265 /* return values from file chooser filter functions */ 266 enum fchooserret { fc_hide, fc_show, fc_showdisabled }; 267 268 enum me_type { me_int, me_enum, me_real, me_string, me_bigstr, me_func, 269 me_funcedit, 270 me_stringchoice, me_stringchoicetrans, me_stringchoicetag, 271 me_button, 272 me_hex, me_uhex, me_addr, me_onlyfuncedit }; 273 274 struct col_init { 275 enum me_type me_type; 276 char *(*func)(GGadget *,int r,int c); 277 GTextInfo *enum_vals; 278 void (*enable_enum)(GGadget *,GMenuItem *, int r, int c); 279 char *title; 280 }; 281 282 struct matrix_data { 283 union { 284 intpt md_ival; 285 double md_real; 286 char *md_str; 287 void *md_addr; 288 } u; 289 uint8 frozen; 290 uint8 user_bits; 291 uint8 current; 292 }; 293 294 struct matrixinit { 295 int col_cnt; 296 struct col_init *col_init; 297 int initial_row_cnt; 298 struct matrix_data *matrix_data; 299 void (*initrow)(GGadget *g,int row); 300 int (*candelete)(GGadget *g,int row); 301 void (*finishedit)(GGadget *g,int r, int c, int wasnew); 302 void (*popupmenu)(GGadget *g,GEvent *e,int row,int col); 303 int (*handle_key)(GGadget *g,GEvent *e); 304 char *(*bigedittitle)(GGadget *g,int r, int c); 305 }; 306 307 #define COL_INIT_EMPTY { 0, NULL, NULL, NULL, NULL } 308 #define MATRIX_DATA_EMPTY { { 0 }, 0, 0, 0 } 309 #define MATRIXINIT_EMPTY { 0, NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL } 310 311 #define GME_NoChange 0x80000000 312 313 struct gdirentry; 314 typedef enum fchooserret (*GFileChooserFilterType)(GGadget *g,struct gdirentry *ent, 315 const unichar_t *dir); 316 typedef int (*GFileChooserInputFilenameFuncType)( GGadget *g, 317 const unichar_t ** currentFilename, 318 unichar_t* oldfilename ); 319 320 /* Obsolete */ 321 #define _STR_NULL (-1) /* Null string resource */ 322 #define _STR_Language 0 323 #define _STR_OK 1 324 #define _STR_Cancel 2 325 #define _STR_Open 3 326 #define _STR_Save 4 327 #define _STR_Filter 5 328 #define _STR_New 6 329 #define _STR_Replace 7 330 #define _STR_Fileexists 8 331 #define _STR_Fileexistspre 9 332 #define _STR_Fileexistspost 10 333 #define _STR_Createdir 11 334 #define _STR_Dirname 12 335 #define _STR_Couldntcreatedir 13 336 #define _STR_SelectAll 14 337 #define _STR_None 15 338 #define __STR_LastStd 15 339 340 #define _NUM_Buttonsize 0 341 #define _NUM_ScaleFactor 1 342 #define __NUM_LastStd 1 343 344 extern void GTextInfoFree(GTextInfo *ti); 345 extern void GTextInfoListFree(GTextInfo *ti); 346 extern void GTextInfoArrayFree(GTextInfo **ti); 347 extern GTextInfo **GTextInfoFromChars(char **array, int len); 348 extern const unichar_t *GStringGetResource(int index,unichar_t *mnemonic); 349 extern int GGadgetScale(int xpos); 350 extern int GIntGetResource(int index); 351 extern int GStringSetResourceFileV(char *filename,uint32 checksum); 352 extern int GStringSetResourceFile(char *filename); /* returns 1 for success, 0 for failure */ 353 /* fallback string arrays are null terminated. mnemonics is same length as string */ 354 /* fallback integer arrays are terminated by 0x80000000 (negative infinity) */ 355 extern void GStringSetFallbackArray(const unichar_t **array,const unichar_t *mn, 356 const int *ires); 357 unichar_t *GStringFileGetResource(char *filename, int index,unichar_t *mnemonic); 358 extern void GResourceUseGetText(void); 359 extern void *GResource_font_cvt(char *val, void *def); 360 extern FontInstance *GResourceFindFont(char *resourcename,FontInstance *deffont); 361 362 void GGadgetDestroy(GGadget *g); 363 void GGadgetSetVisible(GGadget *g,int visible); 364 int GGadgetIsVisible(GGadget *g); 365 void GGadgetSetEnabled(GGadget *g,int enabled); 366 int GGadgetIsEnabled(GGadget *g); 367 GWindow GGadgetGetWindow(GGadget *g); 368 void *GGadgetGetUserData(GGadget *g); 369 void GGadgetSetUserData(GGadget *g, void *d); 370 void GGadgetSetPopupMsg(GGadget *g, const unichar_t *msg); 371 int GGadgetContains(GGadget *g, int x, int y ); 372 int GGadgetContainsEventLocation(GGadget *g, GEvent* e ); 373 GRect *GGadgetGetInnerSize(GGadget *g,GRect *rct); 374 GRect *GGadgetGetSize(GGadget *g,GRect *rct); 375 void GGadgetSetSize(GGadget *g,GRect *rct); 376 void GGadgetGetDesiredVisibleSize(GGadget *g,GRect *outer, GRect *inner); 377 void GGadgetGetDesiredSize(GGadget *g,GRect *outer, GRect *inner); 378 void GGadgetSetDesiredSize(GGadget *g,GRect *outer, GRect *inner); 379 int GGadgetGetCid(GGadget *g); 380 void GGadgetResize(GGadget *g,int32 width, int32 height ); 381 void GGadgetMove(GGadget *g,int32 x, int32 y ); 382 void GGadgetMoveAddToY(GGadget *g, int32 yoffset ); 383 int32 GGadgetGetX(GGadget *g); 384 int32 GGadgetGetY(GGadget *g); 385 void GGadgetSetY(GGadget *g, int32 y ); 386 void GGadgetRedraw(GGadget *g); 387 void GGadgetsCreate(GWindow base, GGadgetCreateData *gcd); 388 int GGadgetFillsWindow(GGadget *g); 389 int GGadgetIsDefault(GGadget *g); 390 391 void GGadgetSetTitle(GGadget *g,const unichar_t *title); 392 void GGadgetSetTitle8(GGadget *g,const char *title); 393 void GGadgetSetTitle8WithMn(GGadget *g,const char *title); 394 const unichar_t *_GGadgetGetTitle(GGadget *g); /* Do not free!!! */ 395 unichar_t *GGadgetGetTitle(GGadget *g); /* Free the return */ 396 char *GGadgetGetTitle8(GGadget *g); /* Free the return (utf8) */ 397 void GGadgetSetFont(GGadget *g,GFont *font); 398 GFont *GGadgetGetFont(GGadget *g); 399 int GGadgetEditCmd(GGadget *g,enum editor_commands cmd); 400 int GGadgetActiveGadgetEditCmd(GWindow gw,enum editor_commands cmd); 401 void GGadgetSetHandler(GGadget *g, GGadgetHandler handler); 402 GGadgetHandler GGadgetGetHandler(GGadget *g); 403 404 void GTextFieldSelect(GGadget *g,int sel_start, int sel_end); 405 void GTextFieldShow(GGadget *g,int pos); 406 void GTextFieldReplace(GGadget *g,const unichar_t *txt); 407 bool GTextFieldIsEmpty(GGadget *g); 408 void GCompletionFieldSetCompletion(GGadget *g,GTextCompletionHandler completion); 409 void GCompletionFieldSetCompletionMode(GGadget *g,int enabled); 410 void GGadgetClearList(GGadget *g); 411 void GGadgetSetList(GGadget *g, GTextInfo **ti, int32 copyit); 412 GTextInfo **GGadgetGetList(GGadget *g,int32 *len); /* Do not free!!! */ 413 GTextInfo *GGadgetGetListItem(GGadget *g,int32 pos); 414 GTextInfo *GGadgetGetListItemSelected(GGadget *g); 415 void GGadgetSelectListItem(GGadget *g,int32 pos,int32 sel); 416 void GGadgetSelectOneListItem(GGadget *g,int32 pos); 417 int32 GGadgetIsListItemSelected(GGadget *g,int32 pos); 418 int32 GGadgetGetFirstListSelectedItem(GGadget *g); 419 void GGadgetScrollListToPos(GGadget *g,int32 pos); 420 void GGadgetScrollListToText(GGadget *g,const unichar_t *lab,int32 sel); 421 void GGadgetSetListOrderer(GGadget *g,int (*orderer)(const void *, const void *)); 422 423 void GColorButtonSetColor(GGadget *g, Color col); 424 Color GColorButtonGetColor(GGadget *g); 425 426 void GGadgetSetChecked(GGadget *g, int ison); 427 int GGadgetIsChecked(GGadget *g); 428 429 int GListIndexFromY(GGadget *g,int y); 430 void GListSetSBAlwaysVisible(GGadget *g,int always); 431 void GListSetPopupCallback(GGadget *g,void (*callback)(GGadget *,int)); 432 433 int GTabSetGetTabCount(GGadget *g); 434 int GTabSetGetSel(GGadget *g); 435 void GTabSetSetSel(GGadget *g,int sel); 436 void GTabSetSetEnabled(GGadget *g,int pos, int enabled); 437 GWindow GTabSetGetSubwindow(GGadget *g,int pos); 438 int GTabSetGetTabLines(GGadget *g); 439 void GTabSetSetClosable(GGadget *g, bool flag); 440 void GTabSetSetMovable(GGadget *g, bool flag); 441 void GTabSetSetNestedExpose(GGadget *g, void (*)(GWindow,GGadget *,GEvent *)); 442 void GTabSetSetNestedMouse(GGadget *g, int (*)(GGadget *,GEvent *)); 443 void GTabSetSetRemoveSync(GGadget *g, void (*rs)(GWindow gw, int pos)); 444 void GTabSetSetSwapSync(GGadget *g, void (*ss)(GWindow gw, int pos_a, int pos_b)); 445 void GTabSetChangeTabName(GGadget *g, const char *name, int pos); 446 void GTabSetRemetric(GGadget *g); 447 void GTabSetSwapTabs(GGadget *g, int pos_a, int pos_b); 448 void GTabSetRemoveTabByPos(GGadget *g, int pos); 449 void GTabSetRemoveTabByName(GGadget *g, char *name); 450 451 int32 GScrollBarGetPos(GGadget *g); 452 int32 GScrollBarSetPos(GGadget *g,int32 pos); 453 int32 GScrollBarAddToPos(GGadget *g,int32 offset); 454 void GScrollBarSetMustShow(GGadget *g, int32 sb_min, int32 sb_max, int32 sb_pagesize, 455 int32 sb_mustshow); 456 void GScrollBarSetBounds(GGadget *g, int32 sb_min, int32 sb_max, int32 sb_pagesize ); 457 void GScrollBarGetBounds(GGadget *g, int32 *sb_min, int32 *sb_max, int32 *sb_pagesize ); 458 459 void GMenuBarSetItemChecked(GGadget *g, int mid, int check); 460 void GMenuBarSetItemEnabled(GGadget *g, int mid, int enabled); 461 void GMenuBarSetItemName(GGadget *g, int mid, const unichar_t *name); 462 void GMenuSetShortcutDomain(char *domain); 463 const char *GMenuGetShortcutDomain(void); 464 int GMenuIsCommand(GEvent *event,char *shortcut); 465 int GMenuMask(void); 466 int GMenuAnyUnmaskedShortcuts(GGadget *mb1, GGadget *mb2); 467 468 469 void GFileChooserPopupCheck(GGadget *g,GEvent *e); 470 void GFileChooserFilterIt(GGadget *g); 471 void GFileChooserRefreshList(GGadget *g); 472 int GFileChooserFilterEh(GGadget *g,GEvent *e); 473 void GFileChooserConnectButtons(GGadget *g,GGadget *ok, GGadget *filter); 474 void GFileChooserSetFilterText(GGadget *g,const unichar_t *filter); 475 void GFileChooserSetFilterFunc(GGadget *g,GFileChooserFilterType filter); 476 void GFileChooserSetInputFilenameFunc(GGadget *g,GFileChooserInputFilenameFuncType filter); 477 int GFileChooserDefInputFilenameFunc( GGadget *g, const unichar_t** currentFilename, unichar_t* oldfilename ); 478 GFileChooserInputFilenameFuncType GFileChooserGetInputFilenameFunc(GGadget *g); 479 void GFileChooserSetDir(GGadget *g,unichar_t *dir); 480 struct giocontrol *GFileChooserReplaceIO(GGadget *g,struct giocontrol *gc); 481 unichar_t *GFileChooserGetDir(GGadget *g); 482 unichar_t *GFileChooserGetFilterText(GGadget *g); 483 GFileChooserFilterType GFileChooserGetFilterFunc(GGadget *g); 484 void GFileChooserSetFilename(GGadget *g,const unichar_t *defaultfile); 485 void GFileChooserSetMimetypes(GGadget *g,unichar_t **mimetypes); 486 unichar_t **GFileChooserGetMimetypes(GGadget *g); 487 void GFileChooserGetChildren(GGadget *g,GGadget **pulldown, GGadget **list, GGadget **tf); 488 int GFileChooserPosIsDir(GGadget *g, int pos); 489 unichar_t *GFileChooserFileNameOfPos(GGadget *g, int pos); 490 void GFileChooserSetShowHidden(int sh); 491 int GFileChooserGetShowHidden(void); 492 void GFileChooserSetDirectoryPlacement(int dp); 493 int GFileChooserGetDirectoryPlacement(void); 494 void GFileChooserSetBookmarks(unichar_t **b); 495 void GFileChooserSetPaths(GGadget *g, const char* const* path); 496 unichar_t **GFileChooserGetBookmarks(void); 497 void GFileChooserSetPrefsChangedCallback(void *data, void (*p_c)(void *)); 498 499 void GHVBoxSetExpandableCol(GGadget *g,int col); 500 void GHVBoxSetExpandableRow(GGadget *g,int row); 501 void GHVBoxSetPadding(GGadget *g,int hpad, int vpad); 502 void GHVBoxFitWindow(GGadget *g); 503 void GHVBoxFitWindowCentered(GGadget *g); 504 void GHVBoxReflow(GGadget *g); 505 506 void GMatrixEditSet(GGadget *g,struct matrix_data *data, int rows, int copy_it); 507 struct matrix_data *GMatrixEditGet(GGadget *g, int *rows); 508 struct matrix_data *_GMatrixEditGet(GGadget *g, int *rows); 509 GGadget *_GMatrixEditGetActiveTextField(GGadget *g); 510 int GMatrixEditGetColCnt(GGadget *g); 511 int GMatrixEditGetActiveRow(GGadget *g); 512 int GMatrixEditGetActiveCol(GGadget *g); 513 void GMatrixEditActivateRowCol(GGadget *g, int r, int c); 514 void GMatrixEditDeleteRow(GGadget *g,int row); 515 void GMatrixEditScrollToRowCol(GGadget *g,int r, int c); 516 int GMatrixEditStringDlg(GGadget *g,int row,int col); 517 void GMatrixEditSetNewText(GGadget *g, char *text); 518 void GMatrixEditSetOtherButtonEnable(GGadget *g, void (*sob)(GGadget *g, int r, int c)); 519 void GMatrixEditSetMouseMoveReporter(GGadget *g, void (*rmm)(GGadget *g, int r, int c)); 520 void GMatrixEditSetTextChangeReporter(GGadget *g, void (*tcr)(GGadget *g, int r, int c, GGadget *text)); 521 void GMatrixEditSetValidateStr(GGadget *g, char *(*validate)(GGadget *g, int r, int c, int wasnew, char *str)); 522 void GMatrixEditSetBeforeDelete(GGadget *g, void (*predelete)(GGadget *g, int r)); 523 void GMatrixEditSetRowMotionCallback(GGadget *g, void (*rowmotion)(GGadget *g, int oldr, int newr)); 524 void GMatrixEditUp(GGadget *g); 525 void GMatrixEditDown(GGadget *g); 526 enum gme_updown { ud_up_enabled=1, ud_down_enabled=2 }; 527 void GMatrixEditSetCanUpDown(GGadget *g, enum gme_updown (*canupdown)(GGadget *g, int r)); 528 void GMatrixEditSetUpDownVisible(GGadget *g, int visible); 529 void GMatrixEditAddButtons(GGadget *g, GGadgetCreateData *gcd); 530 void GMatrixEditEnableColumn(GGadget *g, int col, int enabled); 531 void GMatrixEditShowColumn(GGadget *g, int col, int visible); 532 void GMatrixEditSetColumnChoices(GGadget *g, int col, GTextInfo *ti); 533 GMenuItem *GMatrixEditGetColumnChoices(GGadget *g, int col); 534 void GMatrixEditSetColumnCompletion(GGadget *g, int col, GTextCompletionHandler completion); 535 void GMatrixEditSetEditable(GGadget *g, int editable); 536 537 GWindow GDrawableGetWindow(GGadget *g); 538 539 540 extern void GGadgetPreparePopupImage(GWindow base,const unichar_t *msg, 541 const void *data, 542 GImage *(*get_image)(const void *data), 543 void (*free_image)(const void *data,GImage *img)); 544 extern void GGadgetPreparePopup(GWindow base,const unichar_t *msg); 545 extern void GGadgetPreparePopupR(GWindow base,int msg); 546 extern void GGadgetPreparePopup8(GWindow base, const char *msg); 547 extern void GGadgetEndPopup(void); 548 extern void GGadgetPopupExternalEvent(GEvent *e); 549 550 extern int GGadgetDispatchEvent(GGadget *g,GEvent *e); 551 extern void GGadgetTakesKeyboard(GGadget *g, int takes_keyboard); 552 553 /* Handles *?{}[] wildcards */ 554 int GGadgetWildMatch(unichar_t *pattern, unichar_t *name,int ignorecase); 555 enum fchooserret GFileChooserDefFilter(GGadget *g,struct gdirentry *ent, 556 const unichar_t *dir); 557 558 GWindow GMenuCreatePopupMenu(GWindow owner,GEvent *event, GMenuItem *mi); 559 GWindow GMenuCreatePopupMenuWithName(GWindow owner,GEvent *event, char* subMenuName,GMenuItem *mi); 560 GWindow _GMenuCreatePopupMenu(GWindow owner,GEvent *event, GMenuItem *mi, 561 void (*donecallback)(GWindow owner)); 562 GWindow _GMenuCreatePopupMenuWithName(GWindow owner,GEvent *event, GMenuItem *mi, 563 char* subMenuName, 564 void (*donecallback)(GWindow owner)); 565 566 567 GGadget *GLineCreate(struct gwindow *base, GGadgetData *gd,void *data); 568 GGadget *GGroupCreate(struct gwindow *base, GGadgetData *gd,void *data); 569 GGadget *GSpacerCreate(struct gwindow *base, GGadgetData *gd,void *data); 570 GGadget *GLabelCreate(struct gwindow *base, GGadgetData *gd,void *data); 571 GGadget *GButtonCreate(struct gwindow *base, GGadgetData *gd,void *data); 572 GGadget *GImageButtonCreate(struct gwindow *base, GGadgetData *gd,void *data); 573 GGadget *GListButtonCreate(struct gwindow *base, GGadgetData *gd,void *data); 574 GGadget *GColorButtonCreate(struct gwindow *base, GGadgetData *gd,void *data); 575 GGadget *GRadioCreate(struct gwindow *base, GGadgetData *gd,void *data); 576 GGadget *GCheckBoxCreate(struct gwindow *base, GGadgetData *gd,void *data); 577 GGadget *GVisibilityBoxCreate(struct gwindow *base, GGadgetData *gd,void *data); 578 GGadget *GScrollBarCreate(struct gwindow *base, GGadgetData *gd,void *data); 579 GGadget *GListCreate(struct gwindow *base, GGadgetData *gd,void *data); 580 GGadget *GTextFieldCreate(struct gwindow *base, GGadgetData *gd,void *data); 581 GGadget *GPasswordCreate(struct gwindow *base, GGadgetData *gd,void *data); 582 GGadget *GNumericFieldCreate(struct gwindow *base, GGadgetData *gd,void *data); 583 GGadget *GTextCompletionCreate(struct gwindow *base, GGadgetData *gd,void *data); 584 GGadget *GTextAreaCreate(struct gwindow *base, GGadgetData *gd,void *data); 585 GGadget *GListFieldCreate(struct gwindow *base, GGadgetData *gd,void *data); 586 GGadget *GSimpleListFieldCreate(struct gwindow *base, GGadgetData *gd,void *data); 587 GGadget *GMenuBarCreate(struct gwindow *base, GGadgetData *gd,void *data); 588 GGadget *GMenu2BarCreate(struct gwindow *base, GGadgetData *gd,void *data); 589 GGadget *GTabSetCreate(struct gwindow *base, GGadgetData *gd,void *data); 590 GGadget *GFileChooserCreate(struct gwindow *base, GGadgetData *gd,void *data); 591 GGadget *GHBoxCreate(struct gwindow *base, GGadgetData *gd,void *data); 592 GGadget *GVBoxCreate(struct gwindow *base, GGadgetData *gd,void *data); 593 GGadget *GHVBoxCreate(struct gwindow *base, GGadgetData *gd,void *data); 594 GGadget *GHVGroupCreate(struct gwindow *base, GGadgetData *gd,void *data); 595 GGadget *GMatrixEditCreate(struct gwindow *base, GGadgetData *gd,void *data); 596 GGadget *GDrawableCreate(struct gwindow *base, GGadgetData *gd,void *data); 597 598 GGadget *CreateSlider(struct gwindow *base, GGadgetData *gd,void *data); 599 GGadget *CreateFileChooser(struct gwindow *base, GGadgetData *gd,void *data); 600 GGadget *CreateGadgets(struct gwindow *base, GGadgetCreateData *gcd); 601 602 GTextInfo **GTextInfoArrayFromList(GTextInfo *ti, uint16 *cnt); 603 typedef struct gresimage { 604 GImage *image; 605 char *filename; 606 } GResImage; 607 GResImage *GGadgetResourceFindImage(char *name, GImage *def); 608 609 void InitImageCache(); 610 void ClearImageCache(); 611 void GGadgetSetImageDir(char *dir); 612 void GGadgetSetImagePath(char *path); 613 GImage *GGadgetImageCache(const char *filename); 614 int TryGGadgetImageCache(GImage *image, const char *name); 615 616 extern unichar_t *utf82u_mncopy(const char *utf8buf,unichar_t *mn); 617 618 extern double GetCalmReal8(GWindow gw,int cid,char *namer,int *err); 619 extern double GetReal8(GWindow gw,int cid,char *namer,int *err); 620 extern int GetCalmInt8(GWindow gw,int cid,char *name,int *err); 621 extern int GetInt8(GWindow gw,int cid,char *namer,int *err); 622 extern int GetUnicodeChar8(GWindow gw,int cid,char *namer,int *err); 623 extern void GGadgetProtest8(char *labelr); 624 625 extern void GMenuItemParseShortCut(GMenuItem *mi,char *shortcut); 626 extern int GMenuItemParseMask(char *shortcut); 627 extern int GGadgetUndoMacEnglishOptionCombinations(GEvent *event); 628 629 /* Among other things, this routine sets global icon cache up. */ 630 extern void GGadgetInit(void); 631 extern int GGadgetWithin(GGadget *g, int x, int y); 632 extern void GMenuItemArrayFree(GMenuItem *mi); 633 extern void GMenuItem2ArrayFree(GMenuItem2 *mi); 634 extern GMenuItem *GMenuItemArrayCopy(GMenuItem *mi, uint16 *cnt); 635 extern GMenuItem *GMenuItem2ArrayCopy(GMenuItem2 *mi, uint16 *cnt); 636 637 extern void GVisibilityBoxSetToMinWH(GGadget *g); 638 639 extern void GGadgetSetSkipHotkeyProcessing( GGadget *g, int v ); 640 extern int GGadgetGetSkipHotkeyProcessing( GGadget *g ); 641 extern void GGadgetSetSkipUnQualifiedHotkeyProcessing( GGadget *g, int v ); 642 extern int GGadgetGetSkipUnQualifiedHotkeyProcessing( GGadget *g ); 643 644 #endif /* FONTFORGE_GGADGET_H */ 645