summaryrefslogtreecommitdiffstats
path: root/akregator/src/listtabwidget.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'akregator/src/listtabwidget.cpp')
-rw-r--r--akregator/src/listtabwidget.cpp234
1 files changed, 234 insertions, 0 deletions
diff --git a/akregator/src/listtabwidget.cpp b/akregator/src/listtabwidget.cpp
new file mode 100644
index 000000000..78f1d0d30
--- /dev/null
+++ b/akregator/src/listtabwidget.cpp
@@ -0,0 +1,234 @@
+/*
+ This file is part of Akregator.
+
+ Copyright (C) 2005 Frank Osterfeld <frank.osterfeld at kdemail.net>
+
+ 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.
+
+ As a special exception, permission is given to link this program
+ with any edition of Qt, and distribute the resulting executable,
+ without including the source code for Qt in the source distribution.
+*/
+
+#include "listtabwidget.h"
+#include "feedlistview.h"
+#include "folder.h"
+#include "treenode.h"
+
+#include <kmultitabbar.h>
+
+#include <qiconset.h>
+#include <qlayout.h>
+#include <qmap.h>
+#include <qptrlist.h>
+#include <qstring.h>
+#include <qvaluelist.h>
+#include <qwidgetstack.h>
+
+#include <kdebug.h>
+
+namespace Akregator {
+
+class ListTabWidget::ListTabWidgetPrivate
+{
+
+public:
+ int idCounter;
+ KMultiTabBar* tabBar;
+ QWidgetStack* stack;
+ NodeListView* current;
+ int currentID;
+ QValueList<NodeListView*> views;
+ QMap<int, NodeListView*> idToView;
+ QHBoxLayout* layout;
+ ViewMode viewMode;
+ QMap<QWidget*, QString> captions;
+};
+
+
+void ListTabWidget::slotItemUp()
+{
+ if (d->current)
+ d->current->slotItemUp();
+}
+
+void ListTabWidget::slotItemDown()
+{
+ if (d->current)
+ d->current->slotItemDown();
+}
+
+void ListTabWidget::slotItemBegin()
+{
+ if (d->current)
+ d->current->slotItemBegin();
+}
+
+void ListTabWidget::slotItemEnd()
+{
+ if (d->current)
+ d->current->slotItemEnd();
+}
+
+void ListTabWidget::slotItemLeft()
+{
+ if (d->current)
+ d->current->slotItemLeft();
+}
+
+void ListTabWidget::slotItemRight()
+{
+ if (d->current)
+ d->current->slotItemRight();
+}
+
+void ListTabWidget::slotPrevFeed()
+{
+ if (d->current)
+ d->current->slotPrevFeed();
+}
+
+void ListTabWidget::slotNextFeed()
+{
+ if (d->current)
+ d->current->slotNextFeed();
+}
+
+void ListTabWidget::slotPrevUnreadFeed()
+{
+ if (d->current)
+ d->current->slotPrevUnreadFeed();
+}
+
+void ListTabWidget::slotNextUnreadFeed()
+{
+ if (d->current)
+ d->current->slotNextUnreadFeed();
+}
+
+void ListTabWidget::slotRootNodeChanged(NodeListView* view, TreeNode* node)
+{
+/*
+ int unread = node->unread();
+ if (unread > 0)
+ {
+ //uncomment this to append unread count
+ //d->tabWidget->changeTab(view, QString("<qt>%1 (%2)").arg(d->captions[view]).arg(node->unread()));
+ d->tabWidget->changeTab(view, d->captions[view]);
+ }
+ else
+ {
+ d->tabWidget->changeTab(view, d->captions[view]);
+ }
+*/
+}
+
+void ListTabWidget::slotTabClicked(int id)
+{
+ NodeListView* view = d->idToView[id];
+ if (view)
+ {
+ d->stack->raiseWidget(view);
+ d->current = view;
+
+ if (d->currentID >= 0)
+ d->tabBar->setTab(d->currentID, false);
+ d->currentID = id;
+ d->tabBar->setTab(d->currentID, true);
+
+ emit signalNodeSelected(d->current->selectedNode());
+ }
+}
+
+ListTabWidget::ListTabWidget(QWidget* parent, const char* name) : QWidget(parent, name), d(new ListTabWidgetPrivate)
+{
+ d->idCounter = 0;
+ d->current = 0;
+ d->currentID = -1;
+ d->viewMode = verticalTabs;
+ d->layout = new QHBoxLayout(this);
+ //d->layout = new QGridLayout(this, 1, 2);
+ d->tabBar = new KMultiTabBar(KMultiTabBar::Vertical, this);
+ d->tabBar->setStyle(KMultiTabBar::KDEV3ICON);
+ //d->tabBar->setStyle(KMultiTabBar::KDEV3);
+ d->tabBar->showActiveTabTexts(true);
+ d->tabBar->setPosition(KMultiTabBar::Left);
+ d->layout->addWidget(d->tabBar/*, 0, 0*/);
+
+ d->stack = new QWidgetStack(this);
+ d->layout->addWidget(d->stack/*, 0, 1*/);
+
+// connect(d->tabBar, SIGNAL(currentChanged(QWidget*)), this, SLOT(slotCurrentChanged(QWidget*)));
+}
+
+ListTabWidget::~ListTabWidget()
+{
+ delete d;
+ d = 0;
+}
+
+
+void ListTabWidget::setViewMode(ViewMode mode)
+{
+ if (mode == d->viewMode)
+ return;
+
+ d->viewMode = mode;
+
+ // if mode is "single", we hide the tab bar
+ d->tabBar->setHidden(mode == single);
+}
+
+ListTabWidget::ViewMode ListTabWidget::viewMode() const
+{
+ return d->viewMode;
+}
+
+void ListTabWidget::addView(NodeListView* view, const QString& caption, const QPixmap& icon)
+{
+ d->captions[view] = caption;
+
+ view->reparent(d->stack, QPoint(0,0));
+ d->stack->addWidget(view);
+
+ int tabId = d->idCounter++;
+ d->tabBar->appendTab(icon, tabId, caption);
+ d->idToView[tabId] = view;
+ connect(d->tabBar->tab(tabId), SIGNAL(clicked(int)), this, SLOT(slotTabClicked(int)));
+
+
+ connect(view, SIGNAL(signalNodeSelected(TreeNode*)), this, SIGNAL(signalNodeSelected(TreeNode*)));
+ connect(view, SIGNAL(signalRootNodeChanged(NodeListView*, TreeNode*)), this, SLOT(slotRootNodeChanged(NodeListView*, TreeNode*)));
+
+
+ if (tabId == 0) // first widget
+ {
+ d->current = view;
+ d->currentID = tabId;
+ d->tabBar->setTab(d->currentID, true);
+ d->stack->raiseWidget(view);
+ }
+}
+
+NodeListView* ListTabWidget::activeView() const
+{
+ return d->current;
+}
+
+}
+
+#include "listtabwidget.h"
+
+#include "listtabwidget.moc"