/**************************************************************************** * NCSA Mosaic for the X Window System * * Software Development Group * * National Center for Supercomputing Applications * * University of Illinois at Urbana-Champaign * * 605 E. Springfield, Champaign IL 61820 * * mosaic@ncsa.uiuc.edu * * * * Copyright (C) 1993, Board of Trustees of the University of Illinois * * * * NCSA Mosaic software, both binary and source (hereafter, Software) is * * copyrighted by The Board of Trustees of the University of Illinois * * (UI), and ownership remains with the UI. * * * * The UI grants you (hereafter, Licensee) a license to use the Software * * for academic, research and internal business purposes only, without a * * fee. Licensee may distribute the binary and source code (if released) * * to third parties provided that the copyright notice and this statement * * appears on all copies and that no charge is associated with such * * copies. * * * * Licensee may make derivative works. However, if Licensee distributes * * any derivative work based on or derived from the Software, then * * Licensee will (1) notify NCSA regarding its distribution of the * * derivative work, and (2) clearly notify users that such derivative * * work is a modified version and not the original NCSA Mosaic * * distributed by the UI. * * * * Any Licensee wishing to make commercial use of the Software should * * contact the UI, c/o NCSA, to negotiate an appropriate license for such * * commercial use. Commercial use includes (1) integration of all or * * part of the source code into a product for sale or license by or on * * behalf of Licensee to third parties, or (2) distribution of the binary * * code or source code to third parties that need it to utilize a * * commercial product sold or licensed by or on behalf of Licensee. * * * * UI MAKES NO REPRESENTATIONS ABOUT THE SUITABILITY OF THIS SOFTWARE FOR * * ANY PURPOSE. IT IS PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED * * WARRANTY. THE UI SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED BY THE * * USERS OF THIS SOFTWARE. * * * * By using or copying this Software, Licensee agrees to abide by the * * copyright law and all other applicable laws of the U.S. including, but * * not limited to, export control laws, and the terms of this license. * * UI shall have the right to terminate this license immediately by * * written notice upon Licensee's breach of, or non-compliance with, any * * of its terms. Licensee may be held legally responsible for any * * copyright infringement that is caused or encouraged by Licensee's * * failure to abide by the terms of this license. * * * * Comments and questions are welcome and can be sent to * * mosaic-x@ncsa.uiuc.edu. * ****************************************************************************/ #ifndef __POPUP_H__ #define __POPUP_H__ #include "mosaic.h" #include "libhtmlw/HTML.h" #include "hotlist.h" #include #include #include #include #include #include #include #include #include #define MAX_NUM_POPUP_ITEMS 50 #define ALL_TYPES (E_TEXT | E_BULLET | E_LINEFEED | E_IMAGE | E_WIDGET | E_HRULE | E_TABLE | E_ANCHOR) #define TIGHT 0 #define LOOSE 1 #define COPY_URL_LABEL "Copy Link URL" #define NEWS_NOANCHOR (E_TEXT | E_BULLET | E_LINEFEED | E_WIDGET | E_HRULE |E_TABLE) typedef enum _w_class { LastItem=1, PushButton, Separator, CascadeButton, ToggleButton, Widgt } w_class; enum { I_Save, I_ViewExternal, I_ViewInternal, I_Reload, M_ImageData, M_LinkData, M_FileData }; typedef struct act_struct { int act_code; struct ele_rec *eptr; void *str; } act_struct; typedef struct PopupItem { /* the top half must be filled in if this is to appear in the popup */ w_class class; /* this is a button, separator, label, cascade */ unsigned long int types; /* for which widget elements this button is to popup for (the list of elements is below) */ int types_method; /* if TIGHT use == if LOOSE use & */ unsigned long int modes; /* news, http, ftp, etc. */ int modes_method; /* if TIGHT use == if LOOSE use & */ char *label; /* these are needed for a button class */ struct act_struct acst; /* identifies the action */ void (*cbfp)(); /* callback function that takes act_struct as client data */ /* theses are optional */ char mnemonic; char *accel_text; char *accel; /* this is needed for a cascade class */ struct PopupItem *sub_items; /* NULL if this isn't a pull_right */ /* this is for internal uses */ Widget _w; int startup; /* are we sensitive when we start */ } PopupItem; XmxCallbackPrototype (menubar_cb); XmxCallbackPrototype (image_cb); XmxCallbackPrototype (metadata_cb); XmxCallbackPrototype (user_defs_cb); XmxCallbackPrototype (ftp_rmbm_cb); XmxCallbackPrototype (fsb_OKCallback); XmxCallbackPrototype (fsb_CancelCallback); XmxCallbackPrototype (copy_link_cb); XmxCallbackPrototype (session_cb); XmxCallbackPrototype (rbm_ballonify); void fsb(); void ThirdButtonMenu(); char *getFileName(char *file_src); Widget _PopupMenuBuilder(Widget parent, int type, char *title, char mnem, PopupItem *items); extern struct ele_rec *LocateElement(); void _set_eptr_field(); void mo_popup_set_something(); PopupItem *popup_build_user_defs(); PopupItem *build_user_defs_items(); char **user_defs_get_entries(); extern mo_window *current_win; extern int file_exists(); extern char *my_chop(); extern char *my_strndup(); extern char *mo_escape_part(); void mo_make_popup(); void mo_init_hotmenu(); void mo_add_to_rbm_history(mo_window *win, char *url, char *title); static Boolean convert_selection(Widget, Atom *, Atom *, Atom *, XtPointer *, unsigned long *, int *); #ifdef GUI_POPUP_H /* this is set in gui-popup.c -- it prevents multiple instances of the following variables */ Boolean have_popup; Widget popup = NULL; PopupItem image_menu[] = { {PushButton, 0, 0, 0, 0, "Save", {I_Save, NULL, NULL}, image_cb, 0, NULL, NULL, NULL, NULL, 1}, {PushButton, 0, 0, 0, 0, "Reload", {I_Reload, NULL, NULL}, image_cb, 0, NULL, NULL, NULL, NULL, 1}, {PushButton, 0, 0, 0, 0, "View External", {I_ViewExternal, NULL, NULL}, image_cb, 0, NULL, NULL, NULL, NULL, 1}, {PushButton, 0, 0, 0, 0, "View Internal", {I_ViewInternal, NULL, NULL}, image_cb, 0, NULL, NULL, NULL, NULL, 1}, {PushButton, 0, 0, 0, 0, "Get Image Metadata", {M_ImageData, NULL, NULL}, metadata_cb, 0, NULL, NULL, NULL, NULL, 1}, /* {LastItem, 0, 0, NULL, 0, NULL, 0, NULL, NULL, NULL, NULL} */ { LastItem }, }; PopupItem pan_menu[] = { {PushButton, 0, 0, 0, 0, "Right", {0, NULL, NULL}, NULL, 0, NULL, NULL, NULL, NULL, 1}, {PushButton, 0, 0, 0, 0, "Up", {0, NULL, NULL}, NULL, 0, NULL, NULL, NULL, NULL, 1}, {PushButton, 0, 0, 0, 0, "Left", {0, NULL, NULL}, NULL, 0, NULL, NULL, NULL, NULL, 1}, {PushButton, 0, 0, 0, 0, "Down", {0, NULL, NULL}, NULL, 0, NULL, NULL, NULL, NULL, 1}, /* {LastItem, 0, 0, NULL, 0, NULL, 0, NULL, NULL, NULL, NULL} */ { LastItem }, }; PopupItem photo_cd_sub_menu[] = { {PushButton, 0, 0, 0, 0,"Zoom In", {0, NULL, NULL}, NULL, 0, NULL, NULL, NULL, NULL, 1}, {PushButton, 0, 0, 0, 0,"Zoom Out", {0, NULL, NULL} , NULL, 0, NULL, NULL, NULL, NULL, 1}, {PushButton, 0, 0, 0, 0, "Zoom Crop", {0, NULL, NULL} , NULL, 0, NULL, NULL, NULL, NULL, 1}, {PushButton, 0, 0, 0, 0, "Crop", {0, NULL, NULL} , NULL, 0, NULL, NULL, NULL, NULL, 1}, {Separator, 0, 0, 0, 0, "Sep", {0, NULL, NULL} , NULL, 0, NULL, NULL, NULL, NULL, 1}, {PushButton, 0, 0,0, 0, "Enlarge", {0, NULL, NULL} , NULL, 0, NULL, NULL, NULL, NULL, 1}, {PushButton, 0, 0, 0, 0, "Reduce", {0, NULL, NULL} , NULL, 0, NULL, NULL, NULL, NULL, 1}, {Separator, 0, 0, 0, 0, "Sep", {0, NULL, NULL} , NULL, 0, NULL, NULL, NULL, NULL, 1}, {PushButton, 0, 0,0, 0, "Undo", {0, NULL, NULL}, NULL, 0, NULL, NULL, NULL, NULL, 1}, {Separator, 0, 0, 0, 0, "Sep", {0, NULL, NULL}, NULL, 0, NULL, NULL, NULL, NULL, 1}, {PushButton, 0, 0, 0, 0, "Rotate Clockwise", {0, NULL, NULL} , NULL, 0, NULL, NULL, NULL, NULL, 1}, {PushButton, 0, 0, 0, 0, "Rotate Counter-Clockwise", {0, NULL, NULL}, NULL, 0, NULL, NULL, NULL, NULL, 1}, {CascadeButton, 0, 0,0, 0, "Pan", {0, NULL, NULL}, NULL, 0, NULL, NULL, pan_menu, NULL, 1}, {Separator, 0, 0,0, 0, "Sep", {0, NULL, NULL}, NULL, 0, NULL, NULL, NULL, NULL, 1}, {PushButton, 0, 0, 0, 0, "Full Image", {0, NULL, NULL}, NULL, 0, NULL, NULL, NULL, NULL, 1}, {PushButton, 0, 0,0, 0,"Reset To Original", {0, NULL, NULL}, NULL, 0, NULL, NULL, NULL, NULL, 1}, {Separator, 0, 0,0, 0, "Separator", {0, NULL, NULL}, NULL, 0, NULL, NULL, NULL, NULL}, {PushButton, 0, 0,0, 0,"Print This Image", {0, NULL, NULL}, NULL, 0, NULL, NULL, NULL, NULL, 1}, {ToggleButton, 0, 0,0, 0, "Display PhotoCD Icon", {0, NULL, NULL}, NULL, 0, NULL, NULL, NULL, NULL, 1}, {PushButton, 0, 0, 0, 0, "Options", {0, NULL, NULL}, NULL, 0, NULL, NULL, NULL, NULL, 1}, /* {LastItem, 0, 0, NULL, 0, NULL, 0, NULL, NULL, NULL, NULL} */ { LastItem }, }; PopupItem file_menu[] = { {PushButton, 0, 0, 0, 0, "Save Page", {mo_save_document, NULL, NULL}, menubar_cb, 0, NULL, NULL, NULL, NULL, 1}, {PushButton, 0, 0, 0, 0, "Print", {mo_print_document, NULL, NULL}, menubar_cb, 0, NULL, NULL, NULL, NULL, 1}, {PushButton, 0, 0, 0, 0, "Mail To", {mo_mail_document, NULL, NULL}, menubar_cb, 0, NULL, NULL, NULL, NULL, 1}, {PushButton, 0, 0, 0, 0, "Get File Metadata", {M_FileData, NULL, NULL}, metadata_cb, 0, NULL, NULL, NULL, NULL, 1}, { LastItem }, }; PopupItem popup_items[] = { /*--------------------------------------------------------------- Permanent stuff ---------------------------------------------------------------*/ {PushButton, ALL_TYPES, LOOSE, moMODE_ALL, LOOSE,"Back", {mo_back, NULL, NULL}, menubar_cb, 0, "B", NULL, NULL, NULL, 1}, {PushButton, ALL_TYPES, LOOSE, moMODE_ALL, LOOSE, "Forward", {mo_forward, NULL, NULL}, menubar_cb, 0, "F", NULL, NULL, NULL, 1}, /* negative one means this is a hotlist */ {CascadeButton, ALL_TYPES, LOOSE, moMODE_ALL, LOOSE, "Hotlist", {-1, NULL, NULL}, NULL, 0, NULL, NULL, NULL, NULL, 1}, {CascadeButton, ALL_TYPES, LOOSE, moMODE_ALL, LOOSE, "User", {0, NULL, NULL}, NULL, 0, NULL, NULL, NULL, NULL, 1}, {CascadeButton, ALL_TYPES, LOOSE, moMODE_ALL, LOOSE, "Session History", {-2, NULL, NULL}, NULL, 0, NULL, NULL, NULL, NULL, 1}, /*--------------------------------------------------------------- Stuff if on a html page and not on a image or anchor ---------------------------------------------------------------*/ {Separator, (E_TEXT | E_BULLET | E_LINEFEED | E_WIDGET | E_HRULE |E_TABLE), LOOSE, moMODE_ALL, LOOSE, "Separator", {0, NULL, NULL}, NULL, 0, NULL, NULL, NULL, NULL, 1}, {CascadeButton, (E_TEXT | E_BULLET | E_LINEFEED | E_WIDGET | E_HRULE | E_TABLE),LOOSE, moMODE_ALL, LOOSE, "File", {0, NULL, NULL}, NULL, 0, NULL, NULL, file_menu, NULL, 1}, /*--------------------------------------------------------------- Stuff if on any page and an anchor (including image anchor) ---------------------------------------------------------------*/ {Separator, E_ANCHOR | E_IMAGE, LOOSE, moMODE_ALL, LOOSE, "Separator", {0, NULL, NULL}, NULL, 0, NULL, NULL, NULL, NULL, 1}, {PushButton, E_ANCHOR | E_IMAGE, LOOSE, moMODE_ALL, LOOSE, COPY_URL_LABEL, {0, NULL, NULL}, copy_link_cb, 0, NULL, NULL, NULL, NULL, 1}, {PushButton, E_ANCHOR | E_IMAGE, LOOSE, moMODE_ALL, LOOSE, "Get Link Metadata", {M_LinkData, NULL, NULL}, metadata_cb, 0, NULL, NULL, NULL, NULL, 1}, /*--------------------------------------------------------------- Stuff if on any page and a image (not including image link) ---------------------------------------------------------------*/ {Separator, E_IMAGE, TIGHT, moMODE_ALL, LOOSE, "Separator", {0, NULL, NULL}, NULL, 0, NULL, NULL, NULL, NULL, 1}, {PushButton, E_IMAGE, TIGHT, moMODE_ALL, LOOSE, "Save", {I_Save, NULL, NULL}, image_cb, 0, NULL, NULL, NULL, NULL, 1}, {PushButton, E_IMAGE, TIGHT, moMODE_ALL, LOOSE, "Reload", {I_Reload, NULL, NULL}, image_cb, 0, NULL, NULL, NULL, NULL, 1}, {PushButton, E_IMAGE, TIGHT, moMODE_ALL, LOOSE, "View External", {I_ViewExternal, NULL, NULL}, image_cb, 0, NULL, NULL, NULL, NULL, 1}, {PushButton, E_IMAGE, TIGHT, moMODE_ALL, LOOSE, "View Internal", {I_ViewInternal, NULL, NULL}, image_cb, 0, NULL, NULL, NULL, NULL, 1}, {PushButton, E_IMAGE, TIGHT, moMODE_ALL, LOOSE, "Get Image Metadata", {M_ImageData, NULL, NULL}, metadata_cb, 0, NULL, NULL, NULL, NULL, 1}, /*--------------------------------------------------------------- Stuff if on any page and a image link ---------------------------------------------------------------*/ {Separator, E_IMAGE | E_ANCHOR, TIGHT, moMODE_PLAIN, LOOSE, "Separator", {0, NULL, NULL}, NULL, 0, NULL, NULL, NULL, NULL, 1}, {CascadeButton, E_IMAGE | E_ANCHOR, TIGHT, moMODE_PLAIN, LOOSE, "Image", {0, NULL, NULL}, NULL, 0, NULL, NULL, image_menu, NULL, 1}, /*--------------------------------------------------------------- Stuff if on a ftp page ---------------------------------------------------------------*/ {Separator, ALL_TYPES, LOOSE, moMODE_FTP, TIGHT, "Separator", {0, NULL, NULL}, NULL, 0, NULL, NULL, NULL, NULL, 1}, {PushButton, ALL_TYPES, LOOSE, moMODE_FTP, TIGHT, "Put ...", {mo_ftp_put, NULL, NULL}, ftp_rmbm_cb, 0, NULL, NULL, NULL, NULL, 1}, {PushButton, ALL_TYPES, LOOSE, moMODE_FTP, TIGHT, "Make Directory", {mo_ftp_mkdir, NULL, NULL}, ftp_rmbm_cb, 0, NULL, NULL, NULL, NULL, 1}, {PushButton, E_ANCHOR, TIGHT, moMODE_FTP, TIGHT, "Remove", {mo_ftp_remove, NULL, NULL}, ftp_rmbm_cb, 0, NULL, NULL, NULL, NULL, 1}, /*--------------------------------------------------------------- Stuff if on a news page and not a link ---------------------------------------------------------------*/ {Separator, ALL_TYPES, LOOSE, moMODE_NEWS, TIGHT, "Separator", {0, NULL, NULL}, NULL, 0, NULL, NULL, NULL, NULL, 1}, {PushButton, ALL_TYPES, LOOSE, moMODE_NEWS, TIGHT, "Next Article", {mo_news_next, NULL, NULL}, menubar_cb, 0, NULL, NULL, NULL, NULL, 1}, {PushButton, ALL_TYPES, LOOSE, moMODE_NEWS, TIGHT, "Previous Article", {mo_news_prev, NULL, NULL}, menubar_cb, 0, NULL, NULL, NULL, NULL, 1}, {PushButton, ALL_TYPES, LOOSE, moMODE_NEWS, TIGHT, "Next Thread", {mo_news_nextt, NULL, NULL}, menubar_cb, 0, NULL, NULL, NULL, NULL, 1}, {PushButton, ALL_TYPES, LOOSE, moMODE_NEWS, TIGHT, "Previous Thread", {mo_news_prevt, NULL, NULL}, menubar_cb, 0, NULL, NULL, NULL, NULL, 1}, {PushButton, ALL_TYPES, LOOSE, moMODE_NEWS, TIGHT, "Article Index", {mo_news_index, NULL, NULL}, menubar_cb, 0, NULL, NULL, NULL, NULL, 1}, {PushButton, ALL_TYPES, LOOSE, moMODE_NEWS, TIGHT, "Group Index", {mo_news_groups, NULL, NULL}, menubar_cb, 0, NULL, NULL, NULL, NULL, 1}, {Separator, ALL_TYPES, LOOSE, moMODE_NEWS, TIGHT, NULL, {0, NULL, NULL}, NULL, 0, NULL, NULL, NULL, NULL, 1}, {PushButton, ALL_TYPES, LOOSE, moMODE_NEWS, TIGHT, "Post", {mo_news_post, NULL, NULL}, menubar_cb, 0, NULL, NULL, NULL, NULL, 1}, {PushButton, ALL_TYPES, LOOSE, moMODE_NEWS, TIGHT, "Followup", {mo_news_follow, NULL, NULL}, menubar_cb, 0, NULL, NULL, NULL, NULL, 1}, {Separator, ALL_TYPES, LOOSE, moMODE_NEWS, TIGHT, NULL, {0, NULL, NULL}, NULL, 0, NULL, NULL, NULL, NULL, 1}, {PushButton, NEWS_NOANCHOR, LOOSE, moMODE_NEWS, TIGHT, "Subscribe", {mo_news_sub, NULL, NULL}, menubar_cb, 0, NULL, NULL, NULL, NULL, 1}, {PushButton, NEWS_NOANCHOR, LOOSE, moMODE_NEWS, TIGHT, "Unsubscribe", {mo_news_unsub, NULL, NULL}, menubar_cb, 0, NULL, NULL, NULL, NULL, 1}, {PushButton, E_ANCHOR, LOOSE, moMODE_NEWS, TIGHT, "Subscribe", {mo_news_sub_anchor, NULL, NULL}, menubar_cb, 0, NULL, NULL, NULL, NULL, 1}, {PushButton, E_ANCHOR, LOOSE, moMODE_NEWS, TIGHT, "Unsubscribe", {mo_news_unsub_anchor, NULL, NULL}, menubar_cb, 0, NULL, NULL, NULL, NULL, 1}, {PushButton, NEWS_NOANCHOR, LOOSE, moMODE_NEWS, TIGHT, "Mark Group Read", {mo_news_mread, NULL, NULL}, menubar_cb, 0, NULL, NULL, NULL, NULL, 1}, {PushButton, E_ANCHOR, LOOSE, moMODE_NEWS, TIGHT, "Mark Group Read", {mo_news_mread_anchor, NULL, NULL}, menubar_cb, 0, NULL, NULL, NULL, NULL, 1}, /* {Separator, 0, 0, "Separator", 0, NULL, 0, NULL, NULL, NULL, NULL}, {CascadeButton, 0, 0, "Kodak Photo CD", 0, NULL, 0, NULL, NULL, photo_cd_sub_menu, NULL}, */ { LastItem }, }; #endif #endif