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

# dropsitewindow.cpp Example File
draganddrop/dropsite/dropsitewindow.cpp

        /****************************************************************************
        **
        ** Copyright (C) 2005-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.
        **
        ****************************************************************************/

        #include <QtGui>

        #include "droparea.h"
        #include "dropsitewindow.h"

        DropSiteWindow::DropSiteWindow()
        {
            abstractLabel = new QLabel(tr("This example accepts drags from other "
                                          "applications and displays the MIME types "
                                          "provided by the drag object."));
            abstractLabel->setWordWrap(true);
            abstractLabel->adjustSize();

            dropArea = new DropArea;
            connect(dropArea, SIGNAL(changed(const QMimeData *)),
                    this, SLOT(updateFormatsTable(const QMimeData *)));

            QStringList labels;
            labels << tr("Format") << tr("Content");

            formatsTable = new QTableWidget;
            formatsTable->setColumnCount(2);
            formatsTable->setEditTriggers(QAbstractItemView::NoEditTriggers);
            formatsTable->setHorizontalHeaderLabels(labels);
            formatsTable->horizontalHeader()->setStretchLastSection(true);

            clearButton = new QPushButton(tr("Clear"));
            quitButton = new QPushButton(tr("Quit"));

            buttonBox = new QDialogButtonBox;
            buttonBox->addButton(clearButton, QDialogButtonBox::ActionRole);
            buttonBox->addButton(quitButton, QDialogButtonBox::RejectRole);

            connect(quitButton, SIGNAL(pressed()), this, SLOT(close()));
            connect(clearButton, SIGNAL(pressed()), dropArea, SLOT(clear()));

            QVBoxLayout *mainLayout = new QVBoxLayout;
            mainLayout->addWidget(abstractLabel);
            mainLayout->addWidget(dropArea);
            mainLayout->addWidget(formatsTable);
            mainLayout->addWidget(buttonBox);
            setLayout(mainLayout);

            setWindowTitle(tr("Drop Site"));
            setMinimumSize(350, 500);
        }

        void DropSiteWindow::updateFormatsTable(const QMimeData *mimeData)
        {
            formatsTable->setRowCount(0);
            if (!mimeData)
                return;

            foreach (QString format, mimeData->formats()) {
                QTableWidgetItem *formatItem = new QTableWidgetItem(format);
                formatItem->setFlags(Qt::ItemIsEnabled);
                formatItem->setTextAlignment(Qt::AlignTop | Qt::AlignLeft);

                QString text;

                qApp->processEvents();

                if (format == "text/plain") {
                    text = mimeData->text().simplified();
                } else if (format == "text/html") {
                    text = mimeData->html().simplified();
                } else {
                    QByteArray data = mimeData->data(format);
                    for (int i = 0; i < data.size() && i < 32; ++i) {
                        QString hex = QString("%1").arg(uchar(data[i]), 2, 16,
                                                        QChar('0'))
                                                   .toUpper();
                        text.append(hex + " ");
                    }
                }

                int row = formatsTable->rowCount();
                formatsTable->insertRow(row);
                formatsTable->setItem(row, 0, new QTableWidgetItem(format));
                formatsTable->setItem(row, 1, new QTableWidgetItem(text));
            }

            formatsTable->resizeColumnToContents(0);
        }