vtextblockdata.cpp 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. #include "vtextblockdata.h"
  2. #include <QDebug>
  3. VTextBlockData::VTextBlockData()
  4. : QTextBlockUserData(),
  5. m_codeBlockIndentation(-1)
  6. {
  7. }
  8. VTextBlockData::~VTextBlockData()
  9. {
  10. for (auto it : m_previews) {
  11. delete it;
  12. }
  13. m_previews.clear();
  14. }
  15. bool VTextBlockData::insertPreviewInfo(VPreviewInfo *p_info)
  16. {
  17. bool tsUpdated = false;
  18. bool inserted = false;
  19. for (auto it = m_previews.begin(); it != m_previews.end();) {
  20. VPreviewInfo *ele = *it;
  21. if (p_info->m_imageInfo < ele->m_imageInfo) {
  22. // Insert p_info here.
  23. m_previews.insert(it, p_info);
  24. inserted = true;
  25. break;
  26. } else if (p_info->m_imageInfo == ele->m_imageInfo) {
  27. // Update the timestamp.
  28. delete ele;
  29. *it = p_info;
  30. inserted = true;
  31. tsUpdated = true;
  32. break;
  33. } else if (p_info->m_imageInfo.intersect(ele->m_imageInfo)) {
  34. // The new one intersect with an old one.
  35. // Remove the old one.
  36. Q_ASSERT(ele->m_timeStamp < p_info->m_timeStamp);
  37. delete ele;
  38. it = m_previews.erase(it);
  39. } else {
  40. ++it;
  41. }
  42. }
  43. if (!inserted) {
  44. // Append it.
  45. m_previews.append(p_info);
  46. }
  47. Q_ASSERT(checkOrder());
  48. return tsUpdated;
  49. }
  50. QString VTextBlockData::toString() const
  51. {
  52. QString ret;
  53. for (int i = 0; i < m_previews.size(); ++i) {
  54. ret += QString("preview %1: source %2 ts %3 image %4\n")
  55. .arg(i)
  56. .arg((int)m_previews[i]->m_source)
  57. .arg(m_previews[i]->m_timeStamp)
  58. .arg(m_previews[i]->m_imageInfo.toString());
  59. }
  60. return ret;
  61. }
  62. bool VTextBlockData::checkOrder() const
  63. {
  64. for (int i = 1; i < m_previews.size(); ++i) {
  65. if (!(m_previews[i - 1]->m_imageInfo < m_previews[i]->m_imageInfo)) {
  66. return false;
  67. }
  68. }
  69. return true;
  70. }
  71. bool VTextBlockData::clearObsoletePreview(long long p_timeStamp, PreviewSource p_source)
  72. {
  73. bool deleted = false;
  74. for (auto it = m_previews.begin(); it != m_previews.end();) {
  75. VPreviewInfo *ele = *it;
  76. if (ele->m_source == p_source
  77. && ele->m_timeStamp != p_timeStamp) {
  78. // Remove it.
  79. qDebug() << "clear obsolete preview" << ele->m_imageInfo.toString();
  80. delete ele;
  81. it = m_previews.erase(it);
  82. deleted = true;
  83. } else {
  84. ++it;
  85. }
  86. }
  87. return deleted;
  88. }