diff options
author | Kandrashin Denis <mail@lintest.ru> | 2012-11-11 18:57:47 +0400 |
---|---|---|
committer | Kandrashin Denis <mail@lintest.ru> | 2012-11-11 18:57:47 +0400 |
commit | 377794bb67eae58effb6672f6df8ac281e98720a (patch) | |
tree | 10854268547dcdd2780e5f5c22a5aae62728f753 | |
parent | dbd4f1476431b5f7f518f6152cf268b72087f803 (diff) |
Show log messages
-rw-r--r-- | source/fb2app.cpp | 3 | ||||
-rw-r--r-- | source/fb2app.hpp | 2 | ||||
-rw-r--r-- | source/fb2logs.cpp | 54 | ||||
-rw-r--r-- | source/fb2logs.hpp | 61 | ||||
-rw-r--r-- | source/fb2main.cpp | 10 | ||||
-rw-r--r-- | source/fb2main.hpp | 4 |
6 files changed, 79 insertions, 55 deletions
diff --git a/source/fb2app.cpp b/source/fb2app.cpp index df6d716..010a3ab 100644 --- a/source/fb2app.cpp +++ b/source/fb2app.cpp @@ -3,6 +3,7 @@ #include <QTranslator> #include "fb2app.hpp" +#include "fb2logs.hpp" #include "fb2main.hpp" #ifndef PACKAGE_NAME @@ -38,7 +39,7 @@ void FbApplication::handleMessage(QtMsgType type, const char *msg) abort(); } */ - emit logMessage( QString::fromUtf8(msg)); + emit logMessage(type, QString::fromUtf8(msg)); } static void fb2MessageHandler(QtMsgType type, const char *msg) diff --git a/source/fb2app.hpp b/source/fb2app.hpp index b2a04ee..8715377 100644 --- a/source/fb2app.hpp +++ b/source/fb2app.hpp @@ -16,7 +16,7 @@ public: static QString lastCommit();
signals:
- void logMessage(const QString &message);
+ void logMessage(QtMsgType type, const QString &message);
};
diff --git a/source/fb2logs.cpp b/source/fb2logs.cpp index cf3d05c..d42b11f 100644 --- a/source/fb2logs.cpp +++ b/source/fb2logs.cpp @@ -1,27 +1,24 @@ #include "fb2logs.hpp"
+#include "fb2utils.h"
+
//---------------------------------------------------------------------------
-// FbLogItem
+// FbLogModel::FbLogItem
//---------------------------------------------------------------------------
-FbLogItem::FbLogItem(Level level, int row, int col, const QString &msg)
- : m_level(level)
- , m_msg(msg)
- , m_row(row)
- , m_col(col)
-{
-}
-
-FbLogItem::FbLogItem(Level level, const QString &msg)
- : m_level(level)
- , m_msg(msg)
- , m_row(0)
- , m_col(0)
+QVariant FbLogModel::FbLogItem::icon() const
{
+ switch (m_type) {
+ case QtDebugMsg: return FbIcon("dialog-information");
+ case QtWarningMsg: return FbIcon("dialog-warning");
+ case QtCriticalMsg: return FbIcon("dialog-error");
+ case QtFatalMsg: return FbIcon("dialog-error");
+ }
+ return QVariant();
}
//---------------------------------------------------------------------------
-// FbLogList
+// FbLogModel
//---------------------------------------------------------------------------
FbLogModel::FbLogModel(QObject *parent)
@@ -35,6 +32,10 @@ QVariant FbLogModel::data(const QModelIndex &index, int role) const int row = index.row();
if (row < 0) return QVariant();
if (row >= m_list.count()) return QVariant();
+ switch (role) {
+ case Qt::DisplayRole: return m_list.at(row)->msg();
+ case Qt::DecorationRole: return m_list.at(row)->icon();
+ }
return QVariant();
}
@@ -44,6 +45,21 @@ int FbLogModel::rowCount(const QModelIndex &parent) const return m_list.count();
}
+void FbLogModel::add(QtMsgType type, int row, int col, const QString &msg)
+{
+ int count = m_list.count();
+ QModelIndex parent = QModelIndex();
+ beginInsertRows(parent, count, count);
+ m_list.append(new FbLogItem(type, row, col, msg));
+ endInsertRows();
+ emit changeCurrent(createIndex(count, 0));
+}
+
+void FbLogModel::add(QtMsgType type, const QString &msg)
+{
+ add(type, 0, 0, msg);
+}
+
//---------------------------------------------------------------------------
// FbLogList
//---------------------------------------------------------------------------
@@ -51,7 +67,7 @@ int FbLogModel::rowCount(const QModelIndex &parent) const FbLogList::FbLogList(QWidget *parent)
: QListView(parent)
{
- setModel(new FbLogModel(this));
+ setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
setViewMode(ListMode);
}
@@ -61,14 +77,18 @@ FbLogList::FbLogList(QWidget *parent) FbLogDock::FbLogDock(const QString &title, QWidget *parent, Qt::WindowFlags flags)
: QDockWidget(title, parent, flags)
+ , m_model(new FbLogModel(this))
, m_list(new FbLogList(this))
{
+ m_list->setModel(m_model);
+ connect(m_model, SIGNAL(changeCurrent(QModelIndex)), m_list, SLOT(setCurrentIndex(QModelIndex)));
setFeatures(QDockWidget::AllDockWidgetFeatures);
setAttribute(Qt::WA_DeleteOnClose);
setWidget(m_list);
}
-void FbLogDock::append(const QString &message)
+void FbLogDock::append(QtMsgType type, const QString &message)
{
+ m_model->add(type, message);
}
diff --git a/source/fb2logs.hpp b/source/fb2logs.hpp index 8760c8a..a45a959 100644 --- a/source/fb2logs.hpp +++ b/source/fb2logs.hpp @@ -5,43 +5,46 @@ #include <QListView>
#include <QDockWidget>
-class FbLogItem
-{
-public:
- enum Level {
- Message,
- Warring,
- Error,
- Fatal
- };
-
- FbLogItem(Level level, int row, int col, const QString &msg);
- FbLogItem(Level level, const QString &msg);
-
- Level level() const {return m_level; }
- const QString & msg() const { return m_msg; }
- int row() const {return m_row; }
- int col() const {return m_row; }
-
-private:
- Level m_level;
- QString m_msg;
- int m_row;
- int m_col;
-
-};
-
class FbLogModel : public QAbstractListModel
{
Q_OBJECT
public:
FbLogModel(QObject *parent = 0);
+ void add(QtMsgType type, int row, int col, const QString &msg);
+ void add(QtMsgType type, const QString &msg);
public:
virtual QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const;
virtual int rowCount(const QModelIndex &parent = QModelIndex()) const;
+signals:
+ void changeCurrent(const QModelIndex &index);
+
+private:
+ class FbLogItem
+ {
+ public:
+ FbLogItem(QtMsgType type, int row, int col, const QString &msg)
+ : m_type(type), m_msg(msg), m_row(row), m_col(col) {}
+
+ FbLogItem(QtMsgType type, const QString &msg)
+ : m_type(type), m_msg(msg), m_row(0), m_col(0) {}
+
+ const QString & msg() const { return m_msg; }
+ QtMsgType type() const { return m_type; }
+ int row() const { return m_row; }
+ int col() const { return m_row; }
+ QVariant icon() const;
+
+ private:
+ QtMsgType m_type;
+ QString m_msg;
+ int m_row;
+ int m_col;
+
+ };
+
private:
QList<FbLogItem*> m_list;
};
@@ -58,9 +61,6 @@ public: sh.setHeight(40);
return sh;
}
-
-private:
- QList<FbLogItem*> items;
};
class FbLogDock: public QDockWidget
@@ -69,9 +69,10 @@ class FbLogDock: public QDockWidget public:
explicit FbLogDock(const QString &title, QWidget *parent = 0, Qt::WindowFlags flags = 0);
- void append(const QString &message);
+ void append(QtMsgType type, const QString &message);
private:
+ FbLogModel *m_model;
FbLogList *m_list;
};
diff --git a/source/fb2main.cpp b/source/fb2main.cpp index 4f834ad..a55aad1 100644 --- a/source/fb2main.cpp +++ b/source/fb2main.cpp @@ -49,27 +49,27 @@ FbMainWindow::FbMainWindow(const QString &filename, ViewMode mode) void FbMainWindow::warning(int row, int col, const QString &msg) { - logMessage(msg.simplified()); + logMessage(QtWarningMsg, msg.simplified()); } void FbMainWindow::error(int row, int col, const QString &msg) { - logMessage(msg.simplified()); + logMessage(QtCriticalMsg, msg.simplified()); } void FbMainWindow::fatal(int row, int col, const QString &msg) { - logMessage(msg.simplified()); + logMessage(QtFatalMsg, msg.simplified()); } -void FbMainWindow::logMessage(const QString &message) +void FbMainWindow::logMessage(QtMsgType type, const QString &message) { if (!logDock) { logDock = new FbLogDock(tr("Message log"), this); connect(logDock, SIGNAL(destroyed()), SLOT(logDestroyed())); addDockWidget(Qt::BottomDockWidgetArea, logDock); } - logDock->append(message); + logDock->append(type, message); } void FbMainWindow::logDestroyed() diff --git a/source/fb2main.hpp b/source/fb2main.hpp index 43881d0..49b62d5 100644 --- a/source/fb2main.hpp +++ b/source/fb2main.hpp @@ -20,6 +20,8 @@ class FbLogDock; class FbMainDock; +#include "fb2logs.hpp" + class FbMainWindow : public QMainWindow { Q_OBJECT @@ -38,7 +40,7 @@ public slots: void warning(int row, int col, const QString &msg); void error(int row, int col, const QString &msg); void fatal(int row, int col, const QString &msg); - void logMessage(const QString &message); + void logMessage(QtMsgType type, const QString &message); void status(const QString &text); private slots: |