* Start using Gtk::Actions instead of directly MenuItems where possible

git-svn-id: svn://svn.gna.org/svn/sgpemv2/trunk@1332 3ecf2c5c-341e-0410-92b4-d18e462d057c
This commit is contained in:
tchernobog 2008-11-08 23:45:22 +00:00
parent ed9e5bfa0a
commit e34b70004a
4 changed files with 117 additions and 114 deletions

View file

@ -52,6 +52,7 @@
#include <glibmm/markup.h>
#include <glibmm/ustring.h>
#include <gtkmm/aboutdialog.h>
#include <gtkmm/action.h>
#include <gtkmm/button.h>
#include <gtkmm/messagedialog.h>
#include <gtkmm/menutoolbutton.h>
@ -532,8 +533,16 @@ GuiBuilder::on_selected_resource_policy(ResourcePolicy* pol)
void
GuiBuilder::on_toggle_simulation_mode()
{
Gtk::CheckMenuItem* continuous_mode;
_refXml->get_widget("MenuItem.Simulation.ContinuousMode", continuous_mode);
using namespace Gtk;
using Glib::RefPtr;
RefPtr<UIManager> uimanager = RefPtr<UIManager>::cast_dynamic (_refXml->get_object("UIManager"));
CheckMenuItem* continuous_mode = NULL;
continuous_mode = dynamic_cast<CheckMenuItem*>(uimanager->get_widget
("/MenuBar/Action.Simulation/Action.Simulation.ContinuousMode"));
g_assert (continuous_mode != NULL);
if(continuous_mode->get_active() == true)
Simulation::get_instance().set_mode(Simulation::mode_continuous);
else
@ -578,6 +587,7 @@ GuiBuilder::GuiBuilder(const std::string& uifile)
_show_threads(true)
{
using namespace Gtk;
using Glib::RefPtr;
Window& main_window = get_initial_window();
main_window.signal_delete_event().connect(sigc::bind_return(sigc::hide(sigc::mem_fun(*this, &GuiBuilder::ask_save)), false));
@ -587,54 +597,44 @@ GuiBuilder::GuiBuilder(const std::string& uifile)
// Note: the Play, Pause and Stop menu items are already managed by sgpem::SimulationController.
// file new dialog
MenuItem* file_new = NULL;
_refXml->get_widget("MenuItem.File.New", file_new);
file_new->signal_activate().connect(sigc::mem_fun(*this, &GuiBuilder::on_file_new_activate));
RefPtr<Action>::cast_dynamic (_refXml->get_object("Action.File.New"))
->signal_activate().connect(sigc::mem_fun(*this, &GuiBuilder::on_file_new_activate));
// file open dialog
MenuItem* file_open = NULL;
_refXml->get_widget("MenuItem.File.Open", file_open);
file_open->signal_activate().connect(sigc::mem_fun(*this, &GuiBuilder::on_file_open_activate));
RefPtr<Action>::cast_dynamic (_refXml->get_object("Action.File.Open"))
->signal_activate().connect(sigc::mem_fun(*this, &GuiBuilder::on_file_open_activate));
// file save dialog
MenuItem* file_save = NULL;
_refXml->get_widget("MenuItem.File.Save", file_save);
file_save->signal_activate().connect(sigc::mem_fun(*this, &GuiBuilder::on_file_save_activate));
RefPtr<Action>::cast_dynamic (_refXml->get_object("Action.File.Save"))
->signal_activate().connect(sigc::mem_fun(*this, &GuiBuilder::on_file_save_activate));
// file save dialog
MenuItem* file_saveas = NULL;
_refXml->get_widget("MenuItem.File.SaveAs", file_saveas);
file_saveas->signal_activate().connect(sigc::mem_fun(*this, &GuiBuilder::on_file_saveas_activate));
RefPtr<Action>::cast_dynamic (_refXml->get_object("Action.File.SaveAs"))
->signal_activate().connect(sigc::mem_fun(*this, &GuiBuilder::on_file_saveas_activate));
MenuItem* file_quit = NULL;
_refXml->get_widget("MenuItem.File.Quit", file_quit);
RefPtr<Action> file_quit = RefPtr<Action>::cast_dynamic (_refXml->get_object("Action.File.Quit"));
file_quit->signal_activate().connect(sigc::mem_fun(*this, &GuiBuilder::ask_save));
file_quit->signal_activate().connect(sigc::ptr_fun(&Main::quit));
// preferences dialog
MenuItem* edit_preferences;
_refXml->get_widget("MenuItem.Edit.Preferences", edit_preferences);
edit_preferences->signal_activate().connect(sigc::mem_fun(*this, &GuiBuilder::on_edit_preferences_activate));
RefPtr<Action>::cast_dynamic (_refXml->get_object("Action.Edit.Preferences"))
->signal_activate().connect(sigc::mem_fun(*this, &GuiBuilder::on_edit_preferences_activate));
// enable/disable show threads on widgets
MenuItem* show_threads;
_refXml->get_widget("MenuItem.View.ShowThreads", show_threads);
show_threads->signal_activate().connect(sigc::mem_fun(*this, &GuiBuilder::on_view_show_threads_activate));
RefPtr<Action>::cast_dynamic (_refXml->get_object("Action.View.ShowThreads"))
->signal_activate().connect(sigc::mem_fun(*this, &GuiBuilder::on_view_show_threads_activate));
// show/hide holt graph window
MenuItem* show_holt_graph;
_refXml->get_widget("MenuItem.View.ShowHoltGraph", show_holt_graph);
show_holt_graph->signal_activate().connect(sigc::mem_fun(*this, &GuiBuilder::on_view_show_holt_graph_activate));
RefPtr<Action>::cast_dynamic (_refXml->get_object("Action.View.ShowHoltGraph"))
->signal_activate().connect(sigc::mem_fun(*this, &GuiBuilder::on_view_show_holt_graph_activate));
// show/hide statistics window
MenuItem* show_statistics_graph;
_refXml->get_widget("MenuItem.View.ShowStatistics", show_statistics_graph);
show_statistics_graph->signal_activate().connect(sigc::mem_fun(*this, &GuiBuilder::on_view_show_statistics_activate));
RefPtr<Action>::cast_dynamic (_refXml->get_object("Action.View.ShowStatistics"))
->signal_activate().connect(sigc::mem_fun(*this, &GuiBuilder::on_view_show_statistics_activate));
CheckMenuItem* continuous_mode;
_refXml->get_widget("MenuItem.Simulation.ContinuousMode", continuous_mode);
continuous_mode->signal_toggled().connect(sigc::mem_fun(*this, &GuiBuilder::on_toggle_simulation_mode));
RefPtr<Action>::cast_dynamic (_refXml->get_object("Action.Simulation.ContinuousMode"))
->signal_activate().connect(sigc::mem_fun(*this, &GuiBuilder::on_toggle_simulation_mode));
// ---------------- Toolbar buttons ------------------
@ -668,11 +668,10 @@ GuiBuilder::GuiBuilder(const std::string& uifile)
// ---------------------------------------------------
// About dialog
MenuItem* help_about;
_refXml->get_widget("MenuItem.Help.About", help_about);
AboutDialog* about_dialog = NULL;
AboutDialog* about_dialog = NULL;
_refXml->get_widget("AboutDialog", about_dialog);
help_about->signal_activate().connect(sigc::mem_fun(*about_dialog, &Window::show));
RefPtr<Action>::cast_dynamic (_refXml->get_object("Action.Help.About"))
->signal_activate().connect(sigc::mem_fun(*about_dialog, &Window::show));
about_dialog->set_wrap_license(true);
about_dialog->set_logo(Gdk::Pixbuf::create_from_file(UIDIR "/logo.png"));

View file

@ -50,6 +50,7 @@ SimulationController::SimulationController(Simulation& simulation, Glib::RefPtr<
: _sim(simulation), _break_requested(false)
{
using namespace Gtk;
using Glib::RefPtr;
_sim.attach(*this);
@ -60,17 +61,21 @@ SimulationController::SimulationController(Simulation& simulation, Glib::RefPtr<
refXml->get_widget("ToolBar.Pause", _toolbt_pause);
refXml->get_widget("ToolBar.Stop", _toolbt_stop);
refXml->get_widget("MenuItem.Simulation.Play", _menuit_start);
refXml->get_widget("MenuItem.Simulation.Pause", _menuit_pause);
refXml->get_widget("MenuItem.Simulation.Stop", _menuit_stop);
_action_start = RefPtr<Action>::cast_dynamic (refXml->get_object("Action.Simulation.Play"));
_action_pause = RefPtr<Action>::cast_dynamic (refXml->get_object("Action.Simulation.Pause"));
_action_stop = RefPtr<Action>::cast_dynamic (refXml->get_object("Action.Simulation.Stop"));
g_assert (_action_start != NULL);
g_assert (_action_pause != NULL);
g_assert (_action_stop != NULL);
_toolbt_start->signal_clicked().connect(sigc::mem_fun(*this, &SimulationController::on_simulation_run));
_toolbt_pause->signal_clicked().connect(sigc::mem_fun(*this, &SimulationController::on_simulation_pause));
_toolbt_stop->signal_clicked().connect(sigc::mem_fun(*this, &SimulationController::on_simulation_stop));
_menuit_start->signal_activate().connect(sigc::mem_fun(*this, &SimulationController::on_simulation_run));
_menuit_pause->signal_activate().connect(sigc::mem_fun(*this, &SimulationController::on_simulation_pause));
_menuit_stop->signal_activate().connect(sigc::mem_fun(*this, &SimulationController::on_simulation_stop));
_action_start->signal_activate().connect(sigc::mem_fun(*this, &SimulationController::on_simulation_run));
_action_pause->signal_activate().connect(sigc::mem_fun(*this, &SimulationController::on_simulation_pause));
_action_stop->signal_activate().connect(sigc::mem_fun(*this, &SimulationController::on_simulation_stop));
}
@ -88,9 +93,9 @@ SimulationController::on_simulation_run()
_toolbt_pause->set_sensitive(true);
_toolbt_stop->set_sensitive(true);
_menuit_start->set_sensitive(false);
_menuit_pause->set_sensitive(true);
_menuit_stop->set_sensitive(true);
_action_start->set_sensitive(false);
_action_pause->set_sensitive(true);
_action_stop->set_sensitive(true);
_break_requested = false;
// Used instead of simply calling "_sim.run()" to
@ -107,9 +112,9 @@ SimulationController::on_simulation_pause()
_toolbt_pause->set_sensitive(false);
_toolbt_stop->set_sensitive(true);
_menuit_start->set_sensitive(true);
_menuit_pause->set_sensitive(false);
_menuit_stop->set_sensitive(true);
_action_start->set_sensitive(true);
_action_pause->set_sensitive(false);
_action_stop->set_sensitive(true);
_break_requested = true;
_sim.pause();
@ -124,9 +129,9 @@ SimulationController::on_simulation_stop()
_toolbt_pause->set_sensitive(false);
_toolbt_stop->set_sensitive(false);
_menuit_start->set_sensitive(true);
_menuit_pause->set_sensitive(false);
_menuit_stop->set_sensitive(false);
_action_start->set_sensitive(true);
_action_pause->set_sensitive(false);
_action_stop->set_sensitive(false);
_break_requested = true;
_sim.stop();

View file

@ -26,7 +26,7 @@
#include <sgpemv2/simulation_observer.hh>
#include <gtkmm/toolbutton.h>
#include <gtkmm/menuitem.h>
#include <gtkmm/action.h>
#include <gtkmm/builder.h>
namespace sgpem
@ -85,9 +85,9 @@ namespace sgpem
Gtk::ToolButton* _toolbt_pause;
Gtk::ToolButton* _toolbt_stop;
Gtk::MenuItem* _menuit_start;
Gtk::MenuItem* _menuit_pause;
Gtk::MenuItem* _menuit_stop;
Glib::RefPtr<Gtk::Action> _action_start;
Glib::RefPtr<Gtk::Action> _action_pause;
Glib::RefPtr<Gtk::Action> _action_stop;
};
} //~ namespace sgpem