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,
PR_CAN_ABORT );
90 m_filler->SetProgressReporter( reporter.get() );
93 if(
m_filler->Fill( toFill,
true, aCaller ) )
96 getEditFrame<PCB_EDIT_FRAME>()->m_ZoneFillsDirty =
false;
127 frame = getEditFrame<PCB_EDIT_FRAME>();
130 std::unique_ptr<WX_PROGRESS_REPORTER> reporter;
132 std::vector<ZONE*> toFill;
139 toFill.push_back( zone );
141 m_filler = std::make_unique<ZONE_FILLER>(
board(), &commit );
143 if( !aHeadless && !
board()->GetDesignSettings().m_DRCEngine->RulesValid() )
146 wxHyperlinkCtrl* button =
new wxHyperlinkCtrl( infobar, wxID_ANY,
_(
"Show DRC rules" ), wxEmptyString );
148 button->Bind( wxEVT_COMMAND_HYPERLINK,
149 std::function<
void( wxHyperlinkEvent& aEvent )>(
150 [
frame]( wxHyperlinkEvent& aEvent )
152 frame->ShowBoardSetupDialog(
_(
"Rules" ) );
158 infobar->
ShowMessageFor(
_(
"Zone fills may be inaccurate. DRC rules contain errors." ), 10000,
164 m_filler->SetProgressReporter( aReporter );
166 else if( !aHeadless )
168 reporter = std::make_unique<WX_PROGRESS_REPORTER>( aCaller,
_(
"Fill All Zones" ), 5,
PR_CAN_ABORT );
169 m_filler->SetProgressReporter( reporter.get() );
174 if(
m_filler->GetProgressReporter() )
175 m_filler->GetProgressReporter()->AdvancePhase();
179 frame->m_ZoneFillsDirty =
false;
193 frame->UpdateUserInterface();
209 std::vector<ZONE*> toFill;
214 toFill.push_back( zone );
231 std::unique_ptr<WX_PROGRESS_REPORTER> reporter;
234 m_filler = std::make_unique<ZONE_FILLER>(
board(), &commit );
236 if( !
board()->GetDesignSettings().m_DRCEngine->RulesValid() )
239 wxHyperlinkCtrl* button =
new wxHyperlinkCtrl( infobar, wxID_ANY,
_(
"Show DRC rules" ), wxEmptyString );
241 button->Bind( wxEVT_COMMAND_HYPERLINK,
242 std::function<
void( wxHyperlinkEvent& aLocEvent )>(
243 [
frame]( wxHyperlinkEvent& aLocEvent )
245 frame->ShowBoardSetupDialog(
_(
"Rules" ) );
251 infobar->
ShowMessageFor(
_(
"Zone fills may be inaccurate. DRC rules contain errors." ), 10000,
255 for(
ZONE* zone : toFill )
257 zone->GetLayerSet().RunOnLayers(
260 pts += zone->GetFilledPolysList( layer )->FullPointCount();
265 wxString title = wxString::Format(
_(
"Refill %d Zones" ), (
int) toFill.size() );
267 reporter = std::make_unique<WX_PROGRESS_REPORTER>(
frame, title, 5,
PR_CAN_ABORT );
268 m_filler->SetProgressReporter( reporter.get() );
285 wxHyperlinkCtrl* button =
new wxHyperlinkCtrl( infobar, wxID_ANY,
_(
"Open Preferences" ),
288 button->Bind( wxEVT_COMMAND_HYPERLINK, std::function<
void( wxHyperlinkEvent& )>(
289 [
this]( wxHyperlinkEvent& )
291 getEditFrame<PCB_EDIT_FRAME>()->ShowPreferences(
_(
"Editing Options" ),
_(
"PCB Editor" ) );
296 infobar->
ShowMessageFor(
_(
"Automatic refill of zones can be turned off in Preferences if it becomes "
302 frame->UpdateUserInterface();
323 std::vector<ZONE*> toFill;
327 toFill.push_back( passedZone );
338 if(
ZONE* zone =
dynamic_cast<ZONE*
>( item ) )
339 toFill.push_back( zone );
353 std::unique_ptr<WX_PROGRESS_REPORTER> reporter;
355 m_filler = std::make_unique<ZONE_FILLER>(
board(), &commit );
357 reporter = std::make_unique<WX_PROGRESS_REPORTER>(
frame(),
_(
"Fill Zone" ), 5,
PR_CAN_ABORT );
358 m_filler->SetProgressReporter( reporter.get() );
362 reporter->AdvancePhase();
393 std::vector<ZONE*> toUnfill;
397 if(
ZONE* zone =
dynamic_cast<ZONE*
>( item ) )
398 toUnfill.push_back( zone );
402 if( toUnfill.empty() )
410 for(
ZONE* zone : toUnfill )
447 return m_filler->GetProgressReporter();
471 return via->GetRemoveUnconnected();
473 else if(
PAD*
pad =
dynamic_cast<PAD*
>( aItem ) )
475 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.