From 88ccd787a4121b4e77f73f3975f0feec1fc53556 Mon Sep 17 00:00:00 2001 From: Simon Richter Date: Wed, 13 Jan 2016 14:09:07 -0500 Subject: [PATCH] Split off pin number comparison Pin numbers need to be ordered in more places in the future, so fold this out of the pin table dialog into a utility class. --- eeschema/CMakeLists.txt | 1 + .../dialogs/dialog_lib_edit_pin_table.cpp | 112 +----------------- 2 files changed, 5 insertions(+), 108 deletions(-) diff --git a/eeschema/CMakeLists.txt b/eeschema/CMakeLists.txt index 3079318e97..c8d9a46813 100644 --- a/eeschema/CMakeLists.txt +++ b/eeschema/CMakeLists.txt @@ -132,6 +132,7 @@ set( EESCHEMA_SRCS onrightclick.cpp operations_on_items_lists.cpp pinedit.cpp + pin_number.cpp plot_schematic_DXF.cpp plot_schematic_HPGL.cpp plot_schematic_PS.cpp diff --git a/eeschema/dialogs/dialog_lib_edit_pin_table.cpp b/eeschema/dialogs/dialog_lib_edit_pin_table.cpp index dc39b53d59..b94cf26141 100644 --- a/eeschema/dialogs/dialog_lib_edit_pin_table.cpp +++ b/eeschema/dialogs/dialog_lib_edit_pin_table.cpp @@ -2,6 +2,8 @@ #include "lib_pin.h" +#include "pin_number.h" + #include #include @@ -283,118 +285,12 @@ unsigned int DIALOG_LIB_EDIT_PIN_TABLE::DataViewModel::GetChildren( const wxData namespace { -wxString GetNextComponent( const wxString& str, wxString::size_type& cursor ) -{ - if( str.size() <= cursor ) - return wxEmptyString; - - wxString::size_type begin = cursor; - - wxUniChar c = str[cursor]; - - if( isdigit( c ) || c == '+' || c == '-' ) - { - // number, possibly with sign - while( ++cursor < str.size() ) - { - c = str[cursor]; - - if( isdigit( c ) || c == 'v' || c == 'V' ) - continue; - else - break; - } - } - else - { - while( ++cursor < str.size() ) - { - c = str[cursor]; - - if( isdigit( c ) ) - break; - else - continue; - } - } - - return str.substr( begin, cursor - begin ); -} - - -int ComparePinNames( const wxString& lhs, const wxString& rhs ) -{ - wxString::size_type cursor1 = 0; - wxString::size_type cursor2 = 0; - - wxString comp1, comp2; - - for( ; ; ) - { - comp1 = GetNextComponent( lhs, cursor1 ); - comp2 = GetNextComponent( rhs, cursor2 ); - - if( comp1.empty() && comp2.empty() ) - return 0; - - if( comp1.empty() ) - return -1; - - if( comp2.empty() ) - return 1; - - wxUniChar c1 = comp1[0]; - wxUniChar c2 = comp2[0]; - - if( isdigit( c1 ) || c1 == '-' || c1 == '+' ) - { - if( isdigit( c2 ) || c2 == '-' || c2 == '+' ) - { - // numeric comparison - wxString::size_type v1 = comp1.find_first_of( "vV" ); - - if( v1 != wxString::npos ) - comp1[v1] = '.'; - - wxString::size_type v2 = comp2.find_first_of( "vV" ); - - if( v2 != wxString::npos ) - comp2[v2] = '.'; - - double val1, val2; - - comp1.ToDouble( &val1 ); - comp2.ToDouble( &val2 ); - - if( val1 < val2 ) - return -1; - - if( val1 > val2 ) - return 1; - } - else - return -1; - } - else - { - if( isdigit( c2 ) || c2 == '-' || c2 == '+' ) - return 1; - - int res = comp1.Cmp( comp2 ); - - if( res != 0 ) - return res; - } - } -} - - class CompareLess { public: bool operator()( const wxString& lhs, const wxString& rhs ) { - return ComparePinNames( lhs, rhs ) == -1; + return PinNumbers::Compare( lhs, rhs ) == -1; } }; } @@ -413,7 +309,7 @@ int DIALOG_LIB_EDIT_PIN_TABLE::DataViewModel::Compare( const wxDataViewItem& aIt GetValue( var2, aItem2, aCol ); wxString str2 = var2.GetString(); - int res = ComparePinNames( str1, str2 ); + int res = PinNumbers::Compare( str1, str2 ); if( res == 0 ) res = ( aItem1.GetID() < aItem2.GetID() ) ? -1 : 1;