From 5624bf590ded22d8b2d85753fd189b7e6c6443ea Mon Sep 17 00:00:00 2001 From: Chris Young Date: Tue, 21 Oct 2008 18:04:27 +0000 Subject: Initial context menus. Five possible options (copy link to clipboard, download link, show object, save object and select file for upload), only one implemented at the moment. Menu structure/strings need some thought and tidy-up (with object and URL options in their own sub-menus?) svn path=/trunk/netsurf/; revision=5612 --- amiga/context_menu.c | 143 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 143 insertions(+) create mode 100755 amiga/context_menu.c (limited to 'amiga/context_menu.c') diff --git a/amiga/context_menu.c b/amiga/context_menu.c new file mode 100755 index 000000000..55ea2ed29 --- /dev/null +++ b/amiga/context_menu.c @@ -0,0 +1,143 @@ +/* + * Copyright 2008 Chris Young + * + * This file is part of NetSurf, http://www.netsurf-browser.org/ + * + * NetSurf is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * NetSurf is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include "amiga/context_menu.h" +#include "render/box.h" +#include "render/form.h" +#include +#include +#include "amiga/utf8.h" +#include "utils/messages.h" + +uint32 ami_context_menu_hook(struct Hook *hook,Object *item,APTR reserved); + +void ami_context_menu_show(struct gui_window_2 *gwin,int x,int y) +{ + struct box *curbox = gwin->bw->current_content->data.html.layout; + struct content *cc = gwin->bw->current_content; + int box_x=0; + int box_y=0; + + if(cc->type != CONTENT_HTML) return; + + if(gwin->objects[OID_MENU]) DisposeObject(gwin->objects[OID_MENU]); + + gwin->popuphook.h_Entry = ami_context_menu_hook; + gwin->popuphook.h_Data = gwin; + + gwin->objects[OID_MENU] = NewObject( POPUPMENU_GetClass(), NULL, + PMA_MenuHandler, &gwin->popuphook, + TAG_DONE); + + while(curbox = box_at_point(curbox,x,y,&box_x,&box_y,&cc)) + { + if (curbox->style && curbox->style->visibility == CSS_VISIBILITY_HIDDEN) continue; + + if(curbox->href) + { + 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, + TAG_DONE), + ~0); + } + + if (curbox->object) + { + 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, + TAG_DONE), + ~0); + + } + + if (curbox->gadget) + { + switch (curbox->gadget->type) + { + 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_ID,CMID_SELECTFILE, + PMIA_UserData,curbox->gadget, + TAG_DONE), + ~0); + break; + } + } + } + + gui_window_set_pointer(gwin->bw->window,GUI_POINTER_DEFAULT); + IDoMethod(gwin->objects[OID_MENU],PM_OPEN,gwin->win); +} + +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; + + if(GetAttrs(item,PMIA_ID,&itemid, + PMIA_UserData,&userdata, + TAG_DONE)) + { + switch(itemid) + { + case CMID_SELECTFILE: + printf("select file - gadget %lx\n",userdata); + break; + + case CMID_COPYURL: + printf("add to clipboard: %s\n",userdata); + break; + + case CMID_SHOWOBJ: + browser_window_go(gwin->bw,userdata,NULL,true); + break; + + case CMID_SAVEOBJ: + case CMID_SAVEURL: + printf("download: %s\n",userdata); + break; + } + } + + return itemid; +} -- cgit v1.2.3