Add application about dialog
This commit is contained in:
parent
1b3783b795
commit
b139395067
1 changed files with 37 additions and 0 deletions
|
|
@ -49,6 +49,8 @@ impl ComicWindow {
|
||||||
|
|
||||||
let header = gtk::HeaderBar::new();
|
let header = gtk::HeaderBar::new();
|
||||||
header.set_title_widget(Some(>k::Label::new(Some("Comicviewer"))));
|
header.set_title_widget(Some(>k::Label::new(Some("Comicviewer"))));
|
||||||
|
let about_button = gtk::Button::with_label("정보");
|
||||||
|
header.pack_end(&about_button);
|
||||||
window.set_titlebar(Some(&header));
|
window.set_titlebar(Some(&header));
|
||||||
|
|
||||||
let root = gtk::Box::new(gtk::Orientation::Vertical, 8);
|
let root = gtk::Box::new(gtk::Orientation::Vertical, 8);
|
||||||
|
|
@ -125,6 +127,7 @@ impl ComicWindow {
|
||||||
|
|
||||||
let controller = Rc::new(BrowserController {
|
let controller = Rc::new(BrowserController {
|
||||||
window,
|
window,
|
||||||
|
about_button,
|
||||||
location_dropdown,
|
location_dropdown,
|
||||||
edit_location_button,
|
edit_location_button,
|
||||||
delete_location_button,
|
delete_location_button,
|
||||||
|
|
@ -189,6 +192,7 @@ struct BrowserState {
|
||||||
|
|
||||||
struct BrowserController {
|
struct BrowserController {
|
||||||
window: gtk::ApplicationWindow,
|
window: gtk::ApplicationWindow,
|
||||||
|
about_button: gtk::Button,
|
||||||
location_dropdown: gtk::DropDown,
|
location_dropdown: gtk::DropDown,
|
||||||
edit_location_button: gtk::Button,
|
edit_location_button: gtk::Button,
|
||||||
delete_location_button: gtk::Button,
|
delete_location_button: gtk::Button,
|
||||||
|
|
@ -227,6 +231,9 @@ impl BrowserController {
|
||||||
let controller = Rc::clone(self);
|
let controller = Rc::clone(self);
|
||||||
add_location_button.connect_clicked(move |_| controller.show_location_dialog(None));
|
add_location_button.connect_clicked(move |_| controller.show_location_dialog(None));
|
||||||
let controller = Rc::clone(self);
|
let controller = Rc::clone(self);
|
||||||
|
self.about_button
|
||||||
|
.connect_clicked(move |_| controller.show_about_dialog());
|
||||||
|
let controller = Rc::clone(self);
|
||||||
self.edit_location_button.connect_clicked(move |_| {
|
self.edit_location_button.connect_clicked(move |_| {
|
||||||
if let Some(index) = controller.selected_config_index() {
|
if let Some(index) = controller.selected_config_index() {
|
||||||
controller.show_location_dialog(Some(index));
|
controller.show_location_dialog(Some(index));
|
||||||
|
|
@ -1153,6 +1160,36 @@ impl BrowserController {
|
||||||
(index < self.config.borrow().locations.len()).then_some(index)
|
(index < self.config.borrow().locations.len()).then_some(index)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn show_about_dialog(&self) {
|
||||||
|
let dialog = gtk::Window::builder()
|
||||||
|
.title("Comicviewer 정보")
|
||||||
|
.transient_for(&self.window)
|
||||||
|
.modal(true)
|
||||||
|
.resizable(false)
|
||||||
|
.default_width(360)
|
||||||
|
.build();
|
||||||
|
let content = gtk::Box::new(gtk::Orientation::Vertical, 14);
|
||||||
|
content.set_margin_top(24);
|
||||||
|
content.set_margin_bottom(16);
|
||||||
|
content.set_margin_start(24);
|
||||||
|
content.set_margin_end(24);
|
||||||
|
let name = gtk::Label::new(Some(&format!(
|
||||||
|
"Comicviewer ({})",
|
||||||
|
env!("CARGO_PKG_VERSION")
|
||||||
|
)));
|
||||||
|
name.add_css_class("title-2");
|
||||||
|
let contact = gtk::Label::new(Some("개발자 연락처 : burningtuna@gmail.com"));
|
||||||
|
let close_button = gtk::Button::with_label("닫기");
|
||||||
|
close_button.set_halign(gtk::Align::End);
|
||||||
|
let dialog_to_close = dialog.clone();
|
||||||
|
close_button.connect_clicked(move |_| dialog_to_close.close());
|
||||||
|
content.append(&name);
|
||||||
|
content.append(&contact);
|
||||||
|
content.append(&close_button);
|
||||||
|
dialog.set_child(Some(&content));
|
||||||
|
dialog.present();
|
||||||
|
}
|
||||||
|
|
||||||
fn show_location_dialog(self: &Rc<Self>, edit_index: Option<usize>) {
|
fn show_location_dialog(self: &Rc<Self>, edit_index: Option<usize>) {
|
||||||
let existing =
|
let existing =
|
||||||
edit_index.and_then(|index| self.config.borrow().locations.get(index).cloned());
|
edit_index.and_then(|index| self.config.borrow().locations.get(index).cloned());
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue