mirror of
https://github.com/mudita/MuditaOS.git
synced 2026-01-02 02:48:51 -05:00
Fix for inconsistent redirection to message threads list when pressing BACK from sending message from Contact view. Also proveded mechanizm to help switching back to previous App, when some App call window from another App.
94 lines
3.4 KiB
C++
94 lines
3.4 KiB
C++
// Copyright (c) 2017-2023, Mudita Sp. z.o.o. All rights reserved.
|
|
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md
|
|
|
|
#pragma once
|
|
|
|
#include <string>
|
|
#include <optional>
|
|
#include <log/log.hpp>
|
|
|
|
namespace gui
|
|
{
|
|
using NameOfApplication = std::optional<std::string>;
|
|
|
|
/// base class storing information sent along with switch message
|
|
/// for extended use with windows please inherit from this class to extend it
|
|
///
|
|
/// used combined with:
|
|
/// * Application->switchWindow(...) function changing window within current application
|
|
/// * Application::handleSwitchWindow(...) ApplicationManager call changing window between apps (and within current
|
|
/// if requested)
|
|
class SwitchData
|
|
{
|
|
bool popup = false;
|
|
|
|
protected:
|
|
std::string description = "";
|
|
|
|
public:
|
|
SwitchData() = default;
|
|
explicit SwitchData(std::string description) : description{std::move(description)} {};
|
|
|
|
virtual ~SwitchData() = default;
|
|
|
|
[[nodiscard]] virtual const std::string &getDescription() const
|
|
{
|
|
return description;
|
|
};
|
|
virtual void setDescription(const std::string desc)
|
|
{
|
|
description = desc;
|
|
};
|
|
/// informs ApplicationManager to not close caller application when switching from app to app
|
|
bool disableAppClose = false;
|
|
/// informs App window stack that requested window should be ignored on windows stack.
|
|
///
|
|
/// This affects window back mechanics. Having switchWindow calls like that:
|
|
/// `WinA = { ignoreCurrentWindowOnStack = true } => WinB => WinC`
|
|
/// requesting getting back in WinC will result in:
|
|
/// `WinC => WinA`
|
|
bool ignoreCurrentWindowOnStack = false;
|
|
/// This can store name of Application when message came from
|
|
/// This is helpful when going back to the previous Application (sender Application)
|
|
NameOfApplication nameOfSenderApplication = std::nullopt;
|
|
};
|
|
|
|
class SwitchSpecialChar : public SwitchData
|
|
{
|
|
public:
|
|
std::string requester = "";
|
|
enum class Type
|
|
{
|
|
Request,
|
|
Response,
|
|
} type = Type::Request;
|
|
SwitchSpecialChar(Type type, const std::string requester, const std::string &description = "")
|
|
: SwitchData(description), requester(requester), type(type)
|
|
{}
|
|
virtual ~SwitchSpecialChar() = default;
|
|
};
|
|
|
|
/// class storing information for Window type class to switch bask to proper Application
|
|
struct InfoAboutPreviousAppWhereWeComeFrom
|
|
{
|
|
NameOfApplication nameOfPreviousApplication = std::nullopt;
|
|
bool ignoreCurrentApplicationOnSwitchBack = false;
|
|
|
|
// save info about Application where we come from and if we should switch back to this Application
|
|
void saveInfoAboutPreviousAppForProperSwitchBack(const SwitchData *memo)
|
|
{
|
|
if (memo == nullptr) {
|
|
LOG_ERROR("Empty pointer to SwitchData");
|
|
return;
|
|
}
|
|
nameOfPreviousApplication = memo->nameOfSenderApplication;
|
|
ignoreCurrentApplicationOnSwitchBack = memo->ignoreCurrentWindowOnStack;
|
|
}
|
|
bool shouldCurrentAppBeIgnoredOnSwitchBack()
|
|
{
|
|
return ignoreCurrentApplicationOnSwitchBack && nameOfPreviousApplication.has_value();
|
|
}
|
|
};
|
|
|
|
} /* namespace gui */
|