mirror of
https://github.com/WarmUpTill/SceneSwitcher.git
synced 2026-09-07 09:05:57 -05:00
Compare commits
10 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
a0e6e6f528 | ||
|
|
e30d5845fa | ||
|
|
d12911cd02 | ||
|
|
b8ecc40e8c | ||
|
|
8ec4849b1d | ||
|
|
e6e9f3a831 | ||
|
|
555f7c1381 | ||
|
|
f0f8b0fd92 | ||
|
|
661e83162f | ||
|
|
4606f80a9d |
2
.github/workflows/build-project.yaml
vendored
2
.github/workflows/build-project.yaml
vendored
@@ -6,7 +6,7 @@ on:
|
|||||||
description: "Project name detected by parsing build spec file"
|
description: "Project name detected by parsing build spec file"
|
||||||
value: ${{ jobs.check-event.outputs.pluginName }}
|
value: ${{ jobs.check-event.outputs.pluginName }}
|
||||||
env:
|
env:
|
||||||
DEP_DIR: .deps/advss-build-dependencies-2
|
DEP_DIR: .deps/advss-build-dependencies-3
|
||||||
jobs:
|
jobs:
|
||||||
check-event:
|
check-event:
|
||||||
name: Check GitHub Event Data 🔎
|
name: Check GitHub Event Data 🔎
|
||||||
|
|||||||
@@ -1,33 +1,33 @@
|
|||||||
{
|
{
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"obs-studio": {
|
"obs-studio": {
|
||||||
"version": "30.1.2",
|
"version": "31.1.1",
|
||||||
"baseUrl": "https://github.com/obsproject/obs-studio/archive/refs/tags",
|
"baseUrl": "https://github.com/obsproject/obs-studio/archive/refs/tags",
|
||||||
"label": "OBS sources",
|
"label": "OBS sources",
|
||||||
"hashes": {
|
"hashes": {
|
||||||
"macos": "490bae1c392b3b344b0270afd8cb887da4bc50bd92c0c426e96713c1ccb9701a",
|
"macos": "39751f067bacc13d44b116c5138491b5f1391f91516d3d590d874edd21292291",
|
||||||
"windows-x64": "c2dd03fa7fd01fad5beafce8f7156da11f9ed9a588373fd40b44a06f4c03b867"
|
"windows-x64": "2c8427c10b55ac6d68008df2e9a3e82f4647aaad18f105e30d4713c2de678ccf"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"prebuilt": {
|
"prebuilt": {
|
||||||
"version": "2024-03-19",
|
"version": "2025-07-11",
|
||||||
"baseUrl": "https://github.com/obsproject/obs-deps/releases/download",
|
"baseUrl": "https://github.com/obsproject/obs-deps/releases/download",
|
||||||
"label": "Pre-Built obs-deps",
|
"label": "Pre-Built obs-deps",
|
||||||
"hashes": {
|
"hashes": {
|
||||||
"macos": "2e9bfb55a5e0e4c1086fa1fda4cf268debfead473089df2aaea80e1c7a3ca7ff",
|
"macos": "495687e63383d1a287684b6e2e9bfe246bb8f156fe265926afb1a325af1edd2a",
|
||||||
"windows-x64": "6e86068371526a967e805f6f9903f9407adb683c21820db5f07da8f30d11e998"
|
"windows-x64": "c8c642c1070dc31ce9a0f1e4cef5bb992f4bff4882255788b5da12129e85caa7"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"qt6": {
|
"qt6": {
|
||||||
"version": "2024-03-19",
|
"version": "2025-07-11",
|
||||||
"baseUrl": "https://github.com/obsproject/obs-deps/releases/download",
|
"baseUrl": "https://github.com/obsproject/obs-deps/releases/download",
|
||||||
"label": "Pre-Built Qt6",
|
"label": "Pre-Built Qt6",
|
||||||
"hashes": {
|
"hashes": {
|
||||||
"macos": "694f1e639c017e3b1f456f735330dc5afae287cbea85757101af1368de3142c8",
|
"macos": "d3f5f04b6ea486e032530bdf0187cbda9a54e0a49621a4c8ba984c5023998867",
|
||||||
"windows-x64": "72d1df34a0ef7413a681d5fcc88cae81da60adc03dcd23ef17862ab170bcc0dd"
|
"windows-x64": "0e76bf0555dd5382838850b748d3dcfab44a1e1058441309ab54e1a65b156d0a"
|
||||||
},
|
},
|
||||||
"debugSymbols": {
|
"debugSymbols": {
|
||||||
"windows-x64": "fbddd1f659c360f2291911ac5709b67b6f8182e6bca519d24712e4f6fd3cc865"
|
"windows-x64": "11b7be92cf66a273299b8f3515c07a5cfb61614b59a4e67f7fc5ecba5e2bdf21"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -65,17 +65,16 @@ function(_setup_obs_studio)
|
|||||||
|
|
||||||
if(OS_WINDOWS)
|
if(OS_WINDOWS)
|
||||||
set(_cmake_generator "${CMAKE_GENERATOR}")
|
set(_cmake_generator "${CMAKE_GENERATOR}")
|
||||||
set(_cmake_arch "-A ${arch}")
|
set(_cmake_arch
|
||||||
|
"-A ${arch},version=${CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION}")
|
||||||
set(_cmake_extra
|
set(_cmake_extra
|
||||||
"-DCMAKE_SYSTEM_VERSION=${CMAKE_SYSTEM_VERSION} -DCMAKE_ENABLE_SCRIPTING=OFF"
|
"-DCMAKE_SYSTEM_VERSION=${CMAKE_SYSTEM_VERSION} -DCMAKE_ENABLE_SCRIPTING=OFF"
|
||||||
)
|
)
|
||||||
set(_cmake_version "2.0.0")
|
|
||||||
elseif(OS_MACOS)
|
elseif(OS_MACOS)
|
||||||
set(_cmake_generator "Xcode")
|
set(_cmake_generator "Xcode")
|
||||||
set(_cmake_arch "-DCMAKE_OSX_ARCHITECTURES:STRING='arm64;x86_64'")
|
set(_cmake_arch "-DCMAKE_OSX_ARCHITECTURES:STRING='arm64;x86_64'")
|
||||||
set(_cmake_extra
|
set(_cmake_extra
|
||||||
"-DCMAKE_OSX_DEPLOYMENT_TARGET=${CMAKE_OSX_DEPLOYMENT_TARGET}")
|
"-DCMAKE_OSX_DEPLOYMENT_TARGET=${CMAKE_OSX_DEPLOYMENT_TARGET}")
|
||||||
set(_cmake_version "3.0.0")
|
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
message(STATUS "Configure ${label} (${arch})")
|
message(STATUS "Configure ${label} (${arch})")
|
||||||
@@ -83,32 +82,42 @@ function(_setup_obs_studio)
|
|||||||
COMMAND
|
COMMAND
|
||||||
"${CMAKE_COMMAND}" -S "${dependencies_dir}/${_obs_destination}" -B
|
"${CMAKE_COMMAND}" -S "${dependencies_dir}/${_obs_destination}" -B
|
||||||
"${dependencies_dir}/${_obs_destination}/build_${arch}" -G
|
"${dependencies_dir}/${_obs_destination}/build_${arch}" -G
|
||||||
${_cmake_generator} "${_cmake_arch}"
|
${_cmake_generator} "${_cmake_arch}" -DOBS_CMAKE_VERSION:STRING=3.0.0
|
||||||
-DOBS_CMAKE_VERSION:STRING=${_cmake_version} -DENABLE_PLUGINS:BOOL=OFF
|
-DENABLE_PLUGINS:BOOL=OFF -DENABLE_FRONTEND:BOOL=OFF
|
||||||
-DENABLE_UI:BOOL=OFF -DOBS_VERSION_OVERRIDE:STRING=${_obs_version}
|
-DOBS_VERSION_OVERRIDE:STRING=${_obs_version}
|
||||||
"-DCMAKE_PREFIX_PATH='${CMAKE_PREFIX_PATH}'" ${_is_fresh} ${_cmake_extra}
|
"-DCMAKE_PREFIX_PATH='${CMAKE_PREFIX_PATH}'" ${_is_fresh} ${_cmake_extra}
|
||||||
RESULT_VARIABLE _process_result COMMAND_ERROR_IS_FATAL ANY
|
RESULT_VARIABLE _process_result COMMAND_ERROR_IS_FATAL ANY
|
||||||
OUTPUT_QUIET)
|
OUTPUT_QUIET)
|
||||||
message(STATUS "Configure ${label} (${arch}) - done")
|
message(STATUS "Configure ${label} (${arch}) - done")
|
||||||
|
|
||||||
message(STATUS "Build ${label} (${arch})")
|
message(STATUS "Build ${label} (Debug - ${arch})")
|
||||||
execute_process(
|
execute_process(
|
||||||
COMMAND "${CMAKE_COMMAND}" --build build_${arch} --target obs-frontend-api
|
COMMAND "${CMAKE_COMMAND}" --build build_${arch} --target obs-frontend-api
|
||||||
--config Debug --parallel
|
--config Debug --parallel
|
||||||
WORKING_DIRECTORY "${dependencies_dir}/${_obs_destination}"
|
WORKING_DIRECTORY "${dependencies_dir}/${_obs_destination}"
|
||||||
RESULT_VARIABLE _process_result COMMAND_ERROR_IS_FATAL ANY
|
RESULT_VARIABLE _process_result COMMAND_ERROR_IS_FATAL ANY
|
||||||
OUTPUT_QUIET)
|
OUTPUT_QUIET)
|
||||||
message(STATUS "Build ${label} (${arch}) - done")
|
message(STATUS "Build ${label} (Debug - ${arch}) - done")
|
||||||
|
|
||||||
|
message(STATUS "Build ${label} (Release - ${arch})")
|
||||||
|
execute_process(
|
||||||
|
COMMAND "${CMAKE_COMMAND}" --build build_${arch} --target obs-frontend-api
|
||||||
|
--config Release --parallel
|
||||||
|
WORKING_DIRECTORY "${dependencies_dir}/${_obs_destination}"
|
||||||
|
RESULT_VARIABLE _process_result COMMAND_ERROR_IS_FATAL ANY
|
||||||
|
OUTPUT_QUIET)
|
||||||
|
message(STATUS "Build ${label} (Reelase - ${arch}) - done")
|
||||||
|
|
||||||
message(STATUS "Install ${label} (${arch})")
|
message(STATUS "Install ${label} (${arch})")
|
||||||
if(OS_WINDOWS)
|
|
||||||
set(_cmake_extra "--component obs_libraries")
|
|
||||||
else()
|
|
||||||
set(_cmake_extra "")
|
|
||||||
endif()
|
|
||||||
execute_process(
|
execute_process(
|
||||||
COMMAND "${CMAKE_COMMAND}" --install build_${arch} --component Development
|
COMMAND "${CMAKE_COMMAND}" --install build_${arch} --component Development
|
||||||
--config Debug --prefix "${dependencies_dir}" ${_cmake_extra}
|
--config Debug --prefix "${dependencies_dir}"
|
||||||
|
WORKING_DIRECTORY "${dependencies_dir}/${_obs_destination}"
|
||||||
|
RESULT_VARIABLE _process_result COMMAND_ERROR_IS_FATAL ANY
|
||||||
|
OUTPUT_QUIET)
|
||||||
|
execute_process(
|
||||||
|
COMMAND "${CMAKE_COMMAND}" --install build_${arch} --component Development
|
||||||
|
--config Release --prefix "${dependencies_dir}"
|
||||||
WORKING_DIRECTORY "${dependencies_dir}/${_obs_destination}"
|
WORKING_DIRECTORY "${dependencies_dir}/${_obs_destination}"
|
||||||
RESULT_VARIABLE _process_result COMMAND_ERROR_IS_FATAL ANY
|
RESULT_VARIABLE _process_result COMMAND_ERROR_IS_FATAL ANY
|
||||||
OUTPUT_QUIET)
|
OUTPUT_QUIET)
|
||||||
|
|||||||
@@ -4,6 +4,7 @@
|
|||||||
# ---------------------------------------------------------------------------
|
# ---------------------------------------------------------------------------
|
||||||
|
|
||||||
if(WIN32 AND (NOT OpenSSL_FOUND))
|
if(WIN32 AND (NOT OpenSSL_FOUND))
|
||||||
|
|
||||||
set(_openssl_roots
|
set(_openssl_roots
|
||||||
"$ENV{ProgramFiles}/OpenSSL-Win64" "$ENV{ProgramFiles}/OpenSSL"
|
"$ENV{ProgramFiles}/OpenSSL-Win64" "$ENV{ProgramFiles}/OpenSSL"
|
||||||
"$ENV{ProgramW6432}/OpenSSL-Win64")
|
"$ENV{ProgramW6432}/OpenSSL-Win64")
|
||||||
@@ -46,33 +47,20 @@ if(WIN32 AND (NOT OpenSSL_FOUND))
|
|||||||
AND EXISTS "${_root}/${_suffix}/libcrypto.lib")
|
AND EXISTS "${_root}/${_suffix}/libcrypto.lib")
|
||||||
set(OPENSSL_ROOT_DIR
|
set(OPENSSL_ROOT_DIR
|
||||||
"${_root}"
|
"${_root}"
|
||||||
CACHE PATH "Path to OpenSSL root" FORCE)
|
CACHE PATH "Path to OpenSSL root")
|
||||||
set(OPENSSL_CRYPTO_LIBRARY
|
set(OPENSSL_CRYPTO_LIBRARY
|
||||||
"${_root}/${_suffix}/libcrypto.lib"
|
"${_root}/${_suffix}/libcrypto.lib"
|
||||||
CACHE FILEPATH "OpenSSL crypto lib" FORCE)
|
CACHE FILEPATH "OpenSSL crypto lib")
|
||||||
set(OPENSSL_SSL_LIBRARY
|
set(OPENSSL_SSL_LIBRARY
|
||||||
"${_root}/${_suffix}/libssl.lib"
|
"${_root}/${_suffix}/libssl.lib"
|
||||||
CACHE FILEPATH "OpenSSL ssl lib" FORCE)
|
CACHE FILEPATH "OpenSSL ssl lib")
|
||||||
set(OPENSSL_INCLUDE_DIR
|
set(OPENSSL_INCLUDE_DIR
|
||||||
"${_root}/include"
|
"${_root}/include"
|
||||||
CACHE PATH "OpenSSL include dir" FORCE)
|
CACHE PATH "OpenSSL include dir")
|
||||||
set(OpenSSL_FOUND
|
set(OpenSSL_FOUND
|
||||||
TRUE
|
TRUE
|
||||||
CACHE BOOL "Whether OpenSSL was found" FORCE)
|
CACHE BOOL "Whether OpenSSL was found")
|
||||||
message(STATUS "Found OpenSSL at: ${_root}/${_suffix}")
|
message(STATUS "Found OpenSSL at: ${_root}/${_suffix}")
|
||||||
# Recursively list all files under OPENSSL_ROOT_DIR
|
|
||||||
file(GLOB_RECURSE OPENSSL_FILES "${OPENSSL_ROOT_DIR}/*")
|
|
||||||
|
|
||||||
message(STATUS "Listing contents of OPENSSL_ROOT_DIR:")
|
|
||||||
foreach(file ${OPENSSL_FILES})
|
|
||||||
message(STATUS " ${file}")
|
|
||||||
endforeach()
|
|
||||||
|
|
||||||
get_cmake_property(_variableNames VARIABLES)
|
|
||||||
list(SORT _variableNames)
|
|
||||||
foreach(_variableName ${_variableNames})
|
|
||||||
message(STATUS "${_variableName}=${${_variableName}}")
|
|
||||||
endforeach()
|
|
||||||
return()
|
return()
|
||||||
endif()
|
endif()
|
||||||
endforeach()
|
endforeach()
|
||||||
|
|||||||
@@ -91,6 +91,12 @@ AdvSceneSwitcher.variableTab.lastUsed.text.never="Never"
|
|||||||
AdvSceneSwitcher.variableTab.lastChanged.header="Last changed"
|
AdvSceneSwitcher.variableTab.lastChanged.header="Last changed"
|
||||||
AdvSceneSwitcher.variableTab.lastChanged.text.none="No change since launch"
|
AdvSceneSwitcher.variableTab.lastChanged.text.none="No change since launch"
|
||||||
AdvSceneSwitcher.variableTab.lastChanged.tooltip="Times changed: %1\n\nPrevious value: %2"
|
AdvSceneSwitcher.variableTab.lastChanged.tooltip="Times changed: %1\n\nPrevious value: %2"
|
||||||
|
AdvSceneSwitcher.variableTab.search.placeholder="Search ..."
|
||||||
|
AdvSceneSwitcher.variableTab.search.all="All columns"
|
||||||
|
AdvSceneSwitcher.variableTab.search.name="Name column"
|
||||||
|
AdvSceneSwitcher.variableTab.search.value="Value column"
|
||||||
|
AdvSceneSwitcher.variableTab.addDock="Add dock"
|
||||||
|
AdvSceneSwitcher.variableTab.clear="Clear"
|
||||||
|
|
||||||
# Action Queue Tab
|
# Action Queue Tab
|
||||||
AdvSceneSwitcher.actionQueueTab.title="Action Queues"
|
AdvSceneSwitcher.actionQueueTab.title="Action Queues"
|
||||||
@@ -928,6 +934,9 @@ AdvSceneSwitcher.action.source.type.deinterlaceOrder="Set deinterlace field orde
|
|||||||
AdvSceneSwitcher.action.source.type.openInteractionDialog="Open interaction dialog"
|
AdvSceneSwitcher.action.source.type.openInteractionDialog="Open interaction dialog"
|
||||||
AdvSceneSwitcher.action.source.type.openFilterDialog="Open filter dialog"
|
AdvSceneSwitcher.action.source.type.openFilterDialog="Open filter dialog"
|
||||||
AdvSceneSwitcher.action.source.type.openPropertiesDialog="Open properties dialog"
|
AdvSceneSwitcher.action.source.type.openPropertiesDialog="Open properties dialog"
|
||||||
|
AdvSceneSwitcher.action.source.type.closeInteractionDialog="Close interaction dialog"
|
||||||
|
AdvSceneSwitcher.action.source.type.closeFilterDialog="Close filter dialog"
|
||||||
|
AdvSceneSwitcher.action.source.type.closePropertiesDialog="Close properties dialog"
|
||||||
AdvSceneSwitcher.action.source.entry="{{actions}}{{sources}}{{settingsButtons}}{{deinterlaceMode}}{{deinterlaceOrder}}{{refresh}}"
|
AdvSceneSwitcher.action.source.entry="{{actions}}{{sources}}{{settingsButtons}}{{deinterlaceMode}}{{deinterlaceOrder}}{{refresh}}"
|
||||||
AdvSceneSwitcher.action.source.entry.settings="{{settings}}{{settingsInputMethod}}{{settingValue}}{{tempVar}}"
|
AdvSceneSwitcher.action.source.entry.settings="{{settings}}{{settingsInputMethod}}{{settingValue}}{{tempVar}}"
|
||||||
AdvSceneSwitcher.action.source.warning="Warning: Enabling and disabling sources globally cannot be controlled by the OBS UI\nYou might be looking for \"Scene item visibility\""
|
AdvSceneSwitcher.action.source.warning="Warning: Enabling and disabling sources globally cannot be controlled by the OBS UI\nYou might be looking for \"Scene item visibility\""
|
||||||
@@ -949,6 +958,7 @@ AdvSceneSwitcher.action.source.inputMethod.individualTempvar="Set to macro prope
|
|||||||
AdvSceneSwitcher.action.source.inputMethod.json="Set setting JSON string"
|
AdvSceneSwitcher.action.source.inputMethod.json="Set setting JSON string"
|
||||||
AdvSceneSwitcher.action.source.refresh="Refresh"
|
AdvSceneSwitcher.action.source.refresh="Refresh"
|
||||||
AdvSceneSwitcher.action.source.refresh.tooltip="Repopulate the source settings selection with the settings of the source which's name matches the variable value."
|
AdvSceneSwitcher.action.source.refresh.tooltip="Repopulate the source settings selection with the settings of the source which's name matches the variable value."
|
||||||
|
AdvSceneSwitcher.action.source.dialog.accept="Accept changes"
|
||||||
AdvSceneSwitcher.action.media="Media"
|
AdvSceneSwitcher.action.media="Media"
|
||||||
AdvSceneSwitcher.action.media.type.play="Play"
|
AdvSceneSwitcher.action.media.type.play="Play"
|
||||||
AdvSceneSwitcher.action.media.type.pause="Pause"
|
AdvSceneSwitcher.action.media.type.pause="Pause"
|
||||||
@@ -1145,6 +1155,7 @@ AdvSceneSwitcher.action.http.entry.line2="Timeout:{{timeout}}seconds"
|
|||||||
AdvSceneSwitcher.action.variable="Variable"
|
AdvSceneSwitcher.action.variable="Variable"
|
||||||
AdvSceneSwitcher.action.variable.type.set="Set to value"
|
AdvSceneSwitcher.action.variable.type.set="Set to value"
|
||||||
AdvSceneSwitcher.action.variable.type.append="Append"
|
AdvSceneSwitcher.action.variable.type.append="Append"
|
||||||
|
AdvSceneSwitcher.action.variable.type.copy="Copy variable"
|
||||||
AdvSceneSwitcher.action.variable.type.appendVar="Append variable"
|
AdvSceneSwitcher.action.variable.type.appendVar="Append variable"
|
||||||
AdvSceneSwitcher.action.variable.type.increment="Increment"
|
AdvSceneSwitcher.action.variable.type.increment="Increment"
|
||||||
AdvSceneSwitcher.action.variable.type.decrement="Decrement"
|
AdvSceneSwitcher.action.variable.type.decrement="Decrement"
|
||||||
@@ -2312,6 +2323,9 @@ AdvSceneSwitcher.tempVar.mqtt.message="Message"
|
|||||||
AdvSceneSwitcher.tempVar.cursor.x="Cursor position (X)"
|
AdvSceneSwitcher.tempVar.cursor.x="Cursor position (X)"
|
||||||
AdvSceneSwitcher.tempVar.cursor.y="Cursor position (Y)"
|
AdvSceneSwitcher.tempVar.cursor.y="Cursor position (Y)"
|
||||||
|
|
||||||
|
AdvSceneSwitcher.tempVar.replay.lastSavePath="Last save path"
|
||||||
|
AdvSceneSwitcher.tempVar.replay.lastSavePath.description="The file path of the last replay buffer saved."
|
||||||
|
|
||||||
AdvSceneSwitcher.selectScene="--select scene--"
|
AdvSceneSwitcher.selectScene="--select scene--"
|
||||||
AdvSceneSwitcher.selectCanvas="--select canvas--"
|
AdvSceneSwitcher.selectCanvas="--select canvas--"
|
||||||
AdvSceneSwitcher.selectPreviousScene="Previous Scene"
|
AdvSceneSwitcher.selectPreviousScene="Previous Scene"
|
||||||
|
|||||||
@@ -286,6 +286,14 @@ bool MacroActionVariable::PerformAction()
|
|||||||
case Action::APPEND:
|
case Action::APPEND:
|
||||||
apppend(*var, _strValue);
|
apppend(*var, _strValue);
|
||||||
break;
|
break;
|
||||||
|
case Action::COPY_VAR: {
|
||||||
|
auto var2 = _variable2.lock();
|
||||||
|
if (!var2) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
var->SetValue(var2->Value());
|
||||||
|
break;
|
||||||
|
}
|
||||||
case Action::APPEND_VAR: {
|
case Action::APPEND_VAR: {
|
||||||
auto var2 = _variable2.lock();
|
auto var2 = _variable2.lock();
|
||||||
if (!var2) {
|
if (!var2) {
|
||||||
@@ -670,6 +678,8 @@ static inline void populateActionSelection(QComboBox *list)
|
|||||||
actions = {
|
actions = {
|
||||||
{MacroActionVariable::Action::SET_VALUE,
|
{MacroActionVariable::Action::SET_VALUE,
|
||||||
"AdvSceneSwitcher.action.variable.type.set"},
|
"AdvSceneSwitcher.action.variable.type.set"},
|
||||||
|
{MacroActionVariable::Action::COPY_VAR,
|
||||||
|
"AdvSceneSwitcher.action.variable.type.copy"},
|
||||||
{MacroActionVariable::Action::APPEND,
|
{MacroActionVariable::Action::APPEND,
|
||||||
"AdvSceneSwitcher.action.variable.type.append"},
|
"AdvSceneSwitcher.action.variable.type.append"},
|
||||||
{MacroActionVariable::Action::PAD,
|
{MacroActionVariable::Action::PAD,
|
||||||
@@ -1521,6 +1531,7 @@ void MacroActionVariableEdit::SetWidgetVisibility()
|
|||||||
}
|
}
|
||||||
|
|
||||||
_variables2->setVisible(
|
_variables2->setVisible(
|
||||||
|
_entryData->_action == MacroActionVariable::Action::COPY_VAR ||
|
||||||
_entryData->_action ==
|
_entryData->_action ==
|
||||||
MacroActionVariable::Action::APPEND_VAR ||
|
MacroActionVariable::Action::APPEND_VAR ||
|
||||||
_entryData->_action ==
|
_entryData->_action ==
|
||||||
|
|||||||
@@ -55,6 +55,7 @@ public:
|
|||||||
RANDOM_NUMBER,
|
RANDOM_NUMBER,
|
||||||
QUERY_JSON,
|
QUERY_JSON,
|
||||||
ARRAY_JSON,
|
ARRAY_JSON,
|
||||||
|
COPY_VAR,
|
||||||
};
|
};
|
||||||
|
|
||||||
Action _action = Action::SET_VALUE;
|
Action _action = Action::SET_VALUE;
|
||||||
|
|||||||
@@ -110,7 +110,7 @@ void MacroDock::RunClicked()
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
auto ret = macro->PerformActions(true);
|
auto ret = macro->PerformActions(true, true, true);
|
||||||
if (!ret) {
|
if (!ret) {
|
||||||
QString err =
|
QString err =
|
||||||
obs_module_text("AdvSceneSwitcher.macroTab.runFail");
|
obs_module_text("AdvSceneSwitcher.macroTab.runFail");
|
||||||
|
|||||||
@@ -423,7 +423,7 @@ void ImportQueues(obs_data_t *data)
|
|||||||
importedQueues->emplace_back(queue);
|
importedQueues->emplace_back(queue);
|
||||||
}
|
}
|
||||||
|
|
||||||
QeueUITask(signalImportedQueues, importedQueues);
|
QueueUITask(signalImportedQueues, importedQueues);
|
||||||
}
|
}
|
||||||
|
|
||||||
std::weak_ptr<ActionQueue> GetWeakActionQueueByName(const std::string &name)
|
std::weak_ptr<ActionQueue> GetWeakActionQueueByName(const std::string &name)
|
||||||
|
|||||||
@@ -8,7 +8,7 @@
|
|||||||
|
|
||||||
namespace advss {
|
namespace advss {
|
||||||
|
|
||||||
ResourceTable::ResourceTable(QTabWidget *parent, const QString &help,
|
ResourceTable::ResourceTable(QWidget *parent, const QString &help,
|
||||||
const QString &addToolTip,
|
const QString &addToolTip,
|
||||||
const QString &removeToolTip,
|
const QString &removeToolTip,
|
||||||
const QStringList &headers,
|
const QStringList &headers,
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ class ADVSS_EXPORT ResourceTable : public QWidget {
|
|||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
public:
|
public:
|
||||||
ResourceTable(QTabWidget *parent, const QString &help,
|
ResourceTable(QWidget *parent, const QString &help,
|
||||||
const QString &addToolTip, const QString &removeToolTip,
|
const QString &addToolTip, const QString &removeToolTip,
|
||||||
const QStringList &headers,
|
const QStringList &headers,
|
||||||
const std::function<void()> &openSettings);
|
const std::function<void()> &openSettings);
|
||||||
|
|||||||
@@ -178,7 +178,7 @@ std::string GetThemeTypeName()
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void QeueUITask(void (*task)(void *param), void *param)
|
void QueueUITask(void (*task)(void *param), void *param)
|
||||||
{
|
{
|
||||||
obs_queue_task(OBS_TASK_UI, task, param, false);
|
obs_queue_task(OBS_TASK_UI, task, param, false);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -35,7 +35,7 @@ EXPORT void DisplayTrayMessage(const QString &title, const QString &msg,
|
|||||||
EXPORT std::string GetThemeTypeName();
|
EXPORT std::string GetThemeTypeName();
|
||||||
EXPORT QWidget *GetSettingsWindow();
|
EXPORT QWidget *GetSettingsWindow();
|
||||||
|
|
||||||
void QeueUITask(void (*task)(void *param), void *param);
|
EXPORT void QueueUITask(void (*task)(void *param), void *param);
|
||||||
|
|
||||||
bool IsCursorInWidgetArea(QWidget *widget);
|
bool IsCursorInWidgetArea(QWidget *widget);
|
||||||
|
|
||||||
|
|||||||
@@ -8,6 +8,9 @@
|
|||||||
#include "ui-helpers.hpp"
|
#include "ui-helpers.hpp"
|
||||||
#include "variable.hpp"
|
#include "variable.hpp"
|
||||||
|
|
||||||
|
#include <obs-frontend-api.h>
|
||||||
|
|
||||||
|
#include <QLayout>
|
||||||
#include <QTimer>
|
#include <QTimer>
|
||||||
|
|
||||||
namespace advss {
|
namespace advss {
|
||||||
@@ -16,14 +19,62 @@ static bool registerTab();
|
|||||||
static void setupTab(QTabWidget *);
|
static void setupTab(QTabWidget *);
|
||||||
static bool registerTabDone = registerTab();
|
static bool registerTabDone = registerTab();
|
||||||
|
|
||||||
static VariableTable *tabWidget = nullptr;
|
static VariableTable *dockWidget = nullptr;
|
||||||
|
static bool addDock = false;
|
||||||
|
|
||||||
|
static VariableTable::Settings tabSettings;
|
||||||
|
static VariableTable::Settings dockSettings;
|
||||||
|
|
||||||
|
static void save(obs_data_t *data)
|
||||||
|
{
|
||||||
|
tabSettings.Save(data, "tabSettings");
|
||||||
|
dockSettings.Save(data, "dockSettings");
|
||||||
|
obs_data_set_bool(data, "addVariablesDock", addDock);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void enableDock(bool enable)
|
||||||
|
{
|
||||||
|
if (OBSIsShuttingDown()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
obs_frontend_remove_dock("advss-variable-dock");
|
||||||
|
|
||||||
|
addDock = enable;
|
||||||
|
if (!addDock) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
dockWidget = new VariableTable(dockSettings);
|
||||||
|
dockWidget->HideDockOptions();
|
||||||
|
if (obs_frontend_add_dock_by_id(
|
||||||
|
"advss-variable-dock",
|
||||||
|
obs_module_text("AdvSceneSwitcher.variableTab.title"),
|
||||||
|
dockWidget)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
blog(LOG_INFO, "failed to register variable dock!");
|
||||||
|
dockWidget->deleteLater();
|
||||||
|
dockWidget = nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void load(obs_data_t *data)
|
||||||
|
{
|
||||||
|
tabSettings.Load(data, "tabSettings");
|
||||||
|
dockSettings.Load(data, "dockSettings");
|
||||||
|
|
||||||
|
enableDock(obs_data_get_bool(data, "addVariablesDock"));
|
||||||
|
}
|
||||||
|
|
||||||
static bool registerTab()
|
static bool registerTab()
|
||||||
{
|
{
|
||||||
AddPluginInitStep([]() {
|
AddPluginInitStep([]() {
|
||||||
AddSetupTabCallback("variableTab", VariableTable::Create,
|
AddSetupTabCallback("variableTab",
|
||||||
setupTab);
|
VariableTable::CreateTabTable, setupTab);
|
||||||
});
|
});
|
||||||
|
AddSaveStep(save);
|
||||||
|
AddLoadStep(load);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -34,10 +85,14 @@ static void setTabVisible(QTabWidget *tabWidget, bool visible)
|
|||||||
obs_module_text("AdvSceneSwitcher.variableTab.title"));
|
obs_module_text("AdvSceneSwitcher.variableTab.title"));
|
||||||
}
|
}
|
||||||
|
|
||||||
VariableTable *VariableTable::Create()
|
VariableTable *VariableTable::CreateTabTable()
|
||||||
{
|
{
|
||||||
tabWidget = new VariableTable();
|
return new VariableTable(tabSettings);
|
||||||
return tabWidget;
|
}
|
||||||
|
|
||||||
|
void VariableTable::HideDockOptions() const
|
||||||
|
{
|
||||||
|
_addDock->hide();
|
||||||
}
|
}
|
||||||
|
|
||||||
void VariableTable::Add()
|
void VariableTable::Add()
|
||||||
@@ -163,15 +218,14 @@ static void updateVariableStatus(QTableWidget *table)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void openSettingsDialog()
|
static void openSettingsDialog(VariableTable *table)
|
||||||
{
|
{
|
||||||
auto selectedRows =
|
auto selectedRows = table->Table()->selectionModel()->selectedRows();
|
||||||
tabWidget->Table()->selectionModel()->selectedRows();
|
|
||||||
if (selectedRows.empty()) {
|
if (selectedRows.empty()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
auto cell = tabWidget->Table()->item(selectedRows.last().row(), 0);
|
auto cell = table->Table()->item(selectedRows.last().row(), 0);
|
||||||
if (!cell) {
|
if (!cell) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -194,15 +248,14 @@ static void openSettingsDialog()
|
|||||||
|
|
||||||
void VariableTable::Remove()
|
void VariableTable::Remove()
|
||||||
{
|
{
|
||||||
auto selectedRows =
|
auto selectedRows = Table()->selectionModel()->selectedRows();
|
||||||
tabWidget->Table()->selectionModel()->selectedRows();
|
|
||||||
if (selectedRows.empty()) {
|
if (selectedRows.empty()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
QStringList varNames;
|
QStringList varNames;
|
||||||
for (const auto &row : selectedRows) {
|
for (const auto &row : selectedRows) {
|
||||||
auto cell = tabWidget->Table()->item(row.row(), 0);
|
auto cell = Table()->item(row.row(), 0);
|
||||||
if (!cell) {
|
if (!cell) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@@ -235,7 +288,52 @@ void VariableTable::Remove()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
VariableTable::VariableTable(QTabWidget *parent)
|
void VariableTable::Filter()
|
||||||
|
{
|
||||||
|
const auto itemMatches = [&](const QTableWidgetItem *item) {
|
||||||
|
if (!item) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (_settings.searchString.empty()) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
const auto text = item->text();
|
||||||
|
|
||||||
|
if (_settings.regex.Enabled()) {
|
||||||
|
return _settings.regex.Matches(text.toStdString(),
|
||||||
|
_settings.searchString);
|
||||||
|
}
|
||||||
|
|
||||||
|
return text.contains(
|
||||||
|
QString::fromStdString(_settings.searchString),
|
||||||
|
Qt::CaseInsensitive);
|
||||||
|
};
|
||||||
|
|
||||||
|
for (int row = 0; row < Table()->rowCount(); ++row) {
|
||||||
|
bool match = false;
|
||||||
|
|
||||||
|
if (_settings.searchType == Settings::SearchType::ALL) {
|
||||||
|
for (int col = 0; col < Table()->columnCount(); ++col) {
|
||||||
|
if (itemMatches(Table()->item(row, col))) {
|
||||||
|
match = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (itemMatches(Table()->item(
|
||||||
|
row,
|
||||||
|
static_cast<int>(_settings.searchType)))) {
|
||||||
|
match = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Table()->setRowHidden(row, !match);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
VariableTable::VariableTable(Settings &settings, QWidget *parent)
|
||||||
: ResourceTable(
|
: ResourceTable(
|
||||||
parent, obs_module_text("AdvSceneSwitcher.variableTab.help"),
|
parent, obs_module_text("AdvSceneSwitcher.variableTab.help"),
|
||||||
obs_module_text(
|
obs_module_text(
|
||||||
@@ -253,13 +351,113 @@ VariableTable::VariableTable(QTabWidget *parent)
|
|||||||
"AdvSceneSwitcher.variableTab.lastUsed.header")
|
"AdvSceneSwitcher.variableTab.lastUsed.header")
|
||||||
<< obs_module_text(
|
<< obs_module_text(
|
||||||
"AdvSceneSwitcher.variableTab.lastChanged.header"),
|
"AdvSceneSwitcher.variableTab.lastChanged.header"),
|
||||||
openSettingsDialog)
|
[this]() { openSettingsDialog(this); }),
|
||||||
|
_searchField(new QLineEdit(this)),
|
||||||
|
_clear(new QPushButton(this)),
|
||||||
|
_searchType(new QComboBox(this)),
|
||||||
|
_regexWidget(new RegexConfigWidget(this)),
|
||||||
|
_addDock(new QCheckBox(
|
||||||
|
obs_module_text("AdvSceneSwitcher.variableTab.addDock"))),
|
||||||
|
_settings(settings)
|
||||||
{
|
{
|
||||||
|
_clear->setMaximumWidth(22);
|
||||||
|
SetButtonIcon(_clear, GetThemeTypeName() == "Light"
|
||||||
|
? "theme:Light/close.svg"
|
||||||
|
: "theme:Dark/close.svg");
|
||||||
|
_clear->setToolTip(
|
||||||
|
obs_module_text("AdvSceneSwitcher.variableTab.clear"));
|
||||||
|
_clear->setDisabled(_settings.searchString.empty());
|
||||||
|
|
||||||
|
connect(_clear, &QPushButton::clicked, this, [this]() {
|
||||||
|
_searchField->setText("");
|
||||||
|
_clear->setDisabled(true);
|
||||||
|
});
|
||||||
|
|
||||||
for (const auto &variable : GetVariables()) {
|
for (const auto &variable : GetVariables()) {
|
||||||
auto v = std::static_pointer_cast<Variable>(variable);
|
auto v = std::static_pointer_cast<Variable>(variable);
|
||||||
AddItemTableRow(Table(), getCellLabels(v.get()));
|
AddItemTableRow(Table(), getCellLabels(v.get()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
connect(Table(), &QTableWidget::itemChanged, this,
|
||||||
|
[this]() { Filter(); });
|
||||||
|
|
||||||
|
_searchField->setPlaceholderText(obs_module_text(
|
||||||
|
("AdvSceneSwitcher.variableTab.search.placeholder")));
|
||||||
|
_searchField->setText(QString::fromStdString(_settings.searchString));
|
||||||
|
connect(_searchField, &QLineEdit::textChanged, this,
|
||||||
|
[this](const QString &text) {
|
||||||
|
_settings.searchString = text.toStdString();
|
||||||
|
_clear->setDisabled(text.isEmpty());
|
||||||
|
Filter();
|
||||||
|
});
|
||||||
|
|
||||||
|
_searchType->addItem(
|
||||||
|
obs_module_text("AdvSceneSwitcher.variableTab.search.all"),
|
||||||
|
Settings::SearchType::ALL);
|
||||||
|
_searchType->addItem(
|
||||||
|
obs_module_text("AdvSceneSwitcher.variableTab.search.name"),
|
||||||
|
Settings::SearchType::NAME);
|
||||||
|
_searchType->addItem(
|
||||||
|
obs_module_text("AdvSceneSwitcher.variableTab.search.value"),
|
||||||
|
Settings::SearchType::VALUE);
|
||||||
|
_searchType->setCurrentIndex(
|
||||||
|
_searchType->findData(_settings.searchType));
|
||||||
|
|
||||||
|
connect(_searchType, &QComboBox::currentIndexChanged, this, [this]() {
|
||||||
|
_settings.searchType = static_cast<Settings::SearchType>(
|
||||||
|
_searchType->currentData().toInt());
|
||||||
|
});
|
||||||
|
|
||||||
|
_regexWidget->SetRegexConfig(_settings.regex);
|
||||||
|
connect(_regexWidget, &RegexConfigWidget::RegexConfigChanged, this,
|
||||||
|
[this](const RegexConfig ®ex) {
|
||||||
|
_settings.regex = regex;
|
||||||
|
Filter();
|
||||||
|
});
|
||||||
|
|
||||||
|
_addDock->setChecked(addDock);
|
||||||
|
connect(_addDock, &QCheckBox::stateChanged, this,
|
||||||
|
[this](int checked) { enableDock(checked); });
|
||||||
|
|
||||||
|
QWidget::connect(VariableSignalManager::Instance(),
|
||||||
|
&VariableSignalManager::Rename, this,
|
||||||
|
[this](const QString &oldName,
|
||||||
|
const QString &newName) {
|
||||||
|
RenameItemTableRow(Table(), oldName, newName);
|
||||||
|
});
|
||||||
|
QWidget::connect(
|
||||||
|
VariableSignalManager::Instance(), &VariableSignalManager::Add,
|
||||||
|
this, [this](const QString &name) {
|
||||||
|
AddItemTableRow(
|
||||||
|
Table(),
|
||||||
|
getCellLabels(GetVariableByQString(name)));
|
||||||
|
SetHelpVisible(false);
|
||||||
|
HighlightAddButton(false);
|
||||||
|
});
|
||||||
|
QWidget::connect(VariableSignalManager::Instance(),
|
||||||
|
&VariableSignalManager::Remove, this,
|
||||||
|
[this](const QString &name) {
|
||||||
|
RemoveItemTableRow(Table(), name);
|
||||||
|
if (Table()->rowCount() == 0) {
|
||||||
|
SetHelpVisible(true);
|
||||||
|
HighlightAddButton(true);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
auto timer = new QTimer(this);
|
||||||
|
timer->setInterval(1000);
|
||||||
|
QWidget::connect(timer, &QTimer::timeout,
|
||||||
|
[this]() { updateVariableStatus(Table()); });
|
||||||
|
timer->start();
|
||||||
|
|
||||||
|
auto searchLayout = new QHBoxLayout();
|
||||||
|
searchLayout->addWidget(_searchField);
|
||||||
|
searchLayout->addWidget(_clear);
|
||||||
|
searchLayout->addWidget(_searchType);
|
||||||
|
searchLayout->addWidget(_regexWidget);
|
||||||
|
searchLayout->addWidget(_addDock);
|
||||||
|
qobject_cast<QVBoxLayout *>(layout())->insertLayout(0, searchLayout);
|
||||||
|
|
||||||
SetHelpVisible(GetVariables().empty());
|
SetHelpVisible(GetVariables().empty());
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -269,37 +467,27 @@ static void setupTab(QTabWidget *tab)
|
|||||||
setTabVisible(tab, false);
|
setTabVisible(tab, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
QWidget::connect(VariableSignalManager::Instance(),
|
|
||||||
&VariableSignalManager::Rename, tab,
|
|
||||||
[](const QString &oldName, const QString &newName) {
|
|
||||||
RenameItemTableRow(tabWidget->Table(), oldName,
|
|
||||||
newName);
|
|
||||||
});
|
|
||||||
QWidget::connect(
|
QWidget::connect(
|
||||||
VariableSignalManager::Instance(), &VariableSignalManager::Add,
|
VariableSignalManager::Instance(), &VariableSignalManager::Add,
|
||||||
tab, [tab](const QString &name) {
|
tab, [tab](const QString &name) { setTabVisible(tab, true); });
|
||||||
AddItemTableRow(
|
}
|
||||||
tabWidget->Table(),
|
|
||||||
getCellLabels(GetVariableByQString(name)));
|
|
||||||
tabWidget->SetHelpVisible(false);
|
|
||||||
tabWidget->HighlightAddButton(false);
|
|
||||||
setTabVisible(tab, true);
|
|
||||||
});
|
|
||||||
QWidget::connect(VariableSignalManager::Instance(),
|
|
||||||
&VariableSignalManager::Remove, tab,
|
|
||||||
[](const QString &name) {
|
|
||||||
RemoveItemTableRow(tabWidget->Table(), name);
|
|
||||||
if (tabWidget->Table()->rowCount() == 0) {
|
|
||||||
tabWidget->SetHelpVisible(true);
|
|
||||||
tabWidget->HighlightAddButton(true);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
auto timer = new QTimer(tabWidget);
|
void VariableTable::Settings::Save(obs_data_t *data, const char *name)
|
||||||
timer->setInterval(1000);
|
{
|
||||||
QWidget::connect(timer, &QTimer::timeout,
|
OBSDataAutoRelease settings = obs_data_create();
|
||||||
[]() { updateVariableStatus(tabWidget->Table()); });
|
obs_data_set_int(settings, "searchType", static_cast<int>(searchType));
|
||||||
timer->start();
|
obs_data_set_string(settings, "searchString", searchString.c_str());
|
||||||
|
regex.Save(settings);
|
||||||
|
obs_data_set_obj(data, name, settings);
|
||||||
|
}
|
||||||
|
|
||||||
|
void VariableTable::Settings::Load(obs_data_t *data, const char *name)
|
||||||
|
{
|
||||||
|
OBSDataAutoRelease settings = obs_data_get_obj(data, name);
|
||||||
|
searchType = static_cast<SearchType>(
|
||||||
|
obs_data_get_int(settings, "searchType"));
|
||||||
|
searchString = obs_data_get_string(settings, "searchString");
|
||||||
|
regex.Load(settings);
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace advss
|
} // namespace advss
|
||||||
|
|||||||
@@ -1,5 +1,8 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
#include "resource-table.hpp"
|
#include "resource-table.hpp"
|
||||||
|
#include "regex-config.hpp"
|
||||||
|
|
||||||
|
#include <QComboBox>
|
||||||
|
|
||||||
namespace advss {
|
namespace advss {
|
||||||
|
|
||||||
@@ -7,14 +10,34 @@ class VariableTable final : public ResourceTable {
|
|||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
public:
|
public:
|
||||||
static VariableTable *Create();
|
struct Settings {
|
||||||
|
void Save(obs_data_t *data, const char *name);
|
||||||
|
void Load(obs_data_t *data, const char *name);
|
||||||
|
|
||||||
|
enum SearchType { ALL = -1, NAME = 0, VALUE = 1 };
|
||||||
|
|
||||||
|
SearchType searchType = SearchType::ALL;
|
||||||
|
std::string searchString;
|
||||||
|
RegexConfig regex;
|
||||||
|
};
|
||||||
|
|
||||||
|
VariableTable(Settings &settings, QWidget *parent = nullptr);
|
||||||
|
static VariableTable *CreateTabTable();
|
||||||
|
void HideDockOptions() const;
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
void Add();
|
void Add();
|
||||||
void Remove();
|
void Remove();
|
||||||
|
void Filter();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
VariableTable(QTabWidget *parent = nullptr);
|
QLineEdit *_searchField;
|
||||||
|
QPushButton *_clear;
|
||||||
|
QComboBox *_searchType;
|
||||||
|
RegexConfigWidget *_regexWidget;
|
||||||
|
QCheckBox *_addDock;
|
||||||
|
|
||||||
|
Settings &_settings;
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace advss
|
} // namespace advss
|
||||||
|
|||||||
@@ -456,7 +456,7 @@ void ImportVariables(obs_data_t *data)
|
|||||||
|
|
||||||
obs_data_array_release(array);
|
obs_data_array_release(array);
|
||||||
|
|
||||||
QeueUITask(signalImportedVariables, importedVars);
|
QueueUITask(signalImportedVariables, importedVars);
|
||||||
}
|
}
|
||||||
|
|
||||||
std::chrono::high_resolution_clock::time_point GetLastVariableChangeTime()
|
std::chrono::high_resolution_clock::time_point GetLastVariableChangeTime()
|
||||||
|
|||||||
@@ -601,10 +601,10 @@ static void populateHotkeyNames(QComboBox *list,
|
|||||||
MacroActionHotkeyEdit::MacroActionHotkeyEdit(
|
MacroActionHotkeyEdit::MacroActionHotkeyEdit(
|
||||||
QWidget *parent, std::shared_ptr<MacroActionHotkey> entryData)
|
QWidget *parent, std::shared_ptr<MacroActionHotkey> entryData)
|
||||||
: QWidget(parent),
|
: QWidget(parent),
|
||||||
_actionType(new QComboBox()),
|
_actionType(new FilterComboBox()),
|
||||||
_hotkeyType(new QComboBox()),
|
_hotkeyType(new FilterComboBox()),
|
||||||
_obsHotkeys(new QComboBox()),
|
_obsHotkeys(new FilterComboBox()),
|
||||||
_keys(new QComboBox()),
|
_keys(new FilterComboBox()),
|
||||||
_leftShift(new QCheckBox(
|
_leftShift(new QCheckBox(
|
||||||
obs_module_text("AdvSceneSwitcher.action.hotkey.leftShift"))),
|
obs_module_text("AdvSceneSwitcher.action.hotkey.leftShift"))),
|
||||||
_rightShift(new QCheckBox(obs_module_text(
|
_rightShift(new QCheckBox(obs_module_text(
|
||||||
|
|||||||
@@ -85,11 +85,14 @@ private slots:
|
|||||||
void DurationChanged(const Duration &);
|
void DurationChanged(const Duration &);
|
||||||
void OnlySendToOBSChanged(int state);
|
void OnlySendToOBSChanged(int state);
|
||||||
|
|
||||||
protected:
|
private:
|
||||||
QComboBox *_actionType;
|
void RepopulateOBSHotkeySelection();
|
||||||
QComboBox *_hotkeyType;
|
void SetWidgetVisibility();
|
||||||
QComboBox *_obsHotkeys;
|
|
||||||
QComboBox *_keys;
|
FilterComboBox *_actionType;
|
||||||
|
FilterComboBox *_hotkeyType;
|
||||||
|
FilterComboBox *_obsHotkeys;
|
||||||
|
FilterComboBox *_keys;
|
||||||
QCheckBox *_leftShift;
|
QCheckBox *_leftShift;
|
||||||
QCheckBox *_rightShift;
|
QCheckBox *_rightShift;
|
||||||
QCheckBox *_leftCtrl;
|
QCheckBox *_leftCtrl;
|
||||||
@@ -101,15 +104,10 @@ protected:
|
|||||||
DurationSelection *_duration;
|
DurationSelection *_duration;
|
||||||
QCheckBox *_onlySendToOBS;
|
QCheckBox *_onlySendToOBS;
|
||||||
QLabel *_noKeyPressSimulationWarning;
|
QLabel *_noKeyPressSimulationWarning;
|
||||||
|
|
||||||
std::shared_ptr<MacroActionHotkey> _entryData;
|
|
||||||
|
|
||||||
private:
|
|
||||||
void RepopulateOBSHotkeySelection();
|
|
||||||
void SetWidgetVisibility();
|
|
||||||
|
|
||||||
QHBoxLayout *_entryLayout;
|
QHBoxLayout *_entryLayout;
|
||||||
QHBoxLayout *_keyConfigLayout;
|
QHBoxLayout *_keyConfigLayout;
|
||||||
|
|
||||||
|
std::shared_ptr<MacroActionHotkey> _entryData;
|
||||||
bool _loading = true;
|
bool _loading = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -7,6 +7,8 @@
|
|||||||
|
|
||||||
#include <obs-frontend-api.h>
|
#include <obs-frontend-api.h>
|
||||||
|
|
||||||
|
#include <QMainWindow>
|
||||||
|
|
||||||
namespace advss {
|
namespace advss {
|
||||||
|
|
||||||
const std::string MacroActionSource::id = "source";
|
const std::string MacroActionSource::id = "source";
|
||||||
@@ -37,6 +39,12 @@ const static std::map<MacroActionSource::Action, std::string> actionTypes = {
|
|||||||
"AdvSceneSwitcher.action.source.type.openFilterDialog"},
|
"AdvSceneSwitcher.action.source.type.openFilterDialog"},
|
||||||
{MacroActionSource::Action::OPEN_PROPERTIES_DIALOG,
|
{MacroActionSource::Action::OPEN_PROPERTIES_DIALOG,
|
||||||
"AdvSceneSwitcher.action.source.type.openPropertiesDialog"},
|
"AdvSceneSwitcher.action.source.type.openPropertiesDialog"},
|
||||||
|
{MacroActionSource::Action::CLOSE_INTERACTION_DIALOG,
|
||||||
|
"AdvSceneSwitcher.action.source.type.closeInteractionDialog"},
|
||||||
|
{MacroActionSource::Action::CLOSE_FILTER_DIALOG,
|
||||||
|
"AdvSceneSwitcher.action.source.type.closeFilterDialog"},
|
||||||
|
{MacroActionSource::Action::CLOSE_PROPERTIES_DIALOG,
|
||||||
|
"AdvSceneSwitcher.action.source.type.closePropertiesDialog"},
|
||||||
};
|
};
|
||||||
|
|
||||||
const static std::map<obs_deinterlace_mode, std::string> deinterlaceModes = {
|
const static std::map<obs_deinterlace_mode, std::string> deinterlaceModes = {
|
||||||
@@ -108,9 +116,81 @@ static bool isInteractable(obs_source_t *source)
|
|||||||
return (flags & OBS_SOURCE_INTERACTION) != 0;
|
return (flags & OBS_SOURCE_INTERACTION) != 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void closeSourceDialog(obs_source_t *source, bool accept,
|
||||||
|
const char *className)
|
||||||
|
{
|
||||||
|
if (!source) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
auto mainWindow =
|
||||||
|
reinterpret_cast<QMainWindow *>(obs_frontend_get_main_window());
|
||||||
|
if (!mainWindow) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (const auto widget : mainWindow->children()) {
|
||||||
|
auto dialog = qobject_cast<QDialog *>(widget);
|
||||||
|
if (!dialog) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (dialog->metaObject()->className() != QString(className)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
const char *name = obs_source_get_name(source);
|
||||||
|
if (!name) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!dialog->windowTitle().contains(QString(name))) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (accept) {
|
||||||
|
dialog->accept();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// dialog->reject() will ask for confirmation
|
||||||
|
// Try to avoid this by finding and pressing the cancel button
|
||||||
|
for (const auto widget : dialog->children()) {
|
||||||
|
auto buttons = qobject_cast<QDialogButtonBox *>(widget);
|
||||||
|
if (!buttons) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (auto *button : buttons->buttons()) {
|
||||||
|
if (buttons->buttonRole(button) ==
|
||||||
|
QDialogButtonBox::RejectRole) {
|
||||||
|
button->click();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
template<typename F> void QueueUITaskLambda(F &&func)
|
||||||
|
{
|
||||||
|
using FnType = std::decay_t<F>;
|
||||||
|
auto *heapFunc = new FnType(std::forward<F>(func));
|
||||||
|
|
||||||
|
QueueUITask(
|
||||||
|
[](void *param) {
|
||||||
|
std::unique_ptr<FnType> fn(
|
||||||
|
static_cast<FnType *>(param));
|
||||||
|
(*fn)();
|
||||||
|
},
|
||||||
|
heapFunc);
|
||||||
|
}
|
||||||
|
|
||||||
bool MacroActionSource::PerformAction()
|
bool MacroActionSource::PerformAction()
|
||||||
{
|
{
|
||||||
auto s = obs_weak_source_get_source(_source.GetSource());
|
OBSSource s = obs_weak_source_get_source(_source.GetSource());
|
||||||
|
obs_source_release(s);
|
||||||
|
|
||||||
switch (_action) {
|
switch (_action) {
|
||||||
case Action::ENABLE:
|
case Action::ENABLE:
|
||||||
obs_source_set_enabled(s, true);
|
obs_source_set_enabled(s, true);
|
||||||
@@ -172,10 +252,31 @@ bool MacroActionSource::PerformAction()
|
|||||||
case Action::OPEN_PROPERTIES_DIALOG:
|
case Action::OPEN_PROPERTIES_DIALOG:
|
||||||
obs_frontend_open_source_properties(s);
|
obs_frontend_open_source_properties(s);
|
||||||
break;
|
break;
|
||||||
|
case Action::CLOSE_INTERACTION_DIALOG:
|
||||||
|
if (!isInteractable(s)) {
|
||||||
|
// Nothing to do
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
QueueUITaskLambda([&]() {
|
||||||
|
closeSourceDialog(s, true, "OBSBasicInteraction");
|
||||||
|
});
|
||||||
|
break;
|
||||||
|
case Action::CLOSE_FILTER_DIALOG:
|
||||||
|
QueueUITaskLambda([&]() {
|
||||||
|
closeSourceDialog(s, _acceptDialog, "OBSBasicFilters");
|
||||||
|
});
|
||||||
|
break;
|
||||||
|
case Action::CLOSE_PROPERTIES_DIALOG:
|
||||||
|
QueueUITaskLambda([&]() {
|
||||||
|
closeSourceDialog(s, _acceptDialog,
|
||||||
|
"OBSBasicProperties");
|
||||||
|
});
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
obs_source_release(s);
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -207,6 +308,7 @@ bool MacroActionSource::Save(obs_data_t *obj) const
|
|||||||
static_cast<int>(_deinterlaceMode));
|
static_cast<int>(_deinterlaceMode));
|
||||||
obs_data_set_int(obj, "deinterlaceOrder",
|
obs_data_set_int(obj, "deinterlaceOrder",
|
||||||
static_cast<int>(_deinterlaceOrder));
|
static_cast<int>(_deinterlaceOrder));
|
||||||
|
obs_data_set_bool(obj, "acceptDialog", _acceptDialog);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -231,6 +333,7 @@ bool MacroActionSource::Load(obs_data_t *obj)
|
|||||||
obs_data_get_int(obj, "deinterlaceMode"));
|
obs_data_get_int(obj, "deinterlaceMode"));
|
||||||
_deinterlaceOrder = static_cast<obs_deinterlace_field_order>(
|
_deinterlaceOrder = static_cast<obs_deinterlace_field_order>(
|
||||||
obs_data_get_int(obj, "deinterlaceOrder"));
|
obs_data_get_int(obj, "deinterlaceOrder"));
|
||||||
|
_acceptDialog = obs_data_get_bool(obj, "acceptDialog");
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -307,7 +410,9 @@ MacroActionSourceEdit::MacroActionSourceEdit(
|
|||||||
_warning(new QLabel(
|
_warning(new QLabel(
|
||||||
obs_module_text("AdvSceneSwitcher.action.source.warning"))),
|
obs_module_text("AdvSceneSwitcher.action.source.warning"))),
|
||||||
_refreshSettingSelection(new QPushButton(
|
_refreshSettingSelection(new QPushButton(
|
||||||
obs_module_text("AdvSceneSwitcher.action.source.refresh")))
|
obs_module_text("AdvSceneSwitcher.action.source.refresh"))),
|
||||||
|
_acceptDialog(new QCheckBox(obs_module_text(
|
||||||
|
"AdvSceneSwitcher.action.source.dialog.accept")))
|
||||||
{
|
{
|
||||||
populateActionSelection(_actions);
|
populateActionSelection(_actions);
|
||||||
|
|
||||||
@@ -347,6 +452,8 @@ MacroActionSourceEdit::MacroActionSourceEdit(
|
|||||||
SLOT(SelectionChanged(const SourceSetting &)));
|
SLOT(SelectionChanged(const SourceSetting &)));
|
||||||
QWidget::connect(_refreshSettingSelection, SIGNAL(clicked()), this,
|
QWidget::connect(_refreshSettingSelection, SIGNAL(clicked()), this,
|
||||||
SLOT(RefreshVariableSourceSelectionValue()));
|
SLOT(RefreshVariableSourceSelectionValue()));
|
||||||
|
QWidget::connect(_acceptDialog, SIGNAL(stateChanged(int)), this,
|
||||||
|
SLOT(AcceptDialogChanged(int)));
|
||||||
|
|
||||||
auto entryLayout = new QHBoxLayout;
|
auto entryLayout = new QHBoxLayout;
|
||||||
entryLayout->setContentsMargins(0, 0, 0, 0);
|
entryLayout->setContentsMargins(0, 0, 0, 0);
|
||||||
@@ -374,6 +481,7 @@ MacroActionSourceEdit::MacroActionSourceEdit(
|
|||||||
mainLayout->addLayout(_settingsLayout);
|
mainLayout->addLayout(_settingsLayout);
|
||||||
mainLayout->addWidget(_warning);
|
mainLayout->addWidget(_warning);
|
||||||
mainLayout->addWidget(_settingsString);
|
mainLayout->addWidget(_settingsString);
|
||||||
|
mainLayout->addWidget(_acceptDialog);
|
||||||
auto buttonLayout = new QHBoxLayout;
|
auto buttonLayout = new QHBoxLayout;
|
||||||
buttonLayout->setContentsMargins(0, 0, 0, 0);
|
buttonLayout->setContentsMargins(0, 0, 0, 0);
|
||||||
buttonLayout->addWidget(_getSettings);
|
buttonLayout->addWidget(_getSettings);
|
||||||
@@ -406,6 +514,7 @@ void MacroActionSourceEdit::UpdateEntryData()
|
|||||||
static_cast<int>(_entryData->_settingsInputMethod)));
|
static_cast<int>(_entryData->_settingsInputMethod)));
|
||||||
_tempVars->SetVariable(_entryData->_tempVar);
|
_tempVars->SetVariable(_entryData->_tempVar);
|
||||||
_manualSettingValue->setPlainText(_entryData->_manualSettingValue);
|
_manualSettingValue->setPlainText(_entryData->_manualSettingValue);
|
||||||
|
_acceptDialog->setChecked(_entryData->_acceptDialog);
|
||||||
|
|
||||||
SetWidgetVisibility();
|
SetWidgetVisibility();
|
||||||
}
|
}
|
||||||
@@ -531,6 +640,12 @@ void MacroActionSourceEdit::RefreshVariableSourceSelectionValue()
|
|||||||
_sourceSettings->SetSource(_entryData->_source.GetSource());
|
_sourceSettings->SetSource(_entryData->_source.GetSource());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void MacroActionSourceEdit::AcceptDialogChanged(int state)
|
||||||
|
{
|
||||||
|
GUARD_LOADING_AND_LOCK();
|
||||||
|
_entryData->_acceptDialog = state;
|
||||||
|
}
|
||||||
|
|
||||||
static QString GetIndividualListEntryName()
|
static QString GetIndividualListEntryName()
|
||||||
{
|
{
|
||||||
static const auto matchesInput =
|
static const auto matchesInput =
|
||||||
@@ -613,6 +728,12 @@ void MacroActionSourceEdit::SetWidgetVisibility()
|
|||||||
_entryData->_source.GetType() ==
|
_entryData->_source.GetType() ==
|
||||||
SourceSelection::Type::VARIABLE);
|
SourceSelection::Type::VARIABLE);
|
||||||
|
|
||||||
|
_acceptDialog->setVisible(
|
||||||
|
_entryData->_action ==
|
||||||
|
MacroActionSource::Action::CLOSE_FILTER_DIALOG ||
|
||||||
|
_entryData->_action ==
|
||||||
|
MacroActionSource::Action::CLOSE_PROPERTIES_DIALOG);
|
||||||
|
|
||||||
adjustSize();
|
adjustSize();
|
||||||
updateGeometry();
|
updateGeometry();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,9 +5,10 @@
|
|||||||
#include "source-selection.hpp"
|
#include "source-selection.hpp"
|
||||||
#include "source-setting.hpp"
|
#include "source-setting.hpp"
|
||||||
|
|
||||||
|
#include <QCheckBox>
|
||||||
|
#include <QComboBox>
|
||||||
#include <QLabel>
|
#include <QLabel>
|
||||||
#include <QPushButton>
|
#include <QPushButton>
|
||||||
#include <QComboBox>
|
|
||||||
|
|
||||||
namespace advss {
|
namespace advss {
|
||||||
|
|
||||||
@@ -33,6 +34,7 @@ public:
|
|||||||
OBS_DEINTERLACE_FIELD_ORDER_TOP;
|
OBS_DEINTERLACE_FIELD_ORDER_TOP;
|
||||||
TempVariableRef _tempVar;
|
TempVariableRef _tempVar;
|
||||||
SourceSetting _setting;
|
SourceSetting _setting;
|
||||||
|
bool _acceptDialog = false;
|
||||||
|
|
||||||
enum class Action {
|
enum class Action {
|
||||||
ENABLE,
|
ENABLE,
|
||||||
@@ -45,6 +47,9 @@ public:
|
|||||||
OPEN_INTERACTION_DIALOG,
|
OPEN_INTERACTION_DIALOG,
|
||||||
OPEN_FILTER_DIALOG,
|
OPEN_FILTER_DIALOG,
|
||||||
OPEN_PROPERTIES_DIALOG,
|
OPEN_PROPERTIES_DIALOG,
|
||||||
|
CLOSE_INTERACTION_DIALOG,
|
||||||
|
CLOSE_FILTER_DIALOG,
|
||||||
|
CLOSE_PROPERTIES_DIALOG,
|
||||||
};
|
};
|
||||||
Action _action = Action::SETTINGS;
|
Action _action = Action::SETTINGS;
|
||||||
|
|
||||||
@@ -91,6 +96,7 @@ private slots:
|
|||||||
void SelectionChanged(const SourceSetting &);
|
void SelectionChanged(const SourceSetting &);
|
||||||
void ManualSettingsValueChanged();
|
void ManualSettingsValueChanged();
|
||||||
void RefreshVariableSourceSelectionValue();
|
void RefreshVariableSourceSelectionValue();
|
||||||
|
void AcceptDialogChanged(int);
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
void HeaderInfoChanged(const QString &);
|
void HeaderInfoChanged(const QString &);
|
||||||
@@ -112,6 +118,7 @@ private:
|
|||||||
QComboBox *_deinterlaceOrder;
|
QComboBox *_deinterlaceOrder;
|
||||||
QLabel *_warning;
|
QLabel *_warning;
|
||||||
QPushButton *_refreshSettingSelection;
|
QPushButton *_refreshSettingSelection;
|
||||||
|
QCheckBox *_acceptDialog;
|
||||||
|
|
||||||
std::shared_ptr<MacroActionSource> _entryData;
|
std::shared_ptr<MacroActionSource> _entryData;
|
||||||
bool _loading = true;
|
bool _loading = true;
|
||||||
|
|||||||
@@ -58,6 +58,10 @@ bool MacroConditionReplayBuffer::ReplayBufferWasSaved()
|
|||||||
|
|
||||||
bool MacroConditionReplayBuffer::CheckCondition()
|
bool MacroConditionReplayBuffer::CheckCondition()
|
||||||
{
|
{
|
||||||
|
char *lastSavePath = obs_frontend_get_last_replay();
|
||||||
|
SetTempVarValue("lastSavePath", lastSavePath ? lastSavePath : "");
|
||||||
|
bfree(lastSavePath);
|
||||||
|
|
||||||
switch (_state) {
|
switch (_state) {
|
||||||
case Condition::STOP:
|
case Condition::STOP:
|
||||||
return !obs_frontend_replay_buffer_active();
|
return !obs_frontend_replay_buffer_active();
|
||||||
@@ -85,6 +89,16 @@ bool MacroConditionReplayBuffer::Load(obs_data_t *obj)
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void MacroConditionReplayBuffer::SetupTempVars()
|
||||||
|
{
|
||||||
|
MacroCondition::SetupTempVars();
|
||||||
|
AddTempvar(
|
||||||
|
"lastSavePath",
|
||||||
|
obs_module_text("AdvSceneSwitcher.tempVar.replay.lastSavePath"),
|
||||||
|
obs_module_text(
|
||||||
|
"AdvSceneSwitcher.tempVar.replay.lastSavePath.description"));
|
||||||
|
}
|
||||||
|
|
||||||
static inline void populateStateSelection(QComboBox *list)
|
static inline void populateStateSelection(QComboBox *list)
|
||||||
{
|
{
|
||||||
for (const auto &entry : conditions) {
|
for (const auto &entry : conditions) {
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
|
|
||||||
namespace advss {
|
namespace advss {
|
||||||
|
|
||||||
class MacroConditionReplayBuffer : public MacroCondition {
|
class MacroConditionReplayBuffer final : public MacroCondition {
|
||||||
public:
|
public:
|
||||||
MacroConditionReplayBuffer(Macro *m) : MacroCondition(m) {}
|
MacroConditionReplayBuffer(Macro *m) : MacroCondition(m) {}
|
||||||
bool CheckCondition();
|
bool CheckCondition();
|
||||||
@@ -27,6 +27,7 @@ public:
|
|||||||
Condition _state = Condition::STOP;
|
Condition _state = Condition::STOP;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
void SetupTempVars();
|
||||||
bool ReplayBufferWasSaved();
|
bool ReplayBufferWasSaved();
|
||||||
|
|
||||||
bool _saveTimeInitialized = false;
|
bool _saveTimeInitialized = false;
|
||||||
@@ -35,7 +36,7 @@ private:
|
|||||||
static const std::string id;
|
static const std::string id;
|
||||||
};
|
};
|
||||||
|
|
||||||
class MacroConditionReplayBufferEdit : public QWidget {
|
class MacroConditionReplayBufferEdit final : public QWidget {
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
public:
|
public:
|
||||||
@@ -55,11 +56,10 @@ public:
|
|||||||
private slots:
|
private slots:
|
||||||
void StateChanged(int value);
|
void StateChanged(int value);
|
||||||
|
|
||||||
protected:
|
|
||||||
QComboBox *_state;
|
|
||||||
std::shared_ptr<MacroConditionReplayBuffer> _entryData;
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
QComboBox *_state;
|
||||||
|
|
||||||
|
std::shared_ptr<MacroConditionReplayBuffer> _entryData;
|
||||||
bool _loading = true;
|
bool _loading = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -10,12 +10,6 @@ if(OS_MACOS)
|
|||||||
endif()
|
endif()
|
||||||
find_package(OpenSSL)
|
find_package(OpenSSL)
|
||||||
|
|
||||||
get_cmake_property(_variableNames VARIABLES)
|
|
||||||
list(SORT _variableNames)
|
|
||||||
foreach(_variableName ${_variableNames})
|
|
||||||
message(STATUS "${_variableName}=${${_variableName}}")
|
|
||||||
endforeach()
|
|
||||||
|
|
||||||
find_package(PahoMqttCpp)
|
find_package(PahoMqttCpp)
|
||||||
if(NOT PahoMqttCpp_FOUND)
|
if(NOT PahoMqttCpp_FOUND)
|
||||||
message(WARNING "PahoMqttCpp not found!\n"
|
message(WARNING "PahoMqttCpp not found!\n"
|
||||||
|
|||||||
@@ -40,7 +40,7 @@ std::string GetThemeTypeName()
|
|||||||
return "Dark";
|
return "Dark";
|
||||||
}
|
}
|
||||||
|
|
||||||
void QeueUITask(void (*task)(void *param), void *) {}
|
void QueueUITask(void (*task)(void *param), void *) {}
|
||||||
|
|
||||||
QWidget *GetSettingsWindow()
|
QWidget *GetSettingsWindow()
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user