void XbelTree::parseFolderElement(const QDomElement &element, QTreeWidgetItem *parentItem) { QTreeWidgetItem *item = createItem(element, parentItem); QString title = element.attribute("title"); QString value_ergo = element.attribute("value_ergo"); QString value_ves = element.attribute("value_ves"); QString value_number = element.attribute("value_number"); QString foldedString = element.attribute("folded"); item->setFlags(item->flags() | Qt::ItemIsEditable); item->setIcon(0, folderIcon); item->setText(0, title); item->setText(1, value_ergo); item->setText(2, value_ves); item->setText(3, value_number); item->setText(4, foldedString); bool folded = (element.attribute("folded") != "no"); setItemExpanded(item, !folded); QDomElement child = element.firstChildElement(); while (!child.isNull()) { if (child.tagName() == "folder") { parseFolderElement(child, item); } else if (child.tagName() == "separator") { QTreeWidgetItem *childItem = createItem(child, item); childItem->setFlags(item->flags() & ~(Qt::ItemIsSelectable | Qt::ItemIsEditable)); childItem->setText(0, QString(30, 0xB7)); } child = child.nextSiblingElement(); } }
bool XbelTree::read(QIODevice *device) { QString errorStr; int errorLine; int errorColumn; if (!domDocument.setContent(device, true, &errorStr, &errorLine, &errorColumn)) { QMessageBox::information(window(), tr("DOM Bookmarks"), tr("Parse error at line %1, column %2:\n%3") .arg(errorLine) .arg(errorColumn) .arg(errorStr)); return false; } QDomElement root = domDocument.documentElement(); /*if (root.tagName() != "xbel") { QMessageBox::information(window(), tr("DOM Bookmarks"), tr("The file is not an XBEL file.")); return false; } else*/ if (root.hasAttribute("version") && root.attribute("version") != "1.0") { QMessageBox::information(window(), tr("DOM Bookmarks"), tr("The file is not an XML version 1.0 " "file.")); return false; } clear(); disconnect(this, SIGNAL(itemChanged(QTreeWidgetItem*,int)), this, SLOT(updateDomElement(QTreeWidgetItem*,int))); QDomElement child = root.firstChildElement("folder"); while (!child.isNull()) { parseFolderElement(child); child = child.nextSiblingElement("folder"); } connect(this, SIGNAL(itemChanged(QTreeWidgetItem*,int)), this, SLOT(updateDomElement(QTreeWidgetItem*,int))); return true; }
bool XbelTree::read(QIODevice *device) { QString errorStr; int errorLine; int errorColumn; if (!domDocument.setContent(device, true, &errorStr, &errorLine, &errorColumn)) { QMessageBox::information(window(), tr("Информация Metodika"), tr("Ошибка в линии %1, column %2:\n%3") .arg(errorLine) .arg(errorColumn) .arg(errorStr)); return false; } QDomElement root = domDocument.documentElement(); if (root.tagName() != "xbel") { QMessageBox::information(window(), tr("Информация Metodika"), tr("Этот файл не XBEL файл.")); return false; } else if (root.hasAttribute("version") && root.attribute("version") != "1.0") { QMessageBox::information(window(), tr("Информация Metodika"), tr("Версия этого файла XBEL не 1.0 " "file.")); return false; } clear(); disconnect(this, SIGNAL(itemChanged(QTreeWidgetItem*,int)), this, SLOT(updateDomElement(QTreeWidgetItem*,int))); QDomElement child = root.firstChildElement("folder"); while (!child.isNull()) { parseFolderElement(child); child = child.nextSiblingElement("folder"); } connect(this, SIGNAL(itemChanged(QTreeWidgetItem*,int)), this, SLOT(updateDomElement(QTreeWidgetItem*,int))); return true; }
void XbelTree::Reset() { clear(); disconnect(this, SIGNAL(itemChanged(QTreeWidgetItem*,int)), this, SLOT(updateDomElement(QTreeWidgetItem*,int))); disconnect(this, SIGNAL(itemClicked ( QTreeWidgetItem*,int)), this, SLOT(ItemClicked(QTreeWidgetItem*,int))); QDomElement root = domDocument.documentElement(); QDomElement child = root.firstChildElement("folder"); while (!child.isNull()) { parseFolderElement(child); child = child.nextSiblingElement("folder"); } connect(this, SIGNAL(itemChanged(QTreeWidgetItem*,int)), this, SLOT(updateDomElement(QTreeWidgetItem*,int))); connect(this, SIGNAL(itemClicked ( QTreeWidgetItem*,int)), this, SLOT(ItemClicked(QTreeWidgetItem*,int))); }
void RunInfoTree::parseFolderElement(const QDomElement &element, QTreeWidgetItem *parentItem) { QTreeWidgetItem *item = createItem(element, parentItem); QDomElement child = element.firstChildElement(); item->setFlags(item->flags() | Qt::ItemIsEditable); item->setText(0, element.tagName()); item->setText(1, element.attribute("value")); if(child.isNull()){ item->setIcon(0, bookmarkIcon); item->setText(1,element.attribute("value")); return; } item->setIcon(0, folderIcon); while (!child.isNull()) { parseFolderElement(child,item); //recursive call child = child.nextSiblingElement(); } }
bool Bookmarks::read(QIODevice* device) { QString errorStr; int errorLine; int errorColumn; if (!m_domDocument.setContent(device, true, &errorStr, &errorLine, &errorColumn)) { qDebug() << QString("Parse error at line %1, column %2:\n%3").arg(errorLine).arg(errorColumn).arg(errorStr); return false; } QDomElement root = m_domDocument.documentElement(); if (root.tagName() != "xbel") { qDebug() << "The file is not an XBEL file."; return false; } else if (root.hasAttribute("version") && root.attribute("version") != "1.0") { qDebug() << "The file is not an XBEL version 1.0 file."; return false; } clear(); disconnect(this, SIGNAL(itemChanged(QTreeWidgetItem*,int)), this, SLOT(updateDomElement(QTreeWidgetItem*,int))); QDomElement child = root.firstChildElement("folder"); while (!child.isNull()) { parseFolderElement(child); child = child.nextSiblingElement("folder"); } resizeColumnToContents(0); resizeColumnToContents(1); connect(this, SIGNAL(itemChanged(QTreeWidgetItem*,int)), this, SLOT(updateDomElement(QTreeWidgetItem*,int))); return true; }
void XbelTree::parseFolderElement(const QDomElement &element, QTreeWidgetItem *parentItem) { QTreeWidgetItem *item = createItem(element, parentItem); QString title = element.firstChildElement("title").text(); if (title.isEmpty()) title = QObject::tr("Folder"); item->setFlags(item->flags() | Qt::ItemIsEditable); item->setIcon(0, folderIcon); item->setText(0, title); bool folded = (element.attribute("folded") != "no"); setItemExpanded(item, !folded); QDomElement child = element.firstChildElement(); while (!child.isNull()) { if (child.tagName() == "folder") { parseFolderElement(child, item); } else if (child.tagName() == "bookmark") { QTreeWidgetItem *childItem = createItem(child, item); QString title = child.firstChildElement("title").text(); if (title.isEmpty()) title = QObject::tr("Folder"); childItem->setFlags(item->flags() | Qt::ItemIsEditable); childItem->setIcon(0, bookmarkIcon); childItem->setText(0, title); childItem->setText(1, child.attribute("href")); } else if (child.tagName() == "separator") { QTreeWidgetItem *childItem = createItem(child, item); childItem->setFlags(item->flags() & ~(Qt::ItemIsSelectable | Qt::ItemIsEditable)); childItem->setText(0, QString(30, 0xB7)); } child = child.nextSiblingElement(); } }
RunInfoTree::RunInfoTree(QDomDocument doc,QWidget *parent): QTreeWidget(parent),domDocument(doc) { QStringList labels; labels << tr("Type") << tr("Value"); header()->setResizeMode(QHeaderView::Stretch); setHeaderLabels(labels); folderIcon.addPixmap(style()->standardPixmap(QStyle::SP_DirClosedIcon), QIcon::Normal, QIcon::Off); folderIcon.addPixmap(style()->standardPixmap(QStyle::SP_DirOpenIcon), QIcon::Normal, QIcon::On); bookmarkIcon.addPixmap(style()->standardPixmap(QStyle::SP_FileIcon)); QDomElement root = domDocument.documentElement(); clear(); QDomElement child = root.firstChildElement("RunInfo"); while (!child.isNull()) { parseFolderElement(child); child = child.nextSiblingElement("RunInfo"); } }
void XbelTree::parseFolderElement(const QDomElement &element, QTreeWidgetItem *parentItem) { QTreeWidgetItem *item = createItem(element, parentItem); QString title = element.firstChildElement("title").text(); if (title.isEmpty()) title = QObject::tr("Folder"); item->setFlags(item->flags()); item->setIcon(0, folderIcon); if( !domElementForItem[item].attribute("device").isNull() ) { if( QString(domElementForItem[item].attribute("device")).toInt() >= devices ) devices++; item->setText(0, QString::fromUtf8("%1 - %2").arg(title).arg(domElementForItem[item].attribute("device"))); } else item->setText(0, title); bool folded = (element.attribute("folded") != "no"); setItemExpanded(item, !folded); QDomElement child = element.firstChildElement(); while (!child.isNull()) { if (child.tagName() == "folder") { parseFolderElement(child, item); } else if (child.tagName() == "bookmark") { QTreeWidgetItem *childItem = createItem(child, item); QString title = child.firstChildElement("title").text(); if (title.isEmpty()) title = QObject::tr("Folder"); childItem->setFlags(item->flags()); childItem->setIcon(0, bookmarkIcon); childItem->setText(0, title); if( child.attribute("property") == "clicked" ) { childItem->setFlags(childItem->flags() | Qt::ItemIsUserCheckable); if( child.attribute("href") == "1" ) childItem->setCheckState(1, Qt::Checked); else childItem->setCheckState(1, Qt::Unchecked); } if( child.attribute("name") == "proto") { JComboBox *cmb = new JComboBox(childItem); QString variants = child.attribute("variants"); QStringList qsl = variants.split("|"); int currentIndex = child.attribute("href").toInt(); for(int i=0; i<qsl.size(); i++) { cmb->addItem( qsl[i] ); } cmb->setCurrentIndex(currentIndex); this->setItemWidget( childItem, 1, cmb ); childItem->setIcon(0, QIcon(":/images/protocol.png")); } if( child.attribute("name") == "cycle") { childItem->setIcon(0, QIcon(":/images/cycle.png")); } if( child.attribute("name") == "registers") { childItem->setIcon(0, QIcon(":/images/registers.png")); } if( child.attribute("name") == "comport") { childItem->setIcon(0, QIcon(":/images/com_port.png")); } if( child.attribute("name") == "address") { childItem->setIcon(0, QIcon(":/images/address.png")); } if( child.attribute("name") == "mbit") { childItem->setIcon(0, QIcon(":/images/switch.png")); } if( child.attribute("name") == "mqpassword") { JLineEdit *qle = new JLineEdit(childItem); qle->setMaxLength(_mqpassword_length); qle->setEchoMode(QLineEdit::Password); qle->setText(child.attribute("href")); this->setItemWidget( childItem, 1, qle); childItem->setIcon(0, QIcon(":/images/password.png")); } if( child.attribute("name") == "registers"||child.attribute("name") == "cycle"||child.attribute("name") == "comport"||child.attribute("name") == "address"||child.attribute("name") == "begin_TU"||child.attribute("name") == "end_TU"||child.attribute("name") == "tic") { JSpinBox *sbx = new JSpinBox(childItem); sbx->setMaximum(0xffff); sbx->setMinimum(0); sbx->setValue(child.attribute("href").toInt()); this->setItemWidget( childItem, 1, sbx ); } if( (!child.attributeNode("ico").isNull())&&(child.attribute("ico") != "") ) { childItem->setIcon(0, QIcon(child.attribute("ico"))); } } else if (child.tagName() == "separator") { QTreeWidgetItem *childItem = createItem(child, item); childItem->setFlags(item->flags() & ~(Qt::ItemIsSelectable | Qt::ItemIsEditable)); childItem->setText(0, QString(30, 0xB7)); } child = child.nextSiblingElement(); } }
bool Bookmarks::updateBookmarkState(const QString &type, const QVariant &data, bool state) { if (type == "Verses" || type == tr("Verses")) { QDomElement verseNode = findChildNode("folder", "Verses"); if (verseNode.isNull()) { QDomElement root = m_domDocument.createElement("folder"); QDomElement child = m_domDocument.createElement("title"); QDomText newTitleText = m_domDocument.createTextNode(tr("Verses")); root.setAttribute("folded", "no"); child.appendChild(newTitleText); root.appendChild(child); m_domDocument.documentElement().appendChild(root); verseNode = root; parseFolderElement(root); } QTreeWidgetItem* parentItem = m_domElementForItem.key(verseNode); //REMOVE OPERATION if (!state) { int countOfChildren = parentItem->childCount(); int numOfDel = 0; bool allMatchedRemoved = true; for (int i = 0; i < countOfChildren; ++i) { QTreeWidgetItem* childItem = parentItem->child(i); if (!childItem) { continue; } if (childItem->data(0, Qt::UserRole).toString() == data.toStringList().at(0) + "|" + data.toStringList().at(1)) { ++numOfDel; if (unBookmarkItem(childItem)) { --i; //because one of children was deleted --countOfChildren; } else { allMatchedRemoved = false; } } } //allMatchedRemoved is false when at least one of // matched items are not deleted!! return allMatchedRemoved; } QDomElement bookmark = m_domDocument.createElement("bookmark"); QDomElement bookmarkTitle = m_domDocument.createElement("title"); QDomElement bookmarkDescription = m_domDocument.createElement("desc"); QDomElement bookmarkInfo = m_domDocument.createElement("info"); QDomElement infoMetaData = m_domDocument.createElement("metadata"); infoMetaData.setAttribute("owner", "http://saaghar.pozh.org"); QDomText bookmarkSaagharMetadata = m_domDocument.createTextNode(data.toStringList().at(0) + "|" + data.toStringList().at(1)); infoMetaData.appendChild(bookmarkSaagharMetadata); bookmarkInfo.appendChild(infoMetaData); bookmark.appendChild(bookmarkTitle); bookmark.appendChild(bookmarkDescription); bookmark.appendChild(bookmarkInfo); verseNode.appendChild(bookmark); qDebug() << data << state; QDomElement firstChild = m_domDocument.documentElement().firstChildElement("folder"); firstChild.text(); QTreeWidgetItem* item = createItem(bookmark, parentItem); item->setIcon(0, m_bookmarkIcon); QString title = data.toStringList().at(2); item->setText(0, title); item->setToolTip(0, title); item->setData(0, Qt::UserRole, data.toStringList().at(0) + "|" + data.toStringList().at(1)); item->setData(1, Qt::UserRole, data.toStringList().at(3)); if (data.toStringList().size() == 5) { item->setText(1, data.toStringList().at(4)); item->setToolTip(1, data.toStringList().at(4)); } if (parentItem->childCount() == 1) { resizeColumnToContents(0); resizeColumnToContents(1); } return true; } //an unknown type!! return false; }
void Bookmarks::parseFolderElement(const QDomElement &element, QTreeWidgetItem* parentItem, const QString &/*elementID*/) { QDomElement parentElement(element); QString id = ""; if (parentElement.tagName() == "folder") { //old files that their 'folder' tag don't use 'id' attribute // just contain 'folder' tag of type 'Verses'! id = parentElement.attribute("id", "Verses"); parentElement.setAttribute("id", id); } QTreeWidgetItem* item = createItem(parentElement, parentItem, id); QString title; if (id == "Verses") { title = tr("Verses"); } else { title = element.firstChildElement("title").text(); } if (title.isEmpty()) { title = QObject::tr("Folder"); } item->setIcon(0, m_folderIcon); item->setText(0, title); item->setToolTip(0, title); bool folded = (parentElement.attribute("folded") != "no"); setItemExpanded(item, !folded); QDomElement child = parentElement.firstChildElement(); while (!child.isNull()) { if (child.tagName() == "folder") { //TODO: we can save labguage within a 'metadata' tag of this 'folder' // //update node title by new loaded translation QString id = child.attribute("id"); QString title = child.firstChildElement("title").text(); if (id.isEmpty()) { //old files that their 'folder' tags don't use 'id' attribute just contain 'folder' tags of type 'Verses'! id = "Verses"; title = tr(title.toLocal8Bit().data()); QDomElement oldTitleElement = child.firstChildElement("title"); QDomElement newTitleElement = m_domDocument.createElement("title"); QDomText newTitleText = m_domDocument.createTextNode(tr("Verses")); newTitleElement.appendChild(newTitleText); child.replaceChild(newTitleElement, oldTitleElement); child.setAttribute("id", "Verses"); } parseFolderElement(child, item, id); } else if (child.tagName() == "bookmark") { QTreeWidgetItem* childItem = createItem(child, item); QString title = child.firstChildElement("title").text(); if (title.isEmpty()) { title = QObject::tr("Folder"); } QDomElement infoChild = child.firstChildElement("info"); QDomElement metaData = infoChild.firstChildElement("metadata"); while (!metaData.isNull()) { QString owner = metaData.attribute("owner"); if (owner == "http://saaghar.pozh.org") { break; } metaData = metaData.nextSiblingElement("metadata"); } if (!metaData.isNull() && metaData.attribute("owner") == "http://saaghar.pozh.org") { childItem->setData(0, Qt::UserRole, metaData.text()); } else { qDebug() << "This DOM-NODE SHOULD deleted--->" << title; } //href data URL data childItem->setData(1, Qt::UserRole, child.attribute("href", "http://saaghar.pozh.org")); childItem->setIcon(0, m_bookmarkIcon); childItem->setText(0, title); childItem->setToolTip(0, title); childItem->setText(1, child.firstChildElement("desc").text()); childItem->setToolTip(1, child.firstChildElement("desc").text()); } else if (child.tagName() == "separator") { QTreeWidgetItem* childItem = createItem(child, item); childItem->setFlags(item->flags() & ~(Qt::ItemIsSelectable | Qt::ItemIsEditable)); childItem->setText(0, QString(30, 0xB7)); } child = child.nextSiblingElement(); } }