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" ),
160 msg += wxString::Format( wxS(
" %s\n" ),
m_parent->GetComment() );
167 SEVERITY aSeverity,
const std::map<KIID, EDA_ITEM*>& aItemMap )
const
188 if( ii != aItemMap.end() )
189 mainItem = ii->second;
193 if( ii != aItemMap.end() )
194 auxItem = ii->second;
207 aViolation.
items.emplace_back( item );
221 aViolation.
items.emplace_back( item );
232 const std::shared_ptr<RC_ITEM> rc_item = node->
m_RcItem;
240 if( rc_item->GetParent() )
241 return rc_item->GetParent()->GetUUID();
274 wxWindowUpdateLocker updateLock(
m_view );
276 std::shared_ptr<RC_ITEM> selectedRcItem =
nullptr;
281 selectedRcItem = selectedNode ? selectedNode->
m_RcItem :
nullptr;
309 for(
int i = 0; i < count; ++i )
316 if( rcItem->GetMainItemID() !=
niluuid )
319 if( rcItem->GetAuxItemID() !=
niluuid )
322 if( rcItem->GetAuxItem2ID() !=
niluuid )
325 if( rcItem->GetAuxItem3ID() !=
niluuid )
330 if( marker->IsExcluded() && !marker->GetComment().IsEmpty() )
345 m_view->AssociateModel(
this );
349 m_view->AppendTextColumn( wxEmptyString, 0, wxDATAVIEW_CELL_INERT, wxCOL_WIDTH_AUTOSIZE );
359 if( candidate->m_RcItem == selectedRcItem )
385 if(
ToNode( aItem ) ==
nullptr )
399 wxDataViewItemArray& aChildren )
const
402 const std::vector<RC_TREE_NODE*>& children = node ? node->
m_Children :
m_tree;
405 aChildren.push_back(
ToItem( child ) );
407 return children.size();
412 unsigned int aCol )
const
414 if( !aItem.IsOk() ||
m_view->IsFrozen() )
418 const std::shared_ptr<RC_ITEM> rcItem = node->
m_RcItem;
433 msg =
_(
"Excluded warning: " );
435 msg =
_(
"Excluded error: " );
439 msg =
_(
"Warning: " );
443 msg =
_(
"Error: " );
447 msg += rcItem->GetErrorMessage(
true );
452 msg =
_(
"Drawing Sheet" );
454 item =
m_editFrame->ResolveItem( rcItem->GetMainItemID() );
459 item =
m_editFrame->ResolveItem( rcItem->GetAuxItemID() );
463 item =
m_editFrame->ResolveItem( rcItem->GetAuxItem2ID() );
467 item =
m_editFrame->ResolveItem( rcItem->GetAuxItem3ID() );
480 msg.Replace( wxS(
"\n" ), wxS(
" " ) );
487 wxDataViewItemAttr& aAttr )
const
489 if( !aItem.IsOk() ||
m_view->IsFrozen() )
499 aAttr.SetBold(
true );
506 wxColour textColour = wxSystemSettings::GetColour( wxSYS_COLOUR_LISTBOXTEXT );
509 if( brightness > 0.5 )
511 int lightness =
static_cast<int>( brightness * ( heading ? 50 : 60 ) );
512 aAttr.SetColour( textColour.ChangeLightness( lightness ) );
516 aAttr.SetColour( textColour.ChangeLightness( heading ? 170 : 165 ) );
519 aAttr.SetItalic(
true );
535 wxDataViewItem markerItem =
ToItem( aNode );
537 wxDataViewModel::ValueChanged( markerItem, 0 );
540 wxDataViewModel::ValueChanged(
ToItem( child ), 0 );
544 const std::shared_ptr<RC_ITEM> rcItem = aNode->
m_RcItem;
545 MARKER_BASE* marker = rcItem ? rcItem->GetParent() :
nullptr;
553 commentNode =
nullptr;
555 if( needsCommentNode && !commentNode )
558 wxDataViewItemArray newItems;
559 newItems.push_back(
ToItem( commentNode ) );
562 ItemsAdded( markerItem, newItems );
564 else if( commentNode && !needsCommentNode )
566 wxDataViewItemArray deletedItems;
567 deletedItems.push_back(
ToItem( commentNode ) );
570 ItemsDeleted( markerItem, deletedItems );
585 const std::shared_ptr<RC_ITEM> current_item = current_node ? current_node->
m_RcItem :
nullptr;
588 std::vector<RC_TREE_NODE*> to_delete;
589 std::vector<RC_TREE_NODE*> expanded;
591 if( aCurrentOnly && !current_item )
599 if(
m_view && aCurrentOnly )
604 expanded.push_back( node );
609 bool itemDeleted =
false;
625 bool excluded =
false;
630 if( aCurrentOnly && itemDeleted && lastGood >= 0 )
633 if( aCurrentOnly && rcItem != current_item )
639 if( excluded && !aIncludeExclusions )
642 if( i < (
int)
m_tree.size() )
645 wxDataViewItemArray childItems;
646 wxDataViewItem parentItem =
ToItem(
m_tree[i]->m_Parent );
650 childItems.push_back(
ToItem( child ) );
651 to_delete.push_back( child );
654 m_tree[i]->m_Children.clear();
655 ItemsDeleted( markerItem, childItems );
657 to_delete.push_back(
m_tree[i] );
659 ItemDeleted( parentItem, markerItem );
672 if(
m_view && aCurrentOnly && lastGood >= 0 )
676 wxDataViewItem item =
ToItem( node );
683 m_view->Select( selItem );
687 wxDataViewEvent selectEvent( wxEVT_COMMAND_DATAVIEW_SELECTION_CHANGED,
m_view, selItem );
688 m_view->GetEventHandler()->ProcessEvent( selectEvent );
705 currentNode = currentNode->
m_Parent;
709 if( candidate == currentNode )
712 prevMarker = candidate;
725 currentNode = currentNode->
m_Parent;
728 bool trigger = currentNode ==
nullptr;
732 if( candidate == currentNode )
738 nextMarker = candidate;
750 wxCHECK( !
m_view->IsFrozen(), );
754 if( candidate->m_RcItem->GetParent() == aMarker )
765 wxCHECK( !
m_view->IsFrozen(), );
769 if( candidate->m_RcItem->GetParent() == aMarker )
The base class for create windows for drawing purpose.
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
wxString GetErrorText(bool aTranslate) 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)
virtual wxString GetViolatingRuleDesc(bool aTranslate) const
MARKER_BASE * GetParent() const
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
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.
wxString m_errorMessage
A message describing the details of this specific error.
wxString GetSettingsKey() const
virtual wxString GetErrorMessage(bool aTranslate) 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.
VECTOR2< int32_t > VECTOR2I