Skip to content
This repository has been archived by the owner on Mar 4, 2024. It is now read-only.

Commit

Permalink
Add example: custom title bar
Browse files Browse the repository at this point in the history
  • Loading branch information
ski0090 committed Nov 28, 2023
1 parent aab32e4 commit d294009
Show file tree
Hide file tree
Showing 5 changed files with 83 additions and 0 deletions.
4 changes: 4 additions & 0 deletions examples/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -130,6 +130,10 @@ path = "list_box_model/main.rs"
name = "list_store"
path = "list_store/main.rs"

[[bin]]
name = "header_bar"
path = "header_bar/main.rs"

[[bin]]
name = "menu_bar"
path = "menu_bar/main.rs"
Expand Down
11 changes: 11 additions & 0 deletions examples/header_bar/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
# HeaderBar example

This example demonstrates how to use HeaderBar in Windows.

Run it by executing:

```bash
cargo run --bin header_bar
```

![screenshot](screenshot.png)
41 changes: 41 additions & 0 deletions examples/header_bar/main.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
mod title_bar;

use gtk::prelude::*;
use gtk::{ApplicationWindow, CheckButton, Label, Stack, WindowPosition};
use title_bar::TitleBar;

fn build_ui(application: &gtk::Application) {
let window = ApplicationWindow::builder()
.application(application)
.title("HeaderBar example")
.window_position(WindowPosition::Center)
.build();

let stack = Stack::builder().expand(true).build();
window.add(&stack);

let check_button = CheckButton::builder()
.expand(true)
.label("check button")
.build();
stack.add_titled(&check_button, "check_button", "check button");
let label = Label::builder().label("Hello world").build();
stack.add_titled(&label, "label", "label");

let title_bar = TitleBar::new();
window.set_titlebar(Some(title_bar.header()));
title_bar.set_stack(&stack);

window.show_all();
}

fn main() {
let application = gtk::Application::new(
Some("com.github.gtk-rs.examples.menu_bar"),
Default::default(),
);

application.connect_activate(build_ui);

application.run();
}
Binary file added examples/header_bar/screenshot.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
27 changes: 27 additions & 0 deletions examples/header_bar/title_bar.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
use gtk::prelude::*;
use gtk::{HeaderBar, Label, Stack, StackSwitcher};

pub struct TitleBar {
header: HeaderBar,
menu: StackSwitcher,
}

impl TitleBar {
pub fn new() -> Self {
let menu = StackSwitcher::new();
let header = HeaderBar::builder()
.custom_title(&menu)
.show_close_button(true)
.build();
header.add(&Label::new(Some("Custom title")));
Self { header, menu }
}

pub fn set_stack(&self, stack: &Stack) {
self.menu.set_stack(Some(stack));
}

pub fn header(&self) -> &HeaderBar {
&self.header
}
}

0 comments on commit d294009

Please sign in to comment.