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 <QPainter>
00031 #include <QStringList>
00032 #include <QStyleOptionViewItem>
00033
00034 #include "rviz/properties/parse_color.h"
00035 #include "rviz/properties/color_property.h"
00036 #include "rviz/properties/color_editor.h"
00037
00038 namespace rviz
00039 {
00040
00041 ColorProperty::ColorProperty( const QString& name,
00042 const QColor& default_value,
00043 const QString& description,
00044 Property* parent,
00045 const char *changed_slot,
00046 QObject* receiver )
00047 : Property( name, QVariant(), description, parent, changed_slot, receiver )
00048 , color_( default_value )
00049 {
00050 updateString();
00051 }
00052
00053 bool ColorProperty::setColor( const QColor& new_color )
00054 {
00055 if( new_color != color_ ) {
00056 Q_EMIT aboutToChange();
00057 color_ = new_color;
00058 updateString();
00059 Q_EMIT changed();
00060 return true;
00061 }
00062 return false;
00063 }
00064
00065 bool ColorProperty::setValue( const QVariant& new_value )
00066 {
00067 if( new_value.type() == QVariant::Color )
00068 {
00069 return setColor( new_value.value<QColor>() );
00070 }
00071
00072 QColor new_color = parseColor( new_value.toString() );
00073 if( new_color.isValid() )
00074 {
00075 return setColor( new_color );
00076 }
00077 return false;
00078 }
00079
00080 void ColorProperty::updateString()
00081 {
00082 value_ = printColor( color_ );
00083 }
00084
00085 bool ColorProperty::paint( QPainter * painter,
00086 const QStyleOptionViewItem & option ) const
00087 {
00088 QString text = value_.toString();
00089 QRect rect = option.rect;
00090 ColorEditor::paintColorBox( painter, rect, color_ );
00091 rect.adjust( rect.height() + 1, 1, 0, 0 );
00092 painter->drawText( rect, text );
00093
00094 return true;
00095 }
00096
00097 QWidget *ColorProperty::createEditor( QWidget* parent,
00098 const QStyleOptionViewItem& option )
00099 {
00100 ColorEditor* editor = new ColorEditor( this, parent );
00101 editor->setFrame( false );
00102 return editor;
00103 }
00104
00105 }