From cef8c477c396458269a91ee756fc711bed74d0f4 Mon Sep 17 00:00:00 2001 From: James Bursa Date: Thu, 28 Aug 2003 19:21:27 +0000 Subject: [project @ 2003-08-28 19:21:27 by bursa] Start implementing download window. svn path=/import/netsurf/; revision=255 --- desktop/browser.c | 46 +++++++++++++++++++++++++++++++++++++++++++++- desktop/gui.h | 13 +++++++++---- 2 files changed, 54 insertions(+), 5 deletions(-) (limited to 'desktop') diff --git a/desktop/browser.c b/desktop/browser.c index 0782bd6fb..d296ddaea 100644 --- a/desktop/browser.c +++ b/desktop/browser.c @@ -35,6 +35,8 @@ static void browser_window_follow_link(struct browser_window* bw, unsigned long click_x, unsigned long click_y, int click_type); static void browser_window_callback(content_msg msg, struct content *c, void *p1, void *p2, const char *error); +static void download_window_callback(content_msg msg, struct content *c, + void *p1, void *p2, const char *error); static void clear_radio_gadgets(struct browser_window* bw, struct box* box, struct gui_gadget* group); static void gui_redraw_gadget2(struct browser_window* bw, struct box* box, struct gui_gadget* g, unsigned long x, unsigned long y); @@ -166,7 +168,7 @@ struct browser_window* create_browser_window(int flags, int width, int height) bw->url = NULL; - bw->window = create_gui_browser_window(bw); + bw->window = gui_create_browser_window(bw); return bw; } @@ -274,9 +276,20 @@ void browser_window_callback(content_msg msg, struct content *c, { case CONTENT_MSG_LOADING: if (c->type == CONTENT_OTHER) { + gui_window *download_window; /* TODO: implement downloads */ /* we probably want to open a new window with a save icon and progress bar, * and transfer content_loading to it */ + assert(bw->loading_content == c); + + /* create download window and add content to it */ + download_window = gui_create_download_window(c); + content_add_user(c, download_window_callback, download_window, 0); + + /* remove content from browser window */ + bw->loading_content = 0; + content_remove_user(c, browser_window_callback, bw, 0); + browser_window_stop_throbber(bw); } break; @@ -347,6 +360,37 @@ void browser_window_callback(content_msg msg, struct content *c, } } +void download_window_callback(content_msg msg, struct content *c, + void *p1, void *p2, const char *error) +{ + gui_window *download_window = p1; + + switch (msg) { + case CONTENT_MSG_STATUS: + gui_download_window_update_status(download_window); + break; + + case CONTENT_MSG_DONE: + gui_download_window_done(download_window); + break; + + case CONTENT_MSG_ERROR: + gui_download_window_error(download_window, error); + break; + + case CONTENT_MSG_READY: + /* not possible for CONTENT_OTHER */ + assert(0); + break; + + case CONTENT_MSG_LOADING: + case CONTENT_MSG_REDIRECT: + /* not possible at this point, handled above */ + assert(0); + break; + } +} + void clear_radio_gadgets(struct browser_window* bw, struct box* box, struct gui_gadget* group) { struct box* c; diff --git a/desktop/gui.h b/desktop/gui.h index 8438e8ee0..a12cb8d5e 100644 --- a/desktop/gui.h +++ b/desktop/gui.h @@ -9,11 +9,11 @@ #ifndef _NETSURF_DESKTOP_GUI_H_ #define _NETSURF_DESKTOP_GUI_H_ -typedef enum { GUI_BROWSER_WINDOW } gui_window_type; +typedef enum { GUI_BROWSER_WINDOW, GUI_DOWNLOAD_WINDOW } gui_window_type; typedef enum { SAFE, UNSAFE } gui_safety; -struct ro_gui_window; -typedef struct ro_gui_window gui_window; +struct gui_window; +typedef struct gui_window gui_window; #include "netsurf/desktop/browser.h" @@ -29,7 +29,8 @@ struct gui_message typedef struct gui_message gui_message; -gui_window* create_gui_browser_window(struct browser_window* bw); +gui_window *gui_create_browser_window(struct browser_window *bw); +gui_window *gui_create_download_window(struct content *content); void gui_window_destroy(gui_window* g); void gui_window_show(gui_window* g); void gui_window_hide(gui_window* g); @@ -44,6 +45,10 @@ void gui_window_set_title(gui_window* g, char* title); void gui_window_message(gui_window* g, gui_message* msg); +void gui_download_window_update_status(gui_window *g); +void gui_download_window_done(gui_window *g); +void gui_download_window_error(gui_window *g, const char *error); + void gui_init(int argc, char** argv); void gui_multitask(void); void gui_poll(void); -- cgit v1.2.3