All pastes #131658 Raw Edit

Miscellany

public text v1 · immutable
#131658 ·published 2006-08-14 16:23 UTC
rendered paste body
/* This file is part of the KDE libraries
    Copyright (C) 2006 Matthias Lechner < matthias at LMME.de >

    This library is free software; you can redistribute it and/or
    modify it under the terms of the GNU Library General Public
    License version 2 as published by the Free Software Foundation.

    This library is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    Library General Public License for more details.

    You should have received a copy of the GNU Library General Public License
    along with this library; see the file COPYING.LIB.  If not, write to
    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
    Boston, MA 02110-1301, USA.
*/

#ifndef KSTEPLIST_H
#define KSTEPLIST_H

#include "kdialog.h"

#include <QWidget>

/**
 * A class that represents a step list consisting of KSingleSteps
 *
 * @author Matthias Lechner <matthias@LMME.de>
 **/

class KDEUI_EXPORT KStepList : public QWidget {
    Q_OBJECT
  public:
    KStepList( QWidget *parent );
    ~KStepList();
    
    void appendStep( const QString stepDescription );

  protected:
    virtual void paintEvent( QPaintEvent *pe );
    virtual QSize sizeHint () const;
    virtual QSize minimumSizeHint () const;
    virtual QSizePolicy sizePolicy() const;

  private:
    class KStepListPrivate;
    KStepListPrivate *d;
};

#endif





/* This file is part of the KDE libraries
    Copyright (C) 2006 Matthias Lechner < matthias at LMME.de >

    This library is free software; you can redistribute it and/or
    modify it under the terms of the GNU Library General Public
    License version 2 as published by the Free Software Foundation.

    This library is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    Library General Public License for more details.

    You should have received a copy of the GNU Library General Public License
    along with this library; see the file COPYING.LIB.  If not, write to
    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
    Boston, MA 02110-1301, USA.
*/

#include "ksteplist.moc"

#include <QList>
#include <QPainter>
#include <QColor>

#include <QLabel>
#include <QTime>
#include <QMessageBox>

class KStepList::KStepListPrivate
{
  public:
    QList<QString> m_stepList;
    int m_minimumWidth;
};

KStepList::KStepList( QWidget *parent )
  : QWidget(parent), d(new KStepListPrivate)
{
  d->m_minimumWidth = 0;
  setSizePolicy( QSizePolicy::Minimum, QSizePolicy::Fixed );
}

KStepList::~KStepList()
{
  delete d;
}

void KStepList::appendStep( const QString stepDescription )
{
  d->m_stepList.append( stepDescription );
  repaint();
}

void KStepList::paintEvent( QPaintEvent * )
{
  QPainter painter( this );
  painter.setRenderHint(QPainter::Antialiasing);

  // detect how much space is left between the steps
  int minimumWidth = 0;
  for (int i=0; i< d->m_stepList.size(); i++)
  {
    QRect textRect = painter.boundingRect ( 0, 60, 0, 0, Qt::AlignLeft, d->m_stepList.at(i) );
    minimumWidth += textRect.width();
  }
  
  d->m_minimumWidth = minimumWidth;

  int space = ( this->window()->width() - minimumWidth ) / ( d->m_stepList.size() - 1 ) ;

  // First steps gets drawn at x-pos 20, y-pos 10
  painter.translate( 20, 10 );

  for (int i = 0; i < d->m_stepList.size(); i++) 
  {
    // draw description text
    painter.setPen( Qt::black );
    QRect textRect = painter.boundingRect ( 0, 60, 0, 0, Qt::AlignLeft, d->m_stepList.at(i) );
    painter.drawText( textRect, Qt::AlignLeft, d->m_stepList.at(i) );

    minimumWidth += textRect.width();

    // draw step rectangle
    painter.setPen( Qt::white );
    int posCenterText = textRect.width()/2;
    QRect rect( posCenterText - 20, 0, 40, 40 );

    QColor rectFillColor(255, 176, 17);
    QBrush rectBrush( rectFillColor );

    painter.setBrush( rectBrush );
    painter.drawRect( rect );

    // draw step number on step rectangle
    QString stepNumber;
    stepNumber.setNum( i + 1 );
    QRect neededRectInner = painter.boundingRect ( rect, Qt::AlignCenter | Qt::AlignVCenter, stepNumber );
    painter.drawText( neededRectInner, Qt::AlignCenter | Qt::AlignVCenter, stepNumber );

    // draw the line to the previous step
    painter.resetMatrix();
    painter.setPen( Qt::black );
    if( i == 0)
      painter.drawLine( 0, 30, rect.left()+20 , 30 );

    painter.translate( space, 10 );
  }

  updateGeometry();

}

QSize KStepList::minimumSizeHint () const
{
  QMessageBox::information( 0, QString("%1").arg(d->m_minimumWidth), QString(""), 1 );
  return QSize(d->m_minimumWidth, 100);
}

QSize KStepList::sizeHint () const
{
QMessageBox::information( 0, QString("%1").arg(d->m_minimumWidth), QString(""), 1 );
  return QSize(d->m_minimumWidth, 100);
}

QSizePolicy KStepList::sizePolicy() const
{
QMessageBox::information( 0, QString("%1").arg(d->m_minimumWidth), QString(""), 1 );
  return QSizePolicy( QSizePolicy::Minimum, QSizePolicy::Fixed );
}