All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Defines
Signals | Public Member Functions | Protected Member Functions
SciFigs::PaletteTable Class Reference

#include <PaletteTable.h>

List of all members.

Signals

void changed ()

Public Member Functions

ColorPalette palette () const
 PaletteTable (QWidget *parent=0)
void setColorCount (int newNumber)
void setColors (const ColorPalette &pal)
void setConstant (bool c)
void setValues (const ColorPalette &pal)
double value (int i) const

Protected Member Functions

virtual void resizeEvent (QResizeEvent *e)

Constructor & Destructor Documentation

SciFigs::PaletteTable::PaletteTable ( QWidget *  parent = 0)

References QGpGuiTools::setWidgetColor(), and TRACE.

                                          :
    QScrollArea(parent)
{
  TRACE;
  setWidgetColor(viewport(), Qt::gray);
  setWidget(new QWidget(this) );
}

Member Function Documentation

void SciFigs::PaletteTable::changed ( ) [signal]

Referenced by setColorCount(), setColors(), and setValues().

References QGpGuiTools::ColorPalette::allocate(), QGpGuiTools::ColorPalette::setColor(), QGpGuiTools::ColorPalette::setUpperValue(), and TRACE.

Referenced by setConstant().

{
  TRACE;
  ColorPalette pal;
  int n=_colors.count();
  pal.allocate(n);

  double val, lastVal=0;
  bool ok;
  pal.setColor(0, _colors.first()->color());
  for(int i=1;i < n;i++ ) {
    val=_values.at(i-1)->text().toDouble(&ok);
    if( !ok) val=lastVal + 1;
    pal.setUpperValue(i - 1, val);
    pal.setColor(i, _colors.at(i)->color());
    lastVal=val;
  }
  return pal;
}
void SciFigs::PaletteTable::resizeEvent ( QResizeEvent *  e) [protected, virtual]

References TRACE, and w.

{
  TRACE;
  QScrollArea::resizeEvent(e);
  int nCol=_colors.count();
  int w=viewport() ->width();
  if(w < 160) w=160;
  widget() ->resize(w, nCol * 29 + 10);
  nCol--;
  for(int iCol=0;iCol < nCol;iCol++ ) {
    _values.at(iCol) ->resize(w - 106, 23);
  }
}
void SciFigs::PaletteTable::setColorCount ( int  newNumber)

References changed(), QGpGuiTools::ColorButton::color(), QGpGuiTools::ColorButton::setColor(), TRACE, and w.

Referenced by setColors(), and setValues().

{
  TRACE;
  if(newNumber < 2) newNumber=2;
  int w=viewport() ->width();
  if(w < 160) w=160;
  widget() ->resize(w, 10 + newNumber * 29);

  int colorNumber=_colors.count();
  QLineEdit * lastEdit=0;
  ColorButton * lastButton=0;
  ColorButton * pb;
  QLineEdit * le;
  QString lastValue="0.0";
  QColor lastColor=Qt::red;
  if(colorNumber > 1) {
    lastButton=_colors.last();
    lastEdit=_values.last();
    lastColor=lastButton->color();
    lastValue=lastEdit->text();
  } else {
    //add first color to initialize widget list
    pb=new ColorButton(widget());
    pb->setGeometry(10, 10, 80, 23);
    pb->setColor(Qt::red);
    pb->setText( "1" );
    connect(pb, SIGNAL(colorChanged(QColor)), this, SIGNAL(changed()) );
    colorNumber=1;
    lastButton=pb;
    pb->show();
    _colors.append(pb);
  }
  if(newNumber > colorNumber) {
    // need to add (newNumber-colorNumber) colors (lineedit & pushbutton) to the viewport
    for(int i=colorNumber;i < newNumber;i++ ) {
      le=new QLineEdit(widget());
      le->setAlignment(Qt::AlignRight);
      le->setGeometry(96, i * 29 - 5, w - 106, 23);
      le->setText(lastValue);
      if(lastEdit) setTabOrder(lastEdit, le);
      lastEdit=le;
      connect(le, SIGNAL(textChanged( const QString& )), this, SIGNAL(changed()) );
      le->show();
      _values.append(le);

      pb=new ColorButton(widget());
      pb->setGeometry(10, 10 + i * 29, 80, 23);
      pb->setColor(lastColor);
      pb->setText(QString::number(i+1));
      connect(pb, SIGNAL(colorChanged(QColor)), this, SIGNAL(changed()) );
      setTabOrder(lastButton, pb);
      lastButton=pb;
      pb->show();
      _colors.append(pb);
    }
    emit changed();
  } else if(newNumber < colorNumber) {
    // need to remove (colorNumber-newNumber) colors (lineedit & pushbutton) from the viewport
    for(int i=colorNumber - 1;i >= newNumber;i-- ) {
      delete _colors.at(i);
      _colors.removeAt(i);
      delete _values.at(i - 1);
      _values.removeAt(i - 1);
    }
    _values.last()->setText(lastValue);
    _colors.last()->setColor(lastColor);
    emit changed();
  }
}

References changed(), QGpGuiTools::ColorPalette::color(), QGpGuiTools::ColorPalette::count(), setColorCount(), and TRACE.

{
  TRACE;
  int ncolors=pal.count();
  setColorCount(ncolors);
  for(int i=0;i < ncolors;i++ )
    _colors.at(i)->setColor(pal.color(i) );
  emit changed();
}

Linked to properties: if c is true, the palette is the same for all palette widgets controled by this table. This is just a visual effect.

TODO: check whether it works.

References palette(), and QGpGuiTools::ColorPalette::setColor().

{
  QPalette palette;
  palette.setColor(QPalette::Window, c ? Qt::gray : QColor(164,112,128));
  viewport()->setPalette(palette);
}

References changed(), QGpGuiTools::ColorPalette::count(), setColorCount(), TRACE, and QGpGuiTools::ColorPalette::upperValue().

{
  TRACE;
  int ncolors=pal.count();
  setColorCount(ncolors);
  for(int i=ncolors - 2;i >=0;i-- )
    _values.at(i)->setText(QString::number(pal.upperValue(i) ));
  emit changed();
}
double SciFigs::PaletteTable::value ( int  i) const

References TRACE.

{
  TRACE;
  bool ok;
  if(i<0) return i=0;
  else if(i>=_values.count()) {
    i=_values.count()-1;
    if(i<0) return 0.0;
  }
  double val=_values.at(i)->text().toDouble(&ok);
  if( !ok) val=0;
  return val;
}

The documentation for this class was generated from the following files:
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Defines