[PR]DoCoMopKI:^畚盆愾悦

<<< 前のページ 一覧へ戻る 次のページ >>>
インデックス
リスト表示です



リスト表示のサンプルです。


作成日: 1999/07/01
更新日: 2000/04/05



[ソースファイル ダウンロード] リスト表示です

XEmacs: clist.c

/* clist.c */


#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);
  }


  /* GtkCList を作成。この例では 2 列を使う */

  {
    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)
    {

      /* 選択された row に関する情報をただ表示するだけ */

      g_print ("第 %d 行 のアイテムを編集します。\n",
               app->selected_row);
      
// あなたの編集関数をここで実行する。
    }

  return;
}


/* "削除" ボタンを押した。*/

static
void
cb_remove (GtkWidget *button,
            App       *app)
{
  if (app->selected_row >= 0)
    {

      /* 選択された row に関する情報をただ表示するだけ */

      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;


  /*クリックされ選択された row および column に保存されているテキス
     トを獲得。引数 text にポインタとして受け取る。 */

  gtk_clist_get_text (GTK_CLIST (clist), row, column, &text);


  /* 選択された row に関する情報をただ表示するだけ */

  g_print ("あなたが選択したのは %d 行 %d 列のアイテム '%s' です。\n",
           row, column, text);

  app->selected_row = row;
  return;
}


<<< 前のページ インデックス 次のページ >>>
一覧へ戻る

[LARSE へ戻る]

Copyright 1998-2000 (C) Shimaki Matsubara All Rights Reserved.
No reproduction or republication without written permission.
許可なく転載を禁じます。
Last update: 2001年02月24日 PM 18:37:48


[PR]p:K掘{i