00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
#include "khtml_part.h"
00019
#include "domtreeview.moc"
00020
#include "xml/dom_nodeimpl.h"
00021
00022 DOMTreeView::DOMTreeView(
QWidget *parent,
KHTMLPart *currentpart,
const char * name) :
KListView(parent,
name)
00023 {
00024 setCaption(name);
00025 setRootIsDecorated(
true);
00026 addColumn(
"Name");
00027 addColumn(
"Value");
00028 addColumn(
"Renderer");
00029 setSorting(-1);
00030 part = currentpart;
00031 connect(part, SIGNAL(nodeActivated(
const DOM::Node &)),
this, SLOT(showTree(
const DOM::Node &)));
00032 connect(
this, SIGNAL(clicked(
QListViewItem *)),
this, SLOT(slotItemClicked(
QListViewItem *)));
00033 m_nodedict.setAutoDelete(
true);
00034 }
00035
00036 DOMTreeView::~DOMTreeView()
00037 {
00038 disconnect(part);
00039 }
00040
00041
void DOMTreeView::showTree(
const DOM::Node &pNode)
00042 {
00043
if(pNode.
isNull() || document != pNode.
ownerDocument())
00044 {
00045
clear();
00046 m_itemdict.clear();
00047 m_nodedict.clear();
00048
if(pNode.
isNull())
00049
return;
00050
else if(pNode.
ownerDocument().
isNull())
00051 recursive(0, pNode);
00052
else
00053 recursive(0, pNode.
ownerDocument());
00054 }
00055 setCurrentItem(m_itemdict[pNode.
handle()]);
00056 ensureItemVisible(m_itemdict[pNode.
handle()]);
00057 }
00058
00059
void DOMTreeView::recursive(
const DOM::Node &pNode,
const DOM::Node &node)
00060 {
00061
QListViewItem *cur_item;
00062
if(pNode.
ownerDocument() != document)
00063 {
00064
QString val = node.
nodeValue().
string();
00065
if ( val.
length() > 20 )
00066 val.
truncate( 20 );
00067 cur_item =
new QListViewItem(static_cast<QListView *>(
this), node.
nodeName().
string(), val );
00068 document = pNode.
ownerDocument();
00069 }
00070
else {
00071
QString val = node.
nodeValue().
string();
00072
if ( val.
length() > 20 )
00073 val.
truncate( 20 );
00074 cur_item =
new QListViewItem(m_itemdict[pNode.
handle()], node.
nodeName().
string(), val);
00075 }
00076
00077
if(node.
handle())
00078 {
00079 m_itemdict.
insert(node.
handle(), cur_item);
00080 m_nodedict.insert(cur_item,
new DOM::Node(node));
00081 }
00082
00083
DOM::Node cur_child = node.
lastChild();
00084
while(!cur_child.
isNull())
00085 {
00086 recursive(node, cur_child);
00087 cur_child = cur_child.
previousSibling();
00088 }
00089 }
00090
00091
void DOMTreeView::slotItemClicked(
QListViewItem *cur_item)
00092 {
00093
DOM::Node *handle = m_nodedict[cur_item];
00094
if(handle) {
00095 emit part->setActiveNode(*handle);
00096
00097 }
00098 }