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 
  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();
 
 
  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" );
 
  445            item = 
m_editFrame->ResolveItem( rcItem->GetMainItemID() );
 
  450        item = 
m_editFrame->ResolveItem( rcItem->GetAuxItemID() );
 
  454        item = 
m_editFrame->ResolveItem( rcItem->GetAuxItem2ID() );
 
  458        item = 
m_editFrame->ResolveItem( rcItem->GetAuxItem3ID() );
 
  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 )
 
 
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
 
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)
 
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
 
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.
 
VECTOR2< int32_t > VECTOR2I