📄 main.c
字号:
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <string.h>
#include <stdio.h>
#include <config.h>
#include <gtk/gtk.h>
#include <glade/glade.h>
//#include <support.h>
/*
* Standard gettext macros.
*/
#ifdef ENABLE_NLS
# include <libintl.h>
# undef _
# define _(String) dgettext (PACKAGE, String)
# ifdef gettext_noop
# define N_(String) gettext_noop (String)
# else
# define N_(String) (String)
# endif
#else
# define textdomain(String) (String)
# define gettext(String) (String)
# define dgettext(Domain,Message) (Message)
# define dcgettext(Domain,Message,Type) (Message)
# define bindtextdomain(Domain,Directory) (Domain)
# define _(String) (String)
# define N_(String) (String)
#endif
#define GLADE_FILE "project1.glade"
#define PIX_FILE "/home/bailey/gtk-demo/icon/Worried.png"
#define RC_FILE "gphone.rc1"
#ifdef G_OS_WIN32
gchar *package_prefix = PACKAGE_PREFIX;
gchar *package_data_dir = PACKAGE_DATA_DIR;
gchar *package_locale_dir = PACKAGE_LOCALE_DIR;
#endif
enum {
PIXBUF_COL,
TEXT_COL,
TEXT_COL2,
TEXT_COL3
};
GtkWidget *list;
GtkTreeSelection *selectionWANG;
/*把*.glade文件中的window引用到程序中来*/
GtkWidget* helloWorld (void)
{
GtkWidget *window;
GladeXML *gxml;
gxml = glade_xml_new (GLADE_FILE, "window", NULL);
/* This is important */
glade_xml_signal_autoconnect (gxml);
window = glade_xml_get_widget (gxml, "window");
return window;
}
/*根据window 找到window内的任意控件*/
GtkWidget* Get_XML_Widget (GtkWidget *window, gchar * GladeWidgetName)
{
GladeXML *gxml = glade_get_widget_tree((GtkWidget *)window);
GtkWidget *Vobxi=(GtkWidget *)glade_xml_get_widget (gxml,GladeWidgetName);
return Vobxi;
}
/*创建treeview的model*/
GtkTreeModel* createModel() {
//const
gchar *files[] = {"王驻喜 13612939264", "大开 88839838",
"周达 13688815887", "NOKIA热线 8004005000",
"PIG 114","COW 118"};
GdkPixbuf *pixbuf;
GtkTreeIter iter;
GtkListStore *store;
gint i;
store = gtk_list_store_new(2, GDK_TYPE_PIXBUF, G_TYPE_STRING);
for(i = 0; i < 6; i++) {
//pixbuf = gdk_pixbuf_new_from_file(files[i], NULL);
pixbuf = gdk_pixbuf_new_from_file(PIX_FILE, NULL);
gtk_list_store_append(store, &iter);
gtk_list_store_set(store, &iter,
PIXBUF_COL, pixbuf,
TEXT_COL, files[i],
-1);
gdk_pixbuf_unref(pixbuf);
}
return GTK_TREE_MODEL(store);
}
/*在label上显示treeview中的selection当前内容*/
gboolean selection_changed(GtkTreeSelection *selection, GtkLabel *label) {
GtkTreeView *treeView;
GtkTreeModel *model;
GtkTreeIter iter;
gchar *active;
treeView = gtk_tree_selection_get_tree_view(selection);
model = gtk_tree_view_get_model(treeView);
gtk_tree_selection_get_selected(selection, &model, &iter);
gtk_tree_model_get(model, &iter,
1, &active,
-1);
gtk_label_set_text(label, active);
}
/*把entry的内容加到treeview中,条目会多一个*/
static void
append_item(GtkWidget *widget, gpointer entry)
{
GtkListStore *store;
GtkTreeIter iter;
const char *str = gtk_entry_get_text(entry);
store = GTK_LIST_STORE(gtk_tree_view_get_model(
GTK_TREE_VIEW(widget)));
gtk_list_store_append(store, &iter);
gtk_list_store_set(store, &iter, TEXT_COL, str, -1);
}
/*移除treeview当前选择项的内容*/
static void
remove_item(GtkWidget *widget, gpointer selection)
{
GtkListStore *store;
GtkTreeModel *model;
GtkTreeIter iter;
store = GTK_LIST_STORE(gtk_tree_view_get_model(
GTK_TREE_VIEW (list)));
model = gtk_tree_view_get_model (GTK_TREE_VIEW (list));
if (gtk_tree_model_get_iter_first(model, &iter) == FALSE)
return;
if (gtk_tree_selection_get_selected(GTK_TREE_SELECTION(selection),
&model, &iter)) {
gtk_list_store_remove(store, &iter);
}
}
/*移除treeview所有的内容*/
static void
remove_all(GtkWidget *widget, gpointer selection)
{
GtkListStore *store;
GtkTreeModel *model;
GtkTreeIter iter;
store = GTK_LIST_STORE(gtk_tree_view_get_model(
GTK_TREE_VIEW (list)));
model = gtk_tree_view_get_model (GTK_TREE_VIEW (list));
if (gtk_tree_model_get_iter_first(model, &iter) == FALSE)
return;
gtk_list_store_clear(store);
}
int main (int argc, char *argv[])
{
GtkWidget *win ;
GtkWidget *treeView;
GtkCellRenderer *renderer;
GtkTreeViewColumn *column;
GtkWidget *label;
GtkWidget *vbox;
GtkWidget *statusbar;
GtkTreeSelection *selection;
GtkTreeModel *model;
// gtk_rc_parse (RC_FILE);
gtk_set_locale ();
gtk_init (&argc, &argv);
win = helloWorld(); //引进window
/////////////////////////////////////////////////////////////////////////////
treeView = Get_XML_Widget(win,"treeview1");
model = createModel();
gtk_tree_view_set_model(GTK_TREE_VIEW(treeView),model);
g_object_unref (model);
list = treeView;
//=============================================================
renderer = gtk_cell_renderer_pixbuf_new();
column = gtk_tree_view_column_new_with_attributes(
"Icon", renderer,
"pixbuf", PIXBUF_COL,
NULL);
gtk_tree_view_append_column(GTK_TREE_VIEW (treeView), column);
//=========================================================
renderer = gtk_cell_renderer_text_new();
g_object_set (G_OBJECT(renderer),
"foreground", "red", //设置前景色
"background", "black", //设置背景色
"font", "Nimbus Sans L 24", //设置字体
NULL);
column = gtk_tree_view_column_new_with_attributes(
"Filename", renderer,
"text", TEXT_COL,
NULL);
gtk_tree_view_append_column(GTK_TREE_VIEW (treeView), column);
//====================================================
renderer = gtk_cell_renderer_pixbuf_new();
column = gtk_tree_view_column_new_with_attributes(
"Icon", renderer,
"pixbuf", PIXBUF_COL,
NULL);
gtk_tree_view_append_column(GTK_TREE_VIEW (treeView), column);
vbox = Get_XML_Widget(win,"vbox1");
label = Get_XML_Widget(win,"label1");
GtkWidget *button_add = Get_XML_Widget(win,"button1");
selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(treeView));
selectionWANG = selection;
// g_signal_connect(G_OBJECT(selection), "changed",
// G_CALLBACK(selection_changed), label);
g_signal_connect(GTK_OBJECT(win), "destroy",
G_CALLBACK(gtk_main_quit), NULL);
///////////////////////////////////////////////////////////////////
gtk_widget_show_all (win);
gtk_main ();
return 0;
}
/*自动回调button_add 键*/
G_MODULE_EXPORT void button_add (gpointer user_data,
GtkButton *button)
{
GtkWidget *treeview;
GladeXML *gxml = glade_get_widget_tree((GtkWidget *)button);
GtkWidget *entry=(GtkWidget *)glade_xml_get_widget (gxml,"entry1");
treeview=(GtkWidget *)glade_xml_get_widget (gxml,"treeview1");
append_item(treeview,entry);
return;
}
/*自动回调button_remove 键*/
G_MODULE_EXPORT void button_remove (gpointer user_data,
GtkButton *button)
{
GtkTreeSelection *selection;
GtkTreeIter iter;
gchar *active;
GtkTreeModel * model;
GladeXML *gxml = glade_get_widget_tree((GtkWidget *)button);
GtkWidget *treeview=(GtkWidget *)glade_xml_get_widget (gxml,"treeview1");
selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(treeview));
GtkLabel *lb=(GtkLabel *)glade_xml_get_widget (gxml,"label1");
remove_item(treeview,selection);
/*
selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(treeview));
model = gtk_tree_view_get_model((GtkTreeView *)treeview);
gtk_tree_selection_get_selected(selection, &model, &iter);
gtk_tree_model_get(model, &iter,
1, &active,
-1);
gtk_label_set_text(lb, active);
*/
return;
}
/*自动回调button_removeall 键*/
G_MODULE_EXPORT void button_removeall (gpointer user_data,
GtkButton *button)
{
GladeXML *gxml = glade_get_widget_tree((GtkWidget *)button);
GtkWidget *treeview=(GtkWidget *)glade_xml_get_widget (gxml,"treeview1");
GtkTreeSelection *selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(treeview));
remove_all(treeview,selection);
return;
}
/*自动回调button_open 键*/
G_MODULE_EXPORT void button_open (gpointer user_data,
GtkButton *button)
{
gchar *filename;
gchar *content[100];
gsize bytes;
GError *error = NULL;
GladeXML *gxml = glade_get_widget_tree((GtkWidget *)button);
filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(button));
g_file_get_contents(filename, &content[0], &bytes, &error);
/*
函数申明: char *fgets(char *str, int num, FILE *fp)
函数用途: 读一行字符,该行的字符数不大于num-1
头 文 件: stdio.h
输入参数: str:存放读入的字符数组指针;num:最大允许的读入字符数;fp:文件指针
返 回 值: 操作成功时返回str指针,失败时返回NULL
*/
// g_open(filename,);
// fseek
// fgets();
// g_print(content[0]);
return;
}
/*自动回调Menu_FileOpen 键*/
G_MODULE_EXPORT void Menu_FileOpen (gpointer user_data,
GtkButton *button)
{
gchar *filename;
GladeXML *gxml = glade_get_widget_tree((GtkWidget *)button);
//可以用下面的方法创建文件选择构件:
GtkWidget *filew=gtk_file_selection_new( "File selection" );
//要设置文件名,例如,要在打开时指向指定目录,或者给定一个缺省文件名,可以使用下面的函数:
// void gtk_file_selection_set_filename( GtkFileSelection *filesel,
// filename );
g_print(filename);
gtk_widget_show (filew);
return;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -