ADDED: Selection filter for schematic editor
Fixes https://gitlab.com/kicad/code/kicad/-/issues/14988
This commit is contained in:
parent
11774cc9fe
commit
2f6c9d1f3a
|
@ -41,7 +41,7 @@ PROJECT_LOCAL_SETTINGS::PROJECT_LOCAL_SETTINGS( PROJECT* aProject, const wxStrin
|
||||||
m_PadOpacity( 1.0 ),
|
m_PadOpacity( 1.0 ),
|
||||||
m_ZoneOpacity( 0.6 ),
|
m_ZoneOpacity( 0.6 ),
|
||||||
m_ImageOpacity( 0.6 ),
|
m_ImageOpacity( 0.6 ),
|
||||||
m_SelectionFilter(),
|
m_PcbSelectionFilter(),
|
||||||
m_project( aProject )
|
m_project( aProject )
|
||||||
{
|
{
|
||||||
// Keep old files around
|
// Keep old files around
|
||||||
|
@ -99,17 +99,17 @@ PROJECT_LOCAL_SETTINGS::PROJECT_LOCAL_SETTINGS( PROJECT* aProject, const wxStrin
|
||||||
{
|
{
|
||||||
nlohmann::json ret;
|
nlohmann::json ret;
|
||||||
|
|
||||||
ret["lockedItems"] = m_SelectionFilter.lockedItems;
|
ret["lockedItems"] = m_PcbSelectionFilter.lockedItems;
|
||||||
ret["footprints"] = m_SelectionFilter.footprints;
|
ret["footprints"] = m_PcbSelectionFilter.footprints;
|
||||||
ret["text"] = m_SelectionFilter.text;
|
ret["text"] = m_PcbSelectionFilter.text;
|
||||||
ret["tracks"] = m_SelectionFilter.tracks;
|
ret["tracks"] = m_PcbSelectionFilter.tracks;
|
||||||
ret["vias"] = m_SelectionFilter.vias;
|
ret["vias"] = m_PcbSelectionFilter.vias;
|
||||||
ret["pads"] = m_SelectionFilter.pads;
|
ret["pads"] = m_PcbSelectionFilter.pads;
|
||||||
ret["graphics"] = m_SelectionFilter.graphics;
|
ret["graphics"] = m_PcbSelectionFilter.graphics;
|
||||||
ret["zones"] = m_SelectionFilter.zones;
|
ret["zones"] = m_PcbSelectionFilter.zones;
|
||||||
ret["keepouts"] = m_SelectionFilter.keepouts;
|
ret["keepouts"] = m_PcbSelectionFilter.keepouts;
|
||||||
ret["dimensions"] = m_SelectionFilter.dimensions;
|
ret["dimensions"] = m_PcbSelectionFilter.dimensions;
|
||||||
ret["otherItems"] = m_SelectionFilter.otherItems;
|
ret["otherItems"] = m_PcbSelectionFilter.otherItems;
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
},
|
},
|
||||||
|
@ -118,17 +118,17 @@ PROJECT_LOCAL_SETTINGS::PROJECT_LOCAL_SETTINGS( PROJECT* aProject, const wxStrin
|
||||||
if( aVal.empty() || !aVal.is_object() )
|
if( aVal.empty() || !aVal.is_object() )
|
||||||
return;
|
return;
|
||||||
|
|
||||||
SetIfPresent( aVal, "lockedItems", m_SelectionFilter.lockedItems );
|
SetIfPresent( aVal, "lockedItems", m_PcbSelectionFilter.lockedItems );
|
||||||
SetIfPresent( aVal, "footprints", m_SelectionFilter.footprints );
|
SetIfPresent( aVal, "footprints", m_PcbSelectionFilter.footprints );
|
||||||
SetIfPresent( aVal, "text", m_SelectionFilter.text );
|
SetIfPresent( aVal, "text", m_PcbSelectionFilter.text );
|
||||||
SetIfPresent( aVal, "tracks", m_SelectionFilter.tracks );
|
SetIfPresent( aVal, "tracks", m_PcbSelectionFilter.tracks );
|
||||||
SetIfPresent( aVal, "vias", m_SelectionFilter.vias );
|
SetIfPresent( aVal, "vias", m_PcbSelectionFilter.vias );
|
||||||
SetIfPresent( aVal, "pads", m_SelectionFilter.pads );
|
SetIfPresent( aVal, "pads", m_PcbSelectionFilter.pads );
|
||||||
SetIfPresent( aVal, "graphics", m_SelectionFilter.graphics );
|
SetIfPresent( aVal, "graphics", m_PcbSelectionFilter.graphics );
|
||||||
SetIfPresent( aVal, "zones", m_SelectionFilter.zones );
|
SetIfPresent( aVal, "zones", m_PcbSelectionFilter.zones );
|
||||||
SetIfPresent( aVal, "keepouts", m_SelectionFilter.keepouts );
|
SetIfPresent( aVal, "keepouts", m_PcbSelectionFilter.keepouts );
|
||||||
SetIfPresent( aVal, "dimensions", m_SelectionFilter.dimensions );
|
SetIfPresent( aVal, "dimensions", m_PcbSelectionFilter.dimensions );
|
||||||
SetIfPresent( aVal, "otherItems", m_SelectionFilter.otherItems );
|
SetIfPresent( aVal, "otherItems", m_PcbSelectionFilter.otherItems );
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
{ "lockedItems", false },
|
{ "lockedItems", false },
|
||||||
|
@ -251,6 +251,50 @@ PROJECT_LOCAL_SETTINGS::PROJECT_LOCAL_SETTINGS( PROJECT* aProject, const wxStrin
|
||||||
{
|
{
|
||||||
} ) );
|
} ) );
|
||||||
|
|
||||||
|
m_params.emplace_back( new PARAM_LAMBDA<nlohmann::json>( "schematic.selection_filter",
|
||||||
|
[&]() -> nlohmann::json
|
||||||
|
{
|
||||||
|
nlohmann::json ret;
|
||||||
|
|
||||||
|
ret["lockedItems"] = m_SchSelectionFilter.lockedItems;
|
||||||
|
ret["symbols"] = m_SchSelectionFilter.symbols;
|
||||||
|
ret["text"] = m_SchSelectionFilter.text;
|
||||||
|
ret["wires"] = m_SchSelectionFilter.wires;
|
||||||
|
ret["labels"] = m_SchSelectionFilter.labels;
|
||||||
|
ret["pins"] = m_SchSelectionFilter.pins;
|
||||||
|
ret["graphics"] = m_SchSelectionFilter.graphics;
|
||||||
|
ret["images"] = m_SchSelectionFilter.images;
|
||||||
|
ret["otherItems"] = m_SchSelectionFilter.otherItems;
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
},
|
||||||
|
[&]( const nlohmann::json& aVal )
|
||||||
|
{
|
||||||
|
if( aVal.empty() || !aVal.is_object() )
|
||||||
|
return;
|
||||||
|
|
||||||
|
SetIfPresent( aVal, "lockedItems", m_SchSelectionFilter.lockedItems );
|
||||||
|
SetIfPresent( aVal, "symbols", m_SchSelectionFilter.symbols );
|
||||||
|
SetIfPresent( aVal, "text", m_SchSelectionFilter.text );
|
||||||
|
SetIfPresent( aVal, "wires", m_SchSelectionFilter.wires );
|
||||||
|
SetIfPresent( aVal, "labels", m_SchSelectionFilter.labels );
|
||||||
|
SetIfPresent( aVal, "pins", m_SchSelectionFilter.pins );
|
||||||
|
SetIfPresent( aVal, "graphics", m_SchSelectionFilter.graphics );
|
||||||
|
SetIfPresent( aVal, "images", m_SchSelectionFilter.images );
|
||||||
|
SetIfPresent( aVal, "otherItems", m_SchSelectionFilter.otherItems );
|
||||||
|
},
|
||||||
|
{
|
||||||
|
{ "lockedItems", false },
|
||||||
|
{ "symbols", true },
|
||||||
|
{ "text", true },
|
||||||
|
{ "wires", true },
|
||||||
|
{ "labels", true },
|
||||||
|
{ "pins", true },
|
||||||
|
{ "graphics", true },
|
||||||
|
{ "images", true },
|
||||||
|
{ "otherItems", true }
|
||||||
|
} ) );
|
||||||
|
|
||||||
registerMigration( 1, 2,
|
registerMigration( 1, 2,
|
||||||
[&]()
|
[&]()
|
||||||
{
|
{
|
||||||
|
|
|
@ -278,6 +278,8 @@ set( EESCHEMA_SIM_SRCS
|
||||||
|
|
||||||
set( EESCHEMA_WIDGETS
|
set( EESCHEMA_WIDGETS
|
||||||
widgets/hierarchy_pane.cpp
|
widgets/hierarchy_pane.cpp
|
||||||
|
widgets/panel_sch_selection_filter_base.cpp
|
||||||
|
widgets/panel_sch_selection_filter.cpp
|
||||||
widgets/panel_symbol_chooser.cpp
|
widgets/panel_symbol_chooser.cpp
|
||||||
widgets/pin_shape_combobox.cpp
|
widgets/pin_shape_combobox.cpp
|
||||||
widgets/pin_type_combobox.cpp
|
widgets/pin_type_combobox.cpp
|
||||||
|
|
|
@ -28,12 +28,14 @@
|
||||||
#include <dialogs/panel_gal_display_options.h>
|
#include <dialogs/panel_gal_display_options.h>
|
||||||
#include <pgm_base.h>
|
#include <pgm_base.h>
|
||||||
#include <project/project_file.h>
|
#include <project/project_file.h>
|
||||||
|
#include <project/project_local_settings.h>
|
||||||
#include <project/net_settings.h>
|
#include <project/net_settings.h>
|
||||||
#include <sch_edit_frame.h>
|
#include <sch_edit_frame.h>
|
||||||
#include <sch_painter.h>
|
#include <sch_painter.h>
|
||||||
#include <schematic.h>
|
#include <schematic.h>
|
||||||
#include <widgets/hierarchy_pane.h>
|
#include <widgets/hierarchy_pane.h>
|
||||||
#include <widgets/sch_search_pane.h>
|
#include <widgets/sch_search_pane.h>
|
||||||
|
#include <widgets/panel_sch_selection_filter.h>
|
||||||
#include <widgets/properties_panel.h>
|
#include <widgets/properties_panel.h>
|
||||||
#include <settings/app_settings.h>
|
#include <settings/app_settings.h>
|
||||||
#include <settings/settings_manager.h>
|
#include <settings/settings_manager.h>
|
||||||
|
@ -41,6 +43,8 @@
|
||||||
#include <drawing_sheet/ds_data_model.h>
|
#include <drawing_sheet/ds_data_model.h>
|
||||||
#include <zoom_defines.h>
|
#include <zoom_defines.h>
|
||||||
#include <sim/spice_settings.h>
|
#include <sim/spice_settings.h>
|
||||||
|
#include <tool/tool_manager.h>
|
||||||
|
#include <tools/ee_selection_tool.h>
|
||||||
|
|
||||||
|
|
||||||
/// Helper for all the old plotting/printing code while it still exists
|
/// Helper for all the old plotting/printing code while it still exists
|
||||||
|
@ -73,6 +77,12 @@ bool SCH_EDIT_FRAME::LoadProjectSettings()
|
||||||
if( !DS_DATA_MODEL::GetTheInstance().LoadDrawingSheet( filename ) )
|
if( !DS_DATA_MODEL::GetTheInstance().LoadDrawingSheet( filename ) )
|
||||||
ShowInfoBarError( _( "Error loading drawing sheet." ), true );
|
ShowInfoBarError( _( "Error loading drawing sheet." ), true );
|
||||||
|
|
||||||
|
PROJECT_LOCAL_SETTINGS& localSettings = Prj().GetLocalSettings();
|
||||||
|
|
||||||
|
EE_SELECTION_TOOL* selTool = GetToolManager()->GetTool<EE_SELECTION_TOOL>();
|
||||||
|
selTool->GetFilter() = localSettings.m_SchSelectionFilter;
|
||||||
|
m_selectionFilterPanel->SetCheckboxesFromFilter( localSettings.m_SchSelectionFilter );
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -188,6 +198,11 @@ void SCH_EDIT_FRAME::SaveProjectLocalSettings()
|
||||||
{
|
{
|
||||||
if( m_schematic )
|
if( m_schematic )
|
||||||
m_schematic->RecordERCExclusions();
|
m_schematic->RecordERCExclusions();
|
||||||
|
|
||||||
|
PROJECT_LOCAL_SETTINGS& localSettings = Prj().GetLocalSettings();
|
||||||
|
EE_SELECTION_TOOL* selTool = GetToolManager()->GetTool<EE_SELECTION_TOOL>();
|
||||||
|
|
||||||
|
localSettings.m_SchSelectionFilter = selTool->GetFilter();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -70,7 +70,7 @@ const wxAuiPaneInfo& defaultNetNavigatorPaneInfo()
|
||||||
.Caption( _( "Net Navigator" ) )
|
.Caption( _( "Net Navigator" ) )
|
||||||
.CaptionVisible( true )
|
.CaptionVisible( true )
|
||||||
.PaneBorder( true )
|
.PaneBorder( true )
|
||||||
.Left().Layer( 3 )
|
.Left().Layer( 3 ).Position( 1 )
|
||||||
.TopDockable( false )
|
.TopDockable( false )
|
||||||
.BottomDockable( false )
|
.BottomDockable( false )
|
||||||
.CloseButton( true )
|
.CloseButton( true )
|
||||||
|
@ -92,7 +92,7 @@ const wxAuiPaneInfo& defaultPropertiesPaneInfo( wxWindow* aWindow )
|
||||||
.Caption( _( "Properties" ) )
|
.Caption( _( "Properties" ) )
|
||||||
.CaptionVisible( true )
|
.CaptionVisible( true )
|
||||||
.PaneBorder( true )
|
.PaneBorder( true )
|
||||||
.Left().Layer( 3 )
|
.Left().Layer( 3 ).Position( 2 )
|
||||||
.TopDockable( false )
|
.TopDockable( false )
|
||||||
.BottomDockable( false )
|
.BottomDockable( false )
|
||||||
.CloseButton( true )
|
.CloseButton( true )
|
||||||
|
@ -106,6 +106,26 @@ const wxAuiPaneInfo& defaultPropertiesPaneInfo( wxWindow* aWindow )
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
const wxAuiPaneInfo& defaultSchSelectionFilterPaneInfo( wxWindow* aWindow )
|
||||||
|
{
|
||||||
|
static wxAuiPaneInfo paneInfo;
|
||||||
|
|
||||||
|
paneInfo.Name( wxS( "SelectionFilter" ) )
|
||||||
|
.Caption( _( "Selection Filter" ) )
|
||||||
|
.CaptionVisible( true )
|
||||||
|
.PaneBorder( false )
|
||||||
|
.Left().Layer( 3 ).Position( 3 )
|
||||||
|
.TopDockable( false )
|
||||||
|
.BottomDockable( false )
|
||||||
|
.CloseButton( false )
|
||||||
|
.MinSize( aWindow->FromDIP( wxSize( 180, -1 ) ) )
|
||||||
|
.BestSize( aWindow->FromDIP( wxSize( 180, -1 ) ) )
|
||||||
|
.Show( true );
|
||||||
|
|
||||||
|
return paneInfo;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
EESCHEMA_SETTINGS::EESCHEMA_SETTINGS() :
|
EESCHEMA_SETTINGS::EESCHEMA_SETTINGS() :
|
||||||
APP_SETTINGS_BASE( "eeschema", eeschemaSchemaVersion ),
|
APP_SETTINGS_BASE( "eeschema", eeschemaSchemaVersion ),
|
||||||
m_Appearance(),
|
m_Appearance(),
|
||||||
|
|
|
@ -34,6 +34,7 @@ using KIGFX::COLOR4D;
|
||||||
|
|
||||||
extern const wxAuiPaneInfo& defaultNetNavigatorPaneInfo();
|
extern const wxAuiPaneInfo& defaultNetNavigatorPaneInfo();
|
||||||
extern const wxAuiPaneInfo& defaultPropertiesPaneInfo( wxWindow* aWindow );
|
extern const wxAuiPaneInfo& defaultPropertiesPaneInfo( wxWindow* aWindow );
|
||||||
|
extern const wxAuiPaneInfo& defaultSchSelectionFilterPaneInfo( wxWindow* aWindow );
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -161,7 +161,10 @@ bool SCH_EDIT_FRAME::OpenProjectFiles( const std::vector<wxString>& aFileSet, in
|
||||||
if( differentProject )
|
if( differentProject )
|
||||||
{
|
{
|
||||||
if( !Prj().IsNullProject() )
|
if( !Prj().IsNullProject() )
|
||||||
|
{
|
||||||
|
SaveProjectLocalSettings();
|
||||||
GetSettingsManager()->SaveProject();
|
GetSettingsManager()->SaveProject();
|
||||||
|
}
|
||||||
|
|
||||||
Schematic().SetProject( nullptr );
|
Schematic().SetProject( nullptr );
|
||||||
GetSettingsManager()->UnloadProject( &Prj(), false );
|
GetSettingsManager()->UnloadProject( &Prj(), false );
|
||||||
|
@ -1257,6 +1260,7 @@ bool SCH_EDIT_FRAME::SaveProject( bool aSaveAs )
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
saveProjectSettings();
|
saveProjectSettings();
|
||||||
|
SaveProjectLocalSettings();
|
||||||
}
|
}
|
||||||
|
|
||||||
if( !Kiface().IsSingle() )
|
if( !Kiface().IsSingle() )
|
||||||
|
|
|
@ -411,6 +411,7 @@ void SCH_EDIT_FRAME::ToggleNetNavigator()
|
||||||
wxAuiPaneInfo& netNavigatorPane = m_auimgr.GetPane( NetNavigatorPaneName() );
|
wxAuiPaneInfo& netNavigatorPane = m_auimgr.GetPane( NetNavigatorPaneName() );
|
||||||
|
|
||||||
netNavigatorPane.Show( !netNavigatorPane.IsShown() );
|
netNavigatorPane.Show( !netNavigatorPane.IsShown() );
|
||||||
|
updateSelectionFilterVisbility();
|
||||||
|
|
||||||
cfg->m_AuiPanels.show_net_nav_panel = netNavigatorPane.IsShown();
|
cfg->m_AuiPanels.show_net_nav_panel = netNavigatorPane.IsShown();
|
||||||
|
|
||||||
|
|
|
@ -92,7 +92,9 @@ SCH_BASE_FRAME::SCH_BASE_FRAME( KIWAY* aKiway, wxWindow* aParent, FRAME_T aWindo
|
||||||
const wxSize& aSize, long aStyle, const wxString& aFrameName ) :
|
const wxSize& aSize, long aStyle, const wxString& aFrameName ) :
|
||||||
EDA_DRAW_FRAME( aKiway, aParent, aWindowType, aTitle, aPosition, aSize, aStyle,
|
EDA_DRAW_FRAME( aKiway, aParent, aWindowType, aTitle, aPosition, aSize, aStyle,
|
||||||
aFrameName, schIUScale ),
|
aFrameName, schIUScale ),
|
||||||
m_base_frame_defaults( nullptr, "base_Frame_defaults" ), m_spaceMouse( nullptr )
|
m_base_frame_defaults( nullptr, "base_Frame_defaults" ),
|
||||||
|
m_selectionFilterPanel( nullptr ),
|
||||||
|
m_spaceMouse( nullptr )
|
||||||
{
|
{
|
||||||
if( ( aStyle & wxFRAME_NO_TASKBAR ) == 0 )
|
if( ( aStyle & wxFRAME_NO_TASKBAR ) == 0 )
|
||||||
createCanvas();
|
createCanvas();
|
||||||
|
|
|
@ -61,6 +61,7 @@ class SYMBOL_LIB_TABLE;
|
||||||
class EESCHEMA_SETTINGS;
|
class EESCHEMA_SETTINGS;
|
||||||
class SYMBOL_EDITOR_SETTINGS;
|
class SYMBOL_EDITOR_SETTINGS;
|
||||||
class NL_SCHEMATIC_PLUGIN;
|
class NL_SCHEMATIC_PLUGIN;
|
||||||
|
class PANEL_SCH_SELECTION_FILTER;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Load symbol from symbol library table.
|
* Load symbol from symbol library table.
|
||||||
|
@ -273,10 +274,18 @@ protected:
|
||||||
*/
|
*/
|
||||||
void setSymWatcher( const LIB_ID* aSymbol );
|
void setSymWatcher( const LIB_ID* aSymbol );
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Selection filter panel doesn't have a dedicated visibility control, so show it if any
|
||||||
|
* other AUI panel is shown and docked
|
||||||
|
*/
|
||||||
|
virtual void updateSelectionFilterVisbility() {}
|
||||||
|
|
||||||
/// These are only used by symbol_editor. Eeschema should be using the one inside
|
/// These are only used by symbol_editor. Eeschema should be using the one inside
|
||||||
/// the SCHEMATIC.
|
/// the SCHEMATIC.
|
||||||
SCHEMATIC_SETTINGS m_base_frame_defaults;
|
SCHEMATIC_SETTINGS m_base_frame_defaults;
|
||||||
|
|
||||||
|
PANEL_SCH_SELECTION_FILTER* m_selectionFilterPanel;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
/// These are file watchers for the symbol library tables.
|
/// These are file watchers for the symbol library tables.
|
||||||
|
|
|
@ -93,6 +93,7 @@
|
||||||
#include <wx/app.h>
|
#include <wx/app.h>
|
||||||
#include <wx/filedlg.h>
|
#include <wx/filedlg.h>
|
||||||
#include <wx/socket.h>
|
#include <wx/socket.h>
|
||||||
|
#include <widgets/panel_sch_selection_filter.h>
|
||||||
#include <widgets/wx_aui_utils.h>
|
#include <widgets/wx_aui_utils.h>
|
||||||
#include <drawing_sheet/ds_proxy_view_item.h>
|
#include <drawing_sheet/ds_proxy_view_item.h>
|
||||||
|
|
||||||
|
@ -189,6 +190,8 @@ SCH_EDIT_FRAME::SCH_EDIT_FRAME( KIWAY* aKiway, wxWindow* aParent ) :
|
||||||
|
|
||||||
m_propertiesPanel->SetSplitterProportion( eeconfig()->m_AuiPanels.properties_splitter );
|
m_propertiesPanel->SetSplitterProportion( eeconfig()->m_AuiPanels.properties_splitter );
|
||||||
|
|
||||||
|
m_selectionFilterPanel = new PANEL_SCH_SELECTION_FILTER( this );
|
||||||
|
|
||||||
m_auimgr.SetManagedWindow( this );
|
m_auimgr.SetManagedWindow( this );
|
||||||
|
|
||||||
CreateInfoBar();
|
CreateInfoBar();
|
||||||
|
@ -214,6 +217,7 @@ SCH_EDIT_FRAME::SCH_EDIT_FRAME( KIWAY* aKiway, wxWindow* aParent ) :
|
||||||
.Show( false ) );
|
.Show( false ) );
|
||||||
|
|
||||||
m_auimgr.AddPane( m_propertiesPanel, defaultPropertiesPaneInfo( this ) );
|
m_auimgr.AddPane( m_propertiesPanel, defaultPropertiesPaneInfo( this ) );
|
||||||
|
m_auimgr.AddPane( m_selectionFilterPanel, defaultSchSelectionFilterPaneInfo( this ) );
|
||||||
|
|
||||||
m_auimgr.AddPane( createHighlightedNetNavigator(), defaultNetNavigatorPaneInfo() );
|
m_auimgr.AddPane( createHighlightedNetNavigator(), defaultNetNavigatorPaneInfo() );
|
||||||
|
|
||||||
|
@ -252,11 +256,16 @@ SCH_EDIT_FRAME::SCH_EDIT_FRAME( KIWAY* aKiway, wxWindow* aParent ) :
|
||||||
wxAuiPaneInfo& hierarchy_pane = m_auimgr.GetPane( SchematicHierarchyPaneName() );
|
wxAuiPaneInfo& hierarchy_pane = m_auimgr.GetPane( SchematicHierarchyPaneName() );
|
||||||
wxAuiPaneInfo& netNavigatorPane = m_auimgr.GetPane( NetNavigatorPaneName() );
|
wxAuiPaneInfo& netNavigatorPane = m_auimgr.GetPane( NetNavigatorPaneName() );
|
||||||
wxAuiPaneInfo& propertiesPane = m_auimgr.GetPane( PropertiesPaneName() );
|
wxAuiPaneInfo& propertiesPane = m_auimgr.GetPane( PropertiesPaneName() );
|
||||||
|
wxAuiPaneInfo& selectionFilterPane = m_auimgr.GetPane( wxS( "SelectionFilter" ) );
|
||||||
EESCHEMA_SETTINGS* cfg = eeconfig();
|
EESCHEMA_SETTINGS* cfg = eeconfig();
|
||||||
|
|
||||||
hierarchy_pane.Show( cfg->m_AuiPanels.show_schematic_hierarchy );
|
hierarchy_pane.Show( cfg->m_AuiPanels.show_schematic_hierarchy );
|
||||||
netNavigatorPane.Show( cfg->m_AuiPanels.show_net_nav_panel );
|
netNavigatorPane.Show( cfg->m_AuiPanels.show_net_nav_panel );
|
||||||
propertiesPane.Show( cfg->m_AuiPanels.show_properties );
|
propertiesPane.Show( cfg->m_AuiPanels.show_properties );
|
||||||
|
updateSelectionFilterVisbility();
|
||||||
|
|
||||||
|
// The selection filter doesn't need to grow in the vertical direction when docked
|
||||||
|
selectionFilterPane.dock_proportion = 0;
|
||||||
|
|
||||||
if( cfg->m_AuiPanels.hierarchy_panel_float_width > 0
|
if( cfg->m_AuiPanels.hierarchy_panel_float_width > 0
|
||||||
&& cfg->m_AuiPanels.hierarchy_panel_float_height > 0 )
|
&& cfg->m_AuiPanels.hierarchy_panel_float_height > 0 )
|
||||||
|
@ -424,6 +433,7 @@ SCH_EDIT_FRAME::~SCH_EDIT_FRAME()
|
||||||
}
|
}
|
||||||
|
|
||||||
delete m_hierarchy;
|
delete m_hierarchy;
|
||||||
|
delete m_selectionFilterPanel;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -1013,6 +1023,9 @@ void SCH_EDIT_FRAME::doCloseWindow()
|
||||||
m_symbolFieldsTableDialog = nullptr;
|
m_symbolFieldsTableDialog = nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Make sure local settings are persisted
|
||||||
|
SaveProjectLocalSettings();
|
||||||
|
|
||||||
// Shutdown all running tools
|
// Shutdown all running tools
|
||||||
if( m_toolManager )
|
if( m_toolManager )
|
||||||
{
|
{
|
||||||
|
@ -1058,9 +1071,6 @@ void SCH_EDIT_FRAME::doCloseWindow()
|
||||||
if( !Schematic().GetFileName().IsEmpty() && !Schematic().RootScreen()->IsEmpty() )
|
if( !Schematic().GetFileName().IsEmpty() && !Schematic().RootScreen()->IsEmpty() )
|
||||||
UpdateFileHistory( fileName );
|
UpdateFileHistory( fileName );
|
||||||
|
|
||||||
// Make sure local settings are persisted
|
|
||||||
SaveProjectLocalSettings();
|
|
||||||
|
|
||||||
Schematic().RootScreen()->Clear();
|
Schematic().RootScreen()->Clear();
|
||||||
|
|
||||||
// all sub sheets are deleted, only the main sheet is usable
|
// all sub sheets are deleted, only the main sheet is usable
|
||||||
|
@ -1954,10 +1964,13 @@ void SCH_EDIT_FRAME::ShowChangedLanguage()
|
||||||
RecreateToolbars();
|
RecreateToolbars();
|
||||||
|
|
||||||
m_auimgr.GetPane( m_hierarchy ).Caption( _( "Schematic Hierarchy" ) );
|
m_auimgr.GetPane( m_hierarchy ).Caption( _( "Schematic Hierarchy" ) );
|
||||||
|
m_auimgr.GetPane( m_selectionFilterPanel ).Caption( _( "Selection Filter" ) );
|
||||||
|
m_auimgr.GetPane( m_propertiesPanel ).Caption( _( "Properties" ) );
|
||||||
m_auimgr.Update();
|
m_auimgr.Update();
|
||||||
m_hierarchy->UpdateHierarchyTree();
|
m_hierarchy->UpdateHierarchyTree();
|
||||||
|
|
||||||
m_propertiesPanel->LanguageChanged();
|
m_propertiesPanel->LanguageChanged();
|
||||||
|
m_selectionFilterPanel->OnLanguageChanged();
|
||||||
|
|
||||||
// status bar
|
// status bar
|
||||||
UpdateMsgPanel();
|
UpdateMsgPanel();
|
||||||
|
@ -2382,3 +2395,20 @@ void SCH_EDIT_FRAME::unitsChangeRefresh()
|
||||||
|
|
||||||
UpdateProperties();
|
UpdateProperties();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void SCH_EDIT_FRAME::updateSelectionFilterVisbility()
|
||||||
|
{
|
||||||
|
wxAuiPaneInfo& hierarchyPane = m_auimgr.GetPane( SchematicHierarchyPaneName() );
|
||||||
|
wxAuiPaneInfo& netNavigatorPane = m_auimgr.GetPane( NetNavigatorPaneName() );
|
||||||
|
wxAuiPaneInfo& propertiesPane = m_auimgr.GetPane( PropertiesPaneName() );
|
||||||
|
wxAuiPaneInfo& selectionFilterPane = m_auimgr.GetPane( wxS( "SelectionFilter" ) );
|
||||||
|
|
||||||
|
// Don't give the selection filter its own visibility controls; instead show it if
|
||||||
|
// anything else is visible
|
||||||
|
bool showFilter = ( hierarchyPane.IsShown() && hierarchyPane.IsDocked() )
|
||||||
|
|| ( netNavigatorPane.IsShown() && netNavigatorPane.IsDocked() )
|
||||||
|
|| ( propertiesPane.IsShown() && propertiesPane.IsDocked() );
|
||||||
|
|
||||||
|
selectionFilterPane.Show( showFilter );
|
||||||
|
}
|
||||||
|
|
|
@ -898,6 +898,8 @@ protected:
|
||||||
|
|
||||||
void unitsChangeRefresh() override;
|
void unitsChangeRefresh() override;
|
||||||
|
|
||||||
|
void updateSelectionFilterVisbility() override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
// Called when resizing the Hierarchy Navigator panel
|
// Called when resizing the Hierarchy Navigator panel
|
||||||
void OnResizeHierarchyNavigator( wxSizeEvent& aEvent );
|
void OnResizeHierarchyNavigator( wxSizeEvent& aEvent );
|
||||||
|
|
|
@ -71,6 +71,7 @@
|
||||||
#include <widgets/wx_infobar.h>
|
#include <widgets/wx_infobar.h>
|
||||||
#include <widgets/lib_tree.h>
|
#include <widgets/lib_tree.h>
|
||||||
#include <widgets/wx_progress_reporters.h>
|
#include <widgets/wx_progress_reporters.h>
|
||||||
|
#include <widgets/panel_sch_selection_filter.h>
|
||||||
#include <widgets/sch_properties_panel.h>
|
#include <widgets/sch_properties_panel.h>
|
||||||
#include <widgets/symbol_tree_pane.h>
|
#include <widgets/symbol_tree_pane.h>
|
||||||
#include <widgets/wx_aui_utils.h>
|
#include <widgets/wx_aui_utils.h>
|
||||||
|
@ -184,6 +185,8 @@ SYMBOL_EDIT_FRAME::SYMBOL_EDIT_FRAME( KIWAY* aKiway, wxWindow* aParent ) :
|
||||||
m_propertiesPanel = new SCH_PROPERTIES_PANEL( this, this );
|
m_propertiesPanel = new SCH_PROPERTIES_PANEL( this, this );
|
||||||
m_propertiesPanel->SetSplitterProportion( m_settings->m_AuiPanels.properties_splitter );
|
m_propertiesPanel->SetSplitterProportion( m_settings->m_AuiPanels.properties_splitter );
|
||||||
|
|
||||||
|
m_selectionFilterPanel = new PANEL_SCH_SELECTION_FILTER( this );
|
||||||
|
|
||||||
m_auimgr.SetManagedWindow( this );
|
m_auimgr.SetManagedWindow( this );
|
||||||
|
|
||||||
CreateInfoBar();
|
CreateInfoBar();
|
||||||
|
@ -205,7 +208,15 @@ SYMBOL_EDIT_FRAME::SYMBOL_EDIT_FRAME( KIWAY* aKiway, wxWindow* aParent ) :
|
||||||
m_auimgr.AddPane( m_propertiesPanel, defaultPropertiesPaneInfo( this ) );
|
m_auimgr.AddPane( m_propertiesPanel, defaultPropertiesPaneInfo( this ) );
|
||||||
// Show or hide m_propertiesPanel depending on current settings:
|
// Show or hide m_propertiesPanel depending on current settings:
|
||||||
wxAuiPaneInfo& propertiesPaneInfo = m_auimgr.GetPane( PropertiesPaneName() );
|
wxAuiPaneInfo& propertiesPaneInfo = m_auimgr.GetPane( PropertiesPaneName() );
|
||||||
|
|
||||||
|
m_auimgr.AddPane( m_selectionFilterPanel, defaultSchSelectionFilterPaneInfo( this ) );
|
||||||
|
|
||||||
|
wxAuiPaneInfo& selectionFilterPane = m_auimgr.GetPane( wxS( "SelectionFilter" ) );
|
||||||
|
// The selection filter doesn't need to grow in the vertical direction when docked
|
||||||
|
selectionFilterPane.dock_proportion = 0;
|
||||||
|
|
||||||
propertiesPaneInfo.Show( m_settings->m_AuiPanels.show_properties );
|
propertiesPaneInfo.Show( m_settings->m_AuiPanels.show_properties );
|
||||||
|
updateSelectionFilterVisbility();
|
||||||
|
|
||||||
m_auimgr.AddPane( m_optionsToolBar, EDA_PANE().VToolbar().Name( "OptToolbar" )
|
m_auimgr.AddPane( m_optionsToolBar, EDA_PANE().VToolbar().Name( "OptToolbar" )
|
||||||
.Left().Layer( 2 ) );
|
.Left().Layer( 2 ) );
|
||||||
|
@ -219,6 +230,10 @@ SYMBOL_EDIT_FRAME::SYMBOL_EDIT_FRAME( KIWAY* aKiway, wxWindow* aParent ) :
|
||||||
|
|
||||||
FinishAUIInitialization();
|
FinishAUIInitialization();
|
||||||
|
|
||||||
|
// Can't put this in LoadSettings, because it has to be called before setupTools :/
|
||||||
|
EE_SELECTION_TOOL* selTool = GetToolManager()->GetTool<EE_SELECTION_TOOL>();
|
||||||
|
selTool->GetFilter() = GetSettings()->m_SelectionFilter;
|
||||||
|
|
||||||
if( m_settings->m_LibWidth > 0 )
|
if( m_settings->m_LibWidth > 0 )
|
||||||
SetAuiPaneSize( m_auimgr, m_auimgr.GetPane( "SymbolTree" ), m_settings->m_LibWidth, -1 );
|
SetAuiPaneSize( m_auimgr, m_auimgr.GetPane( "SymbolTree" ), m_settings->m_LibWidth, -1 );
|
||||||
|
|
||||||
|
@ -333,6 +348,9 @@ void SYMBOL_EDIT_FRAME::SaveSettings( APP_SETTINGS_BASE* aCfg )
|
||||||
m_settings->m_AuiPanels.properties_splitter = m_propertiesPanel->SplitterProportion();
|
m_settings->m_AuiPanels.properties_splitter = m_propertiesPanel->SplitterProportion();
|
||||||
bool prop_shown = m_auimgr.GetPane( PropertiesPaneName() ).IsShown();
|
bool prop_shown = m_auimgr.GetPane( PropertiesPaneName() ).IsShown();
|
||||||
m_settings->m_AuiPanels.show_properties = prop_shown;
|
m_settings->m_AuiPanels.show_properties = prop_shown;
|
||||||
|
|
||||||
|
EE_SELECTION_TOOL* selTool = GetToolManager()->GetTool<EE_SELECTION_TOOL>();
|
||||||
|
m_settings->m_SelectionFilter = selTool->GetFilter();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -681,6 +699,7 @@ void SYMBOL_EDIT_FRAME::OnToggleSymbolTree( wxCommandEvent& event )
|
||||||
{
|
{
|
||||||
wxAuiPaneInfo& treePane = m_auimgr.GetPane( m_treePane );
|
wxAuiPaneInfo& treePane = m_auimgr.GetPane( m_treePane );
|
||||||
treePane.Show( !IsSymbolTreeShown() );
|
treePane.Show( !IsSymbolTreeShown() );
|
||||||
|
updateSelectionFilterVisbility();
|
||||||
m_auimgr.Update();
|
m_auimgr.Update();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1845,3 +1864,18 @@ void SYMBOL_EDIT_FRAME::UpdateItem( EDA_ITEM* aItem, bool isAddOrDelete, bool aU
|
||||||
eda_text->ClearRenderCache();
|
eda_text->ClearRenderCache();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void SYMBOL_EDIT_FRAME::updateSelectionFilterVisbility()
|
||||||
|
{
|
||||||
|
wxAuiPaneInfo& treePane = m_auimgr.GetPane( "SymbolTree" );
|
||||||
|
wxAuiPaneInfo& propertiesPane = m_auimgr.GetPane( PropertiesPaneName() );
|
||||||
|
wxAuiPaneInfo& selectionFilterPane = m_auimgr.GetPane( wxS( "SelectionFilter" ) );
|
||||||
|
|
||||||
|
// Don't give the selection filter its own visibility controls; instead show it if
|
||||||
|
// anything else is visible
|
||||||
|
bool showFilter = ( treePane.IsShown() && treePane.IsDocked() )
|
||||||
|
|| ( propertiesPane.IsShown() && propertiesPane.IsDocked() );
|
||||||
|
|
||||||
|
selectionFilterPane.Show( showFilter );
|
||||||
|
}
|
||||||
|
|
|
@ -420,6 +420,8 @@ protected:
|
||||||
|
|
||||||
void doReCreateMenuBar() override;
|
void doReCreateMenuBar() override;
|
||||||
|
|
||||||
|
void updateSelectionFilterVisbility() override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
// Set up the tool framework
|
// Set up the tool framework
|
||||||
void setupTools();
|
void setupTools();
|
||||||
|
|
|
@ -21,6 +21,8 @@
|
||||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include <nlohmann/json.hpp>
|
||||||
|
|
||||||
#include <settings/common_settings.h>
|
#include <settings/common_settings.h>
|
||||||
#include <settings/parameters.h>
|
#include <settings/parameters.h>
|
||||||
#include <settings/settings_manager.h>
|
#include <settings/settings_manager.h>
|
||||||
|
@ -122,6 +124,50 @@ SYMBOL_EDITOR_SETTINGS::SYMBOL_EDITOR_SETTINGS() :
|
||||||
m_params.emplace_back( new PARAM<bool>( "use_eeschema_color_settings",
|
m_params.emplace_back( new PARAM<bool>( "use_eeschema_color_settings",
|
||||||
&m_UseEeschemaColorSettings, true ) );
|
&m_UseEeschemaColorSettings, true ) );
|
||||||
|
|
||||||
|
m_params.emplace_back( new PARAM_LAMBDA<nlohmann::json>( "selection_filter",
|
||||||
|
[&]() -> nlohmann::json
|
||||||
|
{
|
||||||
|
nlohmann::json ret;
|
||||||
|
|
||||||
|
ret["lockedItems"] = m_SelectionFilter.lockedItems;
|
||||||
|
ret["symbols"] = m_SelectionFilter.symbols;
|
||||||
|
ret["text"] = m_SelectionFilter.text;
|
||||||
|
ret["wires"] = m_SelectionFilter.wires;
|
||||||
|
ret["labels"] = m_SelectionFilter.labels;
|
||||||
|
ret["pins"] = m_SelectionFilter.pins;
|
||||||
|
ret["graphics"] = m_SelectionFilter.graphics;
|
||||||
|
ret["images"] = m_SelectionFilter.images;
|
||||||
|
ret["otherItems"] = m_SelectionFilter.otherItems;
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
},
|
||||||
|
[&]( const nlohmann::json& aVal )
|
||||||
|
{
|
||||||
|
if( aVal.empty() || !aVal.is_object() )
|
||||||
|
return;
|
||||||
|
|
||||||
|
SetIfPresent( aVal, "lockedItems", m_SelectionFilter.lockedItems );
|
||||||
|
SetIfPresent( aVal, "symbols", m_SelectionFilter.symbols );
|
||||||
|
SetIfPresent( aVal, "text", m_SelectionFilter.text );
|
||||||
|
SetIfPresent( aVal, "wires", m_SelectionFilter.wires );
|
||||||
|
SetIfPresent( aVal, "labels", m_SelectionFilter.labels );
|
||||||
|
SetIfPresent( aVal, "pins", m_SelectionFilter.pins );
|
||||||
|
SetIfPresent( aVal, "graphics", m_SelectionFilter.graphics );
|
||||||
|
SetIfPresent( aVal, "images", m_SelectionFilter.images );
|
||||||
|
SetIfPresent( aVal, "otherItems", m_SelectionFilter.otherItems );
|
||||||
|
},
|
||||||
|
{
|
||||||
|
{ "lockedItems", false },
|
||||||
|
{ "symbols", true },
|
||||||
|
{ "text", true },
|
||||||
|
{ "wires", true },
|
||||||
|
{ "labels", true },
|
||||||
|
{ "pins", true },
|
||||||
|
{ "graphics", true },
|
||||||
|
{ "images", true },
|
||||||
|
{ "otherItems", true }
|
||||||
|
} ) );
|
||||||
|
|
||||||
registerMigration( 0, 1,
|
registerMigration( 0, 1,
|
||||||
[&]() -> bool
|
[&]() -> bool
|
||||||
{
|
{
|
||||||
|
|
|
@ -25,6 +25,7 @@
|
||||||
#define SYMBOL_EDITOR_SETTINGS_H
|
#define SYMBOL_EDITOR_SETTINGS_H
|
||||||
|
|
||||||
#include <settings/app_settings.h>
|
#include <settings/app_settings.h>
|
||||||
|
#include <project/sch_project_settings.h>
|
||||||
|
|
||||||
|
|
||||||
class SYMBOL_EDITOR_SETTINGS : public APP_SETTINGS_BASE
|
class SYMBOL_EDITOR_SETTINGS : public APP_SETTINGS_BASE
|
||||||
|
@ -93,6 +94,8 @@ public:
|
||||||
|
|
||||||
bool m_UseEeschemaColorSettings;
|
bool m_UseEeschemaColorSettings;
|
||||||
|
|
||||||
|
SCH_SELECTION_FILTER_OPTIONS m_SelectionFilter;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|
||||||
virtual std::string getLegacyFrameName() const override { return "LibeditFrame"; }
|
virtual std::string getLegacyFrameName() const override { return "LibeditFrame"; }
|
||||||
|
|
|
@ -196,6 +196,7 @@ void SYMBOL_EDIT_FRAME::ToggleProperties()
|
||||||
|
|
||||||
wxAuiPaneInfo& propertiesPaneInfo = m_auimgr.GetPane( PropertiesPaneName() );
|
wxAuiPaneInfo& propertiesPaneInfo = m_auimgr.GetPane( PropertiesPaneName() );
|
||||||
propertiesPaneInfo.Show( show );
|
propertiesPaneInfo.Show( show );
|
||||||
|
updateSelectionFilterVisbility();
|
||||||
|
|
||||||
if( show )
|
if( show )
|
||||||
{
|
{
|
||||||
|
|
|
@ -280,6 +280,8 @@ void SCH_EDIT_FRAME::ToggleProperties()
|
||||||
wxAuiPaneInfo& propertiesPaneInfo = m_auimgr.GetPane( PropertiesPaneName() );
|
wxAuiPaneInfo& propertiesPaneInfo = m_auimgr.GetPane( PropertiesPaneName() );
|
||||||
propertiesPaneInfo.Show( show );
|
propertiesPaneInfo.Show( show );
|
||||||
|
|
||||||
|
updateSelectionFilterVisbility();
|
||||||
|
|
||||||
EESCHEMA_SETTINGS* settings = eeconfig();
|
EESCHEMA_SETTINGS* settings = eeconfig();
|
||||||
|
|
||||||
if( show )
|
if( show )
|
||||||
|
@ -305,6 +307,8 @@ void SCH_EDIT_FRAME::ToggleSchematicHierarchy()
|
||||||
|
|
||||||
hierarchy_pane.Show( !hierarchy_pane.IsShown() );
|
hierarchy_pane.Show( !hierarchy_pane.IsShown() );
|
||||||
|
|
||||||
|
updateSelectionFilterVisbility();
|
||||||
|
|
||||||
if( hierarchy_pane.IsShown() )
|
if( hierarchy_pane.IsShown() )
|
||||||
{
|
{
|
||||||
if( hierarchy_pane.IsFloating() )
|
if( hierarchy_pane.IsFloating() )
|
||||||
|
|
|
@ -162,6 +162,7 @@ EE_SELECTION_TOOL::EE_SELECTION_TOOL() :
|
||||||
m_unit( 0 ),
|
m_unit( 0 ),
|
||||||
m_bodyStyle( 0 )
|
m_bodyStyle( 0 )
|
||||||
{
|
{
|
||||||
|
m_filter.SetDefaults();
|
||||||
m_selection.Clear();
|
m_selection.Clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1081,6 +1082,12 @@ void EE_SELECTION_TOOL::narrowSelection( EE_COLLECTOR& collector, const VECTOR2I
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if( !itemPassesFilter( collector[i] ) )
|
||||||
|
{
|
||||||
|
collector.Remove( i );
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
if( aSelectedOnly && !collector[i]->IsSelected() )
|
if( aSelectedOnly && !collector[i]->IsSelected() )
|
||||||
{
|
{
|
||||||
collector.Remove( i );
|
collector.Remove( i );
|
||||||
|
@ -1556,6 +1563,101 @@ EE_SELECTION& EE_SELECTION_TOOL::RequestSelection( const std::vector<KICAD_T>& a
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool EE_SELECTION_TOOL::itemPassesFilter( EDA_ITEM* aItem )
|
||||||
|
{
|
||||||
|
if( !aItem )
|
||||||
|
return false;
|
||||||
|
|
||||||
|
// Locking is not yet exposed uniformly in the schematic
|
||||||
|
#if 0
|
||||||
|
if( SCH_ITEM* schItem = dynamic_cast<SCH_ITEM*>( aItem ) )
|
||||||
|
{
|
||||||
|
if( schItem->IsLocked() && !m_filter.lockedItems )
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
switch( aItem->Type() )
|
||||||
|
{
|
||||||
|
case SCH_SYMBOL_T:
|
||||||
|
case SCH_SHEET_T:
|
||||||
|
if( !m_filter.symbols )
|
||||||
|
return false;
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
case SCH_PIN_T:
|
||||||
|
case SCH_SHEET_PIN_T:
|
||||||
|
case LIB_PIN_T:
|
||||||
|
if( !m_filter.pins )
|
||||||
|
return false;
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
case SCH_LINE_T:
|
||||||
|
{
|
||||||
|
switch( static_cast<SCH_LINE*>( aItem )->GetLayer() )
|
||||||
|
{
|
||||||
|
case LAYER_WIRE:
|
||||||
|
case LAYER_BUS:
|
||||||
|
if( !m_filter.wires )
|
||||||
|
return false;
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
if( !m_filter.graphics )
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
case SCH_SHAPE_T:
|
||||||
|
case LIB_SHAPE_T:
|
||||||
|
if( !m_filter.graphics )
|
||||||
|
return false;
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
case SCH_TEXT_T:
|
||||||
|
case SCH_TEXTBOX_T:
|
||||||
|
case SCH_TABLE_T:
|
||||||
|
case SCH_TABLECELL_T:
|
||||||
|
case SCH_FIELD_T:
|
||||||
|
case LIB_TEXT_T:
|
||||||
|
case LIB_TEXTBOX_T:
|
||||||
|
case LIB_FIELD_T:
|
||||||
|
if( !m_filter.text )
|
||||||
|
return false;
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
case SCH_LABEL_T:
|
||||||
|
case SCH_GLOBAL_LABEL_T:
|
||||||
|
case SCH_HIER_LABEL_T:
|
||||||
|
if( !m_filter.labels )
|
||||||
|
return false;
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
case SCH_BITMAP_T:
|
||||||
|
if( !m_filter.images )
|
||||||
|
return false;
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
if( !m_filter.otherItems )
|
||||||
|
return false;
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void EE_SELECTION_TOOL::updateReferencePoint()
|
void EE_SELECTION_TOOL::updateReferencePoint()
|
||||||
{
|
{
|
||||||
VECTOR2I refP( 0, 0 );
|
VECTOR2I refP( 0, 0 );
|
||||||
|
@ -1722,7 +1824,7 @@ bool EE_SELECTION_TOOL::selectMultiple()
|
||||||
if( m_frame->GetRenderSettings()->m_ShowPinsElectricalType )
|
if( m_frame->GetRenderSettings()->m_ShowPinsElectricalType )
|
||||||
item->SetFlags( SHOW_ELEC_TYPE );
|
item->SetFlags( SHOW_ELEC_TYPE );
|
||||||
|
|
||||||
if( Selectable( item ) )
|
if( Selectable( item ) && itemPassesFilter( item ) )
|
||||||
{
|
{
|
||||||
if( item->Type() == SCH_LINE_T )
|
if( item->Type() == SCH_LINE_T )
|
||||||
{
|
{
|
||||||
|
@ -1774,6 +1876,7 @@ bool EE_SELECTION_TOOL::selectMultiple()
|
||||||
item->SetFlags( SHOW_ELEC_TYPE );
|
item->SetFlags( SHOW_ELEC_TYPE );
|
||||||
|
|
||||||
if( Selectable( item )
|
if( Selectable( item )
|
||||||
|
&& itemPassesFilter( item )
|
||||||
&& !item->GetParent()->HasFlag( CANDIDATE )
|
&& !item->GetParent()->HasFlag( CANDIDATE )
|
||||||
&& item->HitTest( selectionRect, !isGreedy ) )
|
&& item->HitTest( selectionRect, !isGreedy ) )
|
||||||
{
|
{
|
||||||
|
|
|
@ -25,6 +25,7 @@
|
||||||
#ifndef KICAD_SCH_SELECTION_TOOL_H
|
#ifndef KICAD_SCH_SELECTION_TOOL_H
|
||||||
#define KICAD_SCH_SELECTION_TOOL_H
|
#define KICAD_SCH_SELECTION_TOOL_H
|
||||||
|
|
||||||
|
#include <project/sch_project_settings.h>
|
||||||
#include <tool/selection_tool.h>
|
#include <tool/selection_tool.h>
|
||||||
#include <tool/action_menu.h>
|
#include <tool/action_menu.h>
|
||||||
#include <tool/tool_menu.h>
|
#include <tool/tool_menu.h>
|
||||||
|
@ -190,6 +191,8 @@ public:
|
||||||
void SyncSelection( const std::optional<SCH_SHEET_PATH>& targetSheetPath, SCH_ITEM* focusItem,
|
void SyncSelection( const std::optional<SCH_SHEET_PATH>& targetSheetPath, SCH_ITEM* focusItem,
|
||||||
const std::vector<SCH_ITEM*>& items );
|
const std::vector<SCH_ITEM*>& items );
|
||||||
|
|
||||||
|
SCH_SELECTION_FILTER_OPTIONS& GetFilter() { return m_filter; }
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
SELECTION& selection() override { return m_selection; }
|
SELECTION& selection() override { return m_selection; }
|
||||||
|
|
||||||
|
@ -288,6 +291,11 @@ private:
|
||||||
*/
|
*/
|
||||||
bool selectionContains( const VECTOR2I& aPoint ) const;
|
bool selectionContains( const VECTOR2I& aPoint ) const;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return true if the given item passes the stateful selection filter
|
||||||
|
*/
|
||||||
|
bool itemPassesFilter( EDA_ITEM* aItem );
|
||||||
|
|
||||||
///< Set up handlers for various events.
|
///< Set up handlers for various events.
|
||||||
void setTransitions() override;
|
void setTransitions() override;
|
||||||
|
|
||||||
|
@ -302,6 +310,8 @@ private:
|
||||||
bool m_isSymbolViewer; // True when the symbol browser is the parent frame
|
bool m_isSymbolViewer; // True when the symbol browser is the parent frame
|
||||||
int m_unit; // Fixed unit filter (for symbol editor)
|
int m_unit; // Fixed unit filter (for symbol editor)
|
||||||
int m_bodyStyle; // Fixed DeMorgan filter (for symbol editor)
|
int m_bodyStyle; // Fixed DeMorgan filter (for symbol editor)
|
||||||
|
|
||||||
|
SCH_SELECTION_FILTER_OPTIONS m_filter;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif //KICAD_SCH_SELECTION_TOOL_H
|
#endif //KICAD_SCH_SELECTION_TOOL_H
|
||||||
|
|
|
@ -0,0 +1,204 @@
|
||||||
|
/*
|
||||||
|
* This program source code file is part of KiCad, a free EDA CAD application.
|
||||||
|
*
|
||||||
|
* Copyright (C) 2024 Jon Evans <jon@craftyjon.com>
|
||||||
|
* Copyright (C) 2024 KiCad Developers, see AUTHORS.txt for contributors.
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify it
|
||||||
|
* under the terms of the GNU General Public License as published by the
|
||||||
|
* Free Software Foundation, either version 3 of the License, or (at your
|
||||||
|
* option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful, but
|
||||||
|
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
* General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License along
|
||||||
|
* with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <project/sch_project_settings.h>
|
||||||
|
#include <sch_base_frame.h>
|
||||||
|
#include <tool/tool_manager.h>
|
||||||
|
#include <tools/ee_selection_tool.h>
|
||||||
|
#include <widgets/panel_sch_selection_filter.h>
|
||||||
|
|
||||||
|
|
||||||
|
PANEL_SCH_SELECTION_FILTER::PANEL_SCH_SELECTION_FILTER( wxWindow* aParent ) :
|
||||||
|
PANEL_SCH_SELECTION_FILTER_BASE( aParent ),
|
||||||
|
m_frame( dynamic_cast<SCH_BASE_FRAME*>( aParent ) ),
|
||||||
|
m_onlyCheckbox( nullptr )
|
||||||
|
{
|
||||||
|
wxFont font = KIUI::GetInfoFont( this );
|
||||||
|
m_cbLockedItems->SetFont( font );
|
||||||
|
m_cbSymbols->SetFont( font );
|
||||||
|
m_cbText->SetFont( font );
|
||||||
|
m_cbWires->SetFont( font );
|
||||||
|
m_cbLabels->SetFont( font );
|
||||||
|
m_cbPins->SetFont( font );
|
||||||
|
m_cbGraphics->SetFont( font );
|
||||||
|
m_cbImages->SetFont( font );
|
||||||
|
m_cbOtherItems->SetFont( font );
|
||||||
|
m_cbAllItems->SetFont( font );
|
||||||
|
|
||||||
|
SetBorders( true, false, false, false );
|
||||||
|
|
||||||
|
wxASSERT( m_frame );
|
||||||
|
m_tool = m_frame->GetToolManager()->GetTool<EE_SELECTION_TOOL>();
|
||||||
|
wxASSERT( m_tool );
|
||||||
|
|
||||||
|
SCH_SELECTION_FILTER_OPTIONS& opts = m_tool->GetFilter();
|
||||||
|
SetCheckboxesFromFilter( opts );
|
||||||
|
|
||||||
|
m_cbSymbols->Bind( wxEVT_RIGHT_DOWN, &PANEL_SCH_SELECTION_FILTER::onRightClick, this );
|
||||||
|
m_cbText->Bind( wxEVT_RIGHT_DOWN, &PANEL_SCH_SELECTION_FILTER::onRightClick, this );
|
||||||
|
m_cbWires->Bind( wxEVT_RIGHT_DOWN, &PANEL_SCH_SELECTION_FILTER::onRightClick, this );
|
||||||
|
m_cbLabels->Bind( wxEVT_RIGHT_DOWN, &PANEL_SCH_SELECTION_FILTER::onRightClick, this );
|
||||||
|
m_cbPins->Bind( wxEVT_RIGHT_DOWN, &PANEL_SCH_SELECTION_FILTER::onRightClick, this );
|
||||||
|
m_cbGraphics->Bind( wxEVT_RIGHT_DOWN, &PANEL_SCH_SELECTION_FILTER::onRightClick, this );
|
||||||
|
m_cbImages->Bind( wxEVT_RIGHT_DOWN, &PANEL_SCH_SELECTION_FILTER::onRightClick, this );
|
||||||
|
m_cbOtherItems->Bind( wxEVT_RIGHT_DOWN, &PANEL_SCH_SELECTION_FILTER::onRightClick, this );
|
||||||
|
|
||||||
|
if( m_frame->GetFrameType() == FRAME_SCH_SYMBOL_EDITOR )
|
||||||
|
{
|
||||||
|
Freeze();
|
||||||
|
m_gridSizer->SetItemPosition( m_cbSymbols, wxGBPosition( 5, 0 ) );
|
||||||
|
m_gridSizer->SetItemPosition( m_cbWires, wxGBPosition( 5, 1 ) );
|
||||||
|
m_gridSizer->SetItemPosition( m_cbLabels, wxGBPosition( 6, 0 ) );
|
||||||
|
m_gridSizer->SetItemPosition( m_cbImages, wxGBPosition( 6, 1 ) );
|
||||||
|
m_cbSymbols->Hide();
|
||||||
|
m_cbWires->Hide();
|
||||||
|
m_cbLabels->Hide();
|
||||||
|
m_cbImages->Hide();
|
||||||
|
|
||||||
|
m_gridSizer->SetItemPosition( m_cbPins, wxGBPosition( 1, 0 ) );
|
||||||
|
m_gridSizer->SetItemPosition( m_cbText, wxGBPosition( 1, 1 ) );
|
||||||
|
m_gridSizer->SetItemPosition( m_cbGraphics, wxGBPosition( 2, 0 ) );
|
||||||
|
m_gridSizer->SetItemPosition( m_cbOtherItems, wxGBPosition( 2, 1 ) );
|
||||||
|
Thaw();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void PANEL_SCH_SELECTION_FILTER::SetCheckboxesFromFilter( SCH_SELECTION_FILTER_OPTIONS& aOptions )
|
||||||
|
{
|
||||||
|
Freeze();
|
||||||
|
|
||||||
|
m_cbLockedItems->SetValue( aOptions.lockedItems );
|
||||||
|
m_cbSymbols->SetValue( aOptions.symbols );
|
||||||
|
m_cbText->SetValue( aOptions.text );
|
||||||
|
m_cbWires->SetValue( aOptions.wires );
|
||||||
|
m_cbLabels->SetValue( aOptions.labels );
|
||||||
|
m_cbPins->SetValue( aOptions.pins );
|
||||||
|
m_cbGraphics->SetValue( aOptions.graphics );
|
||||||
|
m_cbImages->SetValue( aOptions.images );
|
||||||
|
m_cbOtherItems->SetValue( aOptions.otherItems );
|
||||||
|
|
||||||
|
m_cbAllItems->SetValue( aOptions.All() );
|
||||||
|
|
||||||
|
Thaw();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void PANEL_SCH_SELECTION_FILTER::OnFilterChanged( wxCommandEvent& aEvent )
|
||||||
|
{
|
||||||
|
if( aEvent.GetEventObject() == m_cbAllItems )
|
||||||
|
{
|
||||||
|
bool newState = m_cbAllItems->GetValue();
|
||||||
|
|
||||||
|
m_cbSymbols->SetValue( newState );
|
||||||
|
m_cbText->SetValue( newState );
|
||||||
|
m_cbWires->SetValue( newState );
|
||||||
|
m_cbLabels->SetValue( newState );
|
||||||
|
m_cbPins->SetValue( newState );
|
||||||
|
m_cbGraphics->SetValue( newState );
|
||||||
|
m_cbImages->SetValue( newState );
|
||||||
|
m_cbOtherItems->SetValue( newState );
|
||||||
|
}
|
||||||
|
|
||||||
|
SCH_SELECTION_FILTER_OPTIONS& opts = m_tool->GetFilter();
|
||||||
|
|
||||||
|
// If any of the other checkboxes turned off, turn off the All Items checkbox
|
||||||
|
bool allChecked = setFilterFromCheckboxes( opts );
|
||||||
|
m_cbAllItems->SetValue( allChecked );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool PANEL_SCH_SELECTION_FILTER::setFilterFromCheckboxes( SCH_SELECTION_FILTER_OPTIONS& aOptions )
|
||||||
|
{
|
||||||
|
aOptions.lockedItems = m_cbLockedItems->GetValue();
|
||||||
|
aOptions.symbols = m_cbSymbols->GetValue();
|
||||||
|
aOptions.text = m_cbText->GetValue();
|
||||||
|
aOptions.wires = m_cbWires->GetValue();
|
||||||
|
aOptions.labels = m_cbLabels->GetValue();
|
||||||
|
aOptions.pins = m_cbPins->GetValue();
|
||||||
|
aOptions.graphics = m_cbGraphics->GetValue();
|
||||||
|
aOptions.images = m_cbImages->GetValue();
|
||||||
|
aOptions.otherItems = m_cbOtherItems->GetValue();
|
||||||
|
|
||||||
|
return aOptions.All();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void PANEL_SCH_SELECTION_FILTER::onRightClick( wxMouseEvent& aEvent )
|
||||||
|
{
|
||||||
|
wxMenu menu;
|
||||||
|
|
||||||
|
wxCheckBox* cb = dynamic_cast<wxCheckBox*>( aEvent.GetEventObject() );
|
||||||
|
|
||||||
|
if( !cb )
|
||||||
|
return;
|
||||||
|
|
||||||
|
m_onlyCheckbox = cb;
|
||||||
|
|
||||||
|
wxString label;
|
||||||
|
label.Printf( _( "Only %s" ), cb->GetLabel().Lower() );
|
||||||
|
|
||||||
|
menu.Append( new wxMenuItem( &menu, wxID_ANY, label, wxEmptyString, wxITEM_NORMAL ) );
|
||||||
|
|
||||||
|
menu.Bind( wxEVT_COMMAND_MENU_SELECTED, &PANEL_SCH_SELECTION_FILTER::onPopupSelection, this );
|
||||||
|
|
||||||
|
PopupMenu( &menu );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void PANEL_SCH_SELECTION_FILTER::onPopupSelection( wxCommandEvent& aEvent )
|
||||||
|
{
|
||||||
|
if( !m_onlyCheckbox )
|
||||||
|
return;
|
||||||
|
|
||||||
|
m_cbAllItems->SetValue( false );
|
||||||
|
m_cbSymbols->SetValue( false );
|
||||||
|
m_cbText->SetValue( false );
|
||||||
|
m_cbWires->SetValue( false );
|
||||||
|
m_cbLabels->SetValue( false );
|
||||||
|
m_cbPins->SetValue( false );
|
||||||
|
m_cbGraphics->SetValue( false );
|
||||||
|
m_cbImages->SetValue( false );
|
||||||
|
m_cbOtherItems->SetValue( false );
|
||||||
|
|
||||||
|
m_onlyCheckbox->SetValue( true );
|
||||||
|
m_onlyCheckbox = nullptr;
|
||||||
|
|
||||||
|
wxCommandEvent dummy;
|
||||||
|
OnFilterChanged( dummy );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void PANEL_SCH_SELECTION_FILTER::OnLanguageChanged()
|
||||||
|
{
|
||||||
|
m_cbAllItems->SetLabel( _( "All items" ) );
|
||||||
|
m_cbLockedItems->SetLabel( _( "Locked items" ) );
|
||||||
|
m_cbLockedItems->SetToolTip( _( "Allow selection of locked items" ) );
|
||||||
|
m_cbSymbols->SetLabel( _( "Symbols" ) );
|
||||||
|
m_cbText->SetLabel( _( "Text" ) );
|
||||||
|
m_cbWires->SetLabel( _( "Wires" ) );
|
||||||
|
m_cbLabels->SetLabel( _( "Labels" ) );
|
||||||
|
m_cbPins->SetLabel( _( "Pins" ) );
|
||||||
|
m_cbGraphics->SetLabel( _( "Graphics" ) );
|
||||||
|
m_cbImages->SetLabel( _( "Images" ) );
|
||||||
|
m_cbOtherItems->SetLabel( _( "Other items" ) );
|
||||||
|
|
||||||
|
m_cbAllItems->GetParent()->Layout();
|
||||||
|
}
|
|
@ -0,0 +1,58 @@
|
||||||
|
/*
|
||||||
|
* This program source code file is part of KiCad, a free EDA CAD application.
|
||||||
|
*
|
||||||
|
* Copyright (C) 2024 Jon Evans <jon@craftyjon.com>
|
||||||
|
* Copyright (C) 2024 KiCad Developers, see AUTHORS.txt for contributors.
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify it
|
||||||
|
* under the terms of the GNU General Public License as published by the
|
||||||
|
* Free Software Foundation, either version 3 of the License, or (at your
|
||||||
|
* option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful, but
|
||||||
|
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
* General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License along
|
||||||
|
* with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef KICAD_PANEL_SCH_SELECTION_FILTER_H
|
||||||
|
#define KICAD_PANEL_SCH_SELECTION_FILTER_H
|
||||||
|
|
||||||
|
#include <widgets/panel_sch_selection_filter_base.h>
|
||||||
|
|
||||||
|
class SCH_BASE_FRAME;
|
||||||
|
class EE_SELECTION_TOOL;
|
||||||
|
struct SCH_SELECTION_FILTER_OPTIONS;
|
||||||
|
|
||||||
|
|
||||||
|
class PANEL_SCH_SELECTION_FILTER : public PANEL_SCH_SELECTION_FILTER_BASE
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
PANEL_SCH_SELECTION_FILTER( wxWindow* aParent );
|
||||||
|
|
||||||
|
~PANEL_SCH_SELECTION_FILTER() = default;
|
||||||
|
|
||||||
|
void SetCheckboxesFromFilter( SCH_SELECTION_FILTER_OPTIONS& aOptions );
|
||||||
|
|
||||||
|
void OnLanguageChanged();
|
||||||
|
|
||||||
|
protected:
|
||||||
|
void OnFilterChanged( wxCommandEvent& aEvent ) override;
|
||||||
|
|
||||||
|
private:
|
||||||
|
bool setFilterFromCheckboxes( SCH_SELECTION_FILTER_OPTIONS& aOptions );
|
||||||
|
|
||||||
|
void onRightClick( wxMouseEvent& aEvent );
|
||||||
|
|
||||||
|
void onPopupSelection( wxCommandEvent& aEvent );
|
||||||
|
|
||||||
|
private:
|
||||||
|
SCH_BASE_FRAME* m_frame;
|
||||||
|
EE_SELECTION_TOOL* m_tool;
|
||||||
|
wxCheckBox* m_onlyCheckbox;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif //KICAD_PANEL_SCH_SELECTION_FILTER_H
|
|
@ -0,0 +1,95 @@
|
||||||
|
///////////////////////////////////////////////////////////////////////////
|
||||||
|
// C++ code generated with wxFormBuilder (version 4.0.0-0-g0efcecf-dirty)
|
||||||
|
// http://www.wxformbuilder.org/
|
||||||
|
//
|
||||||
|
// PLEASE DO *NOT* EDIT THIS FILE!
|
||||||
|
///////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
#include "panel_sch_selection_filter_base.h"
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
PANEL_SCH_SELECTION_FILTER_BASE::PANEL_SCH_SELECTION_FILTER_BASE( wxWindow* parent, wxWindowID id, const wxPoint& pos, const wxSize& size, long style, const wxString& name ) : WX_PANEL( parent, id, pos, size, style, name )
|
||||||
|
{
|
||||||
|
m_gridSizer = new wxGridBagSizer( 0, 0 );
|
||||||
|
m_gridSizer->SetFlexibleDirection( wxBOTH );
|
||||||
|
m_gridSizer->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
|
||||||
|
|
||||||
|
m_cbAllItems = new wxCheckBox( this, wxID_ANY, _("All items"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
|
m_cbAllItems->SetValue(true);
|
||||||
|
m_gridSizer->Add( m_cbAllItems, wxGBPosition( 0, 0 ), wxGBSpan( 1, 1 ), wxLEFT|wxTOP, 5 );
|
||||||
|
|
||||||
|
m_cbLockedItems = new wxCheckBox( this, wxID_ANY, _("Locked items"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
|
m_cbLockedItems->SetValue(true);
|
||||||
|
m_cbLockedItems->Hide();
|
||||||
|
m_cbLockedItems->SetToolTip( _("Allow selection of locked items") );
|
||||||
|
|
||||||
|
m_gridSizer->Add( m_cbLockedItems, wxGBPosition( 0, 1 ), wxGBSpan( 1, 1 ), wxLEFT|wxRIGHT|wxTOP, 5 );
|
||||||
|
|
||||||
|
m_cbSymbols = new wxCheckBox( this, wxID_ANY, _("Symbols"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
|
m_cbSymbols->SetValue(true);
|
||||||
|
m_gridSizer->Add( m_cbSymbols, wxGBPosition( 1, 0 ), wxGBSpan( 1, 1 ), wxLEFT|wxRIGHT, 5 );
|
||||||
|
|
||||||
|
m_cbPins = new wxCheckBox( this, wxID_ANY, _("Pins"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
|
m_cbPins->SetValue(true);
|
||||||
|
m_gridSizer->Add( m_cbPins, wxGBPosition( 1, 1 ), wxGBSpan( 1, 1 ), wxLEFT|wxRIGHT, 5 );
|
||||||
|
|
||||||
|
m_cbWires = new wxCheckBox( this, wxID_ANY, _("Wires"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
|
m_cbWires->SetValue(true);
|
||||||
|
m_gridSizer->Add( m_cbWires, wxGBPosition( 2, 0 ), wxGBSpan( 1, 1 ), wxLEFT|wxRIGHT, 5 );
|
||||||
|
|
||||||
|
m_cbLabels = new wxCheckBox( this, wxID_ANY, _("Labels"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
|
m_cbLabels->SetValue(true);
|
||||||
|
m_gridSizer->Add( m_cbLabels, wxGBPosition( 2, 1 ), wxGBSpan( 1, 1 ), wxLEFT|wxRIGHT, 5 );
|
||||||
|
|
||||||
|
m_cbGraphics = new wxCheckBox( this, wxID_ANY, _("Graphics"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
|
m_cbGraphics->SetValue(true);
|
||||||
|
m_cbGraphics->SetToolTip( _("Graphical shapes") );
|
||||||
|
|
||||||
|
m_gridSizer->Add( m_cbGraphics, wxGBPosition( 3, 0 ), wxGBSpan( 1, 1 ), wxLEFT|wxRIGHT, 5 );
|
||||||
|
|
||||||
|
m_cbImages = new wxCheckBox( this, wxID_ANY, _("Images"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
|
m_cbImages->SetValue(true);
|
||||||
|
m_gridSizer->Add( m_cbImages, wxGBPosition( 3, 1 ), wxGBSpan( 1, 1 ), wxLEFT|wxRIGHT, 5 );
|
||||||
|
|
||||||
|
m_cbText = new wxCheckBox( this, wxID_ANY, _("Text"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
|
m_cbText->SetValue(true);
|
||||||
|
m_gridSizer->Add( m_cbText, wxGBPosition( 4, 0 ), wxGBSpan( 1, 1 ), wxLEFT|wxRIGHT, 5 );
|
||||||
|
|
||||||
|
m_cbOtherItems = new wxCheckBox( this, wxID_ANY, _("Other items"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
|
m_cbOtherItems->SetValue(true);
|
||||||
|
m_gridSizer->Add( m_cbOtherItems, wxGBPosition( 4, 1 ), wxGBSpan( 1, 1 ), wxBOTTOM|wxLEFT|wxRIGHT, 5 );
|
||||||
|
|
||||||
|
|
||||||
|
this->SetSizer( m_gridSizer );
|
||||||
|
this->Layout();
|
||||||
|
m_gridSizer->Fit( this );
|
||||||
|
|
||||||
|
// Connect Events
|
||||||
|
m_cbAllItems->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( PANEL_SCH_SELECTION_FILTER_BASE::OnFilterChanged ), NULL, this );
|
||||||
|
m_cbLockedItems->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( PANEL_SCH_SELECTION_FILTER_BASE::OnFilterChanged ), NULL, this );
|
||||||
|
m_cbSymbols->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( PANEL_SCH_SELECTION_FILTER_BASE::OnFilterChanged ), NULL, this );
|
||||||
|
m_cbPins->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( PANEL_SCH_SELECTION_FILTER_BASE::OnFilterChanged ), NULL, this );
|
||||||
|
m_cbWires->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( PANEL_SCH_SELECTION_FILTER_BASE::OnFilterChanged ), NULL, this );
|
||||||
|
m_cbLabels->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( PANEL_SCH_SELECTION_FILTER_BASE::OnFilterChanged ), NULL, this );
|
||||||
|
m_cbGraphics->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( PANEL_SCH_SELECTION_FILTER_BASE::OnFilterChanged ), NULL, this );
|
||||||
|
m_cbImages->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( PANEL_SCH_SELECTION_FILTER_BASE::OnFilterChanged ), NULL, this );
|
||||||
|
m_cbText->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( PANEL_SCH_SELECTION_FILTER_BASE::OnFilterChanged ), NULL, this );
|
||||||
|
m_cbOtherItems->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( PANEL_SCH_SELECTION_FILTER_BASE::OnFilterChanged ), NULL, this );
|
||||||
|
}
|
||||||
|
|
||||||
|
PANEL_SCH_SELECTION_FILTER_BASE::~PANEL_SCH_SELECTION_FILTER_BASE()
|
||||||
|
{
|
||||||
|
// Disconnect Events
|
||||||
|
m_cbAllItems->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( PANEL_SCH_SELECTION_FILTER_BASE::OnFilterChanged ), NULL, this );
|
||||||
|
m_cbLockedItems->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( PANEL_SCH_SELECTION_FILTER_BASE::OnFilterChanged ), NULL, this );
|
||||||
|
m_cbSymbols->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( PANEL_SCH_SELECTION_FILTER_BASE::OnFilterChanged ), NULL, this );
|
||||||
|
m_cbPins->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( PANEL_SCH_SELECTION_FILTER_BASE::OnFilterChanged ), NULL, this );
|
||||||
|
m_cbWires->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( PANEL_SCH_SELECTION_FILTER_BASE::OnFilterChanged ), NULL, this );
|
||||||
|
m_cbLabels->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( PANEL_SCH_SELECTION_FILTER_BASE::OnFilterChanged ), NULL, this );
|
||||||
|
m_cbGraphics->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( PANEL_SCH_SELECTION_FILTER_BASE::OnFilterChanged ), NULL, this );
|
||||||
|
m_cbImages->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( PANEL_SCH_SELECTION_FILTER_BASE::OnFilterChanged ), NULL, this );
|
||||||
|
m_cbText->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( PANEL_SCH_SELECTION_FILTER_BASE::OnFilterChanged ), NULL, this );
|
||||||
|
m_cbOtherItems->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( PANEL_SCH_SELECTION_FILTER_BASE::OnFilterChanged ), NULL, this );
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,760 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||||
|
<wxFormBuilder_Project>
|
||||||
|
<FileVersion major="1" minor="17"/>
|
||||||
|
<object class="Project" expanded="true">
|
||||||
|
<property name="class_decoration">; </property>
|
||||||
|
<property name="code_generation">C++</property>
|
||||||
|
<property name="disconnect_events">1</property>
|
||||||
|
<property name="disconnect_mode">source_name</property>
|
||||||
|
<property name="disconnect_php_events">0</property>
|
||||||
|
<property name="disconnect_python_events">0</property>
|
||||||
|
<property name="embedded_files_path">res</property>
|
||||||
|
<property name="encoding">UTF-8</property>
|
||||||
|
<property name="event_generation">connect</property>
|
||||||
|
<property name="file">panel_sch_selection_filter_base</property>
|
||||||
|
<property name="first_id">1000</property>
|
||||||
|
<property name="help_provider">none</property>
|
||||||
|
<property name="image_path_wrapper_function_name"></property>
|
||||||
|
<property name="indent_with_spaces"></property>
|
||||||
|
<property name="internationalize">1</property>
|
||||||
|
<property name="name">Selection Filter</property>
|
||||||
|
<property name="namespace"></property>
|
||||||
|
<property name="path">.</property>
|
||||||
|
<property name="precompiled_header"></property>
|
||||||
|
<property name="relative_path">1</property>
|
||||||
|
<property name="skip_lua_events">1</property>
|
||||||
|
<property name="skip_php_events">1</property>
|
||||||
|
<property name="skip_python_events">1</property>
|
||||||
|
<property name="ui_table">UI</property>
|
||||||
|
<property name="use_array_enum">0</property>
|
||||||
|
<property name="use_enum">0</property>
|
||||||
|
<property name="use_microsoft_bom">0</property>
|
||||||
|
<object class="Panel" expanded="true">
|
||||||
|
<property name="aui_managed">0</property>
|
||||||
|
<property name="aui_manager_style">wxAUI_MGR_DEFAULT</property>
|
||||||
|
<property name="bg"></property>
|
||||||
|
<property name="context_help"></property>
|
||||||
|
<property name="context_menu">1</property>
|
||||||
|
<property name="drag_accept_files">0</property>
|
||||||
|
<property name="enabled">1</property>
|
||||||
|
<property name="event_handler">impl_virtual</property>
|
||||||
|
<property name="fg"></property>
|
||||||
|
<property name="font"></property>
|
||||||
|
<property name="hidden">0</property>
|
||||||
|
<property name="id">wxID_ANY</property>
|
||||||
|
<property name="maximum_size"></property>
|
||||||
|
<property name="minimum_size"></property>
|
||||||
|
<property name="name">PANEL_SCH_SELECTION_FILTER_BASE</property>
|
||||||
|
<property name="pos"></property>
|
||||||
|
<property name="size">-1,-1</property>
|
||||||
|
<property name="subclass">WX_PANEL; widgets/wx_panel.h; forward_declare</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">wxTAB_TRAVERSAL</property>
|
||||||
|
<object class="wxGridBagSizer" expanded="false">
|
||||||
|
<property name="empty_cell_size"></property>
|
||||||
|
<property name="flexible_direction">wxBOTH</property>
|
||||||
|
<property name="growablecols"></property>
|
||||||
|
<property name="growablerows"></property>
|
||||||
|
<property name="hgap">0</property>
|
||||||
|
<property name="minimum_size"></property>
|
||||||
|
<property name="name">m_gridSizer</property>
|
||||||
|
<property name="non_flexible_grow_mode">wxFLEX_GROWMODE_SPECIFIED</property>
|
||||||
|
<property name="permission">protected</property>
|
||||||
|
<property name="vgap">0</property>
|
||||||
|
<object class="gbsizeritem" expanded="false">
|
||||||
|
<property name="border">5</property>
|
||||||
|
<property name="colspan">1</property>
|
||||||
|
<property name="column">0</property>
|
||||||
|
<property name="flag">wxLEFT|wxTOP</property>
|
||||||
|
<property name="row">0</property>
|
||||||
|
<property name="rowspan">1</property>
|
||||||
|
<object class="wxCheckBox" 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="checked">1</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">All items</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_cbAllItems</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="window_extra_style"></property>
|
||||||
|
<property name="window_name"></property>
|
||||||
|
<property name="window_style"></property>
|
||||||
|
<event name="OnCheckBox">OnFilterChanged</event>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object class="gbsizeritem" expanded="false">
|
||||||
|
<property name="border">5</property>
|
||||||
|
<property name="colspan">1</property>
|
||||||
|
<property name="column">1</property>
|
||||||
|
<property name="flag">wxLEFT|wxRIGHT|wxTOP</property>
|
||||||
|
<property name="row">0</property>
|
||||||
|
<property name="rowspan">1</property>
|
||||||
|
<object class="wxCheckBox" 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="checked">1</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">Locked items</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_cbLockedItems</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">Allow selection of locked items</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>
|
||||||
|
<event name="OnCheckBox">OnFilterChanged</event>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object class="gbsizeritem" expanded="false">
|
||||||
|
<property name="border">5</property>
|
||||||
|
<property name="colspan">1</property>
|
||||||
|
<property name="column">0</property>
|
||||||
|
<property name="flag">wxLEFT|wxRIGHT</property>
|
||||||
|
<property name="row">1</property>
|
||||||
|
<property name="rowspan">1</property>
|
||||||
|
<object class="wxCheckBox" 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="checked">1</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">Symbols</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_cbSymbols</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="window_extra_style"></property>
|
||||||
|
<property name="window_name"></property>
|
||||||
|
<property name="window_style"></property>
|
||||||
|
<event name="OnCheckBox">OnFilterChanged</event>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object class="gbsizeritem" expanded="false">
|
||||||
|
<property name="border">5</property>
|
||||||
|
<property name="colspan">1</property>
|
||||||
|
<property name="column">1</property>
|
||||||
|
<property name="flag">wxLEFT|wxRIGHT</property>
|
||||||
|
<property name="row">1</property>
|
||||||
|
<property name="rowspan">1</property>
|
||||||
|
<object class="wxCheckBox" 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="checked">1</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">Pins</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_cbPins</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="window_extra_style"></property>
|
||||||
|
<property name="window_name"></property>
|
||||||
|
<property name="window_style"></property>
|
||||||
|
<event name="OnCheckBox">OnFilterChanged</event>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object class="gbsizeritem" expanded="false">
|
||||||
|
<property name="border">5</property>
|
||||||
|
<property name="colspan">1</property>
|
||||||
|
<property name="column">0</property>
|
||||||
|
<property name="flag">wxLEFT|wxRIGHT</property>
|
||||||
|
<property name="row">2</property>
|
||||||
|
<property name="rowspan">1</property>
|
||||||
|
<object class="wxCheckBox" 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="checked">1</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">Wires</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_cbWires</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="window_extra_style"></property>
|
||||||
|
<property name="window_name"></property>
|
||||||
|
<property name="window_style"></property>
|
||||||
|
<event name="OnCheckBox">OnFilterChanged</event>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object class="gbsizeritem" expanded="true">
|
||||||
|
<property name="border">5</property>
|
||||||
|
<property name="colspan">1</property>
|
||||||
|
<property name="column">1</property>
|
||||||
|
<property name="flag">wxLEFT|wxRIGHT</property>
|
||||||
|
<property name="row">2</property>
|
||||||
|
<property name="rowspan">1</property>
|
||||||
|
<object class="wxCheckBox" 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="checked">1</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">Labels</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_cbLabels</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="window_extra_style"></property>
|
||||||
|
<property name="window_name"></property>
|
||||||
|
<property name="window_style"></property>
|
||||||
|
<event name="OnCheckBox">OnFilterChanged</event>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object class="gbsizeritem" expanded="false">
|
||||||
|
<property name="border">5</property>
|
||||||
|
<property name="colspan">1</property>
|
||||||
|
<property name="column">0</property>
|
||||||
|
<property name="flag">wxLEFT|wxRIGHT</property>
|
||||||
|
<property name="row">3</property>
|
||||||
|
<property name="rowspan">1</property>
|
||||||
|
<object class="wxCheckBox" 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="checked">1</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">Graphics</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_cbGraphics</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">Graphical shapes</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>
|
||||||
|
<event name="OnCheckBox">OnFilterChanged</event>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object class="gbsizeritem" expanded="false">
|
||||||
|
<property name="border">5</property>
|
||||||
|
<property name="colspan">1</property>
|
||||||
|
<property name="column">1</property>
|
||||||
|
<property name="flag">wxLEFT|wxRIGHT</property>
|
||||||
|
<property name="row">3</property>
|
||||||
|
<property name="rowspan">1</property>
|
||||||
|
<object class="wxCheckBox" 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="checked">1</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">Images</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_cbImages</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="window_extra_style"></property>
|
||||||
|
<property name="window_name"></property>
|
||||||
|
<property name="window_style"></property>
|
||||||
|
<event name="OnCheckBox">OnFilterChanged</event>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object class="gbsizeritem" expanded="false">
|
||||||
|
<property name="border">5</property>
|
||||||
|
<property name="colspan">1</property>
|
||||||
|
<property name="column">0</property>
|
||||||
|
<property name="flag">wxLEFT|wxRIGHT</property>
|
||||||
|
<property name="row">4</property>
|
||||||
|
<property name="rowspan">1</property>
|
||||||
|
<object class="wxCheckBox" 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="checked">1</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">Text</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_cbText</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="window_extra_style"></property>
|
||||||
|
<property name="window_name"></property>
|
||||||
|
<property name="window_style"></property>
|
||||||
|
<event name="OnCheckBox">OnFilterChanged</event>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object class="gbsizeritem" expanded="false">
|
||||||
|
<property name="border">5</property>
|
||||||
|
<property name="colspan">1</property>
|
||||||
|
<property name="column">1</property>
|
||||||
|
<property name="flag">wxBOTTOM|wxLEFT|wxRIGHT</property>
|
||||||
|
<property name="row">4</property>
|
||||||
|
<property name="rowspan">1</property>
|
||||||
|
<object class="wxCheckBox" 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="checked">1</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">Other items</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_cbOtherItems</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="window_extra_style"></property>
|
||||||
|
<property name="window_name"></property>
|
||||||
|
<property name="window_style"></property>
|
||||||
|
<event name="OnCheckBox">OnFilterChanged</event>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</wxFormBuilder_Project>
|
|
@ -0,0 +1,57 @@
|
||||||
|
///////////////////////////////////////////////////////////////////////////
|
||||||
|
// C++ code generated with wxFormBuilder (version 4.0.0-0-g0efcecf-dirty)
|
||||||
|
// http://www.wxformbuilder.org/
|
||||||
|
//
|
||||||
|
// PLEASE DO *NOT* EDIT THIS FILE!
|
||||||
|
///////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <wx/artprov.h>
|
||||||
|
#include <wx/xrc/xmlres.h>
|
||||||
|
#include <wx/intl.h>
|
||||||
|
#include "widgets/wx_panel.h"
|
||||||
|
#include <wx/string.h>
|
||||||
|
#include <wx/checkbox.h>
|
||||||
|
#include <wx/gdicmn.h>
|
||||||
|
#include <wx/font.h>
|
||||||
|
#include <wx/colour.h>
|
||||||
|
#include <wx/settings.h>
|
||||||
|
#include <wx/gbsizer.h>
|
||||||
|
#include <wx/panel.h>
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
/// Class PANEL_SCH_SELECTION_FILTER_BASE
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
class PANEL_SCH_SELECTION_FILTER_BASE : public WX_PANEL
|
||||||
|
{
|
||||||
|
private:
|
||||||
|
|
||||||
|
protected:
|
||||||
|
wxGridBagSizer* m_gridSizer;
|
||||||
|
wxCheckBox* m_cbAllItems;
|
||||||
|
wxCheckBox* m_cbLockedItems;
|
||||||
|
wxCheckBox* m_cbSymbols;
|
||||||
|
wxCheckBox* m_cbPins;
|
||||||
|
wxCheckBox* m_cbWires;
|
||||||
|
wxCheckBox* m_cbLabels;
|
||||||
|
wxCheckBox* m_cbGraphics;
|
||||||
|
wxCheckBox* m_cbImages;
|
||||||
|
wxCheckBox* m_cbText;
|
||||||
|
wxCheckBox* m_cbOtherItems;
|
||||||
|
|
||||||
|
// Virtual event handlers, override them in your derived class
|
||||||
|
virtual void OnFilterChanged( wxCommandEvent& event ) { event.Skip(); }
|
||||||
|
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
PANEL_SCH_SELECTION_FILTER_BASE( wxWindow* parent, wxWindowID id = wxID_ANY, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( -1,-1 ), long style = wxTAB_TRAVERSAL, const wxString& name = wxEmptyString );
|
||||||
|
|
||||||
|
~PANEL_SCH_SELECTION_FILTER_BASE();
|
||||||
|
|
||||||
|
};
|
||||||
|
|
|
@ -84,7 +84,7 @@ public:
|
||||||
|
|
||||||
wxString m_FootprintTextShownColumns;
|
wxString m_FootprintTextShownColumns;
|
||||||
|
|
||||||
SELECTION_FILTER_OPTIONS m_SelectionFilter;
|
PCB_SELECTION_FILTER_OPTIONS m_SelectionFilter;
|
||||||
|
|
||||||
std::vector<LAYER_PRESET> m_LayerPresets;
|
std::vector<LAYER_PRESET> m_LayerPresets;
|
||||||
|
|
||||||
|
|
|
@ -39,7 +39,7 @@
|
||||||
* Selection filtering that applies all the time (not the "filter selection" dialog that modifies
|
* Selection filtering that applies all the time (not the "filter selection" dialog that modifies
|
||||||
* the current selection)
|
* the current selection)
|
||||||
*/
|
*/
|
||||||
struct SELECTION_FILTER_OPTIONS
|
struct PCB_SELECTION_FILTER_OPTIONS
|
||||||
{
|
{
|
||||||
bool lockedItems; ///< Allow selecting locked items
|
bool lockedItems; ///< Allow selecting locked items
|
||||||
bool footprints; ///< Allow selecting entire footprints
|
bool footprints; ///< Allow selecting entire footprints
|
||||||
|
@ -53,7 +53,7 @@ struct SELECTION_FILTER_OPTIONS
|
||||||
bool dimensions; ///< Dimension items
|
bool dimensions; ///< Dimension items
|
||||||
bool otherItems; ///< Anything not fitting one of the above categories
|
bool otherItems; ///< Anything not fitting one of the above categories
|
||||||
|
|
||||||
SELECTION_FILTER_OPTIONS()
|
PCB_SELECTION_FILTER_OPTIONS()
|
||||||
{
|
{
|
||||||
lockedItems = true;
|
lockedItems = true;
|
||||||
footprints = true;
|
footprints = true;
|
||||||
|
|
|
@ -24,6 +24,7 @@
|
||||||
|
|
||||||
#include <layer_ids.h>
|
#include <layer_ids.h>
|
||||||
#include <project/board_project_settings.h>
|
#include <project/board_project_settings.h>
|
||||||
|
#include <project/sch_project_settings.h>
|
||||||
#include <settings/json_settings.h>
|
#include <settings/json_settings.h>
|
||||||
#include <wildcards_and_files_ext.h>
|
#include <wildcards_and_files_ext.h>
|
||||||
#include <settings/app_settings.h>
|
#include <settings/app_settings.h>
|
||||||
|
@ -132,8 +133,9 @@ public:
|
||||||
std::vector<wxString> m_HiddenNets;
|
std::vector<wxString> m_HiddenNets;
|
||||||
std::set<wxString> m_HiddenNetclasses;
|
std::set<wxString> m_HiddenNetclasses;
|
||||||
|
|
||||||
/// State of the selection filter widget
|
/// State of the selection filter widgets
|
||||||
SELECTION_FILTER_OPTIONS m_SelectionFilter;
|
PCB_SELECTION_FILTER_OPTIONS m_PcbSelectionFilter;
|
||||||
|
SCH_SELECTION_FILTER_OPTIONS m_SchSelectionFilter;
|
||||||
|
|
||||||
// Upstream git repo info
|
// Upstream git repo info
|
||||||
wxString m_GitRepoUsername;
|
wxString m_GitRepoUsername;
|
||||||
|
|
|
@ -0,0 +1,79 @@
|
||||||
|
/*
|
||||||
|
* This program source code file is part of KiCad, a free EDA CAD application.
|
||||||
|
*
|
||||||
|
* Copyright (C) 2024 Jon Evans <jon@craftyjon.com>
|
||||||
|
* Copyright (C) 2024 KiCad Developers, see AUTHORS.txt for contributors.
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify it
|
||||||
|
* under the terms of the GNU General Public License as published by the
|
||||||
|
* Free Software Foundation, either version 3 of the License, or (at your
|
||||||
|
* option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful, but
|
||||||
|
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
* General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License along
|
||||||
|
* with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef KICAD_SCH_PROJECT_SETTINGS_H
|
||||||
|
#define KICAD_SCH_PROJECT_SETTINGS_H
|
||||||
|
|
||||||
|
struct SCH_SELECTION_FILTER_OPTIONS
|
||||||
|
{
|
||||||
|
bool lockedItems; ///< Allow selecting locked items
|
||||||
|
bool symbols; ///< Allow selecting symbols and sheet symbols
|
||||||
|
bool text; ///< Text and fields
|
||||||
|
bool wires; ///< Net and bus wires and junctions
|
||||||
|
bool labels; ///< Net and bus labels
|
||||||
|
bool pins; ///< Symbol and sheet pins
|
||||||
|
bool graphics; ///< Graphic lines, shapes, polygons
|
||||||
|
bool images; ///< Bitmap/vector images
|
||||||
|
bool otherItems; ///< Anything not fitting one of the above categories
|
||||||
|
|
||||||
|
SCH_SELECTION_FILTER_OPTIONS()
|
||||||
|
{
|
||||||
|
lockedItems = true;
|
||||||
|
symbols = true;
|
||||||
|
text = true;
|
||||||
|
wires = true;
|
||||||
|
labels = true;
|
||||||
|
pins = true;
|
||||||
|
graphics = true;
|
||||||
|
images = true;
|
||||||
|
otherItems = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return true if any of the item types are enabled (excluding "locked items" which is special)
|
||||||
|
*/
|
||||||
|
bool Any()
|
||||||
|
{
|
||||||
|
return ( symbols || text || wires || labels || pins || graphics || images || otherItems );
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return true if all the item types are enabled (excluding "locked items" which is special)
|
||||||
|
*/
|
||||||
|
bool All()
|
||||||
|
{
|
||||||
|
return ( symbols && text && wires && labels && pins && graphics && images && otherItems );
|
||||||
|
}
|
||||||
|
|
||||||
|
void SetDefaults()
|
||||||
|
{
|
||||||
|
lockedItems = false;
|
||||||
|
symbols = true;
|
||||||
|
text = true;
|
||||||
|
wires = true;
|
||||||
|
labels = true;
|
||||||
|
pins = true;
|
||||||
|
graphics = true;
|
||||||
|
images = true;
|
||||||
|
otherItems = true;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif //KICAD_SCH_PROJECT_SETTINGS_H
|
|
@ -99,9 +99,9 @@ bool PCB_EDIT_FRAME::LoadProjectSettings()
|
||||||
m_appearancePanel->SetUserViewports( project.m_Viewports );
|
m_appearancePanel->SetUserViewports( project.m_Viewports );
|
||||||
|
|
||||||
PCB_SELECTION_TOOL* selTool = GetToolManager()->GetTool<PCB_SELECTION_TOOL>();
|
PCB_SELECTION_TOOL* selTool = GetToolManager()->GetTool<PCB_SELECTION_TOOL>();
|
||||||
SELECTION_FILTER_OPTIONS& filterOpts = selTool->GetFilter();
|
PCB_SELECTION_FILTER_OPTIONS& filterOpts = selTool->GetFilter();
|
||||||
|
|
||||||
filterOpts = localSettings.m_SelectionFilter;
|
filterOpts = localSettings.m_PcbSelectionFilter;
|
||||||
m_selectionFilterPanel->SetCheckboxesFromFilter( filterOpts );
|
m_selectionFilterPanel->SetCheckboxesFromFilter( filterOpts );
|
||||||
|
|
||||||
PCB_DISPLAY_OPTIONS opts = GetDisplayOptions();
|
PCB_DISPLAY_OPTIONS opts = GetDisplayOptions();
|
||||||
|
@ -237,7 +237,7 @@ void PCB_EDIT_FRAME::saveProjectSettings()
|
||||||
}
|
}
|
||||||
|
|
||||||
PCB_SELECTION_TOOL* selTool = GetToolManager()->GetTool<PCB_SELECTION_TOOL>();
|
PCB_SELECTION_TOOL* selTool = GetToolManager()->GetTool<PCB_SELECTION_TOOL>();
|
||||||
SELECTION_FILTER_OPTIONS& filterOpts = selTool->GetFilter();
|
PCB_SELECTION_FILTER_OPTIONS& filterOpts = selTool->GetFilter();
|
||||||
|
|
||||||
localSettings.m_SelectionFilter = filterOpts;
|
localSettings.m_PcbSelectionFilter = filterOpts;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1729,7 +1729,7 @@ int BOARD_INSPECTION_TOOL::HighlightItem( const TOOL_EVENT& aEvent )
|
||||||
|
|
||||||
// Apply the active selection filter, except we want to allow picking locked items for
|
// Apply the active selection filter, except we want to allow picking locked items for
|
||||||
// highlighting even if the user has disabled them for selection
|
// highlighting even if the user has disabled them for selection
|
||||||
SELECTION_FILTER_OPTIONS& filter = selectionTool->GetFilter();
|
PCB_SELECTION_FILTER_OPTIONS& filter = selectionTool->GetFilter();
|
||||||
|
|
||||||
bool saved = filter.lockedItems;
|
bool saved = filter.lockedItems;
|
||||||
filter.lockedItems = true;
|
filter.lockedItems = true;
|
||||||
|
|
|
@ -225,7 +225,7 @@ VECTOR2I PCB_GRID_HELPER::AlignToNearestPad( const VECTOR2I& aMousePos, PADS& aP
|
||||||
VECTOR2I PCB_GRID_HELPER::BestDragOrigin( const VECTOR2I &aMousePos,
|
VECTOR2I PCB_GRID_HELPER::BestDragOrigin( const VECTOR2I &aMousePos,
|
||||||
std::vector<BOARD_ITEM*>& aItems,
|
std::vector<BOARD_ITEM*>& aItems,
|
||||||
GRID_HELPER_GRIDS aGrid,
|
GRID_HELPER_GRIDS aGrid,
|
||||||
const SELECTION_FILTER_OPTIONS* aSelectionFilter )
|
const PCB_SELECTION_FILTER_OPTIONS* aSelectionFilter )
|
||||||
{
|
{
|
||||||
clearAnchors();
|
clearAnchors();
|
||||||
|
|
||||||
|
@ -541,7 +541,7 @@ std::set<BOARD_ITEM*> PCB_GRID_HELPER::queryVisible( const BOX2I& aArea,
|
||||||
|
|
||||||
|
|
||||||
void PCB_GRID_HELPER::computeAnchors( BOARD_ITEM* aItem, const VECTOR2I& aRefPos, bool aFrom,
|
void PCB_GRID_HELPER::computeAnchors( BOARD_ITEM* aItem, const VECTOR2I& aRefPos, bool aFrom,
|
||||||
const SELECTION_FILTER_OPTIONS* aSelectionFilter )
|
const PCB_SELECTION_FILTER_OPTIONS* aSelectionFilter )
|
||||||
{
|
{
|
||||||
KIGFX::VIEW* view = m_toolMgr->GetView();
|
KIGFX::VIEW* view = m_toolMgr->GetView();
|
||||||
RENDER_SETTINGS* settings = view->GetPainter()->GetSettings();
|
RENDER_SETTINGS* settings = view->GetPainter()->GetSettings();
|
||||||
|
|
|
@ -32,7 +32,7 @@
|
||||||
|
|
||||||
class TOOL_MANAGER;
|
class TOOL_MANAGER;
|
||||||
struct MAGNETIC_SETTINGS;
|
struct MAGNETIC_SETTINGS;
|
||||||
struct SELECTION_FILTER_OPTIONS;
|
struct PCB_SELECTION_FILTER_OPTIONS;
|
||||||
|
|
||||||
class PCB_GRID_HELPER : public GRID_HELPER
|
class PCB_GRID_HELPER : public GRID_HELPER
|
||||||
{
|
{
|
||||||
|
@ -57,7 +57,7 @@ public:
|
||||||
|
|
||||||
VECTOR2I BestDragOrigin( const VECTOR2I& aMousePos, std::vector<BOARD_ITEM*>& aItem,
|
VECTOR2I BestDragOrigin( const VECTOR2I& aMousePos, std::vector<BOARD_ITEM*>& aItem,
|
||||||
GRID_HELPER_GRIDS aGrid = GRID_HELPER_GRIDS::GRID_CURRENT,
|
GRID_HELPER_GRIDS aGrid = GRID_HELPER_GRIDS::GRID_CURRENT,
|
||||||
const SELECTION_FILTER_OPTIONS* aSelectionFilter = nullptr );
|
const PCB_SELECTION_FILTER_OPTIONS* aSelectionFilter = nullptr );
|
||||||
|
|
||||||
VECTOR2I AlignToArc ( const VECTOR2I& aPoint, const SHAPE_ARC& aSeg );
|
VECTOR2I AlignToArc ( const VECTOR2I& aPoint, const SHAPE_ARC& aSeg );
|
||||||
|
|
||||||
|
@ -97,7 +97,7 @@ private:
|
||||||
* @param aFrom Is this for an anchor that is designating a source point (aFrom=true) or not
|
* @param aFrom Is this for an anchor that is designating a source point (aFrom=true) or not
|
||||||
*/
|
*/
|
||||||
void computeAnchors( BOARD_ITEM* aItem, const VECTOR2I& aRefPos, bool aFrom = false,
|
void computeAnchors( BOARD_ITEM* aItem, const VECTOR2I& aRefPos, bool aFrom = false,
|
||||||
const SELECTION_FILTER_OPTIONS* aSelectionFilter = nullptr );
|
const PCB_SELECTION_FILTER_OPTIONS* aSelectionFilter = nullptr );
|
||||||
|
|
||||||
private:
|
private:
|
||||||
MAGNETIC_SETTINGS* m_magneticSettings;
|
MAGNETIC_SETTINGS* m_magneticSettings;
|
||||||
|
|
|
@ -160,7 +160,7 @@ public:
|
||||||
*/
|
*/
|
||||||
void RebuildSelection();
|
void RebuildSelection();
|
||||||
|
|
||||||
SELECTION_FILTER_OPTIONS& GetFilter()
|
PCB_SELECTION_FILTER_OPTIONS& GetFilter()
|
||||||
{
|
{
|
||||||
return m_filter;
|
return m_filter;
|
||||||
}
|
}
|
||||||
|
@ -452,7 +452,7 @@ private:
|
||||||
|
|
||||||
PCB_SELECTION m_selection; // Current state of selection
|
PCB_SELECTION m_selection; // Current state of selection
|
||||||
|
|
||||||
SELECTION_FILTER_OPTIONS m_filter;
|
PCB_SELECTION_FILTER_OPTIONS m_filter;
|
||||||
|
|
||||||
KICURSOR m_nonModifiedCursor; // Cursor in the absence of shift/ctrl/alt
|
KICURSOR m_nonModifiedCursor; // Cursor in the absence of shift/ctrl/alt
|
||||||
|
|
||||||
|
|
|
@ -49,7 +49,7 @@ PANEL_SELECTION_FILTER::PANEL_SELECTION_FILTER( wxWindow* aParent ) :
|
||||||
m_tool = m_frame->GetToolManager()->GetTool<PCB_SELECTION_TOOL>();
|
m_tool = m_frame->GetToolManager()->GetTool<PCB_SELECTION_TOOL>();
|
||||||
wxASSERT( m_tool );
|
wxASSERT( m_tool );
|
||||||
|
|
||||||
SELECTION_FILTER_OPTIONS& opts = m_tool->GetFilter();
|
PCB_SELECTION_FILTER_OPTIONS& opts = m_tool->GetFilter();
|
||||||
SetCheckboxesFromFilter( opts );
|
SetCheckboxesFromFilter( opts );
|
||||||
|
|
||||||
m_cbFootprints->Bind( wxEVT_RIGHT_DOWN, &PANEL_SELECTION_FILTER::onRightClick, this );
|
m_cbFootprints->Bind( wxEVT_RIGHT_DOWN, &PANEL_SELECTION_FILTER::onRightClick, this );
|
||||||
|
@ -65,7 +65,7 @@ PANEL_SELECTION_FILTER::PANEL_SELECTION_FILTER( wxWindow* aParent ) :
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void PANEL_SELECTION_FILTER::SetCheckboxesFromFilter( SELECTION_FILTER_OPTIONS& aOptions )
|
void PANEL_SELECTION_FILTER::SetCheckboxesFromFilter( PCB_SELECTION_FILTER_OPTIONS& aOptions )
|
||||||
{
|
{
|
||||||
Freeze();
|
Freeze();
|
||||||
|
|
||||||
|
@ -105,7 +105,7 @@ void PANEL_SELECTION_FILTER::OnFilterChanged( wxCommandEvent& aEvent )
|
||||||
m_cbOtherItems->SetValue( newState );
|
m_cbOtherItems->SetValue( newState );
|
||||||
}
|
}
|
||||||
|
|
||||||
SELECTION_FILTER_OPTIONS& opts = m_tool->GetFilter();
|
PCB_SELECTION_FILTER_OPTIONS& opts = m_tool->GetFilter();
|
||||||
|
|
||||||
// If any of the other checkboxes turned off, turn off the All Items checkbox
|
// If any of the other checkboxes turned off, turn off the All Items checkbox
|
||||||
bool allChecked = setFilterFromCheckboxes( opts );
|
bool allChecked = setFilterFromCheckboxes( opts );
|
||||||
|
@ -113,7 +113,7 @@ void PANEL_SELECTION_FILTER::OnFilterChanged( wxCommandEvent& aEvent )
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
bool PANEL_SELECTION_FILTER::setFilterFromCheckboxes( SELECTION_FILTER_OPTIONS& aOptions )
|
bool PANEL_SELECTION_FILTER::setFilterFromCheckboxes( PCB_SELECTION_FILTER_OPTIONS& aOptions )
|
||||||
{
|
{
|
||||||
aOptions.lockedItems = m_cbLockedItems->GetValue();
|
aOptions.lockedItems = m_cbLockedItems->GetValue();
|
||||||
aOptions.footprints = m_cbFootprints->GetValue();
|
aOptions.footprints = m_cbFootprints->GetValue();
|
||||||
|
|
|
@ -25,7 +25,7 @@
|
||||||
|
|
||||||
|
|
||||||
class PCB_SELECTION_TOOL;
|
class PCB_SELECTION_TOOL;
|
||||||
struct SELECTION_FILTER_OPTIONS;
|
struct PCB_SELECTION_FILTER_OPTIONS;
|
||||||
|
|
||||||
|
|
||||||
class PANEL_SELECTION_FILTER : public PANEL_SELECTION_FILTER_BASE
|
class PANEL_SELECTION_FILTER : public PANEL_SELECTION_FILTER_BASE
|
||||||
|
@ -35,7 +35,7 @@ public:
|
||||||
|
|
||||||
~PANEL_SELECTION_FILTER() = default;
|
~PANEL_SELECTION_FILTER() = default;
|
||||||
|
|
||||||
void SetCheckboxesFromFilter( SELECTION_FILTER_OPTIONS& aOptions );
|
void SetCheckboxesFromFilter( PCB_SELECTION_FILTER_OPTIONS& aOptions );
|
||||||
|
|
||||||
void OnLanguageChanged();
|
void OnLanguageChanged();
|
||||||
|
|
||||||
|
@ -43,7 +43,7 @@ protected:
|
||||||
void OnFilterChanged( wxCommandEvent& aEvent ) override;
|
void OnFilterChanged( wxCommandEvent& aEvent ) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
bool setFilterFromCheckboxes( SELECTION_FILTER_OPTIONS& aOptions );
|
bool setFilterFromCheckboxes( PCB_SELECTION_FILTER_OPTIONS& aOptions );
|
||||||
|
|
||||||
void onRightClick( wxMouseEvent& aEvent );
|
void onRightClick( wxMouseEvent& aEvent );
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue