From 2bda8f7717adf28da4af0d34fb82f63d2868c31d Mon Sep 17 00:00:00 2001 From: toma Date: Wed, 25 Nov 2009 17:56:58 +0000 Subject: Copy the KDE 3.5 branch to branches/trinity for new KDE 3.5 features. BUG:215923 git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/kdeutils@1054174 283d02a7-25f6-0310-bc7c-ecb5cbfe19da --- ksim/monitors/filesystem/filesystemwidget.cpp | 232 ++++++++++++++++++++++++++ 1 file changed, 232 insertions(+) create mode 100644 ksim/monitors/filesystem/filesystemwidget.cpp (limited to 'ksim/monitors/filesystem/filesystemwidget.cpp') diff --git a/ksim/monitors/filesystem/filesystemwidget.cpp b/ksim/monitors/filesystem/filesystemwidget.cpp new file mode 100644 index 0000000..0428ee3 --- /dev/null +++ b/ksim/monitors/filesystem/filesystemwidget.cpp @@ -0,0 +1,232 @@ +/* ksim - a system monitor for kde + * + * Copyright (C) 2001 Robbie Ward + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#include "filesystemwidget.h" + +#include + +#include +#include +#include +#include + +#include +#include +#include +#include +#include + +FilesystemWidget::Filesystem::Filesystem() +{ + m_display = 0; +} + +FilesystemWidget::Filesystem::Filesystem(KSim::Progress *display, + const QString &point) +{ + m_display = display; + m_mountPoint = point; +} + +FilesystemWidget::Filesystem::~Filesystem() +{ + delete m_display; +} + +KSim::Progress *FilesystemWidget::Filesystem::display() const +{ + return m_display; +} + +const QString &FilesystemWidget::Filesystem::mountPoint() const +{ + return m_mountPoint; +} + +const QString &FilesystemWidget::Filesystem::text() const +{ + return m_display->text(); +} + +int FilesystemWidget::Filesystem::value() const +{ + return m_display->value(); +} + +void FilesystemWidget::Filesystem::setText(const QString &text) +{ + if (!m_display) + return; + + m_display->setText(text); +} + +void FilesystemWidget::Filesystem::setValue(int value) +{ + if (!m_display) + return; + + m_display->setValue(value); +} + +FilesystemWidget::FilesystemWidget(QWidget *parent, const char *name) + : QWidget(parent, name) +{ + m_list.setAutoDelete(true); + m_layout = new QVBoxLayout(this); + m_process = 0; +} + +FilesystemWidget::~FilesystemWidget() +{ + delete m_process; +} + +void FilesystemWidget::append(int max, const QString &mountPoint) +{ + KSim::Progress *progress = new KSim::Progress(max, this); + progress->installEventFilter(this); + progress->show(); + m_layout->addWidget(progress); + + m_list.append(new Filesystem(progress, mountPoint)); +} + +void FilesystemWidget::setText(uint id, const QString &text) +{ + if (id > m_list.count()) + return; + + m_list.at(id)->setText(text); +} + +void FilesystemWidget::setValue(uint id, int value) +{ + if (id > m_list.count()) + return; + + m_list.at(id)->setValue(value); +} + +void FilesystemWidget::clear() +{ + m_list.clear(); +} + +bool FilesystemWidget::eventFilter(QObject *o, QEvent *e) +{ + if (!o->isA("KSim::Progress")) + return QWidget::eventFilter(o, e); + + KSim::Progress *progressBar = 0; + int i = 0; + QPtrListIterator it(m_list); + Filesystem *filesystem; + while ((filesystem = it.current()) != 0) { + ++it; + + if (filesystem->display() == o) { + progressBar = filesystem->display(); + break; + } + + ++i; + } + + if (o == progressBar && e->type() == QEvent::MouseButtonPress) + { + switch(static_cast(e)->button()) { + case QMouseEvent::RightButton: + showMenu(i); + break; + default: + break; + case QMouseEvent::LeftButton: + if (parentWidget()->inherits("KSim::PluginView")) + static_cast(parentWidget())->doCommand(); + break; + } + + return true; + } + + return QWidget::eventFilter(o, e); +} + +void FilesystemWidget::receivedStderr(KProcess *, char *buffer, int length) +{ + m_stderrString.setLatin1(buffer, length); +} + +void FilesystemWidget::processExited(KProcess *) +{ + delete m_process; + m_process = 0; + kdDebug(2003) << "Deleting KProcess pointer" << endl; + + if (m_stderrString.isEmpty()) + return; + + QStringList errorList = QStringList::split("\n", m_stderrString); + QString message = i18n("The following errors occurred:
    "); + + QStringList::Iterator it; + for (it = errorList.begin(); it != errorList.end(); ++it) { + message += QString::fromLatin1("
  • %1
  • ") + .arg((*it).replace(QRegExp("[u]?mount: "), QString::null)); + } + + message += QString::fromLatin1("
"); + KMessageBox::sorry(0, message); +} + +void FilesystemWidget::createProcess(const QString &command, const QString &point) +{ + m_process = new KProcess(); + connect(m_process, + SIGNAL(receivedStderr(KProcess *, char *, int)), + SLOT(receivedStderr(KProcess *, char *, int))); + connect(m_process, + SIGNAL(processExited(KProcess *)), + SLOT(processExited(KProcess *))); + + (*m_process) << command << point; + void(m_process->start(KProcess::NotifyOnExit, KProcess::Stderr)); +} + +void FilesystemWidget::showMenu(uint id) +{ + if (id > m_list.count()) + return; + + QPopupMenu menu; + menu.insertItem(SmallIcon("hdd_mount"), i18n("&Mount Device"), 1); + menu.insertItem(SmallIcon("hdd_unmount"), i18n("&Unmount Device"), 2); + + switch (menu.exec(QCursor::pos())) { + case 1: + createProcess("mount", m_list.at(id)->mountPoint()); + break; + case 2: + createProcess("umount", m_list.at(id)->mountPoint()); + break; + } +} + +#include "filesystemwidget.moc" -- cgit v1.2.3