• Skip to content
  • Skip to link menu
KDE 4.1 API Reference
  • KDE API Reference
  • kdelibs
  • Sitemap
  • Contact Us
 

KNewStuff

qprogressindicator.cpp

Go to the documentation of this file.
00001 /*
00002     This file is part of KNewStuff2.
00003     Copyright (c) 2007 Josef Spillner <spillner@kde.org>
00004     Copyright (c) 2007 Jeremy Whiting <jeremy@scitools.com>
00005 
00006     This library is free software; you can redistribute it and/or
00007     modify it under the terms of the GNU Library General Public
00008     License as published by the Free Software Foundation; either
00009     version 2 of the License, or (at your option) any later version.
00010 
00011     This library is distributed in the hope that it will be useful,
00012     but WITHOUT ANY WARRANTY; without even the implied warranty of
00013     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00014     Library General Public License for more details.
00015 
00016     You should have received a copy of the GNU Library General Public License
00017     along with this library; see the file COPYING.LIB.  If not, write to
00018     the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
00019     Boston, MA 02110-1301, USA.
00020 */
00021 
00022 #include "qprogressindicator.h"
00023 
00024 #include <QtGui/QProgressBar>
00025 #include <QtGui/QPushButton>
00026 #include <QtGui/QLabel>
00027 #include <QtGui/QLayout>
00028 
00029 #include <kiconloader.h>
00030 
00031 QProgressIndicator::QProgressIndicator(QWidget *parent)
00032         : QFrame(parent)
00033 {
00034     setFrameStyle(QFrame::NoFrame);
00035     m_pb = new QProgressBar();
00036     m_pb->setMinimum(0);
00037     m_pb->setMaximum(100);
00038 
00039     m_pbdetails = new QPushButton();
00040     m_pbdetails->setFixedWidth(32); // FIXME: I want a squared button
00041     m_pbdetails->setIcon(SmallIcon("go-up"));
00042     m_pbdetails->setEnabled(false);
00043 
00044     QHBoxLayout *hbox = new QHBoxLayout(this);
00045     hbox->setSpacing(0);
00046     hbox->addWidget(m_pbdetails);
00047     hbox->addWidget(m_pb);
00048 
00049     m_details = new QWidget(this);
00050     m_details->setWindowFlags(Qt::Popup);
00051     m_details->hide();
00052 
00053     m_detailsvbox = new QVBoxLayout(m_details);
00054 
00055     connect(m_pbdetails, SIGNAL(clicked()), SLOT(slotClicked()));
00056 }
00057 
00058 void QProgressIndicator::slotClicked()
00059 {
00060     QPoint indicatorpos = mapToGlobal(pos());
00061     m_details->move(indicatorpos.x(), indicatorpos.y());
00062 
00063     if (m_details->isVisible())
00064         m_details->hide();
00065     else
00066         m_details->show();
00067 }
00068 
00069 void QProgressIndicator::addProgress(const QString & message, int percentage)
00070 {
00071     QProgressBar *pb;
00072 
00073     m_progress[message] = percentage;
00074 
00075     if (!m_progresswidgets.contains(message)) {
00076         QWidget *pbcontainer = new QWidget();
00077 
00078         // make a label to show the url
00079         QLabel * urlLabel = new QLabel(pbcontainer);
00080         urlLabel->setText(message);
00081 
00082         // make a progress bar
00083         pb = new QProgressBar(pbcontainer);
00084         pb->setMinimum(0);
00085         pb->setMaximum(100);
00086         m_progresswidgets.insert(message, pb);
00087 
00088         // make a cancel button
00089         QPushButton *pbcancel = new QPushButton();
00090         pbcancel->setFixedWidth(32); // FIXME: I want a squared button
00091         pbcancel->setIcon(SmallIcon("dialog-cancel"));
00092 
00093         QGridLayout *layout = new QGridLayout(pbcontainer);
00094         layout->addWidget(urlLabel, 0, 0, 1, 2);
00095         layout->addWidget(pbcancel, 1, 0);
00096         layout->addWidget(pb, 1, 1);
00097 
00098         pbcontainer->show();
00099 
00100         m_detailsvbox->addWidget(pbcontainer);
00101     } else {
00102         pb = m_progresswidgets[message];
00103     }
00104 
00105     pb->setValue(percentage);
00106 
00107     if (m_progress.count() > 0)
00108         m_pbdetails->setEnabled(true);
00109 
00110     if (percentage == 100)
00111         removeProgress(message);
00112 
00113     calculateAverage();
00114 }
00115 
00116 void QProgressIndicator::removeProgress(const QString & message)
00117 {
00118     m_progress.remove(message);
00119 
00120     if (m_progresswidgets[message]) {
00121         delete m_progresswidgets[message]->parentWidget();
00122         m_progresswidgets.remove(message);
00123     }
00124 
00125     if (m_progress.count() == 0) {
00126         m_pbdetails->setEnabled(false);
00127         m_details->hide();
00128     }
00129 
00130     calculateAverage();
00131 }
00132 
00133 void QProgressIndicator::calculateAverage()
00134 {
00135     if (m_progress.count() == 0) {
00136         m_pb->reset();
00137         return;
00138     }
00139 
00140     int average = 0;
00141     QHashIterator<QString, int> it(m_progress);
00142     while (it.hasNext()) {
00143         it.next();
00144         average += it.value();
00145     }
00146     average = (average / m_progress.count());
00147 
00148     m_pb->setValue(average);
00149 }
00150 
00151 #include "qprogressindicator.moc"

KNewStuff

Skip menu "KNewStuff"
  • Main Page
  • Namespace List
  • Class Hierarchy
  • Alphabetical List
  • Class List
  • File List
  • Namespace Members
  • Class Members
  • Related Pages

kdelibs

Skip menu "kdelibs"
  • DNSSD
  • Interfaces
  •   KHexEdit
  •   KMediaPlayer
  •   KSpeech
  •   KTextEditor
  • Kate
  • kconf_update
  • KDE3Support
  •   KUnitTest
  • KDECore
  • KDED
  • KDEsu
  • KDEUI
  • KDocTools
  • KFile
  • KHTML
  • KImgIO
  • KInit
  • KIO
  • KIOSlave
  • KJS
  •   KJS-API
  •   WTF
  • kjsembed
  • KNewStuff
  • KParts
  • Kross
  • KUtils
  • Nepomuk
  • Solid
  • Sonnet
  • ThreadWeaver
Generated for kdelibs by doxygen 1.5.4
This website is maintained by Adriaan de Groot and Allen Winter.
KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal