Today, I chatted with Zhu again. This chat is a little far away. I have talked about marriage, but I just want to talk about it. How can I talk about marriage with my current strength ~
In the afternoon, I played several games of warcraft and lost the game. Then it was strange that she said that she was going to take a bath while chatting with Zhu. Then I said that I would continue to play the first game, then she suddenly said that if I win, I will be my wife ~
The result is yes. I won...
However, this girl died and did not recognize the account, saying that there was a wife who won by playing Warcraft.
However, if you say this, you have promised to regret it?
This is the benefit of being a girl. You have no choice but to regret it ~
The result is predictable.
Then she said, if I could write this software, I would be my wife ~~~
It sounds good, but I am still confused. It's hard to say this time that I can keep my account...
But it doesn't matter. Sooner or later, it's my wife ~ It also brings new significance to the compilation of this software.
This evening, the program took another step. It added a signal connection to the menu command and was able to read and write files.
In addition, I have also revised the code module to make the structure clearer ~ At least I think
But the problem also exists.
At present, it is still simple to open and save, but the implementation of the function does not add a lot of fault tolerance, and the design of human words...
I use fwrite in stdio for file writing. The compiler has a warning, but I have not figured out how to use Write, when I simply used it, there was a problem of insufficient permissions...
In addition, the file_selection dialog box shows that the file preview function is missing compared with other file opening dialog boxes in Ubuntu. It is quite uncomfortable. There is no solution yet. I am waiting for help.
The detailed code is as follows:
# Include <GTK/GTK. h>
# Include <fcntl. h>
# Include <stdio. h>
/* =================================== */
/* Definition space */
/* =================================== */
# Define MAIN_WINDOW_WIDTH 790
# Define main_window_highly 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 */
/* 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, 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 );
}
Below is