📄 callbacks.c
字号:
/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- *//* * callbacks.c * Copyright (C) wwsh 2008 <wwssir@gmail.com> * * callbacks.c is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * callbacks.c is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see <http://www.gnu.org/licenses/>. */#ifdef HAVE_CONFIG_H# include <config.h>#endif#include <gtk/gtk.h>#include <stdlib.h>#include <math.h>#include "callbacks.h"/* For testing propose use the local (not installed) glade file *//* #define GLADE_FILE PACKAGE_DATA_DIR"/demo_1/glade/demo_1.glade" */#define GLADE_FILE "demo_1.glade"MainWindow* mwin;static gint popup_handler_window(GtkWidget *widget, GdkEvent *event);const gchar *default_folder_for_opening;const gchar *default_folder_for_saving = "/home/wwsh";const gchar *filename_for_existing_document;gboolean user_edited_a_new_document = TRUE;enum{ TITLE_COLUMN, AUTHOR_COLUMN, CHECKED_COLUMN, N_COLUMNS};void MessageBox(gchar* str){ printf("messagebox\n"); GtkWidget *dialog; dialog = gtk_message_dialog_new (mwin->window, GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_INFO, GTK_BUTTONS_CLOSE, "=> '%s'", str); gtk_dialog_run(GTK_DIALOG(dialog)); gtk_widget_destroy (dialog);}voidtree_view_init(){ GtkTreeStore *store = gtk_tree_store_new(N_COLUMNS, /* Total number of columns */ G_TYPE_STRING, /* Book title */ G_TYPE_STRING, /* Author */ G_TYPE_BOOLEAN); /* Is checked out? */ GtkTreeIter iter1; /* Parent iter */ GtkTreeIter iter2; /* Child iter */ gtk_tree_store_append (store, &iter1, NULL); /* Acquire a top-level iterator */ gtk_tree_store_set (store, &iter1, TITLE_COLUMN, "The Art of Computer Programming", AUTHOR_COLUMN, "Donald E. Knuth", CHECKED_COLUMN, FALSE, -1); gtk_tree_store_append (store, &iter2, &iter1); /* Acquire a child iterator */ gtk_tree_store_set (store, &iter2, TITLE_COLUMN, "Volume 1: Fundamental Algorithms", CHECKED_COLUMN, TRUE, -1); gtk_tree_store_append (store, &iter2, &iter1); gtk_tree_store_set (store, &iter2, TITLE_COLUMN, "Volume 2: Seminumerical Algorithms", CHECKED_COLUMN, TRUE, -1); gtk_tree_store_append (store, &iter2, &iter1); gtk_tree_store_set (store, &iter2, TITLE_COLUMN, "Volume 3: Sorting and Searching", CHECKED_COLUMN, TRUE, -1); // 设置树视图的数据 gtk_tree_view_set_model(mwin->treeview, GTK_TREE_MODEL(store)); GtkCellRenderer *renderer; GtkTreeViewColumn *column; // Column Title renderer = gtk_cell_renderer_text_new(); column = gtk_tree_view_column_new_with_attributes("Title", renderer, "text", TITLE_COLUMN, NULL); gtk_tree_view_append_column(GTK_TREE_VIEW (mwin->treeview), column); // Column Author renderer = gtk_cell_renderer_text_new(); column = gtk_tree_view_column_new_with_attributes("Author", renderer, "text", AUTHOR_COLUMN, NULL); gtk_tree_view_append_column(GTK_TREE_VIEW (mwin->treeview), column); // Column Checked renderer = gtk_cell_renderer_toggle_new(); column = gtk_tree_view_column_new_with_attributes("Checked Out", renderer, "active", CHECKED_COLUMN, "radio", CHECKED_COLUMN, NULL); //gtk_cell_renderer_toggle_set_radio(renderer, TRUE); //gtk_cell_renderer_toggle_set_active(renderer, TRUE); gtk_tree_view_append_column(GTK_TREE_VIEW (mwin->treeview), column); // combobox 设置组合框内容为store // gtk_combo_box_set_model(mwin->p3_combobox, GTK_TREE_MODEL(store)); // combo box gtk_combo_box_append_text(mwin->p3_combobox, "add a new item"); gtk_combo_box_append_text(mwin->p3_combobox, "remove the first item"); // combo box entry gtk_combo_box_append_text(GTK_COMBO_BOX(mwin->p3_comboboxentry), "add a new item"); gtk_combo_box_append_text(GTK_COMBO_BOX(mwin->p3_comboboxentry), "remove the first item"); }GtkWindow*create_main_window(void){ default_folder_for_opening = g_get_home_dir(); default_folder_for_saving = g_get_home_dir(); mwin = g_new0(MainWindow, 1); mwin->gxml = glade_xml_new (GLADE_FILE, NULL, NULL); /* This is important */ glade_xml_signal_autoconnect (mwin->gxml); mwin->window = (GtkWindow*)glade_xml_get_widget(mwin->gxml, "window1"); mwin->aboutdlg = (GtkAboutDialog*)glade_xml_get_widget(mwin->gxml, "aboutdialog"); mwin->tbr_new = (GtkToolButton*)glade_xml_get_widget(mwin->gxml, "TBNew"); mwin->tbr_open = (GtkToolButton*)glade_xml_get_widget(mwin->gxml, "TBOpen"); mwin->tbr_save = (GtkToolButton*)glade_xml_get_widget(mwin->gxml, "TBSave"); mwin->btn_ok = (GtkButton*)glade_xml_get_widget(mwin->gxml, "btn_OK"); mwin->btn_apply = (GtkButton*)glade_xml_get_widget(mwin->gxml, "btn_Apply"); mwin->btn_undo = (GtkButton*)glade_xml_get_widget(mwin->gxml, "btn_Undo"); mwin->treeview = (GtkTreeView*)glade_xml_get_widget(mwin->gxml, "treeview"); mwin->progressbar = (GtkProgressBar*)glade_xml_get_widget(mwin->gxml, "progressbar"); // page 1 mwin->p1_entry_FilePathName = (GtkEntry*)glade_xml_get_widget(mwin->gxml, "page1_entry_FilePathName"); mwin->p1_btn_filechooser = (GtkFileChooserButton*)glade_xml_get_widget(mwin->gxml, "page1_btn_filechooser"); mwin->p1_image = (GtkImage*)glade_xml_get_widget(mwin->gxml, "page1_image"); // page 2 mwin->p2_textview = (GtkTextView*)glade_xml_get_widget(mwin->gxml, "page2_textview"); mwin->p2_entry_text = (GtkEntry*)glade_xml_get_widget(mwin->gxml, "page2_entry_text"); // page 3 mwin->p3_radiobutton1 = (GtkRadioButton*)glade_xml_get_widget(mwin->gxml, "page3_rediobutton1"); mwin->p3_radiobutton2 = (GtkRadioButton*)glade_xml_get_widget(mwin->gxml, "page3_rediobutton2"); mwin->p3_radiobutton3 = (GtkRadioButton*)glade_xml_get_widget(mwin->gxml, "page3_rediobutton3"); mwin->p3_checkbutton1 = (GtkCheckButton*)glade_xml_get_widget(mwin->gxml, "page3_checkbutton1"); mwin->p3_checkbutton2 = (GtkCheckButton*)glade_xml_get_widget(mwin->gxml, "page3_checkbutton2"); mwin->p3_combobox = (GtkComboBox*)glade_xml_get_widget(mwin->gxml, "page3_combobox1"); mwin->p3_comboboxentry = (GtkComboBoxEntry*)glade_xml_get_widget(mwin->gxml, "page3_comboboxentry1"); mwin->p3_hscale = (GtkHScale*)glade_xml_get_widget(mwin->gxml, "page3_hscale1"); mwin->p3_vscale = (GtkVScale*)glade_xml_get_widget(mwin->gxml, "page3_vscale1"); /* connect the signals in the interface */ g_signal_connect(G_OBJECT(mwin->btn_ok), "clicked", G_CALLBACK(on_btn_OK_clicked), NULL); g_signal_connect(G_OBJECT(mwin->btn_apply), "clicked", G_CALLBACK(on_btn_Apply_clicked), NULL); g_signal_connect(G_OBJECT(mwin->btn_undo), "clicked", G_CALLBACK(on_btn_Undo_clicked), NULL); g_signal_connect(G_OBJECT(mwin->tbr_new), "clicked", G_CALLBACK(on_New_clicked), NULL); g_signal_connect(G_OBJECT(mwin->tbr_open), "clicked", G_CALLBACK(on_Open_clicked), NULL); g_signal_connect(G_OBJECT(mwin->tbr_save), "clicked", G_CALLBACK(on_Save_clicked), NULL); g_signal_connect(G_OBJECT(mwin->p1_btn_filechooser), "file-set", G_CALLBACK(on_page1_btn_filechooser_file_set), NULL); // tree tree_view_init(); /* Setup the selection handler */ GtkTreeSelection *select; select = gtk_tree_view_get_selection (GTK_TREE_VIEW (mwin->treeview)); gtk_tree_selection_set_mode (select, GTK_SELECTION_SINGLE); g_signal_connect (G_OBJECT (select), "changed", G_CALLBACK (on_treeview_selection_changed), NULL); // popup menu, Connecting the popup signal handler. /* connect our handler which will popup the menu */ GtkMenu *menu = (GtkMenu*)glade_xml_get_widget(mwin->gxml, "popmenu"); g_signal_connect_swapped (mwin->window, "button_press_event", G_CALLBACK (popup_handler_window), menu); return mwin->window;}voidon_menu_help_about_activate(GtkWidget* w, gpointer data){ gtk_dialog_run(GTK_DIALOG(mwin->aboutdlg)); gtk_widget_hide((GtkWidget*)mwin->aboutdlg);}// ToolButton Callbackvoidon_New_clicked(GtkWidget* w, gpointer user_data){ printf("func cb New\n"); }voidon_Open_clicked(GtkWidget* w, gpointer user_data){ printf("func cb Open\n"); GtkWidget *dialog; dialog = gtk_file_chooser_dialog_new("打开文件", mwin->window, GTK_FILE_CHOOSER_ACTION_OPEN, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT, NULL); // 处理打开路径 if (user_edited_a_new_document) { gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER (dialog), default_folder_for_opening); } else { gtk_file_chooser_set_filename(GTK_FILE_CHOOSER (dialog), g_path_get_dirname(filename_for_existing_document)); //filename_for_existing_document); }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -