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 <stdio.h>
00031
00032 #include "rviz/properties/property_tree_model.h"
00033
00034 #include "rviz/properties/status_list.h"
00035
00036 namespace rviz
00037 {
00038
00039 StatusList::StatusList( const QString& name, Property* parent )
00040 : StatusProperty( "", "", Ok, parent )
00041 {
00042 setName( name );
00043 setShouldBeSaved( false );
00044 }
00045
00046 void StatusList::setName( const QString& name )
00047 {
00048 name_prefix_ = name;
00049 updateLabel();
00050 }
00051
00052 void StatusList::setStatus( Level level, const QString& name, const QString& text )
00053 {
00054 QHash<QString, StatusProperty*>::iterator child_iter = status_children_.find( name );
00055 StatusProperty* child;
00056 if( child_iter == status_children_.end() )
00057 {
00058 child = new StatusProperty( name, text, level, this );
00059 status_children_.insert( name, child );
00060 }
00061 else
00062 {
00063 child = child_iter.value();
00064 child->setLevel( level );
00065 child->setValue( text );
00066 }
00067 if( level > level_ )
00068 {
00069 setLevel( level );
00070 }
00071 else if( level < level_ )
00072 {
00073 updateLevel();
00074 }
00075 }
00076
00077 void StatusList::deleteStatus( const QString& name )
00078 {
00079 StatusProperty* child = status_children_.take( name );
00080 if( child )
00081 {
00082 delete child;
00083 updateLevel();
00084 }
00085 }
00086
00087 void StatusList::clear()
00088 {
00089 int num_rows = numChildren();
00090 if( num_rows > 0 )
00091 {
00092 QList<StatusProperty*> to_be_deleted = status_children_.values();
00093
00094 status_children_.clear();
00095
00096
00097
00098
00099
00100 for( int i = 0; i < to_be_deleted.size(); i++ )
00101 {
00102 delete to_be_deleted[ i ];
00103 }
00104 }
00105 setLevel( Ok );
00106 }
00107
00108 void StatusList::updateLevel()
00109 {
00110 Level new_level = Ok;
00111
00112 QHash<QString, StatusProperty*>::iterator iter;
00113 for( iter = status_children_.begin(); iter != status_children_.end(); iter++ )
00114 {
00115 Level child_level = iter.value()->getLevel();
00116 if( child_level > new_level )
00117 {
00118 new_level = child_level;
00119 }
00120 }
00121 setLevel( new_level );
00122 }
00123
00124 void StatusList::setLevel( Level new_level )
00125 {
00126 StatusProperty::setLevel( new_level );
00127 updateLabel();
00128 }
00129
00130 void StatusList::updateLabel()
00131 {
00132 StatusProperty::setName( name_prefix_ + ": " + statusWord( getLevel() ));
00133 }
00134
00135 }