#ifndef ITEMMANAGER_H
#define ITEMMANAGER_H
#include <QList>
#include "diagramitem.h"
#include "arrow.h"
#include "arrow2.h"
#include "diagramscene.h"
#include "iteminfo.h"


// 
//
class ItemManager
{
public:
    ItemManager();
   	ItemManager(DiagramScene*);
	ItemManager(DiagramScene*, QMenu*);
private:
    QList<ItemInfo> items;
	QList <QString> frameTexts;
    DiagramScene *scene;
    QString gFileName;

	QList<Arr> arrowsList;
	QList<Arrow2 *> arrows;
	QList <DiagramItem *> itList;
	QList<Comment> comms;
	QList <DiagramTextItem *> commList;
	QMenu *menu;

	QColor myItemColor;

	int ID;

	void paintingFrame();				//для отрисовки рамки при загрузке

	bool iSaved;

public:
    QString getFileName() {return gFileName;};
    void itemInserted2(DiagramItem*);   //Во всех местах вызова добавил сохранение состояний ItemManager-а
   	void arrInserted2(Arrow2 *arrow, int startId, int endId, int arrId, QPointF Pend, int type);    //Во всех местах вызова добавил сохранение состояний ItemManager-а
    void commentInserted(QString text, int Id); //Во всех местах вызова добавил сохранение состояний ItemManager-а
    void weightInserted(int weight, int Id); //добавление веса блока
	void itemMoved2();  //для обновления стрелок при перемещении блока
	void itemChangeKoords2(DiagramItem *item, QPointF point);	//блока сменил положение на сцене
	void itemDeleted(DiagramItem*);	//блок был удален
	void commentDeleted(DiagramTextItem*);	//блок был удален
	void arrowDeleted(Arrow2 *arrow);	//удаление отдельной стрелки (может еще пригодиться)
	void setFrameTexts(QList <QGraphicsTextItem*> Texts);	//для задания текстов в рамке
	void textInserted2(DiagramTextItem * text,QPointF point);
	void newDiagram();
    void load();    //Во всех местах вызова обнулял массив состояний
    void save();	
    void saveAs();
    void saving(QString fileName);
    void loading(QString fileName);
    void changeSize();
    QList<ItemInfo> returnItems() const { return items;}
    QList<DiagramItem *> returnItList() const { return itList;}
    void draw_items();
    int getISaved() {return iSaved;};

	int returnID() const
		{ return ID;}
	DiagramItem * returnItem(int ID);

};

#endif // ITEMMANAGER_H
