~aleteoryx/muditaos

ref: cd700b7c16a4ab403f76c619ee60bf63ddbc55c8 muditaos/module-apps/apps-common/WindowsStack.hpp -rw-r--r-- 1.4 KiB
cd700b7c — Przemyslaw Brudny Merge remote-tracking branch 'origin/stable' 4 years ago
                                                                                
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
// 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 <memory>
#include <map>
#include <vector>
#include <string>
#include <AppWindow.hpp>

namespace app
{

    class ApplicationCommon;

    class WindowsStack
    {
        ApplicationCommon *parent;

      public:
        WindowsStack(ApplicationCommon *parent) : parent(parent)
        {}

        std::vector<std::string> stack;
        std::map<std::string, std::unique_ptr<gui::AppWindow>> windows;

        std::map<std::string, std::unique_ptr<gui::AppWindow>>::const_iterator begin() const
        {
            return std::begin(windows);
        }

        std::map<std::string, std::unique_ptr<gui::AppWindow>>::const_iterator end() const
        {
            return std::end(windows);
        }

        [[nodiscard]] auto getParent() const
        {
            return parent;
        }

        auto push(const std::string &name, std::unique_ptr<gui::AppWindow> window)
        {
            windows[name] = std::move(window);
            stack.push_back(name);
        }

        gui::AppWindow *get(const std::string &name) const
        {
            auto ret = windows.find(name);
            return ret == std::end(windows) ? nullptr : ret->second.get();
        }

        [[nodiscard]] auto isEmpty() const noexcept
        {
            return stack.size() == 0;
        }
    };
} // namespace app