void DOMTreeView::deleteNodes() { // kdDebug(90180) << k_funcinfo << endl; DOM::Node last; MultiCommand *cmd = new MultiCommand(i18n("Delete Nodes")); QListViewItemIterator it(m_listView, QListViewItemIterator::Selected); for (; *it; ++it) { DOMListViewItem *item = static_cast<DOMListViewItem *>(*it); // kdDebug(90180) << " item->node " << item->node().nodeName().string() << " clos " << item->isClosing() << endl; if (item->isClosing()) continue; // don't regard node more than once if (item->node() == last) continue; // check for selected parent bool has_selected_parent = false; for (QListViewItem *p = item->parent(); p; p = p->parent()) { if (p->isSelected()) { has_selected_parent = true; break; } } if (has_selected_parent) continue; // kdDebug(90180) << " item->node " << item->node().nodeName().string() << ": schedule for removal" << endl; // remove this node if it isn't already recursively removed by its parent cmd->addCommand(new RemoveNodeCommand(item->node(), item->node().parentNode(), item->node().nextSibling())); last = item->node(); } mainWindow()->executeAndAddCommand(cmd); }
void DOMTreeView::slotMovedItems(QPtrList<QListViewItem> &items, QPtrList<QListViewItem> &/*afterFirst*/, QPtrList<QListViewItem> &afterNow) { MultiCommand *cmd = new MultiCommand(i18n("Move Nodes")); _refreshed = false; QPtrList<QListViewItem>::Iterator it = items.begin(); QPtrList<QListViewItem>::Iterator anit = afterNow.begin(); for (; it != items.end(); ++it, ++anit) { DOMListViewItem *item = static_cast<DOMListViewItem *>(*it); DOMListViewItem *anitem = static_cast<DOMListViewItem *>(*anit); DOM::Node parent = static_cast<DOMListViewItem *>(item->parent())->node(); Q_ASSERT(!parent.isNull()); // kdDebug(90180) << " afternow " << anitem << " node " << (anitem ? anitem->node().nodeName().string() : QString()) << "=" << (anitem ? anitem->node().nodeValue().string() : QString()) << endl; cmd->addCommand(new MoveNodeCommand(item->node(), parent, anitem ? anitem->node().nextSibling() : parent.firstChild()) ); } mainWindow()->executeAndAddCommand(cmd); // refresh *anyways*, otherwise consistency is disturbed if (!_refreshed) refresh(); slotShowNode(current_node); }
void DOMTreeView::slotAddTextDlg() { DOMListViewItem *item = static_cast<DOMListViewItem *>(m_listView->currentItem()); if (!item) return; QString text; SignalReceiver addBefore; { TextEditDialog dlg(this, "TextEditDialog", true); connect(dlg.insBeforeBtn, SIGNAL(clicked()), &addBefore, SLOT(slot())); if (dlg.exec() != QDialog::Accepted) return; text = dlg.textPane->text(); } DOM::Node curNode = item->node(); try { DOM::Node parent = addBefore() ? curNode.parentNode() : curNode; DOM::Node after = addBefore() ? curNode : 0; DOM::Node newNode = curNode.ownerDocument().createTextNode(text); ManipulationCommand *cmd = new InsertNodeCommand(newNode, parent, after); mainWindow()->executeAndAddCommand(cmd); if (cmd->isValid()) activateNode(newNode); } catch (DOM::DOMException &ex) { mainWindow()->addMessage(ex.code, domErrorMessage(ex.code)); } }
void DOMTreeView::slotPrepareMove() { DOMListViewItem *item = static_cast<DOMListViewItem *>(m_listView->currentItem()); if (!item) current_node = DOM::Node(); else current_node = item->node(); }
void DOMTreeView::slotItemClicked(QListViewItem *cur_item) { DOMListViewItem *cur = static_cast<DOMListViewItem *>(cur_item); if (!cur) return; DOM::Node handle = cur->node(); if (!handle.isNull()) { part->setActiveNode(handle); } }
void DOMTreeView::slotAddElementDlg() { DOMListViewItem *item = static_cast<DOMListViewItem *>(m_listView->currentItem()); if (!item) return; QString qname; QString namespc; SignalReceiver addBefore; { ElementEditDialog dlg(this); dlg.setModal(true); connect(dlg.button(KDialog::User2), SIGNAL(clicked()), &addBefore, SLOT(slot())); // ### activate when namespaces are supported dlg.elemNamespace->setEnabled(false); if (dlg.exec() != QDialog::Accepted) return; qname = dlg.elemName->text(); namespc = dlg.elemNamespace->currentText(); } DOM::Node curNode = item->node(); try { DOM::Node parent = addBefore() ? curNode.parentNode() : curNode; DOM::Node after = addBefore() ? curNode : 0; // ### take namespace into account DOM::Node newNode = curNode.ownerDocument().createElement(qname); ManipulationCommand *cmd = new InsertNodeCommand(newNode, parent, after); mainWindow()->executeAndAddCommand(cmd); if (cmd->isValid()) activateNode(newNode); } catch (DOM::DOMException &ex) { mainWindow()->addMessage(ex.code, domErrorMessage(ex.code)); } }