static inline GtkToolItem *_add_category_button (GtkWidget *pToolBar, const gchar *cLabel, const gchar *cIconName, int pos, GtkToolItem *group) { GtkToolItem *pCategoryButton; if (group) pCategoryButton= gtk_radio_tool_button_new_from_widget (GTK_RADIO_TOOL_BUTTON (group)); else pCategoryButton = gtk_radio_tool_button_new (NULL); gtk_tool_button_set_label (GTK_TOOL_BUTTON (pCategoryButton), cLabel); gtk_tool_button_set_icon_name (GTK_TOOL_BUTTON (pCategoryButton), cIconName); g_signal_connect (G_OBJECT (pCategoryButton), "toggled", G_CALLBACK(on_click_category_button), GINT_TO_POINTER (pos)); gtk_toolbar_insert (GTK_TOOLBAR (pToolBar) , pCategoryButton, -1); return pCategoryButton; }
/*# @class GtkRadioToolButton @brief A toolbar item that contains a radio button @param group An existing GtkRadioToolButton, or nil to create a new group of buttons. A GtkRadioToolButton is a GtkToolItem that contains a radio button, that is, a button that is part of a group of toggle buttons where only one button can be active at a time. */ FALCON_FUNC RadioToolButton::init( VMARG ) { Item* i_grp = vm->param( 0 ); #ifndef NO_PARAMETER_CHECK if ( !i_grp || !( i_grp->isNil() || ( i_grp->isObject() && IS_DERIVED( i_grp, GtkRadioToolButton ) ) ) ) throw_inv_params( "[GtkRadioToolButton]" ); #endif GtkRadioToolButton* grp = i_grp->isNil() ? NULL : (GtkRadioToolButton*) COREGOBJECT( i_grp )->getObject(); GtkToolItem* btn = grp ? gtk_radio_tool_button_new_from_widget( grp ) : gtk_radio_tool_button_new( NULL ); MYSELF; self->setObject( (GObject*) btn ); }
GTKGeomWindow::GTKGeomWindow( class GTKPlotter &plotter, const Geometry &geom, const EpotField *epot, const EpotEfield *efield, const MeshScalarField *scharge, const MeshScalarField *tdens, const VectorField *bfield, const ParticleDataBase *pdb ) : GTKFrameWindow(plotter), _geomplot(_frame,geom), _geom(geom), _epot(epot), _efield(efield), _scharge(scharge), _tdens(tdens), _bfield(bfield), _pdb(pdb), _tool(TOOL_UNKNOWN), _prefdata(NULL) { //std::cout << "GTKGeomWindow constructor\n"; // Setup GeomPlot _geomplot.set_epot( epot ); _geomplot.set_scharge( scharge ); _geomplot.set_trajdens( tdens ); _geomplot.set_bfield( bfield ); _geomplot.set_efield( efield ); _geomplot.set_particle_database( pdb ); // Set window title gtk_window_set_title( GTK_WINDOW(_window), "Simulation geometry" ); // Adding geometry window specific tools to toolbar // Creating separator GtkToolItem *toolitem = gtk_separator_tool_item_new(); gtk_toolbar_insert( GTK_TOOLBAR(_toolbar), toolitem, -1 ); // Creating "Particle diagnostics" button GdkPixbuf *pixbuf = gdk_pixbuf_new_from_inline( -1, icon_particle_diag_inline, FALSE, NULL ); GtkWidget *icon = gtk_image_new_from_pixbuf( pixbuf ); toolitem = gtk_radio_tool_button_new_from_widget( GTK_RADIO_TOOL_BUTTON(_radioitem) ); gtk_tool_button_set_label( GTK_TOOL_BUTTON(toolitem), "Particle diagnostics" ); #if GTK_CHECK_VERSION(2,12,0) gtk_widget_set_tooltip_text( GTK_WIDGET(toolitem), "Particle diagnostics" ); #endif gtk_tool_button_set_icon_widget( GTK_TOOL_BUTTON(toolitem), icon ); gtk_toolbar_insert( GTK_TOOLBAR(_toolbar), toolitem, -1 ); g_signal_connect( G_OBJECT(toolitem), "toggled", G_CALLBACK(menuitem_tool_change_signal), (gpointer)this ); // Creating "Field diagnostics" button pixbuf = gdk_pixbuf_new_from_inline( -1, icon_field_diag_inline, FALSE, NULL ); icon = gtk_image_new_from_pixbuf( pixbuf ); toolitem = gtk_radio_tool_button_new_from_widget( GTK_RADIO_TOOL_BUTTON(_radioitem) ); gtk_tool_button_set_label( GTK_TOOL_BUTTON(toolitem), "Field diagnostics" ); #if GTK_CHECK_VERSION(2,12,0) gtk_widget_set_tooltip_text( GTK_WIDGET(toolitem), "Field diagnostics" ); #endif gtk_tool_button_set_icon_widget( GTK_TOOL_BUTTON(toolitem), icon ); gtk_toolbar_insert( GTK_TOOLBAR(_toolbar), toolitem, -1 ); g_signal_connect( G_OBJECT(toolitem), "toggled", G_CALLBACK(menuitem_tool_change_signal), (gpointer)this ); // Creating "Geom 3D" button pixbuf = gdk_pixbuf_new_from_inline( -1, icon_geom3d_inline, FALSE, NULL ); icon = gtk_image_new_from_pixbuf( pixbuf ); toolitem = gtk_tool_button_new( icon, "3D geometry view" ); #if GTK_CHECK_VERSION(2,12,0) gtk_widget_set_tooltip_text( GTK_WIDGET(toolitem), "3D geometry view" ); #endif gtk_toolbar_insert( GTK_TOOLBAR(_toolbar), toolitem, -1 ); if( _geom.geom_mode() != MODE_3D || !_geom.surface_built() ) gtk_widget_set_sensitive( GTK_WIDGET(toolitem), FALSE ); g_signal_connect( G_OBJECT(toolitem), "clicked", G_CALLBACK(menuitem_geom3d_signal), (gpointer)this ); // Creating separator toolitem = gtk_separator_tool_item_new(); gtk_toolbar_insert( GTK_TOOLBAR(_toolbar), toolitem, -1 ); // Creating view combobox and level spinbutton //_combobox = gtk_combo_box_new_text(); _combobox = gtk_combo_box_text_new(); if( geom.geom_mode() == MODE_3D ) { gtk_combo_box_text_append( GTK_COMBO_BOX_TEXT(_combobox), NULL, "XY" ); gtk_combo_box_text_append( GTK_COMBO_BOX_TEXT(_combobox), NULL, "XZ" ); gtk_combo_box_text_append( GTK_COMBO_BOX_TEXT(_combobox), NULL, "YX" ); gtk_combo_box_text_append( GTK_COMBO_BOX_TEXT(_combobox), NULL, "YZ" ); gtk_combo_box_text_append( GTK_COMBO_BOX_TEXT(_combobox), NULL, "ZX" ); gtk_combo_box_text_append( GTK_COMBO_BOX_TEXT(_combobox), NULL, "ZY" ); /* gtk_combo_box_append_text( GTK_COMBO_BOX(_combobox), "XY" ); gtk_combo_box_append_text( GTK_COMBO_BOX(_combobox), "XZ" ); gtk_combo_box_append_text( GTK_COMBO_BOX(_combobox), "YX" ); gtk_combo_box_append_text( GTK_COMBO_BOX(_combobox), "YZ" ); gtk_combo_box_append_text( GTK_COMBO_BOX(_combobox), "ZX" ); gtk_combo_box_append_text( GTK_COMBO_BOX(_combobox), "ZY" ); */ gtk_combo_box_set_active( GTK_COMBO_BOX(_combobox), 0 ); _spinbutton = gtk_spin_button_new_with_range( 0, geom.size(2)-1, 1 ); gtk_spin_button_set_value( GTK_SPIN_BUTTON(_spinbutton), geom.size(2)/2 ); _geomplot.set_view( VIEW_XY, geom.size(2)/2 ); } else { gtk_combo_box_text_append( GTK_COMBO_BOX_TEXT(_combobox), NULL, "XY" ); gtk_combo_box_text_append( GTK_COMBO_BOX_TEXT(_combobox), NULL, "YX" ); gtk_combo_box_set_active( GTK_COMBO_BOX(_combobox), 0 ); _spinbutton = gtk_spin_button_new_with_range( 0, 0, 1 ); gtk_spin_button_set_value( GTK_SPIN_BUTTON(_spinbutton), 0 ); } toolitem = gtk_tool_item_new(); gtk_container_add( GTK_CONTAINER(toolitem), _combobox ); gtk_toolbar_insert( GTK_TOOLBAR(_toolbar), toolitem, -1 ); #if GTK_CHECK_VERSION(2,12,0) gtk_widget_set_tooltip_text( GTK_WIDGET(toolitem), "Select view direction" ); #endif gtk_spin_button_set_digits( GTK_SPIN_BUTTON(_spinbutton), 0 ); toolitem = gtk_tool_item_new(); gtk_container_add( GTK_CONTAINER(toolitem), _spinbutton ); gtk_toolbar_insert( GTK_TOOLBAR(_toolbar), toolitem, -1 ); #if GTK_CHECK_VERSION(2,12,0) gtk_widget_set_tooltip_text( GTK_WIDGET(toolitem), "Select view level" ); #endif g_signal_connect( G_OBJECT(_combobox), "changed", G_CALLBACK(combobox_signal), (gpointer)this ); g_signal_connect( G_OBJECT(_spinbutton), "value-changed", G_CALLBACK(spinbutton_signal), (gpointer)this ); // Drawing area signals g_signal_connect( G_OBJECT(_darea), "button_press_event", G_CALLBACK(darea_button_signal2), (gpointer)this ); g_signal_connect( G_OBJECT(_darea), "button_release_event", G_CALLBACK(darea_button_signal2), (gpointer)this ); g_signal_connect( G_OBJECT(_darea), "motion_notify_event", G_CALLBACK(darea_motion_signal2), (gpointer)this ); update_view(); show(); }