WX_HTML_REPORT_PANEL: a REPORTER widget on steroids.

This commit is contained in:
Tomasz Wlostowski 2015-06-16 14:20:42 +02:00 committed by Maciej Suminski
parent daa29d95df
commit b562cfb8bb
41 changed files with 1791 additions and 661 deletions

View File

@ -86,13 +86,10 @@ public:
REPORTER(), REPORTER(),
m_frame( aFrame ), m_position( aPosition ) m_frame( aFrame ), m_position( aPosition )
{ {
SetReportAll( true );
SetReportWarnings( true );
SetReportErrors( true );
m_hasMessage = false; m_hasMessage = false;
} }
REPORTER& Report( const wxString& aText ) REPORTER& Report( const wxString& aText, SEVERITY aSeverity = RPT_UNDEFINED )
{ {
if( !aText.IsEmpty() ) if( !aText.IsEmpty() )
m_hasMessage = true; m_hasMessage = true;
@ -298,8 +295,6 @@ void EDA_3D_CANVAS::Redraw()
wxString err_messages; wxString err_messages;
WX_STRING_REPORTER errorReporter( &err_messages ); WX_STRING_REPORTER errorReporter( &err_messages );
STATUS_TEXT_REPORTER activityReporter( Parent(), 0 ); STATUS_TEXT_REPORTER activityReporter( Parent(), 0 );
errorReporter.SetReportAll( false );
errorReporter.SetReportWarnings( m_reportWarnings );
// Display build time at the end of build // Display build time at the end of build
unsigned strtime = GetRunningMicroSecs(); unsigned strtime = GetRunningMicroSecs();
@ -622,7 +617,6 @@ void EDA_3D_CANVAS::Redraw()
if( !err_messages.IsEmpty() ) if( !err_messages.IsEmpty() )
wxLogMessage( err_messages ); wxLogMessage( err_messages );
ReportWarnings( false );
} }
@ -730,11 +724,13 @@ void EDA_3D_CANVAS::buildBoard3DView( GLuint aBoardList, GLuint aBodyOnlyList,
if( !pcb->GetBoardPolygonOutlines( bufferPcbOutlines, allLayerHoles, &msg ) ) 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" _("Unable to calculate the board outlines.\n"
"Therefore use the board boundary box.") << wxT("\n\n"); "Therefore use the board boundary box.") << wxT("\n\n");
aErrorMessages->Report( msg, REPORTER::RPT_WARNING );
} }
} }
@ -1082,11 +1078,12 @@ void EDA_3D_CANVAS::buildTechLayers3DView( REPORTER* aErrorMessages, REPORTER* a
if( !pcb->GetBoardPolygonOutlines( bufferPcbOutlines, allLayerHoles, &msg ) ) 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" _("Unable to calculate the board outlines.\n"
"Therefore use the board boundary box.") << wxT("\n\n"); "Therefore use the board boundary box.") << wxT("\n\n");
aErrorMessages->Report( msg, REPORTER::RPT_WARNING );
} }
} }
@ -1432,10 +1429,7 @@ void EDA_3D_CANVAS::CreateDrawGL_List( REPORTER* aErrorMessages, REPORTER* aActi
glNewList( m_glLists[GL_ID_TECH_LAYERS], GL_COMPILE ); glNewList( m_glLists[GL_ID_TECH_LAYERS], GL_COMPILE );
// when calling BuildTechLayers3DView, // when calling BuildTechLayers3DView,
// do not show warnings, which are the same as buildBoard3DView // do not show warnings, which are the same as buildBoard3DView
bool report_warn = aErrorMessages->ReportWarnings();
aErrorMessages->SetReportWarnings( false );
buildTechLayers3DView( aErrorMessages, aActivity ); buildTechLayers3DView( aErrorMessages, aActivity );
aErrorMessages->SetReportWarnings( report_warn );
glEndList(); glEndList();
CheckGLError( __FILE__, __LINE__ ); CheckGLError( __FILE__, __LINE__ );

View File

@ -130,6 +130,8 @@ set( COMMON_ABOUT_DLG_SRCS
dialogs/dialog_page_settings_base.cpp dialogs/dialog_page_settings_base.cpp
dialogs/dialog_env_var_config_base.cpp dialogs/dialog_env_var_config_base.cpp
dialogs/dialog_env_var_config.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 set( COMMON_PAGE_LAYOUT_SRCS

View File

@ -415,10 +415,10 @@ bool EnsureFileDirectoryExists( wxFileName* aTargetFullFileName,
{ {
if( aReporter ) 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( aTargetFullFileName->GetPath() ),
GetChars( baseFilePath ) ); GetChars( baseFilePath ) );
aReporter->Report( msg ); aReporter->Report( msg, REPORTER::RPT_ERROR );
} }
return false; return false;
@ -434,7 +434,7 @@ bool EnsureFileDirectoryExists( wxFileName* aTargetFullFileName,
if( aReporter ) if( aReporter )
{ {
msg.Printf( _( "Output directory '%s' created.\n" ), GetChars( outputPath ) ); msg.Printf( _( "Output directory '%s' created.\n" ), GetChars( outputPath ) );
aReporter->Report( msg ); aReporter->Report( msg, REPORTER::RPT_INFO );
return true; return true;
} }
} }
@ -442,9 +442,9 @@ bool EnsureFileDirectoryExists( wxFileName* aTargetFullFileName,
{ {
if( aReporter ) if( aReporter )
{ {
msg.Printf( _( "*** Error: cannot create output directory '%s'! ***\n" ), msg.Printf( _( "Cannot create output directory '%s'.\n" ),
GetChars( outputPath ) ); GetChars( outputPath ) );
aReporter->Report( msg ); aReporter->Report( msg, REPORTER::RPT_ERROR );
} }
return false; return false;

View File

@ -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@cern.ch>
*
* 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::RPT_ERROR:
return wxString( "<font color=\"red\" size=2>" ) + _( "<b>Error: </b></font><font size=2>" ) + aLine.message + wxString( "</font><br>" );
case REPORTER::RPT_WARNING:
return wxString( "<font color=\"orange\" size=2>" ) + _( "<b>Warning: </b></font><font size=2>" ) + aLine.message + wxString( "</font><br>" );
case REPORTER::RPT_INFO:
return wxString( "<font color=\"gray\" size=2>" ) + _( "<b>Info: </b>" ) + aLine.message + wxString( "</font><br>" );
case REPORTER::RPT_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::RPT_ERROR:
return _( "Error: " ) + aLine.message + wxT( "\n" );
case REPORTER::RPT_WARNING:
return _( "Warning: " ) + aLine.message + wxT( "\n" );
case REPORTER::RPT_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::RPT_WARNING );
m_checkBoxShowErrors->Enable( !m_showAll );
m_checkBoxShowErrors->SetValue( m_severities & REPORTER::RPT_ERROR );
m_checkBoxShowInfos->Enable( !m_showAll );
m_checkBoxShowInfos->SetValue( m_severities & REPORTER::RPT_INFO );
m_checkBoxShowActions->Enable( !m_showAll );
m_checkBoxShowActions->SetValue( m_severities & REPORTER::RPT_ACTION );
}
void WX_HTML_REPORT_PANEL::onCheckBoxShowWarnings( wxCommandEvent& event )
{
if ( event.IsChecked() )
m_severities |= REPORTER::RPT_WARNING;
else
m_severities &= ~REPORTER::RPT_WARNING;
refreshView();
}
void WX_HTML_REPORT_PANEL::onCheckBoxShowErrors( wxCommandEvent& event )
{
if ( event.IsChecked() )
m_severities |= REPORTER::RPT_ERROR;
else
m_severities &= ~REPORTER::RPT_ERROR;
refreshView();
}
void WX_HTML_REPORT_PANEL::onCheckBoxShowInfos( wxCommandEvent& event )
{
if ( event.IsChecked() )
m_severities |= REPORTER::RPT_INFO;
else
m_severities &= ~REPORTER::RPT_INFO;
refreshView();
}
void WX_HTML_REPORT_PANEL::onCheckBoxShowActions( wxCommandEvent& event )
{
if ( event.IsChecked() )
m_severities |= REPORTER::RPT_ACTION;
else
m_severities &= ~REPORTER::RPT_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();
}

View File

@ -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@cern.ch>
*
* 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__

View File

@ -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 );
}

View File

@ -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>

View File

@ -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__

View File

@ -5,7 +5,7 @@
* This program source code file is part of KiCad, a free EDA CAD application. * This program source code file is part of KiCad, a free EDA CAD application.
* *
* Copyright (C) 2013 Wayne Stambaugh <stambaughw@verizon.net> * Copyright (C) 2013 Wayne Stambaugh <stambaughw@verizon.net>
* 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 * This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License * modify it under the terms of the GNU General Public License
@ -27,15 +27,16 @@
#include <macros.h> #include <macros.h>
#include <reporter.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 ) ); Report( FROM_UTF8( aText ) );
return *this; 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, wxCHECK_MSG( m_textCtrl != NULL, *this,
wxT( "No wxTextCtrl object defined in WX_TEXT_CTRL_REPORTER." ) ); wxT( "No wxTextCtrl object defined in WX_TEXT_CTRL_REPORTER." ) );
@ -44,8 +45,7 @@ REPORTER& WX_TEXT_CTRL_REPORTER::Report( const wxString& aText )
return *this; return *this;
} }
REPORTER& WX_STRING_REPORTER::Report( const wxString& aText, REPORTER::SEVERITY aSeverity )
REPORTER& WX_STRING_REPORTER::Report( const wxString& aText )
{ {
wxCHECK_MSG( m_string != NULL, *this, wxCHECK_MSG( m_string != NULL, *this,
wxT( "No wxString object defined in WX_STRING_REPORTER." ) ); wxT( "No wxString object defined in WX_STRING_REPORTER." ) );
@ -53,3 +53,12 @@ REPORTER& WX_STRING_REPORTER::Report( const wxString& aText )
*m_string << aText; *m_string << aText;
return *this; 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;
}

View File

@ -391,7 +391,6 @@ void DIALOG_BOM::OnRunPlugin( wxCommandEvent& event )
wxString reportmsg; wxString reportmsg;
WX_STRING_REPORTER reporter( &reportmsg ); WX_STRING_REPORTER reporter( &reportmsg );
reporter.SetReportAll( true );
m_parent->SetNetListerCommand( m_textCtrlCommand->GetValue() ); m_parent->SetNetListerCommand( m_textCtrlCommand->GetValue() );
m_parent->CreateNetlist( -1, fullfilename, 0, &reporter ); m_parent->CreateNetlist( -1, fullfilename, 0, &reporter );

View File

@ -38,6 +38,7 @@
#include <base_units.h> #include <base_units.h>
#include <sch_sheet.h> #include <sch_sheet.h>
#include <dialog_plot_schematic.h> #include <dialog_plot_schematic.h>
#include <wx_html_report_panel.h>
// Keys for configuration // Keys for configuration
#define PLOT_FORMAT_KEY wxT( "PlotFormat" ) #define PLOT_FORMAT_KEY wxT( "PlotFormat" )
@ -329,8 +330,6 @@ void DIALOG_PLOT_SCHEMATIC::PlotSchematic( bool aPlotAll )
break; break;
} }
m_MessagesBox->AppendText( wxT( "****\n" ) );
} }
wxFileName DIALOG_PLOT_SCHEMATIC::createPlotFileName( wxTextCtrl* aOutputDirectoryName, wxFileName DIALOG_PLOT_SCHEMATIC::createPlotFileName( wxTextCtrl* aOutputDirectoryName,
@ -346,14 +345,12 @@ wxFileName DIALOG_PLOT_SCHEMATIC::createPlotFileName( wxTextCtrl* aOutputDirecto
if( !EnsureFileDirectoryExists( &outputDir, plotFileName, aReporter ) ) if( !EnsureFileDirectoryExists( &outputDir, plotFileName, aReporter ) )
{ {
wxString msg; 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() ) ); GetChars( outputDir.GetPath() ) );
msg << wxT( "\n" ); aReporter->Report( msg, REPORTER::RPT_ERROR );
aReporter->Report( msg );
} }
wxFileName fn( plotFileName ); wxFileName fn( plotFileName );
fn.SetPath( outputDir.GetFullPath() ); fn.SetPath( outputDir.GetFullPath() );
return fn; return fn;
} }

View File

@ -100,10 +100,8 @@ private:
* Everything done, close the plot and restore the environment * Everything done, close the plot and restore the environment
* @param aPlotter the plotter to close and destroy * @param aPlotter the plotter to close and destroy
* @param aOldsheetpath the stored old sheet path for the current sheet before the plot started * @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, void restoreEnvironment( PDF_PLOTTER* aPlotter, SCH_SHEET_PATH& aOldsheetpath );
const wxString& aMsg );
// DXF // DXF
void CreateDXFFile( bool aPlotAll, bool aPlotFrameRef ); void CreateDXFFile( bool aPlotAll, bool aPlotFrameRef );

View File

@ -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/ // http://www.wxformbuilder.org/
// //
// PLEASE DO "NOT" EDIT THIS FILE! // PLEASE DO "NOT" EDIT THIS FILE!
/////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////
#include "wx_html_report_panel.h"
#include "dialog_plot_schematic_base.h" #include "dialog_plot_schematic_base.h"
/////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////
@ -48,7 +50,7 @@ DIALOG_PLOT_SCHEMATIC_BASE::DIALOG_PLOT_SCHEMATIC_BASE( wxWindow* parent, wxWind
wxString m_PaperSizeOptionChoices[] = { _("Schematic size"), _("Force size A4"), _("Force size A") }; wxString m_PaperSizeOptionChoices[] = { _("Schematic size"), _("Force size A4"), _("Force size A") };
int m_PaperSizeOptionNChoices = sizeof( m_PaperSizeOptionChoices ) / sizeof( wxString ); 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 = 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_paperOptionsSizer->Add( m_PaperSizeOption, 0, wxALL|wxEXPAND, 5 );
m_paperHPGLSizer = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("HPGL Options") ), wxVERTICAL ); m_paperHPGLSizer = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("HPGL Options") ), wxVERTICAL );
@ -86,7 +88,7 @@ DIALOG_PLOT_SCHEMATIC_BASE::DIALOG_PLOT_SCHEMATIC_BASE( wxWindow* parent, wxWind
wxString m_plotFormatOptChoices[] = { _("Postscript"), _("PDF"), _("SVG"), _("DXF"), _("HPGL") }; wxString m_plotFormatOptChoices[] = { _("Postscript"), _("PDF"), _("SVG"), _("DXF"), _("HPGL") };
int m_plotFormatOptNChoices = sizeof( m_plotFormatOptChoices ) / sizeof( wxString ); 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 = 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 ); m_optionsSizer->Add( m_plotFormatOpt, 0, wxEXPAND|wxLEFT, 5 );
wxStaticBoxSizer* sbSizerPlotFormat; wxStaticBoxSizer* sbSizerPlotFormat;
@ -145,10 +147,10 @@ DIALOG_PLOT_SCHEMATIC_BASE::DIALOG_PLOT_SCHEMATIC_BASE( wxWindow* parent, wxWind
m_staticText2->Wrap( -1 ); m_staticText2->Wrap( -1 );
bSizer4->Add( m_staticText2, 0, wxTOP|wxRIGHT|wxLEFT, 5 ); bSizer4->Add( m_staticText2, 0, wxTOP|wxRIGHT|wxLEFT, 5 );
m_MessagesBox = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_MULTILINE ); m_MessagesBox = new WX_HTML_REPORT_PANEL( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
m_MessagesBox->SetMinSize( wxSize( -1,80 ) ); 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 ); bMainSizer->Add( bSizer4, 1, wxBOTTOM|wxEXPAND|wxLEFT|wxRIGHT, 5 );

View File

@ -448,7 +448,7 @@
<property name="pin_button">1</property> <property name="pin_button">1</property>
<property name="pos"></property> <property name="pos"></property>
<property name="resize">Resizable</property> <property name="resize">Resizable</property>
<property name="selection">0</property> <property name="selection">1</property>
<property name="show">1</property> <property name="show">1</property>
<property name="size"></property> <property name="size"></property>
<property name="style">wxRA_SPECIFY_COLS</property> <property name="style">wxRA_SPECIFY_COLS</property>
@ -989,7 +989,7 @@
<property name="pin_button">1</property> <property name="pin_button">1</property>
<property name="pos"></property> <property name="pos"></property>
<property name="resize">Resizable</property> <property name="resize">Resizable</property>
<property name="selection">0</property> <property name="selection">1</property>
<property name="show">1</property> <property name="show">1</property>
<property name="size"></property> <property name="size"></property>
<property name="style">wxRA_SPECIFY_COLS</property> <property name="style">wxRA_SPECIFY_COLS</property>
@ -1766,9 +1766,9 @@
</object> </object>
<object class="sizeritem" expanded="1"> <object class="sizeritem" expanded="1">
<property name="border">5</property> <property name="border">5</property>
<property name="flag">wxBOTTOM|wxEXPAND|wxLEFT|wxRIGHT</property> <property name="flag">wxEXPAND | wxALL</property>
<property name="proportion">1</property> <property name="proportion">1</property>
<object class="wxTextCtrl" expanded="1"> <object class="wxPanel" expanded="1">
<property name="BottomDockable">1</property> <property name="BottomDockable">1</property>
<property name="LeftDockable">1</property> <property name="LeftDockable">1</property>
<property name="RightDockable">1</property> <property name="RightDockable">1</property>
@ -1799,10 +1799,9 @@
<property name="max_size"></property> <property name="max_size"></property>
<property name="maximize_button">0</property> <property name="maximize_button">0</property>
<property name="maximum_size"></property> <property name="maximum_size"></property>
<property name="maxlength"></property>
<property name="min_size"></property> <property name="min_size"></property>
<property name="minimize_button">0</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="moveable">1</property>
<property name="name">m_MessagesBox</property> <property name="name">m_MessagesBox</property>
<property name="pane_border">1</property> <property name="pane_border">1</property>
@ -1814,18 +1813,12 @@
<property name="resize">Resizable</property> <property name="resize">Resizable</property>
<property name="show">1</property> <property name="show">1</property>
<property name="size"></property> <property name="size"></property>
<property name="style">wxTE_MULTILINE</property> <property name="subclass">WX_HTML_REPORT_PANEL; wx_html_report_panel.h</property>
<property name="subclass"></property>
<property name="toolbar_pane">0</property> <property name="toolbar_pane">0</property>
<property name="tooltip"></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_extra_style"></property>
<property name="window_name"></property> <property name="window_name"></property>
<property name="window_style"></property> <property name="window_style">wxTAB_TRAVERSAL</property>
<event name="OnChar"></event> <event name="OnChar"></event>
<event name="OnEnterWindow"></event> <event name="OnEnterWindow"></event>
<event name="OnEraseBackground"></event> <event name="OnEraseBackground"></event>
@ -1848,10 +1841,6 @@
<event name="OnRightUp"></event> <event name="OnRightUp"></event>
<event name="OnSetFocus"></event> <event name="OnSetFocus"></event>
<event name="OnSize"></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> <event name="OnUpdateUI"></event>
</object> </object>
</object> </object>

View File

@ -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/ // http://www.wxformbuilder.org/
// //
// PLEASE DO "NOT" EDIT THIS FILE! // PLEASE DO "NOT" EDIT THIS FILE!
@ -12,6 +12,7 @@
#include <wx/xrc/xmlres.h> #include <wx/xrc/xmlres.h>
#include <wx/intl.h> #include <wx/intl.h>
class DIALOG_SHIM; class DIALOG_SHIM;
class WX_HTML_REPORT_PANEL;
#include "dialog_shim.h" #include "dialog_shim.h"
#include <wx/string.h> #include <wx/string.h>
@ -27,6 +28,7 @@ class DIALOG_SHIM;
#include <wx/choice.h> #include <wx/choice.h>
#include <wx/statbox.h> #include <wx/statbox.h>
#include <wx/checkbox.h> #include <wx/checkbox.h>
#include <wx/panel.h>
#include <wx/dialog.h> #include <wx/dialog.h>
/////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////
@ -67,7 +69,7 @@ class DIALOG_PLOT_SCHEMATIC_BASE : public DIALOG_SHIM
wxButton* m_buttonPlotAll; wxButton* m_buttonPlotAll;
wxButton* m_buttonQuit; wxButton* m_buttonQuit;
wxStaticText* m_staticText2; wxStaticText* m_staticText2;
wxTextCtrl* m_MessagesBox; WX_HTML_REPORT_PANEL* m_MessagesBox;
// Virtual event handlers, overide them in your derived class // Virtual event handlers, overide them in your derived class
virtual void OnCloseWindow( wxCloseEvent& event ) { event.Skip(); } virtual void OnCloseWindow( wxCloseEvent& event ) { event.Skip(); }

View File

@ -106,30 +106,36 @@ bool SCH_EDIT_FRAME::WriteNetListFile( NETLIST_OBJECT_LIST* aConnectedItemsList,
wxArrayString output, errors; wxArrayString output, errors;
int diag = wxExecute (commandLine, output, errors, wxEXEC_SYNC ); int diag = wxExecute (commandLine, output, errors, wxEXEC_SYNC );
aReporter->Report( _("Run command:") ); wxString msg;
*aReporter << wxT("\n") << commandLine << wxT("\n\n");
msg << _("Run command:") << wxT("\n") << commandLine << wxT("\n\n");
aReporter->Report( msg, REPORTER::RPT_ACTION );
if( diag != 0 ) if( diag != 0 )
aReporter->Report( wxString::Format( _("Command error. Return code %d"), diag ) ); aReporter->Report( wxString::Format( _("Command error. Return code %d"), diag ), REPORTER::RPT_ERROR );
else else
aReporter->Report( _("Success") ); aReporter->Report( _("Success"), REPORTER::RPT_INFO );
*aReporter << wxT("\n"); *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::RPT_INFO );
for( unsigned ii = 0; ii < output.GetCount(); ii++ ) for( unsigned ii = 0; ii < output.GetCount(); ii++ )
*aReporter << output[ii] << wxT("\n"); aReporter->Report( output[ii], REPORTER::RPT_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::RPT_INFO );
for( unsigned ii = 0; ii < errors.GetCount(); ii++ ) for( unsigned ii = 0; ii < errors.GetCount(); ii++ )
*aReporter << errors[ii] << wxT("\n"); aReporter->Report( errors[ii], REPORTER::RPT_ERROR );
} }
} }
else else

View File

@ -30,9 +30,11 @@
#include <class_sch_screen.h> #include <class_sch_screen.h>
#include <schframe.h> #include <schframe.h>
#include <sch_sheet_path.h> #include <sch_sheet_path.h>
#include <dialog_plot_schematic.h>
#include <project.h> #include <project.h>
#include <dialog_plot_schematic.h>
#include <wx_html_report_panel.h>
void DIALOG_PLOT_SCHEMATIC::CreateDXFFile( bool aPlotAll, bool aPlotFrameRef ) void DIALOG_PLOT_SCHEMATIC::CreateDXFFile( bool aPlotAll, bool aPlotFrameRef )
{ {
@ -51,7 +53,7 @@ void DIALOG_PLOT_SCHEMATIC::CreateDXFFile( bool aPlotAll, bool aPlotFrameRef )
sheetpath = SheetList.GetFirst(); sheetpath = SheetList.GetFirst();
SCH_SHEET_PATH list; SCH_SHEET_PATH list;
WX_TEXT_CTRL_REPORTER reporter(m_MessagesBox); REPORTER& reporter = m_MessagesBox->Reporter();
while( true ) while( true )
{ {
@ -89,19 +91,19 @@ void DIALOG_PLOT_SCHEMATIC::CreateDXFFile( bool aPlotAll, bool aPlotFrameRef )
if( PlotOneSheetDXF( plotFileName.GetFullPath(), screen, plot_offset, 1.0, aPlotFrameRef ) ) 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::RPT_ACTION );
} }
else // Error 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::RPT_ERROR );
} }
m_MessagesBox->AppendText( msg );
} }
catch( IO_ERROR& e ) catch( IO_ERROR& e )
{ {
msg.Printf( wxT( "DXF Plotter Exception : '%s'"), GetChars( e.errorText ) ); msg.Printf( wxT( "DXF Plotter exception: %s"), GetChars( e.errorText ) );
m_MessagesBox->AppendText( msg ); reporter.Report( msg, REPORTER::RPT_ERROR );
schframe->SetCurrentSheet( oldsheetpath ); schframe->SetCurrentSheet( oldsheetpath );
schframe->GetCurrentSheet().UpdateAllScreenReferences(); schframe->GetCurrentSheet().UpdateAllScreenReferences();
schframe->SetSheetNumberAndCount(); schframe->SetSheetNumberAndCount();

View File

@ -34,7 +34,7 @@
#include <project.h> #include <project.h>
#include <dialog_plot_schematic.h> #include <dialog_plot_schematic.h>
#include <wx_html_report_panel.h>
enum HPGL_PAGEZ_T { enum HPGL_PAGEZ_T {
PAGE_DEFAULT = 0, PAGE_DEFAULT = 0,
@ -124,7 +124,7 @@ void DIALOG_PLOT_SCHEMATIC::createHPGLFile( bool aPlotAll, bool aPlotFrameRef )
sheetpath = SheetList.GetFirst(); sheetpath = SheetList.GetFirst();
SCH_SHEET_PATH list; SCH_SHEET_PATH list;
WX_TEXT_CTRL_REPORTER reporter(m_MessagesBox); REPORTER& reporter = m_MessagesBox->Reporter();
SetHPGLPenWidth(); SetHPGLPenWidth();
@ -186,19 +186,23 @@ void DIALOG_PLOT_SCHEMATIC::createHPGLFile( bool aPlotAll, bool aPlotFrameRef )
if( Plot_1_Page_HPGL( plotFileName.GetFullPath(), screen, plotPage, plotOffset, if( Plot_1_Page_HPGL( plotFileName.GetFullPath(), screen, plotPage, plotOffset,
plot_scale, aPlotFrameRef ) ) plot_scale, aPlotFrameRef ) )
msg.Printf( _( "Plot: '%s' OK\n" ), GetChars( plotFileName.GetFullPath() ) ); {
else // Error msg.Printf( _( "Plot: '%s' OK.\n" ), GetChars( plotFileName.GetFullPath() ) );
msg.Printf( _( "Unable to create '%s'\n" ), GetChars( plotFileName.GetFullPath() ) ); reporter.Report( msg, REPORTER::RPT_ACTION );
}
m_MessagesBox->AppendText( msg ); else
{
msg.Printf( _( "Unable to create file '%s'.\n" ), GetChars( plotFileName.GetFullPath() ) );
reporter.Report( msg, REPORTER::RPT_ERROR );
}
if( !aPlotAll ) if( !aPlotAll )
break; break;
} }
catch( IO_ERROR& e ) catch( IO_ERROR& e )
{ {
msg.Printf( wxT( "HPGL Plotter Exception : '%s'"), GetChars( e.errorText ) ); msg.Printf( wxT( "HPGL Plotter exception: %s"), GetChars( e.errorText ) );
m_MessagesBox->AppendText( msg ); reporter.Report( msg, REPORTER::RPT_ERROR );
} }
} }

View File

@ -31,9 +31,12 @@
#include <schframe.h> #include <schframe.h>
#include <base_units.h> #include <base_units.h>
#include <sch_sheet_path.h> #include <sch_sheet_path.h>
#include <dialog_plot_schematic.h>
#include <project.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 ) void DIALOG_PLOT_SCHEMATIC::createPDFFile( bool aPlotAll, bool aPlotFrameRef )
{ {
@ -61,7 +64,7 @@ void DIALOG_PLOT_SCHEMATIC::createPDFFile( bool aPlotAll, bool aPlotFrameRef )
wxString msg; wxString msg;
wxFileName plotFileName; wxFileName plotFileName;
WX_TEXT_CTRL_REPORTER reporter(m_MessagesBox); REPORTER& reporter = m_MessagesBox->Reporter();
// First page handling is different // First page handling is different
bool first_page = true; bool first_page = true;
@ -97,8 +100,8 @@ void DIALOG_PLOT_SCHEMATIC::createPDFFile( bool aPlotAll, bool aPlotFrameRef )
if( !plotter->OpenFile( plotFileName.GetFullPath() ) ) if( !plotter->OpenFile( plotFileName.GetFullPath() ) )
{ {
msg.Printf( _( "Unable to create '%s'\n" ), GetChars( plotFileName.GetFullPath() ) ); msg.Printf( _( "Unable to create file '%s'.\n" ), GetChars( plotFileName.GetFullPath() ) );
m_MessagesBox->AppendText( msg ); reporter.Report( msg, REPORTER::RPT_ERROR );
delete plotter; delete plotter;
return; return;
} }
@ -113,8 +116,10 @@ void DIALOG_PLOT_SCHEMATIC::createPDFFile( bool aPlotAll, bool aPlotFrameRef )
catch( const IO_ERROR& e ) catch( const IO_ERROR& e )
{ {
// Cannot plot PDF file // Cannot plot PDF file
msg.Printf( wxT( "PDF Plotter Exception : <%s>"), GetChars( e.errorText ) ); msg.Printf( wxT( "PDF Plotter exception: %s" ), GetChars( e.errorText ) );
restoreEnvironment(plotter, oldsheetpath, msg); reporter.Report( msg, REPORTER::RPT_ERROR );
restoreEnvironment( plotter, oldsheetpath );
return; return;
} }
@ -132,14 +137,17 @@ void DIALOG_PLOT_SCHEMATIC::createPDFFile( bool aPlotAll, bool aPlotFrameRef )
} while( aPlotAll && sheetpath ); } while( aPlotAll && sheetpath );
// Everything done, close the plot and restore the environment // Everything done, close the plot and restore the environment
msg.Printf( _( "Plot: <%s> OK\n" ), GetChars( plotFileName.GetFullPath() ) ); msg.Printf( _( "Plot: '%s' OK.\n" ), GetChars( plotFileName.GetFullPath() ) );
restoreEnvironment(plotter, oldsheetpath, msg); reporter.Report( msg, REPORTER::RPT_ACTION );
restoreEnvironment(plotter, oldsheetpath );
} }
void DIALOG_PLOT_SCHEMATIC::restoreEnvironment( PDF_PLOTTER* aPlotter, void DIALOG_PLOT_SCHEMATIC::restoreEnvironment( PDF_PLOTTER* aPlotter,
SCH_SHEET_PATH& aOldsheetpath, const wxString& aMsg ) SCH_SHEET_PATH& aOldsheetpath )
{ {
aPlotter->EndPlot(); aPlotter->EndPlot();
delete aPlotter; delete aPlotter;
@ -149,8 +157,6 @@ void DIALOG_PLOT_SCHEMATIC::restoreEnvironment( PDF_PLOTTER* aPlotter,
m_parent->SetCurrentSheet( aOldsheetpath ); m_parent->SetCurrentSheet( aOldsheetpath );
m_parent->GetCurrentSheet().UpdateAllScreenReferences(); m_parent->GetCurrentSheet().UpdateAllScreenReferences();
m_parent->SetSheetNumberAndCount(); m_parent->SetSheetNumberAndCount();
m_MessagesBox->AppendText( aMsg );
} }

View File

@ -30,10 +30,11 @@
#include <schframe.h> #include <schframe.h>
#include <base_units.h> #include <base_units.h>
#include <sch_sheet_path.h> #include <sch_sheet_path.h>
#include <dialog_plot_schematic.h>
#include <project.h> #include <project.h>
#include <reporter.h> #include <reporter.h>
#include <dialog_plot_schematic.h>
#include <wx_html_report_panel.h>
void DIALOG_PLOT_SCHEMATIC::createPSFile( bool aPlotAll, bool aPlotFrameRef ) void DIALOG_PLOT_SCHEMATIC::createPSFile( bool aPlotAll, bool aPlotFrameRef )
{ {
@ -107,7 +108,7 @@ void DIALOG_PLOT_SCHEMATIC::createPSFile( bool aPlotAll, bool aPlotFrameRef )
wxFileName outputDir = wxFileName::DirName( outputDirName ); wxFileName outputDir = wxFileName::DirName( outputDirName );
wxString msg; wxString msg;
WX_TEXT_CTRL_REPORTER reporter(m_MessagesBox); REPORTER& reporter = m_MessagesBox->Reporter();
try try
{ {
@ -119,20 +120,21 @@ void DIALOG_PLOT_SCHEMATIC::createPSFile( bool aPlotAll, bool aPlotFrameRef )
if( plotOneSheetPS( plotFileName.GetFullPath(), screen, plotPage, plot_offset, if( plotOneSheetPS( plotFileName.GetFullPath(), screen, plotPage, plot_offset,
scale, aPlotFrameRef ) ) scale, aPlotFrameRef ) )
{ {
msg.Printf( _( "Plot: '%s' OK\n" ), GetChars( plotFileName.GetFullPath() ) ); msg.Printf( _( "Plot: '%s' OK.\n" ), GetChars( plotFileName.GetFullPath() ) );
reporter.Report( msg, REPORTER::RPT_ACTION );
} }
else else
{ {
// Error // 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::RPT_ERROR );
} }
m_MessagesBox->AppendText( msg );
} }
catch( IO_ERROR& e ) catch( IO_ERROR& e )
{ {
msg.Printf( wxT( "PS Plotter Exception : '%s'"), GetChars( e.errorText ) ); msg.Printf( wxT( "PS Plotter exception: %s"), GetChars( e.errorText ) );
m_MessagesBox->AppendText( msg ); reporter.Report( msg, REPORTER::RPT_ERROR );
} }
if( !aPlotAll ) if( !aPlotAll )

View File

@ -36,13 +36,15 @@
#include <libeditframe.h> #include <libeditframe.h>
#include <sch_sheet_path.h> #include <sch_sheet_path.h>
#include <project.h> #include <project.h>
#include <reporter.h>
#include <dialog_plot_schematic.h> #include <dialog_plot_schematic.h>
#include <wx_html_report_panel.h>
void DIALOG_PLOT_SCHEMATIC::createSVGFile( bool aPrintAll, bool aPrintFrameRef ) void DIALOG_PLOT_SCHEMATIC::createSVGFile( bool aPrintAll, bool aPrintFrameRef )
{ {
wxString msg; wxString msg;
REPORTER& reporter = m_MessagesBox->Reporter();
if( aPrintAll ) if( aPrintAll )
{ {
@ -51,7 +53,6 @@ void DIALOG_PLOT_SCHEMATIC::createSVGFile( bool aPrintAll, bool aPrintFrameRef )
SCH_SHEET_LIST SheetList( NULL ); SCH_SHEET_LIST SheetList( NULL );
sheetpath = SheetList.GetFirst(); sheetpath = SheetList.GetFirst();
SCH_SHEET_PATH list; SCH_SHEET_PATH list;
WX_TEXT_CTRL_REPORTER reporter(m_MessagesBox);
for( ; ; ) for( ; ; )
{ {
@ -90,22 +91,22 @@ void DIALOG_PLOT_SCHEMATIC::createSVGFile( bool aPrintAll, bool aPrintFrameRef )
if( !success ) if( !success )
{ {
msg.Printf( _( "Error creating file '%s'\n" ), msg.Printf( _( "Cannot create file '%s'.\n" ),
GetChars( plotFileName.GetFullPath() ) ); GetChars( plotFileName.GetFullPath() ) );
reporter.Report( msg, REPORTER::RPT_ERROR );
} }
else else
{ {
msg.Printf( _( "File '%s' OK\n" ), msg.Printf( _( "Plot: '%s' OK.\n" ),
GetChars( plotFileName.GetFullPath() ) ); GetChars( plotFileName.GetFullPath() ) );
reporter.Report( msg, REPORTER::RPT_ACTION );
} }
m_MessagesBox->AppendText( msg );
} }
catch( const IO_ERROR& e ) catch( const IO_ERROR& e )
{ {
// Cannot plot SVG file // Cannot plot SVG file
msg.Printf( wxT( "SVG Plotter Exception : '%s'" ), GetChars( e.errorText ) ); msg.Printf( wxT( "SVG Plotter exception: %s" ), GetChars( e.errorText ) );
m_MessagesBox->AppendText( msg ); reporter.Report( msg, REPORTER::RPT_ERROR );
m_parent->SetCurrentSheet( oldsheetpath ); m_parent->SetCurrentSheet( oldsheetpath );
m_parent->GetCurrentSheet().UpdateAllScreenReferences(); m_parent->GetCurrentSheet().UpdateAllScreenReferences();
@ -133,21 +134,23 @@ void DIALOG_PLOT_SCHEMATIC::createSVGFile( bool aPrintAll, bool aPrintFrameRef )
aPrintFrameRef ); aPrintFrameRef );
if( success ) if( success )
{ {
msg.Printf( _( "Plot: <%s> OK\n" ), msg.Printf( _( "Plot: '%s' OK.\n" ),
GetChars( fn.GetFullPath() ) ); GetChars( fn.GetFullPath() ) );
reporter.Report( msg, REPORTER::RPT_ACTION );
} }
else // Error else // Error
{ {
msg.Printf( _( "Unable to create <%s>\n" ), msg.Printf( _( "Unable to create file '%s'.\n" ),
GetChars( fn.GetFullPath() ) ); GetChars( fn.GetFullPath() ) );
reporter.Report( msg, REPORTER::RPT_ERROR );
} }
m_MessagesBox->AppendText( msg );
} }
catch( const IO_ERROR& e ) catch( const IO_ERROR& e )
{ {
// Cannot plot SVG file // Cannot plot SVG file
msg.Printf( wxT( "SVG Plotter Exception : <%s>"), GetChars( e.errorText ) ); msg.Printf( wxT( "SVG Plotter exception: %s."), GetChars( e.errorText ) );
m_MessagesBox->AppendText( msg ); reporter.Report( msg, REPORTER::RPT_ERROR );
return; return;
} }
} }

View File

@ -35,6 +35,8 @@
class wxString; class wxString;
class wxTextCtrl; class wxTextCtrl;
class wxHtmlListbox;
class WX_HTML_REPORT_PANEL;
/** /**
@ -47,28 +49,37 @@ class wxTextCtrl;
* <li> know too much about the caller's UI, i.e. wx. </li> * <li> know too much about the caller's UI, i.e. wx. </li>
* <li> stop after the first error </li> * <li> stop after the first error </li>
* </ul> * </ul>
* the reporter has 3 levels (flags) for filtering: * the reporter has 4 severity levels (flags) tagging the messages:
* no filter * - information
* report warning * - warning
* report errors * - error
* They are indicators for the calling code, filtering is not made here * - 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
{ 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
public: public:
///> Severity of the reported messages.
enum SEVERITY {
RPT_UNDEFINED = 0x0,
RPT_INFO = 0x1,
RPT_WARNING = 0x2,
RPT_ERROR = 0x4,
RPT_ACTION = 0x8
};
/** /**
* Function Report * Function Report
* is a pure virtual function to override in the derived object. * is a pure virtual function to override in the derived object.
* *
* @param aText is the string to report. * @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 = RPT_UNDEFINED ) = 0;
REPORTER& Report( const char* aText, SEVERITY aSeverity = RPT_UNDEFINED );
REPORTER& operator <<( const wxString& aText ) { return Report( aText ); } REPORTER& operator <<( const wxString& aText ) { return Report( aText ); }
@ -77,41 +88,6 @@ public:
REPORTER& operator <<( wxChar aChar ) { return Report( wxString( aChar ) ); } REPORTER& operator <<( wxChar aChar ) { return Report( wxString( aChar ) ); }
REPORTER& operator <<( const char* aText ) { return Report( aText ); } 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 +104,9 @@ public:
REPORTER(), REPORTER(),
m_textCtrl( aTextCtrl ) m_textCtrl( aTextCtrl )
{ {
SetReportAll( true );
SetReportWarnings( true );
SetReportErrors( true );
} }
REPORTER& Report( const wxString& aText ); REPORTER& Report( const wxString& aText, SEVERITY aSeverity = RPT_UNDEFINED );
}; };
@ -152,7 +125,26 @@ public:
{ {
} }
REPORTER& Report( const wxString& aText ); REPORTER& Report( const wxString& aText, SEVERITY aSeverity = RPT_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 = RPT_UNDEFINED );
}; };
#endif // _REPORTER_H_ #endif // _REPORTER_H_

View File

@ -2231,21 +2231,14 @@ void BOARD::ReplaceNetlist( NETLIST& aNetlist, bool aDeleteSinglePadNets,
{ {
COMPONENT* component = aNetlist.GetComponent( i ); 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" ), msg.Printf( _( "Checking netlist component footprint \"%s:%s:%s\".\n" ),
GetChars( component->GetReference() ), GetChars( component->GetReference() ),
GetChars( component->GetTimeStamp() ), GetChars( component->GetTimeStamp() ),
GetChars( component->GetFPID().Format() ) ); GetChars( component->GetFPID().Format() ) );
aReporter->Report( msg ); aReporter->Report( msg, REPORTER::RPT_INFO );
} }
if( aNetlist.IsFindByTimeStamp() ) if( aNetlist.IsFindByTimeStamp() )
@ -2264,8 +2257,7 @@ void BOARD::ReplaceNetlist( NETLIST& aNetlist, bool aDeleteSinglePadNets,
GetChars( component->GetTimeStamp() ), GetChars( component->GetTimeStamp() ),
GetChars( component->GetFPID().Format() ) ); GetChars( component->GetFPID().Format() ) );
if( aReporter->ReportWarnings() ) aReporter->Report( msg, REPORTER::RPT_ACTION );
aReporter->Report( msg );
} }
else else
{ {
@ -2275,8 +2267,7 @@ void BOARD::ReplaceNetlist( NETLIST& aNetlist, bool aDeleteSinglePadNets,
GetChars( component->GetTimeStamp() ), GetChars( component->GetTimeStamp() ),
GetChars( component->GetFPID().Format() ) ); GetChars( component->GetFPID().Format() ) );
if( aReporter->ReportErrors() ) aReporter->Report( msg, REPORTER::RPT_ERROR );
aReporter->Report( msg );
} }
} }
@ -2309,8 +2300,7 @@ void BOARD::ReplaceNetlist( NETLIST& aNetlist, bool aDeleteSinglePadNets,
GetChars( footprint->GetFPID().Format() ), GetChars( footprint->GetFPID().Format() ),
GetChars( component->GetFPID().Format() ) ); GetChars( component->GetFPID().Format() ) );
if( aReporter->ReportWarnings() ) aReporter->Report( msg, REPORTER::RPT_ACTION );
aReporter->Report( msg );
} }
else else
{ {
@ -2320,8 +2310,7 @@ void BOARD::ReplaceNetlist( NETLIST& aNetlist, bool aDeleteSinglePadNets,
GetChars( footprint->GetPath() ), GetChars( footprint->GetPath() ),
GetChars( component->GetFPID().Format() ) ); GetChars( component->GetFPID().Format() ) );
if( aReporter->ReportErrors() ) aReporter->Report( msg, REPORTER::RPT_ERROR );
aReporter->Report( msg );
} }
} }
@ -2346,13 +2335,13 @@ void BOARD::ReplaceNetlist( NETLIST& aNetlist, bool aDeleteSinglePadNets,
// Test for reference designator field change. // Test for reference designator field change.
if( footprint->GetReference() != component->GetReference() ) 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->GetReference() ),
GetChars( footprint->GetPath() ), GetChars( footprint->GetPath() ),
GetChars( component->GetReference() ) ); GetChars( component->GetReference() ) );
aReporter->Report( msg ); aReporter->Report( msg, REPORTER::RPT_ACTION );
} }
if( !aNetlist.IsDryRun() ) if( !aNetlist.IsDryRun() )
@ -2362,14 +2351,14 @@ void BOARD::ReplaceNetlist( NETLIST& aNetlist, bool aDeleteSinglePadNets,
// Test for value field change. // Test for value field change.
if( footprint->GetValue() != component->GetValue() ) 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->GetReference() ),
GetChars( footprint->GetPath() ), GetChars( footprint->GetPath() ),
GetChars( footprint->GetValue() ), GetChars( footprint->GetValue() ),
GetChars( component->GetValue() ) ); GetChars( component->GetValue() ) );
aReporter->Report( msg ); aReporter->Report( msg, REPORTER::RPT_ACTION );
} }
if( !aNetlist.IsDryRun() ) if( !aNetlist.IsDryRun() )
@ -2379,13 +2368,13 @@ void BOARD::ReplaceNetlist( NETLIST& aNetlist, bool aDeleteSinglePadNets,
// Test for time stamp change. // Test for time stamp change.
if( footprint->GetPath() != component->GetTimeStamp() ) 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->GetReference() ),
GetChars( footprint->GetPath() ), GetChars( footprint->GetPath() ),
GetChars( component->GetTimeStamp() ) ); GetChars( component->GetTimeStamp() ) );
aReporter->Report( msg ); aReporter->Report( msg, REPORTER::RPT_INFO );
} }
if( !aNetlist.IsDryRun() ) if( !aNetlist.IsDryRun() )
@ -2403,13 +2392,13 @@ void BOARD::ReplaceNetlist( NETLIST& aNetlist, bool aDeleteSinglePadNets,
if( !net.IsValid() ) // Footprint pad had no net. 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" ), msg.Printf( _( "Clearing component \"%s:%s\" pin \"%s\" net name.\n" ),
GetChars( footprint->GetReference() ), GetChars( footprint->GetReference() ),
GetChars( footprint->GetPath() ), GetChars( footprint->GetPath() ),
GetChars( pad->GetPadName() ) ); GetChars( pad->GetPadName() ) );
aReporter->Report( msg ); aReporter->Report( msg, REPORTER::RPT_ACTION );
} }
if( !aNetlist.IsDryRun() ) if( !aNetlist.IsDryRun() )
@ -2419,7 +2408,7 @@ void BOARD::ReplaceNetlist( NETLIST& aNetlist, bool aDeleteSinglePadNets,
{ {
if( net.GetNetName() != pad->GetNetname() ) if( net.GetNetName() != pad->GetNetname() )
{ {
if( aReporter && aReporter->ReportAll() ) if( aReporter )
{ {
msg.Printf( _( "Changing component \"%s:%s\" pin \"%s\" net name from " msg.Printf( _( "Changing component \"%s:%s\" pin \"%s\" net name from "
"\"%s\" to \"%s\".\n" ), "\"%s\" to \"%s\".\n" ),
@ -2428,7 +2417,7 @@ void BOARD::ReplaceNetlist( NETLIST& aNetlist, bool aDeleteSinglePadNets,
GetChars( pad->GetPadName() ), GetChars( pad->GetPadName() ),
GetChars( pad->GetNetname() ), GetChars( pad->GetNetname() ),
GetChars( net.GetNetName() ) ); GetChars( net.GetNetName() ) );
aReporter->Report( msg ); aReporter->Report( msg, REPORTER::RPT_ACTION );
} }
if( !aNetlist.IsDryRun() ) if( !aNetlist.IsDryRun() )
@ -2468,12 +2457,12 @@ void BOARD::ReplaceNetlist( NETLIST& aNetlist, bool aDeleteSinglePadNets,
if( component == NULL ) 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->GetReference() ),
GetChars( module->GetPath() ) ); GetChars( module->GetPath() ) );
aReporter->Report( msg ); aReporter->Report( msg, REPORTER::RPT_ACTION );
} }
if( !aNetlist.IsDryRun() ) if( !aNetlist.IsDryRun() )
@ -2528,13 +2517,13 @@ void BOARD::ReplaceNetlist( NETLIST& aNetlist, bool aDeleteSinglePadNets,
if( count == 1 ) // Really one pad, and nothing else 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" ), msg.Printf( _( "Remove single pad net \"%s\" on \"%s\" pad '%s'\n" ),
GetChars( previouspad->GetNetname() ), GetChars( previouspad->GetNetname() ),
GetChars( previouspad->GetParent()->GetReference() ), GetChars( previouspad->GetParent()->GetReference() ),
GetChars( previouspad->GetPadName() ) ); GetChars( previouspad->GetPadName() ) );
aReporter->Report( msg ); aReporter->Report( msg, REPORTER::RPT_ACTION );
} }
previouspad->SetNetCode( NETINFO_LIST::UNCONNECTED ); previouspad->SetNetCode( NETINFO_LIST::UNCONNECTED );
@ -2566,7 +2555,7 @@ void BOARD::ReplaceNetlist( NETLIST& aNetlist, bool aDeleteSinglePadNets,
// Also verify if zones have acceptable nets, i.e. nets with pads. // 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 // Zone with no pad belongs to a "dead" net which happens after changes in schematic
// when no more pad use this net name. // when no more pad use this net name.
if( aReporter && aReporter->ReportErrors() ) if( aReporter )
{ {
wxString padname; wxString padname;
for( i = 0; i < aNetlist.GetCount(); i++ ) for( i = 0; i < aNetlist.GetCount(); i++ )
@ -2587,11 +2576,11 @@ void BOARD::ReplaceNetlist( NETLIST& aNetlist, bool aDeleteSinglePadNets,
continue; // OK, pad found continue; // OK, pad found
// not found: bad footprint, report error // 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( component->GetReference() ),
GetChars( padname ), GetChars( padname ),
GetChars( footprint->GetFPID().Format() ) ); GetChars( footprint->GetFPID().Format() ) );
aReporter->Report( msg ); aReporter->Report( msg, REPORTER::RPT_ERROR );
} }
} }
@ -2605,9 +2594,9 @@ void BOARD::ReplaceNetlist( NETLIST& aNetlist, bool aDeleteSinglePadNets,
if( zone->GetNet()->GetNodesCount() == 0 ) 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() ) ); GetChars( zone->GetNet()->GetNetname() ) );
aReporter->Report( msg ); aReporter->Report( msg, REPORTER::RPT_WARNING );
} }
} }
} }

View File

@ -46,6 +46,7 @@
#include <class_board.h> #include <class_board.h>
#include <dialog_SVG_print_base.h> #include <dialog_SVG_print_base.h>
#include <invoke_pcb_dialog.h> #include <invoke_pcb_dialog.h>
#include <wx_html_report_panel.h>
class DIALOG_SVG_PRINT : public DIALOG_SVG_PRINT_base class DIALOG_SVG_PRINT : public DIALOG_SVG_PRINT_base
@ -266,7 +267,7 @@ void DIALOG_SVG_PRINT::ExportSVGFile( bool aOnlyOneFile )
wxFileName outputDir = wxFileName::DirName( m_outputDirectory ); wxFileName outputDir = wxFileName::DirName( m_outputDirectory );
wxString boardFilename = m_board->GetFileName(); wxString boardFilename = m_board->GetFileName();
WX_TEXT_CTRL_REPORTER reporter( m_messagesBox ); REPORTER& reporter = m_messagesPanel->Reporter();
if( !EnsureFileDirectoryExists( &outputDir, boardFilename, &reporter ) ) if( !EnsureFileDirectoryExists( &outputDir, boardFilename, &reporter ) )
{ {
@ -301,15 +302,15 @@ void DIALOG_SVG_PRINT::ExportSVGFile( bool aOnlyOneFile )
if( CreateSVGFile( fn.GetFullPath(), aOnlyOneFile ) ) if( CreateSVGFile( fn.GetFullPath(), aOnlyOneFile ) )
{ {
m_messagesBox->AppendText( reporter.Report (
wxString::Format( _( "Plot: '%s' OK\n" ), GetChars( fn.GetFullPath() ) ) wxString::Format( _( "Plot: '%s' OK." ), GetChars( fn.GetFullPath() ) ),
); REPORTER::RPT_ACTION );
} }
else // Error else // Error
{ {
m_messagesBox->AppendText( reporter.Report (
wxString::Format( _( "** Unable to create '%s'**\n" ), GetChars( fn.GetFullPath() ) ) wxString::Format( _( "Unable to create file '%s'." ), GetChars( fn.GetFullPath() ) ),
); REPORTER::RPT_ERROR );
} }
if( aOnlyOneFile ) if( aOnlyOneFile )

View File

@ -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/ // http://www.wxformbuilder.org/
// //
// PLEASE DO "NOT" EDIT THIS FILE! // PLEASE DO "NOT" EDIT THIS FILE!
/////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////
#include "wx_html_report_panel.h"
#include "dialog_SVG_print_base.h" #include "dialog_SVG_print_base.h"
/////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////
@ -117,14 +119,16 @@ DIALOG_SVG_PRINT_base::DIALOG_SVG_PRINT_base( wxWindow* parent, wxWindowID id, c
bMainSizer->Add( bUpperSizer, 0, wxEXPAND, 5 ); bMainSizer->Add( bUpperSizer, 0, wxEXPAND, 5 );
m_staticText2 = new wxStaticText( this, wxID_ANY, _("Messages:"), wxDefaultPosition, wxDefaultSize, 0 ); wxBoxSizer* bSizer5;
m_staticText2->Wrap( -1 ); bSizer5 = new wxBoxSizer( wxVERTICAL );
bMainSizer->Add( m_staticText2, 0, wxTOP|wxRIGHT|wxLEFT, 5 );
m_messagesBox = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_MULTILINE|wxTE_READONLY ); m_messagesPanel = new WX_HTML_REPORT_PANEL( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
m_messagesBox->SetMinSize( wxSize( -1,150 ) ); m_messagesPanel->SetMinSize( wxSize( 300,150 ) );
bMainSizer->Add( m_messagesBox, 1, wxBOTTOM|wxRIGHT|wxLEFT|wxEXPAND, 5 ); bSizer5->Add( m_messagesPanel, 1, wxEXPAND | wxALL, 5 );
bMainSizer->Add( bSizer5, 1, wxEXPAND, 5 );
this->SetSizer( bMainSizer ); this->SetSizer( bMainSizer );

View File

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?> <?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<wxFormBuilder_Project> <wxFormBuilder_Project>
<FileVersion major="1" minor="11" /> <FileVersion major="1" minor="13" />
<object class="Project" expanded="1"> <object class="Project" expanded="1">
<property name="class_decoration"></property> <property name="class_decoration"></property>
<property name="code_generation">C++</property> <property name="code_generation">C++</property>
@ -1242,92 +1242,18 @@
</object> </object>
<object class="sizeritem" expanded="1"> <object class="sizeritem" expanded="1">
<property name="border">5</property> <property name="border">5</property>
<property name="flag">wxTOP|wxRIGHT|wxLEFT</property> <property name="flag">wxEXPAND</property>
<property name="proportion">0</property> <property name="proportion">1</property>
<object class="wxStaticText" expanded="1"> <object class="wxBoxSizer" 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="minimum_size"></property>
<property name="moveable">1</property> <property name="name">bSizer5</property>
<property name="name">m_staticText2</property> <property name="orient">wxVERTICAL</property>
<property name="pane_border">1</property> <property name="permission">none</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"> <object class="sizeritem" expanded="1">
<property name="border">5</property> <property name="border">5</property>
<property name="flag">wxBOTTOM|wxRIGHT|wxLEFT|wxEXPAND</property> <property name="flag">wxEXPAND | wxALL</property>
<property name="proportion">1</property> <property name="proportion">1</property>
<object class="wxTextCtrl" expanded="1"> <object class="wxPanel" expanded="1">
<property name="BottomDockable">1</property> <property name="BottomDockable">1</property>
<property name="LeftDockable">1</property> <property name="LeftDockable">1</property>
<property name="RightDockable">1</property> <property name="RightDockable">1</property>
@ -1358,12 +1284,11 @@
<property name="max_size"></property> <property name="max_size"></property>
<property name="maximize_button">0</property> <property name="maximize_button">0</property>
<property name="maximum_size"></property> <property name="maximum_size"></property>
<property name="maxlength"></property>
<property name="min_size"></property> <property name="min_size"></property>
<property name="minimize_button">0</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="moveable">1</property>
<property name="name">m_messagesBox</property> <property name="name">m_messagesPanel</property>
<property name="pane_border">1</property> <property name="pane_border">1</property>
<property name="pane_position"></property> <property name="pane_position"></property>
<property name="pane_size"></property> <property name="pane_size"></property>
@ -1373,18 +1298,12 @@
<property name="resize">Resizable</property> <property name="resize">Resizable</property>
<property name="show">1</property> <property name="show">1</property>
<property name="size"></property> <property name="size"></property>
<property name="style">wxTE_MULTILINE|wxTE_READONLY</property> <property name="subclass">WX_HTML_REPORT_PANEL; wx_html_report_panel.h</property>
<property name="subclass"></property>
<property name="toolbar_pane">0</property> <property name="toolbar_pane">0</property>
<property name="tooltip"></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_extra_style"></property>
<property name="window_name"></property> <property name="window_name"></property>
<property name="window_style"></property> <property name="window_style">wxTAB_TRAVERSAL</property>
<event name="OnChar"></event> <event name="OnChar"></event>
<event name="OnEnterWindow"></event> <event name="OnEnterWindow"></event>
<event name="OnEraseBackground"></event> <event name="OnEraseBackground"></event>
@ -1407,14 +1326,12 @@
<event name="OnRightUp"></event> <event name="OnRightUp"></event>
<event name="OnSetFocus"></event> <event name="OnSetFocus"></event>
<event name="OnSize"></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> <event name="OnUpdateUI"></event>
</object> </object>
</object> </object>
</object> </object>
</object> </object>
</object> </object>
</object>
</object>
</wxFormBuilder_Project> </wxFormBuilder_Project>

View File

@ -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/ // http://www.wxformbuilder.org/
// //
// PLEASE DO "NOT" EDIT THIS FILE! // PLEASE DO "NOT" EDIT THIS FILE!
@ -12,6 +12,7 @@
#include <wx/xrc/xmlres.h> #include <wx/xrc/xmlres.h>
#include <wx/intl.h> #include <wx/intl.h>
class DIALOG_SHIM; class DIALOG_SHIM;
class WX_HTML_REPORT_PANEL;
#include "dialog_shim.h" #include "dialog_shim.h"
#include <wx/string.h> #include <wx/string.h>
@ -26,6 +27,7 @@ class DIALOG_SHIM;
#include <wx/statbox.h> #include <wx/statbox.h>
#include <wx/radiobox.h> #include <wx/radiobox.h>
#include <wx/checkbox.h> #include <wx/checkbox.h>
#include <wx/panel.h>
#include <wx/dialog.h> #include <wx/dialog.h>
/////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////
@ -57,8 +59,7 @@ class DIALOG_SVG_PRINT_base : public DIALOG_SHIM
wxRadioBox* m_rbFileOpt; wxRadioBox* m_rbFileOpt;
wxButton* m_buttonCreateFile; wxButton* m_buttonCreateFile;
wxButton* m_buttonQuit; wxButton* m_buttonQuit;
wxStaticText* m_staticText2; WX_HTML_REPORT_PANEL* m_messagesPanel;
wxTextCtrl* m_messagesBox;
// Virtual event handlers, overide them in your derived class // Virtual event handlers, overide them in your derived class
virtual void OnCloseWindow( wxCloseEvent& event ) { event.Skip(); } virtual void OnCloseWindow( wxCloseEvent& event ) { event.Skip(); }

View File

@ -5,6 +5,8 @@
// PLEASE DO "NOT" EDIT THIS FILE! // PLEASE DO "NOT" EDIT THIS FILE!
/////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////
#include "wx_html_report_panel.h"
#include "dialog_gen_module_position_file_base.h" #include "dialog_gen_module_position_file_base.h"
/////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////
@ -29,6 +31,7 @@ DIALOG_GEN_MODULE_POSITION_BASE::DIALOG_GEN_MODULE_POSITION_BASE( wxWindow* pare
bSizerdirBrowse = new wxBoxSizer( wxHORIZONTAL ); bSizerdirBrowse = new wxBoxSizer( wxHORIZONTAL );
m_outputDirectoryName = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); 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->SetToolTip( _("Target directory for plot files. Can be absolute or relative to the board file location.") );
m_outputDirectoryName->SetMinSize( wxSize( 350,-1 ) ); m_outputDirectoryName->SetMinSize( wxSize( 350,-1 ) );
@ -74,16 +77,16 @@ DIALOG_GEN_MODULE_POSITION_BASE::DIALOG_GEN_MODULE_POSITION_BASE( wxWindow* pare
m_MainSizer->Add( bSizerOptions, 0, wxEXPAND|wxTOP|wxBOTTOM, 5 ); m_MainSizer->Add( bSizerOptions, 0, wxEXPAND|wxTOP|wxBOTTOM, 5 );
wxStaticBoxSizer* sbSizerMsg; wxBoxSizer* bSizer7;
sbSizerMsg = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Messages:") ), wxVERTICAL ); bSizer7 = new wxBoxSizer( wxVERTICAL );
m_messagesBox = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize( -1,-1 ), wxTE_MULTILINE|wxTE_READONLY ); m_messagesPanel = new WX_HTML_REPORT_PANEL( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
m_messagesBox->SetMinSize( wxSize( -1,150 ) ); 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_sdbSizerButtons = new wxStdDialogButtonSizer();
m_sdbSizerButtonsOK = new wxButton( this, wxID_OK ); m_sdbSizerButtonsOK = new wxButton( this, wxID_OK );
@ -101,6 +104,8 @@ DIALOG_GEN_MODULE_POSITION_BASE::DIALOG_GEN_MODULE_POSITION_BASE( wxWindow* pare
this->Centre( wxBOTH ); this->Centre( wxBOTH );
// Connect Events // 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_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 ); 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_GEN_MODULE_POSITION_BASE( wxWindow* pare
DIALOG_GEN_MODULE_POSITION_BASE::~DIALOG_GEN_MODULE_POSITION_BASE() DIALOG_GEN_MODULE_POSITION_BASE::~DIALOG_GEN_MODULE_POSITION_BASE()
{ {
// Disconnect Events // 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_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 ); m_sdbSizerButtonsOK->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_GEN_MODULE_POSITION_BASE::OnOKButton ), NULL, this );

View File

@ -47,7 +47,7 @@
<property name="size">510,351</property> <property name="size">510,351</property>
<property name="style">wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER</property> <property name="style">wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER</property>
<property name="subclass">DIALOG_SHIM; dialog_shim.h</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="tooltip"></property>
<property name="window_extra_style"></property> <property name="window_extra_style"></property>
<property name="window_name"></property> <property name="window_name"></property>
@ -61,13 +61,13 @@
<event name="OnAuiPaneRestore"></event> <event name="OnAuiPaneRestore"></event>
<event name="OnAuiRender"></event> <event name="OnAuiRender"></event>
<event name="OnChar"></event> <event name="OnChar"></event>
<event name="OnClose"></event> <event name="OnClose">OnClose</event>
<event name="OnEnterWindow"></event> <event name="OnEnterWindow"></event>
<event name="OnEraseBackground"></event> <event name="OnEraseBackground"></event>
<event name="OnHibernate"></event> <event name="OnHibernate"></event>
<event name="OnIconize"></event> <event name="OnIconize"></event>
<event name="OnIdle"></event> <event name="OnIdle"></event>
<event name="OnInitDialog"></event> <event name="OnInitDialog">OnInitDialog</event>
<event name="OnKeyDown"></event> <event name="OnKeyDown"></event>
<event name="OnKeyUp"></event> <event name="OnKeyUp"></event>
<event name="OnKillFocus"></event> <event name="OnKillFocus"></event>
@ -238,7 +238,7 @@
<property name="max_size"></property> <property name="max_size"></property>
<property name="maximize_button">0</property> <property name="maximize_button">0</property>
<property name="maximum_size"></property> <property name="maximum_size"></property>
<property name="maxlength"></property> <property name="maxlength">0</property>
<property name="min_size"></property> <property name="min_size"></property>
<property name="minimize_button">0</property> <property name="minimize_button">0</property>
<property name="minimum_size">350,-1</property> <property name="minimum_size">350,-1</property>
@ -673,19 +673,16 @@
<property name="border">5</property> <property name="border">5</property>
<property name="flag">wxEXPAND</property> <property name="flag">wxEXPAND</property>
<property name="proportion">1</property> <property name="proportion">1</property>
<object class="wxStaticBoxSizer" expanded="1"> <object class="wxBoxSizer" expanded="1">
<property name="id">wxID_ANY</property>
<property name="label">Messages:</property>
<property name="minimum_size"></property> <property name="minimum_size"></property>
<property name="name">sbSizerMsg</property> <property name="name">bSizer7</property>
<property name="orient">wxVERTICAL</property> <property name="orient">wxVERTICAL</property>
<property name="permission">none</property> <property name="permission">none</property>
<event name="OnUpdateUI"></event> <object class="sizeritem" expanded="1">
<object class="sizeritem" expanded="0">
<property name="border">5</property> <property name="border">5</property>
<property name="flag">wxEXPAND</property> <property name="flag">wxEXPAND | wxALL</property>
<property name="proportion">1</property> <property name="proportion">1</property>
<object class="wxTextCtrl" expanded="0"> <object class="wxPanel" expanded="1">
<property name="BottomDockable">1</property> <property name="BottomDockable">1</property>
<property name="LeftDockable">1</property> <property name="LeftDockable">1</property>
<property name="RightDockable">1</property> <property name="RightDockable">1</property>
@ -716,12 +713,11 @@
<property name="max_size"></property> <property name="max_size"></property>
<property name="maximize_button">0</property> <property name="maximize_button">0</property>
<property name="maximum_size"></property> <property name="maximum_size"></property>
<property name="maxlength"></property>
<property name="min_size"></property> <property name="min_size"></property>
<property name="minimize_button">0</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="moveable">1</property>
<property name="name">m_messagesBox</property> <property name="name">m_messagesPanel</property>
<property name="pane_border">1</property> <property name="pane_border">1</property>
<property name="pane_position"></property> <property name="pane_position"></property>
<property name="pane_size"></property> <property name="pane_size"></property>
@ -730,19 +726,13 @@
<property name="pos"></property> <property name="pos"></property>
<property name="resize">Resizable</property> <property name="resize">Resizable</property>
<property name="show">1</property> <property name="show">1</property>
<property name="size">-1,-1</property> <property name="size"></property>
<property name="style">wxTE_MULTILINE|wxTE_READONLY</property> <property name="subclass">WX_HTML_REPORT_PANEL; wx_html_report_panel.h</property>
<property name="subclass"></property>
<property name="toolbar_pane">0</property> <property name="toolbar_pane">0</property>
<property name="tooltip"></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_extra_style"></property>
<property name="window_name"></property> <property name="window_name"></property>
<property name="window_style"></property> <property name="window_style">wxTAB_TRAVERSAL</property>
<event name="OnChar"></event> <event name="OnChar"></event>
<event name="OnEnterWindow"></event> <event name="OnEnterWindow"></event>
<event name="OnEraseBackground"></event> <event name="OnEraseBackground"></event>
@ -765,10 +755,6 @@
<event name="OnRightUp"></event> <event name="OnRightUp"></event>
<event name="OnSetFocus"></event> <event name="OnSetFocus"></event>
<event name="OnSize"></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> <event name="OnUpdateUI"></event>
</object> </object>
</object> </object>

View File

@ -12,6 +12,7 @@
#include <wx/xrc/xmlres.h> #include <wx/xrc/xmlres.h>
#include <wx/intl.h> #include <wx/intl.h>
class DIALOG_SHIM; class DIALOG_SHIM;
class WX_HTML_REPORT_PANEL;
#include "dialog_shim.h" #include "dialog_shim.h"
#include <wx/string.h> #include <wx/string.h>
@ -24,7 +25,7 @@ class DIALOG_SHIM;
#include <wx/button.h> #include <wx/button.h>
#include <wx/sizer.h> #include <wx/sizer.h>
#include <wx/radiobox.h> #include <wx/radiobox.h>
#include <wx/statbox.h> #include <wx/panel.h>
#include <wx/dialog.h> #include <wx/dialog.h>
/////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////
@ -44,19 +45,21 @@ class DIALOG_GEN_MODULE_POSITION_BASE : public DIALOG_SHIM
wxRadioBox* m_radioBoxUnits; wxRadioBox* m_radioBoxUnits;
wxRadioBox* m_radioBoxFilesCount; wxRadioBox* m_radioBoxFilesCount;
wxRadioBox* m_radioBoxForceSmd; wxRadioBox* m_radioBoxForceSmd;
wxTextCtrl* m_messagesBox; WX_HTML_REPORT_PANEL* m_messagesPanel;
wxStdDialogButtonSizer* m_sdbSizerButtons; wxStdDialogButtonSizer* m_sdbSizerButtons;
wxButton* m_sdbSizerButtonsOK; wxButton* m_sdbSizerButtonsOK;
wxButton* m_sdbSizerButtonsCancel; wxButton* m_sdbSizerButtonsCancel;
// Virtual event handlers, overide them in your derived class // 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 OnOutputDirectoryBrowseClicked( wxCommandEvent& event ) { event.Skip(); }
virtual void OnOKButton( wxCommandEvent& event ) { event.Skip(); } virtual void OnOKButton( wxCommandEvent& event ) { event.Skip(); }
public: 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(); ~DIALOG_GEN_MODULE_POSITION_BASE();
}; };

View File

@ -47,6 +47,7 @@
#include <wildcards_and_files_ext.h> #include <wildcards_and_files_ext.h>
#include <dialog_netlist.h> #include <dialog_netlist.h>
#include <wx_html_report_panel.h>
#define NETLIST_SILENTMODE_KEY wxT("SilentMode") #define NETLIST_SILENTMODE_KEY wxT("SilentMode")
#define NETLIST_FULLMESSAGES_KEY wxT("NetlistReportAllMsg") #define NETLIST_FULLMESSAGES_KEY wxT("NetlistReportAllMsg")
@ -158,21 +159,20 @@ void DIALOG_NETLIST::OnReadNetlistFileClick( wxCommandEvent& event )
"sure you want to read the netlist?" ) ) ) "sure you want to read the netlist?" ) ) )
return; return;
wxBusyCursor busy;
m_MessageWindow->Clear(); m_MessageWindow->Clear();
REPORTER& reporter = m_MessageWindow->Reporter();
wxBusyCursor busy;
msg.Printf( _( "Reading netlist file \"%s\".\n" ), GetChars( netlistFileName ) ); msg.Printf( _( "Reading netlist file \"%s\".\n" ), GetChars( netlistFileName ) );
m_MessageWindow->AppendText( msg ); reporter.Report( msg, REPORTER::RPT_INFO );
if( m_Select_By_Timestamp->GetSelection() == 1 ) if( m_Select_By_Timestamp->GetSelection() == 1 )
msg = _( "Using time stamps to match components and footprints.\n" ); msg = _( "Using time stamps to match components and footprints.\n" );
else else
msg = _( "Using references to match components and footprints.\n" ); msg = _( "Using references to match components and footprints.\n" );
m_MessageWindow->AppendText( msg ); reporter.Report( msg, REPORTER::RPT_INFO );
WX_TEXT_CTRL_REPORTER reporter( m_MessageWindow );
reporter.SetReportAll( m_reportAll );
m_parent->ReadPcbNetlist( netlistFileName, wxEmptyString, &reporter, m_parent->ReadPcbNetlist( netlistFileName, wxEmptyString, &reporter,
m_ChangeExistingFootprintCtrl->GetSelection() == 1, m_ChangeExistingFootprintCtrl->GetSelection() == 1,
@ -357,13 +357,13 @@ void DIALOG_NETLIST::OnSaveMessagesToFile( wxCommandEvent& aEvent )
return; return;
} }
f.Write( m_MessageWindow->GetValue() ); //f.Write( m_MessageWindow->GetValue() );
} }
void DIALOG_NETLIST::OnUpdateUISaveMessagesToFile( wxUpdateUIEvent& aEvent ) void DIALOG_NETLIST::OnUpdateUISaveMessagesToFile( wxUpdateUIEvent& aEvent )
{ {
aEvent.Enable( !m_MessageWindow->IsEmpty() ); //aEvent.Enable( !m_MessageWindow->IsEmpty() );
} }
@ -409,19 +409,6 @@ bool DIALOG_NETLIST::verifyFootprints( const wxString& aNetlistFilename,
return false; 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(); BOARD* pcb = m_parent->GetBoard();
// Search for duplicate footprints. // Search for duplicate footprints.

View File

@ -5,6 +5,8 @@
// PLEASE DO "NOT" EDIT THIS FILE! // PLEASE DO "NOT" EDIT THIS FILE!
/////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////
#include "wx_html_report_panel.h"
#include "dialog_netlist_fbp.h" #include "dialog_netlist_fbp.h"
/////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////
@ -159,14 +161,10 @@ DIALOG_NETLIST_FBP::DIALOG_NETLIST_FBP( wxWindow* parent, wxWindowID id, const w
bLowerSizer->Add( bSizerNetlistFilename, 0, wxEXPAND, 5 ); bLowerSizer->Add( bSizerNetlistFilename, 0, wxEXPAND, 5 );
m_staticText1 = new wxStaticText( this, wxID_ANY, _("Messages:"), wxDefaultPosition, wxDefaultSize, 0 ); m_MessageWindow = new WX_HTML_REPORT_PANEL( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
m_staticText1->Wrap( -1 ); m_MessageWindow->SetMinSize( wxSize( -300,150 ) );
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 ); bLowerSizer->Add( m_MessageWindow, 1, wxEXPAND | wxALL, 5 );
m_MessageWindow->SetMinSize( wxSize( 300,150 ) );
bLowerSizer->Add( m_MessageWindow, 1, wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 5 );
bMainSizer->Add( bLowerSizer, 1, wxBOTTOM|wxEXPAND|wxLEFT|wxRIGHT, 5 ); bMainSizer->Add( bLowerSizer, 1, wxBOTTOM|wxEXPAND|wxLEFT|wxRIGHT, 5 );

View File

@ -1770,92 +1770,9 @@
</object> </object>
<object class="sizeritem" expanded="1"> <object class="sizeritem" expanded="1">
<property name="border">5</property> <property name="border">5</property>
<property name="flag">wxTOP|wxRIGHT|wxLEFT</property> <property name="flag">wxEXPAND | wxALL</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="proportion">1</property> <property name="proportion">1</property>
<object class="wxTextCtrl" expanded="1"> <object class="wxPanel" expanded="1">
<property name="BottomDockable">1</property> <property name="BottomDockable">1</property>
<property name="LeftDockable">1</property> <property name="LeftDockable">1</property>
<property name="RightDockable">1</property> <property name="RightDockable">1</property>
@ -1886,10 +1803,9 @@
<property name="max_size"></property> <property name="max_size"></property>
<property name="maximize_button">0</property> <property name="maximize_button">0</property>
<property name="maximum_size"></property> <property name="maximum_size"></property>
<property name="maxlength"></property>
<property name="min_size"></property> <property name="min_size"></property>
<property name="minimize_button">0</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="moveable">1</property>
<property name="name">m_MessageWindow</property> <property name="name">m_MessageWindow</property>
<property name="pane_border">1</property> <property name="pane_border">1</property>
@ -1901,18 +1817,12 @@
<property name="resize">Resizable</property> <property name="resize">Resizable</property>
<property name="show">1</property> <property name="show">1</property>
<property name="size"></property> <property name="size"></property>
<property name="style">wxTE_CHARWRAP|wxTE_MULTILINE|wxTE_READONLY|wxTE_WORDWRAP</property> <property name="subclass">WX_HTML_REPORT_PANEL; wx_html_report_panel.h</property>
<property name="subclass"></property>
<property name="toolbar_pane">0</property> <property name="toolbar_pane">0</property>
<property name="tooltip"></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_extra_style"></property>
<property name="window_name"></property> <property name="window_name"></property>
<property name="window_style"></property> <property name="window_style">wxTAB_TRAVERSAL</property>
<event name="OnChar"></event> <event name="OnChar"></event>
<event name="OnEnterWindow"></event> <event name="OnEnterWindow"></event>
<event name="OnEraseBackground"></event> <event name="OnEraseBackground"></event>
@ -1935,10 +1845,6 @@
<event name="OnRightUp"></event> <event name="OnRightUp"></event>
<event name="OnSetFocus"></event> <event name="OnSetFocus"></event>
<event name="OnSize"></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> <event name="OnUpdateUI"></event>
</object> </object>
</object> </object>

View File

@ -12,6 +12,7 @@
#include <wx/xrc/xmlres.h> #include <wx/xrc/xmlres.h>
#include <wx/intl.h> #include <wx/intl.h>
class DIALOG_SHIM; class DIALOG_SHIM;
class WX_HTML_REPORT_PANEL;
#include "dialog_shim.h" #include "dialog_shim.h"
#include <wx/string.h> #include <wx/string.h>
@ -26,6 +27,7 @@ class DIALOG_SHIM;
#include <wx/checkbox.h> #include <wx/checkbox.h>
#include <wx/stattext.h> #include <wx/stattext.h>
#include <wx/textctrl.h> #include <wx/textctrl.h>
#include <wx/panel.h>
#include <wx/dialog.h> #include <wx/dialog.h>
/////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////
@ -64,8 +66,7 @@ class DIALOG_NETLIST_FBP : public DIALOG_SHIM
wxStaticText* m_staticTextNetfilename; wxStaticText* m_staticTextNetfilename;
wxTextCtrl* m_NetlistFilenameCtrl; wxTextCtrl* m_NetlistFilenameCtrl;
wxButton* m_buttonBrowse; wxButton* m_buttonBrowse;
wxStaticText* m_staticText1; WX_HTML_REPORT_PANEL* m_MessageWindow;
wxTextCtrl* m_MessageWindow;
// Virtual event handlers, overide them in your derived class // Virtual event handlers, overide them in your derived class
virtual void OnReadNetlistFileClick( wxCommandEvent& event ) { event.Skip(); } virtual void OnReadNetlistFileClick( wxCommandEvent& event ) { event.Skip(); }

View File

@ -38,7 +38,7 @@
#include <class_board.h> #include <class_board.h>
#include <wx/ffile.h> #include <wx/ffile.h>
#include <dialog_plot.h> #include <dialog_plot.h>
#include <wx_html_report_panel.h>
DIALOG_PLOT::DIALOG_PLOT( PCB_EDIT_FRAME* aParent ) : DIALOG_PLOT::DIALOG_PLOT( PCB_EDIT_FRAME* aParent ) :
DIALOG_PLOT_BASE( aParent ), m_parent( aParent ), DIALOG_PLOT_BASE( aParent ), m_parent( aParent ),
@ -562,6 +562,8 @@ static bool setInt( int* aResult, int aValue, int aMin, int aMax )
void DIALOG_PLOT::applyPlotSettings() void DIALOG_PLOT::applyPlotSettings()
{ {
REPORTER& reporter = m_messagesPanel->Reporter();
PCB_PLOT_PARAMS tempOptions; PCB_PLOT_PARAMS tempOptions;
tempOptions.SetExcludeEdgeLayer( m_excludeEdgeLayerOpt->GetValue() ); tempOptions.SetExcludeEdgeLayer( m_excludeEdgeLayerOpt->GetValue() );
@ -590,8 +592,8 @@ void DIALOG_PLOT::applyPlotSettings()
{ {
msg = StringFromValue( g_UserUnit, tempOptions.GetHPGLPenDiameter() * IU_PER_MILS ); msg = StringFromValue( g_UserUnit, tempOptions.GetHPGLPenDiameter() * IU_PER_MILS );
m_HPGLPenSizeOpt->SetValue( msg ); m_HPGLPenSizeOpt->SetValue( msg );
msg.Printf( _( "HPGL pen size constrained!\n" ) ); msg.Printf( _( "HPGL pen size constrained." ) );
m_messagesBox->AppendText( msg ); reporter.Report( msg, REPORTER::RPT_INFO );
} }
// Read HPGL pen overlay (this param is stored in mils) // Read HPGL pen overlay (this param is stored in mils)
@ -603,8 +605,8 @@ void DIALOG_PLOT::applyPlotSettings()
msg = StringFromValue( g_UserUnit, msg = StringFromValue( g_UserUnit,
tempOptions.GetHPGLPenOverlay() * IU_PER_MILS ); tempOptions.GetHPGLPenOverlay() * IU_PER_MILS );
m_HPGLPenOverlayOpt->SetValue( msg ); m_HPGLPenOverlayOpt->SetValue( msg );
msg.Printf( _( "HPGL pen overlay constrained!\n" ) ); msg.Printf( _( "HPGL pen overlay constrained." ) );
m_messagesBox->AppendText( msg ); reporter.Report( msg, REPORTER::RPT_INFO );
} }
// Default linewidth // Default linewidth
@ -615,8 +617,8 @@ void DIALOG_PLOT::applyPlotSettings()
{ {
msg = StringFromValue( g_UserUnit, tempOptions.GetLineWidth() ); msg = StringFromValue( g_UserUnit, tempOptions.GetLineWidth() );
m_linesWidth->SetValue( msg ); m_linesWidth->SetValue( msg );
msg.Printf( _( "Default line width constrained!\n" ) ); msg.Printf( _( "Default line width constrained." ) );
m_messagesBox->AppendText( msg ); reporter.Report( msg, REPORTER::RPT_INFO );
} }
// X scale // X scale
@ -628,8 +630,8 @@ void DIALOG_PLOT::applyPlotSettings()
{ {
msg.Printf( wxT( "%f" ), m_XScaleAdjust ); msg.Printf( wxT( "%f" ), m_XScaleAdjust );
m_fineAdjustXscaleOpt->SetValue( msg ); m_fineAdjustXscaleOpt->SetValue( msg );
msg.Printf( _( "X scale constrained!\n" ) ); msg.Printf( _( "X scale constrained." ) );
m_messagesBox->AppendText( msg ); reporter.Report( msg, REPORTER::RPT_INFO );
} }
ConfigBaseWriteDouble( m_config, OPTKEY_PLOT_X_FINESCALE_ADJ, m_XScaleAdjust ); ConfigBaseWriteDouble( m_config, OPTKEY_PLOT_X_FINESCALE_ADJ, m_XScaleAdjust );
@ -642,8 +644,8 @@ void DIALOG_PLOT::applyPlotSettings()
{ {
msg.Printf( wxT( "%f" ), m_YScaleAdjust ); msg.Printf( wxT( "%f" ), m_YScaleAdjust );
m_fineAdjustYscaleOpt->SetValue( msg ); m_fineAdjustYscaleOpt->SetValue( msg );
msg.Printf( _( "Y scale constrained!\n" ) ); msg.Printf( _( "Y scale constrained." ) );
m_messagesBox->AppendText( msg ); reporter.Report( msg, REPORTER::RPT_INFO );
} }
ConfigBaseWriteDouble( m_config, OPTKEY_PLOT_Y_FINESCALE_ADJ, m_YScaleAdjust ); ConfigBaseWriteDouble( m_config, OPTKEY_PLOT_Y_FINESCALE_ADJ, m_YScaleAdjust );
@ -656,13 +658,13 @@ void DIALOG_PLOT::applyPlotSettings()
{ {
msg = StringFromValue( g_UserUnit, m_PSWidthAdjust ); msg = StringFromValue( g_UserUnit, m_PSWidthAdjust );
m_PSFineAdjustWidthOpt->SetValue( msg ); m_PSFineAdjustWidthOpt->SetValue( msg );
msg.Printf( _( "Width correction constrained!\n" msg.Printf( _( "Width correction constrained. "
"The reasonable width correction value must be in a range of\n" "The reasonable width correction value must be in a range of "
" [%+f; %+f] (%s) for current design rules!\n" ), " [%+f; %+f] (%s) for current design rules. " ),
To_User_Unit( g_UserUnit, m_widthAdjustMinValue ), To_User_Unit( g_UserUnit, m_widthAdjustMinValue ),
To_User_Unit( g_UserUnit, m_widthAdjustMaxValue ), To_User_Unit( g_UserUnit, m_widthAdjustMaxValue ),
( g_UserUnit == INCHES ) ? wxT( "\"" ) : wxT( "mm" ) ); ( g_UserUnit == INCHES ) ? wxT( "\"" ) : wxT( "mm" ) );
m_messagesBox->AppendText( msg ); reporter.Report( msg, REPORTER::RPT_WARNING );
} }
// Store m_PSWidthAdjust in mm in user config // Store m_PSWidthAdjust in mm in user config
@ -710,7 +712,7 @@ void DIALOG_PLOT::Plot( wxCommandEvent& event )
// absolute form). Bail if it fails // absolute form). Bail if it fails
wxFileName outputDir = wxFileName::DirName( m_plotOpts.GetOutputDirectory() ); wxFileName outputDir = wxFileName::DirName( m_plotOpts.GetOutputDirectory() );
wxString boardFilename = m_parent->GetBoard()->GetFileName(); wxString boardFilename = m_parent->GetBoard()->GetFileName();
WX_TEXT_CTRL_REPORTER reporter( m_messagesBox ); REPORTER& reporter = m_messagesPanel->Reporter();
if( !EnsureFileDirectoryExists( &outputDir, boardFilename, &reporter ) ) if( !EnsureFileDirectoryExists( &outputDir, boardFilename, &reporter ) )
{ {
@ -809,13 +811,14 @@ void DIALOG_PLOT::Plot( wxCommandEvent& event )
plotter->EndPlot(); plotter->EndPlot();
delete plotter; delete plotter;
msg.Printf( _( "Plot file <%s> created" ), GetChars( fn.GetFullPath() ) ); msg.Printf( _( "Plot file '%s' created." ), GetChars( fn.GetFullPath() ) );
reporter.Report( msg, REPORTER::RPT_ACTION );
} }
else else
msg.Printf( _( "Unable to create <%s>" ), GetChars( fn.GetFullPath() ) ); {
msg.Printf( _( "Unable to create file '%s'." ), GetChars( fn.GetFullPath() ) );
msg << wxT( "\n" ); reporter.Report( msg, REPORTER::RPT_ERROR );
m_messagesBox->AppendText( msg ); }
} }
// If no layer selected, we have nothing plotted. // If no layer selected, we have nothing plotted.

View File

@ -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/ // http://www.wxformbuilder.org/
// //
// PLEASE DO "NOT" EDIT THIS FILE! // PLEASE DO "NOT" EDIT THIS FILE!
/////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////
#include "wx_html_report_panel.h"
#include "dialog_plot_base.h" #include "dialog_plot_base.h"
/////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////
@ -363,13 +365,13 @@ DIALOG_PLOT_BASE::DIALOG_PLOT_BASE( wxWindow* parent, wxWindowID id, const wxStr
bSizer12->Add( bUpperSizer, 0, wxEXPAND, 5 ); bSizer12->Add( bUpperSizer, 0, wxEXPAND, 5 );
wxStaticBoxSizer* sbSizerMsg; wxBoxSizer* sbSizerMsg;
sbSizerMsg = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Messages:") ), wxVERTICAL ); sbSizerMsg = new wxBoxSizer( wxVERTICAL );
m_messagesBox = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_MULTILINE|wxTE_READONLY ); m_messagesPanel = new WX_HTML_REPORT_PANEL( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
m_messagesBox->SetMinSize( wxSize( -1,150 ) ); 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 ); bSizer12->Add( sbSizerMsg, 1, wxEXPAND, 5 );
@ -390,6 +392,12 @@ DIALOG_PLOT_BASE::DIALOG_PLOT_BASE( wxWindow* parent, wxWindowID id, const wxStr
bSizer12->Add( bSizerButtons, 0, wxALIGN_RIGHT|wxRIGHT|wxLEFT, 5 ); 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 ); m_MainSizer->Add( bSizer12, 1, wxALL|wxEXPAND, 5 );

View File

@ -88,16 +88,16 @@
<event name="OnSetFocus"></event> <event name="OnSetFocus"></event>
<event name="OnSize"></event> <event name="OnSize"></event>
<event name="OnUpdateUI"></event> <event name="OnUpdateUI"></event>
<object class="wxBoxSizer" expanded="0"> <object class="wxBoxSizer" expanded="1">
<property name="minimum_size"></property> <property name="minimum_size"></property>
<property name="name">m_MainSizer</property> <property name="name">m_MainSizer</property>
<property name="orient">wxHORIZONTAL</property> <property name="orient">wxHORIZONTAL</property>
<property name="permission">protected</property> <property name="permission">protected</property>
<object class="sizeritem" expanded="0"> <object class="sizeritem" expanded="1">
<property name="border">5</property> <property name="border">5</property>
<property name="flag">wxALL|wxEXPAND</property> <property name="flag">wxALL|wxEXPAND</property>
<property name="proportion">1</property> <property name="proportion">1</property>
<object class="wxBoxSizer" expanded="0"> <object class="wxBoxSizer" expanded="1">
<property name="minimum_size"></property> <property name="minimum_size"></property>
<property name="name">bSizer12</property> <property name="name">bSizer12</property>
<property name="orient">wxVERTICAL</property> <property name="orient">wxVERTICAL</property>
@ -4124,23 +4124,20 @@
</object> </object>
</object> </object>
</object> </object>
<object class="sizeritem" expanded="0"> <object class="sizeritem" expanded="1">
<property name="border">5</property> <property name="border">5</property>
<property name="flag">wxEXPAND</property> <property name="flag">wxEXPAND</property>
<property name="proportion">1</property> <property name="proportion">1</property>
<object class="wxStaticBoxSizer" expanded="0"> <object class="wxBoxSizer" expanded="1">
<property name="id">wxID_ANY</property>
<property name="label">Messages:</property>
<property name="minimum_size"></property> <property name="minimum_size"></property>
<property name="name">sbSizerMsg</property> <property name="name">sbSizerMsg</property>
<property name="orient">wxVERTICAL</property> <property name="orient">wxVERTICAL</property>
<property name="permission">none</property> <property name="permission">none</property>
<event name="OnUpdateUI"></event> <object class="sizeritem" expanded="1">
<object class="sizeritem" expanded="0">
<property name="border">5</property> <property name="border">5</property>
<property name="flag">wxEXPAND</property> <property name="flag">wxEXPAND | wxALL</property>
<property name="proportion">1</property> <property name="proportion">1</property>
<object class="wxTextCtrl" expanded="0"> <object class="wxPanel" expanded="1">
<property name="BottomDockable">1</property> <property name="BottomDockable">1</property>
<property name="LeftDockable">1</property> <property name="LeftDockable">1</property>
<property name="RightDockable">1</property> <property name="RightDockable">1</property>
@ -4171,12 +4168,11 @@
<property name="max_size"></property> <property name="max_size"></property>
<property name="maximize_button">0</property> <property name="maximize_button">0</property>
<property name="maximum_size"></property> <property name="maximum_size"></property>
<property name="maxlength"></property>
<property name="min_size"></property> <property name="min_size"></property>
<property name="minimize_button">0</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="moveable">1</property>
<property name="name">m_messagesBox</property> <property name="name">m_messagesPanel</property>
<property name="pane_border">1</property> <property name="pane_border">1</property>
<property name="pane_position"></property> <property name="pane_position"></property>
<property name="pane_size"></property> <property name="pane_size"></property>
@ -4186,18 +4182,12 @@
<property name="resize">Resizable</property> <property name="resize">Resizable</property>
<property name="show">1</property> <property name="show">1</property>
<property name="size"></property> <property name="size"></property>
<property name="style">wxTE_MULTILINE|wxTE_READONLY</property> <property name="subclass">WX_HTML_REPORT_PANEL; wx_html_report_panel.h</property>
<property name="subclass"></property>
<property name="toolbar_pane">0</property> <property name="toolbar_pane">0</property>
<property name="tooltip"></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_extra_style"></property>
<property name="window_name"></property> <property name="window_name"></property>
<property name="window_style"></property> <property name="window_style">wxTAB_TRAVERSAL</property>
<event name="OnChar"></event> <event name="OnChar"></event>
<event name="OnEnterWindow"></event> <event name="OnEnterWindow"></event>
<event name="OnEraseBackground"></event> <event name="OnEraseBackground"></event>
@ -4220,20 +4210,16 @@
<event name="OnRightUp"></event> <event name="OnRightUp"></event>
<event name="OnSetFocus"></event> <event name="OnSetFocus"></event>
<event name="OnSize"></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> <event name="OnUpdateUI"></event>
</object> </object>
</object> </object>
</object> </object>
</object> </object>
<object class="sizeritem" expanded="0"> <object class="sizeritem" expanded="1">
<property name="border">5</property> <property name="border">5</property>
<property name="flag">wxALIGN_RIGHT|wxRIGHT|wxLEFT</property> <property name="flag">wxALIGN_RIGHT|wxRIGHT|wxLEFT</property>
<property name="proportion">0</property> <property name="proportion">0</property>
<object class="wxBoxSizer" expanded="0"> <object class="wxBoxSizer" expanded="1">
<property name="minimum_size"></property> <property name="minimum_size"></property>
<property name="name">bSizerButtons</property> <property name="name">bSizerButtons</property>
<property name="orient">wxHORIZONTAL</property> <property name="orient">wxHORIZONTAL</property>
@ -4504,6 +4490,17 @@
</object> </object>
</object> </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> </object>
</object> </object>

View File

@ -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/ // http://www.wxformbuilder.org/
// //
// PLEASE DO "NOT" EDIT THIS FILE! // PLEASE DO "NOT" EDIT THIS FILE!
@ -12,6 +12,7 @@
#include <wx/xrc/xmlres.h> #include <wx/xrc/xmlres.h>
#include <wx/intl.h> #include <wx/intl.h>
class DIALOG_SHIM; class DIALOG_SHIM;
class WX_HTML_REPORT_PANEL;
#include "dialog_shim.h" #include "dialog_shim.h"
#include <wx/string.h> #include <wx/string.h>
@ -28,6 +29,7 @@ class DIALOG_SHIM;
#include <wx/statbox.h> #include <wx/statbox.h>
#include <wx/checkbox.h> #include <wx/checkbox.h>
#include <wx/radiobox.h> #include <wx/radiobox.h>
#include <wx/panel.h>
#include <wx/bitmap.h> #include <wx/bitmap.h>
#include <wx/image.h> #include <wx/image.h>
#include <wx/icon.h> #include <wx/icon.h>
@ -106,7 +108,7 @@ class DIALOG_PLOT_BASE : public DIALOG_SHIM
wxStaticText* m_textPSFineAdjustWidth; wxStaticText* m_textPSFineAdjustWidth;
wxTextCtrl* m_PSFineAdjustWidthOpt; wxTextCtrl* m_PSFineAdjustWidthOpt;
wxCheckBox* m_forcePSA4OutputOpt; wxCheckBox* m_forcePSA4OutputOpt;
wxTextCtrl* m_messagesBox; WX_HTML_REPORT_PANEL* m_messagesPanel;
wxButton* m_plotButton; wxButton* m_plotButton;
wxButton* m_buttonDrill; wxButton* m_buttonDrill;
wxButton* m_buttonQuit; wxButton* m_buttonQuit;

View File

@ -50,6 +50,8 @@
#include <pcb_plot_params.h> #include <pcb_plot_params.h>
#include <wildcards_and_files_ext.h> #include <wildcards_and_files_ext.h>
#include <kiface_i.h> #include <kiface_i.h>
#include <wx_html_report_panel.h>
#include <dialog_gen_module_position_file_base.h> #include <dialog_gen_module_position_file_base.h>
/* /*
@ -107,6 +109,7 @@ private:
PCB_EDIT_FRAME* m_parent; PCB_EDIT_FRAME* m_parent;
PCB_PLOT_PARAMS m_plotOpts; PCB_PLOT_PARAMS m_plotOpts;
wxConfigBase* m_config; wxConfigBase* m_config;
REPORTER* m_reporter;
static int m_unitsOpt; static int m_unitsOpt;
static int m_fileOpt; static int m_fileOpt;
@ -137,11 +140,6 @@ private:
{ {
return m_radioBoxForceSmd->GetSelection() == 1; return m_radioBoxForceSmd->GetSelection() == 1;
} }
void AddMessage( const wxString & aMessage )
{
m_messagesBox->AppendText( aMessage );
}
}; };
@ -241,9 +239,10 @@ bool DIALOG_GEN_MODULE_POSITION::CreateFiles()
// absolute form). Bail if it fails // absolute form). Bail if it fails
wxFileName outputDir = wxFileName::DirName( m_plotOpts.GetOutputDirectory() ); wxFileName outputDir = wxFileName::DirName( m_plotOpts.GetOutputDirectory() );
wxString boardFilename = m_parent->GetBoard()->GetFileName(); 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\"." ), msg.Printf( _( "Could not write plot files to folder \"%s\"." ),
GetChars( outputDir.GetPath() ) ); GetChars( outputDir.GetPath() ) );
@ -272,24 +271,27 @@ bool DIALOG_GEN_MODULE_POSITION::CreateFiles()
ForceAllSmd(), side ); ForceAllSmd(), side );
if( fpcount < 0 ) if( fpcount < 0 )
{ {
msg.Printf( _( "Unable to create '%s'" ), GetChars( fn.GetFullPath() ) ); msg.Printf( _( "Unable to create '%s'." ), GetChars( fn.GetFullPath() ) );
wxMessageBox( msg ); wxMessageBox( msg );
AddMessage( msg + wxT("\n") ); m_reporter->Report( msg, REPORTER::RPT_ERROR );
return false; return false;
} }
if( singleFile ) if( singleFile )
msg.Printf( _( "Place file: '%s'\n" ), GetChars( fn.GetFullPath() ) ); msg.Printf( _( "Place file: '%s'." ), GetChars( fn.GetFullPath() ) );
else else
msg.Printf( _( "Front side (top side) place file: '%s'\n" ), msg.Printf( _( "Front side (top side) place file: '%s'." ),
GetChars( fn.GetFullPath() ) ); GetChars( fn.GetFullPath() ) );
m_reporter->Report( msg, REPORTER::RPT_INFO );
AddMessage( msg ); msg.Printf( _( "Component count: %d." ), fpcount );
msg.Printf( _( "Footprint count %d\n" ), fpcount ); m_reporter->Report( msg, REPORTER::RPT_INFO );
AddMessage( msg );
if( singleFile ) if( singleFile )
{
m_reporter->Report( _( "Componment Placement File generation OK." ), REPORTER::RPT_ACTION );
return true; return true;
}
// Create the Back or Bottom side placement file // Create the Back or Bottom side placement file
fullcount = fpcount; fullcount = fpcount;
@ -304,8 +306,8 @@ bool DIALOG_GEN_MODULE_POSITION::CreateFiles()
if( fpcount < 0 ) if( fpcount < 0 )
{ {
msg.Printf( _( "Unable to create '%s'" ), GetChars( fn.GetFullPath() ) ); msg.Printf( _( "Unable to create file '%s'." ), GetChars( fn.GetFullPath() ) );
AddMessage( msg + wxT("\n") ); m_reporter->Report( msg, REPORTER::RPT_ERROR );
wxMessageBox( msg ); wxMessageBox( msg );
return false; return false;
} }
@ -313,19 +315,23 @@ bool DIALOG_GEN_MODULE_POSITION::CreateFiles()
// Display results // Display results
if( !singleFile ) if( !singleFile )
{ {
msg.Printf( _( "Back side (bottom side) place file: '%s'\n" ), GetChars( fn.GetFullPath() ) ); msg.Printf( _( "Back side (bottom side) place file: '%s'." ), GetChars( fn.GetFullPath() ) );
AddMessage( msg ); m_reporter->Report( msg, REPORTER::RPT_INFO );
msg.Printf( _( "Footprint count %d\n" ), fpcount );
AddMessage( msg ); msg.Printf( _( "Component count: %d." ), fpcount );
m_reporter->Report( msg, REPORTER::RPT_INFO );
} }
if( !singleFile ) if( !singleFile )
{ {
fullcount += fpcount; fullcount += fpcount;
msg.Printf( _( "Full footprint count %d\n" ), fullcount ); msg.Printf( _( "Full component count: %d\n" ), fullcount );
AddMessage( msg ); m_reporter->Report( msg, REPORTER::RPT_INFO );
} }
m_reporter->Report( _( "Componment Placement File generation OK." ), REPORTER::RPT_ACTION );
return true; return true;
} }

View File

@ -224,7 +224,7 @@ void PCB_EDIT_FRAME::loadFootprints( NETLIST& aNetlist, REPORTER* aReporter )
{ {
msg.Printf( _( "No footprint defined for component '%s'.\n" ), msg.Printf( _( "No footprint defined for component '%s'.\n" ),
GetChars( component->GetReference() ) ); GetChars( component->GetReference() ) );
aReporter->Report( msg ); aReporter->Report( msg, REPORTER::RPT_ERROR );
} }
continue; continue;
@ -273,11 +273,11 @@ void PCB_EDIT_FRAME::loadFootprints( NETLIST& aNetlist, REPORTER* aReporter )
{ {
if( aReporter ) if( aReporter )
{ {
msg.Printf( _( "*** Warning: Component '%s' footprint ID '%s' is not " msg.Printf( _( "Component '%s' footprint ID '%s' is not "
"valid. ***\n" ), "valid.\n" ),
GetChars( component->GetReference() ), GetChars( component->GetReference() ),
GetChars( component->GetFPID().Format() ) ); GetChars( component->GetFPID().Format() ) );
aReporter->Report( msg ); aReporter->Report( msg, REPORTER::RPT_ERROR );
} }
continue; continue;
@ -295,11 +295,11 @@ void PCB_EDIT_FRAME::loadFootprints( NETLIST& aNetlist, REPORTER* aReporter )
if( aReporter ) if( aReporter )
{ {
wxString msg; wxString msg;
msg.Printf( _( "*** Warning: component '%s' footprint '%s' was not found in " msg.Printf( _( "Component '%s' footprint '%s' was not found in "
"any libraries in the footprint library table. ***\n" ), "any libraries in the footprint library table.\n" ),
GetChars( component->GetReference() ), GetChars( component->GetReference() ),
GetChars( component->GetFPID().GetFootprintName() ) ); GetChars( component->GetFPID().GetFootprintName() ) );
aReporter->Report( msg ); aReporter->Report( msg, REPORTER::RPT_ERROR );
} }
continue; continue;