← Back to team overview

kicad-developers team mailing list archive

[PATCH] Allow HTML files in KiCad project manager to be opened in browser

 

For your consideration a patch that extends the KiCad project manager to recognise HTML files in the project browser and open them in the default browser when clicked on.

I use this feature quite a bit as I generate my various BOM and other reports through python scripts and in both HTML and CSV formats.

I find the HTML versions quicker to open and browse than the CSV equivalents (and easier on the eye) and it is also very easy to include click-able links. For example one of my reports shows all URL references to supplier website links that I then can easily click on to get to the supplier website for that part.

For the HTML icon I used an existing lightbulb icon as I have not been able to find an otherwise suitable HTML icon. I copied it into its own html icon files, so it can be updated easily if need be.

Regards,

Marco

fafeecd0941c211e402580c376fe2164d437f68f
 bitmaps_png/CMakeLists.txt         |   1 +
 bitmaps_png/cpp_26/html.cpp        |  79 ++++
 bitmaps_png/sources/html.svg       | 859 +++++++++++++++++++++++++++++++++++++
 common/wildcards_and_files_ext.cpp |   2 +
 include/bitmaps.h                  |   1 +
 include/wildcards_and_files_ext.h  |   2 +
 kicad/class_treeproject_item.cpp   |   5 +-
 kicad/class_treeprojectfiles.cpp   |   1 +
 kicad/kicad.h                      |   1 +
 kicad/tree_project_frame.cpp       |   8 +
 10 files changed, 958 insertions(+), 1 deletion(-)

diff --git a/bitmaps_png/CMakeLists.txt b/bitmaps_png/CMakeLists.txt
index 8cc642a..7067585 100644
--- a/bitmaps_png/CMakeLists.txt
+++ b/bitmaps_png/CMakeLists.txt
@@ -286,6 +286,7 @@ set( BMAPS_MID
     hierarchy_cursor
     hierarchy_nav
     hotkeys
+    html
     icon_cvpcb_small
     icon_gerbview_small
     icon_txt
diff --git a/bitmaps_png/cpp_26/html.cpp b/bitmaps_png/cpp_26/html.cpp
new file mode 100644
index 0000000..18eb432
--- /dev/null
+++ b/bitmaps_png/cpp_26/html.cpp
@@ -0,0 +1,79 @@
+
+/* Do not modify this file, it was automatically generated by the
+ * PNG2cpp CMake script, using a *.png file as input.
+ */
+
+#include <bitmaps.h>
+
+static const unsigned char png[] = {
+0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52,
+ 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x1a, 0x08, 0x06, 0x00, 0x00, 0x00, 0xa9, 0x4a, 0x4c,
+ 0xce, 0x00, 0x00, 0x03, 0xe3, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0xbd, 0x96, 0x4d, 0x6c, 0x54,
+ 0x55, 0x14, 0xc7, 0x7f, 0x77, 0x66, 0xde, 0xcc, 0xf4, 0x23, 0x43, 0x5b, 0x3a, 0x2d, 0x05, 0xda,
+ 0x18, 0x6a, 0x95, 0x94, 0x50, 0xa2, 0xd4, 0x18, 0x17, 0x26, 0x9a, 0xa8, 0x41, 0x05, 0x45, 0x16,
+ 0xdd, 0x10, 0xa3, 0x1b, 0x24, 0x02, 0xd1, 0x04, 0x23, 0x36, 0xba, 0x68, 0xaa, 0x89, 0x92, 0x90,
+ 0x00, 0x2b, 0x95, 0xc4, 0x40, 0xdc, 0x18, 0x0d, 0xb8, 0x90, 0x8d, 0x81, 0xc4, 0x8f, 0x85, 0x68,
+ 0xc4, 0x08, 0x9a, 0xd4, 0xb6, 0xf6, 0x51, 0x8a, 0x65, 0x6c, 0x4b, 0x67, 0xa6, 0x9d, 0xe9, 0xbc,
+ 0x99, 0x79, 0x5f, 0xf7, 0x1d, 0x17, 0x1d, 0x8c, 0x9a, 0x60, 0x3b, 0x40, 0xb8, 0xc9, 0x59, 0xdc,
+ 0xdc, 0x73, 0xee, 0xef, 0xfe, 0x4f, 0xce, 0xb9, 0xf7, 0x2a, 0x11, 0xe1, 0x4e, 0x8c, 0x48, 0x35,
+ 0xce, 0x2f, 0xbc, 0xbc, 0x7f, 0x4d, 0x32, 0x51, 0x78, 0xa8, 0x58, 0x8a, 0x4f, 0x07, 0xae, 0x7b,
+ 0xf1, 0xd8, 0xb1, 0x63, 0xa5, 0xe5, 0xc6, 0xaa, 0xa5, 0x14, 0xf5, 0xf5, 0xf5, 0x85, 0xbb, 0x37,
+ 0xd4, 0x1c, 0xec, 0xd9, 0xb8, 0x72, 0xc7, 0xda, 0xb5, 0xd2, 0xb4, 0xaa, 0xb5, 0xd0, 0x50, 0x2a,
+ 0xd7, 0xfa, 0xb3, 0xe9, 0x96, 0x9c, 0x69, 0xe6, 0xa7, 0x46, 0x4d, 0xeb, 0xd5, 0x43, 0xef, 0x7d,
+ 0xf0, 0xed, 0x2d, 0x81, 0xf6, 0xec, 0xdf, 0xb3, 0xae, 0x67, 0xbd, 0x3e, 0xb9, 0xed, 0xa9, 0xc2,
+ 0xa6, 0xa6, 0x86, 0x4c, 0x58, 0xa9, 0x0e, 0x94, 0x6a, 0x43, 0x28, 0x11, 0xe8, 0x49, 0x74, 0x90,
+ 0x60, 0x7c, 0xa2, 0xbb, 0x70, 0xe6, 0xac, 0xf9, 0xe9, 0x1b, 0x07, 0x3e, 0x7c, 0xe9, 0xa6, 0x40,
+ 0x83, 0x83, 0x83, 0xa1, 0xe6, 0xe4, 0xd4, 0xf7, 0x2f, 0x3e, 0x3f, 0xfe, 0xa0, 0x11, 0xd9, 0x8c,
+ 0x0a, 0x6d, 0x04, 0x34, 0x82, 0x06, 0xd1, 0x08, 0x3e, 0x12, 0x64, 0xf0, 0x9c, 0x53, 0xcc, 0x2d,
+ 0xec, 0x72, 0x3f, 0x3a, 0x7e, 0xa1, 0xff, 0x9d, 0xc1, 0xe3, 0x47, 0x6e, 0x04, 0x0a, 0xdd, 0xf0,
+ 0x04, 0xe1, 0x2b, 0x07, 0x9f, 0xd9, 0x96, 0xee, 0x35, 0x8c, 0xfb, 0x21, 0xb4, 0x1e, 0xc1, 0x41,
+ 0xc4, 0x45, 0xc4, 0x43, 0x70, 0x01, 0x0f, 0x15, 0xaa, 0x45, 0x85, 0x57, 0xd1, 0xb8, 0xe2, 0x64,
+ 0xf4, 0x89, 0xc7, 0x7b, 0xdf, 0xdc, 0xbb, 0x77, 0x6f, 0x7b, 0xd5, 0xa0, 0xce, 0xce, 0xda, 0x2d,
+ 0xcd, 0x4d, 0xb3, 0x61, 0xe8, 0x02, 0xf1, 0x2a, 0x80, 0xeb, 0xe6, 0x2f, 0xce, 0xc5, 0x07, 0x55,
+ 0x0f, 0x32, 0x45, 0xf7, 0x7a, 0xa7, 0x39, 0x99, 0x74, 0xf6, 0x55, 0x05, 0xda, 0xbd, 0xbb, 0x7f,
+ 0x45, 0xf3, 0x4a, 0x9d, 0x44, 0x1a, 0x17, 0x95, 0xe0, 0x20, 0x2c, 0xaa, 0xf9, 0x17, 0x54, 0x3c,
+ 0x82, 0x60, 0x1e, 0x51, 0x06, 0x86, 0x71, 0x89, 0xf6, 0x8e, 0x96, 0x07, 0xaa, 0x02, 0xb9, 0x62,
+ 0xdf, 0xd3, 0xda, 0x92, 0x6b, 0x0c, 0x82, 0x3c, 0xc8, 0x3f, 0x00, 0x7f, 0xab, 0xd1, 0x88, 0x68,
+ 0x74, 0x70, 0x8d, 0x40, 0x0a, 0x80, 0x81, 0x70, 0x89, 0x55, 0xab, 0xdb, 0xda, 0xaa, 0x4b, 0x9d,
+ 0xa7, 0xcc, 0xd9, 0x74, 0x73, 0x5e, 0xeb, 0x14, 0x81, 0xcc, 0x2e, 0xaa, 0x61, 0x31, 0x55, 0x01,
+ 0x3e, 0x82, 0x8f, 0x96, 0x0c, 0x9e, 0x1e, 0xae, 0x40, 0x0c, 0x60, 0x0d, 0xf9, 0xf9, 0x85, 0x4c,
+ 0x55, 0xa0, 0x13, 0x27, 0x8e, 0xe4, 0xb2, 0xd9, 0xda, 0x39, 0xa8, 0xc7, 0xf3, 0xbe, 0x46, 0xeb,
+ 0x09, 0x22, 0x91, 0x27, 0x11, 0x9a, 0xf0, 0xdc, 0x59, 0x1c, 0x77, 0x04, 0xdb, 0x4e, 0x62, 0x97,
+ 0xf6, 0x23, 0x2a, 0x02, 0x44, 0xd0, 0xc1, 0x06, 0x26, 0xae, 0x4c, 0x9b, 0x55, 0x17, 0xc3, 0xe8,
+ 0x58, 0xee, 0xfd, 0xa9, 0x99, 0x47, 0x6c, 0x91, 0x12, 0xbe, 0xff, 0x33, 0x5a, 0xff, 0x84, 0xd6,
+ 0x93, 0x84, 0xc3, 0x9b, 0x51, 0x6c, 0x47, 0x29, 0x83, 0x44, 0xc3, 0xef, 0x80, 0x01, 0xac, 0xe4,
+ 0xd2, 0xe5, 0x8e, 0xf9, 0xd4, 0xa4, 0xf1, 0xf6, 0x4d, 0x35, 0xec, 0xe1, 0xa3, 0xaf, 0x7d, 0xb1,
+ 0x63, 0xbb, 0xb7, 0xb5, 0xa1, 0xe1, 0xc7, 0x50, 0xc4, 0x78, 0x14, 0x5f, 0x0f, 0x13, 0x08, 0x08,
+ 0x06, 0x46, 0xa4, 0x1b, 0xad, 0xc7, 0x41, 0x2c, 0xb2, 0xd9, 0x5d, 0xe5, 0x53, 0x9f, 0x7f, 0xf3,
+ 0x56, 0xff, 0xeb, 0x87, 0xab, 0xef, 0x23, 0x80, 0x42, 0x3e, 0xf1, 0xdc, 0x77, 0x3f, 0xb4, 0x0e,
+ 0x43, 0x0b, 0xae, 0x37, 0x4c, 0xb1, 0xd8, 0x80, 0x10, 0x01, 0x65, 0x90, 0xcb, 0xbb, 0x88, 0x94,
+ 0xf1, 0xfc, 0xc7, 0x38, 0x7d, 0xfa, 0xfc, 0xe9, 0xff, 0x83, 0x2c, 0x09, 0x1a, 0x18, 0x18, 0x08,
+ 0xc6, 0xc6, 0xae, 0x7d, 0x66, 0x95, 0xba, 0x51, 0xca, 0x62, 0x66, 0xc6, 0x06, 0x14, 0x05, 0x2b,
+ 0x82, 0x65, 0xa5, 0x11, 0x14, 0x73, 0xd9, 0x36, 0xe7, 0xd7, 0xdf, 0x0a, 0xef, 0x2e, 0x75, 0xd7,
+ 0x85, 0x96, 0x72, 0xf8, 0x73, 0xb2, 0xe6, 0xf8, 0xd0, 0x50, 0x73, 0x1a, 0x5a, 0xb0, 0xac, 0x2c,
+ 0xb6, 0xed, 0x33, 0x3e, 0x36, 0x47, 0x22, 0x61, 0xa1, 0x54, 0x27, 0x57, 0xfe, 0x70, 0xb3, 0xf1,
+ 0x50, 0x79, 0xe4, 0x96, 0x6f, 0x6f, 0x80, 0x7d, 0xaf, 0x3c, 0xfb, 0xe5, 0xd6, 0xa7, 0x1f, 0xde,
+ 0xb2, 0xe9, 0x3e, 0x45, 0x3c, 0xae, 0x11, 0x89, 0xe2, 0x38, 0x8d, 0x5c, 0xbc, 0xe0, 0x70, 0xf6,
+ 0xab, 0x73, 0x3b, 0x8f, 0x1e, 0xfa, 0xf8, 0x93, 0xdb, 0xf2, 0x1e, 0x95, 0x8b, 0xd3, 0xe5, 0x68,
+ 0xb4, 0x14, 0x9c, 0x3f, 0x5f, 0x1f, 0x72, 0x9d, 0x00, 0xdb, 0x59, 0xc0, 0x2e, 0xcf, 0x32, 0x6e,
+ 0x8e, 0xc8, 0xc4, 0xd8, 0xc8, 0xd0, 0x6d, 0x7b, 0xf8, 0x62, 0xf1, 0xe8, 0xea, 0x75, 0x9d, 0x3d,
+ 0xa1, 0xd6, 0xd6, 0xbb, 0xf1, 0xfd, 0x1c, 0xa9, 0x54, 0x8a, 0x91, 0xa1, 0x21, 0x86, 0xca, 0xa5,
+ 0x20, 0x08, 0x24, 0xbb, 0x9c, 0x3d, 0x42, 0xcb, 0x71, 0x9a, 0xcb, 0x5a, 0xbf, 0x14, 0xad, 0x9c,
+ 0x04, 0xe2, 0xe0, 0x6b, 0x4d, 0x24, 0xa2, 0xa8, 0xab, 0xaf, 0xa1, 0xbe, 0xae, 0x8e, 0x20, 0x50,
+ 0x6d, 0xb7, 0x0c, 0x52, 0x8b, 0xc3, 0x48, 0x24, 0xe2, 0x77, 0x39, 0xce, 0x02, 0x81, 0x76, 0x00,
+ 0xc1, 0xb6, 0x3d, 0xec, 0xb2, 0x87, 0xe3, 0x3a, 0x14, 0x8b, 0x6e, 0x8d, 0x52, 0x2a, 0xa6, 0x94,
+ 0x0a, 0x57, 0x5d, 0x0c, 0x4a, 0x29, 0x05, 0xc4, 0x81, 0x18, 0x10, 0x8b, 0xc5, 0xa8, 0xef, 0xed,
+ 0xed, 0xd8, 0xd9, 0xd9, 0xd9, 0x7d, 0xa0, 0xbd, 0x3d, 0x59, 0x97, 0x4e, 0xe7, 0x49, 0xa5, 0x66,
+ 0x4c, 0xd3, 0xbc, 0x3c, 0x60, 0x9a, 0x99, 0x8b, 0x80, 0x05, 0x38, 0x15, 0x2b, 0x8b, 0x88, 0xb7,
+ 0x5c, 0x45, 0xaa, 0xb2, 0x16, 0x06, 0xc2, 0x8e, 0x83, 0x71, 0xee, 0xdc, 0xe4, 0x99, 0x7c, 0x3e,
+ 0x76, 0xb6, 0xa6, 0xe6, 0xde, 0x39, 0xad, 0x93, 0xd3, 0xa3, 0xa3, 0x99, 0xa3, 0xa6, 0x99, 0x99,
+ 0x01, 0x6a, 0x81, 0x68, 0xc5, 0xf7, 0x7a, 0xcc, 0xf2, 0xcb, 0xbb, 0xa2, 0x2a, 0x5a, 0x51, 0x65,
+ 0x54, 0x2c, 0xdc, 0xd5, 0xd5, 0x95, 0xbc, 0x7a, 0xf5, 0xea, 0x82, 0x6d, 0xdb, 0x1e, 0xa0, 0x01,
+ 0x1f, 0xf0, 0x00, 0x17, 0x70, 0x44, 0xc4, 0xbf, 0xe9, 0x3e, 0xfa, 0x0f, 0x5c, 0x55, 0xa6, 0x22,
+ 0x55, 0x04, 0xab, 0x3b, 0xf5, 0x81, 0xfc, 0x0b, 0x80, 0xf8, 0x1d, 0x65, 0x6b, 0xc6, 0x6e, 0x3d,
+ 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82,
+};
+
+const BITMAP_OPAQUE html_xpm[1] = {{ png, sizeof( png ), "html_xpm" }};
+
+//EOF
diff --git a/bitmaps_png/sources/html.svg b/bitmaps_png/sources/html.svg
new file mode 100644
index 0000000..4d9d959
--- /dev/null
+++ b/bitmaps_png/sources/html.svg
@@ -0,0 +1,859 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/";
+   xmlns:cc="http://creativecommons.org/ns#";
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#";
+   xmlns:svg="http://www.w3.org/2000/svg";
+   xmlns="http://www.w3.org/2000/svg";
+   xmlns:xlink="http://www.w3.org/1999/xlink";
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd";
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape";
+   height="48"
+   width="48"
+   version="1.0"
+   id="svg2"
+   inkscape:version="0.48.4 r9939"
+   sodipodi:docname="info.svg">
+  <metadata
+     id="metadata318">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage"; />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <sodipodi:namedview
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1"
+     objecttolerance="10"
+     gridtolerance="10"
+     guidetolerance="10"
+     inkscape:pageopacity="0"
+     inkscape:pageshadow="2"
+     inkscape:window-width="879"
+     inkscape:window-height="699"
+     id="namedview316"
+     showgrid="false"
+     inkscape:zoom="6.1283168"
+     inkscape:cx="24.556468"
+     inkscape:cy="23.762921"
+     inkscape:window-x="0"
+     inkscape:window-y="0"
+     inkscape:window-maximized="0"
+     inkscape:current-layer="svg2" />
+  <defs
+     id="defs4">
+    <linearGradient
+       id="ai"
+       y2="37.227"
+       gradientUnits="userSpaceOnUse"
+       x2="30.17"
+       y1="37.227"
+       x1="18.995">
+      <stop
+         stop-color="#a3a349"
+         offset=".005618"
+         id="stop7" />
+      <stop
+         stop-color="#acac54"
+         offset=".020787"
+         id="stop9" />
+      <stop
+         stop-color="#c1c172"
+         offset=".066001"
+         id="stop11" />
+      <stop
+         stop-color="#d4d68e"
+         offset=".1148"
+         id="stop13" />
+      <stop
+         stop-color="#e2e4a6"
+         offset=".16770"
+         id="stop15" />
+      <stop
+         stop-color="#edf0b8"
+         offset=".2265"
+         id="stop17" />
+      <stop
+         stop-color="#f3f6c3"
+         offset=".29630"
+         id="stop19" />
+      <stop
+         stop-color="#f5f8c7"
+         offset=".40450"
+         id="stop21" />
+      <stop
+         stop-color="#eef0be"
+         offset=".52390"
+         id="stop23" />
+      <stop
+         stop-color="#dbdda9"
+         offset=".66660"
+         id="stop25" />
+      <stop
+         stop-color="#bebd88"
+         offset=".8211"
+         id="stop27" />
+      <stop
+         stop-color="#989564"
+         offset=".98320"
+         id="stop29" />
+      <stop
+         stop-color="#949160"
+         offset="1"
+         id="stop31" />
+    </linearGradient>
+    <linearGradient
+       id="aj">
+      <stop
+         stop-color="#929470"
+         offset="0"
+         id="stop34" />
+      <stop
+         stop-color="#fcffc1"
+         offset=".26471"
+         id="stop36" />
+      <stop
+         stop-color="#f3f5ba"
+         offset=".63235"
+         id="stop38" />
+      <stop
+         stop-color="#929470"
+         offset="1"
+         id="stop40" />
+    </linearGradient>
+    <linearGradient
+       id="ak">
+      <stop
+         stop-color="#fff"
+         offset="0"
+         id="stop43" />
+      <stop
+         stop-color="#fff"
+         stop-opacity=".44118"
+         offset=".41176"
+         id="stop45" />
+      <stop
+         stop-opacity=".48039"
+         offset="1"
+         id="stop47" />
+    </linearGradient>
+    <radialGradient
+       id="an"
+       gradientUnits="userSpaceOnUse"
+       cy="74.21"
+       cx="14.772"
+       gradientTransform="scale(1.7643 .5668)"
+       r="7.829">
+      <stop
+         stop-opacity=".51546"
+         offset="0"
+         id="stop50" />
+      <stop
+         stop-opacity=".14433"
+         offset=".55172"
+         id="stop52" />
+      <stop
+         stop-opacity="0"
+         offset="1"
+         id="stop54" />
+    </radialGradient>
+    <linearGradient
+       id="ba"
+       y2="43.165"
+       gradientUnits="userSpaceOnUse"
+       x2="26.478"
+       gradientTransform="matrix(1.6391,0,0,1.6391,-15.97,-29.794)"
+       y1="43.165"
+       x1="23.124">
+      <stop
+         stop-color="#686868"
+         offset=".005618"
+         id="stop57" />
+      <stop
+         stop-color="#777"
+         offset=".030121"
+         id="stop59" />
+      <stop
+         stop-color="#929292"
+         offset=".083666"
+         id="stop61" />
+      <stop
+         stop-color="#a7a7a7"
+         offset=".14220"
+         id="stop63" />
+      <stop
+         stop-color="#b6b6b6"
+         offset=".20740"
+         id="stop65" />
+      <stop
+         stop-color="#bebebe"
+         offset=".28460"
+         id="stop67" />
+      <stop
+         stop-color="#c1c1c1"
+         offset=".40450"
+         id="stop69" />
+      <stop
+         stop-color="#bcbcbc"
+         offset=".4962"
+         id="stop71" />
+      <stop
+         stop-color="#adadad"
+         offset=".60570"
+         id="stop73" />
+      <stop
+         stop-color="#959595"
+         offset=".7245"
+         id="stop75" />
+      <stop
+         stop-color="#747474"
+         offset=".84970"
+         id="stop77" />
+      <stop
+         stop-color="#494949"
+         offset=".97890"
+         id="stop79" />
+      <stop
+         stop-color="#414141"
+         offset="1"
+         id="stop81" />
+    </linearGradient>
+    <linearGradient
+       id="bb"
+       y2="26.74"
+       gradientUnits="userSpaceOnUse"
+       x2="24.613"
+       gradientTransform="scale(1.0027 .99735)"
+       y1="31.146"
+       x1="24.613">
+      <stop
+         stop-color="#4c4c28"
+         offset="0"
+         id="stop84" />
+      <stop
+         stop-color="#4c4c28"
+         stop-opacity="0"
+         offset="1"
+         id="stop86" />
+    </linearGradient>
+    <linearGradient
+       id="bc"
+       y2="38.676"
+       xlink:href="#ai"
+       gradientUnits="userSpaceOnUse"
+       x2="-4.3908"
+       gradientTransform="matrix(.56662 .02989 -.11856 .65654 36.185 20.083)"
+       y1="38.676"
+       x1="-22.874" />
+    <linearGradient
+       id="bd"
+       y2="39.143"
+       xlink:href="#aj"
+       gradientUnits="userSpaceOnUse"
+       x2="-23.851"
+       gradientTransform="matrix(.56662 .02989 -.11856 .65654 36.185 20.083)"
+       y1="39.034"
+       x1="-10.481" />
+    <linearGradient
+       id="al"
+       y2="38.676"
+       xlink:href="#ai"
+       gradientUnits="userSpaceOnUse"
+       x2="-4.3908"
+       gradientTransform="scale(1.0264 .97423)"
+       y1="38.676"
+       x1="-22.874" />
+    <linearGradient
+       id="am"
+       y2="39.143"
+       xlink:href="#aj"
+       gradientUnits="userSpaceOnUse"
+       x2="-23.851"
+       gradientTransform="scale(1.0264 .97423)"
+       y1="39.034"
+       x1="-10.481" />
+    <linearGradient
+       id="be"
+       y2="38.676"
+       xlink:href="#ai"
+       gradientUnits="userSpaceOnUse"
+       x2="-4.3908"
+       gradientTransform="matrix(.61868 -.13203 .062627 .74118 31.12 8.3004)"
+       y1="38.676"
+       x1="-22.874" />
+    <linearGradient
+       id="bf"
+       y2="39.143"
+       xlink:href="#aj"
+       gradientUnits="userSpaceOnUse"
+       x2="-23.851"
+       gradientTransform="matrix(.61868 -.13203 .062627 .74118 31.12 8.3004)"
+       y1="39.034"
+       x1="-10.481" />
+    <linearGradient
+       id="bg"
+       y2="54.863"
+       gradientUnits="userSpaceOnUse"
+       x2="11.906"
+       gradientTransform="matrix(1.6034 0 0 .5494 .61417 .024498)"
+       y1="55.363"
+       x1="17.88">
+      <stop
+         stop-color="#d6d7a5"
+         offset="0"
+         id="stop95" />
+      <stop
+         stop-color="#8e8f6d"
+         offset="1"
+         id="stop97" />
+    </linearGradient>
+    <linearGradient
+       id="bh"
+       y2="-29.598"
+       gradientUnits="userSpaceOnUse"
+       x2="-37.641"
+       gradientTransform="matrix(-.90573 -.043862 .18951 -.96344 .61417 .024498)"
+       y1="-29.799"
+       x1="-29.007">
+      <stop
+         stop-color="#929470"
+         offset="0"
+         id="stop100" />
+      <stop
+         stop-color="#60614a"
+         offset=".26471"
+         id="stop102" />
+      <stop
+         stop-color="#f3f5ba"
+         offset=".63235"
+         id="stop104" />
+      <stop
+         stop-color="#929470"
+         offset="1"
+         id="stop106" />
+    </linearGradient>
+    <radialGradient
+       id="ay"
+       gradientUnits="userSpaceOnUse"
+       cy="29.869"
+       cx="68.138"
+       gradientTransform="matrix(.55129 0 0 .76603 -10.487 3.5143)"
+       r="33.934">
+      <stop
+         stop-color="#fff"
+         stop-opacity=".17526"
+         offset="0"
+         id="stop109" />
+      <stop
+         stop-color="#709ac8"
+         offset="0.882"
+         id="stop111" />
+      <stop
+         stop-color="#6f96dd"
+         offset="1"
+         id="stop113" />
+    </radialGradient>
+    <linearGradient
+       id="bi"
+       y2="3.8557"
+       gradientUnits="userSpaceOnUse"
+       x2="-5.2517"
+       gradientTransform="matrix(.89413 0 0 .98523 1.516 .024498)"
+       y1="16.652"
+       x1="37.94">
+      <stop
+         stop-color="#f1f3ff"
+         offset="0"
+         id="stop116" />
+      <stop
+         stop-color="#f1f3ff"
+         stop-opacity="0"
+         offset="1"
+         id="stop118" />
+    </linearGradient>
+    <linearGradient
+       id="bj"
+       y2="18.163"
+       xlink:href="#ak"
+       gradientUnits="userSpaceOnUse"
+       x2="32.166"
+       gradientTransform="matrix(-.6293 0 0 1.5891 50.688 3.8044)"
+       y1="10.314"
+       x1="30.62" />
+    <linearGradient
+       id="bk"
+       y2="18.163"
+       xlink:href="#ak"
+       gradientUnits="userSpaceOnUse"
+       x2="32.166"
+       gradientTransform="matrix(.6293 0 0 1.5891 1.4116 3.9294)"
+       y1="10.314"
+       x1="30.62" />
+    <linearGradient
+       id="bl"
+       y2="32.251"
+       gradientUnits="userSpaceOnUse"
+       x2="9.3648"
+       gradientTransform="matrix(1.9851 0 0 .50376 1.7866 4.5544)"
+       y1="31.504"
+       x1="14.637">
+      <stop
+         stop-color="#a3a3a3"
+         offset="0"
+         id="stop123" />
+      <stop
+         stop-color="#b5b5b5"
+         stop-opacity="0"
+         offset="1"
+         id="stop125" />
+    </linearGradient>
+    <linearGradient
+       id="bm"
+       y2="36.726"
+       gradientUnits="userSpaceOnUse"
+       x2="32.097"
+       gradientTransform="matrix(1.1405 0 0 .926 .27233 -3.2472)"
+       y1="10.061"
+       x1="16.999">
+      <stop
+         stop-color="#fff"
+         offset="0"
+         id="stop128" />
+      <stop
+         stop-color="#fff"
+         stop-opacity="0"
+         offset="1"
+         id="stop130" />
+    </linearGradient>
+    <linearGradient
+       id="bn"
+       y2="43.165"
+       gradientUnits="userSpaceOnUse"
+       x2="26.478"
+       gradientTransform="matrix(1.5715,0,0,1.3608,-102.46,-17.647)"
+       y1="43.165"
+       x1="23.124">
+      <stop
+         stop-color="#686868"
+         offset=".005618"
+         id="stop133" />
+      <stop
+         stop-color="#777"
+         offset=".030121"
+         id="stop135" />
+      <stop
+         stop-color="#929292"
+         offset=".083666"
+         id="stop137" />
+      <stop
+         stop-color="#a7a7a7"
+         offset=".14220"
+         id="stop139" />
+      <stop
+         stop-color="#b6b6b6"
+         offset=".20740"
+         id="stop141" />
+      <stop
+         stop-color="#bebebe"
+         offset=".28460"
+         id="stop143" />
+      <stop
+         stop-color="#c1c1c1"
+         offset=".40450"
+         id="stop145" />
+      <stop
+         stop-color="#bcbcbc"
+         offset=".4962"
+         id="stop147" />
+      <stop
+         stop-color="#adadad"
+         offset=".60570"
+         id="stop149" />
+      <stop
+         stop-color="#959595"
+         offset=".7245"
+         id="stop151" />
+      <stop
+         stop-color="#747474"
+         offset=".84970"
+         id="stop153" />
+      <stop
+         stop-color="#494949"
+         offset=".97890"
+         id="stop155" />
+      <stop
+         stop-color="#414141"
+         offset="1"
+         id="stop157" />
+    </linearGradient>
+    <linearGradient
+       id="bo"
+       y2="26.74"
+       gradientUnits="userSpaceOnUse"
+       x2="24.613"
+       gradientTransform="matrix(.88375 0 0 .87752 -85.239 4.3964)"
+       y1="31.146"
+       x1="24.613">
+      <stop
+         stop-color="#4c4c28"
+         offset="0"
+         id="stop160" />
+      <stop
+         stop-color="#4c4c28"
+         stop-opacity="0"
+         offset="1"
+         id="stop162" />
+    </linearGradient>
+    <linearGradient
+       id="bp"
+       y2="38.676"
+       xlink:href="#ai"
+       gradientUnits="userSpaceOnUse"
+       x2="-4.3908"
+       gradientTransform="matrix(.49943 .026299 -.1045 .57766 -53.345 22.067)"
+       y1="38.676"
+       x1="-22.874" />
+    <linearGradient
+       id="ao"
+       y2="39.143"
+       xlink:href="#aj"
+       gradientUnits="userSpaceOnUse"
+       x2="-23.851"
+       gradientTransform="matrix(.49943 .026299 -.1045 .57766 -53.345 22.067)"
+       y1="39.034"
+       x1="-10.481" />
+    <linearGradient
+       id="ap"
+       y2="38.676"
+       xlink:href="#ai"
+       gradientUnits="userSpaceOnUse"
+       x2="-4.3908"
+       gradientTransform="matrix(.54531 -.11616 .0552 .65213 -57.809 11.7)"
+       y1="38.676"
+       x1="-22.874" />
+    <linearGradient
+       id="aq"
+       y2="39.143"
+       xlink:href="#aj"
+       gradientUnits="userSpaceOnUse"
+       x2="-23.851"
+       gradientTransform="matrix(.54531 -.11616 .0552 .65213 -57.809 11.7)"
+       y1="39.034"
+       x1="-10.481" />
+    <linearGradient
+       id="ar"
+       y2="54.863"
+       gradientUnits="userSpaceOnUse"
+       x2="11.906"
+       gradientTransform="matrix(1.3638 0 0 .48159 -83.956 4.9775)"
+       y1="55.363"
+       x1="17.88">
+      <stop
+         stop-color="#d6d7a5"
+         offset="0"
+         id="stop169" />
+      <stop
+         stop-color="#8e8f6d"
+         offset="1"
+         id="stop171" />
+    </linearGradient>
+    <linearGradient
+       id="as"
+       y2="37.227"
+       gradientUnits="userSpaceOnUse"
+       x2="30.17"
+       gradientTransform="matrix(.85055 0 0 .87659 -84.479 4.956)"
+       y1="37.227"
+       x1="18.995">
+      <stop
+         stop-color="#a3a349"
+         offset=".005618"
+         id="stop174" />
+      <stop
+         stop-color="#acac54"
+         offset=".020787"
+         id="stop176" />
+      <stop
+         stop-color="#c1c172"
+         offset=".066001"
+         id="stop178" />
+      <stop
+         stop-color="#d4d68e"
+         offset=".1148"
+         id="stop180" />
+      <stop
+         stop-color="#e2e4a6"
+         offset=".16770"
+         id="stop182" />
+      <stop
+         stop-color="#edf0b8"
+         offset=".2265"
+         id="stop184" />
+      <stop
+         stop-color="#f3f6c3"
+         offset=".29630"
+         id="stop186" />
+      <stop
+         stop-color="#f5f8c7"
+         offset=".40450"
+         id="stop188" />
+      <stop
+         stop-color="#eef0be"
+         offset=".52390"
+         id="stop190" />
+      <stop
+         stop-color="#dbdda9"
+         offset=".66660"
+         id="stop192" />
+      <stop
+         stop-color="#bebd88"
+         offset=".8211"
+         id="stop194" />
+      <stop
+         stop-color="#989564"
+         offset=".98320"
+         id="stop196" />
+      <stop
+         stop-color="#949160"
+         offset="1"
+         id="stop198" />
+    </linearGradient>
+    <radialGradient
+       id="az"
+       gradientUnits="userSpaceOnUse"
+       cy="29.869"
+       cx="68.138"
+       gradientTransform="matrix(.4689 0 0 .6715 -93.398 8.0366)"
+       r="33.934">
+      <stop
+         stop-color="#ebf15f"
+         offset="0"
+         id="stop201" />
+      <stop
+         stop-color="#f2ee19"
+         offset="0.882"
+         id="stop203" />
+      <stop
+         stop-color="#f7f50d"
+         offset="1"
+         id="stop205" />
+    </radialGradient>
+    <linearGradient
+       id="at"
+       y2="3.8557"
+       gradientUnits="userSpaceOnUse"
+       x2="-5.2517"
+       gradientTransform="matrix(.7605 0 0 .86364 -83.189 4.9775)"
+       y1="16.652"
+       x1="37.94">
+      <stop
+         stop-color="#f1f3ff"
+         offset="0"
+         id="stop208" />
+      <stop
+         stop-color="#f1f3ff"
+         stop-opacity="0"
+         offset="1"
+         id="stop210" />
+    </linearGradient>
+    <linearGradient
+       id="au"
+       y2="18.163"
+       xlink:href="#ak"
+       gradientUnits="userSpaceOnUse"
+       x2="32.166"
+       gradientTransform="matrix(-.52575 0 0 1.3044 -42.901 7.7352)"
+       y1="10.314"
+       x1="30.62" />
+    <linearGradient
+       id="av"
+       y2="18.163"
+       xlink:href="#ak"
+       gradientUnits="userSpaceOnUse"
+       x2="32.166"
+       gradientTransform="matrix(.52575 0 0 1.3044 -84.069 7.8378)"
+       y1="10.314"
+       x1="30.62" />
+    <linearGradient
+       id="aw"
+       y2="32.251"
+       gradientUnits="userSpaceOnUse"
+       x2="9.3648"
+       gradientTransform="matrix(1.6584 0 0 .41351 -83.756 8.3508)"
+       y1="31.504"
+       x1="14.637">
+      <stop
+         stop-color="#a3a3a3"
+         offset="0"
+         id="stop215" />
+      <stop
+         stop-color="#b5b5b5"
+         stop-opacity="0"
+         offset="1"
+         id="stop217" />
+    </linearGradient>
+    <linearGradient
+       id="ax"
+       y2="36.726"
+       gradientUnits="userSpaceOnUse"
+       x2="32.097"
+       gradientTransform="matrix(.97004 0 0 .81172 -84.247 2.1096)"
+       y1="10.061"
+       x1="16.999">
+      <stop
+         stop-color="#fff"
+         offset="0"
+         id="stop220" />
+      <stop
+         stop-color="#fff"
+         stop-opacity="0"
+         offset="1"
+         id="stop222" />
+    </linearGradient>
+  </defs>
+  <g
+     transform="matrix(1.0407,0,0,1.0443,89.699,-2.4836)"
+     id="g276">
+    <path
+       opacity=".8"
+       style="color:#000000"
+       d="m39.875 42.062a13.812 4.4381 0 1 1 -27.625 0 13.812 4.4381 0 1 1 27.625 0z"
+       transform="matrix(1.0669 0 0 .97287 -90.401 .66159)"
+       fill="url(#an)"
+       id="path278" />
+    <path
+       d="m-66.159 39.371v1.2247c0 1.2247 1.2572 2.3134 2.6715 2.3134s2.6715-1.0887 2.6715-2.3134v-1.225h-5.343z"
+       stroke="#565656"
+       stroke-width=".89215"
+       fill="url(#bn)"
+       id="path280" />
+    <path
+       stroke-linejoin="round"
+       style="color:#000000"
+       d="m-63.634 28.741c-2.9112-0.007-6.2126 0.84746-4.4236 2.4628-0.44355 0.17861-1.0776 0.57752-1.0028 1.511 0.04127 0.48749 0.55888 0.78674 1.2668 1.0065-0.80248 0.56188-1.3131 1.1556-1.2668 1.7032 0.04078 0.48181 0.5475 0.81176 1.2409 1.0323-0.78226 0.55542-1.2866 1.1631-1.2409 1.7032 0.06987 0.82542 1.8532 1.75 5.7148 1.6435 2.7803-0.07566 5.2338-0.57312 5.4274-1.6435 0.07603-0.42031-0.26856-0.81247-0.80142-1.1613 0.3989-0.40136 0.67836-0.80844 0.6463-1.1871-0.04098-0.48408-0.54173-0.81206-1.2409-1.0323 0.78226-0.55542 1.2866-1.1631 1.2409-1.7032-0.04098-0.48408-0.54173-0.78626-1.2409-1.0065 0.79159-0.55842 1.2869-1.1597 1.2409-1.7032-0.05114-0.6042-2.8246-1.6187-5.5607-1.6253z"
+       stroke="url(#bo)"
+       stroke-linecap="round"
+       stroke-width="1.7767"
+       fill="#aeae57"
+       id="path282" />
+    <path
+       stroke-linejoin="round"
+       style="color:#000000"
+       d="m-57.986 38.121c-0.19363 1.0704-2.934 1.6744-7.3202 1.4552-2.7779-0.13886-2.9368-0.91471-2.7432-1.9851 0.19363-1.0704 2.605-1.8204 5.3825-1.6742 2.7775 0.14626 4.8745 1.1337 4.6809 2.2041z"
+       stroke="url(#ao)"
+       stroke-linecap="round"
+       stroke-width=".078431"
+       fill="url(#bp)"
+       id="path284" />
+    <path
+       stroke-linejoin="round"
+       style="color:#000000"
+       d="m-3.5355 27.229a10.342 3.2706 0 1 1 -20.683 0 10.342 3.2706 0 1 1 20.683 0z"
+       transform="matrix(.53126 -.11317 .05666 .66938 -57.809 17.147)"
+       stroke="url(#am)"
+       stroke-linecap="round"
+       stroke-width=".13035"
+       fill="url(#al)"
+       id="path286" />
+    <path
+       stroke-linejoin="round"
+       style="color:#000000"
+       d="m-3.5355 27.229a10.342 3.2706 0 1 1 -20.683 0 10.342 3.2706 0 1 1 20.683 0z"
+       transform="matrix(.53126 -.11317 .05666 .66938 -57.809 14.423)"
+       stroke="url(#am)"
+       stroke-linecap="round"
+       stroke-width=".13035"
+       fill="url(#al)"
+       id="path288" />
+    <path
+       stroke-linejoin="round"
+       style="color:#000000"
+       d="m-58.181 30.472c0 1.2127-2.2395 2.5675-5.2721 3.2135-3.0327 0.64603-5.577 0.18962-5.6793-1.0188-0.10228-1.2084 1.9713-2.6179 5.0057-2.7821 3.0585-0.16551 5.9457-0.03865 5.9457 0.58735z"
+       stroke="url(#aq)"
+       stroke-linecap="round"
+       stroke-width=".078432"
+       fill="url(#ap)"
+       id="path290" />
+    <path
+       style="color:#000000"
+       fill="#fff"
+       d="m31 22.375a3.25 3.25 0 1 1 -6.5 0 3.25 3.25 0 1 1 6.5 0z"
+       transform="matrix(.29568 0 0 .29516 -74.885 28.351)"
+       id="path292" />
+    <path
+       fill-opacity=".23392"
+       fill-rule="evenodd"
+       d="m-68.191 33.765c2.9919 0.44403 6.1512-0.02875 8.7014-1.6788 0.71506-0.46267 0.82261-0.99147 1.1517-1.4051-1.2552 0.99147-4.4299 3.6618-9.853 3.0839z"
+       id="path294" />
+    <path
+       style="color:#000000"
+       fill="#fff"
+       d="m31 22.375a3.25 3.25 0 1 1 -6.5 0 3.25 3.25 0 1 1 6.5 0z"
+       transform="matrix(.29568 0 0 .29516 -74.885 30.998)"
+       id="path296" />
+    <path
+       fill-opacity=".23392"
+       fill-rule="evenodd"
+       d="m-68.081 39.166c2.9919 0.44403 6.1512-0.02875 8.7014-1.6788 0.71506-0.46267 0.82261-0.99147 1.1517-1.4051-1.2552 0.99147-4.4299 3.6618-9.853 3.0839z"
+       id="path298" />
+    <path
+       fill-opacity=".23392"
+       fill-rule="evenodd"
+       d="m-68.063 36.429c2.9919 0.44403 6.1512-0.02875 8.7014-1.6788 0.71506-0.46267 0.82261-0.99147 1.1517-1.4051-1.2552 0.99147-4.4299 3.6618-9.853 3.0839z"
+       id="path300" />
+    <path
+       stroke-linejoin="round"
+       style="color:#000000"
+       d="m-68.428 30.928c0-0.69376 1.3388-1.5236 4.719-1.4772 3.1316 0.04303 5.1946 0.78515 5.1946 1.8956 0 1.0869-2.7382 1.8137-5.6578 1.668-2.9196-0.14571-4.2558-0.99947-4.2558-2.0863z"
+       stroke="url(#as)"
+       stroke-linecap="round"
+       stroke-width=".078431"
+       fill="url(#ar)"
+       id="path302" />
+    <path
+       stroke-linejoin="round"
+       style="color:#000000"
+       d="m-63.487 5.7119c-6.653 0-12.055 5.2376-12.055 11.688 0 6.6117 4.8835 7.344 4.8835 9.7807 0 2.863 2.8632 6.1095 7.5711 5.9924 5.0062-0.12462 7.0722-2.9483 7.0722-5.9924 0-2.6025 4.5841-2.6719 4.5841-9.7807 0-6.45-5.4024-11.688-12.055-11.688z"
+       stroke="#616471"
+       stroke-linecap="round"
+       stroke-width=".87724"
+       fill="url(#az)"
+       id="path304" />
+    <path
+       stroke-linejoin="round"
+       style="color:#000000"
+       d="m-63.487 6.6458c-6.2005 0-11.236 4.8814-11.236 10.893 0 6.162 4.5513 6.8445 4.5513 9.1155 0 2.6683 2.6684 5.694 7.0562 5.5848 4.6657-0.11614 6.5912-2.7477 6.5912-5.5848 0-2.4255 4.2723-2.4902 4.2723-9.1155 0-6.0113-5.035-10.893-11.236-10.893z"
+       stroke="url(#at)"
+       stroke-linecap="round"
+       stroke-width=".81758"
+       fill="none"
+       id="path306" />
+    <path
+       fill="url(#au)"
+       d="m-58.558 20.391c0.26128 0.08557 0.43547 0.34229 0.34837 0.59901l-3.2225 9.4985c-0.08709 0.25672-0.34837 0.42786-0.60965 0.34229s-0.43547-0.34229-0.34837-0.59901l3.2225-9.4985c0.08709-0.25672 0.34837-0.42786 0.60965-0.34229z"
+       id="path308" />
+    <path
+       fill="url(#av)"
+       d="m-68.412 20.494c-0.26128 0.08557-0.43547 0.34229-0.34837 0.59901l3.2225 9.4985c0.08709 0.25672 0.34837 0.42786 0.60965 0.34229s0.43547-0.34229 0.34837-0.599l-3.2225-9.4985c-0.08709-0.25672-0.34837-0.42786-0.60965-0.34229z"
+       id="path310" />
+    <path
+       stroke-linejoin="round"
+       d="m-68.326 20.433c-0.20545 0.03453-0.36639 0.19261-0.40161 0.39445-0.03521 0.20184 0.06295 0.40357 0.24496 0.50336 0 0 1.5391 0.88724 3.5507 1.3339s4.5857 0.47563 6.527-1.3852c0.14641-0.11413 0.21429-0.29995 0.17515-0.47951-0.03914-0.17955-0.17852-0.32177-0.35966-0.36697s-0.3727 0.01443-0.49429 0.15388c-1.6296 1.5621-3.797 1.5634-5.6393 1.1543-1.8423-0.40907-3.2635-1.2313-3.2635-1.2313-0.09978-0.0655-0.2205-0.09287-0.3394-0.07696z"
+       stroke="url(#aw)"
+       stroke-linecap="round"
+       stroke-width=".17767"
+       fill="#fff"
+       id="path312" />
+    <path
+       opacity=".59777"
+       style="color:#000000"
+       fill="url(#ax)"
+       d="m-63.214 8.0805c-5.3274 0-9.6501 3.5288-9.6501 7.8747 0 1.7357 0.83146 3.2556 1.9993 4.5575 1.3206 0.55388 2.759 0.95189 4.3452 0.95189 5.3274 0 9.6501-3.5288 9.6501-7.8747 0-1.7462-0.84528-3.2802-2.026-4.5864-1.3145-0.54732-2.7424-0.92305-4.3186-0.92305z"
+       id="path314" />
+  </g>
+</svg>
diff --git a/common/wildcards_and_files_ext.cpp b/common/wildcards_and_files_ext.cpp
index de343ec..80326d3 100644
--- a/common/wildcards_and_files_ext.cpp
+++ b/common/wildcards_and_files_ext.cpp
@@ -43,6 +43,7 @@ const wxString SchematicFileExtension( wxT( "sch" ) );
 const wxString NetlistFileExtension( wxT( "net" ) );
 const wxString ComponentFileExtension( wxT( "cmp" ) );
 const wxString GerberFileExtension( wxT( ".((gbr|(gb|gt)[alops])|pho)" ) );
+const wxString HtmlFileExtension( wxT( "html" ) );
 
 const wxString LegacyPcbFileExtension( wxT( "brd" ) );
 const wxString KiCadPcbFileExtension( wxT( "kicad_pcb" ) );
@@ -93,6 +94,7 @@ const wxString ComponentFileWildcard( _( "KiCad cmp/footprint link files (*.cmp)
 // Wildcard for reports and fabrication documents
 const wxString DrillFileWildcard( _( "Drill files (*.drl)|*.drl;*.DRL" ) );
 const wxString SVGFileWildcard( _( "SVG files (*.svg)|*.svg;*.SVG" ) );
+const wxString HtmlFileWildcard( _( "HTML files (*.html)|*.htm;*.html" ) );
 const wxString PdfFileWildcard( _( "Portable document format files (*.pdf)|*.pdf" ) );
 const wxString PSFileWildcard( _( "PostScript files (.ps)|*.ps" ) );
 const wxString ReportFileWildcard = _( "Report files (*.rpt)|*.rpt" );
diff --git a/include/bitmaps.h b/include/bitmaps.h
index 25b3751..c0711c8 100644
--- a/include/bitmaps.h
+++ b/include/bitmaps.h
@@ -243,6 +243,7 @@ EXTERN_BITMAP( hidden_pin_xpm )
 EXTERN_BITMAP( hierarchy_cursor_xpm )
 EXTERN_BITMAP( hierarchy_nav_xpm )
 EXTERN_BITMAP( hotkeys_xpm )
+EXTERN_BITMAP( html_xpm )
 EXTERN_BITMAP( icon_cvpcb_small_xpm )
 EXTERN_BITMAP( icon_cvpcb_xpm )
 EXTERN_BITMAP( icon_eeschema_xpm )
diff --git a/include/wildcards_and_files_ext.h b/include/wildcards_and_files_ext.h
index 94ad151..63b43fc 100644
--- a/include/wildcards_and_files_ext.h
+++ b/include/wildcards_and_files_ext.h
@@ -51,6 +51,7 @@ extern const wxString ProjectFileExtension;
 extern const wxString SchematicFileExtension;
 extern const wxString NetlistFileExtension;
 extern const wxString GerberFileExtension;
+extern const wxString HtmlFileExtension;
 
 extern const wxString LegacyPcbFileExtension;
 extern const wxString KiCadPcbFileExtension;
@@ -81,6 +82,7 @@ extern const wxString SchematicFileWildcard;
 extern const wxString BoardFileWildcard;
 extern const wxString NetlistFileWildcard;
 extern const wxString GerberFileWildcard;
+extern const wxString HtmlFileWildcard;
 extern const wxString LegacyPcbFileWildcard;
 extern const wxString PcbFileWildcard;
 extern const wxString EaglePcbFileWildcard;
diff --git a/kicad/class_treeproject_item.cpp b/kicad/class_treeproject_item.cpp
index 24a7aa1..2ea7784 100644
--- a/kicad/class_treeproject_item.cpp
+++ b/kicad/class_treeproject_item.cpp
@@ -49,7 +49,6 @@ TREEPROJECT_ITEM::TREEPROJECT_ITEM( enum TreeFileType type, const wxString& data
     wxTreeItemData()
 {
     m_parent = parent;
-
     SetType( type );
     SetFileName( data );
     SetRootFile( false );    // true only for the root item of the tree (the project name)
@@ -218,6 +217,10 @@ void TREEPROJECT_ITEM::Activate( TREE_PROJECT_FRAME* prjframe )
         frame->Execute( m_parent, GERBVIEW_EXE, fullFileName );
         break;
 
+    case TREE_HTML:
+        wxLaunchDefaultBrowser( fullFileName );
+        break;
+
     case TREE_PDF:
         OpenPDF( fullFileName );
         break;
diff --git a/kicad/class_treeprojectfiles.cpp b/kicad/class_treeprojectfiles.cpp
index b67db30..1d2b317 100644
--- a/kicad/class_treeprojectfiles.cpp
+++ b/kicad/class_treeprojectfiles.cpp
@@ -65,6 +65,7 @@ TREEPROJECTFILES::TREEPROJECTFILES( TREE_PROJECT_FRAME* parent ) :
     m_ImageList->Add( KiBitmap( pcbnew_xpm ) );                 // TREE_LEGACY_PCB
     m_ImageList->Add( KiBitmap( pcbnew_xpm ) );                 // TREE_SFMT_PCB
     m_ImageList->Add( KiBitmap( icon_gerbview_small_xpm ) );    // TREE_GERBER
+    m_ImageList->Add( KiBitmap( html_xpm ) );                   // TREE_HTML
     m_ImageList->Add( KiBitmap( datasheet_xpm ) );              // TREE_PDF
     m_ImageList->Add( KiBitmap( icon_txt_xpm ) );               // TREE_TXT
     m_ImageList->Add( KiBitmap( netlist_xpm ) );                // TREE_NET
diff --git a/kicad/kicad.h b/kicad/kicad.h
index a9018a4..abdbcf6 100644
--- a/kicad/kicad.h
+++ b/kicad/kicad.h
@@ -64,6 +64,7 @@ enum TreeFileType {
     TREE_LEGACY_PCB,        // board file (.brd) legacy format
     TREE_SEXP_PCB,          // board file (.kicad_brd) new s expression format
     TREE_GERBER,            // Gerber  file (.pho, .g*)
+    TREE_HTML,              // HTML file (.htm, *.html)
     TREE_PDF,               // PDF file (.pdf)
     TREE_TXT,               // ascii text file (.txt)
     TREE_NET,               // netlist file (.net)
diff --git a/kicad/tree_project_frame.cpp b/kicad/tree_project_frame.cpp
index c02d681..0486b3c 100644
--- a/kicad/tree_project_frame.cpp
+++ b/kicad/tree_project_frame.cpp
@@ -258,6 +258,10 @@ wxString TREE_PROJECT_FRAME::GetFileExt( TreeFileType type )
         ext = GerberFileExtension;
         break;
 
+    case TREE_HTML:
+        ext = HtmlFileExtension;
+        break;
+
     case TREE_PDF:
         ext = PdfFileExtension;
         break;
@@ -336,6 +340,10 @@ wxString TREE_PROJECT_FRAME::GetFileWildcard( TreeFileType type )
         ext = GerberFileWildcard;
         break;
 
+    case TREE_HTML:
+        ext = HtmlFileWildcard;
+        break;
+
     case TREE_PDF:
         ext = PdfFileWildcard;
         break;

Follow ups