summaryrefslogtreecommitdiffstats
path: root/akregator/src/nodelist.h
blob: b65078cc5174c20e9f603a7a1ada00c81e9cc7e7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
/*
    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.
*/

#ifndef AKREGATOR_NODELIST_H
#define AKREGATOR_NODELIST_H

#include <tqobject.h>

class TQDomDocument;
class TQDomNode;
class TQString;

template <class K,class T> class TQMap;
template <class T> class TQValueList;

// hack for KDE 3.x series
#ifdef signals
#  undef signals
#  define signals public
#endif

namespace Akregator {

class Folder;
class TreeNode;

class NodeList : public QObject
{

Q_OBJECT

public:
    NodeList(TQObject *parent=0, const char *name=0);
    virtual ~NodeList();

    virtual Folder* rootNode() const;

    virtual bool readFromXML(const TQDomDocument& doc) = 0;

    virtual TQDomDocument toXML() const = 0;

    virtual bool isEmpty() const;

    TreeNode* findByID(int id) const;

    /** returns the title of the feed list (as used in the OPML document) */
    const TQString& title() const;

    /** sets the title of the feed list */
    void setTitle(const TQString& name);

    /** returns a flat list containing all nodes in the tree */
    const TQValueList<TreeNode*>& asFlatList() const;

signals:
    void signalDestroyed(NodeList*);
    /** emitted when a node was added to the list */
    void signalNodeAdded(TreeNode*);
    /** emitted when a node was removed from the list */
    void signalNodeRemoved(TreeNode*);

public slots:

    /**
     * Clears the list without touching the root node.
     */
    void clear();

public:         // compat with KDE-3.x assertions, remove for KDE 4
// protected:

    TQValueList<TreeNode*>* flatList() const;
    TQMap<int, TreeNode*>* idMap() const;
    
    int generateID();
    void setRootNode(Folder* folder);
    virtual void addNode(TreeNode* node, bool preserveID);
    virtual void removeNode(TreeNode* node);
  
public slots:         // compat with KDE-3.x assertions, remove for KDE 4
// protected slots:

    virtual void slotNodeDestroyed(TreeNode* node);
    virtual void slotNodeAdded(TreeNode* node);
    virtual void slotNodeRemoved(Folder* parent, TreeNode* node);

public:         // compat with KDE-3.x assertions, remove for KDE 4
// private:
    NodeList(const NodeList&) : TQObject() {}
    NodeList& operator=(const NodeList&) { return *this; }

    friend class AddNodeVisitor;
    class AddNodeVisitor;

    friend class RemoveNodeVisitor;
    class RemoveNodeVisitor;

    class NodeListPrivate;
    NodeListPrivate* d;
    
};

} // namespace Akregator

#endif // AKREGATOR_NODELIST_H