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

Add example: custom title bar #774

Merged
merged 2 commits into from
Dec 5, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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
}
}
Loading