fb2logs.cpp 2.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. #include "fb2logs.hpp"
  2. #include "fb2utils.h"
  3. //---------------------------------------------------------------------------
  4. // FbLogModel::FbLogItem
  5. //---------------------------------------------------------------------------
  6. QVariant FbLogModel::FbLogItem::icon() const
  7. {
  8. switch (m_type) {
  9. case QtInfoMsg: return QVariant();
  10. case QtDebugMsg: return FbIcon("dialog-information");
  11. case QtWarningMsg: return FbIcon("dialog-warning");
  12. case QtCriticalMsg: return FbIcon("dialog-error");
  13. case QtFatalMsg: return FbIcon("dialog-error");
  14. }
  15. return QVariant();
  16. }
  17. //---------------------------------------------------------------------------
  18. // FbLogModel
  19. //---------------------------------------------------------------------------
  20. FbLogModel::FbLogModel(QObject *parent)
  21. : QAbstractListModel(parent)
  22. {
  23. for (FbLogItem *item: m_list) delete item;
  24. }
  25. QVariant FbLogModel::data(const QModelIndex &index, int role) const
  26. {
  27. int row = index.row();
  28. if (row < 0) return QVariant();
  29. if (row >= m_list.count()) return QVariant();
  30. switch (role) {
  31. case Qt::DisplayRole: return m_list.at(row)->msg();
  32. case Qt::DecorationRole: return m_list.at(row)->icon();
  33. }
  34. return QVariant();
  35. }
  36. int FbLogModel::rowCount(const QModelIndex &parent) const
  37. {
  38. if (parent.isValid()) return 0;
  39. return m_list.count();
  40. }
  41. void FbLogModel::add(QtMsgType type, int row, int col, const QString &msg)
  42. {
  43. int count = m_list.count();
  44. QModelIndex parent = QModelIndex();
  45. beginInsertRows(parent, count, count);
  46. m_list.append(new FbLogItem(type, row, col, msg));
  47. endInsertRows();
  48. emit changeCurrent(createIndex(count, 0));
  49. }
  50. void FbLogModel::add(QtMsgType type, const QString &msg)
  51. {
  52. add(type, 0, 0, msg);
  53. }
  54. //---------------------------------------------------------------------------
  55. // FbLogList
  56. //---------------------------------------------------------------------------
  57. FbLogList::FbLogList(QWidget *parent)
  58. : QListView(parent)
  59. {
  60. setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
  61. setViewMode(ListMode);
  62. }
  63. //---------------------------------------------------------------------------
  64. // FbLogDock
  65. //---------------------------------------------------------------------------
  66. FbLogDock::FbLogDock(const QString &title, QWidget *parent, Qt::WindowFlags flags)
  67. : QDockWidget(title, parent, flags)
  68. , m_model(new FbLogModel(this))
  69. , m_list(new FbLogList(this))
  70. {
  71. m_list->setModel(m_model);
  72. connect(m_model, SIGNAL(changeCurrent(QModelIndex)), m_list, SLOT(setCurrentIndex(QModelIndex)));
  73. setFeatures(QDockWidget::DockWidgetClosable|QDockWidget::DockWidgetMovable|QDockWidget::DockWidgetFloatable);
  74. setAttribute(Qt::WA_DeleteOnClose);
  75. setWidget(m_list);
  76. }
  77. void FbLogDock::append(QtMsgType type, const QString &message)
  78. {
  79. m_model->add(type, message);
  80. }