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" ),
168 const std::map<KIID, EDA_ITEM*>& aItemMap )
const
182 if( ii != aItemMap.end() )
183 mainItem = ii->second;
187 if( ii != aItemMap.end() )
188 auxItem = ii->second;
201 aViolation.
items.emplace_back( item );
215 aViolation.
items.emplace_back( item );
226 const std::shared_ptr<RC_ITEM> rc_item = node->
m_RcItem;
234 if( rc_item->GetParent() )
235 return rc_item->GetParent()->GetUUID();
251 m_editFrame( aParentFrame ),
254 m_rcItemsProvider( nullptr )
268 wxWindowUpdateLocker updateLock(
m_view );
270 std::shared_ptr<RC_ITEM> selectedRcItem =
nullptr;
275 selectedRcItem = selectedNode ? selectedNode->
m_RcItem :
nullptr;
303 for(
int i = 0; i < count; ++i )
310 if( rcItem->GetMainItemID() !=
niluuid )
313 if( rcItem->GetAuxItemID() !=
niluuid )
316 if( rcItem->GetAuxItem2ID() !=
niluuid )
319 if( rcItem->GetAuxItem3ID() !=
niluuid )
324 if( marker->IsExcluded() && !marker->GetComment().IsEmpty() )
339 m_view->AssociateModel(
this );
343 m_view->AppendTextColumn( wxEmptyString, 0, wxDATAVIEW_CELL_INERT, wxCOL_WIDTH_AUTOSIZE );
353 if( candidate->m_RcItem == selectedRcItem )
379 if(
ToNode( aItem ) ==
nullptr )
393 wxDataViewItemArray& aChildren )
const
396 const std::vector<RC_TREE_NODE*>& children = node ? node->
m_Children :
m_tree;
399 aChildren.push_back(
ToItem( child ) );
401 return children.size();
406 wxDataViewItem
const& aItem,
407 unsigned int aCol )
const
410 const std::shared_ptr<RC_ITEM> rcItem = node->
m_RcItem;
425 msg =
_(
"Excluded warning: " );
427 msg =
_(
"Excluded error: " );
431 msg =
_(
"Warning: " );
435 msg =
_(
"Error: " );
439 msg += rcItem->GetErrorMessage();
444 msg =
_(
"Drawing Sheet" );
472 msg.Replace( wxS(
"\n" ), wxS(
" " ) );
479 wxDataViewItemAttr& aAttr )
const
489 aAttr.SetBold(
true );
496 wxColour textColour = wxSystemSettings::GetColour( wxSYS_COLOUR_LISTBOXTEXT );
499 if( brightness > 0.5 )
501 int lightness =
static_cast<int>( brightness * ( heading ? 50 : 60 ) );
502 aAttr.SetColour( textColour.ChangeLightness( lightness ) );
506 aAttr.SetColour( textColour.ChangeLightness( heading ? 170 : 165 ) );
509 aAttr.SetItalic(
true );
525 wxDataViewItem markerItem =
ToItem( aNode );
527 wxDataViewModel::ValueChanged( markerItem, 0 );
530 wxDataViewModel::ValueChanged(
ToItem( child ), 0 );
534 const std::shared_ptr<RC_ITEM> rcItem = aNode->
m_RcItem;
535 MARKER_BASE* marker = rcItem ? rcItem->GetParent() :
nullptr;
543 commentNode =
nullptr;
545 if( needsCommentNode && !commentNode )
548 wxDataViewItemArray newItems;
549 newItems.push_back(
ToItem( commentNode ) );
552 ItemsAdded( markerItem, newItems );
554 else if( commentNode && !needsCommentNode )
556 wxDataViewItemArray deletedItems;
557 deletedItems.push_back(
ToItem( commentNode ) );
560 ItemsDeleted( markerItem, deletedItems );
575 const std::shared_ptr<RC_ITEM> current_item = current_node ? current_node->
m_RcItem :
nullptr;
578 std::vector<RC_TREE_NODE*> to_delete;
579 std::vector<RC_TREE_NODE*> expanded;
581 if( aCurrentOnly && !current_item )
589 if(
m_view && aCurrentOnly )
594 expanded.push_back( node );
599 bool itemDeleted =
false;
615 bool excluded =
false;
620 if( aCurrentOnly && itemDeleted && lastGood >= 0 )
623 if( aCurrentOnly && rcItem != current_item )
629 if( excluded && !aIncludeExclusions )
632 if( i < (
int)
m_tree.size() )
635 wxDataViewItemArray childItems;
636 wxDataViewItem parentItem =
ToItem(
m_tree[i]->m_Parent );
640 childItems.push_back(
ToItem( child ) );
641 to_delete.push_back( child );
644 m_tree[i]->m_Children.clear();
645 ItemsDeleted( markerItem, childItems );
647 to_delete.push_back(
m_tree[i] );
649 ItemDeleted( parentItem, markerItem );
662 if(
m_view && aCurrentOnly && lastGood >= 0 )
666 wxDataViewItem item =
ToItem( node );
673 m_view->Select( selItem );
677 wxDataViewEvent selectEvent( wxEVT_COMMAND_DATAVIEW_SELECTION_CHANGED,
m_view, selItem );
678 m_view->GetEventHandler()->ProcessEvent( selectEvent );
695 currentNode = currentNode->
m_Parent;
699 if( candidate == currentNode )
702 prevMarker = candidate;
715 currentNode = currentNode->
m_Parent;
718 bool trigger = currentNode ==
nullptr;
722 if( candidate == currentNode )
728 nextMarker = candidate;
742 if( candidate->m_RcItem->GetParent() == aMarker )
755 if( candidate->m_RcItem->GetParent() == aMarker )
virtual SEVERITY GetSeverity(int aErrorCode) const
The base class for create windows for drawing purpose.
virtual EDA_ITEM * GetItem(const KIID &aId) 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
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)
Deletes 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)
Function To_User_Unit 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.