Skip to content

Commit

Permalink
Add "Load Overlay Profile" Action command
Browse files Browse the repository at this point in the history
  • Loading branch information
elvissteinjr committed Apr 23, 2024
1 parent d824fc9 commit b96bdee
Show file tree
Hide file tree
Showing 9 changed files with 221 additions and 36 deletions.
5 changes: 5 additions & 0 deletions assets/lang/de.ini
Original file line number Diff line number Diff line change
Expand Up @@ -168,6 +168,7 @@ tstr_SettingsActionsEditCommandTypeShowKeyboard=Zeige Tastatur
tstr_SettingsActionsEditCommandTypeCropActiveWindow=Schneide zum aktiven Fenster zu
tstr_SettingsActionsEditCommandTypeShowOverlay=Zeige Overlay
tstr_SettingsActionsEditCommandTypeSwitchTask=Wechsle Task
tstr_SettingsActionsEditCommandTypeLoadOverlayProfile=Lade Overlay-Profil
tstr_SettingsActionsEditCommandTypeUnknown=Unbekannt
tstr_SettingsActionsEditCommandVisibilityToggle=Umschalten
tstr_SettingsActionsEditCommandVisibilityShow=Immer zeigen
Expand All @@ -190,6 +191,8 @@ tstr_SettingsActionsEditCommandSwitchingMethodFocus=Fokusiere Fenster
tstr_SettingsActionsEditCommandWindow=Fenster
tstr_SettingsActionsEditCommandWindowNone=[Kein Fenster]
tstr_SettingsActionsEditCommandCursorWarp=Bewege Cursor in das Fenster
tstr_SettingsActionsEditCommandProfile=Profil
tstr_SettingsActionsEditCommandProfileClear=Entferne bestehende Overlays
tstr_SettingsActionsEditCommandDescNone=Kein Befehl
tstr_SettingsActionsEditCommandDescKey=Drücke Taste "%KEYNAME%"
tstr_SettingsActionsEditCommandDescKeyToggle=Schalte Taste "%KEYNAME%" um
Expand All @@ -207,6 +210,8 @@ tstr_SettingsActionsEditCommandDescOverlayHide=Verstecke Overlay: %TAGS%
tstr_SettingsActionsEditCommandDescOverlayTargetDefault=[Aktions-Ziel]
tstr_SettingsActionsEditCommandDescSwitchTask=Wechsle Task
tstr_SettingsActionsEditCommandDescSwitchTaskWindow=Wechsle Task zu "%WINDOW%"
tstr_SettingsActionsEditCommandDescLoadOverlayProfile=Lade Overlay-Profil "%PROFILE%"
tstr_SettingsActionsEditCommandDescLoadOverlayProfileAdd=Füge Overlay-Profil "%PROFILE%" hinzu
tstr_SettingsActionsEditCommandDescUnknown=Unbekannter Befehl

tstr_SettingsActionsOrderHeader=Ändere Aktions-Anordnung
Expand Down
5 changes: 5 additions & 0 deletions assets/lang/en.ini
Original file line number Diff line number Diff line change
Expand Up @@ -171,6 +171,7 @@ tstr_SettingsActionsEditCommandTypeShowKeyboard=Show Keyboard
tstr_SettingsActionsEditCommandTypeCropActiveWindow=Crop to Active Window
tstr_SettingsActionsEditCommandTypeShowOverlay=Show Overlay
tstr_SettingsActionsEditCommandTypeSwitchTask=Switch Task
tstr_SettingsActionsEditCommandTypeLoadOverlayProfile=Load Overlay Profile
tstr_SettingsActionsEditCommandTypeUnknown=Unknown
tstr_SettingsActionsEditCommandVisibilityToggle=Toggle
tstr_SettingsActionsEditCommandVisibilityShow=Always Show
Expand All @@ -193,6 +194,8 @@ tstr_SettingsActionsEditCommandSwitchingMethodFocus=Focus Window
tstr_SettingsActionsEditCommandWindow=Window
tstr_SettingsActionsEditCommandWindowNone=[No Window]
tstr_SettingsActionsEditCommandCursorWarp=Warp Cursor into Window
tstr_SettingsActionsEditCommandProfile=Profile
tstr_SettingsActionsEditCommandProfileClear=Remove existing Overlays
tstr_SettingsActionsEditCommandDescNone=No Command
tstr_SettingsActionsEditCommandDescKey=Press Key "%KEYNAME%"
tstr_SettingsActionsEditCommandDescKeyToggle=Toggle Key "%KEYNAME%"
Expand All @@ -210,6 +213,8 @@ tstr_SettingsActionsEditCommandDescOverlayHide=Hide Overlay: %TAGS%
tstr_SettingsActionsEditCommandDescOverlayTargetDefault=[Action Target]
tstr_SettingsActionsEditCommandDescSwitchTask=Switch Task
tstr_SettingsActionsEditCommandDescSwitchTaskWindow=Switch Task to "%WINDOW%"
tstr_SettingsActionsEditCommandDescLoadOverlayProfile=Load Overlay Profile "%PROFILE%"
tstr_SettingsActionsEditCommandDescLoadOverlayProfileAdd=Add Overlay Profile "%PROFILE%"
tstr_SettingsActionsEditCommandDescUnknown=Unknown Command

tstr_SettingsActionsOrderHeader=Change Action Order
Expand Down
5 changes: 5 additions & 0 deletions src/DesktopPlusUI/TranslationManager.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -162,6 +162,7 @@ const char* TranslationManager::s_StringIDNames[tstr_MAX] =
"tstr_SettingsActionsEditCommandTypeCropActiveWindow",
"tstr_SettingsActionsEditCommandTypeShowOverlay",
"tstr_SettingsActionsEditCommandTypeSwitchTask",
"tstr_SettingsActionsEditCommandTypeLoadOverlayProfile",
"tstr_SettingsActionsEditCommandTypeUnknown",
"tstr_SettingsActionsEditCommandVisibilityToggle",
"tstr_SettingsActionsEditCommandVisibilityShow",
Expand All @@ -184,6 +185,8 @@ const char* TranslationManager::s_StringIDNames[tstr_MAX] =
"tstr_SettingsActionsEditCommandWindow",
"tstr_SettingsActionsEditCommandWindowNone",
"tstr_SettingsActionsEditCommandCursorWarp",
"tstr_SettingsActionsEditCommandProfile",
"tstr_SettingsActionsEditCommandProfileClear",
"tstr_SettingsActionsEditCommandDescNone",
"tstr_SettingsActionsEditCommandDescKey",
"tstr_SettingsActionsEditCommandDescKeyToggle",
Expand All @@ -201,6 +204,8 @@ const char* TranslationManager::s_StringIDNames[tstr_MAX] =
"tstr_SettingsActionsEditCommandDescOverlayTargetDefault",
"tstr_SettingsActionsEditCommandDescSwitchTask",
"tstr_SettingsActionsEditCommandDescSwitchTaskWindow",
"tstr_SettingsActionsEditCommandDescLoadOverlayProfile",
"tstr_SettingsActionsEditCommandDescLoadOverlayProfileAdd",
"tstr_SettingsActionsEditCommandDescUnknown",
"tstr_SettingsActionsOrderHeader",
"tstr_SettingsActionsOrderButtonLabel",
Expand Down
41 changes: 23 additions & 18 deletions src/DesktopPlusUI/TranslationManager.h
Original file line number Diff line number Diff line change
Expand Up @@ -32,13 +32,13 @@ enum TRMGRStrID
tstr_SettingsWarningBrowserMismatch,
tstr_SettingsWarningUIAccessLost,
tstr_SettingsWarningOverlayCreationErrorLimit,
tstr_SettingsWarningOverlayCreationErrorOther, //%ERRORNAME% == VROverlay::GetOverlayErrorNameFromEnum()
tstr_SettingsWarningGraphicsCaptureError, //%ERRORCODE% == WinRT HRESULT in hex notation
tstr_SettingsWarningAppProfileActive, //%APPNAME% == name of active application
tstr_SettingsWarningOverlayCreationErrorOther, //%ERRORNAME% == VROverlay::GetOverlayErrorNameFromEnum()
tstr_SettingsWarningGraphicsCaptureError, //%ERRORCODE% == WinRT HRESULT in hex notation
tstr_SettingsWarningAppProfileActive, //%APPNAME% == name of active application
tstr_SettingsWarningMenuDontShowAgain,
tstr_SettingsWarningMenuDismiss,
tstr_SettingsInterfaceLanguage,
tstr_SettingsInterfaceLanguageCommunity, //%AUTHOR% == Language Author string
tstr_SettingsInterfaceLanguageCommunity, //%AUTHOR% == Language Author string
tstr_SettingsInterfaceLanguageIncompleteWarning,
tstr_SettingsInterfaceAdvancedSettings,
tstr_SettingsInterfaceAdvancedSettingsTip,
Expand Down Expand Up @@ -76,7 +76,7 @@ enum TRMGRStrID
tstr_SettingsProfilesOverlaysHeader,
tstr_SettingsProfilesOverlaysNameDefault,
tstr_SettingsProfilesOverlaysNameNew,
tstr_SettingsProfilesOverlaysNameNewBase, //%ID% == ID of profile, increased if previous number is already taken
tstr_SettingsProfilesOverlaysNameNewBase, //%ID% == ID of profile, increased if previous number is already taken
tstr_SettingsProfilesOverlaysProfileLoad,
tstr_SettingsProfilesOverlaysProfileAdd,
tstr_SettingsProfilesOverlaysProfileSave,
Expand Down Expand Up @@ -160,6 +160,7 @@ enum TRMGRStrID
tstr_SettingsActionsEditCommandTypeCropActiveWindow,
tstr_SettingsActionsEditCommandTypeShowOverlay,
tstr_SettingsActionsEditCommandTypeSwitchTask,
tstr_SettingsActionsEditCommandTypeLoadOverlayProfile,
tstr_SettingsActionsEditCommandTypeUnknown,
tstr_SettingsActionsEditCommandVisibilityToggle,
tstr_SettingsActionsEditCommandVisibilityShow,
Expand All @@ -182,27 +183,31 @@ enum TRMGRStrID
tstr_SettingsActionsEditCommandWindow,
tstr_SettingsActionsEditCommandWindowNone,
tstr_SettingsActionsEditCommandCursorWarp,
tstr_SettingsActionsEditCommandProfile,
tstr_SettingsActionsEditCommandProfileClear,
tstr_SettingsActionsEditCommandDescNone,
tstr_SettingsActionsEditCommandDescKey, //%KEYNAME% == key name
tstr_SettingsActionsEditCommandDescKeyToggle, //^
tstr_SettingsActionsEditCommandDescMousePos, //%X% & %Y% == position coordinates
tstr_SettingsActionsEditCommandDescString, //%STRING% == command string
tstr_SettingsActionsEditCommandDescLaunchApp, //%APP% == app path, %ARGSOPT% == tstr_SettingsActionsEditCommandDescLaunchAppArgsOpt or blank if app args are empty
tstr_SettingsActionsEditCommandDescLaunchAppArgsOpt, //%ARGS% == app arguments
tstr_SettingsActionsEditCommandDescKey, //%KEYNAME% == key name
tstr_SettingsActionsEditCommandDescKeyToggle, //^
tstr_SettingsActionsEditCommandDescMousePos, //%X% & %Y% == position coordinates
tstr_SettingsActionsEditCommandDescString, //%STRING% == command string
tstr_SettingsActionsEditCommandDescLaunchApp, //%APP% == app path, %ARGSOPT% == tstr_SettingsActionsEditCommandDescLaunchAppArgsOpt or blank if app args are empty
tstr_SettingsActionsEditCommandDescLaunchAppArgsOpt, //%ARGS% == app arguments
tstr_SettingsActionsEditCommandDescKeyboardToggle,
tstr_SettingsActionsEditCommandDescKeyboardShow,
tstr_SettingsActionsEditCommandDescKeyboardHide,
tstr_SettingsActionsEditCommandDescCropWindow,
tstr_SettingsActionsEditCommandDescOverlayToggle, //%TAGS% == target tags
tstr_SettingsActionsEditCommandDescOverlayShow, //^
tstr_SettingsActionsEditCommandDescOverlayHide, //^
tstr_SettingsActionsEditCommandDescOverlayToggle, //%TAGS% == target tags
tstr_SettingsActionsEditCommandDescOverlayShow, //^
tstr_SettingsActionsEditCommandDescOverlayHide, //^
tstr_SettingsActionsEditCommandDescOverlayTargetDefault,
tstr_SettingsActionsEditCommandDescSwitchTask,
tstr_SettingsActionsEditCommandDescSwitchTaskWindow, //%WINDOW% == window title string
tstr_SettingsActionsEditCommandDescSwitchTaskWindow, //%WINDOW% == window title string
tstr_SettingsActionsEditCommandDescLoadOverlayProfile, //%PROFILE% == profile name string
tstr_SettingsActionsEditCommandDescLoadOverlayProfileAdd, //^
tstr_SettingsActionsEditCommandDescUnknown,
tstr_SettingsActionsOrderHeader,
tstr_SettingsActionsOrderButtonLabel, //%COUNT% == Action count
tstr_SettingsActionsOrderButtonLabelSingular, //^
tstr_SettingsActionsOrderButtonLabel, //%COUNT% == Action count
tstr_SettingsActionsOrderButtonLabelSingular, //^
tstr_SettingsActionsOrderNoActions,
tstr_SettingsActionsOrderAdd,
tstr_SettingsActionsOrderRemove,
Expand All @@ -218,7 +223,7 @@ enum TRMGRStrID
tstr_SettingsKeyboardAutoShowDesktop,
tstr_SettingsKeyboardAutoShowDesktopTip,
tstr_SettingsKeyboardAutoShowBrowser,
tstr_SettingsKeyboardLayoutAuthor, //%AUTHOR% == Layout Author string
tstr_SettingsKeyboardLayoutAuthor, //%AUTHOR% == Layout Author string
tstr_SettingsKeyboardKeyClusters,
tstr_SettingsKeyboardKeyClusterBase,
tstr_SettingsKeyboardKeyClusterFunction,
Expand Down
30 changes: 30 additions & 0 deletions src/DesktopPlusUI/UIManager.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -250,6 +250,31 @@ void UIManager::SetOverlayInputEnabled(bool is_enabled)
vr::VROverlay()->SetOverlayInputMethod(m_OvrlHandleAuxUI, input_method);
}

void UIManager::HandleOverlayProfileLoadMessage(LPARAM lparam)
{
IPCActionOverlayProfileLoadArg profile_load_arg = (IPCActionOverlayProfileLoadArg)LOWORD(lparam);
int profile_overlay_id = GET_Y_LPARAM(lparam);

const std::string& profile_name = ConfigManager::GetValue(configid_str_state_profile_name_load);

if (profile_overlay_id == -2)
{
ConfigManager::Get().LoadOverlayProfileDefault(true);
}
else if (profile_load_arg == ipcactv_ovrl_profile_multi)
{
ConfigManager::Get().LoadMultiOverlayProfileFromFile(profile_name + ".ini", true);
}
else if (profile_load_arg == ipcactv_ovrl_profile_multi_add)
{
IM_ASSERT(profile_overlay_id != -1); //Exclusion is unhandled for now. Shouldn't be sent anyways

ConfigManager::Get().LoadMultiOverlayProfileFromFile(profile_name + ".ini", false);
}

OnProfileLoaded();
}

UIManager* UIManager::Get()
{
return g_UIManagerPtr;
Expand Down Expand Up @@ -504,6 +529,11 @@ void UIManager::HandleIPCMessage(const MSG& msg, bool handle_delayed)
m_WindowPerformance.ScheduleOverlaySharedTextureUpdate();
break;
}
case ipcact_overlay_profile_load:
{
HandleOverlayProfileLoadMessage(msg.lParam);
break;
}
case ipcact_overlay_new_drag:
{
int desktop_id = GET_X_LPARAM(msg.lParam); //(No need to extract pointer distance)
Expand Down
2 changes: 2 additions & 0 deletions src/DesktopPlusUI/UIManager.h
Original file line number Diff line number Diff line change
Expand Up @@ -126,6 +126,8 @@ class UIManager
void DisplayInitialSetupNotification();
void SetOverlayInputEnabled(bool is_enabled);

void HandleOverlayProfileLoadMessage(LPARAM lparam);

public:
static UIManager* Get();

Expand Down
84 changes: 83 additions & 1 deletion src/DesktopPlusUI/WindowSettings.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3937,6 +3937,9 @@ void WindowSettings::UpdatePageActionsEdit(bool only_restore_settings)
reload_icon = true;
input_tags_state.PopupShow = false;

//Make sure profile list is ready
m_ProfileList = ConfigManager::Get().GetOverlayProfileList();

//Create from scratch if selected UID is 0
if (m_ActionSelectionUID == k_ActionUID_Invalid)
{
Expand Down Expand Up @@ -4353,7 +4356,7 @@ void WindowSettings::UpdatePageActionsEdit(bool only_restore_settings)

int command_type_temp = command.Type;
ImGui::SetNextItemWidth(-1);
if (TranslatedComboAnimated("##ComboCommandType", command_type_temp, tstr_SettingsActionsEditCommandTypeNone, tstr_SettingsActionsEditCommandTypeSwitchTask))
if (TranslatedComboAnimated("##ComboCommandType", command_type_temp, tstr_SettingsActionsEditCommandTypeNone, tstr_SettingsActionsEditCommandTypeLoadOverlayProfile))
{
//Reset command values, then set type
command = ActionCommand();
Expand All @@ -4364,6 +4367,12 @@ void WindowSettings::UpdatePageActionsEdit(bool only_restore_settings)
ui_state.temp_int_1 = 0;
ui_state.temp_int_2 = 0;

//Set command specific default values
if (command.Type == ActionCommand::command_load_overlay_profile)
{
command.UIntID = 1; //Clear existing overlays: true
}

has_value_changed = true;
}
ImGui::Spacing();
Expand Down Expand Up @@ -4726,6 +4735,79 @@ void WindowSettings::UpdatePageActionsEdit(bool only_restore_settings)

break;
}
case ActionCommand::command_load_overlay_profile:
{
bool clear_existing = (command.UIntID == 1);

int& list_id = ui_state.temp_int_1;

//Find current selection index if needed
if ((list_id == 0) && (!command.StrMain.empty()))
{
const auto it = std::find(m_ProfileList.begin(), m_ProfileList.end(), command.StrMain);
list_id = (it != m_ProfileList.end()) ? (int)std::distance(m_ProfileList.begin(), it) : -1;
}

ImGui::AlignTextToFramePadding();
ImGui::TextUnformatted(TranslationManager::GetString(tstr_SettingsActionsEditCommandProfile));

ImGui::NextColumn();

ImGui::PushItemWidth(-1);
ImGui::SetNextItemWidth(-1);
if (ImGui::BeginComboAnimated("##ComboLang", (!command.StrMain.empty()) ? command.StrMain.c_str() : TranslationManager::GetString(tstr_SettingsProfilesOverlaysNameDefault) ))
{
int index = 0;
for (const auto& name : m_ProfileList)
{
//Skip [New Profile] which is always at the end of the list
if (index == m_ProfileList.size() - 1)
{
break;
}

ImGui::PushID(index);
if (ImGui::Selectable(name.c_str(), (index == list_id)))
{
list_id = index;

if (list_id == 0)
{
command.StrMain = "";
command.UIntID = 1;
}
else
{
command.StrMain = m_ProfileList[list_id];
}

has_value_changed = true;
}
ImGui::PopID();

index++;
}

ImGui::EndCombo();
}

ImGui::NextColumn();

//"Default Profile" is always clearing overlays
if (list_id == 0)
ImGui::PushItemDisabled();

if (ImGui::Checkbox(TranslationManager::GetString(tstr_SettingsActionsEditCommandProfileClear), &clear_existing))
{
command.UIntID = clear_existing;
has_value_changed = true;
}

if (list_id == 0)
ImGui::PopItemDisabled();

break;
}
default: break;
}

Expand Down
Loading

0 comments on commit b96bdee

Please sign in to comment.