From 009899164520694f5ed7c3960ed736d6cd892b92 Mon Sep 17 00:00:00 2001 From: falkTX Date: Sat, 8 Feb 2014 22:59:46 +0000 Subject: [PATCH] Implement file callback, used in audio and midi-file plugs --- source/backend/engine/CarlaEngine.cpp | 2 +- source/carla_backend.py | 3 ++- source/carla_host.py | 25 +++++++++++++++++++++++++ 3 files changed, 28 insertions(+), 2 deletions(-) diff --git a/source/backend/engine/CarlaEngine.cpp b/source/backend/engine/CarlaEngine.cpp index 98320eafd..35b427190 100644 --- a/source/backend/engine/CarlaEngine.cpp +++ b/source/backend/engine/CarlaEngine.cpp @@ -1632,7 +1632,7 @@ void CarlaEngine::setCallback(const EngineCallbackFunc func, void* const ptr) no const char* CarlaEngine::runFileCallback(const FileCallbackOpcode action, const bool isDir, const char* const title, const char* const filter) noexcept { CARLA_SAFE_ASSERT_RETURN(title != nullptr && title[0] != '\0', nullptr); - CARLA_SAFE_ASSERT_RETURN(filter != nullptr && filter[0] != '\0', nullptr); + CARLA_SAFE_ASSERT_RETURN(filter != nullptr, nullptr); carla_debug("CarlaEngine::runFileCallback(%i:%s, %s, \"%s\", \"%s\")", action, FileCallbackOpcode2Str(action), bool2str(isDir), title, filter); CARLA_ENGINE_THREAD_SAFE_SECTION diff --git a/source/carla_backend.py b/source/carla_backend.py index 3f6862652..beab2db98 100644 --- a/source/carla_backend.py +++ b/source/carla_backend.py @@ -29,9 +29,10 @@ from sys import platform, maxsize kIs64bit = bool(architecture()[0] == "64bit" and maxsize > 2**32) # ------------------------------------------------------------------------------------------------------------ -# Define enum type (integer) +# Define custom types c_enum = c_int +c_uintptr = c_uint64 if kIs64bit else c_uint32 # ------------------------------------------------------------------------------------------------------------ # Set Platform diff --git a/source/carla_host.py b/source/carla_host.py index 643c9771b..b1a06506b 100644 --- a/source/carla_host.py +++ b/source/carla_host.py @@ -163,6 +163,8 @@ class HostWindow(QMainWindow): if Carla.host is not None: Carla.host.set_engine_callback(engineCallback) + Carla.host.set_file_callback(fileCallback) + # ------------------------------------------------------------- # Internal stuff @@ -1218,3 +1220,26 @@ def engineCallback(ptr, action, pluginId, value1, value2, value3, valueStr): Carla.gui.ErrorCallback.emit(valueStr) elif action == ENGINE_CALLBACK_QUIT: Carla.gui.QuitCallback.emit() + +# ------------------------------------------------------------------------------------------------------------ +# File callback + +def fileCallback(ptr, action, isDir, title, filter): + if Carla.gui is None: + return None + + ret = "" + + if action == FILE_CALLBACK_DEBUG: + pass + elif action == FILE_CALLBACK_OPEN: + ret = QFileDialog.getOpenFileName(Carla.gui, charPtrToString(title), "", charPtrToString(filter) ) #, QFileDialog.ShowDirsOnly if isDir else 0x0) + elif action == FILE_CALLBACK_SAVE: + ret = QFileDialog.getSaveFileName(Carla.gui, charPtrToString(title), "", charPtrToString(filter), QFileDialog.ShowDirsOnly if isDir else 0x0) + + if not ret: + return None + + Carla.gui._fileRet = c_char_p(ret.encode("utf-8")) + retval = cast(byref(Carla.gui._fileRet), POINTER(c_uintptr)) + return retval.contents.value