summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Drake <tlsa@netsurf-browser.org>2013-08-20 19:44:14 +0100
committerMichael Drake <tlsa@netsurf-browser.org>2013-08-20 20:04:42 +0100
commit71676165c18ac1dfb979f9c9b9ff1523c33e8229 (patch)
tree4252327820d5ea0147ce055b4c225c70568954f2
parent011ba501a7d1ce4ef4a9d4e7f107569bdce6b847 (diff)
downloadnetsurf-71676165c18ac1dfb979f9c9b9ff1523c33e8229.tar.gz
netsurf-71676165c18ac1dfb979f9c9b9ff1523c33e8229.tar.bz2
Add folder node update function.
-rw-r--r--desktop/treeview.c42
-rw-r--r--desktop/treeview.h16
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