← Back to team overview

kicad-developers team mailing list archive

Re: Feature freeze.

 

On 03/30/2015 12:00 AM, Tomasz Wlostowski wrote:
> Hi Wayne,
> 
> Some time ago I modified a bit the REPORTER class: added message
> severity levels & a wxHtmlView widget to filter/display them (see
> attached drawing showing the new report panel integrated with the
> netlist dialog). Do you agree to merge it?
> 
> Cheers,
> Tom

I enclose Tom's patch rebased on the current revision. I can merge it,
if there are no further objections.

Regards,
Orson
=== modified file '3d-viewer/3d_draw.cpp'
--- old/3d-viewer/3d_draw.cpp	2015-04-17 13:12:59.042999000 +0200
+++ new/3d-viewer/3d_draw.cpp	2015-06-15 16:24:55.273999000 +0200
@@ -86,13 +86,10 @@ public:
         REPORTER(),
         m_frame( aFrame ), m_position( aPosition )
     {
-        SetReportAll( true );
-        SetReportWarnings( true );
-        SetReportErrors( true );
         m_hasMessage = false;
     }
 
-    REPORTER& Report( const wxString& aText )
+    REPORTER& Report( const wxString& aText, SEVERITY aSeverity = UNDEFINED )
     {
         if( !aText.IsEmpty() )
             m_hasMessage = true;
@@ -298,8 +295,6 @@ void EDA_3D_CANVAS::Redraw()
     wxString err_messages;
     WX_STRING_REPORTER errorReporter( &err_messages );
     STATUS_TEXT_REPORTER activityReporter( Parent(), 0 );
-    errorReporter.SetReportAll( false );
-    errorReporter.SetReportWarnings( m_reportWarnings );
 
     // Display build time at the end of build
     unsigned strtime = GetRunningMicroSecs();
@@ -622,7 +617,6 @@ void EDA_3D_CANVAS::Redraw()
     if( !err_messages.IsEmpty() )
         wxLogMessage( err_messages );
 
-    ReportWarnings( false );
 }
 
 
@@ -730,11 +724,13 @@ void EDA_3D_CANVAS::buildBoard3DView( GL
 
     if( !pcb->GetBoardPolygonOutlines( bufferPcbOutlines, allLayerHoles, &msg ) )
     {
-        if( aErrorMessages && aErrorMessages->ReportWarnings() )
+        if( aErrorMessages )
         {
-            *aErrorMessages << msg << wxT("\n") <<
+            msg << wxT("\n") <<
                 _("Unable to calculate the board outlines.\n"
                   "Therefore use the board boundary box.") << wxT("\n\n");
+
+            aErrorMessages->Report( msg, REPORTER::WARNING );
         }
     }
 
@@ -1082,11 +1078,12 @@ void EDA_3D_CANVAS::buildTechLayers3DVie
 
     if( !pcb->GetBoardPolygonOutlines( bufferPcbOutlines, allLayerHoles, &msg ) )
     {
-        if( aErrorMessages && aErrorMessages->ReportWarnings() )
+        if( aErrorMessages )
         {
-            *aErrorMessages << msg << wxT("\n") <<
+            msg << wxT("\n") <<
                 _("Unable to calculate the board outlines.\n"
                   "Therefore use the board boundary box.") << wxT("\n\n");
+            aErrorMessages->Report( msg, REPORTER::WARNING );
         }
     }
 
@@ -1432,10 +1429,7 @@ void EDA_3D_CANVAS::CreateDrawGL_List( R
         glNewList( m_glLists[GL_ID_TECH_LAYERS], GL_COMPILE );
         // when calling BuildTechLayers3DView,
         // do not show warnings, which are the same as buildBoard3DView
-        bool report_warn = aErrorMessages->ReportWarnings();
-        aErrorMessages->SetReportWarnings( false );
         buildTechLayers3DView( aErrorMessages, aActivity );
-        aErrorMessages->SetReportWarnings( report_warn );
         glEndList();
         CheckGLError( __FILE__, __LINE__ );
 
=== modified file 'common/CMakeLists.txt'
--- old/common/CMakeLists.txt	2015-06-12 17:12:02.325999000 +0200
+++ new/common/CMakeLists.txt	2015-06-15 16:24:55.273999000 +0200
@@ -130,6 +130,8 @@ set( COMMON_ABOUT_DLG_SRCS
     dialogs/dialog_page_settings_base.cpp
     dialogs/dialog_env_var_config_base.cpp
     dialogs/dialog_env_var_config.cpp
+    dialogs/wx_html_report_panel_base.cpp
+    dialogs/wx_html_report_panel.cpp
     )
 
 set( COMMON_PAGE_LAYOUT_SRCS
=== modified file 'common/common.cpp'
--- old/common/common.cpp	2015-06-14 19:58:57.180000000 +0200
+++ new/common/common.cpp	2015-06-15 16:24:55.273999000 +0200
@@ -415,10 +415,10 @@ bool EnsureFileDirectoryExists( wxFileNa
     {
         if( aReporter )
         {
-            msg.Printf( _( "*** Error: cannot make path '%s' absolute with respect to '%s'! ***" ),
+            msg.Printf( _( "Cannot make path '%s' absolute with respect to '%s'." ),
                         GetChars( aTargetFullFileName->GetPath() ),
                         GetChars( baseFilePath ) );
-            aReporter->Report( msg );
+            aReporter->Report( msg, REPORTER::ERROR );
         }
 
         return false;
@@ -434,7 +434,7 @@ bool EnsureFileDirectoryExists( wxFileNa
             if( aReporter )
             {
                 msg.Printf( _( "Output directory '%s' created.\n" ), GetChars( outputPath ) );
-                aReporter->Report( msg );
+                aReporter->Report( msg, REPORTER::INFO );
                 return true;
             }
         }
@@ -442,9 +442,9 @@ bool EnsureFileDirectoryExists( wxFileNa
         {
             if( aReporter )
             {
-                msg.Printf( _( "*** Error: cannot create output directory '%s'! ***\n" ),
+                msg.Printf( _( "Cannot create output directory '%s'.\n" ),
                             GetChars( outputPath ) );
-                aReporter->Report( msg );
+                aReporter->Report( msg, REPORTER::ERROR );
             }
 
             return false;
=== added file 'common/dialogs/wx_html_report_panel.cpp'
--- common/dialogs/wx_html_report_panel.cpp	1970-01-01 00:00:00 +0000
+++ common/dialogs/wx_html_report_panel.cpp	2015-06-15 14:24:55 +0000
@@ -0,0 +1,232 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2015 CERN
+ * Copyright (C) 2015 KiCad Developers, see change_log.txt for contributors.
+ * Author: Tomasz Wlostowski <tomasz.wlostowski@xxxxxxx>
+ *
+ * This program is free software: you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation, either version 2 of the License, or (at your
+ * option) any later version.
+ *
+ * This program 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
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "wx_html_report_panel.h"
+
+#include <wildcards_and_files_ext.h>
+#include <boost/foreach.hpp>
+
+WX_HTML_REPORT_PANEL::WX_HTML_REPORT_PANEL( wxWindow*      parent,
+                                            wxWindowID     id,
+                                            const wxPoint& pos,
+                                            const wxSize&  size,
+                                            long           style ) :
+    WX_HTML_REPORT_PANEL_BASE( parent, id, pos, size, style ),
+    m_reporter( this ),
+    m_severities( -1 ),
+    m_showAll( true )
+{
+    syncCheckboxes();
+}
+
+
+WX_HTML_REPORT_PANEL::~WX_HTML_REPORT_PANEL()
+{
+}
+
+
+REPORTER& WX_HTML_REPORT_PANEL::Reporter()
+{
+    return m_reporter;
+}
+
+
+void WX_HTML_REPORT_PANEL::Report( const wxString& aText, REPORTER::SEVERITY aSeverity )
+{
+    REPORT_LINE line;
+    line.message = aText;
+    line.severity = aSeverity;
+
+    m_report.push_back( line );
+    m_htmlView->AppendToPage( generateHtml( line ) );
+    scrollToBottom();
+}
+
+
+void WX_HTML_REPORT_PANEL::scrollToBottom()
+{
+    int x, y, xUnit, yUnit;
+    m_htmlView->GetVirtualSize( &x, &y );
+    m_htmlView->GetScrollPixelsPerUnit( &xUnit, &yUnit );
+    m_htmlView->Scroll( 0, y / yUnit );
+}
+
+
+void WX_HTML_REPORT_PANEL::refreshView()
+{
+    wxString html;
+
+    BOOST_FOREACH( REPORT_LINE l, m_report )
+    {
+        html += generateHtml( l );
+    }
+
+    m_htmlView->SetPage( html );
+    scrollToBottom();
+}
+
+
+wxString WX_HTML_REPORT_PANEL::generateHtml( const REPORT_LINE& aLine )
+{
+    if( !m_showAll && ! ( m_severities & aLine.severity ) )
+        return wxEmptyString;
+
+    switch( aLine.severity )
+    {
+    case REPORTER::ERROR:
+        return wxString( "<font color=\"red\" size=2>" ) + _( "<b>Error: </b></font><font size=2>" ) + aLine.message + wxString( "</font><br>" );
+    case REPORTER::WARNING:
+        return wxString( "<font color=\"orange\" size=2>" ) + _( "<b>Warning: </b></font><font size=2>" ) + aLine.message + wxString( "</font><br>" );
+    case REPORTER::INFO:
+        return wxString( "<font color=\"gray\" size=2>" ) + _( "<b>Info: </b>" ) + aLine.message + wxString( "</font><br>" );
+    case REPORTER::ACTION:
+        return wxString( "<font color=\"darkgreen\" size=2>" ) + aLine.message + wxString( "</font><br>" );
+    default:
+        return wxString( "<font size=2>" ) + aLine.message + wxString( "</font><br>" );
+    }
+}
+
+
+wxString WX_HTML_REPORT_PANEL::generatePlainText( const REPORT_LINE& aLine )
+{
+    switch( aLine.severity )
+    {
+    case REPORTER::ERROR:
+        return _( "Error: " ) + aLine.message + wxT( "\n" );
+    case REPORTER::WARNING:
+        return _( "Warning: " ) + aLine.message + wxT( "\n" );
+    case REPORTER::INFO:
+        return _( "Info: " ) + aLine.message + wxT( "\n" );
+    default:
+        return aLine.message + wxT( "\n" );
+    }
+}
+
+
+void WX_HTML_REPORT_PANEL::onCheckBoxShowAll( wxCommandEvent& event )
+{
+    if ( event.IsChecked() )
+         m_showAll = true;
+     else
+         m_showAll = false;
+
+    syncCheckboxes();
+    refreshView();
+}
+
+
+void WX_HTML_REPORT_PANEL::syncCheckboxes()
+{
+    m_checkBoxShowWarnings->Enable( ! m_showAll );
+    m_checkBoxShowWarnings->SetValue( m_severities & REPORTER::WARNING );
+    m_checkBoxShowErrors->Enable( ! m_showAll );
+    m_checkBoxShowErrors->SetValue( m_severities & REPORTER::ERROR );
+    m_checkBoxShowInfos->Enable( ! m_showAll );
+    m_checkBoxShowInfos->SetValue( m_severities & REPORTER::INFO );
+    m_checkBoxShowActions->Enable( ! m_showAll );
+    m_checkBoxShowActions->SetValue( m_severities & REPORTER::ACTION );
+}
+
+
+void WX_HTML_REPORT_PANEL::onCheckBoxShowWarnings( wxCommandEvent& event )
+{
+    if ( event.IsChecked() )
+         m_severities |= REPORTER::WARNING;
+     else
+         m_severities &= ~REPORTER::WARNING;
+
+     refreshView();
+}
+
+
+void WX_HTML_REPORT_PANEL::onCheckBoxShowErrors( wxCommandEvent& event )
+{
+    if ( event.IsChecked() )
+         m_severities |= REPORTER::ERROR;
+     else
+         m_severities &= ~REPORTER::ERROR;
+
+     refreshView();
+}
+
+
+void WX_HTML_REPORT_PANEL::onCheckBoxShowInfos( wxCommandEvent& event )
+{
+    if ( event.IsChecked() )
+         m_severities |= REPORTER::INFO;
+     else
+         m_severities &= ~REPORTER::INFO;
+
+     refreshView();
+}
+
+
+void WX_HTML_REPORT_PANEL::onCheckBoxShowActions( wxCommandEvent& event )
+{
+    if ( event.IsChecked() )
+         m_severities |= REPORTER::ACTION;
+     else
+         m_severities &= ~REPORTER::ACTION;
+
+     refreshView();
+}
+
+
+void WX_HTML_REPORT_PANEL::onBtnSaveToFile( wxCommandEvent& event )
+{
+    wxFileName fn( "./report.txt" );
+
+    wxFileDialog dlg( this, _( "Save report to file" ), fn.GetPath(), fn.GetName(),
+                      TextWildcard, wxFD_SAVE | wxFD_OVERWRITE_PROMPT );
+
+    if( dlg.ShowModal() != wxID_OK )
+        return;
+
+    fn = dlg.GetPath();
+
+    if( fn.GetExt().IsEmpty() )
+        fn.SetExt( wxT( "txt" ) );
+
+    wxFile f( fn.GetFullPath(), wxFile::write );
+
+    if( !f.IsOpened() )
+    {
+        wxString msg;
+
+        msg.Printf( _( "Cannot write report to file '%s'." ),
+                    (const char *)( fn.GetFullPath() ) );
+        wxMessageBox( msg, _( "File save error" ), wxOK | wxICON_ERROR, this );
+        return;
+    }
+
+    BOOST_FOREACH( REPORT_LINE l, m_report )
+    {
+        f.Write( generatePlainText( l ) );
+    }
+
+    f.Close();
+}
+
+
+void WX_HTML_REPORT_PANEL::Clear()
+{
+    m_report.clear();
+}

=== added file 'common/dialogs/wx_html_report_panel.h'
--- common/dialogs/wx_html_report_panel.h	1970-01-01 00:00:00 +0000
+++ common/dialogs/wx_html_report_panel.h	2015-06-15 14:24:55 +0000
@@ -0,0 +1,95 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2015 CERN
+ * Copyright (C) 2015 KiCad Developers, see change_log.txt for contributors.
+ * Author: Tomasz Wlostowski <tomasz.wlostowski@xxxxxxx>
+ *
+ * This program is free software: you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation, either version 2 of the License, or (at your
+ * option) any later version.
+ *
+ * This program 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
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef __WX_HTML_REPORT_PANEL_H__
+#define __WX_HTML_REPORT_PANEL_H__
+
+#include <wx/wx.h>
+#include <reporter.h>
+#include <vector>
+
+#include "wx_html_report_panel_base.h"
+
+
+/**
+ * Class WX_HTML_REPORT_PANEL
+ *
+ * A widget for browsing a rich text error/status report. Used in numerous
+ * dialogs in eeschema and pcbnew. Provides error filtering functionality
+ * and saving report files.
+ *
+ * The messages are reported throuth a REPORTER object
+ */
+class WX_HTML_REPORT_PANEL : public WX_HTML_REPORT_PANEL_BASE
+{
+public:
+    WX_HTML_REPORT_PANEL( wxWindow* parent, wxWindowID id = wxID_ANY,
+            const wxPoint& pos = wxDefaultPosition,
+            const wxSize& size = wxSize( 500,300 ), long style = wxTAB_TRAVERSAL );
+    ~WX_HTML_REPORT_PANEL();
+
+    ///> returns the reporter object that reports to this panel
+    REPORTER& Reporter();
+
+    ///> reports a string directly.
+    void Report( const wxString& aText, REPORTER::SEVERITY aSeverity );
+
+    ///> clears the report panel
+    void Clear();
+
+private:
+    struct REPORT_LINE
+    {
+        REPORTER::SEVERITY severity;
+        wxString message;
+    };
+
+    typedef std::vector<REPORT_LINE> REPORT_LINES;
+
+    wxString generateHtml( const REPORT_LINE& aLine );
+    wxString generatePlainText( const REPORT_LINE& aLine );
+
+    void refreshView();
+    void scrollToBottom();
+    void syncCheckboxes();
+
+    void onCheckBoxShowAll( wxCommandEvent& event );
+    void onCheckBoxShowWarnings( wxCommandEvent& event );
+    void onCheckBoxShowErrors( wxCommandEvent& event );
+    void onCheckBoxShowInfos( wxCommandEvent& event );
+    void onCheckBoxShowActions( wxCommandEvent& event );
+
+    void onBtnSaveToFile( wxCommandEvent& event );
+
+    ///> copy of the report, stored for filtering
+    REPORT_LINES m_report;
+
+    ///> the reporter
+    WX_HTML_PANEL_REPORTER m_reporter;
+
+    ///> message severities to display (mask)
+    int m_severities;
+
+    ///> show all messages flag (overrides m_severities)
+    bool m_showAll;
+};
+
+#endif //__WX_HTML_REPORT_PANEL_H__

=== added file 'common/dialogs/wx_html_report_panel_base.cpp'
--- common/dialogs/wx_html_report_panel_base.cpp	1970-01-01 00:00:00 +0000
+++ common/dialogs/wx_html_report_panel_base.cpp	2015-06-15 14:24:55 +0000
@@ -0,0 +1,95 @@
+///////////////////////////////////////////////////////////////////////////
+// C++ code generated with wxFormBuilder (version Mar  9 2015)
+// http://www.wxformbuilder.org/
+//
+// PLEASE DO "NOT" EDIT THIS FILE!
+///////////////////////////////////////////////////////////////////////////
+
+#include "wx_html_report_panel_base.h"
+
+///////////////////////////////////////////////////////////////////////////
+
+WX_HTML_REPORT_PANEL_BASE::WX_HTML_REPORT_PANEL_BASE( wxWindow* parent, wxWindowID id, const wxPoint& pos, const wxSize& size, long style ) : wxPanel( parent, id, pos, size, style )
+{
+	wxStaticBoxSizer* sbSizer3;
+	sbSizer3 = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, wxT("Messages:") ), wxVERTICAL );
+	
+	wxFlexGridSizer* fgSizer4;
+	fgSizer4 = new wxFlexGridSizer( 2, 1, 0, 0 );
+	fgSizer4->AddGrowableCol( 0 );
+	fgSizer4->AddGrowableRow( 0 );
+	fgSizer4->SetFlexibleDirection( wxBOTH );
+	fgSizer4->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
+	
+	m_htmlView = new wxHtmlWindow( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxHW_SCROLLBAR_AUTO );
+	m_htmlView->SetFont( wxFont( 10, 70, 90, 90, false, wxEmptyString ) );
+	
+	fgSizer4->Add( m_htmlView, 1, wxEXPAND, 5 );
+	
+	wxFlexGridSizer* fgSizer3;
+	fgSizer3 = new wxFlexGridSizer( 1, 7, 0, 0 );
+	fgSizer3->AddGrowableCol( 6 );
+	fgSizer3->SetFlexibleDirection( wxBOTH );
+	fgSizer3->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
+	
+	m_staticText3 = new wxStaticText( this, wxID_ANY, wxT("Filter:"), wxDefaultPosition, wxDefaultSize, 0 );
+	m_staticText3->Wrap( -1 );
+	fgSizer3->Add( m_staticText3, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxRIGHT, 5 );
+	
+	m_checkBoxShowAll = new wxCheckBox( this, wxID_ANY, wxT("All"), wxDefaultPosition, wxDefaultSize, 0 );
+	m_checkBoxShowAll->SetValue(true); 
+	fgSizer3->Add( m_checkBoxShowAll, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxRIGHT|wxLEFT, 5 );
+	
+	m_checkBoxShowWarnings = new wxCheckBox( this, wxID_ANY, wxT("Warnings"), wxDefaultPosition, wxDefaultSize, 0 );
+	m_checkBoxShowWarnings->Enable( false );
+	
+	fgSizer3->Add( m_checkBoxShowWarnings, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxRIGHT|wxLEFT, 5 );
+	
+	m_checkBoxShowErrors = new wxCheckBox( this, wxID_ANY, wxT("Errors"), wxDefaultPosition, wxDefaultSize, 0 );
+	m_checkBoxShowErrors->Enable( false );
+	
+	fgSizer3->Add( m_checkBoxShowErrors, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxRIGHT|wxLEFT, 5 );
+	
+	m_checkBoxShowInfos = new wxCheckBox( this, wxID_ANY, wxT("Infos"), wxDefaultPosition, wxDefaultSize, 0 );
+	m_checkBoxShowInfos->Enable( false );
+	
+	fgSizer3->Add( m_checkBoxShowInfos, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxRIGHT|wxLEFT, 5 );
+	
+	m_checkBoxShowActions = new wxCheckBox( this, wxID_ANY, wxT("Actions"), wxDefaultPosition, wxDefaultSize, 0 );
+	m_checkBoxShowActions->Enable( false );
+	
+	fgSizer3->Add( m_checkBoxShowActions, 0, wxTOP|wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL, 5 );
+	
+	m_btnSaveReportToFile = new wxButton( this, wxID_ANY, wxT("Save report to file..."), wxDefaultPosition, wxDefaultSize, 0 );
+	fgSizer3->Add( m_btnSaveReportToFile, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxTOP|wxLEFT, 5 );
+	
+	
+	fgSizer4->Add( fgSizer3, 1, wxEXPAND, 5 );
+	
+	
+	sbSizer3->Add( fgSizer4, 1, wxEXPAND|wxALL, 5 );
+	
+	
+	this->SetSizer( sbSizer3 );
+	this->Layout();
+	
+	// Connect Events
+	m_checkBoxShowAll->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( WX_HTML_REPORT_PANEL_BASE::onCheckBoxShowAll ), NULL, this );
+	m_checkBoxShowWarnings->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( WX_HTML_REPORT_PANEL_BASE::onCheckBoxShowWarnings ), NULL, this );
+	m_checkBoxShowErrors->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( WX_HTML_REPORT_PANEL_BASE::onCheckBoxShowErrors ), NULL, this );
+	m_checkBoxShowInfos->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( WX_HTML_REPORT_PANEL_BASE::onCheckBoxShowInfos ), NULL, this );
+	m_checkBoxShowActions->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( WX_HTML_REPORT_PANEL_BASE::onCheckBoxShowActions ), NULL, this );
+	m_btnSaveReportToFile->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( WX_HTML_REPORT_PANEL_BASE::onBtnSaveToFile ), NULL, this );
+}
+
+WX_HTML_REPORT_PANEL_BASE::~WX_HTML_REPORT_PANEL_BASE()
+{
+	// Disconnect Events
+	m_checkBoxShowAll->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( WX_HTML_REPORT_PANEL_BASE::onCheckBoxShowAll ), NULL, this );
+	m_checkBoxShowWarnings->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( WX_HTML_REPORT_PANEL_BASE::onCheckBoxShowWarnings ), NULL, this );
+	m_checkBoxShowErrors->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( WX_HTML_REPORT_PANEL_BASE::onCheckBoxShowErrors ), NULL, this );
+	m_checkBoxShowInfos->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( WX_HTML_REPORT_PANEL_BASE::onCheckBoxShowInfos ), NULL, this );
+	m_checkBoxShowActions->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( WX_HTML_REPORT_PANEL_BASE::onCheckBoxShowActions ), NULL, this );
+	m_btnSaveReportToFile->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( WX_HTML_REPORT_PANEL_BASE::onBtnSaveToFile ), NULL, this );
+	
+}

=== added file 'common/dialogs/wx_html_report_panel_base.fbp'
--- common/dialogs/wx_html_report_panel_base.fbp	1970-01-01 00:00:00 +0000
+++ common/dialogs/wx_html_report_panel_base.fbp	2015-06-15 14:24:55 +0000
@@ -0,0 +1,823 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
+<wxFormBuilder_Project>
+    <FileVersion major="1" minor="13" />
+    <object class="Project" expanded="1">
+        <property name="class_decoration"></property>
+        <property name="code_generation">C++</property>
+        <property name="disconnect_events">1</property>
+        <property name="disconnect_mode">source_name</property>
+        <property name="disconnect_php_events">0</property>
+        <property name="disconnect_python_events">0</property>
+        <property name="embedded_files_path">res</property>
+        <property name="encoding">UTF-8</property>
+        <property name="event_generation">connect</property>
+        <property name="file">wx_html_report_panel_base</property>
+        <property name="first_id">1000</property>
+        <property name="help_provider">none</property>
+        <property name="internationalize">0</property>
+        <property name="name">WX_HTML_REPORT_PANEL_BASE</property>
+        <property name="namespace"></property>
+        <property name="path">.</property>
+        <property name="precompiled_header"></property>
+        <property name="relative_path">1</property>
+        <property name="skip_lua_events">1</property>
+        <property name="skip_php_events">1</property>
+        <property name="skip_python_events">1</property>
+        <property name="ui_table">UI</property>
+        <property name="use_enum">0</property>
+        <property name="use_microsoft_bom">0</property>
+        <object class="Panel" expanded="1">
+            <property name="aui_managed">0</property>
+            <property name="aui_manager_style">wxAUI_MGR_DEFAULT</property>
+            <property name="bg"></property>
+            <property name="context_help"></property>
+            <property name="context_menu">1</property>
+            <property name="enabled">1</property>
+            <property name="event_handler">impl_virtual</property>
+            <property name="fg"></property>
+            <property name="font"></property>
+            <property name="hidden">0</property>
+            <property name="id">wxID_ANY</property>
+            <property name="maximum_size"></property>
+            <property name="minimum_size"></property>
+            <property name="name">WX_HTML_REPORT_PANEL_BASE</property>
+            <property name="pos"></property>
+            <property name="size">500,300</property>
+            <property name="subclass"></property>
+            <property name="tooltip"></property>
+            <property name="window_extra_style"></property>
+            <property name="window_name"></property>
+            <property name="window_style">wxTAB_TRAVERSAL</property>
+            <event name="OnAuiFindManager"></event>
+            <event name="OnAuiPaneButton"></event>
+            <event name="OnAuiPaneClose"></event>
+            <event name="OnAuiPaneMaximize"></event>
+            <event name="OnAuiPaneRestore"></event>
+            <event name="OnAuiRender"></event>
+            <event name="OnChar"></event>
+            <event name="OnEnterWindow"></event>
+            <event name="OnEraseBackground"></event>
+            <event name="OnInitDialog"></event>
+            <event name="OnKeyDown"></event>
+            <event name="OnKeyUp"></event>
+            <event name="OnKillFocus"></event>
+            <event name="OnLeaveWindow"></event>
+            <event name="OnLeftDClick"></event>
+            <event name="OnLeftDown"></event>
+            <event name="OnLeftUp"></event>
+            <event name="OnMiddleDClick"></event>
+            <event name="OnMiddleDown"></event>
+            <event name="OnMiddleUp"></event>
+            <event name="OnMotion"></event>
+            <event name="OnMouseEvents"></event>
+            <event name="OnMouseWheel"></event>
+            <event name="OnPaint"></event>
+            <event name="OnRightDClick"></event>
+            <event name="OnRightDown"></event>
+            <event name="OnRightUp"></event>
+            <event name="OnSetFocus"></event>
+            <event name="OnSize"></event>
+            <event name="OnUpdateUI"></event>
+            <object class="wxStaticBoxSizer" expanded="1">
+                <property name="id">wxID_ANY</property>
+                <property name="label">Messages:</property>
+                <property name="minimum_size"></property>
+                <property name="name">sbSizer3</property>
+                <property name="orient">wxVERTICAL</property>
+                <property name="permission">none</property>
+                <event name="OnUpdateUI"></event>
+                <object class="sizeritem" expanded="1">
+                    <property name="border">5</property>
+                    <property name="flag">wxEXPAND|wxALL</property>
+                    <property name="proportion">1</property>
+                    <object class="wxFlexGridSizer" expanded="0">
+                        <property name="cols">1</property>
+                        <property name="flexible_direction">wxBOTH</property>
+                        <property name="growablecols">0</property>
+                        <property name="growablerows">0</property>
+                        <property name="hgap">0</property>
+                        <property name="minimum_size"></property>
+                        <property name="name">fgSizer4</property>
+                        <property name="non_flexible_grow_mode">wxFLEX_GROWMODE_SPECIFIED</property>
+                        <property name="permission">none</property>
+                        <property name="rows">2</property>
+                        <property name="vgap">0</property>
+                        <object class="sizeritem" expanded="0">
+                            <property name="border">5</property>
+                            <property name="flag">wxEXPAND</property>
+                            <property name="proportion">1</property>
+                            <object class="wxHtmlWindow" expanded="0">
+                                <property name="BottomDockable">1</property>
+                                <property name="LeftDockable">1</property>
+                                <property name="RightDockable">1</property>
+                                <property name="TopDockable">1</property>
+                                <property name="aui_layer"></property>
+                                <property name="aui_name"></property>
+                                <property name="aui_position"></property>
+                                <property name="aui_row"></property>
+                                <property name="best_size"></property>
+                                <property name="bg"></property>
+                                <property name="caption"></property>
+                                <property name="caption_visible">1</property>
+                                <property name="center_pane">0</property>
+                                <property name="close_button">1</property>
+                                <property name="context_help"></property>
+                                <property name="context_menu">0</property>
+                                <property name="default_pane">0</property>
+                                <property name="dock">Dock</property>
+                                <property name="dock_fixed">0</property>
+                                <property name="docking">Left</property>
+                                <property name="enabled">1</property>
+                                <property name="fg"></property>
+                                <property name="floatable">1</property>
+                                <property name="font">,90,90,10,70,0</property>
+                                <property name="gripper">0</property>
+                                <property name="hidden">0</property>
+                                <property name="id">wxID_ANY</property>
+                                <property name="max_size"></property>
+                                <property name="maximize_button">0</property>
+                                <property name="maximum_size"></property>
+                                <property name="min_size"></property>
+                                <property name="minimize_button">0</property>
+                                <property name="minimum_size"></property>
+                                <property name="moveable">1</property>
+                                <property name="name">m_htmlView</property>
+                                <property name="pane_border">1</property>
+                                <property name="pane_position"></property>
+                                <property name="pane_size"></property>
+                                <property name="permission">protected</property>
+                                <property name="pin_button">1</property>
+                                <property name="pos"></property>
+                                <property name="resize">Resizable</property>
+                                <property name="show">1</property>
+                                <property name="size"></property>
+                                <property name="style">wxHW_SCROLLBAR_AUTO</property>
+                                <property name="subclass"></property>
+                                <property name="toolbar_pane">0</property>
+                                <property name="tooltip"></property>
+                                <property name="window_extra_style"></property>
+                                <property name="window_name"></property>
+                                <property name="window_style"></property>
+                                <event name="OnChar"></event>
+                                <event name="OnEnterWindow"></event>
+                                <event name="OnEraseBackground"></event>
+                                <event name="OnHtmlCellClicked"></event>
+                                <event name="OnHtmlCellHover"></event>
+                                <event name="OnHtmlLinkClicked"></event>
+                                <event name="OnKeyDown"></event>
+                                <event name="OnKeyUp"></event>
+                                <event name="OnKillFocus"></event>
+                                <event name="OnLeaveWindow"></event>
+                                <event name="OnLeftDClick"></event>
+                                <event name="OnLeftDown"></event>
+                                <event name="OnLeftUp"></event>
+                                <event name="OnMiddleDClick"></event>
+                                <event name="OnMiddleDown"></event>
+                                <event name="OnMiddleUp"></event>
+                                <event name="OnMotion"></event>
+                                <event name="OnMouseEvents"></event>
+                                <event name="OnMouseWheel"></event>
+                                <event name="OnPaint"></event>
+                                <event name="OnRightDClick"></event>
+                                <event name="OnRightDown"></event>
+                                <event name="OnRightUp"></event>
+                                <event name="OnSetFocus"></event>
+                                <event name="OnSize"></event>
+                                <event name="OnUpdateUI"></event>
+                            </object>
+                        </object>
+                        <object class="sizeritem" expanded="0">
+                            <property name="border">5</property>
+                            <property name="flag">wxEXPAND</property>
+                            <property name="proportion">1</property>
+                            <object class="wxFlexGridSizer" expanded="0">
+                                <property name="cols">7</property>
+                                <property name="flexible_direction">wxBOTH</property>
+                                <property name="growablecols">6</property>
+                                <property name="growablerows"></property>
+                                <property name="hgap">0</property>
+                                <property name="minimum_size"></property>
+                                <property name="name">fgSizer3</property>
+                                <property name="non_flexible_grow_mode">wxFLEX_GROWMODE_SPECIFIED</property>
+                                <property name="permission">none</property>
+                                <property name="rows">1</property>
+                                <property name="vgap">0</property>
+                                <object class="sizeritem" expanded="0">
+                                    <property name="border">5</property>
+                                    <property name="flag">wxALIGN_CENTER_VERTICAL|wxTOP|wxRIGHT</property>
+                                    <property name="proportion">0</property>
+                                    <object class="wxStaticText" expanded="0">
+                                        <property name="BottomDockable">1</property>
+                                        <property name="LeftDockable">1</property>
+                                        <property name="RightDockable">1</property>
+                                        <property name="TopDockable">1</property>
+                                        <property name="aui_layer"></property>
+                                        <property name="aui_name"></property>
+                                        <property name="aui_position"></property>
+                                        <property name="aui_row"></property>
+                                        <property name="best_size"></property>
+                                        <property name="bg"></property>
+                                        <property name="caption"></property>
+                                        <property name="caption_visible">1</property>
+                                        <property name="center_pane">0</property>
+                                        <property name="close_button">1</property>
+                                        <property name="context_help"></property>
+                                        <property name="context_menu">1</property>
+                                        <property name="default_pane">0</property>
+                                        <property name="dock">Dock</property>
+                                        <property name="dock_fixed">0</property>
+                                        <property name="docking">Left</property>
+                                        <property name="enabled">1</property>
+                                        <property name="fg"></property>
+                                        <property name="floatable">1</property>
+                                        <property name="font"></property>
+                                        <property name="gripper">0</property>
+                                        <property name="hidden">0</property>
+                                        <property name="id">wxID_ANY</property>
+                                        <property name="label">Filter:</property>
+                                        <property name="max_size"></property>
+                                        <property name="maximize_button">0</property>
+                                        <property name="maximum_size"></property>
+                                        <property name="min_size"></property>
+                                        <property name="minimize_button">0</property>
+                                        <property name="minimum_size"></property>
+                                        <property name="moveable">1</property>
+                                        <property name="name">m_staticText3</property>
+                                        <property name="pane_border">1</property>
+                                        <property name="pane_position"></property>
+                                        <property name="pane_size"></property>
+                                        <property name="permission">protected</property>
+                                        <property name="pin_button">1</property>
+                                        <property name="pos"></property>
+                                        <property name="resize">Resizable</property>
+                                        <property name="show">1</property>
+                                        <property name="size"></property>
+                                        <property name="style"></property>
+                                        <property name="subclass"></property>
+                                        <property name="toolbar_pane">0</property>
+                                        <property name="tooltip"></property>
+                                        <property name="window_extra_style"></property>
+                                        <property name="window_name"></property>
+                                        <property name="window_style"></property>
+                                        <property name="wrap">-1</property>
+                                        <event name="OnChar"></event>
+                                        <event name="OnEnterWindow"></event>
+                                        <event name="OnEraseBackground"></event>
+                                        <event name="OnKeyDown"></event>
+                                        <event name="OnKeyUp"></event>
+                                        <event name="OnKillFocus"></event>
+                                        <event name="OnLeaveWindow"></event>
+                                        <event name="OnLeftDClick"></event>
+                                        <event name="OnLeftDown"></event>
+                                        <event name="OnLeftUp"></event>
+                                        <event name="OnMiddleDClick"></event>
+                                        <event name="OnMiddleDown"></event>
+                                        <event name="OnMiddleUp"></event>
+                                        <event name="OnMotion"></event>
+                                        <event name="OnMouseEvents"></event>
+                                        <event name="OnMouseWheel"></event>
+                                        <event name="OnPaint"></event>
+                                        <event name="OnRightDClick"></event>
+                                        <event name="OnRightDown"></event>
+                                        <event name="OnRightUp"></event>
+                                        <event name="OnSetFocus"></event>
+                                        <event name="OnSize"></event>
+                                        <event name="OnUpdateUI"></event>
+                                    </object>
+                                </object>
+                                <object class="sizeritem" expanded="0">
+                                    <property name="border">5</property>
+                                    <property name="flag">wxALIGN_CENTER_VERTICAL|wxTOP|wxRIGHT|wxLEFT</property>
+                                    <property name="proportion">0</property>
+                                    <object class="wxCheckBox" expanded="0">
+                                        <property name="BottomDockable">1</property>
+                                        <property name="LeftDockable">1</property>
+                                        <property name="RightDockable">1</property>
+                                        <property name="TopDockable">1</property>
+                                        <property name="aui_layer"></property>
+                                        <property name="aui_name"></property>
+                                        <property name="aui_position"></property>
+                                        <property name="aui_row"></property>
+                                        <property name="best_size"></property>
+                                        <property name="bg"></property>
+                                        <property name="caption"></property>
+                                        <property name="caption_visible">1</property>
+                                        <property name="center_pane">0</property>
+                                        <property name="checked">1</property>
+                                        <property name="close_button">1</property>
+                                        <property name="context_help"></property>
+                                        <property name="context_menu">1</property>
+                                        <property name="default_pane">0</property>
+                                        <property name="dock">Dock</property>
+                                        <property name="dock_fixed">0</property>
+                                        <property name="docking">Left</property>
+                                        <property name="enabled">1</property>
+                                        <property name="fg"></property>
+                                        <property name="floatable">1</property>
+                                        <property name="font"></property>
+                                        <property name="gripper">0</property>
+                                        <property name="hidden">0</property>
+                                        <property name="id">wxID_ANY</property>
+                                        <property name="label">All</property>
+                                        <property name="max_size"></property>
+                                        <property name="maximize_button">0</property>
+                                        <property name="maximum_size"></property>
+                                        <property name="min_size"></property>
+                                        <property name="minimize_button">0</property>
+                                        <property name="minimum_size"></property>
+                                        <property name="moveable">1</property>
+                                        <property name="name">m_checkBoxShowAll</property>
+                                        <property name="pane_border">1</property>
+                                        <property name="pane_position"></property>
+                                        <property name="pane_size"></property>
+                                        <property name="permission">protected</property>
+                                        <property name="pin_button">1</property>
+                                        <property name="pos"></property>
+                                        <property name="resize">Resizable</property>
+                                        <property name="show">1</property>
+                                        <property name="size"></property>
+                                        <property name="style"></property>
+                                        <property name="subclass"></property>
+                                        <property name="toolbar_pane">0</property>
+                                        <property name="tooltip"></property>
+                                        <property name="validator_data_type"></property>
+                                        <property name="validator_style">wxFILTER_NONE</property>
+                                        <property name="validator_type">wxDefaultValidator</property>
+                                        <property name="validator_variable"></property>
+                                        <property name="window_extra_style"></property>
+                                        <property name="window_name"></property>
+                                        <property name="window_style"></property>
+                                        <event name="OnChar"></event>
+                                        <event name="OnCheckBox">onCheckBoxShowAll</event>
+                                        <event name="OnEnterWindow"></event>
+                                        <event name="OnEraseBackground"></event>
+                                        <event name="OnKeyDown"></event>
+                                        <event name="OnKeyUp"></event>
+                                        <event name="OnKillFocus"></event>
+                                        <event name="OnLeaveWindow"></event>
+                                        <event name="OnLeftDClick"></event>
+                                        <event name="OnLeftDown"></event>
+                                        <event name="OnLeftUp"></event>
+                                        <event name="OnMiddleDClick"></event>
+                                        <event name="OnMiddleDown"></event>
+                                        <event name="OnMiddleUp"></event>
+                                        <event name="OnMotion"></event>
+                                        <event name="OnMouseEvents"></event>
+                                        <event name="OnMouseWheel"></event>
+                                        <event name="OnPaint"></event>
+                                        <event name="OnRightDClick"></event>
+                                        <event name="OnRightDown"></event>
+                                        <event name="OnRightUp"></event>
+                                        <event name="OnSetFocus"></event>
+                                        <event name="OnSize"></event>
+                                        <event name="OnUpdateUI"></event>
+                                    </object>
+                                </object>
+                                <object class="sizeritem" expanded="0">
+                                    <property name="border">5</property>
+                                    <property name="flag">wxALIGN_CENTER_VERTICAL|wxTOP|wxRIGHT|wxLEFT</property>
+                                    <property name="proportion">0</property>
+                                    <object class="wxCheckBox" expanded="0">
+                                        <property name="BottomDockable">1</property>
+                                        <property name="LeftDockable">1</property>
+                                        <property name="RightDockable">1</property>
+                                        <property name="TopDockable">1</property>
+                                        <property name="aui_layer"></property>
+                                        <property name="aui_name"></property>
+                                        <property name="aui_position"></property>
+                                        <property name="aui_row"></property>
+                                        <property name="best_size"></property>
+                                        <property name="bg"></property>
+                                        <property name="caption"></property>
+                                        <property name="caption_visible">1</property>
+                                        <property name="center_pane">0</property>
+                                        <property name="checked">0</property>
+                                        <property name="close_button">1</property>
+                                        <property name="context_help"></property>
+                                        <property name="context_menu">1</property>
+                                        <property name="default_pane">0</property>
+                                        <property name="dock">Dock</property>
+                                        <property name="dock_fixed">0</property>
+                                        <property name="docking">Left</property>
+                                        <property name="enabled">0</property>
+                                        <property name="fg"></property>
+                                        <property name="floatable">1</property>
+                                        <property name="font"></property>
+                                        <property name="gripper">0</property>
+                                        <property name="hidden">0</property>
+                                        <property name="id">wxID_ANY</property>
+                                        <property name="label">Warnings</property>
+                                        <property name="max_size"></property>
+                                        <property name="maximize_button">0</property>
+                                        <property name="maximum_size"></property>
+                                        <property name="min_size"></property>
+                                        <property name="minimize_button">0</property>
+                                        <property name="minimum_size"></property>
+                                        <property name="moveable">1</property>
+                                        <property name="name">m_checkBoxShowWarnings</property>
+                                        <property name="pane_border">1</property>
+                                        <property name="pane_position"></property>
+                                        <property name="pane_size"></property>
+                                        <property name="permission">protected</property>
+                                        <property name="pin_button">1</property>
+                                        <property name="pos"></property>
+                                        <property name="resize">Resizable</property>
+                                        <property name="show">1</property>
+                                        <property name="size"></property>
+                                        <property name="style"></property>
+                                        <property name="subclass"></property>
+                                        <property name="toolbar_pane">0</property>
+                                        <property name="tooltip"></property>
+                                        <property name="validator_data_type"></property>
+                                        <property name="validator_style">wxFILTER_NONE</property>
+                                        <property name="validator_type">wxDefaultValidator</property>
+                                        <property name="validator_variable"></property>
+                                        <property name="window_extra_style"></property>
+                                        <property name="window_name"></property>
+                                        <property name="window_style"></property>
+                                        <event name="OnChar"></event>
+                                        <event name="OnCheckBox">onCheckBoxShowWarnings</event>
+                                        <event name="OnEnterWindow"></event>
+                                        <event name="OnEraseBackground"></event>
+                                        <event name="OnKeyDown"></event>
+                                        <event name="OnKeyUp"></event>
+                                        <event name="OnKillFocus"></event>
+                                        <event name="OnLeaveWindow"></event>
+                                        <event name="OnLeftDClick"></event>
+                                        <event name="OnLeftDown"></event>
+                                        <event name="OnLeftUp"></event>
+                                        <event name="OnMiddleDClick"></event>
+                                        <event name="OnMiddleDown"></event>
+                                        <event name="OnMiddleUp"></event>
+                                        <event name="OnMotion"></event>
+                                        <event name="OnMouseEvents"></event>
+                                        <event name="OnMouseWheel"></event>
+                                        <event name="OnPaint"></event>
+                                        <event name="OnRightDClick"></event>
+                                        <event name="OnRightDown"></event>
+                                        <event name="OnRightUp"></event>
+                                        <event name="OnSetFocus"></event>
+                                        <event name="OnSize"></event>
+                                        <event name="OnUpdateUI"></event>
+                                    </object>
+                                </object>
+                                <object class="sizeritem" expanded="0">
+                                    <property name="border">5</property>
+                                    <property name="flag">wxALIGN_CENTER_VERTICAL|wxTOP|wxRIGHT|wxLEFT</property>
+                                    <property name="proportion">0</property>
+                                    <object class="wxCheckBox" expanded="0">
+                                        <property name="BottomDockable">1</property>
+                                        <property name="LeftDockable">1</property>
+                                        <property name="RightDockable">1</property>
+                                        <property name="TopDockable">1</property>
+                                        <property name="aui_layer"></property>
+                                        <property name="aui_name"></property>
+                                        <property name="aui_position"></property>
+                                        <property name="aui_row"></property>
+                                        <property name="best_size"></property>
+                                        <property name="bg"></property>
+                                        <property name="caption"></property>
+                                        <property name="caption_visible">1</property>
+                                        <property name="center_pane">0</property>
+                                        <property name="checked">0</property>
+                                        <property name="close_button">1</property>
+                                        <property name="context_help"></property>
+                                        <property name="context_menu">1</property>
+                                        <property name="default_pane">0</property>
+                                        <property name="dock">Dock</property>
+                                        <property name="dock_fixed">0</property>
+                                        <property name="docking">Left</property>
+                                        <property name="enabled">0</property>
+                                        <property name="fg"></property>
+                                        <property name="floatable">1</property>
+                                        <property name="font"></property>
+                                        <property name="gripper">0</property>
+                                        <property name="hidden">0</property>
+                                        <property name="id">wxID_ANY</property>
+                                        <property name="label">Errors</property>
+                                        <property name="max_size"></property>
+                                        <property name="maximize_button">0</property>
+                                        <property name="maximum_size"></property>
+                                        <property name="min_size"></property>
+                                        <property name="minimize_button">0</property>
+                                        <property name="minimum_size"></property>
+                                        <property name="moveable">1</property>
+                                        <property name="name">m_checkBoxShowErrors</property>
+                                        <property name="pane_border">1</property>
+                                        <property name="pane_position"></property>
+                                        <property name="pane_size"></property>
+                                        <property name="permission">protected</property>
+                                        <property name="pin_button">1</property>
+                                        <property name="pos"></property>
+                                        <property name="resize">Resizable</property>
+                                        <property name="show">1</property>
+                                        <property name="size"></property>
+                                        <property name="style"></property>
+                                        <property name="subclass"></property>
+                                        <property name="toolbar_pane">0</property>
+                                        <property name="tooltip"></property>
+                                        <property name="validator_data_type"></property>
+                                        <property name="validator_style">wxFILTER_NONE</property>
+                                        <property name="validator_type">wxDefaultValidator</property>
+                                        <property name="validator_variable"></property>
+                                        <property name="window_extra_style"></property>
+                                        <property name="window_name"></property>
+                                        <property name="window_style"></property>
+                                        <event name="OnChar"></event>
+                                        <event name="OnCheckBox">onCheckBoxShowErrors</event>
+                                        <event name="OnEnterWindow"></event>
+                                        <event name="OnEraseBackground"></event>
+                                        <event name="OnKeyDown"></event>
+                                        <event name="OnKeyUp"></event>
+                                        <event name="OnKillFocus"></event>
+                                        <event name="OnLeaveWindow"></event>
+                                        <event name="OnLeftDClick"></event>
+                                        <event name="OnLeftDown"></event>
+                                        <event name="OnLeftUp"></event>
+                                        <event name="OnMiddleDClick"></event>
+                                        <event name="OnMiddleDown"></event>
+                                        <event name="OnMiddleUp"></event>
+                                        <event name="OnMotion"></event>
+                                        <event name="OnMouseEvents"></event>
+                                        <event name="OnMouseWheel"></event>
+                                        <event name="OnPaint"></event>
+                                        <event name="OnRightDClick"></event>
+                                        <event name="OnRightDown"></event>
+                                        <event name="OnRightUp"></event>
+                                        <event name="OnSetFocus"></event>
+                                        <event name="OnSize"></event>
+                                        <event name="OnUpdateUI"></event>
+                                    </object>
+                                </object>
+                                <object class="sizeritem" expanded="0">
+                                    <property name="border">5</property>
+                                    <property name="flag">wxALIGN_CENTER_VERTICAL|wxTOP|wxRIGHT|wxLEFT</property>
+                                    <property name="proportion">0</property>
+                                    <object class="wxCheckBox" expanded="0">
+                                        <property name="BottomDockable">1</property>
+                                        <property name="LeftDockable">1</property>
+                                        <property name="RightDockable">1</property>
+                                        <property name="TopDockable">1</property>
+                                        <property name="aui_layer"></property>
+                                        <property name="aui_name"></property>
+                                        <property name="aui_position"></property>
+                                        <property name="aui_row"></property>
+                                        <property name="best_size"></property>
+                                        <property name="bg"></property>
+                                        <property name="caption"></property>
+                                        <property name="caption_visible">1</property>
+                                        <property name="center_pane">0</property>
+                                        <property name="checked">0</property>
+                                        <property name="close_button">1</property>
+                                        <property name="context_help"></property>
+                                        <property name="context_menu">1</property>
+                                        <property name="default_pane">0</property>
+                                        <property name="dock">Dock</property>
+                                        <property name="dock_fixed">0</property>
+                                        <property name="docking">Left</property>
+                                        <property name="enabled">0</property>
+                                        <property name="fg"></property>
+                                        <property name="floatable">1</property>
+                                        <property name="font"></property>
+                                        <property name="gripper">0</property>
+                                        <property name="hidden">0</property>
+                                        <property name="id">wxID_ANY</property>
+                                        <property name="label">Infos</property>
+                                        <property name="max_size"></property>
+                                        <property name="maximize_button">0</property>
+                                        <property name="maximum_size"></property>
+                                        <property name="min_size"></property>
+                                        <property name="minimize_button">0</property>
+                                        <property name="minimum_size"></property>
+                                        <property name="moveable">1</property>
+                                        <property name="name">m_checkBoxShowInfos</property>
+                                        <property name="pane_border">1</property>
+                                        <property name="pane_position"></property>
+                                        <property name="pane_size"></property>
+                                        <property name="permission">protected</property>
+                                        <property name="pin_button">1</property>
+                                        <property name="pos"></property>
+                                        <property name="resize">Resizable</property>
+                                        <property name="show">1</property>
+                                        <property name="size"></property>
+                                        <property name="style"></property>
+                                        <property name="subclass"></property>
+                                        <property name="toolbar_pane">0</property>
+                                        <property name="tooltip"></property>
+                                        <property name="validator_data_type"></property>
+                                        <property name="validator_style">wxFILTER_NONE</property>
+                                        <property name="validator_type">wxDefaultValidator</property>
+                                        <property name="validator_variable"></property>
+                                        <property name="window_extra_style"></property>
+                                        <property name="window_name"></property>
+                                        <property name="window_style"></property>
+                                        <event name="OnChar"></event>
+                                        <event name="OnCheckBox">onCheckBoxShowInfos</event>
+                                        <event name="OnEnterWindow"></event>
+                                        <event name="OnEraseBackground"></event>
+                                        <event name="OnKeyDown"></event>
+                                        <event name="OnKeyUp"></event>
+                                        <event name="OnKillFocus"></event>
+                                        <event name="OnLeaveWindow"></event>
+                                        <event name="OnLeftDClick"></event>
+                                        <event name="OnLeftDown"></event>
+                                        <event name="OnLeftUp"></event>
+                                        <event name="OnMiddleDClick"></event>
+                                        <event name="OnMiddleDown"></event>
+                                        <event name="OnMiddleUp"></event>
+                                        <event name="OnMotion"></event>
+                                        <event name="OnMouseEvents"></event>
+                                        <event name="OnMouseWheel"></event>
+                                        <event name="OnPaint"></event>
+                                        <event name="OnRightDClick"></event>
+                                        <event name="OnRightDown"></event>
+                                        <event name="OnRightUp"></event>
+                                        <event name="OnSetFocus"></event>
+                                        <event name="OnSize"></event>
+                                        <event name="OnUpdateUI"></event>
+                                    </object>
+                                </object>
+                                <object class="sizeritem" expanded="0">
+                                    <property name="border">5</property>
+                                    <property name="flag">wxTOP|wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL</property>
+                                    <property name="proportion">0</property>
+                                    <object class="wxCheckBox" expanded="0">
+                                        <property name="BottomDockable">1</property>
+                                        <property name="LeftDockable">1</property>
+                                        <property name="RightDockable">1</property>
+                                        <property name="TopDockable">1</property>
+                                        <property name="aui_layer"></property>
+                                        <property name="aui_name"></property>
+                                        <property name="aui_position"></property>
+                                        <property name="aui_row"></property>
+                                        <property name="best_size"></property>
+                                        <property name="bg"></property>
+                                        <property name="caption"></property>
+                                        <property name="caption_visible">1</property>
+                                        <property name="center_pane">0</property>
+                                        <property name="checked">0</property>
+                                        <property name="close_button">1</property>
+                                        <property name="context_help"></property>
+                                        <property name="context_menu">1</property>
+                                        <property name="default_pane">0</property>
+                                        <property name="dock">Dock</property>
+                                        <property name="dock_fixed">0</property>
+                                        <property name="docking">Left</property>
+                                        <property name="enabled">0</property>
+                                        <property name="fg"></property>
+                                        <property name="floatable">1</property>
+                                        <property name="font"></property>
+                                        <property name="gripper">0</property>
+                                        <property name="hidden">0</property>
+                                        <property name="id">wxID_ANY</property>
+                                        <property name="label">Actions</property>
+                                        <property name="max_size"></property>
+                                        <property name="maximize_button">0</property>
+                                        <property name="maximum_size"></property>
+                                        <property name="min_size"></property>
+                                        <property name="minimize_button">0</property>
+                                        <property name="minimum_size"></property>
+                                        <property name="moveable">1</property>
+                                        <property name="name">m_checkBoxShowActions</property>
+                                        <property name="pane_border">1</property>
+                                        <property name="pane_position"></property>
+                                        <property name="pane_size"></property>
+                                        <property name="permission">protected</property>
+                                        <property name="pin_button">1</property>
+                                        <property name="pos"></property>
+                                        <property name="resize">Resizable</property>
+                                        <property name="show">1</property>
+                                        <property name="size"></property>
+                                        <property name="style"></property>
+                                        <property name="subclass"></property>
+                                        <property name="toolbar_pane">0</property>
+                                        <property name="tooltip"></property>
+                                        <property name="validator_data_type"></property>
+                                        <property name="validator_style">wxFILTER_NONE</property>
+                                        <property name="validator_type">wxDefaultValidator</property>
+                                        <property name="validator_variable"></property>
+                                        <property name="window_extra_style"></property>
+                                        <property name="window_name"></property>
+                                        <property name="window_style"></property>
+                                        <event name="OnChar"></event>
+                                        <event name="OnCheckBox">onCheckBoxShowActions</event>
+                                        <event name="OnEnterWindow"></event>
+                                        <event name="OnEraseBackground"></event>
+                                        <event name="OnKeyDown"></event>
+                                        <event name="OnKeyUp"></event>
+                                        <event name="OnKillFocus"></event>
+                                        <event name="OnLeaveWindow"></event>
+                                        <event name="OnLeftDClick"></event>
+                                        <event name="OnLeftDown"></event>
+                                        <event name="OnLeftUp"></event>
+                                        <event name="OnMiddleDClick"></event>
+                                        <event name="OnMiddleDown"></event>
+                                        <event name="OnMiddleUp"></event>
+                                        <event name="OnMotion"></event>
+                                        <event name="OnMouseEvents"></event>
+                                        <event name="OnMouseWheel"></event>
+                                        <event name="OnPaint"></event>
+                                        <event name="OnRightDClick"></event>
+                                        <event name="OnRightDown"></event>
+                                        <event name="OnRightUp"></event>
+                                        <event name="OnSetFocus"></event>
+                                        <event name="OnSize"></event>
+                                        <event name="OnUpdateUI"></event>
+                                    </object>
+                                </object>
+                                <object class="sizeritem" expanded="0">
+                                    <property name="border">5</property>
+                                    <property name="flag">wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxTOP|wxLEFT</property>
+                                    <property name="proportion">0</property>
+                                    <object class="wxButton" expanded="0">
+                                        <property name="BottomDockable">1</property>
+                                        <property name="LeftDockable">1</property>
+                                        <property name="RightDockable">1</property>
+                                        <property name="TopDockable">1</property>
+                                        <property name="aui_layer"></property>
+                                        <property name="aui_name"></property>
+                                        <property name="aui_position"></property>
+                                        <property name="aui_row"></property>
+                                        <property name="best_size"></property>
+                                        <property name="bg"></property>
+                                        <property name="caption"></property>
+                                        <property name="caption_visible">1</property>
+                                        <property name="center_pane">0</property>
+                                        <property name="close_button">1</property>
+                                        <property name="context_help"></property>
+                                        <property name="context_menu">1</property>
+                                        <property name="default">0</property>
+                                        <property name="default_pane">0</property>
+                                        <property name="dock">Dock</property>
+                                        <property name="dock_fixed">0</property>
+                                        <property name="docking">Left</property>
+                                        <property name="enabled">1</property>
+                                        <property name="fg"></property>
+                                        <property name="floatable">1</property>
+                                        <property name="font"></property>
+                                        <property name="gripper">0</property>
+                                        <property name="hidden">0</property>
+                                        <property name="id">wxID_ANY</property>
+                                        <property name="label">Save report to file...</property>
+                                        <property name="max_size"></property>
+                                        <property name="maximize_button">0</property>
+                                        <property name="maximum_size">-1,-1</property>
+                                        <property name="min_size"></property>
+                                        <property name="minimize_button">0</property>
+                                        <property name="minimum_size"></property>
+                                        <property name="moveable">1</property>
+                                        <property name="name">m_btnSaveReportToFile</property>
+                                        <property name="pane_border">1</property>
+                                        <property name="pane_position"></property>
+                                        <property name="pane_size"></property>
+                                        <property name="permission">protected</property>
+                                        <property name="pin_button">1</property>
+                                        <property name="pos"></property>
+                                        <property name="resize">Resizable</property>
+                                        <property name="show">1</property>
+                                        <property name="size"></property>
+                                        <property name="style"></property>
+                                        <property name="subclass"></property>
+                                        <property name="toolbar_pane">0</property>
+                                        <property name="tooltip"></property>
+                                        <property name="validator_data_type"></property>
+                                        <property name="validator_style">wxFILTER_NONE</property>
+                                        <property name="validator_type">wxDefaultValidator</property>
+                                        <property name="validator_variable"></property>
+                                        <property name="window_extra_style"></property>
+                                        <property name="window_name"></property>
+                                        <property name="window_style"></property>
+                                        <event name="OnButtonClick">onBtnSaveToFile</event>
+                                        <event name="OnChar"></event>
+                                        <event name="OnEnterWindow"></event>
+                                        <event name="OnEraseBackground"></event>
+                                        <event name="OnKeyDown"></event>
+                                        <event name="OnKeyUp"></event>
+                                        <event name="OnKillFocus"></event>
+                                        <event name="OnLeaveWindow"></event>
+                                        <event name="OnLeftDClick"></event>
+                                        <event name="OnLeftDown"></event>
+                                        <event name="OnLeftUp"></event>
+                                        <event name="OnMiddleDClick"></event>
+                                        <event name="OnMiddleDown"></event>
+                                        <event name="OnMiddleUp"></event>
+                                        <event name="OnMotion"></event>
+                                        <event name="OnMouseEvents"></event>
+                                        <event name="OnMouseWheel"></event>
+                                        <event name="OnPaint"></event>
+                                        <event name="OnRightDClick"></event>
+                                        <event name="OnRightDown"></event>
+                                        <event name="OnRightUp"></event>
+                                        <event name="OnSetFocus"></event>
+                                        <event name="OnSize"></event>
+                                        <event name="OnUpdateUI"></event>
+                                    </object>
+                                </object>
+                            </object>
+                        </object>
+                    </object>
+                </object>
+            </object>
+        </object>
+    </object>
+</wxFormBuilder_Project>

=== added file 'common/dialogs/wx_html_report_panel_base.h'
--- common/dialogs/wx_html_report_panel_base.h	1970-01-01 00:00:00 +0000
+++ common/dialogs/wx_html_report_panel_base.h	2015-06-15 14:24:55 +0000
@@ -0,0 +1,62 @@
+///////////////////////////////////////////////////////////////////////////
+// C++ code generated with wxFormBuilder (version Mar  9 2015)
+// http://www.wxformbuilder.org/
+//
+// PLEASE DO "NOT" EDIT THIS FILE!
+///////////////////////////////////////////////////////////////////////////
+
+#ifndef __WX_HTML_REPORT_PANEL_BASE_H__
+#define __WX_HTML_REPORT_PANEL_BASE_H__
+
+#include <wx/artprov.h>
+#include <wx/xrc/xmlres.h>
+#include <wx/html/htmlwin.h>
+#include <wx/gdicmn.h>
+#include <wx/font.h>
+#include <wx/colour.h>
+#include <wx/settings.h>
+#include <wx/string.h>
+#include <wx/stattext.h>
+#include <wx/checkbox.h>
+#include <wx/button.h>
+#include <wx/sizer.h>
+#include <wx/statbox.h>
+#include <wx/panel.h>
+
+///////////////////////////////////////////////////////////////////////////
+
+
+///////////////////////////////////////////////////////////////////////////////
+/// Class WX_HTML_REPORT_PANEL_BASE
+///////////////////////////////////////////////////////////////////////////////
+class WX_HTML_REPORT_PANEL_BASE : public wxPanel 
+{
+	private:
+	
+	protected:
+		wxHtmlWindow* m_htmlView;
+		wxStaticText* m_staticText3;
+		wxCheckBox* m_checkBoxShowAll;
+		wxCheckBox* m_checkBoxShowWarnings;
+		wxCheckBox* m_checkBoxShowErrors;
+		wxCheckBox* m_checkBoxShowInfos;
+		wxCheckBox* m_checkBoxShowActions;
+		wxButton* m_btnSaveReportToFile;
+		
+		// Virtual event handlers, overide them in your derived class
+		virtual void onCheckBoxShowAll( wxCommandEvent& event ) { event.Skip(); }
+		virtual void onCheckBoxShowWarnings( wxCommandEvent& event ) { event.Skip(); }
+		virtual void onCheckBoxShowErrors( wxCommandEvent& event ) { event.Skip(); }
+		virtual void onCheckBoxShowInfos( wxCommandEvent& event ) { event.Skip(); }
+		virtual void onCheckBoxShowActions( wxCommandEvent& event ) { event.Skip(); }
+		virtual void onBtnSaveToFile( wxCommandEvent& event ) { event.Skip(); }
+		
+	
+	public:
+		
+		WX_HTML_REPORT_PANEL_BASE( wxWindow* parent, wxWindowID id = wxID_ANY, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 500,300 ), long style = wxTAB_TRAVERSAL ); 
+		~WX_HTML_REPORT_PANEL_BASE();
+	
+};
+
+#endif //__WX_HTML_REPORT_PANEL_BASE_H__

=== modified file 'common/reporter.cpp'
--- old/common/reporter.cpp	2013-09-14 22:33:22.127000000 +0200
+++ new/common/reporter.cpp	2015-06-15 16:24:55.273999000 +0200
@@ -5,7 +5,7 @@
  * This program source code file is part of KiCad, a free EDA CAD application.
  *
  * Copyright (C) 2013 Wayne Stambaugh <stambaughw@xxxxxxxxxxx>
- * Copyright (C) 1992-2013 KiCad Developers, see change_log.txt for contributors.
+ * Copyright (C) 1992-2015 KiCad Developers, see change_log.txt for contributors.
  *
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -27,15 +27,16 @@
 
 #include <macros.h>
 #include <reporter.h>
+#include <wx_html_report_panel.h>
 
-REPORTER& REPORTER::Report( const char* aText )
+REPORTER& REPORTER::Report( const char* aText, REPORTER::SEVERITY aSeverity )
 {
     Report( FROM_UTF8( aText ) );
     return *this;
 }
 
 
-REPORTER& WX_TEXT_CTRL_REPORTER::Report( const wxString& aText )
+REPORTER& WX_TEXT_CTRL_REPORTER::Report( const wxString& aText, REPORTER::SEVERITY aSeverity )
 {
     wxCHECK_MSG( m_textCtrl != NULL, *this,
                  wxT( "No wxTextCtrl object defined in WX_TEXT_CTRL_REPORTER." ) );
@@ -44,8 +45,7 @@ REPORTER& WX_TEXT_CTRL_REPORTER::Report(
     return *this;
 }
 
-
-REPORTER& WX_STRING_REPORTER::Report( const wxString& aText )
+REPORTER& WX_STRING_REPORTER::Report( const wxString& aText, REPORTER::SEVERITY aSeverity )
 {
     wxCHECK_MSG( m_string != NULL, *this,
                  wxT( "No wxString object defined in WX_STRING_REPORTER." ) );
@@ -53,3 +53,12 @@ REPORTER& WX_STRING_REPORTER::Report( co
     *m_string << aText;
     return *this;
 }
+
+REPORTER& WX_HTML_PANEL_REPORTER::Report( const wxString& aText, SEVERITY aSeverity )
+{
+    wxCHECK_MSG( m_panel != NULL, *this,
+                 wxT( "No WX_HTML_REPORT_PANEL object defined in WX_HTML_PANEL_REPORTER." ) );
+
+    m_panel->Report( aText, aSeverity );
+    return *this;
+}
=== modified file 'eeschema/dialogs/dialog_bom.cpp'
--- old/eeschema/dialogs/dialog_bom.cpp	2015-06-12 09:02:06.285000000 +0200
+++ new/eeschema/dialogs/dialog_bom.cpp	2015-06-15 16:24:55.273999000 +0200
@@ -391,7 +391,6 @@ void DIALOG_BOM::OnRunPlugin( wxCommandE
 
     wxString reportmsg;
     WX_STRING_REPORTER reporter( &reportmsg );
-    reporter.SetReportAll( true );
     m_parent->SetNetListerCommand( m_textCtrlCommand->GetValue() );
     m_parent->CreateNetlist( -1, fullfilename, 0, &reporter );
 
=== modified file 'eeschema/dialogs/dialog_plot_schematic.cpp'
--- old/eeschema/dialogs/dialog_plot_schematic.cpp	2015-03-03 13:41:43.368000000 +0100
+++ new/eeschema/dialogs/dialog_plot_schematic.cpp	2015-06-15 16:24:55.273999000 +0200
@@ -38,6 +38,7 @@
 #include <base_units.h>
 #include <sch_sheet.h>
 #include <dialog_plot_schematic.h>
+#include <wx_html_report_panel.h>
 
 // Keys for configuration
 #define PLOT_FORMAT_KEY wxT( "PlotFormat" )
@@ -329,8 +330,6 @@ void DIALOG_PLOT_SCHEMATIC::PlotSchemati
         break;
 
     }
-
-    m_MessagesBox->AppendText( wxT( "****\n" ) );
 }
 
 wxFileName DIALOG_PLOT_SCHEMATIC::createPlotFileName( wxTextCtrl* aOutputDirectoryName,
@@ -346,10 +345,9 @@ wxFileName DIALOG_PLOT_SCHEMATIC::create
     if( !EnsureFileDirectoryExists( &outputDir, plotFileName, aReporter ) )
     {
         wxString msg;
-        msg.Printf( _( "Could not write plot files to folder \"%s\"." ),
+        msg.Printf( _( "Could not write plot files to folder '%s'." ),
                     GetChars( outputDir.GetPath() ) );
-        msg << wxT( "\n" );
-        aReporter->Report( msg );
+        aReporter->Report( msg, REPORTER::ERROR );
     }
 
     wxFileName fn( plotFileName );
=== modified file 'eeschema/dialogs/dialog_plot_schematic.h'
--- old/eeschema/dialogs/dialog_plot_schematic.h	2015-02-26 11:33:15.437000000 +0100
+++ new/eeschema/dialogs/dialog_plot_schematic.h	2015-06-15 16:24:55.273999000 +0200
@@ -100,10 +100,8 @@ private:
     * Everything done, close the plot and restore the environment
     * @param aPlotter the plotter to close and destroy
     * @param aOldsheetpath the stored old sheet path for the current sheet before the plot started
-    * @param aMsg the message which is print to the message box
     */
-    void    restoreEnvironment( PDF_PLOTTER* aPlotter, SCH_SHEET_PATH& aOldsheetpath,
-                                const wxString& aMsg );
+    void    restoreEnvironment( PDF_PLOTTER* aPlotter, SCH_SHEET_PATH& aOldsheetpath );
 
     // DXF
     void    CreateDXFFile( bool aPlotAll, bool aPlotFrameRef );
=== modified file 'eeschema/dialogs/dialog_plot_schematic_base.cpp'
--- old/eeschema/dialogs/dialog_plot_schematic_base.cpp	2015-06-15 15:54:58.331000000 +0200
+++ new/eeschema/dialogs/dialog_plot_schematic_base.cpp	2015-06-15 16:24:55.273999000 +0200
@@ -1,10 +1,12 @@
 ///////////////////////////////////////////////////////////////////////////
-// C++ code generated with wxFormBuilder (version Jun  5 2014)
+// C++ code generated with wxFormBuilder (version Jun  6 2014)
 // http://www.wxformbuilder.org/
 //
 // PLEASE DO "NOT" EDIT THIS FILE!
 ///////////////////////////////////////////////////////////////////////////
 
+#include "wx_html_report_panel.h"
+
 #include "dialog_plot_schematic_base.h"
 
 ///////////////////////////////////////////////////////////////////////////
@@ -48,7 +50,7 @@ DIALOG_PLOT_SCHEMATIC_BASE::DIALOG_PLOT_
 	wxString m_PaperSizeOptionChoices[] = { _("Schematic size"), _("Force size A4"), _("Force size A") };
 	int m_PaperSizeOptionNChoices = sizeof( m_PaperSizeOptionChoices ) / sizeof( wxString );
 	m_PaperSizeOption = new wxRadioBox( this, wxID_ANY, _("Page Size:"), wxDefaultPosition, wxDefaultSize, m_PaperSizeOptionNChoices, m_PaperSizeOptionChoices, 1, wxRA_SPECIFY_COLS );
-	m_PaperSizeOption->SetSelection( 0 );
+	m_PaperSizeOption->SetSelection( 1 );
 	m_paperOptionsSizer->Add( m_PaperSizeOption, 0, wxALL|wxEXPAND, 5 );
 	
 	m_paperHPGLSizer = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("HPGL Options") ), wxVERTICAL );
@@ -86,7 +88,7 @@ DIALOG_PLOT_SCHEMATIC_BASE::DIALOG_PLOT_
 	wxString m_plotFormatOptChoices[] = { _("Postscript"), _("PDF"), _("SVG"), _("DXF"), _("HPGL") };
 	int m_plotFormatOptNChoices = sizeof( m_plotFormatOptChoices ) / sizeof( wxString );
 	m_plotFormatOpt = new wxRadioBox( this, wxID_ANY, _("Format"), wxDefaultPosition, wxDefaultSize, m_plotFormatOptNChoices, m_plotFormatOptChoices, 1, wxRA_SPECIFY_COLS );
-	m_plotFormatOpt->SetSelection( 0 );
+	m_plotFormatOpt->SetSelection( 1 );
 	m_optionsSizer->Add( m_plotFormatOpt, 0, wxEXPAND|wxLEFT, 5 );
 	
 	wxStaticBoxSizer* sbSizerPlotFormat;
@@ -145,10 +147,10 @@ DIALOG_PLOT_SCHEMATIC_BASE::DIALOG_PLOT_
 	m_staticText2->Wrap( -1 );
 	bSizer4->Add( m_staticText2, 0, wxTOP|wxRIGHT|wxLEFT, 5 );
 	
-	m_MessagesBox = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_MULTILINE );
-	m_MessagesBox->SetMinSize( wxSize( -1,80 ) );
+	m_MessagesBox = new WX_HTML_REPORT_PANEL( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
+	m_MessagesBox->SetMinSize( wxSize( 300,150 ) );
 	
-	bSizer4->Add( m_MessagesBox, 1, wxBOTTOM|wxEXPAND|wxLEFT|wxRIGHT, 5 );
+	bSizer4->Add( m_MessagesBox, 1, wxEXPAND | wxALL, 5 );
 	
 	
 	bMainSizer->Add( bSizer4, 1, wxBOTTOM|wxEXPAND|wxLEFT|wxRIGHT, 5 );
=== modified file 'eeschema/dialogs/dialog_plot_schematic_base.fbp'
--- old/eeschema/dialogs/dialog_plot_schematic_base.fbp	2015-06-15 15:54:58.331000000 +0200
+++ new/eeschema/dialogs/dialog_plot_schematic_base.fbp	2015-06-15 16:24:55.273999000 +0200
@@ -448,7 +448,7 @@
                                         <property name="pin_button">1</property>
                                         <property name="pos"></property>
                                         <property name="resize">Resizable</property>
-                                        <property name="selection">0</property>
+                                        <property name="selection">1</property>
                                         <property name="show">1</property>
                                         <property name="size"></property>
                                         <property name="style">wxRA_SPECIFY_COLS</property>
@@ -989,7 +989,7 @@
                                 <property name="pin_button">1</property>
                                 <property name="pos"></property>
                                 <property name="resize">Resizable</property>
-                                <property name="selection">0</property>
+                                <property name="selection">1</property>
                                 <property name="show">1</property>
                                 <property name="size"></property>
                                 <property name="style">wxRA_SPECIFY_COLS</property>
@@ -1766,9 +1766,9 @@
                         </object>
                         <object class="sizeritem" expanded="1">
                             <property name="border">5</property>
-                            <property name="flag">wxBOTTOM|wxEXPAND|wxLEFT|wxRIGHT</property>
+                            <property name="flag">wxEXPAND | wxALL</property>
                             <property name="proportion">1</property>
-                            <object class="wxTextCtrl" expanded="1">
+                            <object class="wxPanel" expanded="1">
                                 <property name="BottomDockable">1</property>
                                 <property name="LeftDockable">1</property>
                                 <property name="RightDockable">1</property>
@@ -1799,10 +1799,9 @@
                                 <property name="max_size"></property>
                                 <property name="maximize_button">0</property>
                                 <property name="maximum_size"></property>
-                                <property name="maxlength"></property>
                                 <property name="min_size"></property>
                                 <property name="minimize_button">0</property>
-                                <property name="minimum_size">-1,80</property>
+                                <property name="minimum_size">300,150</property>
                                 <property name="moveable">1</property>
                                 <property name="name">m_MessagesBox</property>
                                 <property name="pane_border">1</property>
@@ -1814,18 +1813,12 @@
                                 <property name="resize">Resizable</property>
                                 <property name="show">1</property>
                                 <property name="size"></property>
-                                <property name="style">wxTE_MULTILINE</property>
-                                <property name="subclass"></property>
+                                <property name="subclass">WX_HTML_REPORT_PANEL; wx_html_report_panel.h</property>
                                 <property name="toolbar_pane">0</property>
                                 <property name="tooltip"></property>
-                                <property name="validator_data_type"></property>
-                                <property name="validator_style">wxFILTER_NONE</property>
-                                <property name="validator_type">wxDefaultValidator</property>
-                                <property name="validator_variable"></property>
-                                <property name="value"></property>
                                 <property name="window_extra_style"></property>
                                 <property name="window_name"></property>
-                                <property name="window_style"></property>
+                                <property name="window_style">wxTAB_TRAVERSAL</property>
                                 <event name="OnChar"></event>
                                 <event name="OnEnterWindow"></event>
                                 <event name="OnEraseBackground"></event>
@@ -1848,10 +1841,6 @@
                                 <event name="OnRightUp"></event>
                                 <event name="OnSetFocus"></event>
                                 <event name="OnSize"></event>
-                                <event name="OnText"></event>
-                                <event name="OnTextEnter"></event>
-                                <event name="OnTextMaxLen"></event>
-                                <event name="OnTextURL"></event>
                                 <event name="OnUpdateUI"></event>
                             </object>
                         </object>
=== modified file 'eeschema/dialogs/dialog_plot_schematic_base.h'
--- old/eeschema/dialogs/dialog_plot_schematic_base.h	2014-11-02 17:25:04.232000000 +0100
+++ new/eeschema/dialogs/dialog_plot_schematic_base.h	2015-06-15 16:24:55.273999000 +0200
@@ -1,5 +1,5 @@
 ///////////////////////////////////////////////////////////////////////////
-// C++ code generated with wxFormBuilder (version Jun  5 2014)
+// C++ code generated with wxFormBuilder (version Jun  6 2014)
 // http://www.wxformbuilder.org/
 //
 // PLEASE DO "NOT" EDIT THIS FILE!
@@ -12,6 +12,7 @@
 #include <wx/xrc/xmlres.h>
 #include <wx/intl.h>
 class DIALOG_SHIM;
+class WX_HTML_REPORT_PANEL;
 
 #include "dialog_shim.h"
 #include <wx/string.h>
@@ -27,6 +28,7 @@ class DIALOG_SHIM;
 #include <wx/choice.h>
 #include <wx/statbox.h>
 #include <wx/checkbox.h>
+#include <wx/panel.h>
 #include <wx/dialog.h>
 
 ///////////////////////////////////////////////////////////////////////////
@@ -67,7 +69,7 @@ class DIALOG_PLOT_SCHEMATIC_BASE : publi
 		wxButton* m_buttonPlotAll;
 		wxButton* m_buttonQuit;
 		wxStaticText* m_staticText2;
-		wxTextCtrl* m_MessagesBox;
+		WX_HTML_REPORT_PANEL* m_MessagesBox;
 		
 		// Virtual event handlers, overide them in your derived class
 		virtual void OnCloseWindow( wxCloseEvent& event ) { event.Skip(); }
=== modified file 'eeschema/netform.cpp'
--- old/eeschema/netform.cpp	2015-06-12 09:02:06.285000000 +0200
+++ new/eeschema/netform.cpp	2015-06-15 16:24:55.273999000 +0200
@@ -106,30 +106,36 @@ bool SCH_EDIT_FRAME::WriteNetListFile( N
             wxArrayString output, errors;
             int diag = wxExecute (commandLine, output, errors, wxEXEC_SYNC );
 
-            aReporter->Report( _("Run command:") );
-            *aReporter << wxT("\n") << commandLine << wxT("\n\n");
+            wxString msg;
+
+            msg << _("Run command:") << wxT("\n") << commandLine << wxT("\n\n");
+
+            aReporter->Report( msg, REPORTER::ACTION );
 
             if( diag != 0 )
-                aReporter->Report( wxString::Format( _("Command error. Return code %d"), diag ) );
+                aReporter->Report( wxString::Format( _("Command error. Return code %d"), diag ), REPORTER::ERROR );
             else
-                aReporter->Report( _("Success") );
+                aReporter->Report( _("Success"), REPORTER::INFO );
 
             *aReporter << wxT("\n");
 
-            if( output.GetCount() && aReporter->ReportWarnings() )
+            if( output.GetCount() )
             {
-                *aReporter << wxT("\n") << _("Info messages:") << wxT("\n");
+                msg << wxT("\n") << _("Info messages:") << wxT("\n");
+                aReporter->Report( msg, REPORTER::INFO );
 
                 for( unsigned ii = 0; ii < output.GetCount(); ii++ )
-                    *aReporter << output[ii] << wxT("\n");
+                    aReporter->Report( output[ii], REPORTER::INFO );
             }
 
-            if( errors.GetCount() && aReporter->ReportErrors() )
+            if( errors.GetCount() )
             {
-                *aReporter << wxT("\n") << _("Error messages:") << wxT("\n");
+                msg << wxT("\n") << _("Error messages:") << wxT("\n");
+                aReporter->Report( msg, REPORTER::INFO );
 
                 for( unsigned ii = 0; ii < errors.GetCount(); ii++ )
-                    *aReporter << errors[ii] << wxT("\n");
+                    aReporter->Report( errors[ii], REPORTER::ERROR );
+
             }
         }
         else
=== modified file 'eeschema/plot_schematic_DXF.cpp'
--- old/eeschema/plot_schematic_DXF.cpp	2015-02-21 10:46:44.178999000 +0100
+++ new/eeschema/plot_schematic_DXF.cpp	2015-06-15 16:24:55.273999000 +0200
@@ -30,9 +30,11 @@
 #include <class_sch_screen.h>
 #include <schframe.h>
 #include <sch_sheet_path.h>
-#include <dialog_plot_schematic.h>
 #include <project.h>
 
+#include <dialog_plot_schematic.h>
+#include <wx_html_report_panel.h>
+
 
 void DIALOG_PLOT_SCHEMATIC::CreateDXFFile( bool aPlotAll, bool aPlotFrameRef )
 {
@@ -51,7 +53,7 @@ void DIALOG_PLOT_SCHEMATIC::CreateDXFFil
 
     sheetpath = SheetList.GetFirst();
     SCH_SHEET_PATH list;
-    WX_TEXT_CTRL_REPORTER reporter(m_MessagesBox);
+    REPORTER& reporter = m_MessagesBox->Reporter();
 
     while( true )
     {
@@ -89,19 +91,19 @@ void DIALOG_PLOT_SCHEMATIC::CreateDXFFil
 
             if( PlotOneSheetDXF( plotFileName.GetFullPath(), screen, plot_offset, 1.0, aPlotFrameRef ) )
             {
-                msg.Printf( _( "Plot: '%s' OK\n" ), GetChars( plotFileName.GetFullPath() ) );
+                msg.Printf( _( "Plot: '%s' OK.\n" ), GetChars( plotFileName.GetFullPath() ) );
+                reporter.Report( msg, REPORTER::ACTION );
             }
             else    // Error
             {
-                msg.Printf( _( "Unable to create '%s'\n" ), GetChars( plotFileName.GetFullPath() ) );
+                msg.Printf( _( "Unable to create file '%s'.\n" ), GetChars( plotFileName.GetFullPath() ) );
+                reporter.Report( msg, REPORTER::ERROR );
             }
-            m_MessagesBox->AppendText( msg );
-
         }
         catch( IO_ERROR& e )
         {
-            msg.Printf( wxT( "DXF Plotter Exception : '%s'"), GetChars( e.errorText ) );
-            m_MessagesBox->AppendText( msg );
+            msg.Printf( wxT( "DXF Plotter exception: %s"), GetChars( e.errorText ) );
+            reporter.Report( msg, REPORTER::ERROR );
             schframe->SetCurrentSheet( oldsheetpath );
             schframe->GetCurrentSheet().UpdateAllScreenReferences();
             schframe->SetSheetNumberAndCount();
=== modified file 'eeschema/plot_schematic_HPGL.cpp'
--- old/eeschema/plot_schematic_HPGL.cpp	2015-02-21 10:46:44.178999000 +0100
+++ new/eeschema/plot_schematic_HPGL.cpp	2015-06-15 16:24:55.273999000 +0200
@@ -34,7 +34,7 @@
 #include <project.h>
 
 #include <dialog_plot_schematic.h>
-
+#include <wx_html_report_panel.h>
 
 enum HPGL_PAGEZ_T {
     PAGE_DEFAULT = 0,
@@ -124,7 +124,7 @@ void DIALOG_PLOT_SCHEMATIC::createHPGLFi
 
     sheetpath = SheetList.GetFirst();
     SCH_SHEET_PATH  list;
-    WX_TEXT_CTRL_REPORTER reporter(m_MessagesBox);
+    REPORTER& reporter = m_MessagesBox->Reporter();
 
     SetHPGLPenWidth();
 
@@ -186,19 +186,23 @@ void DIALOG_PLOT_SCHEMATIC::createHPGLFi
 
             if( Plot_1_Page_HPGL( plotFileName.GetFullPath(), screen, plotPage, plotOffset,
                                 plot_scale, aPlotFrameRef ) )
-                msg.Printf( _( "Plot: '%s' OK\n" ), GetChars( plotFileName.GetFullPath() ) );
-            else    // Error
-                msg.Printf( _( "Unable to create '%s'\n" ), GetChars( plotFileName.GetFullPath() ) );
-
-            m_MessagesBox->AppendText( msg );
+            {
+                msg.Printf( _( "Plot: '%s' OK.\n" ), GetChars( plotFileName.GetFullPath() ) );
+                reporter.Report( msg, REPORTER::ACTION );
+            }
+            else
+            {
+                msg.Printf( _( "Unable to create file '%s'.\n" ), GetChars( plotFileName.GetFullPath() ) );
+                reporter.Report( msg, REPORTER::ERROR );
+            }
 
             if( !aPlotAll )
                 break;
         }
         catch( IO_ERROR& e )
         {
-            msg.Printf( wxT( "HPGL Plotter Exception : '%s'"), GetChars( e.errorText ) );
-            m_MessagesBox->AppendText( msg );
+            msg.Printf( wxT( "HPGL Plotter exception: %s"), GetChars( e.errorText ) );
+            reporter.Report( msg, REPORTER::ERROR );
         }
 
     }
=== modified file 'eeschema/plot_schematic_PDF.cpp'
--- old/eeschema/plot_schematic_PDF.cpp	2015-02-26 11:33:15.437000000 +0100
+++ new/eeschema/plot_schematic_PDF.cpp	2015-06-15 16:24:55.273999000 +0200
@@ -31,9 +31,12 @@
 #include <schframe.h>
 #include <base_units.h>
 #include <sch_sheet_path.h>
-#include <dialog_plot_schematic.h>
 #include <project.h>
 
+#include <reporter.h>
+
+#include <dialog_plot_schematic.h>
+#include <wx_html_report_panel.h>
 
 void DIALOG_PLOT_SCHEMATIC::createPDFFile( bool aPlotAll, bool aPlotFrameRef )
 {
@@ -61,7 +64,7 @@ void DIALOG_PLOT_SCHEMATIC::createPDFFil
 
     wxString msg;
     wxFileName plotFileName;
-    WX_TEXT_CTRL_REPORTER reporter(m_MessagesBox);
+    REPORTER& reporter = m_MessagesBox->Reporter();
 
     // First page handling is different
     bool first_page = true;
@@ -97,8 +100,8 @@ void DIALOG_PLOT_SCHEMATIC::createPDFFil
 
                 if( !plotter->OpenFile( plotFileName.GetFullPath() ) )
                 {
-                    msg.Printf( _( "Unable to create '%s'\n" ), GetChars( plotFileName.GetFullPath() ) );
-                    m_MessagesBox->AppendText( msg );
+                    msg.Printf( _( "Unable to create file '%s'.\n" ), GetChars( plotFileName.GetFullPath() ) );
+                    reporter.Report( msg, REPORTER::ERROR );
                     delete plotter;
                     return;
                 }
@@ -113,8 +116,10 @@ void DIALOG_PLOT_SCHEMATIC::createPDFFil
             catch( const IO_ERROR& e )
             {
                 // Cannot plot PDF file
-                msg.Printf( wxT( "PDF Plotter Exception : <%s>"), GetChars( e.errorText ) );
-                restoreEnvironment(plotter, oldsheetpath, msg);
+                msg.Printf( wxT( "PDF Plotter exception: %s" ), GetChars( e.errorText ) );
+                reporter.Report( msg, REPORTER::ERROR );
+
+                restoreEnvironment( plotter, oldsheetpath );
                 return;
             }
 
@@ -132,14 +137,17 @@ void DIALOG_PLOT_SCHEMATIC::createPDFFil
     } while( aPlotAll && sheetpath );
 
     // Everything done, close the plot and restore the environment
-    msg.Printf( _( "Plot: <%s> OK\n" ), GetChars( plotFileName.GetFullPath() ) );
-    restoreEnvironment(plotter, oldsheetpath, msg);
+    msg.Printf( _( "Plot: '%s' OK.\n" ), GetChars( plotFileName.GetFullPath() ) );
+    reporter.Report( msg, REPORTER::ACTION );
+
+
+    restoreEnvironment(plotter, oldsheetpath );
 
 }
 
 
 void DIALOG_PLOT_SCHEMATIC::restoreEnvironment( PDF_PLOTTER* aPlotter,
-                            SCH_SHEET_PATH& aOldsheetpath, const wxString& aMsg )
+                            SCH_SHEET_PATH& aOldsheetpath )
 {
     aPlotter->EndPlot();
     delete aPlotter;
@@ -149,8 +157,6 @@ void DIALOG_PLOT_SCHEMATIC::restoreEnvir
     m_parent->SetCurrentSheet( aOldsheetpath );
     m_parent->GetCurrentSheet().UpdateAllScreenReferences();
     m_parent->SetSheetNumberAndCount();
-
-    m_MessagesBox->AppendText( aMsg );
 }
 
 
=== modified file 'eeschema/plot_schematic_PS.cpp'
--- old/eeschema/plot_schematic_PS.cpp	2015-02-21 10:46:44.178999000 +0100
+++ new/eeschema/plot_schematic_PS.cpp	2015-06-15 16:24:55.273999000 +0200
@@ -30,10 +30,11 @@
 #include <schframe.h>
 #include <base_units.h>
 #include <sch_sheet_path.h>
-#include <dialog_plot_schematic.h>
 #include <project.h>
 #include <reporter.h>
 
+#include <dialog_plot_schematic.h>
+#include <wx_html_report_panel.h>
 
 void DIALOG_PLOT_SCHEMATIC::createPSFile( bool aPlotAll, bool aPlotFrameRef )
 {
@@ -107,7 +108,7 @@ void DIALOG_PLOT_SCHEMATIC::createPSFile
         wxFileName outputDir = wxFileName::DirName( outputDirName );
 
         wxString msg;
-        WX_TEXT_CTRL_REPORTER reporter(m_MessagesBox);
+        REPORTER& reporter = m_MessagesBox->Reporter();
 
         try
         {
@@ -119,20 +120,21 @@ void DIALOG_PLOT_SCHEMATIC::createPSFile
             if( plotOneSheetPS( plotFileName.GetFullPath(), screen, plotPage, plot_offset,
                                 scale, aPlotFrameRef ) )
             {
-                msg.Printf( _( "Plot: '%s' OK\n" ), GetChars( plotFileName.GetFullPath() ) );
+                msg.Printf( _( "Plot: '%s' OK.\n" ), GetChars( plotFileName.GetFullPath() ) );
+                reporter.Report( msg, REPORTER::ACTION );
             }
             else
             {
                 // Error
-                msg.Printf( _( "Unable to create '%s'\n" ), GetChars( plotFileName.GetFullPath() ) );
+                msg.Printf( _( "Unable to create file '%s'.\n" ), GetChars( plotFileName.GetFullPath() ) );
+                reporter.Report( msg, REPORTER::ERROR );
             }
 
-            m_MessagesBox->AppendText( msg );
         }
         catch( IO_ERROR& e )
         {
-            msg.Printf( wxT( "PS Plotter Exception : '%s'"), GetChars( e.errorText ) );
-            m_MessagesBox->AppendText( msg );
+            msg.Printf( wxT( "PS Plotter exception: %s"), GetChars( e.errorText ) );
+            reporter.Report( msg, REPORTER::ERROR );
         }
 
         if( !aPlotAll )
=== modified file 'eeschema/plot_schematic_SVG.cpp'
--- old/eeschema/plot_schematic_SVG.cpp	2015-02-21 10:46:44.178999000 +0100
+++ new/eeschema/plot_schematic_SVG.cpp	2015-06-15 16:24:55.273999000 +0200
@@ -36,13 +36,15 @@
 #include <libeditframe.h>
 #include <sch_sheet_path.h>
 #include <project.h>
+#include <reporter.h>
 
 #include <dialog_plot_schematic.h>
-
+#include <wx_html_report_panel.h>
 
 void DIALOG_PLOT_SCHEMATIC::createSVGFile( bool aPrintAll, bool aPrintFrameRef )
 {
     wxString    msg;
+    REPORTER& reporter = m_MessagesBox->Reporter();
 
     if( aPrintAll )
     {
@@ -51,7 +53,6 @@ void DIALOG_PLOT_SCHEMATIC::createSVGFil
         SCH_SHEET_LIST  SheetList( NULL );
         sheetpath = SheetList.GetFirst();
         SCH_SHEET_PATH  list;
-        WX_TEXT_CTRL_REPORTER reporter(m_MessagesBox);
 
         for( ; ; )
         {
@@ -90,22 +91,22 @@ void DIALOG_PLOT_SCHEMATIC::createSVGFil
 
                 if( !success )
                 {
-                    msg.Printf( _( "Error creating file '%s'\n" ),
+                    msg.Printf( _( "Cannot create file '%s'.\n" ),
                                 GetChars( plotFileName.GetFullPath() ) );
+                    reporter.Report( msg, REPORTER::ERROR );
                 }
                 else
                 {
-                    msg.Printf( _( "File '%s' OK\n" ),
-                                GetChars( plotFileName.GetFullPath() ) );
+                    msg.Printf( _( "Plot: '%s' OK.\n" ),
+                                    GetChars( plotFileName.GetFullPath() ) );
+                    reporter.Report( msg, REPORTER::ACTION );
                 }
-
-                m_MessagesBox->AppendText( msg );
             }
             catch( const IO_ERROR& e )
             {
                 // Cannot plot SVG file
-                msg.Printf( wxT( "SVG Plotter Exception : '%s'" ), GetChars( e.errorText ) );
-                m_MessagesBox->AppendText( msg );
+                msg.Printf( wxT( "SVG Plotter exception: %s" ), GetChars( e.errorText ) );
+                reporter.Report( msg, REPORTER::ERROR );
 
                 m_parent->SetCurrentSheet( oldsheetpath );
                 m_parent->GetCurrentSheet().UpdateAllScreenReferences();
@@ -133,21 +134,23 @@ void DIALOG_PLOT_SCHEMATIC::createSVGFil
                                             aPrintFrameRef );
             if( success )
             {
-                msg.Printf( _( "Plot: <%s> OK\n" ),
+                msg.Printf( _( "Plot: '%s' OK.\n" ),
                             GetChars( fn.GetFullPath() ) );
+                reporter.Report( msg, REPORTER::ACTION );
+
             }
             else    // Error
             {
-                msg.Printf( _( "Unable to create <%s>\n" ),
+                msg.Printf( _( "Unable to create file '%s'.\n" ),
                             GetChars( fn.GetFullPath() ) );
+                reporter.Report( msg, REPORTER::ERROR );
             }
-            m_MessagesBox->AppendText( msg );
         }
         catch( const IO_ERROR& e )
         {
             // Cannot plot SVG file
-            msg.Printf( wxT( "SVG Plotter Exception : <%s>"), GetChars( e.errorText ) );
-            m_MessagesBox->AppendText( msg );
+            msg.Printf( wxT( "SVG Plotter exception: %s."), GetChars( e.errorText ) );
+            reporter.Report( msg, REPORTER::ERROR );
             return;
         }
     }
=== modified file 'include/reporter.h'
--- old/include/reporter.h	2015-04-14 17:12:35.177000000 +0200
+++ new/include/reporter.h	2015-06-15 16:24:55.273999000 +0200
@@ -35,6 +35,8 @@
 
 class wxString;
 class wxTextCtrl;
+class wxHtmlListbox;
+class WX_HTML_REPORT_PANEL;
 
 
 /**
@@ -47,28 +49,36 @@ class wxTextCtrl;
  * <li> know too much about the caller's UI, i.e. wx. </li>
  * <li> stop after the first error </li>
  * </ul>
- * the reporter has 3 levels (flags) for filtering:
- * no filter
- * report warning
- * report errors
- * They are indicators for the calling code, filtering is not made here
+ * the reporter has 4 severity levels (flags) tagging the messages:
+ * - information
+ * - warning
+ * - error
+ * - action (i.e. indication of changes - add component, change footprint, etc. )
+ * They are indicators for the message formatting and displaying code,
+ * filtering is not made here.
  */
-class REPORTER
-{
-    bool m_reportAll;       // Filter flag: set to true to report all messages
-    bool m_reportWarnings;  // Filter flag: set to true to report warning
-    bool m_reportErrors;    // Filter flag: set to true to report errors
+class REPORTER {
 
 public:
+    ///> Severity of the reported messages. Prov
+    enum SEVERITY {
+        UNDEFINED = 0x0,
+        INFO = 0x1,
+        WARNING = 0x2,
+        ERROR = 0x4,
+        ACTION = 0x8
+    };
+
     /**
      * Function Report
      * is a pure virtual function to override in the derived object.
      *
      * @param aText is the string to report.
      */
-    virtual REPORTER& Report( const wxString& aText ) = 0;
 
-    REPORTER& Report( const char* aText );
+    virtual REPORTER& Report( const wxString& aText, SEVERITY aSeverity = UNDEFINED ) = 0;
+
+    REPORTER& Report( const char* aText, SEVERITY aSeverity = UNDEFINED );
 
     REPORTER& operator <<( const wxString& aText ) { return Report( aText ); }
 
@@ -77,41 +87,6 @@ public:
     REPORTER& operator <<( wxChar aChar ) { return Report( wxString( aChar ) ); }
 
     REPORTER& operator <<( const char* aText ) { return Report( aText ); }
-
-    /**
-     * Returns true if all messages should be reported
-     */
-    bool ReportAll() { return m_reportAll; }
-
-    /**
-     * Returns true if all messages or warning messages should be reported
-     */
-    bool ReportWarnings() { return m_reportAll | m_reportWarnings; }
-
-    /**
-     * Returns true if all messages or error messages should be reported
-     */
-    bool ReportErrors() { return m_reportAll | m_reportErrors; }
-
-    /**
-     * Set the report filter state, for all messages
-     * @param aEnable = filter state (true/false)
-     */
-    void SetReportAll( bool aEnable) { m_reportAll = aEnable; }
-
-    /**
-     * Set the report filter state, for warning messages
-     * note: report can be disable only if m_reportAll = false
-     * @param aEnable = filter state (true/false)
-     */
-    void SetReportWarnings( bool aEnable) { m_reportWarnings = aEnable; }
-
-    /**
-     * Set the report filter state, for error messages
-     * note: report can be disable only if m_reportAll = false
-     * @param aEnable = filter state (true/false)
-     */
-    void SetReportErrors( bool aEnable) { m_reportErrors = aEnable; }
 };
 
 
@@ -128,12 +103,9 @@ public:
         REPORTER(),
         m_textCtrl( aTextCtrl )
     {
-        SetReportAll( true );
-        SetReportWarnings( true );
-        SetReportErrors( true );
     }
 
-    REPORTER& Report( const wxString& aText );
+    REPORTER& Report( const wxString& aText, SEVERITY aSeverity = UNDEFINED );
 };
 
 
@@ -152,7 +124,26 @@ public:
     {
     }
 
-    REPORTER& Report( const wxString& aText );
+    REPORTER& Report( const wxString& aText, SEVERITY aSeverity = UNDEFINED );
+};
+
+
+/**
+ * Class WX_HTML_PANEL_REPORTER
+ * is a wrapper for reporting to a wx HTML window
+ */
+class WX_HTML_PANEL_REPORTER : public REPORTER
+{
+    WX_HTML_REPORT_PANEL* m_panel;
+
+public:
+    WX_HTML_PANEL_REPORTER( WX_HTML_REPORT_PANEL* aPanel ) :
+        REPORTER(),
+        m_panel( aPanel )
+    {
+    }
+
+    REPORTER& Report( const wxString& aText, SEVERITY aSeverity = UNDEFINED );
 };
 
 #endif     // _REPORTER_H_
=== modified file 'pcbnew/class_board.cpp'
--- old/pcbnew/class_board.cpp	2015-06-04 14:54:07.809000000 +0200
+++ new/pcbnew/class_board.cpp	2015-06-15 16:24:55.273999000 +0200
@@ -2231,21 +2231,14 @@ void BOARD::ReplaceNetlist( NETLIST& aNe
     {
         COMPONENT* component = aNetlist.GetComponent( i );
 
-        if( aReporter && aReporter->ReportAll() )
+        if( aReporter )
         {
-#if defined(DEBUG)
-            if( component->GetReference() == wxT( "D2" ) )
-            {
-                int breakhere = 1;
-                (void) breakhere;
-            }
-#endif
 
             msg.Printf( _( "Checking netlist component footprint \"%s:%s:%s\".\n" ),
                         GetChars( component->GetReference() ),
                         GetChars( component->GetTimeStamp() ),
                         GetChars( component->GetFPID().Format() ) );
-            aReporter->Report( msg );
+            aReporter->Report( msg, REPORTER::INFO );
         }
 
         if( aNetlist.IsFindByTimeStamp() )
@@ -2264,8 +2257,7 @@ void BOARD::ReplaceNetlist( NETLIST& aNe
                                 GetChars( component->GetTimeStamp() ),
                                 GetChars( component->GetFPID().Format() ) );
 
-                    if( aReporter->ReportWarnings() )
-                        aReporter->Report( msg );
+      				aReporter->Report( msg, REPORTER::ACTION );
                 }
                 else
                 {
@@ -2275,8 +2267,7 @@ void BOARD::ReplaceNetlist( NETLIST& aNe
                                 GetChars( component->GetTimeStamp() ),
                                 GetChars( component->GetFPID().Format() ) );
 
-                    if( aReporter->ReportErrors() )
-                        aReporter->Report( msg );
+                    aReporter->Report( msg, REPORTER::ERROR );
                 }
             }
 
@@ -2298,7 +2289,7 @@ void BOARD::ReplaceNetlist( NETLIST& aNe
             {
                 if( aNetlist.GetReplaceFootprints() )
                 {
-                    if( aReporter )
+               		if( aReporter )
                     {
                         if( component->GetModule() != NULL )
                         {
@@ -2309,8 +2300,7 @@ void BOARD::ReplaceNetlist( NETLIST& aNe
                                         GetChars( footprint->GetFPID().Format() ),
                                         GetChars( component->GetFPID().Format() ) );
 
-                            if( aReporter->ReportWarnings() )
-                                aReporter->Report( msg );
+                            aReporter->Report( msg, REPORTER::ACTION );
                         }
                         else
                         {
@@ -2320,8 +2310,7 @@ void BOARD::ReplaceNetlist( NETLIST& aNe
                                         GetChars( footprint->GetPath() ),
                                         GetChars( component->GetFPID().Format() ) );
 
-                            if( aReporter->ReportErrors() )
-                                aReporter->Report( msg );
+                            aReporter->Report( msg, REPORTER::ERROR );
                         }
                     }
 
@@ -2343,16 +2332,16 @@ void BOARD::ReplaceNetlist( NETLIST& aNe
                 }
             }
 
-            // Test for reference designator field change.
+   			// Test for reference designator field change.
             if( footprint->GetReference() != component->GetReference() )
             {
-                if( aReporter && aReporter->ReportWarnings())
+                if( aReporter )
                 {
-                    msg.Printf( _( "Changing footprint \"%s:%s\" reference to \"%s\".\n" ),
+                    msg.Printf( _( "Changing component \"%s:%s\" reference to \"%s\".\n" ),
                                 GetChars( footprint->GetReference() ),
                                 GetChars( footprint->GetPath() ),
                                 GetChars( component->GetReference() ) );
-                    aReporter->Report( msg );
+                    aReporter->Report( msg, REPORTER::ACTION );
                 }
 
                 if( !aNetlist.IsDryRun() )
@@ -2362,30 +2351,30 @@ void BOARD::ReplaceNetlist( NETLIST& aNe
             // Test for value field change.
             if( footprint->GetValue() != component->GetValue() )
             {
-                if( aReporter && aReporter->ReportAll() )
+                if( aReporter )
                 {
-                    msg.Printf( _( "Changing footprint \"%s:%s\" value from \"%s\" to \"%s\".\n" ),
+                    msg.Printf( _( "Changing component \"%s:%s\" value from \"%s\" to \"%s\".\n" ),
                                 GetChars( footprint->GetReference() ),
                                 GetChars( footprint->GetPath() ),
                                 GetChars( footprint->GetValue() ),
                                 GetChars( component->GetValue() ) );
-                    aReporter->Report( msg );
+                    aReporter->Report( msg, REPORTER::ACTION );
                 }
 
                 if( !aNetlist.IsDryRun() )
                     footprint->SetValue( component->GetValue() );
             }
 
-            // Test for time stamp change.
+       		// Test for time stamp change.
             if( footprint->GetPath() != component->GetTimeStamp() )
             {
-                if( aReporter && aReporter->ReportWarnings() )
+                if( aReporter )
                 {
-                    msg.Printf( _( "Changing footprint path \"%s:%s\" to \"%s\".\n" ),
+                    msg.Printf( _( "Changing component path \"%s:%s\" to \"%s\".\n" ),
                                 GetChars( footprint->GetReference() ),
                                 GetChars( footprint->GetPath() ),
                                 GetChars( component->GetTimeStamp() ) );
-                    aReporter->Report( msg );
+                    aReporter->Report( msg, REPORTER::INFO );
                 }
 
                 if( !aNetlist.IsDryRun() )
@@ -2396,20 +2385,20 @@ void BOARD::ReplaceNetlist( NETLIST& aNe
         if( footprint == NULL )
             continue;
 
-        // At this point, the component footprint is updated.  Now update the nets.
+ 		// At this point, the component footprint is updated.  Now update the nets.
         for( pad = footprint->Pads();  pad;  pad = pad->Next() )
         {
             COMPONENT_NET net = component->GetNet( pad->GetPadName() );
 
             if( !net.IsValid() )                // Footprint pad had no net.
             {
-                if( aReporter && aReporter->ReportAll() && !pad->GetNetname().IsEmpty() )
+                if( aReporter && !pad->GetNetname().IsEmpty() )
                 {
                     msg.Printf( _( "Clearing component \"%s:%s\" pin \"%s\" net name.\n" ),
                                 GetChars( footprint->GetReference() ),
                                 GetChars( footprint->GetPath() ),
                                 GetChars( pad->GetPadName() ) );
-                    aReporter->Report( msg );
+                    aReporter->Report( msg, REPORTER::ACTION );
                 }
 
                 if( !aNetlist.IsDryRun() )
@@ -2419,7 +2408,7 @@ void BOARD::ReplaceNetlist( NETLIST& aNe
             {
                 if( net.GetNetName() != pad->GetNetname() )
                 {
-                    if( aReporter && aReporter->ReportAll() )
+                    if( aReporter )
                     {
                         msg.Printf( _( "Changing component \"%s:%s\" pin \"%s\" net name from "
                                        "\"%s\" to \"%s\".\n" ),
@@ -2428,7 +2417,7 @@ void BOARD::ReplaceNetlist( NETLIST& aNe
                                     GetChars( pad->GetPadName() ),
                                     GetChars( pad->GetNetname() ),
                                     GetChars( net.GetNetName() ) );
-                        aReporter->Report( msg );
+                        aReporter->Report( msg, REPORTER::ACTION );
                     }
 
                     if( !aNetlist.IsDryRun() )
@@ -2468,12 +2457,12 @@ void BOARD::ReplaceNetlist( NETLIST& aNe
 
             if( component == NULL )
             {
-                if( aReporter && aReporter->ReportWarnings() )
+                if( aReporter )
                 {
-                    msg.Printf( _( "Removing footprint \"%s:%s\".\n" ),
+                    msg.Printf( _( "Removing unused component \"%s:%s\".\n" ),
                                 GetChars( module->GetReference() ),
                                 GetChars( module->GetPath() ) );
-                    aReporter->Report( msg );
+                    aReporter->Report( msg, REPORTER::ACTION );
                 }
 
                 if( !aNetlist.IsDryRun() )
@@ -2528,13 +2517,13 @@ void BOARD::ReplaceNetlist( NETLIST& aNe
 
                     if( count == 1 )    // Really one pad, and nothing else
                     {
-                        if( aReporter && aReporter->ReportAll() )
+                        if( aReporter )
                         {
                             msg.Printf( _( "Remove single pad net \"%s\" on \"%s\" pad '%s'\n" ),
                                         GetChars( previouspad->GetNetname() ),
                                         GetChars( previouspad->GetParent()->GetReference() ),
                                         GetChars( previouspad->GetPadName() ) );
-                            aReporter->Report( msg );
+                            aReporter->Report( msg, REPORTER::ACTION );
                         }
 
                         previouspad->SetNetCode( NETINFO_LIST::UNCONNECTED );
@@ -2566,7 +2555,7 @@ void BOARD::ReplaceNetlist( NETLIST& aNe
     // Also verify if zones have acceptable nets, i.e. nets with pads.
     // Zone with no pad belongs to a "dead" net which happens after changes in schematic
     // when no more pad use this net name.
-    if( aReporter && aReporter->ReportErrors() )
+    if( aReporter )
     {
         wxString padname;
         for( i = 0; i < aNetlist.GetCount(); i++ )
@@ -2587,11 +2576,11 @@ void BOARD::ReplaceNetlist( NETLIST& aNe
                     continue;   // OK, pad found
 
                 // not found: bad footprint, report error
-                msg.Printf( _( "*** Error: Component '%s' pad '%s' not found in footprint '%s' ***\n" ),
+                msg.Printf( _( "Component '%s' pad '%s' not found in footprint '%s'\n" ),
                             GetChars( component->GetReference() ),
                             GetChars( padname ),
                             GetChars( footprint->GetFPID().Format() ) );
-                aReporter->Report( msg );
+                aReporter->Report( msg, REPORTER::ERROR );
             }
         }
 
@@ -2605,9 +2594,9 @@ void BOARD::ReplaceNetlist( NETLIST& aNe
 
             if( zone->GetNet()->GetNodesCount() == 0 )
             {
-                msg.Printf( _( "* Warning: copper zone (net name '%s'): net has no pad*\n" ),
+                msg.Printf( _( "Copper zone (net name '%s'): net has no pads connected." ),
                            GetChars( zone->GetNet()->GetNetname() ) );
-                aReporter->Report( msg );
+                aReporter->Report( msg, REPORTER::WARNING );
             }
         }
     }
=== modified file 'pcbnew/dialogs/dialog_SVG_print.cpp'
--- old/pcbnew/dialogs/dialog_SVG_print.cpp	2014-10-26 14:59:01.313999000 +0100
+++ new/pcbnew/dialogs/dialog_SVG_print.cpp	2015-06-15 16:24:55.273999000 +0200
@@ -46,6 +46,7 @@
 #include <class_board.h>
 #include <dialog_SVG_print_base.h>
 #include <invoke_pcb_dialog.h>
+#include <wx_html_report_panel.h>
 
 
 class DIALOG_SVG_PRINT : public DIALOG_SVG_PRINT_base
@@ -266,7 +267,7 @@ void DIALOG_SVG_PRINT::ExportSVGFile( bo
     wxFileName outputDir = wxFileName::DirName( m_outputDirectory );
     wxString boardFilename = m_board->GetFileName();
 
-    WX_TEXT_CTRL_REPORTER reporter( m_messagesBox );
+    REPORTER& reporter = m_messagesPanel->Reporter();
 
     if( !EnsureFileDirectoryExists( &outputDir, boardFilename, &reporter ) )
     {
@@ -301,15 +302,15 @@ void DIALOG_SVG_PRINT::ExportSVGFile( bo
 
         if( CreateSVGFile( fn.GetFullPath(), aOnlyOneFile ) )
         {
-            m_messagesBox->AppendText(
-                    wxString::Format( _( "Plot: '%s' OK\n" ), GetChars( fn.GetFullPath() ) )
-                    );
+            reporter.Report (
+                    wxString::Format( _( "Plot: '%s' OK." ), GetChars( fn.GetFullPath() ) ),
+                    REPORTER::ACTION );
         }
         else    // Error
         {
-            m_messagesBox->AppendText(
-                    wxString::Format( _( "** Unable to create '%s'**\n" ), GetChars( fn.GetFullPath() ) )
-                    );
+            reporter.Report (
+                    wxString::Format( _( "Unable to create file '%s'." ), GetChars( fn.GetFullPath() ) ),
+                    REPORTER::ERROR );
         }
 
         if( aOnlyOneFile )
=== modified file 'pcbnew/dialogs/dialog_SVG_print_base.cpp'
--- old/pcbnew/dialogs/dialog_SVG_print_base.cpp	2015-06-15 15:54:58.331000000 +0200
+++ new/pcbnew/dialogs/dialog_SVG_print_base.cpp	2015-06-15 16:24:55.273999000 +0200
@@ -1,10 +1,12 @@
 ///////////////////////////////////////////////////////////////////////////
-// C++ code generated with wxFormBuilder (version Nov  6 2013)
+// C++ code generated with wxFormBuilder (version Jun  6 2014)
 // http://www.wxformbuilder.org/
 //
 // PLEASE DO "NOT" EDIT THIS FILE!
 ///////////////////////////////////////////////////////////////////////////
 
+#include "wx_html_report_panel.h"
+
 #include "dialog_SVG_print_base.h"
 
 ///////////////////////////////////////////////////////////////////////////
@@ -117,14 +119,16 @@ DIALOG_SVG_PRINT_base::DIALOG_SVG_PRINT_
 	
 	bMainSizer->Add( bUpperSizer, 0, wxEXPAND, 5 );
 	
-	m_staticText2 = new wxStaticText( this, wxID_ANY, _("Messages:"), wxDefaultPosition, wxDefaultSize, 0 );
-	m_staticText2->Wrap( -1 );
-	bMainSizer->Add( m_staticText2, 0, wxTOP|wxRIGHT|wxLEFT, 5 );
+	wxBoxSizer* bSizer5;
+	bSizer5 = new wxBoxSizer( wxVERTICAL );
+	
+	m_messagesPanel = new WX_HTML_REPORT_PANEL( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
+	m_messagesPanel->SetMinSize( wxSize( 300,150 ) );
+	
+	bSizer5->Add( m_messagesPanel, 1, wxEXPAND | wxALL, 5 );
 	
-	m_messagesBox = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_MULTILINE|wxTE_READONLY );
-	m_messagesBox->SetMinSize( wxSize( -1,150 ) );
 	
-	bMainSizer->Add( m_messagesBox, 1, wxBOTTOM|wxRIGHT|wxLEFT|wxEXPAND, 5 );
+	bMainSizer->Add( bSizer5, 1, wxEXPAND, 5 );
 	
 	
 	this->SetSizer( bMainSizer );
=== modified file 'pcbnew/dialogs/dialog_SVG_print_base.fbp'
--- old/pcbnew/dialogs/dialog_SVG_print_base.fbp	2015-06-15 15:54:58.331000000 +0200
+++ new/pcbnew/dialogs/dialog_SVG_print_base.fbp	2015-06-15 16:24:55.273999000 +0200
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
 <wxFormBuilder_Project>
-    <FileVersion major="1" minor="11" />
+    <FileVersion major="1" minor="13" />
     <object class="Project" expanded="1">
         <property name="class_decoration"></property>
         <property name="code_generation">C++</property>
@@ -1242,176 +1242,93 @@
                 </object>
                 <object class="sizeritem" expanded="1">
                     <property name="border">5</property>
-                    <property name="flag">wxTOP|wxRIGHT|wxLEFT</property>
-                    <property name="proportion">0</property>
-                    <object class="wxStaticText" expanded="1">
-                        <property name="BottomDockable">1</property>
-                        <property name="LeftDockable">1</property>
-                        <property name="RightDockable">1</property>
-                        <property name="TopDockable">1</property>
-                        <property name="aui_layer"></property>
-                        <property name="aui_name"></property>
-                        <property name="aui_position"></property>
-                        <property name="aui_row"></property>
-                        <property name="best_size"></property>
-                        <property name="bg"></property>
-                        <property name="caption"></property>
-                        <property name="caption_visible">1</property>
-                        <property name="center_pane">0</property>
-                        <property name="close_button">1</property>
-                        <property name="context_help"></property>
-                        <property name="context_menu">1</property>
-                        <property name="default_pane">0</property>
-                        <property name="dock">Dock</property>
-                        <property name="dock_fixed">0</property>
-                        <property name="docking">Left</property>
-                        <property name="enabled">1</property>
-                        <property name="fg"></property>
-                        <property name="floatable">1</property>
-                        <property name="font"></property>
-                        <property name="gripper">0</property>
-                        <property name="hidden">0</property>
-                        <property name="id">wxID_ANY</property>
-                        <property name="label">Messages:</property>
-                        <property name="max_size"></property>
-                        <property name="maximize_button">0</property>
-                        <property name="maximum_size"></property>
-                        <property name="min_size"></property>
-                        <property name="minimize_button">0</property>
-                        <property name="minimum_size"></property>
-                        <property name="moveable">1</property>
-                        <property name="name">m_staticText2</property>
-                        <property name="pane_border">1</property>
-                        <property name="pane_position"></property>
-                        <property name="pane_size"></property>
-                        <property name="permission">protected</property>
-                        <property name="pin_button">1</property>
-                        <property name="pos"></property>
-                        <property name="resize">Resizable</property>
-                        <property name="show">1</property>
-                        <property name="size"></property>
-                        <property name="style"></property>
-                        <property name="subclass"></property>
-                        <property name="toolbar_pane">0</property>
-                        <property name="tooltip"></property>
-                        <property name="window_extra_style"></property>
-                        <property name="window_name"></property>
-                        <property name="window_style"></property>
-                        <property name="wrap">-1</property>
-                        <event name="OnChar"></event>
-                        <event name="OnEnterWindow"></event>
-                        <event name="OnEraseBackground"></event>
-                        <event name="OnKeyDown"></event>
-                        <event name="OnKeyUp"></event>
-                        <event name="OnKillFocus"></event>
-                        <event name="OnLeaveWindow"></event>
-                        <event name="OnLeftDClick"></event>
-                        <event name="OnLeftDown"></event>
-                        <event name="OnLeftUp"></event>
-                        <event name="OnMiddleDClick"></event>
-                        <event name="OnMiddleDown"></event>
-                        <event name="OnMiddleUp"></event>
-                        <event name="OnMotion"></event>
-                        <event name="OnMouseEvents"></event>
-                        <event name="OnMouseWheel"></event>
-                        <event name="OnPaint"></event>
-                        <event name="OnRightDClick"></event>
-                        <event name="OnRightDown"></event>
-                        <event name="OnRightUp"></event>
-                        <event name="OnSetFocus"></event>
-                        <event name="OnSize"></event>
-                        <event name="OnUpdateUI"></event>
-                    </object>
-                </object>
-                <object class="sizeritem" expanded="1">
-                    <property name="border">5</property>
-                    <property name="flag">wxBOTTOM|wxRIGHT|wxLEFT|wxEXPAND</property>
+                    <property name="flag">wxEXPAND</property>
                     <property name="proportion">1</property>
-                    <object class="wxTextCtrl" expanded="1">
-                        <property name="BottomDockable">1</property>
-                        <property name="LeftDockable">1</property>
-                        <property name="RightDockable">1</property>
-                        <property name="TopDockable">1</property>
-                        <property name="aui_layer"></property>
-                        <property name="aui_name"></property>
-                        <property name="aui_position"></property>
-                        <property name="aui_row"></property>
-                        <property name="best_size"></property>
-                        <property name="bg"></property>
-                        <property name="caption"></property>
-                        <property name="caption_visible">1</property>
-                        <property name="center_pane">0</property>
-                        <property name="close_button">1</property>
-                        <property name="context_help"></property>
-                        <property name="context_menu">1</property>
-                        <property name="default_pane">0</property>
-                        <property name="dock">Dock</property>
-                        <property name="dock_fixed">0</property>
-                        <property name="docking">Left</property>
-                        <property name="enabled">1</property>
-                        <property name="fg"></property>
-                        <property name="floatable">1</property>
-                        <property name="font"></property>
-                        <property name="gripper">0</property>
-                        <property name="hidden">0</property>
-                        <property name="id">wxID_ANY</property>
-                        <property name="max_size"></property>
-                        <property name="maximize_button">0</property>
-                        <property name="maximum_size"></property>
-                        <property name="maxlength"></property>
-                        <property name="min_size"></property>
-                        <property name="minimize_button">0</property>
-                        <property name="minimum_size">-1,150</property>
-                        <property name="moveable">1</property>
-                        <property name="name">m_messagesBox</property>
-                        <property name="pane_border">1</property>
-                        <property name="pane_position"></property>
-                        <property name="pane_size"></property>
-                        <property name="permission">protected</property>
-                        <property name="pin_button">1</property>
-                        <property name="pos"></property>
-                        <property name="resize">Resizable</property>
-                        <property name="show">1</property>
-                        <property name="size"></property>
-                        <property name="style">wxTE_MULTILINE|wxTE_READONLY</property>
-                        <property name="subclass"></property>
-                        <property name="toolbar_pane">0</property>
-                        <property name="tooltip"></property>
-                        <property name="validator_data_type"></property>
-                        <property name="validator_style">wxFILTER_NONE</property>
-                        <property name="validator_type">wxDefaultValidator</property>
-                        <property name="validator_variable"></property>
-                        <property name="value"></property>
-                        <property name="window_extra_style"></property>
-                        <property name="window_name"></property>
-                        <property name="window_style"></property>
-                        <event name="OnChar"></event>
-                        <event name="OnEnterWindow"></event>
-                        <event name="OnEraseBackground"></event>
-                        <event name="OnKeyDown"></event>
-                        <event name="OnKeyUp"></event>
-                        <event name="OnKillFocus"></event>
-                        <event name="OnLeaveWindow"></event>
-                        <event name="OnLeftDClick"></event>
-                        <event name="OnLeftDown"></event>
-                        <event name="OnLeftUp"></event>
-                        <event name="OnMiddleDClick"></event>
-                        <event name="OnMiddleDown"></event>
-                        <event name="OnMiddleUp"></event>
-                        <event name="OnMotion"></event>
-                        <event name="OnMouseEvents"></event>
-                        <event name="OnMouseWheel"></event>
-                        <event name="OnPaint"></event>
-                        <event name="OnRightDClick"></event>
-                        <event name="OnRightDown"></event>
-                        <event name="OnRightUp"></event>
-                        <event name="OnSetFocus"></event>
-                        <event name="OnSize"></event>
-                        <event name="OnText"></event>
-                        <event name="OnTextEnter"></event>
-                        <event name="OnTextMaxLen"></event>
-                        <event name="OnTextURL"></event>
-                        <event name="OnUpdateUI"></event>
+                    <object class="wxBoxSizer" expanded="1">
+                        <property name="minimum_size"></property>
+                        <property name="name">bSizer5</property>
+                        <property name="orient">wxVERTICAL</property>
+                        <property name="permission">none</property>
+                        <object class="sizeritem" expanded="1">
+                            <property name="border">5</property>
+                            <property name="flag">wxEXPAND | wxALL</property>
+                            <property name="proportion">1</property>
+                            <object class="wxPanel" expanded="1">
+                                <property name="BottomDockable">1</property>
+                                <property name="LeftDockable">1</property>
+                                <property name="RightDockable">1</property>
+                                <property name="TopDockable">1</property>
+                                <property name="aui_layer"></property>
+                                <property name="aui_name"></property>
+                                <property name="aui_position"></property>
+                                <property name="aui_row"></property>
+                                <property name="best_size"></property>
+                                <property name="bg"></property>
+                                <property name="caption"></property>
+                                <property name="caption_visible">1</property>
+                                <property name="center_pane">0</property>
+                                <property name="close_button">1</property>
+                                <property name="context_help"></property>
+                                <property name="context_menu">1</property>
+                                <property name="default_pane">0</property>
+                                <property name="dock">Dock</property>
+                                <property name="dock_fixed">0</property>
+                                <property name="docking">Left</property>
+                                <property name="enabled">1</property>
+                                <property name="fg"></property>
+                                <property name="floatable">1</property>
+                                <property name="font"></property>
+                                <property name="gripper">0</property>
+                                <property name="hidden">0</property>
+                                <property name="id">wxID_ANY</property>
+                                <property name="max_size"></property>
+                                <property name="maximize_button">0</property>
+                                <property name="maximum_size"></property>
+                                <property name="min_size"></property>
+                                <property name="minimize_button">0</property>
+                                <property name="minimum_size">300,150</property>
+                                <property name="moveable">1</property>
+                                <property name="name">m_messagesPanel</property>
+                                <property name="pane_border">1</property>
+                                <property name="pane_position"></property>
+                                <property name="pane_size"></property>
+                                <property name="permission">protected</property>
+                                <property name="pin_button">1</property>
+                                <property name="pos"></property>
+                                <property name="resize">Resizable</property>
+                                <property name="show">1</property>
+                                <property name="size"></property>
+                                <property name="subclass">WX_HTML_REPORT_PANEL; wx_html_report_panel.h</property>
+                                <property name="toolbar_pane">0</property>
+                                <property name="tooltip"></property>
+                                <property name="window_extra_style"></property>
+                                <property name="window_name"></property>
+                                <property name="window_style">wxTAB_TRAVERSAL</property>
+                                <event name="OnChar"></event>
+                                <event name="OnEnterWindow"></event>
+                                <event name="OnEraseBackground"></event>
+                                <event name="OnKeyDown"></event>
+                                <event name="OnKeyUp"></event>
+                                <event name="OnKillFocus"></event>
+                                <event name="OnLeaveWindow"></event>
+                                <event name="OnLeftDClick"></event>
+                                <event name="OnLeftDown"></event>
+                                <event name="OnLeftUp"></event>
+                                <event name="OnMiddleDClick"></event>
+                                <event name="OnMiddleDown"></event>
+                                <event name="OnMiddleUp"></event>
+                                <event name="OnMotion"></event>
+                                <event name="OnMouseEvents"></event>
+                                <event name="OnMouseWheel"></event>
+                                <event name="OnPaint"></event>
+                                <event name="OnRightDClick"></event>
+                                <event name="OnRightDown"></event>
+                                <event name="OnRightUp"></event>
+                                <event name="OnSetFocus"></event>
+                                <event name="OnSize"></event>
+                                <event name="OnUpdateUI"></event>
+                            </object>
+                        </object>
                     </object>
                 </object>
             </object>
=== modified file 'pcbnew/dialogs/dialog_SVG_print_base.h'
--- old/pcbnew/dialogs/dialog_SVG_print_base.h	2014-06-30 21:19:58.592999000 +0200
+++ new/pcbnew/dialogs/dialog_SVG_print_base.h	2015-06-15 16:24:55.273999000 +0200
@@ -1,5 +1,5 @@
 ///////////////////////////////////////////////////////////////////////////
-// C++ code generated with wxFormBuilder (version Nov  6 2013)
+// C++ code generated with wxFormBuilder (version Jun  6 2014)
 // http://www.wxformbuilder.org/
 //
 // PLEASE DO "NOT" EDIT THIS FILE!
@@ -12,6 +12,7 @@
 #include <wx/xrc/xmlres.h>
 #include <wx/intl.h>
 class DIALOG_SHIM;
+class WX_HTML_REPORT_PANEL;
 
 #include "dialog_shim.h"
 #include <wx/string.h>
@@ -26,6 +27,7 @@ class DIALOG_SHIM;
 #include <wx/statbox.h>
 #include <wx/radiobox.h>
 #include <wx/checkbox.h>
+#include <wx/panel.h>
 #include <wx/dialog.h>
 
 ///////////////////////////////////////////////////////////////////////////
@@ -57,8 +59,7 @@ class DIALOG_SVG_PRINT_base : public DIA
 		wxRadioBox* m_rbFileOpt;
 		wxButton* m_buttonCreateFile;
 		wxButton* m_buttonQuit;
-		wxStaticText* m_staticText2;
-		wxTextCtrl* m_messagesBox;
+		WX_HTML_REPORT_PANEL* m_messagesPanel;
 		
 		// Virtual event handlers, overide them in your derived class
 		virtual void OnCloseWindow( wxCloseEvent& event ) { event.Skip(); }
=== modified file 'pcbnew/dialogs/dialog_gen_module_position_file_base.cpp'
--- old/pcbnew/dialogs/dialog_gen_module_position_file_base.cpp	2015-06-15 15:54:58.331000000 +0200
+++ new/pcbnew/dialogs/dialog_gen_module_position_file_base.cpp	2015-06-15 16:24:55.273999000 +0200
@@ -5,6 +5,8 @@
 // PLEASE DO "NOT" EDIT THIS FILE!
 ///////////////////////////////////////////////////////////////////////////
 
+#include "wx_html_report_panel.h"
+
 #include "dialog_gen_module_position_file_base.h"
 
 ///////////////////////////////////////////////////////////////////////////
@@ -29,6 +31,7 @@ DIALOG_GEN_MODULE_POSITION_BASE::DIALOG_
 	bSizerdirBrowse = new wxBoxSizer( wxHORIZONTAL );
 	
 	m_outputDirectoryName = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
+	m_outputDirectoryName->SetMaxLength( 0 ); 
 	m_outputDirectoryName->SetToolTip( _("Target directory for plot files. Can be absolute or relative to the board file location.") );
 	m_outputDirectoryName->SetMinSize( wxSize( 350,-1 ) );
 	
@@ -74,16 +77,16 @@ DIALOG_GEN_MODULE_POSITION_BASE::DIALOG_
 	
 	m_MainSizer->Add( bSizerOptions, 0, wxEXPAND|wxTOP|wxBOTTOM, 5 );
 	
-	wxStaticBoxSizer* sbSizerMsg;
-	sbSizerMsg = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Messages:") ), wxVERTICAL );
+	wxBoxSizer* bSizer7;
+	bSizer7 = new wxBoxSizer( wxVERTICAL );
 	
-	m_messagesBox = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize( -1,-1 ), wxTE_MULTILINE|wxTE_READONLY );
-	m_messagesBox->SetMinSize( wxSize( -1,150 ) );
+	m_messagesPanel = new WX_HTML_REPORT_PANEL( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
+	m_messagesPanel->SetMinSize( wxSize( 300,150 ) );
 	
-	sbSizerMsg->Add( m_messagesBox, 1, wxEXPAND, 5 );
+	bSizer7->Add( m_messagesPanel, 1, wxEXPAND | wxALL, 5 );
 	
 	
-	m_MainSizer->Add( sbSizerMsg, 1, wxEXPAND, 5 );
+	m_MainSizer->Add( bSizer7, 1, wxEXPAND, 5 );
 	
 	m_sdbSizerButtons = new wxStdDialogButtonSizer();
 	m_sdbSizerButtonsOK = new wxButton( this, wxID_OK );
@@ -101,6 +104,8 @@ DIALOG_GEN_MODULE_POSITION_BASE::DIALOG_
 	this->Centre( wxBOTH );
 	
 	// Connect Events
+	this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( DIALOG_GEN_MODULE_POSITION_BASE::OnClose ) );
+	this->Connect( wxEVT_INIT_DIALOG, wxInitDialogEventHandler( DIALOG_GEN_MODULE_POSITION_BASE::OnInitDialog ) );
 	m_browseButton->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_GEN_MODULE_POSITION_BASE::OnOutputDirectoryBrowseClicked ), NULL, this );
 	m_sdbSizerButtonsOK->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_GEN_MODULE_POSITION_BASE::OnOKButton ), NULL, this );
 }
@@ -108,6 +113,8 @@ DIALOG_GEN_MODULE_POSITION_BASE::DIALOG_
 DIALOG_GEN_MODULE_POSITION_BASE::~DIALOG_GEN_MODULE_POSITION_BASE()
 {
 	// Disconnect Events
+	this->Disconnect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( DIALOG_GEN_MODULE_POSITION_BASE::OnClose ) );
+	this->Disconnect( wxEVT_INIT_DIALOG, wxInitDialogEventHandler( DIALOG_GEN_MODULE_POSITION_BASE::OnInitDialog ) );
 	m_browseButton->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_GEN_MODULE_POSITION_BASE::OnOutputDirectoryBrowseClicked ), NULL, this );
 	m_sdbSizerButtonsOK->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_GEN_MODULE_POSITION_BASE::OnOKButton ), NULL, this );
 	
=== modified file 'pcbnew/dialogs/dialog_gen_module_position_file_base.fbp'
--- old/pcbnew/dialogs/dialog_gen_module_position_file_base.fbp	2015-06-15 15:54:58.331000000 +0200
+++ new/pcbnew/dialogs/dialog_gen_module_position_file_base.fbp	2015-06-15 16:24:55.273999000 +0200
@@ -47,7 +47,7 @@
             <property name="size">510,351</property>
             <property name="style">wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER</property>
             <property name="subclass">DIALOG_SHIM; dialog_shim.h</property>
-            <property name="title">Position Files:</property>
+            <property name="title">Generate Component Position Files</property>
             <property name="tooltip"></property>
             <property name="window_extra_style"></property>
             <property name="window_name"></property>
@@ -61,13 +61,13 @@
             <event name="OnAuiPaneRestore"></event>
             <event name="OnAuiRender"></event>
             <event name="OnChar"></event>
-            <event name="OnClose"></event>
+            <event name="OnClose">OnClose</event>
             <event name="OnEnterWindow"></event>
             <event name="OnEraseBackground"></event>
             <event name="OnHibernate"></event>
             <event name="OnIconize"></event>
             <event name="OnIdle"></event>
-            <event name="OnInitDialog"></event>
+            <event name="OnInitDialog">OnInitDialog</event>
             <event name="OnKeyDown"></event>
             <event name="OnKeyUp"></event>
             <event name="OnKillFocus"></event>
@@ -238,7 +238,7 @@
                                                 <property name="max_size"></property>
                                                 <property name="maximize_button">0</property>
                                                 <property name="maximum_size"></property>
-                                                <property name="maxlength"></property>
+                                                <property name="maxlength">0</property>
                                                 <property name="min_size"></property>
                                                 <property name="minimize_button">0</property>
                                                 <property name="minimum_size">350,-1</property>
@@ -673,19 +673,16 @@
                     <property name="border">5</property>
                     <property name="flag">wxEXPAND</property>
                     <property name="proportion">1</property>
-                    <object class="wxStaticBoxSizer" expanded="1">
-                        <property name="id">wxID_ANY</property>
-                        <property name="label">Messages:</property>
+                    <object class="wxBoxSizer" expanded="1">
                         <property name="minimum_size"></property>
-                        <property name="name">sbSizerMsg</property>
+                        <property name="name">bSizer7</property>
                         <property name="orient">wxVERTICAL</property>
                         <property name="permission">none</property>
-                        <event name="OnUpdateUI"></event>
-                        <object class="sizeritem" expanded="0">
+                        <object class="sizeritem" expanded="1">
                             <property name="border">5</property>
-                            <property name="flag">wxEXPAND</property>
+                            <property name="flag">wxEXPAND | wxALL</property>
                             <property name="proportion">1</property>
-                            <object class="wxTextCtrl" expanded="0">
+                            <object class="wxPanel" expanded="1">
                                 <property name="BottomDockable">1</property>
                                 <property name="LeftDockable">1</property>
                                 <property name="RightDockable">1</property>
@@ -716,12 +713,11 @@
                                 <property name="max_size"></property>
                                 <property name="maximize_button">0</property>
                                 <property name="maximum_size"></property>
-                                <property name="maxlength"></property>
                                 <property name="min_size"></property>
                                 <property name="minimize_button">0</property>
-                                <property name="minimum_size">-1,150</property>
+                                <property name="minimum_size">300,150</property>
                                 <property name="moveable">1</property>
-                                <property name="name">m_messagesBox</property>
+                                <property name="name">m_messagesPanel</property>
                                 <property name="pane_border">1</property>
                                 <property name="pane_position"></property>
                                 <property name="pane_size"></property>
@@ -730,19 +726,13 @@
                                 <property name="pos"></property>
                                 <property name="resize">Resizable</property>
                                 <property name="show">1</property>
-                                <property name="size">-1,-1</property>
-                                <property name="style">wxTE_MULTILINE|wxTE_READONLY</property>
-                                <property name="subclass"></property>
+                                <property name="size"></property>
+                                <property name="subclass">WX_HTML_REPORT_PANEL; wx_html_report_panel.h</property>
                                 <property name="toolbar_pane">0</property>
                                 <property name="tooltip"></property>
-                                <property name="validator_data_type"></property>
-                                <property name="validator_style">wxFILTER_NONE</property>
-                                <property name="validator_type">wxDefaultValidator</property>
-                                <property name="validator_variable"></property>
-                                <property name="value"></property>
                                 <property name="window_extra_style"></property>
                                 <property name="window_name"></property>
-                                <property name="window_style"></property>
+                                <property name="window_style">wxTAB_TRAVERSAL</property>
                                 <event name="OnChar"></event>
                                 <event name="OnEnterWindow"></event>
                                 <event name="OnEraseBackground"></event>
@@ -765,10 +755,6 @@
                                 <event name="OnRightUp"></event>
                                 <event name="OnSetFocus"></event>
                                 <event name="OnSize"></event>
-                                <event name="OnText"></event>
-                                <event name="OnTextEnter"></event>
-                                <event name="OnTextMaxLen"></event>
-                                <event name="OnTextURL"></event>
                                 <event name="OnUpdateUI"></event>
                             </object>
                         </object>
=== modified file 'pcbnew/dialogs/dialog_gen_module_position_file_base.h'
--- old/pcbnew/dialogs/dialog_gen_module_position_file_base.h	2015-06-15 15:54:58.331000000 +0200
+++ new/pcbnew/dialogs/dialog_gen_module_position_file_base.h	2015-06-15 16:24:55.273999000 +0200
@@ -12,6 +12,7 @@
 #include <wx/xrc/xmlres.h>
 #include <wx/intl.h>
 class DIALOG_SHIM;
+class WX_HTML_REPORT_PANEL;
 
 #include "dialog_shim.h"
 #include <wx/string.h>
@@ -24,7 +25,7 @@ class DIALOG_SHIM;
 #include <wx/button.h>
 #include <wx/sizer.h>
 #include <wx/radiobox.h>
-#include <wx/statbox.h>
+#include <wx/panel.h>
 #include <wx/dialog.h>
 
 ///////////////////////////////////////////////////////////////////////////
@@ -44,19 +45,21 @@ class DIALOG_GEN_MODULE_POSITION_BASE :
 		wxRadioBox* m_radioBoxUnits;
 		wxRadioBox* m_radioBoxFilesCount;
 		wxRadioBox* m_radioBoxForceSmd;
-		wxTextCtrl* m_messagesBox;
+		WX_HTML_REPORT_PANEL* m_messagesPanel;
 		wxStdDialogButtonSizer* m_sdbSizerButtons;
 		wxButton* m_sdbSizerButtonsOK;
 		wxButton* m_sdbSizerButtonsCancel;
 		
 		// Virtual event handlers, overide them in your derived class
+		virtual void OnClose( wxCloseEvent& event ) { event.Skip(); }
+		virtual void OnInitDialog( wxInitDialogEvent& event ) { event.Skip(); }
 		virtual void OnOutputDirectoryBrowseClicked( wxCommandEvent& event ) { event.Skip(); }
 		virtual void OnOKButton( wxCommandEvent& event ) { event.Skip(); }
 		
 	
 	public:
 		
-		DIALOG_GEN_MODULE_POSITION_BASE( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Position Files:"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 510,351 ), long style = wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER ); 
+		DIALOG_GEN_MODULE_POSITION_BASE( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Generate Component Position Files"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 510,351 ), long style = wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER ); 
 		~DIALOG_GEN_MODULE_POSITION_BASE();
 	
 };
=== modified file 'pcbnew/dialogs/dialog_netlist.cpp'
--- old/pcbnew/dialogs/dialog_netlist.cpp	2015-06-12 14:46:41.878000000 +0200
+++ new/pcbnew/dialogs/dialog_netlist.cpp	2015-06-15 16:24:55.273999000 +0200
@@ -47,6 +47,7 @@
 #include <wildcards_and_files_ext.h>
 
 #include <dialog_netlist.h>
+#include <wx_html_report_panel.h>
 
 #define NETLIST_SILENTMODE_KEY wxT("SilentMode")
 #define NETLIST_FULLMESSAGES_KEY wxT("NetlistReportAllMsg")
@@ -158,21 +159,20 @@ void DIALOG_NETLIST::OnReadNetlistFileCl
                          "sure you want to read the netlist?" ) ) )
         return;
 
-    wxBusyCursor busy;
     m_MessageWindow->Clear();
+    REPORTER& reporter = m_MessageWindow->Reporter();
+
+    wxBusyCursor busy;
 
     msg.Printf( _( "Reading netlist file \"%s\".\n" ), GetChars( netlistFileName ) );
-    m_MessageWindow->AppendText( msg );
+    reporter.Report( msg, REPORTER::INFO );
 
     if( m_Select_By_Timestamp->GetSelection() == 1 )
         msg = _( "Using time stamps to match components and footprints.\n" );
     else
         msg = _( "Using references to match components and footprints.\n" );
 
-    m_MessageWindow->AppendText( msg );
-
-    WX_TEXT_CTRL_REPORTER reporter( m_MessageWindow );
-    reporter.SetReportAll( m_reportAll );
+    reporter.Report( msg, REPORTER::INFO );
 
     m_parent->ReadPcbNetlist( netlistFileName, wxEmptyString, &reporter,
                               m_ChangeExistingFootprintCtrl->GetSelection() == 1,
@@ -357,13 +357,13 @@ void DIALOG_NETLIST::OnSaveMessagesToFil
         return;
     }
 
-    f.Write( m_MessageWindow->GetValue() );
+    //f.Write( m_MessageWindow->GetValue() );
 }
 
 
 void DIALOG_NETLIST::OnUpdateUISaveMessagesToFile( wxUpdateUIEvent& aEvent )
 {
-    aEvent.Enable( !m_MessageWindow->IsEmpty() );
+    //aEvent.Enable( !m_MessageWindow->IsEmpty() );
 }
 
 
@@ -409,19 +409,6 @@ bool DIALOG_NETLIST::verifyFootprints( c
         return false;
     }
 
-#if defined( DEBUG )
-    {
-        m_MessageWindow->Clear();
-        WX_TEXT_CTRL_REPORTER rpt( m_MessageWindow );
-
-        STRING_FORMATTER sf;
-
-        netlist.Format( "netlist_stuff", &sf, 0 );
-
-        rpt.Report( FROM_UTF8( sf.GetString().c_str() ) );
-    }
-#endif
-
     BOARD* pcb = m_parent->GetBoard();
 
     // Search for duplicate footprints.
=== modified file 'pcbnew/dialogs/dialog_netlist_fbp.cpp'
--- old/pcbnew/dialogs/dialog_netlist_fbp.cpp	2015-06-12 14:46:41.878000000 +0200
+++ new/pcbnew/dialogs/dialog_netlist_fbp.cpp	2015-06-15 16:24:55.273999000 +0200
@@ -5,6 +5,8 @@
 // PLEASE DO "NOT" EDIT THIS FILE!
 ///////////////////////////////////////////////////////////////////////////
 
+#include "wx_html_report_panel.h"
+
 #include "dialog_netlist_fbp.h"
 
 ///////////////////////////////////////////////////////////////////////////
@@ -159,14 +161,10 @@ DIALOG_NETLIST_FBP::DIALOG_NETLIST_FBP(
 	
 	bLowerSizer->Add( bSizerNetlistFilename, 0, wxEXPAND, 5 );
 	
-	m_staticText1 = new wxStaticText( this, wxID_ANY, _("Messages:"), wxDefaultPosition, wxDefaultSize, 0 );
-	m_staticText1->Wrap( -1 );
-	bLowerSizer->Add( m_staticText1, 0, wxTOP|wxRIGHT|wxLEFT, 5 );
-	
-	m_MessageWindow = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_CHARWRAP|wxTE_MULTILINE|wxTE_READONLY|wxTE_WORDWRAP );
-	m_MessageWindow->SetMinSize( wxSize( 300,150 ) );
+	m_MessageWindow = new WX_HTML_REPORT_PANEL( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
+	m_MessageWindow->SetMinSize( wxSize( -300,150 ) );
 	
-	bLowerSizer->Add( m_MessageWindow, 1, wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 5 );
+	bLowerSizer->Add( m_MessageWindow, 1, wxEXPAND | wxALL, 5 );
 	
 	
 	bMainSizer->Add( bLowerSizer, 1, wxBOTTOM|wxEXPAND|wxLEFT|wxRIGHT, 5 );
=== modified file 'pcbnew/dialogs/dialog_netlist_fbp.fbp'
--- old/pcbnew/dialogs/dialog_netlist_fbp.fbp	2015-06-12 14:46:41.878000000 +0200
+++ new/pcbnew/dialogs/dialog_netlist_fbp.fbp	2015-06-15 16:24:55.273999000 +0200
@@ -1770,92 +1770,9 @@
                         </object>
                         <object class="sizeritem" expanded="1">
                             <property name="border">5</property>
-                            <property name="flag">wxTOP|wxRIGHT|wxLEFT</property>
-                            <property name="proportion">0</property>
-                            <object class="wxStaticText" expanded="1">
-                                <property name="BottomDockable">1</property>
-                                <property name="LeftDockable">1</property>
-                                <property name="RightDockable">1</property>
-                                <property name="TopDockable">1</property>
-                                <property name="aui_layer"></property>
-                                <property name="aui_name"></property>
-                                <property name="aui_position"></property>
-                                <property name="aui_row"></property>
-                                <property name="best_size"></property>
-                                <property name="bg"></property>
-                                <property name="caption"></property>
-                                <property name="caption_visible">1</property>
-                                <property name="center_pane">0</property>
-                                <property name="close_button">1</property>
-                                <property name="context_help"></property>
-                                <property name="context_menu">1</property>
-                                <property name="default_pane">0</property>
-                                <property name="dock">Dock</property>
-                                <property name="dock_fixed">0</property>
-                                <property name="docking">Left</property>
-                                <property name="enabled">1</property>
-                                <property name="fg"></property>
-                                <property name="floatable">1</property>
-                                <property name="font"></property>
-                                <property name="gripper">0</property>
-                                <property name="hidden">0</property>
-                                <property name="id">wxID_ANY</property>
-                                <property name="label">Messages:</property>
-                                <property name="max_size"></property>
-                                <property name="maximize_button">0</property>
-                                <property name="maximum_size"></property>
-                                <property name="min_size"></property>
-                                <property name="minimize_button">0</property>
-                                <property name="minimum_size"></property>
-                                <property name="moveable">1</property>
-                                <property name="name">m_staticText1</property>
-                                <property name="pane_border">1</property>
-                                <property name="pane_position"></property>
-                                <property name="pane_size"></property>
-                                <property name="permission">protected</property>
-                                <property name="pin_button">1</property>
-                                <property name="pos"></property>
-                                <property name="resize">Resizable</property>
-                                <property name="show">1</property>
-                                <property name="size"></property>
-                                <property name="style"></property>
-                                <property name="subclass"></property>
-                                <property name="toolbar_pane">0</property>
-                                <property name="tooltip"></property>
-                                <property name="window_extra_style"></property>
-                                <property name="window_name"></property>
-                                <property name="window_style"></property>
-                                <property name="wrap">-1</property>
-                                <event name="OnChar"></event>
-                                <event name="OnEnterWindow"></event>
-                                <event name="OnEraseBackground"></event>
-                                <event name="OnKeyDown"></event>
-                                <event name="OnKeyUp"></event>
-                                <event name="OnKillFocus"></event>
-                                <event name="OnLeaveWindow"></event>
-                                <event name="OnLeftDClick"></event>
-                                <event name="OnLeftDown"></event>
-                                <event name="OnLeftUp"></event>
-                                <event name="OnMiddleDClick"></event>
-                                <event name="OnMiddleDown"></event>
-                                <event name="OnMiddleUp"></event>
-                                <event name="OnMotion"></event>
-                                <event name="OnMouseEvents"></event>
-                                <event name="OnMouseWheel"></event>
-                                <event name="OnPaint"></event>
-                                <event name="OnRightDClick"></event>
-                                <event name="OnRightDown"></event>
-                                <event name="OnRightUp"></event>
-                                <event name="OnSetFocus"></event>
-                                <event name="OnSize"></event>
-                                <event name="OnUpdateUI"></event>
-                            </object>
-                        </object>
-                        <object class="sizeritem" expanded="1">
-                            <property name="border">5</property>
-                            <property name="flag">wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT</property>
+                            <property name="flag">wxEXPAND | wxALL</property>
                             <property name="proportion">1</property>
-                            <object class="wxTextCtrl" expanded="1">
+                            <object class="wxPanel" expanded="1">
                                 <property name="BottomDockable">1</property>
                                 <property name="LeftDockable">1</property>
                                 <property name="RightDockable">1</property>
@@ -1886,10 +1803,9 @@
                                 <property name="max_size"></property>
                                 <property name="maximize_button">0</property>
                                 <property name="maximum_size"></property>
-                                <property name="maxlength"></property>
                                 <property name="min_size"></property>
                                 <property name="minimize_button">0</property>
-                                <property name="minimum_size">300,150</property>
+                                <property name="minimum_size">-300,150</property>
                                 <property name="moveable">1</property>
                                 <property name="name">m_MessageWindow</property>
                                 <property name="pane_border">1</property>
@@ -1901,18 +1817,12 @@
                                 <property name="resize">Resizable</property>
                                 <property name="show">1</property>
                                 <property name="size"></property>
-                                <property name="style">wxTE_CHARWRAP|wxTE_MULTILINE|wxTE_READONLY|wxTE_WORDWRAP</property>
-                                <property name="subclass"></property>
+                                <property name="subclass">WX_HTML_REPORT_PANEL; wx_html_report_panel.h</property>
                                 <property name="toolbar_pane">0</property>
                                 <property name="tooltip"></property>
-                                <property name="validator_data_type"></property>
-                                <property name="validator_style">wxFILTER_NONE</property>
-                                <property name="validator_type">wxDefaultValidator</property>
-                                <property name="validator_variable"></property>
-                                <property name="value"></property>
                                 <property name="window_extra_style"></property>
                                 <property name="window_name"></property>
-                                <property name="window_style"></property>
+                                <property name="window_style">wxTAB_TRAVERSAL</property>
                                 <event name="OnChar"></event>
                                 <event name="OnEnterWindow"></event>
                                 <event name="OnEraseBackground"></event>
@@ -1935,10 +1845,6 @@
                                 <event name="OnRightUp"></event>
                                 <event name="OnSetFocus"></event>
                                 <event name="OnSize"></event>
-                                <event name="OnText"></event>
-                                <event name="OnTextEnter"></event>
-                                <event name="OnTextMaxLen"></event>
-                                <event name="OnTextURL"></event>
                                 <event name="OnUpdateUI"></event>
                             </object>
                         </object>
=== modified file 'pcbnew/dialogs/dialog_netlist_fbp.h'
--- old/pcbnew/dialogs/dialog_netlist_fbp.h	2015-06-12 14:46:41.878000000 +0200
+++ new/pcbnew/dialogs/dialog_netlist_fbp.h	2015-06-15 16:24:55.273999000 +0200
@@ -12,6 +12,7 @@
 #include <wx/xrc/xmlres.h>
 #include <wx/intl.h>
 class DIALOG_SHIM;
+class WX_HTML_REPORT_PANEL;
 
 #include "dialog_shim.h"
 #include <wx/string.h>
@@ -26,6 +27,7 @@ class DIALOG_SHIM;
 #include <wx/checkbox.h>
 #include <wx/stattext.h>
 #include <wx/textctrl.h>
+#include <wx/panel.h>
 #include <wx/dialog.h>
 
 ///////////////////////////////////////////////////////////////////////////
@@ -64,8 +66,7 @@ class DIALOG_NETLIST_FBP : public DIALOG
 		wxStaticText* m_staticTextNetfilename;
 		wxTextCtrl* m_NetlistFilenameCtrl;
 		wxButton* m_buttonBrowse;
-		wxStaticText* m_staticText1;
-		wxTextCtrl* m_MessageWindow;
+		WX_HTML_REPORT_PANEL* m_MessageWindow;
 		
 		// Virtual event handlers, overide them in your derived class
 		virtual void OnReadNetlistFileClick( wxCommandEvent& event ) { event.Skip(); }
=== modified file 'pcbnew/dialogs/dialog_plot.cpp'
--- old/pcbnew/dialogs/dialog_plot.cpp	2015-03-03 11:50:50.000000000 +0100
+++ new/pcbnew/dialogs/dialog_plot.cpp	2015-06-15 16:24:55.273999000 +0200
@@ -38,7 +38,7 @@
 #include <class_board.h>
 #include <wx/ffile.h>
 #include <dialog_plot.h>
-
+#include <wx_html_report_panel.h>
 
 DIALOG_PLOT::DIALOG_PLOT( PCB_EDIT_FRAME* aParent ) :
     DIALOG_PLOT_BASE( aParent ), m_parent( aParent ),
@@ -107,7 +107,7 @@ void DIALOG_PLOT::Init_Dialog()
     // Set units and value for HPGL pen size (this param in in mils).
     AddUnitSymbol( *m_textPenSize, g_UserUnit );
     msg = StringFromValue( g_UserUnit,
-                                 m_plotOpts.GetHPGLPenDiameter() * IU_PER_MILS );
+                           m_plotOpts.GetHPGLPenDiameter() * IU_PER_MILS );
     m_HPGLPenSizeOpt->AppendText( msg );
 
     // Set units and value for HPGL pen overlay (this param in in mils).
@@ -562,6 +562,8 @@ static bool setInt( int* aResult, int aV
 
 void DIALOG_PLOT::applyPlotSettings()
 {
+    REPORTER&   reporter = m_messagesPanel->Reporter();
+
     PCB_PLOT_PARAMS tempOptions;
 
     tempOptions.SetExcludeEdgeLayer( m_excludeEdgeLayerOpt->GetValue() );
@@ -590,8 +592,8 @@ void DIALOG_PLOT::applyPlotSettings()
     {
         msg = StringFromValue( g_UserUnit, tempOptions.GetHPGLPenDiameter() * IU_PER_MILS );
         m_HPGLPenSizeOpt->SetValue( msg );
-        msg.Printf( _( "HPGL pen size constrained!\n" ) );
-        m_messagesBox->AppendText( msg );
+        msg.Printf( _( "HPGL pen size constrained." ) );
+        reporter.Report( msg, REPORTER::INFO );
     }
 
     // Read HPGL pen overlay (this param is stored in mils)
@@ -603,8 +605,8 @@ void DIALOG_PLOT::applyPlotSettings()
         msg = StringFromValue( g_UserUnit,
                                      tempOptions.GetHPGLPenOverlay() * IU_PER_MILS );
         m_HPGLPenOverlayOpt->SetValue( msg );
-        msg.Printf( _( "HPGL pen overlay constrained!\n" ) );
-        m_messagesBox->AppendText( msg );
+        msg.Printf( _( "HPGL pen overlay constrained." ) );
+        reporter.Report( msg, REPORTER::INFO );
     }
 
     // Default linewidth
@@ -615,8 +617,8 @@ void DIALOG_PLOT::applyPlotSettings()
     {
         msg = StringFromValue( g_UserUnit, tempOptions.GetLineWidth() );
         m_linesWidth->SetValue( msg );
-        msg.Printf( _( "Default line width constrained!\n" ) );
-        m_messagesBox->AppendText( msg );
+        msg.Printf( _( "Default line width constrained." ) );
+        reporter.Report( msg, REPORTER::INFO );
     }
 
     // X scale
@@ -628,8 +630,8 @@ void DIALOG_PLOT::applyPlotSettings()
     {
         msg.Printf( wxT( "%f" ), m_XScaleAdjust );
         m_fineAdjustXscaleOpt->SetValue( msg );
-        msg.Printf( _( "X scale constrained!\n" ) );
-        m_messagesBox->AppendText( msg );
+        msg.Printf( _( "X scale constrained." ) );
+        reporter.Report( msg, REPORTER::INFO );
     }
 
    ConfigBaseWriteDouble( m_config, OPTKEY_PLOT_X_FINESCALE_ADJ, m_XScaleAdjust );
@@ -642,8 +644,8 @@ void DIALOG_PLOT::applyPlotSettings()
     {
         msg.Printf( wxT( "%f" ), m_YScaleAdjust );
         m_fineAdjustYscaleOpt->SetValue( msg );
-        msg.Printf( _( "Y scale constrained!\n" ) );
-        m_messagesBox->AppendText( msg );
+        msg.Printf( _( "Y scale constrained." ) );
+        reporter.Report( msg, REPORTER::INFO );
     }
 
     ConfigBaseWriteDouble( m_config, OPTKEY_PLOT_Y_FINESCALE_ADJ, m_YScaleAdjust );
@@ -656,13 +658,13 @@ void DIALOG_PLOT::applyPlotSettings()
     {
         msg = StringFromValue( g_UserUnit, m_PSWidthAdjust );
         m_PSFineAdjustWidthOpt->SetValue( msg );
-        msg.Printf( _( "Width correction constrained!\n"
-                       "The reasonable width correction value must be in a range of\n"
-                       " [%+f; %+f] (%s) for current design rules!\n" ),
+        msg.Printf( _( "Width correction constrained. "
+                       "The reasonable width correction value must be in a range of "
+                       " [%+f; %+f] (%s) for current design rules. " ),
                     To_User_Unit( g_UserUnit, m_widthAdjustMinValue ),
                     To_User_Unit( g_UserUnit, m_widthAdjustMaxValue ),
                     ( g_UserUnit == INCHES ) ? wxT( "\"" ) : wxT( "mm" ) );
-        m_messagesBox->AppendText( msg );
+        reporter.Report( msg, REPORTER::WARNING );
     }
 
     // Store m_PSWidthAdjust in mm in user config
@@ -708,9 +710,9 @@ void DIALOG_PLOT::Plot( wxCommandEvent&
 
     // Create output directory if it does not exist (also transform it in
     // absolute form). Bail if it fails
-    wxFileName            outputDir = wxFileName::DirName( m_plotOpts.GetOutputDirectory() );
-    wxString              boardFilename = m_parent->GetBoard()->GetFileName();
-    WX_TEXT_CTRL_REPORTER reporter( m_messagesBox );
+    wxFileName  outputDir = wxFileName::DirName( m_plotOpts.GetOutputDirectory() );
+    wxString    boardFilename = m_parent->GetBoard()->GetFileName();
+    REPORTER&   reporter = m_messagesPanel->Reporter();
 
     if( !EnsureFileDirectoryExists( &outputDir, boardFilename, &reporter ) )
     {
@@ -809,13 +811,14 @@ void DIALOG_PLOT::Plot( wxCommandEvent&
             plotter->EndPlot();
             delete plotter;
 
-            msg.Printf( _( "Plot file <%s> created" ), GetChars( fn.GetFullPath() ) );
+            msg.Printf( _( "Plot file '%s' created." ), GetChars( fn.GetFullPath() ) );
+            reporter.Report( msg, REPORTER::ACTION );
         }
         else
-            msg.Printf( _( "Unable to create <%s>" ), GetChars( fn.GetFullPath() ) );
-
-        msg << wxT( "\n" );
-        m_messagesBox->AppendText( msg );
+        {
+            msg.Printf( _( "Unable to create file '%s'." ), GetChars( fn.GetFullPath() ) );
+            reporter.Report( msg, REPORTER::ERROR );
+        }
     }
 
     // If no layer selected, we have nothing plotted.
=== modified file 'pcbnew/dialogs/dialog_plot_base.cpp'
--- old/pcbnew/dialogs/dialog_plot_base.cpp	2015-06-15 15:54:58.331000000 +0200
+++ new/pcbnew/dialogs/dialog_plot_base.cpp	2015-06-15 16:24:55.273999000 +0200
@@ -1,10 +1,12 @@
 ///////////////////////////////////////////////////////////////////////////
-// C++ code generated with wxFormBuilder (version Jun  5 2014)
+// C++ code generated with wxFormBuilder (version Jun  6 2014)
 // http://www.wxformbuilder.org/
 //
 // PLEASE DO "NOT" EDIT THIS FILE!
 ///////////////////////////////////////////////////////////////////////////
 
+#include "wx_html_report_panel.h"
+
 #include "dialog_plot_base.h"
 
 ///////////////////////////////////////////////////////////////////////////
@@ -363,13 +365,13 @@ DIALOG_PLOT_BASE::DIALOG_PLOT_BASE( wxWi
 	
 	bSizer12->Add( bUpperSizer, 0, wxEXPAND, 5 );
 	
-	wxStaticBoxSizer* sbSizerMsg;
-	sbSizerMsg = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Messages:") ), wxVERTICAL );
+	wxBoxSizer* sbSizerMsg;
+	sbSizerMsg = new wxBoxSizer( wxVERTICAL );
 	
-	m_messagesBox = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_MULTILINE|wxTE_READONLY );
-	m_messagesBox->SetMinSize( wxSize( -1,150 ) );
+	m_messagesPanel = new WX_HTML_REPORT_PANEL( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
+	m_messagesPanel->SetMinSize( wxSize( -300,150 ) );
 	
-	sbSizerMsg->Add( m_messagesBox, 1, wxEXPAND, 5 );
+	sbSizerMsg->Add( m_messagesPanel, 1, wxEXPAND | wxALL, 5 );
 	
 	
 	bSizer12->Add( sbSizerMsg, 1, wxEXPAND, 5 );
@@ -390,6 +392,12 @@ DIALOG_PLOT_BASE::DIALOG_PLOT_BASE( wxWi
 	
 	bSizer12->Add( bSizerButtons, 0, wxALIGN_RIGHT|wxRIGHT|wxLEFT, 5 );
 	
+	wxBoxSizer* bSizer221;
+	bSizer221 = new wxBoxSizer( wxVERTICAL );
+	
+	
+	bSizer12->Add( bSizer221, 1, wxEXPAND, 5 );
+	
 	
 	m_MainSizer->Add( bSizer12, 1, wxALL|wxEXPAND, 5 );
 	
=== modified file 'pcbnew/dialogs/dialog_plot_base.fbp'
--- old/pcbnew/dialogs/dialog_plot_base.fbp	2015-06-15 15:54:58.331000000 +0200
+++ new/pcbnew/dialogs/dialog_plot_base.fbp	2015-06-15 16:24:55.273999000 +0200
@@ -88,16 +88,16 @@
             <event name="OnSetFocus"></event>
             <event name="OnSize"></event>
             <event name="OnUpdateUI"></event>
-            <object class="wxBoxSizer" expanded="0">
+            <object class="wxBoxSizer" expanded="1">
                 <property name="minimum_size"></property>
                 <property name="name">m_MainSizer</property>
                 <property name="orient">wxHORIZONTAL</property>
                 <property name="permission">protected</property>
-                <object class="sizeritem" expanded="0">
+                <object class="sizeritem" expanded="1">
                     <property name="border">5</property>
                     <property name="flag">wxALL|wxEXPAND</property>
                     <property name="proportion">1</property>
-                    <object class="wxBoxSizer" expanded="0">
+                    <object class="wxBoxSizer" expanded="1">
                         <property name="minimum_size"></property>
                         <property name="name">bSizer12</property>
                         <property name="orient">wxVERTICAL</property>
@@ -4124,23 +4124,20 @@
                                 </object>
                             </object>
                         </object>
-                        <object class="sizeritem" expanded="0">
+                        <object class="sizeritem" expanded="1">
                             <property name="border">5</property>
                             <property name="flag">wxEXPAND</property>
                             <property name="proportion">1</property>
-                            <object class="wxStaticBoxSizer" expanded="0">
-                                <property name="id">wxID_ANY</property>
-                                <property name="label">Messages:</property>
+                            <object class="wxBoxSizer" expanded="1">
                                 <property name="minimum_size"></property>
                                 <property name="name">sbSizerMsg</property>
                                 <property name="orient">wxVERTICAL</property>
                                 <property name="permission">none</property>
-                                <event name="OnUpdateUI"></event>
-                                <object class="sizeritem" expanded="0">
+                                <object class="sizeritem" expanded="1">
                                     <property name="border">5</property>
-                                    <property name="flag">wxEXPAND</property>
+                                    <property name="flag">wxEXPAND | wxALL</property>
                                     <property name="proportion">1</property>
-                                    <object class="wxTextCtrl" expanded="0">
+                                    <object class="wxPanel" expanded="1">
                                         <property name="BottomDockable">1</property>
                                         <property name="LeftDockable">1</property>
                                         <property name="RightDockable">1</property>
@@ -4171,12 +4168,11 @@
                                         <property name="max_size"></property>
                                         <property name="maximize_button">0</property>
                                         <property name="maximum_size"></property>
-                                        <property name="maxlength"></property>
                                         <property name="min_size"></property>
                                         <property name="minimize_button">0</property>
-                                        <property name="minimum_size">-1,150</property>
+                                        <property name="minimum_size">-300,150</property>
                                         <property name="moveable">1</property>
-                                        <property name="name">m_messagesBox</property>
+                                        <property name="name">m_messagesPanel</property>
                                         <property name="pane_border">1</property>
                                         <property name="pane_position"></property>
                                         <property name="pane_size"></property>
@@ -4186,18 +4182,12 @@
                                         <property name="resize">Resizable</property>
                                         <property name="show">1</property>
                                         <property name="size"></property>
-                                        <property name="style">wxTE_MULTILINE|wxTE_READONLY</property>
-                                        <property name="subclass"></property>
+                                        <property name="subclass">WX_HTML_REPORT_PANEL; wx_html_report_panel.h</property>
                                         <property name="toolbar_pane">0</property>
                                         <property name="tooltip"></property>
-                                        <property name="validator_data_type"></property>
-                                        <property name="validator_style">wxFILTER_NONE</property>
-                                        <property name="validator_type">wxDefaultValidator</property>
-                                        <property name="validator_variable"></property>
-                                        <property name="value"></property>
                                         <property name="window_extra_style"></property>
                                         <property name="window_name"></property>
-                                        <property name="window_style"></property>
+                                        <property name="window_style">wxTAB_TRAVERSAL</property>
                                         <event name="OnChar"></event>
                                         <event name="OnEnterWindow"></event>
                                         <event name="OnEraseBackground"></event>
@@ -4220,20 +4210,16 @@
                                         <event name="OnRightUp"></event>
                                         <event name="OnSetFocus"></event>
                                         <event name="OnSize"></event>
-                                        <event name="OnText"></event>
-                                        <event name="OnTextEnter"></event>
-                                        <event name="OnTextMaxLen"></event>
-                                        <event name="OnTextURL"></event>
                                         <event name="OnUpdateUI"></event>
                                     </object>
                                 </object>
                             </object>
                         </object>
-                        <object class="sizeritem" expanded="0">
+                        <object class="sizeritem" expanded="1">
                             <property name="border">5</property>
                             <property name="flag">wxALIGN_RIGHT|wxRIGHT|wxLEFT</property>
                             <property name="proportion">0</property>
-                            <object class="wxBoxSizer" expanded="0">
+                            <object class="wxBoxSizer" expanded="1">
                                 <property name="minimum_size"></property>
                                 <property name="name">bSizerButtons</property>
                                 <property name="orient">wxHORIZONTAL</property>
@@ -4504,6 +4490,17 @@
                                 </object>
                             </object>
                         </object>
+                        <object class="sizeritem" expanded="1">
+                            <property name="border">5</property>
+                            <property name="flag">wxEXPAND</property>
+                            <property name="proportion">1</property>
+                            <object class="wxBoxSizer" expanded="1">
+                                <property name="minimum_size"></property>
+                                <property name="name">bSizer221</property>
+                                <property name="orient">wxVERTICAL</property>
+                                <property name="permission">none</property>
+                            </object>
+                        </object>
                     </object>
                 </object>
             </object>
=== modified file 'pcbnew/dialogs/dialog_plot_base.h'
--- old/pcbnew/dialogs/dialog_plot_base.h	2015-03-03 11:50:50.000000000 +0100
+++ new/pcbnew/dialogs/dialog_plot_base.h	2015-06-15 16:24:55.273999000 +0200
@@ -1,5 +1,5 @@
 ///////////////////////////////////////////////////////////////////////////
-// C++ code generated with wxFormBuilder (version Jun  5 2014)
+// C++ code generated with wxFormBuilder (version Jun  6 2014)
 // http://www.wxformbuilder.org/
 //
 // PLEASE DO "NOT" EDIT THIS FILE!
@@ -12,6 +12,7 @@
 #include <wx/xrc/xmlres.h>
 #include <wx/intl.h>
 class DIALOG_SHIM;
+class WX_HTML_REPORT_PANEL;
 
 #include "dialog_shim.h"
 #include <wx/string.h>
@@ -28,6 +29,7 @@ class DIALOG_SHIM;
 #include <wx/statbox.h>
 #include <wx/checkbox.h>
 #include <wx/radiobox.h>
+#include <wx/panel.h>
 #include <wx/bitmap.h>
 #include <wx/image.h>
 #include <wx/icon.h>
@@ -106,7 +108,7 @@ class DIALOG_PLOT_BASE : public DIALOG_S
 		wxStaticText* m_textPSFineAdjustWidth;
 		wxTextCtrl* m_PSFineAdjustWidthOpt;
 		wxCheckBox* m_forcePSA4OutputOpt;
-		wxTextCtrl* m_messagesBox;
+		WX_HTML_REPORT_PANEL* m_messagesPanel;
 		wxButton* m_plotButton;
 		wxButton* m_buttonDrill;
 		wxButton* m_buttonQuit;
=== modified file 'pcbnew/exporters/gen_drill_report_files.cpp'
--- old/pcbnew/exporters/gen_drill_report_files.cpp	2015-04-29 17:37:37.055999000 +0200
+++ new/pcbnew/exporters/gen_drill_report_files.cpp	2015-06-15 16:24:55.273999000 +0200
@@ -269,10 +269,10 @@ bool EXCELLON_WRITER::GenDrillMapFile( c
                        GR_TEXT_HJUSTIFY_LEFT, GR_TEXT_VJUSTIFY_CENTER,
                        TextWidth, false, false );
 
-        intervalle  = KiROUND( (( charSize * charScale ) + TextWidth) * 1.2);
+        intervalle = KiROUND( ( ( charSize * charScale ) + TextWidth ) * 1.2 );
 
-        if( intervalle < (plot_diam + (1 * IU_PER_MM / scale) + TextWidth) )
-            intervalle = plot_diam + (1 * IU_PER_MM / scale) + TextWidth;
+        if( intervalle < ( plot_diam + ( 1 * IU_PER_MM / scale ) + TextWidth ) )
+            intervalle = plot_diam + ( 1 * IU_PER_MM / scale ) + TextWidth;
     }
 
     plotter->EndPlot();
=== modified file 'pcbnew/exporters/gen_modules_placefile.cpp'
--- old/pcbnew/exporters/gen_modules_placefile.cpp	2015-05-01 17:01:09.638999000 +0200
+++ new/pcbnew/exporters/gen_modules_placefile.cpp	2015-06-15 16:24:55.273999000 +0200
@@ -50,6 +50,8 @@
 #include <pcb_plot_params.h>
 #include <wildcards_and_files_ext.h>
 #include <kiface_i.h>
+#include <wx_html_report_panel.h>
+
 
 #include <dialog_gen_module_position_file_base.h>
 /*
@@ -107,11 +109,12 @@ private:
     PCB_EDIT_FRAME* m_parent;
     PCB_PLOT_PARAMS m_plotOpts;
     wxConfigBase* m_config;
+    REPORTER* m_reporter;
 
     static int m_unitsOpt;
     static int m_fileOpt;
 
-    void initDialog();
+	void initDialog();
     void OnOutputDirectoryBrowseClicked( wxCommandEvent& event );
     void OnOKButton( wxCommandEvent& event );
 
@@ -137,11 +140,6 @@ private:
     {
         return m_radioBoxForceSmd->GetSelection() == 1;
     }
-
-    void AddMessage( const wxString & aMessage )
-    {
-        m_messagesBox->AppendText( aMessage );
-    }
 };
 
 
@@ -241,9 +239,10 @@ bool DIALOG_GEN_MODULE_POSITION::CreateF
     // absolute form). Bail if it fails
     wxFileName  outputDir = wxFileName::DirName( m_plotOpts.GetOutputDirectory() );
     wxString    boardFilename = m_parent->GetBoard()->GetFileName();
-    WX_TEXT_CTRL_REPORTER reporter( m_messagesBox );
 
-    if( !EnsureFileDirectoryExists( &outputDir, boardFilename, &reporter ) )
+    m_reporter = &m_messagesPanel->Reporter();
+
+    if( !EnsureFileDirectoryExists( &outputDir, boardFilename, m_reporter ) )
     {
         msg.Printf( _( "Could not write plot files to folder \"%s\"." ),
                     GetChars( outputDir.GetPath() ) );
@@ -272,24 +271,27 @@ bool DIALOG_GEN_MODULE_POSITION::CreateF
                                                      ForceAllSmd(), side );
     if( fpcount < 0 )
     {
-        msg.Printf( _( "Unable to create '%s'" ), GetChars( fn.GetFullPath() ) );
+        msg.Printf( _( "Unable to create '%s'." ), GetChars( fn.GetFullPath() ) );
         wxMessageBox( msg );
-        AddMessage( msg + wxT("\n") );
+        m_reporter->Report( msg, REPORTER::ERROR );
         return false;
     }
 
     if( singleFile  )
-        msg.Printf( _( "Place file: '%s'\n" ), GetChars( fn.GetFullPath() ) );
+        msg.Printf( _( "Place file: '%s'." ), GetChars( fn.GetFullPath() ) );
     else
-        msg.Printf( _( "Front side (top side) place file: '%s'\n" ),
+        msg.Printf( _( "Front side (top side) place file: '%s'." ),
                     GetChars( fn.GetFullPath() ) );
+    m_reporter->Report( msg, REPORTER::INFO );
 
-    AddMessage( msg );
-    msg.Printf( _( "Footprint count %d\n" ), fpcount );
-    AddMessage( msg );
+    msg.Printf( _( "Component count: %d." ), fpcount );
+    m_reporter->Report( msg, REPORTER::INFO );
 
     if( singleFile  )
+    {
+        m_reporter->Report( _( "Componment Placement File generation OK." ), REPORTER::ACTION );
         return true;
+    }
 
     // Create the Back or Bottom side placement file
     fullcount = fpcount;
@@ -304,8 +306,8 @@ bool DIALOG_GEN_MODULE_POSITION::CreateF
 
     if( fpcount < 0 )
     {
-        msg.Printf( _( "Unable to create '%s'" ), GetChars( fn.GetFullPath() ) );
-        AddMessage( msg + wxT("\n") );
+        msg.Printf( _( "Unable to create file '%s'." ), GetChars( fn.GetFullPath() ) );
+        m_reporter->Report( msg, REPORTER::ERROR );
         wxMessageBox( msg );
         return false;
     }
@@ -313,19 +315,23 @@ bool DIALOG_GEN_MODULE_POSITION::CreateF
     // Display results
     if( !singleFile )
     {
-        msg.Printf( _( "Back side (bottom side) place file: '%s'\n" ), GetChars( fn.GetFullPath() ) );
-        AddMessage( msg );
-        msg.Printf( _( "Footprint count %d\n" ), fpcount );
-        AddMessage( msg );
+        msg.Printf( _( "Back side (bottom side) place file: '%s'." ), GetChars( fn.GetFullPath() ) );
+        m_reporter->Report( msg, REPORTER::INFO );
+
+        msg.Printf( _( "Component count: %d." ), fpcount );
+
+        m_reporter->Report( msg, REPORTER::INFO );
     }
 
     if( !singleFile )
     {
         fullcount += fpcount;
-        msg.Printf( _( "Full footprint count %d\n" ), fullcount );
-        AddMessage( msg );
+        msg.Printf( _( "Full component count: %d\n" ), fullcount );
+        m_reporter->Report( msg, REPORTER::INFO );
     }
 
+    m_reporter->Report( _( "Componment Placement File generation OK." ), REPORTER::ACTION );
+
     return true;
 }
 
=== modified file 'pcbnew/netlist.cpp'
--- old/pcbnew/netlist.cpp	2015-06-12 14:46:41.878000000 +0200
+++ new/pcbnew/netlist.cpp	2015-06-15 16:24:55.273999000 +0200
@@ -224,7 +224,7 @@ void PCB_EDIT_FRAME::loadFootprints( NET
             {
                 msg.Printf( _( "No footprint defined for component '%s'.\n" ),
                             GetChars( component->GetReference() ) );
-                aReporter->Report( msg );
+                aReporter->Report( msg, REPORTER::ERROR );
             }
 
             continue;
@@ -273,11 +273,11 @@ void PCB_EDIT_FRAME::loadFootprints( NET
             {
                 if( aReporter )
                 {
-                    msg.Printf( _( "*** Warning: Component '%s' footprint ID '%s' is not "
-                                   "valid. ***\n" ),
+                    msg.Printf( _( "Component '%s' footprint ID '%s' is not "
+                                   "valid.\n" ),
                                 GetChars( component->GetReference() ),
                                 GetChars( component->GetFPID().Format() ) );
-                    aReporter->Report( msg );
+                    aReporter->Report( msg, REPORTER::ERROR );
                 }
 
                 continue;
@@ -295,11 +295,11 @@ void PCB_EDIT_FRAME::loadFootprints( NET
                 if( aReporter )
                 {
                     wxString msg;
-                    msg.Printf( _( "*** Warning: component '%s' footprint '%s' was not found in "
-                                   "any libraries in the footprint library table. ***\n" ),
+                    msg.Printf( _( "Component '%s' footprint '%s' was not found in "
+                                   "any libraries in the footprint library table.\n" ),
                                 GetChars( component->GetReference() ),
                                 GetChars( component->GetFPID().GetFootprintName() ) );
-                    aReporter->Report( msg );
+                    aReporter->Report( msg, REPORTER::ERROR );
                 }
 
                 continue;

Attachment: signature.asc
Description: OpenPGP digital signature


Follow ups

References