linux gtk IDE 程式設計(三)

來源:互聯網
上載者:User
今天又和珠珠聊天,這次聊的有點遠了,都談到結婚的問題了,不過只是談談哈,以我現在的實力咋敢談婚論嫁嘛~

下午我打了幾局魔獸,輸了局,後來很奇怪的,我和珠珠聊天的中間她說他要去洗澡,我就說那我繼續遊戲一局賽,然後她突然說假如我贏了就作我老婆,呵呵~

結果是肯定的,我贏了。。。
不過這丫頭後來又死不認帳,說那裡有老婆是靠打魔獸贏來的啊
不過話雖這麼說,但是你都答應了怎麼可以反悔呢?
這個就是做女生的好處了,別個真要是反悔你也沒有辦法的嘛~
結果是可以預料的,她賴帳了哈
然後她又說,假如我這個軟體能寫出來的話就作我老婆~~~
聽起來不錯哈,不過心裡還是嘀咕,上次能賴帳,這次也很難說阿。。。
不過到也無所謂,反正遲早是我老婆嘛~而且也給這個軟體的編寫帶來了新的意義,呵呵

今天晚上程式又進了一步哈,增加了對功能表命令的訊號串連,能夠對檔案進行讀寫了

另外我對代碼的模組也進行了修訂,感覺上結構更清晰一些了~至少我覺得哈

不過問題也是存在的
目前還是簡單的開啟和儲存哈,只是功能的實現並沒有加很多的容錯,和人性話設計。。。
對檔案的寫我用的是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);
}
下面是

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.