#pragma once

#include <QDialog>

namespace Ui {
class lcQEditGroupsDialog;
}

class lcQEditGroupsDialog : public QDialog
{
	Q_OBJECT
	
public:
	lcQEditGroupsDialog(QWidget* Parent, const QMap<lcPiece*, lcGroup*>& PieceParents, const QMap<lcGroup*, lcGroup*>& GroupParents, lcModel* Model);
	~lcQEditGroupsDialog();
	
	QMap<lcPiece*, lcGroup*> mPieceParents;
	QMap<lcGroup*, lcGroup*> mGroupParents;
	QList<lcGroup*> mNewGroups;
	//QList<lcGroup*> mDeletedGroups; // todo: support deleting groups in the edit groups dialog

	enum
	{
		PieceRole = Qt::UserRole,
		GroupRole
	};

public slots:
	void accept();
	void reject();
	void on_newGroup_clicked();
	void onItemClicked(QTreeWidgetItem* Item, int Column);
	void onItemDoubleClicked(QTreeWidgetItem* Item, int Column);

private:
	Ui::lcQEditGroupsDialog *ui;

	void UpdateParents(QTreeWidgetItem* ParentItem, lcGroup* ParentGroup);
	void AddChildren(QTreeWidgetItem* ParentItem, lcGroup* ParentGroup);

	void timerEvent(QTimerEvent* Event);

	lcModel* mModel;
	QTreeWidgetItem* mLastItemClicked;
	bool mEditableDoubleClicked;
	QBasicTimer mClickTimer;
};