Opens files

This commit is contained in:
Pierre Pronchery 2006-08-20 14:49:14 +00:00
parent 107caa8027
commit b6ce0588e5
3 changed files with 47 additions and 2 deletions

View File

@ -20,6 +20,7 @@ static void _editor_on_file_open(GtkWidget * widget, gpointer data);
static void _editor_on_file_save(GtkWidget * widget, gpointer data); static void _editor_on_file_save(GtkWidget * widget, gpointer data);
static void _editor_on_file_save_as(GtkWidget * widget, gpointer data); static void _editor_on_file_save_as(GtkWidget * widget, gpointer data);
static void _editor_on_help_about(GtkWidget * widget, gpointer data); static void _editor_on_help_about(GtkWidget * widget, gpointer data);
static void _editor_on_new(GtkWidget * widget, gpointer data);
static void _editor_on_open(GtkWidget * widget, gpointer data); static void _editor_on_open(GtkWidget * widget, gpointer data);
struct _menu struct _menu
{ {
@ -46,6 +47,10 @@ struct _menu _menu_file[] =
}; };
struct _menu _menu_edit[] = struct _menu _menu_edit[] =
{ {
{ "_Cut", NULL, GTK_STOCK_CUT },
{ "_Copy", NULL, GTK_STOCK_COPY },
{ "_Paste", NULL, GTK_STOCK_PASTE },
{ "", NULL, NULL },
{ "_Preferences", G_CALLBACK(_editor_on_edit_preferences), { "_Preferences", G_CALLBACK(_editor_on_edit_preferences),
GTK_STOCK_PREFERENCES }, GTK_STOCK_PREFERENCES },
{ NULL, NULL, NULL } { NULL, NULL, NULL }
@ -76,6 +81,7 @@ Editor * editor_new(void)
if((editor = malloc(sizeof(*editor))) == NULL) if((editor = malloc(sizeof(*editor))) == NULL)
return NULL; return NULL;
editor->filename = NULL;
editor->saved = 1; editor->saved = 1;
/* widgets */ /* widgets */
editor->window = gtk_window_new(GTK_WINDOW_TOPLEVEL); editor->window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
@ -90,6 +96,8 @@ Editor * editor_new(void)
/* toolbar */ /* toolbar */
toolbar = gtk_toolbar_new(); toolbar = gtk_toolbar_new();
tb_button = gtk_tool_button_new_from_stock(GTK_STOCK_NEW); tb_button = gtk_tool_button_new_from_stock(GTK_STOCK_NEW);
g_signal_connect(G_OBJECT(tb_button), "clicked", G_CALLBACK(
_editor_on_new), editor);
gtk_toolbar_insert(GTK_TOOLBAR(toolbar), tb_button, -1); gtk_toolbar_insert(GTK_TOOLBAR(toolbar), tb_button, -1);
tb_button = gtk_tool_button_new_from_stock(GTK_STOCK_OPEN); tb_button = gtk_tool_button_new_from_stock(GTK_STOCK_OPEN);
g_signal_connect(G_OBJECT(tb_button), "clicked", G_CALLBACK( g_signal_connect(G_OBJECT(tb_button), "clicked", G_CALLBACK(
@ -270,6 +278,8 @@ static void _editor_on_file_close(GtkWidget * widget, gpointer data)
static void _editor_on_file_new(GtkWidget * widget, gpointer data) static void _editor_on_file_new(GtkWidget * widget, gpointer data)
{ {
Editor * editor = data; Editor * editor = data;
editor_open(editor, NULL);
} }
static void _editor_on_file_open(GtkWidget * widget, gpointer data) static void _editor_on_file_open(GtkWidget * widget, gpointer data)
@ -333,6 +343,13 @@ static void _editor_on_help_about(GtkWidget * widget, gpointer data)
#endif #endif
} }
static void _editor_on_new(GtkWidget * widget, gpointer data)
{
Editor * editor = data;
editor_open(editor, NULL);
}
static void _editor_on_open(GtkWidget * widget, gpointer data) static void _editor_on_open(GtkWidget * widget, gpointer data)
{ {
Editor * editor = data; Editor * editor = data;
@ -359,8 +376,31 @@ gboolean editor_close(Editor * editor)
return TRUE; return TRUE;
} }
void editor_open(Editor * editor, char const * filename) void editor_open(Editor * editor, char const * filename)
{ {
FILE * fp;
GtkTextBuffer * tbuf;
GtkTextIter iter;
char buf[BUFSIZ];
size_t len;
/* FIXME close previously opened file */
if(filename == NULL)
return;
if((fp = fopen(filename, "r")) == NULL)
{
_editor_error(editor, filename, 0);
return;
}
tbuf = gtk_text_view_get_buffer(GTK_TEXT_VIEW(editor->view));
gtk_text_buffer_set_text(tbuf, "", 0);
while((len = fread(buf, sizeof(char), sizeof(buf), fp)) > 0)
{
gtk_text_buffer_get_end_iter(tbuf, &iter);
gtk_text_buffer_insert(tbuf, &iter, buf, len);
}
fclose(fp);
} }

View File

@ -11,6 +11,7 @@
/* types */ /* types */
typedef struct _Editor typedef struct _Editor
{ {
char * filename;
int saved; int saved;
/* widgets */ /* widgets */
GtkWidget * window; GtkWidget * window;

View File

@ -10,7 +10,7 @@
/* usage */ /* usage */
static int _usage(void) static int _usage(void)
{ {
fprintf(stderr, "%s", "Usage: editor\n"); fprintf(stderr, "%s", "Usage: editor [file]\n");
return 1; return 1;
} }
@ -21,15 +21,19 @@ int main(int argc, char * argv[])
int o; int o;
Editor * e; Editor * e;
gtk_init(&argc, &argv);
while((o = getopt(argc, argv, "")) != -1) while((o = getopt(argc, argv, "")) != -1)
switch(o) switch(o)
{ {
default: default:
return _usage(); return _usage();
} }
gtk_init(&argc, &argv); if(optind != argc && optind+1 != argc)
return _usage();
if((e = editor_new()) == NULL) if((e = editor_new()) == NULL)
return 2; return 2;
if(argc - optind == 1)
editor_open(e, argv[optind]);
gtk_main(); gtk_main();
editor_delete(e); editor_delete(e);
return 0; return 0;