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