@@ -26,10 +26,10 @@ from digitalpeakmeter import DigitalPeakMeter | |||
# ----------------------------------------------------------------------- | |||
# External UI | |||
class DistrhoUIBigMeter(DigitalPeakMeter, ExternalUI): | |||
class DistrhoUIBigMeter(ExternalUI, DigitalPeakMeter): | |||
def __init__(self): | |||
DigitalPeakMeter.__init__(self, None) | |||
ExternalUI.__init__(self) | |||
DigitalPeakMeter.__init__(self, None) | |||
channels = 2 #6 if argv[0].endswith("bigmeterM-ui") else 2 | |||
@@ -91,7 +91,7 @@ class DistrhoUIBigMeter(DigitalPeakMeter, ExternalUI): | |||
#--------------- main ------------------ | |||
if __name__ == '__main__': | |||
import resources_rc | |||
app = CarlaApplication("BigMeter") | |||
#app... | |||
gui = DistrhoUIBigMeter() | |||
app.exit_exec() |
@@ -519,10 +519,10 @@ class PluginHost(object): | |||
# ------------------------------------------------------------------------------------------------------------ | |||
# Main Window | |||
class CarlaMiniW(HostWindow, ExternalUI): | |||
class CarlaMiniW(ExternalUI, HostWindow): | |||
def __init__(self): | |||
HostWindow.__init__(self, None) | |||
ExternalUI.__init__(self) | |||
HostWindow.__init__(self, None) | |||
if False: | |||
from carla_patchbay import CarlaPatchbayW | |||
@@ -41,10 +41,10 @@ from paramspinbox import ParamSpinBox | |||
# ----------------------------------------------------------------------- | |||
# External UI | |||
class DistrhoUINotes(QWidget, ExternalUI): | |||
class DistrhoUINotes(ExternalUI, QWidget): | |||
def __init__(self): | |||
QWidget.__init__(self, None) | |||
ExternalUI.__init__(self) | |||
QWidget.__init__(self, None) | |||
self.fCurPage = 1 | |||
self.fSaveSizeNowChecker = -1 | |||
@@ -233,7 +233,7 @@ class DistrhoUINotes(QWidget, ExternalUI): | |||
#--------------- main ------------------ | |||
if __name__ == '__main__': | |||
import resources_rc | |||
app = CarlaApplication("Notes") | |||
#app... | |||
gui = DistrhoUINotes() | |||
app.exit_exec() |
@@ -78,7 +78,7 @@ EngineEvents: EngineEvents.cpp | |||
env LD_LIBRARY_PATH=../backend valgrind ./$@ | |||
PipeServer: PipeServer.cpp ../utils/CarlaPipeUtils.hpp | |||
$(CXX) $< $(PEDANTIC_CXX_FLAGS) -o $@ | |||
$(CXX) $< $(PEDANTIC_CXX_FLAGS) -lpthread -o $@ | |||
# valgrind ./$@ | |||
Print: Print.cpp ../utils/CarlaUtils.hpp | |||
@@ -26,17 +26,12 @@ public: | |||
{ | |||
} | |||
~ExternalPluginUI() override | |||
{ | |||
} | |||
void fail(const char* const error) override | |||
{ | |||
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); | |||
@@ -46,37 +41,7 @@ public: | |||
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; | |||
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"); | |||
return 1; | |||
@@ -98,7 +63,5 @@ int main() | |||
carla_msleep(10); | |||
} | |||
//ui.stop(); | |||
return 0; | |||
} |
@@ -200,6 +200,33 @@ private: | |||
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. | |||
@@ -231,6 +258,9 @@ private: | |||
typedef CarlaScopeLocker<CarlaMutex> CarlaMutexLocker; | |||
typedef CarlaScopeLocker<CarlaRecursiveMutex> CarlaRecursiveMutexLocker; | |||
typedef CarlaScopeTryLocker<CarlaMutex> CarlaMutexTryLocker; | |||
typedef CarlaScopeTryLocker<CarlaRecursiveMutex> CarlaRecursiveMutexTryLocker; | |||
typedef CarlaScopeUnlocker<CarlaMutex> CarlaMutexUnlocker; | |||
typedef CarlaScopeUnlocker<CarlaRecursiveMutex> CarlaRecursiveMutexUnlocker; | |||
@@ -425,7 +425,8 @@ public: | |||
void writeMsg(const char* const msg) const noexcept | |||
{ | |||
CARLA_SAFE_ASSERT_RETURN(fPipeSend != -1,); | |||
CARLA_SAFE_ASSERT(! fWriteLock.tryLock()); | |||
const CarlaMutexTryLocker cmtl(fWriteLock); | |||
try { | |||
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 | |||
{ | |||
CARLA_SAFE_ASSERT_RETURN(fPipeSend != -1,); | |||
CARLA_SAFE_ASSERT(! fWriteLock.tryLock()); | |||
const CarlaMutexTryLocker cmtl(fWriteLock); | |||
try { | |||
ssize_t ignore = ::write(fPipeSend, msg, size); | |||
@@ -447,7 +449,8 @@ public: | |||
void writeAndFixMsg(const char* const msg) noexcept | |||
{ | |||
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); | |||