diff options
author | Christian Dywan <christian@lanedo.com> | 2010-05-19 17:27:47 +0200 |
---|---|---|
committer | Matthias Clasen <mclasen@redhat.com> | 2010-10-15 16:58:26 -0400 |
commit | 7a5a5e9c5dee16601c8bf1df67ce12c81000bfb9 (patch) | |
tree | 93b17cae9ef3dd2da2f48de3c77e1187ec2421aa /gtk/gtkcomboboxtext.c | |
parent | 27ad64dccf24f4fed74f6204a2fc257178d8ff6f (diff) | |
download | gtk+-7a5a5e9c5dee16601c8bf1df67ce12c81000bfb9.tar.gz |
Added GtkComboBoxText api
This is a derived class of GtkComboBox to replace the
gtk_combo_box_*_text() convenience API.
Fixes https://bugzilla.gnome.org/show_bug.cgi?id=612396
Signed-off-by: Javier Jardón <jjardon@gnome.org>
Diffstat (limited to 'gtk/gtkcomboboxtext.c')
-rw-r--r-- | gtk/gtkcomboboxtext.c | 220 |
1 files changed, 220 insertions, 0 deletions
diff --git a/gtk/gtkcomboboxtext.c b/gtk/gtkcomboboxtext.c new file mode 100644 index 0000000000..ed352a3876 --- /dev/null +++ b/gtk/gtkcomboboxtext.c @@ -0,0 +1,220 @@ +/* GTK - The GIMP Toolkit + * + * Copyright (C) 2010 Christian Dywan + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library. If not, see <http://www.gnu.org/licenses/>. + */ + +#include "config.h" + +#include "gtkcomboboxtext.h" +#include "gtkcombobox.h" +#include "gtkcellrenderertext.h" +#include "gtkcelllayout.h" + +G_DEFINE_TYPE (GtkComboBoxText, gtk_combo_box_text, GTK_TYPE_COMBO_BOX); + +static void +gtk_combo_box_text_class_init (GtkComboBoxTextClass *klass) +{ +} + +static void +gtk_combo_box_text_init (GtkComboBoxText *combo_box) +{ + GtkListStore *store; + GtkCellRenderer *cell; + + store = gtk_list_store_new (1, G_TYPE_STRING); + gtk_combo_box_set_model (GTK_COMBO_BOX (combo_box), GTK_TREE_MODEL (store)); + g_object_unref (store); + + cell = gtk_cell_renderer_text_new (); + gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combo_box), cell, TRUE); + gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (combo_box), cell, + "text", 0, + NULL); +} + +/** + * gtk_combo_box_text_new: + * + * Creates a new #GtkComboBoxText, which is a #GtkComboBox just displaying + * strings. See gtk_combo_box_entry_new_with_text(). + * + * Return value: A new #GtkComboBoxText + * + * Since: 2.24 + */ +GtkWidget * +gtk_combo_box_text_new (void) +{ + return g_object_new (GTK_TYPE_COMBO_BOX_TEXT, NULL); +} + +/** + * gtk_combo_box_text_append_text: + * @combo_box: A #GtkComboBoxText + * @text: A string + * + * Appends @string to the list of strings stored in @combo_box. + * + * Since: 2.24 + */ +void +gtk_combo_box_text_append_text (GtkComboBoxText *combo_box, + const gchar *text) +{ + GtkListStore *store; + GtkTreeIter iter; + gint column_type; + + g_return_if_fail (GTK_IS_COMBO_BOX_TEXT (combo_box)); + g_return_if_fail (text != NULL); + + store = GTK_LIST_STORE (gtk_combo_box_get_model (GTK_COMBO_BOX (combo_box))); + g_return_if_fail (GTK_IS_LIST_STORE (store)); + column_type = gtk_tree_model_get_column_type (GTK_TREE_MODEL (store), 0); + g_return_if_fail (column_type == G_TYPE_STRING); + + gtk_list_store_append (store, &iter); + gtk_list_store_set (store, &iter, 0, text, -1); +} + +/** + * gtk_combo_box_text_insert_text: + * @combo_box: A #GtkComboBoxText + * @position: An index to insert @text + * @text: A string + * + * Inserts @string at @position in the list of strings stored in @combo_box. + * + * Since: 2.24 + */ +void +gtk_combo_box_text_insert_text (GtkComboBoxText *combo_box, + gint position, + const gchar *text) +{ + GtkListStore *store; + GtkTreeIter iter; + gint column_type; + + g_return_if_fail (GTK_IS_COMBO_BOX_TEXT (combo_box)); + g_return_if_fail (position >= 0); + g_return_if_fail (text != NULL); + + store = GTK_LIST_STORE (gtk_combo_box_get_model (GTK_COMBO_BOX (combo_box))); + g_return_if_fail (GTK_IS_LIST_STORE (store)); + column_type = gtk_tree_model_get_column_type (GTK_TREE_MODEL (store), 0); + g_return_if_fail (column_type == G_TYPE_STRING); + + gtk_list_store_insert (store, &iter, position); + gtk_list_store_set (store, &iter, 0, text, -1); +} + +/** + * gtk_combo_box_text_prepend_text: + * @combo_box: A #GtkComboBox + * @text: A string + * + * Prepends @string to the list of strings stored in @combo_box. + * + * Since: 2.24 + */ +void +gtk_combo_box_text_prepend_text (GtkComboBoxText *combo_box, + const gchar *text) +{ + GtkListStore *store; + GtkTreeIter iter; + gint column_type; + + g_return_if_fail (GTK_IS_COMBO_BOX_TEXT (combo_box)); + g_return_if_fail (text != NULL); + + store = GTK_LIST_STORE (gtk_combo_box_get_model (GTK_COMBO_BOX (combo_box))); + g_return_if_fail (GTK_IS_LIST_STORE (store)); + column_type = gtk_tree_model_get_column_type (GTK_TREE_MODEL (store), 0); + g_return_if_fail (column_type == G_TYPE_STRING); + + gtk_list_store_prepend (store, &iter); + gtk_list_store_set (store, &iter, 0, text, -1); +} + +/** + * gtk_combo_box_text_remove: + * @combo_box: A #GtkComboBox + * @position: Index of the item to remove + * + * Removes the string at @position from @combo_box. + * + * Since: 2.24 + */ +void +gtk_combo_box_text_remove (GtkComboBoxText *combo_box, + gint position) +{ + GtkTreeModel *model; + GtkListStore *store; + GtkTreeIter iter; + gint column_type; + + g_return_if_fail (GTK_IS_COMBO_BOX_TEXT (combo_box)); + g_return_if_fail (position >= 0); + + model = gtk_combo_box_get_model (GTK_COMBO_BOX (combo_box)); + store = GTK_LIST_STORE (model); + g_return_if_fail (GTK_IS_LIST_STORE (store)); + column_type = gtk_tree_model_get_column_type (GTK_TREE_MODEL (store), 0); + g_return_if_fail (column_type == G_TYPE_STRING); + + if (gtk_tree_model_iter_nth_child (model, &iter, NULL, position)) + gtk_list_store_remove (store, &iter); +} + +/** + * gtk_combo_box_text_get_active_text: + * @combo_box: A #GtkComboBoxText + * + * Returns the currently active string in @combo_box or %NULL if none + * is selected. + * + * Returns: a newly allocated string containing the currently active text. + * Must be freed with g_free(). + * + * Since: 2.24 + */ +gchar * +gtk_combo_box_text_get_active_text (GtkComboBoxText *combo_box) +{ + GtkTreeIter iter; + gchar *text = NULL; + + g_return_val_if_fail (GTK_IS_COMBO_BOX_TEXT (combo_box), NULL); + + if (gtk_combo_box_get_active_iter (GTK_COMBO_BOX (combo_box), &iter)) + { + GtkTreeModel *model; + gint column_type; + + model = gtk_combo_box_get_model (GTK_COMBO_BOX (combo_box)); + g_return_val_if_fail (GTK_IS_LIST_STORE (model), NULL); + column_type = gtk_tree_model_get_column_type (model, 0); + g_return_val_if_fail (column_type == G_TYPE_STRING, NULL); + gtk_tree_model_get (model, &iter, 0, &text, -1); + } + + return text; +} |