⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 callbacks.c

📁 Gtk+,glade3 部件应用示例源代码。
💻 C
📖 第 1 页 / 共 2 页
字号:
/* -*- 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 + -