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.

122 lines
2.9KB

  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. #pragma once
  20. //==============================================================================
  21. struct ErrorList : public ChangeBroadcaster
  22. {
  23. ErrorList() : warningsEnabled (true) {}
  24. void takeCopy (Array<DiagnosticMessage>& dest) const
  25. {
  26. checkThread();
  27. if (warningsEnabled)
  28. {
  29. dest = messages;
  30. }
  31. else
  32. {
  33. for (auto& d : messages)
  34. if (d.isError())
  35. dest.add (d);
  36. }
  37. }
  38. void resetToError (const String& message)
  39. {
  40. DiagnosticMessage m;
  41. m.message = message;
  42. m.type = DiagnosticMessage::error;
  43. DiagnosticList list;
  44. list.add (m);
  45. setList (list.toValueTree());
  46. }
  47. void setList (const ValueTree& newList)
  48. {
  49. checkThread();
  50. messages.clear();
  51. for (int i = 0; i < newList.getNumChildren(); ++i)
  52. messages.add (DiagnosticMessage::fromValueTree (newList.getChild(i)));
  53. sendChangeMessage();
  54. }
  55. bool isEmpty() const noexcept { return messages.size() == 0; }
  56. int getNumErrors() const
  57. {
  58. checkThread();
  59. int num = 0;
  60. for (const auto& m : messages)
  61. if (m.isError())
  62. ++num;
  63. return num;
  64. }
  65. int getNumWarnings() const
  66. {
  67. checkThread();
  68. int num = 0;
  69. for (const auto& m : messages)
  70. if (m.isWarning())
  71. ++num;
  72. return num;
  73. }
  74. void setWarningsEnabled (bool enabled)
  75. {
  76. if (warningsEnabled != enabled)
  77. {
  78. warningsEnabled = enabled;
  79. if (messages.size() > 0)
  80. sendChangeMessage();
  81. }
  82. }
  83. private:
  84. Array<DiagnosticMessage> messages;
  85. bool warningsEnabled;
  86. static void checkThread()
  87. {
  88. JUCE_ASSERT_MESSAGE_THREAD
  89. }
  90. JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (ErrorList)
  91. };