Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030 #include <ros/ros.h>
00031
00032 #include <QLineEdit>
00033
00034 #include "rviz/properties/compound_widget_item.h"
00035 #include "rviz/properties/property.h"
00036 #include "rviz/properties/property_tree_widget.h"
00037
00038 namespace rviz
00039 {
00040
00041 CompoundWidgetItem::CompoundWidgetItem( PropertyBase* property,
00042 const std::string& label,
00043 bool editable )
00044 : PropertyWidgetItem( property, label, editable )
00045 {
00046 }
00047
00050 void CompoundWidgetItem::updateText()
00051 {
00052 if( childCount() > 0 )
00053 {
00054 QString new_text = child( 0 )->data( 1, Qt::UserRole ).toString();
00055
00056 for( int i = 1; i < childCount(); i++ )
00057 {
00058 new_text += "; " + child( i )->data( 1, Qt::UserRole ).toString();
00059 }
00060
00061 bool ign = getProperty()->getPropertyTreeWidget()->setIgnoreChanges( true );
00062 setText( 1, new_text );
00063 setData( 1, Qt::UserRole, new_text );
00064 getProperty()->getPropertyTreeWidget()->setIgnoreChanges( ign );
00065 }
00066 }
00067
00070 bool CompoundWidgetItem::setModelData( QWidget* editor )
00071 {
00072 QLineEdit* line_edit = qobject_cast<QLineEdit *>( editor );
00073 ROS_ASSERT( line_edit );
00074
00075 if( !line_edit->isModified() )
00076 {
00077 return true;
00078 }
00079
00080 bool ign = getProperty()->getPropertyTreeWidget()->setIgnoreChanges( true );
00081
00082 QStringList texts = line_edit->text().split( QRegExp( "\\s*;\\s*" ));
00083 for( int i = 0; i < childCount() && i < texts.size(); i++ )
00084 {
00085 QVariant orig_data = child( i )->data( 1, Qt::UserRole );
00086 QVariant new_data = texts.at( i );
00087 new_data.convert( orig_data.type() );
00088 child( i )->setData( 1, Qt::UserRole, new_data );
00089 child( i )->setText( 1, new_data.toString() );
00090 }
00091
00092 getProperty()->getPropertyTreeWidget()->setIgnoreChanges( ign );
00093
00094 emitDataChanged();
00095
00096 return true;
00097 }
00098
00099 }