1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-05-31 09:18:11 +00:00
serenity/Applications/Taskbar/WindowList.h
Andreas Kling d4892b3fdc WindowServer+LibGUI: Remove old "icon path" way of doing things.
Now that we can set icons directly "by bitmap", there's no need for passing
around the icon paths anymore, so get rid of all the IPC and API related
to that. :^)
2019-07-28 10:24:58 +02:00

69 lines
1.7 KiB
C++

#pragma once
#include "WindowIdentifier.h"
#include <AK/AKString.h>
#include <AK/HashMap.h>
#include <LibGUI/GButton.h>
#include <LibDraw/Rect.h>
class Window {
public:
explicit Window(const WindowIdentifier& identifier)
: m_identifier(identifier)
{
}
~Window()
{
delete m_button;
}
WindowIdentifier identifier() const { return m_identifier; }
String title() const { return m_title; }
void set_title(const String& title) { m_title = title; }
Rect rect() const { return m_rect; }
void set_rect(const Rect& rect) { m_rect = rect; }
GButton* button() { return m_button; }
void set_button(GButton* button) { m_button = button; }
void set_active(bool active) { m_active = active; }
bool is_active() const { return m_active; }
void set_minimized(bool minimized) { m_minimized = minimized; }
bool is_minimized() const { return m_minimized; }
const GraphicsBitmap* icon() const { return m_icon.ptr(); }
private:
WindowIdentifier m_identifier;
String m_title;
Rect m_rect;
GButton* m_button { nullptr };
RefPtr<GraphicsBitmap> m_icon;
bool m_active { false };
bool m_minimized { false };
};
class WindowList {
public:
static WindowList& the();
template<typename Callback>
void for_each_window(Callback callback)
{
for (auto& it : m_windows)
callback(*it.value);
}
Window* window(const WindowIdentifier&);
Window& ensure_window(const WindowIdentifier&);
void remove_window(const WindowIdentifier&);
Function<GButton*(const WindowIdentifier&)> aid_create_button;
private:
HashMap<WindowIdentifier, NonnullOwnPtr<Window>> m_windows;
};