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.

104 lines
3.1KB

  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. class CurrentActivitiesComp : public Component,
  20. private ChangeListener,
  21. private ListBoxModel,
  22. private Timer
  23. {
  24. public:
  25. CurrentActivitiesComp (ActivityList& activities)
  26. : Component ("Activities"), activityList (activities)
  27. {
  28. addAndMakeVisible (&list);
  29. list.setColour (ListBox::backgroundColourId, Colours::transparentBlack);
  30. list.setRowHeight (16);
  31. list.setModel (this);
  32. activityList.addChangeListener (this);
  33. }
  34. ~CurrentActivitiesComp()
  35. {
  36. activityList.removeChangeListener (this);
  37. }
  38. void resized() override { list.setBounds (getLocalBounds()); }
  39. int getNumRows() override
  40. {
  41. return activityList.getNumActivities();
  42. }
  43. void paintListBoxItem (int rowNumber, Graphics& g,
  44. int width, int height, bool /*rowIsSelected*/) override
  45. {
  46. const StringArray activities (activityList.getActivities());
  47. if (rowNumber >= 0 && rowNumber < activities.size())
  48. {
  49. g.setColour (findColour (defaultTextColourId));
  50. g.setFont (height * 0.7f);
  51. g.drawText (activities [rowNumber],
  52. 4, 0, width - 5, height, Justification::centredLeft, true);
  53. }
  54. }
  55. void paint (Graphics& g) override
  56. {
  57. if (getNumRows() == 0)
  58. TreePanelBase::drawEmptyPanelMessage (*this, g, "(No activities)");
  59. }
  60. static int getMaxPanelHeight() { return 200; }
  61. private:
  62. ActivityList& activityList;
  63. ListBox list;
  64. int panelHeightToSet;
  65. void timerCallback() override
  66. {
  67. stopTimer();
  68. if (ConcertinaPanel* cp = findParentComponentOfClass<ConcertinaPanel>())
  69. cp->setPanelSize (this, panelHeightToSet, true);
  70. }
  71. void changeListenerCallback (ChangeBroadcaster*) override
  72. {
  73. list.updateContent();
  74. panelHeightToSet = jmax (3, getNumRows()) * list.getRowHeight() + 15;
  75. if (! isTimerRunning())
  76. startTimer (100);
  77. repaint();
  78. }
  79. };