- Manage exceptions into SimulationController.

git-svn-id: svn://svn.gna.org/svn/sgpemv2/trunk@966 3ecf2c5c-341e-0410-92b4-d18e462d057c
This commit is contained in:
tchernobog 2006-08-30 15:53:26 +00:00
parent 3f314f6225
commit a4bde96a7b
1 changed files with 58 additions and 2 deletions

View File

@ -28,6 +28,11 @@
#include "gui_builder.hh"
#include "graphical_preferences_editor.hh"
#include "backend/cpu_policy_exception.hh"
#include "backend/malformed_policy_exception.hh"
#include "backend/null_policy_exception.hh"
#include "backend/user_interrupt_exception.hh"
#include "backend/cpu_policies_gatekeeper.hh"
#include "backend/cpu_policy.hh"
#include "backend/cpu_policy_manager.hh"
@ -38,6 +43,7 @@
#include "backend/serializer.hh"
#include <gdkmm/pixbuf.h>
#include <glibmm/markup.h>
#include <glibmm/timer.h>
#include <glibmm/ustring.h>
#include <gtkmm/aboutdialog.h>
@ -329,7 +335,9 @@ SimulationController::on_simulation_run()
_toolbt_stop->set_sensitive(true);
_break_requested = false;
_sim.run();
// Used instead of simply calling "_sim.run()" to
// have exception handling only in one place:
run_simulation_adaptor();
}
@ -405,7 +413,55 @@ SimulationController::update(const Simulation& simulation)
bool
SimulationController::run_simulation_adaptor()
{
using Gtk::MessageDialog;
using namespace Glib;
if(!_break_requested)
_sim.run();
try
{
_sim.run();
}
catch(const UserInterruptException& uie)
{
// Show the user a dialog
MessageDialog diag(_("<b>The selected user CPU policy stopped before returning:</b>\n") + Markup::escape_text(uie.what()),
true, Gtk::MESSAGE_ERROR, Gtk::BUTTONS_OK, true);
diag.run();
}
catch(const MalformedPolicyException& mpe)
{
// Show user a dialog
MessageDialog diag(_("<b>The selected user CPU policy was malformed and didn't run:</b>\n") + Markup::escape_text(mpe.what()),
true, Gtk::MESSAGE_ERROR, Gtk::BUTTONS_OK, true);
diag.run();
try
{
// Deactivate the policy
_sim.set_policy(NULL);
}
catch(const CPUPolicyException& cpe)
{
// Fatal error. We should never get here.
std::cerr << _(" [EE] Fatal error. Impossible to deactivate the policy in ") << __FILE__ << ":" << __LINE__
<< std::endl << _(" [EE] ") << cpe.what() << std::endl;
;
abort();
}
}
catch(const NullPolicyException& npe)
{
MessageDialog diag(_("<b>No active policy selected:</b>\n") + Markup::escape_text(npe.what()),
true, Gtk::MESSAGE_ERROR, Gtk::BUTTONS_OK, true);
diag.run();
}
catch(const CPUPolicyException& cpe)
{
MessageDialog diag(_("<b>Unexpected error</b>:\n") + Markup::escape_text(cpe.what()),
true, Gtk::MESSAGE_ERROR, Gtk::BUTTONS_OK, true);
diag.run();
}
return false;
}