28 #include "tagnodelist.h"
31 #include "tagfolder.h"
36 #include <tqvaluelist.h>
38 #include <tdeapplication.h>
39 #include <tdelocale.h>
43 class TagNodeList::TagNodeListPrivate
48 TQMap<TQString, TagNode*> tagIdToNodeMap;
51 FeedList* TagNodeList::feedList()
const
56 TagNodeList::TagNodeList(FeedList* feedList, TagSet* tagSet) : NodeList(), d(new TagNodeListPrivate)
58 d->feedList = feedList;
61 connect(d->tagSet, TQ_SIGNAL(signalTagAdded(
const Tag&)),
this, TQ_SLOT(slotTagAdded(
const Tag&)));
62 connect(d->tagSet, TQ_SIGNAL(signalTagRemoved(
const Tag&)),
this, TQ_SLOT(slotTagRemoved(
const Tag&)));
63 connect(d->tagSet, TQ_SIGNAL(signalTagUpdated(
const Tag&)),
this, TQ_SLOT(slotTagUpdated(
const Tag&)));
65 setRootNode(
new TagFolder(i18n(
"My Tags")));
67 TQValueList<Tag> list = tagSet->toMap().values();
68 for (TQValueList<Tag>::ConstIterator it = list.begin(); it != list.end(); ++it)
70 insert(
new TagNode(*it, d->feedList->rootNode()));
74 TagNodeList::~TagNodeList()
76 emit signalDestroyed(
this);
81 TagFolder* TagNodeList::rootNode()
const
83 return static_cast<TagFolder*
>(NodeList::rootNode());
86 TagNode* TagNodeList::findByTagID(
const TQString& tagID)
88 return d->tagIdToNodeMap[tagID];
91 bool TagNodeList::insert(TagNode* tagNode)
93 tagNode->setId(TDEApplication::random());
94 TQString
id = tagNode->tag().id();
95 if (!containsTagId(
id))
97 rootNode()->appendChild(tagNode);
98 d->tagIdToNodeMap[id] = tagNode;
99 emit signalTagNodeAdded(tagNode);
105 bool TagNodeList::remove(TagNode* tagNode)
107 TQString
id = tagNode->tag().id();
108 if (containsTagId(
id))
110 rootNode()->removeChild(tagNode);
111 d->tagIdToNodeMap.remove(
id);
112 emit signalTagNodeRemoved(tagNode);
118 void TagNodeList::slotNodeDestroyed(TreeNode* node)
120 TagNode* tagNode =
dynamic_cast<TagNode*
>(node);
121 TQString
id = tagNode ? tagNode->tag().id() : TQString();
123 if (tagNode != 0 && containsTagId(
id))
125 rootNode()->removeChild(tagNode);
126 d->tagIdToNodeMap.remove(
id);
127 emit signalTagNodeRemoved(tagNode);
131 void TagNodeList::slotNodeAdded(TreeNode* node)
133 NodeList::slotNodeAdded(node);
135 TagNode* tagNode =
dynamic_cast<TagNode*
>(node);
136 TQString
id = tagNode ? tagNode->tag().id() : TQString();
138 if (tagNode != 0L && !containsTagId(
id))
140 d->tagIdToNodeMap[id] = tagNode;
141 emit signalTagNodeAdded(tagNode);
145 void TagNodeList::slotNodeRemoved(Folder* parent, TreeNode* node)
147 NodeList::slotNodeRemoved(parent, node);
149 TagNode* tagNode =
dynamic_cast<TagNode*
>(node);
150 TQString
id = tagNode ? tagNode->tag().id() : TQString();
152 if (parent == rootNode() && tagNode != 0L && containsTagId(
id))
154 d->tagIdToNodeMap.remove(
id);
155 emit signalTagNodeRemoved(tagNode);
159 bool TagNodeList::containsTagId(
const TQString& tagId)
161 return d->tagIdToNodeMap.contains(tagId);
164 TQValueList<TagNode*> TagNodeList::toList()
const
166 return d->tagIdToNodeMap.values();
169 bool TagNodeList::readFromXML(
const TQDomDocument& doc)
174 TQDomDocument TagNodeList::toXML()
const
176 return TQDomDocument();
179 void TagNodeList::slotTagAdded(
const Tag& tag)
181 if (!containsTagId(tag.id()))
183 insert(
new TagNode(tag, d->feedList->rootNode()));
187 void TagNodeList::slotTagUpdated(
const Tag& tag)
189 if (containsTagId(tag.id()))
191 d->tagIdToNodeMap[tag.id()]->tagChanged();
194 void TagNodeList::slotTagRemoved(
const Tag& tag)
196 if (containsTagId(tag.id()))
198 delete d->tagIdToNodeMap[tag.id()];
199 d->tagIdToNodeMap[tag.id()] = 0;
206 #include "tagnodelist.moc"