49 changed files with 567 additions and 388 deletions
-
3common/CMakeLists.txt
-
2common/widgets/footprint_select_widget.cpp
-
141common/widgets/progress_reporter_base.cpp
-
127common/widgets/progress_reporter_base.h
-
118common/widgets/wx_progress_reporters.cpp
-
2cvpcb/cvpcb_mainframe.cpp
-
4eeschema/dialogs/dialog_erc.cpp
-
6eeschema/dialogs/dialog_erc.h
-
2eeschema/files-io.cpp
-
2eeschema/sch_plugins/eagle/sch_eagle_plugin.cpp
-
2eeschema/sch_plugins/kicad/sch_sexpr_parser.cpp
-
2eeschema/sch_plugins/kicad/sch_sexpr_plugin.cpp
-
2eeschema/sch_plugins/legacy/sch_legacy_plugin.cpp
-
2eeschema/symbol_async_loader.cpp
-
2eeschema/symbol_editor/symbol_edit_frame.cpp
-
2eeschema/symbol_editor/symbol_library_manager.cpp
-
3eeschema/symbol_tree_model_adapter.cpp
-
2gerbview/files.cpp
-
112include/progress_reporter.h
-
198include/widgets/progress_reporter.h
-
99include/widgets/wx_progress_reporters.h
-
2pagelayout_editor/tools/pl_point_editor.cpp
-
2pcbnew/autorouter/ar_autoplacer.cpp
-
2pcbnew/autorouter/autoplace_tool.cpp
-
2pcbnew/connectivity/connectivity_algo.cpp
-
2pcbnew/dialogs/dialog_board_setup.cpp
-
6pcbnew/dialogs/dialog_drc.cpp
-
4pcbnew/dialogs/dialog_drc.h
-
2pcbnew/drc/drc_engine.cpp
-
7pcbnew/edit_zone_helpers.cpp
-
2pcbnew/files.cpp
-
2pcbnew/footprint_edit_frame.cpp
-
2pcbnew/footprint_info_impl.cpp
-
2pcbnew/load_select_footprint.cpp
-
2pcbnew/plugins/altium/altium_pcb.cpp
-
2pcbnew/plugins/eagle/eagle_plugin.cpp
-
2pcbnew/plugins/fabmaster/fabmaster_plugin.cpp
-
2pcbnew/plugins/fabmaster/import_fabmaster.cpp
-
2pcbnew/plugins/kicad/kicad_plugin.cpp
-
2pcbnew/plugins/kicad/pcb_parser.cpp
-
2pcbnew/plugins/legacy/legacy_plugin.cpp
-
2pcbnew/tools/drc_tool.cpp
-
2pcbnew/tools/pcb_control.cpp
-
2pcbnew/tools/pcb_point_editor.cpp
-
38pcbnew/tools/zone_filler_tool.cpp
-
10pcbnew/zone_filler.cpp
-
9pcbnew/zone_filler.h
-
2qa/drc_proto/drc_proto.cpp
-
6qa/drc_proto/drc_proto.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 |
|||
@ -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 |
|||
Write
Preview
Loading…
Cancel
Save
Reference in new issue