static gint name_sort_func (GtkTreeModel *model, GtkTreeIter *a, GtkTreeIter *b, gpointer user_data) { DiaObject *pa = NODE_OBJECT(a), *pb = NODE_OBJECT(b); gchar *na, *nb; gint ret = cmp_diagram (a, b); if (ret) return ret; ret = cmp_layer (a, b); if (ret) return ret; if (pa == pb) return 0; else if (!pa || !pb) return (pa > pb) ? -1 : 1; na = object_get_displayname (pa); nb = object_get_displayname (pb); if (!na || !nb) return (na > nb) ? -1 : 1; ret = strcmp (na, nb); g_free (na); g_free (nb); return ret; }
static void selection_changed (Diagram* dia, int n, DDisplay* ddisp) { GtkStatusbar *statusbar; guint context_id; /* nothing to do if there is no display with the diagram anymore */ if (g_slist_length(dia->displays) < 1) return; statusbar = GTK_STATUSBAR (ddisp->modified_status); context_id = gtk_statusbar_get_context_id (statusbar, "Selection"); if (n > 1) { gchar *msg; /* http://www.gnu.org/software/gettext/manual/html_chapter/gettext_10.html#SEC150 * Althoug the single objects wont get triggered here some languages have variations on the other numbers */ msg = g_strdup_printf (ngettext ("Selection of %d object", "Selection of %d objects", n), n); gtk_statusbar_pop (statusbar, context_id); gtk_statusbar_push (statusbar, context_id, msg); g_free (msg); } else if (n == 1) { /* find the selected objects name - and display it */ DiaObject *object = (DiaObject *)ddisp->diagram->data->selected->data; gchar *name = object_get_displayname (object); gchar *msg = g_strdup_printf (_("Selected '%s'"), name); gtk_statusbar_pop (statusbar, context_id); gtk_statusbar_push (statusbar, context_id, msg); g_free (name); g_free (msg); } else { gtk_statusbar_pop (statusbar, context_id); } /* selection-changed signal can also be emitted from outside of the dia core */ ddisplay_do_update_menu_sensitivity (ddisp); }
static void _dtm_get_value (GtkTreeModel *tree_model, GtkTreeIter *iter, gint column, GValue *value) { switch (column) { case DIAGRAM_COLUMN : g_value_init (value, G_TYPE_OBJECT); g_value_set_object (value, NODE_DIAGRAM(iter)); break; case LAYER_COLUMN : g_value_init (value, G_TYPE_POINTER); g_value_set_pointer (value, NODE_LAYER(iter)); break; case OBJECT_COLUMN : g_value_init (value, G_TYPE_POINTER); g_value_set_pointer (value, NODE_OBJECT(iter)); break; case NAME_COLUMN : g_value_init (value, G_TYPE_STRING); /* deduce the requested name from the iter */ if (NODE_OBJECT(iter)) g_value_set_string (value, object_get_displayname (NODE_OBJECT (iter))); else if (NODE_LAYER(iter)) g_value_set_string (value, layer_get_name (NODE_LAYER (iter))); else if (NODE_DIAGRAM(iter)) g_value_set_string (value, diagram_get_name (DIA_DIAGRAM(NODE_DIAGRAM(iter)))); else /* warn on it? */ g_value_set_string (value, NULL); break; default : g_assert_not_reached (); } }