const int InsertTextButton = 10;

//отсылает сигнал в итемменеджер о том, что был добавлен блок
void MainWindow::itemInserted(DiagramItem *item)
{
    pointerTypeGroup->button(int(DiagramScene::MoveItem))->setChecked(true);
    scene->setMode(DiagramScene::Mode(pointerTypeGroup->checkedId()));
    buttonGroup->button(int(item->diagramType()))->setChecked(false);
    manager.itemInserted2(item);
	statesManager->appendState(manager);		//сохраняет новое состояние менеджера
}
//отсылает сигнал в итемменеджер о том, что была добавлена стрелка
void MainWindow::arrInserted(Arrow2 *arrow, int startId, int endId, int arrId, QPointF Pend, int type)
{
    manager.arrInserted2(arrow, startId,endId, arrId, Pend, type);
	statesManager->appendState(manager);		//сохраняет новое состояние менеджера
}
//отсылает сигнал в итемменеджер о том, что необходимо обновить все стрелки, чтобы при передвижении блока стрелки тянулись за ним
void MainWindow::itemMoved()
{
    manager.itemMoved2();
}
//отсылает сигнал в итемменеджер о том, что блок изменил свои координаты
void MainWindow::itemChangeKoords(DiagramItem *item, QPointF point)
{
	manager.itemChangeKoords2(item, point);
	statesManager->appendState(manager);		//сохраняет новое состояние менеджера
}
//отсылает сигнал в итемменеджер о том, что был добавлен комментарий
void MainWindow::textInserted(DiagramTextItem *item, QPointF point)
{
    buttonGroup->button(InsertTextButton)->setChecked(false);
    scene->setMode(DiagramScene::Mode(pointerTypeGroup->checkedId()));
	manager.textInserted2(item, point);
	statesManager->appendState(manager);		//сохраняет новое состояние менеджера
}
//отсылает сигнал в итемменеджер о том, что блоку было добавлено название
void MainWindow::itemCommInserted(QString text, int Id)
{
	manager.commentInserted(text, Id);
	statesManager->appendState(manager);		//сохраняет новое состояние менеджера
}
//сохранение
void MainWindow::newDm()
{
    manager.newDiagram();
}

//сохранение
void MainWindow::save()
{
    manager.save();
}
//сохранить как
void MainWindow::saveAs()
{
    manager.saveAs();
}
//диалог рамки
//расставляет все тексты, которые можно внести/изменить
void MainWindow::setFrame()
{
	int dialogCode; // как закрылся диалог

	// Создаем диалог. В качества окна-родителя указываем главное окно
	FrameDialog dlg(this);

	dlg.setStartStatus(mainFrame);
	
	// Запускаем диалог в модальном режиме
	dialogCode = dlg.exec();
	
	//Если диалог закрылся с подтверждением
	if (dialogCode==1)
	{
		mainFrame = dlg.frameChange();
		for(int i=0; i<Texts.size(); i++)
			scene->removeItem(Texts[i]);
		Texts.clear();
	}
	QGraphicsTextItem* text;
	//Верхние поля  - тексты
	text = scene->addText(mainFrame.usingLine);	text->setPos(10,22.5); Texts.append(text); //1 Используется в
	text = scene->addText(mainFrame.authorLine); text->setPos(215,7.5); Texts.append(text);//2 Автор
	text = scene->addText(mainFrame.projectLine); text->setPos(215,22.5); Texts.append(text);//2 Проект
	text = scene->addText(mainFrame.dateLine); text->setPos(445,7.5); Texts.append(text);//2 Дата
	text = scene->addText(mainFrame.timeLine); text->setPos(445,22.5); Texts.append(text);//2 Время
	text = scene->addText(mainFrame.commentsLine); text->setPos(225,35); Texts.append(text);//2 Замечания
	text = scene->addText(mainFrame.versionLine); text->setPos(445,35); Texts.append(text);//2 Версия
	if(mainFrame.check == 1)
	{
		QString tmp = "X";
		text = scene->addText(tmp); text->setPos(555,0.5); Texts.append(text);//3 Галочка
	}
	else
	{
		QString tmp = "";
		text = scene->addText(tmp); text->setPos(555,0.5); Texts.append(text);//3 Галочка
	}

	//Нижние поля  - тексты
	text = scene->addText(mainFrame.nodeLine); text->setPos(65, 757.5); Texts.append(text);//1 Узел
	text = scene->addText(mainFrame.nameLine); text->setPos(325, 757.5); Texts.append(text);//2 Заголовок
	text = scene->addText(mainFrame.numberLine); text->setPos(945, 757.5); Texts.append(text);//3 Номер

	manager.setFrameTexts(Texts);
	statesManager->appendState(manager);
}
//отрисовка рамки
//рисует саму рамку и тексты
void MainWindow::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); //1 Используется в
	tmp = "Автор:  ";
	text = scene->addText(tmp);	text->setPos(165,7.5);//2 Автор
	tmp = "Проект:  ";
	text = scene->addText(tmp);	text->setPos(165, 22.5);//2 Проект
	tmp = "Дата:  ";
	text = scene->addText(tmp);	text->setPos(395, 7.5);//2 Дата
	tmp = "Время:  ";
	text = scene->addText(tmp);	text->setPos(395, 22.5);//2 Время
	tmp = "Замечания:  ";
	text = scene->addText(tmp);	text->setPos(165, 35);//2 Замечания
	tmp = "Версия:  ";
	text = scene->addText(tmp);	text->setPos(395, 35);//2 Версия

	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);//1 Узел
	tmp = "Заголовок:  ";
	text = scene->addText(tmp);	text->setPos(265, 757.5);//2 Заголовок
	tmp = "Номер:  ";
	text = scene->addText(tmp);	text->setPos(895, 757.5);//3 Номер
}
