Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
#include "toonzqt/tmessageviewer.h"
Toshihiro Shimizu 890ddd
#include "toonzqt/dvdialog.h"
Toshihiro Shimizu 890ddd
#include <QVBoxLayout>
Toshihiro Shimizu 890ddd
#include <QPushButton>
Toshihiro Shimizu 890ddd
#include <QListView>
Toshihiro Shimizu 890ddd
#include <QStandardItemModel>
Toshihiro Shimizu 890ddd
#include <QSortFilterProxyModel>
Toshihiro Shimizu 890ddd
#include <QCheckBox>
Toshihiro Shimizu 890ddd
#include <QLabel>
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
namespace
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
QIcon gRedIcon;
Toshihiro Shimizu 890ddd
QIcon gGreenIcon;
Toshihiro Shimizu 890ddd
QIcon gYellowIcon;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//-------------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
class MyQListView : public QListView
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
public:
Toshihiro Shimizu 890ddd
	MyQListView(QWidget *parent)
Toshihiro Shimizu 890ddd
		: QListView(parent) {}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
protected:
Toshihiro Shimizu 890ddd
	void rowsInserted(const QModelIndex &parent, int start, int end)
Toshihiro Shimizu 890ddd
	{
Toshihiro Shimizu 890ddd
		QListView::rowsInserted(parent, start, end);
Toshihiro Shimizu 890ddd
		scrollToBottom();
Toshihiro Shimizu 890ddd
	}
Toshihiro Shimizu 890ddd
};
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//----------------------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
} //namespace
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
class MySortFilterProxyModel : public QSortFilterProxyModel
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
public:
Toshihiro Shimizu 890ddd
	MySortFilterProxyModel(QObject *parent)
Toshihiro Shimizu 890ddd
		: QSortFilterProxyModel(parent) {}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	bool filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const
Toshihiro Shimizu 890ddd
	{
Toshihiro Shimizu 890ddd
		TMessageViewer *v = dynamic_cast<TMessageViewer *>(parent());
Toshihiro Shimizu 890ddd
		assert(v);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
		QIcon ic = ((QStandardItemModel *)sourceModel())->item(sourceRow)->icon();
Toshihiro Shimizu 890ddd
		if (ic.cacheKey() == gGreenIcon.cacheKey())
Toshihiro Shimizu 890ddd
			return v->m_greenCheck->isChecked();
Toshihiro Shimizu 890ddd
		else if (ic.cacheKey() == gYellowIcon.cacheKey())
Toshihiro Shimizu 890ddd
			return v->m_yellowCheck->isChecked();
Toshihiro Shimizu 890ddd
		else if (ic.cacheKey() == gRedIcon.cacheKey())
Toshihiro Shimizu 890ddd
			return v->m_redCheck->isChecked();
Toshihiro Shimizu 890ddd
		else
Toshihiro Shimizu 890ddd
			return true;
Toshihiro Shimizu 890ddd
	}
Toshihiro Shimizu 890ddd
};
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//----------------------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
void TMessageViewer::onClicked(bool)
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
	TMessageRepository::instance()->clear();
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	/*return;
Toshihiro Shimizu 890ddd
	static int count=0;
Toshihiro Shimizu 890ddd
	count++;
Toshihiro Shimizu 890ddd
	DVGui::MsgBox((count%3)==1?INFORMATION:(count%3)==2?WARNING:CRITICAL, "messaggio "+QString::number(count));*/
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//-----------------------------------------------------------
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
void TMessageViewer::refreshFilter(int)
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
	m_proxyModel->invalidate();
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//---------------------------------------------------
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
void TMessageRepository::clear()
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
	m_sim->clear();
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//---------------------------------------------------
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
TMessageRepository::TMessageRepository()
Toshihiro Shimizu 890ddd
	: m_sim(new QStandardItemModel())
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//---------------------------------------------------
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
TMessageRepository *TMessageRepository::instance()
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
	static TMessageRepository *theObject = 0;
Toshihiro Shimizu 890ddd
	if (theObject == 0) {
Toshihiro Shimizu 890ddd
		theObject = new TMessageRepository();
Toshihiro Shimizu 890ddd
		bool ret = connect(TMsgCore::instance(), SIGNAL(sendMessage(int, const QString &)), theObject, SLOT(messageReceived(int, const QString &)));
Toshihiro Shimizu 890ddd
		assert(ret);
Toshihiro Shimizu 890ddd
		//TMsgCore::instance()->getConnectionName();
Toshihiro Shimizu 890ddd
	}
Toshihiro Shimizu 890ddd
	return theObject;
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//---------------------------------------------------
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
void TMessageRepository::messageReceived(int type, const QString &message)
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
	if (gRedIcon.isNull()) {
Toshihiro Shimizu 890ddd
		gRedIcon = QIcon(":Resources/tmsg_error.png");
Toshihiro Shimizu 890ddd
		gYellowIcon = QIcon(":Resources/tmsg_warning.png");
Toshihiro Shimizu 890ddd
		gGreenIcon = QIcon(":Resources/tmsg_info.png");
Toshihiro Shimizu 890ddd
	}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	switch (type) {
Shinya Kitaoka bb1d04
	case DVGui::INFORMATION:
Toshihiro Shimizu 890ddd
		m_sim->appendRow(new QStandardItem(gGreenIcon, message));
Shinya Kitaoka d4642c
		break;
Shinya Kitaoka d4642c
	case DVGui::WARNING:
Shinya Kitaoka d4642c
		m_sim->appendRow(new QStandardItem(gYellowIcon, message));
Shinya Kitaoka d4642c
		break;
Shinya Kitaoka d4642c
	case DVGui::CRITICAL:
Shinya Kitaoka d4642c
		m_sim->appendRow(new QStandardItem(gRedIcon, message));
Shinya Kitaoka d4642c
		break;
Toshihiro Shimizu 890ddd
	}
Toshihiro Shimizu 890ddd
Shinya Kitaoka bb1d04
	if (type == DVGui::CRITICAL || (type == DVGui::WARNING && !TMessageViewer::isTMsgVisible()))
Shinya Kitaoka eabf18
		DVGui::MsgBoxInPopup(DVGui::MsgType(type), message);
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//---------------------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Shinya Kitaoka 3bfa54
std::vector<TMessageViewer *> TMessageViewer::m_tmsgViewers;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
bool TMessageViewer::isTMsgVisible()
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
	for (int i = 0; i < (int)m_tmsgViewers.size(); i++)
Toshihiro Shimizu 890ddd
		if (m_tmsgViewers[i]->isVisible())
Toshihiro Shimizu 890ddd
			return true;
Toshihiro Shimizu 890ddd
	return false;
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//--------------------------------------------------
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
TMessageViewer::TMessageViewer(QWidget *parent)
Toshihiro Shimizu 890ddd
	: QFrame(parent)
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
	m_tmsgViewers.push_back(this);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	bool ret = true;
Toshihiro Shimizu 890ddd
	setFrameStyle(QFrame::StyledPanel);
Toshihiro Shimizu 890ddd
	setObjectName("OnePixelMarginFrame");
Toshihiro Shimizu 890ddd
	QVBoxLayout *vLayout = new QVBoxLayout();
Toshihiro Shimizu 890ddd
	vLayout->setMargin(0);
Toshihiro Shimizu 890ddd
	QFrame *fr = new QFrame();
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	QHBoxLayout *hLayout = new QHBoxLayout();
Toshihiro Shimizu 890ddd
	hLayout->setMargin(0);
Toshihiro Shimizu 890ddd
	fr->setLayout(hLayout);
Toshihiro Shimizu 890ddd
	fr->setFixedHeight(24);
Toshihiro Shimizu 890ddd
	fr->setStyleSheet("background-color: rgb(210,210,210);");
Toshihiro Shimizu 890ddd
	hLayout->addSpacing(4);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	hLayout->addWidget(new QLabel("Display:  "));
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	m_redCheck = new QCheckBox(tr("Errors"));
Toshihiro Shimizu 890ddd
	m_redCheck->setChecked(true);
Toshihiro Shimizu 890ddd
	ret = ret && connect(m_redCheck, SIGNAL(stateChanged(int)), SLOT(refreshFilter(int)));
Toshihiro Shimizu 890ddd
	hLayout->addWidget(m_redCheck);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	m_yellowCheck = new QCheckBox(tr("Warnings"));
Toshihiro Shimizu 890ddd
	m_yellowCheck->setChecked(true);
Toshihiro Shimizu 890ddd
	ret = ret && connect(m_yellowCheck, SIGNAL(stateChanged(int)), SLOT(refreshFilter(int)));
Toshihiro Shimizu 890ddd
	hLayout->addWidget(m_yellowCheck);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	m_greenCheck = new QCheckBox(tr("Infos"));
Toshihiro Shimizu 890ddd
	m_greenCheck->setChecked(true);
Toshihiro Shimizu 890ddd
	ret = ret && connect(m_greenCheck, SIGNAL(stateChanged(int)), SLOT(refreshFilter(int)));
Toshihiro Shimizu 890ddd
	hLayout->addWidget(m_greenCheck);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	hLayout->addStretch();
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	QPushButton *pb = new QPushButton(tr(" Clear "));
Toshihiro Shimizu 890ddd
	ret = ret && connect(pb, SIGNAL(clicked(bool)), SLOT(onClicked(bool)));
Toshihiro Shimizu 890ddd
	hLayout->addWidget(pb);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	hLayout->addSpacing(4);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	vLayout->addWidget(fr);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	MyQListView *lv = new MyQListView(this);
Toshihiro Shimizu 890ddd
	lv->setAlternatingRowColors(true);
Toshihiro Shimizu 890ddd
	lv->setEditTriggers(QAbstractItemView::NoEditTriggers);
Toshihiro Shimizu 890ddd
	lv->setAutoScroll(true);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	m_proxyModel = new MySortFilterProxyModel(this);
Toshihiro Shimizu 890ddd
	m_proxyModel->setDynamicSortFilter(true);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	m_proxyModel->setSourceModel(TMessageRepository::instance()->getModel());
Toshihiro Shimizu 890ddd
	lv->setModel(m_proxyModel);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	vLayout->addWidget(lv);
Toshihiro Shimizu 890ddd
	setLayout(vLayout);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	assert(ret);
Toshihiro Shimizu 890ddd
}