From ae8959fa8b46fd21100b72669dcd4da03d91fd97 Mon Sep 17 00:00:00 2001 From: Chris Young Date: Sun, 8 Jan 2017 00:40:40 +0000 Subject: Remove old tree implementation --- frontends/amiga/tree.c | 1484 ------------------------------------------------ 1 file changed, 1484 deletions(-) delete mode 100644 frontends/amiga/tree.c (limited to 'frontends/amiga/tree.c') diff --git a/frontends/amiga/tree.c b/frontends/amiga/tree.c deleted file mode 100644 index b9747c095..000000000 --- a/frontends/amiga/tree.c +++ /dev/null @@ -1,1484 +0,0 @@ -/* - * Copyright 2008 - 2013 Chris Young - * - * 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 . - */ - -#include "amiga/os3support.h" - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#ifdef __amigaos4__ -#include -#endif - -#include -#include - -#include "utils/nsoption.h" -#include "utils/utils.h" -#include "utils/messages.h" -#include "netsurf/browser_window.h" -#include "netsurf/window.h" -#include "netsurf/keypress.h" -#include "content/llcache.h" -#include "desktop/cookie_manager.h" -#include "desktop/global_history.h" -#include "desktop/hotlist.h" -#include "desktop/sslcert_viewer.h" - -#include "amiga/gui.h" -#include "amiga/tree.h" -#include "amiga/file.h" -#include "amiga/libs.h" -#include "amiga/misc.h" -#include "amiga/utf8.h" -#include "amiga/sslcert.h" -#include "amiga/drag.h" /* drag icon stuff */ -#include "amiga/theme.h" /* pointers */ -#include "amiga/filetype.h" -#include "amiga/schedule.h" -#include "amiga/plotters.h" - -#define AMI_TREE_MENU_ITEMS 26 -#define AMI_TREE_MENU_NEWDIR FULLMENUNUM(1,0,0) -#define AMI_TREE_MENU_NEWURL FULLMENUNUM(1,1,0) -#define AMI_TREE_MENU_EDIT FULLMENUNUM(1,3,0) -#define AMI_TREE_MENU_DELETE FULLMENUNUM(1,5,0) -#define AMI_TREE_MENU_CLEAR FULLMENUNUM(1,8,0) - -enum { - GID_OPEN = GID_LAST, - GID_TREE_LAST -}; - - -struct treeview_window { - struct ami_generic_window w; - struct Window *win; - Object *objects[GID_TREE_LAST]; - int type; - struct NewMenu *menu; - char *menu_name[AMI_TREE_MENU_ITEMS]; - struct tree *tree; - struct Hook scrollerhook; - uint32 key_state; - uint32 mouse_state; - int drag_x; - int drag_y; - struct timeval lastclick; - int max_width; - int max_height; - struct gui_globals globals; - struct sslcert_session_data *ssl_data; - char *wintitle; - char *sslerr; - char *sslaccept; - char *sslreject; - struct MinList *shared_pens; -}; - -struct ami_tree_redraw_req { - int x; - int y; - int width; - int height; - struct treeview_window *twin; -}; - -static BOOL ami_tree_event(void *w); - -static const struct ami_win_event_table ami_tree_table = { - ami_tree_event, - ami_tree_close, -}; - -#if 0 -void ami_tree_draw(struct treeview_window *twin); -static void ami_tree_resized(struct tree *tree, int width, - int height, void *data); -static void ami_tree_scroll_visible(int y, int height, void *data); -static void ami_tree_get_window_dimensions(int *width, int *height, void *data); -#endif - -void ami_tree_destroy(struct treeview_window *twin) -{ - tree_delete(twin->tree); - free(twin->shared_pens); - free(twin); -} - -struct tree *ami_tree_get_tree(struct treeview_window *twin) -{ - return twin->tree; -} - -static void ami_tree_resized(struct tree *tree, int width, int height, void *data) -{ - struct treeview_window *twin = data; - struct IBox *bbox; - - twin->max_height = height; - twin->max_width = width; - - if(twin->win) - { - if(ami_gui_get_space_box(twin->objects[GID_BROWSER], &bbox) != NSERROR_OK) { - amiga_warn_user("NoMemory", ""); - return; - } - - if(height == -1) { - SetAttrs((APTR)twin->objects[OID_MAIN], - WINDOW_VertProp, -1, - TAG_DONE); - } else { - RefreshSetGadgetAttrs((APTR)twin->objects[OID_VSCROLL], twin->win, NULL, - SCROLLER_Total, height, - SCROLLER_Visible, bbox->Height, - TAG_DONE); - } - - if(width == -1) { - SetAttrs((APTR)twin->objects[OID_MAIN], - WINDOW_HorizProp, -1, - TAG_DONE); - } else { - RefreshSetGadgetAttrs((APTR)twin->objects[OID_HSCROLL], twin->win, NULL, - SCROLLER_Total, width, - SCROLLER_Visible, bbox->Width, - TAG_DONE); - } - ami_gui_free_space_box(bbox); - } -} - -/** - * Retrieves the dimensions of the window with the tree - * - * \param data user data assigned to the tree on tree creation - * \param width will be updated to window width if not NULL - * \param height will be updated to window height if not NULL - */ -static void ami_tree_get_window_dimensions(int *width, int *height, void *data) -{ - struct treeview_window *twin = data; - struct IBox *bbox; - - if(ami_gui_get_space_box(twin->objects[GID_BROWSER], &bbox) != NSERROR_OK) { - amiga_warn_user("NoMemory", ""); - return; - } - - if(width) *width = bbox->Width; - if(height) *height = bbox->Height; - - ami_gui_free_space_box(bbox); -} - -static void ami_tree_redraw_req_dr(void *p) -{ - struct ami_tree_redraw_req *atrr_data = (struct ami_tree_redraw_req *)p; - int x = atrr_data->x; - int y = atrr_data->y; - int width = atrr_data->width; - int height = atrr_data->height; - struct treeview_window *twin = atrr_data->twin; - struct IBox *bbox; - int pos_x, pos_y; - struct RastPort *temprp; - struct redraw_context ctx = { - .interactive = true, - .background_images = true, - .plot = &amiplot - }; - - if(!twin->win) return; - - ami_update_pointer(twin->win, GUI_POINTER_WAIT); - - glob = &twin->globals; - temprp = glob->rp; - glob->rp = twin->win->RPort; - - GetAttr(SCROLLER_Top, twin->objects[OID_HSCROLL], (ULONG *)&pos_x); - GetAttr(SCROLLER_Top, twin->objects[OID_VSCROLL], (ULONG *)&pos_y); - - if(ami_gui_get_space_box(twin->objects[GID_BROWSER], &bbox) != NSERROR_OK) { - amiga_warn_user("NoMemory", ""); - free(atrr_data); - return; - } - - x += bbox->Left; - y += bbox->Top; - - if(x - pos_x + width > bbox->Width) width = bbox->Width - (x - pos_x); - if(y - pos_y + height > bbox->Height) height = bbox->Height - (y - pos_y); - - if(x < pos_x) { - width -= pos_x - x; - x = pos_x; - } - - if(y < pos_y) { - height -= pos_y - y; - y = pos_y; - } - - tree_draw(twin->tree, bbox->Left - pos_x, bbox->Top - pos_y, - atrr_data->x, atrr_data->y, - atrr_data->width, atrr_data->height, &ctx); - - free(atrr_data); - ami_gui_free_space_box(bbox); - ami_update_pointer(twin->win, GUI_POINTER_DEFAULT); - ami_clearclipreg(glob); - glob->rp = temprp; - ami_gui_set_default_gg(); -} - -static void ami_tree_redraw_req(void *p) -{ - struct ami_tree_redraw_req *atrr_data = (struct ami_tree_redraw_req *)p; - int x = atrr_data->x; - int y = atrr_data->y; - int width = atrr_data->width; - int height = atrr_data->height; - struct treeview_window *twin = atrr_data->twin; - struct IBox *bbox; - int pos_x, pos_y; - int tile_x, tile_y, tile_w, tile_h; - struct redraw_context ctx = { - .interactive = true, - .background_images = true, - .plot = &amiplot - }; - - free(atrr_data); - - if(!twin->win) return; - - ami_update_pointer(twin->win, GUI_POINTER_WAIT); - - glob = &twin->globals; - - GetAttr(SCROLLER_Top, twin->objects[OID_HSCROLL], (ULONG *)&pos_x); - GetAttr(SCROLLER_Top, twin->objects[OID_VSCROLL], (ULONG *)&pos_y); - - if(ami_gui_get_space_box(twin->objects[GID_BROWSER], &bbox) != NSERROR_OK) { - amiga_warn_user("NoMemory", ""); - return; - } - - if(x - pos_x + width > bbox->Width) width = bbox->Width - (x - pos_x); - if(y - pos_y + height > bbox->Height) height = bbox->Height - (y - pos_y); - - if(x < pos_x) { - width -= pos_x - x; - x = pos_x; - } - - if(y < pos_y) { - height -= pos_y - y; - y = pos_y; - } - - for(tile_y = y; tile_y < (y + height); tile_y += nsoption_int(redraw_tile_size_y)) { - tile_h = nsoption_int(redraw_tile_size_y); - if(((y + height) - tile_y) < nsoption_int(redraw_tile_size_y)) - tile_h = (y + height) - tile_y; - - for(tile_x = x; tile_x < (x + width); tile_x += nsoption_int(redraw_tile_size_x)) { - tile_w = nsoption_int(redraw_tile_size_x); - if(((x + width) - tile_x) < nsoption_int(redraw_tile_size_x)) - tile_w = (x + width) - tile_x; - - tree_draw(twin->tree, - tile_x, - tile_y, - tile_x, tile_y, tile_w, tile_h, &ctx); -#ifdef __amigaos4__ - BltBitMapTags(BLITA_SrcType, BLITT_BITMAP, - BLITA_Source, twin->globals.bm, - BLITA_SrcX, 0, - BLITA_SrcY, 0, - BLITA_DestType, BLITT_RASTPORT, - BLITA_Dest, twin->win->RPort, - BLITA_DestX, bbox->Left + tile_x - pos_x, - BLITA_DestY, bbox->Top + tile_y - pos_y, - BLITA_Width, tile_w, - BLITA_Height, tile_h, - TAG_DONE); -#else - BltBitMapRastPort(twin->globals.bm, 0, 0, - twin->win->RPort, bbox->Left + tile_x - pos_x, bbox->Top + tile_y - pos_y, - tile_w, tile_h, 0xC0); -#endif - } - } - - ami_gui_free_space_box(bbox); - ami_update_pointer(twin->win, GUI_POINTER_DEFAULT); - ami_clearclipreg(glob); - ami_gui_set_default_gg(); -} - -static void ami_tree_redraw_request(int x, int y, int width, int height, void *data) -{ - struct ami_tree_redraw_req *atrr_data = malloc(sizeof(struct ami_tree_redraw_req)); - - atrr_data->x = x; - atrr_data->y = y; - atrr_data->width = width; - atrr_data->height = height; - atrr_data->twin = (struct treeview_window *)data; - - /** /todo Queue these requests properly like the main browser code does - **/ - - if(nsoption_bool(direct_render) == false) - ami_schedule(0, ami_tree_redraw_req, atrr_data); - else - ami_schedule(0, ami_tree_redraw_req_dr, atrr_data); -} - -static void ami_tree_draw(struct treeview_window *twin) -{ - struct IBox *bbox; - int x, y; - - if(!twin) return; - - GetAttr(SCROLLER_Top, twin->objects[OID_HSCROLL], (ULONG *)&x); - GetAttr(SCROLLER_Top, twin->objects[OID_VSCROLL], (ULONG *)&y); - - if(ami_gui_get_space_box(twin->objects[GID_BROWSER], &bbox) != NSERROR_OK) { - amiga_warn_user("NoMemory", ""); - return; - } - - ami_tree_redraw_request(x, y, bbox->Width, bbox->Height, twin); - - ami_gui_free_space_box(bbox); -} - -/** - * Scrolls the tree to make an element visible - * - * \param y Y coordinate of the element - * \param height height of the element - * \param data user data assigned to the tree on tree creation - */ -static void ami_tree_scroll_visible(int y, int height, void *data) -{ - int sy, scrollset; - struct IBox *bbox; - struct treeview_window *twin = data; - - GetAttr(SCROLLER_Top, twin->objects[OID_VSCROLL], (ULONG *)&sy); - if(ami_gui_get_space_box(twin->objects[GID_BROWSER], &bbox) != NSERROR_OK) { - amiga_warn_user("NoMemory", ""); - return; - } - - if((y > sy) && ((y + height) < (sy + bbox->Height))) { - ami_gui_free_space_box(bbox); - return; - } - - if((y <= sy) || (height > bbox->Height)) scrollset = (ULONG)y; - else scrollset = sy + (y + height) - (sy + bbox->Height); - - RefreshSetGadgetAttrs((APTR)twin->objects[OID_VSCROLL], twin->win, NULL, - SCROLLER_Top, scrollset, - TAG_DONE); - - ami_gui_free_space_box(bbox); - ami_tree_draw(twin); -} - -static void ami_tree_scroll(struct treeview_window *twin, int sx, int sy) -{ - int x, y; - - if(!twin) return; - - GetAttr(SCROLLER_Top, twin->objects[OID_HSCROLL], (ULONG *)&x); - GetAttr(SCROLLER_Top, twin->objects[OID_VSCROLL], (ULONG *)&y); - - x += sx; - y += sy; - - if(y < 0) y = 0; - if(x < 0) x = 0; - - RefreshSetGadgetAttrs((APTR)twin->objects[OID_VSCROLL], twin->win, NULL, - SCROLLER_Top, y, - TAG_DONE); - - RefreshSetGadgetAttrs((APTR)twin->objects[OID_HSCROLL], twin->win, NULL, - SCROLLER_Top, x, - TAG_DONE); - - ami_tree_draw(twin); -} - -static void ami_tree_drag_icon_show(struct treeview_window *twin) -{ - const char *type = "project"; - nsurl *url = NULL; - const char *title = NULL; - - if((twin->type == AMI_TREE_COOKIES) || - (twin->type == AMI_TREE_SSLCERT)) return; /* No permissable drag operations */ - - if((tree_drag_status(twin->tree) == TREE_SELECT_DRAG) || - (tree_drag_status(twin->tree) == TREE_TEXTAREA_DRAG)) - return; - - if((twin->type == AMI_TREE_HOTLIST) && (hotlist_has_selection())) { - hotlist_get_selection(&url, &title); - } else if((twin->type == AMI_TREE_HISTORY) && (global_history_has_selection())) { - global_history_get_selection(&url, &title); - } - - if(title && (url == NULL)) - { - ami_drag_icon_show(twin->win, "drawer"); - } - else - { - ami_drag_icon_show(twin->win, type); - } -} - -static void ami_tree_drag_end(struct treeview_window *twin, int x, int y) -{ - struct gui_window_2 *gwin; - struct treeview_window *tw; - BOOL drag; - nsurl *url = NULL; - const char *title = NULL; - bool ok = false; - - if((drag = ami_drag_in_progress())) ami_drag_icon_close(twin->win); - - if(drag && (twin != ami_window_at_pointer(AMINS_TVWINDOW))) - { - if((twin->type == AMI_TREE_HOTLIST) && (hotlist_has_selection())) { - ok = hotlist_get_selection(&url, &title); - } else if((twin->type == AMI_TREE_HISTORY) && (global_history_has_selection())) { - ok = global_history_get_selection(&url, &title); - } - - if((ok == false) || (url == NULL)) { - DisplayBeep(scrn); - } else if(url) { - if((gwin = ami_window_at_pointer(AMINS_WINDOW))) { - browser_window_navigate(gwin->gw->bw, - url, - NULL, - BW_NAVIGATE_HISTORY, - NULL, - NULL, - NULL); - } else if((tw = ami_window_at_pointer(AMINS_TVWINDOW)) && - (tw != twin) && (tw->type == AMI_TREE_HOTLIST)) { - hotlist_add_entry(url, title, true, y); - } - } - tree_mouse_action(twin->tree, twin->mouse_state | twin->key_state, - twin->drag_x, twin->drag_y); /* Keep the tree happy */ - tree_drag_end(twin->tree, twin->mouse_state, - twin->drag_x, twin->drag_y, - twin->drag_x, twin->drag_y); /* Keep the tree happier */ - } else { - if(tree_drag_status(twin->tree) == TREE_UNKNOWN_DRAG) - DisplayBeep(scrn); - - tree_drag_end(twin->tree, twin->mouse_state, - twin->drag_x, twin->drag_y, x, y); - } -} - -HOOKF(void, ami_tree_scroller_hook, Object *, object, struct IntuiMessage *) -{ - ULONG gid; - struct treeview_window *twin = hook->h_Data; - struct IntuiWheelData *wheel; - - switch(msg->Class) - { - case IDCMP_IDCMPUPDATE: - gid = GetTagData( GA_ID, 0, msg->IAddress ); - - switch( gid ) - { - case OID_HSCROLL: - case OID_VSCROLL: - ami_tree_draw(twin); - break; - } - break; -#ifdef __amigaos4__ - case IDCMP_EXTENDEDMOUSE: - if(msg->Code == IMSGCODE_INTUIWHEELDATA) - { - wheel = (struct IntuiWheelData *)msg->IAddress; - - ami_tree_scroll(twin, (wheel->WheelX * 20), (wheel->WheelY * 20)); - } - break; -#endif - } -} - -static void ami_tree_menu(struct treeview_window *twin) -{ - if(twin->menu) return; - - if((twin->menu = calloc(1, sizeof(struct NewMenu) * AMI_TREE_MENU_ITEMS))) { - twin->menu[0].nm_Type = NM_TITLE; - twin->menu_name[0] = ami_utf8_easy((char *)messages_get("Tree")); - twin->menu[0].nm_Label = twin->menu_name[0]; - - twin->menu[1].nm_Type = NM_ITEM; - twin->menu_name[1] = ami_utf8_easy((char *)messages_get("TreeExport")); - twin->menu[1].nm_Label = twin->menu_name[1]; - if(twin->type == AMI_TREE_COOKIES) - twin->menu[1].nm_Flags = NM_ITEMDISABLED; - twin->menu[1].nm_CommKey = "S"; - - twin->menu[2].nm_Type = NM_ITEM; - twin->menu[2].nm_Label = NM_BARLABEL; - - twin->menu[3].nm_Type = NM_ITEM; - twin->menu_name[3] = ami_utf8_easy((char *)messages_get("Expand")); - twin->menu[3].nm_Label = twin->menu_name[3]; - - twin->menu[4].nm_Type = NM_SUB; - twin->menu_name[4] = ami_utf8_easy((char *)messages_get("All")); - twin->menu[4].nm_Label = twin->menu_name[4]; - twin->menu[4].nm_CommKey = "+"; - - if(twin->type == AMI_TREE_COOKIES) - { - twin->menu_name[5] = ami_utf8_easy((char *)messages_get("Domains")); - twin->menu_name[6] = ami_utf8_easy((char *)messages_get("Cookies")); - } - else - { - twin->menu_name[5] = ami_utf8_easy((char *)messages_get("Folders")); - twin->menu_name[6] = ami_utf8_easy((char *)messages_get("Links")); - } - - twin->menu[5].nm_Type = NM_SUB; - twin->menu[5].nm_Label = twin->menu_name[5]; // tree-specific title - - twin->menu[6].nm_Type = NM_SUB; - twin->menu[6].nm_Label = twin->menu_name[6]; // tree-specific title - - twin->menu[7].nm_Type = NM_ITEM; - twin->menu_name[7] = ami_utf8_easy((char *)messages_get("Collapse")); - twin->menu[7].nm_Label = twin->menu_name[7]; - - twin->menu[8].nm_Type = NM_SUB; - twin->menu[8].nm_Label = twin->menu_name[4]; - twin->menu[8].nm_CommKey = "-"; - - twin->menu[9].nm_Type = NM_SUB; - twin->menu[9].nm_Label = twin->menu_name[5]; // tree-specific title - - twin->menu[10].nm_Type = NM_SUB; - twin->menu[10].nm_Label = twin->menu_name[6]; // tree-specific title - - twin->menu[11].nm_Type = NM_ITEM; - twin->menu[11].nm_Label = NM_BARLABEL; - - twin->menu[12].nm_Type = NM_ITEM; - twin->menu_name[12] = ami_utf8_easy((char *)messages_get("SnapshotWindow")); - twin->menu[12].nm_Label = twin->menu_name[12]; - - twin->menu[13].nm_Type = NM_ITEM; - twin->menu[13].nm_Label = NM_BARLABEL; - - twin->menu[14].nm_Type = NM_ITEM; - twin->menu_name[14] = ami_utf8_easy((char *)messages_get("CloseWindow")); - twin->menu[14].nm_Label = twin->menu_name[14]; - twin->menu[14].nm_CommKey = "K"; - - twin->menu[15].nm_Type = NM_TITLE; - twin->menu_name[15] = ami_utf8_easy((char *)messages_get("Edit")); - twin->menu[15].nm_Label = twin->menu_name[15]; - - twin->menu[16].nm_Type = NM_ITEM; - twin->menu_name[16] = ami_utf8_easy((char *)messages_get("TreeNewFolder")); - twin->menu[16].nm_Label = twin->menu_name[16]; - twin->menu[16].nm_CommKey = "N"; - - twin->menu[17].nm_Type = NM_ITEM; - twin->menu_name[17] = ami_utf8_easy((char *)messages_get("TreeNewLink")); - twin->menu[17].nm_Label = twin->menu_name[17]; - - twin->menu[18].nm_Type = NM_ITEM; - twin->menu[18].nm_Label = NM_BARLABEL; - - twin->menu[19].nm_Type = NM_ITEM; - twin->menu_name[19] = ami_utf8_easy((char *)messages_get("TreeEdit")); - twin->menu[19].nm_Label = twin->menu_name[19]; - twin->menu[19].nm_CommKey = "E"; - - twin->menu[20].nm_Type = NM_ITEM; - twin->menu[20].nm_Label = NM_BARLABEL; - - twin->menu[21].nm_Type = NM_ITEM; - twin->menu_name[21] = ami_utf8_easy((char *)messages_get("TreeDelete")); - twin->menu[21].nm_Label = twin->menu_name[21]; - twin->menu[21].nm_CommKey = "D"; - - twin->menu[22].nm_Type = NM_ITEM; - twin->menu[22].nm_Label = NM_BARLABEL; - - twin->menu[23].nm_Type = NM_ITEM; - twin->menu_name[23] = ami_utf8_easy((char *)messages_get("SelectAllNS")); - twin->menu[23].nm_Label = twin->menu_name[23]; - twin->menu[23].nm_CommKey = "A"; - - twin->menu[24].nm_Type = NM_ITEM; - twin->menu_name[24] = ami_utf8_easy((char *)messages_get("ClearNS")); - twin->menu[24].nm_Label = twin->menu_name[24]; - - twin->menu[25].nm_Type = NM_END; - twin->menu_name[25] = NULL; - } -} - -static void ami_tree_update_buttons(struct treeview_window *twin) -{ - if(twin->type == AMI_TREE_SSLCERT) return; - if(twin->menu == NULL) return; - - if(twin->type != AMI_TREE_HOTLIST) { - OffMenu(twin->win, AMI_TREE_MENU_NEWDIR); - OffMenu(twin->win, AMI_TREE_MENU_NEWURL); - } - - if((twin->type == AMI_TREE_HOTLIST) && (hotlist_has_selection())) { - OnMenu(twin->win, AMI_TREE_MENU_EDIT); - } else { - OffMenu(twin->win, AMI_TREE_MENU_EDIT); - } - - if(((twin->type == AMI_TREE_HOTLIST) && (hotlist_has_selection())) || - ((twin->type == AMI_TREE_COOKIES) && (cookie_manager_has_selection())) || - ((twin->type == AMI_TREE_HISTORY) && (global_history_has_selection()))) { - OnMenu(twin->win, AMI_TREE_MENU_DELETE); - OnMenu(twin->win, AMI_TREE_MENU_CLEAR); - } else { - OffMenu(twin->win, AMI_TREE_MENU_DELETE); - OffMenu(twin->win, AMI_TREE_MENU_CLEAR); - } -} - -void ami_tree_open(struct treeview_window *twin,int type) -{ - if(twin->win) - { - WindowToFront(twin->win); - ActivateWindow(twin->win); - return; - } - - twin->type = type; - - switch(twin->type) - { - case AMI_TREE_HOTLIST: - twin->wintitle = ami_utf8_easy((char *)messages_get("Hotlist")); - break; - case AMI_TREE_COOKIES: - twin->wintitle = ami_utf8_easy((char *)messages_get("Cookies")); - break; - case AMI_TREE_HISTORY: - twin->wintitle = ami_utf8_easy((char *)messages_get("GlobalHistory")); - break; - case AMI_TREE_SSLCERT: - twin->wintitle = ami_utf8_easy((char *)messages_get("SSLCerts")); - twin->sslerr = ami_utf8_easy((char *)messages_get("SSLError")); - twin->sslaccept = ami_utf8_easy((char *)messages_get("SSL_Certificate_Accept")); - twin->sslreject = ami_utf8_easy((char *)messages_get("SSL_Certificate_Reject")); - break; - } - - twin->scrollerhook.h_Entry = (void *)ami_tree_scroller_hook; - twin->scrollerhook.h_Data = twin; - - ami_init_layers(&twin->globals, 0, 0, false); - ami_tree_menu(twin); - - if(type == AMI_TREE_SSLCERT) - { - twin->objects[OID_MAIN] = WindowObj, - WA_ScreenTitle, ami_gui_get_screen_title(), - WA_Title, twin->wintitle, - WA_Activate, TRUE, - WA_DepthGadget, TRUE, - WA_DragBar, TRUE, - WA_CloseGadget, TRUE, - WA_SizeGadget, TRUE, - WA_SizeBRight, TRUE, - WA_Height, scrn->Height / 2, - WA_PubScreen,scrn, - WA_ReportMouse,TRUE, - WA_IDCMP, IDCMP_MOUSEMOVE | IDCMP_MOUSEBUTTONS | IDCMP_NEWSIZE | - IDCMP_RAWKEY | IDCMP_GADGETUP | IDCMP_IDCMPUPDATE | - IDCMP_EXTENDEDMOUSE | IDCMP_SIZEVERIFY, - WINDOW_HorizProp,1, - WINDOW_VertProp,1, - WINDOW_IDCMPHook,&twin->scrollerhook, - WINDOW_IDCMPHookBits,IDCMP_IDCMPUPDATE | IDCMP_EXTENDEDMOUSE, - WINDOW_SharedPort,sport, - WINDOW_UserData,twin, - /* WINDOW_NewMenu, twin->menu, -> No menu for SSL Cert */ - WINDOW_IconifyGadget, FALSE, - WINDOW_Position, WPOS_CENTERSCREEN, - WINDOW_ParentGroup, twin->objects[GID_MAIN] = LayoutVObj, - LAYOUT_AddImage, LabelObj, - LABEL_Text, twin->sslerr, - LabelEnd, - LAYOUT_AddChild, twin->objects[GID_BROWSER] = SpaceObj, - GA_ID, GID_BROWSER, - SPACE_Transparent,TRUE, - SPACE_BevelStyle, BVS_DISPLAY, - SpaceEnd, - LAYOUT_AddChild, LayoutHObj, - LAYOUT_AddChild, twin->objects[GID_OPEN] = ButtonObj, - GA_ID,GID_OPEN, - GA_Text, twin->sslaccept, - GA_RelVerify,TRUE, - ButtonEnd, - LAYOUT_AddChild, twin->objects[GID_CANCEL] = ButtonObj, - GA_ID,GID_CANCEL, - GA_Text, twin->sslreject, - GA_RelVerify,TRUE, - ButtonEnd, - EndGroup, - CHILD_WeightedHeight,0, - EndGroup, - EndWindow; - } - else - { - ULONG width = scrn->Width / 2; - ULONG height = scrn->Height / 2; - ULONG top = (scrn->Height / 2) - (height / 2); - ULONG left = (scrn->Width / 2) - (width / 2); - - if((type == AMI_TREE_HOTLIST) && (nsoption_int(hotlist_window_xsize) > 0)) - { - top = nsoption_int(hotlist_window_ypos); - left = nsoption_int(hotlist_window_xpos); - width = nsoption_int(hotlist_window_xsize); - height = nsoption_int(hotlist_window_ysize); - } - else if((type == AMI_TREE_HISTORY) && (nsoption_int(history_window_xsize) > 0)) - { - top = nsoption_int(history_window_ypos); - left = nsoption_int(history_window_xpos); - width = nsoption_int(history_window_xsize); - height = nsoption_int(history_window_ysize); - } - else if((type == AMI_TREE_COOKIES) && (nsoption_int(cookies_window_xsize) > 0)) - { - top = nsoption_int(cookies_window_ypos); - left = nsoption_int(cookies_window_xpos); - width = nsoption_int(cookies_window_xsize); - height = nsoption_int(cookies_window_ysize); - } - - twin->objects[OID_MAIN] = WindowObj, - WA_ScreenTitle, ami_gui_get_screen_title(), - WA_Title, twin->wintitle, - WA_Activate, TRUE, - WA_DepthGadget, TRUE, - WA_DragBar, TRUE, - WA_CloseGadget, TRUE, - WA_SizeGadget, TRUE, - WA_SizeBRight, TRUE, - WA_Top, top, - WA_Left, left, - WA_Width, width, - WA_Height, height, - WA_PubScreen,scrn, - WA_ReportMouse,TRUE, - WA_IDCMP, IDCMP_MOUSEMOVE | IDCMP_MOUSEBUTTONS | IDCMP_NEWSIZE | - IDCMP_RAWKEY | IDCMP_GADGETUP | IDCMP_IDCMPUPDATE | - IDCMP_EXTENDEDMOUSE | IDCMP_SIZEVERIFY | IDCMP_INTUITICKS, - WINDOW_HorizProp,1, - WINDOW_VertProp,1, - WINDOW_IDCMPHook,&twin->scrollerhook, - WINDOW_IDCMPHookBits,IDCMP_IDCMPUPDATE | IDCMP_EXTENDEDMOUSE, - WINDOW_SharedPort,sport, - WINDOW_UserData,twin, - WINDOW_NewMenu, twin->menu, - WINDOW_IconifyGadget, FALSE, -// WINDOW_Position, WPOS_CENTERSCREEN, - WINDOW_ParentGroup, twin->objects[GID_MAIN] = LayoutVObj, - LAYOUT_AddChild, twin->objects[GID_BROWSER] = SpaceObj, - GA_ID, GID_BROWSER, - SPACE_Transparent,TRUE, - SPACE_BevelStyle, BVS_DISPLAY, - SpaceEnd, - EndGroup, - EndWindow; - } - - twin->win = (struct Window *)RA_OpenWindow(twin->objects[OID_MAIN]); - - GetAttr(WINDOW_HorizObject, twin->objects[OID_MAIN], - (ULONG *)&twin->objects[OID_HSCROLL]); - GetAttr(WINDOW_VertObject, twin->objects[OID_MAIN], - (ULONG *)&twin->objects[OID_VSCROLL]); - - RefreshSetGadgetAttrs((APTR)twin->objects[OID_VSCROLL], twin->win, NULL, - GA_ID,OID_VSCROLL, - ICA_TARGET,ICTARGET_IDCMP, - TAG_DONE); - - RefreshSetGadgetAttrs((APTR)twin->objects[OID_HSCROLL], twin->win, NULL, - GA_ID,OID_HSCROLL, - ICA_TARGET,ICTARGET_IDCMP, - TAG_DONE); - - ami_gui_win_list_add(twin, AMINS_TVWINDOW, &ami_tree_table); - - ami_tree_update_buttons(twin); - ami_tree_resized(twin->tree, twin->max_width, twin->max_height, twin); - ami_tree_draw(twin); -} - -void ami_tree_close(void *w) -{ - struct treeview_window *twin = (struct treeview_window *)w; - int i; - - twin->win = NULL; - DisposeObject(twin->objects[OID_MAIN]); - ami_gui_win_list_remove(twin); - ami_plot_release_pens(twin->shared_pens); - ami_free_layers(&twin->globals); - - for(i=0;imenu_name[i] && (twin->menu_name[i] != NM_BARLABEL)) - ami_utf8_free(twin->menu_name[i]); - twin->menu_name[i] = NULL; - } - - free(twin->menu); - twin->menu = NULL; - ami_utf8_free(twin->wintitle); - twin->wintitle = NULL; - if(twin->type == AMI_TREE_SSLCERT) { - ami_utf8_free(twin->sslerr); - ami_utf8_free(twin->sslaccept); - ami_utf8_free(twin->sslreject); - //ami_ssl_free(twin); - } - - if(twin->type == AMI_TREE_HOTLIST) - ami_gui_hotlist_update_all(); -} - -static void ami_tree_update_quals(struct treeview_window *twin) -{ - uint32 quals = 0; -#ifdef __amigaos4__ - GetAttr(WINDOW_Qualifier, twin->objects[OID_MAIN], (uint32 *)&quals); -#else -#warning FIXME not reading qualifiers on OS3 -#endif - twin->key_state = 0; - - if((quals & IEQUALIFIER_LSHIFT) || (quals & IEQUALIFIER_RSHIFT)) - { - twin->key_state |= BROWSER_MOUSE_MOD_1; - } - - if(quals & IEQUALIFIER_CONTROL) - { - twin->key_state |= BROWSER_MOUSE_MOD_2; - } - - if((quals & IEQUALIFIER_LALT) || (quals & IEQUALIFIER_RALT)) - { - twin->key_state |= BROWSER_MOUSE_MOD_3; - } -} - -static BOOL ami_tree_event(void *w) -{ - /* return TRUE if window destroyed */ - struct treeview_window *twin = (struct treeview_window *)w; - ULONG result,storage = 0; - uint16 code; - struct MenuItem *item; - ULONG menunum=0,itemnum=0,subnum=0; - int xs, ys, x, y; - struct IBox *bbox; - struct timeval curtime; - struct InputEvent *ie; - int nskey; - char fname[1024]; - static int drag_x_move = 0, drag_y_move = 0; - - while((result = RA_HandleInput(twin->objects[OID_MAIN],&code)) != WMHI_LASTMSG) - { - switch(result & WMHI_CLASSMASK) // class - { - case WMHI_GADGETUP: - switch(result & WMHI_GADGETMASK) - { - case GID_OPEN: - sslcert_viewer_accept(twin->ssl_data); - ami_tree_close(twin); - return TRUE; - break; - - case GID_CANCEL: - sslcert_viewer_reject(twin->ssl_data); - ami_tree_close(twin); - return TRUE; - break; - } - break; - - case WMHI_MOUSEMOVE: - drag_x_move = 0; - drag_y_move = 0; - - if(ami_gui_get_space_box(twin->objects[GID_BROWSER], &bbox) != NSERROR_OK) { - amiga_warn_user("NoMemory", ""); - break; - } - - GetAttr(SCROLLER_Top, twin->objects[OID_HSCROLL], (ULONG *)&xs); - x = twin->win->MouseX - bbox->Left + xs; - - GetAttr(SCROLLER_Top, twin->objects[OID_VSCROLL], (ULONG *)&ys); - y = twin->win->MouseY - bbox->Top + ys; - - if(twin->mouse_state & BROWSER_MOUSE_DRAG_ON) - { - ami_drag_icon_move(); - - if((twin->win->MouseX < bbox->Left) && - ((twin->win->MouseX - bbox->Left) > -AMI_DRAG_THRESHOLD)) - drag_x_move = twin->win->MouseX - bbox->Left; - if((twin->win->MouseX > (bbox->Left + bbox->Width)) && - ((twin->win->MouseX - (bbox->Left + bbox->Width)) < AMI_DRAG_THRESHOLD)) - drag_x_move = twin->win->MouseX - (bbox->Left + bbox->Width); - if((twin->win->MouseY < bbox->Top) && - ((twin->win->MouseY - bbox->Top) > -AMI_DRAG_THRESHOLD)) - drag_y_move = twin->win->MouseY - bbox->Top; - if((twin->win->MouseY > (bbox->Top + bbox->Height)) && - ((twin->win->MouseY - (bbox->Top + bbox->Height)) < AMI_DRAG_THRESHOLD)) - drag_y_move = twin->win->MouseY - (bbox->Top + bbox->Height); - - tree_mouse_action(twin->tree, twin->mouse_state | twin->key_state, x, y); - } - - if((x >= xs) && (y >= ys) && (x < bbox->Width + xs) && - (y < bbox->Height + ys)) - { - ami_tree_update_quals(twin); - - if(twin->mouse_state & BROWSER_MOUSE_PRESS_1) - { - if((abs(x - twin->drag_x) + abs(y - twin->drag_y)) > 2) - { - tree_mouse_action(twin->tree, - BROWSER_MOUSE_DRAG_1 | twin->key_state, x, y); - twin->mouse_state = BROWSER_MOUSE_HOLDING_1 | - BROWSER_MOUSE_DRAG_ON; - ami_tree_drag_icon_show(twin); - } - } - else if(twin->mouse_state & BROWSER_MOUSE_PRESS_2) - { - if((abs(x - twin->drag_x) + abs(y - twin->drag_y)) > 2) - { - tree_mouse_action(twin->tree, - BROWSER_MOUSE_DRAG_2 | twin->key_state, x, y); - twin->mouse_state = BROWSER_MOUSE_HOLDING_2 | - BROWSER_MOUSE_DRAG_ON; - ami_tree_drag_icon_show(twin); - } - } - } - ami_gui_free_space_box(bbox); - - twin->lastclick.tv_sec = 0; - twin->lastclick.tv_usec = 0; - break; - - case WMHI_MOUSEBUTTONS: - if(ami_gui_get_space_box((Object *)twin->objects[GID_BROWSER], &bbox) != NSERROR_OK) { - amiga_warn_user("NoMemory", ""); - break; - } - - GetAttr(SCROLLER_Top, twin->objects[OID_HSCROLL], (ULONG *)&xs); - x = twin->win->MouseX - bbox->Left + xs; - GetAttr(SCROLLER_Top, twin->objects[OID_VSCROLL], (ULONG *)&ys); - y = twin->win->MouseY - bbox->Top + ys; - - ami_tree_update_quals(twin); - - if((x >= xs) && (y >= ys) && (x < bbox->Width + xs) && - (y < bbox->Height + ys)) - { - switch(code) - { - case SELECTDOWN: - twin->mouse_state = BROWSER_MOUSE_PRESS_1; - if(twin->drag_x == 0) twin->drag_x = x; - if(twin->drag_y == 0) twin->drag_y = y; - break; - case MIDDLEDOWN: - twin->mouse_state = BROWSER_MOUSE_PRESS_2; - if(twin->drag_x == 0) twin->drag_x = x; - if(twin->drag_y == 0) twin->drag_y = y; - break; - case MENUDOWN: -#if 0 - if(tree_node_has_selection(tree_get_root(twin->tree)) == false) - { - tree_set_node_selected_at(twin->tree, x, y, true); - } - ami_context_menu_show_tree(twin->tree, twin->win, twin->type); -#endif - break; - } - } - - if(x < xs) x = xs; - if(y < ys) y = ys; - if(x >= bbox->Width + xs) x = bbox->Width + xs - 1; - if(y >= bbox->Height + ys) y = bbox->Height + ys - 1; - - ami_gui_free_space_box(bbox); - - switch(code) - { - case SELECTUP: - if(twin->mouse_state & BROWSER_MOUSE_PRESS_1) - { - CurrentTime((ULONG *)&curtime.tv_sec, (ULONG *)&curtime.tv_usec); - - twin->mouse_state = BROWSER_MOUSE_CLICK_1; - - if(twin->lastclick.tv_sec) - { - if(DoubleClick(twin->lastclick.tv_sec, - twin->lastclick.tv_usec, - curtime.tv_sec, curtime.tv_usec)) - twin->mouse_state |= BROWSER_MOUSE_DOUBLE_CLICK; - } - tree_mouse_action(twin->tree, - twin->mouse_state | twin->key_state, x, y); - - if(twin->mouse_state & BROWSER_MOUSE_DOUBLE_CLICK) - { - twin->lastclick.tv_sec = 0; - twin->lastclick.tv_usec = 0; - } - else - { - twin->lastclick.tv_sec = curtime.tv_sec; - twin->lastclick.tv_usec = curtime.tv_usec; - } - } - else ami_tree_drag_end(twin, x, y); - - twin->mouse_state=0; - twin->drag_x = 0; - twin->drag_y = 0; - break; - - case MIDDLEUP: - if(twin->mouse_state & BROWSER_MOUSE_PRESS_2) - { - CurrentTime((ULONG *)&curtime.tv_sec, (ULONG *)&curtime.tv_usec); - - twin->mouse_state = BROWSER_MOUSE_CLICK_2; - - if(twin->lastclick.tv_sec) - { - if(DoubleClick(twin->lastclick.tv_sec, - twin->lastclick.tv_usec, - curtime.tv_sec, curtime.tv_usec)) - twin->mouse_state |= BROWSER_MOUSE_DOUBLE_CLICK; - } - tree_mouse_action(twin->tree, - twin->mouse_state | twin->key_state, x, y); - - if(twin->mouse_state & BROWSER_MOUSE_DOUBLE_CLICK) - { - twin->lastclick.tv_sec = 0; - twin->lastclick.tv_usec = 0; - } - else - { - twin->lastclick.tv_sec = curtime.tv_sec; - twin->lastclick.tv_usec = curtime.tv_usec; - } - } - else ami_tree_drag_end(twin, x, y); - - twin->mouse_state=0; - twin->drag_x = 0; - twin->drag_y = 0; - break; - - case SELECTDOWN: - case MIDDLEDOWN: - tree_mouse_action(twin->tree, - twin->mouse_state | twin->key_state, x, y); - break; - } - ami_tree_update_buttons(twin); - break; - - case WMHI_RAWKEY: - storage = result & WMHI_GADGETMASK; - - GetAttr(WINDOW_InputEvent,twin->objects[OID_MAIN],(ULONG *)&ie); - nskey = ami_key_to_nskey(storage, ie); - tree_keypress(twin->tree, nskey); - if(nskey == NS_KEY_COPY_SELECTION) { - /* if we've copied a selection we need to clear it - style guide rules */ - tree_keypress(twin->tree, NS_KEY_CLEAR_SELECTION); - } - break; - - case WMHI_MENUPICK: - item = ItemAddress(twin->win->MenuStrip,code); - while (code != MENUNULL) - { - menunum = MENUNUM(code); - itemnum = ITEMNUM(code); - subnum = SUBNUM(code); - - switch(menunum) - { - case 0: // tree - switch(itemnum) - { - case 0: // export - if(AslRequestTags(savereq, - ASLFR_Window, twin->win, - ASLFR_SleepWindow, TRUE, - ASLFR_TitleText,messages_get("NetSurf"), - ASLFR_Screen,scrn, - ASLFR_InitialFile,"tree_export.html", - TAG_DONE)) - { - strlcpy(fname,savereq->fr_Drawer,1024); - AddPart(fname,savereq->fr_File,1024); - ami_update_pointer(twin->win, GUI_POINTER_WAIT); - if(twin->type == AMI_TREE_HISTORY) - global_history_export(fname, NULL); - else if(twin->type == AMI_TREE_HOTLIST) - hotlist_export(fname, NULL); - ami_update_pointer(twin->win, GUI_POINTER_DEFAULT); - } - break; - - case 2: // expand - switch(subnum) - { - case 0: // all - switch(twin->type) - { - case AMI_TREE_HISTORY: - global_history_expand(false); - break; - case AMI_TREE_COOKIES: - cookie_manager_expand(false); - break; - case AMI_TREE_HOTLIST: - hotlist_expand(false); - break; - } - break; - - case 1: // lev 1 - switch(twin->type) - { - case AMI_TREE_HISTORY: - global_history_expand(true); - break; - case AMI_TREE_COOKIES: - cookie_manager_expand(true); - break; - case AMI_TREE_HOTLIST: - hotlist_expand(true); - break; - } - break; - - case 2: // lev 2 - switch(twin->type) - { - case AMI_TREE_HISTORY: - global_history_expand(false); - break; - case AMI_TREE_COOKIES: - cookie_manager_expand(false); - break; - case AMI_TREE_HOTLIST: - hotlist_expand(false); - break; - } - break; - } - break; - - case 3: // collapse - switch(subnum) - { - case 0: // all - switch(twin->type) - { - case AMI_TREE_HISTORY: - global_history_contract(true); - break; - case AMI_TREE_COOKIES: - cookie_manager_contract(true); - break; - case AMI_TREE_HOTLIST: - hotlist_contract(true); - break; - } - break; - - case 1: // lev 1 - switch(twin->type) - { - case AMI_TREE_HISTORY: - global_history_contract(true); - break; - case AMI_TREE_COOKIES: - cookie_manager_contract(true); - break; - case AMI_TREE_HOTLIST: - hotlist_contract(true); - break; - } - break; - - case 2: // lev 2 - switch(twin->type) - { - case AMI_TREE_HISTORY: - global_history_contract(false); - break; - case AMI_TREE_COOKIES: - cookie_manager_contract(false); - break; - case AMI_TREE_HOTLIST: - hotlist_contract(false); - break; - } - break; - } - break; - - case 5: // snapshot - switch(twin->type) - { - case AMI_TREE_HISTORY: - nsoption_set_int(history_window_ypos, twin->win->TopEdge); - nsoption_set_int(history_window_xpos, twin->win->LeftEdge); - nsoption_set_int(history_window_xsize, twin->win->Width); - nsoption_set_int(history_window_ysize, twin->win->Height); - break; - case AMI_TREE_COOKIES: - nsoption_set_int(cookies_window_ypos, twin->win->TopEdge); - nsoption_set_int(cookies_window_xpos, twin->win->LeftEdge); - nsoption_set_int(cookies_window_xsize, twin->win->Width); - nsoption_set_int(cookies_window_ysize, twin->win->Height); - break; - case AMI_TREE_HOTLIST: - nsoption_set_int(hotlist_window_ypos, twin->win->TopEdge); - nsoption_set_int(hotlist_window_xpos, twin->win->LeftEdge); - nsoption_set_int(hotlist_window_xsize, twin->win->Width); - nsoption_set_int(hotlist_window_ysize, twin->win->Height); - break; - } - break; - - case 7: // close - ami_tree_close(twin); - return TRUE; - break; - } - break; - - case 1: // edit - switch(itemnum) - { - case 0: // new folder - hotlist_add_folder(NULL, false, 0); - break; - - case 1: // new entry - hotlist_add_entry(NULL, NULL, false, 0); - break; - - case 3: // edit - hotlist_edit_selection(); - break; - - case 5: // delete - switch(twin->type) - { - case AMI_TREE_HISTORY: - global_history_keypress(NS_KEY_DELETE_LEFT); - break; - case AMI_TREE_COOKIES: - cookie_manager_keypress(NS_KEY_DELETE_LEFT); - break; - case AMI_TREE_HOTLIST: - hotlist_keypress(NS_KEY_DELETE_LEFT); - break; - } - ami_tree_update_buttons(twin); - break; - - case 7: // select all - switch(twin->type) - { - case AMI_TREE_HISTORY: - global_history_keypress(NS_KEY_SELECT_ALL); - break; - case AMI_TREE_COOKIES: - cookie_manager_keypress(NS_KEY_SELECT_ALL); - break; - case AMI_TREE_HOTLIST: - hotlist_keypress(NS_KEY_SELECT_ALL); - break; - } - ami_tree_update_buttons(twin); - break; - - case 8: // clear - switch(twin->type) - { - case AMI_TREE_HISTORY: - global_history_keypress(NS_KEY_CLEAR_SELECTION); - break; - case AMI_TREE_COOKIES: - cookie_manager_keypress(NS_KEY_CLEAR_SELECTION); - break; - case AMI_TREE_HOTLIST: - hotlist_keypress(NS_KEY_CLEAR_SELECTION); - break; - } - ami_tree_update_buttons(twin); - break; - } - break; - } - - code = item->NextSelect; - } - break; - - case WMHI_NEWSIZE: - ami_tree_resized(twin->tree, twin->max_width, twin->max_height, twin); - ami_tree_draw(twin); - break; - - case WMHI_CLOSEWINDOW: - if(twin->type == AMI_TREE_SSLCERT) - sslcert_viewer_reject(twin->ssl_data); - ami_tree_close(twin); - return TRUE; - break; - } - } - - if(drag_x_move || drag_y_move) - ami_tree_scroll(twin, drag_x_move, drag_y_move); - - return FALSE; -} - - - - - -const struct treeview_table ami_tree_callbacks = { - .redraw_request = ami_tree_redraw_request, - .resized = ami_tree_resized, - .scroll_visible = ami_tree_scroll_visible, - .get_window_dimensions = ami_tree_get_window_dimensions -}; - -struct treeview_window *ami_tree_create(int flags, - struct sslcert_session_data *ssl_data) -{ - struct treeview_window *twin; - - twin = calloc(1, sizeof(struct treeview_window)); - - if(!twin) - { - amiga_warn_user("NoMemory", 0); - return NULL; - } - - twin->shared_pens = ami_AllocMinList(); - twin->globals.shared_pens = twin->shared_pens; - - twin->ssl_data = ssl_data; - twin->tree = tree_create(flags, &ami_tree_callbacks, twin); - - return twin; -} - -- cgit v1.2.3