summaryrefslogtreecommitdiffstats
path: root/libktorrent/labelview.cpp
diff options
context:
space:
mode:
authortpearson <tpearson@283d02a7-25f6-0310-bc7c-ecb5cbfe19da>2010-01-20 02:37:40 +0000
committertpearson <tpearson@283d02a7-25f6-0310-bc7c-ecb5cbfe19da>2010-01-20 02:37:40 +0000
commit9ad5c7b5e23b4940e7a3ea3ca3a6fb77e6a8fab0 (patch)
treed088b5210e77d9fa91d954d8550e00e372b47378 /libktorrent/labelview.cpp
downloadktorrent-9ad5c7b5e23b4940e7a3ea3ca3a6fb77e6a8fab0.tar.gz
ktorrent-9ad5c7b5e23b4940e7a3ea3ca3a6fb77e6a8fab0.zip
Updated to final KDE3 ktorrent release (2.2.6)
git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/applications/ktorrent@1077377 283d02a7-25f6-0310-bc7c-ecb5cbfe19da
Diffstat (limited to 'libktorrent/labelview.cpp')
-rw-r--r--libktorrent/labelview.cpp257
1 files changed, 257 insertions, 0 deletions
diff --git a/libktorrent/labelview.cpp b/libktorrent/labelview.cpp
new file mode 100644
index 0000000..10c46d5
--- /dev/null
+++ b/libktorrent/labelview.cpp
@@ -0,0 +1,257 @@
+/***************************************************************************
+ * Copyright (C) 2005 by Joris Guisson *
+ * joris.guisson@gmail.com *
+ * *
+ * 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 <algorithm>
+#include <qlayout.h>
+#include <qlabel.h>
+#include <kiconloader.h>
+#include <kglobalsettings.h>
+#include <util/log.h>
+#include "labelview.h"
+
+using namespace bt;
+
+namespace kt
+{
+ LabelViewItem::LabelViewItem(const QString & icon,const QString & title,const QString & description,LabelView* view)
+ : LabelViewItemBase(view),odd(false),selected(false)
+ {
+ icon_lbl->setPixmap(DesktopIcon(icon));
+ title_lbl->setText(title);
+ description_lbl->setText(description);
+ setOdd(false);
+ }
+
+ LabelViewItem::~LabelViewItem()
+ {
+ }
+
+ void LabelViewItem::setTitle(const QString & title)
+ {
+ title_lbl->setText(title);
+ }
+
+ void LabelViewItem::setDescription(const QString & d)
+ {
+ description_lbl->setText(d);
+ }
+
+ void LabelViewItem::setIcon(const QString & icon)
+ {
+ icon_lbl->setPixmap(DesktopIcon(icon));
+ }
+
+ void LabelViewItem::setOdd(bool o)
+ {
+ odd = o;
+ setSelected(selected);
+ }
+
+ void LabelViewItem::setSelected(bool sel)
+ {
+ selected = sel;
+
+ if (selected)
+ {
+ setPaletteBackgroundColor(KGlobalSettings::highlightColor());
+ setPaletteForegroundColor(KGlobalSettings::highlightedTextColor());
+ }
+ else if (odd)
+ {
+ setPaletteBackgroundColor(KGlobalSettings::baseColor());
+ setPaletteForegroundColor(KGlobalSettings::textColor());
+ }
+ else
+ {
+ setPaletteBackgroundColor(KGlobalSettings::alternateBackgroundColor());
+ setPaletteForegroundColor(KGlobalSettings::textColor());
+ }
+ }
+
+ bool LabelViewItem::operator < (const LabelViewItem & item)
+ {
+ return title_lbl->text() < item.title_lbl->text();
+ }
+
+ void LabelViewItem::mousePressEvent(QMouseEvent *e)
+ {
+ if (e->button() == QMouseEvent::LeftButton)
+ {
+ clicked(this);
+ }
+
+ setFocus();
+ QWidget::mousePressEvent(e);
+ }
+
+ typedef std::list<LabelViewItem*>::iterator LabelViewItr;
+ typedef std::list<LabelViewItem*>::const_iterator LabelViewCItr;
+
+ class LabelViewBox : public QWidget
+ {
+ QVBoxLayout* layout;
+ public:
+ LabelViewBox(QWidget* parent) : QWidget(parent)
+ {
+ setPaletteBackgroundColor(KGlobalSettings::baseColor());
+ layout = new QVBoxLayout(this);
+ layout->setMargin(0);
+ }
+
+ virtual ~LabelViewBox()
+ {}
+
+ void add(LabelViewItem* item)
+ {
+ item->reparent(this,QPoint(0,0));
+ layout->add(item);
+ item->show();
+ }
+
+ void remove(LabelViewItem* item)
+ {
+ item->hide();
+ layout->remove(item);
+ item->reparent(0,QPoint(0,0));
+ }
+
+ void sorted(const std::list<LabelViewItem*> items)
+ {
+ for (LabelViewCItr i = items.begin();i != items.end();i++)
+ layout->remove(*i);
+
+ for (LabelViewCItr i = items.begin();i != items.end();i++)
+ layout->add(*i);
+ }
+ };
+
+
+
+ ///////////////////////////////////////
+
+ LabelView::LabelView ( QWidget *parent, const char *name )
+ : QScrollView ( parent, name ),selected(0)
+ {
+ item_box = new LabelViewBox(this->viewport());
+ setResizePolicy(QScrollView::AutoOneFit);
+
+ addChild(item_box, 0, 0);
+ item_box->show();
+ }
+
+
+ LabelView::~LabelView()
+ {}
+
+ void LabelView::addItem(LabelViewItem* item)
+ {
+ item_box->add(item);
+ items.push_back(item);
+ item->setOdd(items.size() % 2 == 1);
+
+ connect(item, SIGNAL(clicked(LabelViewItem*)),
+ this, SLOT(onItemClicked(LabelViewItem*)));
+ }
+
+ void LabelView::removeItem(LabelViewItem* item)
+ {
+ LabelViewItr i = std::find(items.begin(),items.end(),item);
+ if (i != items.end())
+ {
+ item_box->remove(item);
+ items.erase(i);
+ disconnect(item, SIGNAL(clicked(LabelViewItem*)),
+ this, SLOT(onItemClicked(LabelViewItem*)));
+
+ // check for selected being equal to item
+ if (item == selected)
+ selected = 0;
+
+ // update odd status of each item
+ updateOddStatus();
+ }
+ }
+
+ void LabelView::updateOddStatus()
+ {
+ bool odd = true;
+ LabelViewItr i = items.begin();
+ while (i != items.end())
+ {
+ LabelViewItem* item = *i;
+ item->setOdd(odd);
+ odd = !odd;
+ i++;
+ }
+ }
+
+ void LabelView::onItemClicked(LabelViewItem* it)
+ {
+ if (selected == it)
+ return;
+
+ if (selected)
+ selected->setSelected(false);
+
+ selected = it;
+ selected->setSelected(true);
+ currentChanged(selected);
+ }
+
+ void LabelView::clear()
+ {
+ LabelViewItr i = items.begin();
+ while (i != items.end())
+ {
+ LabelViewItem* item = *i;
+ item_box->remove(item);
+ i = items.erase(i);
+ delete item;
+ }
+ selected = 0;
+ }
+
+ void LabelView::update()
+ {
+ LabelViewItr i = items.begin();
+ while (i != items.end())
+ {
+ LabelViewItem* item = *i;
+ item->update();
+ i++;
+ }
+ }
+
+ struct LabelViewItemCmp
+ {
+ bool operator() (LabelViewItem* a,LabelViewItem* b)
+ {
+ return *a < *b;
+ }
+ };
+
+ void LabelView::sort()
+ {
+ items.sort(LabelViewItemCmp());
+ item_box->sorted(items);
+ updateOddStatus();
+ }
+
+}
+#include "labelview.moc"