diff options
Diffstat (limited to 'amiga/context_menu.c')
-rwxr-xr-x | amiga/context_menu.c | 145 |
1 files changed, 113 insertions, 32 deletions
diff --git a/amiga/context_menu.c b/amiga/context_menu.c index 55ea2ed29..747208aaf 100755 --- a/amiga/context_menu.c +++ b/amiga/context_menu.c @@ -22,10 +22,51 @@ #include <proto/popupmenu.h> #include <proto/intuition.h> #include "amiga/utf8.h" +#include "utils/utf8.h" #include "utils/messages.h" +#include "amiga/options.h" +#include "amiga/clipboard.h" +#include <proto/asl.h> +#include <proto/dos.h> +#include <string.h> +#include "utils/utils.h" uint32 ami_context_menu_hook(struct Hook *hook,Object *item,APTR reserved); +char *ctxmenulab[CMID_LAST]; + +void ami_context_menu_init(void) +{ + ctxmenulab[CMID_SELECTFILE] = ami_utf8_easy((char *)messages_get("SelectFile")); + ctxmenulab[CMID_COPYURL] = ami_utf8_easy((char *)messages_get("CopyURL")); + ctxmenulab[CMID_SHOWOBJ] = ami_utf8_easy((char *)messages_get("ObjShow")); + ctxmenulab[CMID_COPYOBJ] = ami_utf8_easy((char *)messages_get("CopyURL")); + + if(!option_force_tabs) + { + ctxmenulab[CMID_URLOPENWIN] = ami_utf8_easy((char *)messages_get("LinkNewWin")); + ctxmenulab[CMID_URLOPENTAB] = ami_utf8_easy((char *)messages_get("LinkNewTab")); + } + else + { + ctxmenulab[CMID_URLOPENWIN] = ami_utf8_easy((char *)messages_get("LinkNewTab")); + ctxmenulab[CMID_URLOPENTAB] = ami_utf8_easy((char *)messages_get("LinkNewWin")); + } + + ctxmenulab[CMSUB_OBJECT] = ami_utf8_easy((char *)messages_get("Object")); + ctxmenulab[CMSUB_URL] = ami_utf8_easy((char *)messages_get("Link")); +} + +void ami_context_menu_free(void) +{ + int i; + + for(i=0;i<CMID_LAST;i++) + { + ami_utf8_free(ctxmenulab[i]); + } +} + void ami_context_menu_show(struct gui_window_2 *gwin,int x,int y) { struct box *curbox = gwin->bw->current_content->data.html.layout; @@ -52,18 +93,25 @@ void ami_context_menu_show(struct gui_window_2 *gwin,int x,int y) { IDoMethod(gwin->objects[OID_MENU],PM_INSERT, NewObject(POPUPMENU_GetItemClass(), NULL, - PMIA_Title, (ULONG)ami_utf8_easy((char *)messages_get("CopyURL")), - PMIA_ID,CMID_COPYURL, - PMIA_UserData,curbox->href, - TAG_DONE), - ~0); - - IDoMethod(gwin->objects[OID_MENU],PM_INSERT, - NewObject(POPUPMENU_GetItemClass(), NULL, - PMIA_Title, (ULONG)ami_utf8_easy((char *)messages_get("SaveURL")), - PMIA_ID,CMID_SAVEURL, - PMIA_UserData,curbox->href, + PMIA_Title, (ULONG)ctxmenulab[CMSUB_URL], + PMSIMPLESUB, + PMA_AddItem,NewObject(POPUPMENU_GetItemClass(), NULL, + PMIA_Title, (ULONG)ctxmenulab[CMID_URLOPENWIN], + PMIA_ID,CMID_URLOPENWIN, + PMIA_UserData,curbox->href, + TAG_DONE), + PMA_AddItem,NewObject(POPUPMENU_GetItemClass(), NULL, + PMIA_Title, (ULONG)ctxmenulab[CMID_URLOPENTAB], + PMIA_ID,CMID_URLOPENTAB, + PMIA_UserData,curbox->href, + TAG_DONE), + PMA_AddItem,NewObject(POPUPMENU_GetItemClass(), NULL, + PMIA_Title, (ULONG)ctxmenulab[CMID_COPYURL], + PMIA_ID,CMID_COPYURL, + PMIA_UserData,curbox->href, + TAG_DONE), TAG_DONE), + TAG_DONE), ~0); } @@ -71,20 +119,21 @@ void ami_context_menu_show(struct gui_window_2 *gwin,int x,int y) { IDoMethod(gwin->objects[OID_MENU],PM_INSERT, NewObject(POPUPMENU_GetItemClass(), NULL, - PMIA_Title, (ULONG)ami_utf8_easy((char *)messages_get("ObjShow")), - PMIA_ID,CMID_SHOWOBJ, - PMIA_UserData,curbox->object->url, - TAG_DONE), - ~0); - - IDoMethod(gwin->objects[OID_MENU],PM_INSERT, - NewObject(POPUPMENU_GetItemClass(), NULL, - PMIA_Title, (ULONG)ami_utf8_easy((char *)messages_get("ObjSave")), - PMIA_ID,CMID_SAVEOBJ, - PMIA_UserData,curbox->object->url, + PMIA_Title, (ULONG)ctxmenulab[CMSUB_OBJECT], + PMSIMPLESUB, + PMA_AddItem,NewObject(POPUPMENU_GetItemClass(), NULL, + PMIA_Title, (ULONG)ctxmenulab[CMID_SHOWOBJ], + PMIA_ID,CMID_SHOWOBJ, + PMIA_UserData,curbox->object->url, + TAG_DONE), + PMA_AddItem,NewObject(POPUPMENU_GetItemClass(), NULL, + PMIA_Title, (ULONG)ctxmenulab[CMID_COPYOBJ], + PMIA_ID,CMID_COPYOBJ, + PMIA_UserData,curbox->object->url, + TAG_DONE), TAG_DONE), + TAG_DONE), ~0); - } if (curbox->gadget) @@ -94,9 +143,9 @@ void ami_context_menu_show(struct gui_window_2 *gwin,int x,int y) case GADGET_FILE: IDoMethod(gwin->objects[OID_MENU],PM_INSERT, NewObject(POPUPMENU_GetItemClass(), NULL, - PMIA_Title, (ULONG)ami_utf8_easy((char *)messages_get("SelectFile")), + PMIA_Title, (ULONG)ctxmenulab[CMID_SELECTFILE], PMIA_ID,CMID_SELECTFILE, - PMIA_UserData,curbox->gadget, + PMIA_UserData,curbox, TAG_DONE), ~0); break; @@ -113,6 +162,7 @@ uint32 ami_context_menu_hook(struct Hook *hook,Object *item,APTR reserved) int32 itemid = 0; struct gui_window_2 *gwin = hook->h_Data; APTR userdata = NULL; + struct browser_window *bw; if(GetAttrs(item,PMIA_ID,&itemid, PMIA_UserData,&userdata, @@ -121,20 +171,51 @@ uint32 ami_context_menu_hook(struct Hook *hook,Object *item,APTR reserved) switch(itemid) { case CMID_SELECTFILE: - printf("select file - gadget %lx\n",userdata); + if(AslRequestTags(filereq, + ASLFR_TitleText,messages_get("NetSurf"), + ASLFR_Screen,scrn, + ASLFR_DoSaveMode,FALSE, + TAG_DONE)) + { + struct box *box = userdata; + char *utf8_fn; + char fname[1024]; + int x,y; + + strlcpy(&fname,filereq->fr_Drawer,1024); + AddPart(fname,filereq->fr_File,1024); + + if(utf8_from_local_encoding(fname,0,&utf8_fn) != UTF8_CONVERT_OK) + { + warn_user("NoMemory",""); + break; + } + + free(box->gadget->value); + box->gadget->value = utf8_fn; + + box_coords(box, (int *)&x, (int *)&y); + gui_window_redraw(gwin->bw->window,x,y, + x + box->width, + y + box->height); + } break; case CMID_COPYURL: - printf("add to clipboard: %s\n",userdata); + case CMID_COPYOBJ: + ami_easy_clipboard((char *)userdata); break; - case CMID_SHOWOBJ: - browser_window_go(gwin->bw,userdata,NULL,true); + case CMID_URLOPENWIN: + bw = browser_window_create(userdata,gwin->bw, gwin->bw->current_content->url, true, false); + break; + + case CMID_URLOPENTAB: + bw = browser_window_create(userdata,gwin->bw, gwin->bw->current_content->url, true, true); break; - case CMID_SAVEOBJ: - case CMID_SAVEURL: - printf("download: %s\n",userdata); + case CMID_SHOWOBJ: + browser_window_go(gwin->bw,userdata,gwin->bw->current_content->url,true); break; } } |