39#include <wx/hyperlink.h>
51 m_fillInProgress( false )
73 std::vector<ZONE*> toFill;
76 toFill.push_back( zone );
79 std::unique_ptr<WX_PROGRESS_REPORTER> reporter;
85 m_filler->SetProgressReporter( aReporter );
89 reporter = std::make_unique<WX_PROGRESS_REPORTER>( aCaller,
_(
"Check Zones" ), 4,
91 m_filler->SetProgressReporter( reporter.get() );
94 if(
m_filler->Fill( toFill,
true, aCaller ) )
97 getEditFrame<PCB_EDIT_FRAME>()->m_ZoneFillsDirty =
false;
128 std::unique_ptr<WX_PROGRESS_REPORTER> reporter;
130 std::vector<ZONE*> toFill;
137 toFill.push_back( zone );
139 m_filler = std::make_unique<ZONE_FILLER>(
board(), &commit );
141 if( !
board()->GetDesignSettings().m_DRCEngine->RulesValid() )
144 wxHyperlinkCtrl* button =
new wxHyperlinkCtrl( infobar, wxID_ANY,
_(
"Show DRC rules" ),
147 button->Bind( wxEVT_COMMAND_HYPERLINK,
148 std::function<
void( wxHyperlinkEvent& aEvent )>(
149 [
frame]( wxHyperlinkEvent& aEvent )
151 frame->ShowBoardSetupDialog(
_(
"Rules" ) );
157 infobar->
ShowMessageFor(
_(
"Zone fills may be inaccurate. DRC rules contain errors." ),
158 10000, wxICON_WARNING );
163 m_filler->SetProgressReporter( aReporter );
167 reporter = std::make_unique<WX_PROGRESS_REPORTER>( aCaller,
_(
"Fill All Zones" ), 5,
169 m_filler->SetProgressReporter( reporter.get() );
174 m_filler->GetProgressReporter()->AdvancePhase();
177 frame->m_ZoneFillsDirty =
false;
188 frame->UpdateUserInterface();
202 std::vector<ZONE*> toFill;
207 toFill.push_back( zone );
224 std::unique_ptr<WX_PROGRESS_REPORTER> reporter;
227 m_filler = std::make_unique<ZONE_FILLER>(
board(), &commit );
229 if( !
board()->GetDesignSettings().m_DRCEngine->RulesValid() )
232 wxHyperlinkCtrl* button =
new wxHyperlinkCtrl( infobar, wxID_ANY,
_(
"Show DRC rules" ),
235 button->Bind( wxEVT_COMMAND_HYPERLINK,
236 std::function<
void( wxHyperlinkEvent& aLocEvent )>(
237 [
frame]( wxHyperlinkEvent& aLocEvent )
239 frame->ShowBoardSetupDialog(
_(
"Rules" ) );
245 infobar->
ShowMessageFor(
_(
"Zone fills may be inaccurate. DRC rules contain errors." ),
246 10000, wxICON_WARNING );
249 for(
ZONE* zone : toFill )
251 zone->GetLayerSet().RunOnLayers(
254 pts += zone->GetFilledPolysList( layer )->FullPointCount();
259 wxString title = wxString::Format(
_(
"Refill %d Zones" ), (
int) toFill.size() );
261 reporter = std::make_unique<WX_PROGRESS_REPORTER>(
frame, title, 5,
PR_CAN_ABORT );
262 m_filler->SetProgressReporter( reporter.get() );
279 wxHyperlinkCtrl* button =
new wxHyperlinkCtrl( infobar, wxID_ANY,
_(
"Open Preferences" ),
282 button->Bind( wxEVT_COMMAND_HYPERLINK, std::function<
void( wxHyperlinkEvent& )>(
283 [
this]( wxHyperlinkEvent& )
285 getEditFrame<PCB_EDIT_FRAME>()->ShowPreferences(
_(
"Editing Options" ),
291 infobar->
ShowMessageFor(
_(
"Automatic refill of zones can be turned off in Preferences "
292 "if it becomes too slow." ),
297 frame->UpdateUserInterface();
318 std::vector<ZONE*> toFill;
322 toFill.push_back( passedZone );
333 if(
ZONE* zone =
dynamic_cast<ZONE*
>( item ) )
334 toFill.push_back( zone );
348 std::unique_ptr<WX_PROGRESS_REPORTER> reporter;
350 m_filler = std::make_unique<ZONE_FILLER>(
board(), &commit );
352 reporter = std::make_unique<WX_PROGRESS_REPORTER>(
frame(),
_(
"Fill Zone" ), 5,
PR_CAN_ABORT );
353 m_filler->SetProgressReporter( reporter.get() );
357 reporter->AdvancePhase();
388 std::vector<ZONE*> toUnfill;
392 if(
ZONE* zone =
dynamic_cast<ZONE*
>( item ) )
393 toUnfill.push_back( zone );
397 if( toUnfill.empty() )
405 for(
ZONE* zone : toUnfill )
442 return m_filler->GetProgressReporter();
465 return via->GetRemoveUnconnected();
467 else if(
PAD*
pad =
dynamic_cast<PAD*
>( aItem ) )
469 return pad->GetRemoveUnconnected();
#define SKIP_CONNECTIVITY
virtual void Push(const wxString &aMessage=wxEmptyString, int aCommitFlags=0) override
Execute the changes.
virtual void Revert() override
Revert the commit by restoring the modified items state.
bool BuildConnectivity(PROGRESS_REPORTER *aReporter=nullptr)
Build or rebuild the board connectivity database for the board, especially the list of connected item...
void IncrementTimeStamp()
COMMIT & Modify(EDA_ITEM *aItem, BASE_SCREEN *aScreen=nullptr, RECURSE_MODE aRecurse=RECURSE_MODE::NO_RECURSE)
Modify a given item in the model.
virtual void Refresh(bool aEraseBackground=true, const wxRect *aRect=nullptr) override
A base class for most all the KiCad significant classes used in schematics and boards.
static const TOOL_EVENT ConnectivityChangedEvent
Selected item had a property changed (except movement)
Used when the right click button is pressed, or when the select tool is in effect.
An abstract base class for deriving all objects that can be added to a VIEW.
void UpdateAllItemsConditionally(int aUpdateFlags, std::function< bool(VIEW_ITEM *)> aCondition)
Update items in the view according to the given flags and condition.
static TOOL_ACTION zoneFillAll
static TOOL_ACTION zoneFill
static TOOL_ACTION zoneUnfill
static TOOL_ACTION zoneUnfillAll
static TOOL_ACTION zoneFillDirty
virtual KIGFX::PCB_VIEW * GetView() const override
Return a pointer to the #VIEW instance used in the panel.
void RedrawRatsnest()
Return the bounding box of the view that should be used if model is not valid.
The main frame for Pcbnew.
A progress reporter interface for use in multi-threaded environments.
TEARDROP_MANAGER manage and build teardrop areas A teardrop area is a polygonal area (a copper ZONE) ...
void UpdateTeardrops(BOARD_COMMIT &aCommit, const std::vector< BOARD_ITEM * > *dirtyPadsAndVias, const std::set< PCB_TRACK * > *dirtyTracks, bool aForceFullUpdate=false)
Update teardrops on a list of items.
A modified version of the wxInfoBar class that allows us to:
void RemoveAllButtons()
Remove all the buttons that have been added by the user.
void ShowMessageFor(const wxString &aMessage, int aTime, int aFlags=wxICON_INFORMATION, MESSAGE_TYPE aType=WX_INFOBAR::MESSAGE_TYPE::GENERIC)
Show the infobar with the provided message and icon for a specific period of time.
void AddButton(wxButton *aButton)
Add an already created button to the infobar.
@ GENERIC
GENERIC Are messages that do not have special handling.
Handle a list of polygons defining a copper zone.
PCB_LAYER_ID
A quick note on layer IDs:
@ ALL
All except INITIAL_ADD.
Class to handle a set of BOARD_ITEMs.
int64_t GetRunningMicroSecs()
An alternate way to calculate an elapsed time (in microsecondes) to class PROF_COUNTER.