Develop and Download Open Source Software

Browse CVS Repository

Diff of /shiki/shiki/shiki.c

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph | View Patch Patch

revision 1.16 by aloha, Sat Nov 11 08:52:57 2006 UTC revision 1.17 by aloha, Sat Nov 11 16:27:27 2006 UTC
# Line 31  Line 31 
31    
32  static gint editor_indent_width = 2;  static gint editor_indent_width = 2;
33    
34  /* タブごとのファイル名や異なる Scheme 環境を保持している管理用構造体 */  /* タブごとの情報を管理する構造体 */
35  typedef struct {  typedef struct {
36    gchar  *filename; /* フルパス */    GtkScrolledWindow *tabpage;       /* タブ */
37    ScmObj env;    gchar             *tabpage_label; /* ベース (ファイル名) のみ */
38      GtkTextView       *text_view;     /* タブの表示 */
39      GtkTextBuffer     *text_buffer;   /* タブのテキストバッファ */
40      gchar             *filename;      /* ファイル名のフルパス */
41      ScmObj            env;            /* タブごとに独立した Scheme 環境 */
42  } ShikiTabInfo;  } ShikiTabInfo;
43    
44    /* エディタ全体に関する情報と,現在表示されているタブ情報へのキャッシュを管理する構造体 */
45  struct {  struct {
46    GtkWidget         *editor_window;    GtkWidget     *editor_window;
47    GtkWidget         *statusbar;    GtkWidget     *statusbar;
48    GtkWidget         *modeline_label;    GtkWidget     *modeline_label;
49    GtkScrolledWindow *current_tabpage;    GList         *tabInfoList;
50    gint              current_tabpage_num;    gint          current_tabpage_num;
51    const gchar       *current_tabpage_label;    ShikiTabInfo  *current_tabpage_info;
   GtkTextView       *current_text_view;  
   GtkTextBuffer     *current_text_buffer;  
   ShikiTabInfo      *current_tabpage_info;  
52  } shiki_editor;  } shiki_editor;
53    
54  #define Shiki_EDITOR_WINDOW         shiki_editor.editor_window  #define Shiki_EDITOR_WINDOW         shiki_editor.editor_window
55  #define Shiki_EDITOR_STATUSBAR      shiki_editor.statusbar  #define Shiki_EDITOR_STATUSBAR      shiki_editor.statusbar
56  #define Shiki_EDITOR_MODELINE_LABEL shiki_editor.modeline_label  #define Shiki_EDITOR_MODELINE_LABEL shiki_editor.modeline_label
57  #define Shiki_CURRENT_TAB           shiki_editor.current_tabpage  #define Shiki_EDITOR_TAB_INFO_LIST  shiki_editor.tabInfoList
58  #define Shiki_CURRENT_TAB_NUM       shiki_editor.current_tabpage_num  #define Shiki_CURRENT_TAB_NUM       shiki_editor.current_tabpage_num
 #define Shiki_CURRENT_TAB_TITLE     shiki_editor.current_tabpage_label  
59  #define Shiki_CURRENT_TAB_INFO      shiki_editor.current_tabpage_info  #define Shiki_CURRENT_TAB_INFO      shiki_editor.current_tabpage_info
60  #define Shiki_CURRENT_SCHEME_ENV    (shiki_editor.current_tabpage_info)->env  #define Shiki_CURRENT_TAB           (shiki_editor.current_tabpage_info)->tabpage
61    #define Shiki_CURRENT_TAB_TITLE     (shiki_editor.current_tabpage_info)->tabpage_label
62    #define Shiki_CURRENT_TEXT_VIEW     (shiki_editor.current_tabpage_info)->text_view
63    #define Shiki_CURRENT_TEXT_BUFFER   (shiki_editor.current_tabpage_info)->text_buffer
64  #define Shiki_CURRENT_FILENAME      (shiki_editor.current_tabpage_info)->filename  #define Shiki_CURRENT_FILENAME      (shiki_editor.current_tabpage_info)->filename
65  #define Shiki_CURRENT_TEXT_BUFFER   shiki_editor.current_text_buffer  #define Shiki_CURRENT_SCHEME_ENV    (shiki_editor.current_tabpage_info)->env
 #define Shiki_CURRENT_TEXT_VIEW     shiki_editor.current_text_view  
66    
67  static gchar *get_all_buffer_contents(GtkTextBuffer *buffer);  /* プロトタイプ */
68    static void clear_current_buffer();
69    static void load_buffer_by_gauche();
70    static void load_scheme_file_by_gauche(GtkNotebook *notebook);
71  static gchar *load_cstring_by_gauche(gchar *s);  static gchar *load_cstring_by_gauche(gchar *s);
72    static void font_selection_ok(GtkWidget *button, GtkWidget *font_dialog);
73    static void select_font();
74    static void about_this_application();
75    static gint get_current_line_number(GtkTextBuffer *buffer);
76    static void update_modeline_label();
77    static void text_buffer_cursor_moved_handler();
78    static gchar* get_all_buffer_contents(GtkTextBuffer *buffer);
79    static gboolean save_text_buffer(const gchar *filename, GtkTextBuffer *buffer);
80    static gchar *get_filename_from_dialog(const gchar *msg);
81    static void save_file_from_notebook(GtkNotebook *notebook);
82    static void save_file_handler(GtkWidget *widget, GtkWidget *notebook);
83    static void save_file_as_from_notebook(GtkNotebook *notebook);
84    static void save_file_as_handler(GtkWidget *widget, GtkWidget *notebook);
85    static void really_quit_dialog_yes(GtkWidget *widget, gboolean *flag);
86    static void really_quit_dialog_no(GtkWidget *widget, gint *flag);
87    static gboolean not_yet_save_changes_really_quit(GtkTextBuffer *buffer);
88    static gboolean delete_event_handler(GtkWidget *widget, GdkEvent *event);
89    static void prepend_tabpage(GtkNotebook *notebook, gchar *filename);
90    static GtkWidget *new_scrolled_text_buffer(ShikiTabInfo **tabinfo);
91    static void open_file_from_notebook(GtkNotebook *notebook);
92    static void open_file_handler(GtkWidget *widget, GtkWidget *notebook);
93    static gchar *eval_cstring_by_gauche(gchar *s);
94    static void load_region_handler(GtkWidget *widget,  GtkWidget *notebook);
95    static gboolean is_kakko_or_kokka(gunichar ch, gpointer);
96    static gboolean is_kokka(gunichar ch, gpointer);
97    static gboolean search_sexp_string(GtkTextIter *start);
98    static gint get_parent_nest_level_at_cursor(GtkTextBuffer *buffer);
99    static void switch_page(GtkNotebook *notebook, GtkNotebookPage *page, guint pagenum) ;
100    static void tabsborder_on_off(GtkButton *button, GtkNotebook *notebook);
101    static void remove_tabpage(GtkNotebook *notebook);
102    static void remove_tabpage_handler(GtkButton *button, GtkWidget *notebook);
103    static void prepend_tabpage_handler(GtkButton *button, GtkNotebook *notebook);
104    static void rotate_tab_position(GtkButton   *button, GtkNotebook *notebook);
105    static void forward_current_buffer();
106    static void backward_current_buffer();
107    static void line_forward_current_buffer();
108    static void line_backward_current_buffer();
109    static gboolean signal_key_press_handler (GtkWidget *notebook, GdkEventKey *event, gpointer contextid);
110    static gboolean signal_key_release_handler (GtkWidget *notebook, GdkEventKey *event, gpointer contextid);
111    static void shiki_editor_window_init();
112    
113  /* バッファの内容を消去 */  /* バッファの内容を消去 */
114  static void clear_current_buffer() {  static void clear_current_buffer() {
# Line 80  static void load_buffer_by_gauche() { Line 126  static void load_buffer_by_gauche() {
126    gtk_text_buffer_insert(Shiki_CURRENT_TEXT_BUFFER, &p, load_cstring_by_gauche(get_all_buffer_contents(Shiki_CURRENT_TEXT_BUFFER)), -1);    gtk_text_buffer_insert(Shiki_CURRENT_TEXT_BUFFER, &p, load_cstring_by_gauche(get_all_buffer_contents(Shiki_CURRENT_TEXT_BUFFER)), -1);
127  }  }
128    
 static gchar *get_filename_from_dialog(const gchar *msg);  
   
129  /* ファイルをロード */  /* ファイルをロード */
130  static void load_scheme_file_by_gauche(GtkNotebook *notebook) {  static void load_scheme_file_by_gauche(GtkNotebook *notebook) {
131    gchar *contents, *text;    gchar *contents, *text;
# Line 272  static void save_file_as_handler(GtkWidg Line 316  static void save_file_as_handler(GtkWidg
316  }  }
317    
318  /* YES ボタン,NO ボタンそれぞれで呼ばれる callback */  /* YES ボタン,NO ボタンそれぞれで呼ばれる callback */
319  void really_quit_dialog_yes(GtkWidget *widget, gboolean *flag){*flag = FALSE;}  static void really_quit_dialog_yes(GtkWidget *widget, gboolean *flag){*flag = FALSE;}
320  void really_quit_dialog_no(GtkWidget *widget, gint *flag){*flag = TRUE;}  static void really_quit_dialog_no(GtkWidget *widget, gint *flag){*flag = TRUE;}
321    
322  /* 本当に終了してもよろしいですか ? */  /* 本当に終了してもよろしいですか ? */
323  gboolean not_yet_save_changes_really_quit(GtkTextBuffer *buffer) {  static gboolean not_yet_save_changes_really_quit(GtkTextBuffer *buffer) {
324    GtkWidget *yes_button, *no_button;    GtkWidget *yes_button, *no_button;
325    static GtkWidget *dialog_window = NULL;    static GtkWidget *dialog_window = NULL;
326    
# Line 319  gboolean not_yet_save_changes_really_qui Line 363  gboolean not_yet_save_changes_really_qui
363  }  }
364    
365  /* バッファがまだ保存されていないのに本当に終了するのかを尋ねる */  /* バッファがまだ保存されていないのに本当に終了するのかを尋ねる */
366  gboolean delete_event_handler(GtkWidget *widget, GdkEvent *event, GtkWidget *buffer){  static gboolean delete_event_handler(GtkWidget *widget, GdkEvent *event){
367    return not_yet_save_changes_really_quit(GTK_TEXT_BUFFER(buffer));    return not_yet_save_changes_really_quit(Shiki_CURRENT_TEXT_BUFFER);
368  }  }
369    
370  /* 新しいバッファを作る */  /* 新しいタブを作る */
371  static GtkWidget *new_scrolled_text_buffer() {  static GtkWidget *new_scrolled_text_buffer(ShikiTabInfo **tabinfo) {
372    
373    GtkWidget *scrolledwindow, *view;    /* タブに対応するタブ情報を作る */
374    GtkTextBuffer *buffer;    *tabinfo = g_malloc(sizeof(ShikiTabInfo));
375    
376    /* スクロールウィンドを作る */    /* スクロールウィンドを作る */
377    scrolledwindow = gtk_scrolled_window_new(NULL, NULL);    (*tabinfo)->tabpage = GTK_SCROLLED_WINDOW(gtk_scrolled_window_new(NULL, NULL));
378    gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW(scrolledwindow), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);    gtk_scrolled_window_set_policy ((*tabinfo)->tabpage, GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
379    
380    /* テキストビューワとバッファを作る */    /* テキストビューワとバッファを作る */
381    view = gtk_text_view_new();    (*tabinfo)->text_view = GTK_TEXT_VIEW(gtk_text_view_new());
382    buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(view));    (*tabinfo)->text_buffer = gtk_text_view_get_buffer((*tabinfo)->text_view);
383    gtk_container_add(GTK_CONTAINER(scrolledwindow), view);    gtk_container_add(GTK_CONTAINER((*tabinfo)->tabpage), GTK_WIDGET((*tabinfo)->text_view));
384    g_signal_connect(G_OBJECT(Shiki_EDITOR_WINDOW), "delete_event", G_CALLBACK(delete_event_handler), buffer);    gtk_widget_set_size_request(GTK_WIDGET((*tabinfo)->text_view), 500, 600);
385    gtk_widget_set_size_request(GTK_WIDGET(view), 500, 600);    g_signal_connect((*tabinfo)->text_buffer, "mark_set", G_CALLBACK(text_buffer_cursor_moved_handler), (*tabinfo)->text_view);
386    g_signal_connect(buffer, "mark_set", G_CALLBACK(text_buffer_cursor_moved_handler), view);    g_signal_connect((*tabinfo)->tabpage, "destroy", G_CALLBACK(delete_event_handler), NULL);
387    /* 様々な初期化処理 */    /* 様々な初期化処理 */
388    /* 括弧の強調表示のためのタグを作る */    /* 括弧の強調表示のためのタグを作る */
389    gtk_text_buffer_create_tag (buffer, "parent_emphasis_background", "background", "green", NULL);    gtk_text_buffer_create_tag ((*tabinfo)->text_buffer, "parent_emphasis_background", "background", "green", NULL);
390    
391    return scrolledwindow;    return GTK_WIDGET((*tabinfo)->tabpage);
392  }  }
393    
394  /* ファイルを開く */  /* ファイルを開く */
# Line 357  static void open_file_from_notebook(GtkN Line 401  static void open_file_from_notebook(GtkN
401    if(!filename) return;    if(!filename) return;
402    
403    if(g_file_get_contents(filename, &contents, &len, NULL)) {    if(g_file_get_contents(filename, &contents, &len, NULL)) {
     GtkTextBuffer *buffer;  
     GtkWidget *scrolledwindow;  
404      GtkTextIter p;      GtkTextIter p;
405    
406      /* 新しいバッファを開く */      /* 新しいバッファを開く */
407      gtk_notebook_append_page(GTK_NOTEBOOK(notebook),      prepend_tabpage(notebook, g_strdup(filename));
         scrolledwindow = new_scrolled_text_buffer(),  
         gtk_label_new(filename));  
     buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(gtk_bin_get_child(GTK_BIN(scrolledwindow))));  
408    
409      if(!(text = g_locale_to_utf8(contents, -1, &br, &bw, &err)))      if(!(text = g_locale_to_utf8(contents, -1, &br, &bw, &err)))
410        gtk_text_buffer_set_text(buffer, contents, len);        gtk_text_buffer_set_text(Shiki_CURRENT_TEXT_BUFFER, contents, len);
411      else      else
412        gtk_text_buffer_set_text(buffer, text, len);        gtk_text_buffer_set_text(Shiki_CURRENT_TEXT_BUFFER, text, len);
413    
414      /* バッファ未変更に */      /* バッファ未変更に */
415      gtk_text_buffer_set_modified(buffer, FALSE);      gtk_text_buffer_set_modified(Shiki_CURRENT_TEXT_BUFFER, FALSE);
416      /* カーソル位置を先頭に */      /* カーソル位置を先頭に */
417      gtk_text_buffer_get_start_iter(buffer, &p);      gtk_text_buffer_get_start_iter(Shiki_CURRENT_TEXT_BUFFER, &p);
418      gtk_text_buffer_place_cursor(buffer, &p);      gtk_text_buffer_place_cursor(Shiki_CURRENT_TEXT_BUFFER, &p);
419      update_modeline_label();      update_modeline_label();
420      gtk_window_set_title (GTK_WINDOW (Shiki_EDITOR_WINDOW), filename);      gtk_window_set_title (GTK_WINDOW (Shiki_EDITOR_WINDOW), filename);
421      gtk_widget_show_all(GTK_WIDGET(notebook));      gtk_widget_show_all(GTK_WIDGET(notebook));
# Line 486  static gint get_parent_nest_level_at_cur Line 525  static gint get_parent_nest_level_at_cur
525  }  }
526    
527  /* タブが切り替わる時のイベントハンドリング */  /* タブが切り替わる時のイベントハンドリング */
528  static void switch_page(GtkNotebook *notebook, GtkNotebookPage *page, guint pagenum, gpointer p) {  static void switch_page(GtkNotebook *notebook, GtkNotebookPage *page, guint pagenum) {
529      /* タブに対応する情報が格納された構造体を切替える */
530    /* 現在のタブ,ビューワ,バッファを切替える */    Shiki_CURRENT_TAB_INFO = (ShikiTabInfo *)g_list_nth_data(Shiki_EDITOR_TAB_INFO_LIST, pagenum);
531    Shiki_CURRENT_TAB = GTK_SCROLLED_WINDOW(gtk_notebook_get_nth_page(notebook, pagenum));    /* 現在のタブ番号を切替える */
532    Shiki_CURRENT_TAB_NUM = pagenum;    Shiki_CURRENT_TAB_NUM = pagenum;
   /* GtkBin は一つしか子を持たない抽象コンテナクラス */  
   Shiki_CURRENT_TEXT_VIEW = GTK_TEXT_VIEW(gtk_bin_get_child(GTK_BIN(Shiki_CURRENT_TAB)));  
   Shiki_CURRENT_TEXT_BUFFER = gtk_text_view_get_buffer(Shiki_CURRENT_TEXT_VIEW);  
533    
534    /* タブのラベルをウィンドウのタイトルに */    /* タブのラベルをウィンドウのタイトルに */
535    gtk_window_set_title (GTK_WINDOW(Shiki_EDITOR_WINDOW), Shiki_CURRENT_TAB_TITLE = gtk_notebook_get_tab_label_text(notebook, GTK_WIDGET(Shiki_CURRENT_TAB)));    if(!Shiki_CURRENT_TAB_INFO) return;
536      gtk_window_set_title (GTK_WINDOW(Shiki_EDITOR_WINDOW), Shiki_CURRENT_FILENAME);
537    
538    update_modeline_label();      update_modeline_label();  
539  }  }
# Line 517  static void tabsborder_on_off(GtkButton Line 554  static void tabsborder_on_off(GtkButton
554  /* ノートブックからページを削除 */  /* ノートブックからページを削除 */
555  static void remove_tabpage(GtkNotebook *notebook) {  static void remove_tabpage(GtkNotebook *notebook) {
556    if(!not_yet_save_changes_really_quit(Shiki_CURRENT_TEXT_BUFFER)) {    if(!not_yet_save_changes_really_quit(Shiki_CURRENT_TEXT_BUFFER)) {
557        /* 対応するタブ情報を削除 */
558        /* XXX : 必要 ??? g_free(Shiki_CURRENT_TAB_TITLE);
559                          g_free(Shiki_CURRENT_FILENAME); */
560        Shiki_EDITOR_TAB_INFO_LIST = g_list_delete_link(Shiki_EDITOR_TAB_INFO_LIST, g_list_nth(Shiki_EDITOR_TAB_INFO_LIST, Shiki_CURRENT_TAB_NUM));
561      gtk_notebook_remove_page(notebook, Shiki_CURRENT_TAB_NUM);      gtk_notebook_remove_page(notebook, Shiki_CURRENT_TAB_NUM);
562      /* ウィジットを強制的に再描画 */      /* ウィジットを強制的に再描画 */
563      gtk_widget_queue_draw(GTK_WIDGET(notebook));      gtk_widget_queue_draw(GTK_WIDGET(notebook));
# Line 527  static void remove_tabpage_handler(GtkBu Line 568  static void remove_tabpage_handler(GtkBu
568    remove_tabpage(GTK_NOTEBOOK(notebook));    remove_tabpage(GTK_NOTEBOOK(notebook));
569  }  }
570    
571  /* ノートブックの末尾にページを追加 */  /* ノートブックにページを追加 */
572  static void append_tabpage(GtkButton *button, GtkNotebook *notebook) {  static void prepend_tabpage(GtkNotebook *notebook, gchar *filename) {
573    gtk_notebook_append_page(notebook, new_scrolled_text_buffer(), gtk_label_new("*scratch*"));    ShikiTabInfo *tabinfo;
574      GtkWidget *tabpage = new_scrolled_text_buffer(&tabinfo);
575      tabinfo->filename = filename;
576      tabinfo->tabpage_label = g_path_get_basename(filename);
577      gtk_notebook_prepend_page(notebook, tabpage, gtk_label_new(tabinfo->tabpage_label));
578      Shiki_EDITOR_TAB_INFO_LIST = g_list_prepend(Shiki_EDITOR_TAB_INFO_LIST, tabinfo);
579      Shiki_CURRENT_TAB_INFO = tabinfo;
580    gtk_widget_show_all(GTK_WIDGET(notebook));    gtk_widget_show_all(GTK_WIDGET(notebook));
581  }  }
582    
583    static void prepend_tabpage_handler(GtkButton *button, GtkNotebook *notebook) {
584      prepend_tabpage(notebook, g_strdup("*scratch*"));
585    }
586    
587  /* タブの位置を調整 */  /* タブの位置を調整 */
588  static void rotate_tab_position(GtkButton   *button, GtkNotebook *notebook ) {  static void rotate_tab_position(GtkButton *button, GtkNotebook *notebook ) {
589    gtk_notebook_set_tab_pos(notebook, (notebook->tab_pos + 1) % 4);    gtk_notebook_set_tab_pos(notebook, (notebook->tab_pos + 1) % 4);
590  }  }
591    
# Line 613  static gboolean signal_key_press_handler Line 664  static gboolean signal_key_press_handler
664          break;          break;
665    
666        case GDK_t : /* Ctrl + t : タブを開く */        case GDK_t : /* Ctrl + t : タブを開く */
667          gtk_notebook_append_page(GTK_NOTEBOOK(notebook), new_scrolled_text_buffer(), gtk_label_new("*scratch*"));          prepend_tabpage(GTK_NOTEBOOK(notebook), g_strdup("*scratch*"));
         gtk_widget_show_all(GTK_WIDGET(notebook));  
668          break;          break;
669    
670        case GDK_k : /* Ctrl + k : タブを閉じる */        case GDK_k : /* Ctrl + k : タブを閉じる */
# Line 769  static void shiki_editor_window_init() { Line 819  static void shiki_editor_window_init() {
819    gtk_container_add(GTK_CONTAINER(Shiki_EDITOR_WINDOW), vbox);    gtk_container_add(GTK_CONTAINER(Shiki_EDITOR_WINDOW), vbox);
820    gtk_container_add(GTK_CONTAINER(vbox), notebook);    gtk_container_add(GTK_CONTAINER(vbox), notebook);
821    
822    icon = gtk_tool_button_new(gtk_image_new_from_stock ("gtk-apply", iconsize), "append");    icon = gtk_tool_button_new(gtk_image_new_from_stock ("gtk-apply", iconsize), "");
823    g_signal_connect(G_OBJECT(icon), "clicked", G_CALLBACK(tabsborder_on_off), G_OBJECT(notebook));    g_signal_connect(G_OBJECT(icon), "clicked", G_CALLBACK(tabsborder_on_off), G_OBJECT(notebook));
824    gtk_container_add(GTK_CONTAINER (toolbar), GTK_WIDGET(icon));    gtk_container_add(GTK_CONTAINER (toolbar), GTK_WIDGET(icon));
825    gtk_tool_item_set_tooltip(icon, toolbar_tips, "タブの on/off", "");    gtk_tool_item_set_tooltip(icon, toolbar_tips, "タブの on/off", "");
826    
827    icon = gtk_tool_button_new(gtk_image_new_from_stock ("gtk-preferences", iconsize), "append");    icon = gtk_tool_button_new(gtk_image_new_from_stock ("gtk-preferences", iconsize), "");
828    g_signal_connect(G_OBJECT(icon), "clicked", G_CALLBACK(rotate_tab_position), G_OBJECT(notebook));    g_signal_connect(G_OBJECT(icon), "clicked", G_CALLBACK(rotate_tab_position), G_OBJECT(notebook));
829    gtk_container_add(GTK_CONTAINER (toolbar), GTK_WIDGET(icon));    gtk_container_add(GTK_CONTAINER (toolbar), GTK_WIDGET(icon));
830    gtk_tool_item_set_tooltip(icon, toolbar_tips, "タブ位置の設定", "");    gtk_tool_item_set_tooltip(icon, toolbar_tips, "タブ位置の設定", "");
831    
832    icon = gtk_tool_button_new(gtk_image_new_from_stock ("gtk-add", iconsize), "append");    icon = gtk_tool_button_new(gtk_image_new_from_stock ("gtk-add", iconsize), "");
833    g_signal_connect(G_OBJECT(icon), "clicked", G_CALLBACK(append_tabpage), G_OBJECT(notebook));    g_signal_connect(G_OBJECT(icon), "clicked", G_CALLBACK(prepend_tabpage_handler), G_OBJECT(notebook));
834    gtk_container_add(GTK_CONTAINER (toolbar), GTK_WIDGET(icon));    gtk_container_add(GTK_CONTAINER (toolbar), GTK_WIDGET(icon));
835    gtk_tool_item_set_tooltip(icon, toolbar_tips, "新規バッファを開きます", "");    gtk_tool_item_set_tooltip(icon, toolbar_tips, "新規バッファを開きます", "");
836    
837    icon = gtk_tool_button_new(gtk_image_new_from_stock ("gtk-delete", iconsize), "remove");    icon = gtk_tool_button_new(gtk_image_new_from_stock ("gtk-delete", iconsize), "");
838    g_signal_connect(G_OBJECT(icon), "clicked", G_CALLBACK(clear_current_buffer), G_OBJECT(notebook));    g_signal_connect(G_OBJECT(icon), "clicked", G_CALLBACK(clear_current_buffer), G_OBJECT(notebook));
839    gtk_container_add(GTK_CONTAINER (toolbar), GTK_WIDGET(icon));    gtk_container_add(GTK_CONTAINER (toolbar), GTK_WIDGET(icon));
840    gtk_tool_item_set_tooltip(icon, toolbar_tips, "バッファの内容を全消去",    gtk_tool_item_set_tooltip(icon, toolbar_tips, "バッファの内容を全消去",
841        "まだ内容が保存されていない場合でも警告しません");        "まだ内容が保存されていない場合でも警告しません");
842    
843    icon = gtk_tool_button_new(gtk_image_new_from_stock ("gtk-close", iconsize), "remove");    icon = gtk_tool_button_new(gtk_image_new_from_stock ("gtk-close", iconsize), "");
844    g_signal_connect(G_OBJECT(icon), "clicked", G_CALLBACK(remove_tabpage_handler), G_OBJECT(notebook));    g_signal_connect(G_OBJECT(icon), "clicked", G_CALLBACK(remove_tabpage_handler), G_OBJECT(notebook));
845    gtk_container_add(GTK_CONTAINER (toolbar), GTK_WIDGET(icon));    gtk_container_add(GTK_CONTAINER (toolbar), GTK_WIDGET(icon));
846    gtk_tool_item_set_tooltip(icon, toolbar_tips, "バッファを閉じます",    gtk_tool_item_set_tooltip(icon, toolbar_tips, "バッファを閉じます",
847        "まだ内容が保存されていない場合は警告します");        "まだ内容が保存されていない場合は警告します");
848    
849    icon = gtk_tool_button_new(gtk_image_new_from_stock ("gtk-bold", iconsize), "append");    icon = gtk_tool_button_new(gtk_image_new_from_stock ("gtk-bold", iconsize), "");
850    g_signal_connect(G_OBJECT(icon), "clicked", G_CALLBACK(select_font), NULL);    g_signal_connect(G_OBJECT(icon), "clicked", G_CALLBACK(select_font), NULL);
851    gtk_container_add(GTK_CONTAINER (toolbar), GTK_WIDGET(icon));    gtk_container_add(GTK_CONTAINER (toolbar), GTK_WIDGET(icon));
852    gtk_tool_item_set_tooltip(icon, toolbar_tips, "フォントの変更", "");    gtk_tool_item_set_tooltip(icon, toolbar_tips, "フォントの変更", "");
853    
854      icon = gtk_tool_button_new(gtk_image_new_from_stock ("gtk-connect", iconsize), "append");      icon = gtk_tool_button_new(gtk_image_new_from_stock ("gtk-connect", iconsize), "");
855    g_signal_connect(G_OBJECT(icon), "clicked", G_CALLBACK(load_scheme_file_by_gauche), G_OBJECT(notebook));    g_signal_connect(G_OBJECT(icon), "clicked", G_CALLBACK(load_scheme_file_by_gauche), G_OBJECT(notebook));
856    gtk_container_add(GTK_CONTAINER (toolbar), GTK_WIDGET(icon));    gtk_container_add(GTK_CONTAINER (toolbar), GTK_WIDGET(icon));
857    gtk_tool_item_set_tooltip(icon, toolbar_tips, "Scheme ファイルをロード", "");    gtk_tool_item_set_tooltip(icon, toolbar_tips, "Scheme ファイルをロード", "");
858    
859    icon = gtk_tool_button_new(gtk_image_new_from_stock ("gtk-convert", iconsize), "append");    icon = gtk_tool_button_new(gtk_image_new_from_stock ("gtk-convert", iconsize), "");
860    g_signal_connect(G_OBJECT(icon), "clicked", G_CALLBACK(load_buffer_by_gauche), G_OBJECT(notebook));    g_signal_connect(G_OBJECT(icon), "clicked", G_CALLBACK(load_buffer_by_gauche), G_OBJECT(notebook));
861    gtk_container_add(GTK_CONTAINER (toolbar), GTK_WIDGET(icon));    gtk_container_add(GTK_CONTAINER (toolbar), GTK_WIDGET(icon));
862    gtk_tool_item_set_tooltip(icon, toolbar_tips, "バッファをロード", "");    gtk_tool_item_set_tooltip(icon, toolbar_tips, "バッファをロード", "");
863    
864    icon = gtk_tool_button_new(gtk_image_new_from_stock ("gtk-dialog-info", iconsize), "append");    icon = gtk_tool_button_new(gtk_image_new_from_stock ("gtk-dialog-info", iconsize), "");
865    g_signal_connect(G_OBJECT(icon), "clicked", G_CALLBACK(about_this_application), NULL);    g_signal_connect(G_OBJECT(icon), "clicked", G_CALLBACK(about_this_application), NULL);
866    gtk_container_add(GTK_CONTAINER (toolbar), GTK_WIDGET(icon));    gtk_container_add(GTK_CONTAINER (toolbar), GTK_WIDGET(icon));
867    gtk_tool_item_set_tooltip(icon, toolbar_tips, "このアプリケーションについて", "");    gtk_tool_item_set_tooltip(icon, toolbar_tips, "このアプリケーションについて", "");
# Line 828  static void shiki_editor_window_init() { Line 878  static void shiki_editor_window_init() {
878    g_signal_connect(G_OBJECT(notebook), "key-release-event", G_CALLBACK (signal_key_release_handler), GINT_TO_POINTER(contextid));    g_signal_connect(G_OBJECT(notebook), "key-release-event", G_CALLBACK (signal_key_release_handler), GINT_TO_POINTER(contextid));
879    
880    /* デフォルトのページを追加 */    /* デフォルトのページを追加 */
881    gtk_notebook_prepend_page(GTK_NOTEBOOK(notebook), new_scrolled_text_buffer(), gtk_label_new("*scratch*"));    prepend_tabpage(GTK_NOTEBOOK(notebook), g_strdup("*scratch*"));
882    
883    gtk_widget_grab_focus(notebook);    gtk_widget_grab_focus(notebook);
884    gtk_widget_show_all(Shiki_EDITOR_WINDOW);    gtk_widget_show_all(Shiki_EDITOR_WINDOW);

Legend:
Removed from v.1.16  
changed lines
  Added in v.1.17

Back to OSDN">Back to OSDN
ViewVC Help
Powered by ViewVC 1.1.26