From 71676165c18ac1dfb979f9c9b9ff1523c33e8229 Mon Sep 17 00:00:00 2001 From: Michael Drake Date: Tue, 20 Aug 2013 19:44:14 +0100 Subject: Add folder node update function. --- desktop/treeview.c | 42 +++++++++++++++++++++++++++++++++++++++++- desktop/treeview.h | 16 ++++++++++++++++ 2 files changed, 57 insertions(+), 1 deletion(-) diff --git a/desktop/treeview.c b/desktop/treeview.c index 0f998fc4e..ac65b0d38 100644 --- a/desktop/treeview.c +++ b/desktop/treeview.c @@ -475,6 +475,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, @@ -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 @@ -198,6 +198,22 @@ nserror treeview_create_node_entry(treeview *tree, const struct treeview_field_data fields[], 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 * -- cgit v1.2.3