| 87 |
static void really_quit_dialog_no(GtkWidget *widget, gint *flag); |
static void really_quit_dialog_no(GtkWidget *widget, gint *flag); |
| 88 |
static gboolean not_yet_save_changes_really_quit(GtkTextBuffer *buffer); |
static gboolean not_yet_save_changes_really_quit(GtkTextBuffer *buffer); |
| 89 |
static gboolean delete_event_handler(GtkWidget *widget, GdkEvent *event, GtkWidget *buffer); |
static gboolean delete_event_handler(GtkWidget *widget, GdkEvent *event, GtkWidget *buffer); |
|
static void append_tabpage(GtkNotebook *notebook, gchar *filename); |
|
| 90 |
static GtkWidget *new_scrolled_text_buffer(ShikiTabInfo **tabinfo); |
static GtkWidget *new_scrolled_text_buffer(ShikiTabInfo **tabinfo); |
| 91 |
static void open_file(GtkNotebook *notebook, gchar *filename); |
static void open_file(GtkNotebook *notebook, gchar *filename); |
| 92 |
static void open_file_from_notebook(GtkNotebook *notebook); |
static void open_file_from_notebook(GtkNotebook *notebook); |
| 99 |
static gint get_parent_nest_level_at_cursor(GtkTextBuffer *buffer); |
static gint get_parent_nest_level_at_cursor(GtkTextBuffer *buffer); |
| 100 |
static void switch_tabpage_handler(GtkNotebook *notebook, GtkNotebookPage *page, guint pagenum) ; |
static void switch_tabpage_handler(GtkNotebook *notebook, GtkNotebookPage *page, guint pagenum) ; |
| 101 |
static void tabsborder_on_off(GtkButton *button, GtkNotebook *notebook); |
static void tabsborder_on_off(GtkButton *button, GtkNotebook *notebook); |
|
static void remove_tabpage(GtkNotebook *notebook); |
|
| 102 |
static void remove_tabpage_handler(GtkButton *button, GtkWidget *notebook); |
static void remove_tabpage_handler(GtkButton *button, GtkWidget *notebook); |
| 103 |
static void append_tabpage_handler(GtkButton *button, GtkNotebook *notebook); |
static void append_tabpage_handler(GtkButton *button, GtkNotebook *notebook); |
| 104 |
static void rotate_tab_position(GtkButton *button, GtkNotebook *notebook); |
static void rotate_tab_position(GtkButton *button, GtkNotebook *notebook); |
| 112 |
static void online_help_handler(GtkWidget *button, GtkNotebook *notebook); |
static void online_help_handler(GtkWidget *button, GtkNotebook *notebook); |
| 113 |
static void shiki_editor_window_init(int argc, char **argv); |
static void shiki_editor_window_init(int argc, char **argv); |
| 114 |
|
|
| 115 |
|
|
| 116 |
|
/* タブの生成と削除 : 基本的に,ShikiTabInfo の中身に格納する情報を増やしたかったら,この 2 つだけを変更すれば良い (ようにする…) */ |
| 117 |
|
static void append_tabpage(GtkNotebook *notebook, gchar *filename); |
| 118 |
|
static void remove_tabpage(GtkNotebook *notebook); |
| 119 |
|
|
| 120 |
|
/* ノートブックにタブとページ (バッファ) を追加 */ |
| 121 |
|
static void append_tabpage(GtkNotebook *notebook, gchar *filename) { |
| 122 |
|
ShikiTabInfo *tabinfo; |
| 123 |
|
GtkWidget *tabpage = new_scrolled_text_buffer(&tabinfo); |
| 124 |
|
tabinfo->filename = filename; |
| 125 |
|
tabinfo->tabpage_label = g_path_get_basename(filename); |
| 126 |
|
gtk_notebook_append_page(notebook, tabpage, gtk_label_new(tabinfo->tabpage_label)); |
| 127 |
|
Shiki_EDITOR_TAB_INFO_LIST = g_list_append(Shiki_EDITOR_TAB_INFO_LIST, tabinfo); |
| 128 |
|
gtk_notebook_set_current_page(notebook, g_list_length(Shiki_EDITOR_TAB_INFO_LIST) - 1); |
| 129 |
|
gtk_widget_show_all(GTK_WIDGET(notebook)); |
| 130 |
|
gtk_notebook_set_current_page(notebook, Shiki_CURRENT_TAB_NUM); |
| 131 |
|
} |
| 132 |
|
|
| 133 |
|
/* ノートブックからタブとページ (バッファ) を削除 */ |
| 134 |
|
static void remove_tabpage(GtkNotebook *notebook) { |
| 135 |
|
/* タブが 1 つしか残っていなかったら消させない */ |
| 136 |
|
if(g_list_length(Shiki_EDITOR_TAB_INFO_LIST) == 1) |
| 137 |
|
return; |
| 138 |
|
if(!not_yet_save_changes_really_quit(Shiki_CURRENT_TEXT_BUFFER)) { |
| 139 |
|
/* デリートハンドラをエディタトップレベルのウィジットから取り除く */ |
| 140 |
|
g_signal_handler_disconnect(Shiki_EDITOR_WINDOW, (Shiki_CURRENT_TAB_INFO)->delete_handler_id); |
| 141 |
|
/* タブの中身を削除 */ |
| 142 |
|
gtk_widget_destroy(GTK_WIDGET(Shiki_CURRENT_TEXT_VIEW)); |
| 143 |
|
/* タブに対応するタブ情報を削除 */ |
| 144 |
|
g_free(Shiki_CURRENT_TAB_TITLE); |
| 145 |
|
g_free(Shiki_CURRENT_FILENAME); |
| 146 |
|
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)); |
| 147 |
|
g_free(Shiki_CURRENT_TAB_INFO); |
| 148 |
|
|
| 149 |
|
/* カレントのタブ情報を更新 */ |
| 150 |
|
Shiki_CURRENT_TAB_INFO = g_list_nth_data(Shiki_EDITOR_TAB_INFO_LIST, Shiki_CURRENT_TAB_NUM); |
| 151 |
|
gtk_notebook_remove_page(notebook, Shiki_CURRENT_TAB_NUM); |
| 152 |
|
/* ウィジットを強制的に再描画 */ |
| 153 |
|
gtk_widget_queue_draw(GTK_WIDGET(notebook)); |
| 154 |
|
} |
| 155 |
|
} |
| 156 |
|
|
| 157 |
|
|
| 158 |
/* バッファの内容を消去 */ |
/* バッファの内容を消去 */ |
| 159 |
static void clear_current_buffer() { |
static void clear_current_buffer() { |
| 160 |
GtkTextIter start, end; |
GtkTextIter start, end; |
| 247 |
static void about_this_application() { |
static void about_this_application() { |
| 248 |
GtkAboutDialog *about = GTK_ABOUT_DIALOG(gtk_about_dialog_new()); |
GtkAboutDialog *about = GTK_ABOUT_DIALOG(gtk_about_dialog_new()); |
| 249 |
const gchar *authors[] = { |
const gchar *authors[] = { |
| 250 |
"若槻俊宏 (あろは) <alohakun@gmail.com>" |
"若槻俊宏 (あろは) <alohakun@gmail.com>\n", |
| 251 |
|
"Contribute : tkng さん", |
| 252 |
|
"(http://d.hatena.ne.jp/tkng/20061113)", NULL |
| 253 |
}; |
}; |
| 254 |
gtk_about_dialog_set_authors(about, authors); |
gtk_about_dialog_set_authors(about, authors); |
| 255 |
gtk_about_dialog_set_copyright(about, "Copyright(C)2006 WAKATSUKI Toshihiro"); |
gtk_about_dialog_set_copyright(about, "Copyright(C)2006 WAKATSUKI Toshihiro"); |
| 607 |
gtk_notebook_set_show_border(notebook, bval); |
gtk_notebook_set_show_border(notebook, bval); |
| 608 |
} |
} |
| 609 |
|
|
|
/* ノートブックからページを削除 */ |
|
|
static void remove_tabpage(GtkNotebook *notebook) { |
|
|
/* タブが 1 つしか残っていなかったら消させない */ |
|
|
if(g_list_length(Shiki_EDITOR_TAB_INFO_LIST) == 1) |
|
|
return; |
|
|
if(!not_yet_save_changes_really_quit(Shiki_CURRENT_TEXT_BUFFER)) { |
|
|
/* デリートハンドラをエディタトップレベルのウィジットから取り除く */ |
|
|
g_signal_handler_disconnect(Shiki_EDITOR_WINDOW, (Shiki_CURRENT_TAB_INFO)->delete_handler_id); |
|
|
/* タブの中身を削除 */ |
|
|
gtk_widget_destroy(GTK_WIDGET(Shiki_CURRENT_TEXT_VIEW)); |
|
|
/* タブに対応するタブ情報を削除 */ |
|
|
g_free(Shiki_CURRENT_TAB_TITLE); |
|
|
g_free(Shiki_CURRENT_FILENAME); |
|
|
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)); |
|
|
|
|
|
/* カレントのタブ情報を更新 */ |
|
|
Shiki_CURRENT_TAB_INFO = g_list_nth_data(Shiki_EDITOR_TAB_INFO_LIST, Shiki_CURRENT_TAB_NUM); |
|
|
gtk_notebook_remove_page(notebook, Shiki_CURRENT_TAB_NUM); |
|
|
/* ウィジットを強制的に再描画 */ |
|
|
gtk_widget_queue_draw(GTK_WIDGET(notebook)); |
|
|
} |
|
|
} |
|
|
|
|
| 610 |
static void remove_tabpage_handler(GtkButton *button, GtkWidget *notebook) { |
static void remove_tabpage_handler(GtkButton *button, GtkWidget *notebook) { |
| 611 |
remove_tabpage(GTK_NOTEBOOK(notebook)); |
remove_tabpage(GTK_NOTEBOOK(notebook)); |
| 612 |
} |
} |
| 613 |
|
|
|
/* ノートブックにページを追加 */ |
|
|
static void append_tabpage(GtkNotebook *notebook, gchar *filename) { |
|
|
ShikiTabInfo *tabinfo; |
|
|
GtkWidget *tabpage = new_scrolled_text_buffer(&tabinfo); |
|
|
tabinfo->filename = filename; |
|
|
tabinfo->tabpage_label = g_path_get_basename(filename); |
|
|
gtk_notebook_append_page(notebook, tabpage, gtk_label_new(tabinfo->tabpage_label)); |
|
|
Shiki_EDITOR_TAB_INFO_LIST = g_list_append(Shiki_EDITOR_TAB_INFO_LIST, tabinfo); |
|
|
gtk_notebook_set_current_page(notebook, g_list_length(Shiki_EDITOR_TAB_INFO_LIST) - 1); |
|
|
gtk_widget_show_all(GTK_WIDGET(notebook)); |
|
|
gtk_notebook_set_current_page(notebook, Shiki_CURRENT_TAB_NUM); |
|
|
} |
|
|
|
|
| 614 |
static void append_tabpage_handler(GtkButton *button, GtkNotebook *notebook) { |
static void append_tabpage_handler(GtkButton *button, GtkNotebook *notebook) { |
| 615 |
append_tabpage(notebook, g_strdup("*scratch*")); |
append_tabpage(notebook, g_strdup("*scratch*")); |
| 616 |
} |
} |
| 788 |
GtkTextIter p; |
GtkTextIter p; |
| 789 |
append_tabpage(notebook, g_strdup("*help*")); |
append_tabpage(notebook, g_strdup("*help*")); |
| 790 |
gtk_text_buffer_set_text(Shiki_CURRENT_TEXT_BUFFER, |
gtk_text_buffer_set_text(Shiki_CURRENT_TEXT_BUFFER, |
| 791 |
|
"起動\n" |
| 792 |
|
"$ ./shiki [file1 file2 ....]\n\n" |
| 793 |
"[フォルダのアイコン] ファイルを開く (C-x C-f)\n" |
"[フォルダのアイコン] ファイルを開く (C-x C-f)\n" |
| 794 |
"[フロッピーディスクのアイコン] バッファを保存 (C-x C-s)\n" |
"[フロッピーディスクのアイコン] バッファを保存 (C-x C-s)\n" |
| 795 |
"[フロッピーとえんぴつのアイコン] バッファを別名保存 (C-x C-w)\n" |
"[フロッピーとえんぴつのアイコン] バッファを別名保存 (C-x C-w)\n" |