summaryrefslogtreecommitdiff
path: root/amiga/context_menu.c
diff options
context:
space:
mode:
authorChris Young <chris@unsatisfactorysoftware.co.uk>2008-10-25 16:37:08 +0000
committerChris Young <chris@unsatisfactorysoftware.co.uk>2008-10-25 16:37:08 +0000
commit2f4beda48c9780739ecdab639b47299108265d66 (patch)
tree4a4a6af1a91138db85a74099064953d21d5419ba /amiga/context_menu.c
parent5624bf590ded22d8b2d85753fd189b7e6c6443ea (diff)
downloadnetsurf-2f4beda48c9780739ecdab639b47299108265d66.tar.gz
netsurf-2f4beda48c9780739ecdab639b47299108265d66.tar.bz2
Complete (but quite minimal at the moment) context menu implementation for AmigaOS:
Links, objects and upload file boxes have their own menu item or submenu. Context menus can be enable/disabled and be made "sticky" with the following options: context_menu sticky_context_menu Seperated clipboard related code out to clipboard.c to make it easier to maintain and add the ability to copy URLs to the clipboard. Copying images to the clipboard will come later. svn path=/trunk/netsurf/; revision=5629
Diffstat (limited to 'amiga/context_menu.c')
-rwxr-xr-xamiga/context_menu.c145
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;
}
}