- increased separation between CairoWidget and SimulationWidget
- CairoWidget doesn't extend more History Observer - Modified scaling in CairoWidget - NOTE: this is a partial update; total update will follow soon - added File save/file open in GuiBuilder git-svn-id: svn://svn.gna.org/svn/sgpemv2/trunk@903 3ecf2c5c-341e-0410-92b4-d18e462d057c
This commit is contained in:
parent
5432693169
commit
69c098b266
6 changed files with 481 additions and 68 deletions
|
@ -30,12 +30,18 @@
|
|||
#include "backend/history.hh"
|
||||
#include "backend/simulation.hh"
|
||||
|
||||
#include "backend/serializers_gatekeeper.hh"
|
||||
#include "backend/serializer.hh"
|
||||
|
||||
#include <glibmm/ustring.h>
|
||||
#include <gtkmm/aboutdialog.h>
|
||||
#include <gtkmm/messagedialog.h>
|
||||
#include <gtkmm/filechooserdialog.h>
|
||||
#include <gtkmm/expander.h>
|
||||
#include <gtkmm/main.h>
|
||||
#include <gtkmm/menuitem.h>
|
||||
#include <gtkmm/scrolledwindow.h>
|
||||
#include <gtkmm/stock.h>
|
||||
|
||||
#include <iostream>
|
||||
|
||||
|
@ -46,8 +52,10 @@ void
|
|||
test_me()
|
||||
{
|
||||
// A test for widget display:
|
||||
|
||||
Simulation& sim = Simulation::get_instance();
|
||||
sim.get_history().add_process("goofy", 0, 0);
|
||||
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -56,6 +64,133 @@ GuiBuilder::on_edit_preferences_activate()
|
|||
new PreferencesEditor(); //FIXME: are we leaking this way?
|
||||
}
|
||||
|
||||
void
|
||||
GuiBuilder::on_file_open_activate()
|
||||
{
|
||||
Glib::ustring msg;
|
||||
try
|
||||
{
|
||||
std::vector<Serializer*> serializers =
|
||||
SerializersGatekeeper::get_instance().get_registered();
|
||||
|
||||
// FIXME using the first serializer available, this
|
||||
// will need to be changed when multiple serializers will
|
||||
// be made available
|
||||
Serializer& serializer = *serializers.at(0);
|
||||
History& history = Simulation::get_instance().get_history();
|
||||
|
||||
// open file dialog...
|
||||
Gtk::FileChooserDialog dialog("Please choose a file", Gtk::FILE_CHOOSER_ACTION_OPEN);
|
||||
dialog.set_transient_for(get_initial_window());
|
||||
|
||||
//Add response buttons the the dialog:
|
||||
dialog.add_button(Gtk::Stock::CANCEL, Gtk::RESPONSE_CANCEL);
|
||||
dialog.add_button(Gtk::Stock::OPEN, Gtk::RESPONSE_OK);
|
||||
|
||||
//Add filters, so that only certain file types can be selected:
|
||||
for(std::vector<Serializer*>::const_iterator iter=serializers.begin(); iter!=serializers.end(); iter++)
|
||||
{
|
||||
Serializer* ser = *iter;
|
||||
Gtk::FileFilter filter_sgpem;
|
||||
filter_sgpem.set_name(ser->get_filename_description());
|
||||
filter_sgpem.add_pattern(ser->get_filename_extension());
|
||||
dialog.add_filter(filter_sgpem);
|
||||
}
|
||||
|
||||
Gtk::FileFilter filter_any;
|
||||
filter_any.set_name("Any files");
|
||||
filter_any.add_pattern("*");
|
||||
dialog.add_filter(filter_any);
|
||||
|
||||
//Show the dialog and wait for a user response:
|
||||
int result = dialog.run();
|
||||
if(result==Gtk::RESPONSE_OK)
|
||||
{
|
||||
// DISABLED - Actually locks computer
|
||||
// serializer.restore_snapshot("prova1.xgp", history);
|
||||
msg = "File: " + dialog.get_filename() + " loaded.";
|
||||
} // end - if(result==Gtk::RESPONSE_OK)
|
||||
|
||||
}
|
||||
catch (std::out_of_range e)
|
||||
{
|
||||
msg = _("ERROR: No registered serializer available");
|
||||
}
|
||||
catch (SerializerError e)
|
||||
{
|
||||
msg = _("ERROR: ") + Glib::ustring(e.what());
|
||||
}
|
||||
if(!msg.empty())
|
||||
{
|
||||
Gtk::MessageDialog msg_dialog(get_initial_window(), msg);
|
||||
msg_dialog.run();
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
GuiBuilder::on_file_save_activate()
|
||||
{
|
||||
_simulation_widget->change_scaling_mode();
|
||||
}
|
||||
|
||||
void
|
||||
GuiBuilder::on_file_saveas_activate()
|
||||
{
|
||||
Glib::ustring msg;
|
||||
try
|
||||
{
|
||||
std::vector<Serializer*> serializers =
|
||||
SerializersGatekeeper::get_instance().get_registered();
|
||||
|
||||
// FIXME using the first serializer available, this
|
||||
// will need to be changed when multiple serializers will
|
||||
// be made available
|
||||
Serializer& serializer = *serializers.at(0);
|
||||
History& history = Simulation::get_instance().get_history();
|
||||
|
||||
// open file dialog...
|
||||
Gtk::FileChooserDialog dialog("Please choose a file", Gtk::FILE_CHOOSER_ACTION_SAVE);
|
||||
dialog.set_transient_for(get_initial_window());
|
||||
|
||||
//Add response buttons the the dialog:
|
||||
dialog.add_button(Gtk::Stock::CANCEL, Gtk::RESPONSE_CANCEL);
|
||||
dialog.add_button(Gtk::Stock::SAVE, Gtk::RESPONSE_OK);
|
||||
|
||||
//Add filters, so that only certain file types can be selected:
|
||||
Gtk::FileFilter filter_sgpem;
|
||||
filter_sgpem.set_name("Sgpem files");
|
||||
filter_sgpem.add_pattern("*.xgp");
|
||||
dialog.add_filter(filter_sgpem);
|
||||
|
||||
Gtk::FileFilter filter_any;
|
||||
filter_any.set_name("Any files");
|
||||
filter_any.add_pattern("*");
|
||||
dialog.add_filter(filter_any);
|
||||
|
||||
//Show the dialog and wait for a user response:
|
||||
int result = dialog.run();
|
||||
if(result==Gtk::RESPONSE_OK)
|
||||
{
|
||||
// DISABLED - Actually locks computer
|
||||
serializer.save_snapshot(dialog.get_filename(), history);
|
||||
msg = "File: " + dialog.get_filename() + " saved.";
|
||||
} // end - if(result==Gtk::RESPONSE_OK)
|
||||
|
||||
}
|
||||
catch (std::out_of_range e)
|
||||
{
|
||||
msg = _("ERROR: No registered serializer available");
|
||||
}
|
||||
catch (SerializerError e)
|
||||
{
|
||||
msg = _("ERROR: ") + Glib::ustring(e.what());
|
||||
}
|
||||
if(!msg.empty())
|
||||
{
|
||||
Gtk::MessageDialog msg_dialog(get_initial_window(), msg);
|
||||
msg_dialog.run();
|
||||
}
|
||||
}
|
||||
|
||||
GuiBuilder::GuiBuilder(const std::string& gladefile)
|
||||
: _refXml(Xml::create(gladefile))
|
||||
|
@ -64,6 +199,21 @@ GuiBuilder::GuiBuilder(const std::string& gladefile)
|
|||
|
||||
//Window& main_window = get_initial_window();
|
||||
|
||||
// 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));
|
||||
|
||||
// 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));
|
||||
|
||||
// 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));
|
||||
|
||||
// Connect extra signals (decide where to do this...
|
||||
// here -- ugly -- derive widgets and then use
|
||||
// Glade::Xml::get_widget_derived -- better --)
|
||||
|
@ -110,7 +260,8 @@ GuiBuilder::GuiBuilder(const std::string& gladefile)
|
|||
// Main simulation widget
|
||||
ScrolledWindow* simulation_window = NULL;
|
||||
_refXml->get_widget("SimulationScrolledWindow", simulation_window);
|
||||
SimulationWidget* simulation_widget = manage(new SimulationWidget());
|
||||
_simulation_widget = new SimulationWidget();
|
||||
SimulationWidget* simulation_widget = manage(_simulation_widget);
|
||||
simulation_window->add(*simulation_widget);
|
||||
simulation_widget->show();
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue