| 45 |
/* エディタ全体に関する情報と,現在表示されているタブ情報へのキャッシュを管理する構造体 */ |
/* エディタ全体に関する情報と,現在表示されているタブ情報へのキャッシュを管理する構造体 */ |
| 46 |
struct { |
struct { |
| 47 |
GtkWidget *editor_window; |
GtkWidget *editor_window; |
| 48 |
|
GtkNotebook *notebook; |
| 49 |
GtkWidget *statusbar; |
GtkWidget *statusbar; |
| 50 |
GtkWidget *modeline_label; |
GtkWidget *modeline_label; |
| 51 |
GList *tabInfoList; |
GList *tabInfoList; |
| 59 |
* そもそも TAB_INFO_LIST が入っちゃってるのに |
* そもそも TAB_INFO_LIST が入っちゃってるのに |
| 60 |
* そうすれば,一気に全体的に API が簡素になるはず */ |
* そうすれば,一気に全体的に API が簡素になるはず */ |
| 61 |
#define Shiki_EDITOR_WINDOW shiki_editor.editor_window |
#define Shiki_EDITOR_WINDOW shiki_editor.editor_window |
| 62 |
|
#define Shiki_EDITOR_NOTEBOOK shiki_editor.notebook |
| 63 |
#define Shiki_EDITOR_STATUSBAR shiki_editor.statusbar |
#define Shiki_EDITOR_STATUSBAR shiki_editor.statusbar |
| 64 |
#define Shiki_EDITOR_MODELINE_LABEL shiki_editor.modeline_label |
#define Shiki_EDITOR_MODELINE_LABEL shiki_editor.modeline_label |
| 65 |
#define Shiki_EDITOR_TAB_INFO_LIST shiki_editor.tabInfoList |
#define Shiki_EDITOR_TAB_INFO_LIST shiki_editor.tabInfoList |
| 854 |
|
|
| 855 |
/* エディタの編集画面の初期化 */ |
/* エディタの編集画面の初期化 */ |
| 856 |
static void shiki_editor_window_init(int argc, char **argv) { |
static void shiki_editor_window_init(int argc, char **argv) { |
| 857 |
GtkWidget *vbox, *toolbar, *notebook; |
GtkWidget *vbox, *toolbar; |
| 858 |
GtkToolItem *icon; |
GtkToolItem *icon; |
| 859 |
GtkIconSize iconsize; |
GtkIconSize iconsize; |
| 860 |
GtkTooltips *toolbar_tips = gtk_tooltips_new(); |
GtkTooltips *toolbar_tips = gtk_tooltips_new(); |
| 873 |
toolbar = gtk_toolbar_new(); |
toolbar = gtk_toolbar_new(); |
| 874 |
gtk_box_pack_start(GTK_BOX(vbox), toolbar, FALSE, FALSE, 0); |
gtk_box_pack_start(GTK_BOX(vbox), toolbar, FALSE, FALSE, 0); |
| 875 |
|
|
| 876 |
notebook = gtk_notebook_new(); |
Shiki_EDITOR_NOTEBOOK = GTK_NOTEBOOK(gtk_notebook_new()); |
| 877 |
g_signal_connect(G_OBJECT(notebook), "switch-page", GTK_SIGNAL_FUNC(switch_tabpage_handler), NULL); |
g_signal_connect(G_OBJECT(Shiki_EDITOR_NOTEBOOK), "switch-page", GTK_SIGNAL_FUNC(switch_tabpage_handler), NULL); |
| 878 |
|
|
| 879 |
/* ツールバーに付けるアイコンの設定 */ |
/* ツールバーに付けるアイコンの設定 */ |
| 880 |
gtk_toolbar_set_style(GTK_TOOLBAR (toolbar), GTK_TOOLBAR_ICONS); |
gtk_toolbar_set_style(GTK_TOOLBAR (toolbar), GTK_TOOLBAR_ICONS); |
| 885 |
/* ファイル開く */ |
/* ファイル開く */ |
| 886 |
oicon = gtk_tool_button_new(gtk_image_new_from_stock ("gtk-open", iconsize), ""); |
oicon = gtk_tool_button_new(gtk_image_new_from_stock ("gtk-open", iconsize), ""); |
| 887 |
/* 「開く」ボタンにファイルを読み込むアクションを関連付ける */ |
/* 「開く」ボタンにファイルを読み込むアクションを関連付ける */ |
| 888 |
g_signal_connect(G_OBJECT(oicon), "clicked", G_CALLBACK(open_file_handler), G_OBJECT(notebook)); |
g_signal_connect(G_OBJECT(oicon), "clicked", G_CALLBACK(open_file_handler), G_OBJECT(Shiki_EDITOR_NOTEBOOK)); |
| 889 |
gtk_container_add(GTK_CONTAINER (toolbar), GTK_WIDGET(oicon)); |
gtk_container_add(GTK_CONTAINER (toolbar), GTK_WIDGET(oicon)); |
| 890 |
gtk_tool_item_set_tooltip(oicon, toolbar_tips, "ファイルを開きます", |
gtk_tool_item_set_tooltip(oicon, toolbar_tips, "ファイルを開きます", |
| 891 |
"新しいバッファを開いて,そこにファイルの内容を展開します."); |
"新しいバッファを開いて,そこにファイルの内容を展開します."); |
| 893 |
/* バッファ保存 */ |
/* バッファ保存 */ |
| 894 |
sicon = gtk_tool_button_new(gtk_image_new_from_stock ("gtk-save", iconsize), ""); |
sicon = gtk_tool_button_new(gtk_image_new_from_stock ("gtk-save", iconsize), ""); |
| 895 |
/* 「保存」ボタンにファイルを書き出すアクションを関連付ける */ |
/* 「保存」ボタンにファイルを書き出すアクションを関連付ける */ |
| 896 |
g_signal_connect(G_OBJECT(sicon), "clicked", G_CALLBACK(save_file_handler), G_OBJECT(notebook)); |
g_signal_connect(G_OBJECT(sicon), "clicked", G_CALLBACK(save_file_handler), G_OBJECT(Shiki_EDITOR_NOTEBOOK)); |
| 897 |
gtk_container_add (GTK_CONTAINER (toolbar), GTK_WIDGET(sicon)); |
gtk_container_add (GTK_CONTAINER (toolbar), GTK_WIDGET(sicon)); |
| 898 |
gtk_tool_item_set_tooltip(sicon, toolbar_tips, "バッファを保存します", |
gtk_tool_item_set_tooltip(sicon, toolbar_tips, "バッファを保存します", |
| 899 |
"バッファにファイル名が設定されていない場合には,ダイアログを開いてファイル名を取得します"); |
"バッファにファイル名が設定されていない場合には,ダイアログを開いてファイル名を取得します"); |
| 901 |
/* バッファを別名保存 */ |
/* バッファを別名保存 */ |
| 902 |
saicon = gtk_tool_button_new(gtk_image_new_from_stock ("gtk-save-as", iconsize), ""); |
saicon = gtk_tool_button_new(gtk_image_new_from_stock ("gtk-save-as", iconsize), ""); |
| 903 |
/* 「別名保存」ボタンに別名のファイル開いて内容を書き出すアクションを関連付ける */ |
/* 「別名保存」ボタンに別名のファイル開いて内容を書き出すアクションを関連付ける */ |
| 904 |
g_signal_connect(G_OBJECT(saicon), "clicked", G_CALLBACK(save_file_as_handler), G_OBJECT(notebook)); |
g_signal_connect(G_OBJECT(saicon), "clicked", G_CALLBACK(save_file_as_handler), G_OBJECT(Shiki_EDITOR_NOTEBOOK)); |
| 905 |
gtk_container_add (GTK_CONTAINER (toolbar), GTK_WIDGET(saicon)); |
gtk_container_add (GTK_CONTAINER (toolbar), GTK_WIDGET(saicon)); |
| 906 |
gtk_tool_item_set_tooltip(saicon, toolbar_tips, "バッファを別名保存します", |
gtk_tool_item_set_tooltip(saicon, toolbar_tips, "バッファを別名保存します", |
| 907 |
""); |
""); |
| 909 |
/* バッファ実行 */ |
/* バッファ実行 */ |
| 910 |
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), ""); |
| 911 |
/* 「選択範囲をロード」ボタンに libgauche を関連付ける */ |
/* 「選択範囲をロード」ボタンに libgauche を関連付ける */ |
| 912 |
g_signal_connect(G_OBJECT(eicon), "clicked", G_CALLBACK(load_region_handler), G_OBJECT(notebook)); |
g_signal_connect(G_OBJECT(eicon), "clicked", G_CALLBACK(load_region_handler), G_OBJECT(Shiki_EDITOR_NOTEBOOK)); |
| 913 |
gtk_container_add (GTK_CONTAINER (toolbar), GTK_WIDGET(eicon)); |
gtk_container_add (GTK_CONTAINER (toolbar), GTK_WIDGET(eicon)); |
| 914 |
gtk_tool_item_set_tooltip(eicon, toolbar_tips, "選択範囲の S 式をロードします (load-region-lisp)", |
gtk_tool_item_set_tooltip(eicon, toolbar_tips, "選択範囲の S 式をロードします (load-region-lisp)", |
| 915 |
"Scheme (gauche) で評価できる S 式を評価します."); |
"Scheme (gauche) で評価できる S 式を評価します."); |
| 916 |
|
|
| 917 |
gtk_container_add(GTK_CONTAINER(Shiki_EDITOR_WINDOW), vbox); |
gtk_container_add(GTK_CONTAINER(Shiki_EDITOR_WINDOW), vbox); |
| 918 |
gtk_container_add(GTK_CONTAINER(vbox), notebook); |
gtk_container_add(GTK_CONTAINER(vbox), GTK_WIDGET(Shiki_EDITOR_NOTEBOOK)); |
| 919 |
|
|
| 920 |
icon = gtk_tool_button_new(gtk_image_new_from_stock ("gtk-apply", iconsize), ""); |
icon = gtk_tool_button_new(gtk_image_new_from_stock ("gtk-apply", iconsize), ""); |
| 921 |
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(Shiki_EDITOR_NOTEBOOK)); |
| 922 |
gtk_container_add(GTK_CONTAINER (toolbar), GTK_WIDGET(icon)); |
gtk_container_add(GTK_CONTAINER (toolbar), GTK_WIDGET(icon)); |
| 923 |
gtk_tool_item_set_tooltip(icon, toolbar_tips, "タブの on/off", ""); |
gtk_tool_item_set_tooltip(icon, toolbar_tips, "タブの on/off", ""); |
| 924 |
|
|
| 925 |
icon = gtk_tool_button_new(gtk_image_new_from_stock ("gtk-preferences", iconsize), ""); |
icon = gtk_tool_button_new(gtk_image_new_from_stock ("gtk-preferences", iconsize), ""); |
| 926 |
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(Shiki_EDITOR_NOTEBOOK)); |
| 927 |
gtk_container_add(GTK_CONTAINER (toolbar), GTK_WIDGET(icon)); |
gtk_container_add(GTK_CONTAINER (toolbar), GTK_WIDGET(icon)); |
| 928 |
gtk_tool_item_set_tooltip(icon, toolbar_tips, "タブ位置の設定", ""); |
gtk_tool_item_set_tooltip(icon, toolbar_tips, "タブ位置の設定", ""); |
| 929 |
|
|
| 930 |
icon = gtk_tool_button_new(gtk_image_new_from_stock ("gtk-add", iconsize), ""); |
icon = gtk_tool_button_new(gtk_image_new_from_stock ("gtk-add", iconsize), ""); |
| 931 |
g_signal_connect(G_OBJECT(icon), "clicked", G_CALLBACK(append_tabpage_handler), G_OBJECT(notebook)); |
g_signal_connect(G_OBJECT(icon), "clicked", G_CALLBACK(append_tabpage_handler), G_OBJECT(Shiki_EDITOR_NOTEBOOK)); |
| 932 |
gtk_container_add(GTK_CONTAINER (toolbar), GTK_WIDGET(icon)); |
gtk_container_add(GTK_CONTAINER (toolbar), GTK_WIDGET(icon)); |
| 933 |
gtk_tool_item_set_tooltip(icon, toolbar_tips, "新規バッファを開きます", ""); |
gtk_tool_item_set_tooltip(icon, toolbar_tips, "新規バッファを開きます", ""); |
| 934 |
|
|
| 935 |
icon = gtk_tool_button_new(gtk_image_new_from_stock ("gtk-delete", iconsize), ""); |
icon = gtk_tool_button_new(gtk_image_new_from_stock ("gtk-delete", iconsize), ""); |
| 936 |
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(Shiki_EDITOR_NOTEBOOK)); |
| 937 |
gtk_container_add(GTK_CONTAINER (toolbar), GTK_WIDGET(icon)); |
gtk_container_add(GTK_CONTAINER (toolbar), GTK_WIDGET(icon)); |
| 938 |
gtk_tool_item_set_tooltip(icon, toolbar_tips, "バッファの内容を全消去", |
gtk_tool_item_set_tooltip(icon, toolbar_tips, "バッファの内容を全消去", |
| 939 |
"まだ内容が保存されていない場合でも警告しません"); |
"まだ内容が保存されていない場合でも警告しません"); |
| 940 |
|
|
| 941 |
icon = gtk_tool_button_new(gtk_image_new_from_stock ("gtk-close", iconsize), ""); |
icon = gtk_tool_button_new(gtk_image_new_from_stock ("gtk-close", iconsize), ""); |
| 942 |
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(Shiki_EDITOR_NOTEBOOK)); |
| 943 |
gtk_container_add(GTK_CONTAINER (toolbar), GTK_WIDGET(icon)); |
gtk_container_add(GTK_CONTAINER (toolbar), GTK_WIDGET(icon)); |
| 944 |
gtk_tool_item_set_tooltip(icon, toolbar_tips, "バッファを閉じます", |
gtk_tool_item_set_tooltip(icon, toolbar_tips, "バッファを閉じます", |
| 945 |
"まだ内容が保存されていない場合は警告します"); |
"まだ内容が保存されていない場合は警告します"); |
| 950 |
gtk_tool_item_set_tooltip(icon, toolbar_tips, "フォントの変更", ""); |
gtk_tool_item_set_tooltip(icon, toolbar_tips, "フォントの変更", ""); |
| 951 |
|
|
| 952 |
icon = gtk_tool_button_new(gtk_image_new_from_stock ("gtk-connect", iconsize), ""); |
icon = gtk_tool_button_new(gtk_image_new_from_stock ("gtk-connect", iconsize), ""); |
| 953 |
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(Shiki_EDITOR_NOTEBOOK)); |
| 954 |
gtk_container_add(GTK_CONTAINER (toolbar), GTK_WIDGET(icon)); |
gtk_container_add(GTK_CONTAINER (toolbar), GTK_WIDGET(icon)); |
| 955 |
gtk_tool_item_set_tooltip(icon, toolbar_tips, "Scheme ファイルをロード", ""); |
gtk_tool_item_set_tooltip(icon, toolbar_tips, "Scheme ファイルをロード", ""); |
| 956 |
|
|
| 957 |
icon = gtk_tool_button_new(gtk_image_new_from_stock ("gtk-convert", iconsize), ""); |
icon = gtk_tool_button_new(gtk_image_new_from_stock ("gtk-convert", iconsize), ""); |
| 958 |
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(Shiki_EDITOR_NOTEBOOK)); |
| 959 |
gtk_container_add(GTK_CONTAINER (toolbar), GTK_WIDGET(icon)); |
gtk_container_add(GTK_CONTAINER (toolbar), GTK_WIDGET(icon)); |
| 960 |
gtk_tool_item_set_tooltip(icon, toolbar_tips, "バッファをロード", ""); |
gtk_tool_item_set_tooltip(icon, toolbar_tips, "バッファをロード", ""); |
| 961 |
|
|
| 962 |
icon = gtk_tool_button_new(gtk_image_new_from_stock ("gtk-dialog-question", iconsize), ""); |
icon = gtk_tool_button_new(gtk_image_new_from_stock ("gtk-dialog-question", iconsize), ""); |
| 963 |
g_signal_connect(G_OBJECT(icon), "clicked", G_CALLBACK(online_help_handler), notebook); |
g_signal_connect(G_OBJECT(icon), "clicked", G_CALLBACK(online_help_handler), Shiki_EDITOR_NOTEBOOK); |
| 964 |
gtk_container_add(GTK_CONTAINER (toolbar), GTK_WIDGET(icon)); |
gtk_container_add(GTK_CONTAINER (toolbar), GTK_WIDGET(icon)); |
| 965 |
gtk_tool_item_set_tooltip(icon, toolbar_tips, "ヘルプ", ""); |
gtk_tool_item_set_tooltip(icon, toolbar_tips, "ヘルプ", ""); |
| 966 |
|
|
| 977 |
contextid = gtk_statusbar_get_context_id(GTK_STATUSBAR(Shiki_EDITOR_STATUSBAR), ""); |
contextid = gtk_statusbar_get_context_id(GTK_STATUSBAR(Shiki_EDITOR_STATUSBAR), ""); |
| 978 |
|
|
| 979 |
/* キーバインドのハンドリングを登録 */ |
/* キーバインドのハンドリングを登録 */ |
| 980 |
g_signal_connect(G_OBJECT(notebook), "key-press-event", G_CALLBACK (signal_key_press_handler), GINT_TO_POINTER(contextid)); |
g_signal_connect(G_OBJECT(Shiki_EDITOR_NOTEBOOK), "key-press-event", G_CALLBACK (signal_key_press_handler), GINT_TO_POINTER(contextid)); |
| 981 |
g_signal_connect(G_OBJECT(notebook), "key-release-event", G_CALLBACK (signal_key_release_handler), GINT_TO_POINTER(contextid)); |
g_signal_connect(G_OBJECT(Shiki_EDITOR_NOTEBOOK), "key-release-event", G_CALLBACK (signal_key_release_handler), GINT_TO_POINTER(contextid)); |
| 982 |
|
|
| 983 |
/* 引数に指定されたファイルを開く */ |
/* 引数に指定されたファイルを開く */ |
| 984 |
if(argc >= 2) { |
if(argc >= 2) { |
| 985 |
int i; |
int i; |
| 986 |
for(i = 1; i < argc; i++) |
for(i = 1; i < argc; i++) |
| 987 |
open_file(GTK_NOTEBOOK(notebook), g_strdup(argv[i])); |
open_file(Shiki_EDITOR_NOTEBOOK, g_strdup(argv[i])); |
| 988 |
} else /* 指定されてなければ,デフォルトのページを追加 */ |
} else /* 指定されてなければ,デフォルトのページを追加 */ |
| 989 |
open_online_help(GTK_NOTEBOOK(notebook)); |
open_online_help(Shiki_EDITOR_NOTEBOOK); |
| 990 |
|
|
| 991 |
gtk_widget_grab_focus(notebook); |
gtk_widget_grab_focus(GTK_WIDGET(Shiki_EDITOR_NOTEBOOK)); |
| 992 |
gtk_widget_show_all(Shiki_EDITOR_WINDOW); |
gtk_widget_show_all(Shiki_EDITOR_WINDOW); |
| 993 |
} |
} |
| 994 |
|
|