25#include <wx/wupdlock.h>
26#include <wx/dataview.h>
27#include <wx/settings.h>
36#define WX_DATAVIEW_WINDOW_PADDING 6
50 return wxString::Format( wxT(
"@(%s, %s)" ),
101 const std::map<KIID, EDA_ITEM*>& aItemMap )
const
106 severity += wxT(
" (excluded)" );
113 if( ii != aItemMap.end() )
114 mainItem = ii->second;
118 if( ii != aItemMap.end() )
119 auxItem = ii->second;
128 if( mainItem && auxItem )
130 msg.Printf( wxT(
"[%s]: %s\n %s; %s\n %s: %s\n %s: %s\n" ),
142 msg.Printf( wxT(
"[%s]: %s\n %s; %s\n %s: %s\n" ),
152 msg.Printf( wxT(
"[%s]: %s\n %s; %s\n" ),
167 SEVERITY aSeverity,
const std::map<KIID, EDA_ITEM*>& aItemMap )
const
179 if( ii != aItemMap.end() )
180 mainItem = ii->second;
184 if( ii != aItemMap.end() )
185 auxItem = ii->second;
198 aViolation.
items.emplace_back( item );
212 aViolation.
items.emplace_back( item );
223 const std::shared_ptr<RC_ITEM> rc_item = node->
m_RcItem;
231 if( rc_item->GetParent() )
232 return rc_item->GetParent()->GetUUID();
248 m_editFrame( aParentFrame ),
251 m_rcItemsProvider( nullptr )
265 wxWindowUpdateLocker updateLock(
m_view );
267 std::shared_ptr<RC_ITEM> selectedRcItem =
nullptr;
272 selectedRcItem = selectedNode ? selectedNode->
m_RcItem :
nullptr;
300 for(
int i = 0; i < count; ++i )
307 if( rcItem->GetMainItemID() !=
niluuid )
310 if( rcItem->GetAuxItemID() !=
niluuid )
313 if( rcItem->GetAuxItem2ID() !=
niluuid )
316 if( rcItem->GetAuxItem3ID() !=
niluuid )
321 if( marker->IsExcluded() && !marker->GetComment().IsEmpty() )
336 m_view->AssociateModel(
this );
340 m_view->AppendTextColumn( wxEmptyString, 0, wxDATAVIEW_CELL_INERT, wxCOL_WIDTH_AUTOSIZE );
350 if( candidate->m_RcItem == selectedRcItem )
376 if(
ToNode( aItem ) ==
nullptr )
390 wxDataViewItemArray& aChildren )
const
393 const std::vector<RC_TREE_NODE*>& children = node ? node->
m_Children :
m_tree;
396 aChildren.push_back(
ToItem( child ) );
398 return children.size();
403 unsigned int aCol )
const
405 if( !aItem.IsOk() ||
m_view->IsFrozen() )
409 const std::shared_ptr<RC_ITEM> rcItem = node->
m_RcItem;
424 msg =
_(
"Excluded warning: " );
426 msg =
_(
"Excluded error: " );
430 msg =
_(
"Warning: " );
434 msg =
_(
"Error: " );
438 msg += rcItem->GetErrorMessage();
443 msg =
_(
"Drawing Sheet" );
471 msg.Replace( wxS(
"\n" ), wxS(
" " ) );
478 wxDataViewItemAttr& aAttr )
const
480 if( !aItem.IsOk() ||
m_view->IsFrozen() )
490 aAttr.SetBold(
true );
497 wxColour textColour = wxSystemSettings::GetColour( wxSYS_COLOUR_LISTBOXTEXT );
500 if( brightness > 0.5 )
502 int lightness =
static_cast<int>( brightness * ( heading ? 50 : 60 ) );
503 aAttr.SetColour( textColour.ChangeLightness( lightness ) );
507 aAttr.SetColour( textColour.ChangeLightness( heading ? 170 : 165 ) );
510 aAttr.SetItalic(
true );
526 wxDataViewItem markerItem =
ToItem( aNode );
528 wxDataViewModel::ValueChanged( markerItem, 0 );
531 wxDataViewModel::ValueChanged(
ToItem( child ), 0 );
535 const std::shared_ptr<RC_ITEM> rcItem = aNode->
m_RcItem;
536 MARKER_BASE* marker = rcItem ? rcItem->GetParent() :
nullptr;
544 commentNode =
nullptr;
546 if( needsCommentNode && !commentNode )
549 wxDataViewItemArray newItems;
550 newItems.push_back(
ToItem( commentNode ) );
553 ItemsAdded( markerItem, newItems );
555 else if( commentNode && !needsCommentNode )
557 wxDataViewItemArray deletedItems;
558 deletedItems.push_back(
ToItem( commentNode ) );
561 ItemsDeleted( markerItem, deletedItems );
576 const std::shared_ptr<RC_ITEM> current_item = current_node ? current_node->
m_RcItem :
nullptr;
579 std::vector<RC_TREE_NODE*> to_delete;
580 std::vector<RC_TREE_NODE*> expanded;
582 if( aCurrentOnly && !current_item )
590 if(
m_view && aCurrentOnly )
595 expanded.push_back( node );
600 bool itemDeleted =
false;
616 bool excluded =
false;
621 if( aCurrentOnly && itemDeleted && lastGood >= 0 )
624 if( aCurrentOnly && rcItem != current_item )
630 if( excluded && !aIncludeExclusions )
633 if( i < (
int)
m_tree.size() )
636 wxDataViewItemArray childItems;
637 wxDataViewItem parentItem =
ToItem(
m_tree[i]->m_Parent );
641 childItems.push_back(
ToItem( child ) );
642 to_delete.push_back( child );
645 m_tree[i]->m_Children.clear();
646 ItemsDeleted( markerItem, childItems );
648 to_delete.push_back(
m_tree[i] );
650 ItemDeleted( parentItem, markerItem );
663 if(
m_view && aCurrentOnly && lastGood >= 0 )
667 wxDataViewItem item =
ToItem( node );
674 m_view->Select( selItem );
678 wxDataViewEvent selectEvent( wxEVT_COMMAND_DATAVIEW_SELECTION_CHANGED,
m_view, selItem );
679 m_view->GetEventHandler()->ProcessEvent( selectEvent );
696 currentNode = currentNode->
m_Parent;
700 if( candidate == currentNode )
703 prevMarker = candidate;
716 currentNode = currentNode->
m_Parent;
719 bool trigger = currentNode ==
nullptr;
723 if( candidate == currentNode )
729 nextMarker = candidate;
741 wxCHECK( !
m_view->IsFrozen(), );
745 if( candidate->m_RcItem->GetParent() == aMarker )
756 wxCHECK( !
m_view->IsFrozen(), );
760 if( candidate->m_RcItem->GetParent() == aMarker )
virtual SEVERITY GetSeverity(int aErrorCode) const
The base class for create windows for drawing purpose.
virtual EDA_ITEM * ResolveItem(const KIID &aId, bool aAllowNullptrReturn=false) const
Fetch an item by KIID.
A base class for most all the KiCad significant classes used in schematics and boards.
virtual VECTOR2I GetPosition() const
virtual wxString GetItemDescription(UNITS_PROVIDER *aUnitsProvider, bool aFull) const
Return a user-visible description string of this item.
A color representation with 4 components: red, green, blue, alpha.
double GetBrightness() const
Returns the brightness value of the color ranged from 0.0 to 1.0.
wxString AsString() const
Marker are mainly used to show a DRC or ERC error or warning.
virtual SEVERITY GetSeverity() const
enum MARKER_T GetMarkerType() const
wxString GetComment() const
virtual void GetJsonViolation(RC_JSON::VIOLATION &aViolation, UNITS_PROVIDER *aUnitsProvider, SEVERITY aSeverity, const std::map< KIID, EDA_ITEM * > &aItemMap) const
Translate this object into an RC_JSON::VIOLATION object.
static wxString getSeverityString(SEVERITY aSeverity)
void AddItem(EDA_ITEM *aItem)
MARKER_BASE * m_parent
The marker this item belongs to, if any.
virtual KIID GetMainItemID() const
virtual KIID GetAuxItemID() const
wxString GetErrorText() const
virtual wxString ShowReport(UNITS_PROVIDER *aUnitsProvider, SEVERITY aSeverity, const std::map< KIID, EDA_ITEM * > &aItemMap) const
Translate this object into a text string suitable for saving to disk in a report.
virtual wxString GetErrorMessage() const
wxString m_errorMessage
A message describing the details of this specific error.
wxString GetSettingsKey() const
virtual wxString GetViolatingRuleDesc() const
void SetItems(const KIIDS &aIds)
void GetValue(wxVariant &aVariant, wxDataViewItem const &aItem, unsigned int aCol) const override
Called by the wxDataView to fetch an item's value.
std::vector< RC_TREE_NODE * > m_tree
unsigned int GetChildren(wxDataViewItem const &aItem, wxDataViewItemArray &aChildren) const override
EDA_DRAW_FRAME * m_editFrame
static wxDataViewItem ToItem(RC_TREE_NODE const *aNode)
void SelectMarker(const MARKER_BASE *aMarker)
RC_TREE_MODEL(EDA_DRAW_FRAME *aParentFrame, wxDataViewCtrl *aView)
static RC_TREE_NODE * ToNode(wxDataViewItem aItem)
void ValueChanged(RC_TREE_NODE *aNode)
void Update(std::shared_ptr< RC_ITEMS_PROVIDER > aProvider, int aSeverities)
bool GetAttr(wxDataViewItem const &aItem, unsigned int aCol, wxDataViewItemAttr &aAttr) const override
Called by the wxDataView to fetch an item's formatting.
void DeleteItems(bool aCurrentOnly, bool aIncludeExclusions, bool aDeep)
Delete the current item or all items.
void DeleteCurrentItem(bool aDeep)
wxDataViewItem GetParent(wxDataViewItem const &aItem) const override
void CenterMarker(const MARKER_BASE *aMarker)
static KIID ToUUID(wxDataViewItem aItem)
std::shared_ptr< RC_ITEMS_PROVIDER > m_rcItemsProvider
bool IsContainer(wxDataViewItem const &aItem) const override
void rebuildModel(std::shared_ptr< RC_ITEMS_PROVIDER > aProvider, int aSeverities)
std::shared_ptr< RC_ITEM > m_RcItem
std::vector< RC_TREE_NODE * > m_Children
const EDA_IU_SCALE & GetIuScale() const
wxString MessageTextFromValue(double aValue, bool aAddUnitLabel=true, EDA_DATA_TYPE aType=EDA_DATA_TYPE::DISTANCE) const
A lower-precision version of StringFromValue().
EDA_UNITS GetUserUnits() const
KICOMMON_API double ToUserUnit(const EDA_IU_SCALE &aIuScale, EDA_UNITS aUnit, double aValue)
Convert aValue in internal units to the appropriate user units defined by aUnit.
static wxString showCoord(UNITS_PROVIDER *aUnitsProvider, const VECTOR2I &aPos)
std::vector< AFFECTED_ITEM > items
Functions to provide common constants and other functions to assist in making a consistent UI.