Support wildcards and regEx's in Net Inspector.

Fixes https://gitlab.com/kicad/code/kicad/-/issues/18071
This commit is contained in:
Jeff Young 2024-05-24 12:23:27 +01:00
parent 132ecee665
commit 397ae3bafd
8 changed files with 480 additions and 457 deletions

View File

@ -1,5 +1,5 @@
/////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////
// C++ code generated with wxFormBuilder (version 3.10.0-4761b0c5) // C++ code generated with wxFormBuilder (version 4.0.0-0-g0efcecf)
// http://www.wxformbuilder.org/ // http://www.wxformbuilder.org/
// //
// PLEASE DO *NOT* EDIT THIS FILE! // PLEASE DO *NOT* EDIT THIS FILE!
@ -15,17 +15,16 @@ WX_TEXT_ENTRY_DIALOG_BASE::WX_TEXT_ENTRY_DIALOG_BASE( wxWindow* parent, wxWindow
m_mainSizer = new wxBoxSizer( wxVERTICAL ); m_mainSizer = new wxBoxSizer( wxVERTICAL );
wxBoxSizer* bSizerContent; m_ContentSizer = new wxBoxSizer( wxVERTICAL );
bSizerContent = new wxBoxSizer( wxVERTICAL );
m_label = new wxStaticText( this, wxID_ANY, _("MyLabel"), wxDefaultPosition, wxDefaultSize, 0 ); m_label = new wxStaticText( this, wxID_ANY, _("MyLabel"), wxDefaultPosition, wxDefaultSize, 0 );
m_label->Wrap( -1 ); m_label->Wrap( -1 );
bSizerContent->Add( m_label, 0, wxALL|wxEXPAND, 5 ); m_ContentSizer->Add( m_label, 0, wxALL|wxEXPAND, 5 );
m_textCtrl = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); m_textCtrl = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
m_textCtrl->SetMinSize( wxSize( 300,-1 ) ); m_textCtrl->SetMinSize( wxSize( 300,-1 ) );
bSizerContent->Add( m_textCtrl, 0, wxBOTTOM|wxRIGHT|wxLEFT|wxEXPAND, 5 ); m_ContentSizer->Add( m_textCtrl, 0, wxBOTTOM|wxRIGHT|wxLEFT|wxEXPAND, 5 );
wxBoxSizer* bSizer3; wxBoxSizer* bSizer3;
bSizer3 = new wxBoxSizer( wxHORIZONTAL ); bSizer3 = new wxBoxSizer( wxHORIZONTAL );
@ -44,10 +43,10 @@ WX_TEXT_ENTRY_DIALOG_BASE::WX_TEXT_ENTRY_DIALOG_BASE( wxWindow* parent, wxWindow
bSizer3->Add( m_choice, 3, wxALIGN_CENTER_VERTICAL|wxLEFT|wxRIGHT, 5 ); bSizer3->Add( m_choice, 3, wxALIGN_CENTER_VERTICAL|wxLEFT|wxRIGHT, 5 );
bSizerContent->Add( bSizer3, 1, wxEXPAND, 5 ); m_ContentSizer->Add( bSizer3, 1, wxEXPAND, 5 );
m_mainSizer->Add( bSizerContent, 1, wxALL|wxEXPAND, 5 ); m_mainSizer->Add( m_ContentSizer, 1, wxALL|wxEXPAND, 5 );
m_sdbSizer1 = new wxStdDialogButtonSizer(); m_sdbSizer1 = new wxStdDialogButtonSizer();
m_sdbSizer1OK = new wxButton( this, wxID_OK ); m_sdbSizer1OK = new wxButton( this, wxID_OK );

View File

@ -1,357 +1,362 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?> <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<wxFormBuilder_Project> <wxFormBuilder_Project>
<FileVersion major="1" minor="16" /> <FileVersion major="1" minor="17"/>
<object class="Project" expanded="1"> <object class="Project" expanded="true">
<property name="class_decoration"></property> <property name="class_decoration"></property>
<property name="code_generation">C++</property> <property name="code_generation">C++</property>
<property name="disconnect_events">1</property> <property name="disconnect_events">1</property>
<property name="disconnect_mode">source_name</property> <property name="disconnect_mode">source_name</property>
<property name="disconnect_php_events">0</property> <property name="disconnect_php_events">0</property>
<property name="disconnect_python_events">0</property> <property name="disconnect_python_events">0</property>
<property name="embedded_files_path">res</property> <property name="embedded_files_path">res</property>
<property name="encoding">UTF-8</property> <property name="encoding">UTF-8</property>
<property name="event_generation">connect</property> <property name="event_generation">connect</property>
<property name="file">dialog_text_entry_base</property> <property name="file">dialog_text_entry_base</property>
<property name="first_id">1000</property> <property name="first_id">1000</property>
<property name="help_provider">none</property> <property name="help_provider">none</property>
<property name="image_path_wrapper_function_name"></property> <property name="image_path_wrapper_function_name"></property>
<property name="indent_with_spaces"></property> <property name="indent_with_spaces"></property>
<property name="internationalize">1</property> <property name="internationalize">1</property>
<property name="name">dialog_text_entry_base</property> <property name="name">dialog_text_entry_base</property>
<property name="namespace"></property> <property name="namespace"></property>
<property name="path">.</property> <property name="path">.</property>
<property name="precompiled_header"></property> <property name="precompiled_header"></property>
<property name="relative_path">1</property> <property name="relative_path">1</property>
<property name="skip_lua_events">1</property> <property name="skip_lua_events">1</property>
<property name="skip_php_events">1</property> <property name="skip_php_events">1</property>
<property name="skip_python_events">1</property> <property name="skip_python_events">1</property>
<property name="ui_table">UI</property> <property name="ui_table">UI</property>
<property name="use_array_enum">0</property> <property name="use_array_enum">0</property>
<property name="use_enum">0</property> <property name="use_enum">0</property>
<property name="use_microsoft_bom">0</property> <property name="use_microsoft_bom">0</property>
<object class="Dialog" expanded="1"> <object class="Dialog" expanded="true">
<property name="aui_managed">0</property> <property name="aui_managed">0</property>
<property name="aui_manager_style">wxAUI_MGR_DEFAULT</property> <property name="aui_manager_style">wxAUI_MGR_DEFAULT</property>
<property name="bg"></property> <property name="bg"></property>
<property name="center">wxBOTH</property> <property name="center">wxBOTH</property>
<property name="context_help"></property> <property name="context_help"></property>
<property name="context_menu">1</property> <property name="context_menu">1</property>
<property name="enabled">1</property> <property name="drag_accept_files">0</property>
<property name="event_handler">impl_virtual</property> <property name="enabled">1</property>
<property name="extra_style"></property> <property name="event_handler">impl_virtual</property>
<property name="fg"></property> <property name="extra_style"></property>
<property name="font"></property> <property name="fg"></property>
<property name="hidden">0</property> <property name="font"></property>
<property name="id">wxID_ANY</property> <property name="hidden">0</property>
<property name="maximum_size"></property> <property name="id">wxID_ANY</property>
<property name="maximum_size"></property>
<property name="minimum_size"></property>
<property name="name">WX_TEXT_ENTRY_DIALOG_BASE</property>
<property name="pos"></property>
<property name="size">-1,-1</property>
<property name="style">wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER</property>
<property name="subclass">DIALOG_SHIM; dialog_shim.h</property>
<property name="title"></property>
<property name="tooltip"></property>
<property name="two_step_creation">0</property>
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></property>
<object class="wxBoxSizer" expanded="true">
<property name="minimum_size"></property>
<property name="name">m_mainSizer</property>
<property name="orient">wxVERTICAL</property>
<property name="permission">protected</property>
<object class="sizeritem" expanded="true">
<property name="border">5</property>
<property name="flag">wxALL|wxEXPAND</property>
<property name="proportion">1</property>
<object class="wxBoxSizer" expanded="true">
<property name="minimum_size"></property> <property name="minimum_size"></property>
<property name="name">WX_TEXT_ENTRY_DIALOG_BASE</property> <property name="name">m_ContentSizer</property>
<property name="pos"></property> <property name="orient">wxVERTICAL</property>
<property name="size">-1,-1</property> <property name="permission">public</property>
<property name="style">wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER</property> <object class="sizeritem" expanded="false">
<property name="subclass">DIALOG_SHIM; dialog_shim.h</property> <property name="border">5</property>
<property name="title"></property> <property name="flag">wxALL|wxEXPAND</property>
<property name="tooltip"></property> <property name="proportion">0</property>
<property name="two_step_creation">0</property> <object class="wxStaticText" expanded="false">
<property name="window_extra_style"></property> <property name="BottomDockable">1</property>
<property name="window_name"></property> <property name="LeftDockable">1</property>
<property name="window_style"></property> <property name="RightDockable">1</property>
<object class="wxBoxSizer" expanded="1"> <property name="TopDockable">1</property>
<property name="aui_layer"></property>
<property name="aui_name"></property>
<property name="aui_position"></property>
<property name="aui_row"></property>
<property name="best_size"></property>
<property name="bg"></property>
<property name="caption"></property>
<property name="caption_visible">1</property>
<property name="center_pane">0</property>
<property name="close_button">1</property>
<property name="context_help"></property>
<property name="context_menu">1</property>
<property name="default_pane">0</property>
<property name="dock">Dock</property>
<property name="dock_fixed">0</property>
<property name="docking">Left</property>
<property name="drag_accept_files">0</property>
<property name="enabled">1</property>
<property name="fg"></property>
<property name="floatable">1</property>
<property name="font"></property>
<property name="gripper">0</property>
<property name="hidden">0</property>
<property name="id">wxID_ANY</property>
<property name="label">MyLabel</property>
<property name="markup">0</property>
<property name="max_size"></property>
<property name="maximize_button">0</property>
<property name="maximum_size"></property>
<property name="min_size"></property>
<property name="minimize_button">0</property>
<property name="minimum_size"></property> <property name="minimum_size"></property>
<property name="name">m_mainSizer</property> <property name="moveable">1</property>
<property name="orient">wxVERTICAL</property> <property name="name">m_label</property>
<property name="pane_border">1</property>
<property name="pane_position"></property>
<property name="pane_size"></property>
<property name="permission">protected</property> <property name="permission">protected</property>
<object class="sizeritem" expanded="1"> <property name="pin_button">1</property>
<property name="border">5</property> <property name="pos"></property>
<property name="flag">wxALL|wxEXPAND</property> <property name="resize">Resizable</property>
<property name="proportion">1</property> <property name="show">1</property>
<object class="wxBoxSizer" expanded="1"> <property name="size"></property>
<property name="minimum_size"></property> <property name="style"></property>
<property name="name">bSizerContent</property> <property name="subclass">; forward_declare</property>
<property name="orient">wxVERTICAL</property> <property name="toolbar_pane">0</property>
<property name="permission">none</property> <property name="tooltip"></property>
<object class="sizeritem" expanded="0"> <property name="window_extra_style"></property>
<property name="border">5</property> <property name="window_name"></property>
<property name="flag">wxALL|wxEXPAND</property> <property name="window_style"></property>
<property name="proportion">0</property> <property name="wrap">-1</property>
<object class="wxStaticText" expanded="0"> </object>
<property name="BottomDockable">1</property>
<property name="LeftDockable">1</property>
<property name="RightDockable">1</property>
<property name="TopDockable">1</property>
<property name="aui_layer"></property>
<property name="aui_name"></property>
<property name="aui_position"></property>
<property name="aui_row"></property>
<property name="best_size"></property>
<property name="bg"></property>
<property name="caption"></property>
<property name="caption_visible">1</property>
<property name="center_pane">0</property>
<property name="close_button">1</property>
<property name="context_help"></property>
<property name="context_menu">1</property>
<property name="default_pane">0</property>
<property name="dock">Dock</property>
<property name="dock_fixed">0</property>
<property name="docking">Left</property>
<property name="enabled">1</property>
<property name="fg"></property>
<property name="floatable">1</property>
<property name="font"></property>
<property name="gripper">0</property>
<property name="hidden">0</property>
<property name="id">wxID_ANY</property>
<property name="label">MyLabel</property>
<property name="markup">0</property>
<property name="max_size"></property>
<property name="maximize_button">0</property>
<property name="maximum_size"></property>
<property name="min_size"></property>
<property name="minimize_button">0</property>
<property name="minimum_size"></property>
<property name="moveable">1</property>
<property name="name">m_label</property>
<property name="pane_border">1</property>
<property name="pane_position"></property>
<property name="pane_size"></property>
<property name="permission">protected</property>
<property name="pin_button">1</property>
<property name="pos"></property>
<property name="resize">Resizable</property>
<property name="show">1</property>
<property name="size"></property>
<property name="style"></property>
<property name="subclass">; forward_declare</property>
<property name="toolbar_pane">0</property>
<property name="tooltip"></property>
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></property>
<property name="wrap">-1</property>
</object>
</object>
<object class="sizeritem" expanded="0">
<property name="border">5</property>
<property name="flag">wxBOTTOM|wxRIGHT|wxLEFT|wxEXPAND</property>
<property name="proportion">0</property>
<object class="wxTextCtrl" expanded="0">
<property name="BottomDockable">1</property>
<property name="LeftDockable">1</property>
<property name="RightDockable">1</property>
<property name="TopDockable">1</property>
<property name="aui_layer"></property>
<property name="aui_name"></property>
<property name="aui_position"></property>
<property name="aui_row"></property>
<property name="best_size"></property>
<property name="bg"></property>
<property name="caption"></property>
<property name="caption_visible">1</property>
<property name="center_pane">0</property>
<property name="close_button">1</property>
<property name="context_help"></property>
<property name="context_menu">1</property>
<property name="default_pane">0</property>
<property name="dock">Dock</property>
<property name="dock_fixed">0</property>
<property name="docking">Left</property>
<property name="enabled">1</property>
<property name="fg"></property>
<property name="floatable">1</property>
<property name="font"></property>
<property name="gripper">0</property>
<property name="hidden">0</property>
<property name="id">wxID_ANY</property>
<property name="max_size"></property>
<property name="maximize_button">0</property>
<property name="maximum_size"></property>
<property name="maxlength"></property>
<property name="min_size"></property>
<property name="minimize_button">0</property>
<property name="minimum_size">300,-1</property>
<property name="moveable">1</property>
<property name="name">m_textCtrl</property>
<property name="pane_border">1</property>
<property name="pane_position"></property>
<property name="pane_size"></property>
<property name="permission">protected</property>
<property name="pin_button">1</property>
<property name="pos"></property>
<property name="resize">Resizable</property>
<property name="show">1</property>
<property name="size"></property>
<property name="style"></property>
<property name="subclass">; forward_declare</property>
<property name="toolbar_pane">0</property>
<property name="tooltip"></property>
<property name="validator_data_type"></property>
<property name="validator_style">wxFILTER_NONE</property>
<property name="validator_type">wxDefaultValidator</property>
<property name="validator_variable"></property>
<property name="value"></property>
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></property>
</object>
</object>
<object class="sizeritem" expanded="1">
<property name="border">5</property>
<property name="flag">wxEXPAND</property>
<property name="proportion">1</property>
<object class="wxBoxSizer" expanded="1">
<property name="minimum_size"></property>
<property name="name">bSizer3</property>
<property name="orient">wxHORIZONTAL</property>
<property name="permission">none</property>
<object class="sizeritem" expanded="1">
<property name="border">5</property>
<property name="flag">wxALIGN_CENTER_VERTICAL|wxLEFT|wxRIGHT</property>
<property name="proportion">0</property>
<object class="wxStaticText" expanded="1">
<property name="BottomDockable">1</property>
<property name="LeftDockable">1</property>
<property name="RightDockable">1</property>
<property name="TopDockable">1</property>
<property name="aui_layer"></property>
<property name="aui_name"></property>
<property name="aui_position"></property>
<property name="aui_row"></property>
<property name="best_size"></property>
<property name="bg"></property>
<property name="caption"></property>
<property name="caption_visible">1</property>
<property name="center_pane">0</property>
<property name="close_button">1</property>
<property name="context_help"></property>
<property name="context_menu">1</property>
<property name="default_pane">0</property>
<property name="dock">Dock</property>
<property name="dock_fixed">0</property>
<property name="docking">Left</property>
<property name="enabled">1</property>
<property name="fg"></property>
<property name="floatable">1</property>
<property name="font"></property>
<property name="gripper">0</property>
<property name="hidden">1</property>
<property name="id">wxID_ANY</property>
<property name="label">MyLabel</property>
<property name="markup">0</property>
<property name="max_size"></property>
<property name="maximize_button">0</property>
<property name="maximum_size"></property>
<property name="min_size"></property>
<property name="minimize_button">0</property>
<property name="minimum_size"></property>
<property name="moveable">1</property>
<property name="name">m_choiceLabel</property>
<property name="pane_border">1</property>
<property name="pane_position"></property>
<property name="pane_size"></property>
<property name="permission">protected</property>
<property name="pin_button">1</property>
<property name="pos"></property>
<property name="resize">Resizable</property>
<property name="show">1</property>
<property name="size"></property>
<property name="style"></property>
<property name="subclass">; ; forward_declare</property>
<property name="toolbar_pane">0</property>
<property name="tooltip"></property>
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></property>
<property name="wrap">-1</property>
</object>
</object>
<object class="sizeritem" expanded="1">
<property name="border">5</property>
<property name="flag">wxALIGN_CENTER_VERTICAL|wxLEFT|wxRIGHT</property>
<property name="proportion">3</property>
<object class="wxChoice" expanded="1">
<property name="BottomDockable">1</property>
<property name="LeftDockable">1</property>
<property name="RightDockable">1</property>
<property name="TopDockable">1</property>
<property name="aui_layer"></property>
<property name="aui_name"></property>
<property name="aui_position"></property>
<property name="aui_row"></property>
<property name="best_size"></property>
<property name="bg"></property>
<property name="caption"></property>
<property name="caption_visible">1</property>
<property name="center_pane">0</property>
<property name="choices"></property>
<property name="close_button">1</property>
<property name="context_help"></property>
<property name="context_menu">1</property>
<property name="default_pane">0</property>
<property name="dock">Dock</property>
<property name="dock_fixed">0</property>
<property name="docking">Left</property>
<property name="enabled">1</property>
<property name="fg"></property>
<property name="floatable">1</property>
<property name="font"></property>
<property name="gripper">0</property>
<property name="hidden">1</property>
<property name="id">wxID_ANY</property>
<property name="max_size"></property>
<property name="maximize_button">0</property>
<property name="maximum_size"></property>
<property name="min_size"></property>
<property name="minimize_button">0</property>
<property name="minimum_size"></property>
<property name="moveable">1</property>
<property name="name">m_choice</property>
<property name="pane_border">1</property>
<property name="pane_position"></property>
<property name="pane_size"></property>
<property name="permission">protected</property>
<property name="pin_button">1</property>
<property name="pos"></property>
<property name="resize">Resizable</property>
<property name="selection">0</property>
<property name="show">1</property>
<property name="size"></property>
<property name="style"></property>
<property name="subclass">; ; forward_declare</property>
<property name="toolbar_pane">0</property>
<property name="tooltip"></property>
<property name="validator_data_type"></property>
<property name="validator_style">wxFILTER_NONE</property>
<property name="validator_type">wxDefaultValidator</property>
<property name="validator_variable"></property>
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></property>
</object>
</object>
</object>
</object>
</object>
</object>
<object class="sizeritem" expanded="0">
<property name="border">5</property>
<property name="flag">wxALL|wxEXPAND</property>
<property name="proportion">0</property>
<object class="wxStdDialogButtonSizer" expanded="0">
<property name="Apply">0</property>
<property name="Cancel">1</property>
<property name="ContextHelp">0</property>
<property name="Help">0</property>
<property name="No">0</property>
<property name="OK">1</property>
<property name="Save">0</property>
<property name="Yes">0</property>
<property name="minimum_size"></property>
<property name="name">m_sdbSizer1</property>
<property name="permission">protected</property>
</object>
</object>
</object> </object>
<object class="sizeritem" expanded="false">
<property name="border">5</property>
<property name="flag">wxBOTTOM|wxRIGHT|wxLEFT|wxEXPAND</property>
<property name="proportion">0</property>
<object class="wxTextCtrl" expanded="false">
<property name="BottomDockable">1</property>
<property name="LeftDockable">1</property>
<property name="RightDockable">1</property>
<property name="TopDockable">1</property>
<property name="aui_layer"></property>
<property name="aui_name"></property>
<property name="aui_position"></property>
<property name="aui_row"></property>
<property name="best_size"></property>
<property name="bg"></property>
<property name="caption"></property>
<property name="caption_visible">1</property>
<property name="center_pane">0</property>
<property name="close_button">1</property>
<property name="context_help"></property>
<property name="context_menu">1</property>
<property name="default_pane">0</property>
<property name="dock">Dock</property>
<property name="dock_fixed">0</property>
<property name="docking">Left</property>
<property name="drag_accept_files">0</property>
<property name="enabled">1</property>
<property name="fg"></property>
<property name="floatable">1</property>
<property name="font"></property>
<property name="gripper">0</property>
<property name="hidden">0</property>
<property name="id">wxID_ANY</property>
<property name="max_size"></property>
<property name="maximize_button">0</property>
<property name="maximum_size"></property>
<property name="maxlength"></property>
<property name="min_size"></property>
<property name="minimize_button">0</property>
<property name="minimum_size">300,-1</property>
<property name="moveable">1</property>
<property name="name">m_textCtrl</property>
<property name="pane_border">1</property>
<property name="pane_position"></property>
<property name="pane_size"></property>
<property name="permission">protected</property>
<property name="pin_button">1</property>
<property name="pos"></property>
<property name="resize">Resizable</property>
<property name="show">1</property>
<property name="size"></property>
<property name="style"></property>
<property name="subclass">; forward_declare</property>
<property name="toolbar_pane">0</property>
<property name="tooltip"></property>
<property name="validator_data_type"></property>
<property name="validator_style">wxFILTER_NONE</property>
<property name="validator_type">wxDefaultValidator</property>
<property name="validator_variable"></property>
<property name="value"></property>
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></property>
</object>
</object>
<object class="sizeritem" expanded="true">
<property name="border">5</property>
<property name="flag">wxEXPAND</property>
<property name="proportion">1</property>
<object class="wxBoxSizer" expanded="true">
<property name="minimum_size"></property>
<property name="name">bSizer3</property>
<property name="orient">wxHORIZONTAL</property>
<property name="permission">none</property>
<object class="sizeritem" expanded="true">
<property name="border">5</property>
<property name="flag">wxALIGN_CENTER_VERTICAL|wxLEFT|wxRIGHT</property>
<property name="proportion">0</property>
<object class="wxStaticText" expanded="true">
<property name="BottomDockable">1</property>
<property name="LeftDockable">1</property>
<property name="RightDockable">1</property>
<property name="TopDockable">1</property>
<property name="aui_layer"></property>
<property name="aui_name"></property>
<property name="aui_position"></property>
<property name="aui_row"></property>
<property name="best_size"></property>
<property name="bg"></property>
<property name="caption"></property>
<property name="caption_visible">1</property>
<property name="center_pane">0</property>
<property name="close_button">1</property>
<property name="context_help"></property>
<property name="context_menu">1</property>
<property name="default_pane">0</property>
<property name="dock">Dock</property>
<property name="dock_fixed">0</property>
<property name="docking">Left</property>
<property name="drag_accept_files">0</property>
<property name="enabled">1</property>
<property name="fg"></property>
<property name="floatable">1</property>
<property name="font"></property>
<property name="gripper">0</property>
<property name="hidden">1</property>
<property name="id">wxID_ANY</property>
<property name="label">MyLabel</property>
<property name="markup">0</property>
<property name="max_size"></property>
<property name="maximize_button">0</property>
<property name="maximum_size"></property>
<property name="min_size"></property>
<property name="minimize_button">0</property>
<property name="minimum_size"></property>
<property name="moveable">1</property>
<property name="name">m_choiceLabel</property>
<property name="pane_border">1</property>
<property name="pane_position"></property>
<property name="pane_size"></property>
<property name="permission">protected</property>
<property name="pin_button">1</property>
<property name="pos"></property>
<property name="resize">Resizable</property>
<property name="show">1</property>
<property name="size"></property>
<property name="style"></property>
<property name="subclass">; ; forward_declare</property>
<property name="toolbar_pane">0</property>
<property name="tooltip"></property>
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></property>
<property name="wrap">-1</property>
</object>
</object>
<object class="sizeritem" expanded="true">
<property name="border">5</property>
<property name="flag">wxALIGN_CENTER_VERTICAL|wxLEFT|wxRIGHT</property>
<property name="proportion">3</property>
<object class="wxChoice" expanded="true">
<property name="BottomDockable">1</property>
<property name="LeftDockable">1</property>
<property name="RightDockable">1</property>
<property name="TopDockable">1</property>
<property name="aui_layer"></property>
<property name="aui_name"></property>
<property name="aui_position"></property>
<property name="aui_row"></property>
<property name="best_size"></property>
<property name="bg"></property>
<property name="caption"></property>
<property name="caption_visible">1</property>
<property name="center_pane">0</property>
<property name="choices"></property>
<property name="close_button">1</property>
<property name="context_help"></property>
<property name="context_menu">1</property>
<property name="default_pane">0</property>
<property name="dock">Dock</property>
<property name="dock_fixed">0</property>
<property name="docking">Left</property>
<property name="drag_accept_files">0</property>
<property name="enabled">1</property>
<property name="fg"></property>
<property name="floatable">1</property>
<property name="font"></property>
<property name="gripper">0</property>
<property name="hidden">1</property>
<property name="id">wxID_ANY</property>
<property name="max_size"></property>
<property name="maximize_button">0</property>
<property name="maximum_size"></property>
<property name="min_size"></property>
<property name="minimize_button">0</property>
<property name="minimum_size"></property>
<property name="moveable">1</property>
<property name="name">m_choice</property>
<property name="pane_border">1</property>
<property name="pane_position"></property>
<property name="pane_size"></property>
<property name="permission">protected</property>
<property name="pin_button">1</property>
<property name="pos"></property>
<property name="resize">Resizable</property>
<property name="selection">0</property>
<property name="show">1</property>
<property name="size"></property>
<property name="style"></property>
<property name="subclass">; ; forward_declare</property>
<property name="toolbar_pane">0</property>
<property name="tooltip"></property>
<property name="validator_data_type"></property>
<property name="validator_style">wxFILTER_NONE</property>
<property name="validator_type">wxDefaultValidator</property>
<property name="validator_variable"></property>
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></property>
</object>
</object>
</object>
</object>
</object>
</object> </object>
<object class="sizeritem" expanded="false">
<property name="border">5</property>
<property name="flag">wxALL|wxEXPAND</property>
<property name="proportion">0</property>
<object class="wxStdDialogButtonSizer" expanded="false">
<property name="Apply">0</property>
<property name="Cancel">1</property>
<property name="ContextHelp">0</property>
<property name="Help">0</property>
<property name="No">0</property>
<property name="OK">1</property>
<property name="Save">0</property>
<property name="Yes">0</property>
<property name="minimum_size"></property>
<property name="name">m_sdbSizer1</property>
<property name="permission">protected</property>
</object>
</object>
</object>
</object> </object>
</object>
</wxFormBuilder_Project> </wxFormBuilder_Project>

View File

@ -1,5 +1,5 @@
/////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////
// C++ code generated with wxFormBuilder (version 3.10.0-4761b0c5) // C++ code generated with wxFormBuilder (version 4.0.0-0-g0efcecf)
// http://www.wxformbuilder.org/ // http://www.wxformbuilder.org/
// //
// PLEASE DO *NOT* EDIT THIS FILE! // PLEASE DO *NOT* EDIT THIS FILE!
@ -44,6 +44,7 @@ class WX_TEXT_ENTRY_DIALOG_BASE : public DIALOG_SHIM
wxButton* m_sdbSizer1Cancel; wxButton* m_sdbSizer1Cancel;
public: public:
wxBoxSizer* m_ContentSizer;
WX_TEXT_ENTRY_DIALOG_BASE( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = wxEmptyString, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( -1,-1 ), long style = wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER ); WX_TEXT_ENTRY_DIALOG_BASE( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = wxEmptyString, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( -1,-1 ), long style = wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER );

View File

@ -401,6 +401,12 @@ EDA_COMBINED_MATCHER::EDA_COMBINED_MATCHER( const wxString& aPattern,
AddMatcher( aPattern, std::make_unique<EDA_PATTERN_MATCH_SUBSTR>() ); AddMatcher( aPattern, std::make_unique<EDA_PATTERN_MATCH_SUBSTR>() );
break; break;
case CTX_NET:
AddMatcher( aPattern, std::make_unique<EDA_PATTERN_MATCH_REGEX>() );
AddMatcher( aPattern, std::make_unique<EDA_PATTERN_MATCH_WILDCARD>() );
AddMatcher( aPattern, std::make_unique<EDA_PATTERN_MATCH_SUBSTR>() );
break;
case CTX_NETCLASS: case CTX_NETCLASS:
AddMatcher( aPattern, std::make_unique<EDA_PATTERN_MATCH_REGEX_ANCHORED>() ); AddMatcher( aPattern, std::make_unique<EDA_PATTERN_MATCH_REGEX_ANCHORED>() );
AddMatcher( aPattern, std::make_unique<EDA_PATTERN_MATCH_WILDCARD_ANCHORED>() ); AddMatcher( aPattern, std::make_unique<EDA_PATTERN_MATCH_WILDCARD_ANCHORED>() );

View File

@ -201,6 +201,7 @@ protected:
enum COMBINED_MATCHER_CONTEXT enum COMBINED_MATCHER_CONTEXT
{ {
CTX_LIBITEM, CTX_LIBITEM,
CTX_NET,
CTX_NETCLASS, CTX_NETCLASS,
CTX_SIGNAL, CTX_SIGNAL,
CTX_SEARCH CTX_SEARCH

View File

@ -34,6 +34,7 @@
#include <settings/settings_manager.h> #include <settings/settings_manager.h>
#include <validators.h> #include <validators.h>
#include <wildcards_and_files_ext.h> #include <wildcards_and_files_ext.h>
#include <eda_pattern_match.h>
#include <wx/wupdlock.h> #include <wx/wupdlock.h>
#include <wx/headerctrl.h> #include <wx/headerctrl.h>
@ -443,7 +444,12 @@ void PCB_NET_INSPECTOR_PANEL::buildNetsList( bool rebuildColumns )
} }
m_data_model->deleteAllItems(); m_data_model->deleteAllItems();
m_custom_group_rules = cfg->custom_group_rules;
m_custom_group_rules.clear();
for( const wxString& rule : cfg->custom_group_rules )
m_custom_group_rules.push_back( std::make_unique<EDA_COMBINED_MATCHER>( rule, CTX_NET ) );
m_data_model->addCustomGroups(); m_data_model->addCustomGroups();
std::vector<std::unique_ptr<LIST_ITEM>> new_items; std::vector<std::unique_ptr<LIST_ITEM>> new_items;
@ -1167,14 +1173,14 @@ void PCB_NET_INSPECTOR_PANEL::OnNetsListContextMenu( wxDataViewEvent& event )
wxMenu menu; wxMenu menu;
// Net edit menu items // Net edit menu items
wxMenuItem* highlightNet = wxMenuItem* highlightNet = new wxMenuItem( &menu, ID_HIGHLIGHT_SELECTED_NETS,
new wxMenuItem( &menu, ID_HIGHLIGHT_SELECTED_NETS, _( "Highlight Selected Net" ), _( "Highlight Selected Net" ),
wxEmptyString, wxITEM_NORMAL ); wxEmptyString, wxITEM_NORMAL );
menu.Append( highlightNet ); menu.Append( highlightNet );
wxMenuItem* clearHighlighting = wxMenuItem* clearHighlighting = new wxMenuItem( &menu, ID_CLEAR_HIGHLIGHTING,
new wxMenuItem( &menu, ID_CLEAR_HIGHLIGHTING, _( "Clear Net Highlighting" ), _( "Clear Net Highlighting" ),
wxEmptyString, wxITEM_NORMAL ); wxEmptyString, wxITEM_NORMAL );
menu.Append( clearHighlighting ); menu.Append( clearHighlighting );
RENDER_SETTINGS* renderSettings = m_frame->GetCanvas()->GetView()->GetPainter()->GetSettings(); RENDER_SETTINGS* renderSettings = m_frame->GetCanvas()->GetView()->GetPainter()->GetSettings();
@ -1245,8 +1251,13 @@ void PCB_NET_INSPECTOR_PANEL::onAddGroup()
wxString newGroupName; wxString newGroupName;
NETNAME_VALIDATOR validator( &newGroupName ); NETNAME_VALIDATOR validator( &newGroupName );
WX_TEXT_ENTRY_DIALOG dlg( this, _( "Group name:" ), _( "New Group" ), newGroupName ); WX_TEXT_ENTRY_DIALOG dlg( this, _( "Group name / pattern:" ), _( "New Group" ), newGroupName );
wxStaticText* help = new wxStaticText( &dlg, wxID_ANY,
_( "(Use /.../ to indicate a regular expression.)" ) );
help->SetFont( KIUI::GetInfoFont( this ).Italic() );
dlg.m_ContentSizer->Add( help, 0, wxALL|wxEXPAND, 5 );
dlg.SetTextValidator( validator ); dlg.SetTextValidator( validator );
dlg.GetSizer()->SetSizeHints( &dlg );
if( dlg.ShowModal() != wxID_OK || dlg.GetValue().IsEmpty() ) if( dlg.ShowModal() != wxID_OK || dlg.GetValue().IsEmpty() )
return; //Aborted by user return; //Aborted by user
@ -1254,19 +1265,16 @@ void PCB_NET_INSPECTOR_PANEL::onAddGroup()
newGroupName = UnescapeString( dlg.GetValue() ); newGroupName = UnescapeString( dlg.GetValue() );
if( newGroupName == "" ) if( newGroupName == "" )
{
return; return;
}
auto pred = [&]( wxString& rule ) if( std::find_if( m_custom_group_rules.begin(), m_custom_group_rules.end(),
[&]( std::unique_ptr<EDA_COMBINED_MATCHER>& rule )
{
return rule->GetPattern().Upper() == newGroupName.Upper();
} ) == m_custom_group_rules.end() )
{ {
return rule.Upper() == newGroupName.Upper(); m_custom_group_rules.push_back( std::make_unique<EDA_COMBINED_MATCHER>( newGroupName,
}; CTX_NET ) );
if( std::find_if( m_custom_group_rules.begin(), m_custom_group_rules.end(), pred )
== m_custom_group_rules.end() )
{
m_custom_group_rules.push_back( newGroupName );
SaveSettings(); SaveSettings();
} }
@ -1317,13 +1325,15 @@ void PCB_NET_INSPECTOR_PANEL::OnConfigButton( wxCommandEvent& event )
wxMenu menu; wxMenu menu;
// Filtering menu items // Filtering menu items
wxMenuItem* filterByNetName = new wxMenuItem( wxMenuItem* filterByNetName = new wxMenuItem( &menu, ID_FILTER_BY_NET_NAME,
&menu, ID_FILTER_BY_NET_NAME, _( "Filter by Net Name" ), wxEmptyString, wxITEM_CHECK ); _( "Filter by Net Name" ),
wxEmptyString, wxITEM_CHECK );
filterByNetName->Check( cfg.filter_by_net_name ); filterByNetName->Check( cfg.filter_by_net_name );
menu.Append( filterByNetName ); menu.Append( filterByNetName );
wxMenuItem* filterByNetclass = new wxMenuItem( wxMenuItem* filterByNetclass = new wxMenuItem( &menu, ID_FILTER_BY_NETCLASS,
&menu, ID_FILTER_BY_NETCLASS, _( "Filter by Netclass" ), wxEmptyString, wxITEM_CHECK ); _( "Filter by Netclass" ),
wxEmptyString, wxITEM_CHECK );
filterByNetclass->Check( cfg.filter_by_netclass ); filterByNetclass->Check( cfg.filter_by_netclass );
menu.Append( filterByNetclass ); menu.Append( filterByNetclass );
@ -1347,9 +1357,9 @@ void PCB_NET_INSPECTOR_PANEL::OnConfigButton( wxCommandEvent& event )
wxEmptyString, wxITEM_NORMAL ); wxEmptyString, wxITEM_NORMAL );
menu.Append( addGroup ); menu.Append( addGroup );
wxMenuItem* removeSelectedGroup = wxMenuItem* removeSelectedGroup = new wxMenuItem( &menu, ID_REMOVE_SELECTED_GROUP,
new wxMenuItem( &menu, ID_REMOVE_SELECTED_GROUP, _( "Remove Selected Custom Group" ), _( "Remove Selected Custom Group" ),
wxEmptyString, wxITEM_NORMAL ); wxEmptyString, wxITEM_NORMAL );
menu.Append( removeSelectedGroup ); menu.Append( removeSelectedGroup );
if( !selItem || !selItem->GetIsGroup() ) if( !selItem || !selItem->GetIsGroup() )
@ -1357,31 +1367,32 @@ void PCB_NET_INSPECTOR_PANEL::OnConfigButton( wxCommandEvent& event )
removeSelectedGroup->Enable( false ); removeSelectedGroup->Enable( false );
} }
wxMenuItem* removeCustomGroups = wxMenuItem* removeCustomGroups = new wxMenuItem( &menu, ID_REMOVE_GROUPS,
new wxMenuItem( &menu, ID_REMOVE_GROUPS, _( "Remove All Custom Groups" ), wxEmptyString, _( "Remove All Custom Groups" ),
wxITEM_NORMAL ); wxEmptyString, wxITEM_NORMAL );
menu.Append( removeCustomGroups ); menu.Append( removeCustomGroups );
removeCustomGroups->Enable( m_custom_group_rules.size() != 0 ); removeCustomGroups->Enable( m_custom_group_rules.size() != 0 );
menu.AppendSeparator(); menu.AppendSeparator();
wxMenuItem* showZeroNetPads = new wxMenuItem( wxMenuItem* showZeroNetPads = new wxMenuItem( &menu, ID_SHOW_ZERO_NET_PADS,
&menu, ID_SHOW_ZERO_NET_PADS, _( "Show Zero Pad Nets" ), wxEmptyString, wxITEM_CHECK ); _( "Show Zero Pad Nets" ),
wxEmptyString, wxITEM_CHECK );
showZeroNetPads->Check( m_show_zero_pad_nets ); showZeroNetPads->Check( m_show_zero_pad_nets );
menu.Append( showZeroNetPads ); menu.Append( showZeroNetPads );
wxMenuItem* showUnconnectedNets = wxMenuItem* showUnconnectedNets = new wxMenuItem( &menu, ID_SHOW_UNCONNECTED_NETS,
new wxMenuItem( &menu, ID_SHOW_UNCONNECTED_NETS, _( "Show Unconnected Nets" ), _( "Show Unconnected Nets" ),
wxEmptyString, wxITEM_CHECK ); wxEmptyString, wxITEM_CHECK );
showUnconnectedNets->Check( m_show_unconnected_nets ); showUnconnectedNets->Check( m_show_unconnected_nets );
menu.Append( showUnconnectedNets ); menu.Append( showUnconnectedNets );
menu.AppendSeparator(); menu.AppendSeparator();
// Report generation // Report generation
wxMenuItem* generateReport = wxMenuItem* generateReport = new wxMenuItem( &menu, ID_GENERATE_REPORT,
new wxMenuItem( &menu, ID_GENERATE_REPORT, _( "Save Net Inspector Report" ), _( "Save Net Inspector Report" ),
wxEmptyString, wxITEM_NORMAL ); wxEmptyString, wxITEM_NORMAL );
menu.Append( generateReport ); menu.Append( generateReport );
menu.AppendSeparator(); menu.AppendSeparator();
@ -1428,85 +1439,69 @@ void PCB_NET_INSPECTOR_PANEL::onSettingsMenu( wxCommandEvent& event )
switch( event.GetId() ) switch( event.GetId() )
{ {
case ID_ADD_NET: case ID_ADD_NET:
{
onAddNet(); onAddNet();
break; break;
}
case ID_RENAME_NET: case ID_RENAME_NET:
{
onRenameSelectedNet(); onRenameSelectedNet();
break; break;
}
case ID_DELETE_NET: case ID_DELETE_NET:
{
onDeleteSelectedNet(); onDeleteSelectedNet();
break; break;
}
case ID_ADD_GROUP: case ID_ADD_GROUP:
{
onAddGroup(); onAddGroup();
break; break;
}
case ID_GROUP_BY_CONSTRAINT: case ID_GROUP_BY_CONSTRAINT:
{
m_group_by_constraint = !m_group_by_constraint; m_group_by_constraint = !m_group_by_constraint;
break; break;
}
case ID_GROUP_BY_NETCLASS: case ID_GROUP_BY_NETCLASS:
{
m_group_by_netclass = !m_group_by_netclass; m_group_by_netclass = !m_group_by_netclass;
break; break;
}
case ID_FILTER_BY_NET_NAME: case ID_FILTER_BY_NET_NAME:
{
m_filter_by_net_name = !m_filter_by_net_name; m_filter_by_net_name = !m_filter_by_net_name;
break; break;
}
case ID_FILTER_BY_NETCLASS: case ID_FILTER_BY_NETCLASS:
{
m_filter_by_netclass = !m_filter_by_netclass; m_filter_by_netclass = !m_filter_by_netclass;
break; break;
}
case ID_REMOVE_SELECTED_GROUP: case ID_REMOVE_SELECTED_GROUP:
{
onRemoveSelectedGroup(); onRemoveSelectedGroup();
break; break;
}
case ID_REMOVE_GROUPS: case ID_REMOVE_GROUPS:
{
m_custom_group_rules.clear(); m_custom_group_rules.clear();
break; break;
}
case ID_SHOW_ZERO_NET_PADS: case ID_SHOW_ZERO_NET_PADS:
{
m_show_zero_pad_nets = !m_show_zero_pad_nets; m_show_zero_pad_nets = !m_show_zero_pad_nets;
break; break;
}
case ID_SHOW_UNCONNECTED_NETS: case ID_SHOW_UNCONNECTED_NETS:
{
m_show_unconnected_nets = !m_show_unconnected_nets; m_show_unconnected_nets = !m_show_unconnected_nets;
break; break;
}
case ID_GENERATE_REPORT: case ID_GENERATE_REPORT:
{
generateReport(); generateReport();
saveAndRebuild = false; saveAndRebuild = false;
break; break;
}
case ID_HIGHLIGHT_SELECTED_NETS: case ID_HIGHLIGHT_SELECTED_NETS:
{
highlightSelectedNets(); highlightSelectedNets();
saveAndRebuild = false; saveAndRebuild = false;
break; break;
}
case ID_CLEAR_HIGHLIGHTING: case ID_CLEAR_HIGHLIGHTING:
{
onClearHighlighting(); onClearHighlighting();
saveAndRebuild = false; saveAndRebuild = false;
break; break;
}
default: default:
{
if( event.GetId() >= ID_HIDE_COLUMN ) if( event.GetId() >= ID_HIDE_COLUMN )
{ {
const int columnId = event.GetId() - ID_HIDE_COLUMN; const int columnId = event.GetId() - ID_HIDE_COLUMN;
@ -1517,7 +1512,6 @@ void PCB_NET_INSPECTOR_PANEL::onSettingsMenu( wxCommandEvent& event )
} }
break; break;
} }
}
if( saveAndRebuild ) if( saveAndRebuild )
{ {
@ -1531,14 +1525,16 @@ void PCB_NET_INSPECTOR_PANEL::onRemoveSelectedGroup()
{ {
if( m_netsList->GetSelectedItemsCount() == 1 ) if( m_netsList->GetSelectedItemsCount() == 1 )
{ {
const LIST_ITEM* selItem = auto* selItem = static_cast<const LIST_ITEM*>( m_netsList->GetSelection().GetID() );
static_cast<const LIST_ITEM*>( m_netsList->GetSelection().GetID() );
if( selItem->GetIsGroup() ) if( selItem->GetIsGroup() )
{ {
wxString groupName = selItem->GetGroupName(); wxString groupName = selItem->GetGroupName();
auto groupIter = std::find( m_custom_group_rules.begin(), m_custom_group_rules.end(), auto groupIter = std::find_if( m_custom_group_rules.begin(), m_custom_group_rules.end(),
groupName ); [&]( std::unique_ptr<EDA_COMBINED_MATCHER>& rule )
{
return rule->GetPattern() == groupName;
} );
if( groupIter != m_custom_group_rules.end() ) if( groupIter != m_custom_group_rules.end() )
{ {
@ -1575,13 +1571,15 @@ void PCB_NET_INSPECTOR_PANEL::generateReport()
if( col.has_units ) if( col.has_units )
{ {
txt += wxString::Format( _( "%s (%s)" ), col.csv_name, txt += wxString::Format( _( "%s (%s)" ),
col.csv_name,
EDA_UNIT_UTILS::GetLabel( m_frame->GetUserUnits() ) ); EDA_UNIT_UTILS::GetLabel( m_frame->GetUserUnits() ) );
} }
else else
{ {
txt += col.csv_name; txt += col.csv_name;
} }
txt += wxT( "\";" ); txt += wxT( "\";" );
} }
@ -1958,16 +1956,12 @@ void PCB_NET_INSPECTOR_PANEL::SaveSettings()
for( std::pair<wxString, wxDataViewItem>& item : groupItems ) for( std::pair<wxString, wxDataViewItem>& item : groupItems )
{ {
if( m_netsList->IsExpanded( item.second ) ) if( m_netsList->IsExpanded( item.second ) )
{
cfg.expanded_rows.push_back( item.first ); cfg.expanded_rows.push_back( item.first );
}
} }
// Customer group rules // Customer group rules
cfg.custom_group_rules.clear(); cfg.custom_group_rules.clear();
for( const wxString& rule : m_custom_group_rules ) for( const std::unique_ptr<EDA_COMBINED_MATCHER>& rule : m_custom_group_rules )
{ cfg.custom_group_rules.push_back( rule->GetPattern() );
cfg.custom_group_rules.push_back( rule );
}
} }

View File

@ -34,6 +34,7 @@ class BOARD;
class BOARD_ITEM; class BOARD_ITEM;
class CN_ITEM; class CN_ITEM;
class PCB_TRACK; class PCB_TRACK;
class EDA_COMBINED_MATCHER;
/** /**
* Net inspection panel for pcbnew * Net inspection panel for pcbnew
@ -284,7 +285,7 @@ private:
int m_num_copper_layers = 0; int m_num_copper_layers = 0;
std::vector<wxString> m_custom_group_rules; std::vector<std::unique_ptr<EDA_COMBINED_MATCHER>> m_custom_group_rules;
/** /**
* CSV output control * CSV output control

View File

@ -20,6 +20,9 @@
#ifndef PCB_NET_INSPECTOR_PANEL_DATA_MODEL #ifndef PCB_NET_INSPECTOR_PANEL_DATA_MODEL
#define PCB_NET_INSPECTOR_PANEL_DATA_MODEL #define PCB_NET_INSPECTOR_PANEL_DATA_MODEL
#include <eda_pattern_match.h>
/** /**
* Primary data item for entries in the Net Inspector list. * Primary data item for entries in the Net Inspector list.
* *
@ -36,13 +39,17 @@ public:
}; };
LIST_ITEM( unsigned int aGroupNumber, const wxString& aGroupName, GROUP_TYPE aGroupType ) : LIST_ITEM( unsigned int aGroupNumber, const wxString& aGroupName, GROUP_TYPE aGroupType ) :
m_group_type( aGroupType ), m_group_number( aGroupNumber ), m_net_name( aGroupName ) m_group_type( aGroupType ),
m_group_number( aGroupNumber ),
m_net_name( aGroupName )
{ {
m_group_name = aGroupName; m_group_name = aGroupName;
m_column_changed.resize( COLUMN_LAST_STATIC_COL + 1 + MAX_CU_LAYERS, 0 ); m_column_changed.resize( COLUMN_LAST_STATIC_COL + 1 + MAX_CU_LAYERS, 0 );
} }
LIST_ITEM( NETINFO_ITEM* aNet ) : m_group_type( GROUP_TYPE::NONE ), m_net( aNet ) LIST_ITEM( NETINFO_ITEM* aNet ) :
m_group_type( GROUP_TYPE::NONE ),
m_net( aNet )
{ {
wxASSERT( aNet ); wxASSERT( aNet );
m_net_name = UnescapeString( aNet->GetNetname() ); m_net_name = UnescapeString( aNet->GetNetname() );
@ -195,8 +202,11 @@ public:
wxCHECK_RET( aLayer < m_layer_wire_length.size(), wxT( "Invalid layer specified" ) ); wxCHECK_RET( aLayer < m_layer_wire_length.size(), wxT( "Invalid layer specified" ) );
if( m_parent ) if( m_parent )
m_parent->SetLayerWireLength( {
m_parent->GetBoardWireLength() - m_layer_wire_length[aLayer] + aValue, aLayer ); m_parent->SetLayerWireLength( m_parent->GetBoardWireLength()
- m_layer_wire_length[aLayer] + aValue,
aLayer );
}
m_column_changed[COLUMN_BOARD_LENGTH] |= ( m_layer_wire_length[aLayer] != aValue ); m_column_changed[COLUMN_BOARD_LENGTH] |= ( m_layer_wire_length[aLayer] != aValue );
m_layer_wire_length[aLayer] = aValue; m_layer_wire_length[aLayer] = aValue;
@ -280,8 +290,8 @@ public:
m_parent->SubPadDieLength( GetPadDieLength() ); m_parent->SubPadDieLength( GetPadDieLength() );
m_parent->m_children.erase( m_parent->m_children.erase( std::find( m_parent->m_children.begin(),
std::find( m_parent->m_children.begin(), m_parent->m_children.end(), this ) ); m_parent->m_children.end(), this ) );
} }
m_parent = aParent; m_parent = aParent;
@ -400,8 +410,10 @@ public:
for( std::unique_ptr<LIST_ITEM>& item : m_items ) for( std::unique_ptr<LIST_ITEM>& item : m_items )
{ {
if( item->GetIsGroup() ) if( item->GetIsGroup() )
ret.push_back( {
std::make_pair( item->GetGroupName(), wxDataViewItem( item.get() ) ) ); ret.push_back( std::make_pair( item->GetGroupName(),
wxDataViewItem( item.get() ) ) );
}
} }
return ret; return ret;
@ -454,8 +466,8 @@ public:
if( group == groupsEnd ) if( group == groupsEnd )
{ {
int dist = std::distance( groupsBegin, groupsEnd ); int dist = std::distance( groupsBegin, groupsEnd );
std::unique_ptr<LIST_ITEM> groupItem = std::unique_ptr<LIST_ITEM> groupItem = std::make_unique<LIST_ITEM>( dist, groupName,
std::make_unique<LIST_ITEM>( dist, groupName, groupType ); groupType );
group = m_items.insert( groupsEnd, std::move( groupItem ) ); group = m_items.insert( groupsEnd, std::move( groupItem ) );
ItemAdded( wxDataViewItem( ( *group )->Parent() ), wxDataViewItem( &**group ) ); ItemAdded( wxDataViewItem( ( *group )->Parent() ), wxDataViewItem( &**group ) );
} }
@ -476,11 +488,11 @@ public:
{ {
wxString searchName = aItem->GetNetName().Upper(); wxString searchName = aItem->GetNetName().Upper();
for( const wxString& groupName : m_parent.m_custom_group_rules ) for( const std::unique_ptr<EDA_COMBINED_MATCHER>& rule : m_parent.m_custom_group_rules )
{ {
if( searchName.Find( groupName.Upper() ) != wxNOT_FOUND ) if( rule->Find( searchName.Upper() ) )
{ {
aItem->SetParent( m_custom_group_map[groupName] ); aItem->SetParent( m_custom_group_map[ rule->GetPattern() ] );
groupMatched = true; groupMatched = true;
break; break;
} }
@ -573,11 +585,11 @@ public:
m_custom_group_map.clear(); m_custom_group_map.clear();
int groupId = 0; int groupId = 0;
for( const wxString& groupName : m_parent.m_custom_group_rules ) for( const std::unique_ptr<EDA_COMBINED_MATCHER>& rule : m_parent.m_custom_group_rules )
{ {
std::unique_ptr<LIST_ITEM>& group = m_items.emplace_back( std::make_unique<LIST_ITEM>( std::unique_ptr<LIST_ITEM>& group = m_items.emplace_back( std::make_unique<LIST_ITEM>(
groupId, groupName, LIST_ITEM::GROUP_TYPE::USER_DEFINED ) ); groupId, rule->GetPattern(), LIST_ITEM::GROUP_TYPE::USER_DEFINED ) );
m_custom_group_map[groupName] = group.get(); m_custom_group_map[ rule->GetPattern() ] = group.get();
ItemAdded( wxDataViewItem( group->Parent() ), wxDataViewItem( group.get() ) ); ItemAdded( wxDataViewItem( group->Parent() ), wxDataViewItem( group.get() ) );
++groupId; ++groupId;
} }
@ -674,6 +686,7 @@ protected:
if( i->GetIsGroup() ) if( i->GetIsGroup() )
{ {
if( aCol == COLUMN_NAME ) if( aCol == COLUMN_NAME )
{
switch( i->GetGroupType() ) switch( i->GetGroupType() )
{ {
case LIST_ITEM::GROUP_TYPE::NETCLASS: case LIST_ITEM::GROUP_TYPE::NETCLASS:
@ -682,11 +695,15 @@ protected:
case LIST_ITEM::GROUP_TYPE::USER_DEFINED: case LIST_ITEM::GROUP_TYPE::USER_DEFINED:
aOutValue = _( "Custom" ) + ": " + i->GetGroupName(); aOutValue = _( "Custom" ) + ": " + i->GetGroupName();
break; break;
default: aOutValue = i->GetGroupName(); break; default:
aOutValue = i->GetGroupName();
break;
} }
}
else else
{
aOutValue = ""; aOutValue = "";
}
} }
else if( aCol == COLUMN_NAME ) else if( aCol == COLUMN_NAME )
@ -714,8 +731,7 @@ protected:
aOutValue = m_parent.formatLength( i->GetTotalLength() ); aOutValue = m_parent.formatLength( i->GetTotalLength() );
else if( aCol > COLUMN_LAST_STATIC_COL && aCol <= m_parent.m_columns.size() ) else if( aCol > COLUMN_LAST_STATIC_COL && aCol <= m_parent.m_columns.size() )
aOutValue = m_parent.formatLength( aOutValue = m_parent.formatLength( i->GetLayerWireLength( m_parent.m_columns[aCol].layer ) );
i->GetLayerWireLength( m_parent.m_columns[aCol].layer ) );
else else
aOutValue = ""; aOutValue = "";