+void entitylist_treeviewcolumn_celldatafunc(ui::TreeViewColumn column, ui::CellRenderer renderer, ui::TreeModel model,
+ GtkTreeIter *iter, gpointer data)
+{
+ scene::Node *node;
+ gtk_tree_model_get_pointer(model, iter, 0, &node);
+ scene::Instance *instance;
+ gtk_tree_model_get_pointer(model, iter, 1, &instance);
+ if (node != 0) {
+ gtk_cell_renderer_set_fixed_size(renderer, -1, -1);
+ char *name = const_cast<char *>( node_get_name(*node));
+ g_object_set(G_OBJECT(renderer), "text", name, "visible", TRUE, NULL);
+
+ //globalOutputStream() << "rendering cell " << makeQuoted(name) << "\n";
+ auto style = gtk_widget_get_style(ui::TreeView(getEntityList().m_tree_view));
+ if (instance->childSelected()) {
+ g_object_set(G_OBJECT(renderer), "cell-background-gdk", &style->base[GTK_STATE_ACTIVE], NULL);
+ } else {
+ g_object_set(G_OBJECT(renderer), "cell-background-gdk", &style->base[GTK_STATE_NORMAL], NULL);
+ }
+ } else {
+ gtk_cell_renderer_set_fixed_size(renderer, -1, 0);
+ g_object_set(G_OBJECT(renderer), "text", "", "visible", FALSE, NULL);
+ }
+}
+
+static gboolean entitylist_tree_select(ui::TreeSelection selection, ui::TreeModel model, ui::TreePath path,
+ gboolean path_currently_selected, gpointer data)
+{
+ GtkTreeIter iter;
+ gtk_tree_model_get_iter(model, &iter, path);
+ scene::Node *node;
+ gtk_tree_model_get_pointer(model, &iter, 0, &node);
+ scene::Instance *instance;
+ gtk_tree_model_get_pointer(model, &iter, 1, &instance);
+ Selectable *selectable = Instance_getSelectable(*instance);
+
+ if (node == 0) {
+ if (path_currently_selected != FALSE) {
+ getEntityList().m_selection_disabled = true;
+ GlobalSelectionSystem().setSelectedAll(false);
+ getEntityList().m_selection_disabled = false;
+ }
+ } else if (selectable != 0) {
+ getEntityList().m_selection_disabled = true;
+ selectable->setSelected(path_currently_selected == FALSE);
+ getEntityList().m_selection_disabled = false;
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+static gboolean entitylist_tree_select_null(ui::TreeSelection selection, ui::TreeModel model, ui::TreePath path,
+ gboolean path_currently_selected, gpointer data)
+{
+ return TRUE;