| 41 |
static GtkWidget *statusbar; |
static GtkWidget *statusbar; |
| 42 |
static GtkWidget *modeline_label; |
static GtkWidget *modeline_label; |
| 43 |
|
|
| 44 |
|
static gchar *get_all_buffer_contents(GtkTextBuffer *buffer); |
| 45 |
|
static gchar *load_cstring_by_gauche(gchar *s); |
| 46 |
|
|
| 47 |
|
/* バッファをまるごとロード */ |
| 48 |
|
static void load_buffer_by_gauche() { |
| 49 |
|
GtkTextIter p; |
| 50 |
|
gtk_text_buffer_get_end_iter(current_text_buffer, &p); |
| 51 |
|
gtk_text_buffer_insert(current_text_buffer, &p, "\n\n", -1); |
| 52 |
|
gtk_text_buffer_insert(current_text_buffer, &p, load_cstring_by_gauche(get_all_buffer_contents(current_text_buffer)), -1); |
| 53 |
|
} |
| 54 |
|
|
| 55 |
|
static gchar *get_filename_from_dialog(const gchar *msg); |
| 56 |
|
|
| 57 |
|
/* ファイルをロード */ |
| 58 |
|
static void load_scheme_file_by_gauche(GtkNotebook *notebook) { |
| 59 |
|
gchar *contents, *text; |
| 60 |
|
gsize br, bw, len; |
| 61 |
|
GError *err = NULL; |
| 62 |
|
gchar *filename = get_filename_from_dialog("File Selection"); |
| 63 |
|
GtkTextIter p; |
| 64 |
|
|
| 65 |
|
if(!filename) return; |
| 66 |
|
|
| 67 |
|
gtk_text_buffer_get_end_iter(current_text_buffer, &p); |
| 68 |
|
gtk_text_buffer_insert(current_text_buffer, &p, "\n\n", -1); |
| 69 |
|
|
| 70 |
|
if(g_file_get_contents(filename, &contents, &len, NULL)) { |
| 71 |
|
if(!(text = g_locale_to_utf8(contents, -1, &br, &bw, &err))) |
| 72 |
|
gtk_text_buffer_insert(current_text_buffer, &p, load_cstring_by_gauche(text), -1); |
| 73 |
|
else |
| 74 |
|
gtk_text_buffer_insert(current_text_buffer, &p, load_cstring_by_gauche(contents), -1); |
| 75 |
|
} |
| 76 |
|
g_free(text); g_free(contents); g_free(filename); |
| 77 |
|
} |
| 78 |
|
|
| 79 |
/* gauche を起動して文字列をロード */ |
/* gauche を起動して文字列をロード */ |
| 80 |
static gchar *load_cstring_by_gauche(gchar *s) { |
static gchar *load_cstring_by_gauche(gchar *s) { |
| 81 |
gchar *msg; |
gchar *msg; |
| 118 |
} |
} |
| 119 |
} |
} |
| 120 |
|
|
| 121 |
|
/* フォントを選択させるイベントハンドラ */ |
| 122 |
static void select_font(){ |
static void select_font(){ |
| 123 |
GtkWidget *font_dialog = gtk_font_selection_dialog_new("Font Selection Dialog"); |
GtkWidget *font_dialog = gtk_font_selection_dialog_new("Font Selection Dialog"); |
| 124 |
g_signal_connect (GTK_FONT_SELECTION_DIALOG (font_dialog)->ok_button, "clicked", G_CALLBACK(font_selection_ok), font_dialog); |
g_signal_connect (GTK_FONT_SELECTION_DIALOG (font_dialog)->ok_button, "clicked", G_CALLBACK(font_selection_ok), font_dialog); |
| 310 |
buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(view)); |
buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(view)); |
| 311 |
gtk_container_add(GTK_CONTAINER(scrolledwindow), view); |
gtk_container_add(GTK_CONTAINER(scrolledwindow), view); |
| 312 |
g_signal_connect(G_OBJECT(editor_window), "delete_event", G_CALLBACK(delete_event_handler), buffer); |
g_signal_connect(G_OBJECT(editor_window), "delete_event", G_CALLBACK(delete_event_handler), buffer); |
| 313 |
gtk_widget_set_size_request(GTK_WIDGET(view), 500, 700); |
gtk_widget_set_size_request(GTK_WIDGET(view), 500, 600); |
| 314 |
g_signal_connect(buffer, "mark_set", G_CALLBACK(text_buffer_cursor_moved_handler), view); |
g_signal_connect(buffer, "mark_set", G_CALLBACK(text_buffer_cursor_moved_handler), view); |
| 315 |
/* 様々な初期化処理 */ |
/* 様々な初期化処理 */ |
| 316 |
/* 括弧の強調表示のためのタグを作る */ |
/* 括弧の強調表示のためのタグを作る */ |
| 393 |
} |
} |
| 394 |
|
|
| 395 |
/* 緑ボタンのハンドリング.バッファの選択範囲の S 式をロード (逐次評価) */ |
/* 緑ボタンのハンドリング.バッファの選択範囲の S 式をロード (逐次評価) */ |
| 396 |
static void buffer_exec_handler(GtkWidget *widget, GtkWidget *notebook) { |
static void load_region_handler(GtkWidget *widget, GtkWidget *notebook) { |
| 397 |
|
|
| 398 |
GtkTextIter start, end, p; |
GtkTextIter start, end, p; |
| 399 |
gchar *code; |
gchar *code; |
| 732 |
|
|
| 733 |
/* バッファ実行 */ |
/* バッファ実行 */ |
| 734 |
eicon = gtk_tool_button_new(gtk_image_new_from_stock ("gtk-execute", iconsize), ""); |
eicon = gtk_tool_button_new(gtk_image_new_from_stock ("gtk-execute", iconsize), ""); |
| 735 |
/* バッファを実行ボタンに libgauche を関連付ける */ |
/* 「選択範囲をロード」ボタンに libgauche を関連付ける */ |
| 736 |
g_signal_connect(G_OBJECT(eicon), "clicked", G_CALLBACK(buffer_exec_handler), G_OBJECT(notebook)); |
g_signal_connect(G_OBJECT(eicon), "clicked", G_CALLBACK(load_region_handler), G_OBJECT(notebook)); |
| 737 |
gtk_container_add (GTK_CONTAINER (toolbar), GTK_WIDGET(eicon)); |
gtk_container_add (GTK_CONTAINER (toolbar), GTK_WIDGET(eicon)); |
| 738 |
gtk_tool_item_set_tooltip(eicon, toolbar_tips, "選択範囲の S 式を評価します", |
gtk_tool_item_set_tooltip(eicon, toolbar_tips, "選択範囲の S 式をロードします (load-region-lisp)", |
| 739 |
"Scheme (gauche) で評価できる S 式を評価します."); |
"Scheme (gauche) で評価できる S 式を評価します."); |
| 740 |
|
|
| 741 |
gtk_container_add(GTK_CONTAINER(editor_window), vbox); |
gtk_container_add(GTK_CONTAINER(editor_window), vbox); |
| 749 |
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), "append"); |
| 750 |
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)); |
| 751 |
gtk_container_add(GTK_CONTAINER (toolbar), GTK_WIDGET(icon)); |
gtk_container_add(GTK_CONTAINER (toolbar), GTK_WIDGET(icon)); |
| 752 |
gtk_tool_item_set_tooltip(icon, toolbar_tips, "タブの位置の設定", ""); |
gtk_tool_item_set_tooltip(icon, toolbar_tips, "タブ位置の設定", ""); |
| 753 |
|
|
| 754 |
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), "append"); |
| 755 |
g_signal_connect(G_OBJECT(icon), "clicked", G_CALLBACK(append_tabpage), G_OBJECT( notebook)); |
g_signal_connect(G_OBJECT(icon), "clicked", G_CALLBACK(append_tabpage), G_OBJECT( notebook)); |
| 766 |
gtk_container_add(GTK_CONTAINER (toolbar), GTK_WIDGET(icon)); |
gtk_container_add(GTK_CONTAINER (toolbar), GTK_WIDGET(icon)); |
| 767 |
gtk_tool_item_set_tooltip(icon, toolbar_tips, "フォントの変更", ""); |
gtk_tool_item_set_tooltip(icon, toolbar_tips, "フォントの変更", ""); |
| 768 |
|
|
| 769 |
|
icon = gtk_tool_button_new(gtk_image_new_from_stock ("gtk-connect", iconsize), "append"); |
| 770 |
|
g_signal_connect(G_OBJECT(icon), "clicked", G_CALLBACK(load_scheme_file_by_gauche), G_OBJECT( notebook)); |
| 771 |
|
gtk_container_add(GTK_CONTAINER (toolbar), GTK_WIDGET(icon)); |
| 772 |
|
gtk_tool_item_set_tooltip(icon, toolbar_tips, "Scheme ファイルをロード", ""); |
| 773 |
|
|
| 774 |
|
icon = gtk_tool_button_new(gtk_image_new_from_stock ("gtk-convert", iconsize), "append"); |
| 775 |
|
g_signal_connect(G_OBJECT(icon), "clicked", G_CALLBACK(load_buffer_by_gauche), G_OBJECT( notebook)); |
| 776 |
|
gtk_container_add(GTK_CONTAINER (toolbar), GTK_WIDGET(icon)); |
| 777 |
|
gtk_tool_item_set_tooltip(icon, toolbar_tips, "バッファをロード", ""); |
| 778 |
|
|
| 779 |
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), "append"); |
| 780 |
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); |
| 781 |
gtk_container_add(GTK_CONTAINER (toolbar), GTK_WIDGET(icon)); |
gtk_container_add(GTK_CONTAINER (toolbar), GTK_WIDGET(icon)); |