#include "itemmanager.h"
#include <QDebug>
#include <QString>
#include <QMenu>


#include <QString>
#include <QDataStream>
#include <QMessageBox>
#include <QTextCodec>
#include <QFileDialog>
#include <QMessageBox>
#include <stdio.h>
#include <stdlib.h>
#include "windows.h"
#include <QDataStream>
#include <shellapi.h>
#include "mainwindow.h"
ItemManager::ItemManager()
{

}

ItemManager::ItemManager(DiagramScene *scn)
{
    scene = scn;
}
//конструктор
ItemManager::ItemManager(DiagramScene *scn, QMenu *Menu)
{
    scene = scn;
	menu = Menu;

	myItemColor = Qt::white;

	if(frameTexts.size() == 0)
		for(int i=0; i<11; i++)
			frameTexts.append("");

	ID=1;
}
//вставка блока
void ItemManager::itemInserted2(DiagramItem* item)
{
    qDebug()<<"item added";
    qDebug()<<"<position"<<QString::number(item->x())<<" "<<QString::number(item->y());
    ItemInfo m_item;
    m_item.x= item->x();
    m_item.y= item->y();
    m_item.id = item->id();//ID;
	m_item.number = item->returnNumber();
        m_item.weight = item->weightNum();
        //ID++;
    m_item.comment = QString("");
    items.append(m_item);
	itList.append(item);
	iSaved = 0;
}
//вставка стрелки
void ItemManager::arrInserted2(Arrow2 *arrow, int startId, int endId, int arrId, QPointF Pend, int type)
{
	Arr new_arrow;
	new_arrow.firstId = startId;
	new_arrow.secondId = endId;
        new_arrow.arrId = arrId;
	new_arrow.Pend = Pend;
	new_arrow.type = type;
        new_arrow.typeArr = arrow->type2;
	arrowsList.append(new_arrow);
	Arrow2* newArrow = arrow;
	arrows.append(newArrow);
	ID++;
	iSaved = 0;
}
//вставка названия блока
void ItemManager::commentInserted(QString text, int Id)
{
	for(int i=0; i<items.size(); i++)
	{
		if(items[i].id == Id)
			items[i].comment = text;
	}
	for(int i=0; i<itList.size(); i++)
	{
		if(itList[i]->id() == Id)
			itList[i]->setCom(text);
	}
	iSaved = 0;
}
//добавление веса блока в массив с иформацией о блоках
void ItemManager::weightInserted(int weight, int Id)
{
        for(int i=0; i<items.size(); i++)
        {
                if(items[i].id == Id)
                        items[i].weight = weight;
        }
		iSaved = 0;
}
void ItemManager::textInserted2(DiagramTextItem * text,QPointF point)
{
	Comment tmpCom;
	tmpCom.id = ID;
	tmpCom.point = point;
	tmpCom.text = text->toPlainText();
	comms.append(tmpCom);
	iSaved = 0;
	ID++;
	commList.append(text);
}

//обновление всех стрелок при перемещении блока
void ItemManager::itemMoved2()
{
	for(int i=0; i<arrows.size(); i++)
		arrows[i]->updatePosition();
	iSaved = 0;
}
//блок сменил положение на сцене
void ItemManager::itemChangeKoords2(DiagramItem *item, QPointF point)
{
	for (int i=0; i<items.size(); i++)
		if(items[i].id == item->id())
		{
			items[i].x = point.x();
			items[i].y = point.y();
		}
	for (int i=0; i<itList.size(); i++)
		if(itList[i]->id() == item->id())
		{
			itList[i]->setX(point.x());
			itList[i]->setY(point.y());
		}
	for(int i=0; i<arrows.size(); i++)		//обновление всех стрелок при перемещении блока
	{
		arrows[i]->updatePosition();
		if(item == arrows[i]->endItem())
		{
			arrows[i]->setEndPoint(item, arrowsList[i].typeArr);
			arrowsList[i].Pend = arrows[i]->endPoint();
		}
	}
	iSaved = 0;
}
//блок был удален
void ItemManager::itemDeleted(DiagramItem* item)
{
	QList<DiagramItem*>::iterator it;
	QList<DiagramItem*>::iterator it2;
	QList<ItemInfo>::iterator its;
	QList<ItemInfo>::iterator its_control;
	it=itList.begin();
	its = items.begin();
	int i=0;
	while(it != itList.end())
	{
		if((*its).id == item->id())
			its_control = its;
		if((*it)->id() == item->id())
		{
			it2 = it;
			QList<Arrow2 *>::iterator arrIt;
			QList<Arr>::iterator arrIts;
			arrIt = arrows.begin();
			arrIts = arrowsList.begin();
			while(arrIt != arrows.end())
			{
				Arrow2* tmpArr = *arrIt;
				DiagramItem* tmpStart = (*arrIt)->startItem();
				DiagramItem* tmpEnd = (*arrIt)->endItem();
				//удаление всех стрелок, подходящих к удаляемому блоку
				if((*arrIt)->startItem()->id() == item->id() || (*arrIt)->endItem()->id() == item->id())
					arrIt = arrows.erase(arrIt);
				else
					arrIt++;
				if((*arrIts).firstId == item->id() || (*arrIts).secondId == item->id())
					arrIts = arrowsList.erase(arrIts);
				else
					arrIts++;
			}
		}
		it++;
		its++;
		i++;
	}
	//удаление самого блока из всех массивов
	qgraphicsitem_cast<DiagramItem *>(*it2)->removeArrows();
	itList.erase(it2);
	items.erase(its_control);
	scene->removeItem(item);
	iSaved = 0;
}

void ItemManager::commentDeleted(DiagramTextItem* item)
{
    qDebug("StartDel");
	QList<DiagramTextItem*>::iterator it;
	QList<DiagramTextItem*>::iterator it2;
	QList<Comment>::iterator its;
	QList<Comment>::iterator its_control;
	it=commList.begin();
	its = comms.begin();
    int i=0;
    while(it != commList.end() && its != comms.end())
	{
		if((*its).id == item->id())
			its_control = its;
		if((*it)->id() == item->id())
			it2 = it;
		it++;
		its++;
    }
	//удаление самого блока из всех массивов
    qDebug("1111");
	commList.erase(it2);
    qDebug("2222");
    // comms.erase(its_control);
     comms.erase(its-1);
    qDebug("3333");
	scene->removeItem(item);
    qDebug("4444");
	iSaved = 0;

}


//удаление отдельной стрелки 
void ItemManager::arrowDeleted(Arrow2 *arrow)
{
    QMutableListIterator<Arrow2 *> arrIt(arrows);
    //уищем и удаляем Объект стрелки
        while(arrIt.hasNext())
        {
            if(arrIt.next()->getID() == arrow->getID())
            {
                arrIt.remove();
            }
        }
        //Ищем и удаляем объект стрелки из ICOM блоков
        for(int i=0; i<itList.size(); i++)
        {
                if(arrow->startItem()->id() == itList[i]->id() || arrow->endItem()->id() == itList[i]->id())
                        itList[i]->removeArrow(arrow);
        }
        //Ищем и удаляем объекты данных о стрелке
        for(int i=0; i<arrowsList.count(); i++)
        {
            if(arrowsList[i].arrId == arrow->getID())
                arrowsList.removeAt(i);
        }
        iSaved = 0;
}
//Загрузка
void ItemManager::load()
{

	//стандартный диалог
	class QString FileName = QFileDialog::getOpenFileName(0, "Select file to open...", "../saves/", "(*.ide)");
	if (FileName.isEmpty())
		return ;
    else
        loading(FileName);
}


//Собственно сама загрузка
void ItemManager::loading(QString fileName)
{
    gFileName = fileName;
    QFile file(fileName);
    file.open(QIODevice::ReadOnly);
    if (file.exists())
    {
        //Очищаем все массивы
        items.clear();
        arrowsList.clear();
        arrows.clear();
        itList.clear();
        comms.clear();
        frameTexts.clear();
        //открытие файла
        QDataStream rd(&file);
        int tempNum;
        rd >> tempNum;
        scene->setNewNumberB(tempNum);
        int count; int tmp;
        //загружаем данные о блоках в массивы
        rd>>count;
        for(int i=0; i<count; i++)
        {
            ItemInfo m_item;
            rd>>tmp;
            rd>>m_item.x;
            rd>>m_item.y;
            rd>>m_item.weight;
            rd>>m_item.id;
            rd>>m_item.number;
            rd>>m_item.comment;
            items.append(m_item);
            ID = m_item.id;

            DiagramItem *item = new DiagramItem(DiagramItem::Step, menu, 0, scene);
            item->setX(m_item.x);
            item->setY(m_item.y);
            item->setID(m_item.id);
            //item->setWei(m_item.weight);
        }
        //загружаем данные о стрелках в массивы
        rd>>count;
        for(int i=0; i<count; i++)
        {
            Arr new_arrow;
            rd>>tmp;
            rd>>new_arrow.firstId;
            rd>>new_arrow.secondId;
            rd>>new_arrow.arrId;
            rd>>tmp;
            new_arrow.Pend.setX(tmp);
            rd>>tmp;
            new_arrow.Pend.setY(tmp);
            rd>>tmp;
            if (tmp == 1)
                new_arrow.type = true;		//висячие
            else
                new_arrow.type = false;		//не висячие
            rd>>tmp;
            if(tmp == 0)
                new_arrow.typeArr = Arrow2::up;
            if(tmp == 1)
                new_arrow.typeArr = Arrow2::back;
            if(tmp == 2)
                new_arrow.typeArr = Arrow2::down;
            if(tmp == 3)
                new_arrow.typeArr = Arrow2::front;
            arrowsList.append(new_arrow);
            ID = new_arrow.arrId;
        }
        //загружаем данные о комментариях в массив
        rd>>count;
        for(int i=0; i<count; i++)
        {
            QString str;
            Comment comm;
            rd>>tmp;
            comm.id = tmp;
            rd>>comm.text;
            rd>>tmp;
            comm.point.setX(tmp);
            rd>>tmp;
            comm.point.setY(tmp);
            comms.append(comm);
        }
        //загружаем данные о текстах рамки в массив
        rd>>count;
        for(int i=0; i<count; i++)
        {
            QString str;
            rd>>str;
            frameTexts.append(str);
        }
        draw_items();
        iSaved = 1;

        file.close();
    }
}


//Сохранить
void ItemManager::save()
{
	class QString FileName;
	if (gFileName.isEmpty())
	{
                FileName = QFileDialog::getSaveFileName(0, "Select file to open...", "",  "(*.ide)");
	}
    else
        FileName = gFileName;
    if (FileName.isEmpty())
		return ;
    gFileName = FileName;
	saving(gFileName);
	iSaved = 1;
	return ;
}
//Сохранить как
void ItemManager::saveAs()
{
	class QString FileName;
	
    FileName = QFileDialog::getSaveFileName(0, "Select file to open...", "../saves/",  "(*.ide)");

    if (FileName.isEmpty())
		return ;
    gFileName = FileName;
	saving(gFileName);
	iSaved = 1;
	return ;	
}
void ItemManager::newDiagram()
{
	if (!iSaved)
	{
		int btn = QMessageBox::question(0, "Warning!", "Do you want to save old diagram?", QMessageBox::Yes | QMessageBox::No | QMessageBox::Cancel);
		if (btn == QMessageBox::Yes)
		{
			class QString FileName = QFileDialog::getSaveFileName(0, "Select file to open...", "../saves/",  "(*.ide)");
			if (FileName.isEmpty())
				return ;
			saving(FileName);
			iSaved = 1;
		}
		else
			if (btn == QMessageBox::Cancel)
                return ;
	}
    //Очищаем все массивы
/*    gFileName = "";
    items.clear();
    arrowsList.clear();
    arrows.clear();
    itList.clear();
    comms.clear();
    frameTexts.clear();
    scene->clear(); */
    loading("Empty");
}
//Собственно само сохранение
void ItemManager::saving(QString fileName)
{
	QFile file(fileName);
	file.open(QIODevice::WriteOnly);
    QDataStream wr(&file);
    wr << scene->getNumberB();
    // wr.setVersion(QDataStream::Qt_4_7);
	//если рамку не редактировали, поля массивы надо заполнить пустыми строками
	if(frameTexts.size() == 0)
		for(int i=0; i<10; i++)
			frameTexts.append("");

	//wr<<"count "<<QString::number(items_for_load.size());
 //   for(int i=0; i<items_for_load.size(); i++)
 //   {
	//	wr<<"item "<<QString::number(i);
	//	wr<<"x: "<<QString::number(items_for_load[i].x);
	//	wr<<"y: "<<QString::number(items_for_load[i].y);
	//}
	//вытаскиваем данные о блоках и добавляем в массив
	wr<<(int)items.size();
	for(int i=0; i<items.size(); i++)
    {
		int a = items[i].x;
		int b = items[i].y;
		wr<<(int)i;
	    ItemInfo m_item;
		m_item.id=items[i].id;
	    m_item.x=(int) items[i].x;
		m_item.y=(int) items[i].y;
		if(items[i].weight>1000)
			m_item.weight = 0;
		else
			m_item.weight = (int) items[i].weight;
		m_item.comment = items[i].comment;
		
		wr<<(int)a;
		wr<<b;
		wr<<(int)m_item.weight;
		wr<<(int)m_item.id;
		wr<<(int)items[i].number;
		wr << QString(m_item.comment);
	}
	//вытаскиваем данные о стрелках и добавляем в массив
	wr<<(int)arrowsList.size();
	for(int i=0; i<arrowsList.size(); i++)
    {
		wr<<(int)i;
		wr<<(int)arrowsList[i].firstId;
		wr<<(int)arrowsList[i].secondId;
		wr<<(int)arrowsList[i].arrId;
		int q = arrows[i]->endPoint().x();
		wr<<(int)q;
		q = arrows[i]->endPoint().y();
		wr<<(int)q;
		if (arrowsList[i].type == true)
			wr << (int) 1;
		else
			wr << (int) 0;
		if (arrowsList[i].typeArr == Arrow2::up)
			wr<< (int)0;
		else if (arrowsList[i].typeArr == Arrow2::back)
			wr<< (int)1;
		else if (arrowsList[i].typeArr == Arrow2::down)
			wr<< (int)2;
		else if (arrowsList[i].typeArr == Arrow2::front)
			wr<< (int)3;
	}
	//вытаскиваем данные о комментариях и добавляем в массив
	wr<<(int)comms.size();
	for(int i=0; i<comms.size(); i++)
    {
		wr<<(int)comms[i].id;
		wr<<QString(comms[i].text);
		wr<<(int)comms[i].point.x();
		wr<<(int)comms[i].point.y();
	}
	//вытаскиваем данные о рамке и добавляем в массив
	wr<<(int)frameTexts.size();
	for(int i=0; i<frameTexts.size(); i++)
		wr<<QString(frameTexts[i]);


	file.close();
}
//Изменились поля рамки
void ItemManager::setFrameTexts(QList <QGraphicsTextItem*> Texts)
{
	for(int i=0; i<Texts.size(); i++)
		frameTexts[i] = Texts[i]->toPlainText();
	iSaved = 0;
}
//Возвращает итем по его идентификатору
DiagramItem* ItemManager::returnItem(int ID)
{
	bool flag = 0;
	DiagramItem *falseItem = new DiagramItem(DiagramItem::Step, menu, 0);
	falseItem->setID(-1);
	for (int i=0; i<itList.size(); i++)
	    if(itList[i]->id() == ID)
		{
			flag = 1;
			return itList[i];
		}
	if(flag == 0)
		return falseItem;
}
//Рисует рамку при загрузке
void ItemManager::paintingFrame()
{	//рисуется сама рамка
	QPolygonF polygon1; QPolygonF polygon2; QPolygonF polygon3; QPolygonF polygon4;
	QPen pen(Qt::black, 1, Qt::SolidLine, Qt::SquareCap, Qt::MiterJoin);
    //polygon << QPointF(5, 5) << QPointF(1135, 5)<< QPointF(1135, 805)<< QPointF(5, 805)<< QPointF(5, 5);
	//scene->addPolygon(polygon,pen);																					/* Верхние поля */
	polygon1 << QPointF(5, 5) << QPointF(155, 5)<< QPointF(155, 55)<< QPointF(5, 55)<< QPointF(5, 5)					/* 1 - 150 X 50 */
			<< QPointF(155, 5) << QPointF(535, 5)<< QPointF(535, 55)<< QPointF(155, 55)<< QPointF(155, 5)			/* 2 - 380 X 50 */
			<< QPointF(535, 5) << QPointF(585, 5)<< QPointF(585, 55)<< QPointF(535, 55)<< QPointF(535, 5)			/* 3 - 50 X 50 */
			<< QPointF(535, 5) << QPointF(535, 17.5) << QPointF(985, 17.5) << QPointF(985, 30)
			<< QPointF(535, 30) << QPointF(535, 42.5) << QPointF(985, 42.5) << QPointF(985, 55)
			<< QPointF(535, 55) << QPointF(535, 5)
			<< QPointF(585, 5) << QPointF(735, 5)<< QPointF(735, 55)<< QPointF(585, 55)<< QPointF(585, 5)			/* 4 - 150 X 50 */
			<< QPointF(735, 5) << QPointF(885, 5)<< QPointF(885, 55)<< QPointF(735, 55)<< QPointF(735, 5)			/* 5 - 150 X 50 */
			<< QPointF(885, 5) << QPointF(985, 5)<< QPointF(985, 55)<< QPointF(885, 55)<< QPointF(885, 5)			/* 6 - 100 X 50 */
			<< QPointF(985, 5) << QPointF(985, 55) << QPointF(1135, 55) << QPointF(1135, 5);						/* 7 - 150 X 50 */
	scene->addPolygon(polygon1,pen);																				/* Нижние поля */
	polygon2<< QPointF(5, 755) << QPointF(255, 755)<< QPointF(255, 805)<< QPointF(5, 805)<< QPointF(5, 755)			/* 7 - 150 X 50 */
			<< QPointF(255, 755) << QPointF(885, 755)<< QPointF(885, 805)<< QPointF(255, 805)<< QPointF(255, 755)	/* 7 - 150 X 50 */
			<< QPointF(885, 755) << QPointF(1135, 755)<< QPointF(1135, 805)<< QPointF(885, 805)<< QPointF(885, 755)	/* 7 - 150 X 50 */
			<< QPointF(5, 755);
	scene->addPolygon(polygon2,pen);
	polygon3 << QPointF(5, 5) << QPointF(5, 755)<< QPointF(5, 5);
	scene->addPolygon(polygon3,pen);
	polygon4 << QPointF(1135, 5) << QPointF(1135, 755)<< QPointF(1135, 5);
	scene->addPolygon(polygon4,pen);

	QGraphicsTextItem* text;
	//Верхние поля  - тексты
	QString tmp = "Используется в:  ";
	text = scene->addText(tmp);	text->setPos(45,7.5);	text = scene->addText(frameTexts[0]);	text->setPos(10,22.5);  //1 Используется в
	tmp = "Автор:  ";
	text = scene->addText(tmp);	text->setPos(165,7.5);	text = scene->addText(frameTexts[1]); text->setPos(215,7.5); //2 Автор
	tmp = "Проект:  ";
	text = scene->addText(tmp);	text->setPos(165, 22.5);	text = scene->addText(frameTexts[2]); text->setPos(215,22.5);  //2 Проект
	tmp = "Дата:  ";
	text = scene->addText(tmp);	text->setPos(395, 7.5);	text = scene->addText(frameTexts[3]); text->setPos(445,7.5); //2 Дата
	tmp = "Время:  ";
	text = scene->addText(tmp);	text->setPos(395, 22.5);	text = scene->addText(frameTexts[4]); text->setPos(445,22.5);  //2 Время
	tmp = "Замечания:  ";
	text = scene->addText(tmp);	text->setPos(165, 35);	text = scene->addText(frameTexts[5]); text->setPos(225,35);  //2 Замечания
	tmp = "Версия:  ";
	text = scene->addText(tmp);	text->setPos(395, 35);	text = scene->addText(frameTexts[6]); text->setPos(445,35);  //2 Версия
	text = scene->addText(frameTexts[7]); text->setPos(555,0.5);	//3 Галочка
	tmp = "Рабочая версия  ";
	text = scene->addText(tmp);	text->setPos(595, 0.5);	 //4 Раб. версия
	tmp = "Проект  ";
	text = scene->addText(tmp);	text->setPos(595, 13);	 //4 Проект
	tmp = "Рекомендовано  ";
	text = scene->addText(tmp);	text->setPos(595, 25.5); //4 Рекомендовано
	tmp = "Публикация  ";
	text = scene->addText(tmp);	text->setPos(595, 38);	 //4 Публикация
	tmp = "Читатель  ";
	text = scene->addText(tmp);	text->setPos(745, 0.5);	 //5 Читатель
	tmp = "Дата  ";
	text = scene->addText(tmp);	text->setPos(895, 0.5);	 //6 Дата

	//Нижние поля  - тексты
	tmp = "Узел:  ";
	text = scene->addText(tmp);	text->setPos(15, 757.5);	text = scene->addText(frameTexts[8]); text->setPos(65, 757.5); //1 Узел
	tmp = "Заголовок:  ";
	text = scene->addText(tmp);	text->setPos(265, 757.5);	text = scene->addText(frameTexts[9]); text->setPos(325, 757.5); //2 Заголовок
	tmp = "Номер:  ";
	text = scene->addText(tmp);	text->setPos(895, 757.5);	text = scene->addText(frameTexts[10]); text->setPos(945, 757.5); //3 Номер
}
//Отрисовка на сцене всех элементов
void ItemManager::draw_items()
{	//очищение сцены и массивов
    scene->clear();
	arrows.clear();
	itList.clear();
	paintingFrame();

	QList<DiagramItem*> itemsMassive; //для того, чтобы можно было использовать итемы для
                                        //отрисовки стрелок
    // 
    for(int i=0; i< items.size(); i++)
    {	//отрисовка блоков
		DiagramItem *item = new DiagramItem(DiagramItem::Step, menu, 0, scene);
        item->setX(items[i].x);
        item->setY(items[i].y);
        item->setID(items[i].id);
		item->setWeight(qgraphicsitem_cast<QGraphicsItem *>(item),items[i].weight);
		item->setNumber( qgraphicsitem_cast<QGraphicsItem *>(item), items[i].number);
		item->setNumberB(items[i].number);
		item->setZValue(1000);
		item->setBrush(myItemColor);
		itList.append(item);
        scene->addItem(item);
        DiagramTextItem *textItem = new DiagramTextItem(item, scene);
        textItem->setPos(-90.0,-40.0);
        textItem->setTextWidth(180);
        textItem->setPlainText(items[i].comment);
    }
    for(int i=0; i< arrowsList.size(); i++)
    {	//отрисовка стрелок
        int startIndex,endIndex;
		Arrow2 *arrow;
        for(int j=0; j<itList.count(); j++)
        {
            if(itList[j]->id() == arrowsList[i].firstId)
            {
                startIndex=j;
            }
            else if(itList[j]->id() == arrowsList[i].secondId)
            {
                endIndex=j;
            }
        }
        //Убрать всё ненужное в конструктор
        QColor myLineColor = Qt::black;//Убрать всё ненужное в конструктор
		if (arrowsList[i].type == 1)	//если стрелка висячая
		{
			DiagramItem *item;
			item = new DiagramItem(DiagramItem::DiagramType::Conditional, 0,itList[endIndex], scene);
			item->setID(arrowsList[i].firstId);
			item->setBrush(myLineColor);
			item->setZValue(1000);
			scene->addItem(item);
                        if(arrowsList[i].typeArr != Arrow2::TypeIn::front)
                            arrow = new Arrow2(item, itList[endIndex], arrowsList[i].Pend, 0, arrowsList[i].type, arrowsList[i].typeArr );
                        else
                            arrow = new Arrow2(itList[endIndex], itList[endIndex], arrowsList[i].Pend, 0, arrowsList[i].type, arrowsList[i].typeArr );
			item->addArrow(arrow);
		}		
		else	//если стрелка от блока к блоку
		{
                    arrow = new Arrow2(itList[startIndex], itList[endIndex], arrowsList[i].typeArr, 0 );
                    itList[startIndex]->addArrow(arrow);
		}
        arrow->setID(arrowsList[i].arrId);
        arrows<<arrow;
        arrow->setColor(myLineColor);//Убрать всё ненужное в конструктор
        itList[endIndex]->addArrow(arrow);
        arrow->setZValue(-1000.0);//Убрать всё ненужное в конструктор
        scene->addItem(arrow);
        arrow->updatePosition();
		arrow->setEndPoint(itList[endIndex], arrow->retType());
    }
    for(int i=0; i< comms.size(); i++)
	{	//отрисовка комментов
		QColor myTextColor = Qt::black;
		DiagramTextItem *textItem = new DiagramTextItem(0, scene);
        textItem->setZValue(1000.0);
        textItem->setTextWidth(180);
		textItem->setPlainText(comms[i].text);
		textItem->setDefaultTextColor(myTextColor);
		scene->addItem(textItem);
        textItem->setPos(comms[i].point.x(), comms[i].point.y());
	}

	for(int i=0; i< comms.size(); i++)
	{	//отрисовка комментов
		QColor myTextColor = Qt::black;
		DiagramTextItem *textItem = new DiagramTextItem(0, scene);
        textItem->setZValue(1000.0);
        textItem->setTextWidth(180);
		textItem->setPlainText(comms[i].text);
		textItem->setDefaultTextColor(myTextColor);
		scene->addItem(textItem);
        textItem->setPos(comms[i].point.x(), comms[i].point.y());
	}


    int a;
    a=items.count();
    a=items.count();
	iSaved = 0;
}
