Files
MuditaOS/module-gui/gui/widgets/Window.hpp
Adam Dobrowolski 0ec9428917 [EGD-7773] Popups stack poc
Stack plus minimum tests added
Updated to master
Removed useless or adressed TODOS
Constants name applied
Renamed searchModel to searchRequestModel
Review applied
We should remove legacy window names
Bell names fixes
2022-01-04 13:01:23 +01:00

95 lines
2.9 KiB
C++

// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md
#pragma once
#include <list>
#include "Item.hpp"
#include "Common.hpp"
#include "SwitchData.hpp"
namespace gui
{
/// Base window for all UI windows
///
/// It consists of:
/// 1. StatusBar
/// 2. Header
/// 3. Body
/// 4. NavBar
/// More in WINDOW.md
///
/// All window switches are done based on Window::name and SwitchData
/// All windows are statically build at start of application, and removed on application end
/// To rebuild window one have to:
/// 1. set navigationItem to nullptr (othervise window will crash trying to execute focus callback on reomved
/// element)
/// 2. Remove elements
/// 3. Add elements anew
/// or:
/// 2. handle elements update
class Window : public Item
{
protected:
/// name of window used for windows switching
std::string name;
public:
enum class CloseReason
{
ApplicationClose,
WindowSwitch,
PhoneLock,
Popup
};
Window() = delete;
explicit Window(std::string name);
/// run every time in Application prior to showing window, except for when we came back to first window with no
/// switch data to show
/// @note this is most likely being duplicated by handleSwitchData
virtual void onBeforeShow(ShowMode mode, SwitchData *data);
virtual void onClose(CloseReason reason);
virtual void getRefreshArea(uint16_t &x, uint16_t &y, uint16_t &w, uint16_t &h);
/// run prior to onBeforeShow
/// @note this is most likely duplicate of onBeforeShow
virtual bool handleSwitchData(SwitchData *data);
/// This method rebuilds window using updated phone's settings. Internal state must be preserved.
virtual void rebuild() = 0;
/// Method to build window's interface
virtual void buildInterface() = 0;
/// Method to remove window's interface
virtual void destroyInterface() = 0;
// virtual methods from Item
bool onInput(const InputEvent &inputEvent) override;
void accept(GuiVisitor &visitor) override;
void buildDrawListImplementation(std::list<Command> &commands) override;
/// used for window switching purposes
std::string getName()
{
return name;
};
/// function to set name - some windows have different name set in
/// - builder
/// - actual window name
[[deprecated]] void setName(const std::string &name)
{
this->name = name;
}
/// used for fetching unique name of window
virtual std::string getUniqueName()
{
return name;
}
};
} /* namespace gui */