/* This file is part of Akregator. Copyright (C) 2004 Stanislav Karchebny 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 TQt, and distribute the resulting executable, without including the source code for TQt in the source distribution. */ #ifndef AKREGATORARTICLELISTVIEW_H #define AKREGATORARTICLELISTVIEW_H #include class TQKeyEvent; class TQDragObject; template class TQValueList; namespace Akregator { class Article; class TreeNode; namespace Filters { class ArticleMatcher; } class ArticleListView : public KListView { Q_OBJECT TQ_OBJECT public: ArticleListView(TQWidget *tqparent = 0, const char *name = 0); virtual ~ArticleListView(); /** returns the current article, or a null article if there is none */ Article currentArticle() const; /** returns a list of currently selected articles */ TQValueList
selectedArticles() const; enum Columns { itemTitle, feedTitle, pubDate }; public slots: /** show article list of tree node @c node (also connects to the notification signals of the node) */ void slotShowNode(TreeNode* node); /** clears the list and disconnects from the observed node (if any) */ void slotClear(); /** sets text filter and status filter @param textFilter filters text @param statusFilter filters status (read, unread, new) */ void slotSetFilter(const Akregator::Filters::ArticleMatcher& textFilter, const Akregator::Filters::ArticleMatcher& statusFilter); /** selects previous article in list view, first article if no article was selected */ void slotPreviousArticle(); /** selects next article in list view, first article if no article was selected */ void slotNextArticle(); /** selects previous unread article in list view, first unread article if no article was selected */ void slotPreviousUnreadArticle(); /** selects next unread article in list view, first unread article if no article was selected */ void slotNextUnreadArticle(); signals: void signalArticleChosen(const Article& article); void signalDoubleClicked(const Article&, const TQPoint&, int); //void signalContextMenu(KListView*, ArticleItem*, const TQPoint&); void signalMouseButtonPressed(int, const Article&, const TQPoint &, int); protected: /** reimplemented for kmail-like behaviour */ virtual void keyPressEvent(TQKeyEvent* e); /** applies text filter and status filter by setting visibility of items accordingly */ virtual void applyFilters(); /** * @return count of visible articles, used for info boxes */ int visibleArticles(); /** Paints infobox for filtering and stuff */ void paintInfoBox(const TQString &message); virtual void viewportPaintEvent(TQPaintEvent *e); void connectToNode(TreeNode* node); void disconnectFromNode(TreeNode* node); virtual TQDragObject *dragObject(); protected slots: void slotArticlesAdded(TreeNode* node, const TQValueList
& list); void slotArticlesUpdated(TreeNode* node, const TQValueList
& list); void slotArticlesRemoved(TreeNode* node, const TQValueList
& list); virtual void slotCurrentChanged(TQListViewItem* item); virtual void slotSelectionChanged(); virtual void slotDoubleClicked(TQListViewItem* item, const TQPoint& p, int i); virtual void slotContextMenu(KListView* list, TQListViewItem* item, const TQPoint& p); virtual void slotMouseButtonPressed(int, TQListViewItem *, const TQPoint &, int); public: // compat with KDE-3.x assertions, remove for KDE 4 // private: class ArticleListViewPrivate; ArticleListViewPrivate* d; friend class ColumnLayoutVisitor; class ColumnLayoutVisitor; class ArticleItem; }; } #endif