// SPDX-FileCopyrightText: 2011-2025 Filipe Coelho // SPDX-License-Identifier: GPL-2.0-or-later #ifndef CARLA_EXTERNAL_UI_HPP_INCLUDED #define CARLA_EXTERNAL_UI_HPP_INCLUDED #include "CarlaPipeUtils.hpp" #include "extra/String.hpp" // ----------------------------------------------------------------------- class CarlaExternalUI : public CarlaPipeServer { public: enum UiState { UiNone = 0, UiHide, UiShow, UiCrashed }; CarlaExternalUI() noexcept : fFilename(), fArg1(), fArg2(), fUiState(UiNone) {} ~CarlaExternalUI() /*noexcept*/ override { CARLA_SAFE_ASSERT_INT(fUiState == UiNone, fUiState); } UiState getAndResetUiState() noexcept { const UiState uiState(fUiState); fUiState = UiNone; return uiState; } void setData(const char* const filename, const char* const arg1, const char* const arg2) noexcept { fFilename = filename; fArg1 = arg1; fArg2 = arg2; } void setData(const char* const filename, const double sampleRate, const char* const uiTitle) noexcept { fFilename = filename; fArg1 = String(sampleRate); fArg2 = uiTitle; } bool startPipeServer(const bool show = true) noexcept { if (CarlaPipeServer::startPipeServer(fFilename, fArg1, fArg2)) { if (show) writeShowMessage(); return true; } return false; } protected: // returns true if msg was handled bool msgReceived(const char* const msg) noexcept override { if (std::strcmp(msg, "exiting") == 0) { closePipeServer(); fUiState = UiHide; return true; } return false; } private: String fFilename; String fArg1; String fArg2; UiState fUiState; CARLA_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(CarlaExternalUI) }; // ----------------------------------------------------------------------- #endif // CARLA_EXTERNAL_UI_HPP_INCLUDED