fb2logs.cpp 2.8 KB

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