Skip to content

Commit 3106cab

Browse files
committed
improv: Revert to not using xml in main_window as well
1 parent 330eed2 commit 3106cab

File tree

2 files changed

+70
-106
lines changed

2 files changed

+70
-106
lines changed

src/application/main_window.rs

Lines changed: 70 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
use cascade::cascade;
12
use glib::subclass;
23
use gtk::prelude::*;
34
use gtk::subclass::prelude::*;
@@ -10,28 +11,21 @@ use crate::{
1011
DaemonClient,
1112
DaemonDummy,
1213
DaemonServer,
14+
DerefCell,
1315
};
1416
use super::{
1517
Keyboard,
1618
Picker,
1719
shortcuts_window,
1820
};
1921

20-
#[derive(Default, gtk::CompositeTemplate)]
22+
#[derive(Default)]
2123
pub struct MainWindowInner {
22-
#[template_child]
23-
board_dropdown: TemplateChild<gtk::ComboBoxText>,
24+
board_dropdown: DerefCell<gtk::ComboBoxText>,
2425
count: AtomicUsize,
25-
#[template_child]
26-
header_bar: TemplateChild<gtk::HeaderBar>,
27-
#[template_child]
28-
vbox: TemplateChild<gtk::Box>,
29-
#[template_child]
30-
layer_switcher: TemplateChild<gtk::StackSwitcher>,
31-
#[template_child]
32-
picker: TemplateChild<Picker>,
33-
#[template_child]
34-
stack: TemplateChild<gtk::Stack>,
26+
layer_switcher: DerefCell<gtk::StackSwitcher>,
27+
picker: DerefCell<Picker>,
28+
stack: DerefCell<gtk::Stack>,
3529
}
3630

3731
impl ObjectSubclass for MainWindowInner {
@@ -46,23 +40,47 @@ impl ObjectSubclass for MainWindowInner {
4640

4741
glib::object_subclass!();
4842

49-
fn class_init(klass: &mut Self::Class) {
50-
Picker::static_type();
51-
klass.set_template(include_bytes!("main_window.ui"));
52-
Self::bind_template_children(klass);
53-
}
54-
5543
fn new() -> Self {
5644
Self::default()
5745
}
5846
}
5947

6048
impl ObjectImpl for MainWindowInner {
6149
fn constructed(&self, window: &MainWindow) {
62-
window.init_template();
6350
self.parent_constructed(window);
6451

65-
self.board_dropdown.connect_changed(clone!(@weak window => @default-panic, move |combobox| {
52+
let layer_switcher = gtk::StackSwitcher::new();
53+
54+
let menu = cascade! {
55+
gio::Menu::new();
56+
..append_section(None, &cascade! {
57+
gio::Menu::new();
58+
..append(Some("Load Layout"), Some("kbd.load"));
59+
..append(Some("Save Layout"), Some("kbd.save"));
60+
..append(Some("Reset Layout"), Some("kbd.reset"));
61+
});
62+
..append_section(None, &cascade! {
63+
gio::Menu::new();
64+
..append(Some("Keyboard Shortcuts"), Some("win.show-help-overlay"));
65+
..append(Some("About Keyboard Configurator"), Some("app.about"));
66+
});
67+
};
68+
69+
let header_bar = cascade! {
70+
gtk::HeaderBar::new();
71+
..set_show_close_button(true);
72+
..set_custom_title(Some(&layer_switcher));
73+
..pack_end(&cascade! {
74+
gtk::MenuButton::new();
75+
..set_menu_model(Some(&menu));
76+
..add(&cascade! {
77+
gtk::Image::from_icon_name(Some("open-menu-symbolic"), gtk::IconSize::Button);
78+
});
79+
});
80+
};
81+
82+
let board_dropdown = gtk::ComboBoxText::new();
83+
board_dropdown.connect_changed(clone!(@weak window => @default-panic, move |combobox| {
6684
let self_ = window.inner();
6785
if let Some(id) = combobox.get_active_id() {
6886
self_.stack.set_visible_child_name(&id);
@@ -73,10 +91,37 @@ impl ObjectImpl for MainWindowInner {
7391
}
7492
}));
7593

76-
window.set_help_overlay(Some(&shortcuts_window()));
77-
78-
window.set_focus::<gtk::Widget>(None);
79-
window.show_all();
94+
let stack = gtk::Stack::new();
95+
let picker = Picker::new();
96+
97+
let vbox = cascade! {
98+
gtk::Box::new(gtk::Orientation::Vertical, 32);
99+
..set_property_margin(10);
100+
..set_halign(gtk::Align::Center);
101+
..add(&board_dropdown);
102+
..add(&stack);
103+
..add(&picker);
104+
};
105+
106+
cascade! {
107+
window;
108+
..set_title("System76 Keyboard Configurator");
109+
..set_position(gtk::WindowPosition::Center);
110+
..set_default_size(1024, 768);
111+
..set_titlebar(Some(&header_bar));
112+
..add(&cascade! {
113+
gtk::ScrolledWindow::new::<gtk::Adjustment, gtk::Adjustment>(None, None);
114+
..add(&vbox);
115+
});
116+
..set_help_overlay(Some(&shortcuts_window()));
117+
..set_focus(None::<&gtk::Widget>);
118+
..show_all();
119+
};
120+
121+
self.board_dropdown.set(board_dropdown);
122+
self.layer_switcher.set(layer_switcher);
123+
self.picker.set(picker);
124+
self.stack.set(stack);
80125
}
81126
}
82127
impl WidgetImpl for MainWindowInner {

src/application/main_window.ui

Lines changed: 0 additions & 81 deletions
This file was deleted.

0 commit comments

Comments
 (0)