📄 callbacks.c
字号:
#include "config.h"#include <gtk/gtk.h>#include "callbacks.h"#include "interface.h"#include "support.h"#include "Editor.h"#include "Parse.h"#include "RubySceneGraph.h"extern GtkWidget *m_SaveDialog;extern GtkWidget *m_AboutWin;extern TRubySceneGraph *RubySceneGraph;voidonMenuNewProjectClick (GtkMenuItem *menuitem, gpointer user_data){ CreateNewProject();}voidonMenuOpenProjectClick (GtkMenuItem *menuitem, gpointer user_data){ ShowFileOpen();}voidonMenuSaveProjectClick (GtkMenuItem *menuitem, gpointer user_data){ SaveFile();}voidonMenuSaveAsProject (GtkMenuItem *menuitem, gpointer user_data){ ShowFileSaveAs();}voidonMenuExitClick (GtkMenuItem *menuitem, gpointer user_data){ Quit();}voidonMenuFixedJointClick (GtkMenuItem *menuitem, gpointer user_data){ AddJoint(JOINT_FIXED);}voidonMenuHingeJointClick (GtkMenuItem *menuitem, gpointer user_data){ AddJoint(JOINT_HINGE);}voidonMenuUniversalJointClick (GtkMenuItem *menuitem, gpointer user_data){ AddJoint(JOINT_UNIVERSAL);}voidonMenuDeleteJointClick (GtkMenuItem *menuitem, gpointer user_data){ RemoveCurrentJoint();}voidonMenuAddBoxClick (GtkMenuItem *menuitem, gpointer user_data){ AddNode(SHAPE_BOX);}voidonMenuAddSphereClick (GtkMenuItem *menuitem, gpointer user_data){ AddNode(SHAPE_SPHERE);}voidonMenuDeleteNodeClick (GtkMenuItem *menuitem, gpointer user_data){ RemoveCurrentNode();}voidonMenuAboutClick (GtkMenuItem *menuitem, gpointer user_data){ m_AboutWin = create_winAbout(); gtk_widget_show( m_AboutWin );}voidonToolFixedClick (GtkButton *button, gpointer user_data){ AddJoint(JOINT_FIXED);}voidonToolHingeClick (GtkButton *button, gpointer user_data){ AddJoint(JOINT_HINGE);}voidonToolJointUniversalclicked (GtkButton *button, gpointer user_data){ AddJoint(JOINT_UNIVERSAL);}voidonJointDeleteClick (GtkButton *button, gpointer user_data){ RemoveCurrentJoint();}voidonToolNodeSphereClicked (GtkButton *button, gpointer user_data){ AddNode(SHAPE_SPHERE);}voidonToolNodeBoxClicked (GtkButton *button, gpointer user_data){ AddNode(SHAPE_BOX);}voidonToolNodeDeleteClicked (GtkButton *button, gpointer user_data){ RemoveCurrentNode();}voidonComboChanged (GtkComboBox *combobox, gpointer user_data){}voidonToolNewProjectClicked (GtkButton *button, gpointer user_data){ onMenuNewProjectClick( NULL, NULL );}voidonToolOpenProjectClicked (GtkButton *button, gpointer user_data){ onMenuOpenProjectClick( NULL, NULL );}voidonToolSaveProjectClicked (GtkButton *button, gpointer user_data){ onMenuSaveProjectClick( NULL, NULL );}voidonToolSaveAsProjectClicked (GtkButton *button, gpointer user_data){ onMenuSaveAsProject( NULL, NULL );}voidonAboutOkClicked (GtkButton *button, gpointer user_data){ gtk_widget_destroy( m_AboutWin );}voidonSaveDialogCancelClicked (GtkButton *button, gpointer user_data){ gtk_widget_destroy( m_SaveDialog );}voidonSaveDialogNoClicked (GtkButton *button, gpointer user_data){ onSaveNoClicked();}voidonSaveDialogYesClicked (GtkButton *button, gpointer user_data){ onSaveYesClicked();}voidonTextBoxChange (GtkEntry *entry, gpointer user_data){ string name = gtk_widget_get_name( GTK_WIDGET(user_data) ); TMessage data; string param = gtk_entry_get_text( GTK_ENTRY( user_data ) ); if( name == "txtNodeName" || name == "txtNodeX" || name == "txtNodeY" || name == "txtNodeZ" || name == "txtNodeLength" || name == "txtNodeWidth" || name == "txtNodeHeight" || name == "txtNodeParent" || name == "txtNodeMass" ) { /// Node Widgets const int iCurrentNode = GetCurrentNodeIndex(); const TSceneNode *node = RubySceneGraph->getNodeWithID( iCurrentNode ); if( node == NULL ) { cerr << "OnTextBoxChange: No node selected" << endl; return; } if( name == "txtNodeName" ) { data.m_Command = CMD_NODE_RENAME; data.m_Index = iCurrentNode; data.m_Name = param; } else if( name == "txtNodeX" ) { data.m_Command = CMD_NODE_POSITION; data.m_Index = iCurrentNode; string ss = param; char str[128]; strcpy( str, ss.c_str() ); char *s = str; double dx = Parse::parseFirstDouble( &s ); double dy = node->getPosition().getY(); double dz = node->getPosition().getZ(); data.m_Position = VecPosition( dx, dy, dz ); } else if( name == "txtNodeY" ) { data.m_Command = CMD_NODE_POSITION; data.m_Index = iCurrentNode; string ss = param; char str[128]; strcpy( str, ss.c_str() ); char *s = str; double dx = node->getPosition().getX(); double dy = Parse::parseFirstDouble( &s ); double dz = node->getPosition().getZ(); data.m_Position = VecPosition( dx, dy, dz ); } else if( name == "txtNodeZ" ) { data.m_Command = CMD_NODE_POSITION; data.m_Index = iCurrentNode; string ss = param; char str[128]; strcpy( str, ss.c_str() ); char *s = str; double dx = node->getPosition().getX(); double dy = node->getPosition().getY(); double dz = Parse::parseFirstDouble( &s ); data.m_Position = VecPosition( dx, dy, dz ); } else if( name == "txtNodeLength" ) { data.m_Command = CMD_NODE_RESIZE; data.m_Index = iCurrentNode; string ss = param; char str[128]; strcpy( str, ss.c_str() ); char *s = str; double dx = Parse::parseFirstDouble( &s ); double dy = node->getWidth(); double dz = node->getHeight(); data.m_Size = VecPosition( dx, dy, dz ); } else if( name == "txtNodeWidth" ) { data.m_Command = CMD_NODE_RESIZE; data.m_Index = iCurrentNode; string ss = param; char str[128]; strcpy( str, ss.c_str() ); char *s = str; double dx = node->getLength(); double dy = Parse::parseFirstDouble( &s ); double dz = node->getHeight(); data.m_Size = VecPosition( dx, dy, dz ); } else if( name == "txtNodeHeight" ) { data.m_Command = CMD_NODE_RESIZE; data.m_Index = iCurrentNode; string ss = param; char str[128]; strcpy( str, ss.c_str() ); char *s = str; double dx = node->getLength(); double dy = node->getWidth(); double dz = Parse::parseFirstDouble( &s ); data.m_Size = VecPosition( dx, dy, dz ); } else if( name == "txtNodeParent" ) { data.m_Command = CMD_NODE_REPARRENT; data.m_Index = iCurrentNode; data.m_Name = param; } else if( name == "txtNodeMass" ) { data.m_Command = CMD_NODE_MASS; data.m_Index = iCurrentNode; string ss = param; char str[128]; strcpy( str, ss.c_str() ); char *s = str; double dw = Parse::parseFirstDouble( &s ); data.m_Mass = dw; } } else if( name == "txtJointParent" || name == "txtJointChild" || name == "txtJointAnchorX" || name == "txtJointAnchorY" || name == "txtJointAnchorZ"|| name == "txtJointMotor1" || name == "txtJointMotor2" || name == "txtJointPerceptor" || name == "txtJointEffector" || name == "txtJointAxis1X" || name == "txtJointAxis1Y" || name == "txtJointAxis1Z" || name == "txtJointAxis1X" || name == "txtJointAxis1X" || name == "txtJointAxis1X" ) { const int iCurrentJoint = GetCurrentJointIndex(); const TSceneJoint * joint; if( iCurrentJoint == -1 || (joint = RubySceneGraph->getJoint(iCurrentJoint)) == NULL ) { cerr << "OnEntryChange: No joint selected" << endl; return; } /// Joint widgets if( name == "txtJointParent" ) { data.m_Index = GetCurrentJointIndex(); data.m_Command = CMD_JOINT_REPARRENT; data.m_Name = param; } else if( name == "txtJointChild" ) { data.m_Index = iCurrentJoint; data.m_Command = CMD_JOINT_RECHILD; data.m_Name = param; } else if( name == "txtJointAnchorX" ) { data.m_Command = CMD_JOINT_ANCHOR; data.m_Index = iCurrentJoint; char str[128]; strcpy( str, param.c_str() ); char *s = str; double dx = Parse::parseFirstDouble( &s ); double dy = joint->getAnchor().getY(); double dz = joint->getAnchor().getZ(); data.m_Position = VecPosition( dx, dy, dz ); } else if( name == "txtJointAnchorY" ) { data.m_Command = CMD_JOINT_ANCHOR; data.m_Index = iCurrentJoint; char str[128]; strcpy( str, param.c_str() ); char *s = str; double dx = joint->getAnchor().getX(); double dy = Parse::parseFirstDouble( &s ); double dz = joint->getAnchor().getZ(); data.m_Position = VecPosition( dx, dy, dz ); } else if( name == "txtJointAnchorZ" ) { data.m_Command = CMD_JOINT_ANCHOR; data.m_Index = iCurrentJoint; char str[128]; strcpy( str, param.c_str() ); char *s = str; double dx = joint->getAnchor().getX(); double dy = joint->getAnchor().getY(); double dz = Parse::parseFirstDouble( &s ); data.m_Position = VecPosition( dx, dy, dz ); } else if( name == "txtJointMotor1" ) { data.m_Command = CMD_JOINT_MOTOR; data.m_Index = iCurrentJoint; char str[128]; strcpy( str, param.c_str() ); char *s = str; data.m_Force = Parse::parseFirstDouble( &s ); data.m_Number = 1; } else if( name == "txtJointMotor2" ) { data.m_Command = CMD_JOINT_MOTOR; data.m_Index = iCurrentJoint; char str[128]; strcpy( str, param.c_str() ); char *s = str; data.m_Force = Parse::parseFirstDouble( &s ); data.m_Number = 2; } else if( name == "txtJointPerceptor" ) { data.m_Command = CMD_JOINT_PERCEPTOR; data.m_Index = iCurrentJoint; data.m_Name = param; } else if( name == "txtJointEffector" ) { data.m_Command = CMD_JOINT_EFFECTOR; data.m_Index = iCurrentJoint; data.m_Name = param; } else if( name == "txtJointAxis1X" ) { data.m_Command = CMD_JOINT_ANCHOR; data.m_Index = iCurrentJoint; data.m_Number = 0; char str[128]; strcpy( str, param.c_str() ); char *s = str; double dx = Parse::parseFirstDouble( &s ); double dy = joint->getAnchor().getY(); double dz = joint->getAnchor().getZ(); data.m_Position = VecPosition( dx, dy, dz ); } else if( name == "txtJointAxis1Y" ) { data.m_Command = CMD_JOINT_AXIS; data.m_Index = iCurrentJoint; data.m_Number = 0; char str[128]; strcpy( str, param.c_str() ); char *s = str; double dx = joint->getAnchor().getX(); double dy = Parse::parseFirstDouble( &s ); double dz = joint->getAnchor().getZ(); data.m_Position = VecPosition( dx, dy, dz ); } else if( name == "txtJointAxis1Z" ) { data.m_Command = CMD_JOINT_AXIS; data.m_Index = iCurrentJoint; data.m_Number = 0; char str[128]; strcpy( str, param.c_str() ); char *s = str; double dx = joint->getAnchor().getX(); double dy = joint->getAnchor().getY(); double dz = Parse::parseFirstDouble( &s ); data.m_Position = VecPosition( dx, dy, dz ); } else if( name == "txtJointAxis2X" ) { data.m_Command = CMD_JOINT_AXIS; data.m_Index = iCurrentJoint; data.m_Number = 1; char str[128]; strcpy( str, param.c_str() ); char *s = str; double dx = Parse::parseFirstDouble( &s ); double dy = joint->getAnchor().getY(); double dz = joint->getAnchor().getZ(); data.m_Position = VecPosition( dx, dy, dz ); } else if( name == "txtJointAxis2Y" ) { data.m_Command = CMD_JOINT_AXIS; data.m_Index = iCurrentJoint; data.m_Number = 1; char str[128]; strcpy( str, param.c_str() ); char *s = str; double dx = joint->getAnchor().getX(); double dy = Parse::parseFirstDouble( &s ); double dz = joint->getAnchor().getZ(); data.m_Position = VecPosition( dx, dy, dz ); } else if( name == "txtJointAxis2Z" ) { data.m_Command = CMD_JOINT_AXIS; data.m_Index = iCurrentJoint; data.m_Number = 1; char str[128]; strcpy( str, param.c_str() ); char *s = str; double dx = joint->getAnchor().getX(); double dy = joint->getAnchor().getY(); double dz = Parse::parseFirstDouble( &s ); data.m_Position = VecPosition( dx, dy, dz ); } } else /// Not a node, not a joint, What may be this widget?! :-) { cerr << "OnTextBoxChange: Unknown textbox widget signal: '" << name << "'" << endl; return; } UpdateLists( data );}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -