IRCLogBufferModel.cpp 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. #include "IRCLogBufferModel.h"
  2. #include "IRCLogBuffer.h"
  3. #include <stdio.h>
  4. #include <time.h>
  5. IRCLogBufferModel::IRCLogBufferModel(Retained<IRCLogBuffer>&& log_buffer)
  6. : m_log_buffer(move(log_buffer))
  7. {
  8. }
  9. IRCLogBufferModel::~IRCLogBufferModel()
  10. {
  11. }
  12. int IRCLogBufferModel::row_count() const
  13. {
  14. return m_log_buffer->count();
  15. }
  16. int IRCLogBufferModel::column_count() const
  17. {
  18. return 4;
  19. }
  20. String IRCLogBufferModel::column_name(int column) const
  21. {
  22. switch (column) {
  23. case Column::Timestamp: return "Time";
  24. case Column::Prefix: return "@";
  25. case Column::Name: return "Name";
  26. case Column::Text: return "Text";
  27. }
  28. ASSERT_NOT_REACHED();
  29. }
  30. GTableModel::ColumnMetadata IRCLogBufferModel::column_metadata(int column) const
  31. {
  32. switch (column) {
  33. case Column::Timestamp: return { 60, TextAlignment::CenterLeft };
  34. case Column::Prefix: return { 10, TextAlignment::CenterLeft };
  35. case Column::Name: return { 70, TextAlignment::CenterRight };
  36. case Column::Text: return { 800, TextAlignment::CenterLeft };
  37. }
  38. ASSERT_NOT_REACHED();
  39. }
  40. GVariant IRCLogBufferModel::data(const GModelIndex& index, Role) const
  41. {
  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::Prefix: {
  49. if (!entry.prefix)
  50. return String("");
  51. return String(&entry.prefix, 1);
  52. }
  53. case Column::Name: return entry.sender;
  54. case Column::Text: return entry.text;
  55. }
  56. ASSERT_NOT_REACHED();
  57. }
  58. void IRCLogBufferModel::update()
  59. {
  60. did_update();
  61. }
  62. void IRCLogBufferModel::activate(const GModelIndex&)
  63. {
  64. }