From 00d369ad5ac747219d45b5853f8f690248bfd045 Mon Sep 17 00:00:00 2001 From: dickelbeck Date: Thu, 10 Sep 2009 17:28:38 +0000 Subject: [PATCH] netclasses done --- CHANGELOG.txt | 7 +-- pcbnew/dialog_design_rules.cpp | 64 +++++++++---------- pcbnew/dialog_design_rules.h | 98 +++++++++++++++-------------- pcbnew/dialog_design_rules_base.cpp | 8 +-- pcbnew/dialog_design_rules_base.fbp | 10 +-- 5 files changed, 94 insertions(+), 93 deletions(-) diff --git a/CHANGELOG.txt b/CHANGELOG.txt index 6e23626ebc..ccd15bd2ba 100644 --- a/CHANGELOG.txt +++ b/CHANGELOG.txt @@ -7,12 +7,11 @@ email address. 2009-Sep-10 UPDATE Dick Hollenbeck ================================================================================ ++pcbnew - More NETCLASS work, started on the UI also. Almost done. Put NETCLASS support + Finished initial NETCLASS work, along with UI. Put NETCLASS support into DRC. Fixed DRC dialog so progress during DRC is sensible and visible. The specctra_export probably still needs a little work regarding VIAs. - Don't install this version of PCBNEW if you need stability. You can compile - and look but I would not install it quite yet. I compiled wxformbuilder - from source, so you may need to upgrade to load my *.fbp files. + I compiled wxformbuilder from source, so you may need to upgrade to + load my *.fbp files. Jean-Pierre @ todo: pcbnew/zones_test_and_combine_areas.cpp needs to use NETCLASS and not g_DesignSettings.m_TrackClearance diff --git a/pcbnew/dialog_design_rules.cpp b/pcbnew/dialog_design_rules.cpp index 187b707f57..9ca9f48bb3 100644 --- a/pcbnew/dialog_design_rules.cpp +++ b/pcbnew/dialog_design_rules.cpp @@ -84,6 +84,9 @@ void DIALOG_DESIGN_RULES::Init() // copy all NETs into m_AllNets by adding them as NETCUPs. + // @todo go fix m_Pcb->SynchronizeNetsAndNetClasses() so that the netcode==0 is not present in the BOARD::m_NetClasses + + NETCLASS* netclass; NETCLASSES& netclasses = m_Pcb->m_NetClasses; @@ -116,7 +119,7 @@ static bool sortByClassThenName( NETCUP* a, NETCUP* b ) if( a->clazz < b->clazz ) return true; - if( a->net < a->net ) + if( a->net < b->net ) return true; return false; @@ -179,16 +182,14 @@ void DIALOG_DESIGN_RULES::setRowItem( wxListCtrl* aListCtrl, int aRow, NETCUP* a */ void DIALOG_DESIGN_RULES::FillListBoxWithNetNames( wxListCtrl* aListCtrl, const wxString& aNetClass ) { - aListCtrl->ClearAll(); - -#if 0 // out of time for troubleshooting this now. + aListCtrl->DeleteAllItems(); PNETCUPS ptrList; // get a subset of m_AllNets in pointer form, sorted as desired. makePointers( &ptrList, aNetClass ); -#if defined(DEBUG) +#if 0 && defined(DEBUG) int r = 0; for( PNETCUPS::iterator i = ptrList.begin(); i!=ptrList.end(); ++i, ++r ) { @@ -206,9 +207,6 @@ void DIALOG_DESIGN_RULES::FillListBoxWithNetNames( wxListCtrl* aListCtrl, const } aListCtrl->Show(); - -#endif - } @@ -469,42 +467,42 @@ void DIALOG_DESIGN_RULES::OnRightCBSelection( wxCommandEvent& event ) } -/* Called on clicking the "<<<" or Copy Right to Left button: - * Selected items are moved from the right list to the left list - */ +void DIALOG_DESIGN_RULES::moveSelectedItems( wxListCtrl* src, const wxString& newClassName ) +{ + wxListItem item; + wxString netName; + + for( int row = 0; row < src->GetItemCount(); ++row ) + { + if( !src->GetItemState( row, wxLIST_STATE_SELECTED ) ) + continue; + + item.SetColumn( 0 ); + item.SetId( row ); + + src->GetItem( item ); + netName = item.GetText(); + + setNetClass( netName, newClassName == wildCard ? NETCLASS::Default : newClassName ); + } +} + void DIALOG_DESIGN_RULES::OnRightToLeftCopyButton( wxCommandEvent& event ) { - wxString oldClassName = m_leftClassChoice->GetStringSelection(); - wxString newClassName = m_rightClassChoice->GetStringSelection(); + wxString newClassName = m_leftClassChoice->GetStringSelection(); - wxASSERT( oldClassName != wxEmptyString ); - wxASSERT( newClassName != wxEmptyString ); - - for( int row = 0; row < m_rightListCtrl->GetItemCount(); ++row ) - { - if( !m_rightListCtrl->GetItemState( row, wxLIST_STATE_SELECTED ) ) - continue; - -/* - @todo: get the netName, call setNetClass() - wxString netName = m_rightListCtrl->OnGetItemText( row, 0 ); - - setNetClass( netName, newClassName == wildCard ? NETCLASS::Default : newClassName ); -*/ - } + moveSelectedItems( m_rightListCtrl, newClassName ); FillListBoxWithNetNames( m_leftListCtrl, m_leftClassChoice->GetStringSelection() ); FillListBoxWithNetNames( m_rightListCtrl, m_rightClassChoice->GetStringSelection() ); } - -/* Called on clicking the ">>>" or Copy Left to Right button: - * Selected items are moved from the left list to the right list - */ void DIALOG_DESIGN_RULES::OnLeftToRightCopyButton( wxCommandEvent& event ) { - // @todo factor code from above, or combine the two functions. + wxString newClassName = m_rightClassChoice->GetStringSelection(); + + moveSelectedItems( m_leftListCtrl, newClassName ); FillListBoxWithNetNames( m_leftListCtrl, m_leftClassChoice->GetStringSelection() ); FillListBoxWithNetNames( m_rightListCtrl, m_rightClassChoice->GetStringSelection() ); diff --git a/pcbnew/dialog_design_rules.h b/pcbnew/dialog_design_rules.h index 1bc07c8e39..29860243ae 100644 --- a/pcbnew/dialog_design_rules.h +++ b/pcbnew/dialog_design_rules.h @@ -15,72 +15,76 @@ struct NETCUP clazz = aClass; } - wxString net; - wxString clazz; + wxString net; ///< a net name + wxString clazz; ///< a class name }; + typedef std::vector NETCUPS; typedef std::vector PNETCUPS; class DIALOG_DESIGN_RULES : public DIALOG_DESIGN_RULES_BASE { - private: - static const wxString wildCard; +private: - WinEDA_PcbFrame* m_Parent; - BOARD* m_Pcb; + static const wxString wildCard; - std::vector m_NetClasses; - NETCUPS m_AllNets; + WinEDA_PcbFrame* m_Parent; + BOARD* m_Pcb; - private: - void OnLayerCountClick( wxCommandEvent& event ); - void OnLayerGridLeftClick( wxGridEvent& event ){ event.Skip(); } - void OnLayerGridRighttClick( wxGridEvent& event ){ event.Skip(); } - void OnNetClassesGridLeftClick( wxGridEvent& event ){ event.Skip(); } - void OnNetClassesGridRightClick( wxGridEvent& event ){ event.Skip(); } - void OnCancelButtonClick( wxCommandEvent& event ); - void OnOkButtonClick( wxCommandEvent& event ); - void OnAddNetclassClick( wxCommandEvent& event ); - void OnRemoveNetclassClick( wxCommandEvent& event ); - void OnLeftCBSelection( wxCommandEvent& event ); - void OnRightCBSelection( wxCommandEvent& event ); - void OnRightToLeftCopyButton( wxCommandEvent& event ); - void OnLeftToRightCopyButton( wxCommandEvent& event ); - void OnLeftSelectAllButton( wxCommandEvent& event ); - void OnRightSelectAllButton( wxCommandEvent& event ); - bool TestDataValidity( ); - void Init(); - void InitRulesList(); - void InitializeRulesSelectionBoxes(); - void CopyRulesListToBoard(); - void SetRoutableLayerStatus(); - void FillListBoxWithNetNames( wxListCtrl* aListCtrl, const wxString& aNetClass ); + std::vector m_NetClasses; + NETCUPS m_AllNets; - /** - * Function swapNetClass - * replaces one net class name with another in the master list, m_AllNets. - */ - void swapNetClass( const wxString& oldClass, const wxString& newClass ) +private: + void OnLayerCountClick( wxCommandEvent& event ); + void OnLayerGridLeftClick( wxGridEvent& event ){ event.Skip(); } + void OnLayerGridRighttClick( wxGridEvent& event ){ event.Skip(); } + void OnNetClassesGridLeftClick( wxGridEvent& event ){ event.Skip(); } + void OnNetClassesGridRightClick( wxGridEvent& event ){ event.Skip(); } + void OnCancelButtonClick( wxCommandEvent& event ); + void OnOkButtonClick( wxCommandEvent& event ); + void OnAddNetclassClick( wxCommandEvent& event ); + void OnRemoveNetclassClick( wxCommandEvent& event ); + void OnLeftCBSelection( wxCommandEvent& event ); + void OnRightCBSelection( wxCommandEvent& event ); + void OnRightToLeftCopyButton( wxCommandEvent& event ); + void OnLeftToRightCopyButton( wxCommandEvent& event ); + void OnLeftSelectAllButton( wxCommandEvent& event ); + void OnRightSelectAllButton( wxCommandEvent& event ); + bool TestDataValidity( ); + void Init(); + void InitRulesList(); + void InitializeRulesSelectionBoxes(); + void CopyRulesListToBoard(); + void SetRoutableLayerStatus(); + void FillListBoxWithNetNames( wxListCtrl* aListCtrl, const wxString& aNetClass ); + + /** + * Function swapNetClass + * replaces one net class name with another in the master list, m_AllNets. + */ + void swapNetClass( const wxString& oldClass, const wxString& newClass ) + { + for( NETCUPS::iterator i = m_AllNets.begin(); i!=m_AllNets.end(); ++i ) { - for( NETCUPS::iterator i = m_AllNets.begin(); i!=m_AllNets.end(); ++i ) - { - if( i->clazz == oldClass ) - i->clazz = newClass; - } + if( i->clazz == oldClass ) + i->clazz = newClass; } + } - void makePointers( PNETCUPS* aList, const wxString& aNetClassName ); + void makePointers( PNETCUPS* aList, const wxString& aNetClassName ); - void setNetClass( const wxString& aNetName, const wxString& aClassName ); + void setNetClass( const wxString& aNetName, const wxString& aClassName ); - static void setRowItem( wxListCtrl* aListCtrl, int aRow, NETCUP* aNetAndClass ); + static void setRowItem( wxListCtrl* aListCtrl, int aRow, NETCUP* aNetAndClass ); + + void moveSelectedItems( wxListCtrl* src, const wxString& newClassName ); - public: - DIALOG_DESIGN_RULES( WinEDA_PcbFrame* parent ); - ~DIALOG_DESIGN_RULES( ) { }; +public: + DIALOG_DESIGN_RULES( WinEDA_PcbFrame* parent ); + ~DIALOG_DESIGN_RULES( ) { }; }; diff --git a/pcbnew/dialog_design_rules_base.cpp b/pcbnew/dialog_design_rules_base.cpp index 54245ceb91..cce56e34b0 100644 --- a/pcbnew/dialog_design_rules_base.cpp +++ b/pcbnew/dialog_design_rules_base.cpp @@ -94,7 +94,7 @@ DIALOG_DESIGN_RULES_BASE::DIALOG_DESIGN_RULES_BASE( wxWindow* parent, wxWindowID m_leftClassChoice->SetSelection( 0 ); leftNetSelectBoxSizer->Add( m_leftClassChoice, 0, wxALL|wxEXPAND, 5 ); - m_leftListCtrl = new wxListCtrl( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLC_HRULES|wxLC_REPORT|wxLC_SINGLE_SEL|wxLC_VRULES ); + m_leftListCtrl = new wxListCtrl( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLC_HRULES|wxLC_REPORT|wxLC_VRULES ); m_leftListCtrl->SetMinSize( wxSize( 220,-1 ) ); leftNetSelectBoxSizer->Add( m_leftListCtrl, 1, wxALL|wxEXPAND, 5 ); @@ -131,14 +131,14 @@ DIALOG_DESIGN_RULES_BASE::DIALOG_DESIGN_RULES_BASE( wxWindow* parent, wxWindowID m_rightClassChoice->SetSelection( 0 ); rghtNetSelectBoxSizer->Add( m_rightClassChoice, 0, wxALL|wxEXPAND, 5 ); - m_rightListCtrl = new wxListCtrl( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLC_HRULES|wxLC_REPORT|wxLC_SINGLE_SEL|wxLC_VRULES ); + m_rightListCtrl = new wxListCtrl( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLC_HRULES|wxLC_REPORT|wxLC_VRULES ); m_rightListCtrl->SetMinSize( wxSize( 220,-1 ) ); rghtNetSelectBoxSizer->Add( m_rightListCtrl, 1, wxALL|wxEXPAND, 5 ); - sbSizer4->Add( rghtNetSelectBoxSizer, 1, wxALL|wxEXPAND, 5 ); + sbSizer4->Add( rghtNetSelectBoxSizer, 0, wxALL|wxEXPAND, 5 ); - bMainSizer->Add( sbSizer4, 1, wxALL|wxEXPAND, 5 ); + bMainSizer->Add( sbSizer4, 2, wxALL|wxEXPAND, 5 ); wxStaticBoxSizer* sbSizer2; sbSizer2 = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Messages:") ), wxHORIZONTAL ); diff --git a/pcbnew/dialog_design_rules_base.fbp b/pcbnew/dialog_design_rules_base.fbp index f218c1061c..acac7ea2f6 100644 --- a/pcbnew/dialog_design_rules_base.fbp +++ b/pcbnew/dialog_design_rules_base.fbp @@ -88,7 +88,7 @@ 5 wxALL|wxEXPAND 1 - + wxID_ANY Net Classes: @@ -399,7 +399,7 @@ 5 wxALL|wxEXPAND - 1 + 2 wxID_ANY Membership: @@ -492,7 +492,7 @@ protected - wxLC_HRULES|wxLC_REPORT|wxLC_SINGLE_SEL|wxLC_VRULES + wxLC_HRULES|wxLC_REPORT|wxLC_VRULES @@ -802,7 +802,7 @@ 5 wxALL|wxEXPAND - 1 + 0 rghtNetSelectBoxSizer @@ -883,7 +883,7 @@ protected - wxLC_HRULES|wxLC_REPORT|wxLC_SINGLE_SEL|wxLC_VRULES + wxLC_HRULES|wxLC_REPORT|wxLC_VRULES