diff options
author | Michael Drake <tlsa@netsurf-browser.org> | 2013-08-20 19:44:14 +0100 |
---|---|---|
committer | Michael Drake <tlsa@netsurf-browser.org> | 2013-08-20 20:04:42 +0100 |
commit | 71676165c18ac1dfb979f9c9b9ff1523c33e8229 (patch) | |
tree | 4252327820d5ea0147ce055b4c225c70568954f2 | |
parent | 011ba501a7d1ce4ef4a9d4e7f107569bdce6b847 (diff) | |
download | netsurf-71676165c18ac1dfb979f9c9b9ff1523c33e8229.tar.gz netsurf-71676165c18ac1dfb979f9c9b9ff1523c33e8229.tar.bz2 |
Add folder node update function.
-rw-r--r-- | desktop/treeview.c | 42 | ||||
-rw-r--r-- | desktop/treeview.h | 16 |
2 files changed, 57 insertions, 1 deletions
diff --git a/desktop/treeview.c b/desktop/treeview.c index 0f998fc4e..ac65b0d38 100644 --- a/desktop/treeview.c +++ b/desktop/treeview.c @@ -476,6 +476,43 @@ nserror treeview_create_node_folder(treeview *tree, /* Exported interface, documented in treeview.h */ +nserror treeview_update_node_folder(treeview *tree, + treeview_node *folder, + const struct treeview_field_data *field, + void *data) +{ + bool match; + + assert(data != NULL); + assert(tree != NULL); + assert(folder != NULL); + assert(data == folder->client_data); + assert(folder->parent != NULL); + + assert(field != NULL); + assert(lwc_string_isequal(tree->fields[tree->n_fields].field, + field->field, &match) == lwc_error_ok && + match == true); + folder->text.data = field->value; + folder->text.len = field->value_len; + folder->text.width = 0; + + if (folder->parent->flags & TREE_NODE_EXPANDED) { + /* Text will be seen, get its width */ + nsfont.font_width(&plot_style_odd.text, + folder->text.data, + folder->text.len, + &(folder->text.width)); + } else { + /* Just invalidate the width, since it's not needed now */ + folder->text.width = 0; + } + + return NSERROR_OK; +} + + +/* Exported interface, documented in treeview.h */ nserror treeview_update_node_entry(treeview *tree, treeview_node *entry, const struct treeview_field_data fields[], @@ -2420,7 +2457,10 @@ static bool treeview_edit_node_at_point(treeview *tree, treeview_node *n, bool success; /* If the main field is editable, make field_data point to it */ - ef = &(tree->fields[0]); + if (n->type == TREE_NODE_ENTRY) + ef = &(tree->fields[0]); + else + ef = &(tree->fields[tree->n_fields]); if (ef->flags & TREE_FLAG_ALLOW_EDIT) { field_data = &n->text; field_desc = ef; diff --git a/desktop/treeview.h b/desktop/treeview.h index c623b8516..f7432aef5 100644 --- a/desktop/treeview.h +++ b/desktop/treeview.h @@ -199,6 +199,22 @@ nserror treeview_create_node_entry(treeview *tree, void *data, treeview_node_create_flags flags); /** + * Update an folder node in given treeview + * + * \param tree Treeview object in which to create entry + * \param folder Folder node to update + * \param fields New field data + * \param data Client data for node event callbacks + * \return NSERROR_OK on success, appropriate error otherwise + * + * Field name must match name past in treeview_create fields[N-1]. + */ +nserror treeview_update_node_folder(treeview *tree, + treeview_node *folder, + const struct treeview_field_data *field, + void *data); + +/** * Update an entry node in given treeview * * \param tree Treeview object in which to create entry |