1 #include "note_xml.h" 2 3 #include <QClipboard> 4 #include <QApplication> 5 6 #include <QTreeWidget> 7 #include <QDomDocument> 8 #include <QDomElement> 9 #include <QHeaderView> 10 #include <QDateTime> 11 12 //document 13 14 //TODO: тут модель нужна таки... 15 XmlNote(const QFileInfo & fileinfo,Note::Type type_new)16XmlNote::XmlNote(const QFileInfo& fileinfo, Note::Type type_new) 17 : Note(fileinfo, type_new) 18 { 19 document = new QDomDocument(); 20 tree_widget = new QTreeWidget(); 21 tree_widget->header()->setResizeMode(QHeaderView::ResizeToContents); 22 tree_widget->setColumnCount(3); 23 //tree_widget->setHeaderHidden(true); 24 // tree_widget->setHeaderLabel(title()+":"); 25 26 load(); //loading note's content 27 } 28 ~XmlNote()29XmlNote::~XmlNote() 30 { 31 delete tree_widget; 32 } 33 34 //Reading file load()35void XmlNote::load() 36 { 37 file.close(); 38 if(!file.open(QIODevice::ReadOnly)) return; 39 if(!document->setContent(&file)) 40 { 41 file.close(); 42 return; 43 } 44 file.close(); 45 QDomElement docElem = document->documentElement(); 46 47 QDomNode n = docElem.firstChild(); 48 while(!n.isNull()) 49 { 50 QDomElement e = n.toElement(); // try to convert the node to an element. 51 if(!e.isNull() && e.tagName()=="task") apendTask(&e); 52 n = n.nextSibling(); 53 } 54 } 55 apendTask(QDomElement * element,QTreeWidgetItem * parent)56void XmlNote::apendTask(QDomElement* element, QTreeWidgetItem* parent) 57 { 58 QTreeWidgetItem* item_text = new QTreeWidgetItem(tree_widget); 59 60 if(parent==0) tree_widget->insertTopLevelItem(0, item_text); 61 else parent->insertChild(0, item_text); 62 63 QDomNode n = element->firstChild(); 64 while(!n.isNull()) 65 { 66 QDomElement e = n.toElement(); // try to convert the node to an element. 67 if(!e.isNull()) 68 { 69 if(e.tagName()=="title") item_text->setText(0, e.text()); 70 if(e.tagName()=="task") apendTask(&e); 71 } 72 n = n.nextSibling(); 73 } 74 } 75 76 //Saving note save(bool forced)77void XmlNote::save(bool forced) 78 { 79 if(!(content_changed || forced)) return; //If file doesn't need in saving, exiting from function 80 // file.close(); 81 // if(!file.open(QFile::WriteOnly | QFile::Text)) return; 82 // QTextStream out(&file); 83 // out << document->toString(); 84 // file.close(); 85 content_changed = false; 86 } 87 88 //Returning widget (it's can be placed to tabwidget) widget()89QWidget* XmlNote::widget() 90 { 91 return tree_widget; 92 } 93 94 //Coping note's content to clipboard copy() const95void XmlNote::copy() const 96 { 97 QClipboard* clipboard = QApplication::clipboard(); 98 clipboard->setText(document->toString()); 99 } 100