- holt_container: partial implemented (and commented) scaling menu

- simulation_widget: added scaling popup menu



git-svn-id: svn://svn.gna.org/svn/sgpemv2/trunk@1138 3ecf2c5c-341e-0410-92b4-d18e462d057c
This commit is contained in:
paolo 2006-09-13 22:05:36 +00:00
parent da0aabcf61
commit 4872d56461
4 changed files with 153 additions and 10 deletions

View File

@ -76,38 +76,57 @@ HoltContainerWindow::on_button_press_event(GdkEventButton* event)
"<ui>" "<ui>"
" <popup name='PopupMenu'>"; " <popup name='PopupMenu'>";
HoltWidget::arrange_mode arrange = _holt_widget.get_arrange_mode(); HoltWidget::arrange_mode arrange = _holt_widget.get_arrange_mode();
CairoWidget::scaling_mode scaling = _holt_widget.get_scaling_mode();
RefPtr<ActionGroup> action_group = Gtk::ActionGroup::create(); RefPtr<ActionGroup> action_group = Gtk::ActionGroup::create();
if(_auto_dispose || arrange!=HoltWidget::arrange_vertical) if(_auto_dispose || arrange!=HoltWidget::arrange_vertical)
{ {
action_group->add( Gtk::Action::create("DisposeVertical", "Dispose _Vertical"), action_group->add( Gtk::Action::create("DisposeVertical", "Dispose _vertical"),
sigc::mem_fun(*this, &HoltContainerWindow::_on_dispose_vertical) ); sigc::mem_fun(*this, &HoltContainerWindow::_on_dispose_vertical) );
ui_info += " <menuitem action='DisposeVertical'/>"; ui_info += " <menuitem action='DisposeVertical'/>";
} }
if(_auto_dispose || arrange!=HoltWidget::arrange_horizontal) if(_auto_dispose || arrange!=HoltWidget::arrange_horizontal)
{ {
action_group->add( Gtk::Action::create("DisposeHorizontal", "Dispose _Horizontal"), action_group->add( Gtk::Action::create("DisposeHorizontal", "Dispose _horizontal"),
sigc::mem_fun(*this, &HoltContainerWindow::_on_dispose_horizontal) ); sigc::mem_fun(*this, &HoltContainerWindow::_on_dispose_horizontal) );
ui_info += " <menuitem action='DisposeHorizontal'/>"; ui_info += " <menuitem action='DisposeHorizontal'/>";
} }
if(_auto_dispose || arrange!=HoltWidget::arrange_circular) if(_auto_dispose || arrange!=HoltWidget::arrange_circular)
{ {
action_group->add( Gtk::Action::create("DisposeCircular", "Dispose _Circular"), action_group->add( Gtk::Action::create("DisposeCircular", "Dispose _circular"),
sigc::mem_fun(*this, &HoltContainerWindow::_on_dispose_circular) ); sigc::mem_fun(*this, &HoltContainerWindow::_on_dispose_circular) );
ui_info += " <menuitem action='DisposeCircular'/>"; ui_info += " <menuitem action='DisposeCircular'/>";
} }
if(!_auto_dispose) if(!_auto_dispose)
{ {
action_group->add( Gtk::Action::create("DisposeAuto", "_Auto Dispose"), action_group->add( Gtk::Action::create("DisposeAuto", "_Auto dispose"),
sigc::mem_fun(*this, &HoltContainerWindow::_on_dispose_auto) ); sigc::mem_fun(*this, &HoltContainerWindow::_on_dispose_auto) );
ui_info += " <menuitem action='DisposeAuto'/>"; ui_info += " <menuitem action='DisposeAuto'/>";
} }
/* disabled scaling options
if(scaling==CairoWidget::scaling_min)
{
action_group->add( Gtk::Action::create("ScalingNone", "Auto _resize window"),
sigc::mem_fun(*this, &HoltContainerWindow::_on_no_scaling) );
ui_info += " <separator/>"
" <menuitem action='ScalingNone'/>";
}
else
{
// scaling==scaling_none
action_group->add( Gtk::Action::create("ScalingFit", "_Fit in window"),
sigc::mem_fun(*this, &HoltContainerWindow::_on_fit_scaling) );
ui_info += " <separator/>"
" <menuitem action='ScalingFit'/>";
}
*/
RefPtr<UIManager> UIManager = Gtk::UIManager::create(); RefPtr<UIManager> UIManager = Gtk::UIManager::create();
UIManager->insert_action_group(action_group); UIManager->insert_action_group(action_group);
@ -157,6 +176,20 @@ HoltContainerWindow::_on_dispose_auto()
_holt_widget.resize_redraw(); _holt_widget.resize_redraw();
} }
void
HoltContainerWindow::_on_no_scaling()
{
_holt_widget.set_scaling_mode(CairoWidget::scaling_none);
_holt_widget.resize_redraw();
}
void
HoltContainerWindow::_on_fit_scaling()
{
_holt_widget.set_scaling_mode(CairoWidget::scaling_min);
_holt_widget.resize_redraw();
}
void HoltContainerWindow::set_disposition() void HoltContainerWindow::set_disposition()
{ {
if(_auto_dispose){ if(_auto_dispose){

View File

@ -60,6 +60,9 @@ namespace sgpem {
void _on_dispose_circular(); void _on_dispose_circular();
void _on_dispose_horizontal(); void _on_dispose_horizontal();
void _on_dispose_auto(); void _on_dispose_auto();
void _on_no_scaling();
void _on_fit_scaling();
HoltWidget _holt_widget; HoltWidget _holt_widget;
bool _auto_dispose; bool _auto_dispose;

View File

@ -19,11 +19,15 @@
// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
#include "gettext.h" #include "gettext.h"
#include "simulation_widget.hh" #include "simulation_widget.hh"
#include "cairo_elements.hh" #include "cairo_elements.hh"
#include <glibmm/refptr.h>
#include <gtkmm/action.h>
#include <gtkmm/actiongroup.h>
#include <gtkmm/menu.h>
#include <gtkmm/uimanager.h>
#include <sgpemv2/history.hh> #include <sgpemv2/history.hh>
#include <sgpemv2/simulation.hh> #include <sgpemv2/simulation.hh>
#include <sgpemv2/string_utils.hh> #include <sgpemv2/string_utils.hh>
@ -35,6 +39,8 @@
#endif #endif
using namespace sgpem; using namespace sgpem;
using namespace Gtk;
using namespace Glib;
SimulationWidget::SimulationWidget(Simulation& simulation) SimulationWidget::SimulationWidget(Simulation& simulation)
@ -272,7 +278,6 @@ SimulationWidget::draw_grid(cairo_t* ctx)
// - draw right VER line // - draw right VER line
cairo_move_to(ctx, left_graph_margin + graph_width, top_margin); cairo_move_to(ctx, left_graph_margin + graph_width, top_margin);
cairo_rel_line_to(ctx, 0, graph_height); cairo_rel_line_to(ctx, 0, graph_height);
} }
cairo_stroke(ctx); cairo_stroke(ctx);
@ -281,7 +286,7 @@ SimulationWidget::draw_grid(cairo_t* ctx)
cairo_save(ctx); cairo_save(ctx);
cairo_set_line_width(ctx, 0.125 * cairo_get_line_width(ctx)); cairo_set_line_width(ctx, 0.125 * cairo_get_line_width(ctx));
cairo_set_source_rgb(ctx, 0.3, 0.3, 0.3); cairo_set_source_rgb(ctx, 0.3, 0.3, 0.3);
for(double step = 2.0 + _x_unit; step < graph_width - _x_unit; step += 5 * _x_unit) for(double step = _x_unit; step < graph_width - _x_unit; step += 5 * _x_unit)
{ {
cairo_new_path(ctx); cairo_new_path(ctx);
cairo_move_to(ctx, left_graph_margin + step, top_margin); cairo_move_to(ctx, left_graph_margin + step, top_margin);
@ -529,3 +534,101 @@ SimulationWidget::make_gradients()
cairo_pattern_add_color_stop_rgb(_blocked_process_gradient, 1.0, 0.65, 0.0, 0.0); cairo_pattern_add_color_stop_rgb(_blocked_process_gradient, 1.0, 0.65, 0.0, 0.0);
} }
bool
SimulationWidget::on_button_press_event(GdkEventButton* event)
{
if((event->type & Gdk::BUTTON_PRESS) == Gdk::BUTTON_PRESS && (event->button == 3))
{
Glib::ustring ui_info =
"<ui>"
" <popup name='PopupMenu'>";
CairoWidget::scaling_mode scaling = get_scaling_mode();
RefPtr<ActionGroup> action_group = Gtk::ActionGroup::create();
if(scaling!=CairoWidget::scaling_none)
{
action_group->add( Gtk::Action::create("ScalingNone", "_No scaling"),
sigc::mem_fun(*this, &SimulationWidget::_on_no_scaling) );
ui_info += " <menuitem action='ScalingNone'/>";
}
if(scaling!=CairoWidget::scaling_min)
{
// scaling==scaling_none
action_group->add( Gtk::Action::create("ScalingFit", "_Fit in window"),
sigc::mem_fun(*this, &SimulationWidget::_on_fit_scaling) );
ui_info += " <menuitem action='ScalingFit'/>";
}
if(scaling!=CairoWidget::scaling_all)
{
// scaling==scaling_none
action_group->add( Gtk::Action::create("ScalingStretch", "_Stretch in window"),
sigc::mem_fun(*this, &SimulationWidget::_on_stretch_scaling) );
ui_info += " <menuitem action='ScalingStretch'/>";
}
RefPtr<UIManager> UIManager = Gtk::UIManager::create();
UIManager->insert_action_group(action_group);
ui_info +=
" </popup>"
"</ui>";
UIManager->add_ui_from_string(ui_info);
Gtk::Menu* menu = dynamic_cast<Gtk::Menu*>(UIManager->get_widget("/PopupMenu"));
menu->popup(event->button, event->time);
return true; //It has been handled.
}
else
return false;
}
void
SimulationWidget::_on_no_scaling()
{
#ifndef NDEBUG
std::cout << "before SimulationWidget::_on_no_scaling mode=" << get_scaling_mode() << std::endl;
#endif
set_scaling_mode(CairoWidget::scaling_none);
#ifndef NDEBUG
std::cout << "after SimulationWidget::_on_no_scaling mode=" << get_scaling_mode() << std::endl;
#endif
resize_redraw();
set_size_request (20, 20); // force container redimensioning
}
void
SimulationWidget::_on_fit_scaling()
{
#ifndef NDEBUG
std::cout << "before SimulationWidget::_on_fit_scaling mode=" << get_scaling_mode() << std::endl;
#endif
set_scaling_mode(CairoWidget::scaling_min);
#ifndef NDEBUG
std::cout << "after SimulationWidget::_on_fit_scaling mode=" << get_scaling_mode() << std::endl;
#endif
resize_redraw();
set_size_request (20, 20); // force container redimensioning
}
void
SimulationWidget::_on_stretch_scaling()
{
#ifndef NDEBUG
std::cout << "before SimulationWidget::_on_stretch_scaling mode=" << get_scaling_mode() << std::endl;
#endif
set_scaling_mode(CairoWidget::scaling_all);
#ifndef NDEBUG
std::cout << "after SimulationWidget::_on_stretch_scaling mode=" << get_scaling_mode() << std::endl;
#endif
resize_redraw();
set_size_request (20, 20); // force container redimensioning
}

View File

@ -43,7 +43,7 @@ namespace sgpem
bool set_show_threads(bool show); bool set_show_threads(bool show);
protected: protected:
//virtual bool on_button_press_event(GdkEventButton* event); virtual bool on_button_press_event(GdkEventButton* event);
// void change_scaling_mode(); // void change_scaling_mode();
void draw_widget(cairo_t* ctx); void draw_widget(cairo_t* ctx);
@ -60,6 +60,10 @@ namespace sgpem
private: private:
void _on_no_scaling();
void _on_fit_scaling();
void _on_stretch_scaling();
Simulation* _simulation; Simulation* _simulation;
bool _show_threads; bool _show_threads;