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 Sep 30, 2022
1 parent 84d21a3 commit 7958524
Show file tree
Hide file tree
Showing 5 changed files with 86 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
9 changes: 9 additions & 0 deletions examples/header_bar/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
# HeaderBar example

This example demonstrates how to use HeaderBar in Windows.

Run it by executing:

```bash
cargo run --bin header_bar
```
46 changes: 46 additions & 0 deletions examples/header_bar/main.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
mod title_bar;

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

fn build_ui(application: &gtk::Application) {
let window = ApplicationWindow::new(application);

window.set_title("HeaderBar example");
window.set_position(WindowPosition::Center);

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() {
gio::resources_register_include!("compiled.gresource").unwrap();

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::*, Label};
use gtk::{traits::StackSwitcherExt, HeaderBar, 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: gtk::Stack) {
self.menu.set_stack(Some(&stack));
}

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

0 comments on commit 7958524

Please sign in to comment.