From 48f868a9555be385f156e9396079ad5d0ee388f6 Mon Sep 17 00:00:00 2001 From: Vincent Sanders Date: Sat, 31 Dec 2016 00:53:20 +0000 Subject: move tree compatability layer to amiga frontend --- frontends/amiga/Makefile | 5 +- frontends/amiga/cookies.h | 2 +- frontends/amiga/desktop-tree.c | 353 +++++++++++++++++++++++++++++++++++++++++ frontends/amiga/desktop-tree.h | 88 ++++++++++ frontends/amiga/gui.c | 2 +- frontends/amiga/history.h | 2 +- frontends/amiga/tree.h | 2 +- 7 files changed, 448 insertions(+), 6 deletions(-) create mode 100644 frontends/amiga/desktop-tree.c create mode 100644 frontends/amiga/desktop-tree.h (limited to 'frontends') diff --git a/frontends/amiga/Makefile b/frontends/amiga/Makefile index ea6e8fe67..f3c178ee6 100644 --- a/frontends/amiga/Makefile +++ b/frontends/amiga/Makefile @@ -37,7 +37,7 @@ MESSAGES_FILTER=ami # sources purely for the Amiga build S_FRONTEND := gui.c tree.c history.c hotlist.c schedule.c file.c \ - misc.c bitmap.c font.c filetype.c utf8.c login.c memory.c \ + misc.c bitmap.c font.c filetype.c utf8.c login.c memory.c \ plotters.c object.c menu.c save_pdf.c arexx.c version.c \ cookies.c ctxmenu.c clipboard.c help.c font_scan.c \ launch.c search.c history_local.c download.c iff_dr2d.c \ @@ -45,7 +45,8 @@ S_FRONTEND := gui.c tree.c history.c hotlist.c schedule.c file.c \ datatypes.c dt_picture.c dt_anim.c dt_sound.c plugin_hack.c \ stringview/stringview.c stringview/urlhistory.c rtg.c \ agclass/amigaguide_class.c os3support.c font_diskfont.c \ - selectmenu.c hash/xxhash.c font_cache.c font_bullet.c nsoption.c + selectmenu.c hash/xxhash.c font_cache.c font_bullet.c \ + nsoption.c desktop-tree.c # This is the final source build list # Note this is deliberately *not* expanded here as common and image diff --git a/frontends/amiga/cookies.h b/frontends/amiga/cookies.h index 85e553cb8..157091db9 100755 --- a/frontends/amiga/cookies.h +++ b/frontends/amiga/cookies.h @@ -18,7 +18,7 @@ #ifndef AMIGA_COOKIES_H #define AMIGA_COOKIES_H -#include "desktop/tree.h" +#include "amiga/desktop-tree.h" #include "amiga/tree.h" void ami_cookies_initialise(void); diff --git a/frontends/amiga/desktop-tree.c b/frontends/amiga/desktop-tree.c new file mode 100644 index 000000000..3fb41edd5 --- /dev/null +++ b/frontends/amiga/desktop-tree.c @@ -0,0 +1,353 @@ +/* + * Copyright 2004 Richard Wilson + * Copyright 2009 Paul Blokus + * + * 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 . + */ + +/** \file + * deprecated compatibility layer for new treeview modules. Do not use. + */ + +#include +#include +#include +#include +#include + +#include "utils/log.h" +#include "utils/messages.h" +#include "utils/utils.h" +#include "utils/nsoption.h" +#include "netsurf/misc.h" +#include "netsurf/browser_window.h" +#include "netsurf/core_window.h" +#include "content/content.h" +#include "content/hlcache.h" +#include "desktop/gui_internal.h" +#include "desktop/treeview.h" +#include "desktop/hotlist.h" +#include "desktop/cookie_manager.h" +#include "desktop/global_history.h" +#include "desktop/sslcert_viewer.h" + +#include "amiga/desktop-tree.h" + +struct tree { + unsigned int flags; /* Tree flags */ + tree_drag_type drag; + const struct treeview_table *callbacks; + void *client_data; /* User assigned data for the callbacks */ +}; + + +struct sslcert_session_data *ssl_current_session = NULL; +const char *tree_hotlist_path = NULL; + +static void treeview_test_redraw_request(struct core_window *cw, + const struct rect *r) +{ + struct tree *tree = (struct tree *)cw; + + tree->callbacks->redraw_request(r->x0, r->y0, + r->x1 - r->x0, r->y1 - r->y0, + tree->client_data); +} + +static void treeview_test_update_size(struct core_window *cw, + int width, int height) +{ + struct tree *tree = (struct tree *)cw; + + tree->callbacks->resized(tree, width, height, tree->client_data); +} + +static void treeview_test_scroll_visible(struct core_window *cw, + const struct rect *r) +{ +} + +static void treeview_test_get_window_dimensions(struct core_window *cw, + int *width, int *height) +{ + struct tree *tree = (struct tree *)cw; + + tree->callbacks->get_window_dimensions(width, height, + tree->client_data); +} + +static void treeview_test_drag_status(struct core_window *cw, + core_window_drag_status ds) +{ + struct tree *tree = (struct tree *)cw; + + switch (ds) { + case CORE_WINDOW_DRAG_NONE: + tree->drag = TREE_NO_DRAG; + break; + + case CORE_WINDOW_DRAG_SELECTION: + tree->drag = TREE_SELECT_DRAG; + break; + + case CORE_WINDOW_DRAG_MOVE: + tree->drag = TREE_MOVE_DRAG; + break; + + case CORE_WINDOW_DRAG_TEXT_SELECTION: + tree->drag = TREE_TEXTAREA_DRAG; + break; + + default: + break; + } +} + +struct core_window_callback_table cw_t = { + .redraw_request = treeview_test_redraw_request, + .update_size = treeview_test_update_size, + .scroll_visible = treeview_test_scroll_visible, + .get_window_dimensions = treeview_test_get_window_dimensions, + .drag_status = treeview_test_drag_status +}; + +static bool treeview_test_init(struct tree *tree) +{ + nserror err; + + switch (tree->flags) { + case TREE_COOKIES: + err = cookie_manager_init(&cw_t, (struct core_window *)tree); + if (err != NSERROR_OK) + guit->misc->warning("Couldn't init new cookie manager.", 0); + break; + case TREE_HISTORY: + err = global_history_init(&cw_t, (struct core_window *)tree); + if (err != NSERROR_OK) + guit->misc->warning("Couldn't init new global history.", 0); + break; + case TREE_HOTLIST: + err = hotlist_init(tree_hotlist_path); + if (err != NSERROR_OK) + guit->misc->warning("Couldn't init new hotlist.", 0); + err = hotlist_manager_init(&cw_t, (struct core_window *)tree); + if (err != NSERROR_OK) + guit->misc->warning("Couldn't init hotlist manager.", 0); + break; + case TREE_SSLCERT: + assert(ssl_current_session == NULL && + "Call sslcert_viewer_init directly, " + "this compat. layer can't cope with simultanious " + "sslcert viewers"); + err = sslcert_viewer_init(&cw_t, (struct core_window *)tree, + ssl_current_session); + if (err != NSERROR_OK) + guit->misc->warning("Couldn't init new sslcert viewer.", 0); + break; + } + + return true; +} + +static bool treeview_test_fini(struct tree *tree) +{ + nserror err; + + switch (tree->flags) { + case TREE_COOKIES: + err = cookie_manager_fini(); + if (err != NSERROR_OK) + guit->misc->warning("Couldn't finalise cookie manager.", 0); + break; + case TREE_HISTORY: + err = global_history_fini(); + if (err != NSERROR_OK) + guit->misc->warning("Couldn't finalise cookie manager.", 0); + break; + case TREE_HOTLIST: + err = hotlist_fini(tree_hotlist_path); + if (err != NSERROR_OK) + guit->misc->warning("Couldn't finalise hotlist.", 0); + break; + case TREE_SSLCERT: + assert(ssl_current_session != NULL && + "Can't use sslcert window after sslcert_viewer_fini()"); + err = sslcert_viewer_fini(ssl_current_session); + ssl_current_session = NULL; + if (err != NSERROR_OK) + guit->misc->warning("Couldn't finalise sslcert viewer.", 0); + break; + } + + return true; +} + +static bool treeview_test_redraw(struct tree *tree, int x, int y, + int clip_x, int clip_y, int clip_width, int clip_height, + const struct redraw_context *ctx) +{ + struct rect clip; + + clip.x0 = clip_x; + clip.y0 = clip_y; + clip.x1 = clip_x + clip_width; + clip.y1 = clip_y + clip_height; + + switch (tree->flags) { + case TREE_SSLCERT: + if (ssl_current_session != NULL) { + sslcert_viewer_redraw(ssl_current_session, x, y, &clip, ctx); + } + return true; + case TREE_COOKIES: + cookie_manager_redraw(x, y, &clip, ctx); + return true; + case TREE_HISTORY: + global_history_redraw(x, y, &clip, ctx); + return true; + case TREE_HOTLIST: + hotlist_redraw(x, y, &clip, ctx); + return true; + } + + return false; +} + +static bool treeview_test_mouse_action(struct tree *tree, + browser_mouse_state mouse, int x, int y) +{ + switch (tree->flags) { + case TREE_SSLCERT: + assert(ssl_current_session != NULL && + "Can't use sslcert window after sslcert_viewer_fini()"); + sslcert_viewer_mouse_action(ssl_current_session, mouse, x, y); + return true; + case TREE_COOKIES: + cookie_manager_mouse_action(mouse, x, y); + return true; + case TREE_HISTORY: + global_history_mouse_action(mouse, x, y); + return true; + case TREE_HOTLIST: + hotlist_mouse_action(mouse, x, y); + return true; + } + + return false; +} + +static bool treeview_test_keypress(struct tree *tree, uint32_t key) +{ + switch (tree->flags) { + case TREE_SSLCERT: + assert(ssl_current_session != NULL && + "Can't use sslcert window after sslcert_viewer_fini()"); + sslcert_viewer_keypress(ssl_current_session, key); + return true; + case TREE_COOKIES: + cookie_manager_keypress(key); + return true; + case TREE_HISTORY: + global_history_keypress(key); + return true; + case TREE_HOTLIST: + hotlist_keypress(key); + return true; + } + + return false; +} + +/* -------------------------------------------------------------------------- */ + +/** deprecated compatibility layer for new treeview modules. Do not use. */ +struct tree *tree_create(unsigned int flags, + const struct treeview_table *callbacks, void *client_data) +{ + struct tree *tree; + + tree = calloc(sizeof(struct tree), 1); + if (tree == NULL) { + LOG("calloc failed"); + guit->misc->warning(messages_get_errorcode(NSERROR_NOMEM), 0); + return NULL; + } + + tree->flags = flags; + tree->drag = TREE_NO_DRAG; + tree->callbacks = callbacks; + tree->client_data = client_data; + + treeview_test_init(tree); + + return tree; +} + +/** deprecated compatibility layer for new treeview modules. Do not use. */ +void tree_delete(struct tree *tree) +{ + treeview_test_fini(tree); + free(tree); +} + +/** deprecated compatibility layer for new treeview modules. Do not use. */ +void tree_draw(struct tree *tree, int x, int y, + int clip_x, int clip_y, int clip_width, int clip_height, + const struct redraw_context *ctx) +{ + assert(tree != NULL); + + treeview_test_redraw(tree, x, y, clip_x, clip_y, + clip_width, clip_height, ctx); +} + +/** deprecated compatibility layer for new treeview modules. Do not use. */ +bool tree_mouse_action(struct tree *tree, browser_mouse_state mouse, int x, + int y) +{ + assert(tree != NULL); + + if (treeview_test_mouse_action(tree, mouse, x, y)) { + return true; + } + + return false; +} + +/** deprecated compatibility layer for new treeview modules. Do not use. */ +void tree_drag_end(struct tree *tree, browser_mouse_state mouse, int x0, int y0, + int x1, int y1) +{ + assert(tree != NULL); + + treeview_test_mouse_action(tree, BROWSER_MOUSE_HOVER, x1, y1); +} + +/** deprecated compatibility layer for new treeview modules. Do not use. */ +bool tree_keypress(struct tree *tree, uint32_t key) +{ + if (treeview_test_keypress(tree, key)) { + return true; + } + + return false; +} + +/** deprecated compatibility layer for new treeview modules. Do not use. */ +tree_drag_type tree_drag_status(struct tree *tree) +{ + assert(tree != NULL); + return tree->drag; +} diff --git a/frontends/amiga/desktop-tree.h b/frontends/amiga/desktop-tree.h new file mode 100644 index 000000000..f8864e167 --- /dev/null +++ b/frontends/amiga/desktop-tree.h @@ -0,0 +1,88 @@ +/* + * Copyright 2004 Richard Wilson + * Copyright 2009 Paul Blokus + * + * 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 . + */ + +/** \file + * deprecated compatibility layer for new treeview modules. Do not use. + */ + +#ifndef _NETSURF_DESKTOP_TREE_H_ +#define _NETSURF_DESKTOP_TREE_H_ + +#include +#include + +#include "netsurf/mouse.h" + +struct sslcert_session_data; +struct tree; +struct redraw_context; + +/** + * Current ssl session data for treeview + * + * @todo FIXME global certificate treeview state must go away, this is + * just wrong. + */ +extern struct sslcert_session_data *ssl_current_session; +extern const char *tree_hotlist_path; + +/* Tree flags */ +enum tree_flags { + TREE_HISTORY, + TREE_COOKIES, + TREE_SSLCERT, + TREE_HOTLIST +}; + +typedef enum { + TREE_NO_DRAG = 0, + TREE_SELECT_DRAG, + TREE_MOVE_DRAG, + TREE_TEXTAREA_DRAG, /** < A drag that is passed to a textarea */ + TREE_UNKNOWN_DRAG /** < A drag the tree itself won't handle */ +} tree_drag_type; + +/** callbacks to perform necessary operations on treeview. */ +struct treeview_table { + void (*redraw_request)(int x, int y, int width, int height, + void *data); /**< request a redraw. */ + void (*resized)(struct tree *tree, int width, int height, + void *data); /**< resize treeview area. */ + void (*scroll_visible)(int y, int height, void *data); /**< scroll visible treeview area. */ + void (*get_window_dimensions)(int *width, int *height, void *data); /**< get dimensions of window */ +}; + +struct tree *tree_create(unsigned int flags, + const struct treeview_table *callbacks, + void *client_data); + +/** deprecated compatibility layer for new treeview modules. Do not use. */ +void tree_delete(struct tree *tree); +tree_drag_type tree_drag_status(struct tree *tree); +void tree_draw(struct tree *tree, int x, int y, + int clip_x, int clip_y, int clip_width, int clip_height, + const struct redraw_context *ctx); +bool tree_mouse_action(struct tree *tree, browser_mouse_state mouse, + int x, int y); +void tree_drag_end(struct tree *tree, browser_mouse_state mouse, int x0, int y0, + int x1, int y1); +bool tree_keypress(struct tree *tree, uint32_t key); + + +#endif diff --git a/frontends/amiga/gui.c b/frontends/amiga/gui.c index e835e2bd6..a51d8c2db 100644 --- a/frontends/amiga/gui.c +++ b/frontends/amiga/gui.c @@ -116,9 +116,9 @@ #include "desktop/save_complete.h" #include "desktop/scrollbar.h" #include "desktop/searchweb.h" -#include "desktop/tree.h" /* NetSurf Amiga platform includes */ +#include "amiga/desktop-tree.h" #include "amiga/gui.h" #include "amiga/arexx.h" #include "amiga/bitmap.h" diff --git a/frontends/amiga/history.h b/frontends/amiga/history.h index d20cfe0e1..47e00ed10 100755 --- a/frontends/amiga/history.h +++ b/frontends/amiga/history.h @@ -18,7 +18,7 @@ #ifndef AMIGA_HISTORY_H #define AMIGA_HISTORY_H -#include "desktop/tree.h" +#include "amiga/desktop-tree.h" #define GLOBAL_HISTORY_RECENT_URLS 16 diff --git a/frontends/amiga/tree.h b/frontends/amiga/tree.h index aa3c052e9..a8cada58d 100755 --- a/frontends/amiga/tree.h +++ b/frontends/amiga/tree.h @@ -22,7 +22,7 @@ #include #include #include "amiga/os3support.h" -#include "desktop/tree.h" +#include "amiga/desktop-tree.h" struct treeview_window; -- cgit v1.2.3