WIDGET_NET_SELECTOR: speedup the net list creation.
Add comments and better names for variables.
This commit is contained in:
parent
1b8ab1c23d
commit
2e83103c3d
|
@ -27,9 +27,12 @@
|
|||
|
||||
#include <class_board.h>
|
||||
#include <class_netinfo.h>
|
||||
#include <wx/arrstr.h>
|
||||
|
||||
WIDGET_NET_SELECTOR::WIDGET_NET_SELECTOR (wxWindow *parent, wxWindowID id, const wxString &value, const wxPoint &pos, const wxSize &size,
|
||||
int n, const wxString choices[], long style, const wxValidator &validator, const wxString &name ) :
|
||||
WIDGET_NET_SELECTOR::WIDGET_NET_SELECTOR( wxWindow *parent, wxWindowID id,
|
||||
const wxString &value, const wxPoint &pos, const wxSize &size,
|
||||
int n, const wxString choices[], long style,
|
||||
const wxValidator &validator, const wxString &name ) :
|
||||
wxComboBox( parent, id, value, pos, size, n, choices, style, validator, name ),
|
||||
m_multiple( false )
|
||||
{
|
||||
|
@ -55,11 +58,11 @@ void WIDGET_NET_SELECTOR::SetMultiple( bool aMultiple )
|
|||
|
||||
void WIDGET_NET_SELECTOR::SetSelectedNet ( int aNetcode )
|
||||
{
|
||||
for( const auto& n : m_nets )
|
||||
for( const auto& net : m_nets )
|
||||
{
|
||||
if( n.code == aNetcode )
|
||||
if( net.m_Code == aNetcode )
|
||||
{
|
||||
SetSelection( n.pos );
|
||||
SetSelection( net.m_Pos );
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
@ -70,10 +73,10 @@ int WIDGET_NET_SELECTOR::GetSelectedNet()
|
|||
{
|
||||
int pos = GetSelection();
|
||||
|
||||
for( const auto& n : m_nets )
|
||||
for( const auto& net : m_nets )
|
||||
{
|
||||
if( n.pos == pos )
|
||||
return n.code;
|
||||
if( net.m_Pos == pos )
|
||||
return net.m_Code;
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
@ -93,21 +96,27 @@ void WIDGET_NET_SELECTOR::SetBoard( BOARD* aBoard )
|
|||
{
|
||||
auto& netinfo = aBoard->GetNetInfo();
|
||||
|
||||
Append( wxT( "<no net>" ) );
|
||||
|
||||
for( unsigned i = 1; i < netinfo.GetNetCount(); i++ )
|
||||
{
|
||||
NETINFO_ITEM* ni = netinfo.GetNetItem( i );
|
||||
NET n;
|
||||
n.name = ni->GetNetname();
|
||||
n.code = i;
|
||||
m_nets.push_back( n );
|
||||
NET net;
|
||||
net.m_Name = ni->GetNetname();
|
||||
net.m_Code = i;
|
||||
m_nets.push_back( net );
|
||||
}
|
||||
|
||||
std::sort( m_nets.begin(), m_nets.end() );
|
||||
|
||||
for( auto& n : m_nets )
|
||||
// Add the list of selectable nets to the wxComboBox.
|
||||
// Using a wxArrayString is much faster than adding each name separately
|
||||
wxArrayString netnames;
|
||||
|
||||
netnames.Add( wxT( "<no net>" ) ); // Always on top of the list
|
||||
|
||||
for( auto& net : m_nets )
|
||||
{
|
||||
n.pos = Append( n.name );
|
||||
net.m_Pos = netnames.Add( net.m_Name );
|
||||
}
|
||||
|
||||
Append( netnames );
|
||||
}
|
||||
|
|
|
@ -33,10 +33,17 @@ class BOARD;
|
|||
class WIDGET_NET_SELECTOR : public wxComboBox
|
||||
{
|
||||
public:
|
||||
WIDGET_NET_SELECTOR (wxWindow *parent, wxWindowID id, const wxString &value=wxEmptyString, const wxPoint &pos=wxDefaultPosition, const wxSize &size=wxDefaultSize,
|
||||
int n=0, const wxString choices[]=NULL, long style=0, const wxValidator &validator=wxDefaultValidator, const wxString &name=wxComboBoxNameStr);
|
||||
// Note: this list of arguments is here because WIDGET_NET_SELECTOR must
|
||||
// have the same arguments as wxComboBox to be used inside wxFormaBuilder
|
||||
WIDGET_NET_SELECTOR( wxWindow *parent, wxWindowID id,
|
||||
const wxString &value=wxEmptyString,
|
||||
const wxPoint &pos=wxDefaultPosition,
|
||||
const wxSize &size=wxDefaultSize,
|
||||
int n=0, const wxString choices[]=NULL,
|
||||
long style=0, const wxValidator &validator=wxDefaultValidator,
|
||||
const wxString &name=wxComboBoxNameStr);
|
||||
|
||||
~WIDGET_NET_SELECTOR();
|
||||
~WIDGET_NET_SELECTOR();
|
||||
|
||||
void SetMultiple( bool aMultiple = true );
|
||||
void SetSelectedNet ( int aNetcode );
|
||||
|
@ -44,23 +51,23 @@ public:
|
|||
|
||||
bool IsUniqueNetSelected() const;
|
||||
|
||||
void SetBoard( BOARD* m_board );
|
||||
// Build the list of netnames and populate the wxComboBox
|
||||
void SetBoard( BOARD* aBoard );
|
||||
|
||||
private:
|
||||
struct NET {
|
||||
int code;
|
||||
int pos;
|
||||
wxString name;
|
||||
int m_Code;
|
||||
int m_Pos;
|
||||
wxString m_Name;
|
||||
|
||||
bool operator <( const NET& aOther ) const
|
||||
{
|
||||
return name < aOther.name;
|
||||
return m_Name < aOther.m_Name;
|
||||
}
|
||||
};
|
||||
|
||||
bool m_multiple;
|
||||
std::vector<NET> m_nets;
|
||||
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
Loading…
Reference in New Issue