#include <gtk/gtk.h>
typedef struct _App App;
struct _App
{
GtkWidget *window;
GtkWidget *clist;
gint selected_row;
gint selected_column;
gchar *selected_text;
};
static void cb_add (GtkWidget *button,
App *app);
static void cb_edit (GtkWidget *button,
App *app);
static void cb_remove (GtkWidget *button,
App *app);
static void cb_selected (GtkWidget *clist,
gint row,
gint column,
GdkEventButton *event,
App *app);
gint
main (gint argc, gchar *argv[])
{
App app;
GtkWidget *vbox;
GtkWidget *hbox;
GtkWidget *scrolled_win;
gtk_set_locale ();
gtk_init (&argc, &argv);
{
GtkWidget *window;
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_window_set_title (GTK_WINDOW (window), "GtkCList Example");
gtk_signal_connect (GTK_OBJECT (window), "destroy",
GTK_SIGNAL_FUNC (gtk_main_quit), NULL);
app.window = window;
}
{
vbox = gtk_vbox_new (FALSE, 5);
gtk_container_set_border_width (GTK_CONTAINER (vbox), 5);
gtk_container_add (GTK_CONTAINER (app.window), vbox);
}
{
hbox = gtk_hbox_new (FALSE, 5);
gtk_container_set_border_width (GTK_CONTAINER (hbox), 5);
gtk_container_add (GTK_CONTAINER (vbox), hbox);
}
{
scrolled_win = gtk_scrolled_window_new (NULL, NULL);
gtk_container_set_border_width (GTK_CONTAINER (scrolled_win), 0);
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_win),
GTK_POLICY_AUTOMATIC,
GTK_POLICY_AUTOMATIC);
gtk_widget_set_usize (GTK_WIDGET (scrolled_win), 200, 100);
gtk_box_pack_start (GTK_BOX (hbox), scrolled_win, TRUE, TRUE, 0);
}
{
gint i;
GtkWidget *clist;
gchar *titles[2] = { "Ingredients", "Amount" };
gchar *items[4][2] =
{
{"Milk", "guest"},
{"Water", "admin"},
{"Carrots", "devel"},
{"Snakes", "root"}
};
clist = gtk_clist_new_with_titles (2, titles);
gtk_clist_set_column_width (GTK_CLIST (clist), 0, 150);
gtk_signal_connect (GTK_OBJECT (clist), "select_row",
GTK_SIGNAL_FUNC (cb_selected), &app);
for (i = 0; i < 4; i++)
gtk_clist_append (GTK_CLIST (clist), items[i]);
gtk_container_add (GTK_CONTAINER (scrolled_win), clist);
app.clist = clist;
app.selected_row = -1;
}
{
GtkWidget *vbbox;
GtkWidget *button;
vbbox = gtk_vbutton_box_new ();
gtk_box_pack_start (GTK_BOX (hbox), vbbox, TRUE, TRUE, 10);
gtk_container_set_border_width (GTK_CONTAINER (vbbox), 0);
gtk_button_box_set_layout (GTK_BUTTON_BOX (vbbox), GTK_BUTTONBOX_START);
gtk_button_box_set_spacing (GTK_BUTTON_BOX (vbbox), 1);
button = gtk_button_new_with_label ("新規");
gtk_container_add (GTK_CONTAINER (vbbox), button);
gtk_signal_connect (GTK_OBJECT (button), "clicked",
GTK_SIGNAL_FUNC (cb_add), &app);
button = gtk_button_new_with_label ("編集");
gtk_container_add (GTK_CONTAINER (vbbox), button);
gtk_signal_connect (GTK_OBJECT (button), "clicked",
GTK_SIGNAL_FUNC (cb_edit), &app);
button = gtk_button_new_with_label ("削除");
gtk_container_add (GTK_CONTAINER (vbbox), button);
gtk_signal_connect (GTK_OBJECT (button), "clicked",
GTK_SIGNAL_FUNC (cb_remove), &app);
}
{
GtkWidget *hbbox;
GtkWidget *button;
hbbox = gtk_hbutton_box_new ();
gtk_box_pack_start (GTK_BOX (vbox), hbbox, TRUE, TRUE, 5);
gtk_container_set_border_width (GTK_CONTAINER (hbbox), 0);
gtk_button_box_set_layout (GTK_BUTTON_BOX (hbbox), GTK_BUTTONBOX_END);
gtk_button_box_set_spacing (GTK_BUTTON_BOX (hbbox), 5);
button = gtk_button_new_with_label ("終了");
gtk_container_add (GTK_CONTAINER (hbbox), button);
gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
GTK_SIGNAL_FUNC (gtk_widget_destroy),
(gpointer)app.window);
}
gtk_widget_show_all (app.window);
gtk_main ();
return 0;
}
static
void
cb_add (GtkWidget *button,
App *app)
{
gchar *items[2] = {"Milk", "新規に作成されました"};
g_print ("新規にアイテムを作成します。\n");
gtk_clist_append (GTK_CLIST (app->clist), items);
return;
}
static
void
cb_edit (GtkWidget *button,
App *app)
{
if (app->selected_row >= 0)
{
g_print ("第 %d 行 のアイテムを編集します。\n",
app->selected_row);
}
return;
}
static
void
cb_remove (GtkWidget *button,
App *app)
{
if (app->selected_row >= 0)
{
g_print ("第 %d 行 のアイテムを削除します。\n",
app->selected_row);
gtk_clist_remove (GTK_CLIST (app->clist), app->selected_row);
app->selected_row = -1;
}
return;
}
static
void
cb_selected (GtkWidget *clist,
gint row,
gint column,
GdkEventButton *event,
App *app)
{
gchar *text;
gtk_clist_get_text (GTK_CLIST (clist), row, column, &text);
g_print ("あなたが選択したのは %d 行 %d 列のアイテム '%s' です。\n",
row, column, text);
app->selected_row = row;
return;
}