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)16 XmlNote::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()29 XmlNote::~XmlNote()
30 {
31 	delete tree_widget;
32 }
33 
34 //Reading file
load()35 void 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)56 void 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)77 void 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()89 QWidget* XmlNote::widget()
90 {
91 	return tree_widget;
92 }
93 
94 //Coping note's content to clipboard
copy() const95 void XmlNote::copy() const
96 {
97 	QClipboard* clipboard = QApplication::clipboard();
98 	clipboard->setText(document->toString());
99 }
100