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

# iconpreviewarea.cpp Example File
widgets/icons/iconpreviewarea.cpp

        /****************************************************************************
        **
        ** Copyright (C) 2005-2006 Trolltech ASA. All rights reserved.
        **
        ** This file is part of the documentation of the Qt Toolkit.
        **
        ** This file may be used under the terms of the GNU General Public
        ** License version 2.0 as published by the Free Software Foundation
        ** and appearing in the file LICENSE.GPL included in the packaging of
        ** this file.  Please review the following information to ensure GNU
        ** General Public Licensing requirements will be met:
        ** http://www.trolltech.com/products/qt/opensource.html
        **
        ** If you are unsure which license is appropriate for your use, please
        ** review the following information:
        ** http://www.trolltech.com/products/qt/licensing.html or contact the
        ** sales department at sales@trolltech.com.
        **
        ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
        ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
        **
        ****************************************************************************/

        #include <QtGui>

        #include "iconpreviewarea.h"

        IconPreviewArea::IconPreviewArea(QWidget *parent)
            : QWidget(parent)
        {
            QGridLayout *mainLayout = new QGridLayout;
            setLayout(mainLayout);

            stateLabels[0] = createHeaderLabel(tr("Off"));
            stateLabels[1] = createHeaderLabel(tr("On"));
            Q_ASSERT(NumStates == 2);

            modeLabels[0] = createHeaderLabel(tr("Normal"));
            modeLabels[1] = createHeaderLabel(tr("Active"));
            modeLabels[2] = createHeaderLabel(tr("Disabled"));
            Q_ASSERT(NumModes == 3);

            for (int j = 0; j < NumStates; ++j)
                mainLayout->addWidget(stateLabels[j], j + 1, 0);

            for (int i = 0; i < NumModes; ++i) {
                mainLayout->addWidget(modeLabels[i], 0, i + 1);

                for (int j = 0; j < NumStates; ++j) {
                    pixmapLabels[i][j] = createPixmapLabel();
                    mainLayout->addWidget(pixmapLabels[i][j], j + 1, i + 1);
                }
            }
        }

        void IconPreviewArea::setIcon(const QIcon &icon)
        {
            this->icon = icon;
            updatePixmapLabels();
        }

        void IconPreviewArea::setSize(const QSize &size)
        {
            if (size != this->size) {
                this->size = size;
                updatePixmapLabels();
            }
        }

        QLabel *IconPreviewArea::createHeaderLabel(const QString &text)
        {
            QLabel *label = new QLabel(tr("<b>%1</b>").arg(text));
            label->setAlignment(Qt::AlignCenter);
            return label;
        }

        QLabel *IconPreviewArea::createPixmapLabel()
        {
            QLabel *label = new QLabel;
            label->setEnabled(false);
            label->setAlignment(Qt::AlignCenter);
            label->setFrameShape(QFrame::Box);
            label->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
            label->setBackgroundRole(QPalette::Base);
            label->setMinimumSize(132, 132);
            return label;
        }

        void IconPreviewArea::updatePixmapLabels()
        {
            for (int i = 0; i < NumModes; ++i) {
                QIcon::Mode mode;
                if (i == 0) {
                    mode = QIcon::Normal;
                } else if (i == 1) {
                    mode = QIcon::Active;
                } else {
                    mode = QIcon::Disabled;
                }

                for (int j = 0; j < NumStates; ++j) {
                    QIcon::State state = (j == 0) ? QIcon::Off : QIcon::On;
                    QPixmap pixmap = icon.pixmap(size, mode, state);
                    pixmapLabels[i][j]->setPixmap(pixmap);
                    pixmapLabels[i][j]->setEnabled(!pixmap.isNull());
                }
            }
        }