crates/gpui/Cargo.toml 🔗
@@ -132,4 +132,8 @@ path = "examples/hello_world.rs"
[[example]]
name = "image"
-path = "examples/image/image.rs"
+path = "examples/image/image.rs"
+
+[[example]]
+name = "set_menus"
+path = "examples/set_menus.rs"
Andrew created
Add an example showing how to add a menu item, register an action with
the `AppContext`, and successfully call the action.
Release Notes:
- N/A
crates/gpui/Cargo.toml | 6 +++
crates/gpui/examples/set_menus.rs | 43 +++++++++++++++++++++++++++++++++
2 files changed, 48 insertions(+), 1 deletion(-)
@@ -132,4 +132,8 @@ path = "examples/hello_world.rs"
[[example]]
name = "image"
-path = "examples/image/image.rs"
+path = "examples/image/image.rs"
+
+[[example]]
+name = "set_menus"
+path = "examples/set_menus.rs"
@@ -0,0 +1,43 @@
+use gpui::*;
+
+struct SetMenus;
+
+impl Render for SetMenus {
+ fn render(&mut self, _cx: &mut ViewContext<Self>) -> impl IntoElement {
+ div()
+ .flex()
+ .bg(rgb(0x2e7d32))
+ .size_full()
+ .justify_center()
+ .items_center()
+ .text_xl()
+ .text_color(rgb(0xffffff))
+ .child("Set Menus Example")
+ }
+}
+
+fn main() {
+ App::new().run(|cx: &mut AppContext| {
+ // Bring the menu bar to the foreground (so you can see the menu bar)
+ cx.activate(true);
+ // Register the `quit` function so it can be referenced by the `MenuItem::action` in the menu bar
+ cx.on_action(quit);
+ // Add menu items
+ cx.set_menus(vec![Menu {
+ name: "set_menus",
+ items: vec![MenuItem::action("Quit", Quit)],
+ }]);
+ cx.open_window(WindowOptions::default(), |cx| {
+ cx.new_view(|_cx| SetMenus {})
+ });
+ });
+}
+
+// Associate actions using the `actions!` macro (or `impl_actions!` macro)
+actions!(set_menus, [Quit]);
+
+// Define the quit function that is registered with the AppContext
+fn quit(_: &Quit, cx: &mut AppContext) {
+ println!("Gracefully quitting the application . . .");
+ cx.quit();
+}