void ColorMapEditor::setColorMap(const QwtLinearColorMap& map) { scaleColorsBox->setChecked(map.mode() == QwtLinearColorMap::ScaledColors); QwtArray <double> colors = map.colorStops(); int rows = (int)colors.size(); table->setRowCount(rows); table->blockSignals(true); for (int i = 0; i < rows; i++) { QwtDoubleInterval range = QwtDoubleInterval(min_val, max_val); double val = min_val + colors[i] * range.width(); QTableWidgetItem *it = new QTableWidgetItem(QString::number(val)); table->setItem(i, 0, it); QColor c = QColor(map.rgb(QwtDoubleInterval(0, 1), colors[i])); it = new QTableWidgetItem(c.name()); it->setFlags(Qt::ItemFlags(!Qt::ItemIsEditable)); it->setBackground(QBrush(c)); it->setForeground(QBrush(c)); table->setItem(i, 1, it); } table->blockSignals(false); color_map = map; }
QString ColorMapEditor::saveToXmlString(const QwtLinearColorMap &color_map) { QString s = "<ColorMap>\n"; s += "\t<Mode>" + QString::number(color_map.mode()) + "</Mode>\n"; s += "\t<MinColor>" + color_map.color1().name() + "</MinColor>\n"; s += "\t<MaxColor>" + color_map.color2().name() + "</MaxColor>\n"; QwtArray<double> colors = color_map.colorStops(); int stops = (int)colors.size(); s += "\t<ColorStops>" + QString::number(stops - 2) + "</ColorStops>\n"; for (int i = 1; i < stops - 1; i++) { s += "\t<Stop>" + QString::number(colors[i]) + "\t"; s += QColor(color_map.rgb(QwtDoubleInterval(0, 1), colors[i])).name(); s += "</Stop>\n"; } return s += "</ColorMap>\n"; }
void ColorMapEditor::setColorMap(const QwtLinearColorMap& map) { scaleColorsBox->setChecked(map.mode() == QwtLinearColorMap::ScaledColors); QwtArray <double> colors = map.colorStops(); int rows = (int)colors.size(); table->setRowCount(rows); table->blockSignals(true); QwtDoubleInterval range = QwtDoubleInterval(min_val, max_val); for (int i = 0; i < rows; i++){ DoubleSpinBox *sb = new DoubleSpinBox(); sb->setLocale(d_locale); sb->setDecimals(d_precision); sb->setValue(min_val + colors[i] * range.width()); if (i == 0) sb->setRange(min_val, min_val); else if (i == rows -1) sb->setRange(max_val, max_val); else sb->setRange(min_val, max_val); connect(sb, SIGNAL(valueChanged(double)), this, SLOT(updateColorMap())); connect(sb, SIGNAL(activated(DoubleSpinBox *)), this, SLOT(spinBoxActivated(DoubleSpinBox *))); table->setCellWidget(i, 0, sb); QColor c = QColor(map.rgb(QwtDoubleInterval(0, 1), colors[i])); QTableWidgetItem *it = new QTableWidgetItem(c.name()); // Avoid compiler warning //#ifdef Q_CC_MSVC it->setFlags(it->flags() & (~Qt::ItemIsEditable)); //#else // it->setFlags(!Qt::ItemIsEditable); //#endif it->setBackground(QBrush(c)); it->setForeground(QBrush(c)); table->setItem(i, 1, it); } table->blockSignals(false); color_map = map; }
ValueBar( Qt::Orientation orientation, const QString &text, QWidget *parent, double value = 0.0 ): QWidget( parent ) { d_label = new QLabel( text, this ); d_label->setFont( QFont( "Helvetica", 10 ) ); d_thermo = new QwtThermo( this ); d_thermo->setOrientation( orientation ); d_thermo->setScale( 0.0, 100.0 ); d_thermo->setValue( value ); d_thermo->setFont( QFont( "Helvetica", 8 ) ); d_thermo->setPipeWidth( 6 ); d_thermo->setScaleMaxMajor( 6 ); d_thermo->setScaleMaxMinor( 5 ); d_thermo->setFillBrush( Qt::darkMagenta ); #if 0 QwtLinearColorMap *colorMap = new QwtLinearColorMap( Qt::blue, Qt::red ); colorMap->addColorStop( 0.2, Qt::yellow ); colorMap->addColorStop( 0.3, Qt::cyan ); colorMap->addColorStop( 0.4, Qt::green ); colorMap->addColorStop( 0.5, Qt::magenta ); colorMap->setMode( QwtLinearColorMap::FixedColors ); d_thermo->setColorMap( colorMap ); #endif QVBoxLayout *layout = new QVBoxLayout( this ); layout->setMargin( 0 ); layout->setSpacing( 0 ); if ( orientation == Qt::Horizontal ) { d_label->setAlignment( Qt::AlignCenter ); d_thermo->setScalePosition( QwtThermo::LeadingScale ); layout->addWidget( d_label ); layout->addWidget( d_thermo ); } else { d_label->setAlignment( Qt::AlignRight ); d_thermo->setScalePosition( QwtThermo::TrailingScale ); layout->addWidget( d_thermo, 10, Qt::AlignHCenter ); layout->addWidget( d_label, 0 ); } }
QWidget *WheelBox::createBox( Qt::Orientation orientation, int type ) { d_wheel = new QwtWheel(); d_wheel->setValue( 80 ); d_wheel->setWheelWidth( 20 ); d_wheel->setMass( 1.0 ); d_thermo = new QwtThermo(); if ( orientation == Qt::Horizontal ) { d_thermo->setOrientation( orientation, QwtThermo::TopScale ); d_wheel->setOrientation( Qt::Vertical ); } else { d_thermo->setOrientation( orientation, QwtThermo::LeftScale ); d_wheel->setOrientation( Qt::Horizontal ); } switch( type ) { case 0: { QwtLinearColorMap *colorMap = new QwtLinearColorMap(); colorMap->setColorInterval( Qt::blue, Qt::red ); d_thermo->setColorMap( colorMap ); break; } case 1: { QwtLinearColorMap *colorMap = new QwtLinearColorMap(); colorMap->setMode( QwtLinearColorMap::FixedColors ); int idx = 4; colorMap->setColorInterval( Qt::GlobalColor( idx ), Qt::GlobalColor( idx + 10 ) ); for ( int i = 1; i < 10; i++ ) { colorMap->addColorStop( i / 10.0, Qt::GlobalColor( idx + i ) ); } d_thermo->setColorMap( colorMap ); break; } case 2: { d_wheel->setRange( 10, 1000 ); d_wheel->setSingleStep( 1.0 ); d_thermo->setScaleEngine( new QwtLogScaleEngine ); d_thermo->setScaleMaxMinor( 10 ); d_thermo->setFillBrush( Qt::darkCyan ); d_thermo->setAlarmBrush( Qt::magenta ); d_thermo->setAlarmLevel( 500.0 ); d_wheel->setValue( 800 ); break; } case 3: { d_wheel->setRange( -1000, 1000 ); d_wheel->setSingleStep( 1.0 ); d_wheel->setPalette( QColor( "Tan" ) ); QwtLinearScaleEngine *scaleEngine = new QwtLinearScaleEngine(); scaleEngine->setTransformation( new QwtPowerTransform( 2 ) ); d_thermo->setScaleMaxMinor( 5 ); d_thermo->setScaleEngine( scaleEngine ); QPalette pal = palette(); pal.setColor( QPalette::Base, Qt::darkGray ); pal.setColor( QPalette::ButtonText, QColor( "darkKhaki" ) ); d_thermo->setPalette( pal ); break; } case 4: { break; } } d_thermo->setScale( d_wheel->minimum(), d_wheel->maximum() ); d_thermo->setValue( d_wheel->value() ); connect( d_wheel, SIGNAL( valueChanged( double ) ), d_thermo, SLOT( setValue( double ) ) ); QWidget *box = new QWidget(); QBoxLayout *layout; if ( orientation == Qt::Horizontal ) layout = new QHBoxLayout( box ); else layout = new QVBoxLayout( box ); layout->addWidget( d_thermo, Qt::AlignCenter ); layout->addWidget( d_wheel ); return box; }