diff options
Diffstat (limited to 'src/textadept.c')
-rw-r--r-- | src/textadept.c | 231 |
1 files changed, 1 insertions, 230 deletions
diff --git a/src/textadept.c b/src/textadept.c index fa94a469..afa3b9c6 100644 --- a/src/textadept.c +++ b/src/textadept.c @@ -30,27 +30,6 @@ static OSErr w_ae_open(const AppleEvent *, AppleEvent *, long); static OSErr w_ae_quit(const AppleEvent *, AppleEvent *, long); #endif -// Project Manager -GtkWidget *pm_view, *pm_entry, *pm_container; -GtkWidget *pm_create_ui(); -GtkTreeStore *pm_store; - -static int pm_search_equal_func(GtkTreeModel *, int, const char *, - GtkTreeIter *, gpointer); -static int pm_sort_iter_compare_func(GtkTreeModel *, GtkTreeIter *, - GtkTreeIter *, gpointer); -static void pm_entry_activated(GtkWidget *, gpointer); -static void pm_entry_changed(GtkComboBoxEntry *, gpointer); -static gbool pm_keypress(GtkWidget *, GdkEventKey *, gpointer); -static void pm_row_expanded(GtkTreeView *, GtkTreeIter *, GtkTreePath *, - gpointer); -static void pm_row_collapsed(GtkTreeView *, GtkTreeIter *, GtkTreePath *, - gpointer); -static void pm_row_activated(GtkTreeView *, GtkTreePath *, - GtkTreeViewColumn *, gpointer); -static gbool pm_buttonpress(GtkTreeView *, GdkEventButton *, gpointer); -static gbool pm_popup_menu(GtkWidget *, gpointer); - // Find/Replace GtkWidget *findbox, *find_entry, *replace_entry, *fnext_button, *fprev_button, *r_button, *ra_button, *match_case_opt, *whole_word_opt, *lua_opt, @@ -163,14 +142,8 @@ void create_ui() { menubar = gtk_menu_bar_new(); gtk_box_pack_start(GTK_BOX(vbox), menubar, FALSE, FALSE, 0); - GtkWidget *pane = gtk_hpaned_new(); - gtk_box_pack_start(GTK_BOX(vbox), pane, TRUE, TRUE, 0); - - GtkWidget *pm = pm_create_ui(); - gtk_paned_add1(GTK_PANED(pane), pm); - GtkWidget *hbox = gtk_hbox_new(FALSE, 0); - gtk_paned_add2(GTK_PANED(pane), hbox); + gtk_box_pack_start(GTK_BOX(vbox), hbox, TRUE, TRUE, 0); GtkWidget *editor = new_scintilla_window(0); gtk_box_pack_start(GTK_BOX(hbox), editor, TRUE, TRUE, 0); @@ -551,208 +524,6 @@ static OSErr w_ae_quit(const AppleEvent *event, AppleEvent *reply, long ref) { } #endif -// Project Manager - -/** - * Creates the Project Manager pane. - * It consists of an entry box and a treeview called 'textadept-pm-entry' and - * 'textadept-pm-view' respectively for styling via gtkrc. The treeview model - * consists of a gdk-pixbuf for icons and markup text. - */ -GtkWidget *pm_create_ui() { - pm_container = gtk_vbox_new(FALSE, 1); - - GtkWidget *pm_combo = gtk_combo_box_entry_new_text(); - gtk_combo_box_set_focus_on_click(GTK_COMBO_BOX(pm_combo), FALSE); - pm_entry = gtk_bin_get_child(GTK_BIN(pm_combo)); - gtk_widget_set_name(pm_entry, "textadept-pm-entry"); - gtk_box_pack_start(GTK_BOX(pm_container), pm_combo, FALSE, FALSE, 0); - - pm_store = gtk_tree_store_new(3, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING); - GtkTreeSortable *sortable = GTK_TREE_SORTABLE(pm_store); - gtk_tree_sortable_set_sort_column_id(sortable, 1, GTK_SORT_ASCENDING); - gtk_tree_sortable_set_sort_func(sortable, 1, pm_sort_iter_compare_func, - GINT_TO_POINTER(1), NULL); - - pm_view = gtk_tree_view_new_with_model(GTK_TREE_MODEL(pm_store)); - g_object_unref(pm_store); - gtk_widget_set_name(pm_view, "textadept-pm-view"); - gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(pm_view), FALSE); - gtk_tree_view_set_enable_search(GTK_TREE_VIEW(pm_view), TRUE); - gtk_tree_view_set_search_column(GTK_TREE_VIEW(pm_view), 2); - gtk_tree_view_set_search_equal_func(GTK_TREE_VIEW(pm_view), - pm_search_equal_func, NULL, NULL); - - GtkTreeViewColumn *column = gtk_tree_view_column_new(); - GtkCellRenderer *renderer; - renderer = gtk_cell_renderer_pixbuf_new(); // pixbuf - gtk_tree_view_column_pack_start(column, renderer, FALSE); - gtk_tree_view_column_set_attributes(column, renderer, "stock-id", 0, NULL); - renderer = gtk_cell_renderer_text_new(); // markup text - gtk_tree_view_column_pack_start(column, renderer, TRUE); - gtk_tree_view_column_set_attributes(column, renderer, "markup", 2, NULL); - gtk_tree_view_append_column(GTK_TREE_VIEW(pm_view), column); - - GtkWidget *scrolled = gtk_scrolled_window_new(NULL, NULL); - gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolled), - GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); - gtk_container_add(GTK_CONTAINER(scrolled), pm_view); - gtk_box_pack_start(GTK_BOX(pm_container), scrolled, TRUE, TRUE, 0); - - signal(pm_entry, "activate", pm_entry_activated); - signal(pm_combo, "changed", pm_entry_changed); - signal(pm_entry, "key-press-event", pm_keypress); - signal(pm_view, "key-press-event", pm_keypress); - signal(pm_view, "row-expanded", pm_row_expanded); - signal(pm_view, "row-collapsed", pm_row_collapsed); - signal(pm_view, "row-activated", pm_row_activated); - signal(pm_view, "button-press-event", pm_buttonpress); - signal(pm_view, "popup-menu", pm_popup_menu); - - return pm_container; -} - -/** - * Toggles the focus between the Project Manager and the current Scintilla - * window. - */ -void pm_toggle_focus() { - gtk_widget_grab_focus( - GTK_WIDGET_HAS_FOCUS(focused_editor) ? pm_entry : focused_editor); -} - -/** - * When searching the Project Manager treeview, matches are tree items that - * contain the search text as a substring. - * @param model The GtkTreeModel for the treeview. - * @param col The column number to use for comparing search text to. - * @param key The search text. - * @param iter The GtkTreeIter for each tree node being compared. - */ -static int pm_search_equal_func(GtkTreeModel *model, int col, const char *key, - GtkTreeIter *iter, gpointer udata) { - const char *text; - gtk_tree_model_get(model, iter, col, &text, -1); - return strstr(text, key) == NULL; // FALSE is really a match like strcmp -} - -/** - * Sorts the Project Manager treeview case sensitively. - * @param model The GtkTreeModel for the treeview. - * @param a The GtkTreeIter for one tree node being compared. - * @param b The GtkTreeIter for the other tree node being compared. - */ -static int pm_sort_iter_compare_func(GtkTreeModel *model, GtkTreeIter *a, - GtkTreeIter *b, gpointer udata) { - char *a_text, *b_text, *p; - gtk_tree_model_get(model, a, 1, &a_text, -1); - gtk_tree_model_get(model, b, 1, &b_text, -1); - if (a_text) for (p = a_text; *p != '\0'; p++) *p = g_ascii_tolower(*p); - if (b_text) for (p = b_text; *p != '\0'; p++) *p = g_ascii_tolower(*p); - int retval = g_strcmp0(a_text, b_text); - g_free(a_text); - g_free(b_text); - return retval; -} - -// Signals - -/** - * Signal for the activation of the Project Manager entry. - * Requests contents for the Project Manager. - */ -static void pm_entry_activated(GtkWidget *entry, gpointer udata) { - l_handle_event("pm_contents_request", LUA_TTABLE, - l_pm_pathtableref(pm_store, NULL), LUA_TNIL, 0, -1); -} - -/** - * Signal for a change of the text in the Project Manager entry. - * Requests contents for the Project Manager. - */ -static void pm_entry_changed(GtkComboBoxEntry *entry, gpointer udata) { - l_handle_event("pm_contents_request", LUA_TTABLE, - l_pm_pathtableref(pm_store, NULL), LUA_TNIL, 0, -1); -} - -/** - * Signal for a Project Manager keypress. - * Currently handled keypresses: - * - Escape - Refocuses the Scintilla view. - */ -static gbool pm_keypress(GtkWidget *pm, GdkEventKey *event, gpointer udata) { - if (event->keyval == 0xff1b) { - gtk_widget_grab_focus(focused_editor); - return TRUE; - } else return FALSE; -} - -/** - * Signal for a Project Manager parent expansion. - * Requests contents for a Project Manager parent node being opened. - * Since a parent is given a dummy child by default in order to indicate that - * it is a parent, that dummy child is removed. - */ -static void pm_row_expanded(GtkTreeView *view, GtkTreeIter *iter, - GtkTreePath *path, gpointer udata) { - char *path_str = gtk_tree_path_to_string(path); - l_handle_event("pm_contents_request", LUA_TTABLE, - l_pm_pathtableref(pm_store, path), LUA_TSTRING, path_str, -1); - g_free(path_str); -} - -/** - * Signal for a Project Manager parent collapse. - * Removes all Project Manager children from a parent node being closed. - * Re-adds a dummy child to indicate this parent is still a parent. It will be - * removed when the parent is re-opened. - */ -static void pm_row_collapsed(GtkTreeView *view, GtkTreeIter *iter, - GtkTreePath *path, gpointer udata) { - GtkTreeIter child; - gtk_tree_model_iter_nth_child(GTK_TREE_MODEL(pm_store), &child, iter, 0); - while (gtk_tree_model_iter_has_child(GTK_TREE_MODEL(pm_store), iter)) - gtk_tree_store_remove(pm_store, &child); - gtk_tree_store_append(pm_store, &child, iter); - gtk_tree_store_set(pm_store, &child, 1, "\0dummy", -1); -} - -/** - * Signal for the activation of a Project Manager node. - * Performs the appropriate action on a selected Project Manager node. - * If the node is a collapsed parent, it is expanded; otherwise the parent is - * collapsed. If the node is not a parent at all, a Lua action is performed. - */ -static void pm_row_activated(GtkTreeView *view, GtkTreePath *path, - GtkTreeViewColumn *column, gpointer udata) { - if (!gtk_tree_view_expand_row(view, path, FALSE)) - if (!gtk_tree_view_collapse_row(view, path)) - l_handle_event("pm_item_selected", LUA_TTABLE, - l_pm_pathtableref(pm_store, path), -1); -} - -/** - * Signal for a Project Manager mouse click. - * If it is a right-click, popup a context menu for the selected item. - * @see l_pm_popup_context_menu - */ -static gbool pm_buttonpress(GtkTreeView *view, GdkEventButton *event, - gpointer udata) { - if (event->type != GDK_BUTTON_PRESS || event->button != 3) return FALSE; - l_pm_popup_context_menu(event); - return TRUE; -} - -/** - * Signal for popping up a Project Manager context menu. - * Typically Shift+F10 activates this event. - * @see l_pm_popup_context_menu - */ -static gbool pm_popup_menu(GtkWidget *view, gpointer udata) { - l_pm_popup_context_menu(NULL); - return TRUE; -} - // Find/Replace #define attach(w, x1, x2, y1, y2, xo, yo, xp, yp) \ |