Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/lintest/fb2edit.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKandrashin Denis <mail@lintest.ru>2012-11-11 18:57:47 +0400
committerKandrashin Denis <mail@lintest.ru>2012-11-11 18:57:47 +0400
commit377794bb67eae58effb6672f6df8ac281e98720a (patch)
tree10854268547dcdd2780e5f5c22a5aae62728f753
parentdbd4f1476431b5f7f518f6152cf268b72087f803 (diff)
Show log messages
-rw-r--r--source/fb2app.cpp3
-rw-r--r--source/fb2app.hpp2
-rw-r--r--source/fb2logs.cpp54
-rw-r--r--source/fb2logs.hpp61
-rw-r--r--source/fb2main.cpp10
-rw-r--r--source/fb2main.hpp4
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: