linux gtk IDE 程序设计(三)
来源:互联网 发布:淘宝买家手机号采集 编辑:程序博客网 时间:2024/05/16 01:23
今天又和珠珠聊天,这次聊的有点远了,都谈到结婚的问题了,不过只是谈谈哈,以我现在的实力咋敢谈婚论嫁嘛~
下午我打了几局魔兽,输了局,后来很奇怪的,我和珠珠聊天的中间她说他要去洗澡,我就说那我继续游戏一局赛,然后她突然说假如我赢了就作我老婆,呵呵~
结果是肯定的,我赢了。。。
不过这丫头后来又死不认帐,说那里有老婆是靠打魔兽赢来的啊
不过话虽这么说,但是你都答应了怎么可以反悔呢?
这个就是做女生的好处了,别个真要是反悔你也没有办法的嘛~
结果是可以预料的,她赖帐了哈
然后她又说,假如我这个软件能写出来的话就作我老婆~~~
听起来不错哈,不过心里还是嘀咕,上次能赖帐,这次也很难说阿。。。
不过到也无所谓,反正迟早是我老婆嘛~而且也给这个软件的编写带来了新的意义,呵呵
今天晚上程序又进了一步哈,增加了对菜单命令的信号连接,能够对文件进行读写了
另外我对代码的模块也进行了修订,感觉上结构更清晰一些了~至少我觉得哈
不过问题也是存在的
目前还是简单的打开和保存哈,只是功能的实现并没有加很多的容错,和人性话设计。。。
对文件的写我用的是stdio里的fwrite哈,编译器是有警告的,但是我还没有搞清楚write怎么用,简单的用了下的时候出现了权限不够的问题。。。
还有就是用file_selection对话框感觉和ubuntu的其他的文件打开对话框比起来少了文件预览的功能,感觉很不爽的,暂时还没有办法解决,正在求救中哈
详细代码如下所示
#include <gtk/gtk.h>
#include <fcntl.h>
#include <stdio.h>
/*=============================*/
/*definition space */
/*=============================*/
#define MAIN_WINDOW_WIDTH 790
#define MAIN_WINDOW_HIGH 590
/*=============================*/
/*the place of fuction declear */
/*=============================*/
void main_window_init(void);
void show_init(void);
void interface_init();
void menu_init();
gint delete_event(GtkWidget* widget, GdkEvent* event, gpointer data);
gint file_open(GtkWidget* widget, GdkEvent* event, gpointer data);
gint file_open_ok(GtkWidget* widget, GdkEvent* event, gpointer data);
gint file_save(GtkWidget* widget, GdkEvent* event, gpointer data);
gint file_save_ok(GtkWidget* widget, GdkEvent* event, gpointer data);
gint debug_function(GtkWidget* widget, GdkEvent* event, gpointer data);
/*==============================*/
/*global symbol declear */
/*==============================*/
GtkWidget* main_window;
GtkWidget* window;
GtkWidget* main_menu;
GtkWidget* main_menu_bar;
GtkWidget* main_file_item;
GtkWidget* file;
GtkWidget* view;
GtkWidget* table;
GtkWidget* view_scroll;
GtkWidget* main_menu_box;
GtkWidget* project_box;
GtkWidget* debug_box;
GtkWidget* view_box;
GtkWidget* default_box;
GtkWidget* menu_items;
GtkWidget* tmp1;
GtkWidget* tmp2;
GtkWidget* tmp3;
GtkWidget* tmp4;
const gchar *file_name = NULL;
GtkTextBuffer* code = NULL;
/*********************************/
/* the access of program */
/*********************************/
int main(int argc, char* argv[])
{
/*init*/
gtk_init(&argc,&argv);
/*init*/
main_window_init();
menu_init();
view_scroll = gtk_scrolled_window_new(NULL,NULL);
tmp1 = gtk_button_new_with_label("project_space");
tmp2 = gtk_button_new_with_label("debug_space");
tmp3 = gtk_button_new_with_label("default_space");
tmp4 = gtk_button_new_with_label("view_space");
g_signal_connect(G_OBJECT(tmp3),"clicked",G_CALLBACK(debug_function),NULL);
main_menu_box = gtk_hbox_new(FALSE,0);
project_box = gtk_hbox_new(FALSE,0);
debug_box = gtk_hbox_new(FALSE,0);
view_box = gtk_hbox_new(FALSE,0);
default_box = gtk_hbox_new(FALSE,0);
view = gtk_text_view_new();
code = gtk_text_view_get_buffer(GTK_TEXT_VIEW(view));
/*set attribute*/
gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(view_scroll), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
/*display set*/
interface_init();
/*show*/
show_init();
gtk_main();
return 0;
}
gint debug_function(GtkWidget* widget, GdkEvent* event, gpointer data)
{
GtkTextIter end;
g_print("aaa/n");
gtk_text_buffer_set_text(code, "1234567",2);
gtk_text_buffer_get_end_iter (code, &end);
gtk_text_buffer_insert(code, &end, "insert",sizeof("insert")-1);
return TRUE;
}
/************************************************/
/*answer the file_open of the main_menu's signal*/
/************************************************/
gint file_open(GtkWidget* widget, GdkEvent* event, gpointer data)
{
file = gtk_file_selection_new("open file");
g_signal_connect(GTK_FILE_SELECTION(file)->ok_button,"clicked",G_CALLBACK(file_open_ok),file);
gtk_widget_show(file);
g_printf("file_open/n");
return TRUE;
}
/*************************************************************/
/*answer the file_open's ok_clicked of the main_menu's signal*/
/*************************************************************/
gint file_open_ok(GtkWidget* widget, GdkEvent* envet, gpointer data)
{
int read_file = 0;
int len = 0;
GtkTextIter end;
char buf[1024] = {0};
/*clear the code buffer*/
gtk_text_buffer_set_text(code, "NULL",0);
file_name = gtk_file_selection_get_filename(GTK_FILE_SELECTION(file));
read_file = open(file_name, O_RDONLY);
while((len = read(read_file, buf, sizeof(buf)))>0)
{
gtk_text_buffer_get_end_iter (code, &end);
gtk_text_buffer_insert(code, &end, buf, len);
}
close(read_file);
g_printf("%s open/n",file_name);
gtk_widget_destroy(file);
return TRUE;
}
/************************************************/
/*answer the file_save of the main_menu's signal*/
/************************************************/
gint file_save(GtkWidget* widget, GdkEvent* event, gpointer data)
{
file = gtk_file_selection_new("open file");
g_signal_connect(GTK_FILE_SELECTION(file)->ok_button,"clicked",G_CALLBACK(file_save_ok),file);
gtk_widget_show(file);
g_printf("file_save/n");
return TRUE;
}
/*************************************************************/
/*answer the save_open's ok_clicked of the main_menu's signal*/
/*************************************************************/
gint file_save_ok(GtkWidget* widget, GdkEvent* envet, gpointer data)
{
FILE* fp = NULL;
int write_file = 0;
int len = 0;
GtkTextIter start;
GtkTextIter end;
char* buf = NULL;
char cmd[10000] = {0};
/*clear the code buffer*/
//gtk_text_buffer_set_text(code, "NULL",0);
file_name = gtk_file_selection_get_filename(GTK_FILE_SELECTION(file));
write_file = open(file_name, O_WRONLY);
sprintf(cmd,"rm %s",file_name);
if(write_file != -1)
{
system(cmd);
}
close(write_file);
fp= fopen(file_name, "w");
gtk_text_buffer_get_start_iter (code, &start);
gtk_text_buffer_get_end_iter (code, &end);
buf = gtk_text_buffer_get_text(code, &start, &end,FALSE);
fwrite(buf, strlen(buf), 1, fp);
fclose(fp);
g_printf("%s save/n",file_name);
gtk_widget_destroy(file);
return TRUE;
}
/*=================================*/
/*a common function to answer the */
/*window_main */
/*=================================*/
gint delete_event(GtkWidget* widget, GdkEvent* event, gpointer data)
{
if(data == "main_window")
{
g_print("main_window send quit!/n");
}
//system("ls");
gtk_main_quit();
//gtk_widget_destroy(widget);
return TRUE;
}
/***************************/
/* init the main window */
/***************************/
void main_window_init(void)
{
main_window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_title(GTK_WINDOW(main_window),"flyli");
gtk_window_set_default_size(GTK_WINDOW(main_window),MAIN_WINDOW_WIDTH,MAIN_WINDOW_HIGH);
gtk_widget_show(main_window);
g_signal_connect (G_OBJECT (main_window), "delete_event", G_CALLBACK (delete_event), "main_window");
}
/**********************************/
/*init the menu of the main window*/
/**********************************/
void menu_init(void)
{
main_menu = gtk_menu_new();
main_file_item = gtk_menu_item_new_with_label("file");
gtk_widget_show(main_file_item);
menu_items = gtk_menu_item_new_with_label("open");
gtk_menu_shell_append(GTK_MENU_SHELL(main_menu),menu_items);
gtk_widget_show (menu_items);
gtk_menu_item_set_submenu(GTK_MENU_ITEM(main_file_item),main_menu);
g_signal_connect (G_OBJECT (menu_items), "activate", G_CALLBACK (file_open), "main_file_item");
menu_items = gtk_menu_item_new_with_label("save");
gtk_menu_shell_append(GTK_MENU_SHELL(main_menu),menu_items);
gtk_widget_show (menu_items);
gtk_menu_item_set_submenu(GTK_MENU_ITEM(main_file_item),main_menu);
g_signal_connect (G_OBJECT (menu_items), "activate", G_CALLBACK (file_save), "main_file_item");
main_menu_bar = gtk_menu_bar_new();
gtk_menu_shell_append(GTK_MENU_SHELL(main_menu_bar),main_file_item);
gtk_widget_show(main_menu_bar);
}
/*************************************/
/* init the layout of the main window*/
/*************************************/
void interface_init(void)
{
table = gtk_table_new(100, 100 , TRUE);
gtk_container_add(GTK_CONTAINER(main_window), table);
gtk_table_attach_defaults(GTK_TABLE(table), main_menu_box, 0,100, 0, 5);
gtk_table_attach_defaults(GTK_TABLE(table), project_box, 0,15, 5, 100);
gtk_table_attach_defaults(GTK_TABLE(table), debug_box , 0,100, 85, 100);
gtk_table_attach_defaults(GTK_TABLE(table), default_box, 85,100,5,85);
gtk_table_attach_defaults(GTK_TABLE(table), view_scroll , 15,85,5,85);
gtk_container_add (GTK_CONTAINER (view_scroll), view);
gtk_box_pack_start(GTK_BOX(project_box), tmp1, TRUE, TRUE, 0);
gtk_box_pack_start(GTK_BOX(debug_box) , tmp2, TRUE, TRUE, 0);
gtk_box_pack_start(GTK_BOX(default_box), tmp3, TRUE, TRUE, 0);
gtk_box_pack_start(GTK_BOX(main_menu_box),main_menu_bar,TRUE, TRUE, 0);
gtk_widget_show(table);
gtk_widget_show(main_menu_box);
gtk_widget_show(project_box);
gtk_widget_show(debug_box);
gtk_widget_show(view_box);
gtk_widget_show(default_box);
}
/***********************/
/* init show */
/***********************/
void show_init(void)
{
gtk_widget_show(tmp1);
gtk_widget_show(tmp2);
gtk_widget_show(tmp3);
gtk_widget_show(tmp4);
gtk_widget_show(view);
gtk_widget_show(view_scroll);
gtk_widget_show(view);
}
下面是截图
下午我打了几局魔兽,输了局,后来很奇怪的,我和珠珠聊天的中间她说他要去洗澡,我就说那我继续游戏一局赛,然后她突然说假如我赢了就作我老婆,呵呵~
结果是肯定的,我赢了。。。
不过这丫头后来又死不认帐,说那里有老婆是靠打魔兽赢来的啊
不过话虽这么说,但是你都答应了怎么可以反悔呢?
这个就是做女生的好处了,别个真要是反悔你也没有办法的嘛~
结果是可以预料的,她赖帐了哈
然后她又说,假如我这个软件能写出来的话就作我老婆~~~
听起来不错哈,不过心里还是嘀咕,上次能赖帐,这次也很难说阿。。。
不过到也无所谓,反正迟早是我老婆嘛~而且也给这个软件的编写带来了新的意义,呵呵
今天晚上程序又进了一步哈,增加了对菜单命令的信号连接,能够对文件进行读写了
另外我对代码的模块也进行了修订,感觉上结构更清晰一些了~至少我觉得哈
不过问题也是存在的
目前还是简单的打开和保存哈,只是功能的实现并没有加很多的容错,和人性话设计。。。
对文件的写我用的是stdio里的fwrite哈,编译器是有警告的,但是我还没有搞清楚write怎么用,简单的用了下的时候出现了权限不够的问题。。。
还有就是用file_selection对话框感觉和ubuntu的其他的文件打开对话框比起来少了文件预览的功能,感觉很不爽的,暂时还没有办法解决,正在求救中哈
详细代码如下所示
#include <gtk/gtk.h>
#include <fcntl.h>
#include <stdio.h>
/*=============================*/
/*definition space */
/*=============================*/
#define MAIN_WINDOW_WIDTH 790
#define MAIN_WINDOW_HIGH 590
/*=============================*/
/*the place of fuction declear */
/*=============================*/
void main_window_init(void);
void show_init(void);
void interface_init();
void menu_init();
gint delete_event(GtkWidget* widget, GdkEvent* event, gpointer data);
gint file_open(GtkWidget* widget, GdkEvent* event, gpointer data);
gint file_open_ok(GtkWidget* widget, GdkEvent* event, gpointer data);
gint file_save(GtkWidget* widget, GdkEvent* event, gpointer data);
gint file_save_ok(GtkWidget* widget, GdkEvent* event, gpointer data);
gint debug_function(GtkWidget* widget, GdkEvent* event, gpointer data);
/*==============================*/
/*global symbol declear */
/*==============================*/
GtkWidget* main_window;
GtkWidget* window;
GtkWidget* main_menu;
GtkWidget* main_menu_bar;
GtkWidget* main_file_item;
GtkWidget* file;
GtkWidget* view;
GtkWidget* table;
GtkWidget* view_scroll;
GtkWidget* main_menu_box;
GtkWidget* project_box;
GtkWidget* debug_box;
GtkWidget* view_box;
GtkWidget* default_box;
GtkWidget* menu_items;
GtkWidget* tmp1;
GtkWidget* tmp2;
GtkWidget* tmp3;
GtkWidget* tmp4;
const gchar *file_name = NULL;
GtkTextBuffer* code = NULL;
/*********************************/
/* the access of program */
/*********************************/
int main(int argc, char* argv[])
{
/*init*/
gtk_init(&argc,&argv);
/*init*/
main_window_init();
menu_init();
view_scroll = gtk_scrolled_window_new(NULL,NULL);
tmp1 = gtk_button_new_with_label("project_space");
tmp2 = gtk_button_new_with_label("debug_space");
tmp3 = gtk_button_new_with_label("default_space");
tmp4 = gtk_button_new_with_label("view_space");
g_signal_connect(G_OBJECT(tmp3),"clicked",G_CALLBACK(debug_function),NULL);
main_menu_box = gtk_hbox_new(FALSE,0);
project_box = gtk_hbox_new(FALSE,0);
debug_box = gtk_hbox_new(FALSE,0);
view_box = gtk_hbox_new(FALSE,0);
default_box = gtk_hbox_new(FALSE,0);
view = gtk_text_view_new();
code = gtk_text_view_get_buffer(GTK_TEXT_VIEW(view));
/*set attribute*/
gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(view_scroll), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
/*display set*/
interface_init();
/*show*/
show_init();
gtk_main();
return 0;
}
gint debug_function(GtkWidget* widget, GdkEvent* event, gpointer data)
{
GtkTextIter end;
g_print("aaa/n");
gtk_text_buffer_set_text(code, "1234567",2);
gtk_text_buffer_get_end_iter (code, &end);
gtk_text_buffer_insert(code, &end, "insert",sizeof("insert")-1);
return TRUE;
}
/************************************************/
/*answer the file_open of the main_menu's signal*/
/************************************************/
gint file_open(GtkWidget* widget, GdkEvent* event, gpointer data)
{
file = gtk_file_selection_new("open file");
g_signal_connect(GTK_FILE_SELECTION(file)->ok_button,"clicked",G_CALLBACK(file_open_ok),file);
gtk_widget_show(file);
g_printf("file_open/n");
return TRUE;
}
/*************************************************************/
/*answer the file_open's ok_clicked of the main_menu's signal*/
/*************************************************************/
gint file_open_ok(GtkWidget* widget, GdkEvent* envet, gpointer data)
{
int read_file = 0;
int len = 0;
GtkTextIter end;
char buf[1024] = {0};
/*clear the code buffer*/
gtk_text_buffer_set_text(code, "NULL",0);
file_name = gtk_file_selection_get_filename(GTK_FILE_SELECTION(file));
read_file = open(file_name, O_RDONLY);
while((len = read(read_file, buf, sizeof(buf)))>0)
{
gtk_text_buffer_get_end_iter (code, &end);
gtk_text_buffer_insert(code, &end, buf, len);
}
close(read_file);
g_printf("%s open/n",file_name);
gtk_widget_destroy(file);
return TRUE;
}
/************************************************/
/*answer the file_save of the main_menu's signal*/
/************************************************/
gint file_save(GtkWidget* widget, GdkEvent* event, gpointer data)
{
file = gtk_file_selection_new("open file");
g_signal_connect(GTK_FILE_SELECTION(file)->ok_button,"clicked",G_CALLBACK(file_save_ok),file);
gtk_widget_show(file);
g_printf("file_save/n");
return TRUE;
}
/*************************************************************/
/*answer the save_open's ok_clicked of the main_menu's signal*/
/*************************************************************/
gint file_save_ok(GtkWidget* widget, GdkEvent* envet, gpointer data)
{
FILE* fp = NULL;
int write_file = 0;
int len = 0;
GtkTextIter start;
GtkTextIter end;
char* buf = NULL;
char cmd[10000] = {0};
/*clear the code buffer*/
//gtk_text_buffer_set_text(code, "NULL",0);
file_name = gtk_file_selection_get_filename(GTK_FILE_SELECTION(file));
write_file = open(file_name, O_WRONLY);
sprintf(cmd,"rm %s",file_name);
if(write_file != -1)
{
system(cmd);
}
close(write_file);
fp= fopen(file_name, "w");
gtk_text_buffer_get_start_iter (code, &start);
gtk_text_buffer_get_end_iter (code, &end);
buf = gtk_text_buffer_get_text(code, &start, &end,FALSE);
fwrite(buf, strlen(buf), 1, fp);
fclose(fp);
g_printf("%s save/n",file_name);
gtk_widget_destroy(file);
return TRUE;
}
/*=================================*/
/*a common function to answer the */
/*window_main */
/*=================================*/
gint delete_event(GtkWidget* widget, GdkEvent* event, gpointer data)
{
if(data == "main_window")
{
g_print("main_window send quit!/n");
}
//system("ls");
gtk_main_quit();
//gtk_widget_destroy(widget);
return TRUE;
}
/***************************/
/* init the main window */
/***************************/
void main_window_init(void)
{
main_window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_title(GTK_WINDOW(main_window),"flyli");
gtk_window_set_default_size(GTK_WINDOW(main_window),MAIN_WINDOW_WIDTH,MAIN_WINDOW_HIGH);
gtk_widget_show(main_window);
g_signal_connect (G_OBJECT (main_window), "delete_event", G_CALLBACK (delete_event), "main_window");
}
/**********************************/
/*init the menu of the main window*/
/**********************************/
void menu_init(void)
{
main_menu = gtk_menu_new();
main_file_item = gtk_menu_item_new_with_label("file");
gtk_widget_show(main_file_item);
menu_items = gtk_menu_item_new_with_label("open");
gtk_menu_shell_append(GTK_MENU_SHELL(main_menu),menu_items);
gtk_widget_show (menu_items);
gtk_menu_item_set_submenu(GTK_MENU_ITEM(main_file_item),main_menu);
g_signal_connect (G_OBJECT (menu_items), "activate", G_CALLBACK (file_open), "main_file_item");
menu_items = gtk_menu_item_new_with_label("save");
gtk_menu_shell_append(GTK_MENU_SHELL(main_menu),menu_items);
gtk_widget_show (menu_items);
gtk_menu_item_set_submenu(GTK_MENU_ITEM(main_file_item),main_menu);
g_signal_connect (G_OBJECT (menu_items), "activate", G_CALLBACK (file_save), "main_file_item");
main_menu_bar = gtk_menu_bar_new();
gtk_menu_shell_append(GTK_MENU_SHELL(main_menu_bar),main_file_item);
gtk_widget_show(main_menu_bar);
}
/*************************************/
/* init the layout of the main window*/
/*************************************/
void interface_init(void)
{
table = gtk_table_new(100, 100 , TRUE);
gtk_container_add(GTK_CONTAINER(main_window), table);
gtk_table_attach_defaults(GTK_TABLE(table), main_menu_box, 0,100, 0, 5);
gtk_table_attach_defaults(GTK_TABLE(table), project_box, 0,15, 5, 100);
gtk_table_attach_defaults(GTK_TABLE(table), debug_box , 0,100, 85, 100);
gtk_table_attach_defaults(GTK_TABLE(table), default_box, 85,100,5,85);
gtk_table_attach_defaults(GTK_TABLE(table), view_scroll , 15,85,5,85);
gtk_container_add (GTK_CONTAINER (view_scroll), view);
gtk_box_pack_start(GTK_BOX(project_box), tmp1, TRUE, TRUE, 0);
gtk_box_pack_start(GTK_BOX(debug_box) , tmp2, TRUE, TRUE, 0);
gtk_box_pack_start(GTK_BOX(default_box), tmp3, TRUE, TRUE, 0);
gtk_box_pack_start(GTK_BOX(main_menu_box),main_menu_bar,TRUE, TRUE, 0);
gtk_widget_show(table);
gtk_widget_show(main_menu_box);
gtk_widget_show(project_box);
gtk_widget_show(debug_box);
gtk_widget_show(view_box);
gtk_widget_show(default_box);
}
/***********************/
/* init show */
/***********************/
void show_init(void)
{
gtk_widget_show(tmp1);
gtk_widget_show(tmp2);
gtk_widget_show(tmp3);
gtk_widget_show(tmp4);
gtk_widget_show(view);
gtk_widget_show(view_scroll);
gtk_widget_show(view);
}
下面是截图
- linux gtk IDE 程序设计(三)
- linux gtk IDE 程序设计(一)
- linux gtk IDE 程序设计(二)
- linux gtk IDE 程序设计(四)
- linux gtk IDE 程序设计(五)
- 《GTK+/GNOME程序设计》 笔记(一) GTK+
- GTK程序设计
- GTK程序设计
- Linux程序设计(Linux shell编程三)
- linux IDE驱动分析之Ide_driver的注册(三)
- linux IDE驱动分析之IDE总线、驱动注册(三)
- 《Linux程序设计》——用GTK+进行GNOME编程
- GNOME/GTK+GUI程序设计
- gtk+程序设计概述
- Linux IDE——vim(三)
- (三)、一步一步学GTK+之布局
- (三)、一步一步学GTK+之布局
- linux gtk
- Nevow XML Templates
- JdbcTemplate学习笔记
- 关于防机器人论坛及博客刷屏的一些思路
- 任意上传图片的存储的设计思路
- 宁做创业狼,不做打工狗
- linux gtk IDE 程序设计(三)
- 学习#gmapra pack(n)
- 猜数字问题的出题程序
- C#简单抽象工厂
- Linux下的显卡驱动安装
- 主题:手机开发平台指南、教程和资料介绍
- mscomm的动态创建
- JDBC Connection大全
- 被误解的C++——汉尼拔