HOOKF(void, ami_menu_item_edit_copy, APTR, window, struct IntuiMessage *) { struct bitmap *bm; struct gui_window_2 *gwin; GetAttr(WINDOW_UserData, (Object *)window, (ULONG *)&gwin); if(browser_window_can_select(gwin->gw->bw)) { browser_window_key_press(gwin->gw->bw, NS_KEY_COPY_SELECTION); browser_window_key_press(gwin->gw->bw, NS_KEY_CLEAR_SELECTION); } else if((bm = content_get_bitmap(browser_window_get_content(gwin->gw->bw)))) { /** @todo It should be checked that the lifetime of * the objects containing the values returned (and the * constness cast away) is safe. */ ami_bitmap_set_url(bm, browser_window_get_url(gwin->gw->bw)); ami_bitmap_set_title(bm, browser_window_get_title(gwin->gw->bw)); ami_easy_clipboard_bitmap(bm); } #ifdef WITH_NS_SVG else if(ami_mime_compare(browser_window_get_content(gwin->gw->bw), "svg") == true) { ami_easy_clipboard_svg(browser_window_get_content(gwin->gw->bw)); } #endif }
bool ami_easy_clipboard_svg(struct hlcache_handle *c) { const char *source_data; ULONG source_size; if(ami_mime_compare(c, "svg") == false) return false; if((source_data = content_get_source_data(c, &source_size)) == NULL) return false; if(!(OpenIFF(iffh,IFFF_WRITE))) { ami_svg_to_dr2d(iffh, source_data, source_size, nsurl_access(hlcache_handle_get_url(c))); CloseIFF(iffh); } return true; }
void gui_drag_save_object(struct gui_window *g, struct hlcache_handle *c, gui_save_type type) { const char *filetype = NULL; /* Check we are running on Workbench */ if(nsoption_charp(pubscreen_name) == NULL) return; if(strcmp(nsoption_charp(pubscreen_name), "Workbench")) return; switch(type) { case GUI_SAVE_OBJECT_ORIG: // object case GUI_SAVE_SOURCE: filetype = ami_mime_content_to_filetype(c); break; case GUI_SAVE_COMPLETE: filetype = "drawer"; break; case GUI_SAVE_OBJECT_NATIVE: #ifdef WITH_NS_SVG if(ami_mime_compare(c, "svg") == true) { filetype = "dr2d"; } else #endif { filetype = "ilbm"; } break; default: break; } ami_drag_icon_show(g->shared->win, filetype); drag_save_data = c; drag_save_gui = g; drag_save = type; }
static void ami_menu_item_edit_copy(struct Hook *hook, APTR window, struct IntuiMessage *msg) { struct bitmap *bm; struct gui_window_2 *gwin; GetAttr(WINDOW_UserData, (Object *)window, (ULONG *)&gwin); if(content_get_type(gwin->bw->current_content) <= CONTENT_CSS) { browser_window_key_press(gwin->bw, KEY_COPY_SELECTION); browser_window_key_press(gwin->bw, KEY_CLEAR_SELECTION); } else if(bm = content_get_bitmap(gwin->bw->current_content)) { bm->url = (char *)nsurl_access(hlcache_handle_get_url(gwin->bw->current_content)); bm->title = (char *)content_get_title(gwin->bw->current_content); ami_easy_clipboard_bitmap(bm); } #ifdef WITH_NS_SVG else if(ami_mime_compare(gwin->bw->current_content, "svg") == true) { ami_easy_clipboard_svg(gwin->bw->current_content); } #endif }
void ami_menu_update_disabled(struct gui_window *g, hlcache_handle *c) { struct Window *win = g->shared->win; if(nsoption_bool(kiosk_mode) == true) return; if(content_get_type(c) <= CONTENT_CSS) { OnMenu(win,AMI_MENU_SAVEAS_TEXT); OnMenu(win,AMI_MENU_SAVEAS_COMPLETE); #ifdef WITH_PDF_EXPORT OnMenu(win,AMI_MENU_SAVEAS_PDF); #endif if(browser_window_get_editor_flags(g->shared->bw) & BW_EDITOR_CAN_COPY) { OnMenu(win,AMI_MENU_COPY); OnMenu(win,AMI_MENU_CLEAR); } else { OffMenu(win,AMI_MENU_COPY); OffMenu(win,AMI_MENU_CLEAR); } if(browser_window_get_editor_flags(g->shared->bw) & BW_EDITOR_CAN_CUT) OnMenu(win,AMI_MENU_CUT); else OffMenu(win,AMI_MENU_CUT); if(browser_window_get_editor_flags(g->shared->bw) & BW_EDITOR_CAN_PASTE) OnMenu(win,AMI_MENU_PASTE); else OffMenu(win,AMI_MENU_PASTE); OnMenu(win,AMI_MENU_SELECTALL); OnMenu(win,AMI_MENU_FIND); OffMenu(win,AMI_MENU_SAVEAS_IFF); } else { OffMenu(win,AMI_MENU_CUT); OffMenu(win,AMI_MENU_PASTE); OffMenu(win,AMI_MENU_CLEAR); OffMenu(win,AMI_MENU_SAVEAS_TEXT); OffMenu(win,AMI_MENU_SAVEAS_COMPLETE); #ifdef WITH_PDF_EXPORT OffMenu(win,AMI_MENU_SAVEAS_PDF); #endif OffMenu(win,AMI_MENU_SELECTALL); OffMenu(win,AMI_MENU_FIND); #ifdef WITH_NS_SVG if(content_get_bitmap(c) || (ami_mime_compare(c, "svg") == true)) #else if(content_get_bitmap(c)) #endif { OnMenu(win,AMI_MENU_COPY); OnMenu(win,AMI_MENU_SAVEAS_IFF); } else { OffMenu(win,AMI_MENU_COPY); OffMenu(win,AMI_MENU_SAVEAS_IFF); } } }
void ami_file_save(int type, char *fname, struct Window *win, struct hlcache_handle *object, struct hlcache_handle *favicon, struct browser_window *bw) { BPTR lock, fh; const char *source_data; ULONG source_size; struct bitmap *bm; ami_update_pointer(win, GUI_POINTER_WAIT); if(ami_download_check_overwrite(fname, win, 0)) { switch(type) { case AMINS_SAVE_SOURCE: if((source_data = content_get_source_data(object, &source_size))) { BPTR fh; if(fh = FOpen(fname, MODE_NEWFILE,0)) { FWrite(fh, source_data, 1, source_size); FClose(fh); } } break; case AMINS_SAVE_TEXT: save_as_text(object, fname); break; case AMINS_SAVE_COMPLETE: if(lock = CreateDir(fname)) { UnLock(lock); save_complete(object, fname, ami_file_set_type); amiga_icon_superimpose_favicon(fname, favicon, NULL); } break; case AMINS_SAVE_PDF: #ifdef WITH_PDF_EXPORT if(save_as_pdf(object, fname)) amiga_icon_superimpose_favicon(fname, favicon, "pdf"); #endif break; case AMINS_SAVE_IFF: if((bm = content_get_bitmap(object))) { bm->url = (char *)nsurl_access(hlcache_handle_get_url(object)); bm->title = (char *)content_get_title(object); bitmap_save(bm, fname, 0); } #ifdef WITH_NS_SVG else if(ami_mime_compare(object, "svg") == true) { ami_save_svg(object, fname); } #endif break; case AMINS_SAVE_SELECTION: if(source_data = browser_window_get_selection(bw)) { if(fh = FOpen(fname, MODE_NEWFILE,0)) { FWrite(fh, source_data, 1, strlen(source_data)); FClose(fh); } free((void *)source_data); } break; } if(object) SetComment(fname, nsurl_access(hlcache_handle_get_url(object))); } ami_update_pointer(win, GUI_POINTER_DEFAULT); }