|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
#include "messagepanel.h"
|
|
Toshihiro Shimizu |
890ddd |
#include "toonzqt/menubarcommand.h"
|
|
Toshihiro Shimizu |
890ddd |
#include "menubarcommandids.h"
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
#include "tapp.h"
|
|
Toshihiro Shimizu |
890ddd |
#include "toonz/tscenehandle.h"
|
|
Toshihiro Shimizu |
890ddd |
#include "mainwindow.h"
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
#include <qtextedit></qtextedit>
|
|
Toshihiro Shimizu |
890ddd |
#include <qpainter></qpainter>
|
|
Toshihiro Shimizu |
890ddd |
#include <qfontmetrics></qfontmetrics>
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//==================================
|
|
Toshihiro Shimizu |
890ddd |
// Centered Text Widget class
|
|
Toshihiro Shimizu |
890ddd |
//----------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
d1f6c4 |
class CenteredTextWidget final : public QWidget {
|
|
Shinya Kitaoka |
120a6e |
QString m_text;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
public:
|
|
Shinya Kitaoka |
120a6e |
CenteredTextWidget(QWidget *parent = 0) : QWidget(parent) {}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void setText(const QString &text) { m_text = text; }
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
protected:
|
|
Shinya Kitaoka |
473e70 |
void paintEvent(QPaintEvent *) override {
|
|
Shinya Kitaoka |
120a6e |
QPainter p(this);
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
QFontMetrics fm = p.fontMetrics();
|
|
Shinya Kitaoka |
120a6e |
QString elidedText = fm.elidedText(m_text, Qt::ElideRight, width());
|
|
shun-iwasawa |
443318 |
qreal textWidth = fm.horizontalAdvance(elidedText);
|
|
Shinya Kitaoka |
120a6e |
p.drawText((width() - textWidth) * 0.5, (height() - fm.height()) * 0.5,
|
|
Shinya Kitaoka |
120a6e |
elidedText);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
};
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//==============================
|
|
Toshihiro Shimizu |
890ddd |
// MessagePanel methods
|
|
Toshihiro Shimizu |
890ddd |
//------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
/*! \class MessagePanel
|
|
Shinya Kitaoka |
120a6e |
\brief MessagePanel class provides a pane to view a single,
|
|
Shinya Kitaoka |
120a6e |
centered text message.
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
Inherits \b TPanel.
|
|
Toshihiro Shimizu |
890ddd |
*/
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
MessagePanel::MessagePanel(QWidget *parent) : TPanel(parent) {
|
|
Shinya Kitaoka |
120a6e |
setPanelType("Message");
|
|
Shinya Kitaoka |
120a6e |
setWindowTitle("Message");
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
m_messageBox = new CenteredTextWidget(this);
|
|
Shinya Kitaoka |
120a6e |
setWidget(m_messageBox);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
MessagePanel::~MessagePanel() {}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void MessagePanel::setViewType(int viewType) { m_viewType = viewType; }
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
int MessagePanel::getViewType() { return m_viewType; }
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void MessagePanel::setPoolIndex(int poolIndex) { m_poolIndex = poolIndex; }
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
int MessagePanel::getPoolIndex() const { return m_poolIndex; }
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void MessagePanel::setMessage(QString text) { m_messageBox->setText(text); }
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//=============================================================================
|
|
Toshihiro Shimizu |
890ddd |
/*! \class LogPanel
|
|
Shinya Kitaoka |
120a6e |
\brief The LogPanel class provide a pane to log text messages in
|
|
Shinya Kitaoka |
120a6e |
a QTextEdit document.
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
Inherits \b TPanel.
|
|
Toshihiro Shimizu |
890ddd |
*/
|
|
Toshihiro Shimizu |
890ddd |
LogPanel::LogPanel(QWidget *parent, Qt::WindowFlags flags)
|
|
Shinya Kitaoka |
120a6e |
: TPanel(parent), TLogger::Listener() {
|
|
Shinya Kitaoka |
120a6e |
TLogger::instance()->addListener(this);
|
|
Shinya Kitaoka |
120a6e |
TLogger::instance()->clearMessages();
|
|
Shinya Kitaoka |
120a6e |
setPanelType("Log");
|
|
Shinya Kitaoka |
120a6e |
setIsMaximizable(false);
|
|
Shinya Kitaoka |
120a6e |
setWindowTitle("Log");
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
m_messageBox = new QTextEdit(this);
|
|
Shinya Kitaoka |
120a6e |
m_messageBox->setObjectName("LogPanel");
|
|
Shinya Kitaoka |
120a6e |
m_messageBox->setReadOnly(true);
|
|
Shinya Kitaoka |
120a6e |
m_messageBox->setMinimumSize(200, 150);
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
setWidget(m_messageBox);
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
connect(TApp::instance()->getCurrentScene(), SIGNAL(sceneSwitched()), this,
|
|
Shinya Kitaoka |
120a6e |
SLOT(clear()));
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
LogPanel::~LogPanel() { TLogger::instance()->removeListener(this); }
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void LogPanel::onLogChanged() {
|
|
Shinya Kitaoka |
120a6e |
TLogger *logger = TLogger::instance();
|
|
Shinya Kitaoka |
120a6e |
int messageCount = logger->getMessageCount();
|
|
Shinya Kitaoka |
120a6e |
if (!messageCount) return;
|
|
Shinya Kitaoka |
120a6e |
TLogger::Message message = logger->getMessage(messageCount - 1);
|
|
Shinya Kitaoka |
120a6e |
TLogger::MessageType type = message.getType();
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
m_messageBox->moveCursor(QTextCursor::End);
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
QString strCount;
|
|
Shinya Kitaoka |
120a6e |
;
|
|
Shinya Kitaoka |
120a6e |
m_messageBox->insertPlainText(strCount.setNum(messageCount) + QString("> "));
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
if (type == TLogger::Debug) {
|
|
Shinya Kitaoka |
120a6e |
m_messageBox->setTextColor(Qt::blue);
|
|
Shinya Kitaoka |
120a6e |
m_messageBox->insertPlainText(QString("Debug: "));
|
|
Shinya Kitaoka |
120a6e |
} else if (type == TLogger::Info) {
|
|
Shinya Kitaoka |
120a6e |
m_messageBox->setTextColor(QColor(0, 200, 0));
|
|
Shinya Kitaoka |
120a6e |
m_messageBox->insertPlainText(QString("Info: "));
|
|
Shinya Kitaoka |
120a6e |
} else if (type == TLogger::Warning) {
|
|
Shinya Kitaoka |
120a6e |
m_messageBox->setTextColor(QColor(255, 200, 0));
|
|
Shinya Kitaoka |
120a6e |
m_messageBox->insertPlainText(QString("Warning: "));
|
|
Shinya Kitaoka |
120a6e |
} else if (type == TLogger::Error) {
|
|
Shinya Kitaoka |
120a6e |
m_messageBox->setTextColor(Qt::red);
|
|
Shinya Kitaoka |
120a6e |
m_messageBox->insertPlainText(QString("Error: "));
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
m_messageBox->setTextColor(Qt::black);
|
|
Shinya Kitaoka |
120a6e |
m_messageBox->insertPlainText(QString::fromStdString(message.getText()) +
|
|
Shinya Kitaoka |
120a6e |
QString("\n"));
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
/*! Clear panel text box from all messages.
|
|
shun-iwasawa |
443318 |
*/
|
|
Shinya Kitaoka |
120a6e |
void LogPanel::clear() {
|
|
Shinya Kitaoka |
120a6e |
TLogger::instance()->clearMessages();
|
|
Shinya Kitaoka |
120a6e |
m_messageBox->clear();
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//=============================================================================
|
|
Toshihiro Shimizu |
890ddd |
// OpenFloatingLogPanel
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
d1f6c4 |
class OpenFloatingLogPanel final : public MenuItemHandler {
|
|
Toshihiro Shimizu |
890ddd |
public:
|
|
Shinya Kitaoka |
120a6e |
OpenFloatingLogPanel() : MenuItemHandler(MI_OpenMessage) {}
|
|
Shinya Kitaoka |
473e70 |
void execute() override {
|
|
Shinya Kitaoka |
120a6e |
TMainWindow *currentRoom = TApp::instance()->getCurrentRoom();
|
|
Shinya Kitaoka |
120a6e |
if (currentRoom) {
|
|
Shinya Kitaoka |
120a6e |
QList<tpanel *=""> list = currentRoom->findChildren<tpanel *="">();</tpanel></tpanel>
|
|
Shinya Kitaoka |
120a6e |
for (int i = 0; i < list.size(); i++) {
|
|
Shinya Kitaoka |
120a6e |
TPanel *pane = list.at(i);
|
|
Shinya Kitaoka |
120a6e |
// If the pane is hidden, floating and have the same name
|
|
Shinya Kitaoka |
120a6e |
if (pane->isHidden() && pane->isFloating() &&
|
|
Shinya Kitaoka |
120a6e |
pane->getPanelType() == "Message") {
|
|
Shinya Kitaoka |
120a6e |
pane->show();
|
|
Shinya Kitaoka |
120a6e |
pane->raise();
|
|
Shinya Kitaoka |
120a6e |
return;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
TPanel *pane = TPanelFactory::createPanel(currentRoom, "Message");
|
|
Shinya Kitaoka |
120a6e |
pane->setFloating(true);
|
|
Shinya Kitaoka |
120a6e |
pane->show();
|
|
Shinya Kitaoka |
120a6e |
pane->raise();
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
} openFloatingLogPanelCommand;
|