Clone in a terminal:
PreviewTools.vala
/*
	Copyright (C) 2014 Johan Mattsson

	This library is free software; you can redistribute it and/or modify 
	it under the terms of the GNU Lesser General Public License as 
	published by the Free Software Foundation; either version 3 of the 
	License, or (at your option) any later version.

	This library is distributed in the hope that it will be useful, but 
	WITHOUT ANY WARRANTY; without even the implied warranty of 
	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 
	Lesser General Public License for more details.
*/

namespace BirdFont {

public class PreviewTools : ToolCollection  {
	public Gee.ArrayList<Expander> expanders = new Gee.ArrayList<Expander> ();
	public Expander classes;
	
	public PreviewTools () {
		Expander webview_tools = new Expander ();

		Expander font_name = new Expander ();
		font_name.add_tool (new FontName ());
			
		Tool update_webview_button = new Tool ("update_webview", t_("Reload webview"));
		update_webview_button.select_action.connect ((self) => {
			update_preview ();
		});
		webview_tools.add_tool (update_webview_button);
		
		Tool export_fonts_button = new Tool ("export_fonts", t_("Export fonts"));
		export_fonts_button.select_action.connect ((self) => {
			MenuTab.export_fonts_in_background ();
		});
		webview_tools.add_tool (export_fonts_button);

		Tool generate_html_button = new Tool ("generate_html_document", t_("Generate html document"));
		generate_html_button.select_action.connect ((self) => {
			generate_html_document ();
		});
		webview_tools.add_tool (generate_html_button);
		
		expanders.add (font_name);
		expanders.add (webview_tools);
	}

	/** Export fonts and update html canvas. */
	public static void update_preview () {
		MenuTab.export_callback = new ExportCallback ();
		MenuTab.export_callback.preview = true;
		MenuTab.export_callback.file_exported.connect (signal_preview_updated);
		MenuTab.export_callback.export_fonts_in_background ();
	}

	private static void signal_preview_updated () {
		IdleSource idle = new IdleSource ();

		idle.set_callback (() => {
			if (!Preview.has_html_document ()) {
				Preview.generate_html_document ();
			}
			
			if (ExportTool.error_message == null) {
				MainWindow.tabs.select_tab_name ("Preview");
			}
			
			return false;
		});
		
		idle.attach (null);	
	}

	/** Generate the preview document. */
	public static void generate_html_document () {
		Preview.delete_html_document ();
		Preview.generate_html_document ();
	}
		
	public override Gee.ArrayList<Expander> get_expanders () {
		return expanders;
	}

	public override Gee.ArrayList<string> get_displays () {
		Gee.ArrayList<string> d = new Gee.ArrayList<string> ();
		d.add ("Preview");
		return d;
	}
}

}

Contact

Email: johan.mattsson.m@gmail.com
Mastodon: typo.social/@birdfont
GitHub: johanmattssonm
LinkedIn: johan-mattsson-2ab324112