diff --git a/Applications/Terminal/main.cpp b/Applications/Terminal/main.cpp index 3faa510d15..c15f2798c5 100644 --- a/Applications/Terminal/main.cpp +++ b/Applications/Terminal/main.cpp @@ -13,6 +13,7 @@ #include #include #include +#include static void make_shell(int ptm_fd) { @@ -72,5 +73,17 @@ int main(int argc, char** argv) window->move_to(300, 300); window->show(); + auto menubar = make(); + + auto app_menu = make("Terminal"); + app_menu->add_item(1, "Quit"); + menubar->add_menu(move(app_menu)); + + auto help_menu = make("?"); + help_menu->add_item(2, "About"); + menubar->add_menu(move(app_menu)); + + app.set_menubar(move(menubar)); + return app.exec(); } diff --git a/LibGUI/GApplication.cpp b/LibGUI/GApplication.cpp index 7054cd050a..a5d520c5a6 100644 --- a/LibGUI/GApplication.cpp +++ b/LibGUI/GApplication.cpp @@ -33,6 +33,10 @@ void GApplication::exit(int exit_code) void GApplication::set_menubar(OwnPtr&& menubar) { + if (m_menubar) + m_menubar->notify_removed_from_application(Badge()); m_menubar = move(menubar); + if (m_menubar) + m_menubar->notify_added_to_application(Badge()); } diff --git a/LibGUI/GMenu.cpp b/LibGUI/GMenu.cpp index ca276a0d85..e73ad3b579 100644 --- a/LibGUI/GMenu.cpp +++ b/LibGUI/GMenu.cpp @@ -1,6 +1,7 @@ #include -GMenu::GMenu() +GMenu::GMenu(const String& name) + : m_name(name) { } @@ -8,4 +9,12 @@ GMenu::~GMenu() { } +void GMenu::add_item(unsigned identifier, const String& text) +{ + m_items.append({ identifier, text }); +} +void GMenu::add_separator() +{ + m_items.append(GMenuItem(GMenuItem::Separator)); +} diff --git a/LibGUI/GMenu.h b/LibGUI/GMenu.h index f567e12eee..c96da58a6c 100644 --- a/LibGUI/GMenu.h +++ b/LibGUI/GMenu.h @@ -5,9 +5,13 @@ class GMenu { public: - GMenu(); + explicit GMenu(const String& name); ~GMenu(); + void add_item(unsigned identifier, const String& text); + void add_separator(); + private: + String m_name; Vector m_items; }; diff --git a/LibGUI/GMenuBar.cpp b/LibGUI/GMenuBar.cpp index 77084da277..d8a142fe4e 100644 --- a/LibGUI/GMenuBar.cpp +++ b/LibGUI/GMenuBar.cpp @@ -7,3 +7,16 @@ GMenuBar::GMenuBar() GMenuBar::~GMenuBar() { } + +void GMenuBar::add_menu(OwnPtr&& menu) +{ + m_menus.append(move(menu)); +} + +void GMenuBar::notify_added_to_application(Badge) +{ +} + +void GMenuBar::notify_removed_from_application(Badge) +{ +} diff --git a/LibGUI/GMenuBar.h b/LibGUI/GMenuBar.h index f9263226ab..011a70f596 100644 --- a/LibGUI/GMenuBar.h +++ b/LibGUI/GMenuBar.h @@ -1,13 +1,22 @@ #pragma once #include +#include +#include #include +class GApplication; + class GMenuBar { public: GMenuBar(); ~GMenuBar(); + void add_menu(OwnPtr&&); + + void notify_added_to_application(Badge); + void notify_removed_from_application(Badge); + private: - Vector m_menus; + Vector> m_menus; };