static void ami_menu_alloc_item(struct gui_window_2 *gwin, int num, UBYTE type, const char *label, char key, char *icon, void *func, void *hookdata) { char menu_icon[1024]; gwin->menutype[num] = type; if((label == NM_BARLABEL) || (strcmp(label, "--") == 0)) { gwin->menulab[num] = NM_BARLABEL; } else { if((num >= AMI_MENU_HOTLIST) && (num <= AMI_MENU_HOTLIST_MAX)) { gwin->menulab[num] = ami_utf8_easy(label); } else if((num >= AMI_MENU_AREXX) && (num <= AMI_MENU_AREXX_MAX)) { gwin->menulab[num] = strdup(label); } else { gwin->menulab[num] = ami_utf8_easy(messages_get(label)); } } gwin->menuicon[num] = NULL; if(key) gwin->menukey[num] = key; if(func) gwin->menu_hook[num].h_Entry = (HOOKFUNC)func; if(hookdata) gwin->menu_hook[num].h_Data = hookdata; if(icon) { if(ami_locate_resource(menu_icon, icon) == true) gwin->menuicon[num] = (char *)strdup(menu_icon); } }
int32 ami_warn_user_multi(const char *body, const char *opt1, const char *opt2, struct Window *win) { int res = 0; char *utf8text = ami_utf8_easy(body); char *utf8gadget1 = ami_utf8_easy(messages_get(opt1)); char *utf8gadget2 = ami_utf8_easy(messages_get(opt2)); char *utf8gadgets = ASPrintf("%s|%s", utf8gadget1, utf8gadget2); free(utf8gadget1); free(utf8gadget2); #ifdef __amigaos4__ res = TimedDosRequesterTags(TDR_ImageType, TDRIMAGE_WARNING, TDR_TitleString, messages_get("NetSurf"), TDR_FormatString, utf8text, TDR_GadgetString, utf8gadgets, TDR_Window, win, TAG_DONE); #else struct EasyStruct easyreq = { sizeof(struct EasyStruct), 0, messages_get("NetSurf"), utf8text, utf8gadgets, }; res = EasyRequest(win, &easyreq, NULL); #endif if(utf8text) free(utf8text); if(utf8gadgets) FreeVec(utf8gadgets); return res; }
static void ami_print_ui_setup(void) { gadlab[PGID_PRINTER] = (char *)ami_utf8_easy((char *)messages_get("Printer")); gadlab[PGID_SCALE] = (char *)ami_utf8_easy((char *)messages_get("Scale")); gadlab[PGID_COPIES] = (char *)ami_utf8_easy((char *)messages_get("Copies")); gadlab[PGID_PRINT] = (char *)ami_utf8_easy((char *)messages_get("ObjPrint")); gadlab[PGID_CANCEL] = (char *)ami_utf8_easy((char *)messages_get("Cancel")); }
void warn_user(const char *warning, const char *detail) { Object *req = NULL; char *utf8warning = ami_utf8_easy(messages_get(warning)); STRPTR bodytext = NULL; LOG(("%s %s", warning, detail)); bodytext = ASPrintf("\33b%s\33n\n%s", utf8warning != NULL ? utf8warning : warning, detail); req = NewObject(REQUESTER_GetClass(), NULL, REQ_Type, REQTYPE_INFO, REQ_TitleText, messages_get("NetSurf"), REQ_BodyText, bodytext, REQ_GadgetText, messages_get("OK"), #ifdef __amigaos4__ REQ_VarArgs, REQ_Image, (struct Image *)REQIMAGE_WARNING, /* REQ_CharSet, 106, */ #endif TAG_DONE); if (req) { LONG result = IDoMethod(req, RM_OPENREQ, NULL, NULL, scrn); DisposeObject(req); } if(bodytext) FreeVec(bodytext); if(utf8warning) free(utf8warning); }
bool ami_add_to_clipboard(const char *text, size_t length, bool space) { char *buffer; if(option_utf8_clipboard || ami_utf8_clipboard) { WriteChunkBytes(iffh,text,length); } else { buffer = ami_utf8_easy(text); if(buffer) { char *p; p = buffer; while(*p != '\0') { if(*p == 0xa0) *p = 0x20; p++; } WriteChunkBytes(iffh, buffer, strlen(buffer)); ami_utf8_free(buffer); } } if(space) WriteChunkBytes(iffh," ",1); return true; }
/* exported interface documented in amiga/cookies.h */ nserror ami_history_global_present(void) { struct ami_history_global_window *ncwin; nserror res; if(history_window != NULL) { //windowtofront() return NSERROR_OK; } ncwin = calloc(1, sizeof(struct ami_history_global_window)); if (ncwin == NULL) { return NSERROR_NOMEM; } ncwin->core.wintitle = ami_utf8_easy((char *)messages_get("GlobalHistory")); res = ami_history_global_create_window(ncwin); if (res != NSERROR_OK) { NSLOG(netsurf, INFO, "SSL UI builder init failed"); ami_utf8_free(ncwin->core.wintitle); free(ncwin); return res; } /* initialise Amiga core window */ ncwin->core.draw = ami_history_global_draw; ncwin->core.key = ami_history_global_key; ncwin->core.mouse = ami_history_global_mouse; ncwin->core.close = ami_history_global_destroy; ncwin->core.event = NULL; ncwin->core.drag_end = ami_history_global_drag_end; ncwin->core.icon_drop = NULL; res = ami_corewindow_init(&ncwin->core); if (res != NSERROR_OK) { ami_utf8_free(ncwin->core.wintitle); DisposeObject(ncwin->core.objects[GID_CW_WIN]); free(ncwin); return res; } res = global_history_init(ncwin->core.cb_table, (struct core_window *)ncwin); if (res != NSERROR_OK) { ami_utf8_free(ncwin->core.wintitle); DisposeObject(ncwin->core.objects[GID_CW_WIN]); free(ncwin); return res; } history_window = ncwin; return NSERROR_OK; }
void warn_user(const char *warning, const char *detail) { char *utf8warning = ami_utf8_easy(messages_get(warning)); STRPTR bodytext = ASPrintf("\33b%s\33n\n%s", utf8warning != NULL ? utf8warning : warning, detail); ami_misc_req(bodytext, TDRIMAGE_WARNING); if(bodytext) FreeVec(bodytext); if(utf8warning) free(utf8warning); }
int32 ami_warn_user_multi(const char *body, const char *opt1, const char *opt2, struct Window *win) { int res = 0; char *utf8text = ami_utf8_easy(body); char *utf8gadget1 = ami_utf8_easy(messages_get(opt1)); char *utf8gadget2 = ami_utf8_easy(messages_get(opt2)); char *utf8gadgets = ASPrintf("%s|%s", utf8gadget1, utf8gadget2); free(utf8gadget1); free(utf8gadget2); res = TimedDosRequesterTags(TDR_ImageType, TDRIMAGE_WARNING, TDR_TitleString, messages_get("NetSurf"), TDR_FormatString, utf8text, TDR_GadgetString, utf8gadgets, TDR_Window, win, TAG_DONE); if(utf8text) free(utf8text); if(utf8gadgets) FreeVec(utf8gadgets); return res; }
void warn_user(const char *warning, const char *detail) { char *utf8warning = ami_utf8_easy(messages_get(warning)); if(!utf8warning) utf8warning = warning; TimedDosRequesterTags(TDR_ImageType,TDRIMAGE_WARNING, TDR_TitleString,messages_get("NetSurf"), TDR_GadgetString,messages_get("OK"), // TDR_CharSet,106, TDR_FormatString,"%s\n%s", TDR_Arg1,utf8warning, TDR_Arg2,detail, TAG_DONE); if(utf8warning) free(utf8warning); }
static void ami_menu_item_project_about(struct Hook *hook, APTR window, struct IntuiMessage *msg) { struct gui_window_2 *gwin; char *temp, *temp2; int sel; nsurl *url = NULL; nserror error; GetAttr(WINDOW_UserData, (Object *)window, (ULONG *)&gwin); ami_set_pointer(gwin, GUI_POINTER_WAIT, false); temp = ASPrintf("%s|%s|%s", messages_get("OK"), messages_get("HelpCredits"), messages_get("HelpLicence")); temp2 = ami_utf8_easy(temp); FreeVec(temp); sel = TimedDosRequesterTags(TDR_ImageType,TDRIMAGE_INFO, TDR_TitleString, messages_get("NetSurf"), TDR_Window, gwin->win, TDR_GadgetString, temp2, #ifndef NDEBUG TDR_FormatString,"NetSurf %s\n%s\nBuild date %s\n\nhttp://www.netsurf-browser.org", #else TDR_FormatString,"NetSurf %s\n%s\n\nhttp://www.netsurf-browser.org", #endif TDR_Arg1,netsurf_version, #ifdef NS_AMIGA_CAIRO TDR_Arg2,"Cairo (OS4.1+) SObjs build", #else TDR_Arg2,"graphics.library static build", #endif TDR_Arg3,verdate, TAG_DONE); free(temp2); if(sel == 2) { error = nsurl_create("about:credits", &url); } else if(sel == 0) { error = nsurl_create("about:licence", &url); } if(url) { if (error == NSERROR_OK) { error = browser_window_create(BW_CREATE_HISTORY, url, NULL, NULL, NULL); nsurl_unref(url); } if (error != NSERROR_OK) { warn_user(messages_get_errorcode(error), 0); } } ami_reset_pointer(gwin); }
static struct gui_download_window *gui_download_window_create(download_context *ctx, struct gui_window *gui) { const char *url = nsurl_access(download_context_get_url(ctx)); unsigned long total_size = download_context_get_total_length(ctx); struct gui_download_window *dw; char *dl_filename = ami_utf8_easy(download_context_get_filename(ctx)); APTR va[3]; dw = ami_misc_allocvec_clear(sizeof(struct gui_download_window), 0); if(gui && (!IsListEmpty(&gui->dllist)) && (dw->dln = (struct dlnode *)FindName(&gui->dllist,url))) { strcpy(dw->fname, dw->dln->filename); free(dw->dln->node.ln_Name); dw->dln->node.ln_Name = NULL; } else { if(AslRequestTags(savereq, ASLFR_Window, gui->shared->win, ASLFR_SleepWindow, TRUE, ASLFR_TitleText, messages_get("NetSurf"), ASLFR_Screen, scrn, ASLFR_InitialFile, dl_filename, TAG_DONE)) { strlcpy(dw->fname, savereq->fr_Drawer, 1024); AddPart((STRPTR)&dw->fname,savereq->fr_File,1024); if(!ami_download_check_overwrite(dw->fname, gui->shared->win, total_size)) { FreeVec(dw); return NULL; } } else { FreeVec(dw); return NULL; } } if(dl_filename) ami_utf8_free(dl_filename); dw->size = total_size; dw->downloaded = 0; if(gui) dw->bw = gui->bw; dw->url = url; va[0] = (APTR)dw->downloaded; va[1] = (APTR)dw->size; va[2] = 0; if(!(dw->fh = FOpen((STRPTR)&dw->fname,MODE_NEWFILE,0))) { FreeVec(dw); return NULL; } dw->objects[OID_MAIN] = WindowObj, WA_ScreenTitle, ami_gui_get_screen_title(), WA_Title, dw->url, WA_Activate, TRUE, WA_DepthGadget, TRUE, WA_DragBar, TRUE, WA_CloseGadget, FALSE, WA_SizeGadget, TRUE, WA_PubScreen,scrn, WINDOW_SharedPort,sport, WINDOW_UserData,dw, WINDOW_IconifyGadget, FALSE, WINDOW_LockHeight,TRUE, WINDOW_Position, WPOS_CENTERSCREEN, WINDOW_ParentGroup, dw->objects[GID_MAIN] = LayoutVObj, LAYOUT_AddChild, dw->objects[GID_STATUS] = FuelGaugeObj, GA_ID,GID_STATUS, GA_Text,messages_get("amiDownload"), FUELGAUGE_Min,0, FUELGAUGE_Max,total_size, FUELGAUGE_Level,0, FUELGAUGE_Ticks,11, FUELGAUGE_ShortTicks,TRUE, FUELGAUGE_VarArgs,va, FUELGAUGE_Percent,FALSE, FUELGAUGE_Justification,FGJ_CENTER, FuelGaugeEnd, CHILD_NominalSize,TRUE, CHILD_WeightedHeight,0, LAYOUT_AddChild, dw->objects[GID_CANCEL] = ButtonObj, GA_ID,GID_CANCEL, GA_RelVerify,TRUE, GA_Text,messages_get("Abort"), GA_TabCycle,TRUE, ButtonEnd, EndGroup, EndWindow; dw->win = (struct Window *)RA_OpenWindow(dw->objects[OID_MAIN]); dw->ctx = ctx; dw->node = AddObject(window_list,AMINS_DLWINDOW); dw->node->objstruct = dw; downloads_in_progress++; return dw; }
void gui_create_form_select_menu(struct gui_window *g, struct form_control *control) { struct Library *PopupMenuBase = NULL; struct PopupMenuIFace *IPopupMenu = NULL; struct Hook selectmenuhook; Object *selectmenuobj; Object *smenu = NULL; Object *currentmenu; Object *submenu = NULL; char *selectmenu_item[AMI_SELECTMENU_MAX]; char *more_label; struct form_option *opt = form_select_get_option(control, 0); int i = 0; int n = 0; if(ami_selectmenu_is_safe() == FALSE) return; if((PopupMenuBase = OpenLibrary("popupmenu.class", 0))) { IPopupMenu = (struct PopupMenuIFace *)GetInterface(PopupMenuBase, "main", 1, NULL); } if(IPopupMenu == NULL) return; ClearMem(selectmenu_item, AMI_SELECTMENU_MAX * 4); more_label = ami_utf8_easy(messages_get("More")); selectmenuhook.h_Entry = ami_popup_hook; selectmenuhook.h_SubEntry = NULL; selectmenuhook.h_Data = g; g->shared->control = control; selectmenuobj = PMMENU(form_control_get_name(control)), PMA_MenuHandler, &selectmenuhook, End; currentmenu = selectmenuobj; while(opt) { selectmenu_item[i] = ami_utf8_easy(opt->text); IDoMethod(currentmenu, PM_INSERT, NewObject(POPUPMENU_GetItemClass(), NULL, PMIA_Title, (ULONG)selectmenu_item[i], PMIA_ID, i, PMIA_CheckIt, TRUE, PMIA_Checked, opt->selected, TAG_DONE), ~0); opt = opt->next; i++; n++; if(n == AMI_SELECTMENU_PAGE_MAX) { if(submenu != NULL) { /* attach the previous submenu */ IDoMethod(smenu, PM_INSERT, NewObject(NULL, "popupmenuitem.class", PMIA_Title, more_label, PMIA_CheckIt, TRUE, PMIA_SubMenu, submenu, TAG_DONE), ~0); } submenu = NewObject(NULL, "popupmenu.class", TAG_DONE); smenu = currentmenu; currentmenu = submenu; n = 0; } if(i >= AMI_SELECTMENU_MAX) break; } if((submenu != NULL) && (n != 0)) { /* attach the previous submenu */ IDoMethod(smenu, PM_INSERT, NewObject(NULL, "popupmenuitem.class", PMIA_Title, more_label, PMIA_CheckIt, TRUE, PMIA_SubMenu, submenu, TAG_DONE), ~0); } ami_set_pointer(g->shared, GUI_POINTER_DEFAULT, false); // Clear the menu-style pointer IDoMethod(selectmenuobj, PM_OPEN, g->shared->win); /* PM_OPEN is blocking, so dispose menu immediately... */ if(selectmenuobj) DisposeObject(selectmenuobj); /* ...and get rid of popupmenu.class ASAP */ if(IPopupMenu) DropInterface((struct Interface *)IPopupMenu); if(PopupMenuBase) CloseLibrary(PopupMenuBase); /* Free the menu labels */ if(more_label) ami_utf8_free(more_label); for(i = 0; i < AMI_SELECTMENU_MAX; i++) { if(selectmenu_item[i] != NULL) { ami_utf8_free(selectmenu_item[i]); selectmenu_item[i] = NULL; } } }
HOOKF(void, ami_menu_item_project_about, APTR, window, struct IntuiMessage *) { struct gui_window_2 *gwin; char *temp, *temp2; int sel; nsurl *url = NULL; nserror error = NSERROR_OK; GetAttr(WINDOW_UserData, (Object *)window, (ULONG *)&gwin); ami_set_pointer(gwin, GUI_POINTER_WAIT, false); temp = ASPrintf("%s|%s|%s", messages_get("OK"), messages_get("HelpCredits"), messages_get("HelpLicence")); temp2 = ami_utf8_easy(temp); FreeVec(temp); #ifdef __amigaos4__ sel = TimedDosRequesterTags(TDR_ImageType,TDRIMAGE_INFO, TDR_TitleString, messages_get("NetSurf"), TDR_Window, gwin->win, TDR_GadgetString, temp2, TDR_FormatString,"NetSurf %s\nBuild date %s\n\nhttp://www.netsurf-browser.org", TDR_Arg1,netsurf_version, TDR_Arg2,verdate, TAG_DONE); #else struct EasyStruct about_req = { sizeof(struct EasyStruct), 0, "NetSurf", "NetSurf %s\nBuild date %s\n\nhttp://www.netsurf-browser.org", temp2, }; sel = EasyRequest(gwin->win, &about_req, NULL, netsurf_version, verdate); #endif free(temp2); if(sel == 2) { error = nsurl_create("about:credits", &url); } else if(sel == 0) { error = nsurl_create("about:licence", &url); } if(url) { if (error == NSERROR_OK) { error = browser_window_create(BW_CREATE_HISTORY, url, NULL, NULL, NULL); nsurl_unref(url); } if (error != NSERROR_OK) { amiga_warn_user(messages_get_errorcode(error), 0); } } ami_reset_pointer(gwin); }
void ami_drag_selection(struct selection *s) { struct box *text_box; int x; int y; char *utf8text; struct ami_text_selection *sel; struct IFFHandle *old_iffh = iffh; struct gui_window_2 *gwin = ami_window_at_pointer(AMINS_WINDOW); if(!gwin) { DisplayBeep(scrn); return; } x = gwin->win->MouseX; y = gwin->win->MouseY; if(text_box = ami_text_box_at_point(gwin, (ULONG *)&x, (ULONG *)&y)) { ami_utf8_clipboard = true; iffh = ami_clipboard_init_internal(1); if(gui_copy_to_clipboard(s)) { browser_window_mouse_click(gwin->bw, BROWSER_MOUSE_PRESS_1, x, y); browser_window_key_press(gwin->bw, KEY_PASTE); } ami_clipboard_free_internal(iffh); iffh = old_iffh; ami_utf8_clipboard = false; } else { x = gwin->win->MouseX; y = gwin->win->MouseY; if(ami_gadget_hit(gwin->objects[GID_URL], x, y)) { if(sel = ami_selection_to_text(gwin)) { utf8text = ami_utf8_easy(sel->text); RefreshSetGadgetAttrs((struct Gadget *)gwin->objects[GID_URL], gwin->win, NULL, STRINGA_TextVal, utf8text, TAG_DONE); FreeVec(sel); ami_utf8_free(utf8text); } } else if(ami_gadget_hit(gwin->objects[GID_SEARCHSTRING], x, y)) { if(sel = ami_selection_to_text(gwin)) { utf8text = ami_utf8_easy(sel->text); RefreshSetGadgetAttrs((struct Gadget *)gwin->objects[GID_SEARCHSTRING], gwin->win, NULL, STRINGA_TextVal, utf8text, TAG_DONE); FreeVec(sel); ami_utf8_free(utf8text); } } else { DisplayBeep(scrn); } } }
void ami_drag_selection(struct gui_window *g) { int x; int y; char *utf8text; char *sel; struct IFFHandle *old_iffh = iffh; struct gui_window_2 *gwin = ami_window_at_pointer(AMINS_WINDOW); /* NB: 'gwin' is at the drop point, 'g' is where the selection was dragged from. * These may be different if the selection has been dragged between windows. */ if(!gwin) { DisplayBeep(scrn); return; } x = gwin->win->MouseX; y = gwin->win->MouseY; if(ami_text_box_at_point(gwin, (ULONG *)&x, (ULONG *)&y)) { iffh = ami_clipboard_init_internal(1); browser_window_key_press(g->shared->bw, KEY_COPY_SELECTION); browser_window_mouse_click(gwin->bw, BROWSER_MOUSE_PRESS_1, x, y); browser_window_key_press(gwin->bw, KEY_PASTE); ami_clipboard_free_internal(iffh); iffh = old_iffh; } else { x = gwin->win->MouseX; y = gwin->win->MouseY; if(ami_gadget_hit(gwin->objects[GID_URL], x, y)) { if(sel = browser_window_get_selection(g->shared->bw)) { utf8text = ami_utf8_easy(sel); RefreshSetGadgetAttrs((struct Gadget *)gwin->objects[GID_URL], gwin->win, NULL, STRINGA_TextVal, utf8text, TAG_DONE); free(sel); ami_utf8_free(utf8text); } } else if(ami_gadget_hit(gwin->objects[GID_SEARCHSTRING], x, y)) { if(sel = browser_window_get_selection(g->shared->bw)) { utf8text = ami_utf8_easy(sel); RefreshSetGadgetAttrs((struct Gadget *)gwin->objects[GID_SEARCHSTRING], gwin->win, NULL, STRINGA_TextVal, utf8text, TAG_DONE); free(sel); ami_utf8_free(utf8text); } } else { DisplayBeep(scrn); } } }