Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- * File: textedit.c
- * Author: Alvin Delagon
- * Summary: This is a shameful take to learn GTK+ programming in C
- *
- */
- #include <gtk/gtk.h>
- #include <glade/glade.h>
- #include <gio/gio.h>
- void on_save(GtkWidget *widget, GtkTextBuffer *txtbuffer)
- {
- GtkWindow *window;
- GtkWidget *dialog;
- dialog = gtk_file_chooser_dialog_new("Save File",
- window,
- GTK_FILE_CHOOSER_ACTION_SAVE,
- GTK_STOCK_CANCEL,
- GTK_RESPONSE_CANCEL,
- GTK_STOCK_SAVE,
- GTK_RESPONSE_ACCEPT,
- NULL);
- if (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_ACCEPT)
- {
- GFile *file = NULL;
- GFileOutputStream *stream = NULL;
- GError *error;
- GtkTextIter start;
- GtkTextIter end;
- GFileCreateFlags flags;
- char *filename;
- gchar *buffer;
- gsize count;
- filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dialog));
- file = g_file_new_for_path (filename);
- stream = g_file_replace (file, NULL, TRUE, flags, NULL, &error);
- gtk_text_buffer_get_start_iter (txtbuffer, &start);
- gtk_text_buffer_get_end_iter (txtbuffer, &end);
- buffer = gtk_text_buffer_get_text (txtbuffer,
- &start,
- &end,
- TRUE);
- count = gtk_text_buffer_get_char_count (txtbuffer);
- g_output_stream_write (G_OUTPUT_STREAM (stream), buffer, count, NULL, &error);
- }
- gtk_widget_destroy (dialog);
- }
- void on_open(GtkWidget *widget, GtkTextBuffer *txtbuffer)
- {
- GtkWindow *window;
- GtkWidget *dialog;
- dialog = gtk_file_chooser_dialog_new("Open File",
- window,
- GTK_FILE_CHOOSER_ACTION_OPEN,
- GTK_STOCK_CANCEL,
- GTK_RESPONSE_CANCEL,
- GTK_STOCK_OPEN,
- GTK_RESPONSE_ACCEPT,
- NULL);
- if (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_ACCEPT)
- {
- char *filename;
- char *buffer;
- filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dialog));
- GFile *file = NULL;
- GFileInputStream *stream = NULL;
- GError *error;
- GtkTextIter iter;
- gssize bytes_read;
- gboolean is_reading = TRUE;
- file = g_file_new_for_path (filename);
- stream = g_file_read (file, NULL, &error);
- buffer = g_malloc (1024);
- gtk_text_buffer_set_text (txtbuffer, "", -1);
- while (is_reading)
- {
- bytes_read = g_input_stream_read (G_INPUT_STREAM (stream), buffer, 1024, NULL, &error);
- gtk_text_buffer_get_end_iter (txtbuffer, &iter);
- gtk_text_buffer_insert (txtbuffer, &iter, buffer, bytes_read);
- if (bytes_read == 0)
- is_reading = FALSE;
- }
- }
- gtk_widget_destroy (dialog);
- }
- void on_exit(GtkWidget *widget, gpointer gdata)
- {
- gtk_main_quit();
- }
- int main(int argc, char *argv[])
- {
- GladeXML *main_window;
- GtkWidget *widget;
- GtkTextBuffer *txtbuffer;
- gtk_init (&argc, &argv);
- main_window = glade_xml_new ("data/textedit.glade", NULL, NULL);
- widget = glade_xml_get_widget (main_window, "TextViewMain");
- txtbuffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (widget));
- /* Main Window Event Handlers */
- widget = glade_xml_get_widget (main_window, "MainWindow");
- g_signal_connect (G_OBJECT (widget),
- "delete_event",
- G_CALLBACK (on_exit),
- NULL);
- /* Menu Item Handlers */
- widget = glade_xml_get_widget (main_window, "OpenItem");
- g_signal_connect (G_OBJECT (widget),
- "activate",
- G_CALLBACK (on_open),
- txtbuffer);
- widget = glade_xml_get_widget (main_window, "SaveItem");
- g_signal_connect (G_OBJECT (widget),
- "activate",
- G_CALLBACK (on_save),
- txtbuffer);
- widget = glade_xml_get_widget (main_window, "ExitItem");
- g_signal_connect (G_OBJECT (widget),
- "activate",
- G_CALLBACK (on_exit),
- NULL);
- gtk_main();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement