diff options
Diffstat (limited to 'akregator/src/listtabwidget.cpp')
-rw-r--r-- | akregator/src/listtabwidget.cpp | 234 |
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" |