diff --git a/src/gui_builder.cc b/src/gui_builder.cc
index d2c9d35..4fe2f57 100644
--- a/src/gui_builder.cc
+++ b/src/gui_builder.cc
@@ -73,6 +73,7 @@
using namespace sgpem;
using Gnome::Glade::Xml;
+
void
GuiBuilder::on_edit_preferences_activate()
{
@@ -149,7 +150,7 @@ GuiBuilder::on_file_new_activate()
sim.stop();
history.clear();
- _filename = "";
+ set_filename();
}
@@ -201,7 +202,7 @@ GuiBuilder::on_file_open_activate()
int result = dialog.run();
if(result==Gtk::RESPONSE_OK)
{
- _filename = dialog.get_filename();
+ set_filename(dialog.get_filename());
sim.stop(); // It would work anyhow, but it'd look strange
History& history = sim.get_history();
serializer.restore_snapshot(_filename, history);
@@ -211,13 +212,18 @@ GuiBuilder::on_file_open_activate()
}
catch (std::out_of_range e)
{
- // FIXME: this should be an error dialog
- msg = _("ERROR: No registered serializer available");
+ Gtk::MessageDialog error(get_initial_window(),
+ _("No serializer available.\nThere's no registered serializer. Please check the loaded plugins."),
+ true, Gtk::MESSAGE_ERROR, Gtk::BUTTONS_OK, true);
+ error.run();
+ msg = _("ERROR: No registered serializer available");
}
catch (SerializerError e)
{
- // FIXME: this should be an error dialog
+ Gtk::MessageDialog error(get_initial_window(), e.what(), true, Gtk::MESSAGE_ERROR, Gtk::BUTTONS_OK, true);
+ error.run();
msg = _("ERROR: ") + Glib::ustring(e.what());
+ set_filename();
}
if(!msg.empty())
{
@@ -254,13 +260,17 @@ GuiBuilder::on_file_save_activate()
}
catch (std::out_of_range e)
{
- // FIXME: this should be an error dialog
+ Gtk::MessageDialog error(get_initial_window(),
+ _("No serializer available.\nThere's no registered serializer. Please check the loaded plugins."),
+ true, Gtk::MESSAGE_ERROR, Gtk::BUTTONS_OK, true);
+ error.run();
msg = _("ERROR: No registered serializer available");
}
catch (SerializerError e)
{
- // FIXME: this should be an error dialog
- msg = _("ERROR: ") + Glib::ustring(e.what());
+ Gtk::MessageDialog error(get_initial_window(), e.what(), true, Gtk::MESSAGE_ERROR, Gtk::BUTTONS_OK, true);
+ error.run();
+ msg = _("ERROR: ") + Glib::ustring(e.what());
}
if(!msg.empty())
@@ -309,12 +319,14 @@ GuiBuilder::on_file_saveas_activate()
int result = dialog.run();
if(result==Gtk::RESPONSE_OK)
{
- _filename = dialog.get_filename();
+ std::string filename = dialog.get_filename();
// Append standard extension if none (or a different one) is provided
std::string ext = std::string(".") + serializer.get_filename_extension();
- if(_filename.size() < ext.size() || _filename.substr(_filename.size() - ext.size()) != ext)
- _filename += ext;
+ if(filename.size() < ext.size() || filename.substr(filename.size() - ext.size()) != ext)
+ filename += ext;
+
+ set_filename(filename);
serializer.save_snapshot(_filename, history);
@@ -324,13 +336,18 @@ GuiBuilder::on_file_saveas_activate()
}
catch (std::out_of_range e)
{
- // FIXME: This should be an error dialog:
+ Gtk::MessageDialog error(get_initial_window(),
+ _("No serializer available.\nThere's no registered serializer. Please check the loaded plugins."),
+ true, Gtk::MESSAGE_ERROR, Gtk::BUTTONS_OK, true);
+ error.run();
msg = _("ERROR: No registered serializer available");
}
catch (SerializerError e)
{
- // FIXME: This should be an error dialog:
+ Gtk::MessageDialog error(get_initial_window(), e.what(), true, Gtk::MESSAGE_ERROR, Gtk::BUTTONS_OK, true);
+ error.run();
msg = _("ERROR: ") + Glib::ustring(e.what());
+ set_filename();
}
if(!msg.empty())
@@ -543,6 +560,19 @@ GuiBuilder::ask_save()
}
+void
+GuiBuilder::set_filename(const std::string& filename)
+{
+ static const Glib::ustring default_title = get_initial_window().get_title();
+ Glib::ustring title;
+ _filename = filename;
+ if(!_filename.empty())
+ title = Glib::path_get_basename(_filename) + " - ";
+ title += default_title;
+ get_initial_window().set_title(title);
+}
+
+
GuiBuilder::GuiBuilder(const std::string& gladefile)
: _refXml(Xml::create(gladefile)), _controller(Simulation::get_instance(), _refXml),
_holt_container(Simulation::get_instance()),
diff --git a/src/gui_builder.hh b/src/gui_builder.hh
index 6bfc282..d235515 100644
--- a/src/gui_builder.hh
+++ b/src/gui_builder.hh
@@ -87,6 +87,7 @@ namespace sgpem
SimulationWidget* _simulation_widget;
bool _show_threads;
+ void set_filename(const std::string& filename = "");
void ask_save();
};