Audio plugin host https://kx.studio/carla
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.

93 lines
2.1KB

  1. // SPDX-FileCopyrightText: 2011-2025 Filipe Coelho <falktx@falktx.com>
  2. // SPDX-License-Identifier: GPL-2.0-or-later
  3. #ifndef CARLA_EXTERNAL_UI_HPP_INCLUDED
  4. #define CARLA_EXTERNAL_UI_HPP_INCLUDED
  5. #include "CarlaPipeUtils.hpp"
  6. #include "extra/String.hpp"
  7. // -----------------------------------------------------------------------
  8. class CarlaExternalUI : public CarlaPipeServer
  9. {
  10. public:
  11. enum UiState {
  12. UiNone = 0,
  13. UiHide,
  14. UiShow,
  15. UiCrashed
  16. };
  17. CarlaExternalUI() noexcept
  18. : fFilename(),
  19. fArg1(),
  20. fArg2(),
  21. fUiState(UiNone) {}
  22. ~CarlaExternalUI() /*noexcept*/ override
  23. {
  24. CARLA_SAFE_ASSERT_INT(fUiState == UiNone, fUiState);
  25. }
  26. UiState getAndResetUiState() noexcept
  27. {
  28. const UiState uiState(fUiState);
  29. fUiState = UiNone;
  30. return uiState;
  31. }
  32. void setData(const char* const filename, const char* const arg1, const char* const arg2) noexcept
  33. {
  34. fFilename = filename;
  35. fArg1 = arg1;
  36. fArg2 = arg2;
  37. }
  38. void setData(const char* const filename, const double sampleRate, const char* const uiTitle) noexcept
  39. {
  40. fFilename = filename;
  41. fArg1 = String(sampleRate);
  42. fArg2 = uiTitle;
  43. }
  44. bool startPipeServer(const bool show = true) noexcept
  45. {
  46. if (CarlaPipeServer::startPipeServer(fFilename, fArg1, fArg2))
  47. {
  48. if (show)
  49. writeShowMessage();
  50. return true;
  51. }
  52. return false;
  53. }
  54. protected:
  55. // returns true if msg was handled
  56. bool msgReceived(const char* const msg) noexcept override
  57. {
  58. if (std::strcmp(msg, "exiting") == 0)
  59. {
  60. closePipeServer();
  61. fUiState = UiHide;
  62. return true;
  63. }
  64. return false;
  65. }
  66. private:
  67. String fFilename;
  68. String fArg1;
  69. String fArg2;
  70. UiState fUiState;
  71. CARLA_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(CarlaExternalUI)
  72. };
  73. // -----------------------------------------------------------------------
  74. #endif // CARLA_EXTERNAL_UI_HPP_INCLUDED