@@ -26,10 +26,10 @@ from digitalpeakmeter import DigitalPeakMeter | |||||
# ----------------------------------------------------------------------- | # ----------------------------------------------------------------------- | ||||
# External UI | # External UI | ||||
class DistrhoUIBigMeter(DigitalPeakMeter, ExternalUI): | |||||
class DistrhoUIBigMeter(ExternalUI, DigitalPeakMeter): | |||||
def __init__(self): | def __init__(self): | ||||
DigitalPeakMeter.__init__(self, None) | |||||
ExternalUI.__init__(self) | ExternalUI.__init__(self) | ||||
DigitalPeakMeter.__init__(self, None) | |||||
channels = 2 #6 if argv[0].endswith("bigmeterM-ui") else 2 | channels = 2 #6 if argv[0].endswith("bigmeterM-ui") else 2 | ||||
@@ -91,7 +91,7 @@ class DistrhoUIBigMeter(DigitalPeakMeter, ExternalUI): | |||||
#--------------- main ------------------ | #--------------- main ------------------ | ||||
if __name__ == '__main__': | if __name__ == '__main__': | ||||
import resources_rc | |||||
app = CarlaApplication("BigMeter") | app = CarlaApplication("BigMeter") | ||||
#app... | |||||
gui = DistrhoUIBigMeter() | gui = DistrhoUIBigMeter() | ||||
app.exit_exec() | app.exit_exec() |
@@ -519,10 +519,10 @@ class PluginHost(object): | |||||
# ------------------------------------------------------------------------------------------------------------ | # ------------------------------------------------------------------------------------------------------------ | ||||
# Main Window | # Main Window | ||||
class CarlaMiniW(HostWindow, ExternalUI): | |||||
class CarlaMiniW(ExternalUI, HostWindow): | |||||
def __init__(self): | def __init__(self): | ||||
HostWindow.__init__(self, None) | |||||
ExternalUI.__init__(self) | ExternalUI.__init__(self) | ||||
HostWindow.__init__(self, None) | |||||
if False: | if False: | ||||
from carla_patchbay import CarlaPatchbayW | from carla_patchbay import CarlaPatchbayW | ||||
@@ -41,10 +41,10 @@ from paramspinbox import ParamSpinBox | |||||
# ----------------------------------------------------------------------- | # ----------------------------------------------------------------------- | ||||
# External UI | # External UI | ||||
class DistrhoUINotes(QWidget, ExternalUI): | |||||
class DistrhoUINotes(ExternalUI, QWidget): | |||||
def __init__(self): | def __init__(self): | ||||
QWidget.__init__(self, None) | |||||
ExternalUI.__init__(self) | ExternalUI.__init__(self) | ||||
QWidget.__init__(self, None) | |||||
self.fCurPage = 1 | self.fCurPage = 1 | ||||
self.fSaveSizeNowChecker = -1 | self.fSaveSizeNowChecker = -1 | ||||
@@ -233,7 +233,7 @@ class DistrhoUINotes(QWidget, ExternalUI): | |||||
#--------------- main ------------------ | #--------------- main ------------------ | ||||
if __name__ == '__main__': | if __name__ == '__main__': | ||||
import resources_rc | |||||
app = CarlaApplication("Notes") | app = CarlaApplication("Notes") | ||||
#app... | |||||
gui = DistrhoUINotes() | gui = DistrhoUINotes() | ||||
app.exit_exec() | app.exit_exec() |
@@ -78,7 +78,7 @@ EngineEvents: EngineEvents.cpp | |||||
env LD_LIBRARY_PATH=../backend valgrind ./$@ | env LD_LIBRARY_PATH=../backend valgrind ./$@ | ||||
PipeServer: PipeServer.cpp ../utils/CarlaPipeUtils.hpp | PipeServer: PipeServer.cpp ../utils/CarlaPipeUtils.hpp | ||||
$(CXX) $< $(PEDANTIC_CXX_FLAGS) -o $@ | |||||
$(CXX) $< $(PEDANTIC_CXX_FLAGS) -lpthread -o $@ | |||||
# valgrind ./$@ | # valgrind ./$@ | ||||
Print: Print.cpp ../utils/CarlaUtils.hpp | Print: Print.cpp ../utils/CarlaUtils.hpp | ||||
@@ -26,17 +26,12 @@ public: | |||||
{ | { | ||||
} | } | ||||
~ExternalPluginUI() override | |||||
{ | |||||
} | |||||
void fail(const char* const error) override | void fail(const char* const error) override | ||||
{ | { | ||||
carla_stderr2(error); | carla_stderr2(error); | ||||
//fHost->dispatcher(fHost->handle, HOST_OPCODE_UI_UNAVAILABLE, 0, 0, nullptr, 0.0f); | |||||
} | } | ||||
void msgReceived(const char* const msg) override | |||||
bool msgReceived(const char* const msg) noexcept override | |||||
{ | { | ||||
carla_stderr("msgReceived : %s", msg); | carla_stderr("msgReceived : %s", msg); | ||||
@@ -46,37 +41,7 @@ public: | |||||
gStopNow = true; | gStopNow = true; | ||||
} | } | ||||
#if 0 | |||||
if (std::strcmp(msg, "control") == 0) | |||||
{ | |||||
int index; | |||||
float value; | |||||
if (readNextLineAsInt(index) && readNextLineAsFloat(value)) | |||||
handleSetParameterValue(index, value); | |||||
} | |||||
else if (std::strcmp(msg, "configure") == 0) | |||||
{ | |||||
char* key; | |||||
char* value; | |||||
if (readNextLineAsString(key) && readNextLineAsString(value)) | |||||
{ | |||||
handleSetState(key, value); | |||||
std::free(key); | |||||
std::free(value); | |||||
} | |||||
} | |||||
else if (std::strcmp(msg, "exiting") == 0) | |||||
{ | |||||
waitChildClose(); | |||||
fHost->ui_closed(fHost->handle); | |||||
} | |||||
else | |||||
{ | |||||
carla_stderr("unknown message HOST: \"%s\"", msg); | |||||
} | |||||
#endif | |||||
return false; | |||||
} | } | ||||
}; | }; | ||||
@@ -84,7 +49,7 @@ int main() | |||||
{ | { | ||||
ExternalPluginUI ui; | ExternalPluginUI ui; | ||||
if (! ui.start("/home/falktx/FOSS/GIT-mine/Carla/source/notes-ui", "44100.0", "Ui title here")) | |||||
if (! ui.start("/home/falktx/FOSS/GIT-mine/Carla/bin/resources/carla-plugin", "44100.0", "Ui title here")) | |||||
{ | { | ||||
carla_stderr("failed to start"); | carla_stderr("failed to start"); | ||||
return 1; | return 1; | ||||
@@ -98,7 +63,5 @@ int main() | |||||
carla_msleep(10); | carla_msleep(10); | ||||
} | } | ||||
//ui.stop(); | |||||
return 0; | return 0; | ||||
} | } |
@@ -200,6 +200,33 @@ private: | |||||
CARLA_DECLARE_NON_COPY_CLASS(CarlaScopeLocker) | CARLA_DECLARE_NON_COPY_CLASS(CarlaScopeLocker) | ||||
}; | }; | ||||
// ----------------------------------------------------------------------- | |||||
// Helper class to try-lock&unlock a mutex during a function scope. | |||||
template <class Mutex> | |||||
class CarlaScopeTryLocker | |||||
{ | |||||
public: | |||||
CarlaScopeTryLocker(const Mutex& mutex) noexcept | |||||
: fMutex(mutex), | |||||
fLocked(mutex.tryLock()) | |||||
{ | |||||
} | |||||
~CarlaScopeTryLocker() noexcept | |||||
{ | |||||
if (fLocked) | |||||
fMutex.unlock(); | |||||
} | |||||
private: | |||||
const Mutex& fMutex; | |||||
const bool fLocked; | |||||
CARLA_PREVENT_HEAP_ALLOCATION | |||||
CARLA_DECLARE_NON_COPY_CLASS(CarlaScopeTryLocker) | |||||
}; | |||||
// ----------------------------------------------------------------------- | // ----------------------------------------------------------------------- | ||||
// Helper class to unlock&lock a mutex during a function scope. | // Helper class to unlock&lock a mutex during a function scope. | ||||
@@ -231,6 +258,9 @@ private: | |||||
typedef CarlaScopeLocker<CarlaMutex> CarlaMutexLocker; | typedef CarlaScopeLocker<CarlaMutex> CarlaMutexLocker; | ||||
typedef CarlaScopeLocker<CarlaRecursiveMutex> CarlaRecursiveMutexLocker; | typedef CarlaScopeLocker<CarlaRecursiveMutex> CarlaRecursiveMutexLocker; | ||||
typedef CarlaScopeTryLocker<CarlaMutex> CarlaMutexTryLocker; | |||||
typedef CarlaScopeTryLocker<CarlaRecursiveMutex> CarlaRecursiveMutexTryLocker; | |||||
typedef CarlaScopeUnlocker<CarlaMutex> CarlaMutexUnlocker; | typedef CarlaScopeUnlocker<CarlaMutex> CarlaMutexUnlocker; | ||||
typedef CarlaScopeUnlocker<CarlaRecursiveMutex> CarlaRecursiveMutexUnlocker; | typedef CarlaScopeUnlocker<CarlaRecursiveMutex> CarlaRecursiveMutexUnlocker; | ||||
@@ -425,7 +425,8 @@ public: | |||||
void writeMsg(const char* const msg) const noexcept | void writeMsg(const char* const msg) const noexcept | ||||
{ | { | ||||
CARLA_SAFE_ASSERT_RETURN(fPipeSend != -1,); | CARLA_SAFE_ASSERT_RETURN(fPipeSend != -1,); | ||||
CARLA_SAFE_ASSERT(! fWriteLock.tryLock()); | |||||
const CarlaMutexTryLocker cmtl(fWriteLock); | |||||
try { | try { | ||||
ssize_t ignore = ::write(fPipeSend, msg, std::strlen(msg)); | ssize_t ignore = ::write(fPipeSend, msg, std::strlen(msg)); | ||||
@@ -436,7 +437,8 @@ public: | |||||
void writeMsg(const char* const msg, size_t size) const noexcept | void writeMsg(const char* const msg, size_t size) const noexcept | ||||
{ | { | ||||
CARLA_SAFE_ASSERT_RETURN(fPipeSend != -1,); | CARLA_SAFE_ASSERT_RETURN(fPipeSend != -1,); | ||||
CARLA_SAFE_ASSERT(! fWriteLock.tryLock()); | |||||
const CarlaMutexTryLocker cmtl(fWriteLock); | |||||
try { | try { | ||||
ssize_t ignore = ::write(fPipeSend, msg, size); | ssize_t ignore = ::write(fPipeSend, msg, size); | ||||
@@ -447,7 +449,8 @@ public: | |||||
void writeAndFixMsg(const char* const msg) noexcept | void writeAndFixMsg(const char* const msg) noexcept | ||||
{ | { | ||||
CARLA_SAFE_ASSERT_RETURN(fPipeSend != -1,); | CARLA_SAFE_ASSERT_RETURN(fPipeSend != -1,); | ||||
CARLA_SAFE_ASSERT(! fWriteLock.tryLock()); | |||||
const CarlaMutexTryLocker cmtl(fWriteLock); | |||||
const size_t size(msg != nullptr ? std::strlen(msg) : 0); | const size_t size(msg != nullptr ? std::strlen(msg) : 0); | ||||