From 55aa7af80f8e008b1bf5f478948cd3eda3458836 Mon Sep 17 00:00:00 2001 From: Michael Drake Date: Fri, 31 May 2013 10:05:15 +0100 Subject: Add first pass at new treeview. Only supports creation, destruction, and redraw atm. TODO: input handling (mouse, keyboard), editing, using the node callbacks. Also includes new core_window.h. --- desktop/treeview.h | 123 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 123 insertions(+) create mode 100644 desktop/treeview.h (limited to 'desktop/treeview.h') diff --git a/desktop/treeview.h b/desktop/treeview.h new file mode 100644 index 000000000..91383d313 --- /dev/null +++ b/desktop/treeview.h @@ -0,0 +1,123 @@ +/* + * Copyright 2012 - 2013 Michael Drake + * + * This file is part of NetSurf, http://www.netsurf-browser.org/ + * + * NetSurf is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * NetSurf is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +/** \file + * Treeview handling (interface). + */ + +#ifndef _NETSURF_DESKTOP_TREEVIEW_H_ +#define _NETSURF_DESKTOP_TREEVIEW_H_ + +#include +#include + +#include "desktop/core_window.h" +#include "utils/types.h" + +struct treeview; +struct treeview_node; + +enum treeview_relationship { + TREE_REL_CHILD, + TREE_REL_SIBLING_NEXT +}; + +enum treeview_msg { + TREE_MSG_NODE_DELETE, + TREE_MSG_FIELD_EDIT +}; +struct treeview_node_msg { + enum treeview_msg msg; /**< The message type */ + union { + struct { + struct treeview_node *node; + } node_delete; + struct { + struct treeview_node *node; + lwc_string *feild; + const char *text; + } field_edit; + } data; /**< The message data. */ +}; + +enum treeview_field_flags { + TREE_FLAG_NONE = 0, /**< No flags set */ + TREE_FLAG_ALLOW_EDIT = (1 << 0), /**< Whether allow edit field */ + TREE_FLAG_DEFAULT = (1 << 1), /**< Whether field is default */ + TREE_FLAG_SHOW_NAME = (1 << 2) /**< Whether field name shown */ + +}; +struct treeview_field_desc { + lwc_string *field; + enum treeview_field_flags flags; +}; + +struct treeview_field_data { + lwc_string *field; + const char *value; + size_t value_len; +}; + + +struct treeview_callback_table { + nserror (*folder)(struct treeview_node_msg msg, void *data); + nserror (*entry)(struct treeview_node_msg msg, void *data); +}; + +nserror treeview_init(void); +nserror treeview_fini(void); + +nserror treeview_create(struct treeview **tree, + const struct treeview_callback_table *callbacks, + int n_fields, struct treeview_field_desc fields[], + const struct core_window_callback_table *cw_t, + const struct core_window *cw); + +nserror treeview_destroy(struct treeview *tree); + +nserror treeview_create_node_folder(struct treeview *tree, + struct treeview_node **folder, + struct treeview_node *relation, + enum treeview_relationship rel, + const struct treeview_field_data *field, + void *data); +nserror treeview_create_node_entry(struct treeview *tree, + struct treeview_node **entry, + struct treeview_node *relation, + enum treeview_relationship rel, + const struct treeview_field_data fields[], + void *data); + +nserror treeview_update_node_entry(struct treeview *tree, + struct treeview_node *entry, + const struct treeview_field_data fields[], + void *data); + +nserror treeview_delete_node(struct treeview_node *n); + +nserror treeview_node_expand(struct treeview *tree, + struct treeview_node *node); +nserror treeview_node_contract(struct treeview *tree, + struct treeview_node *node); + +void treeview_redraw(struct treeview *tree, int x, int y, struct rect *clip, + const struct redraw_context *ctx); + +struct treeview_node * treeview_get_root(struct treeview *tree); + +#endif -- cgit v1.2.3