Decouple PROGRESS_REPORTER interface from implementations.
This commit is contained in:
parent
8ac5e318fb
commit
41619ebbe2
|
@ -229,7 +229,7 @@ set( COMMON_WIDGET_SRCS
|
|||
widgets/msgpanel.cpp
|
||||
widgets/number_badge.cpp
|
||||
widgets/paged_dialog.cpp
|
||||
widgets/progress_reporter.cpp
|
||||
widgets/progress_reporter_base.cpp
|
||||
widgets/split_button.cpp
|
||||
widgets/stepped_slider.cpp
|
||||
widgets/text_ctrl_eval.cpp
|
||||
|
@ -241,6 +241,7 @@ set( COMMON_WIDGET_SRCS
|
|||
widgets/wx_busy_indicator.cpp
|
||||
widgets/wx_ellipsized_static_text.cpp
|
||||
widgets/wx_grid.cpp
|
||||
widgets/wx_progress_reporters.cpp
|
||||
)
|
||||
|
||||
set( COMMON_DRAWING_SHEET_SRCS
|
||||
|
|
|
@ -23,7 +23,7 @@
|
|||
#include <project.h>
|
||||
#include <widgets/footprint_choice.h>
|
||||
#include <widgets/footprint_select_widget.h>
|
||||
#include <widgets/progress_reporter.h>
|
||||
#include <progress_reporter.h>
|
||||
#include <footprint_info_impl.h>
|
||||
#include <wx/wupdlock.h>
|
||||
|
||||
|
|
|
@ -0,0 +1,141 @@
|
|||
/*
|
||||
* This program source code file is part of KiCad, a free EDA CAD application.
|
||||
*
|
||||
* Copyright (C) 2017 CERN
|
||||
* Copyright (C) 2021 KiCad Developers, see AUTHORS.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, you may find one here:
|
||||
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
|
||||
* or you may search the http://www.gnu.org website for the version 2 license,
|
||||
* or you may write to the Free Software Foundation, Inc.,
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
|
||||
*/
|
||||
|
||||
#include <wx/evtloop.h>
|
||||
#include <thread>
|
||||
#include <widgets/progress_reporter_base.h>
|
||||
|
||||
PROGRESS_REPORTER_BASE::PROGRESS_REPORTER_BASE( int aNumPhases ) :
|
||||
PROGRESS_REPORTER(),
|
||||
m_msgChanged( false ),
|
||||
m_phase( 0 ),
|
||||
m_numPhases( aNumPhases ),
|
||||
m_progress( 0 ),
|
||||
m_maxProgress( 1000 ),
|
||||
m_cancelled( false )
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
void PROGRESS_REPORTER_BASE::BeginPhase( int aPhase )
|
||||
{
|
||||
m_phase.store( aPhase );
|
||||
m_progress.store( 0 );
|
||||
}
|
||||
|
||||
|
||||
void PROGRESS_REPORTER_BASE::AdvancePhase()
|
||||
{
|
||||
m_phase.fetch_add( 1 );
|
||||
m_progress.store( 0 );
|
||||
}
|
||||
|
||||
|
||||
void PROGRESS_REPORTER_BASE::AdvancePhase( const wxString& aMessage )
|
||||
{
|
||||
AdvancePhase();
|
||||
Report( aMessage );
|
||||
}
|
||||
|
||||
|
||||
void PROGRESS_REPORTER_BASE::Report( const wxString& aMessage )
|
||||
{
|
||||
std::lock_guard<std::mutex> guard( m_mutex );
|
||||
m_rptMessage = aMessage;
|
||||
m_msgChanged = true;
|
||||
}
|
||||
|
||||
|
||||
void PROGRESS_REPORTER_BASE::SetMaxProgress( int aMaxProgress )
|
||||
{
|
||||
m_maxProgress.store( aMaxProgress );
|
||||
}
|
||||
|
||||
|
||||
void PROGRESS_REPORTER_BASE::SetCurrentProgress( double aProgress )
|
||||
{
|
||||
m_maxProgress.store( 1000 );
|
||||
m_progress.store( (int) ( aProgress * 1000.0 ) );
|
||||
}
|
||||
|
||||
|
||||
void PROGRESS_REPORTER_BASE::AdvanceProgress()
|
||||
{
|
||||
m_progress.fetch_add( 1 );
|
||||
}
|
||||
|
||||
|
||||
void PROGRESS_REPORTER_BASE::SetNumPhases( int aNumPhases )
|
||||
{
|
||||
m_numPhases = aNumPhases;
|
||||
}
|
||||
|
||||
|
||||
void PROGRESS_REPORTER_BASE::AddPhases( int aNumPhases )
|
||||
{
|
||||
m_numPhases += aNumPhases;
|
||||
}
|
||||
|
||||
|
||||
int PROGRESS_REPORTER_BASE::currentProgress() const
|
||||
{
|
||||
double current = ( 1.0 / (double) m_numPhases ) *
|
||||
( (double) m_phase + ( (double) m_progress.load() / (double) m_maxProgress ) );
|
||||
|
||||
return (int)( current * 1000 );
|
||||
}
|
||||
|
||||
|
||||
bool PROGRESS_REPORTER_BASE::KeepRefreshing( bool aWait )
|
||||
{
|
||||
if( aWait )
|
||||
{
|
||||
while( m_progress.load() < m_maxProgress && m_maxProgress > 0 )
|
||||
{
|
||||
if( !updateUI() )
|
||||
{
|
||||
m_cancelled.store( true );
|
||||
return false;
|
||||
}
|
||||
|
||||
wxMilliSleep( 20 );
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
if( !updateUI() )
|
||||
{
|
||||
m_cancelled.store( true );
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -0,0 +1,127 @@
|
|||
/*
|
||||
* This program source code file is part of KiCad, a free EDA CAD application.
|
||||
*
|
||||
* Copyright (C) 2017 CERN
|
||||
* Copyright (C) 2021 KiCad Developers, see AUTHORS.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, you may find one here:
|
||||
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
|
||||
* or you may search the http://www.gnu.org website for the version 2 license,
|
||||
* or you may write to the Free Software Foundation, Inc.,
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
|
||||
*/
|
||||
|
||||
#ifndef GENERIC_PROGRESS_REPORTER_H
|
||||
#define GENERIC_PROGRESS_REPORTER_H
|
||||
|
||||
#include <mutex>
|
||||
#include <atomic>
|
||||
#include <progress_reporter.h>
|
||||
|
||||
/**
|
||||
* This implements all the tricky bits for thread safety, but the GUI is left to derived classes.
|
||||
*/
|
||||
class PROGRESS_REPORTER_BASE : public PROGRESS_REPORTER
|
||||
{
|
||||
public:
|
||||
|
||||
PROGRESS_REPORTER_BASE( int aNumPhases );
|
||||
PROGRESS_REPORTER_BASE( const PROGRESS_REPORTER_BASE& ) = delete;
|
||||
|
||||
virtual ~PROGRESS_REPORTER_BASE()
|
||||
{
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the number of phases.
|
||||
*/
|
||||
void SetNumPhases( int aNumPhases ) override;
|
||||
void AddPhases( int aNumPhases ) override;
|
||||
|
||||
/**
|
||||
* Initialize the \a aPhase virtual zone of the dialog progress bar.
|
||||
*/
|
||||
virtual void BeginPhase( int aPhase ) override;
|
||||
|
||||
/**
|
||||
* Use the next available virtual zone of the dialog progress bar.
|
||||
*/
|
||||
virtual void AdvancePhase() override;
|
||||
|
||||
/**
|
||||
* Use the next available virtual zone of the dialog progress bar and updates the message.
|
||||
*/
|
||||
virtual void AdvancePhase( const wxString& aMessage ) override;
|
||||
|
||||
/**
|
||||
* Display \a aMessage in the progress bar dialog.
|
||||
*/
|
||||
virtual void Report( const wxString& aMessage ) override;
|
||||
|
||||
/**
|
||||
* Set the progress value to aProgress (0..1).
|
||||
*/
|
||||
virtual void SetCurrentProgress( double aProgress ) override;
|
||||
|
||||
/**
|
||||
* Fix the value that gives the 100 percent progress bar length
|
||||
* (inside the current virtual zone).
|
||||
*/
|
||||
void SetMaxProgress( int aMaxProgress ) override;
|
||||
|
||||
/**
|
||||
* Increment the progress bar length (inside the current virtual zone).
|
||||
*/
|
||||
void AdvanceProgress() override;
|
||||
|
||||
/**
|
||||
* Update the UI dialog.
|
||||
*
|
||||
* @warning This should only be called from the main thread.
|
||||
*
|
||||
* @return false if the user clicked Cancel.
|
||||
*/
|
||||
bool KeepRefreshing( bool aWait = false ) override;
|
||||
|
||||
/**
|
||||
* Change the title displayed on the window caption.
|
||||
*
|
||||
* Has meaning only for some reporters. Does nothing for others.
|
||||
*
|
||||
* @warning This should only be called from the main thread.
|
||||
*/
|
||||
void SetTitle( const wxString& aTitle ) override { }
|
||||
|
||||
bool IsCancelled() const override { return m_cancelled; }
|
||||
|
||||
protected:
|
||||
int currentProgress() const;
|
||||
|
||||
virtual bool updateUI() = 0;
|
||||
|
||||
wxString m_rptMessage;
|
||||
bool m_msgChanged; // true after change in m_rptMessage
|
||||
|
||||
mutable std::mutex m_mutex;
|
||||
std::atomic_int m_phase;
|
||||
std::atomic_int m_numPhases;
|
||||
std::atomic_int m_progress;
|
||||
std::atomic_int m_maxProgress;
|
||||
std::atomic_bool m_cancelled;
|
||||
};
|
||||
|
||||
|
||||
#endif
|
|
@ -24,124 +24,16 @@
|
|||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
|
||||
*/
|
||||
|
||||
#include <widgets/progress_reporter.h>
|
||||
#include <wx/evtloop.h>
|
||||
#include <thread>
|
||||
|
||||
PROGRESS_REPORTER::PROGRESS_REPORTER( int aNumPhases ) :
|
||||
m_msgChanged( false ),
|
||||
m_phase( 0 ),
|
||||
m_numPhases( aNumPhases ),
|
||||
m_progress( 0 ),
|
||||
m_maxProgress( 1000 ),
|
||||
m_cancelled( false )
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
void PROGRESS_REPORTER::BeginPhase( int aPhase )
|
||||
{
|
||||
m_phase.store( aPhase );
|
||||
m_progress.store( 0 );
|
||||
}
|
||||
|
||||
|
||||
void PROGRESS_REPORTER::AdvancePhase()
|
||||
{
|
||||
m_phase.fetch_add( 1 );
|
||||
m_progress.store( 0 );
|
||||
}
|
||||
|
||||
|
||||
void PROGRESS_REPORTER::AdvancePhase( const wxString& aMessage )
|
||||
{
|
||||
AdvancePhase();
|
||||
Report( aMessage );
|
||||
}
|
||||
|
||||
|
||||
void PROGRESS_REPORTER::Report( const wxString& aMessage )
|
||||
{
|
||||
std::lock_guard<std::mutex> guard( m_mutex );
|
||||
m_rptMessage = aMessage;
|
||||
m_msgChanged = true;
|
||||
}
|
||||
|
||||
|
||||
void PROGRESS_REPORTER::SetMaxProgress( int aMaxProgress )
|
||||
{
|
||||
m_maxProgress.store( aMaxProgress );
|
||||
}
|
||||
|
||||
void PROGRESS_REPORTER::SetCurrentProgress( double aProgress )
|
||||
{
|
||||
m_maxProgress.store( 1000 );
|
||||
m_progress.store( (int) ( aProgress * 1000.0 ) );
|
||||
}
|
||||
|
||||
|
||||
void PROGRESS_REPORTER::AdvanceProgress()
|
||||
{
|
||||
m_progress.fetch_add( 1 );
|
||||
}
|
||||
|
||||
|
||||
void PROGRESS_REPORTER::SetNumPhases( int aNumPhases )
|
||||
{
|
||||
m_numPhases = aNumPhases;
|
||||
}
|
||||
|
||||
|
||||
void PROGRESS_REPORTER::AddPhases( int aNumPhases )
|
||||
{
|
||||
m_numPhases += aNumPhases;
|
||||
}
|
||||
|
||||
|
||||
int PROGRESS_REPORTER::currentProgress() const
|
||||
{
|
||||
double current = ( 1.0 / (double) m_numPhases ) *
|
||||
( (double) m_phase + ( (double) m_progress.load() / (double) m_maxProgress ) );
|
||||
|
||||
return (int)( current * 1000 );
|
||||
}
|
||||
|
||||
|
||||
bool PROGRESS_REPORTER::KeepRefreshing( bool aWait )
|
||||
{
|
||||
if( aWait )
|
||||
{
|
||||
while( m_progress.load() < m_maxProgress && m_maxProgress > 0 )
|
||||
{
|
||||
if( !updateUI() )
|
||||
{
|
||||
m_cancelled.store( true );
|
||||
return false;
|
||||
}
|
||||
|
||||
wxMilliSleep( 20 );
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
if( !updateUI() )
|
||||
{
|
||||
m_cancelled.store( true );
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
#include <widgets/wx_progress_reporters.h>
|
||||
|
||||
|
||||
WX_PROGRESS_REPORTER::WX_PROGRESS_REPORTER( wxWindow* aParent, const wxString& aTitle,
|
||||
int aNumPhases, bool aCanAbort,
|
||||
bool aReserveSpaceForMessage ) :
|
||||
PROGRESS_REPORTER( aNumPhases ),
|
||||
wxProgressDialog( aTitle, ( aReserveSpaceForMessage ? wxT( " " ) : wxT( "" ) ), 1, aParent,
|
||||
PROGRESS_REPORTER_BASE( aNumPhases ),
|
||||
wxProgressDialog( aTitle, ( aReserveSpaceForMessage ? wxT( " " ) : wxT( "" ) ), 1, aParent,
|
||||
// wxPD_APP_MODAL | // Don't use; messes up OSX when called from
|
||||
// quasi-modal dialog
|
||||
wxPD_AUTO_HIDE | // *MUST* use; otherwise wxWidgets will spin
|
||||
|
@ -151,7 +43,7 @@ WX_PROGRESS_REPORTER::WX_PROGRESS_REPORTER( wxWindow* aParent, const wxString& a
|
|||
wxPD_ELAPSED_TIME )
|
||||
#if wxCHECK_VERSION( 3, 1, 0 )
|
||||
,
|
||||
m_appProgressIndicator( aParent )
|
||||
m_appProgressIndicator( aParent )
|
||||
#endif
|
||||
{
|
||||
#if wxCHECK_VERSION( 3, 1, 0 )
|
||||
|
@ -196,7 +88,7 @@ bool WX_PROGRESS_REPORTER::updateUI()
|
|||
|
||||
|
||||
GAUGE_PROGRESS_REPORTER::GAUGE_PROGRESS_REPORTER( wxWindow* aParent, int aNumPhases ) :
|
||||
PROGRESS_REPORTER( aNumPhases ),
|
||||
PROGRESS_REPORTER_BASE( aNumPhases ),
|
||||
wxGauge( aParent, wxID_ANY, 1000, wxDefaultPosition, wxDefaultSize, wxGA_HORIZONTAL,
|
||||
wxDefaultValidator, wxGaugeNameStr )
|
||||
{
|
|
@ -39,7 +39,7 @@
|
|||
#include <tool/editor_conditions.h>
|
||||
#include <tool/tool_dispatcher.h>
|
||||
#include <tool/tool_manager.h>
|
||||
#include <widgets/progress_reporter.h>
|
||||
#include <widgets/wx_progress_reporters.h>
|
||||
#include <wx/statline.h>
|
||||
#include <wx/stattext.h>
|
||||
|
||||
|
|
|
@ -54,7 +54,7 @@
|
|||
|
||||
DIALOG_ERC::DIALOG_ERC( SCH_EDIT_FRAME* parent ) :
|
||||
DIALOG_ERC_BASE( parent ),
|
||||
PROGRESS_REPORTER( 1 ),
|
||||
PROGRESS_REPORTER_BASE( 1 ),
|
||||
m_parent( parent ),
|
||||
m_running( false ),
|
||||
m_ercRun( false ),
|
||||
|
@ -143,7 +143,7 @@ bool DIALOG_ERC::updateUI()
|
|||
void DIALOG_ERC::AdvancePhase( const wxString& aMessage )
|
||||
{
|
||||
// Will also call Report( aMessage ):
|
||||
PROGRESS_REPORTER::AdvancePhase( aMessage );
|
||||
PROGRESS_REPORTER_BASE::AdvancePhase( aMessage );
|
||||
SetCurrentProgress( 0.0 );
|
||||
}
|
||||
|
||||
|
|
|
@ -30,17 +30,17 @@
|
|||
#include <lib_pin.h> // For PINTYPE_COUNT definition
|
||||
|
||||
#include <dialog_erc_base.h>
|
||||
#include <widgets/progress_reporter.h>
|
||||
#include <widgets/progress_reporter_base.h>
|
||||
#include <erc_settings.h>
|
||||
|
||||
|
||||
class DIALOG_ERC : public DIALOG_ERC_BASE, PROGRESS_REPORTER
|
||||
class DIALOG_ERC : public DIALOG_ERC_BASE, PROGRESS_REPORTER_BASE
|
||||
{
|
||||
public:
|
||||
DIALOG_ERC( SCH_EDIT_FRAME* parent );
|
||||
~DIALOG_ERC();
|
||||
|
||||
// PROGRESS_REPORTER calls
|
||||
// PROGRESS_REPORTER_BASE calls
|
||||
bool updateUI() override;
|
||||
void AdvancePhase( const wxString& aMessage ) override;
|
||||
void Report( const wxString& aMessage ) override;
|
||||
|
|
|
@ -61,7 +61,7 @@
|
|||
#include <tools/ee_inspection_tool.h>
|
||||
#include <paths.h>
|
||||
#include <wx_filename.h> // For ::ResolvePossibleSymlinks
|
||||
#include <widgets/progress_reporter.h>
|
||||
#include <widgets/wx_progress_reporters.h>
|
||||
|
||||
bool SCH_EDIT_FRAME::SaveEEFile( SCH_SHEET* aSheet, bool aSaveUnderNewName )
|
||||
{
|
||||
|
|
|
@ -61,7 +61,7 @@
|
|||
#include <schematic.h>
|
||||
#include <symbol_lib_table.h>
|
||||
#include <wildcards_and_files_ext.h>
|
||||
#include <widgets/progress_reporter.h>
|
||||
#include <progress_reporter.h>
|
||||
|
||||
|
||||
// Eagle schematic axes are aligned with x increasing left to right and Y increasing bottom to top
|
||||
|
|
|
@ -55,7 +55,7 @@
|
|||
#include <sch_plugins/kicad/sch_sexpr_parser.h>
|
||||
#include <template_fieldnames.h>
|
||||
#include <trigo.h>
|
||||
#include <widgets/progress_reporter.h>
|
||||
#include <progress_reporter.h>
|
||||
|
||||
|
||||
using namespace TSCHEMATIC_T;
|
||||
|
|
|
@ -61,7 +61,7 @@
|
|||
#include <ee_selection.h>
|
||||
#include <string_utils.h>
|
||||
#include <wx_filename.h> // for ::ResolvePossibleSymlinks()
|
||||
#include <widgets/progress_reporter.h>
|
||||
#include <progress_reporter.h>
|
||||
|
||||
|
||||
using namespace TSCHEMATIC_T;
|
||||
|
|
|
@ -39,7 +39,7 @@
|
|||
#include <richio.h>
|
||||
#include <trace_helpers.h>
|
||||
#include <trigo.h>
|
||||
#include <widgets/progress_reporter.h>
|
||||
#include <progress_reporter.h>
|
||||
#include <general.h>
|
||||
#include <sch_bitmap.h>
|
||||
#include <sch_bus_entry.h>
|
||||
|
|
|
@ -23,7 +23,7 @@
|
|||
#include <core/wx_stl_compat.h>
|
||||
#include <symbol_async_loader.h>
|
||||
#include <symbol_lib_table.h>
|
||||
#include <widgets/progress_reporter.h>
|
||||
#include <progress_reporter.h>
|
||||
|
||||
|
||||
SYMBOL_ASYNC_LOADER::SYMBOL_ASYNC_LOADER( const std::vector<wxString>& aNicknames,
|
||||
|
|
|
@ -67,7 +67,7 @@
|
|||
#include <widgets/app_progress_dialog.h>
|
||||
#include <widgets/infobar.h>
|
||||
#include <widgets/lib_tree.h>
|
||||
#include <widgets/progress_reporter.h>
|
||||
#include <widgets/wx_progress_reporters.h>
|
||||
#include <widgets/symbol_tree_pane.h>
|
||||
#include <wildcards_and_files_ext.h>
|
||||
#include <panel_sym_lib_table.h>
|
||||
|
|
|
@ -35,7 +35,7 @@
|
|||
#include <sch_plugins/legacy/sch_legacy_plugin.h>
|
||||
#include <symbol_lib_table.h>
|
||||
#include <symbol_async_loader.h>
|
||||
#include <widgets/progress_reporter.h>
|
||||
#include <progress_reporter.h>
|
||||
#include <list>
|
||||
#include <locale_io.h>
|
||||
#include <wx/log.h>
|
||||
|
|
|
@ -22,8 +22,7 @@
|
|||
#include <wx/log.h>
|
||||
#include <wx/tokenzr.h>
|
||||
#include <wx/window.h>
|
||||
#include <widgets/progress_reporter.h>
|
||||
|
||||
#include <widgets/wx_progress_reporters.h>
|
||||
#include <dialogs/html_messagebox.h>
|
||||
#include <eda_pattern_match.h>
|
||||
#include <generate_alias_info.h>
|
||||
|
|
|
@ -33,7 +33,7 @@
|
|||
#include <gerber_file_image_list.h>
|
||||
#include <excellon_image.h>
|
||||
#include <wildcards_and_files_ext.h>
|
||||
#include <widgets/progress_reporter.h>
|
||||
#include <widgets/wx_progress_reporters.h>
|
||||
#include "widgets/gerbview_layer_widget.h"
|
||||
|
||||
// HTML Messages used more than one time:
|
||||
|
|
|
@ -0,0 +1,112 @@
|
|||
/*
|
||||
* This program source code file is part of KiCad, a free EDA CAD application.
|
||||
*
|
||||
* Copyright (C) 2017 CERN
|
||||
* Copyright (C) 2021 KiCad Developers, see AUTHORS.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, you may find one here:
|
||||
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
|
||||
* or you may search the http://www.gnu.org website for the version 2 license,
|
||||
* or you may write to the Free Software Foundation, Inc.,
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
|
||||
*/
|
||||
|
||||
#ifndef PROGRESS_REPORTER_H
|
||||
#define PROGRESS_REPORTER_H
|
||||
|
||||
/**
|
||||
* A progress reporter interface for use in multi-threaded environments. The various advancement
|
||||
* and message methods can be called from sub-threads. The KeepRefreshing method *MUST* be called
|
||||
* only from the main thread (primarily a MSW requirement, which won't allow access to UI objects
|
||||
* allocated from a separate thread).
|
||||
*/
|
||||
class PROGRESS_REPORTER
|
||||
{
|
||||
public:
|
||||
|
||||
PROGRESS_REPORTER()
|
||||
{ }
|
||||
|
||||
PROGRESS_REPORTER( const PROGRESS_REPORTER& ) = delete;
|
||||
|
||||
virtual ~PROGRESS_REPORTER()
|
||||
{ }
|
||||
|
||||
/**
|
||||
* Set the number of phases.
|
||||
*/
|
||||
virtual void SetNumPhases( int aNumPhases ) = 0;
|
||||
virtual void AddPhases( int aNumPhases ) = 0;
|
||||
|
||||
/**
|
||||
* Initialize the \a aPhase virtual zone of the dialog progress bar.
|
||||
*/
|
||||
virtual void BeginPhase( int aPhase ) = 0;
|
||||
|
||||
/**
|
||||
* Use the next available virtual zone of the dialog progress bar.
|
||||
*/
|
||||
virtual void AdvancePhase() = 0;
|
||||
|
||||
/**
|
||||
* Use the next available virtual zone of the dialog progress bar and updates the message.
|
||||
*/
|
||||
virtual void AdvancePhase( const wxString& aMessage ) = 0;
|
||||
|
||||
/**
|
||||
* Display \a aMessage in the progress bar dialog.
|
||||
*/
|
||||
virtual void Report( const wxString& aMessage ) = 0;
|
||||
|
||||
/**
|
||||
* Set the progress value to aProgress (0..1).
|
||||
*/
|
||||
virtual void SetCurrentProgress( double aProgress ) = 0;
|
||||
|
||||
/**
|
||||
* Fix the value that gives the 100 percent progress bar length
|
||||
* (inside the current virtual zone).
|
||||
*/
|
||||
virtual void SetMaxProgress( int aMaxProgress ) = 0;
|
||||
|
||||
/**
|
||||
* Increment the progress bar length (inside the current virtual zone).
|
||||
*/
|
||||
virtual void AdvanceProgress() = 0;
|
||||
|
||||
/**
|
||||
* Update the UI (if any).
|
||||
*
|
||||
* @warning This should only be called from the main thread.
|
||||
*
|
||||
* @return false if the user cancelled.
|
||||
*/
|
||||
virtual bool KeepRefreshing( bool aWait = false ) = 0;
|
||||
|
||||
/**
|
||||
* Change the title displayed on the window caption.
|
||||
*
|
||||
* Has meaning only for some reporters. Does nothing for others.
|
||||
*
|
||||
* @warning This should only be called from the main thread.
|
||||
*/
|
||||
virtual void SetTitle( const wxString& aTitle ) = 0;
|
||||
|
||||
virtual bool IsCancelled() const = 0;
|
||||
};
|
||||
|
||||
|
||||
#endif
|
|
@ -1,198 +0,0 @@
|
|||
/*
|
||||
* This program source code file is part of KiCad, a free EDA CAD application.
|
||||
*
|
||||
* Copyright (C) 2017 CERN
|
||||
* Copyright (C) 2021 KiCad Developers, see AUTHORS.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, you may find one here:
|
||||
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
|
||||
* or you may search the http://www.gnu.org website for the version 2 license,
|
||||
* or you may write to the Free Software Foundation, Inc.,
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
|
||||
*/
|
||||
|
||||
#ifndef __PROGRESS_REPORTER
|
||||
#define __PROGRESS_REPORTER
|
||||
|
||||
#include <mutex>
|
||||
#include <atomic>
|
||||
|
||||
#include <wx/progdlg.h>
|
||||
#include <wx/gauge.h>
|
||||
#if wxCHECK_VERSION( 3, 1, 0 )
|
||||
#include <wx/appprogress.h>
|
||||
#endif
|
||||
|
||||
/**
|
||||
* A progress reporter for use in multi-threaded environments. The various advancement
|
||||
* and message methods can be called from sub-threads. The KeepRefreshing method *MUST*
|
||||
* be called only from the main thread (primarily a MSW requirement, which won't allow
|
||||
* access to UI objects allocated from a separate thread).
|
||||
*/
|
||||
class PROGRESS_REPORTER
|
||||
{
|
||||
public:
|
||||
|
||||
PROGRESS_REPORTER( int aNumPhases );
|
||||
PROGRESS_REPORTER( const PROGRESS_REPORTER& ) = delete;
|
||||
|
||||
virtual ~PROGRESS_REPORTER()
|
||||
{
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the number of phases.
|
||||
*/
|
||||
void SetNumPhases( int aNumPhases );
|
||||
void AddPhases( int aNumPhases );
|
||||
|
||||
/**
|
||||
* Initialize the \a aPhase virtual zone of the dialog progress bar.
|
||||
*/
|
||||
virtual void BeginPhase( int aPhase );
|
||||
|
||||
/**
|
||||
* Use the next available virtual zone of the dialog progress bar.
|
||||
*/
|
||||
virtual void AdvancePhase();
|
||||
|
||||
/**
|
||||
* Use the next available virtual zone of the dialog progress bar and updates
|
||||
* the message.
|
||||
*/
|
||||
virtual void AdvancePhase( const wxString& aMessage );
|
||||
|
||||
/**
|
||||
* Display \a aMessage in the progress bar dialog.
|
||||
*/
|
||||
virtual void Report( const wxString& aMessage );
|
||||
|
||||
/**
|
||||
* Set the progress value to aProgress (0..1).
|
||||
*/
|
||||
virtual void SetCurrentProgress( double aProgress );
|
||||
|
||||
/**
|
||||
* Fix the value that gives the 100 percent progress bar length
|
||||
* (inside the current virtual zone).
|
||||
*/
|
||||
void SetMaxProgress( int aMaxProgress );
|
||||
|
||||
/**
|
||||
* Increment the progress bar length (inside the current virtual zone).
|
||||
*/
|
||||
void AdvanceProgress();
|
||||
|
||||
/**
|
||||
* Update the UI dialog.
|
||||
*
|
||||
* @warning This should only be called from the main thread.
|
||||
*
|
||||
* @return false if the user clicked Cancel.
|
||||
*/
|
||||
bool KeepRefreshing( bool aWait = false );
|
||||
|
||||
/**
|
||||
* Change the title displayed on the window caption.
|
||||
*
|
||||
* Has meaning only for some reporters. Does nothing for others.
|
||||
*
|
||||
* @warning This should only be called from the main thread.
|
||||
*/
|
||||
virtual void SetTitle( const wxString& aTitle ) {}
|
||||
|
||||
bool IsCancelled() const { return m_cancelled.load(); }
|
||||
|
||||
protected:
|
||||
|
||||
int currentProgress() const;
|
||||
|
||||
virtual bool updateUI() = 0;
|
||||
|
||||
wxString m_rptMessage;
|
||||
bool m_msgChanged; // true after change in m_rptMessage
|
||||
// the dialog needs perhaps a resize
|
||||
mutable std::mutex m_mutex;
|
||||
std::atomic_int m_phase;
|
||||
std::atomic_int m_numPhases;
|
||||
std::atomic_int m_progress;
|
||||
std::atomic_int m_maxProgress;
|
||||
std::atomic_bool m_cancelled;
|
||||
};
|
||||
|
||||
/**
|
||||
* Multi-thread safe progress reporter dialog, intended for use of tasks that parallel reporting
|
||||
* back of work status.
|
||||
*
|
||||
* @see PROGRESS_REPORTER.
|
||||
*/
|
||||
class WX_PROGRESS_REPORTER : public PROGRESS_REPORTER, public wxProgressDialog
|
||||
{
|
||||
public:
|
||||
/**
|
||||
* The #PROGRESS_REPORTER will stay on top of \a aParent.
|
||||
*
|
||||
* The style is wxPD_AUTO_HIDE | wxPD_CAN_ABORT | wxPD_ELAPSED_TIME.
|
||||
*
|
||||
* @param aParent is the wxDialog of Frame that manage this.
|
||||
* @param aTitle is the dialog progress title
|
||||
* @param aNumPhases is the number of "virtual sections" of the progress bar
|
||||
* aNumPhases = 1 is the usual progress bar
|
||||
* aNumPhases = n creates n virtual progress bar zones: a 0 to 100 percent width
|
||||
* of a virtual zone fills 0 to 1/n progress bar full size of the nth virtual zone index
|
||||
* @param aCanAbort is true if the abort button should be shown
|
||||
* @param aReserveSpaceForMessage will ensure that the dialog is laid out for status messages,
|
||||
* preventing layout issues on Windows when reporting a message after the initial layout
|
||||
*/
|
||||
WX_PROGRESS_REPORTER( wxWindow* aParent, const wxString& aTitle, int aNumPhases,
|
||||
bool aCanAbort = true, bool aReserveSpaceForMessage = true );
|
||||
~WX_PROGRESS_REPORTER();
|
||||
|
||||
/**
|
||||
* Change the title displayed on the window caption.
|
||||
*/
|
||||
virtual void SetTitle( const wxString& aTitle ) override
|
||||
{
|
||||
wxProgressDialog::SetTitle( aTitle );
|
||||
}
|
||||
|
||||
private:
|
||||
#if wxCHECK_VERSION( 3, 1, 0 )
|
||||
wxAppProgressIndicator m_appProgressIndicator;
|
||||
#endif
|
||||
|
||||
virtual bool updateUI() override;
|
||||
};
|
||||
|
||||
|
||||
class GAUGE_PROGRESS_REPORTER : public PROGRESS_REPORTER, public wxGauge
|
||||
{
|
||||
public:
|
||||
/**
|
||||
* @param aParent is the parent of the wxGauge control
|
||||
* @param aNumPhases is the number of "virtual sections" of the progress bar
|
||||
* aNumPhases = 1 is the usual progress bar
|
||||
* aNumPhases = n creates n virtual progress bar zones: a 0 to 100 percent width
|
||||
* of a virtual zone fills 0 to 1/n progress bar full size of the nth virtual zone index
|
||||
*/
|
||||
GAUGE_PROGRESS_REPORTER( wxWindow* aParent, int aNumPhases );
|
||||
|
||||
private:
|
||||
|
||||
bool updateUI() override;
|
||||
};
|
||||
|
||||
#endif
|
|
@ -0,0 +1,99 @@
|
|||
/*
|
||||
* This program source code file is part of KiCad, a free EDA CAD application.
|
||||
*
|
||||
* Copyright (C) 2017 CERN
|
||||
* Copyright (C) 2021 KiCad Developers, see AUTHORS.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, you may find one here:
|
||||
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
|
||||
* or you may search the http://www.gnu.org website for the version 2 license,
|
||||
* or you may write to the Free Software Foundation, Inc.,
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
|
||||
*/
|
||||
|
||||
#ifndef WX_PROGRESS_REPORTERS_H
|
||||
#define WX_PROGRESS_REPORTERS_H
|
||||
|
||||
#include <wx/progdlg.h>
|
||||
#include <wx/gauge.h>
|
||||
#if wxCHECK_VERSION( 3, 1, 0 )
|
||||
#include <wx/appprogress.h>
|
||||
#endif
|
||||
|
||||
#include <widgets/progress_reporter_base.h>
|
||||
|
||||
/**
|
||||
* Multi-thread safe progress reporter dialog, intended for use of tasks that parallel reporting
|
||||
* back of work status.
|
||||
*
|
||||
* @see PROGRESS_REPORTER.
|
||||
*/
|
||||
class WX_PROGRESS_REPORTER : public PROGRESS_REPORTER_BASE, public wxProgressDialog
|
||||
{
|
||||
public:
|
||||
/**
|
||||
* The #PROGRESS_REPORTER will stay on top of \a aParent.
|
||||
*
|
||||
* The style is wxPD_AUTO_HIDE | wxPD_CAN_ABORT | wxPD_ELAPSED_TIME.
|
||||
*
|
||||
* @param aParent is the wxDialog of Frame that manage this.
|
||||
* @param aTitle is the dialog progress title
|
||||
* @param aNumPhases is the number of "virtual sections" of the progress bar
|
||||
* aNumPhases = 1 is the usual progress bar
|
||||
* aNumPhases = n creates n virtual progress bar zones: a 0 to 100 percent width
|
||||
* of a virtual zone fills 0 to 1/n progress bar full size of the nth virtual zone index
|
||||
* @param aCanAbort is true if the abort button should be shown
|
||||
* @param aReserveSpaceForMessage will ensure that the dialog is laid out for status messages,
|
||||
* preventing layout issues on Windows when reporting a message after the initial layout
|
||||
*/
|
||||
WX_PROGRESS_REPORTER( wxWindow* aParent, const wxString& aTitle, int aNumPhases,
|
||||
bool aCanAbort = true, bool aReserveSpaceForMessage = true );
|
||||
~WX_PROGRESS_REPORTER();
|
||||
|
||||
/**
|
||||
* Change the title displayed on the window caption.
|
||||
*/
|
||||
void SetTitle( const wxString& aTitle ) override
|
||||
{
|
||||
wxProgressDialog::SetTitle( aTitle );
|
||||
}
|
||||
|
||||
private:
|
||||
#if wxCHECK_VERSION( 3, 1, 0 )
|
||||
wxAppProgressIndicator m_appProgressIndicator;
|
||||
#endif
|
||||
|
||||
bool updateUI() override;
|
||||
};
|
||||
|
||||
|
||||
class GAUGE_PROGRESS_REPORTER : public PROGRESS_REPORTER_BASE, public wxGauge
|
||||
{
|
||||
public:
|
||||
/**
|
||||
* @param aParent is the parent of the wxGauge control
|
||||
* @param aNumPhases is the number of "virtual sections" of the progress bar
|
||||
* aNumPhases = 1 is the usual progress bar
|
||||
* aNumPhases = n creates n virtual progress bar zones: a 0 to 100 percent width
|
||||
* of a virtual zone fills 0 to 1/n progress bar full size of the nth virtual zone index
|
||||
*/
|
||||
GAUGE_PROGRESS_REPORTER( wxWindow* aParent, int aNumPhases );
|
||||
|
||||
private:
|
||||
bool updateUI() override;
|
||||
};
|
||||
|
||||
#endif
|
|
@ -36,7 +36,7 @@ using namespace std::placeholders;
|
|||
#include <status_popup.h>
|
||||
#include <drawing_sheet/ds_draw_item.h>
|
||||
#include <drawing_sheet/ds_data_item.h>
|
||||
#include <widgets/progress_reporter.h>
|
||||
#include <progress_reporter.h>
|
||||
|
||||
#include "pl_editor_frame.h"
|
||||
#include "pl_editor_id.h"
|
||||
|
|
|
@ -35,7 +35,7 @@
|
|||
#include <pad.h>
|
||||
#include <board_commit.h>
|
||||
#include <connectivity/connectivity_data.h>
|
||||
#include <widgets/progress_reporter.h>
|
||||
#include <progress_reporter.h>
|
||||
|
||||
#include "ar_autoplacer.h"
|
||||
#include "ar_matrix.h"
|
||||
|
|
|
@ -25,7 +25,7 @@
|
|||
#include <board_commit.h>
|
||||
#include <tools/pcb_actions.h>
|
||||
#include <widgets/infobar.h>
|
||||
#include <widgets/progress_reporter.h>
|
||||
#include <widgets/wx_progress_reporters.h>
|
||||
|
||||
#include "ar_autoplacer.h"
|
||||
#include "autoplace_tool.h"
|
||||
|
|
|
@ -25,7 +25,7 @@
|
|||
*/
|
||||
|
||||
#include <connectivity/connectivity_algo.h>
|
||||
#include <widgets/progress_reporter.h>
|
||||
#include <progress_reporter.h>
|
||||
#include <geometry/geometry_utils.h>
|
||||
#include <board_commit.h>
|
||||
|
||||
|
|
|
@ -38,7 +38,7 @@
|
|||
#include <settings/settings_manager.h>
|
||||
#include <widgets/infobar.h>
|
||||
#include <widgets/resettable_panel.h>
|
||||
#include <widgets/progress_reporter.h>
|
||||
#include <widgets/wx_progress_reporters.h>
|
||||
#include <wildcards_and_files_ext.h>
|
||||
|
||||
#include "dialog_board_setup.h"
|
||||
|
|
|
@ -39,7 +39,7 @@
|
|||
#include <wx/wupdlock.h>
|
||||
#include <widgets/appearance_controls.h>
|
||||
#include <widgets/ui_common.h>
|
||||
#include <widgets/progress_reporter.h>
|
||||
#include <widgets/progress_reporter_base.h>
|
||||
#include <dialogs/wx_html_report_box.h>
|
||||
#include <dialogs/panel_setup_rules_base.h>
|
||||
#include <tools/drc_tool.h>
|
||||
|
@ -49,7 +49,7 @@
|
|||
|
||||
DIALOG_DRC::DIALOG_DRC( PCB_EDIT_FRAME* aEditorFrame, wxWindow* aParent ) :
|
||||
DIALOG_DRC_BASE( aParent ),
|
||||
PROGRESS_REPORTER( 1 ),
|
||||
PROGRESS_REPORTER_BASE( 1 ),
|
||||
m_running( false ),
|
||||
m_cancelled( false ),
|
||||
m_drcRun( false ),
|
||||
|
@ -167,7 +167,7 @@ bool DIALOG_DRC::updateUI()
|
|||
|
||||
void DIALOG_DRC::AdvancePhase( const wxString& aMessage )
|
||||
{
|
||||
PROGRESS_REPORTER::AdvancePhase( aMessage );
|
||||
PROGRESS_REPORTER_BASE::AdvancePhase( aMessage );
|
||||
SetCurrentProgress( 0.0 );
|
||||
|
||||
m_messages->Report( aMessage );
|
||||
|
|
|
@ -32,7 +32,7 @@
|
|||
#include <pcb_marker.h>
|
||||
#include <board.h>
|
||||
#include <dialog_drc_base.h>
|
||||
#include <widgets/progress_reporter.h>
|
||||
#include <widgets/progress_reporter_base.h>
|
||||
|
||||
|
||||
class BOARD_DESIGN_SETTINGS;
|
||||
|
@ -41,7 +41,7 @@ class BOARD_DESIGN_SETTINGS;
|
|||
#define DIALOG_DRC_WINDOW_NAME "DialogDrcWindowName"
|
||||
|
||||
class
|
||||
DIALOG_DRC: public DIALOG_DRC_BASE, PROGRESS_REPORTER
|
||||
DIALOG_DRC: public DIALOG_DRC_BASE, PROGRESS_REPORTER_BASE
|
||||
{
|
||||
public:
|
||||
/// Constructors
|
||||
|
|
|
@ -24,7 +24,7 @@
|
|||
*/
|
||||
|
||||
#include <reporter.h>
|
||||
#include <widgets/progress_reporter.h>
|
||||
#include <progress_reporter.h>
|
||||
#include <string_utils.h>
|
||||
#include <board_design_settings.h>
|
||||
#include <drc/drc_engine.h>
|
||||
|
|
|
@ -33,7 +33,7 @@
|
|||
#include <zones.h>
|
||||
#include <zones_functions_for_undo_redo.h>
|
||||
#include <connectivity/connectivity_data.h>
|
||||
#include <widgets/progress_reporter.h>
|
||||
#include <widgets/wx_progress_reporters.h>
|
||||
#include <zone_filler.h>
|
||||
|
||||
|
||||
|
@ -136,7 +136,10 @@ void PCB_EDIT_FRAME::Edit_Zone_Params( ZONE* aZone )
|
|||
ZONE_FILLER filler( GetBoard(), &commit );
|
||||
wxString title = wxString::Format( _( "Refill %d Zones" ),
|
||||
(int) zones_to_refill.size() );
|
||||
filler.InstallNewProgressReporter( this, title, 4 );
|
||||
|
||||
std::unique_ptr<WX_PROGRESS_REPORTER> reporter;
|
||||
reporter = std::make_unique<WX_PROGRESS_REPORTER>( this, title, 4 );
|
||||
filler.SetProgressReporter( reporter.get() );
|
||||
|
||||
if( !filler.Fill( zones_to_refill ) )
|
||||
{
|
||||
|
|
|
@ -47,7 +47,7 @@
|
|||
#include <kiplatform/app.h>
|
||||
#include <widgets/appearance_controls.h>
|
||||
#include <widgets/infobar.h>
|
||||
#include <widgets/progress_reporter.h>
|
||||
#include <widgets/wx_progress_reporters.h>
|
||||
#include <settings/settings_manager.h>
|
||||
#include <paths.h>
|
||||
#include <project/project_file.h>
|
||||
|
|
|
@ -75,7 +75,7 @@
|
|||
#include <widgets/lib_tree.h>
|
||||
#include <widgets/paged_dialog.h>
|
||||
#include <widgets/panel_selection_filter.h>
|
||||
#include <widgets/progress_reporter.h>
|
||||
#include <widgets/wx_progress_reporters.h>
|
||||
#include <wildcards_and_files_ext.h>
|
||||
#include <wx/filedlg.h>
|
||||
#include <wx/treebook.h>
|
||||
|
|
|
@ -31,7 +31,7 @@
|
|||
#include <kiway.h>
|
||||
#include <lib_id.h>
|
||||
#include <wildcards_and_files_ext.h>
|
||||
#include <widgets/progress_reporter.h>
|
||||
#include <progress_reporter.h>
|
||||
#include <wx/textfile.h>
|
||||
#include <wx/txtstrm.h>
|
||||
#include <wx/wfstream.h>
|
||||
|
|
|
@ -47,7 +47,7 @@ using namespace std::placeholders;
|
|||
#include <pcbnew_settings.h>
|
||||
#include <view/view_controls.h>
|
||||
#include <widgets/lib_tree.h>
|
||||
#include <widgets/progress_reporter.h>
|
||||
#include <widgets/wx_progress_reporters.h>
|
||||
#include <dialog_pad_properties.h>
|
||||
|
||||
#include "fp_tree_model_adapter.h"
|
||||
|
|
|
@ -52,7 +52,7 @@
|
|||
#include <wx/mstream.h>
|
||||
#include <wx/wfstream.h>
|
||||
#include <wx/zstream.h>
|
||||
#include <widgets/progress_reporter.h>
|
||||
#include <progress_reporter.h>
|
||||
|
||||
|
||||
void ParseAltiumPcb( BOARD* aBoard, const wxString& aFileName, PROGRESS_REPORTER* aProgressReporter,
|
||||
|
|
|
@ -67,7 +67,7 @@ Load() TODO's
|
|||
#include <properties.h>
|
||||
#include <trigo.h>
|
||||
#include <math/util.h> // for KiROUND
|
||||
#include <widgets/progress_reporter.h>
|
||||
#include <progress_reporter.h>
|
||||
|
||||
#include <board.h>
|
||||
#include <board_design_settings.h>
|
||||
|
|
|
@ -29,7 +29,7 @@
|
|||
|
||||
#include "fabmaster_plugin.h"
|
||||
#include <board.h>
|
||||
#include <widgets/progress_reporter.h>
|
||||
#include <progress_reporter.h>
|
||||
#include <common.h>
|
||||
#include <macros.h>
|
||||
|
||||
|
|
|
@ -53,7 +53,7 @@
|
|||
#include <common.h>
|
||||
#include <geometry/shape_arc.h>
|
||||
#include <string_utils.h>
|
||||
#include <widgets/progress_reporter.h>
|
||||
#include <progress_reporter.h>
|
||||
#include <math/util.h>
|
||||
#include <wx/filename.h>
|
||||
|
||||
|
|
|
@ -47,7 +47,7 @@
|
|||
#include <plugins/kicad/pcb_parser.h>
|
||||
#include <trace_helpers.h>
|
||||
#include <pcb_track.h>
|
||||
#include <widgets/progress_reporter.h>
|
||||
#include <progress_reporter.h>
|
||||
#include <wildcards_and_files_ext.h>
|
||||
#include <wx/dir.h>
|
||||
#include <wx/log.h>
|
||||
|
|
|
@ -57,7 +57,7 @@
|
|||
#include <math/util.h> // KiROUND, Clamp
|
||||
#include <string_utils.h>
|
||||
#include <wx/log.h>
|
||||
#include <widgets/progress_reporter.h>
|
||||
#include <progress_reporter.h>
|
||||
|
||||
using namespace PCB_KEYS_T;
|
||||
|
||||
|
|
|
@ -88,7 +88,7 @@
|
|||
#include <trigo.h>
|
||||
#include <confirm.h>
|
||||
#include <math/util.h> // for KiROUND
|
||||
#include <widgets/progress_reporter.h>
|
||||
#include <progress_reporter.h>
|
||||
|
||||
typedef LEGACY_PLUGIN::BIU BIU;
|
||||
|
||||
|
|
|
@ -32,7 +32,7 @@
|
|||
#include <dialog_drc.h>
|
||||
#include <board_commit.h>
|
||||
#include <board_design_settings.h>
|
||||
#include <widgets/progress_reporter.h>
|
||||
#include <progress_reporter.h>
|
||||
#include <drc/drc_engine.h>
|
||||
#include <drc/drc_results_provider.h>
|
||||
#include <netlist_reader/pcb_netlist.h>
|
||||
|
|
|
@ -55,7 +55,7 @@
|
|||
#include <tool/tool_manager.h>
|
||||
#include <footprint_viewer_frame.h>
|
||||
#include <footprint_edit_frame.h>
|
||||
#include <widgets/progress_reporter.h>
|
||||
#include <widgets/wx_progress_reporters.h>
|
||||
#include <widgets/infobar.h>
|
||||
#include <wx/hyperlink.h>
|
||||
|
||||
|
|
|
@ -45,7 +45,7 @@ using namespace std::placeholders;
|
|||
#include <pad.h>
|
||||
#include <zone.h>
|
||||
#include <connectivity/connectivity_data.h>
|
||||
#include <widgets/progress_reporter.h>
|
||||
#include <progress_reporter.h>
|
||||
|
||||
|
||||
// Few constants to avoid using bare numbers for point indices
|
||||
|
|
|
@ -28,8 +28,9 @@
|
|||
#include <connectivity/connectivity_data.h>
|
||||
#include <board_commit.h>
|
||||
#include <board_design_settings.h>
|
||||
#include <widgets/progress_reporter.h>
|
||||
#include <progress_reporter.h>
|
||||
#include <widgets/infobar.h>
|
||||
#include <widgets/wx_progress_reporters.h>
|
||||
#include <wx/event.h>
|
||||
#include <wx/hyperlink.h>
|
||||
#include <tool/tool_manager.h>
|
||||
|
@ -67,14 +68,19 @@ void ZONE_FILLER_TOOL::CheckAllZones( wxWindow* aCaller, PROGRESS_REPORTER* aRep
|
|||
for( ZONE* zone : board()->Zones() )
|
||||
toFill.push_back(zone);
|
||||
|
||||
BOARD_COMMIT commit( this );
|
||||
|
||||
ZONE_FILLER filler( frame()->GetBoard(), &commit );
|
||||
BOARD_COMMIT commit( this );
|
||||
std::unique_ptr<WX_PROGRESS_REPORTER> reporter;
|
||||
ZONE_FILLER filler( frame()->GetBoard(), &commit );
|
||||
|
||||
if( aReporter )
|
||||
{
|
||||
filler.SetProgressReporter( aReporter );
|
||||
}
|
||||
else
|
||||
filler.InstallNewProgressReporter( aCaller, _( "Checking Zones" ), 4 );
|
||||
{
|
||||
reporter = std::make_unique<WX_PROGRESS_REPORTER>( aCaller, _( "Checking Zones" ), 4 );
|
||||
filler.SetProgressReporter( reporter.get() );
|
||||
}
|
||||
|
||||
std::lock_guard<KISPINLOCK> lock( board()->GetConnectivity()->GetLock() );
|
||||
|
||||
|
@ -103,7 +109,6 @@ void ZONE_FILLER_TOOL::singleShotRefocus( wxIdleEvent& )
|
|||
void ZONE_FILLER_TOOL::FillAllZones( wxWindow* aCaller, PROGRESS_REPORTER* aReporter )
|
||||
{
|
||||
PCB_EDIT_FRAME* frame = getEditFrame<PCB_EDIT_FRAME>();
|
||||
BOARD_COMMIT commit( this );
|
||||
std::vector<ZONE*> toFill;
|
||||
|
||||
if( m_fillInProgress )
|
||||
|
@ -116,7 +121,9 @@ void ZONE_FILLER_TOOL::FillAllZones( wxWindow* aCaller, PROGRESS_REPORTER* aRepo
|
|||
|
||||
board()->IncrementTimeStamp(); // Clear caches
|
||||
|
||||
ZONE_FILLER filler( board(), &commit );
|
||||
BOARD_COMMIT commit( this );
|
||||
std::unique_ptr<WX_PROGRESS_REPORTER> reporter;
|
||||
ZONE_FILLER filler( board(), &commit );
|
||||
|
||||
if( !board()->GetDesignSettings().m_DRCEngine->RulesValid() )
|
||||
{
|
||||
|
@ -139,9 +146,14 @@ void ZONE_FILLER_TOOL::FillAllZones( wxWindow* aCaller, PROGRESS_REPORTER* aRepo
|
|||
}
|
||||
|
||||
if( aReporter )
|
||||
{
|
||||
filler.SetProgressReporter( aReporter );
|
||||
}
|
||||
else
|
||||
filler.InstallNewProgressReporter( aCaller, _( "Fill All Zones" ), 3 );
|
||||
{
|
||||
reporter = std::make_unique<WX_PROGRESS_REPORTER>( aCaller, _( "Fill All Zones" ), 3 );
|
||||
filler.SetProgressReporter( reporter.get() );
|
||||
}
|
||||
|
||||
std::lock_guard<KISPINLOCK> lock( board()->GetConnectivity()->GetLock() );
|
||||
|
||||
|
@ -179,8 +191,6 @@ int ZONE_FILLER_TOOL::ZoneFill( const TOOL_EVENT& aEvent )
|
|||
|
||||
std::vector<ZONE*> toFill;
|
||||
|
||||
BOARD_COMMIT commit( this );
|
||||
|
||||
if( ZONE* passedZone = aEvent.Parameter<ZONE*>() )
|
||||
{
|
||||
toFill.push_back( passedZone );
|
||||
|
@ -194,8 +204,12 @@ int ZONE_FILLER_TOOL::ZoneFill( const TOOL_EVENT& aEvent )
|
|||
}
|
||||
}
|
||||
|
||||
ZONE_FILLER filler( board(), &commit );
|
||||
filler.InstallNewProgressReporter( frame(), _( "Fill Zone" ), 4 );
|
||||
BOARD_COMMIT commit( this );
|
||||
std::unique_ptr<WX_PROGRESS_REPORTER> reporter;
|
||||
ZONE_FILLER filler( board(), &commit );
|
||||
|
||||
reporter = std::make_unique<WX_PROGRESS_REPORTER>( frame(), _( "Fill Zone" ), 4 );
|
||||
filler.SetProgressReporter( reporter.get() );
|
||||
|
||||
std::lock_guard<KISPINLOCK> lock( board()->GetConnectivity()->GetLock() );
|
||||
|
||||
|
|
|
@ -39,7 +39,7 @@
|
|||
#include <connectivity/connectivity_data.h>
|
||||
#include <convert_basic_shapes_to_polygon.h>
|
||||
#include <board_commit.h>
|
||||
#include <widgets/progress_reporter.h>
|
||||
#include <progress_reporter.h>
|
||||
#include <geometry/shape_poly_set.h>
|
||||
#include <geometry/convex_hull.h>
|
||||
#include <geometry/geometry_utils.h>
|
||||
|
@ -69,14 +69,6 @@ ZONE_FILLER::~ZONE_FILLER()
|
|||
}
|
||||
|
||||
|
||||
void ZONE_FILLER::InstallNewProgressReporter( wxWindow* aParent, const wxString& aTitle,
|
||||
int aNumPhases )
|
||||
{
|
||||
m_uniqueReporter = std::make_unique<WX_PROGRESS_REPORTER>( aParent, aTitle, aNumPhases );
|
||||
SetProgressReporter( m_uniqueReporter.get() );
|
||||
}
|
||||
|
||||
|
||||
void ZONE_FILLER::SetProgressReporter( PROGRESS_REPORTER* aReporter )
|
||||
{
|
||||
m_progressReporter = aReporter;
|
||||
|
|
|
@ -23,13 +23,13 @@
|
|||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
|
||||
*/
|
||||
|
||||
#ifndef __ZONE_FILLER_H
|
||||
#define __ZONE_FILLER_H
|
||||
#ifndef ZONE_FILLER_H
|
||||
#define ZONE_FILLER_H
|
||||
|
||||
#include <vector>
|
||||
#include <zone.h>
|
||||
|
||||
class WX_PROGRESS_REPORTER;
|
||||
class PROGRESS_REPORTER;
|
||||
class BOARD;
|
||||
class COMMIT;
|
||||
class SHAPE_POLY_SET;
|
||||
|
@ -43,7 +43,6 @@ public:
|
|||
~ZONE_FILLER();
|
||||
|
||||
void SetProgressReporter( PROGRESS_REPORTER* aReporter );
|
||||
void InstallNewProgressReporter( wxWindow* aParent, const wxString& aTitle, int aNumPhases );
|
||||
|
||||
/**
|
||||
* Fills the given list of zones. Invalidates connectivity - it is up to the caller to obtain
|
||||
|
@ -127,8 +126,6 @@ private:
|
|||
COMMIT* m_commit;
|
||||
PROGRESS_REPORTER* m_progressReporter;
|
||||
|
||||
std::unique_ptr<WX_PROGRESS_REPORTER> m_uniqueReporter;
|
||||
|
||||
int m_maxError;
|
||||
int m_worstClearance;
|
||||
|
||||
|
|
|
@ -44,7 +44,7 @@
|
|||
#include <connectivity/connectivity_algo.h>
|
||||
|
||||
#include <reporter.h>
|
||||
#include <widgets/progress_reporter.h>
|
||||
#include <widgets/progress_reporter_base.h>
|
||||
|
||||
#include <project.h>
|
||||
#include <settings/settings_manager.h>
|
||||
|
|
|
@ -26,7 +26,7 @@
|
|||
|
||||
#include <string>
|
||||
|
||||
#include <widgets/progress_reporter.h>
|
||||
#include <widgets/progress_reporter_base.h>
|
||||
#include <reporter.h>
|
||||
#include <core/optional.h>
|
||||
#include <netlist_reader/pcb_netlist.h>
|
||||
|
@ -94,11 +94,11 @@ private:
|
|||
std::mutex m_lock;
|
||||
};
|
||||
|
||||
class CONSOLE_PROGRESS_REPORTER : public PROGRESS_REPORTER
|
||||
class CONSOLE_PROGRESS_REPORTER : public PROGRESS_REPORTER_BASE
|
||||
{
|
||||
public:
|
||||
CONSOLE_PROGRESS_REPORTER( CONSOLE_LOG* log ) :
|
||||
PROGRESS_REPORTER( 0 ),
|
||||
PROGRESS_REPORTER_BASE( 0 ),
|
||||
m_log( log ) {};
|
||||
~CONSOLE_PROGRESS_REPORTER() {};
|
||||
|
||||
|
|
Loading…
Reference in New Issue