From 789e3a1f62a50de1508d227aca9e7fcbc1f9864e Mon Sep 17 00:00:00 2001 From: defnax Date: Sat, 2 Feb 2008 13:38:17 +0000 Subject: [PATCH] added SharedFiles Delegate git-svn-id: http://svn.code.sf.net/p/retroshare/code/trunk@323 b45a01b8-16f6-495d-af2f-9b41ad6348cc --- retroshare-gui/src/gui/SFListDelegate.cpp | 109 ++++++++++++++++++++++ retroshare-gui/src/gui/SFListDelegate.h | 60 ++++++++++++ 2 files changed, 169 insertions(+) create mode 100644 retroshare-gui/src/gui/SFListDelegate.cpp create mode 100644 retroshare-gui/src/gui/SFListDelegate.h diff --git a/retroshare-gui/src/gui/SFListDelegate.cpp b/retroshare-gui/src/gui/SFListDelegate.cpp new file mode 100644 index 000000000..1b2c29ba6 --- /dev/null +++ b/retroshare-gui/src/gui/SFListDelegate.cpp @@ -0,0 +1,109 @@ +/**************************************************************** + * RetroShare is distributed under the following license: + * + * Copyright (C) 2006,2007 crypton + * + * 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 +#include +#include +#include +#include + +#include "SFListDelegate.h" + +SFListDelegate::SFListDelegate(QObject *parent) : QAbstractItemDelegate(parent) +{ + ; +} + +SFListDelegate::~SFListDelegate(void) +{ + ; +} + +void SFListDelegate::paint(QPainter * painter, const QStyleOptionViewItem & option, const QModelIndex & index) const +{ + QString byteUnits[4] = {tr("B"), tr("KB"), tr("MB"), tr("GB")}; + QStyleOptionViewItem opt = option; + QStyleOptionProgressBarV2 newopt; + QRect pixmapRect; + QPixmap pixmap; + qlonglong fileSize; + double multi; + QString temp , status; + + + //set text color + QVariant value = index.data(Qt::TextColorRole); + if(value.isValid() && qvariant_cast(value).isValid()) { + opt.palette.setColor(QPalette::Text, qvariant_cast(value)); + } + QPalette::ColorGroup cg = option.state & QStyle::State_Enabled ? QPalette::Normal : QPalette::Disabled; + if(option.state & QStyle::State_Selected){ + painter->setPen(opt.palette.color(cg, QPalette::HighlightedText)); + } else { + painter->setPen(opt.palette.color(cg, QPalette::Text)); + } + switch(index.column()) { + case FSIZE: + fileSize = index.data().toLongLong(); + if(fileSize < 0){ + temp = "Unknown"; + } else { + multi = 1.0; + for(int i = 0; i < 5; ++i) { + if (fileSize < 1024) { + fileSize = index.data().toLongLong(); + temp.sprintf("%.2f ", fileSize / multi); + temp += byteUnits[i]; + break; + } + fileSize /= 1024; + multi *= 1024.0; + } + } + painter->drawText(option.rect, Qt::AlignRight, temp); + break; + case FNAME: + // decoration + value = index.data(Qt::DecorationRole); + pixmap = qvariant_cast(value).pixmap(option.decorationSize, option.state & QStyle::State_Enabled ? QIcon::Normal : QIcon::Disabled, option.state & QStyle::State_Open ? QIcon::On : QIcon::Off); + pixmapRect = (pixmap.isNull() ? QRect(0, 0, 0, 0): QRect(QPoint(0, 0), option.decorationSize)); + if (pixmapRect.isValid()){ + QPoint p = QStyle::alignedRect(option.direction, Qt::AlignLeft, pixmap.size(), option.rect).topLeft(); + painter->drawPixmap(p, pixmap); + } + painter->drawText(option.rect.translated(pixmap.size().width(), 0), Qt::AlignLeft, index.data().toString()); + break; + default: + painter->drawText(option.rect, Qt::AlignCenter, index.data().toString()); + } +} + +QSize SFListDelegate::sizeHint(const QStyleOptionViewItem & option, const QModelIndex & index) const +{ + return QSize(50,17); + QVariant value = index.data(Qt::FontRole); + QFont fnt = value.isValid() ? qvariant_cast(value) : option.font; + QFontMetrics fontMetrics(fnt); + const QString text = index.data(Qt::DisplayRole).toString(); + QRect textRect = QRect(0, 0, 0, fontMetrics.lineSpacing() * (text.count(QLatin1Char('\n')) + 1)); + return textRect.size(); +} + diff --git a/retroshare-gui/src/gui/SFListDelegate.h b/retroshare-gui/src/gui/SFListDelegate.h new file mode 100644 index 000000000..26820a646 --- /dev/null +++ b/retroshare-gui/src/gui/SFListDelegate.h @@ -0,0 +1,60 @@ +/**************************************************************** + * RetroShare is distributed under the following license: + * + * Copyright (C) 2006,2007 crypton + * + * 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. + ****************************************************************/ + +#ifndef SFLISTDELEGATE_H +#define SFLISTDELEGATE_H + +#include + +// Defines for download list list columns +#define FNAME 0 +#define FSIZE 1 + + + + +#define MAX_CHAR_TMP 128 + +class QModelIndex; +class QPainter; +class QStyleOptionProgressBarV2; +class QProgressBar; +class QApplication; + + +class SFListDelegate: public QAbstractItemDelegate { + + Q_OBJECT + + public: + SFListDelegate(QObject *parent=0); + ~SFListDelegate(); + void paint(QPainter * painter, const QStyleOptionViewItem & option, const QModelIndex & index) const; + QSize sizeHint(const QStyleOptionViewItem & option, const QModelIndex & index) const; + + private: + + public slots: + + signals: +}; +#endif +