Signals | Public Member Functions | Protected Member Functions

QmitkPopupColorChooser Class Reference
[Widgets]

#include <QmitkColorPropertyEditor.h>

List of all members.

Signals

void colorSelected (QColor)
 Call to popup this widget. parent determines popup position.

Public Member Functions

 QmitkPopupColorChooser (QWidget *parent=0, unsigned int steps=16, unsigned int size=150)
virtual ~QmitkPopupColorChooser ()
void setSteps (int)
virtual void popup (QWidget *parent, const QPoint &point, const mitk::Color *=0)

Protected Member Functions

virtual void keyReleaseEvent (QKeyEvent *)
virtual void mouseMoveEvent (QMouseEvent *)
virtual void mouseReleaseEvent (QMouseEvent *)
virtual void closeEvent (QCloseEvent *)
virtual void paintEvent (QPaintEvent *)
void drawGradient (QPainter *p)

Detailed Description

Definition at line 28 of file QmitkColorPropertyEditor.h.


Constructor & Destructor Documentation

QmitkPopupColorChooser::QmitkPopupColorChooser ( QWidget *  parent = 0,
unsigned int  steps = 16,
unsigned int  size = 150 
)

Definition at line 29 of file QmitkColorPropertyEditor.cpp.

References setSteps(), and TRUE.

: QFrame (parent, Qt::WindowStaysOnTopHint | Qt::FramelessWindowHint | Qt::Tool | Qt::X11BypassWindowManagerHint),
  my_parent(parent)
{
  setSteps(steps);
  
  setLineWidth(2);
  setMouseTracking ( TRUE );
  
  //setMargin(0);
  //setAutoMask( FALSE );
  setFrameStyle ( QFrame::Panel | QFrame::Raised );
  setLineWidth( 1 );
  ensurePolished();
  resize(size, size);

  hide();
}
QmitkPopupColorChooser::~QmitkPopupColorChooser (  ) [virtual]

Definition at line 48 of file QmitkColorPropertyEditor.cpp.

{
}

Member Function Documentation

void QmitkPopupColorChooser::closeEvent ( QCloseEvent *  e ) [protected, virtual]

Definition at line 116 of file QmitkColorPropertyEditor.cpp.

{
  e->accept ();

  releaseKeyboard();
  releaseMouse();

  if (!m_popupParent) return;

  // remember that we (as a popup) might recieve the mouse release
  // event instead of the popupParent. This is due to the fact that
  // the popupParent popped us up in its mousePressEvent handler. To
  // avoid the button remaining in pressed state we simply send a
  // faked mouse button release event to it.
  // Maleike: parent should not pop us on MouseRelease!
  QMouseEvent  me( QEvent::MouseButtonRelease, QPoint(0,0), QPoint(0,0), Qt::LeftButton, Qt::NoButton, Qt::NoModifier);
  QApplication::sendEvent ( m_popupParent, &me );
}
void QmitkPopupColorChooser::colorSelected ( QColor   ) [signal]

Call to popup this widget. parent determines popup position.

Referenced by keyReleaseEvent(), and mouseMoveEvent().

void QmitkPopupColorChooser::drawGradient ( QPainter *  p ) [protected]

Definition at line 218 of file QmitkColorPropertyEditor.cpp.

Referenced by paintEvent().

{
  p->setWindow( 0, 0, m_Steps-1, m_Steps );       // defines coordinate system
  p->setPen( Qt::NoPen ); 

  QColor c;
  for ( unsigned int h = 0; h < m_Steps; ++h )
  {
    for ( unsigned int v = 1; v < m_Steps2; ++v )
    {                
      c.setHsv( h*m_HStep, 255, v*m_VStep );             // rainbow effect
      p->setBrush( c );                  // solid fill with color c
      p->drawRect( v-1, h, m_Steps2, m_Steps );         // draw the rectangle
    }
    for ( unsigned int s = 0; s < m_Steps2; ++s )
    {                
      c.setHsv( h*m_HStep, 255 - s*m_SStep, 255 );             // rainbow effect
      p->setBrush( c );                  // solid fill with color c
      p->drawRect( m_Steps2+s-1, h, m_Steps2, m_Steps );         // draw the rectangle
    }
  }
}
void QmitkPopupColorChooser::keyReleaseEvent ( QKeyEvent *   ) [protected, virtual]

Definition at line 61 of file QmitkColorPropertyEditor.cpp.

References colorSelected().

{
  emit colorSelected( m_OriginalColor );
  close();
}
void QmitkPopupColorChooser::mouseMoveEvent ( QMouseEvent *  e ) [protected, virtual]

Definition at line 67 of file QmitkColorPropertyEditor.cpp.

References colorSelected(), and int().

{  
  double x(e->pos().x());
  double y(e->pos().y());
  x /= width();
  
  if ( x >= 0.0 ) 
  {
    //x = (int)(x / (1.0/m_Steps)) * (1.0/m_Steps); // div stepsize * stepsize
    x = (int)(x * (float)(m_Steps-1)) / (float)(m_Steps-1); // same as above
    if (x > 1.0) x = 1.0;
    if (x < 0.0) x = 0.0;
  }
  
  y /= height();
  if (y >= 1.0) y = 0.9;
  if (y < 0.0) y = 0.0;
  y = (int)(y * (float)m_Steps) / (float)m_Steps;

  m_H = static_cast<int>( y * 359.0 );
  if ( x >= 0.5 )
  {
    m_S = static_cast<int>( (1.0 - x) * 511.0 );
    if ( m_S > 255 ) m_S = 255;
    m_V = 255;
  }
  else
  {
    m_S = 255;
    if ( x < 0.0 )
      m_V = 0;
    else
    {
      m_V = static_cast<int>( x * 511.0 + 511.0 / (float)(m_Steps-1) );
      if ( m_V > 255 ) m_V = 255;
    }
  }

  QColor color;
  color.setHsv(m_H, m_S, m_V);

  emit colorSelected( color );
}
void QmitkPopupColorChooser::mouseReleaseEvent ( QMouseEvent *   ) [protected, virtual]

Definition at line 111 of file QmitkColorPropertyEditor.cpp.

{
  close ();
}
void QmitkPopupColorChooser::paintEvent ( QPaintEvent *   ) [protected, virtual]

Definition at line 212 of file QmitkColorPropertyEditor.cpp.

References drawGradient().

{
  QPainter painter(this);
  drawGradient( &painter );
}
void QmitkPopupColorChooser::popup ( QWidget *  parent,
const QPoint &  point,
const mitk::Color color = 0 
) [virtual]

Definition at line 135 of file QmitkColorPropertyEditor.cpp.

References int().

Referenced by QmitkColorPropertyEditor::mousePressEvent().

{
  m_popupParent = parent;
  if (m_popupParent)
  {
    QPoint newPos;

    if (color)
    {
      QColor qcolor( (int)((*color)[0] * 255.0) , (int)((*color)[1] * 255.0) , (int)((*color)[2] * 255.0) );
      int h,s,v;
      qcolor.getHsv(&h, &s, &v);
      
      if ( h == -1 ) // set by Qt if color is achromatic ( but this widget does not display grays )
        h = 10;  // red

      int x, y;
      float cellwidth = (float)width() / (float)(m_Steps);

      if ( s > v ) // restrict to the colors we can display
      {  // left side, ramp from v = 255/m_Steps to v = 255
        s = 255;
        x = (int)(
           (
             ((float)v / 255.0)      
            *
             ((float)m_Steps2)
            -
             1.0
           )
          *
           cellwidth
          + cellwidth/2
          );
      }
      else
      {
        v = 255;
        x = (int)(
           (
             (1.0 - ((float)s / 255.0))      
            *
             ((float)m_Steps2)
           )
          *
           cellwidth
          + cellwidth/2
          
          + width() / 2
          );
      }

      y = (int)( (float)h/360.0 * (float)m_Steps * cellwidth );
   
      m_OriginalColor.setHsv(h,s,v);
      
      // move to color
      newPos.setX( point.x() - x );
      newPos.setY( point.y() - y );
    }
    else
    {
      // center widget
      m_OriginalColor.setHsv(-1, 0, 0);

      newPos.setX( point.x() - width() / 2 );
      newPos.setY( point.y() - height() / 2 );
    }
    move ( m_popupParent->mapToGlobal( newPos ) );
  }
  
  show();
  raise();
  grabMouse();
  grabKeyboard();
}
void QmitkPopupColorChooser::setSteps ( int  steps )

Definition at line 52 of file QmitkColorPropertyEditor.cpp.

Referenced by QmitkPopupColorChooser().

{
  m_Steps = steps;
  m_Steps2 = m_Steps / 2;
  m_HStep = 360 / m_Steps;
  m_SStep = 512 / m_Steps;
  m_VStep = 512 / m_Steps;
}

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