|  | Home · All Classes · Main Classes · Grouped Classes · Modules · Functions |

# ledmeter.cpp Example File
graphicsview/portedasteroids/ledmeter.cpp

        /****************************************************************************
        **
        ** Copyright (C) 2006-2006 Trolltech ASA. All rights reserved.
        **
        ** This file is part of the example classes of the Qt Toolkit.
        **
        ** Licensees holding valid Qt Preview licenses may use this file in
        ** accordance with the Qt Preview License Agreement provided with the
        ** Software.
        **
        ** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for
        ** information about Qt Commercial License Agreements.
        **
        ** Contact info@trolltech.com if any conditions of this licensing are
        ** not clear to you.
        **
        ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
        ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
        **
        ****************************************************************************/

        /*
         * KAsteroids - Copyright (c) Martin R. Jones 1997
         *
         * Part of the KDE project
         */

        #include <qpainter.h>
        //Added by qt3to4:
        #include <QResizeEvent>
        #include <Q3Frame>
        #include "ledmeter.h"

        KALedMeter::KALedMeter( QWidget *parent ) : Q3Frame( parent )
        {
            mCRanges.setAutoDelete( TRUE );
            mRange = 100;
            mCount = 20;
            mCurrentCount = 0;
            mValue = 0;
            setMinimumWidth( mCount * 2 + frameWidth() );
        }

        void KALedMeter::setRange( int r )
        {
            mRange = r;
            if ( mRange < 1 )
                mRange = 1;
            setValue( mValue );
            update();
        }

        void KALedMeter::setCount( int c )
        {
            mCount = c;
            if ( mCount < 1 )
                mCount = 1;
            setMinimumWidth( mCount * 2 + frameWidth() );
            calcColorRanges();
            setValue( mValue );
            update();
        }

        void KALedMeter::setValue( int v )
        {
            mValue = v;
            if ( mValue > mRange )
                mValue = mRange;
            else if ( mValue < 0 )
                mValue = 0;
            int c = ( mValue + mRange / mCount - 1 ) * mCount / mRange;
            if ( c != mCurrentCount )
            {
                mCurrentCount = c;
                update();
            }
        }

        void KALedMeter::addColorRange( int pc, const QColor &c )
        {
            ColorRange *cr = new ColorRange;
            cr->mPc = pc;
            cr->mColor = c;
            mCRanges.append( cr );
            calcColorRanges();
        }

        void KALedMeter::resizeEvent( QResizeEvent *e )
        {
            Q3Frame::resizeEvent( e );
            int w = ( width() - frameWidth() - 2 ) / mCount * mCount;
            w += frameWidth() + 2;
            setFrameRect( QRect( 0, 0, w, height() ) );
        }

        void KALedMeter::drawContents( QPainter *p )
        {
            QRect b = contentsRect();

            unsigned cidx = 0;
            int ncol = mCount;
            QColor col = colorGroup().foreground();

            if ( !mCRanges.isEmpty() )
            {
                col = mCRanges.at( cidx )->mColor;
                ncol = mCRanges.at( cidx )->mValue;
            }
            p->setBrush( col );
            p->setPen( col );

            int lw = b.width() / mCount;
            int lx = b.left() + 1;
            for ( int i = 0; i < mCurrentCount; i++, lx += lw )
            {
                if ( i > ncol )
                {
                    if ( ++cidx < mCRanges.count() )
                    {
                        col = mCRanges.at( cidx )->mColor;
                        ncol = mCRanges.at( cidx )->mValue;
                        p->setBrush( col );
                        p->setPen( col );
                    }
                }

                p->drawRect( lx, b.top() + 1, lw - 1, b.height() - 2 );
            }
        }

        void KALedMeter::calcColorRanges()
        {
            int prev = 0;
            ColorRange *cr;
            for ( cr = mCRanges.first(); cr; cr = mCRanges.next() )
            {
                cr->mValue = prev + cr->mPc * mCount / 100;
                prev = cr->mValue;
            }
        }