summaryrefslogtreecommitdiff
path: root/atari
diff options
context:
space:
mode:
Diffstat (limited to 'atari')
-rw-r--r--atari/Makefile.target14
-rw-r--r--atari/cookies.c239
-rw-r--r--atari/cookies.h38
-rw-r--r--atari/deskmenu.c13
-rw-r--r--atari/gemtk/gemtk.h18
-rw-r--r--atari/gemtk/guiwin.c49
-rw-r--r--atari/gemtk/utils.c19
-rw-r--r--atari/gui.c44
-rwxr-xr-xatari/gui.h6
-rw-r--r--atari/history.c260
-rw-r--r--atari/history.h38
-rw-r--r--atari/hotlist.c138
-rw-r--r--atari/hotlist.h4
-rwxr-xr-xatari/res/netsurf.rscbin34578 -> 34722 bytes
-rwxr-xr-xatari/res/netsurf.rsh11
-rwxr-xr-xatari/res/netsurf.rsm17
-rw-r--r--atari/toolbar.c4
-rw-r--r--atari/treeview.c372
-rw-r--r--atari/treeview.h28
19 files changed, 1167 insertions, 145 deletions
diff --git a/atari/Makefile.target b/atari/Makefile.target
index fee49633e..e47eb5d44 100644
--- a/atari/Makefile.target
+++ b/atari/Makefile.target
@@ -78,6 +78,7 @@ S_ATARI := \
bitmap.c \
clipboard.c \
ctxmenu.c \
+ cookies.c \
deskmenu.c \
download.c \
encoding.c \
@@ -85,18 +86,20 @@ S_ATARI := \
filetype.c \
font.c \
gui.c \
+ hotlist.c \
+ history.c \
login.c \
misc.c \
osspec.c \
+ redrawslots.c \
+ rootwin.c \
schedule.c \
search.c \
statusbar.c \
+ settings.c \
+ toolbar.c \
thumbnail.c \
treeview.c \
- redrawslots.c \
- rootwin.c \
- toolbar.c \
- settings.c \
plot/plot.c \
plot/fontplot.c \
plot/eddi.s \
@@ -110,9 +113,6 @@ S_ATARI := \
gemtk/utils.c \
gemtk/objc.c
-# cookies.c \
-# hotlist.c \
-# history.c\
S_ATARI := $(addprefix atari/,$(S_ATARI))
diff --git a/atari/cookies.c b/atari/cookies.c
index dfed6d037..9ac1890d7 100644
--- a/atari/cookies.c
+++ b/atari/cookies.c
@@ -15,3 +15,242 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
+
+#include <ctype.h>
+#include <string.h>
+#include <stdbool.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <time.h>
+
+#include "desktop/browser.h"
+#include "content/content.h"
+#include "content/hlcache.h"
+#include "content/urldb.h"
+#include "utils/nsoption.h"
+#include "desktop/cookie_manager.h"
+#include "desktop/tree.h"
+#include "desktop/gui.h"
+#include "desktop/core_window.h"
+#include "utils/log.h"
+#include "utils/messages.h"
+#include "utils/utils.h"
+#include "utils/url.h"
+#include "atari/gui.h"
+#include "atari/misc.h"
+#include "atari/treeview.h"
+#include "atari/cookies.h"
+#include "atari/findfile.h"
+#include "atari/gemtk/gemtk.h"
+#include "atari/res/netsurf.rsh"
+
+extern GRECT desk_area;
+
+struct atari_cookie_manager_s atari_cookie_manager;
+
+
+/* Setup Atari Treeview Callbacks: */
+static nserror atari_cookie_manager_init_phase2(struct core_window *cw,
+ struct core_window_callback_table * default_callbacks);
+static void atari_cookie_manager_finish(struct core_window *cw);
+static void atari_cookie_manager_keypress(struct core_window *cw,
+ uint32_t ucs4);
+static void atari_cookie_manager_mouse_action(struct core_window *cw,
+ browser_mouse_state mouse,
+ int x, int y);
+static void atari_cookie_manager_draw(struct core_window *cw, int x,
+ int y, struct rect *clip,
+ const struct redraw_context *ctx);
+static short handle_event(GUIWIN *win, EVMULT_OUT *ev_out, short msg[8]);
+
+static struct atari_treeview_callbacks atari_cookie_manager_treeview_callbacks = {
+ .init_phase2 = atari_cookie_manager_init_phase2,
+ .finish = atari_cookie_manager_finish,
+ .draw = atari_cookie_manager_draw,
+ .keypress = atari_cookie_manager_keypress,
+ .mouse_action = atari_cookie_manager_mouse_action,
+ .gemtk_user_func = handle_event
+};
+
+
+static nserror atari_cookie_manager_init_phase2(struct core_window *cw,
+ struct core_window_callback_table *cb_t)
+{
+ LOG((""));
+ return(cookie_manager_init(cb_t, cw));
+}
+
+static void atari_cookie_manager_finish(struct core_window *cw)
+{
+ LOG((""));
+ cookie_manager_fini();
+}
+
+static void atari_cookie_manager_draw(struct core_window *cw, int x,
+ int y, struct rect *clip,
+ const struct redraw_context *ctx)
+{
+ cookie_manager_redraw(x, y, clip, ctx);
+}
+
+static void atari_cookie_manager_keypress(struct core_window *cw, uint32_t ucs4)
+{
+ LOG(("ucs4: %lu\n", ucs4));
+ cookie_manager_keypress(ucs4);
+}
+
+static void atari_cookie_manager_mouse_action(struct core_window *cw,
+ browser_mouse_state mouse,
+ int x, int y)
+{
+ if((mouse & BROWSER_MOUSE_HOVER) && cookie_manager_has_selection()){
+ cookie_manager_mouse_action(mouse, x, y);
+ } else {
+ cookie_manager_mouse_action(mouse, x, y);
+ }
+
+}
+
+
+
+static short handle_event(GUIWIN *win, EVMULT_OUT *ev_out, short msg[8])
+{
+ struct atari_treeview_window *tv=NULL;
+ GRECT tb_area;
+ GUIWIN * gemtk_win;
+ struct gui_window * gw;
+ char *cur_url = NULL;
+ char *cur_title = NULL;
+
+ LOG((""));
+
+ if(ev_out->emo_events & MU_MESAG){
+ switch (msg[0]) {
+
+ case WM_TOOLBAR:
+ LOG(("WM_TOOLBAR"));
+ /*
+ tv = (struct atari_treeview_window*) gemtk_wm_get_user_data(win);
+ assert(tv);
+ switch (msg[4]) {
+
+ case TOOLBAR_HOTLIST_EDIT:
+ hotlist_edit_selection();
+ break;
+ }
+
+ gemtk_win = atari_treeview_get_gemtk_window(tv);
+ assert(gemtk_win);
+ gemtk_obj_get_tree(TOOLBAR_HOTLIST)[msg[4]].ob_state &= ~OS_SELECTED;
+ atari_treeview_get_grect(tv, TREEVIEW_AREA_TOOLBAR, &tb_area);
+ evnt_timer(150);
+ gemtk_wm_exec_redraw(gemtk_win, &tb_area);
+ */
+ break;
+
+ case WM_CLOSED:
+ atari_cookie_manager_close();
+ break;
+
+ default: break;
+ }
+ }
+
+ // TODO: implement selectable objects in toolbar API:
+ // ObjcChange( OC_TOOLBAR, win, buff[4], ~SELECTED, OC_MSG );
+}
+
+void atari_cookie_manager_init(void)
+{
+ if (atari_cookie_manager.init == false) {
+
+ if (atari_cookie_manager.window == NULL) {
+ int flags = ATARI_TREEVIEW_WIDGETS;
+ short handle = -1;
+ GRECT desk;
+ OBJECT * tree = gemtk_obj_get_tree(TOOLBAR_COOKIES);
+ assert( tree );
+
+ handle = wind_create(flags, 0, 0, desk_area.g_w, desk_area.g_h);
+ atari_cookie_manager.window = gemtk_wm_add(handle,
+ GEMTK_WM_FLAG_DEFAULTS, NULL);
+ if( atari_cookie_manager.window == NULL ) {
+ gemtk_msg_box_show(GEMTK_MSG_BOX_ALERT,
+ "Failed to allocate Treeview:\nCookies");
+ return;
+ }
+ wind_set_str(handle, WF_NAME, (char*)messages_get("Cookies"));
+ gemtk_wm_set_toolbar(atari_cookie_manager.window, tree, 0, 0);
+ gemtk_wm_unlink(atari_cookie_manager.window);
+
+ atari_cookie_manager.tv = atari_treeview_create(
+ atari_cookie_manager.window,
+ &atari_cookie_manager_treeview_callbacks,
+ flags);
+
+ if (atari_cookie_manager.tv == NULL) {
+ /* handle it properly, clean up previous allocs */
+ LOG(("Failed to allocate treeview"));
+ return;
+ }
+
+ } else {
+
+ }
+ }
+ atari_cookie_manager.init = true;
+}
+void atari_cookie_manager_open(void)
+{
+ assert(atari_cookie_manager.init);
+
+ if (atari_cookie_manager.init == false) {
+ // TODO
+ return;
+ }
+
+ if (atari_treeview_is_open(atari_cookie_manager.tv) == false) {
+
+ GRECT pos;
+ pos.g_x = desk_area.g_w - desk_area.g_w / 4;
+ pos.g_y = desk_area.g_y;
+ pos.g_w = desk_area.g_w / 4;
+ pos.g_h = desk_area.g_h;
+
+ atari_treeview_open(atari_cookie_manager.tv, &pos);
+ } else {
+ wind_set(gemtk_wm_get_handle(atari_cookie_manager.window), WF_TOP, 1, 0,
+ 0, 0);
+ }
+}
+
+
+void atari_cookie_manager_close(void)
+{
+ atari_treeview_close(atari_cookie_manager.tv);
+}
+
+
+void atari_cookie_manager_destroy(void)
+{
+ if( atari_cookie_manager.init == false) {
+ return;
+ }
+ if( atari_cookie_manager.window != NULL ) {
+ if (atari_treeview_is_open(atari_cookie_manager.tv))
+ atari_cookie_manager_close();
+ wind_delete(gemtk_wm_get_handle(atari_cookie_manager.window));
+ gemtk_wm_remove(atari_cookie_manager.window);
+ atari_cookie_manager.window = NULL;
+ atari_treeview_delete(atari_cookie_manager.tv);
+ atari_cookie_manager.init = false;
+ }
+ LOG(("done"));
+
+}
+
+
+void atari_cookie_manager_redraw(void)
+{
+ atari_treeview_redraw(atari_cookie_manager.tv);
+}
diff --git a/atari/cookies.h b/atari/cookies.h
index e69de29bb..1ef03b795 100644
--- a/atari/cookies.h
+++ b/atari/cookies.h
@@ -0,0 +1,38 @@
+/*
+ * Copyright 2013 Ole Loots <ole@monochrom.net>
+ *
+ * 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 <http://www.gnu.org/licenses/>.
+ */
+
+ #ifndef NS_ATARI_COOKIE_MANAGER_H
+ #define NS_ATARI_COOKIE_MANAGER_H
+
+struct core_window;
+
+struct atari_cookie_manager_s {
+ GUIWIN * window;
+ struct atari_treeview_window * tv;/*< The hotlist treeview handle. */
+ bool init;
+};
+
+extern struct atari_cookie_manager_s atari_cookie_manager;
+
+void atari_cookie_manager_init(void);
+void atari_cookie_manager_open(void);
+void atari_cookie_manager_close(void);
+void atari_cookie_manager_destroy(void);
+void atari_cookie_manager_redraw(void);
+
+#endif
diff --git a/atari/deskmenu.c b/atari/deskmenu.c
index 0de2cc124..4084d83a0 100644
--- a/atari/deskmenu.c
+++ b/atari/deskmenu.c
@@ -12,6 +12,7 @@
#include "atari/deskmenu.h"
#include "atari/hotlist.h"
#include "atari/history.h"
+#include "atari/cookies.h"
#include "atari/toolbar.h"
#include "atari/settings.h"
#include "atari/search.h"
@@ -92,6 +93,7 @@ static void __CDECL menu_lhistory(short item, short title, void *data);
static void __CDECL menu_ghistory(short item, short title, void *data);
static void __CDECL menu_add_bookmark(short item, short title, void *data);
static void __CDECL menu_bookmarks(short item, short title, void *data);
+static void __CDECL menu_cookies(short item, short title, void *data);
static void __CDECL menu_vlog(short item, short title, void *data);
static void __CDECL menu_help_content(short item, short title, void *data);
@@ -121,7 +123,8 @@ struct s_menu_item_evnt menu_evnt_tbl[] =
{T_UTIL, MAINMENU_M_LHISTORY,menu_lhistory, {0,NK_F7,0}, NULL},
{T_UTIL, MAINMENU_M_GHISTORY, menu_ghistory, {0,NK_F7,K_CTRL}, NULL},
{T_UTIL, MAINMENU_M_ADD_BOOKMARK, menu_add_bookmark, {'D',0,K_CTRL}, NULL},
- {T_UTIL, MAINMENU_M_BOOKMARKS, menu_bookmarks, {0,NK_F6,0}, NULL},
+ {T_UTIL, MAINMENU_M_BOOKMARKS, menu_bookmarks, {0,NK_F6,0}, NULL},
+ {T_UTIL, MAINMENU_M_COOKIES, menu_cookies, {0,0,0}, NULL},
{T_UTIL, MAINMENU_M_CHOICES, menu_choices, {0,0,0}, NULL},
{T_UTIL, MAINMENU_M_VLOG, menu_vlog, {'V',0,K_ALT}, NULL},
{T_HELP, MAINMENU_M_HELP_CONTENT, menu_help_content, {0,NK_F1,0}, NULL},
@@ -459,7 +462,7 @@ static void __CDECL menu_lhistory(short item, short title, void *data)
static void __CDECL menu_ghistory(short item, short title, void *data)
{
LOG(("%s", __FUNCTION__));
- atari_global_history_open();
+ //atari_global_history_open();
}
static void __CDECL menu_add_bookmark(short item, short title, void *data)
@@ -479,6 +482,12 @@ static void __CDECL menu_bookmarks(short item, short title, void *data)
{
LOG(("%s", __FUNCTION__));
atari_hotlist_open();
+}
+
+static void __CDECL menu_cookies(short item, short title, void *data)
+{
+ LOG(("%s", __FUNCTION__));
+ atari_cookie_manager_open();
}
static void __CDECL menu_vlog(short item, short title, void *data)
diff --git a/atari/gemtk/gemtk.h b/atari/gemtk/gemtk.h
index 3e406b5e3..88ad0ccdb 100644
--- a/atari/gemtk/gemtk.h
+++ b/atari/gemtk/gemtk.h
@@ -33,6 +33,17 @@
extern unsigned short _systype_v;
unsigned short _systype (void);
+/* GEMTK Utils API: */
+
+#define GEMTK_DBG_GRECT(s,g) \
+ printf("%s", s); \
+ printf("\tx0: %d, \n", (g)->g_x); \
+ printf("\ty0: %d, \n", (g)->g_y); \
+ printf("\tx1: %d, \n", (g)->g_x+(g)->g_w); \
+ printf("\ty1: %d, \n", (g)->g_y+(g)->g_h); \
+ printf("\tw: %d, \n", (g)->g_w); \
+ printf("\th: %d \n", (g)->g_h); \
+
/*
* Chech for GRECT intersection without modifiend the src rectangles
* return true when the GRECT's intersect, fals otherwise.
@@ -47,6 +58,9 @@ int gemtk_keybd2ascii( int keybd, int shift);
/** set VDI clip area by passing an GRECT */
void gemtk_clip_grect(VdiHdl vh, GRECT *rect);
+void gemtk_wind_get_str(short aes_handle, short mode, char *str, int len);
+
+
#ifndef POINT_WITHIN
# define POINT_WITHIN(_x,_y, r) ((_x >= r.g_x) && (_x <= r.g_x + r.g_w ) \
&& (_y >= r.g_y) && (_y <= r.g_y + r.g_h))
@@ -180,6 +194,8 @@ GUIWIN * gemtk_wm_add(short handle, uint32_t flags,
GUIWIN * gemtk_wm_find(short handle);
+void gemtk_wm_dump_window_info(GUIWIN *win);
+
short gemtk_wm_remove(GUIWIN *win);
GUIWIN * gemtk_wm_validate_ptr(GUIWIN *win);
@@ -192,6 +208,8 @@ short gemtk_wm_dispatch_event(EVMULT_IN *ev_in, EVMULT_OUT *ev_out, short msg[8]
void gemtk_wm_get_grect(GUIWIN *win, enum guwin_area_e mode, GRECT *dest);
+short gemtk_wm_get_toolbar_edit_obj(GUIWIN *win);
+
short gemtk_wm_get_handle(GUIWIN *win);
uint32_t gemtk_wm_get_state(GUIWIN *win);
diff --git a/atari/gemtk/guiwin.c b/atari/gemtk/guiwin.c
index 01f548305..4ad3561f2 100644
--- a/atari/gemtk/guiwin.c
+++ b/atari/gemtk/guiwin.c
@@ -701,13 +701,13 @@ GUIWIN * gemtk_wm_add(short handle, uint32_t flags, gemtk_wm_event_handler_f cb)
}
/**
-* Returns an GUIWIN* for AES handle, when that AES window is managed by guiwin
+* Returns an GUIWIN* for AES handle, when that AES window is managed by gemtk_wm
*/
GUIWIN *gemtk_wm_find(short handle)
{
GUIWIN *g;
DEBUG_PRINT(("guiwin search handle: %d\n", handle));
- for( g = winlist; g != NULL; g=g->next ) {
+ for (g = winlist; g != NULL; g=g->next) {
if(g->handle == handle) {
DEBUG_PRINT(("guiwin found handle: %p\n", g));
return(g);
@@ -716,6 +716,48 @@ GUIWIN *gemtk_wm_find(short handle)
return(NULL);
}
+void gemtk_wm_dump_window_info(GUIWIN *win)
+{
+
+
+
+ char title[255];
+ GRECT work_area;
+ GRECT curr_area;
+ GRECT gemtk_work_area;
+ GRECT gemtk_toolbar_area;
+ GRECT gemtk_free_area;
+ short handle;
+ struct gemtk_wm_scroll_info_s *slid;
+
+ handle = gemtk_wm_get_handle(win);
+
+ assert(handle);
+
+ gemtk_wind_get_str(handle, WF_NAME, title, 255);
+ wind_get_grect(handle, WF_WORKXYWH, &work_area);
+ wind_get_grect(handle, WF_CURRXYWH, &curr_area);
+ gemtk_wm_get_grect(win, GEMTK_WM_AREA_CONTENT, &gemtk_free_area);
+ gemtk_wm_get_grect(win, GEMTK_WM_AREA_WORK, &gemtk_work_area);
+ gemtk_wm_get_grect(win, GEMTK_WM_AREA_TOOLBAR, &gemtk_toolbar_area);
+ slid = gemtk_wm_get_scroll_info(win);
+
+ printf ("GEMTK Window: %p (AES handle: %d)\n", win, win->handle);
+ printf ("Title: %s\n", title);
+ GEMTK_DBG_GRECT ("WF_WORKXYWH: \n", &work_area)
+ GEMTK_DBG_GRECT ("WF_CURRXYWH: \n", &curr_area)
+ GEMTK_DBG_GRECT ("GEMTK_WM_AREA_CONTENT:\n", &gemtk_free_area)
+ GEMTK_DBG_GRECT ("GEMTK_WM_AREA_WORK:\n", &gemtk_work_area)
+ GEMTK_DBG_GRECT ("GEMTK_WM_AREA_TOOLBAR:\n", &gemtk_toolbar_area)
+ printf ("Slider X pos: %d\n", slid->x_pos);
+ printf ("Slider Y pos: %d\n", slid->y_pos);
+ printf ("Slider X units: %d\n", slid->x_unit_px);
+ printf ("Slider Y units: %d\n", slid->y_unit_px);
+
+
+#undef DBG_GRECT
+};
+
/**
* Check's if the pointer is managed by the guiwin API.
*/
@@ -1024,7 +1066,6 @@ uint32_t gemtk_wm_get_state(GUIWIN *win)
return(win->state);
}
-
/**
* Set and new event handler function.
*/
@@ -1066,7 +1107,7 @@ void gemtk_wm_set_toolbar_size(GUIWIN *win, uint16_t s)
win->toolbar_size = s;
}
-short getm_wm_get_toolbar_edit_obj(GUIWIN *win)
+short gemtk_wm_get_toolbar_edit_obj(GUIWIN *win)
{
return(win->toolbar_edit_obj);
}
diff --git a/atari/gemtk/utils.c b/atari/gemtk/utils.c
index f080e307c..20fe5d424 100644
--- a/atari/gemtk/utils.c
+++ b/atari/gemtk/utils.c
@@ -95,4 +95,23 @@ void gemtk_clip_grect(VdiHdl vh, GRECT *rect)
vs_clip_pxy(vh, pxy);
}
+void gemtk_wind_get_str(short aes_handle, short mode, char *str, int len)
+{
+ char tmp_str[255];
+
+ if(len>255) {
+ len = 255;
+ }
+
+ memset(str, 0, len);
+ return;
+ /*
+
+ wind_get(aes_handle, mode, (short)(((unsigned long)tmp_str)>>16),
+ (short)(((unsigned long)tmp_str) & 0xffff), 0, 0);
+
+ strncpy(str, tmp_str, len);
+ */
+}
+
diff --git a/atari/gui.c b/atari/gui.c
index 3f056a1bc..33d63b436 100644
--- a/atari/gui.c
+++ b/atari/gui.c
@@ -63,6 +63,7 @@
#include "atari/statusbar.h"
#include "atari/toolbar.h"
#include "atari/hotlist.h"
+#include "atari/cookies.h"
#include "atari/history.h"
#include "atari/login.h"
#include "atari/encoding.h"
@@ -171,12 +172,14 @@ void gui_poll(bool active)
tmp = tmp->next;
}
- // TODO: reenable treeview redraws
-/*
- if(hl.tv->redraw){
- atari_treeview_redraw(hl.tv);
- }
+ // TODO: implement generic treeview redraw function
+ // TODO: rename hl to atari_hotlist or create getter for it...
+ //atari_treeview_redraw(hl.tv);
+ atari_hotlist_redraw();
+ atari_cookie_manager_redraw();
+ atari_global_history_redraw();
+/* // TODO: reenable history redraws
if(gl_history.tv->redraw){
atari_treeview_redraw(gl_history.tv);
}
@@ -541,6 +544,27 @@ void gui_window_set_url(struct gui_window *w, const char *url)
}
}
+struct gui_window * gui_window_get_input_window(void)
+{
+ return(input_window);
+}
+
+char * gui_window_get_url(struct gui_window *gw)
+{
+ if (gw == NULL) {
+ return(NULL);
+ }
+ return(gw->url);
+}
+
+char * gui_window_get_title(struct gui_window *gw)
+{
+ if (gw == NULL) {
+ return(NULL);
+ }
+ return(gw->title);
+}
+
static void throbber_advance( void * data )
{
@@ -809,15 +833,16 @@ void gui_quit(void)
struct gui_window * tmp = window_list;
/* Destroy all remaining browser windows: */
- while( gw ) {
+ while (gw) {
tmp = gw->next;
browser_window_destroy(gw->browser->bw);
gw = tmp;
}
/* destroy the treeview windows: */
- atari_global_history_destroy();
+ //atari_global_history_destroy();
atari_hotlist_destroy();
+ atari_cookie_manager_destroy();
/* shutdown netsurf treeview framework: */
treeview_fini();
@@ -1036,8 +1061,9 @@ static void gui_init2(int argc, char** argv)
treeview_init(0);
/* Initialize the specific treeview windows: */
- atari_global_history_init();
+ //atari_global_history_init();
atari_hotlist_init();
+ atari_cookie_manager_init();
/* Initialize the toolbar framework: */
toolbar_init();
@@ -1084,7 +1110,7 @@ int main(int argc, char** argv)
/* user options setup */
ret = nsoption_init(set_defaults, &nsoptions, &nsoptions_default);
if (ret != NSERROR_OK) {
- die("Options failed to initialise");
+ die("Options failed to initialise");
}
nsoption_read(options, NULL);
nsoption_commandline(&argc, argv, NULL);
diff --git a/atari/gui.h b/atari/gui.h
index 2146a26a5..c582d668b 100755
--- a/atari/gui.h
+++ b/atari/gui.h
@@ -142,7 +142,7 @@ struct s_browser
*/
struct gui_window {
struct s_gui_win_root * root;
- CMP_BROWSER browser;
+ struct s_browser * browser;
MFORM_EX *cursor;
/* icon to be drawn when iconified, or NULL for default resource. */
char * status;
@@ -157,8 +157,10 @@ struct gui_window {
extern struct gui_window *window_list;
/* -------------------------------------------------------------------------- */
-/* Public - non standard gui window functions */
+/* Public - non core gui window functions */
/* -------------------------------------------------------------------------- */
void gui_set_input_gui_window(struct gui_window *gw);
+char *gui_window_get_url(struct gui_window *gw);
+char * gui_window_get_title(struct gui_window *gw);
#endif
diff --git a/atari/history.c b/atari/history.c
index dfed6d037..c43b8296b 100644
--- a/atari/history.c
+++ b/atari/history.c
@@ -15,3 +15,263 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
+
+
+
+#include <ctype.h>
+#include <string.h>
+#include <stdbool.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <time.h>
+
+#include "desktop/browser.h"
+#include "content/content.h"
+#include "content/hlcache.h"
+#include "content/urldb.h"
+#include "utils/nsoption.h"
+#include "desktop/global_history.h"
+#include "desktop/tree.h"
+#include "desktop/gui.h"
+#include "desktop/core_window.h"
+#include "utils/log.h"
+#include "utils/messages.h"
+#include "utils/utils.h"
+#include "utils/url.h"
+#include "atari/gui.h"
+#include "atari/misc.h"
+#include "atari/treeview.h"
+#include "atari/history.h"
+#include "atari/findfile.h"
+#include "atari/gemtk/gemtk.h"
+#include "atari/res/netsurf.rsh"
+
+extern GRECT desk_area;
+
+struct atari_global_history_s atari_global_history;
+
+/* Setup Atari Treeview Callbacks: */
+static nserror atari_global_history_init_phase2(struct core_window *cw,
+ struct core_window_callback_table * default_callbacks);
+static void atari_global_history_finish(struct core_window *cw);
+static void atari_global_history_keypress(struct core_window *cw,
+ uint32_t ucs4);
+static void atari_global_history_mouse_action(struct core_window *cw,
+ browser_mouse_state mouse,
+ int x, int y);
+static void atari_global_history_draw(struct core_window *cw, int x,
+ int y, struct rect *clip,
+ const struct redraw_context *ctx);
+static short handle_event(GUIWIN *win, EVMULT_OUT *ev_out, short msg[8]);
+
+static struct atari_treeview_callbacks atari_global_history_treeview_callbacks = {
+ .init_phase2 = atari_global_history_init_phase2,
+ .finish = atari_global_history_finish,
+ .draw = atari_global_history_draw,
+ .keypress = atari_global_history_keypress,
+ .mouse_action = atari_global_history_mouse_action,
+ .gemtk_user_func = handle_event
+};
+
+static nserror atari_global_history_init_phase2(struct core_window *cw,
+ struct core_window_callback_table *cb_t)
+{
+ LOG((""));
+ return(global_history_init(cb_t, cw));
+}
+
+static void atari_global_history_finish(struct core_window *cw)
+{
+ LOG((""));
+ global_history_fini();
+}
+
+static void atari_global_history_draw(struct core_window *cw, int x,
+ int y, struct rect *clip,
+ const struct redraw_context *ctx)
+{
+ global_history_redraw(x, y, clip, ctx);
+}
+
+static void atari_global_history_keypress(struct core_window *cw, uint32_t ucs4)
+{
+ LOG(("ucs4: %lu\n", ucs4));
+ global_history_keypress(ucs4);
+}
+
+static void atari_global_history_mouse_action(struct core_window *cw,
+ browser_mouse_state mouse,
+ int x, int y)
+{
+ LOG(("x: %d, y: %d\n", x, y));
+ if((mouse & BROWSER_MOUSE_HOVER) && global_history_has_selection()){
+ global_history_mouse_action(mouse, x, y);
+ } else {
+ global_history_mouse_action(mouse, x, y);
+ }
+
+}
+
+
+
+static short handle_event(GUIWIN *win, EVMULT_OUT *ev_out, short msg[8])
+{
+ struct atari_treeview_window *tv=NULL;
+ GRECT tb_area;
+ GUIWIN * gemtk_win;
+ struct gui_window * gw;
+ char *cur_url = NULL;
+ char *cur_title = NULL;
+
+ LOG((""));
+
+ if(ev_out->emo_events & MU_MESAG){
+ switch (msg[0]) {
+
+// case WM_TOOLBAR:
+// LOG(("WM_TOOLBAR"));
+// tv = (struct atari_treeview_window*) gemtk_wm_get_user_data(win);
+// assert(tv);
+// switch (msg[4]) {
+// case TOOLBAR_HOTLIST_CREATE_FOLDER:
+// hotlist_add_folder(NULL, 0, 0);
+// break;
+//
+// case TOOLBAR_HOTLIST_ADD:
+// gw = gui_window_get_input_window();
+// if(gw && gw->browser){
+// cur_url = gui_window_get_url(gw);
+// cur_title = gui_window_get_title(gw);
+// // TODO: read language string.
+// cur_title = (cur_title ? cur_title : "New bookmark");
+// } else {
+// cur_url = "http://www";
+// }
+// atari_global_history_add_page(cur_url, cur_title);
+// break;
+//
+// case TOOLBAR_HOTLIST_DELETE:
+// hotlist_keypress(KEY_DELETE_LEFT);
+// // TODO: check if redraw is really required,
+// // - implement treeview getter for the gemtk
+// // handle.
+// break;
+//
+// case TOOLBAR_HOTLIST_EDIT:
+// hotlist_edit_selection();
+// break;
+// }
+//
+// gemtk_win = atari_treeview_get_gemtk_window(tv);
+// assert(gemtk_win);
+// gemtk_obj_get_tree(TOOLBAR_HOTLIST)[msg[4]].ob_state &= ~OS_SELECTED;
+// atari_treeview_get_grect(tv, TREEVIEW_AREA_TOOLBAR, &tb_area);
+// evnt_timer(150);
+// gemtk_wm_exec_redraw(gemtk_win, &tb_area);
+//
+// break;
+
+ case WM_CLOSED:
+ atari_global_history_close();
+ break;
+
+ default: break;
+ }
+ }
+
+ // TODO: implement selectable objects in toolbar API:
+ // ObjcChange( OC_TOOLBAR, win, buff[4], ~SELECTED, OC_MSG );
+}
+
+
+
+void atari_global_history_init(void)
+{
+ if (atari_global_history.init == false) {
+
+
+ if( atari_global_history.window == NULL ){
+ int flags = ATARI_TREEVIEW_WIDGETS;
+ short handle = -1;
+ GRECT desk;
+ OBJECT * tree = gemtk_obj_get_tree(TOOLBAR_HISTORY);
+ assert( tree );
+
+ handle = wind_create(flags, 0, 0, desk_area.g_w, desk_area.g_h);
+ atari_global_history.window = gemtk_wm_add(handle, GEMTK_WM_FLAG_DEFAULTS, NULL);
+ if( atari_global_history.window == NULL ) {
+ gemtk_msg_box_show(GEMTK_MSG_BOX_ALERT,
+ "Failed to allocate History");
+ return;
+ }
+ wind_set_str(handle, WF_NAME, (char*)messages_get("History"));
+ gemtk_wm_set_toolbar(atari_global_history.window, tree, 0, 0);
+ gemtk_wm_unlink(atari_global_history.window);
+
+ atari_global_history.tv = atari_treeview_create(
+ atari_global_history.window,
+ &atari_global_history_treeview_callbacks,
+ flags);
+
+ if (atari_global_history.tv == NULL) {
+ /* handle it properly, clean up previous allocs */
+ LOG(("Failed to allocate treeview"));
+ return;
+ }
+
+ } else {
+
+ }
+ }
+ atari_global_history.init = true;
+}
+
+void atari_global_history_open(void)
+{
+ assert(atari_global_history.init);
+
+ if (atari_global_history.init == false) {
+ return;
+ }
+
+ if (atari_treeview_is_open(atari_global_history.tv) == false) {
+
+ GRECT pos;
+ pos.g_x = desk_area.g_w - desk_area.g_w / 4;
+ pos.g_y = desk_area.g_y;
+ pos.g_w = desk_area.g_w / 4;
+ pos.g_h = desk_area.g_h;
+
+ atari_treeview_open(atari_global_history.tv, &pos);
+ } else {
+ wind_set(gemtk_wm_get_handle(atari_global_history.window), WF_TOP, 1, 0, 0, 0);
+ }
+}
+
+void atari_global_history_close(void)
+{
+ atari_treeview_close(atari_global_history.tv);
+}
+
+void atari_global_history_destroy(void)
+{
+
+ if( atari_global_history.init == false) {
+ return;
+ }
+ if( atari_global_history.window != NULL ) {
+ if (atari_treeview_is_open(atari_global_history.tv))
+ atari_global_history_close();
+ wind_delete(gemtk_wm_get_handle(atari_global_history.window));
+ gemtk_wm_remove(atari_global_history.window);
+ atari_global_history.window = NULL;
+ atari_treeview_delete(atari_global_history.tv);
+ atari_global_history.init = false;
+ }
+ LOG(("done"));
+}
+
+void atari_global_history_redraw(void)
+{
+ atari_treeview_redraw(atari_global_history.tv);
+}
diff --git a/atari/history.h b/atari/history.h
index e69de29bb..c6b821fe7 100644
--- a/atari/history.h
+++ b/atari/history.h
@@ -0,0 +1,38 @@
+/*
+ * Copyright 2013 Ole Loots <ole@monochrom.net>
+ *
+ * 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 <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef NS_ATARI_HISTORY_H
+#define NS_ATARI_HISTORY_H
+
+struct core_window;
+
+struct atari_global_history_s {
+ GUIWIN * window;
+ struct atari_treeview_window * tv;/*< The hotlist treeview handle. */
+ bool init;
+};
+
+extern struct atari_global_history_s atari_global_history;
+
+void atari_global_history_init(void);
+void atari_global_history_open(void);
+void atari_global_history_close(void);
+void atari_global_history_destroy(void);
+void atari_global_history_redraw(void);
+
+#endif
diff --git a/atari/hotlist.c b/atari/hotlist.c
index e44ce7db3..016cbc458 100644
--- a/atari/hotlist.c
+++ b/atari/hotlist.c
@@ -32,6 +32,7 @@
#include "desktop/hotlist.h"
#include "desktop/tree.h"
#include "desktop/gui.h"
+#include "desktop/core_window.h"
#include "utils/log.h"
#include "utils/messages.h"
#include "utils/utils.h"
@@ -48,30 +49,111 @@ extern GRECT desk_area;
struct atari_hotlist hl;
+/* Setup Atari Treeview Callbacks: */
+static nserror atari_hotlist_init_phase2(struct core_window *cw,
+ struct core_window_callback_table * default_callbacks);
+static void atari_hotlist_finish(struct core_window *cw);
+static void atari_hotlist_keypress(struct core_window *cw,
+ uint32_t ucs4);
+static void atari_hotlist_mouse_action(struct core_window *cw,
+ browser_mouse_state mouse,
+ int x, int y);
+static void atari_hotlist_draw(struct core_window *cw, int x,
+ int y, struct rect *clip,
+ const struct redraw_context *ctx);
+static short handle_event(GUIWIN *win, EVMULT_OUT *ev_out, short msg[8]);
+
+static struct atari_treeview_callbacks atari_hotlist_treeview_callbacks = {
+ .init_phase2 = atari_hotlist_init_phase2,
+ .finish = atari_hotlist_finish,
+ .draw = atari_hotlist_draw,
+ .keypress = atari_hotlist_keypress,
+ .mouse_action = atari_hotlist_mouse_action,
+ .gemtk_user_func = handle_event
+};
+
+static nserror atari_hotlist_init_phase2(struct core_window *cw,
+ struct core_window_callback_table *cb_t)
+{
+ LOG((""));
+ return(hotlist_init(cb_t, cw, hl.path));
+}
+
+static void atari_hotlist_finish(struct core_window *cw)
+{
+ LOG((""));
+ hotlist_fini(hl.path);
+}
+
+static void atari_hotlist_draw(struct core_window *cw, int x,
+ int y, struct rect *clip,
+ const struct redraw_context *ctx)
+{
+ hotlist_redraw(x, y, clip, ctx);
+}
+
+static void atari_hotlist_keypress(struct core_window *cw, uint32_t ucs4)
+{
+ LOG(("ucs4: %lu\n", ucs4));
+ hotlist_keypress(ucs4);
+}
+
+static void atari_hotlist_mouse_action(struct core_window *cw,
+ browser_mouse_state mouse,
+ int x, int y)
+{
+ LOG(("x: %d, y: %d\n", x, y));
+ if((mouse & BROWSER_MOUSE_HOVER) && hotlist_has_selection()){
+ hotlist_mouse_action(mouse, x, y);
+ } else {
+ hotlist_mouse_action(mouse, x, y);
+ }
+
+}
+
+
+
static short handle_event(GUIWIN *win, EVMULT_OUT *ev_out, short msg[8])
{
- NSTREEVIEW tv=NULL;
+ struct atari_treeview_window *tv=NULL;
GRECT tb_area;
+ GUIWIN * gemtk_win;
+ struct gui_window * gw;
+ char *cur_url = NULL;
+ char *cur_title = NULL;
+
+ LOG((""));
if(ev_out->emo_events & MU_MESAG){
switch (msg[0]) {
case WM_TOOLBAR:
-
- tv = (NSTREEVIEW) gemtk_wm_get_user_data(win);
-
+ LOG(("WM_TOOLBAR"));
+ tv = (struct atari_treeview_window*) gemtk_wm_get_user_data(win);
+ assert(tv);
switch (msg[4]) {
case TOOLBAR_HOTLIST_CREATE_FOLDER:
- hotlist_add_folder(NULL, false, 0);
+ hotlist_add_folder(NULL, 0, 0);
break;
case TOOLBAR_HOTLIST_ADD:
- atari_hotlist_add_page(NULL, NULL);
+ gw = gui_window_get_input_window();
+ if(gw && gw->browser){
+ cur_url = gui_window_get_url(gw);
+ cur_title = gui_window_get_title(gw);
+ // TODO: read language string.
+ cur_title = (cur_title ? cur_title : "New bookmark");
+ } else {
+ cur_url = "http://www";
+ }
+ atari_hotlist_add_page(cur_url, cur_title);
break;
case TOOLBAR_HOTLIST_DELETE:
hotlist_keypress(KEY_DELETE_LEFT);
- gemtk_wm_exec_redraw(tv->window, NULL);
+ // TODO: check if redraw is really required,
+ // - implement treeview getter for the gemtk
+ // handle.
break;
case TOOLBAR_HOTLIST_EDIT:
@@ -79,10 +161,12 @@ static short handle_event(GUIWIN *win, EVMULT_OUT *ev_out, short msg[8])
break;
}
+ gemtk_win = atari_treeview_get_gemtk_window(tv);
+ assert(gemtk_win);
gemtk_obj_get_tree(TOOLBAR_HOTLIST)[msg[4]].ob_state &= ~OS_SELECTED;
- gemtk_wm_get_grect(tv->window, GEMTK_WM_AREA_TOOLBAR, &tb_area);
+ atari_treeview_get_grect(tv, TREEVIEW_AREA_TOOLBAR, &tb_area);
evnt_timer(150);
- gemtk_wm_exec_redraw(tv->window, &tb_area);
+ gemtk_wm_exec_redraw(gemtk_win, &tb_area);
break;
case WM_CLOSED:
@@ -116,7 +200,6 @@ void atari_hotlist_init(void)
GRECT desk;
OBJECT * tree = gemtk_obj_get_tree(TOOLBAR_HOTLIST);
assert( tree );
- hl.open = false;
handle = wind_create(flags, 0, 0, desk_area.g_w, desk_area.g_h);
hl.window = gemtk_wm_add(handle, GEMTK_WM_FLAG_DEFAULTS, NULL);
@@ -129,11 +212,10 @@ void atari_hotlist_init(void)
gemtk_wm_set_toolbar(hl.window, tree, 0, 0);
gemtk_wm_unlink(hl.window);
tree_hotlist_path = (const char*)&hl.path;
- hl.tv = atari_treeview_create(
- TREE_HOTLIST,
- hl.window,
- handle_event
- );
+
+ hl.tv = atari_treeview_create(hl.window, &atari_hotlist_treeview_callbacks,
+ flags);
+
if (hl.tv == NULL) {
/* handle it properly, clean up previous allocs */
LOG(("Failed to allocate treeview"));
@@ -147,14 +229,14 @@ void atari_hotlist_init(void)
hl.init = true;
}
-
void atari_hotlist_open(void)
{
- if( hl.init == false ) {
+ assert(hl.init);
+ if (hl.init == false) {
return;
}
- if( hl.open == false ) {
+ if (atari_treeview_is_open(hl.tv) == false) {
GRECT pos;
pos.g_x = desk_area.g_w - desk_area.g_w / 4;
@@ -162,9 +244,7 @@ void atari_hotlist_open(void)
pos.g_w = desk_area.g_w / 4;
pos.g_h = desk_area.g_h;
- wind_open_grect(gemtk_wm_get_handle(hl.window), &pos);
- hl.open = true;
- atari_treeview_open( hl.tv );
+ atari_treeview_open(hl.tv, &pos);
} else {
wind_set(gemtk_wm_get_handle(hl.window), WF_TOP, 1, 0, 0, 0);
}
@@ -172,8 +252,6 @@ void atari_hotlist_open(void)
void atari_hotlist_close(void)
{
- wind_close(gemtk_wm_get_handle(hl.window));
- hl.open = false;
atari_treeview_close(hl.tv);
}
@@ -184,12 +262,12 @@ void atari_hotlist_destroy(void)
return;
}
if( hl.window != NULL ) {
- if (hl.open)
+ if (atari_treeview_is_open(hl.tv))
atari_hotlist_close();
wind_delete(gemtk_wm_get_handle(hl.window));
gemtk_wm_remove(hl.window);
hl.window = NULL;
- atari_treeview_destroy(hl.tv);
+ atari_treeview_delete(hl.tv);
hl.init = false;
}
LOG(("done"));
@@ -197,7 +275,6 @@ void atari_hotlist_destroy(void)
void atari_hotlist_redraw(void)
{
- int i = 01;
atari_treeview_redraw(hl.tv);
}
@@ -209,7 +286,7 @@ void atari_hotlist_add_page( const char * url, const char * title )
struct node * selected = NULL;
struct node * folder = NULL;
nsurl *nsurl;
- NSTREEVIEW tv = hl.tv;
+ ATARI_TREEVIEW_PTR tv = hl.tv;
if(hl.tv == NULL )
return;
@@ -218,11 +295,14 @@ void atari_hotlist_add_page( const char * url, const char * title )
if (nsurl_create(url, &nsurl) != NSERROR_OK)
return;
+ /* doesn't look nice:
if( hl.tv->click.x >= 0 && hl.tv->click.y >= 0 ){
hotlist_add_entry( nsurl, title, true, hl.tv->click.y );
} else {
- hotlist_add_url( nsurl );
- }
+
+ }*/
+ //hotlist_add_url(nsurl);
+ hotlist_add_entry(nsurl, title, 0, 0);
nsurl_unref(nsurl);
}
diff --git a/atari/hotlist.h b/atari/hotlist.h
index c6fc4649a..2bcda5f01 100644
--- a/atari/hotlist.h
+++ b/atari/hotlist.h
@@ -26,8 +26,7 @@
struct atari_hotlist {
GUIWIN * window;
- NSTREEVIEW tv; /*< The hotlist treeview handle. */
- bool open;
+ ATARI_TREEVIEW_PTR tv;/*< The hotlist treeview handle. */
bool init;
char path[PATH_MAX];
};
@@ -39,7 +38,6 @@ void atari_hotlist_open( void );
void atari_hotlist_close( void );
void atari_hotlist_destroy( void );
void atari_hotlist_add_page( const char * url, const char * title );
-
void atari_hotlist_redraw( void );
diff --git a/atari/res/netsurf.rsc b/atari/res/netsurf.rsc
index 64a8e35a6..21373281c 100755
--- a/atari/res/netsurf.rsc
+++ b/atari/res/netsurf.rsc
Binary files differ
diff --git a/atari/res/netsurf.rsh b/atari/res/netsurf.rsh
index 268aff523..6797c054a 100755
--- a/atari/res/netsurf.rsh
+++ b/atari/res/netsurf.rsh
@@ -36,9 +36,10 @@
#define MAINMENU_M_GHISTORY 53 /* STRING in tree MAINMENU */
#define MAINMENU_M_ADD_BOOKMARK 55 /* STRING in tree MAINMENU */
#define MAINMENU_M_BOOKMARKS 56 /* STRING in tree MAINMENU */
-#define MAINMENU_M_CHOICES 58 /* STRING in tree MAINMENU */
-#define MAINMENU_M_VLOG 59 /* STRING in tree MAINMENU */
-#define MAINMENU_M_HELP_CONTENT 61 /* STRING in tree MAINMENU */
+#define MAINMENU_M_COOKIES 58 /* STRING in tree MAINMENU */
+#define MAINMENU_M_CHOICES 60 /* STRING in tree MAINMENU */
+#define MAINMENU_M_VLOG 61 /* STRING in tree MAINMENU */
+#define MAINMENU_M_HELP_CONTENT 63 /* STRING in tree MAINMENU */
#define TOOLBAR 1 /* form/dial */
#define TOOLBAR_AREA_SEARCH 1 /* BOX in tree TOOLBAR */
@@ -209,3 +210,7 @@
#define POP_FONT_RENDERER 15 /* form/dial */
#define POP_FONT_RENDERER_INTERNAL 1 /* STRING in tree POP_FONT_RENDERER */
#define POP_FONT_RENDERER_FREETYPE 2 /* STRING in tree POP_FONT_RENDERER */
+
+#define TOOLBAR_COOKIES 16 /* form/dial */
+
+#define TOOLBAR_HISTORY 17 /* form/dial */
diff --git a/atari/res/netsurf.rsm b/atari/res/netsurf.rsm
index 2ede40593..27df3d755 100755
--- a/atari/res/netsurf.rsm
+++ b/atari/res/netsurf.rsm
@@ -1,10 +1,10 @@
ResourceMaster v3.65
-#C 16@0@0@0@
+#C 18@0@0@0@
#N 99@32@AZAaza___ _@AZAaza090___ _@@_@
#FoC-Header@rsm2out@C-Header@rsh@@@[C-Header@0@
#R 0@0@1@1@2@1@
-#M 20010100@0@7728@641@
-#T 0@1@MAINMENU@@62@@
+#M 20010100@0@7728@643@
+#T 0@1@MAINMENU@@64@@
#O 4@32@T_FILE@@
#O 5@32@T_EDIT@@
#O 6@32@T_VIEW@@
@@ -40,9 +40,10 @@ ResourceMaster v3.65
#O 53@28@M_GHISTORY@@
#O 55@28@M_ADD_BOOKMARK@@
#O 56@28@M_BOOKMARKS@@
-#O 58@28@M_CHOICES@@
-#O 59@28@M_VLOG@@
-#O 61@28@M_HELP_CONTENT@@
+#O 58@28@M_COOKIES@@
+#O 60@28@M_CHOICES@@
+#O 61@28@M_VLOG@@
+#O 63@28@M_HELP_CONTENT@@
#T 1@2@TOOLBAR@@19@@
#O 1@20@AREA_SEARCH@@
#O 2@26@BT_SEARCH_FWD@@
@@ -196,4 +197,6 @@ ResourceMaster v3.65
#T 15@2@POP_FONT_RENDERER@@3@@
#O 1@28@INTERNAL@@
#O 2@28@FREETYPE@@
-#c 22411@
+#T 16@2@TOOLBAR_COOKIES@@1@@
+#T 17@2@TOOLBAR_HISTORY@@1@@
+#c 24594@
diff --git a/atari/toolbar.c b/atari/toolbar.c
index e190c9676..6c08428a1 100644
--- a/atari/toolbar.c
+++ b/atari/toolbar.c
@@ -444,6 +444,7 @@ void toolbar_redraw(struct s_toolbar *tb, GRECT *clip)
//dbg_grect("toolbar redraw clip", clip);
+ /* Redraw the AES objects: */
objc_draw_grect(tb->form,0,8,clip);
objc_draw_grect(&throbber_form[tb->throbber.index], 0, 1, clip);
@@ -461,6 +462,7 @@ void toolbar_redraw(struct s_toolbar *tb, GRECT *clip)
};
//dbg_rect("tb textarea clip: ", &r);
// TODO: let this be handled by an userdef object redraw function:
+ /* Redraw the url input: */
textarea_redraw(tb->url.textarea, 0, 0, 0xffffff, 1.0, &r, &toolbar_rdrw_ctx);
}
}
@@ -594,7 +596,7 @@ void toolbar_set_url(struct s_toolbar *tb, const char * text)
LOG((""));
textarea_set_text(tb->url.textarea, text);
- if (tb->attached) {
+ if (tb->attached && tb->visible) {
GRECT area;
toolbar_get_grect(tb, TOOLBAR_AREA_URL, &area);
window_schedule_redraw_grect(tb->owner, &area);
diff --git a/atari/treeview.c b/atari/treeview.c
index 6dd43d3db..99711c0f4 100644
--- a/atari/treeview.c
+++ b/atari/treeview.c
@@ -68,6 +68,7 @@ struct atari_treeview_window {
GUIWIN * window;
bool disposing;
bool redraw;
+ bool is_open;
GRECT rdw_area;
POINT extent;
POINT click;
@@ -75,20 +76,16 @@ struct atari_treeview_window {
struct atari_treeview_callbacks *io;
};
-enum treeview_area_e {
- TREEVIEW_AREA_WORK = 0,
- TREEVIEW_AREA_TOOLBAR,
- TREEVIEW_AREA_CONTENT
-};
-
/* native GUI event handlers: */
-static void __CDECL on_mbutton_event(struct atari_treeview_window *tvw,
+static void on_mbutton_event(struct atari_treeview_window *tvw,
EVMULT_OUT *ev_out, short msg[8]);
-static void __CDECL on_keybd_event(struct atari_treeview_window *tvw,
+static void on_keybd_event(struct atari_treeview_window *tvw,
EVMULT_OUT *ev_out, short msg[8]);
-static void __CDECL on_redraw_event(struct atari_treeview_window *tvw,
+static void on_redraw_event(struct atari_treeview_window *tvw,
EVMULT_OUT *ev_out, short msg[8]);
+/* static utils: */
+static void atari_treeview_dump_info(struct atari_treeview_window *tv, char *s);
/**
* Schedule a redraw of the treeview content
@@ -116,12 +113,12 @@ static void atari_treeview_redraw_grect_request(struct core_window *cw,
tv->rdw_area.g_w = ( oldx1 > newx1 ) ? oldx1 - tv->rdw_area.g_x : newx1 - tv->rdw_area.g_x;
tv->rdw_area.g_h = ( oldy1 > newy1 ) ? oldy1 - tv->rdw_area.g_y : newy1 - tv->rdw_area.g_y;
}
- // dbg_grect("atari_treeview_request_redraw", &tv->rdw_area);
+ //dbg_grect("atari_treeview_request_redraw_grect", &tv->rdw_area);
}
}
-static void atari_treeview_get_grect(ATARI_TREEVIEW_PTR tptr, enum treeview_area_e mode,
+void atari_treeview_get_grect(ATARI_TREEVIEW_PTR tptr, enum treeview_area_e mode,
GRECT *dest)
{
@@ -135,40 +132,33 @@ static void atari_treeview_get_grect(ATARI_TREEVIEW_PTR tptr, enum treeview_area
}
}
-
-void atari_treeview_redraw(struct atari_treeview_window *tv)
+GUIWIN * atari_treeview_get_gemtk_window(struct atari_treeview_window *tv)
{
- static FONT_PLOTTER vdi_txt_plotter = NULL;
- FONT_PLOTTER old_txt_plotter;
+ return(tv->window);
+}
- VdiHdl plot_vdi_handle = 0;
- long atari_plot_flags = 0;
+static void atari_treeview_dump_info(struct atari_treeview_window *tv,
+ char * title)
+{
+ printf("Treeview Dump (%s)\n", title);
+ printf("=================================\n");
+ gemtk_wm_dump_window_info(atari_treeview_get_gemtk_window(tv));
+ GEMTK_DBG_GRECT("Redraw Area: \n", &tv->rdw_area)
+ dbg_grect("Redraw Area2: \n", &tv->rdw_area);
+ printf("Extent: x: %d, y: %d\n", tv->extent, tv->extent);
+}
- /* TODO: do not use the global vdi handle for plot actions! */
- /* TODO: implement getter/setter for the vdi handle */
- if (tv != NULL) {
- if( tv->redraw && ((atari_plot_flags & PLOT_FLAG_OFFSCREEN) == 0) ) {
+void atari_treeview_redraw(struct atari_treeview_window *tv)
+{
+ if (tv != NULL && tv->is_open) {
+ if( tv->redraw && ((plot_get_flags() & PLOT_FLAG_OFFSCREEN) == 0) ) {
- plot_vdi_handle = plot_get_vdi_handle();
- long atari_plot_flags = plot_get_flags();
short todo[4];
GRECT work;
short handle = gemtk_wm_get_handle(tv->window);
struct gemtk_wm_scroll_info_s *slid;
-/*
- if (vdi_txt_plotter == NULL) {
- int err = 0;
- VdiHdl vdih = plot_get_vdi_handle();
- vdi_txt_plotter = new_font_plotter(vdih, (char*)"vdi", PLOT_FLAG_TRANS,
- &err);
- if(err) {
- const char * desc = plot_err_str(err);
- die(("Unable to load vdi font plotter %s -> %s", "vdi", desc ));
- }
- }
-*/
gemtk_wm_get_grect(tv->window, GEMTK_WM_AREA_CONTENT, &work);
slid = gemtk_wm_get_scroll_info(tv->window);
@@ -180,26 +170,37 @@ void atari_treeview_redraw(struct atari_treeview_window *tv)
plot_set_dimensions(work.g_x, work.g_y, work.g_w, work.g_h);
if (plot_lock() == false)
return;
-/*
- if(vdi_txt_plotter != NULL){
- old_txt_plotter = plot_get_text_plotter();
- plot_set_text_plotter(vdi_txt_plotter);
- }
-*/
+
if( wind_get(handle, WF_FIRSTXYWH,
&todo[0], &todo[1], &todo[2], &todo[3] )!=0 ) {
while (todo[2] && todo[3]) {
short pxy[4];
+
+ if(!rc_intersect(&work, (GRECT*)&todo)){
+ if (wind_get(handle, WF_NEXTXYWH,
+ &todo[0], &todo[1], &todo[2], &todo[3])==0) {
+ break;
+ }
+ continue;
+ }
pxy[0] = todo[0];
pxy[1] = todo[1];
pxy[2] = todo[0] + todo[2]-1;
pxy[3] = todo[1] + todo[3]-1;
- vs_clip(plot_vdi_handle, 1, (short*)&pxy);
+ vs_clip(plot_get_vdi_handle(), 1, (short*)&pxy);
+
+ // Debug code: this 3 lines help to inspect the redraw
+ // areas...
+ /*
+ vsf_color(plot_get_vdi_handle(), 3);
+ v_bar(plot_get_vdi_handle(), (short*)&pxy);
+ evnt_timer(500);
+ */
/* convert screen to treeview coords: */
- todo[0] = todo[0] - work.g_x + slid->x_pos*slid->x_unit_px;
- todo[1] = todo[1] - work.g_y + slid->y_pos*slid->y_unit_px;
+ todo[0] = todo[0] - work.g_x ;//+ slid->x_pos*slid->x_unit_px;
+ todo[1] = todo[1] - work.g_y ;//+ slid->y_pos*slid->y_unit_px;
if( todo[0] < 0 ){
todo[2] = todo[2] + todo[0];
todo[0] = 0;
@@ -209,27 +210,29 @@ void atari_treeview_redraw(struct atari_treeview_window *tv)
todo[1] = 0;
}
+ // TODO: get slider values
if (rc_intersect((GRECT *)&tv->rdw_area,(GRECT *)&todo)) {
- tv->io->draw(tv, -(slid->x_pos*slid->x_unit_px),
+ struct rect clip;
+
+ clip.x0 = todo[0]+(slid->x_pos*slid->x_unit_px);
+ clip.y0 = todo[1]+(slid->y_pos*slid->y_unit_px);
+ clip.x1 = clip.x0 + todo[2]+(slid->x_pos*slid->x_unit_px);
+ clip.y1 = clip.y0 + todo[3]+(slid->y_pos*slid->y_unit_px);
+
+ tv->io->draw(tv, -(slid->x_pos*slid->x_unit_px),
-(slid->y_pos*slid->y_unit_px),
- todo[0], todo[1], todo[2], todo[3], &ctx);
+ &clip, &ctx);
}
- vs_clip(plot_vdi_handle, 0, (short*)&pxy);
+ vs_clip(plot_get_vdi_handle(), 0, (short*)&pxy);
if (wind_get(handle, WF_NEXTXYWH,
&todo[0], &todo[1], &todo[2], &todo[3])==0) {
break;
}
}
} else {
- /*
- plot_set_text_plotter(old_txt_plotter);
- */
plot_unlock();
return;
}
- /*
- plot_set_text_plotter(old_txt_plotter);
- */
plot_unlock();
tv->redraw = false;
tv->rdw_area.g_x = 65000;
@@ -242,6 +245,137 @@ void atari_treeview_redraw(struct atari_treeview_window *tv)
}
}
+//
+//// TODO: rename to atari_treeview_draw_content
+//void atari_treeview_redraw(struct atari_treeview_window *tv)
+//{
+// static FONT_PLOTTER vdi_txt_plotter = NULL;
+// FONT_PLOTTER old_txt_plotter;
+//
+// VdiHdl plot_vdi_handle = 0;
+// long atari_plot_flags = 0;
+// short pxy[4];
+// struct rect clip;
+//
+// /* TODO: do not use the global vdi handle for plot actions! */
+// /* TODO: implement getter/setter for the vdi handle */
+//
+// if (tv != NULL && tv->is_open) {
+// if( tv->redraw && ((atari_plot_flags & PLOT_FLAG_OFFSCREEN) == 0) ) {
+//
+// atari_treeview_dump_info(tv, "atari_treeview_redraw");
+//
+// plot_vdi_handle = plot_get_vdi_handle();
+// long atari_plot_flags = plot_get_flags();
+// short todo[4];
+// GRECT work;
+// short handle = gemtk_wm_get_handle(tv->window);
+// struct gemtk_wm_scroll_info_s *slid;
+//
+///*
+// if (vdi_txt_plotter == NULL) {
+// int err = 0;
+// VdiHdl vdih = plot_get_vdi_handle();
+// vdi_txt_plotter = new_font_plotter(vdih, (char*)"vdi", PLOT_FLAG_TRANS,
+// &err);
+// if(err) {
+// const char * desc = plot_err_str(err);
+// die(("Unable to load vdi font plotter %s -> %s", "vdi", desc ));
+// }
+// }
+//*/
+// gemtk_wm_get_grect(tv->window, GEMTK_WM_AREA_CONTENT, &work);
+// slid = gemtk_wm_get_scroll_info(tv->window);
+//
+// struct redraw_context ctx = {
+// .interactive = true,
+// .background_images = true,
+// .plot = &atari_plotters
+// };
+// plot_set_dimensions(work.g_x, work.g_y, work.g_w, work.g_h);
+// if (plot_lock() == false)
+// return;
+///*
+// if(vdi_txt_plotter != NULL){
+// old_txt_plotter = plot_get_text_plotter();
+// plot_set_text_plotter(vdi_txt_plotter);
+// }
+//*/
+// if( wind_get(handle, WF_FIRSTXYWH,
+// &todo[0], &todo[1], &todo[2], &todo[3] )!=0 ) {
+// while (todo[2] && todo[3]) {
+//
+// pxy[0] = todo[0];
+// pxy[1] = todo[1];
+// pxy[2] = todo[0] + todo[2]-1;
+// pxy[3] = todo[1] + todo[3]-1;
+// //vs_clip(plot_vdi_handle, 1, (short*)&pxy);
+//
+// /* convert screen to treeview coords: */
+// todo[0] = todo[0] - work.g_x + slid->x_pos*slid->x_unit_px;
+// todo[1] = todo[1] - work.g_y + slid->y_pos*slid->y_unit_px;
+// if( todo[0] < 0 ){
+// todo[2] = todo[2] + todo[0];
+// todo[0] = 0;
+// }
+// if( todo[1] < 0 ){
+// todo[3] = todo[3] + todo[1];
+// todo[1] = 0;
+// }
+//
+// clip.x0 = todo[0];
+// clip.y0 = todo[1];
+// clip.x1 = clip.x0 + todo[2];
+// clip.y1 = clip.y0 + todo[3];
+//
+// clip.x0 = todo[0];
+// clip.y0 = todo[1];
+// clip.x1 = clip.x0 + todo[2] ;
+// clip.y1 = clip.y0 + todo[3] ;
+///*
+// clip.x0 = 0;
+// clip.y0 = 0;
+// clip.x1 = work.g_w;//MAX(tv->extent.x, work.g_w);
+// clip.y1 = MAX(tv->extent.y, work.g_h)+200;
+//*/
+// dbg_rect("treeview redraw clip", &clip);
+//
+// if (rc_intersect((GRECT *)&tv->rdw_area,(GRECT *)&todo)) {
+// tv->io->draw(tv, -(slid->x_pos*slid->x_unit_px),
+// -(slid->y_pos*slid->y_unit_px), &clip,
+// &ctx);
+//
+// /*tv->io->draw(tv, 0,0, &clip,
+// &ctx);*/
+// }
+// //vs_clip(plot_vdi_handle, 0, (short*)&pxy);
+// if (wind_get(handle, WF_NEXTXYWH,
+// &todo[0], &todo[1], &todo[2], &todo[3])==0) {
+// break;
+// }
+// }
+// } else {
+// /*
+// plot_set_text_plotter(old_txt_plotter);
+// */
+// plot_unlock();
+// return;
+// }
+// /*
+// plot_set_text_plotter(old_txt_plotter);
+// */
+// plot_unlock();
+// tv->redraw = false;
+// tv->rdw_area.g_x = 65000;
+// tv->rdw_area.g_y = 65000;
+// tv->rdw_area.g_w = -1;
+// tv->rdw_area.g_h = -1;
+// } else {
+// /* just copy stuff from the offscreen buffer */
+// }
+// }
+//}
+
/**
* GEMTK event sink
@@ -272,14 +406,10 @@ static short handle_event(GUIWIN *win, EVMULT_OUT *ev_out, short msg[8])
on_mbutton_event(tv, ev_out, msg);
}
- if (tv) {
-
- }
-/*
- if(tv != NULL && tv->user_func != NULL){
- tv->user_func(win, ev_out, msg);
+ if(tv != NULL && tv->io->gemtk_user_func != NULL){
+ tv->io->gemtk_user_func(win, ev_out, msg);
}
-*/
+
return(0);
}
@@ -325,12 +455,24 @@ static void __CDECL on_redraw_event(ATARI_TREEVIEW_PTR tptr, EVMULT_OUT *ev_out,
return;
gemtk_wm_get_grect(tv->window, GEMTK_WM_AREA_CONTENT, &work);
+ //dbg_grect("treeview work: ", &work);
+
+ atari_treeview_get_grect(tv, TREEVIEW_AREA_CONTENT, &work);
+ //dbg_grect("treeview work: ", &work);
slid = gemtk_wm_get_scroll_info(tv->window);
clip = work;
- if ( !rc_intersect( (GRECT*)&msg[4], &clip ) ) return;
+
+ /* check if the redraw area intersects with the content area: */
+ if ( !rc_intersect( (GRECT*)&msg[4], &clip)) {
+ return;
+ }
+
+ /* make redraw coords relative to content viewport */
clip.g_x -= work.g_x;
clip.g_y -= work.g_y;
+
+ /* normalize the redraw coords: */
if( clip.g_x < 0 ) {
clip.g_w = work.g_w + clip.g_x;
clip.g_x = 0;
@@ -339,15 +481,19 @@ static void __CDECL on_redraw_event(ATARI_TREEVIEW_PTR tptr, EVMULT_OUT *ev_out,
clip.g_h = work.g_h + clip.g_y;
clip.g_y = 0;
}
+
+ /* Merge redraw coords: */
if( clip.g_h > 0 && clip.g_w > 0 ) {
GRECT rdrw_area;
- rdrw_area.g_x = (slid->x_pos*slid->x_unit_px) + clip.g_x;
- rdrw_area.g_y =(slid->y_pos*slid->y_unit_px) + clip.g_y;
+ rdrw_area.g_x = clip.g_x;
+ rdrw_area.g_y = clip.g_y;
rdrw_area.g_w = clip.g_w;
rdrw_area.g_h = clip.g_h;
+ //dbg_grect("treeview on_redraw_event ", &rdrw_area);
+
atari_treeview_redraw_grect_request(tptr, &rdrw_area);
}
}
@@ -410,7 +556,10 @@ static void __CDECL on_mbutton_event(ATARI_TREEVIEW_PTR tptr, EVMULT_OUT *ev_out
tv->startdrag.x = origin_rel_x;
tv->startdrag.y = origin_rel_y;
-
+ /* First, report mouse press, to trigger entry selection */
+ tv->io->mouse_action(tv, BROWSER_MOUSE_CLICK_1 | BROWSER_MOUSE_PRESS_1, cur_rel_x,
+ cur_rel_y);
+ atari_treeview_redraw(tv);
tv->io->mouse_action(tv, BROWSER_MOUSE_DRAG_1 | BROWSER_MOUSE_DRAG_ON,
cur_rel_x, cur_rel_y);
do{
@@ -477,9 +626,15 @@ atari_treeview_create(GUIWIN *win, struct atari_treeview_callbacks * callbacks,
slid->x_unit_px = 16;
assert(cw->io);
- assert(cw->io->init);
-
- nserror err = cw->io->init(cw, &cw_t);
+ assert(cw->io->init_phase2);
+
+ /* Now that the window is configured for treeview content, */
+ /* call init_phase2 which must create the treeview */
+ /* descriptor, and at least setup the the default */
+ /* event handlers of the treeview: */
+ /* It would be more simple to not pass around the callbacks */
+ /* but the treeview constructor requires them for initialization... */
+ nserror err = cw->io->init_phase2(cw, &cw_t);
if (err != NSERROR_OK) {
free(cw);
cw = NULL;
@@ -491,14 +646,37 @@ atari_treeview_create(GUIWIN *win, struct atari_treeview_callbacks * callbacks,
void atari_treeview_delete(struct atari_treeview_window * cw)
{
assert(cw);
- assert(cw->io->fini);
+ assert(cw->io->finish);
- cw->io->fini(cw);
+ cw->io->finish(cw);
free(cw);
}
+void atari_treeview_open(struct atari_treeview_window *cw, GRECT *pos)
+{
+ if (cw->window != NULL) {
+ cw->is_open = true;
+ wind_open_grect(gemtk_wm_get_handle(cw->window), pos);
+ gemtk_wm_link(cw->window);
+ }
+}
+
+bool atari_treeview_is_open(struct atari_treeview_window *cw)
+{
+ return(cw->is_open);
+}
+
+void atari_treeview_close(struct atari_treeview_window *cw)
+{
+ if (cw->window != NULL) {
+ cw->is_open = false;
+ wind_close(gemtk_wm_get_handle(cw->window));
+ gemtk_wm_unlink(cw->window);
+ }
+}
+
/**
* Core Window Callbacks:
@@ -513,9 +691,21 @@ void atari_treeview_delete(struct atari_treeview_window * cw)
void atari_treeview_redraw_request(struct core_window *cw, const struct rect *r)
{
GRECT area;
+ struct gemtk_wm_scroll_info_s * slid;
+ struct atari_treeview_window * tv = (cw);
RECT_TO_GRECT(r, &area)
+ slid = gemtk_wm_get_scroll_info(tv->window);
+
+ //dbg_rect("redraw rect request", r);
+
+ // treeview redraw is always full window width:
+ area.g_x = 0;
+ area.g_w = area.g_w;
+ // but vertical redraw region is clipped:
+ area.g_y = r->y0 - (slid->y_pos*slid->y_unit_px);
+ area.g_h = r->y1 - r->y0;
atari_treeview_redraw_grect_request(cw, &area);
}
@@ -528,7 +718,40 @@ void atari_treeview_redraw_request(struct core_window *cw, const struct rect *r)
*/
void atari_treeview_update_size(struct core_window *cw, int width, int height)
{
+ GRECT area;
+ struct gemtk_wm_scroll_info_s *slid;
+ struct atari_treeview_window *tv = (struct atari_treeview_window *)cw;
+ if (tv != NULL) {
+
+ if (tv->disposing)
+ return;
+
+ /* Get acces to the gemtk window slider settings: */
+ slid = gemtk_wm_get_scroll_info(tv->window);
+
+ /* recalculate and refresh sliders: */
+ atari_treeview_get_grect(tv, TREEVIEW_AREA_CONTENT, &area);
+ if (width > -1) {
+ slid->x_units = (width/slid->x_unit_px);
+ } else {
+ slid->x_units = 1;
+ }
+
+ if (height > -1) {
+ slid->y_units = (height/slid->y_unit_px);
+ } else {
+ slid->y_units = 1;
+ }
+
+ tv->extent.x = width;
+ tv->extent.y = height;
+
+
+ /*printf("units content: %d, units viewport: %d\n", (height/slid->y_unit_px),
+ (area.g_h/slid->y_unit_px));*/
+ gemtk_wm_update_slider(tv->window, GEMTK_WM_VH_SLIDER);
+ }
}
@@ -540,7 +763,8 @@ void atari_treeview_update_size(struct core_window *cw, int width, int height)
*/
void atari_treeview_scroll_visible(struct core_window *cw, const struct rect *r)
{
-
+ /* atari frontend doesn't support dragging outside the treeview */
+ /* so there is no need to implement this? */
}
@@ -554,7 +778,13 @@ void atari_treeview_scroll_visible(struct core_window *cw, const struct rect *r)
void atari_treeview_get_window_dimensions(struct core_window *cw,
int *width, int *height)
{
-
+ if (cw != NULL && (width != NULL || height != NULL)) {
+ GRECT work;
+ struct atari_treeview_window *tv = (struct atari_treeview_window *)cw;
+ atari_treeview_get_grect(tv, TREEVIEW_AREA_CONTENT, &work);
+ *width = work.g_w;
+ *height = work.g_h;
+ }
}
diff --git a/atari/treeview.h b/atari/treeview.h
index ee01bf265..bab20c435 100644
--- a/atari/treeview.h
+++ b/atari/treeview.h
@@ -27,25 +27,33 @@
SMALLER | VSLIDE | HSLIDE | UPARROW | DNARROW \
| LFARROW | RTARROW)
+enum treeview_area_e {
+ TREEVIEW_AREA_WORK = 0,
+ TREEVIEW_AREA_TOOLBAR,
+ TREEVIEW_AREA_CONTENT
+};
struct core_window;
struct atari_treeview_window;
+
typedef struct atari_treeview_window *ATARI_TREEVIEW_PTR;
+// TODO: add drag_status callback!!
+typedef nserror (*atari_treeview_init2_callback)(struct core_window *cw,
+ struct core_window_callback_table * default_callbacks);
+typedef void (*atari_treeview_finish_callback)(struct core_window *cw);
typedef void (*atari_treeview_keypress_callback)(struct core_window *cw,
- long ucs4);
+ uint32_t ucs4);
typedef void (*atari_treeview_mouse_action_callback)(struct core_window *cw,
browser_mouse_state mouse,
int x, int y);
typedef void (*atari_treeview_draw_callback)(struct core_window *cw, int x,
- int y, int clip_x, int clip_y,
- int clip_width, int clip_height,
+ int y, struct rect *clip,
const struct redraw_context *ctx);
struct atari_treeview_callbacks {
- nserror (*init)(struct core_window *cw,
- struct core_window_callback_table * default_callbacks);
- void (*fini)(struct core_window *cw);
+ atari_treeview_init2_callback init_phase2;
+ atari_treeview_finish_callback finish;
atari_treeview_draw_callback draw;
atari_treeview_keypress_callback keypress;
atari_treeview_mouse_action_callback mouse_action;
@@ -56,6 +64,12 @@ struct atari_treeview_window *
atari_treeview_create(GUIWIN *win, struct atari_treeview_callbacks * callbacks,
uint32_t flags);
void atari_treeview_delete(struct atari_treeview_window * cw);
-
+void atari_treeview_open(struct atari_treeview_window * cw, GRECT *pos);
+bool atari_treeview_is_open(struct atari_treeview_window *cw);
+void atari_treeview_close(struct atari_treeview_window * cw);
+GUIWIN * atari_treeview_get_gemtk_window(struct atari_treeview_window *tv);
+void atari_treeview_get_grect(ATARI_TREEVIEW_PTR tptr, enum treeview_area_e mode,
+ GRECT *dest);
+void atari_treeview_redraw(struct atari_treeview_window *tv);
#endif //NSATARI_TREEVIEW_H