Various changes to LdWindowMain.

* Convert filenames from system locale.
* Internationalize.
* Split diagram_show_open_dialog().
This commit is contained in:
Přemysl Eric Janouch 2011-02-13 20:17:21 +01:00
parent 69f3ce89c5
commit ebd4cd3a17
1 changed files with 54 additions and 41 deletions

View File

@ -71,6 +71,7 @@ static void on_diagram_selection_changed (LdDiagram *diagram,
static gchar *diagram_get_name (LdWindowMain *self); static gchar *diagram_get_name (LdWindowMain *self);
static void diagram_set_filename (LdWindowMain *self, gchar *filename); static void diagram_set_filename (LdWindowMain *self, gchar *filename);
static void diagram_new (LdWindowMain *self); static void diagram_new (LdWindowMain *self);
static gboolean diagram_open (LdWindowMain *self, const gchar *filename);
static void diagram_save (LdWindowMain *self); static void diagram_save (LdWindowMain *self);
static GtkFileFilter *diagram_get_file_filter (void); static GtkFileFilter *diagram_get_file_filter (void);
@ -228,7 +229,7 @@ ld_window_main_init (LdWindowMain *self)
(priv->ui_manager, PROJECT_SHARE_DIR "gui/window-main.ui", &error); (priv->ui_manager, PROJECT_SHARE_DIR "gui/window-main.ui", &error);
if (error) if (error)
{ {
g_message ("Building UI failed: %s", error->message); g_message ("building UI failed: %s", error->message);
g_error_free (error); g_error_free (error);
} }
@ -487,7 +488,7 @@ diagram_get_name (LdWindowMain *self)
g_return_val_if_fail (LD_IS_WINDOW_MAIN (self), NULL); g_return_val_if_fail (LD_IS_WINDOW_MAIN (self), NULL);
if (self->priv->filename) if (self->priv->filename)
return g_path_get_basename (self->priv->filename); return g_filename_display_basename (self->priv->filename);
else else
return g_strdup (_("Unsaved Diagram")); return g_strdup (_("Unsaved Diagram"));
} }
@ -521,8 +522,8 @@ diagram_new (LdWindowMain *self)
{ {
g_return_if_fail (LD_IS_WINDOW_MAIN (self)); g_return_if_fail (LD_IS_WINDOW_MAIN (self));
if (!may_close_diagram (self, "Save the changes to diagram \"%s\" before" if (!may_close_diagram (self, _("Save the changes to diagram \"%s\" before"
" closing it and creating a new one?")) " closing it and creating a new one?")))
return; return;
ld_diagram_clear (self->priv->diagram); ld_diagram_clear (self->priv->diagram);
@ -565,10 +566,10 @@ diagram_save (LdWindowMain *self)
message_dialog = gtk_message_dialog_new (GTK_WINDOW (self), message_dialog = gtk_message_dialog_new (GTK_WINDOW (self),
GTK_DIALOG_MODAL, GTK_MESSAGE_ERROR, GTK_BUTTONS_OK, GTK_DIALOG_MODAL, GTK_MESSAGE_ERROR, GTK_BUTTONS_OK,
"Failed to save the diagram"); _("Failed to save the diagram"));
gtk_message_dialog_format_secondary_text gtk_message_dialog_format_secondary_text
(GTK_MESSAGE_DIALOG (message_dialog), (GTK_MESSAGE_DIALOG (message_dialog),
"Try again or save it under another name."); _("Try again or save it under another name."));
gtk_dialog_run (GTK_DIALOG (message_dialog)); gtk_dialog_run (GTK_DIALOG (message_dialog));
gtk_widget_destroy (message_dialog); gtk_widget_destroy (message_dialog);
} }
@ -579,6 +580,41 @@ diagram_save (LdWindowMain *self)
} }
} }
/*
* diagram_open:
*
* Open a diagram from a file.
*/
static gboolean
diagram_open (LdWindowMain *self, const gchar *filename)
{
GError *error;
error = NULL;
ld_diagram_load_from_file (self->priv->diagram, filename, &error);
if (error)
{
GtkWidget *message_dialog;
g_warning ("loading failed: %s", error->message);
g_error_free (error);
message_dialog = gtk_message_dialog_new (GTK_WINDOW (self),
GTK_DIALOG_MODAL, GTK_MESSAGE_ERROR, GTK_BUTTONS_OK,
_("Failed to open the file"));
gtk_message_dialog_format_secondary_text
(GTK_MESSAGE_DIALOG (message_dialog),
_("The file is probably corrupted."));
gtk_dialog_run (GTK_DIALOG (message_dialog));
gtk_widget_destroy (message_dialog);
return FALSE;
}
ld_diagram_set_modified (self->priv->diagram, FALSE);
diagram_set_filename (self, g_strdup (filename));
return TRUE;
}
/* /*
* diagram_get_file_filter: * diagram_get_file_filter:
* *
@ -590,7 +626,7 @@ diagram_get_file_filter (void)
GtkFileFilter *filter; GtkFileFilter *filter;
filter = gtk_file_filter_new (); filter = gtk_file_filter_new ();
gtk_file_filter_set_name (filter, "Logdiag Diagrams"); gtk_file_filter_set_name (filter, _("Logdiag Diagrams (*.ldd)"));
gtk_file_filter_add_pattern (filter, "*.ldd"); gtk_file_filter_add_pattern (filter, "*.ldd");
return filter; return filter;
} }
@ -607,11 +643,11 @@ diagram_show_open_dialog (LdWindowMain *self)
g_return_if_fail (LD_IS_WINDOW_MAIN (self)); g_return_if_fail (LD_IS_WINDOW_MAIN (self));
if (!may_close_diagram (self, "Save the changes to diagram \"%s\" before" if (!may_close_diagram (self, _("Save the changes to diagram \"%s\" before"
" closing it and opening another one?")) " closing it and opening another one?")))
return; return;
dialog = gtk_file_chooser_dialog_new ("Open...", GTK_WINDOW (self), dialog = gtk_file_chooser_dialog_new (_("Open..."), GTK_WINDOW (self),
GTK_FILE_CHOOSER_ACTION_OPEN, GTK_FILE_CHOOSER_ACTION_OPEN,
GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT, GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT,
@ -622,33 +658,10 @@ diagram_show_open_dialog (LdWindowMain *self)
if (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_ACCEPT) if (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_ACCEPT)
{ {
gchar *filename; gchar *filename;
GError *error;
filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dialog)); filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dialog));
diagram_open (self, filename);
error = NULL; g_free (filename);
ld_diagram_load_from_file (self->priv->diagram, filename, &error);
if (error)
{
GtkWidget *message_dialog;
g_warning ("loading failed: %s", error->message);
g_error_free (error);
message_dialog = gtk_message_dialog_new (GTK_WINDOW (self),
GTK_DIALOG_MODAL, GTK_MESSAGE_ERROR, GTK_BUTTONS_OK,
"Failed to open the file");
gtk_message_dialog_format_secondary_text
(GTK_MESSAGE_DIALOG (message_dialog),
"The file is probably corrupted.");
gtk_dialog_run (GTK_DIALOG (message_dialog));
gtk_widget_destroy (message_dialog);
}
else
{
ld_diagram_set_modified (self->priv->diagram, FALSE);
diagram_set_filename (self, filename);
}
} }
gtk_widget_destroy (dialog); gtk_widget_destroy (dialog);
} }
@ -665,7 +678,7 @@ diagram_show_save_as_dialog (LdWindowMain *self)
g_return_if_fail (LD_IS_WINDOW_MAIN (self)); g_return_if_fail (LD_IS_WINDOW_MAIN (self));
dialog = gtk_file_chooser_dialog_new ("Save As...", GTK_WINDOW (self), dialog = gtk_file_chooser_dialog_new (_("Save As..."), GTK_WINDOW (self),
GTK_FILE_CHOOSER_ACTION_SAVE, GTK_FILE_CHOOSER_ACTION_SAVE,
GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
GTK_STOCK_SAVE, GTK_RESPONSE_ACCEPT, GTK_STOCK_SAVE, GTK_RESPONSE_ACCEPT,
@ -676,8 +689,8 @@ diagram_show_save_as_dialog (LdWindowMain *self)
if (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_ACCEPT) if (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_ACCEPT)
{ {
diagram_set_filename (self, gtk_file_chooser_get_filename diagram_set_filename (self,
(GTK_FILE_CHOOSER (dialog))); gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dialog)));
diagram_save (self); diagram_save (self);
} }
gtk_widget_destroy (dialog); gtk_widget_destroy (dialog);
@ -718,9 +731,9 @@ may_close_diagram (LdWindowMain *self, const gchar *dialog_message)
dialog_message, name); dialog_message, name);
gtk_message_dialog_format_secondary_text gtk_message_dialog_format_secondary_text
(GTK_MESSAGE_DIALOG (message_dialog), (GTK_MESSAGE_DIALOG (message_dialog),
"If you don't save, changes will be permanently lost."); _("If you don't save, changes will be permanently lost."));
gtk_dialog_add_buttons (GTK_DIALOG (message_dialog), gtk_dialog_add_buttons (GTK_DIALOG (message_dialog),
"Close _without Saving", GTK_RESPONSE_NO, _("Close _without Saving"), GTK_RESPONSE_NO,
GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
GTK_STOCK_SAVE, GTK_RESPONSE_YES, GTK_STOCK_SAVE, GTK_RESPONSE_YES,
NULL); NULL);
@ -758,7 +771,7 @@ may_quit (LdWindowMain *self)
g_return_val_if_fail (LD_IS_WINDOW_MAIN (self), TRUE); g_return_val_if_fail (LD_IS_WINDOW_MAIN (self), TRUE);
return may_close_diagram (self, return may_close_diagram (self,
"Save the changes to diagram \"%s\" before closing?"); _("Save the changes to diagram \"%s\" before closing?"));
} }