27 #include "simplenodeselector.h"
29 #include "treenodevisitor.h"
31 #include <klistview.h>
41 class SelectNodeDialog::SelectNodeDialogPrivate
44 SimpleNodeSelector* widget;
47 SelectNodeDialog::SelectNodeDialog(FeedList* feedList, TQWidget* parent,
char* name) :
48 KDialogBase(parent, name, true, i18n(
"Select Feed or Folder"),
49 KDialogBase::Ok|KDialogBase::Cancel, KDialogBase::Ok, true), d(new SelectNodeDialogPrivate)
51 d->widget =
new SimpleNodeSelector(feedList,
this);
53 connect(d->widget, TQT_SIGNAL(signalNodeSelected(TreeNode*)),
this, TQT_SLOT(slotNodeSelected(TreeNode*)));
55 setMainWidget(d->widget);
56 enableButtonOK(
false);
59 SelectNodeDialog::~SelectNodeDialog()
65 TreeNode* SelectNodeDialog::selectedNode()
const
67 return d->widget->selectedNode();
70 void SelectNodeDialog::slotSelectNode(TreeNode* node)
72 d->widget->slotSelectNode(node);
75 void SelectNodeDialog::slotNodeSelected(TreeNode* node)
77 enableButtonOK(node != 0);
81 class SimpleNodeSelector::SimpleNodeSelectorPrivate
87 TQMap<TreeNode*,TQListViewItem*> nodeToItem;
88 TQMap<TQListViewItem*, TreeNode*> itemToNode;
91 class SimpleNodeSelector::NodeVisitor :
public TreeNodeVisitor
95 NodeVisitor(SimpleNodeSelector* view) : TreeNodeVisitor(), m_view(view) {}
97 void createItems(TreeNode* node)
102 virtual bool visitFolder(Folder* node)
105 TQValueList<TreeNode*> children = node->children();
106 m_view->d->nodeToItem[node]->setExpandable(
true);
107 for (TQValueList<TreeNode*>::ConstIterator it = children.begin(); it != children.end(); ++it)
112 virtual bool visitTreeNode(TreeNode* node)
114 TQListViewItem* pi = node->parent() ? m_view->d->nodeToItem[node->parent()] : 0;
116 KListViewItem* item = 0;
118 item =
new KListViewItem(pi, node->title());
120 item =
new KListViewItem(m_view->d->view, node->title());
121 item->setExpandable(
false);
122 m_view->d->nodeToItem.insert(node, item);
123 m_view->d->itemToNode.insert(item, node);
124 connect(node, TQT_SIGNAL(signalDestroyed(TreeNode*)), m_view, TQT_SLOT(slotNodeDestroyed(TreeNode*)));
130 SimpleNodeSelector* m_view;
134 SimpleNodeSelector::SimpleNodeSelector(FeedList* feedList, TQWidget* parent,
const char* name) : TQWidget(parent, name), d(new SimpleNodeSelectorPrivate)
137 connect(feedList, TQT_SIGNAL(signalDestroyed(FeedList*)),
this, TQT_SLOT(slotFeedListDestroyed(FeedList*)));
139 d->view =
new KListView(
this);
140 d->view->setRootIsDecorated(
true);
141 d->view->addColumn(i18n(
"Feeds"));
143 connect(d->view, TQT_SIGNAL(selectionChanged(TQListViewItem*)),
this, TQT_SLOT(slotItemSelected(TQListViewItem*)));
145 TQGridLayout* layout =
new TQGridLayout(
this, 1, 1);
146 layout->addWidget(d->view, 0, 0);
148 d->visitor =
new NodeVisitor(
this);
150 d->visitor->createItems(d->list->rootNode());
151 d->nodeToItem[d->list->rootNode()]->setOpen(
true);
152 d->view->ensureItemVisible(d->nodeToItem[d->list->rootNode()]);
155 SimpleNodeSelector::~SimpleNodeSelector()
162 TreeNode* SimpleNodeSelector::selectedNode()
const
164 return d->itemToNode[d->view->selectedItem()];
167 void SimpleNodeSelector::slotSelectNode(TreeNode* node)
169 TQListViewItem* item = d->nodeToItem[node];
171 d->view->setSelected(item,
true);
174 void SimpleNodeSelector::slotFeedListDestroyed(FeedList* )
176 d->nodeToItem.clear();
177 d->itemToNode.clear();
181 void SimpleNodeSelector::slotItemSelected(TQListViewItem* item)
183 emit signalNodeSelected(d->itemToNode[item]);
186 void SimpleNodeSelector::slotNodeDestroyed(TreeNode* node)
188 if (d->nodeToItem.contains(node))
190 TQListViewItem* item = d->nodeToItem[node];
191 d->nodeToItem.remove(node);
192 d->itemToNode.remove(item);
199 #include "simplenodeselector.moc"