<!-- interface-name markdown-rs -->
<!-- interface-description Simple Markdown editor -->
<!-- interface-authors Nil Gradisnik -->
+ <object class="GtkAboutDialog" id="about_dialog">
+ <property name="can_focus">False</property>
+ <property name="type_hint">dialog</property>
+ <property name="program_name">Markdown Rust</property>
+ <property name="version">0.1.0</property>
+ <property name="comments" translatable="yes">Fast, simple, distraction free Markdown editor.</property>
+ <property name="website">https://github.com/nilgradisnik/markdown-rs</property>
+ <property name="website_label" translatable="yes">markdown-rs</property>
+ <property name="authors">Nil Gradisnik <nil.gradisnik@gmail.com></property>
+ <property name="logo_icon_name">text-x-generic</property>
+ <property name="license_type">mit-x11</property>
+ <child internal-child="vbox">
+ <object class="GtkBox">
+ <property name="can_focus">False</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">2</property>
+ <child internal-child="action_area">
+ <object class="GtkButtonBox">
+ <property name="can_focus">False</property>
+ <property name="layout_style">end</property>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ </object>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ </object>
<object class="GtkApplicationWindow" id="window">
<property name="can_focus">False</property>
<property name="title" translatable="yes">Markdown Rust</property>
<property name="homogeneous">True</property>
</packing>
</child>
+ <child>
+ <object class="GtkSeparatorToolItem" id="spacer">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="visible_vertical">False</property>
+ <property name="draw">False</property>
+ </object>
+ <packing>
+ <property name="expand">True</property>
+ <property name="homogeneous">True</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkToolButton" id="about_button">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="use_underline">True</property>
+ <property name="stock_id">gtk-about</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="homogeneous">False</property>
+ </packing>
+ </child>
</object>
<packing>
<property name="expand">False</property>
use markdown::{string_to_html, buffer_to_html};
+const NAME: &str = env!("CARGO_PKG_NAME");
+const VERSION: &str = env!("CARGO_PKG_VERSION");
+const AUTHORS: &str = env!("CARGO_PKG_AUTHORS");
+const DESCRIPTION: &str = env!("CARGO_PKG_DESCRIPTION");
+
// http://gtk-rs.org/tuto/closures
macro_rules! clone {
(@param _) => ( _ );
let window: gtk::ApplicationWindow = builder.get_object("window").expect("Couldn't get window");
window.set_application(application);
- let open_button: gtk::ToolButton = builder.get_object("open_button").expect("Couldn't get builder");
- let render_button: gtk::ToolButton = builder.get_object("render_button").expect("Couldn't get builder");
- let live_button: gtk::ToggleToolButton = builder.get_object("live_button").expect("Couldn't get builder");
+ let open_button: gtk::ToolButton = builder.get_object("open_button").unwrap();
+ let render_button: gtk::ToolButton = builder.get_object("render_button").unwrap();
+ let live_button: gtk::ToggleToolButton = builder.get_object("live_button").unwrap();
+ let about_button: gtk::ToolButton = builder.get_object("about_button").unwrap();
+
+ let text_view: sourceview::View = builder.get_object("text_view").unwrap();
+ let markdown_view: gtk::TextView = builder.get_object("markdown_view").unwrap();
- let text_view: sourceview::View = builder.get_object("text_view").expect("Couldn't get text_view");
- let markdown_view: gtk::TextView = builder.get_object("markdown_view").expect("Couldn't get text_view");
+ let about_dialog: gtk::AboutDialog = builder.get_object("about_dialog").unwrap();
+ about_dialog.set_program_name(NAME);
+ about_dialog.set_version(VERSION);
+ about_dialog.set_authors(&[AUTHORS]);
+ about_dialog.set_comments(DESCRIPTION);
open_button.connect_clicked(clone!(window, text_view, markdown_view => move |_| {
let file_chooser = gtk::FileChooserDialog::new(Some("Open File"), Some(&window), gtk::FileChooserAction::Open);
markdown_view.get_buffer().unwrap().set_text(&buffer_to_html(buffer));
}));
+ about_button.connect_clicked(clone!(about_dialog => move |_| {
+ about_dialog.show();
+ }));
+
+ about_dialog.connect_delete_event(clone!(about_dialog => move |_, _| {
+ about_dialog.hide();
+ Inhibit(true)
+ }));
+
window.connect_delete_event(clone!(window => move |_, _| {
window.destroy();
Inhibit(false)