param_edit.cpp
Go to the documentation of this file.
00001 #include "rosgui_paramedit/param_edit.h"
00002 #include <pluginlib/class_list_macros.h>
00003 #include <QMessageBox>
00004 #include "param_root_chooser.h"
00005  
00006 PLUGINLIB_DECLARE_CLASS(rosgui_paramedit, ParamEdit, rosgui_paramedit::ParamEdit, rqt_gui_cpp::Plugin)
00007 
00008 namespace rosgui_paramedit
00009 {
00010 
00011 ParamEdit::ParamEdit() : _treeView(NULL), _model(NULL), _delegate(NULL)
00012 {
00013     setObjectName("ParamEdit");
00014 }
00015 
00016 void ParamEdit::initPlugin(qt_gui_cpp::PluginContext& context)
00017 {
00018     _treeView = new QTreeView();
00019     context.addWidget(_treeView);
00020 
00021     _paramRoot = "/";
00022 
00023     _delegate = new XmlRpcItemDelegate(_treeView);
00024     _treeView->setItemDelegate(_delegate);
00025 
00026     reload();
00027 }
00028 
00029 void ParamEdit::reload()
00030 {
00031     if(!_nh.getParam(_paramRoot, _xmlrpc)) {
00032         ROS_ERROR("Could not get parameters at: \"%s\"", _paramRoot.c_str());
00033         QMessageBox::critical(_treeView, "Error loading parameters",
00034                 QString("Could not get parameters at: \"%1\"").arg(_paramRoot.c_str()));
00035 
00036         return;
00037     } else if(_xmlrpc.getType() != XmlRpc::XmlRpcValue::TypeStruct) {
00038         ROS_ERROR("Requested parameter at \"%s\" has non-struct type. Only structs are supported, not single parameters.", _paramRoot.c_str());
00039         QMessageBox::critical(_treeView, "Error loading parameters",
00040                 QString("Requested parameter at \"%1\" has non-struct type. Only structs are supported, not single parameters.\nMaybe, you want to choose the parent containing the selected parameter.").arg(_paramRoot.c_str()));
00041 
00042         // we have now loaded a parameter that can't be interpreted by the model.
00043         // Try to fix that inconsistency somehow by loading from '/' until the user clears this up
00044         _paramRoot = "/";
00045         _nh.getParam(_paramRoot, _xmlrpc);
00046     }
00047 
00048     delete _model;
00049     _model = new XmlRpcModel(&_xmlrpc, _paramRoot, &_nh);
00050     _treeView->setModel(_model);
00051 }
00052 
00053 void ParamEdit::shutdownPlugin()
00054 {
00055 }
00056 
00057 void ParamEdit::saveSettings(qt_gui_cpp::Settings& global_settings, qt_gui_cpp::Settings& perspective_settings) const
00058 {
00059     perspective_settings.setValue("param_root", _paramRoot.c_str());
00060 }
00061 
00062 void ParamEdit::restoreSettings(const qt_gui_cpp::Settings& global_settings, const qt_gui_cpp::Settings& perspective_settings)
00063 {
00064     _paramRoot = qPrintable(perspective_settings.value("param_root", "/").toString());
00065     reload();
00066 }
00067 
00068 void ParamEdit::triggerConfiguration()
00069 {
00070     ParamRootChooser dialog;
00071     if(dialog.exec() == QDialog::Accepted) {
00072         if(dialog.selectedParamRoot().empty()) {
00073             ROS_ERROR("ParamRootChooser Accepted, but no valid parameter chosen.");
00074         } else {
00075             _paramRoot = dialog.selectedParamRoot();
00076             reload();
00077         }
00078     }
00079 }
00080 
00081 }
00082 
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Properties Friends


rosgui_paramedit
Author(s): Christian Dornhege
autogenerated on Wed Dec 26 2012 16:28:44