The JUCE cross-platform C++ framework, with DISTRHO/KXStudio specific changes
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

118 lines
2.8KB

  1. /*
  2. ==============================================================================
  3. This file is part of the JUCE library.
  4. Copyright (c) 2017 - ROLI Ltd.
  5. JUCE is an open source library subject to commercial or open-source
  6. licensing.
  7. By using JUCE, you agree to the terms of both the JUCE 5 End-User License
  8. Agreement and JUCE 5 Privacy Policy (both updated and effective as of the
  9. 27th April 2017).
  10. End User License Agreement: www.juce.com/juce-5-licence
  11. Privacy Policy: www.juce.com/juce-5-privacy-policy
  12. Or: You may also use this code under the terms of the GPL v3 (see
  13. www.gnu.org/licenses).
  14. JUCE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES, WHETHER
  15. EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR PURPOSE, ARE
  16. DISCLAIMED.
  17. ==============================================================================
  18. */
  19. struct ErrorList : public ChangeBroadcaster
  20. {
  21. ErrorList() : warningsEnabled (true) {}
  22. void takeCopy (Array<DiagnosticMessage>& dest) const
  23. {
  24. checkThread();
  25. if (warningsEnabled)
  26. {
  27. dest = messages;
  28. }
  29. else
  30. {
  31. for (DiagnosticMessage& d : messages)
  32. if (d.isError())
  33. dest.add (d);
  34. }
  35. }
  36. void resetToError (const String& message)
  37. {
  38. DiagnosticMessage m;
  39. m.message = message;
  40. m.type = DiagnosticMessage::error;
  41. DiagnosticList list;
  42. list.add (m);
  43. setList (list.toValueTree());
  44. }
  45. void setList (const ValueTree& newList)
  46. {
  47. checkThread();
  48. messages.clear();
  49. for (int i = 0; i < newList.getNumChildren(); ++i)
  50. messages.add (DiagnosticMessage::fromValueTree (newList.getChild(i)));
  51. sendChangeMessage();
  52. }
  53. bool isEmpty() const noexcept { return messages.size() == 0; }
  54. int getNumErrors() const
  55. {
  56. checkThread();
  57. int num = 0;
  58. for (const auto& m : messages)
  59. if (m.isError())
  60. ++num;
  61. return num;
  62. }
  63. int getNumWarnings() const
  64. {
  65. checkThread();
  66. int num = 0;
  67. for (const auto& m : messages)
  68. if (m.isWarning())
  69. ++num;
  70. return num;
  71. }
  72. void setWarningsEnabled (bool enabled)
  73. {
  74. if (warningsEnabled != enabled)
  75. {
  76. warningsEnabled = enabled;
  77. if (messages.size() > 0)
  78. sendChangeMessage();
  79. }
  80. }
  81. private:
  82. Array<DiagnosticMessage> messages;
  83. bool warningsEnabled;
  84. static void checkThread()
  85. {
  86. jassert (MessageManager::getInstance()->isThisTheMessageThread());
  87. }
  88. JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (ErrorList)
  89. };