This patch adds support to hide individual nets from ratsnest by adding an
extra tickbox to the 'List nets' dialog.
The ratsnest visibility is stored in NETINFO_ITEM, which I'm not sure is
the right place to put it. I tried using IsVisible/SetVisible from RN_NET,
but that doesn't work because RN_NET items are constantly deleted and
recreated and I couldn't see a straightforward way to make this
information permanent.
This fixes lp:1457668.
aiju
diff --git a/pcbnew/class_netinfo.h b/pcbnew/class_netinfo.h
index f77b0e3..b7898e2 100644
--- a/pcbnew/class_netinfo.h
+++ b/pcbnew/class_netinfo.h
@@ -140,6 +140,8 @@ private:
BOARD* m_parent; ///< The parent board the net belongs to.
+ bool m_ratsnest_visible;
+
public:
D_PADS& Pads() { return m_PadInNetList; }
@@ -353,6 +355,16 @@ public:
{
return m_parent;
}
+
+ bool IsRatsnestVisible(void)
+ {
+ return m_ratsnest_visible;
+ }
+
+ void SetRatsnestVisible(bool aVis)
+ {
+ m_ratsnest_visible = aVis;
+ }
};
diff --git a/pcbnew/class_netinfo_item.cpp b/pcbnew/class_netinfo_item.cpp
index c52e973..e789fa9 100644
--- a/pcbnew/class_netinfo_item.cpp
+++ b/pcbnew/class_netinfo_item.cpp
@@ -58,6 +58,8 @@ NETINFO_ITEM::NETINFO_ITEM( BOARD* aParent, const wxString& aNetName, int aNetCo
// general buffer of ratsnest
m_RatsnestEndIdx = 0; // Ending point of ratsnests of this net
+ m_ratsnest_visible = true;
+
m_NetClassName = NETCLASS::Default;
}
diff --git a/pcbnew/dialogs/dialog_select_net_from_list.cpp b/pcbnew/dialogs/dialog_select_net_from_list.cpp
index 01ad563..f4539aa 100644
--- a/pcbnew/dialogs/dialog_select_net_from_list.cpp
+++ b/pcbnew/dialogs/dialog_select_net_from_list.cpp
@@ -42,13 +42,16 @@
#include <view/view.h>
#include <view/view_controls.h>
#include <pcb_painter.h>
+#include <ratsnest_data.h>
#define COL_NETNAME 0
#define COL_NETINFO 1
+#define COL_RATSVIS 2
class DIALOG_SELECT_NET_FROM_LIST: public DIALOG_SELECT_NET_FROM_LIST_BASE
{
private:
+ PCB_EDIT_FRAME * m_parent;
wxString m_selection;
bool m_wasSelected;
BOARD* m_brd;
@@ -106,6 +109,10 @@ void PCB_EDIT_FRAME::ListNetsAndSelect( wxCommandEvent& event )
DIALOG_SELECT_NET_FROM_LIST::DIALOG_SELECT_NET_FROM_LIST( PCB_EDIT_FRAME* aParent )
: DIALOG_SELECT_NET_FROM_LIST_BASE( aParent )
{
+
+ m_parent = aParent;
+ m_netsListGrid->SetColFormatBool(COL_RATSVIS);
+
m_brd = aParent->GetBoard();
m_wasSelected = false;
@@ -159,6 +166,8 @@ void DIALOG_SELECT_NET_FROM_LIST::buildNetsList()
}
else // For the net 0 (unconnected pads), the pad count is not known
m_netsListGrid->SetCellValue( row_idx, COL_NETINFO, "---" );
+
+ m_netsListGrid->SetCellValue( row_idx, COL_RATSVIS, net->IsRatsnestVisible() ? "1" : "" );
row_idx++;
}
@@ -195,7 +204,27 @@ void DIALOG_SELECT_NET_FROM_LIST::onCellClick( wxGridEvent& event )
// Select the full row when clicking on any cell off the row
m_netsListGrid->SelectRow( selected_row, false );
- m_netsListGrid->SetGridCursor(selected_row, COL_NETNAME );
+ m_netsListGrid->SetGridCursor(selected_row, event.GetCol() );
+
+ if( event.GetCol() == COL_RATSVIS )
+ {
+ NETINFO_ITEM *net = m_brd->FindNet(m_selection);
+ if( net != NULL )
+ {
+ net->SetRatsnestVisible(!net->IsRatsnestVisible());
+ m_netsListGrid->SetCellValue( selected_row, COL_RATSVIS, net->IsRatsnestVisible() ? "1" : "" );
+ m_parent->Compile_Ratsnest(NULL, true);
+ if( m_parent->IsGalCanvasActive() )
+ {
+ m_parent->GetGalCanvas()->GetView()->UpdateAllLayersColor();
+ m_parent->GetGalCanvas()->Refresh();
+ }
+ else
+ {
+ m_parent->GetCanvas()->Refresh();
+ }
+ }
+ }
}
diff --git a/pcbnew/dialogs/dialog_select_net_from_list_base.cpp b/pcbnew/dialogs/dialog_select_net_from_list_base.cpp
index 4b200e7..3928f95 100644
--- a/pcbnew/dialogs/dialog_select_net_from_list_base.cpp
+++ b/pcbnew/dialogs/dialog_select_net_from_list_base.cpp
@@ -1,5 +1,5 @@
///////////////////////////////////////////////////////////////////////////
-// C++ code generated with wxFormBuilder (version Jan 1 2016)
+// C++ code generated with wxFormBuilder (version Feb 8 2017)
// http://www.wxformbuilder.org/
//
// PLEASE DO "NOT" EDIT THIS FILE!
@@ -11,7 +11,7 @@
DIALOG_SELECT_NET_FROM_LIST_BASE::DIALOG_SELECT_NET_FROM_LIST_BASE( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style ) : DIALOG_SHIM( parent, id, title, pos, size, style )
{
- this->SetSizeHints( wxSize( 400,200 ), wxDefaultSize );
+ this->SetSizeHints( wxSize( 600,200 ), wxDefaultSize );
wxBoxSizer* bSizerMain;
bSizerMain = new wxBoxSizer( wxVERTICAL );
@@ -39,7 +39,7 @@ DIALOG_SELECT_NET_FROM_LIST_BASE::DIALOG_SELECT_NET_FROM_LIST_BASE( wxWindow* pa
m_netsListGrid = new wxGrid( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0 );
// Grid
- m_netsListGrid->CreateGrid( 1, 2 );
+ m_netsListGrid->CreateGrid( 1, 3 );
m_netsListGrid->EnableEditing( false );
m_netsListGrid->EnableGridLines( true );
m_netsListGrid->EnableDragGridSize( false );
@@ -48,11 +48,13 @@ DIALOG_SELECT_NET_FROM_LIST_BASE::DIALOG_SELECT_NET_FROM_LIST_BASE( wxWindow* pa
// Columns
m_netsListGrid->SetColSize( 0, 325 );
m_netsListGrid->SetColSize( 1, 100 );
+ m_netsListGrid->SetColSize( 2, 87 );
m_netsListGrid->EnableDragColMove( false );
m_netsListGrid->EnableDragColSize( true );
m_netsListGrid->SetColLabelSize( 20 );
m_netsListGrid->SetColLabelValue( 0, _("Net name") );
m_netsListGrid->SetColLabelValue( 1, _("Number of pads") );
+ m_netsListGrid->SetColLabelValue( 2, _("Show ratsnest") );
m_netsListGrid->SetColLabelAlignment( wxALIGN_LEFT, wxALIGN_CENTRE );
// Rows
diff --git a/pcbnew/dialogs/dialog_select_net_from_list_base.fbp b/pcbnew/dialogs/dialog_select_net_from_list_base.fbp
index d3784f8..038dc40 100644
--- a/pcbnew/dialogs/dialog_select_net_from_list_base.fbp
+++ b/pcbnew/dialogs/dialog_select_net_from_list_base.fbp
@@ -41,10 +41,10 @@
<property name="hidden">0</property>
<property name="id">wxID_ANY</property>
<property name="maximum_size"></property>
- <property name="minimum_size">400,200</property>
+ <property name="minimum_size">600,200</property>
<property name="name">DIALOG_SELECT_NET_FROM_LIST_BASE</property>
<property name="pos"></property>
- <property name="size">477,278</property>
+ <property name="size">577,279</property>
<property name="style">wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER</property>
<property name="subclass">DIALOG_SHIM; dialog_shim.h</property>
<property name="title">Nets</property>
@@ -401,10 +401,10 @@
<property name="close_button">1</property>
<property name="col_label_horiz_alignment">wxALIGN_LEFT</property>
<property name="col_label_size">20</property>
- <property name="col_label_values">"Net name" "Number of pads"</property>
+ <property name="col_label_values">"Net name" "Number of pads" "Show ratsnest"</property>
<property name="col_label_vert_alignment">wxALIGN_CENTRE</property>
- <property name="cols">2</property>
- <property name="column_sizes">325,100</property>
+ <property name="cols">3</property>
+ <property name="column_sizes">325,100,87</property>
<property name="context_help"></property>
<property name="context_menu">1</property>
<property name="default_pane">0</property>
diff --git a/pcbnew/dialogs/dialog_select_net_from_list_base.h b/pcbnew/dialogs/dialog_select_net_from_list_base.h
index db3dc18..9544148 100644
--- a/pcbnew/dialogs/dialog_select_net_from_list_base.h
+++ b/pcbnew/dialogs/dialog_select_net_from_list_base.h
@@ -1,5 +1,5 @@
///////////////////////////////////////////////////////////////////////////
-// C++ code generated with wxFormBuilder (version Jan 1 2016)
+// C++ code generated with wxFormBuilder (version Feb 8 2017)
// http://www.wxformbuilder.org/
//
// PLEASE DO "NOT" EDIT THIS FILE!
@@ -55,7 +55,7 @@ class DIALOG_SELECT_NET_FROM_LIST_BASE : public DIALOG_SHIM
public:
- DIALOG_SELECT_NET_FROM_LIST_BASE( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Nets"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 477,278 ), long style = wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER );
+ DIALOG_SELECT_NET_FROM_LIST_BASE( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Nets"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 600,279 ), long style = wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER );
~DIALOG_SELECT_NET_FROM_LIST_BASE();
};
diff --git a/pcbnew/ratsnest.cpp b/pcbnew/ratsnest.cpp
index fcd3be2..5293464 100644
--- a/pcbnew/ratsnest.cpp
+++ b/pcbnew/ratsnest.cpp
@@ -42,6 +42,7 @@
#include <pcbnew.h>
#include <minimun_spanning_tree.h>
+#include <ratsnest_data.h>
/**
* @brief class MIN_SPAN_TREE_PADS (derived from MIN_SPAN_TREE) specializes
@@ -276,6 +277,9 @@ void PCB_BASE_FRAME::Build_Board_Ratsnest()
min_spanning_tree.BuildTree();
min_spanning_tree.AddTreeToRatsnest( &m_Pcb->m_FullRatsnest );
net->m_RatsnestEndIdx = m_Pcb->GetRatsnestsCount();
+ if( !net->IsRatsnestVisible() )
+ for( unsigned jj = net->m_RatsnestStartIdx; jj < net->m_RatsnestEndIdx; jj++ )
+ m_Pcb->m_FullRatsnest[jj].m_Status &= ~CH_VISIBLE;
}
m_Pcb->SetUnconnectedNetCount( noconn );
diff --git a/pcbnew/ratsnest_data.h b/pcbnew/ratsnest_data.h
index 5497c23..2547918 100644
--- a/pcbnew/ratsnest_data.h
+++ b/pcbnew/ratsnest_data.h
@@ -782,6 +782,8 @@ public:
*/
int GetUnconnectedCount() const;
+ const BOARD *GetBoard() const { return m_board; }
+
protected:
/**
* Function updateNet()
diff --git a/pcbnew/ratsnest_viewitem.cpp b/pcbnew/ratsnest_viewitem.cpp
index cdeba78..f505436 100644
--- a/pcbnew/ratsnest_viewitem.cpp
+++ b/pcbnew/ratsnest_viewitem.cpp
@@ -32,6 +32,7 @@
#include <gal/graphics_abstraction_layer.h>
#include <pcb_painter.h>
#include <layers_id_colors_and_visibility.h>
+#include <class_board.h>
#include <view/view.h>
@@ -92,6 +93,10 @@ void RATSNEST_VIEWITEM::ViewDraw( int aLayer, KIGFX::VIEW* aView ) const
}
}
+ NETINFO_ITEM *neti = m_data->GetBoard()->FindNet( i );
+ if(neti != NULL && !neti->IsRatsnestVisible())
+ continue;
+
// Draw the "static" ratsnest
if( i != highlightedNet )
gal->SetStrokeColor( color ); // using the default ratsnest color for not highlighted
_______________________________________________
Mailing list: https://launchpad.net/~kicad-developers
Post to : [email protected]
Unsubscribe : https://launchpad.net/~kicad-developers
More help : https://help.launchpad.net/ListHelp