linux gtk IDE 程序设计(二)
flyli
今天早上7点中在睡梦中的我就收到了珠珠(我女朋友哈,是我第一个喜欢的女朋友,今年一起去北京比赛后,她回了家,我回到了学校,呵呵,程序员要想找个好老婆不容易阿,要珍惜才是,您说是不?)的短信,说今天他去寺庙抽签,抽的是因缘签,没好意思让人给解签,结果就把签发过来,让我在网上解。
一查,哇靠,上上签啊~呵呵
上面说
君垂思泽润无边,覆祷祈禳没党偏;
一切有情皆受用,均占乐利得周全。
看了看网上的解签,觉得很简陋,自己也学过文言文的嘛,所以自己也可以解一点,不过发觉古人真的是很狡猾阿,这种签貌似可以有很多中解法,然后再看着别个的脸色,基本就能解出比较真实的签了。。。
不过怎么说也是个上上签,因为珠珠有点迷信的哈,所以抽了这种上上签应该是很有促进作用的哈
不过乐规乐,学习还是要继续的,要不以后没钱养老婆让老婆跟着受罪,那可是男人的耻辱阿。。。
今天对这个IDE中比较重要的部分,代码框进行了编写,我用的是gtk的text_view组件,一个好的编写框肯定是需要周围有滚动条的,要不这么小的一个文本框肯定是不够进行代码书写的了,text_view本生已经具有基本的文本编辑功能,但是当书写文本超过本生的大小的时候,其自己会自动的进行放大,但是它无限制的放大,会导致真个IDE界面的破坏,于是我们必须加个东东对其进行约束,也就是加上所谓的滚动条
在写这段代码之前,我觉得滚动条应该是text_view的一个属性,假如设置了就会有,但是在实际的查阅资料中发现,其实是把text_view放到了一个滚动条容器里,这样当text_view放大的时候,滚动条容器就会对根据text_view的大小进行设置,我觉得这个是个很巧妙的方法,呵呵,gtk很聪明啊,呵呵
这个滚动条容器用的是gtkscrolledwindow查阅其mannal可以得到他的所有使用方法,我在这里对最简单的使用方法进行举例说明
创建当然是最初需要做得哈
view_scroll = gtk_scrolled_window_new(NULL,NULL);
然后进行设置
gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(view_scroll), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
这样的设置可以是滚动条进行自动的调整,当然也有别的选择哈,详细的请看mannal
然后将text_view组件放到这个设置好的容器里就可以了
gtk_container_add (GTK_CONTAINER (view_scroll), view)
最后把view_scroll放到想让他显示的地方显示出来就就可以了哈,很简单的
以下是我目前的所有代码,本来我是习惯用工程编译的,但是在linux下我还不知道怎么进行多文件编译,惭愧阿,还需要继续学习哦~
#include <gtk/gtk.h>
/*=============================*/
/*definition space */
/*=============================*/
#define MAIN_WINDOW_WIDTH 790
#define MAIN_WINDOW_HIGH 590
/*=============================*/
/*the place of fuction declear */
/*=============================*/
gint delete_event(GtkWidget* widget, GdkEvent* event, gpointer data);
void init_show(void);
/*==============================*/
/*global symbol declear */
/*==============================*/
GtkWidget* main_window;
GtkWidget* window;
GtkWidget* main_menu;
GtkWidget* main_menu_bar;
GtkWidget* main_file_item;
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;
int main(int argc, char* argv[])
{
/*init*/
gtk_init(&argc,&argv);
/*create the MainWindow*/
main_window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
main_menu = gtk_menu_new();
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");
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();
/*set attribute*/
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_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(view_scroll), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
/*set menu*/
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);
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);
/*signal connect*/
g_signal_connect (G_OBJECT (main_window), "delete_event", G_CALLBACK (delete_event), "main_window");
/*display set*/
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);
/*show*/
init_show();
gtk_main();
return 0;
}
/*=================================*/
/*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");
}
gtk_main_quit();
//gtk_widget_destroy(widget);
return FALSE;
}
void init_show(void)
{
gtk_widget_show(main_window);
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);
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);
}
高手看了上面的代码肯定是充满鄙视的,其实我也知道,全是全局变量,明显的不对哈
而且代码的模块话做得也不好,不过我现在是最初接触gtk编程,我还没有摸清怎样的模块化会比较清晰,还有就是那些变量需要全局,那些需要局部,以及文件间的私有变量的书写,还有命名规范等,都还没有摸索清楚,不过相信我,我会摸索的很快的呵呵,不要鄙视我哈
下一步需要做的就是学会gcc的多文件编译,和linux的文件操作方法了,多文件编译好像牵扯到makefile等等的东西,我都不是很懂,所以需要查阅很多的资料,哎~
有点感觉路遥遥其修远兮的感觉
不过想想珠珠来提提神,感觉不错哈
以下是运行后的界面哈
flyli
今天早上7点中在睡梦中的我就收到了珠珠(我女朋友哈,是我第一个喜欢的女朋友,今年一起去北京比赛后,她回了家,我回到了学校,呵呵,程序员要想找个好老婆不容易阿,要珍惜才是,您说是不?)的短信,说今天他去寺庙抽签,抽的是因缘签,没好意思让人给解签,结果就把签发过来,让我在网上解。
一查,哇靠,上上签啊~呵呵
上面说
君垂思泽润无边,覆祷祈禳没党偏;
一切有情皆受用,均占乐利得周全。
看了看网上的解签,觉得很简陋,自己也学过文言文的嘛,所以自己也可以解一点,不过发觉古人真的是很狡猾阿,这种签貌似可以有很多中解法,然后再看着别个的脸色,基本就能解出比较真实的签了。。。
不过怎么说也是个上上签,因为珠珠有点迷信的哈,所以抽了这种上上签应该是很有促进作用的哈
不过乐规乐,学习还是要继续的,要不以后没钱养老婆让老婆跟着受罪,那可是男人的耻辱阿。。。
今天对这个IDE中比较重要的部分,代码框进行了编写,我用的是gtk的text_view组件,一个好的编写框肯定是需要周围有滚动条的,要不这么小的一个文本框肯定是不够进行代码书写的了,text_view本生已经具有基本的文本编辑功能,但是当书写文本超过本生的大小的时候,其自己会自动的进行放大,但是它无限制的放大,会导致真个IDE界面的破坏,于是我们必须加个东东对其进行约束,也就是加上所谓的滚动条
在写这段代码之前,我觉得滚动条应该是text_view的一个属性,假如设置了就会有,但是在实际的查阅资料中发现,其实是把text_view放到了一个滚动条容器里,这样当text_view放大的时候,滚动条容器就会对根据text_view的大小进行设置,我觉得这个是个很巧妙的方法,呵呵,gtk很聪明啊,呵呵
这个滚动条容器用的是gtkscrolledwindow查阅其mannal可以得到他的所有使用方法,我在这里对最简单的使用方法进行举例说明
创建当然是最初需要做得哈
view_scroll = gtk_scrolled_window_new(NULL,NULL);
然后进行设置
gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(view_scroll), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
这样的设置可以是滚动条进行自动的调整,当然也有别的选择哈,详细的请看mannal
然后将text_view组件放到这个设置好的容器里就可以了
gtk_container_add (GTK_CONTAINER (view_scroll), view)
最后把view_scroll放到想让他显示的地方显示出来就就可以了哈,很简单的
以下是我目前的所有代码,本来我是习惯用工程编译的,但是在linux下我还不知道怎么进行多文件编译,惭愧阿,还需要继续学习哦~
#include <gtk/gtk.h>
/*=============================*/
/*definition space */
/*=============================*/
#define MAIN_WINDOW_WIDTH 790
#define MAIN_WINDOW_HIGH 590
/*=============================*/
/*the place of fuction declear */
/*=============================*/
gint delete_event(GtkWidget* widget, GdkEvent* event, gpointer data);
void init_show(void);
/*==============================*/
/*global symbol declear */
/*==============================*/
GtkWidget* main_window;
GtkWidget* window;
GtkWidget* main_menu;
GtkWidget* main_menu_bar;
GtkWidget* main_file_item;
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;
int main(int argc, char* argv[])
{
/*init*/
gtk_init(&argc,&argv);
/*create the MainWindow*/
main_window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
main_menu = gtk_menu_new();
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");
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();
/*set attribute*/
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_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(view_scroll), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
/*set menu*/
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);
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);
/*signal connect*/
g_signal_connect (G_OBJECT (main_window), "delete_event", G_CALLBACK (delete_event), "main_window");
/*display set*/
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);
/*show*/
init_show();
gtk_main();
return 0;
}
/*=================================*/
/*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");
}
gtk_main_quit();
//gtk_widget_destroy(widget);
return FALSE;
}
void init_show(void)
{
gtk_widget_show(main_window);
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);
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);
}
高手看了上面的代码肯定是充满鄙视的,其实我也知道,全是全局变量,明显的不对哈
而且代码的模块话做得也不好,不过我现在是最初接触gtk编程,我还没有摸清怎样的模块化会比较清晰,还有就是那些变量需要全局,那些需要局部,以及文件间的私有变量的书写,还有命名规范等,都还没有摸索清楚,不过相信我,我会摸索的很快的呵呵,不要鄙视我哈
下一步需要做的就是学会gcc的多文件编译,和linux的文件操作方法了,多文件编译好像牵扯到makefile等等的东西,我都不是很懂,所以需要查阅很多的资料,哎~
有点感觉路遥遥其修远兮的感觉
不过想想珠珠来提提神,感觉不错哈
以下是运行后的界面哈