1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
use crate::booru::Booru;
use crate::data::*;
use crate::send;
use adw::prelude::*;
pub fn make_booru_selection_list(state: &State, wiki: bool) -> gtk::Box {
let container = gtk::Box::new(gtk::Orientation::Vertical, 3);
for b in &state.boorus {
if !wiki || b.booru.has_wiki() {
let booru_button = make_booru_button(&b.booru, state);
container.append(&booru_button);
}
}
container
}
fn make_booru_button(b: &std::boxed::Box<dyn Booru>, state: &State) -> gtk::Button {
let booru_button = gtk::Button::new();
let title = if b.get_domain() == "__builtin_localbooru" {
"Your Downloads".to_string()
} else {
b.get_domain().to_owned()
};
booru_button.set_child(Some(>k::Label::new(Some(&title))));
if Some(b.get_domain()) == state.active_booru.as_ref() {
booru_button.add_css_class("selected-booru");
}
let b2 = b.clone_booru();
let sender = state.sender.clone();
booru_button.connect_clicked(move |_| {
let cmd = Action::SetActiveBooru {
booru: b2.clone_booru(),
};
send!(sender, cmd);
});
booru_button
}