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.

113 lines
2.7KB

  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 ActivityList : public ChangeBroadcaster
  22. {
  23. ActivityList() {}
  24. void setList (const StringArray& newList)
  25. {
  26. checkThread();
  27. if (activities != newList)
  28. {
  29. const bool wasEmpty = isEmpty();
  30. activities = newList;
  31. sendChangeMessage();
  32. if (wasEmpty != isEmpty())
  33. ProjucerApplication::getCommandManager().commandStatusChanged();
  34. }
  35. }
  36. void clear()
  37. {
  38. setList (StringArray());
  39. }
  40. StringArray getActivities() const
  41. {
  42. checkThread();
  43. StringArray s;
  44. for (auto a : activities)
  45. s.add (a.upToFirstOccurrenceOf ("|||", false, false));
  46. return s;
  47. }
  48. bool isEmpty() const noexcept
  49. {
  50. return activities.size() == 0;
  51. }
  52. int getNumActivities() const
  53. {
  54. checkThread();
  55. return activities.size();
  56. }
  57. struct Listener
  58. {
  59. virtual ~Listener() {}
  60. virtual void classListChanged (const ClassDatabase::ClassList&) = 0;
  61. };
  62. void addListener (Listener* l)
  63. {
  64. checkThread();
  65. listeners.add (l);
  66. }
  67. void removeListener (Listener* l)
  68. {
  69. checkThread();
  70. listeners.remove (l);
  71. }
  72. void sendClassListChangedMessage (const ClassDatabase::ClassList& newList)
  73. {
  74. checkThread();
  75. listeners.call ([&] (Listener& l) { l.classListChanged (newList); });
  76. }
  77. private:
  78. StringArray activities;
  79. ListenerList<Listener> listeners;
  80. static void checkThread()
  81. {
  82. JUCE_ASSERT_MESSAGE_THREAD
  83. }
  84. JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (ActivityList)
  85. };