IRCLogBufferModel.cpp 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. #include "IRCLogBufferModel.h"
  2. #include "IRCLogBuffer.h"
  3. #include <stdio.h>
  4. #include <time.h>
  5. #include <SharedGraphics/Font.h>
  6. IRCLogBufferModel::IRCLogBufferModel(Retained<IRCLogBuffer>&& log_buffer)
  7. : m_log_buffer(move(log_buffer))
  8. {
  9. }
  10. IRCLogBufferModel::~IRCLogBufferModel()
  11. {
  12. }
  13. int IRCLogBufferModel::row_count(const GModelIndex&) const
  14. {
  15. return m_log_buffer->count();
  16. }
  17. int IRCLogBufferModel::column_count(const GModelIndex&) const
  18. {
  19. return Column::__Count;
  20. }
  21. String IRCLogBufferModel::column_name(int column) const
  22. {
  23. switch (column) {
  24. case Column::Timestamp: return "Time";
  25. case Column::Name: return "Name";
  26. case Column::Text: return "Text";
  27. }
  28. ASSERT_NOT_REACHED();
  29. }
  30. GModel::ColumnMetadata IRCLogBufferModel::column_metadata(int column) const
  31. {
  32. switch (column) {
  33. case Column::Timestamp: return { 60, TextAlignment::CenterLeft };
  34. case Column::Name: return { 70, TextAlignment::CenterRight, &Font::default_bold_font() };
  35. case Column::Text: return { 800, TextAlignment::CenterLeft };
  36. }
  37. ASSERT_NOT_REACHED();
  38. }
  39. GVariant IRCLogBufferModel::data(const GModelIndex& index, Role role) const
  40. {
  41. if (role == Role::Display) {
  42. auto& entry = m_log_buffer->at(index.row());
  43. switch (index.column()) {
  44. case Column::Timestamp: {
  45. auto* tm = localtime(&entry.timestamp);
  46. return String::format("%02u:%02u:%02u", tm->tm_hour, tm->tm_min, tm->tm_sec);
  47. }
  48. case Column::Name:
  49. if (entry.sender.is_empty())
  50. return String::empty();
  51. return String::format("<%c%s>", entry.prefix ? entry.prefix : ' ', entry.sender.characters());
  52. case Column::Text: return entry.text;
  53. }
  54. }
  55. if (role == Role::ForegroundColor) {
  56. if (index.column() == Column::Timestamp)
  57. return Color(Color::MidGray);
  58. if (index.column() == Column::Text)
  59. return m_log_buffer->at(index.row()).color;
  60. }
  61. return { };
  62. }
  63. void IRCLogBufferModel::update()
  64. {
  65. did_update();
  66. }
  67. void IRCLogBufferModel::activate(const GModelIndex&)
  68. {
  69. }