diff --git a/common/commit.cpp b/common/commit.cpp
index 9d78fc9fab..2179ec824b 100644
--- a/common/commit.cpp
+++ b/common/commit.cpp
@@ -194,14 +194,31 @@ CHANGE_TYPE COMMIT::convert( UNDO_REDO aType ) const
return CHT_REMOVE;
default:
- assert( false );
- // Can't fall through if the assert fires, so quiet our warning
-#ifdef NDEBUG
+ wxASSERT( false );
KI_FALLTHROUGH;
-#endif
case UNDO_REDO::CHANGED:
return CHT_MODIFY;
}
}
+
+UNDO_REDO COMMIT::convert( CHANGE_TYPE aType ) const
+{
+ switch( aType )
+ {
+ case CHT_ADD:
+ return UNDO_REDO::NEWITEM;
+
+ case CHT_REMOVE:
+ return UNDO_REDO::DELETED;
+
+ default:
+ wxASSERT( false );
+ KI_FALLTHROUGH;
+
+ case CHT_MODIFY:
+ return UNDO_REDO::CHANGED;
+ }
+}
+
diff --git a/common/pcb.keywords b/common/pcb.keywords
index 26524fcc34..b05c80a197 100644
--- a/common/pcb.keywords
+++ b/common/pcb.keywords
@@ -2,7 +2,7 @@
# This program source code file is part of KiCad, a free EDA CAD application.
#
# Copyright (C) 2012 CERN.
-# Copyright (C) 2019-2022 KiCad Developers, see AUTHORS.txt for contributors.
+# Copyright (C) 2019-2023 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
@@ -31,6 +31,7 @@ allowed
allow_missing_courtyard
allow_soldermask_bridges
allow_soldermask_bridges_in_footprints
+allow_two_segments
anchor
angle
arc
@@ -46,6 +47,8 @@ attr
autoplace_cost90
autoplace_cost180
aux_axis_origin
+best_length_ratio
+best_width_ratio
bevelled
blind
blind_buried_vias_allowed
@@ -69,6 +72,7 @@ connect_pads
copperpour
copper_finish
crossbar
+curve_points
custom
outline
convexhull
@@ -96,6 +100,7 @@ edge_connector
edge_plating
edge_width
effects
+enabled
end
epsilon_r
exclude_from_pos_files
@@ -112,6 +117,7 @@ fill_segments
filled_polygon
filled_areas_thickness
fillet
+filter_ratio
font
format
footprint
@@ -171,12 +177,15 @@ layers
leader
leader_length
left
+legacy_teardrops
linear
line_spacing
links
locked
loss_tangent
max_error
+max_length
+max_width
material
members
micro
@@ -223,6 +232,7 @@ pad_prop_castellated
pad_prop_testpoint
pad_prop_heatsink
padvia
+prefer_zone_connections
private_layers
property
page
@@ -281,6 +291,7 @@ target
title
title_block
teardrop
+teardrops
tedit
text_frame
text_position_mode
diff --git a/common/widgets/unit_binder.cpp b/common/widgets/unit_binder.cpp
index 3e879eacaa..df06835d98 100644
--- a/common/widgets/unit_binder.cpp
+++ b/common/widgets/unit_binder.cpp
@@ -171,7 +171,7 @@ void UNIT_BINDER::onUnitsChanged( wxCommandEvent& aEvent )
&& m_units != EDA_UNITS::DEGREES
&& m_units != EDA_UNITS::PERCENT )
{
- int temp = (int) GetValue();
+ int temp = GetIntValue();
SetUnits( provider->GetUserUnits() );
m_iuScale = &provider->GetIuScale();
diff --git a/eeschema/dialogs/dialog_global_edit_text_and_graphics_base.cpp b/eeschema/dialogs/dialog_global_edit_text_and_graphics_base.cpp
index d37c2afe2b..a6ea73afa3 100644
--- a/eeschema/dialogs/dialog_global_edit_text_and_graphics_base.cpp
+++ b/eeschema/dialogs/dialog_global_edit_text_and_graphics_base.cpp
@@ -137,7 +137,7 @@ DIALOG_GLOBAL_EDIT_TEXT_AND_GRAPHICS_BASE::DIALOG_GLOBAL_EDIT_TEXT_AND_GRAPHICS_
fgSizer2->Add( 0, 0, 1, wxEXPAND, 5 );
- m_selectedFilterOpt = new wxCheckBox( sbFilters->GetStaticBox(), wxID_ANY, _("Only include selected items"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_selectedFilterOpt = new wxCheckBox( sbFilters->GetStaticBox(), wxID_ANY, _("Selected items only"), wxDefaultPosition, wxDefaultSize, 0 );
fgSizer2->Add( m_selectedFilterOpt, 0, wxRIGHT|wxLEFT, 5 );
diff --git a/eeschema/dialogs/dialog_global_edit_text_and_graphics_base.fbp b/eeschema/dialogs/dialog_global_edit_text_and_graphics_base.fbp
index 9c56884de1..285f25a7fe 100644
--- a/eeschema/dialogs/dialog_global_edit_text_and_graphics_base.fbp
+++ b/eeschema/dialogs/dialog_global_edit_text_and_graphics_base.fbp
@@ -1712,7 +1712,7 @@
0
0
wxID_ANY
- Only include selected items
+ Selected items only
0
diff --git a/eeschema/dialogs/dialog_wire_bus_properties.cpp b/eeschema/dialogs/dialog_wire_bus_properties.cpp
index dc713b34f1..b80ed8caa6 100644
--- a/eeschema/dialogs/dialog_wire_bus_properties.cpp
+++ b/eeschema/dialogs/dialog_wire_bus_properties.cpp
@@ -187,7 +187,7 @@ bool DIALOG_WIRE_BUS_PROPERTIES::TransferDataFromWindow()
{
if( !m_wireWidth.IsIndeterminate() )
{
- int width = std::max( (long long int) 0, m_wireWidth.GetValue() );
+ int width = std::max( 0, m_wireWidth.GetIntValue() );
if( item->Type() == SCH_LINE_T )
static_cast( item )->SetLineWidth( width );
diff --git a/eeschema/dialogs/panel_eeschema_editing_options.cpp b/eeschema/dialogs/panel_eeschema_editing_options.cpp
index ffd17a8f92..4276d3faab 100644
--- a/eeschema/dialogs/panel_eeschema_editing_options.cpp
+++ b/eeschema/dialogs/panel_eeschema_editing_options.cpp
@@ -107,8 +107,8 @@ bool PANEL_EESCHEMA_EDITING_OPTIONS::TransferDataFromWindow()
cfg->m_Drawing.default_sheet_border_color = m_borderColorSwatch->GetSwatchColor();
cfg->m_Drawing.default_sheet_background_color = m_backgroundColorSwatch->GetSwatchColor();
- cfg->m_Drawing.default_repeat_offset_x = schIUScale.IUToMils( (int) m_hPitch.GetValue() );
- cfg->m_Drawing.default_repeat_offset_y = schIUScale.IUToMils( (int) m_vPitch.GetValue() );
+ cfg->m_Drawing.default_repeat_offset_x = schIUScale.IUToMils( m_hPitch.GetIntValue() );
+ cfg->m_Drawing.default_repeat_offset_y = schIUScale.IUToMils( m_vPitch.GetIntValue() );
cfg->m_Drawing.repeat_label_increment = m_spinLabelRepeatStep->GetValue();
cfg->m_Drawing.line_mode = m_choiceLineMode->GetSelection();
diff --git a/include/commit.h b/include/commit.h
index 8f7bb612a9..2baff3484e 100644
--- a/include/commit.h
+++ b/include/commit.h
@@ -182,8 +182,10 @@ protected:
virtual EDA_ITEM* makeImage( EDA_ITEM* aItem ) const = 0;
CHANGE_TYPE convert( UNDO_REDO aType ) const;
+ UNDO_REDO convert( CHANGE_TYPE aType ) const;
- std::set m_changedItems;
+protected:
+ std::set m_changedItems;
std::vector m_changes;
};
diff --git a/include/widgets/unit_binder.h b/include/widgets/unit_binder.h
index a54a29dadd..2122c70b8b 100644
--- a/include/widgets/unit_binder.h
+++ b/include/widgets/unit_binder.h
@@ -124,6 +124,8 @@ public:
*/
virtual long long int GetValue();
+ int GetIntValue() { return (int) GetValue(); }
+
/**
* Return the current value in Internal Units.
*
diff --git a/pcbnew/CMakeLists.txt b/pcbnew/CMakeLists.txt
index e72e2492f4..15cf4de55b 100644
--- a/pcbnew/CMakeLists.txt
+++ b/pcbnew/CMakeLists.txt
@@ -30,8 +30,6 @@ include_directories(
)
set( PCBNEW_DIALOGS
- teardrop/dialog_teardrop_base.cpp
- teardrop/dialog_teardrop.cpp
dialogs/dialog_filter_selection.cpp
dialogs/dialog_filter_selection_base.cpp
dialogs/dialog_board_setup.cpp
@@ -88,6 +86,8 @@ set( PCBNEW_DIALOGS
dialogs/dialog_global_deletion_base.cpp
dialogs/dialog_global_edit_tracks_and_vias.cpp
dialogs/dialog_global_edit_tracks_and_vias_base.cpp
+ dialogs/dialog_global_edit_teardrops.cpp
+ dialogs/dialog_global_edit_teardrops_base.cpp
dialogs/dialog_global_edit_text_and_graphics.cpp
dialogs/dialog_global_edit_text_and_graphics_base.cpp
dialogs/dialog_global_fp_lib_table_config.cpp
@@ -171,6 +171,8 @@ set( PCBNEW_DIALOGS
dialogs/panel_setup_layers_base.cpp
dialogs/panel_setup_rules.cpp
dialogs/panel_setup_rules_base.cpp
+ dialogs/panel_setup_teardrops.cpp
+ dialogs/panel_setup_teardrops_base.cpp
dialogs/panel_setup_text_and_graphics.cpp
dialogs/panel_setup_text_and_graphics_base.cpp
dialogs/panel_setup_tracks_and_vias.cpp
@@ -354,6 +356,7 @@ set( PCBNEW_CLASS_SRCS
tools/zone_create_helper.cpp
tools/zone_filler_tool.cpp
teardrop/teardrop.cpp
+ teardrop/teardrop_parameters.cpp
teardrop/teardrop_utils.cpp
footprint_preview_panel.cpp
diff --git a/pcbnew/board.cpp b/pcbnew/board.cpp
index 6c5e9b0616..a5523f23de 100644
--- a/pcbnew/board.cpp
+++ b/pcbnew/board.cpp
@@ -244,7 +244,8 @@ void BOARD::IncrementTimeStamp()
|| !m_IntersectsFCourtyardCache.empty()
|| !m_IntersectsBCourtyardCache.empty()
|| !m_LayerExpressionCache.empty()
- || !m_ZoneBBoxCache.empty() )
+ || !m_ZoneBBoxCache.empty()
+ || m_CopperItemRTreeCache )
{
std::unique_lock cacheLock( m_CachesMutex );
@@ -257,6 +258,8 @@ void BOARD::IncrementTimeStamp()
m_ZoneBBoxCache.clear();
+ m_CopperItemRTreeCache = nullptr;
+
// These are always regenerated before use, but still probably safer to clear them
// while we're here.
m_DRCMaxClearance = 0;
@@ -265,12 +268,6 @@ void BOARD::IncrementTimeStamp()
m_DRCCopperZones.clear();
m_ZoneIsolatedIslandsMap.clear();
m_CopperZoneRTreeCache.clear();
- m_CopperItemRTreeCache = std::make_unique();
- }
- else if( !m_CopperItemRTreeCache )
- {
- std::unique_lock cacheLock( m_CachesMutex );
- m_CopperItemRTreeCache = std::make_unique();
}
}
diff --git a/pcbnew/board.h b/pcbnew/board.h
index e31a2b81ca..4a93104a63 100644
--- a/pcbnew/board.h
+++ b/pcbnew/board.h
@@ -1156,6 +1156,9 @@ public:
*/
GroupLegalOpsField GroupLegalOps( const PCB_SELECTION& selection ) const;
+ bool LegacyTeardrops() const { return m_legacyTeardrops; }
+ void SetLegacyTeardrops( bool aFlag ) { m_legacyTeardrops = aFlag; }
+
// --------- Item order comparators ---------
struct cmp_items
@@ -1177,7 +1180,7 @@ public:
std::unordered_map m_EnclosedByAreaCache;
std::unordered_map< wxString, LSET > m_LayerExpressionCache;
std::unordered_map> m_CopperZoneRTreeCache;
- std::unique_ptr m_CopperItemRTreeCache;
+ std::shared_ptr m_CopperItemRTreeCache;
mutable std::unordered_map m_ZoneBBoxCache;
// ------------ DRC caches -------------
@@ -1249,6 +1252,12 @@ private:
*/
std::unique_ptr m_designSettings;
+ /**
+ * Teardrops in 7.0 were applied as a post-processing step (rather than from pad and via
+ * properties). If this flag is set, then auto-teardrop-generation will be disabled.
+ */
+ bool m_legacyTeardrops = false;
+
NETINFO_LIST m_NetInfo; // net info list (name, design constraints...
std::vector m_listeners;
diff --git a/pcbnew/board_commit.cpp b/pcbnew/board_commit.cpp
index 447acfb8a6..b01a0f3721 100644
--- a/pcbnew/board_commit.cpp
+++ b/pcbnew/board_commit.cpp
@@ -27,6 +27,7 @@
#include
#include
#include
+#include
#include
#include
#include
@@ -35,6 +36,7 @@
#include
#include
#include
+#include
#include
using namespace std::placeholders;
@@ -82,8 +84,9 @@ COMMIT& BOARD_COMMIT::Stage( EDA_ITEM* aItem, CHANGE_TYPE aChangeType, BASE_SCRE
aItem->ClearFlags( IS_MODIFIED_CHILD );
// If aItem belongs a footprint, the full footprint will be saved because undo/redo does
- // not handle "sub items" modifications. This has implications for auto-zone-refill, so
- // we need to store a bit more information.
+ // not handle "sub items" modifications. This has implications for some udpate mechanisms,
+ // such as auto-zone-refill and teardrop regeneration, so we need to store a bit more
+ // information.
if( aChangeType == CHT_MODIFY )
{
if( aItem->Type() == PCB_FOOTPRINT_T )
@@ -93,9 +96,23 @@ COMMIT& BOARD_COMMIT::Stage( EDA_ITEM* aItem, CHANGE_TYPE aChangeType, BASE_SCRE
{
child->SetFlags( IS_MODIFIED_CHILD );
} );
+
+ return COMMIT::Stage( aItem, aChangeType );
}
else if( aItem->GetParent() && aItem->GetParent()->Type() == PCB_FOOTPRINT_T )
{
+ FOOTPRINT* parentFootprint = static_cast( aItem->GetParent() );
+ bool parentFootprintStaged = alg::contains( m_changedItems, parentFootprint );
+
+ if( !parentFootprintStaged )
+ {
+ parentFootprint->RunOnChildren(
+ [&]( BOARD_ITEM* child )
+ {
+ child->ClearFlags( IS_MODIFIED_CHILD );
+ } );
+ }
+
if( aItem->Type() == PCB_GROUP_T )
{
static_cast( aItem )->RunOnChildren(
@@ -109,7 +126,10 @@ COMMIT& BOARD_COMMIT::Stage( EDA_ITEM* aItem, CHANGE_TYPE aChangeType, BASE_SCRE
aItem->SetFlags( IS_MODIFIED_CHILD );
}
- aItem = aItem->GetParent();
+ if( !parentFootprintStaged )
+ return COMMIT::Stage( parentFootprint, aChangeType );
+
+ return *this;
}
else if( aItem->Type() == PCB_GROUP_T )
{
@@ -120,6 +140,8 @@ COMMIT& BOARD_COMMIT::Stage( EDA_ITEM* aItem, CHANGE_TYPE aChangeType, BASE_SCRE
{
COMMIT::Stage( child, aChangeType );
} );
+
+ return COMMIT::Stage( aItem, aChangeType );
}
}
@@ -127,13 +149,15 @@ COMMIT& BOARD_COMMIT::Stage( EDA_ITEM* aItem, CHANGE_TYPE aChangeType, BASE_SCRE
}
-COMMIT& BOARD_COMMIT::Stage( std::vector& container, CHANGE_TYPE aChangeType, BASE_SCREEN* aScreen )
+COMMIT& BOARD_COMMIT::Stage( std::vector& container, CHANGE_TYPE aChangeType,
+ BASE_SCREEN* aScreen )
{
return COMMIT::Stage( container, aChangeType, aScreen );
}
-COMMIT& BOARD_COMMIT::Stage( const PICKED_ITEMS_LIST& aItems, UNDO_REDO aModFlag, BASE_SCREEN* aScreen )
+COMMIT& BOARD_COMMIT::Stage( const PICKED_ITEMS_LIST& aItems, UNDO_REDO aModFlag,
+ BASE_SCREEN* aScreen )
{
return COMMIT::Stage( aItems, aModFlag, aScreen );
}
@@ -201,18 +225,23 @@ void BOARD_COMMIT::dirtyIntersectingZones( BOARD_ITEM* item, int aChangeType )
void BOARD_COMMIT::Push( const wxString& aMessage, int aCommitFlags )
{
- // Objects potentially interested in changes:
- PICKED_ITEMS_LIST undoList;
KIGFX::VIEW* view = m_toolMgr->GetView();
BOARD* board = static_cast( m_toolMgr->GetModel() );
PCB_BASE_FRAME* frame = dynamic_cast( m_toolMgr->GetToolHolder() );
- std::set savedModules;
PCB_SELECTION_TOOL* selTool = m_toolMgr->GetTool();
+
+ // Notification info
+ PICKED_ITEMS_LIST undoList;
+ std::set savedModules;
bool itemsDeselected = false;
- bool solderMaskDirty = false;
- bool autofillZones = false;
bool selectedModified = false;
+ // Dirty flags and lists
+ bool solderMaskDirty = false;
+ bool autofillZones = false;
+ std::vector staleTeardropPadsAndVias;
+ std::set staleTeardropTracks;
+
if( Empty() )
return;
@@ -279,10 +308,46 @@ void BOARD_COMMIT::Push( const wxString& aMessage, int aCommitFlags )
}
}
- if( boardItem->Type() == PCB_VIA_T || boardItem->Type() == PCB_FOOTPRINT_T
- || boardItem->IsOnLayer( F_Mask ) || boardItem->IsOnLayer( B_Mask ) )
+ if( m_isBoardEditor )
{
- solderMaskDirty = true;
+ if( boardItem->Type() == PCB_VIA_T || boardItem->Type() == PCB_FOOTPRINT_T
+ || boardItem->IsOnLayer( F_Mask ) || boardItem->IsOnLayer( B_Mask ) )
+ {
+ solderMaskDirty = true;
+ }
+
+ if( !( aCommitFlags & SKIP_TEARDROPS ) )
+ {
+ if( boardItem->Type() == PCB_PAD_T || boardItem->Type() == PCB_VIA_T )
+ {
+ staleTeardropPadsAndVias.push_back( boardItem );
+ }
+ else if( boardItem->Type() == PCB_TRACE_T || boardItem->Type() == PCB_ARC_T )
+ {
+ PCB_TRACK* track = static_cast( boardItem );
+
+ staleTeardropTracks.insert( track );
+
+ std::vector connectedPads;
+ std::vector connectedVias;
+
+ connectivity->GetConnectedPadsAndVias( track, &connectedPads, &connectedVias );
+
+ for( PAD* pad : connectedPads )
+ staleTeardropPadsAndVias.push_back( pad );
+
+ for( PCB_VIA* via : connectedVias )
+ staleTeardropPadsAndVias.push_back( via );
+ }
+ else if( boardItem->Type() == PCB_FOOTPRINT_T )
+ {
+ for( PAD* pad : static_cast( boardItem )->Pads() )
+ {
+ if( pad->GetFlags() & IS_MODIFIED_CHILD )
+ staleTeardropPadsAndVias.push_back( pad );
+ }
+ }
+ }
}
if( boardItem->IsSelected() )
@@ -362,6 +427,14 @@ void BOARD_COMMIT::Push( const wxString& aMessage, int aCommitFlags )
if( autofillZones )
dirtyIntersectingZones( boardItem, changeType );
+ boardItem->SetFlags( STRUCT_DELETED );
+
+ if( boardItem->Type() == PCB_FOOTPRINT_T )
+ {
+ for( PAD* pad : static_cast( boardItem )->Pads() )
+ pad->SetFlags( STRUCT_DELETED );
+ }
+
switch( boardItem->Type() )
{
case PCB_TEXT_T:
@@ -545,19 +618,21 @@ void BOARD_COMMIT::Push( const wxString& aMessage, int aCommitFlags )
frame->HideSolderMask();
}
- // Log undo items for any connectivity changes
+ if( !staleTeardropPadsAndVias.empty() || !staleTeardropTracks.empty() )
+ {
+ TEARDROP_MANAGER teardropMgr( board, m_toolMgr );
+ teardropMgr.UpdateTeardrops( *this, &staleTeardropPadsAndVias, &staleTeardropTracks );
+ }
+
+ // Log undo items for any connectivity or teardrop changes
for( size_t i = num_changes; i < m_changes.size(); ++i )
{
COMMIT_LINE& ent = m_changes[i];
-
- wxASSERT( ( ent.m_type & CHT_TYPE ) == CHT_MODIFY );
-
- BOARD_ITEM* boardItem = static_cast( ent.m_item );
+ BOARD_ITEM* boardItem = static_cast( ent.m_item );
if( !( aCommitFlags & SKIP_UNDO ) )
{
- ITEM_PICKER itemWrapper( nullptr, boardItem, UNDO_REDO::CHANGED );
- wxASSERT( ent.m_copy );
+ ITEM_PICKER itemWrapper( nullptr, boardItem, convert( ent.m_type & CHT_TYPE ) );
itemWrapper.SetLink( ent.m_copy );
undoList.PushItem( itemWrapper );
}
@@ -567,7 +642,14 @@ void BOARD_COMMIT::Push( const wxString& aMessage, int aCommitFlags )
}
if( view )
- view->Update( boardItem );
+ {
+ if( ( ent.m_type & CHT_TYPE ) == CHT_ADD )
+ view->Add( boardItem );
+ else if( ( ent.m_type & CHT_TYPE ) == CHT_REMOVE )
+ view->Remove( boardItem );
+ else
+ view->Update( boardItem );
+ }
}
}
diff --git a/pcbnew/board_commit.h b/pcbnew/board_commit.h
index 3caed389d9..e8d5854c49 100644
--- a/pcbnew/board_commit.h
+++ b/pcbnew/board_commit.h
@@ -41,6 +41,7 @@ class TOOL_BASE;
#define SKIP_SET_DIRTY 0x0004
#define SKIP_CONNECTIVITY 0x0008
#define ZONE_FILL_OP 0x0010
+#define SKIP_TEARDROPS 0x0020
class BOARD_COMMIT : public COMMIT
{
diff --git a/pcbnew/board_connected_item.cpp b/pcbnew/board_connected_item.cpp
index cdfb25dea0..51997128a2 100644
--- a/pcbnew/board_connected_item.cpp
+++ b/pcbnew/board_connected_item.cpp
@@ -203,5 +203,89 @@ static struct BOARD_CONNECTED_ITEM_DESC
&BOARD_CONNECTED_ITEM::GetNetname ) )
.SetIsHiddenFromPropertiesManager()
.SetIsHiddenFromLibraryEditors();
+
+ auto supportsTeardrops =
+ []( INSPECTABLE* aItem ) -> bool
+ {
+ if( BOARD_CONNECTED_ITEM* bci = dynamic_cast( aItem ) )
+ {
+ if( bci->GetBoard()->LegacyTeardrops() )
+ return false;
+
+ return bci->Type() == PCB_PAD_T || bci->Type() == PCB_VIA_T;
+ }
+
+ return false;
+ };
+
+ auto supportsTeardropPreferZoneSetting =
+ []( INSPECTABLE* aItem ) -> bool
+ {
+ if( BOARD_CONNECTED_ITEM* bci = dynamic_cast( aItem ) )
+ {
+ if( bci->GetBoard()->LegacyTeardrops() )
+ return false;
+
+ return bci->Type() == PCB_PAD_T;
+ }
+
+ return false;
+ };
+
+ const wxString groupTeardrops = _HKI( "Teardrops" );
+
+ auto enableTeardrops = new PROPERTY( _HKI( "Enable Teardrops" ),
+ &BOARD_CONNECTED_ITEM::SetTeardropsEnabled,
+ &BOARD_CONNECTED_ITEM::GetTeardropsEnabled );
+ enableTeardrops->SetAvailableFunc( supportsTeardrops );
+ propMgr.AddProperty( enableTeardrops, groupTeardrops );
+
+ auto bestLength = new PROPERTY( _HKI( "Best Length Ratio" ),
+ &BOARD_CONNECTED_ITEM::SetTeardropBestLengthRatio,
+ &BOARD_CONNECTED_ITEM::GetTeardropBestLengthRatio );
+ bestLength->SetAvailableFunc( supportsTeardrops );
+ propMgr.AddProperty( bestLength, groupTeardrops );
+
+ auto maxLength = new PROPERTY( _HKI( "Max Length" ),
+ &BOARD_CONNECTED_ITEM::SetTeardropMaxLength,
+ &BOARD_CONNECTED_ITEM::GetTeardropMaxLength, PROPERTY_DISPLAY::PT_SIZE );
+ maxLength->SetAvailableFunc( supportsTeardrops );
+ propMgr.AddProperty( maxLength, groupTeardrops );
+
+ auto bestWidth = new PROPERTY( _HKI( "Best Width Ratio" ),
+ &BOARD_CONNECTED_ITEM::SetTeardropBestWidthRatio,
+ &BOARD_CONNECTED_ITEM::GetTeardropBestWidthRatio );
+ bestWidth->SetAvailableFunc( supportsTeardrops );
+ propMgr.AddProperty( bestWidth, groupTeardrops );
+
+ auto maxWidth = new PROPERTY( _HKI( "Max Width" ),
+ &BOARD_CONNECTED_ITEM::SetTeardropMaxWidth,
+ &BOARD_CONNECTED_ITEM::GetTeardropMaxWidth, PROPERTY_DISPLAY::PT_SIZE );
+ maxWidth->SetAvailableFunc( supportsTeardrops );
+ propMgr.AddProperty( maxWidth, groupTeardrops );
+
+ auto curvePts = new PROPERTY( _HKI( "Curve Points" ),
+ &BOARD_CONNECTED_ITEM::SetTeardropCurvePts,
+ &BOARD_CONNECTED_ITEM::GetTeardropCurvePts );
+ curvePts->SetAvailableFunc( supportsTeardrops );
+ propMgr.AddProperty( curvePts, groupTeardrops );
+
+ auto preferZones = new PROPERTY( _HKI( "Prefer zone connections" ),
+ &BOARD_CONNECTED_ITEM::SetTeardropPreferZoneConnections,
+ &BOARD_CONNECTED_ITEM::GetTeardropPreferZoneConnections );
+ preferZones->SetAvailableFunc( supportsTeardropPreferZoneSetting );
+ propMgr.AddProperty( preferZones, groupTeardrops );
+
+ auto twoTracks = new PROPERTY( _HKI( "Allow teardrops to span two tracks" ),
+ &BOARD_CONNECTED_ITEM::SetTeardropAllowSpanTwoTracks,
+ &BOARD_CONNECTED_ITEM::GetTeardropAllowSpanTwoTracks );
+ twoTracks->SetAvailableFunc( supportsTeardrops );
+ propMgr.AddProperty( twoTracks, groupTeardrops );
+
+ auto maxTrackWidth = new PROPERTY( _HKI( "Max Width Ratio" ),
+ &BOARD_CONNECTED_ITEM::SetTeardropMaxTrackWidth,
+ &BOARD_CONNECTED_ITEM::GetTeardropMaxTrackWidth );
+ maxTrackWidth->SetAvailableFunc( supportsTeardrops );
+ propMgr.AddProperty( maxTrackWidth, groupTeardrops );
}
} _BOARD_CONNECTED_ITEM_DESC;
diff --git a/pcbnew/board_connected_item.h b/pcbnew/board_connected_item.h
index 47e6b2c3fb..089b17cd8a 100644
--- a/pcbnew/board_connected_item.h
+++ b/pcbnew/board_connected_item.h
@@ -27,6 +27,7 @@
#define BOARD_CONNECTED_ITEM_H
#include
+#include
class NETCLASS;
class NETINFO_ITEM;
@@ -168,22 +169,50 @@ public:
*/
wxString GetNetClassName() const;
- void SetLocalRatsnestVisible( bool aVisible )
- {
- m_localRatsnestVisible = aVisible;
- }
+ void SetLocalRatsnestVisible( bool aVisible ) { m_localRatsnestVisible = aVisible; }
+ bool GetLocalRatsnestVisible() const { return m_localRatsnestVisible; }
- bool GetLocalRatsnestVisible() const
- {
- return m_localRatsnestVisible;
- }
+ TEARDROP_PARAMETERS& GetTeardropParams() { return m_teardropParams; }
+ const TEARDROP_PARAMETERS& GetTeardropParams() const { return m_teardropParams; }
+
+ void SetTeardropsEnabled( bool aEnable ) { m_teardropParams.m_Enabled = aEnable; }
+ bool GetTeardropsEnabled() const { return m_teardropParams.m_Enabled; }
+
+ void SetTeardropBestLengthRatio( double aRatio ) { m_teardropParams.m_BestLengthRatio = aRatio; }
+ double GetTeardropBestLengthRatio() const { return m_teardropParams.m_BestLengthRatio; }
+
+ void SetTeardropMaxLength( int aMaxLength ) { m_teardropParams.m_TdMaxLen = aMaxLength; }
+ int GetTeardropMaxLength() const { return m_teardropParams.m_TdMaxLen; }
+
+ void SetTeardropBestWidthRatio( double aRatio ) { m_teardropParams.m_BestWidthRatio = aRatio; }
+ double GetTeardropBestWidthRatio() const { return m_teardropParams.m_BestWidthRatio; }
+
+ void SetTeardropMaxWidth( int aMaxWidth ) { m_teardropParams.m_TdMaxWidth = aMaxWidth; }
+ int GetTeardropMaxWidth() const { return m_teardropParams.m_TdMaxWidth; }
+
+ void SetTeardropCurvePts( int aPointCount ) { m_teardropParams.m_CurveSegCount = aPointCount; }
+ int GetTeardropCurvePts() const { return m_teardropParams.m_CurveSegCount; }
+
+ void SetTeardropPreferZoneConnections( bool aPrefer ) { m_teardropParams.m_TdOnPadsInZones = !aPrefer; }
+ bool GetTeardropPreferZoneConnections() const { return !m_teardropParams.m_TdOnPadsInZones; }
+
+ void SetTeardropAllowSpanTwoTracks( bool aAllow ) { m_teardropParams.m_AllowUseTwoTracks = aAllow; }
+ bool GetTeardropAllowSpanTwoTracks() const { return m_teardropParams.m_AllowUseTwoTracks; }
+
+ void SetTeardropMaxTrackWidth( double aRatio ) { m_teardropParams.m_WidthtoSizeFilterRatio = aRatio; }
+ double GetTeardropMaxTrackWidth() const { return m_teardropParams.m_WidthtoSizeFilterRatio; }
protected:
/// Store all information about the net that item belongs to.
NETINFO_ITEM* m_netinfo;
+ /// Not all BOARD_CONNECTED_ITEMs support teardrops, but we want those that do to share a
+ /// single section in the property inspector.
+ TEARDROP_PARAMETERS m_teardropParams;
+
private:
bool m_localRatsnestVisible;
+
};
#endif // BOARD_CONNECTED_ITEM_H
diff --git a/pcbnew/board_design_settings.cpp b/pcbnew/board_design_settings.cpp
index b7d333bf97..8afd93d10c 100644
--- a/pcbnew/board_design_settings.cpp
+++ b/pcbnew/board_design_settings.cpp
@@ -471,9 +471,6 @@ BOARD_DESIGN_SETTINGS::BOARD_DESIGN_SETTINGS( JSON_SETTINGS* aParent, const std:
entry["td_onpadsmd"] = m_TeardropParamsList.m_TargetPadsWithNoHole;
entry["td_ontrackend"] = m_TeardropParamsList.m_TargetTrack2Track;
entry["td_onroundshapesonly"] = m_TeardropParamsList.m_UseRoundShapesOnly;
- entry["td_allow_use_two_tracks"] = m_TeardropParamsList.m_AllowUseTwoTracks;
- entry["td_curve_segcount"] = m_TeardropParamsList.m_CurveSegCount;
- entry["td_on_pad_in_zone"] = m_TeardropParamsList.m_TdOnPadsInZones;
js.push_back( entry );
@@ -501,14 +498,20 @@ BOARD_DESIGN_SETTINGS::BOARD_DESIGN_SETTINGS( JSON_SETTINGS* aParent, const std:
if( entry.contains( "td_onroundshapesonly" ) )
m_TeardropParamsList.m_UseRoundShapesOnly = entry["td_onroundshapesonly"].get();
- if( entry.contains( "td_allow_use_two_tracks" ) )
- m_TeardropParamsList.m_AllowUseTwoTracks = entry["td_allow_use_two_tracks"].get();
+ // Legacy settings
+ for( int ii = 0; ii < 3; ++ii )
+ {
+ TEARDROP_PARAMETERS* td_prm = m_TeardropParamsList.GetParameters( (TARGET_TD)ii );
- if( entry.contains( "td_curve_segcount" ) )
- m_TeardropParamsList.m_CurveSegCount = entry["td_curve_segcount"].get();
+ if( entry.contains( "td_allow_use_two_tracks" ) )
+ td_prm->m_AllowUseTwoTracks = entry["td_allow_use_two_tracks"].get();
- if( entry.contains( "td_on_pad_in_zone" ) )
- m_TeardropParamsList.m_TdOnPadsInZones = entry["td_on_pad_in_zone"].get();
+ if( entry.contains( "td_curve_segcount" ) )
+ td_prm->m_CurveSegCount = entry["td_curve_segcount"].get();
+
+ if( entry.contains( "td_on_pad_in_zone" ) )
+ td_prm->m_TdOnPadsInZones = entry["td_on_pad_in_zone"].get();
+ }
}
},
{} ) );
@@ -526,11 +529,14 @@ BOARD_DESIGN_SETTINGS::BOARD_DESIGN_SETTINGS( JSON_SETTINGS* aParent, const std:
entry["td_target_name"] = GetTeardropTargetCanonicalName( (TARGET_TD)ii );
entry["td_maxlen"] = pcbIUScale.IUTomm( td_prm->m_TdMaxLen );
- entry["td_maxheight"] = pcbIUScale.IUTomm( td_prm->m_TdMaxHeight );
- entry["td_length_ratio"] = td_prm->m_LengthRatio;
- entry["td_height_ratio"] = td_prm->m_HeightRatio;
+ entry["td_maxheight"] = pcbIUScale.IUTomm( td_prm->m_TdMaxWidth );
+ entry["td_length_ratio"] = td_prm->m_BestLengthRatio;
+ entry["td_height_ratio"] = td_prm->m_BestWidthRatio;
entry["td_curve_segcount"] = td_prm->m_CurveSegCount;
entry["td_width_to_size_filter_ratio"] = td_prm->m_WidthtoSizeFilterRatio;
+ entry["td_allow_use_two_tracks"] = td_prm->m_AllowUseTwoTracks;
+ entry["td_curve_segcount"] = td_prm->m_CurveSegCount;
+ entry["td_on_pad_in_zone"] = td_prm->m_TdOnPadsInZones;
js.push_back( entry );
}
@@ -560,19 +566,28 @@ BOARD_DESIGN_SETTINGS::BOARD_DESIGN_SETTINGS( JSON_SETTINGS* aParent, const std:
td_prm->m_TdMaxLen = pcbIUScale.mmToIU( entry["td_maxlen"].get() );
if( entry.contains( "td_maxheight" ) )
- td_prm->m_TdMaxHeight = pcbIUScale.mmToIU( entry["td_maxheight"].get() );
+ td_prm->m_TdMaxWidth = pcbIUScale.mmToIU( entry["td_maxheight"].get() );
if( entry.contains( "td_length_ratio" ) )
- td_prm->m_LengthRatio = entry["td_length_ratio"].get();
+ td_prm->m_BestLengthRatio = entry["td_length_ratio"].get();
if( entry.contains( "td_height_ratio" ) )
- td_prm->m_HeightRatio = entry["td_height_ratio"].get();
+ td_prm->m_BestWidthRatio = entry["td_height_ratio"].get();
if( entry.contains( "td_curve_segcount" ) )
td_prm->m_CurveSegCount = entry["td_curve_segcount"].get();
if( entry.contains( "td_width_to_size_filter_ratio" ) )
td_prm->m_WidthtoSizeFilterRatio = entry["td_width_to_size_filter_ratio"].get();
+
+ if( entry.contains( "td_allow_use_two_tracks" ) )
+ td_prm->m_AllowUseTwoTracks = entry["td_allow_use_two_tracks"].get();
+
+ if( entry.contains( "td_curve_segcount" ) )
+ td_prm->m_CurveSegCount = entry["td_curve_segcount"].get();
+
+ if( entry.contains( "td_on_pad_in_zone" ) )
+ td_prm->m_TdOnPadsInZones = entry["td_on_pad_in_zone"].get();
}
}
},
diff --git a/pcbnew/connectivity/connectivity_data.cpp b/pcbnew/connectivity/connectivity_data.cpp
index d90a0bf3b0..db382a6f85 100644
--- a/pcbnew/connectivity/connectivity_data.cpp
+++ b/pcbnew/connectivity/connectivity_data.cpp
@@ -637,6 +637,28 @@ const
}
+void CONNECTIVITY_DATA::GetConnectedPadsAndVias( const BOARD_CONNECTED_ITEM* aItem,
+ std::vector* pads,
+ std::vector* vias )
+{
+ for( CN_ITEM* citem : m_connAlgo->ItemEntry( aItem ).GetItems() )
+ {
+ for( CN_ITEM* connected : citem->ConnectedItems() )
+ {
+ if( connected->Valid() )
+ {
+ BOARD_CONNECTED_ITEM* parent = connected->Parent();
+
+ if( parent->Type() == PCB_PAD_T )
+ pads->push_back( static_cast( parent ) );
+ else if( parent->Type() == PCB_VIA_T )
+ vias->push_back( static_cast( parent ) );
+ }
+ }
+ }
+}
+
+
unsigned int CONNECTIVITY_DATA::GetNodeCount( int aNet ) const
{
int sum = 0;
diff --git a/pcbnew/connectivity/connectivity_data.h b/pcbnew/connectivity/connectivity_data.h
index 85e0ea742b..70edff8c46 100644
--- a/pcbnew/connectivity/connectivity_data.h
+++ b/pcbnew/connectivity/connectivity_data.h
@@ -51,6 +51,7 @@ class ZONE;
class RN_DATA;
class RN_NET;
class PCB_TRACK;
+class PCB_VIA;
class PAD;
class FOOTPRINT;
class PROGRESS_REPORTER;
@@ -193,6 +194,9 @@ public:
void GetConnectedPads( const BOARD_CONNECTED_ITEM* aItem, std::set* pads ) const;
+ void GetConnectedPadsAndVias( const BOARD_CONNECTED_ITEM* aItem, std::vector* pads,
+ std::vector* vias );
+
/**
* Function GetConnectedItemsAtAnchor()
* Returns a list of items connected to a source item aItem at position aAnchor
diff --git a/pcbnew/connectivity/connectivity_items.cpp b/pcbnew/connectivity/connectivity_items.cpp
index da635f2ca5..9d70dd5bdc 100644
--- a/pcbnew/connectivity/connectivity_items.cpp
+++ b/pcbnew/connectivity/connectivity_items.cpp
@@ -228,7 +228,7 @@ const std::vector CN_LIST::Add( ZONE* zone, PCB_LAYER_ID aLayer )
zitem->BuildRTree();
- for( VECTOR2I pt : zone->GetFilledPolysList( aLayer )->COutline( j ).CPoints() )
+ for( const VECTOR2I& pt : zone->GetFilledPolysList( aLayer )->COutline( j ).CPoints() )
zitem->AddAnchor( pt );
rv.push_back( Add( zitem ) );
diff --git a/pcbnew/connectivity/connectivity_items.h b/pcbnew/connectivity/connectivity_items.h
index 75619b7ac4..45e672d1f8 100644
--- a/pcbnew/connectivity/connectivity_items.h
+++ b/pcbnew/connectivity/connectivity_items.h
@@ -258,18 +258,22 @@ class CN_ZONE_LAYER : public CN_ITEM
public:
CN_ZONE_LAYER( ZONE* aParent, PCB_LAYER_ID aLayer, int aSubpolyIndex ) :
CN_ITEM( aParent, false ),
+ m_zone( aParent ),
m_subpolyIndex( aSubpolyIndex ),
m_layer( aLayer )
{
- m_triangulatedPoly = aParent->GetFilledPolysList( aLayer );
+ m_fillPoly = aParent->GetFilledPolysList( aLayer );
SetLayers( aLayer );
}
void BuildRTree()
{
- for( unsigned int ii = 0; ii < m_triangulatedPoly->TriangulatedPolyCount(); ++ii )
+ if( m_zone->IsTeardropArea() )
+ return;
+
+ for( unsigned int ii = 0; ii < m_fillPoly->TriangulatedPolyCount(); ++ii )
{
- const auto* triangleSet = m_triangulatedPoly->TriangulatedPolygon( ii );
+ const auto* triangleSet = m_fillPoly->TriangulatedPolygon( ii );
if( triangleSet->GetSourceOutlineIndex() != m_subpolyIndex )
continue;
@@ -291,6 +295,9 @@ public:
bool ContainsPoint( const VECTOR2I& p ) const
{
+ if( m_zone->IsTeardropArea() )
+ return m_fillPoly->Outline( m_subpolyIndex ).Collide( p ) ;
+
int min[2] = { p.x, p.y };
int max[2] = { p.x, p.y };
bool collision = false;
@@ -319,11 +326,14 @@ public:
const SHAPE_LINE_CHAIN& GetOutline() const
{
- return m_triangulatedPoly->Outline( m_subpolyIndex );
+ return m_fillPoly->Outline( m_subpolyIndex );
}
bool Collide( SHAPE* aRefShape ) const
{
+ if( m_zone->IsTeardropArea() )
+ return m_fillPoly->Collide( aRefShape );
+
BOX2I bbox = aRefShape->BBox();
int min[2] = { bbox.GetX(), bbox.GetY() };
int max[2] = { bbox.GetRight(), bbox.GetBottom() };
@@ -349,9 +359,10 @@ public:
bool HasSingleConnection();
private:
+ ZONE* m_zone;
int m_subpolyIndex;
PCB_LAYER_ID m_layer;
- std::shared_ptr m_triangulatedPoly;
+ std::shared_ptr m_fillPoly;
RTree m_rTree;
};
diff --git a/pcbnew/dialogs/dialog_board_setup.cpp b/pcbnew/dialogs/dialog_board_setup.cpp
index 1ec16c2f34..d21be1abb5 100644
--- a/pcbnew/dialogs/dialog_board_setup.cpp
+++ b/pcbnew/dialogs/dialog_board_setup.cpp
@@ -42,6 +42,7 @@
#include "dialog_board_setup.h"
#include "panel_setup_rules.h"
+#include "panel_setup_teardrops.h"
std::mutex DIALOG_BOARD_SETUP::g_Mutex;
@@ -64,6 +65,7 @@ DIALOG_BOARD_SETUP::DIALOG_BOARD_SETUP( PCB_EDIT_FRAME* aFrame ) :
m_maskAndPagePage( 0 ),
m_constraintsPage( 0 ),
m_tracksAndViasPage( 0 ),
+ m_teardropsPage( 0 ),
m_netclassesPage( 0 ),
m_severitiesPage( 0 )
@@ -149,6 +151,13 @@ DIALOG_BOARD_SETUP::DIALOG_BOARD_SETUP( PCB_EDIT_FRAME* aFrame ) :
return new PANEL_SETUP_TRACKS_AND_VIAS( aParent, m_frame );
}, _( "Pre-defined Sizes" ) );
+ m_teardropsPage = m_treebook->GetPageCount();
+ m_treebook->AddLazySubPage(
+ [this]( wxWindow* aParent ) -> wxWindow*
+ {
+ return new PANEL_SETUP_TEARDROPS( aParent, m_frame );
+ }, _( "Teardrops" ) );
+
m_netclassesPage = m_treebook->GetPageCount();
m_treebook->AddLazySubPage(
[this]( wxWindow* aParent ) -> wxWindow*
@@ -353,6 +362,12 @@ void DIALOG_BOARD_SETUP::onAuxiliaryAction( wxCommandEvent& aEvent )
m_tracksAndViasPage )->ImportSettingsFrom( otherBoard );
}
+ if( importDlg.m_TeardropsOpt->GetValue() )
+ {
+ RESOLVE_PAGE( PANEL_SETUP_TEARDROPS,
+ m_teardropsPage )->ImportSettingsFrom( otherBoard );
+ }
+
if( importDlg.m_MaskAndPasteOpt->GetValue() )
{
RESOLVE_PAGE( PANEL_SETUP_MASK_AND_PASTE,
diff --git a/pcbnew/dialogs/dialog_board_setup.h b/pcbnew/dialogs/dialog_board_setup.h
index c9b669e442..d8de3390c5 100644
--- a/pcbnew/dialogs/dialog_board_setup.h
+++ b/pcbnew/dialogs/dialog_board_setup.h
@@ -67,6 +67,7 @@ private:
size_t m_maskAndPagePage;
size_t m_constraintsPage;
size_t m_tracksAndViasPage;
+ size_t m_teardropsPage;
size_t m_netclassesPage;
size_t m_severitiesPage;
};
diff --git a/pcbnew/dialogs/dialog_copper_zones.cpp b/pcbnew/dialogs/dialog_copper_zones.cpp
index 105c6c9d56..b25d477e4b 100644
--- a/pcbnew/dialogs/dialog_copper_zones.cpp
+++ b/pcbnew/dialogs/dialog_copper_zones.cpp
@@ -479,8 +479,8 @@ bool DIALOG_COPPER_ZONE::TransferDataFromWindow()
}
m_settings.m_HatchOrientation = m_gridStyleRotation.GetAngleValue();
- m_settings.m_HatchThickness = m_gridStyleThickness.GetValue();
- m_settings.m_HatchGap = m_gridStyleGap.GetValue();
+ m_settings.m_HatchThickness = m_gridStyleThickness.GetIntValue();
+ m_settings.m_HatchGap = m_gridStyleGap.GetIntValue();
m_settings.m_HatchSmoothingLevel = m_spinCtrlSmoothLevel->GetValue();
m_settings.m_HatchSmoothingValue = m_spinCtrlSmoothValue->GetValue();
@@ -514,7 +514,7 @@ bool DIALOG_COPPER_ZONE::AcceptOptions( bool aUseExportableSetupOnly )
if( m_settings.m_FillMode == ZONE_FILL_MODE::HATCH_PATTERN )
{
- int minThickness = m_minWidth.GetValue();
+ int minThickness = m_minWidth.GetIntValue();
if( !m_gridStyleThickness.Validate( minThickness, INT_MAX ) )
return false;
@@ -542,15 +542,17 @@ bool DIALOG_COPPER_ZONE::AcceptOptions( bool aUseExportableSetupOnly )
pcbIUScale.mmToIU( ZONE_BORDER_HATCH_MAXDIST_MM ) ) )
return false;
- m_settings.m_BorderHatchPitch = m_outlineHatchPitch.GetValue();
+ m_settings.m_BorderHatchPitch = m_outlineHatchPitch.GetIntValue();
- m_settings.m_ZoneClearance = m_clearance.GetValue();
- m_settings.m_ZoneMinThickness = m_minWidth.GetValue();
+ m_settings.m_ZoneClearance = m_clearance.GetIntValue();
+ m_settings.m_ZoneMinThickness = m_minWidth.GetIntValue();
m_settings.SetCornerSmoothingType( m_cornerSmoothingChoice->GetSelection() );
- m_settings.SetCornerRadius( m_settings.GetCornerSmoothingType() == ZONE_SETTINGS::SMOOTHING_NONE
- ? 0 : m_cornerRadius.GetValue() );
+ if( m_settings.GetCornerSmoothingType() == ZONE_SETTINGS::SMOOTHING_NONE )
+ m_settings.SetCornerRadius( 0 );
+ else
+ m_settings.SetCornerRadius( m_cornerRadius.GetIntValue() );
m_settings.m_ZonePriority = m_PriorityLevelCtrl->GetValue();
diff --git a/pcbnew/dialogs/dialog_global_edit_teardrops.cpp b/pcbnew/dialogs/dialog_global_edit_teardrops.cpp
new file mode 100644
index 0000000000..1a633d572c
--- /dev/null
+++ b/pcbnew/dialogs/dialog_global_edit_teardrops.cpp
@@ -0,0 +1,569 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2023 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 2
+ * 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, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include "dialog_global_edit_teardrops_base.h"
+
+
+// Globals to remember control settings during a session
+static bool g_vias = true;
+static bool g_pthPads = true;
+static bool g_smdPads = true;
+static bool g_trackToTrack = false;
+static bool g_filterByNetclass;
+static wxString g_netclassFilter;
+static bool g_filterByNet;
+static wxString g_netFilter;
+static bool g_filterByLayer;
+static int g_layerFilter;
+static bool g_filterRoundPads = false;
+static bool g_filterSelected = false;
+static int g_action = 1;
+
+
+class DIALOG_GLOBAL_EDIT_TEARDROPS : public DIALOG_GLOBAL_EDIT_TEARDROPS_BASE
+{
+public:
+ DIALOG_GLOBAL_EDIT_TEARDROPS( PCB_EDIT_FRAME* aParent );
+ ~DIALOG_GLOBAL_EDIT_TEARDROPS() override;
+
+protected:
+ void onSpecifiedValuesUpdateUi( wxUpdateUIEvent& event ) override
+ {
+ event.Enable( m_specifiedValues->GetValue() );
+ }
+ void onCurvedEdgesUpdateUi( wxUpdateUIEvent& event ) override
+ {
+ event.Enable( m_specifiedValues->GetValue() && m_rbCurved->GetValue() );
+ }
+ void onFilterUpdateUi( wxUpdateUIEvent& event ) override
+ {
+ event.Enable( !m_trackToTrack->GetValue() );
+ }
+
+ // We can't use standard wxWidgets radio button processing for these because you must
+ // be able to turn them both off to set a "don't modify" state
+ void onStraightLines( wxMouseEvent& event ) override
+ {
+ if( !m_rbStraightLines->GetValue() )
+ {
+ m_rbStraightLines->SetValue( true );
+ m_rbCurved->SetValue( false );
+ }
+ else
+ {
+ m_rbStraightLines->SetValue( false );
+ }
+ }
+ void onCurvedLines( wxMouseEvent& event ) override
+ {
+ if( !m_rbCurved->GetValue() )
+ {
+ m_rbCurved->SetValue( true );
+ m_rbStraightLines->SetValue( false );
+ }
+ else
+ {
+ m_rbCurved->SetValue( false );
+ }
+ }
+
+ void onTrackToTrack( wxCommandEvent& event ) override
+ {
+ if( event.IsChecked() && m_specifiedValues->GetValue() )
+ {
+ m_specifiedValues->SetValue( false );
+ m_addTeardrops->SetValue( true );
+ }
+ }
+
+ void OnNetclassFilterSelect( wxCommandEvent& event ) override
+ {
+ m_netclassFilterOpt->SetValue( true );
+ }
+ void OnLayerFilterSelect( wxCommandEvent& event ) override
+ {
+ m_layerFilterOpt->SetValue( true );
+ }
+ void OnNetFilterSelect( wxCommandEvent& event )
+ {
+ m_netFilterOpt->SetValue( true );
+ }
+ void OnExistingFilterSelect( wxCommandEvent& event ) override
+ {
+ if( event.IsChecked() )
+ m_specifiedValues->SetLabel( _( "Update teardrops to specified values:" ) );
+ else
+ m_specifiedValues->SetLabel( _( "Add teardrops with specified values:" ) );
+ }
+
+ void setSpecifiedParams( TEARDROP_PARAMETERS* targetParams );
+ void visitItem( BOARD_COMMIT* aCommit, BOARD_CONNECTED_ITEM* aItem );
+ void processItem( BOARD_COMMIT* aCommit, BOARD_CONNECTED_ITEM* aItem );
+
+ bool TransferDataToWindow() override;
+ bool TransferDataFromWindow() override;
+
+
+ void onShowBoardSetup( wxHyperlinkEvent& event ) override
+ {
+ m_parent->ShowBoardSetupDialog( _( "Teardrops" ) );
+ }
+
+ void buildFilterLists();
+
+private:
+ PCB_EDIT_FRAME* m_parent;
+ BOARD* m_brd;
+ PCB_SELECTION m_selection;
+
+ UNIT_BINDER m_teardropHDPercent;
+ UNIT_BINDER m_teardropLenPercent;
+ UNIT_BINDER m_teardropMaxLen;
+ UNIT_BINDER m_teardropHeightPercent;
+ UNIT_BINDER m_teardropMaxHeight;
+ UNIT_BINDER m_curvePoints;
+};
+
+
+DIALOG_GLOBAL_EDIT_TEARDROPS::DIALOG_GLOBAL_EDIT_TEARDROPS( PCB_EDIT_FRAME* aParent ) :
+ DIALOG_GLOBAL_EDIT_TEARDROPS_BASE( aParent ),
+ m_teardropHDPercent( aParent, m_stHDRatio, m_tcHDRatio, m_stHDRatioUnits ),
+ m_teardropLenPercent( aParent, m_stLenPercentLabel, m_tcLenPercent, m_stLenPercentUnits ),
+ m_teardropMaxLen( aParent, m_stMaxLen, m_tcTdMaxLen, m_stMaxLenUnits ),
+ m_teardropHeightPercent( aParent, m_stHeightPercentLabel, m_tcHeightPercent, m_stHeightPercentUnits ),
+ m_teardropMaxHeight( aParent, m_stMaxHeight, m_tcMaxHeight, m_stMaxHeightUnits ),
+ m_curvePoints( aParent, m_curvePointsLabel, m_curvePointsCtrl, nullptr )
+{
+ m_parent = aParent;
+ m_brd = m_parent->GetBoard();
+
+ m_bitmapTeardrop->SetBitmap( KiBitmap( BITMAPS::teardrop_sizes ) );
+
+ m_teardropHDPercent.SetUnits( EDA_UNITS::PERCENT );
+ m_teardropLenPercent.SetUnits( EDA_UNITS::PERCENT );
+ m_teardropHeightPercent.SetUnits( EDA_UNITS::PERCENT );
+ m_curvePoints.SetUnits( EDA_UNITS::UNSCALED );
+
+ m_minTrackWidthHint->SetFont( KIUI::GetInfoFont( this ).Italic() );
+
+ buildFilterLists();
+
+ SetupStandardButtons();
+
+ m_netFilter->Connect( NET_SELECTED,
+ wxCommandEventHandler( DIALOG_GLOBAL_EDIT_TEARDROPS::OnNetFilterSelect ),
+ nullptr, this );
+
+ finishDialogSettings();
+}
+
+
+DIALOG_GLOBAL_EDIT_TEARDROPS::~DIALOG_GLOBAL_EDIT_TEARDROPS()
+{
+ g_vias = m_vias->GetValue();
+ g_pthPads = m_pthPads->GetValue();
+ g_smdPads = m_smdPads->GetValue();
+ g_trackToTrack = m_trackToTrack->GetValue();
+ g_filterByNetclass = m_netclassFilterOpt->GetValue();
+ g_netclassFilter = m_netclassFilter->GetStringSelection();
+ g_filterByNet = m_netFilterOpt->GetValue();
+ g_netFilter = m_netFilter->GetSelectedNetname();
+ g_filterByLayer = m_layerFilterOpt->GetValue();
+ g_layerFilter = m_layerFilter->GetLayerSelection();
+ g_filterRoundPads = m_roundPadsFilter->GetValue();
+ g_filterSelected = m_selectedItemsFilter->GetValue();
+
+ if( m_removeTeardrops->GetValue() )
+ g_action = 0;
+ else if( m_specifiedValues->GetValue() )
+ g_action = 2;
+ else
+ g_action = 1;
+
+ m_netFilter->Disconnect( NET_SELECTED,
+ wxCommandEventHandler( DIALOG_GLOBAL_EDIT_TEARDROPS::OnNetFilterSelect ),
+ nullptr, this );
+}
+
+
+void DIALOG_GLOBAL_EDIT_TEARDROPS::buildFilterLists()
+{
+ // Populate the net filter list with net names
+ m_netFilter->SetBoard( m_brd );
+ m_netFilter->SetNetInfo( &m_brd->GetNetInfo() );
+
+ if( !m_brd->GetHighLightNetCodes().empty() )
+ m_netFilter->SetSelectedNetcode( *m_brd->GetHighLightNetCodes().begin() );
+
+ // Populate the netclass filter list with netclass names
+ wxArrayString netclassNames;
+ std::shared_ptr& settings = m_brd->GetDesignSettings().m_NetSettings;
+
+ netclassNames.push_back( settings->m_DefaultNetClass->GetName() );
+
+ for( const auto& [ name, netclass ] : settings->m_NetClasses )
+ netclassNames.push_back( name );
+
+ m_netclassFilter->Set( netclassNames );
+ m_netclassFilter->SetStringSelection( m_brd->GetDesignSettings().GetCurrentNetClassName() );
+
+ // Populate the layer filter list
+ m_layerFilter->SetBoardFrame( m_parent );
+ m_layerFilter->SetLayersHotkeys( false );
+ m_layerFilter->SetNotAllowedLayerSet( LSET::AllNonCuMask() );
+ m_layerFilter->Resync();
+ m_layerFilter->SetLayerSelection( m_parent->GetActiveLayer() );
+}
+
+
+bool DIALOG_GLOBAL_EDIT_TEARDROPS::TransferDataToWindow()
+{
+ PCB_SELECTION_TOOL* selTool = m_parent->GetToolManager()->GetTool();
+ m_selection = selTool->GetSelection();
+ BOARD_CONNECTED_ITEM* item = dynamic_cast( m_selection.Front() );
+
+ m_vias->SetValue( g_vias );
+ m_pthPads->SetValue( g_pthPads );
+ m_smdPads->SetValue( g_smdPads );
+ m_trackToTrack->SetValue( g_trackToTrack );
+
+ if( g_filterByNetclass && m_netclassFilter->SetStringSelection( g_netclassFilter ) )
+ m_netclassFilterOpt->SetValue( true );
+ else if( item )
+ m_netclassFilter->SetStringSelection( item->GetNet()->GetNetClass()->GetName() );
+
+ if( g_filterByNet && m_brd->FindNet( g_netFilter ) != nullptr )
+ {
+ m_netFilter->SetSelectedNet( g_netFilter );
+ m_netFilterOpt->SetValue( true );
+ }
+ else if( item )
+ {
+ m_netFilter->SetSelectedNetcode( item->GetNetCode() );
+ }
+
+ if( g_filterByLayer && m_layerFilter->SetLayerSelection( g_layerFilter ) != wxNOT_FOUND )
+ {
+ m_layerFilterOpt->SetValue( true );
+ }
+ else if( item )
+ {
+ if( item->Type() == PCB_ZONE_T ) // a zone can be on more than one layer
+ m_layerFilter->SetLayerSelection( static_cast(item)->GetFirstLayer() );
+ else
+ m_layerFilter->SetLayerSelection( item->GetLayer() );
+ }
+
+ m_roundPadsFilter->SetValue( g_filterRoundPads );
+ m_selectedItemsFilter->SetValue( g_filterSelected );
+
+ if( g_action == 0 )
+ m_removeTeardrops->SetValue( true );
+ else if( g_action == 1 )
+ m_addTeardrops->SetValue( true );
+ else
+ m_specifiedValues->SetValue( true );
+
+ m_cbPreferZoneConnection->Set3StateValue( wxCHK_UNDETERMINED );
+ m_cbTeardropsUseNextTrack->Set3StateValue( wxCHK_UNDETERMINED );
+ m_teardropHDPercent.SetValue( INDETERMINATE_ACTION );
+ m_teardropLenPercent.SetValue( INDETERMINATE_ACTION );
+ m_teardropMaxLen.SetValue( INDETERMINATE_ACTION );
+ m_teardropHeightPercent.SetValue( INDETERMINATE_ACTION );
+ m_teardropMaxHeight.SetValue( INDETERMINATE_ACTION );
+ m_curvePoints.SetValue( INDETERMINATE_ACTION );
+
+ return true;
+}
+
+
+void DIALOG_GLOBAL_EDIT_TEARDROPS::setSpecifiedParams( TEARDROP_PARAMETERS* targetParams )
+{
+ if( m_cbPreferZoneConnection->Get3StateValue() != wxCHK_UNDETERMINED )
+ targetParams->m_TdOnPadsInZones = !m_cbPreferZoneConnection->GetValue();
+
+ if( m_cbTeardropsUseNextTrack->Get3StateValue() != wxCHK_UNDETERMINED )
+ targetParams->m_AllowUseTwoTracks = m_cbTeardropsUseNextTrack->GetValue();
+
+ if( !m_teardropHDPercent.IsIndeterminate() )
+ targetParams->m_WidthtoSizeFilterRatio = m_teardropHDPercent.GetDoubleValue() / 100.0;
+
+ if( !m_teardropLenPercent.IsIndeterminate() )
+ targetParams->m_BestLengthRatio = m_teardropLenPercent.GetDoubleValue() / 100.0;
+
+ if( !m_teardropMaxLen.IsIndeterminate() )
+ targetParams->m_TdMaxLen = m_teardropMaxLen.GetIntValue();
+
+ if( !m_teardropHeightPercent.IsIndeterminate() )
+ targetParams->m_BestWidthRatio = m_teardropHeightPercent.GetDoubleValue() / 100.0;
+
+ if( !m_teardropMaxHeight.IsIndeterminate() )
+ targetParams->m_TdMaxWidth = m_teardropMaxHeight.GetIntValue();
+
+ if( m_rbStraightLines->GetValue() )
+ {
+ targetParams->m_CurveSegCount = 0;
+ }
+ else if( m_rbCurved->GetValue() )
+ {
+ if( !m_curvePoints.IsIndeterminate() )
+ targetParams->m_CurveSegCount = m_curvePoints.GetIntValue();
+ else if( targetParams->m_CurveSegCount == 0 )
+ targetParams->m_CurveSegCount = 5;
+ }
+}
+
+
+void DIALOG_GLOBAL_EDIT_TEARDROPS::processItem( BOARD_COMMIT* aCommit, BOARD_CONNECTED_ITEM* aItem )
+{
+ BOARD_DESIGN_SETTINGS& brdSettings = m_brd->GetDesignSettings();
+ TEARDROP_PARAMETERS* targetParams = nullptr;
+
+ if( aItem->Type() == PCB_PAD_T )
+ targetParams = &static_cast( aItem )->GetTeardropParams();
+ else if( aItem->Type() == PCB_VIA_T )
+ targetParams = &static_cast( aItem )->GetTeardropParams();
+ else
+ return;
+
+ aCommit->Stage( aItem, CHT_MODIFY );
+
+ if( m_removeTeardrops->GetValue() )
+ {
+ targetParams->m_Enabled = false;
+ }
+ else if( m_addTeardrops->GetValue() )
+ {
+ if( TEARDROP_MANAGER::IsRound( aItem ) )
+ *targetParams = *brdSettings.GetTeadropParamsList()->GetParameters( TARGET_ROUND );
+ else
+ *targetParams = *brdSettings.GetTeadropParamsList()->GetParameters( TARGET_RECT );
+
+ targetParams->m_Enabled = true;
+ }
+ else if( m_specifiedValues->GetValue() )
+ {
+ setSpecifiedParams( targetParams );
+
+ if( !m_existingFilter->GetValue() )
+ targetParams->m_Enabled = true;
+ }
+}
+
+
+void DIALOG_GLOBAL_EDIT_TEARDROPS::visitItem( BOARD_COMMIT* aCommit, BOARD_CONNECTED_ITEM* aItem )
+{
+ if( m_selectedItemsFilter->GetValue() )
+ {
+ if( !aItem->IsSelected() )
+ {
+ PCB_GROUP* group = aItem->GetParentGroup();
+
+ while( group && !group->IsSelected() )
+ group = group->GetParentGroup();
+
+ if( !group )
+ return;
+ }
+ }
+
+ if( m_netFilterOpt->GetValue() && m_netFilter->GetSelectedNetcode() >= 0 )
+ {
+ if( aItem->GetNetCode() != m_netFilter->GetSelectedNetcode() )
+ return;
+ }
+
+ if( m_netclassFilterOpt->GetValue() && !m_netclassFilter->GetStringSelection().IsEmpty() )
+ {
+ if( aItem->GetEffectiveNetClass()->GetName() != m_netclassFilter->GetStringSelection() )
+ return;
+ }
+
+ if( m_layerFilterOpt->GetValue() && m_layerFilter->GetLayerSelection() != UNDEFINED_LAYER )
+ {
+ if( aItem->GetLayer() != m_layerFilter->GetLayerSelection() )
+ return;
+ }
+
+ if( m_roundPadsFilter->GetValue() )
+ {
+ if( !TEARDROP_MANAGER::IsRound( aItem ) )
+ return;
+ }
+
+ if( m_existingFilter->GetValue() )
+ {
+ if( aItem->Type() == PCB_PAD_T )
+ {
+ if( !static_cast( aItem )->GetTeardropParams().m_Enabled )
+ return;
+ }
+ else if( aItem->Type() == PCB_VIA_T )
+ {
+ if( !static_cast( aItem )->GetTeardropParams().m_Enabled )
+ return;
+ }
+ }
+
+ processItem( aCommit, aItem );
+}
+
+
+bool DIALOG_GLOBAL_EDIT_TEARDROPS::TransferDataFromWindow()
+{
+ m_brd->SetLegacyTeardrops( false );
+
+ BOARD_COMMIT commit( m_parent );
+ wxBusyCursor dummy;
+
+ if( m_vias->GetValue() )
+ {
+ for( PCB_TRACK* track : m_brd->Tracks() )
+ {
+ if ( track->Type() == PCB_VIA_T )
+ visitItem( &commit, track );
+ }
+ }
+
+ for( FOOTPRINT* footprint : m_brd->Footprints() )
+ {
+ for( PAD* pad : footprint->Pads() )
+ {
+ if( m_pthPads->GetValue() && pad->GetAttribute() == PAD_ATTRIB::PTH )
+ {
+ visitItem( &commit, pad );
+ }
+ else if( m_smdPads->GetValue() && ( pad->GetAttribute() == PAD_ATTRIB::SMD
+ || pad->GetAttribute() == PAD_ATTRIB::CONN ) )
+ {
+ visitItem( &commit, pad );
+ }
+ }
+ }
+
+ if( m_trackToTrack->GetValue() )
+ {
+ TEARDROP_PARAMETERS_LIST* paramsList = m_brd->GetDesignSettings().GetTeadropParamsList();
+ TEARDROP_PARAMETERS* targetParams = paramsList->GetParameters( TARGET_TRACK );
+ TEARDROP_MANAGER teardropManager( m_brd, m_parent->GetToolManager() );
+
+ teardropManager.DeleteTrackToTrackTeardrops( commit );
+
+ if( m_removeTeardrops->GetValue() )
+ {
+ targetParams->m_Enabled = false; // JEY TODO: how does this get undone/redone?
+ }
+ else if( m_addTeardrops->GetValue() )
+ {
+ targetParams->m_Enabled = true; // JEY TODO: how does this get undone/redone?
+ teardropManager.AddTeardropsOnTracks( commit, nullptr, true );
+ }
+ }
+
+ // If there are no filters then a force-full-update is equivalent, and will be faster.
+ if( !m_netFilterOpt->GetValue()
+ && !m_netclassFilterOpt->GetValue()
+ && !m_layerFilterOpt->GetValue()
+ && !m_roundPadsFilter->GetValue()
+ && !m_existingFilter->GetValue()
+ && !m_selectedItemsFilter->GetValue() )
+ {
+ commit.Push( _( "Edit Teardrops" ), SKIP_TEARDROPS );
+
+ TEARDROP_MANAGER teardropMgr( m_brd, m_parent->GetToolManager() );
+ teardropMgr.UpdateTeardrops( commit, nullptr, nullptr, true /* forceFullUpdate */ );
+ commit.Push( _( "Edit Teardrops" ), SKIP_TEARDROPS | APPEND_UNDO );
+ }
+ else
+ {
+ commit.Push( _( "Edit Teardrops" ) );
+ }
+
+ // Showing the unfilled, fully cross-hatched teardrops seems to be working fairly well, and
+ // accurate fills can then be manually generated by doing a zone fill.
+ //
+ // But here's the old code which allowed for either "draft" fills or an automatic full zone
+ // fill in case we decide the current situation isn't good enough:
+#if 0
+ if( aFillAfter )
+ {
+ ZONE_FILLER filler( m_board, aCommit );
+
+ if( m_reporter )
+ filler.SetProgressReporter( m_reporter );
+
+ filler.Fill( m_board->Zones() );
+
+ if( aCommit )
+ aCommit->Push( _( "Edit Teardrops" ), APPEND_UNDO );
+ }
+ else
+ {
+ // Fill raw teardrop shapes. This is a rough calculation, just to show a filled
+ // shape on screen without the (potentially large) performance hit of a zone refill
+ int epsilon = pcbIUScale.mmToIU( 0.001 );
+ int allowed_error = pcbIUScale.mmToIU( 0.005 );
+
+ for( ZONE* zone: m_createdTdList )
+ {
+ int half_min_width = zone->GetMinThickness() / 2;
+ int numSegs = GetArcToSegmentCount( half_min_width, allowed_error, FULL_CIRCLE );
+ SHAPE_POLY_SET filledPolys = *zone->Outline();
+
+ filledPolys.Deflate( half_min_width - epsilon, numSegs );
+
+ // Re-inflate after pruning of areas that don't meet minimum-width criteria
+ if( half_min_width - epsilon > epsilon )
+ filledPolys.Inflate( half_min_width - epsilon, numSegs );
+
+ zone->SetFilledPolysList( zone->GetFirstLayer(), filledPolys );
+ }
+ }
+#endif
+
+ return true;
+}
+
+
+int GLOBAL_EDIT_TOOL::EditTeardrops( const TOOL_EVENT& aEvent )
+{
+ PCB_EDIT_FRAME* editFrame = getEditFrame();
+ DIALOG_GLOBAL_EDIT_TEARDROPS dlg( editFrame );
+
+ dlg.ShowQuasiModal(); // QuasiModal required for NET_SELECTOR
+ return 0;
+}
+
diff --git a/pcbnew/dialogs/dialog_global_edit_teardrops_base.cpp b/pcbnew/dialogs/dialog_global_edit_teardrops_base.cpp
new file mode 100644
index 0000000000..2449f07463
--- /dev/null
+++ b/pcbnew/dialogs/dialog_global_edit_teardrops_base.cpp
@@ -0,0 +1,411 @@
+///////////////////////////////////////////////////////////////////////////
+// C++ code generated with wxFormBuilder (version 3.10.1-0-g8feb16b)
+// http://www.wxformbuilder.org/
+//
+// PLEASE DO *NOT* EDIT THIS FILE!
+///////////////////////////////////////////////////////////////////////////
+
+#include "pcb_layer_box_selector.h"
+
+#include "dialog_global_edit_teardrops_base.h"
+
+///////////////////////////////////////////////////////////////////////////
+
+DIALOG_GLOBAL_EDIT_TEARDROPS_BASE::DIALOG_GLOBAL_EDIT_TEARDROPS_BASE( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style ) : DIALOG_SHIM( parent, id, title, pos, size, style )
+{
+ this->SetSizeHints( wxDefaultSize, wxDefaultSize );
+
+ wxBoxSizer* bMainSizer;
+ bMainSizer = new wxBoxSizer( wxVERTICAL );
+
+ wxBoxSizer* bSizerTop;
+ bSizerTop = new wxBoxSizer( wxHORIZONTAL );
+
+ wxStaticBoxSizer* sbScope;
+ sbScope = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Scope") ), wxVERTICAL );
+
+ m_pthPads = new wxCheckBox( sbScope->GetStaticBox(), wxID_ANY, _("PTH pads"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_pthPads->SetValue(true);
+ sbScope->Add( m_pthPads, 0, wxBOTTOM|wxRIGHT|wxLEFT, 5 );
+
+ m_smdPads = new wxCheckBox( sbScope->GetStaticBox(), wxID_ANY, _("SMD pads"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_smdPads->SetValue(true);
+ sbScope->Add( m_smdPads, 0, wxBOTTOM|wxRIGHT|wxLEFT, 5 );
+
+ m_vias = new wxCheckBox( sbScope->GetStaticBox(), wxID_ANY, _("Vias"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_vias->SetValue(true);
+ sbScope->Add( m_vias, 0, wxBOTTOM|wxRIGHT|wxLEFT, 5 );
+
+ m_trackToTrack = new wxCheckBox( sbScope->GetStaticBox(), wxID_ANY, _("Track to track"), wxDefaultPosition, wxDefaultSize, 0 );
+ sbScope->Add( m_trackToTrack, 0, wxALL, 5 );
+
+
+ bSizerTop->Add( sbScope, 1, wxEXPAND|wxTOP|wxRIGHT|wxLEFT, 10 );
+
+ wxStaticBoxSizer* sbFilters;
+ sbFilters = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Filter Items") ), wxVERTICAL );
+
+ wxFlexGridSizer* fgSizer3;
+ fgSizer3 = new wxFlexGridSizer( 0, 2, 4, 0 );
+ fgSizer3->AddGrowableCol( 1 );
+ fgSizer3->AddGrowableRow( 0 );
+ fgSizer3->AddGrowableRow( 1 );
+ fgSizer3->AddGrowableRow( 2 );
+ fgSizer3->AddGrowableRow( 3 );
+ fgSizer3->SetFlexibleDirection( wxBOTH );
+ fgSizer3->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
+
+ m_netFilterOpt = new wxCheckBox( sbFilters->GetStaticBox(), wxID_ANY, _("Filter items by net:"), wxDefaultPosition, wxDefaultSize, 0 );
+ fgSizer3->Add( m_netFilterOpt, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 );
+
+ m_netFilter = new NET_SELECTOR( sbFilters->GetStaticBox(), wxID_ANY, wxDefaultPosition, wxDefaultSize, 0 );
+ fgSizer3->Add( m_netFilter, 1, wxEXPAND|wxRIGHT, 5 );
+
+ m_netclassFilterOpt = new wxCheckBox( sbFilters->GetStaticBox(), wxID_ANY, _("Filter items by net class:"), wxDefaultPosition, wxDefaultSize, 0 );
+ fgSizer3->Add( m_netclassFilterOpt, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 );
+
+ wxArrayString m_netclassFilterChoices;
+ m_netclassFilter = new wxChoice( sbFilters->GetStaticBox(), wxID_ANY, wxDefaultPosition, wxDefaultSize, m_netclassFilterChoices, 0 );
+ m_netclassFilter->SetSelection( 0 );
+ fgSizer3->Add( m_netclassFilter, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND|wxRIGHT, 5 );
+
+
+ fgSizer3->Add( 0, 0, 1, wxEXPAND|wxTOP|wxBOTTOM, 3 );
+
+
+ fgSizer3->Add( 0, 0, 1, wxEXPAND|wxTOP|wxBOTTOM, 3 );
+
+ m_layerFilterOpt = new wxCheckBox( sbFilters->GetStaticBox(), wxID_ANY, _("Filter items by layer:"), wxDefaultPosition, wxDefaultSize, 0 );
+ fgSizer3->Add( m_layerFilterOpt, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 );
+
+ m_layerFilter = new PCB_LAYER_BOX_SELECTOR( sbFilters->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, NULL, 0 );
+ fgSizer3->Add( m_layerFilter, 0, wxEXPAND|wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 );
+
+
+ fgSizer3->Add( 0, 5, 1, wxEXPAND, 5 );
+
+
+ fgSizer3->Add( 0, 0, 1, wxEXPAND, 5 );
+
+
+ sbFilters->Add( fgSizer3, 1, wxEXPAND, 5 );
+
+
+ sbFilters->Add( 0, 5, 0, 0, 5 );
+
+ m_roundPadsFilter = new wxCheckBox( sbFilters->GetStaticBox(), wxID_ANY, _("Round pads only"), wxDefaultPosition, wxDefaultSize, 0 );
+ sbFilters->Add( m_roundPadsFilter, 0, wxRIGHT|wxLEFT, 5 );
+
+ m_existingFilter = new wxCheckBox( sbFilters->GetStaticBox(), wxID_ANY, _("Existing teardrops only"), wxDefaultPosition, wxDefaultSize, 0 );
+ sbFilters->Add( m_existingFilter, 0, wxTOP|wxRIGHT|wxLEFT, 5 );
+
+ m_selectedItemsFilter = new wxCheckBox( sbFilters->GetStaticBox(), wxID_ANY, _("Selected items only"), wxDefaultPosition, wxDefaultSize, 0 );
+ sbFilters->Add( m_selectedItemsFilter, 0, wxALL, 5 );
+
+
+ bSizerTop->Add( sbFilters, 2, wxEXPAND|wxTOP|wxRIGHT|wxLEFT, 10 );
+
+
+ bMainSizer->Add( bSizerTop, 0, wxEXPAND, 5 );
+
+ wxStaticBoxSizer* sbAction;
+ sbAction = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Action") ), wxVERTICAL );
+
+ m_removeTeardrops = new wxRadioButton( sbAction->GetStaticBox(), ID_SPECIFIED_NET_TO_NETCLASS_VALUES, _("Remove teardrops"), wxDefaultPosition, wxDefaultSize, wxRB_GROUP );
+ sbAction->Add( m_removeTeardrops, 0, wxBOTTOM|wxRIGHT, 15 );
+
+ wxBoxSizer* bSizer12;
+ bSizer12 = new wxBoxSizer( wxHORIZONTAL );
+
+ m_addTeardrops = new wxRadioButton( sbAction->GetStaticBox(), ID_SPECIFIED_NET_TO_NETCLASS_VALUES, _("Add teardrops with default values for shape"), wxDefaultPosition, wxDefaultSize, 0 );
+ bSizer12->Add( m_addTeardrops, 1, wxALIGN_CENTER_VERTICAL, 5 );
+
+ m_boardSetupLink = new wxHyperlinkCtrl( sbAction->GetStaticBox(), wxID_ANY, _("Edit default values in Board Setup"), wxT("#teardrops"), wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE );
+ bSizer12->Add( m_boardSetupLink, 1, wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL, 10 );
+
+
+ sbAction->Add( bSizer12, 0, wxEXPAND|wxBOTTOM, 15 );
+
+ m_specifiedValues = new wxRadioButton( sbAction->GetStaticBox(), ID_SPECIFIED_NET_TO_SPECIFIED_VALUES, _("Add teardrops with specified values:"), wxDefaultPosition, wxDefaultSize, 0 );
+ sbAction->Add( m_specifiedValues, 0, wxEXPAND, 5 );
+
+ wxBoxSizer* bSizerSpecifiedValues;
+ bSizerSpecifiedValues = new wxBoxSizer( wxVERTICAL );
+
+ wxBoxSizer* bSizerCols11;
+ bSizerCols11 = new wxBoxSizer( wxHORIZONTAL );
+
+ wxBoxSizer* bSizerLeftCol11;
+ bSizerLeftCol11 = new wxBoxSizer( wxVERTICAL );
+
+ m_cbPreferZoneConnection = new wxCheckBox( sbAction->GetStaticBox(), wxID_ANY, _("Prefer zone connection"), wxDefaultPosition, wxDefaultSize, wxCHK_3STATE|wxCHK_ALLOW_3RD_STATE_FOR_USER );
+ bSizerLeftCol11->Add( m_cbPreferZoneConnection, 0, wxBOTTOM|wxRIGHT, 5 );
+
+ m_cbTeardropsUseNextTrack = new wxCheckBox( sbAction->GetStaticBox(), wxID_ANY, _("Allow teardrops to span 2 track segments"), wxDefaultPosition, wxDefaultSize, wxCHK_3STATE|wxCHK_ALLOW_3RD_STATE_FOR_USER );
+ m_cbTeardropsUseNextTrack->SetToolTip( _("Allows a teardrop to spread over 2 tracks if the first track segment is too short") );
+
+ bSizerLeftCol11->Add( m_cbTeardropsUseNextTrack, 0, wxBOTTOM|wxRIGHT, 5 );
+
+
+ bSizerCols11->Add( bSizerLeftCol11, 1, wxEXPAND|wxTOP, 3 );
+
+
+ bSizerCols11->Add( 25, 0, 0, wxEXPAND, 5 );
+
+ wxBoxSizer* bSizerRightCol11;
+ bSizerRightCol11 = new wxBoxSizer( wxVERTICAL );
+
+ wxBoxSizer* bSizer39;
+ bSizer39 = new wxBoxSizer( wxHORIZONTAL );
+
+ m_stHDRatio = new wxStaticText( sbAction->GetStaticBox(), wxID_ANY, _("Maximum track width:"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_stHDRatio->Wrap( -1 );
+ m_stHDRatio->SetToolTip( _("Max pad/via size to track width ratio to create a teardrop.\n100 always creates a teardrop.") );
+
+ bSizer39->Add( m_stHDRatio, 0, wxALIGN_CENTER_VERTICAL, 5 );
+
+ m_tcHDRatio = new wxTextCtrl( sbAction->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize( -1,-1 ), 0 );
+ m_tcHDRatio->SetToolTip( _("Tracks which are similar in size to the pad or via do not need teardrops.") );
+
+ bSizer39->Add( m_tcHDRatio, 0, wxRIGHT|wxLEFT, 5 );
+
+ m_stHDRatioUnits = new wxStaticText( sbAction->GetStaticBox(), wxID_ANY, _("%"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_stHDRatioUnits->Wrap( -1 );
+ bSizer39->Add( m_stHDRatioUnits, 0, wxRIGHT|wxALIGN_CENTER_VERTICAL, 5 );
+
+
+ bSizerRightCol11->Add( bSizer39, 0, wxEXPAND, 3 );
+
+ m_minTrackWidthHint = new wxStaticText( sbAction->GetStaticBox(), wxID_ANY, _("(as a percentage of pad/via size)"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_minTrackWidthHint->Wrap( -1 );
+ bSizerRightCol11->Add( m_minTrackWidthHint, 0, wxTOP|wxBOTTOM|wxLEFT, 2 );
+
+
+ bSizerCols11->Add( bSizerRightCol11, 1, wxEXPAND|wxLEFT, 10 );
+
+
+ bSizerSpecifiedValues->Add( bSizerCols11, 0, wxEXPAND|wxTOP, 3 );
+
+
+ bSizerSpecifiedValues->Add( 0, 5, 0, wxEXPAND, 5 );
+
+ wxBoxSizer* bSizerShapeColumns;
+ bSizerShapeColumns = new wxBoxSizer( wxHORIZONTAL );
+
+ wxBoxSizer* bSizerLeftCol;
+ bSizerLeftCol = new wxBoxSizer( wxVERTICAL );
+
+ m_bitmapTeardrop = new wxStaticBitmap( sbAction->GetStaticBox(), wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 );
+ bSizerLeftCol->Add( m_bitmapTeardrop, 1, wxALIGN_CENTER_HORIZONTAL|wxRIGHT|wxLEFT, 5 );
+
+ wxBoxSizer* bSizer41;
+ bSizer41 = new wxBoxSizer( wxHORIZONTAL );
+
+ m_staticText15 = new wxStaticText( sbAction->GetStaticBox(), wxID_ANY, _("Edges:"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticText15->Wrap( -1 );
+ bSizer41->Add( m_staticText15, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxRIGHT|wxLEFT, 5 );
+
+ m_rbStraightLines = new wxRadioButton( sbAction->GetStaticBox(), wxID_ANY, _("Straight lines"), wxDefaultPosition, wxDefaultSize, wxRB_GROUP );
+ bSizer41->Add( m_rbStraightLines, 1, wxALIGN_CENTER_VERTICAL|wxTOP|wxRIGHT|wxLEFT, 5 );
+
+ m_rbCurved = new wxRadioButton( sbAction->GetStaticBox(), wxID_ANY, _("Curved"), wxDefaultPosition, wxDefaultSize, wxRB_SINGLE );
+ bSizer41->Add( m_rbCurved, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxRIGHT|wxLEFT, 5 );
+
+
+ bSizerLeftCol->Add( bSizer41, 0, wxEXPAND|wxBOTTOM, 5 );
+
+
+ bSizerShapeColumns->Add( bSizerLeftCol, 1, wxEXPAND|wxRIGHT, 10 );
+
+
+ bSizerShapeColumns->Add( 25, 0, 0, wxEXPAND, 5 );
+
+ wxFlexGridSizer* fgSizerRightCol;
+ fgSizerRightCol = new wxFlexGridSizer( 0, 3, 2, 0 );
+ fgSizerRightCol->AddGrowableCol( 1 );
+ fgSizerRightCol->SetFlexibleDirection( wxBOTH );
+ fgSizerRightCol->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
+
+ m_stLenPercentLabel = new wxStaticText( sbAction->GetStaticBox(), wxID_ANY, _("Best length:"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_stLenPercentLabel->Wrap( -1 );
+ fgSizerRightCol->Add( m_stLenPercentLabel, 0, wxALIGN_CENTER_VERTICAL, 5 );
+
+ m_tcLenPercent = new wxTextCtrl( sbAction->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
+ fgSizerRightCol->Add( m_tcLenPercent, 0, wxEXPAND|wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL, 5 );
+
+ m_stLenPercentUnits = new wxStaticText( sbAction->GetStaticBox(), wxID_ANY, _("%"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_stLenPercentUnits->Wrap( -1 );
+ fgSizerRightCol->Add( m_stLenPercentUnits, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 );
+
+ m_stMaxLen = new wxStaticText( sbAction->GetStaticBox(), wxID_ANY, _("Max length:"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_stMaxLen->Wrap( -1 );
+ fgSizerRightCol->Add( m_stMaxLen, 0, wxALIGN_CENTER_VERTICAL, 5 );
+
+ m_tcTdMaxLen = new wxTextCtrl( sbAction->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
+ fgSizerRightCol->Add( m_tcTdMaxLen, 0, wxEXPAND|wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 );
+
+ m_stMaxLenUnits = new wxStaticText( sbAction->GetStaticBox(), wxID_ANY, _("mm"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_stMaxLenUnits->Wrap( -1 );
+ fgSizerRightCol->Add( m_stMaxLenUnits, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 );
+
+
+ fgSizerRightCol->Add( 0, 5, 1, wxEXPAND, 5 );
+
+
+ fgSizerRightCol->Add( 0, 0, 1, wxEXPAND, 5 );
+
+
+ fgSizerRightCol->Add( 0, 0, 1, wxEXPAND, 5 );
+
+ m_stHeightPercentLabel = new wxStaticText( sbAction->GetStaticBox(), wxID_ANY, _("Best height:"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_stHeightPercentLabel->Wrap( -1 );
+ fgSizerRightCol->Add( m_stHeightPercentLabel, 0, wxALIGN_CENTER_VERTICAL, 10 );
+
+ m_tcHeightPercent = new wxTextCtrl( sbAction->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
+ fgSizerRightCol->Add( m_tcHeightPercent, 0, wxEXPAND|wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL, 5 );
+
+ m_stHeightPercentUnits = new wxStaticText( sbAction->GetStaticBox(), wxID_ANY, _("%"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_stHeightPercentUnits->Wrap( -1 );
+ fgSizerRightCol->Add( m_stHeightPercentUnits, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 );
+
+ m_stMaxHeight = new wxStaticText( sbAction->GetStaticBox(), wxID_ANY, _("Max height:"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_stMaxHeight->Wrap( -1 );
+ fgSizerRightCol->Add( m_stMaxHeight, 0, wxALIGN_CENTER_VERTICAL, 10 );
+
+ m_tcMaxHeight = new wxTextCtrl( sbAction->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
+ fgSizerRightCol->Add( m_tcMaxHeight, 0, wxEXPAND|wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 );
+
+ m_stMaxHeightUnits = new wxStaticText( sbAction->GetStaticBox(), wxID_ANY, _("mm"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_stMaxHeightUnits->Wrap( -1 );
+ fgSizerRightCol->Add( m_stMaxHeightUnits, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 );
+
+
+ fgSizerRightCol->Add( 0, 0, 1, wxEXPAND, 5 );
+
+
+ fgSizerRightCol->Add( 0, 0, 1, wxEXPAND, 5 );
+
+
+ fgSizerRightCol->Add( 0, 5, 1, wxEXPAND, 5 );
+
+ m_curvePointsLabel = new wxStaticText( sbAction->GetStaticBox(), wxID_ANY, _("Curve points:"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_curvePointsLabel->Wrap( -1 );
+ fgSizerRightCol->Add( m_curvePointsLabel, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM, 5 );
+
+ m_curvePointsCtrl = new wxTextCtrl( sbAction->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize( -1,-1 ), 0 );
+ fgSizerRightCol->Add( m_curvePointsCtrl, 0, wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL, 5 );
+
+
+ bSizerShapeColumns->Add( fgSizerRightCol, 1, wxEXPAND|wxTOP|wxLEFT, 10 );
+
+
+ bSizerSpecifiedValues->Add( bSizerShapeColumns, 1, wxEXPAND|wxBOTTOM, 3 );
+
+
+ sbAction->Add( bSizerSpecifiedValues, 0, wxEXPAND|wxLEFT, 25 );
+
+
+ bMainSizer->Add( sbAction, 1, wxEXPAND|wxTOP|wxRIGHT|wxLEFT, 10 );
+
+ m_sdbSizer = new wxStdDialogButtonSizer();
+ m_sdbSizerOK = new wxButton( this, wxID_OK );
+ m_sdbSizer->AddButton( m_sdbSizerOK );
+ m_sdbSizerCancel = new wxButton( this, wxID_CANCEL );
+ m_sdbSizer->AddButton( m_sdbSizerCancel );
+ m_sdbSizer->Realize();
+
+ bMainSizer->Add( m_sdbSizer, 0, wxEXPAND|wxALL, 5 );
+
+
+ this->SetSizer( bMainSizer );
+ this->Layout();
+ bMainSizer->Fit( this );
+
+ // Connect Events
+ m_trackToTrack->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( DIALOG_GLOBAL_EDIT_TEARDROPS_BASE::onTrackToTrack ), NULL, this );
+ m_netFilterOpt->Connect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( DIALOG_GLOBAL_EDIT_TEARDROPS_BASE::onFilterUpdateUi ), NULL, this );
+ m_netFilter->Connect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( DIALOG_GLOBAL_EDIT_TEARDROPS_BASE::onFilterUpdateUi ), NULL, this );
+ m_netclassFilterOpt->Connect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( DIALOG_GLOBAL_EDIT_TEARDROPS_BASE::onFilterUpdateUi ), NULL, this );
+ m_netclassFilter->Connect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( DIALOG_GLOBAL_EDIT_TEARDROPS_BASE::OnNetclassFilterSelect ), NULL, this );
+ m_netclassFilter->Connect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( DIALOG_GLOBAL_EDIT_TEARDROPS_BASE::onFilterUpdateUi ), NULL, this );
+ m_layerFilterOpt->Connect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( DIALOG_GLOBAL_EDIT_TEARDROPS_BASE::onFilterUpdateUi ), NULL, this );
+ m_layerFilter->Connect( wxEVT_COMMAND_COMBOBOX_SELECTED, wxCommandEventHandler( DIALOG_GLOBAL_EDIT_TEARDROPS_BASE::OnLayerFilterSelect ), NULL, this );
+ m_layerFilter->Connect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( DIALOG_GLOBAL_EDIT_TEARDROPS_BASE::onFilterUpdateUi ), NULL, this );
+ m_roundPadsFilter->Connect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( DIALOG_GLOBAL_EDIT_TEARDROPS_BASE::onFilterUpdateUi ), NULL, this );
+ m_existingFilter->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( DIALOG_GLOBAL_EDIT_TEARDROPS_BASE::OnExistingFilterSelect ), NULL, this );
+ m_existingFilter->Connect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( DIALOG_GLOBAL_EDIT_TEARDROPS_BASE::onFilterUpdateUi ), NULL, this );
+ m_selectedItemsFilter->Connect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( DIALOG_GLOBAL_EDIT_TEARDROPS_BASE::onFilterUpdateUi ), NULL, this );
+ m_boardSetupLink->Connect( wxEVT_COMMAND_HYPERLINK, wxHyperlinkEventHandler( DIALOG_GLOBAL_EDIT_TEARDROPS_BASE::onShowBoardSetup ), NULL, this );
+ m_cbPreferZoneConnection->Connect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( DIALOG_GLOBAL_EDIT_TEARDROPS_BASE::onSpecifiedValuesUpdateUi ), NULL, this );
+ m_cbTeardropsUseNextTrack->Connect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( DIALOG_GLOBAL_EDIT_TEARDROPS_BASE::onSpecifiedValuesUpdateUi ), NULL, this );
+ m_stHDRatio->Connect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( DIALOG_GLOBAL_EDIT_TEARDROPS_BASE::onSpecifiedValuesUpdateUi ), NULL, this );
+ m_tcHDRatio->Connect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( DIALOG_GLOBAL_EDIT_TEARDROPS_BASE::onSpecifiedValuesUpdateUi ), NULL, this );
+ m_stHDRatioUnits->Connect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( DIALOG_GLOBAL_EDIT_TEARDROPS_BASE::onSpecifiedValuesUpdateUi ), NULL, this );
+ m_minTrackWidthHint->Connect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( DIALOG_GLOBAL_EDIT_TEARDROPS_BASE::onSpecifiedValuesUpdateUi ), NULL, this );
+ m_bitmapTeardrop->Connect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( DIALOG_GLOBAL_EDIT_TEARDROPS_BASE::onSpecifiedValuesUpdateUi ), NULL, this );
+ m_staticText15->Connect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( DIALOG_GLOBAL_EDIT_TEARDROPS_BASE::onSpecifiedValuesUpdateUi ), NULL, this );
+ m_rbStraightLines->Connect( wxEVT_LEFT_DOWN, wxMouseEventHandler( DIALOG_GLOBAL_EDIT_TEARDROPS_BASE::onStraightLines ), NULL, this );
+ m_rbStraightLines->Connect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( DIALOG_GLOBAL_EDIT_TEARDROPS_BASE::onSpecifiedValuesUpdateUi ), NULL, this );
+ m_rbCurved->Connect( wxEVT_LEFT_DOWN, wxMouseEventHandler( DIALOG_GLOBAL_EDIT_TEARDROPS_BASE::onCurvedLines ), NULL, this );
+ m_rbCurved->Connect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( DIALOG_GLOBAL_EDIT_TEARDROPS_BASE::onSpecifiedValuesUpdateUi ), NULL, this );
+ m_stLenPercentLabel->Connect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( DIALOG_GLOBAL_EDIT_TEARDROPS_BASE::onSpecifiedValuesUpdateUi ), NULL, this );
+ m_tcLenPercent->Connect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( DIALOG_GLOBAL_EDIT_TEARDROPS_BASE::onSpecifiedValuesUpdateUi ), NULL, this );
+ m_stLenPercentUnits->Connect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( DIALOG_GLOBAL_EDIT_TEARDROPS_BASE::onSpecifiedValuesUpdateUi ), NULL, this );
+ m_stMaxLen->Connect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( DIALOG_GLOBAL_EDIT_TEARDROPS_BASE::onSpecifiedValuesUpdateUi ), NULL, this );
+ m_tcTdMaxLen->Connect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( DIALOG_GLOBAL_EDIT_TEARDROPS_BASE::onSpecifiedValuesUpdateUi ), NULL, this );
+ m_stMaxLenUnits->Connect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( DIALOG_GLOBAL_EDIT_TEARDROPS_BASE::onSpecifiedValuesUpdateUi ), NULL, this );
+ m_stHeightPercentLabel->Connect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( DIALOG_GLOBAL_EDIT_TEARDROPS_BASE::onSpecifiedValuesUpdateUi ), NULL, this );
+ m_tcHeightPercent->Connect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( DIALOG_GLOBAL_EDIT_TEARDROPS_BASE::onSpecifiedValuesUpdateUi ), NULL, this );
+ m_stHeightPercentUnits->Connect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( DIALOG_GLOBAL_EDIT_TEARDROPS_BASE::onSpecifiedValuesUpdateUi ), NULL, this );
+ m_stMaxHeight->Connect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( DIALOG_GLOBAL_EDIT_TEARDROPS_BASE::onSpecifiedValuesUpdateUi ), NULL, this );
+ m_tcMaxHeight->Connect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( DIALOG_GLOBAL_EDIT_TEARDROPS_BASE::onSpecifiedValuesUpdateUi ), NULL, this );
+ m_stMaxHeightUnits->Connect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( DIALOG_GLOBAL_EDIT_TEARDROPS_BASE::onSpecifiedValuesUpdateUi ), NULL, this );
+ m_curvePointsLabel->Connect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( DIALOG_GLOBAL_EDIT_TEARDROPS_BASE::onCurvedEdgesUpdateUi ), NULL, this );
+ m_curvePointsCtrl->Connect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( DIALOG_GLOBAL_EDIT_TEARDROPS_BASE::onCurvedEdgesUpdateUi ), NULL, this );
+}
+
+DIALOG_GLOBAL_EDIT_TEARDROPS_BASE::~DIALOG_GLOBAL_EDIT_TEARDROPS_BASE()
+{
+ // Disconnect Events
+ m_trackToTrack->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( DIALOG_GLOBAL_EDIT_TEARDROPS_BASE::onTrackToTrack ), NULL, this );
+ m_netFilterOpt->Disconnect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( DIALOG_GLOBAL_EDIT_TEARDROPS_BASE::onFilterUpdateUi ), NULL, this );
+ m_netFilter->Disconnect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( DIALOG_GLOBAL_EDIT_TEARDROPS_BASE::onFilterUpdateUi ), NULL, this );
+ m_netclassFilterOpt->Disconnect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( DIALOG_GLOBAL_EDIT_TEARDROPS_BASE::onFilterUpdateUi ), NULL, this );
+ m_netclassFilter->Disconnect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( DIALOG_GLOBAL_EDIT_TEARDROPS_BASE::OnNetclassFilterSelect ), NULL, this );
+ m_netclassFilter->Disconnect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( DIALOG_GLOBAL_EDIT_TEARDROPS_BASE::onFilterUpdateUi ), NULL, this );
+ m_layerFilterOpt->Disconnect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( DIALOG_GLOBAL_EDIT_TEARDROPS_BASE::onFilterUpdateUi ), NULL, this );
+ m_layerFilter->Disconnect( wxEVT_COMMAND_COMBOBOX_SELECTED, wxCommandEventHandler( DIALOG_GLOBAL_EDIT_TEARDROPS_BASE::OnLayerFilterSelect ), NULL, this );
+ m_layerFilter->Disconnect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( DIALOG_GLOBAL_EDIT_TEARDROPS_BASE::onFilterUpdateUi ), NULL, this );
+ m_roundPadsFilter->Disconnect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( DIALOG_GLOBAL_EDIT_TEARDROPS_BASE::onFilterUpdateUi ), NULL, this );
+ m_existingFilter->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( DIALOG_GLOBAL_EDIT_TEARDROPS_BASE::OnExistingFilterSelect ), NULL, this );
+ m_existingFilter->Disconnect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( DIALOG_GLOBAL_EDIT_TEARDROPS_BASE::onFilterUpdateUi ), NULL, this );
+ m_selectedItemsFilter->Disconnect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( DIALOG_GLOBAL_EDIT_TEARDROPS_BASE::onFilterUpdateUi ), NULL, this );
+ m_boardSetupLink->Disconnect( wxEVT_COMMAND_HYPERLINK, wxHyperlinkEventHandler( DIALOG_GLOBAL_EDIT_TEARDROPS_BASE::onShowBoardSetup ), NULL, this );
+ m_cbPreferZoneConnection->Disconnect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( DIALOG_GLOBAL_EDIT_TEARDROPS_BASE::onSpecifiedValuesUpdateUi ), NULL, this );
+ m_cbTeardropsUseNextTrack->Disconnect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( DIALOG_GLOBAL_EDIT_TEARDROPS_BASE::onSpecifiedValuesUpdateUi ), NULL, this );
+ m_stHDRatio->Disconnect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( DIALOG_GLOBAL_EDIT_TEARDROPS_BASE::onSpecifiedValuesUpdateUi ), NULL, this );
+ m_tcHDRatio->Disconnect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( DIALOG_GLOBAL_EDIT_TEARDROPS_BASE::onSpecifiedValuesUpdateUi ), NULL, this );
+ m_stHDRatioUnits->Disconnect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( DIALOG_GLOBAL_EDIT_TEARDROPS_BASE::onSpecifiedValuesUpdateUi ), NULL, this );
+ m_minTrackWidthHint->Disconnect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( DIALOG_GLOBAL_EDIT_TEARDROPS_BASE::onSpecifiedValuesUpdateUi ), NULL, this );
+ m_bitmapTeardrop->Disconnect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( DIALOG_GLOBAL_EDIT_TEARDROPS_BASE::onSpecifiedValuesUpdateUi ), NULL, this );
+ m_staticText15->Disconnect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( DIALOG_GLOBAL_EDIT_TEARDROPS_BASE::onSpecifiedValuesUpdateUi ), NULL, this );
+ m_rbStraightLines->Disconnect( wxEVT_LEFT_DOWN, wxMouseEventHandler( DIALOG_GLOBAL_EDIT_TEARDROPS_BASE::onStraightLines ), NULL, this );
+ m_rbStraightLines->Disconnect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( DIALOG_GLOBAL_EDIT_TEARDROPS_BASE::onSpecifiedValuesUpdateUi ), NULL, this );
+ m_rbCurved->Disconnect( wxEVT_LEFT_DOWN, wxMouseEventHandler( DIALOG_GLOBAL_EDIT_TEARDROPS_BASE::onCurvedLines ), NULL, this );
+ m_rbCurved->Disconnect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( DIALOG_GLOBAL_EDIT_TEARDROPS_BASE::onSpecifiedValuesUpdateUi ), NULL, this );
+ m_stLenPercentLabel->Disconnect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( DIALOG_GLOBAL_EDIT_TEARDROPS_BASE::onSpecifiedValuesUpdateUi ), NULL, this );
+ m_tcLenPercent->Disconnect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( DIALOG_GLOBAL_EDIT_TEARDROPS_BASE::onSpecifiedValuesUpdateUi ), NULL, this );
+ m_stLenPercentUnits->Disconnect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( DIALOG_GLOBAL_EDIT_TEARDROPS_BASE::onSpecifiedValuesUpdateUi ), NULL, this );
+ m_stMaxLen->Disconnect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( DIALOG_GLOBAL_EDIT_TEARDROPS_BASE::onSpecifiedValuesUpdateUi ), NULL, this );
+ m_tcTdMaxLen->Disconnect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( DIALOG_GLOBAL_EDIT_TEARDROPS_BASE::onSpecifiedValuesUpdateUi ), NULL, this );
+ m_stMaxLenUnits->Disconnect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( DIALOG_GLOBAL_EDIT_TEARDROPS_BASE::onSpecifiedValuesUpdateUi ), NULL, this );
+ m_stHeightPercentLabel->Disconnect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( DIALOG_GLOBAL_EDIT_TEARDROPS_BASE::onSpecifiedValuesUpdateUi ), NULL, this );
+ m_tcHeightPercent->Disconnect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( DIALOG_GLOBAL_EDIT_TEARDROPS_BASE::onSpecifiedValuesUpdateUi ), NULL, this );
+ m_stHeightPercentUnits->Disconnect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( DIALOG_GLOBAL_EDIT_TEARDROPS_BASE::onSpecifiedValuesUpdateUi ), NULL, this );
+ m_stMaxHeight->Disconnect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( DIALOG_GLOBAL_EDIT_TEARDROPS_BASE::onSpecifiedValuesUpdateUi ), NULL, this );
+ m_tcMaxHeight->Disconnect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( DIALOG_GLOBAL_EDIT_TEARDROPS_BASE::onSpecifiedValuesUpdateUi ), NULL, this );
+ m_stMaxHeightUnits->Disconnect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( DIALOG_GLOBAL_EDIT_TEARDROPS_BASE::onSpecifiedValuesUpdateUi ), NULL, this );
+ m_curvePointsLabel->Disconnect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( DIALOG_GLOBAL_EDIT_TEARDROPS_BASE::onCurvedEdgesUpdateUi ), NULL, this );
+ m_curvePointsCtrl->Disconnect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( DIALOG_GLOBAL_EDIT_TEARDROPS_BASE::onCurvedEdgesUpdateUi ), NULL, this );
+
+}
diff --git a/pcbnew/dialogs/dialog_global_edit_teardrops_base.fbp b/pcbnew/dialogs/dialog_global_edit_teardrops_base.fbp
new file mode 100644
index 0000000000..691afccdd4
--- /dev/null
+++ b/pcbnew/dialogs/dialog_global_edit_teardrops_base.fbp
@@ -0,0 +1,3030 @@
+
+
+
+
+
diff --git a/pcbnew/dialogs/dialog_global_edit_teardrops_base.h b/pcbnew/dialogs/dialog_global_edit_teardrops_base.h
new file mode 100644
index 0000000000..5c7b445ea2
--- /dev/null
+++ b/pcbnew/dialogs/dialog_global_edit_teardrops_base.h
@@ -0,0 +1,116 @@
+///////////////////////////////////////////////////////////////////////////
+// C++ code generated with wxFormBuilder (version 3.10.1-0-g8feb16b)
+// http://www.wxformbuilder.org/
+//
+// PLEASE DO *NOT* EDIT THIS FILE!
+///////////////////////////////////////////////////////////////////////////
+
+#pragma once
+
+#include
+#include
+#include
+class PCB_LAYER_BOX_SELECTOR;
+
+#include "dialog_shim.h"
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+
+///////////////////////////////////////////////////////////////////////////
+
+#define ID_SPECIFIED_NET_TO_NETCLASS_VALUES 1000
+#define ID_SPECIFIED_NET_TO_SPECIFIED_VALUES 1001
+
+///////////////////////////////////////////////////////////////////////////////
+/// Class DIALOG_GLOBAL_EDIT_TEARDROPS_BASE
+///////////////////////////////////////////////////////////////////////////////
+class DIALOG_GLOBAL_EDIT_TEARDROPS_BASE : public DIALOG_SHIM
+{
+ private:
+
+ protected:
+ wxCheckBox* m_pthPads;
+ wxCheckBox* m_smdPads;
+ wxCheckBox* m_vias;
+ wxCheckBox* m_trackToTrack;
+ wxCheckBox* m_netFilterOpt;
+ NET_SELECTOR* m_netFilter;
+ wxCheckBox* m_netclassFilterOpt;
+ wxChoice* m_netclassFilter;
+ wxCheckBox* m_layerFilterOpt;
+ PCB_LAYER_BOX_SELECTOR* m_layerFilter;
+ wxCheckBox* m_roundPadsFilter;
+ wxCheckBox* m_existingFilter;
+ wxCheckBox* m_selectedItemsFilter;
+ wxRadioButton* m_removeTeardrops;
+ wxRadioButton* m_addTeardrops;
+ wxHyperlinkCtrl* m_boardSetupLink;
+ wxRadioButton* m_specifiedValues;
+ wxCheckBox* m_cbPreferZoneConnection;
+ wxCheckBox* m_cbTeardropsUseNextTrack;
+ wxStaticText* m_stHDRatio;
+ wxTextCtrl* m_tcHDRatio;
+ wxStaticText* m_stHDRatioUnits;
+ wxStaticText* m_minTrackWidthHint;
+ wxStaticBitmap* m_bitmapTeardrop;
+ wxStaticText* m_staticText15;
+ wxRadioButton* m_rbStraightLines;
+ wxRadioButton* m_rbCurved;
+ wxStaticText* m_stLenPercentLabel;
+ wxTextCtrl* m_tcLenPercent;
+ wxStaticText* m_stLenPercentUnits;
+ wxStaticText* m_stMaxLen;
+ wxTextCtrl* m_tcTdMaxLen;
+ wxStaticText* m_stMaxLenUnits;
+ wxStaticText* m_stHeightPercentLabel;
+ wxTextCtrl* m_tcHeightPercent;
+ wxStaticText* m_stHeightPercentUnits;
+ wxStaticText* m_stMaxHeight;
+ wxTextCtrl* m_tcMaxHeight;
+ wxStaticText* m_stMaxHeightUnits;
+ wxStaticText* m_curvePointsLabel;
+ wxTextCtrl* m_curvePointsCtrl;
+ wxStdDialogButtonSizer* m_sdbSizer;
+ wxButton* m_sdbSizerOK;
+ wxButton* m_sdbSizerCancel;
+
+ // Virtual event handlers, override them in your derived class
+ virtual void onTrackToTrack( wxCommandEvent& event ) { event.Skip(); }
+ virtual void onFilterUpdateUi( wxUpdateUIEvent& event ) { event.Skip(); }
+ virtual void OnNetclassFilterSelect( wxCommandEvent& event ) { event.Skip(); }
+ virtual void OnLayerFilterSelect( wxCommandEvent& event ) { event.Skip(); }
+ virtual void OnExistingFilterSelect( wxCommandEvent& event ) { event.Skip(); }
+ virtual void onShowBoardSetup( wxHyperlinkEvent& event ) { event.Skip(); }
+ virtual void onSpecifiedValuesUpdateUi( wxUpdateUIEvent& event ) { event.Skip(); }
+ virtual void onStraightLines( wxMouseEvent& event ) { event.Skip(); }
+ virtual void onCurvedLines( wxMouseEvent& event ) { event.Skip(); }
+ virtual void onCurvedEdgesUpdateUi( wxUpdateUIEvent& event ) { event.Skip(); }
+
+
+ public:
+
+ DIALOG_GLOBAL_EDIT_TEARDROPS_BASE( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Set Teardrops"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( -1,-1 ), long style = wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER );
+
+ ~DIALOG_GLOBAL_EDIT_TEARDROPS_BASE();
+
+};
+
diff --git a/pcbnew/dialogs/dialog_global_edit_text_and_graphics_base.cpp b/pcbnew/dialogs/dialog_global_edit_text_and_graphics_base.cpp
index 99c263625b..18c1e393ac 100644
--- a/pcbnew/dialogs/dialog_global_edit_text_and_graphics_base.cpp
+++ b/pcbnew/dialogs/dialog_global_edit_text_and_graphics_base.cpp
@@ -88,7 +88,7 @@ DIALOG_GLOBAL_EDIT_TEXT_AND_GRAPHICS_BASE::DIALOG_GLOBAL_EDIT_TEXT_AND_GRAPHICS_
m_footprintFilter = new wxTextCtrl( sbFilters->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
fgSizer2->Add( m_footprintFilter, 0, wxBOTTOM|wxEXPAND|wxLEFT, 5 );
- m_selectedItemsFilter = new wxCheckBox( sbFilters->GetStaticBox(), wxID_ANY, _("Only include selected items"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_selectedItemsFilter = new wxCheckBox( sbFilters->GetStaticBox(), wxID_ANY, _("Selected items only"), wxDefaultPosition, wxDefaultSize, 0 );
fgSizer2->Add( m_selectedItemsFilter, 0, wxALL, 5 );
diff --git a/pcbnew/dialogs/dialog_global_edit_text_and_graphics_base.fbp b/pcbnew/dialogs/dialog_global_edit_text_and_graphics_base.fbp
index 1bc85480ce..bb184ee205 100644
--- a/pcbnew/dialogs/dialog_global_edit_text_and_graphics_base.fbp
+++ b/pcbnew/dialogs/dialog_global_edit_text_and_graphics_base.fbp
@@ -1077,7 +1077,7 @@
0
0
wxID_ANY
- Only include selected items
+ Selected items only
0
diff --git a/pcbnew/dialogs/dialog_global_edit_tracks_and_vias.cpp b/pcbnew/dialogs/dialog_global_edit_tracks_and_vias.cpp
index 6eeb12ce60..0c8fc04576 100644
--- a/pcbnew/dialogs/dialog_global_edit_tracks_and_vias.cpp
+++ b/pcbnew/dialogs/dialog_global_edit_tracks_and_vias.cpp
@@ -180,9 +180,9 @@ DIALOG_GLOBAL_EDIT_TRACKS_AND_VIAS::~DIALOG_GLOBAL_EDIT_TRACKS_AND_VIAS()
g_filterByLayer = m_layerFilterOpt->GetValue();
g_layerFilter = m_layerFilter->GetLayerSelection();
g_filterByTrackWidth = m_filterByTrackWidth->GetValue();
- g_trackWidthFilter = m_trackWidthFilter.GetValue();
+ g_trackWidthFilter = m_trackWidthFilter.GetIntValue();
g_filterByViaSize = m_filterByViaSize->GetValue();
- g_viaSizeFilter = m_viaSizeFilter.GetValue();
+ g_viaSizeFilter = m_viaSizeFilter.GetIntValue();
g_filterSelected = m_selectedItemsFilter->GetValue();
m_netFilter->Disconnect( NET_SELECTED,
diff --git a/pcbnew/dialogs/dialog_global_edit_tracks_and_vias_base.cpp b/pcbnew/dialogs/dialog_global_edit_tracks_and_vias_base.cpp
index 2dad9be7c6..559bfefc99 100644
--- a/pcbnew/dialogs/dialog_global_edit_tracks_and_vias_base.cpp
+++ b/pcbnew/dialogs/dialog_global_edit_tracks_and_vias_base.cpp
@@ -118,7 +118,7 @@ DIALOG_GLOBAL_EDIT_TRACKS_AND_VIAS_BASE::DIALOG_GLOBAL_EDIT_TRACKS_AND_VIAS_BASE
sbFilters->Add( 0, 5, 0, 0, 5 );
- m_selectedItemsFilter = new wxCheckBox( sbFilters->GetStaticBox(), wxID_ANY, _("Only include selected items"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_selectedItemsFilter = new wxCheckBox( sbFilters->GetStaticBox(), wxID_ANY, _("Selected items only"), wxDefaultPosition, wxDefaultSize, 0 );
sbFilters->Add( m_selectedItemsFilter, 0, wxALL, 5 );
diff --git a/pcbnew/dialogs/dialog_global_edit_tracks_and_vias_base.fbp b/pcbnew/dialogs/dialog_global_edit_tracks_and_vias_base.fbp
index 129c32d8a3..b7ed364bcc 100644
--- a/pcbnew/dialogs/dialog_global_edit_tracks_and_vias_base.fbp
+++ b/pcbnew/dialogs/dialog_global_edit_tracks_and_vias_base.fbp
@@ -1112,7 +1112,7 @@
0
0
wxID_ANY
- Only include selected items
+ Selected items only
0
diff --git a/pcbnew/dialogs/dialog_import_settings_base.cpp b/pcbnew/dialogs/dialog_import_settings_base.cpp
index 6cc2a87860..2ace55052b 100644
--- a/pcbnew/dialogs/dialog_import_settings_base.cpp
+++ b/pcbnew/dialogs/dialog_import_settings_base.cpp
@@ -66,6 +66,9 @@ DIALOG_IMPORT_SETTINGS_BASE::DIALOG_IMPORT_SETTINGS_BASE( wxWindow* parent, wxWi
m_TracksAndViasOpt = new wxCheckBox( this, wxID_ANY, _("Predefined track && via dimensions"), wxDefaultPosition, wxDefaultSize, 0 );
bLeftCol->Add( m_TracksAndViasOpt, 0, wxBOTTOM|wxRIGHT|wxLEFT, 5 );
+ m_TeardropsOpt = new wxCheckBox( this, wxID_ANY, _("Teardrop defaults"), wxDefaultPosition, wxDefaultSize, 0 );
+ bLeftCol->Add( m_TeardropsOpt, 0, wxBOTTOM|wxRIGHT|wxLEFT, 5 );
+
m_NetclassesOpt = new wxCheckBox( this, wxID_ANY, _("Net classes"), wxDefaultPosition, wxDefaultSize, 0 );
bLeftCol->Add( m_NetclassesOpt, 0, wxBOTTOM|wxRIGHT|wxLEFT, 5 );
diff --git a/pcbnew/dialogs/dialog_import_settings_base.fbp b/pcbnew/dialogs/dialog_import_settings_base.fbp
index 378b5bb28c..208f1880c7 100644
--- a/pcbnew/dialogs/dialog_import_settings_base.fbp
+++ b/pcbnew/dialogs/dialog_import_settings_base.fbp
@@ -739,6 +739,70 @@
OnCheckboxClicked
+
+ 5
+ wxBOTTOM|wxRIGHT|wxLEFT
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ Teardrop defaults
+
+ 0
+
+
+ 0
+
+ 1
+ m_TeardropsOpt
+ 1
+
+
+ public
+ 1
+
+ Resizable
+ 1
+
+
+ ; ; forward_declare
+ 0
+
+
+ wxFILTER_NONE
+ wxDefaultValidator
+
+
+
+
+
+
5
wxBOTTOM|wxRIGHT|wxLEFT
diff --git a/pcbnew/dialogs/dialog_import_settings_base.h b/pcbnew/dialogs/dialog_import_settings_base.h
index 326b193837..49316063c2 100644
--- a/pcbnew/dialogs/dialog_import_settings_base.h
+++ b/pcbnew/dialogs/dialog_import_settings_base.h
@@ -61,6 +61,7 @@ class DIALOG_IMPORT_SETTINGS_BASE : public DIALOG_SHIM
wxCheckBox* m_FormattingOpt;
wxCheckBox* m_ConstraintsOpt;
wxCheckBox* m_TracksAndViasOpt;
+ wxCheckBox* m_TeardropsOpt;
wxCheckBox* m_NetclassesOpt;
wxCheckBox* m_SeveritiesOpt;
diff --git a/pcbnew/dialogs/dialog_pad_basicshapes_properties.cpp b/pcbnew/dialogs/dialog_pad_basicshapes_properties.cpp
index 2314ef7514..7afaf0c86c 100644
--- a/pcbnew/dialogs/dialog_pad_basicshapes_properties.cpp
+++ b/pcbnew/dialogs/dialog_pad_basicshapes_properties.cpp
@@ -201,7 +201,7 @@ bool DIALOG_PAD_PRIMITIVES_PROPERTIES::TransferDataFromWindow()
// Transfer data out of the GUI.
STROKE_PARAMS stroke = m_shape->GetStroke();
- stroke.SetWidth( m_thickness.GetValue() );
+ stroke.SetWidth( m_thickness.GetIntValue() );
m_shape->SetStroke( stroke );
m_shape->SetFilled( m_filledCtrl->GetValue() );
@@ -210,26 +210,26 @@ bool DIALOG_PAD_PRIMITIVES_PROPERTIES::TransferDataFromWindow()
{
case SHAPE_T::SEGMENT:
case SHAPE_T::RECT:
- m_shape->SetStart( VECTOR2I( m_startX.GetValue(), m_startY.GetValue() ) );
- m_shape->SetEnd( VECTOR2I( m_endX.GetValue(), m_endY.GetValue() ) );
+ m_shape->SetStart( VECTOR2I( m_startX.GetIntValue(), m_startY.GetIntValue() ) );
+ m_shape->SetEnd( VECTOR2I( m_endX.GetIntValue(), m_endY.GetIntValue() ) );
break;
case SHAPE_T::BEZIER:
- m_shape->SetStart( VECTOR2I( m_startX.GetValue(), m_startY.GetValue() ) );
- m_shape->SetEnd( VECTOR2I( m_endX.GetValue(), m_endY.GetValue() ) );
- m_shape->SetBezierC1( VECTOR2I( m_ctrl1X.GetValue(), m_ctrl1Y.GetValue()));
- m_shape->SetBezierC2( VECTOR2I( m_ctrl2X.GetValue(), m_ctrl2Y.GetValue()));
+ m_shape->SetStart( VECTOR2I( m_startX.GetIntValue(), m_startY.GetIntValue() ) );
+ m_shape->SetEnd( VECTOR2I( m_endX.GetIntValue(), m_endY.GetIntValue() ) );
+ m_shape->SetBezierC1( VECTOR2I( m_ctrl1X.GetIntValue(), m_ctrl1Y.GetIntValue()));
+ m_shape->SetBezierC2( VECTOR2I( m_ctrl2X.GetIntValue(), m_ctrl2Y.GetIntValue()));
break;
case SHAPE_T::ARC:
- m_shape->SetCenter( VECTOR2I( m_endX.GetValue(), m_endY.GetValue() ) );
- m_shape->SetStart( VECTOR2I( m_startX.GetValue(), m_startY.GetValue() ) );
+ m_shape->SetCenter( VECTOR2I( m_endX.GetIntValue(), m_endY.GetIntValue() ) );
+ m_shape->SetStart( VECTOR2I( m_startX.GetIntValue(), m_startY.GetIntValue() ) );
m_shape->SetArcAngleAndEnd( m_radius.GetAngleValue() );
break;
case SHAPE_T::CIRCLE:
- m_shape->SetStart( VECTOR2I( m_startX.GetValue(), m_startY.GetValue() ) );
- m_shape->SetEnd( m_shape->GetStart() + VECTOR2I( m_radius.GetValue(), 0 ) );
+ m_shape->SetStart( VECTOR2I( m_startX.GetIntValue(), m_startY.GetIntValue() ) );
+ m_shape->SetEnd( m_shape->GetStart() + VECTOR2I( m_radius.GetIntValue(), 0 ) );
break;
case SHAPE_T::POLY:
@@ -333,7 +333,7 @@ bool DIALOG_PAD_PRIMITIVE_POLY_PROPS::TransferDataFromWindow()
m_shape->SetPolyPoints( m_currPoints );
STROKE_PARAMS stroke = m_shape->GetStroke();
- stroke.SetWidth( m_thickness.GetValue() );
+ stroke.SetWidth( m_thickness.GetIntValue() );
m_shape->SetStroke( stroke );
m_shape->SetFilled( m_filledCtrl->GetValue() );
@@ -496,7 +496,7 @@ void DIALOG_PAD_PRIMITIVE_POLY_PROPS::onPaintPolyPanel( wxPaintEvent& event )
// The draw origin is the center of the window.
// Therefore the window size is twice the minsize just calculated
minsize *= 2;
- minsize += m_thickness.GetValue();
+ minsize += m_thickness.GetIntValue();
// Give a margin
double scale = std::min( double( dc_size.x ) / minsize, double( dc_size.y ) / minsize ) * 0.9;
diff --git a/pcbnew/dialogs/dialog_pad_properties.cpp b/pcbnew/dialogs/dialog_pad_properties.cpp
index 7a06fed6e8..a82e358670 100644
--- a/pcbnew/dialogs/dialog_pad_properties.cpp
+++ b/pcbnew/dialogs/dialog_pad_properties.cpp
@@ -139,7 +139,9 @@ DIALOG_PAD_PROPERTIES::DIALOG_PAD_PROPERTIES( PCB_BASE_FRAME* aParent, PAD* aPad
m_thermalGap( aParent, m_thermalGapLabel, m_thermalGapCtrl, m_thermalGapUnits ),
m_spokeWidth( aParent, m_spokeWidthLabel, m_spokeWidthCtrl, m_spokeWidthUnits ),
m_spokeAngle( aParent, m_spokeAngleLabel, m_spokeAngleCtrl, m_spokeAngleUnits ),
- m_pad_orientation( aParent, m_PadOrientText, m_cb_padrotation, m_orientationUnits )
+ m_pad_orientation( aParent, m_PadOrientText, m_cb_padrotation, m_orientationUnits ),
+ m_teardropMaxLenSetting( aParent, m_stMaxLen, m_tcTdMaxLen, m_stMaxLenUnits ),
+ m_teardropMaxHeightSetting( aParent, m_stTdMaxSize, m_tcMaxHeight, m_stMaxHeightUnits )
{
SetName( PAD_PROPERTIES_DLG_NAME );
m_isFpEditor = dynamic_cast( aParent ) != nullptr;
@@ -160,6 +162,7 @@ DIALOG_PAD_PROPERTIES::DIALOG_PAD_PROPERTIES( PCB_BASE_FRAME* aParent, PAD* aPad
m_FlippedWarningIcon->SetBitmap( KiBitmap( BITMAPS::dialog_warning ) );
m_nonCopperWarningIcon->SetBitmap( KiBitmap( BITMAPS::dialog_warning ) );
+ m_legacyTeardropsIcon->SetBitmap( KiBitmap( BITMAPS::dialog_warning ) );
m_masterPad = m_parent->GetDesignSettings().m_Pad_Master.get();
m_previewPad = new PAD( (FOOTPRINT*) nullptr );
@@ -169,6 +172,7 @@ DIALOG_PAD_PROPERTIES::DIALOG_PAD_PROPERTIES( PCB_BASE_FRAME* aParent, PAD* aPad
SetTitle( _( "Pad Properties" ) );
*m_previewPad = *aPad;
+ m_previewPad->GetTeardropParams() = aPad->GetTeardropParams();
m_previewPad->ClearFlags( SELECTED|BRIGHTENED );
}
else
@@ -176,6 +180,7 @@ DIALOG_PAD_PROPERTIES::DIALOG_PAD_PROPERTIES( PCB_BASE_FRAME* aParent, PAD* aPad
SetTitle( _( "Default Pad Properties for Add Pad Tool" ) );
*m_previewPad = *m_masterPad;
+ m_previewPad->GetTeardropParams() = m_masterPad->GetTeardropParams();
}
if( m_isFpEditor )
@@ -211,11 +216,13 @@ DIALOG_PAD_PROPERTIES::DIALOG_PAD_PROPERTIES( PCB_BASE_FRAME* aParent, PAD* aPad
m_copperLayersLabel->SetFont( infoFont );
m_techLayersLabel->SetFont( infoFont );
m_parentInfo->SetFont( infoFont );
+ m_teardropShapeLabel->SetFont( infoFont );
infoFont.SetStyle( wxFONTSTYLE_ITALIC );
m_nonCopperNote->SetFont( infoFont );
m_staticTextInfoPaste->SetFont( infoFont );
m_staticTextPrimitiveListWarning->SetFont( infoFont );
+ m_minTrackWidthHint->SetFont( infoFont );
updateHoleControls();
updatePadSizeControls();
@@ -560,6 +567,26 @@ void DIALOG_PAD_PROPERTIES::initValues()
m_pasteMarginRatio.ChangeDoubleValue( m_previewPad->GetLocalSolderPasteMarginRatio() * 100.0 );
m_pad_orientation.ChangeAngleValue( m_previewPad->GetOrientation() );
+ m_cbTeardrops->SetValue( m_previewPad->GetTeardropParams().m_Enabled );
+ m_cbTeardropsUseNextTrack->SetValue( m_previewPad->GetTeardropParams().m_AllowUseTwoTracks );
+ m_cbPreferZoneConnection->SetValue( !m_previewPad->GetTeardropParams().m_TdOnPadsInZones );
+ m_teardropMaxLenSetting.SetValue( m_previewPad->GetTeardropParams().m_TdMaxLen );
+ m_teardropMaxHeightSetting.SetValue( m_previewPad->GetTeardropParams().m_TdMaxWidth );
+ m_spTeardropLenPercent->SetValue( m_previewPad->GetTeardropParams().m_BestLengthRatio *100 );
+ m_spTeardropSizePercent->SetValue( m_previewPad->GetTeardropParams().m_BestWidthRatio *100 );
+ m_spTeardropHDPercent->SetValue( m_previewPad->GetTeardropParams().m_WidthtoSizeFilterRatio*100 );
+
+ if( m_previewPad->GetTeardropParams().IsCurved() )
+ {
+ m_rbCurved->SetValue( true );
+ m_curvePointsCtrl->SetValue( m_previewPad->GetTeardropParams().m_CurveSegCount );
+ }
+ else
+ {
+ m_rbStraightLines->SetValue( true );
+ m_curvePointsCtrl->SetValue( 5 );
+ }
+
switch( m_previewPad->GetZoneConnection() )
{
default:
@@ -598,14 +625,14 @@ void DIALOG_PAD_PROPERTIES::initValues()
break;
}
- m_cbTopLeft->SetValue( ( m_previewPad->GetChamferPositions() & RECT_CHAMFER_TOP_LEFT) );
- m_cbTopLeft1->SetValue( ( m_previewPad->GetChamferPositions() & RECT_CHAMFER_TOP_LEFT) );
- m_cbTopRight->SetValue( ( m_previewPad->GetChamferPositions() & RECT_CHAMFER_TOP_RIGHT) );
- m_cbTopRight1->SetValue( ( m_previewPad->GetChamferPositions() & RECT_CHAMFER_TOP_RIGHT) );
- m_cbBottomLeft->SetValue( ( m_previewPad->GetChamferPositions() & RECT_CHAMFER_BOTTOM_LEFT) );
- m_cbBottomLeft1->SetValue( ( m_previewPad->GetChamferPositions() & RECT_CHAMFER_BOTTOM_LEFT) );
- m_cbBottomRight->SetValue( ( m_previewPad->GetChamferPositions() & RECT_CHAMFER_BOTTOM_RIGHT) );
- m_cbBottomRight1->SetValue( ( m_previewPad->GetChamferPositions() & RECT_CHAMFER_BOTTOM_RIGHT) );
+ m_cbTopLeft->SetValue( m_previewPad->GetChamferPositions() & RECT_CHAMFER_TOP_LEFT );
+ m_cbTopLeft1->SetValue( m_previewPad->GetChamferPositions() & RECT_CHAMFER_TOP_LEFT );
+ m_cbTopRight->SetValue( m_previewPad->GetChamferPositions() & RECT_CHAMFER_TOP_RIGHT );
+ m_cbTopRight1->SetValue( m_previewPad->GetChamferPositions() & RECT_CHAMFER_TOP_RIGHT );
+ m_cbBottomLeft->SetValue( m_previewPad->GetChamferPositions() & RECT_CHAMFER_BOTTOM_LEFT );
+ m_cbBottomLeft1->SetValue( m_previewPad->GetChamferPositions() & RECT_CHAMFER_BOTTOM_LEFT );
+ m_cbBottomRight->SetValue( m_previewPad->GetChamferPositions() & RECT_CHAMFER_BOTTOM_RIGHT );
+ m_cbBottomRight1->SetValue( m_previewPad->GetChamferPositions() & RECT_CHAMFER_BOTTOM_RIGHT );
updateRoundRectCornerValues();
@@ -665,14 +692,16 @@ void DIALOG_PAD_PROPERTIES::initValues()
displayPrimitivesList();
}
+
// A small helper function, to display coordinates:
-static wxString formatCoord( EDA_UNITS aUnits, VECTOR2I aCoord )
+static wxString formatCoord( EDA_UNITS aUnits, const VECTOR2I& aCoord )
{
return wxString::Format( wxT( "(X:%s Y:%s)" ),
EDA_UNIT_UTILS::UI::MessageTextFromValue( pcbIUScale, aUnits, aCoord.x ),
EDA_UNIT_UTILS::UI::MessageTextFromValue( pcbIUScale, aUnits, aCoord.y ) );
}
+
void DIALOG_PAD_PROPERTIES::displayPrimitivesList()
{
m_listCtrlPrimitives->ClearAll();
@@ -1096,6 +1125,20 @@ void DIALOG_PAD_PROPERTIES::OnUpdateUI( wxUpdateUIEvent& event )
m_stackupImagesBook->ChangeSelection( 3 );
break;
}
+
+ m_legacyTeardropsWarning->Show( m_board->LegacyTeardrops() );
+}
+
+
+void DIALOG_PAD_PROPERTIES::onTeardropsUpdateUi( wxUpdateUIEvent& event )
+{
+ event.Enable( !m_board->LegacyTeardrops() );
+}
+
+
+void DIALOG_PAD_PROPERTIES::onTeardropCurvePointsUpdateUi( wxUpdateUIEvent& event )
+{
+ event.Enable( !m_board->LegacyTeardrops() && m_rbCurved->GetValue() );
}
@@ -1624,6 +1667,8 @@ bool DIALOG_PAD_PROPERTIES::TransferDataFromWindow()
m_currentPad->SetChamferPositions( m_masterPad->GetChamferPositions() );
m_currentPad->SetZoneConnection( m_masterPad->GetZoneConnection() );
+ m_currentPad->GetTeardropParams() = m_masterPad->GetTeardropParams();
+
// rounded rect pads with radius ratio = 0 are in fact rect pads.
// So set the right shape (and perhaps issues with a radius = 0)
if( m_currentPad->GetShape() == PAD_SHAPE::ROUNDRECT &&
@@ -1681,22 +1726,36 @@ PAD_PROP DIALOG_PAD_PROPERTIES::getSelectedProperty()
void DIALOG_PAD_PROPERTIES::updateHoleControls()
{
- m_holeXLabel->SetLabel( ( m_holeShapeCtrl->GetSelection() == CHOICE_SHAPE_CIRCLE )
- ? _( "Diameter:" )
- : _( "Hole size X:" ) );
- m_holeY.Show( m_holeShapeCtrl->GetSelection() != CHOICE_SHAPE_CIRCLE
- && m_holeShapeCtrl->GetSelection() != CHOICE_SHAPE_CUSTOM_CIRC_ANCHOR );
+ if( m_holeShapeCtrl->GetSelection() == CHOICE_SHAPE_CIRCLE )
+ {
+ m_holeXLabel->SetLabel( _( "Diameter:" ) );
+ m_holeY.Show( false );
+ }
+ else
+ {
+ m_holeXLabel->SetLabel( _( "Hole size X:" ) );
+ m_holeY.Show( true );
+ }
+
m_holeXLabel->GetParent()->Layout();
}
void DIALOG_PAD_PROPERTIES::updatePadSizeControls()
{
- m_sizeXLabel->SetLabel( ( m_PadShapeSelector->GetSelection() == CHOICE_SHAPE_CIRCLE
- || m_PadShapeSelector->GetSelection() == CHOICE_SHAPE_CUSTOM_CIRC_ANCHOR )
- ? _( "Diameter:" )
- : _( "Pad size X:" ) );
- m_sizeY.Show( m_PadShapeSelector->GetSelection() != CHOICE_SHAPE_CIRCLE
- && m_PadShapeSelector->GetSelection() != CHOICE_SHAPE_CUSTOM_CIRC_ANCHOR );
+ if( m_PadShapeSelector->GetSelection() == CHOICE_SHAPE_CIRCLE
+ || m_PadShapeSelector->GetSelection() == CHOICE_SHAPE_CUSTOM_CIRC_ANCHOR )
+ {
+ m_sizeXLabel->SetLabel( _( "Diameter:" ) );
+ m_sizeY.Show( false );
+ m_bitmapTeardrop->SetBitmap( KiBitmap( BITMAPS::teardrop_sizes ) );
+ }
+ else
+ {
+ m_sizeXLabel->SetLabel( _( "Pad size X:" ) );
+ m_sizeY.Show( true );
+ m_bitmapTeardrop->SetBitmap( KiBitmap( BITMAPS::teardrop_rect_sizes ) );
+ }
+
m_sizeXLabel->GetParent()->Layout();
}
@@ -1726,14 +1785,29 @@ bool DIALOG_PAD_PROPERTIES::transferDataToPad( PAD* aPad )
if( aPad->GetShape() == PAD_SHAPE::CUSTOM )
aPad->ReplacePrimitives( m_primitives );
+ aPad->GetTeardropParams().m_Enabled = m_cbTeardrops->GetValue();
+ aPad->GetTeardropParams().m_AllowUseTwoTracks = m_cbTeardropsUseNextTrack->GetValue();
+ aPad->GetTeardropParams().m_TdOnPadsInZones = !m_cbPreferZoneConnection->GetValue();
+ aPad->GetTeardropParams().m_TdMaxLen = m_teardropMaxLenSetting.GetIntValue();
+ aPad->GetTeardropParams().m_TdMaxWidth = m_teardropMaxHeightSetting.GetIntValue();
+ aPad->GetTeardropParams().m_BestLengthRatio = m_spTeardropLenPercent->GetValue() / 100;
+ aPad->GetTeardropParams().m_BestWidthRatio = m_spTeardropSizePercent->GetValue() / 100;
+
+ if( m_rbStraightLines->GetValue() )
+ aPad->GetTeardropParams().m_CurveSegCount = 0;
+ else
+ aPad->GetTeardropParams().m_CurveSegCount = m_curvePointsCtrl->GetValue();
+
+ aPad->GetTeardropParams().m_WidthtoSizeFilterRatio = m_spTeardropHDPercent->GetValue() / 100;
+
// Read pad clearances values:
- aPad->SetLocalClearance( m_clearance.GetValue() );
- aPad->SetLocalSolderMaskMargin( m_maskMargin.GetValue() );
- aPad->SetLocalSolderPasteMargin( m_pasteMargin.GetValue() );
+ aPad->SetLocalClearance( m_clearance.GetIntValue() );
+ aPad->SetLocalSolderMaskMargin( m_maskMargin.GetIntValue() );
+ aPad->SetLocalSolderPasteMargin( m_pasteMargin.GetIntValue() );
aPad->SetLocalSolderPasteMarginRatio( m_pasteMarginRatio.GetDoubleValue() / 100.0 );
- aPad->SetThermalSpokeWidth( m_spokeWidth.GetValue() );
+ aPad->SetThermalSpokeWidth( m_spokeWidth.GetIntValue() );
aPad->SetThermalSpokeAngle( m_spokeAngle.GetAngleValue() );
- aPad->SetThermalGap( m_thermalGap.GetValue() );
+ aPad->SetThermalGap( m_thermalGap.GetIntValue() );
// And rotation
aPad->SetOrientation( m_pad_orientation.GetAngleValue() );
@@ -1747,23 +1821,23 @@ bool DIALOG_PAD_PROPERTIES::transferDataToPad( PAD* aPad )
case 3: aPad->SetZoneConnection( ZONE_CONNECTION::NONE ); break;
}
- aPad->SetPosition( VECTOR2I( m_posX.GetValue(), m_posY.GetValue() ) );
+ aPad->SetPosition( VECTOR2I( m_posX.GetIntValue(), m_posY.GetIntValue() ) );
if( m_holeShapeCtrl->GetSelection() == CHOICE_SHAPE_CIRCLE )
{
aPad->SetDrillShape( PAD_DRILL_SHAPE_CIRCLE );
- aPad->SetDrillSize( VECTOR2I( m_holeX.GetValue(), m_holeX.GetValue() ) );
+ aPad->SetDrillSize( VECTOR2I( m_holeX.GetIntValue(), m_holeX.GetIntValue() ) );
}
else
{
aPad->SetDrillShape( PAD_DRILL_SHAPE_OBLONG );
- aPad->SetDrillSize( VECTOR2I( m_holeX.GetValue(), m_holeY.GetValue() ) );
+ aPad->SetDrillSize( VECTOR2I( m_holeX.GetIntValue(), m_holeY.GetIntValue() ) );
}
if( aPad->GetShape() == PAD_SHAPE::CIRCLE )
- aPad->SetSize( VECTOR2I( m_sizeX.GetValue(), m_sizeX.GetValue() ) );
+ aPad->SetSize( VECTOR2I( m_sizeX.GetIntValue(), m_sizeX.GetIntValue() ) );
else
- aPad->SetSize( VECTOR2I( m_sizeX.GetValue(), m_sizeY.GetValue() ) );
+ aPad->SetSize( VECTOR2I( m_sizeX.GetIntValue(), m_sizeY.GetIntValue() ) );
// For a trapezoid, test delta value (be sure delta is not too large for pad size)
// remember DeltaSize.x is the Y size variation
@@ -1774,9 +1848,9 @@ bool DIALOG_PAD_PROPERTIES::transferDataToPad( PAD* aPad )
{
// For a trapezoid, only one of delta.x or delta.y is not 0, depending on axis.
if( m_trapAxisCtrl->GetSelection() == 0 )
- delta.x = m_trapDelta.GetValue();
+ delta.x = m_trapDelta.GetIntValue();
else
- delta.y = m_trapDelta.GetValue();
+ delta.y = m_trapDelta.GetIntValue();
if( delta.x < 0 && delta.x < -aPad->GetSize().y )
{
@@ -1806,13 +1880,13 @@ bool DIALOG_PAD_PROPERTIES::transferDataToPad( PAD* aPad )
aPad->SetDelta( delta );
if( m_offsetShapeOpt->GetValue() )
- aPad->SetOffset( VECTOR2I( m_offsetX.GetValue(), m_offsetY.GetValue() ) );
+ aPad->SetOffset( VECTOR2I( m_offsetX.GetIntValue(), m_offsetY.GetIntValue() ) );
else
aPad->SetOffset( VECTOR2I() );
// Read pad length die
if( m_padToDieOpt->GetValue() )
- aPad->SetPadToDieLength( m_padToDie.GetValue() );
+ aPad->SetPadToDieLength( m_padToDie.GetIntValue() );
else
aPad->SetPadToDieLength( 0 );
@@ -1858,7 +1932,7 @@ bool DIALOG_PAD_PROPERTIES::transferDataToPad( PAD* aPad )
// diameter is acceptable, and is used in Gerber files as flashed area
// reference
if( aPad->GetAnchorPadShape() == PAD_SHAPE::CIRCLE )
- aPad->SetSize( VECTOR2I( m_sizeX.GetValue(), m_sizeX.GetValue() ) );
+ aPad->SetSize( VECTOR2I( m_sizeX.GetIntValue(), m_sizeX.GetIntValue() ) );
}
// Define the way the clearance area is defined in zones. Since all non-custom pad
diff --git a/pcbnew/dialogs/dialog_pad_properties.h b/pcbnew/dialogs/dialog_pad_properties.h
index 8375d41889..e3068d7337 100644
--- a/pcbnew/dialogs/dialog_pad_properties.h
+++ b/pcbnew/dialogs/dialog_pad_properties.h
@@ -78,6 +78,8 @@ private:
void OnResize( wxSizeEvent& event );
void OnCancel( wxCommandEvent& event ) override;
void OnUpdateUI( wxUpdateUIEvent& event ) override;
+ void onTeardropsUpdateUi( wxUpdateUIEvent& event ) override;
+ void onTeardropCurvePointsUpdateUi( wxUpdateUIEvent& event ) override;
void OnUpdateUINonCopperWarning( wxUpdateUIEvent& event ) override;
@@ -172,6 +174,8 @@ private:
UNIT_BINDER m_spokeWidth;
UNIT_BINDER m_spokeAngle;
UNIT_BINDER m_pad_orientation;
+ UNIT_BINDER m_teardropMaxLenSetting;
+ UNIT_BINDER m_teardropMaxHeightSetting;
};
diff --git a/pcbnew/dialogs/dialog_pad_properties_base.cpp b/pcbnew/dialogs/dialog_pad_properties_base.cpp
index b33f3c07f5..dc2713767e 100644
--- a/pcbnew/dialogs/dialog_pad_properties_base.cpp
+++ b/pcbnew/dialogs/dialog_pad_properties_base.cpp
@@ -569,6 +569,321 @@ DIALOG_PAD_PROPERTIES_BASE::DIALOG_PAD_PROPERTIES_BASE( wxWindow* parent, wxWind
m_panelGeneral->Layout();
bGeneralSizer->Fit( m_panelGeneral );
m_notebook->AddPage( m_panelGeneral, _("General"), true );
+ m_connectionsPanel = new wxPanel( m_notebook, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
+ wxBoxSizer* bSizerPanelConnections;
+ bSizerPanelConnections = new wxBoxSizer( wxVERTICAL );
+
+ wxBoxSizer* bSizerConnectionsMargins;
+ bSizerConnectionsMargins = new wxBoxSizer( wxVERTICAL );
+
+ wxStaticBoxSizer* bSizerTeardrops;
+ bSizerTeardrops = new wxStaticBoxSizer( new wxStaticBox( m_connectionsPanel, wxID_ANY, _("Teardrops") ), wxVERTICAL );
+
+ m_legacyTeardropsWarning = new wxBoxSizer( wxHORIZONTAL );
+
+ m_legacyTeardropsIcon = new wxStaticBitmap( bSizerTeardrops->GetStaticBox(), wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 );
+ m_legacyTeardropsWarning->Add( m_legacyTeardropsIcon, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 );
+
+ wxBoxSizer* bSizer42;
+ bSizer42 = new wxBoxSizer( wxVERTICAL );
+
+ m_staticText85 = new wxStaticText( bSizerTeardrops->GetStaticBox(), wxID_ANY, _("Board contains legacy teardrops. "), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticText85->Wrap( -1 );
+ bSizer42->Add( m_staticText85, 0, wxRIGHT|wxLEFT, 5 );
+
+ m_staticText851 = new wxStaticText( bSizerTeardrops->GetStaticBox(), wxID_ANY, _("Use Edit > Edit Teardrops to apply automatic teardrops."), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticText851->Wrap( -1 );
+ bSizer42->Add( m_staticText851, 0, wxBOTTOM|wxRIGHT|wxLEFT, 5 );
+
+
+ m_legacyTeardropsWarning->Add( bSizer42, 1, wxALIGN_CENTER_VERTICAL, 5 );
+
+
+ bSizerTeardrops->Add( m_legacyTeardropsWarning, 0, wxEXPAND|wxBOTTOM, 5 );
+
+ wxBoxSizer* bSizerCols11;
+ bSizerCols11 = new wxBoxSizer( wxHORIZONTAL );
+
+ wxBoxSizer* bSizerLeftCol11;
+ bSizerLeftCol11 = new wxBoxSizer( wxVERTICAL );
+
+ m_cbTeardrops = new wxCheckBox( bSizerTeardrops->GetStaticBox(), wxID_ANY, _("Add teardrops on pad's track connections"), wxDefaultPosition, wxDefaultSize, 0 );
+ bSizerLeftCol11->Add( m_cbTeardrops, 0, wxBOTTOM|wxRIGHT|wxLEFT, 5 );
+
+ m_cbPreferZoneConnection = new wxCheckBox( bSizerTeardrops->GetStaticBox(), wxID_ANY, _("Prefer zone connection"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_cbPreferZoneConnection->SetValue(true);
+ bSizerLeftCol11->Add( m_cbPreferZoneConnection, 0, wxBOTTOM|wxRIGHT|wxLEFT, 5 );
+
+ m_cbTeardropsUseNextTrack = new wxCheckBox( bSizerTeardrops->GetStaticBox(), wxID_ANY, _("Allow teardrops to span 2 track segments"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_cbTeardropsUseNextTrack->SetValue(true);
+ m_cbTeardropsUseNextTrack->SetToolTip( _("Allows a teardrop to spread over 2 tracks if the first track segment is too short") );
+
+ bSizerLeftCol11->Add( m_cbTeardropsUseNextTrack, 0, wxBOTTOM|wxRIGHT|wxLEFT, 5 );
+
+
+ bSizerCols11->Add( bSizerLeftCol11, 1, wxEXPAND|wxTOP, 3 );
+
+
+ bSizerCols11->Add( 15, 0, 0, wxEXPAND, 5 );
+
+ wxBoxSizer* bSizerRightCol11;
+ bSizerRightCol11 = new wxBoxSizer( wxVERTICAL );
+
+ wxBoxSizer* bSizer39;
+ bSizer39 = new wxBoxSizer( wxHORIZONTAL );
+
+ m_stHDRatio = new wxStaticText( bSizerTeardrops->GetStaticBox(), wxID_ANY, _("Maximum track width:"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_stHDRatio->Wrap( -1 );
+ m_stHDRatio->SetToolTip( _("Max pad/via size to track width ratio to create a teardrop.\n100 always creates a teardrop.") );
+
+ bSizer39->Add( m_stHDRatio, 0, wxALIGN_CENTER_VERTICAL, 5 );
+
+ m_spTeardropHDPercent = new wxSpinCtrlDouble( bSizerTeardrops->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS, 0, 100, 90, 10 );
+ m_spTeardropHDPercent->SetDigits( 0 );
+ m_spTeardropHDPercent->SetToolTip( _("Tracks which are similar in size to the pad do not need teardrops.") );
+
+ bSizer39->Add( m_spTeardropHDPercent, 0, wxEXPAND|wxRIGHT|wxLEFT, 5 );
+
+ m_minTrackWidthUnits = new wxStaticText( bSizerTeardrops->GetStaticBox(), wxID_ANY, _("%"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_minTrackWidthUnits->Wrap( -1 );
+ bSizer39->Add( m_minTrackWidthUnits, 0, wxRIGHT|wxALIGN_CENTER_VERTICAL, 5 );
+
+
+ bSizerRightCol11->Add( bSizer39, 0, wxEXPAND, 3 );
+
+ m_minTrackWidthHint = new wxStaticText( bSizerTeardrops->GetStaticBox(), wxID_ANY, _("(as a percentage of pad size)"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_minTrackWidthHint->Wrap( -1 );
+ bSizerRightCol11->Add( m_minTrackWidthHint, 0, wxTOP|wxBOTTOM, 3 );
+
+
+ bSizerCols11->Add( bSizerRightCol11, 1, wxEXPAND|wxLEFT, 10 );
+
+
+ bSizerTeardrops->Add( bSizerCols11, 0, wxEXPAND, 5 );
+
+
+ bSizerTeardrops->Add( 0, 5, 0, wxEXPAND, 5 );
+
+ m_teardropShapeLabel = new wxStaticText( bSizerTeardrops->GetStaticBox(), wxID_ANY, _("Teardrop Shape"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_teardropShapeLabel->Wrap( -1 );
+ bSizerTeardrops->Add( m_teardropShapeLabel, 0, wxTOP|wxRIGHT|wxLEFT, 5 );
+
+ m_staticline51 = new wxStaticLine( bSizerTeardrops->GetStaticBox(), wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL );
+ bSizerTeardrops->Add( m_staticline51, 0, wxEXPAND, 5 );
+
+ wxBoxSizer* bSizerShapeColumns;
+ bSizerShapeColumns = new wxBoxSizer( wxHORIZONTAL );
+
+ wxBoxSizer* bSizerLeftCol;
+ bSizerLeftCol = new wxBoxSizer( wxVERTICAL );
+
+ m_bitmapTeardrop = new wxStaticBitmap( bSizerTeardrops->GetStaticBox(), wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 );
+ bSizerLeftCol->Add( m_bitmapTeardrop, 1, wxALIGN_CENTER_HORIZONTAL|wxRIGHT|wxLEFT, 5 );
+
+ wxBoxSizer* bSizer41;
+ bSizer41 = new wxBoxSizer( wxHORIZONTAL );
+
+ m_edgesLabel = new wxStaticText( bSizerTeardrops->GetStaticBox(), wxID_ANY, _("Edges:"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_edgesLabel->Wrap( -1 );
+ bSizer41->Add( m_edgesLabel, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
+
+ m_rbStraightLines = new wxRadioButton( bSizerTeardrops->GetStaticBox(), wxID_ANY, _("Straight lines"), wxDefaultPosition, wxDefaultSize, wxRB_GROUP );
+ bSizer41->Add( m_rbStraightLines, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
+
+ m_rbCurved = new wxRadioButton( bSizerTeardrops->GetStaticBox(), wxID_ANY, _("Curved"), wxDefaultPosition, wxDefaultSize, 0 );
+ bSizer41->Add( m_rbCurved, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
+
+
+ bSizerLeftCol->Add( bSizer41, 0, wxEXPAND, 5 );
+
+
+ bSizerShapeColumns->Add( bSizerLeftCol, 1, wxEXPAND|wxRIGHT, 10 );
+
+
+ bSizerShapeColumns->Add( 10, 0, 0, wxEXPAND, 5 );
+
+ wxFlexGridSizer* fgSizerRightCol;
+ fgSizerRightCol = new wxFlexGridSizer( 0, 3, 2, 0 );
+ fgSizerRightCol->AddGrowableCol( 1 );
+ fgSizerRightCol->SetFlexibleDirection( wxBOTH );
+ fgSizerRightCol->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
+
+ m_stHsetting = new wxStaticText( bSizerTeardrops->GetStaticBox(), wxID_ANY, _("Best length:"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_stHsetting->Wrap( -1 );
+ fgSizerRightCol->Add( m_stHsetting, 0, wxALIGN_CENTER_VERTICAL, 5 );
+
+ m_spTeardropLenPercent = new wxSpinCtrlDouble( bSizerTeardrops->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS, 20, 100, 40.000000, 10 );
+ m_spTeardropLenPercent->SetDigits( 0 );
+ fgSizerRightCol->Add( m_spTeardropLenPercent, 0, wxEXPAND|wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 );
+
+ m_stTeardropLenUnits = new wxStaticText( bSizerTeardrops->GetStaticBox(), wxID_ANY, _("%"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_stTeardropLenUnits->Wrap( -1 );
+ fgSizerRightCol->Add( m_stTeardropLenUnits, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 );
+
+ m_stMaxLen = new wxStaticText( bSizerTeardrops->GetStaticBox(), wxID_ANY, _("Max length:"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_stMaxLen->Wrap( -1 );
+ fgSizerRightCol->Add( m_stMaxLen, 0, wxALIGN_CENTER_VERTICAL, 5 );
+
+ m_tcTdMaxLen = new wxTextCtrl( bSizerTeardrops->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
+ fgSizerRightCol->Add( m_tcTdMaxLen, 0, wxEXPAND|wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 );
+
+ m_stMaxLenUnits = new wxStaticText( bSizerTeardrops->GetStaticBox(), wxID_ANY, _("mm"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_stMaxLenUnits->Wrap( -1 );
+ fgSizerRightCol->Add( m_stMaxLenUnits, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 );
+
+
+ fgSizerRightCol->Add( 0, 5, 1, wxEXPAND, 5 );
+
+
+ fgSizerRightCol->Add( 0, 0, 1, wxEXPAND, 5 );
+
+
+ fgSizerRightCol->Add( 0, 0, 1, wxEXPAND, 5 );
+
+ m_stVsetting = new wxStaticText( bSizerTeardrops->GetStaticBox(), wxID_ANY, _("Best height:"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_stVsetting->Wrap( -1 );
+ fgSizerRightCol->Add( m_stVsetting, 0, wxALIGN_CENTER_VERTICAL, 10 );
+
+ m_spTeardropSizePercent = new wxSpinCtrlDouble( bSizerTeardrops->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS, 60, 100, 100.000000, 10 );
+ m_spTeardropSizePercent->SetDigits( 0 );
+ fgSizerRightCol->Add( m_spTeardropSizePercent, 0, wxEXPAND|wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 );
+
+ m_stLenPercent = new wxStaticText( bSizerTeardrops->GetStaticBox(), wxID_ANY, _("%"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_stLenPercent->Wrap( -1 );
+ fgSizerRightCol->Add( m_stLenPercent, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 );
+
+ m_stTdMaxSize = new wxStaticText( bSizerTeardrops->GetStaticBox(), wxID_ANY, _("Max height:"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_stTdMaxSize->Wrap( -1 );
+ fgSizerRightCol->Add( m_stTdMaxSize, 0, wxALIGN_CENTER_VERTICAL, 10 );
+
+ m_tcMaxHeight = new wxTextCtrl( bSizerTeardrops->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
+ fgSizerRightCol->Add( m_tcMaxHeight, 0, wxEXPAND|wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 );
+
+ m_stMaxHeightUnits = new wxStaticText( bSizerTeardrops->GetStaticBox(), wxID_ANY, _("mm"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_stMaxHeightUnits->Wrap( -1 );
+ fgSizerRightCol->Add( m_stMaxHeightUnits, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 );
+
+
+ fgSizerRightCol->Add( 0, 0, 1, wxEXPAND, 5 );
+
+
+ fgSizerRightCol->Add( 0, 0, 1, wxEXPAND, 5 );
+
+
+ fgSizerRightCol->Add( 0, 5, 1, wxEXPAND, 5 );
+
+ m_curvePointsLabel = new wxStaticText( bSizerTeardrops->GetStaticBox(), wxID_ANY, _("Curve points:"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_curvePointsLabel->Wrap( -1 );
+ fgSizerRightCol->Add( m_curvePointsLabel, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM, 5 );
+
+ m_curvePointsCtrl = new wxSpinCtrl( bSizerTeardrops->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS, 3, 10, 5 );
+ fgSizerRightCol->Add( m_curvePointsCtrl, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 );
+
+
+ bSizerShapeColumns->Add( fgSizerRightCol, 1, wxEXPAND|wxTOP|wxLEFT, 10 );
+
+
+ bSizerTeardrops->Add( bSizerShapeColumns, 1, wxEXPAND|wxBOTTOM, 5 );
+
+
+ bSizerConnectionsMargins->Add( bSizerTeardrops, 1, wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 5 );
+
+ wxBoxSizer* bSizerConnectionsLower;
+ bSizerConnectionsLower = new wxBoxSizer( wxHORIZONTAL );
+
+ m_sbSizerZonesSettings = new wxStaticBoxSizer( new wxStaticBox( m_connectionsPanel, wxID_ANY, _("Connection to Copper Zones") ), wxVERTICAL );
+
+ wxFlexGridSizer* fgSizerCopperZonesOpts;
+ fgSizerCopperZonesOpts = new wxFlexGridSizer( 0, 2, 5, 0 );
+ fgSizerCopperZonesOpts->AddGrowableCol( 1 );
+ fgSizerCopperZonesOpts->SetFlexibleDirection( wxBOTH );
+ fgSizerCopperZonesOpts->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
+
+ m_padConnectionLabel = new wxStaticText( m_sbSizerZonesSettings->GetStaticBox(), wxID_ANY, _("Pad connection:"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_padConnectionLabel->Wrap( -1 );
+ fgSizerCopperZonesOpts->Add( m_padConnectionLabel, 0, wxALIGN_CENTER_VERTICAL|wxLEFT, 5 );
+
+ wxString m_ZoneConnectionChoiceChoices[] = { _("From parent footprint"), _("Solid"), _("Thermal relief"), _("None") };
+ int m_ZoneConnectionChoiceNChoices = sizeof( m_ZoneConnectionChoiceChoices ) / sizeof( wxString );
+ m_ZoneConnectionChoice = new wxChoice( m_sbSizerZonesSettings->GetStaticBox(), wxID_ANY, wxDefaultPosition, wxDefaultSize, m_ZoneConnectionChoiceNChoices, m_ZoneConnectionChoiceChoices, 0 );
+ m_ZoneConnectionChoice->SetSelection( 0 );
+ fgSizerCopperZonesOpts->Add( m_ZoneConnectionChoice, 1, wxALIGN_CENTER_VERTICAL|wxLEFT, 5 );
+
+ m_zoneKnockoutLabel = new wxStaticText( m_sbSizerZonesSettings->GetStaticBox(), wxID_ANY, _("Zone knockout:"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_zoneKnockoutLabel->Wrap( -1 );
+ fgSizerCopperZonesOpts->Add( m_zoneKnockoutLabel, 0, wxALIGN_CENTER_VERTICAL|wxLEFT, 5 );
+
+ wxString m_ZoneCustomPadShapeChoices[] = { _("Pad shape"), _("Pad convex hull") };
+ int m_ZoneCustomPadShapeNChoices = sizeof( m_ZoneCustomPadShapeChoices ) / sizeof( wxString );
+ m_ZoneCustomPadShape = new wxChoice( m_sbSizerZonesSettings->GetStaticBox(), wxID_ANY, wxDefaultPosition, wxDefaultSize, m_ZoneCustomPadShapeNChoices, m_ZoneCustomPadShapeChoices, 0 );
+ m_ZoneCustomPadShape->SetSelection( 0 );
+ fgSizerCopperZonesOpts->Add( m_ZoneCustomPadShape, 1, wxALIGN_CENTER_VERTICAL|wxEXPAND|wxLEFT, 5 );
+
+
+ m_sbSizerZonesSettings->Add( fgSizerCopperZonesOpts, 0, 0, 5 );
+
+
+ bSizerConnectionsLower->Add( m_sbSizerZonesSettings, 1, wxALL|wxEXPAND, 5 );
+
+ wxStaticBoxSizer* sbSizerThermalReliefs;
+ sbSizerThermalReliefs = new wxStaticBoxSizer( new wxStaticBox( m_connectionsPanel, wxID_ANY, _("Thermal Relief Overrides") ), wxVERTICAL );
+
+ wxFlexGridSizer* fgSizerThermalReliefs;
+ fgSizerThermalReliefs = new wxFlexGridSizer( 0, 3, 3, 0 );
+ fgSizerThermalReliefs->AddGrowableCol( 1 );
+ fgSizerThermalReliefs->SetFlexibleDirection( wxBOTH );
+ fgSizerThermalReliefs->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
+
+ m_thermalGapLabel = new wxStaticText( sbSizerThermalReliefs->GetStaticBox(), wxID_ANY, _("Relief gap:"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_thermalGapLabel->Wrap( -1 );
+ fgSizerThermalReliefs->Add( m_thermalGapLabel, 0, wxALIGN_CENTER_VERTICAL|wxLEFT, 5 );
+
+ m_thermalGapCtrl = new wxTextCtrl( sbSizerThermalReliefs->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
+ fgSizerThermalReliefs->Add( m_thermalGapCtrl, 0, wxALIGN_CENTER_VERTICAL|wxLEFT|wxEXPAND, 5 );
+
+ m_thermalGapUnits = new wxStaticText( sbSizerThermalReliefs->GetStaticBox(), wxID_ANY, _("mm"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_thermalGapUnits->Wrap( -1 );
+ fgSizerThermalReliefs->Add( m_thermalGapUnits, 0, wxALIGN_CENTER_VERTICAL|wxLEFT|wxRIGHT, 5 );
+
+ m_spokeWidthLabel = new wxStaticText( sbSizerThermalReliefs->GetStaticBox(), wxID_ANY, _("Spoke width:"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_spokeWidthLabel->Wrap( -1 );
+ fgSizerThermalReliefs->Add( m_spokeWidthLabel, 0, wxALIGN_CENTER_VERTICAL|wxLEFT, 5 );
+
+ m_spokeWidthCtrl = new wxTextCtrl( sbSizerThermalReliefs->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
+ fgSizerThermalReliefs->Add( m_spokeWidthCtrl, 0, wxEXPAND|wxALIGN_CENTER_VERTICAL|wxLEFT, 5 );
+
+ m_spokeWidthUnits = new wxStaticText( sbSizerThermalReliefs->GetStaticBox(), wxID_ANY, _("mm"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_spokeWidthUnits->Wrap( -1 );
+ fgSizerThermalReliefs->Add( m_spokeWidthUnits, 0, wxALIGN_CENTER_VERTICAL|wxLEFT|wxRIGHT, 5 );
+
+ m_spokeAngleLabel = new wxStaticText( sbSizerThermalReliefs->GetStaticBox(), wxID_ANY, _("Spoke angle:"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_spokeAngleLabel->Wrap( -1 );
+ fgSizerThermalReliefs->Add( m_spokeAngleLabel, 0, wxALIGN_CENTER_VERTICAL|wxLEFT|wxRIGHT, 5 );
+
+ m_spokeAngleCtrl = new wxTextCtrl( sbSizerThermalReliefs->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
+ fgSizerThermalReliefs->Add( m_spokeAngleCtrl, 0, wxEXPAND|wxLEFT, 5 );
+
+ m_spokeAngleUnits = new wxStaticText( sbSizerThermalReliefs->GetStaticBox(), wxID_ANY, _("deg"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_spokeAngleUnits->Wrap( -1 );
+ fgSizerThermalReliefs->Add( m_spokeAngleUnits, 0, wxALIGN_CENTER_VERTICAL|wxLEFT|wxRIGHT, 5 );
+
+
+ sbSizerThermalReliefs->Add( fgSizerThermalReliefs, 1, wxEXPAND, 5 );
+
+
+ bSizerConnectionsLower->Add( sbSizerThermalReliefs, 1, wxEXPAND|wxALL, 5 );
+
+
+ bSizerConnectionsMargins->Add( bSizerConnectionsLower, 0, wxEXPAND|wxTOP, 10 );
+
+
+ bSizerPanelConnections->Add( bSizerConnectionsMargins, 0, wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 5 );
+
+
+ m_connectionsPanel->SetSizer( bSizerPanelConnections );
+ m_connectionsPanel->Layout();
+ bSizerPanelConnections->Fit( m_connectionsPanel );
+ m_notebook->AddPage( m_connectionsPanel, _("Connections"), false );
m_localSettingsPanel = new wxPanel( m_notebook, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
wxBoxSizer* bSizerPanelClearance;
bSizerPanelClearance = new wxBoxSizer( wxVERTICAL );
@@ -698,94 +1013,6 @@ DIALOG_PAD_PROPERTIES_BASE::DIALOG_PAD_PROPERTIES_BASE( wxWindow* parent, wxWind
bSizerClearance->Add( sbClearancesSizer, 0, wxALL|wxEXPAND, 5 );
- wxBoxSizer* bSizerLower;
- bSizerLower = new wxBoxSizer( wxHORIZONTAL );
-
- m_sbSizerZonesSettings = new wxStaticBoxSizer( new wxStaticBox( m_localSettingsPanel, wxID_ANY, _("Connection to Copper Zones") ), wxVERTICAL );
-
- wxFlexGridSizer* fgSizerCopperZonesOpts;
- fgSizerCopperZonesOpts = new wxFlexGridSizer( 0, 2, 0, 0 );
- fgSizerCopperZonesOpts->AddGrowableCol( 1 );
- fgSizerCopperZonesOpts->SetFlexibleDirection( wxBOTH );
- fgSizerCopperZonesOpts->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
-
- m_staticText40 = new wxStaticText( m_sbSizerZonesSettings->GetStaticBox(), wxID_ANY, _("Pad connection:"), wxDefaultPosition, wxDefaultSize, 0 );
- m_staticText40->Wrap( -1 );
- fgSizerCopperZonesOpts->Add( m_staticText40, 0, wxALIGN_CENTER_VERTICAL|wxLEFT, 5 );
-
- wxString m_ZoneConnectionChoiceChoices[] = { _("From parent footprint"), _("Solid"), _("Thermal relief"), _("None") };
- int m_ZoneConnectionChoiceNChoices = sizeof( m_ZoneConnectionChoiceChoices ) / sizeof( wxString );
- m_ZoneConnectionChoice = new wxChoice( m_sbSizerZonesSettings->GetStaticBox(), wxID_ANY, wxDefaultPosition, wxDefaultSize, m_ZoneConnectionChoiceNChoices, m_ZoneConnectionChoiceChoices, 0 );
- m_ZoneConnectionChoice->SetSelection( 0 );
- fgSizerCopperZonesOpts->Add( m_ZoneConnectionChoice, 1, wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxLEFT, 5 );
-
- m_staticTextcps = new wxStaticText( m_sbSizerZonesSettings->GetStaticBox(), wxID_ANY, _("Zone knockout:"), wxDefaultPosition, wxDefaultSize, 0 );
- m_staticTextcps->Wrap( -1 );
- fgSizerCopperZonesOpts->Add( m_staticTextcps, 0, wxALIGN_CENTER_VERTICAL|wxLEFT|wxTOP, 5 );
-
- wxString m_ZoneCustomPadShapeChoices[] = { _("Pad shape"), _("Pad convex hull") };
- int m_ZoneCustomPadShapeNChoices = sizeof( m_ZoneCustomPadShapeChoices ) / sizeof( wxString );
- m_ZoneCustomPadShape = new wxChoice( m_sbSizerZonesSettings->GetStaticBox(), wxID_ANY, wxDefaultPosition, wxDefaultSize, m_ZoneCustomPadShapeNChoices, m_ZoneCustomPadShapeChoices, 0 );
- m_ZoneCustomPadShape->SetSelection( 0 );
- fgSizerCopperZonesOpts->Add( m_ZoneCustomPadShape, 1, wxTOP|wxBOTTOM|wxLEFT|wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
-
-
- m_sbSizerZonesSettings->Add( fgSizerCopperZonesOpts, 0, 0, 5 );
-
-
- bSizerLower->Add( m_sbSizerZonesSettings, 1, wxALL|wxEXPAND, 5 );
-
- wxStaticBoxSizer* sbSizerThermalReliefs;
- sbSizerThermalReliefs = new wxStaticBoxSizer( new wxStaticBox( m_localSettingsPanel, wxID_ANY, _("Thermal Relief Overrides") ), wxVERTICAL );
-
- wxFlexGridSizer* fgSizerThermalReliefs;
- fgSizerThermalReliefs = new wxFlexGridSizer( 0, 3, 0, 0 );
- fgSizerThermalReliefs->AddGrowableCol( 1 );
- fgSizerThermalReliefs->SetFlexibleDirection( wxBOTH );
- fgSizerThermalReliefs->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
-
- m_thermalGapLabel = new wxStaticText( sbSizerThermalReliefs->GetStaticBox(), wxID_ANY, _("Relief gap:"), wxDefaultPosition, wxDefaultSize, 0 );
- m_thermalGapLabel->Wrap( -1 );
- fgSizerThermalReliefs->Add( m_thermalGapLabel, 0, wxALIGN_CENTER_VERTICAL|wxLEFT, 5 );
-
- m_thermalGapCtrl = new wxTextCtrl( sbSizerThermalReliefs->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
- fgSizerThermalReliefs->Add( m_thermalGapCtrl, 0, wxALIGN_CENTER_VERTICAL|wxLEFT|wxEXPAND, 5 );
-
- m_thermalGapUnits = new wxStaticText( sbSizerThermalReliefs->GetStaticBox(), wxID_ANY, _("mm"), wxDefaultPosition, wxDefaultSize, 0 );
- m_thermalGapUnits->Wrap( -1 );
- fgSizerThermalReliefs->Add( m_thermalGapUnits, 0, wxALIGN_CENTER_VERTICAL|wxLEFT|wxRIGHT, 5 );
-
- m_spokeWidthLabel = new wxStaticText( sbSizerThermalReliefs->GetStaticBox(), wxID_ANY, _("Spoke width:"), wxDefaultPosition, wxDefaultSize, 0 );
- m_spokeWidthLabel->Wrap( -1 );
- fgSizerThermalReliefs->Add( m_spokeWidthLabel, 0, wxALIGN_CENTER_VERTICAL|wxLEFT|wxTOP, 5 );
-
- m_spokeWidthCtrl = new wxTextCtrl( sbSizerThermalReliefs->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
- fgSizerThermalReliefs->Add( m_spokeWidthCtrl, 0, wxEXPAND|wxLEFT|wxTOP|wxALIGN_CENTER_VERTICAL, 5 );
-
- m_spokeWidthUnits = new wxStaticText( sbSizerThermalReliefs->GetStaticBox(), wxID_ANY, _("mm"), wxDefaultPosition, wxDefaultSize, 0 );
- m_spokeWidthUnits->Wrap( -1 );
- fgSizerThermalReliefs->Add( m_spokeWidthUnits, 0, wxALIGN_CENTER_VERTICAL|wxLEFT|wxRIGHT, 5 );
-
- m_spokeAngleLabel = new wxStaticText( sbSizerThermalReliefs->GetStaticBox(), wxID_ANY, _("Spoke angle:"), wxDefaultPosition, wxDefaultSize, 0 );
- m_spokeAngleLabel->Wrap( -1 );
- fgSizerThermalReliefs->Add( m_spokeAngleLabel, 0, wxALIGN_CENTER_VERTICAL|wxLEFT|wxRIGHT, 5 );
-
- m_spokeAngleCtrl = new wxTextCtrl( sbSizerThermalReliefs->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
- fgSizerThermalReliefs->Add( m_spokeAngleCtrl, 0, wxEXPAND|wxTOP|wxBOTTOM|wxLEFT, 5 );
-
- m_spokeAngleUnits = new wxStaticText( sbSizerThermalReliefs->GetStaticBox(), wxID_ANY, _("deg"), wxDefaultPosition, wxDefaultSize, 0 );
- m_spokeAngleUnits->Wrap( -1 );
- fgSizerThermalReliefs->Add( m_spokeAngleUnits, 0, wxALIGN_CENTER_VERTICAL|wxLEFT|wxRIGHT, 5 );
-
-
- sbSizerThermalReliefs->Add( fgSizerThermalReliefs, 1, wxEXPAND, 5 );
-
-
- bSizerLower->Add( sbSizerThermalReliefs, 1, wxEXPAND|wxALL, 5 );
-
-
- bSizerClearance->Add( bSizerLower, 1, wxEXPAND, 5 );
-
bSizerPanelClearance->Add( bSizerClearance, 0, wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 5 );
@@ -793,7 +1020,7 @@ DIALOG_PAD_PROPERTIES_BASE::DIALOG_PAD_PROPERTIES_BASE( wxWindow* parent, wxWind
m_localSettingsPanel->SetSizer( bSizerPanelClearance );
m_localSettingsPanel->Layout();
bSizerPanelClearance->Fit( m_localSettingsPanel );
- m_notebook->AddPage( m_localSettingsPanel, _("Clearance Overrides and Settings"), false );
+ m_notebook->AddPage( m_localSettingsPanel, _("Clearance Overrides"), false );
m_panelCustomShapePrimitives = new wxPanel( m_notebook, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
m_bSizerPanelPrimitives = new wxBoxSizer( wxVERTICAL );
@@ -1054,6 +1281,32 @@ DIALOG_PAD_PROPERTIES_BASE::DIALOG_PAD_PROPERTIES_BASE( wxWindow* parent, wxWind
m_layerUserDwgs->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( DIALOG_PAD_PROPERTIES_BASE::OnSetLayers ), NULL, this );
m_layerECO1->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( DIALOG_PAD_PROPERTIES_BASE::OnSetLayers ), NULL, this );
m_layerECO2->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( DIALOG_PAD_PROPERTIES_BASE::OnSetLayers ), NULL, this );
+ m_cbTeardrops->Connect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( DIALOG_PAD_PROPERTIES_BASE::onTeardropsUpdateUi ), NULL, this );
+ m_cbPreferZoneConnection->Connect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( DIALOG_PAD_PROPERTIES_BASE::onTeardropsUpdateUi ), NULL, this );
+ m_cbTeardropsUseNextTrack->Connect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( DIALOG_PAD_PROPERTIES_BASE::onTeardropsUpdateUi ), NULL, this );
+ m_stHDRatio->Connect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( DIALOG_PAD_PROPERTIES_BASE::onTeardropsUpdateUi ), NULL, this );
+ m_spTeardropHDPercent->Connect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( DIALOG_PAD_PROPERTIES_BASE::onTeardropsUpdateUi ), NULL, this );
+ m_minTrackWidthUnits->Connect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( DIALOG_PAD_PROPERTIES_BASE::onTeardropsUpdateUi ), NULL, this );
+ m_minTrackWidthHint->Connect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( DIALOG_PAD_PROPERTIES_BASE::onTeardropsUpdateUi ), NULL, this );
+ m_teardropShapeLabel->Connect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( DIALOG_PAD_PROPERTIES_BASE::onTeardropsUpdateUi ), NULL, this );
+ m_bitmapTeardrop->Connect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( DIALOG_PAD_PROPERTIES_BASE::onTeardropsUpdateUi ), NULL, this );
+ m_edgesLabel->Connect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( DIALOG_PAD_PROPERTIES_BASE::onTeardropsUpdateUi ), NULL, this );
+ m_rbStraightLines->Connect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( DIALOG_PAD_PROPERTIES_BASE::onTeardropsUpdateUi ), NULL, this );
+ m_rbCurved->Connect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( DIALOG_PAD_PROPERTIES_BASE::onTeardropsUpdateUi ), NULL, this );
+ m_stHsetting->Connect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( DIALOG_PAD_PROPERTIES_BASE::onTeardropsUpdateUi ), NULL, this );
+ m_spTeardropLenPercent->Connect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( DIALOG_PAD_PROPERTIES_BASE::onTeardropsUpdateUi ), NULL, this );
+ m_stTeardropLenUnits->Connect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( DIALOG_PAD_PROPERTIES_BASE::onTeardropsUpdateUi ), NULL, this );
+ m_stMaxLen->Connect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( DIALOG_PAD_PROPERTIES_BASE::onTeardropsUpdateUi ), NULL, this );
+ m_tcTdMaxLen->Connect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( DIALOG_PAD_PROPERTIES_BASE::onTeardropsUpdateUi ), NULL, this );
+ m_stMaxLenUnits->Connect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( DIALOG_PAD_PROPERTIES_BASE::onTeardropsUpdateUi ), NULL, this );
+ m_stVsetting->Connect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( DIALOG_PAD_PROPERTIES_BASE::onTeardropsUpdateUi ), NULL, this );
+ m_spTeardropSizePercent->Connect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( DIALOG_PAD_PROPERTIES_BASE::onTeardropsUpdateUi ), NULL, this );
+ m_stLenPercent->Connect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( DIALOG_PAD_PROPERTIES_BASE::onTeardropsUpdateUi ), NULL, this );
+ m_stTdMaxSize->Connect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( DIALOG_PAD_PROPERTIES_BASE::onTeardropsUpdateUi ), NULL, this );
+ m_tcMaxHeight->Connect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( DIALOG_PAD_PROPERTIES_BASE::onTeardropsUpdateUi ), NULL, this );
+ m_stMaxHeightUnits->Connect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( DIALOG_PAD_PROPERTIES_BASE::onTeardropsUpdateUi ), NULL, this );
+ m_curvePointsLabel->Connect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( DIALOG_PAD_PROPERTIES_BASE::onTeardropCurvePointsUpdateUi ), NULL, this );
+ m_curvePointsCtrl->Connect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( DIALOG_PAD_PROPERTIES_BASE::onTeardropCurvePointsUpdateUi ), NULL, this );
m_clearanceCtrl->Connect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( DIALOG_PAD_PROPERTIES_BASE::OnValuesChanged ), NULL, this );
m_nonCopperWarningBook->Connect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( DIALOG_PAD_PROPERTIES_BASE::OnUpdateUINonCopperWarning ), NULL, this );
m_listCtrlPrimitives->Connect( wxEVT_LEFT_DCLICK, wxMouseEventHandler( DIALOG_PAD_PROPERTIES_BASE::onPrimitiveDClick ), NULL, this );
@@ -1114,6 +1367,32 @@ DIALOG_PAD_PROPERTIES_BASE::~DIALOG_PAD_PROPERTIES_BASE()
m_layerUserDwgs->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( DIALOG_PAD_PROPERTIES_BASE::OnSetLayers ), NULL, this );
m_layerECO1->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( DIALOG_PAD_PROPERTIES_BASE::OnSetLayers ), NULL, this );
m_layerECO2->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( DIALOG_PAD_PROPERTIES_BASE::OnSetLayers ), NULL, this );
+ m_cbTeardrops->Disconnect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( DIALOG_PAD_PROPERTIES_BASE::onTeardropsUpdateUi ), NULL, this );
+ m_cbPreferZoneConnection->Disconnect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( DIALOG_PAD_PROPERTIES_BASE::onTeardropsUpdateUi ), NULL, this );
+ m_cbTeardropsUseNextTrack->Disconnect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( DIALOG_PAD_PROPERTIES_BASE::onTeardropsUpdateUi ), NULL, this );
+ m_stHDRatio->Disconnect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( DIALOG_PAD_PROPERTIES_BASE::onTeardropsUpdateUi ), NULL, this );
+ m_spTeardropHDPercent->Disconnect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( DIALOG_PAD_PROPERTIES_BASE::onTeardropsUpdateUi ), NULL, this );
+ m_minTrackWidthUnits->Disconnect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( DIALOG_PAD_PROPERTIES_BASE::onTeardropsUpdateUi ), NULL, this );
+ m_minTrackWidthHint->Disconnect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( DIALOG_PAD_PROPERTIES_BASE::onTeardropsUpdateUi ), NULL, this );
+ m_teardropShapeLabel->Disconnect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( DIALOG_PAD_PROPERTIES_BASE::onTeardropsUpdateUi ), NULL, this );
+ m_bitmapTeardrop->Disconnect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( DIALOG_PAD_PROPERTIES_BASE::onTeardropsUpdateUi ), NULL, this );
+ m_edgesLabel->Disconnect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( DIALOG_PAD_PROPERTIES_BASE::onTeardropsUpdateUi ), NULL, this );
+ m_rbStraightLines->Disconnect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( DIALOG_PAD_PROPERTIES_BASE::onTeardropsUpdateUi ), NULL, this );
+ m_rbCurved->Disconnect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( DIALOG_PAD_PROPERTIES_BASE::onTeardropsUpdateUi ), NULL, this );
+ m_stHsetting->Disconnect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( DIALOG_PAD_PROPERTIES_BASE::onTeardropsUpdateUi ), NULL, this );
+ m_spTeardropLenPercent->Disconnect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( DIALOG_PAD_PROPERTIES_BASE::onTeardropsUpdateUi ), NULL, this );
+ m_stTeardropLenUnits->Disconnect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( DIALOG_PAD_PROPERTIES_BASE::onTeardropsUpdateUi ), NULL, this );
+ m_stMaxLen->Disconnect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( DIALOG_PAD_PROPERTIES_BASE::onTeardropsUpdateUi ), NULL, this );
+ m_tcTdMaxLen->Disconnect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( DIALOG_PAD_PROPERTIES_BASE::onTeardropsUpdateUi ), NULL, this );
+ m_stMaxLenUnits->Disconnect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( DIALOG_PAD_PROPERTIES_BASE::onTeardropsUpdateUi ), NULL, this );
+ m_stVsetting->Disconnect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( DIALOG_PAD_PROPERTIES_BASE::onTeardropsUpdateUi ), NULL, this );
+ m_spTeardropSizePercent->Disconnect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( DIALOG_PAD_PROPERTIES_BASE::onTeardropsUpdateUi ), NULL, this );
+ m_stLenPercent->Disconnect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( DIALOG_PAD_PROPERTIES_BASE::onTeardropsUpdateUi ), NULL, this );
+ m_stTdMaxSize->Disconnect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( DIALOG_PAD_PROPERTIES_BASE::onTeardropsUpdateUi ), NULL, this );
+ m_tcMaxHeight->Disconnect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( DIALOG_PAD_PROPERTIES_BASE::onTeardropsUpdateUi ), NULL, this );
+ m_stMaxHeightUnits->Disconnect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( DIALOG_PAD_PROPERTIES_BASE::onTeardropsUpdateUi ), NULL, this );
+ m_curvePointsLabel->Disconnect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( DIALOG_PAD_PROPERTIES_BASE::onTeardropCurvePointsUpdateUi ), NULL, this );
+ m_curvePointsCtrl->Disconnect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( DIALOG_PAD_PROPERTIES_BASE::onTeardropCurvePointsUpdateUi ), NULL, this );
m_clearanceCtrl->Disconnect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( DIALOG_PAD_PROPERTIES_BASE::OnValuesChanged ), NULL, this );
m_nonCopperWarningBook->Disconnect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( DIALOG_PAD_PROPERTIES_BASE::OnUpdateUINonCopperWarning ), NULL, this );
m_listCtrlPrimitives->Disconnect( wxEVT_LEFT_DCLICK, wxMouseEventHandler( DIALOG_PAD_PROPERTIES_BASE::onPrimitiveDClick ), NULL, this );
diff --git a/pcbnew/dialogs/dialog_pad_properties_base.fbp b/pcbnew/dialogs/dialog_pad_properties_base.fbp
index 4f499c03da..274b5a6f7f 100644
--- a/pcbnew/dialogs/dialog_pad_properties_base.fbp
+++ b/pcbnew/dialogs/dialog_pad_properties_base.fbp
@@ -75,7 +75,7 @@
12
wxEXPAND|wxTOP|wxBOTTOM
0
-
+
1
1
1
@@ -6869,11 +6869,3067 @@
-
+
- Clearance Overrides and Settings
+ Connections
0
-
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+
+ 0
+
+
+ 0
+
+ 1
+ m_connectionsPanel
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+ 0
+
+
+
+ wxTAB_TRAVERSAL
+
+
+ bSizerPanelConnections
+ wxVERTICAL
+ none
+
+ 5
+ wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT
+ 0
+
+
+ bSizerConnectionsMargins
+ wxVERTICAL
+ none
+
+ 5
+ wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT
+ 1
+
+ wxID_ANY
+ Teardrops
+
+ bSizerTeardrops
+ wxVERTICAL
+ 1
+ none
+
+ 5
+ wxEXPAND|wxBOTTOM
+ 0
+
+
+ m_legacyTeardropsWarning
+ wxHORIZONTAL
+ protected
+
+ 5
+ wxALIGN_CENTER_VERTICAL|wxRIGHT
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+
+ 0
+
+
+ 0
+
+ 1
+ m_legacyTeardropsIcon
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+ ; ; forward_declare
+ 0
+
+
+
+
+
+
+
+ 5
+ wxALIGN_CENTER_VERTICAL
+ 1
+
+
+ bSizer42
+ wxVERTICAL
+ none
+
+ 5
+ wxRIGHT|wxLEFT
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ Board contains legacy teardrops.
+ 0
+
+ 0
+
+
+ 0
+
+ 1
+ m_staticText85
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+ ; ; forward_declare
+ 0
+
+
+
+
+ -1
+
+
+
+ 5
+ wxBOTTOM|wxRIGHT|wxLEFT
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ Use Edit > Edit Teardrops to apply automatic teardrops.
+ 0
+
+ 0
+
+
+ 0
+
+ 1
+ m_staticText851
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+ ; ; forward_declare
+ 0
+
+
+
+
+ -1
+
+
+
+
+
+
+
+ 5
+ wxEXPAND
+ 0
+
+
+ bSizerCols11
+ wxHORIZONTAL
+ none
+
+ 3
+ wxEXPAND|wxTOP
+ 1
+
+
+ bSizerLeftCol11
+ wxVERTICAL
+ none
+
+ 5
+ wxBOTTOM|wxRIGHT|wxLEFT
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ Add teardrops on pad's track connections
+
+ 0
+
+
+ 0
+
+ 1
+ m_cbTeardrops
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+ ; ; forward_declare
+ 0
+
+
+ wxFILTER_NONE
+ wxDefaultValidator
+
+
+
+
+ onTeardropsUpdateUi
+
+
+
+ 5
+ wxBOTTOM|wxRIGHT|wxLEFT
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ Prefer zone connection
+
+ 0
+
+
+ 0
+
+ 1
+ m_cbPreferZoneConnection
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+ ; ; forward_declare
+ 0
+
+
+ wxFILTER_NONE
+ wxDefaultValidator
+
+
+
+
+ onTeardropsUpdateUi
+
+
+
+ 5
+ wxBOTTOM|wxRIGHT|wxLEFT
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ Allow teardrops to span 2 track segments
+
+ 0
+
+
+ 0
+
+ 1
+ m_cbTeardropsUseNextTrack
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+ ; ; forward_declare
+ 0
+ Allows a teardrop to spread over 2 tracks if the first track segment is too short
+
+ wxFILTER_NONE
+ wxDefaultValidator
+
+
+
+
+ onTeardropsUpdateUi
+
+
+
+
+
+ 5
+ wxEXPAND
+ 0
+
+ 0
+ protected
+ 15
+
+
+
+ 10
+ wxEXPAND|wxLEFT
+ 1
+
+
+ bSizerRightCol11
+ wxVERTICAL
+ none
+
+ 3
+ wxEXPAND
+ 0
+
+
+ bSizer39
+ wxHORIZONTAL
+ none
+
+ 5
+ wxALIGN_CENTER_VERTICAL
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ Maximum track width:
+ 0
+
+ 0
+
+
+ 0
+
+ 1
+ m_stHDRatio
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+ ; ; forward_declare
+ 0
+ Max pad/via size to track width ratio to create a teardrop.
100 always creates a teardrop.
+
+
+
+ -1
+ onTeardropsUpdateUi
+
+
+
+ 5
+ wxEXPAND|wxRIGHT|wxLEFT
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ 10
+ 90
+ 100
+
+ 0
+
+ 0
+
+ 0
+
+ 1
+ m_spTeardropHDPercent
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+ wxSP_ARROW_KEYS
+ ; ; forward_declare
+ 0
+ Tracks which are similar in size to the pad do not need teardrops.
+
+
+
+
+ onTeardropsUpdateUi
+
+
+
+ 5
+ wxRIGHT|wxALIGN_CENTER_VERTICAL
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ %
+ 0
+
+ 0
+
+
+ 0
+
+ 1
+ m_minTrackWidthUnits
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+ ; ; forward_declare
+ 0
+
+
+
+
+ -1
+ onTeardropsUpdateUi
+
+
+
+
+
+ 3
+ wxTOP|wxBOTTOM
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ (as a percentage of pad size)
+ 0
+
+ 0
+
+
+ 0
+
+ 1
+ m_minTrackWidthHint
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+ ; ; forward_declare
+ 0
+
+
+
+
+ -1
+ onTeardropsUpdateUi
+
+
+
+
+
+
+
+ 5
+ wxEXPAND
+ 0
+
+ 5
+ protected
+ 0
+
+
+
+ 5
+ wxTOP|wxRIGHT|wxLEFT
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ Teardrop Shape
+ 0
+
+ 0
+
+
+ 0
+
+ 1
+ m_teardropShapeLabel
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+ ; ; forward_declare
+ 0
+
+
+
+
+ -1
+ onTeardropsUpdateUi
+
+
+
+ 5
+ wxEXPAND
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+
+ 0
+
+
+ 0
+
+ 1
+ m_staticline51
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+ wxLI_HORIZONTAL
+ ; ; forward_declare
+ 0
+
+
+
+
+
+
+
+ 5
+ wxEXPAND|wxBOTTOM
+ 1
+
+
+ bSizerShapeColumns
+ wxHORIZONTAL
+ none
+
+ 10
+ wxEXPAND|wxRIGHT
+ 1
+
+
+ bSizerLeftCol
+ wxVERTICAL
+ none
+
+ 5
+ wxALIGN_CENTER_HORIZONTAL|wxRIGHT|wxLEFT
+ 1
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+
+ 0
+
+
+ 0
+
+ 1
+ m_bitmapTeardrop
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+ ; ; forward_declare
+ 0
+
+
+
+
+ onTeardropsUpdateUi
+
+
+
+ 5
+ wxEXPAND
+ 0
+
+
+ bSizer41
+ wxHORIZONTAL
+ none
+
+ 5
+ wxALL|wxALIGN_CENTER_VERTICAL
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ Edges:
+ 0
+
+ 0
+
+
+ 0
+
+ 1
+ m_edgesLabel
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+ ; ; forward_declare
+ 0
+
+
+
+
+ -1
+ onTeardropsUpdateUi
+
+
+
+ 5
+ wxALL|wxALIGN_CENTER_VERTICAL
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ Straight lines
+
+ 0
+
+
+ 0
+
+ 1
+ m_rbStraightLines
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+ wxRB_GROUP
+ ; ; forward_declare
+ 0
+
+
+ wxFILTER_NONE
+ wxDefaultValidator
+
+ 0
+
+
+
+ onTeardropsUpdateUi
+
+
+
+ 5
+ wxALL|wxALIGN_CENTER_VERTICAL
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ Curved
+
+ 0
+
+
+ 0
+
+ 1
+ m_rbCurved
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+ ; ; forward_declare
+ 0
+
+
+ wxFILTER_NONE
+ wxDefaultValidator
+
+ 0
+
+
+
+ onTeardropsUpdateUi
+
+
+
+
+
+
+
+ 5
+ wxEXPAND
+ 0
+
+ 0
+ protected
+ 10
+
+
+
+ 10
+ wxEXPAND|wxTOP|wxLEFT
+ 1
+
+ 3
+ wxBOTH
+ 1
+
+ 0
+
+ fgSizerRightCol
+ wxFLEX_GROWMODE_SPECIFIED
+ none
+ 0
+ 2
+
+ 5
+ wxALIGN_CENTER_VERTICAL
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ Best length:
+ 0
+
+ 0
+
+
+ 0
+
+ 1
+ m_stHsetting
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+ ; ; forward_declare
+ 0
+
+
+
+
+ -1
+ onTeardropsUpdateUi
+
+
+
+ 5
+ wxEXPAND|wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ 10
+ 40.000000
+ 100
+
+ 0
+
+ 20
+
+ 0
+
+ 1
+ m_spTeardropLenPercent
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+ wxSP_ARROW_KEYS
+ ; ; forward_declare
+ 0
+
+
+
+
+
+ onTeardropsUpdateUi
+
+
+
+ 5
+ wxALIGN_CENTER_VERTICAL|wxRIGHT
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ %
+ 0
+
+ 0
+
+
+ 0
+
+ 1
+ m_stTeardropLenUnits
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+ ; ; forward_declare
+ 0
+
+
+
+
+ -1
+ onTeardropsUpdateUi
+
+
+
+ 5
+ wxALIGN_CENTER_VERTICAL
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ Max length:
+ 0
+
+ 0
+
+
+ 0
+
+ 1
+ m_stMaxLen
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+ ; ; forward_declare
+ 0
+
+
+
+
+ -1
+ onTeardropsUpdateUi
+
+
+
+ 5
+ wxEXPAND|wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+
+ 0
+
+
+
+ 0
+
+ 1
+ m_tcTdMaxLen
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+ ; ; forward_declare
+ 0
+
+
+ wxFILTER_NONE
+ wxDefaultValidator
+
+
+
+
+
+ onTeardropsUpdateUi
+
+
+
+ 5
+ wxALIGN_CENTER_VERTICAL|wxRIGHT
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ mm
+ 0
+
+ 0
+
+
+ 0
+
+ 1
+ m_stMaxLenUnits
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+ ; ; forward_declare
+ 0
+
+
+
+
+ -1
+ onTeardropsUpdateUi
+
+
+
+ 5
+ wxEXPAND
+ 1
+
+ 5
+ protected
+ 0
+
+
+
+ 5
+ wxEXPAND
+ 1
+
+ 0
+ protected
+ 0
+
+
+
+ 5
+ wxEXPAND
+ 1
+
+ 0
+ protected
+ 0
+
+
+
+ 10
+ wxALIGN_CENTER_VERTICAL
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ Best height:
+ 0
+
+ 0
+
+
+ 0
+
+ 1
+ m_stVsetting
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+ ; ; forward_declare
+ 0
+
+
+
+
+ -1
+ onTeardropsUpdateUi
+
+
+
+ 5
+ wxEXPAND|wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ 10
+ 100.000000
+ 100
+
+ 0
+
+ 60
+
+ 0
+
+ 1
+ m_spTeardropSizePercent
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+ wxSP_ARROW_KEYS
+ ; ; forward_declare
+ 0
+
+
+
+
+
+ onTeardropsUpdateUi
+
+
+
+ 5
+ wxALIGN_CENTER_VERTICAL|wxRIGHT
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ %
+ 0
+
+ 0
+
+
+ 0
+
+ 1
+ m_stLenPercent
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+ ; ; forward_declare
+ 0
+
+
+
+
+ -1
+ onTeardropsUpdateUi
+
+
+
+ 10
+ wxALIGN_CENTER_VERTICAL
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ Max height:
+ 0
+
+ 0
+
+
+ 0
+
+ 1
+ m_stTdMaxSize
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+ ; ; forward_declare
+ 0
+
+
+
+
+ -1
+ onTeardropsUpdateUi
+
+
+
+ 5
+ wxEXPAND|wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+
+ 0
+
+
+
+ 0
+
+ 1
+ m_tcMaxHeight
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+ ; ; forward_declare
+ 0
+
+
+ wxFILTER_NONE
+ wxDefaultValidator
+
+
+
+
+
+ onTeardropsUpdateUi
+
+
+
+ 5
+ wxALIGN_CENTER_VERTICAL|wxRIGHT
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ mm
+ 0
+
+ 0
+
+
+ 0
+
+ 1
+ m_stMaxHeightUnits
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+ ; ; forward_declare
+ 0
+
+
+
+
+ -1
+ onTeardropsUpdateUi
+
+
+
+ 5
+ wxEXPAND
+ 1
+
+ 0
+ protected
+ 0
+
+
+
+ 5
+ wxEXPAND
+ 1
+
+ 0
+ protected
+ 0
+
+
+
+ 5
+ wxEXPAND
+ 1
+
+ 5
+ protected
+ 0
+
+
+
+ 5
+ wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ Curve points:
+ 0
+
+ 0
+
+
+ 0
+
+ 1
+ m_curvePointsLabel
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+ ; ; forward_declare
+ 0
+
+
+
+
+ -1
+ onTeardropCurvePointsUpdateUi
+
+
+
+ 5
+ wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ 5
+ 10
+
+ 0
+
+ 3
+
+ 0
+
+ 1
+ m_curvePointsCtrl
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+ wxSP_ARROW_KEYS
+ ; ; forward_declare
+ 0
+
+
+
+
+
+ onTeardropCurvePointsUpdateUi
+
+
+
+
+
+
+
+
+
+ 10
+ wxEXPAND|wxTOP
+ 0
+
+
+ bSizerConnectionsLower
+ wxHORIZONTAL
+ none
+
+ 5
+ wxALL|wxEXPAND
+ 1
+
+ wxID_ANY
+ Connection to Copper Zones
+
+ m_sbSizerZonesSettings
+ wxVERTICAL
+ 1
+ protected
+
+ 5
+
+ 0
+
+ 2
+ wxBOTH
+ 1
+
+ 0
+
+ fgSizerCopperZonesOpts
+ wxFLEX_GROWMODE_SPECIFIED
+ none
+ 0
+ 5
+
+ 5
+ wxALIGN_CENTER_VERTICAL|wxLEFT
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ Pad connection:
+ 0
+
+ 0
+
+
+ 0
+
+ 1
+ m_padConnectionLabel
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+
+ 0
+
+
+
+
+ -1
+
+
+
+ 5
+ wxALIGN_CENTER_VERTICAL|wxLEFT
+ 1
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ "From parent footprint" "Solid" "Thermal relief" "None"
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+
+ 0
+
+
+ 0
+
+ 1
+ m_ZoneConnectionChoice
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 0
+ 1
+
+
+
+ 0
+
+
+ wxFILTER_NONE
+ wxDefaultValidator
+
+
+
+
+
+
+
+ 5
+ wxALIGN_CENTER_VERTICAL|wxLEFT
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ Zone knockout:
+ 0
+
+ 0
+
+
+ 0
+
+ 1
+ m_zoneKnockoutLabel
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+
+ 0
+
+
+
+
+ -1
+
+
+
+ 5
+ wxALIGN_CENTER_VERTICAL|wxEXPAND|wxLEFT
+ 1
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ "Pad shape" "Pad convex hull"
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+
+ 0
+
+
+ 0
+
+ 1
+ m_ZoneCustomPadShape
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 0
+ 1
+
+
+
+ 0
+
+
+ wxFILTER_NONE
+ wxDefaultValidator
+
+
+
+
+
+
+
+
+
+
+
+ 5
+ wxEXPAND|wxALL
+ 1
+
+ wxID_ANY
+ Thermal Relief Overrides
+
+ sbSizerThermalReliefs
+ wxVERTICAL
+ 1
+ none
+
+ 5
+ wxEXPAND
+ 1
+
+ 3
+ wxBOTH
+ 1
+
+ 0
+
+ fgSizerThermalReliefs
+ wxFLEX_GROWMODE_SPECIFIED
+ none
+ 0
+ 3
+
+ 5
+ wxALIGN_CENTER_VERTICAL|wxLEFT
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ Relief gap:
+ 0
+
+ 0
+
+
+ 0
+
+ 1
+ m_thermalGapLabel
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+
+ 0
+
+
+
+
+ -1
+
+
+
+ 5
+ wxALIGN_CENTER_VERTICAL|wxLEFT|wxEXPAND
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+
+ 0
+
+ 0
+
+ 0
+
+ 1
+ m_thermalGapCtrl
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+ ; ; forward_declare
+ 0
+
+
+ wxFILTER_NONE
+ wxDefaultValidator
+
+
+
+
+
+
+
+
+ 5
+ wxALIGN_CENTER_VERTICAL|wxLEFT|wxRIGHT
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ mm
+ 0
+
+ 0
+
+
+ 0
+
+ 1
+ m_thermalGapUnits
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+
+ 0
+
+
+
+
+ -1
+
+
+
+ 5
+ wxALIGN_CENTER_VERTICAL|wxLEFT
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ Spoke width:
+ 0
+
+ 0
+
+
+ 0
+
+ 1
+ m_spokeWidthLabel
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+
+ 0
+
+
+
+
+ -1
+
+
+
+ 5
+ wxEXPAND|wxALIGN_CENTER_VERTICAL|wxLEFT
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+
+ 0
+
+ 0
+
+ 0
+
+ 1
+ m_spokeWidthCtrl
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+ ; ; forward_declare
+ 0
+
+
+ wxFILTER_NONE
+ wxDefaultValidator
+
+
+
+
+
+
+
+
+ 5
+ wxALIGN_CENTER_VERTICAL|wxLEFT|wxRIGHT
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ mm
+ 0
+
+ 0
+
+
+ 0
+
+ 1
+ m_spokeWidthUnits
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+
+ 0
+
+
+
+
+ -1
+
+
+
+ 5
+ wxALIGN_CENTER_VERTICAL|wxLEFT|wxRIGHT
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ Spoke angle:
+ 0
+
+ 0
+
+
+ 0
+
+ 1
+ m_spokeAngleLabel
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+ ; ; forward_declare
+ 0
+
+
+
+
+ -1
+
+
+
+ 5
+ wxEXPAND|wxLEFT
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+
+ 0
+
+
+
+ 0
+
+ 1
+ m_spokeAngleCtrl
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+ ; ; forward_declare
+ 0
+
+
+ wxFILTER_NONE
+ wxDefaultValidator
+
+
+
+
+
+
+
+
+ 5
+ wxALIGN_CENTER_VERTICAL|wxLEFT|wxRIGHT
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ deg
+ 0
+
+ 0
+
+
+ 0
+
+ 1
+ m_spokeAngleUnits
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+ ; ; forward_declare
+ 0
+
+
+
+
+ -1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Clearance Overrides
+ 0
+
1
1
1
@@ -6924,16 +9980,16 @@
wxTAB_TRAVERSAL
-
+
bSizerPanelClearance
wxVERTICAL
none
-
+
5
wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT
0
-
+
bSizerClearance
wxVERTICAL
@@ -8321,889 +11377,6 @@
-
- 5
- wxEXPAND
- 1
-
-
- bSizerLower
- wxHORIZONTAL
- none
-
- 5
- wxALL|wxEXPAND
- 1
-
- wxID_ANY
- Connection to Copper Zones
-
- m_sbSizerZonesSettings
- wxVERTICAL
- 1
- protected
-
- 5
-
- 0
-
- 2
- wxBOTH
- 1
-
- 0
-
- fgSizerCopperZonesOpts
- wxFLEX_GROWMODE_SPECIFIED
- none
- 0
- 0
-
- 5
- wxALIGN_CENTER_VERTICAL|wxLEFT
- 0
-
- 1
- 1
- 1
- 1
-
-
-
-
-
-
-
- 1
- 0
- 1
-
- 1
- 0
- Dock
- 0
- Left
- 1
-
- 1
-
- 0
- 0
- wxID_ANY
- Pad connection:
- 0
-
- 0
-
-
- 0
-
- 1
- m_staticText40
- 1
-
-
- protected
- 1
-
- Resizable
- 1
-
-
-
- 0
-
-
-
-
- -1
-
-
-
- 5
- wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxLEFT
- 1
-
- 1
- 1
- 1
- 1
-
-
-
-
-
-
-
- 1
- 0
- "From parent footprint" "Solid" "Thermal relief" "None"
- 1
-
- 1
- 0
- Dock
- 0
- Left
- 1
-
- 1
-
- 0
- 0
- wxID_ANY
-
- 0
-
-
- 0
-
- 1
- m_ZoneConnectionChoice
- 1
-
-
- protected
- 1
-
- Resizable
- 0
- 1
-
-
-
- 0
-
-
- wxFILTER_NONE
- wxDefaultValidator
-
-
-
-
-
-
-
- 5
- wxALIGN_CENTER_VERTICAL|wxLEFT|wxTOP
- 0
-
- 1
- 1
- 1
- 1
-
-
-
-
-
-
-
- 1
- 0
- 1
-
- 1
- 0
- Dock
- 0
- Left
- 1
-
- 1
-
- 0
- 0
- wxID_ANY
- Zone knockout:
- 0
-
- 0
-
-
- 0
-
- 1
- m_staticTextcps
- 1
-
-
- protected
- 1
-
- Resizable
- 1
-
-
-
- 0
-
-
-
-
- -1
-
-
-
- 5
- wxTOP|wxBOTTOM|wxLEFT|wxALIGN_CENTER_VERTICAL|wxEXPAND
- 1
-
- 1
- 1
- 1
- 1
-
-
-
-
-
-
-
- 1
- 0
- "Pad shape" "Pad convex hull"
- 1
-
- 1
- 0
- Dock
- 0
- Left
- 1
-
- 1
-
- 0
- 0
- wxID_ANY
-
- 0
-
-
- 0
-
- 1
- m_ZoneCustomPadShape
- 1
-
-
- protected
- 1
-
- Resizable
- 0
- 1
-
-
-
- 0
-
-
- wxFILTER_NONE
- wxDefaultValidator
-
-
-
-
-
-
-
-
-
-
-
- 5
- wxEXPAND|wxALL
- 1
-
- wxID_ANY
- Thermal Relief Overrides
-
- sbSizerThermalReliefs
- wxVERTICAL
- 1
- none
-
- 5
- wxEXPAND
- 1
-
- 3
- wxBOTH
- 1
-
- 0
-
- fgSizerThermalReliefs
- wxFLEX_GROWMODE_SPECIFIED
- none
- 0
- 0
-
- 5
- wxALIGN_CENTER_VERTICAL|wxLEFT
- 0
-
- 1
- 1
- 1
- 1
-
-
-
-
-
-
-
- 1
- 0
- 1
-
- 1
- 0
- Dock
- 0
- Left
- 1
-
- 1
-
- 0
- 0
- wxID_ANY
- Relief gap:
- 0
-
- 0
-
-
- 0
-
- 1
- m_thermalGapLabel
- 1
-
-
- protected
- 1
-
- Resizable
- 1
-
-
-
- 0
-
-
-
-
- -1
-
-
-
- 5
- wxALIGN_CENTER_VERTICAL|wxLEFT|wxEXPAND
- 0
-
- 1
- 1
- 1
- 1
-
-
-
-
-
-
-
- 1
- 0
- 1
-
- 1
- 0
- Dock
- 0
- Left
- 1
-
- 1
-
- 0
- 0
- wxID_ANY
-
- 0
-
- 0
-
- 0
-
- 1
- m_thermalGapCtrl
- 1
-
-
- protected
- 1
-
- Resizable
- 1
-
-
- ; ; forward_declare
- 0
-
-
- wxFILTER_NONE
- wxDefaultValidator
-
-
-
-
-
-
-
-
- 5
- wxALIGN_CENTER_VERTICAL|wxLEFT|wxRIGHT
- 0
-
- 1
- 1
- 1
- 1
-
-
-
-
-
-
-
- 1
- 0
- 1
-
- 1
- 0
- Dock
- 0
- Left
- 1
-
- 1
-
- 0
- 0
- wxID_ANY
- mm
- 0
-
- 0
-
-
- 0
-
- 1
- m_thermalGapUnits
- 1
-
-
- protected
- 1
-
- Resizable
- 1
-
-
-
- 0
-
-
-
-
- -1
-
-
-
- 5
- wxALIGN_CENTER_VERTICAL|wxLEFT|wxTOP
- 0
-
- 1
- 1
- 1
- 1
-
-
-
-
-
-
-
- 1
- 0
- 1
-
- 1
- 0
- Dock
- 0
- Left
- 1
-
- 1
-
- 0
- 0
- wxID_ANY
- Spoke width:
- 0
-
- 0
-
-
- 0
-
- 1
- m_spokeWidthLabel
- 1
-
-
- protected
- 1
-
- Resizable
- 1
-
-
-
- 0
-
-
-
-
- -1
-
-
-
- 5
- wxEXPAND|wxLEFT|wxTOP|wxALIGN_CENTER_VERTICAL
- 0
-
- 1
- 1
- 1
- 1
-
-
-
-
-
-
-
- 1
- 0
- 1
-
- 1
- 0
- Dock
- 0
- Left
- 1
-
- 1
-
- 0
- 0
- wxID_ANY
-
- 0
-
- 0
-
- 0
-
- 1
- m_spokeWidthCtrl
- 1
-
-
- protected
- 1
-
- Resizable
- 1
-
-
- ; ; forward_declare
- 0
-
-
- wxFILTER_NONE
- wxDefaultValidator
-
-
-
-
-
-
-
-
- 5
- wxALIGN_CENTER_VERTICAL|wxLEFT|wxRIGHT
- 0
-
- 1
- 1
- 1
- 1
-
-
-
-
-
-
-
- 1
- 0
- 1
-
- 1
- 0
- Dock
- 0
- Left
- 1
-
- 1
-
- 0
- 0
- wxID_ANY
- mm
- 0
-
- 0
-
-
- 0
-
- 1
- m_spokeWidthUnits
- 1
-
-
- protected
- 1
-
- Resizable
- 1
-
-
-
- 0
-
-
-
-
- -1
-
-
-
- 5
- wxALIGN_CENTER_VERTICAL|wxLEFT|wxRIGHT
- 0
-
- 1
- 1
- 1
- 1
-
-
-
-
-
-
-
- 1
- 0
- 1
-
- 1
- 0
- Dock
- 0
- Left
- 1
-
- 1
-
- 0
- 0
- wxID_ANY
- Spoke angle:
- 0
-
- 0
-
-
- 0
-
- 1
- m_spokeAngleLabel
- 1
-
-
- protected
- 1
-
- Resizable
- 1
-
-
- ; ; forward_declare
- 0
-
-
-
-
- -1
-
-
-
- 5
- wxEXPAND|wxTOP|wxBOTTOM|wxLEFT
- 0
-
- 1
- 1
- 1
- 1
-
-
-
-
-
-
-
- 1
- 0
- 1
-
- 1
- 0
- Dock
- 0
- Left
- 1
-
- 1
-
- 0
- 0
- wxID_ANY
-
- 0
-
-
-
- 0
-
- 1
- m_spokeAngleCtrl
- 1
-
-
- protected
- 1
-
- Resizable
- 1
-
-
- ; ; forward_declare
- 0
-
-
- wxFILTER_NONE
- wxDefaultValidator
-
-
-
-
-
-
-
-
- 5
- wxALIGN_CENTER_VERTICAL|wxLEFT|wxRIGHT
- 0
-
- 1
- 1
- 1
- 1
-
-
-
-
-
-
-
- 1
- 0
- 1
-
- 1
- 0
- Dock
- 0
- Left
- 1
-
- 1
-
- 0
- 0
- wxID_ANY
- deg
- 0
-
- 0
-
-
- 0
-
- 1
- m_spokeAngleUnits
- 1
-
-
- protected
- 1
-
- Resizable
- 1
-
-
- ; ; forward_declare
- 0
-
-
-
-
- -1
-
-
-
-
-
-
-
-
diff --git a/pcbnew/dialogs/dialog_pad_properties_base.h b/pcbnew/dialogs/dialog_pad_properties_base.h
index e9595842ee..56f74ddaf3 100644
--- a/pcbnew/dialogs/dialog_pad_properties_base.h
+++ b/pcbnew/dialogs/dialog_pad_properties_base.h
@@ -35,6 +35,8 @@ class wxListView;
#include
#include
#include
+#include
+#include
#include
#include
#include
@@ -167,6 +169,52 @@ class DIALOG_PAD_PROPERTIES_BASE : public DIALOG_SHIM
wxCheckBox* m_layerECO2;
wxStaticText* m_staticTextFabProperty;
wxChoice* m_choiceFabProperty;
+ wxPanel* m_connectionsPanel;
+ wxBoxSizer* m_legacyTeardropsWarning;
+ wxStaticBitmap* m_legacyTeardropsIcon;
+ wxStaticText* m_staticText85;
+ wxStaticText* m_staticText851;
+ wxCheckBox* m_cbTeardrops;
+ wxCheckBox* m_cbPreferZoneConnection;
+ wxCheckBox* m_cbTeardropsUseNextTrack;
+ wxStaticText* m_stHDRatio;
+ wxSpinCtrlDouble* m_spTeardropHDPercent;
+ wxStaticText* m_minTrackWidthUnits;
+ wxStaticText* m_minTrackWidthHint;
+ wxStaticText* m_teardropShapeLabel;
+ wxStaticLine* m_staticline51;
+ wxStaticBitmap* m_bitmapTeardrop;
+ wxStaticText* m_edgesLabel;
+ wxRadioButton* m_rbStraightLines;
+ wxRadioButton* m_rbCurved;
+ wxStaticText* m_stHsetting;
+ wxSpinCtrlDouble* m_spTeardropLenPercent;
+ wxStaticText* m_stTeardropLenUnits;
+ wxStaticText* m_stMaxLen;
+ wxTextCtrl* m_tcTdMaxLen;
+ wxStaticText* m_stMaxLenUnits;
+ wxStaticText* m_stVsetting;
+ wxSpinCtrlDouble* m_spTeardropSizePercent;
+ wxStaticText* m_stLenPercent;
+ wxStaticText* m_stTdMaxSize;
+ wxTextCtrl* m_tcMaxHeight;
+ wxStaticText* m_stMaxHeightUnits;
+ wxStaticText* m_curvePointsLabel;
+ wxSpinCtrl* m_curvePointsCtrl;
+ wxStaticBoxSizer* m_sbSizerZonesSettings;
+ wxStaticText* m_padConnectionLabel;
+ wxChoice* m_ZoneConnectionChoice;
+ wxStaticText* m_zoneKnockoutLabel;
+ wxChoice* m_ZoneCustomPadShape;
+ wxStaticText* m_thermalGapLabel;
+ wxTextCtrl* m_thermalGapCtrl;
+ wxStaticText* m_thermalGapUnits;
+ wxStaticText* m_spokeWidthLabel;
+ wxTextCtrl* m_spokeWidthCtrl;
+ wxStaticText* m_spokeWidthUnits;
+ wxStaticText* m_spokeAngleLabel;
+ wxTextCtrl* m_spokeAngleCtrl;
+ wxStaticText* m_spokeAngleUnits;
wxPanel* m_localSettingsPanel;
wxStaticText* m_staticTextInfoPosValue;
wxStaticText* m_staticTextInfoNegVal;
@@ -187,20 +235,6 @@ class DIALOG_PAD_PROPERTIES_BASE : public DIALOG_SHIM
wxStaticText* m_staticTextInfoPaste;
wxStaticBitmap* m_nonCopperWarningIcon;
wxStaticText* m_nonCopperWarningText;
- wxStaticBoxSizer* m_sbSizerZonesSettings;
- wxStaticText* m_staticText40;
- wxChoice* m_ZoneConnectionChoice;
- wxStaticText* m_staticTextcps;
- wxChoice* m_ZoneCustomPadShape;
- wxStaticText* m_thermalGapLabel;
- wxTextCtrl* m_thermalGapCtrl;
- wxStaticText* m_thermalGapUnits;
- wxStaticText* m_spokeWidthLabel;
- wxTextCtrl* m_spokeWidthCtrl;
- wxStaticText* m_spokeWidthUnits;
- wxStaticText* m_spokeAngleLabel;
- wxTextCtrl* m_spokeAngleCtrl;
- wxStaticText* m_spokeAngleUnits;
wxPanel* m_panelCustomShapePrimitives;
wxBoxSizer* m_bSizerPanelPrimitives;
wxStaticText* m_staticTextPrimitivesList;
@@ -249,6 +283,8 @@ class DIALOG_PAD_PROPERTIES_BASE : public DIALOG_SHIM
virtual void OnOffsetCheckbox( wxCommandEvent& event ) { event.Skip(); }
virtual void OnPadToDieCheckbox( wxCommandEvent& event ) { event.Skip(); }
virtual void OnSetCopperLayers( wxCommandEvent& event ) { event.Skip(); }
+ virtual void onTeardropsUpdateUi( wxUpdateUIEvent& event ) { event.Skip(); }
+ virtual void onTeardropCurvePointsUpdateUi( wxUpdateUIEvent& event ) { event.Skip(); }
virtual void OnUpdateUINonCopperWarning( wxUpdateUIEvent& event ) { event.Skip(); }
virtual void onPrimitiveDClick( wxMouseEvent& event ) { event.Skip(); }
virtual void OnPrimitiveSelection( wxListEvent& event ) { event.Skip(); }
diff --git a/pcbnew/dialogs/dialog_rule_area_properties.cpp b/pcbnew/dialogs/dialog_rule_area_properties.cpp
index fe6bc7f9d6..c27e0baa67 100644
--- a/pcbnew/dialogs/dialog_rule_area_properties.cpp
+++ b/pcbnew/dialogs/dialog_rule_area_properties.cpp
@@ -239,7 +239,7 @@ bool DIALOG_RULE_AREA_PROPERTIES::TransferDataFromWindow()
pcbIUScale.mmToIU( ZONE_BORDER_HATCH_MAXDIST_MM ) ) )
return false;
- m_zonesettings.m_BorderHatchPitch = m_outlineHatchPitch.GetValue();
+ m_zonesettings.m_BorderHatchPitch = m_outlineHatchPitch.GetIntValue();
m_zonesettings.m_Locked = m_cbLocked->GetValue();
m_zonesettings.m_ZonePriority = 0; // for a keepout, this param is not used.
diff --git a/pcbnew/dialogs/dialog_track_via_properties.cpp b/pcbnew/dialogs/dialog_track_via_properties.cpp
index f2c0eb3c3c..65872fa571 100644
--- a/pcbnew/dialogs/dialog_track_via_properties.cpp
+++ b/pcbnew/dialogs/dialog_track_via_properties.cpp
@@ -41,20 +41,26 @@
DIALOG_TRACK_VIA_PROPERTIES::DIALOG_TRACK_VIA_PROPERTIES( PCB_BASE_FRAME* aParent,
const PCB_SELECTION& aItems,
- COMMIT& aCommit ) :
+ BOARD_COMMIT& aCommit ) :
DIALOG_TRACK_VIA_PROPERTIES_BASE( aParent ),
m_frame( aParent ),
m_items( aItems ),
m_commit( aCommit ),
- m_trackStartX( aParent, m_TrackStartXLabel, m_TrackStartXCtrl, m_TrackStartXUnit ),
+ m_trackStartX( aParent, m_TrackStartXLabel, m_TrackStartXCtrl, nullptr ),
m_trackStartY( aParent, m_TrackStartYLabel, m_TrackStartYCtrl, m_TrackStartYUnit ),
- m_trackEndX( aParent, m_TrackEndXLabel, m_TrackEndXCtrl, m_TrackEndXUnit ),
+ m_trackEndX( aParent, m_TrackEndXLabel, m_TrackEndXCtrl, nullptr ),
m_trackEndY( aParent, m_TrackEndYLabel, m_TrackEndYCtrl, m_TrackEndYUnit ),
m_trackWidth( aParent, m_TrackWidthLabel, m_TrackWidthCtrl, m_TrackWidthUnit ),
- m_viaX( aParent, m_ViaXLabel, m_ViaXCtrl, m_ViaXUnit ),
+ m_viaX( aParent, m_ViaXLabel, m_ViaXCtrl, nullptr ),
m_viaY( aParent, m_ViaYLabel, m_ViaYCtrl, m_ViaYUnit ),
m_viaDiameter( aParent, m_ViaDiameterLabel, m_ViaDiameterCtrl, m_ViaDiameterUnit ),
m_viaDrill( aParent, m_ViaDrillLabel, m_ViaDrillCtrl, m_ViaDrillUnit ),
+ m_teardropHDPercent( aParent, m_stHDRatio, m_tcHDRatio, m_stHDRatioUnits ),
+ m_teardropLenPercent( aParent, m_stLenPercentLabel, m_tcLenPercent, m_stLenPercentUnits ),
+ m_teardropMaxLen( aParent, m_stMaxLen, m_tcTdMaxLen, m_stMaxLenUnits ),
+ m_teardropHeightPercent( aParent, m_stHeightPercentLabel, m_tcHeightPercent, m_stHeightPercentUnits ),
+ m_teardropMaxHeight( aParent, m_stMaxHeight, m_tcMaxHeight, m_stMaxHeightUnits ),
+ m_curvePoints( aParent, m_curvePointsLabel, m_curvePointsCtrl, nullptr ),
m_tracks( false ),
m_vias( false )
{
@@ -62,6 +68,18 @@ DIALOG_TRACK_VIA_PROPERTIES::DIALOG_TRACK_VIA_PROPERTIES( PCB_BASE_FRAME* aParen
wxASSERT( !m_items.Empty() );
+ m_legacyTeardropsIcon->SetBitmap( KiBitmap( BITMAPS::dialog_warning ) );
+ m_legacyTeardropsWarning->Show( m_frame->GetBoard()->LegacyTeardrops() );
+
+ m_bitmapTeardrop->SetBitmap( KiBitmap( BITMAPS::teardrop_sizes ) );
+
+ m_teardropHDPercent.SetUnits( EDA_UNITS::PERCENT );
+ m_teardropLenPercent.SetUnits( EDA_UNITS::PERCENT );
+ m_teardropHeightPercent.SetUnits( EDA_UNITS::PERCENT );
+ m_curvePoints.SetUnits( EDA_UNITS::UNSCALED );
+
+ m_minTrackWidthHint->SetFont( KIUI::GetInfoFont( this ).Italic() );
+
// Configure display origin transforms
m_trackStartX.SetCoordType( ORIGIN_TRANSFORMS::ABS_X_COORD );
m_trackStartY.SetCoordType( ORIGIN_TRANSFORMS::ABS_Y_COORD );
@@ -160,9 +178,7 @@ DIALOG_TRACK_VIA_PROPERTIES::DIALOG_TRACK_VIA_PROPERTIES( PCB_BASE_FRAME* aParen
m_trackWidth.SetValue( INDETERMINATE_STATE );
if( track_selection_layer != t->GetLayer() )
- {
track_selection_layer = UNDEFINED_LAYER;
- }
}
if( t->IsLocked() )
@@ -175,7 +191,7 @@ DIALOG_TRACK_VIA_PROPERTIES::DIALOG_TRACK_VIA_PROPERTIES( PCB_BASE_FRAME* aParen
case PCB_VIA_T:
{
- const PCB_VIA* v = static_cast( item );
+ PCB_VIA* v = static_cast( item );
if( !m_vias ) // first via in the list
{
@@ -189,6 +205,15 @@ DIALOG_TRACK_VIA_PROPERTIES::DIALOG_TRACK_VIA_PROPERTIES( PCB_BASE_FRAME* aParen
m_annularRingsCtrl->SetSelection( getAnnularRingSelection( v ) );
selection_first_layer = v->TopLayer();
selection_last_layer = v->BottomLayer();
+
+ m_cbTeardrops->SetValue( v->GetTeardropParams().m_Enabled );
+ m_cbTeardropsUseNextTrack->SetValue( v->GetTeardropParams().m_AllowUseTwoTracks );
+ m_teardropMaxLen.SetValue( v->GetTeardropParams().m_TdMaxLen );
+ m_teardropMaxHeight.SetValue( v->GetTeardropParams().m_TdMaxWidth );
+ m_teardropLenPercent.SetDoubleValue( v->GetTeardropParams().m_BestLengthRatio*100.0 );
+ m_teardropHeightPercent.SetDoubleValue( v->GetTeardropParams().m_BestWidthRatio*100.0 );
+ m_teardropHDPercent.SetDoubleValue( v->GetTeardropParams().m_WidthtoSizeFilterRatio*100.0 );
+ m_curvePoints.SetValue( v->GetTeardropParams().m_CurveSegCount );
}
else // check if values are the same for every selected via
{
@@ -211,14 +236,10 @@ DIALOG_TRACK_VIA_PROPERTIES::DIALOG_TRACK_VIA_PROPERTIES( PCB_BASE_FRAME* aParen
m_viaNotFree->Set3StateValue( wxCHK_UNDETERMINED );
if( selection_first_layer != v->TopLayer() )
- {
selection_first_layer = UNDEFINED_LAYER;
- }
if( selection_last_layer != v->BottomLayer() )
- {
selection_last_layer = UNDEFINED_LAYER;
- }
if( m_annularRingsCtrl->GetSelection() != getAnnularRingSelection( v ) )
{
@@ -227,6 +248,30 @@ DIALOG_TRACK_VIA_PROPERTIES::DIALOG_TRACK_VIA_PROPERTIES( PCB_BASE_FRAME* aParen
m_annularRingsCtrl->SetSelection( 3 );
}
+
+ if( m_cbTeardrops->GetValue() != v->GetTeardropParams().m_Enabled )
+ m_cbTeardrops->Set3StateValue( wxCHK_UNDETERMINED );
+
+ if( m_cbTeardropsUseNextTrack->GetValue() != v->GetTeardropParams().m_AllowUseTwoTracks )
+ m_cbTeardropsUseNextTrack->Set3StateValue( wxCHK_UNDETERMINED );
+
+ if( m_teardropMaxLen.GetValue() != v->GetTeardropParams().m_TdMaxLen )
+ m_teardropMaxLen.SetValue( INDETERMINATE_STATE );
+
+ if( m_teardropMaxHeight.GetValue() != v->GetTeardropParams().m_TdMaxWidth )
+ m_teardropMaxHeight.SetValue( INDETERMINATE_STATE );
+
+ if( m_teardropLenPercent.GetDoubleValue() != v->GetTeardropParams().m_BestLengthRatio *100.0 )
+ m_teardropLenPercent.SetValue( INDETERMINATE_STATE );
+
+ if( m_teardropHeightPercent.GetDoubleValue() != v->GetTeardropParams().m_BestWidthRatio *100.0 )
+ m_teardropHeightPercent.SetValue( INDETERMINATE_STATE );
+
+ if( m_teardropHDPercent.GetDoubleValue() != v->GetTeardropParams().m_WidthtoSizeFilterRatio*100.0 )
+ m_teardropHDPercent.SetValue( INDETERMINATE_STATE );
+
+ if( m_curvePoints.GetValue() != v->GetTeardropParams().m_CurveSegCount )
+ m_curvePoints.SetValue( INDETERMINATE_STATE );
}
if( v->IsLocked() )
@@ -341,6 +386,23 @@ DIALOG_TRACK_VIA_PROPERTIES::DIALOG_TRACK_VIA_PROPERTIES( PCB_BASE_FRAME* aParen
m_annularRingsLabel->Show( getLayerDepth() > 1 );
m_annularRingsCtrl->Show( getLayerDepth() > 1 );
+
+ if( m_curvePoints.IsIndeterminate() )
+ {
+ m_rbStraightLines->SetValue( false );
+ m_rbCurved->SetValue( false );
+ }
+ else if( m_curvePoints.GetValue() == 0 )
+ {
+ m_rbStraightLines->SetValue( true );
+ m_rbCurved->SetValue( false );
+ m_curvePoints.SetValue( wxEmptyString );
+ }
+ else
+ {
+ m_rbStraightLines->SetValue( false );
+ m_rbCurved->SetValue( true );
+ }
}
else
{
@@ -492,7 +554,9 @@ bool DIALOG_TRACK_VIA_PROPERTIES::TransferDataFromWindow()
{
if( !m_viaDiameter.Validate( GEOMETRY_MIN_SIZE, INT_MAX )
|| !m_viaDrill.Validate( GEOMETRY_MIN_SIZE, INT_MAX ) )
+ {
return false;
+ }
if( m_ViaDiameterCtrl->IsEnabled() && !m_viaDiameter.IsIndeterminate()
&& m_ViaDrillCtrl->IsEnabled() && !m_viaDrill.IsIndeterminate()
@@ -539,16 +603,16 @@ bool DIALOG_TRACK_VIA_PROPERTIES::TransferDataFromWindow()
PCB_TRACK* t = static_cast( item );
if( !m_trackStartX.IsIndeterminate() )
- t->SetStart( VECTOR2I( m_trackStartX.GetValue(), t->GetStart().y ) );
+ t->SetStart( VECTOR2I( m_trackStartX.GetIntValue(), t->GetStart().y ) );
if( !m_trackStartY.IsIndeterminate() )
- t->SetStart( VECTOR2I( t->GetStart().x, m_trackStartY.GetValue() ) );
+ t->SetStart( VECTOR2I( t->GetStart().x, m_trackStartY.GetIntValue() ) );
if( !m_trackEndX.IsIndeterminate() )
- t->SetEnd( VECTOR2I( m_trackEndX.GetValue(), t->GetEnd().y ) );
+ t->SetEnd( VECTOR2I( m_trackEndX.GetIntValue(), t->GetEnd().y ) );
if( !m_trackEndY.IsIndeterminate() )
- t->SetEnd( VECTOR2I( t->GetEnd().x, m_trackEndY.GetValue() ) );
+ t->SetEnd( VECTOR2I( t->GetEnd().x, m_trackEndY.GetIntValue() ) );
if( m_trackNetclass->IsChecked() )
{
@@ -561,7 +625,7 @@ bool DIALOG_TRACK_VIA_PROPERTIES::TransferDataFromWindow()
}
else if( !m_trackWidth.IsIndeterminate() )
{
- t->SetWidth( m_trackWidth.GetValue() );
+ t->SetWidth( m_trackWidth.GetIntValue() );
}
int layer = m_TrackLayerCtrl->GetLayerSelection();
@@ -581,10 +645,10 @@ bool DIALOG_TRACK_VIA_PROPERTIES::TransferDataFromWindow()
PCB_VIA* v = static_cast( item );
if( !m_viaX.IsIndeterminate() )
- v->SetPosition( VECTOR2I( m_viaX.GetValue(), v->GetPosition().y ) );
+ v->SetPosition( VECTOR2I( m_viaX.GetIntValue(), v->GetPosition().y ) );
if( !m_viaY.IsIndeterminate() )
- v->SetPosition( VECTOR2I( v->GetPosition().x, m_viaY.GetValue() ) );
+ v->SetPosition( VECTOR2I( v->GetPosition().x, m_viaY.GetIntValue() ) );
if( m_viaNotFree->Get3StateValue() != wxCHK_UNDETERMINED )
v->SetIsFree( !m_viaNotFree->GetValue() );
@@ -658,10 +722,48 @@ bool DIALOG_TRACK_VIA_PROPERTIES::TransferDataFromWindow()
else
{
if( !m_viaDiameter.IsIndeterminate() )
- v->SetWidth( m_viaDiameter.GetValue() );
+ v->SetWidth( m_viaDiameter.GetIntValue() );
if( !m_viaDrill.IsIndeterminate() )
- v->SetDrill( m_viaDrill.GetValue() );
+ v->SetDrill( m_viaDrill.GetIntValue() );
+ }
+
+ TEARDROP_PARAMETERS* targetParams = &v->GetTeardropParams();
+
+ if( m_cbTeardrops->Get3StateValue() != wxCHK_UNDETERMINED )
+ targetParams->m_Enabled = m_cbTeardrops->GetValue();
+
+ if( m_cbTeardropsUseNextTrack->Get3StateValue() != wxCHK_UNDETERMINED )
+ targetParams->m_AllowUseTwoTracks = m_cbTeardropsUseNextTrack->GetValue();
+
+ if( !m_teardropMaxLen.IsIndeterminate() )
+ targetParams->m_TdMaxLen = m_teardropMaxLen.GetIntValue();
+
+ if( !m_teardropMaxHeight.IsIndeterminate() )
+ targetParams->m_TdMaxWidth = m_teardropMaxHeight.GetIntValue();
+
+ if( !m_teardropLenPercent.IsIndeterminate() )
+ targetParams->m_BestLengthRatio = m_teardropLenPercent.GetDoubleValue() / 100.0;
+
+ if( !m_teardropHeightPercent.IsIndeterminate() )
+ targetParams->m_BestWidthRatio = m_teardropHeightPercent.GetDoubleValue() / 100.0;
+
+ if( !m_teardropHDPercent.IsIndeterminate() )
+ targetParams->m_WidthtoSizeFilterRatio = m_teardropHDPercent.GetDoubleValue() / 100.0;
+
+ if( m_curvePoints.GetValue() != v->GetTeardropParams().m_CurveSegCount )
+ m_curvePoints.SetValue( INDETERMINATE_STATE );
+
+ if( m_rbStraightLines->GetValue() )
+ {
+ targetParams->m_CurveSegCount = 0;
+ }
+ else if( m_rbCurved->GetValue() )
+ {
+ if( !m_curvePoints.IsIndeterminate() && m_curvePoints.GetValue() > 0 )
+ targetParams->m_CurveSegCount = m_curvePoints.GetIntValue();
+ else if( targetParams->m_CurveSegCount == 0 )
+ targetParams->m_CurveSegCount = 5;
}
if( changeLock )
@@ -852,3 +954,15 @@ void DIALOG_TRACK_VIA_PROPERTIES::onViaEdit( wxCommandEvent& aEvent )
m_annularRingsCtrl->Show( getLayerDepth() > 1 );
}
}
+
+
+void DIALOG_TRACK_VIA_PROPERTIES::onTeardropsUpdateUi( wxUpdateUIEvent& event )
+{
+ event.Enable( !m_frame->GetBoard()->LegacyTeardrops() );
+}
+
+
+void DIALOG_TRACK_VIA_PROPERTIES::onCurvedEdgesUpdateUi( wxUpdateUIEvent& event )
+{
+ event.Enable( !m_frame->GetBoard()->LegacyTeardrops() && m_rbCurved->GetValue() );
+}
\ No newline at end of file
diff --git a/pcbnew/dialogs/dialog_track_via_properties.h b/pcbnew/dialogs/dialog_track_via_properties.h
index 82a9388d68..0549ef02d1 100644
--- a/pcbnew/dialogs/dialog_track_via_properties.h
+++ b/pcbnew/dialogs/dialog_track_via_properties.h
@@ -28,7 +28,7 @@
#include
class PCB_SELECTION;
-class COMMIT;
+class BOARD_COMMIT;
class PCB_BASE_FRAME;
class PAD;
@@ -36,7 +36,7 @@ class DIALOG_TRACK_VIA_PROPERTIES : public DIALOG_TRACK_VIA_PROPERTIES_BASE
{
public:
DIALOG_TRACK_VIA_PROPERTIES( PCB_BASE_FRAME* aParent, const PCB_SELECTION& aItems,
- COMMIT& aCommit );
+ BOARD_COMMIT& aCommit );
~DIALOG_TRACK_VIA_PROPERTIES();
@@ -53,6 +53,8 @@ private:
void onViaEdit( wxCommandEvent& aEvent ) override;
void onUnitsChanged( wxCommandEvent& aEvent );
+ void onTeardropsUpdateUi( wxUpdateUIEvent& event ) override;
+ void onCurvedEdgesUpdateUi( wxUpdateUIEvent& event ) override;
bool confirmPadChange( const std::vector& connectedPads );
@@ -61,7 +63,7 @@ private:
private:
PCB_BASE_FRAME* m_frame;
const PCB_SELECTION& m_items; // List of items to be modified.
- COMMIT& m_commit; // An undo record to add any changes to.
+ BOARD_COMMIT& m_commit; // An undo record to add any changes to.
UNIT_BINDER m_trackStartX, m_trackStartY;
UNIT_BINDER m_trackEndX, m_trackEndY;
@@ -70,6 +72,13 @@ private:
UNIT_BINDER m_viaX, m_viaY;
UNIT_BINDER m_viaDiameter, m_viaDrill;
+ UNIT_BINDER m_teardropHDPercent;
+ UNIT_BINDER m_teardropLenPercent;
+ UNIT_BINDER m_teardropMaxLen;
+ UNIT_BINDER m_teardropHeightPercent;
+ UNIT_BINDER m_teardropMaxHeight;
+ UNIT_BINDER m_curvePoints;
+
bool m_tracks; // True if dialog displays any track properties.
bool m_vias; // True if dialog displays any via properties.
};
diff --git a/pcbnew/dialogs/dialog_track_via_properties_base.cpp b/pcbnew/dialogs/dialog_track_via_properties_base.cpp
index 4c14861395..d873f09079 100644
--- a/pcbnew/dialogs/dialog_track_via_properties_base.cpp
+++ b/pcbnew/dialogs/dialog_track_via_properties_base.cpp
@@ -22,235 +22,270 @@ DIALOG_TRACK_VIA_PROPERTIES_BASE::DIALOG_TRACK_VIA_PROPERTIES_BASE( wxWindow* pa
wxBoxSizer* bSizerNetWidgets;
bSizerNetWidgets = new wxBoxSizer( wxHORIZONTAL );
+ wxBoxSizer* bNetWidgetsLeftCol;
+ bNetWidgetsLeftCol = new wxBoxSizer( wxHORIZONTAL );
+
m_netSelectorLabel = new wxStaticText( m_sbCommonSizer->GetStaticBox(), wxID_ANY, _("Net:"), wxDefaultPosition, wxDefaultSize, 0 );
m_netSelectorLabel->Wrap( -1 );
- bSizerNetWidgets->Add( m_netSelectorLabel, 0, wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxRIGHT|wxLEFT, 5 );
+ bNetWidgetsLeftCol->Add( m_netSelectorLabel, 0, wxRIGHT|wxALIGN_CENTER_VERTICAL, 5 );
m_netSelector = new NET_SELECTOR( m_sbCommonSizer->GetStaticBox(), wxID_ANY, wxDefaultPosition, wxDefaultSize, 0 );
- bSizerNetWidgets->Add( m_netSelector, 1, wxBOTTOM|wxLEFT|wxRIGHT|wxEXPAND, 5 );
+ bNetWidgetsLeftCol->Add( m_netSelector, 1, wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL, 5 );
- bSizerNetWidgets->Add( 20, 0, 0, wxEXPAND, 5 );
+ bSizerNetWidgets->Add( bNetWidgetsLeftCol, 1, wxRIGHT|wxALIGN_CENTER_VERTICAL, 10 );
+
+ wxBoxSizer* bNetWidgetsRightCol;
+ bNetWidgetsRightCol = new wxBoxSizer( wxHORIZONTAL );
m_viaNotFree = new wxCheckBox( m_sbCommonSizer->GetStaticBox(), wxID_ANY, _("Automatically update via nets"), wxDefaultPosition, wxDefaultSize, wxCHK_3STATE );
m_viaNotFree->SetToolTip( _("Automatically change the net of this via when the pads or zones it touches are changed") );
- bSizerNetWidgets->Add( m_viaNotFree, 0, wxBOTTOM|wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL, 5 );
+ bNetWidgetsRightCol->Add( m_viaNotFree, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 10 );
- m_sbCommonSizer->Add( bSizerNetWidgets, 5, wxEXPAND|wxRIGHT, 10 );
+ bSizerNetWidgets->Add( bNetWidgetsRightCol, 1, wxLEFT|wxALIGN_CENTER_VERTICAL, 10 );
+
+
+ m_sbCommonSizer->Add( bSizerNetWidgets, 5, wxEXPAND, 10 );
m_staticline1 = new wxStaticLine( m_sbCommonSizer->GetStaticBox(), wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL );
- m_sbCommonSizer->Add( m_staticline1, 0, wxBOTTOM|wxEXPAND|wxLEFT|wxRIGHT|wxTOP, 5 );
+ m_sbCommonSizer->Add( m_staticline1, 0, wxEXPAND|wxBOTTOM, 10 );
m_lockedCbox = new wxCheckBox( m_sbCommonSizer->GetStaticBox(), wxID_ANY, _("Locked"), wxDefaultPosition, wxDefaultSize, wxCHK_3STATE );
- m_sbCommonSizer->Add( m_lockedCbox, 0, wxALL, 5 );
+ m_sbCommonSizer->Add( m_lockedCbox, 0, wxBOTTOM, 2 );
m_MainSizer->Add( m_sbCommonSizer, 0, wxEXPAND|wxALL, 10 );
m_sbTrackSizer = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Tracks") ), wxHORIZONTAL );
- wxFlexGridSizer* fgTrackLeftGridSizer;
- fgTrackLeftGridSizer = new wxFlexGridSizer( 7, 3, 3, 5 );
- fgTrackLeftGridSizer->AddGrowableCol( 1 );
- fgTrackLeftGridSizer->SetFlexibleDirection( wxBOTH );
- fgTrackLeftGridSizer->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
+ wxBoxSizer* bSizerTracksLeftCol;
+ bSizerTracksLeftCol = new wxBoxSizer( wxVERTICAL );
- m_TrackStartXLabel = new wxStaticText( m_sbTrackSizer->GetStaticBox(), wxID_ANY, _("Start point X:"), wxDefaultPosition, wxDefaultSize, 0 );
+ wxFlexGridSizer* fgTrackEnds;
+ fgTrackEnds = new wxFlexGridSizer( 7, 5, 3, 2 );
+ fgTrackEnds->AddGrowableCol( 1 );
+ fgTrackEnds->AddGrowableCol( 3 );
+ fgTrackEnds->SetFlexibleDirection( wxBOTH );
+ fgTrackEnds->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
+
+ m_TrackStartXLabel = new wxStaticText( m_sbTrackSizer->GetStaticBox(), wxID_ANY, _("Start X:"), wxDefaultPosition, wxDefaultSize, 0 );
m_TrackStartXLabel->Wrap( -1 );
- fgTrackLeftGridSizer->Add( m_TrackStartXLabel, 0, wxALIGN_CENTER_VERTICAL, 3 );
+ fgTrackEnds->Add( m_TrackStartXLabel, 0, wxALIGN_CENTER_VERTICAL, 3 );
m_TrackStartXCtrl = new wxTextCtrl( m_sbTrackSizer->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
- fgTrackLeftGridSizer->Add( m_TrackStartXCtrl, 0, wxEXPAND, 3 );
+ fgTrackEnds->Add( m_TrackStartXCtrl, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 3 );
- m_TrackStartXUnit = new wxStaticText( m_sbTrackSizer->GetStaticBox(), wxID_ANY, _("Unit"), wxDefaultPosition, wxDefaultSize, 0 );
- m_TrackStartXUnit->Wrap( -1 );
- fgTrackLeftGridSizer->Add( m_TrackStartXUnit, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 3 );
-
- m_TrackStartYLabel = new wxStaticText( m_sbTrackSizer->GetStaticBox(), wxID_ANY, _("Start point Y:"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_TrackStartYLabel = new wxStaticText( m_sbTrackSizer->GetStaticBox(), wxID_ANY, _("Y:"), wxDefaultPosition, wxDefaultSize, 0 );
m_TrackStartYLabel->Wrap( -1 );
- fgTrackLeftGridSizer->Add( m_TrackStartYLabel, 0, wxALIGN_CENTER_VERTICAL|wxBOTTOM, 5 );
+ fgTrackEnds->Add( m_TrackStartYLabel, 0, wxALIGN_CENTER_VERTICAL|wxLEFT, 8 );
m_TrackStartYCtrl = new wxTextCtrl( m_sbTrackSizer->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
- fgTrackLeftGridSizer->Add( m_TrackStartYCtrl, 0, wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxEXPAND, 5 );
+ fgTrackEnds->Add( m_TrackStartYCtrl, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 3 );
- m_TrackStartYUnit = new wxStaticText( m_sbTrackSizer->GetStaticBox(), wxID_ANY, _("Unit"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_TrackStartYUnit = new wxStaticText( m_sbTrackSizer->GetStaticBox(), wxID_ANY, _("mm"), wxDefaultPosition, wxDefaultSize, 0 );
m_TrackStartYUnit->Wrap( -1 );
- fgTrackLeftGridSizer->Add( m_TrackStartYUnit, 0, wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxRIGHT, 5 );
+ fgTrackEnds->Add( m_TrackStartYUnit, 0, wxALIGN_CENTER_VERTICAL, 5 );
- m_TrackEndXLabel = new wxStaticText( m_sbTrackSizer->GetStaticBox(), wxID_ANY, _("End point X:"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_TrackEndXLabel = new wxStaticText( m_sbTrackSizer->GetStaticBox(), wxID_ANY, _("End X:"), wxDefaultPosition, wxDefaultSize, 0 );
m_TrackEndXLabel->Wrap( -1 );
- fgTrackLeftGridSizer->Add( m_TrackEndXLabel, 0, wxALIGN_CENTER_VERTICAL, 5 );
+ fgTrackEnds->Add( m_TrackEndXLabel, 0, wxALIGN_CENTER_VERTICAL, 5 );
m_TrackEndXCtrl = new wxTextCtrl( m_sbTrackSizer->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
- fgTrackLeftGridSizer->Add( m_TrackEndXCtrl, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
+ fgTrackEnds->Add( m_TrackEndXCtrl, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 3 );
- m_TrackEndXUnit = new wxStaticText( m_sbTrackSizer->GetStaticBox(), wxID_ANY, _("Unit"), wxDefaultPosition, wxDefaultSize, 0 );
- m_TrackEndXUnit->Wrap( -1 );
- fgTrackLeftGridSizer->Add( m_TrackEndXUnit, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 );
-
- m_TrackEndYLabel = new wxStaticText( m_sbTrackSizer->GetStaticBox(), wxID_ANY, _("End point Y:"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_TrackEndYLabel = new wxStaticText( m_sbTrackSizer->GetStaticBox(), wxID_ANY, _("Y:"), wxDefaultPosition, wxDefaultSize, 0 );
m_TrackEndYLabel->Wrap( -1 );
- fgTrackLeftGridSizer->Add( m_TrackEndYLabel, 0, wxALIGN_CENTER_VERTICAL|wxBOTTOM, 8 );
+ fgTrackEnds->Add( m_TrackEndYLabel, 0, wxALIGN_CENTER_VERTICAL|wxLEFT, 8 );
m_TrackEndYCtrl = new wxTextCtrl( m_sbTrackSizer->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
- fgTrackLeftGridSizer->Add( m_TrackEndYCtrl, 0, wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxEXPAND, 8 );
+ fgTrackEnds->Add( m_TrackEndYCtrl, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 3 );
- m_TrackEndYUnit = new wxStaticText( m_sbTrackSizer->GetStaticBox(), wxID_ANY, _("Unit"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_TrackEndYUnit = new wxStaticText( m_sbTrackSizer->GetStaticBox(), wxID_ANY, _("mm"), wxDefaultPosition, wxDefaultSize, 0 );
m_TrackEndYUnit->Wrap( -1 );
- fgTrackLeftGridSizer->Add( m_TrackEndYUnit, 0, wxALIGN_CENTER_VERTICAL|wxBOTTOM, 8 );
+ fgTrackEnds->Add( m_TrackEndYUnit, 0, wxALIGN_CENTER_VERTICAL, 8 );
- m_DesignRuleWidths = new wxStaticText( m_sbTrackSizer->GetStaticBox(), wxID_ANY, _("Pre-defined widths:"), wxDefaultPosition, wxDefaultSize, 0 );
+
+ bSizerTracksLeftCol->Add( fgTrackEnds, 0, wxEXPAND|wxBOTTOM, 8 );
+
+ wxFlexGridSizer* fgTrackSizes;
+ fgTrackSizes = new wxFlexGridSizer( 7, 3, 3, 3 );
+ fgTrackSizes->AddGrowableCol( 1 );
+ fgTrackSizes->SetFlexibleDirection( wxBOTH );
+ fgTrackSizes->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
+
+ m_DesignRuleWidths = new wxStaticText( m_sbTrackSizer->GetStaticBox(), wxID_ANY, _("Pre-defined sizes:"), wxDefaultPosition, wxDefaultSize, 0 );
m_DesignRuleWidths->Wrap( -1 );
- fgTrackLeftGridSizer->Add( m_DesignRuleWidths, 0, wxALIGN_CENTER_VERTICAL|wxTOP, 5 );
+ fgTrackSizes->Add( m_DesignRuleWidths, 0, wxALIGN_CENTER_VERTICAL|wxTOP, 5 );
wxArrayString m_DesignRuleWidthsCtrlChoices;
m_DesignRuleWidthsCtrl = new wxChoice( m_sbTrackSizer->GetStaticBox(), wxID_ANY, wxDefaultPosition, wxDefaultSize, m_DesignRuleWidthsCtrlChoices, 0 );
m_DesignRuleWidthsCtrl->SetSelection( 0 );
- fgTrackLeftGridSizer->Add( m_DesignRuleWidthsCtrl, 0, wxEXPAND|wxTOP|wxALIGN_CENTER_VERTICAL, 5 );
+ fgTrackSizes->Add( m_DesignRuleWidthsCtrl, 0, wxEXPAND|wxTOP|wxALIGN_CENTER_VERTICAL, 5 );
- m_DesignRuleWidthsUnits = new wxStaticText( m_sbTrackSizer->GetStaticBox(), wxID_ANY, _("Unit"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_DesignRuleWidthsUnits = new wxStaticText( m_sbTrackSizer->GetStaticBox(), wxID_ANY, _("mm"), wxDefaultPosition, wxDefaultSize, 0 );
m_DesignRuleWidthsUnits->Wrap( -1 );
- fgTrackLeftGridSizer->Add( m_DesignRuleWidthsUnits, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxRIGHT, 5 );
+ fgTrackSizes->Add( m_DesignRuleWidthsUnits, 0, wxALIGN_CENTER_VERTICAL|wxTOP, 5 );
m_TrackWidthLabel = new wxStaticText( m_sbTrackSizer->GetStaticBox(), wxID_ANY, _("Track width:"), wxDefaultPosition, wxDefaultSize, 0 );
m_TrackWidthLabel->Wrap( -1 );
- fgTrackLeftGridSizer->Add( m_TrackWidthLabel, 0, wxALIGN_CENTER_VERTICAL, 5 );
+ fgTrackSizes->Add( m_TrackWidthLabel, 0, wxALIGN_CENTER_VERTICAL, 5 );
m_TrackWidthCtrl = new wxTextCtrl( m_sbTrackSizer->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
- fgTrackLeftGridSizer->Add( m_TrackWidthCtrl, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
+ fgTrackSizes->Add( m_TrackWidthCtrl, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
- m_TrackWidthUnit = new wxStaticText( m_sbTrackSizer->GetStaticBox(), wxID_ANY, _("Unit"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_TrackWidthUnit = new wxStaticText( m_sbTrackSizer->GetStaticBox(), wxID_ANY, _("mm"), wxDefaultPosition, wxDefaultSize, 0 );
m_TrackWidthUnit->Wrap( -1 );
- fgTrackLeftGridSizer->Add( m_TrackWidthUnit, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxRIGHT, 5 );
+ fgTrackSizes->Add( m_TrackWidthUnit, 0, wxALIGN_CENTER_VERTICAL|wxTOP, 5 );
- fgTrackLeftGridSizer->Add( 0, 0, 1, wxEXPAND, 5 );
+ fgTrackSizes->Add( 0, 0, 1, wxEXPAND, 5 );
m_trackNetclass = new wxCheckBox( m_sbTrackSizer->GetStaticBox(), wxID_ANY, _("Use net class widths"), wxDefaultPosition, wxDefaultSize, 0 );
- fgTrackLeftGridSizer->Add( m_trackNetclass, 0, wxTOP|wxBOTTOM, 5 );
+ fgTrackSizes->Add( m_trackNetclass, 0, wxBOTTOM, 3 );
- fgTrackLeftGridSizer->Add( 0, 0, 1, wxEXPAND, 5 );
+ fgTrackSizes->Add( 0, 0, 1, wxEXPAND, 5 );
- m_sbTrackSizer->Add( fgTrackLeftGridSizer, 5, wxEXPAND|wxRIGHT|wxLEFT, 5 );
+ bSizerTracksLeftCol->Add( fgTrackSizes, 1, wxEXPAND, 5 );
+
+
+ m_sbTrackSizer->Add( bSizerTracksLeftCol, 1, wxEXPAND, 5 );
m_sbTrackSizer->Add( 0, 0, 0, wxEXPAND|wxRIGHT|wxLEFT, 15 );
wxFlexGridSizer* fgTrackRightSizer;
fgTrackRightSizer = new wxFlexGridSizer( 1, 3, 3, 5 );
- fgTrackRightSizer->AddGrowableCol( 1 );
+ fgTrackRightSizer->AddGrowableCol( 2 );
fgTrackRightSizer->SetFlexibleDirection( wxBOTH );
fgTrackRightSizer->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
m_TrackLayerLabel = new wxStaticText( m_sbTrackSizer->GetStaticBox(), wxID_ANY, _("Layer:"), wxDefaultPosition, wxDefaultSize, 0 );
m_TrackLayerLabel->Wrap( -1 );
- fgTrackRightSizer->Add( m_TrackLayerLabel, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 25 );
+ fgTrackRightSizer->Add( m_TrackLayerLabel, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 );
+
+
+ fgTrackRightSizer->Add( 25, 0, 0, wxEXPAND, 5 );
m_TrackLayerCtrl = new PCB_LAYER_BOX_SELECTOR( m_sbTrackSizer->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, NULL, 0 );
fgTrackRightSizer->Add( m_TrackLayerCtrl, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
- m_sbTrackSizer->Add( fgTrackRightSizer, 4, wxEXPAND|wxRIGHT, 10 );
+ m_sbTrackSizer->Add( fgTrackRightSizer, 1, wxEXPAND|wxRIGHT, 3 );
m_MainSizer->Add( m_sbTrackSizer, 0, wxEXPAND|wxRIGHT|wxLEFT, 10 );
- m_sbViaSizer = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Vias") ), wxHORIZONTAL );
+ m_sbViaSizer = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Vias") ), wxVERTICAL );
- wxFlexGridSizer* viaLeftColumn;
- viaLeftColumn = new wxFlexGridSizer( 6, 3, 4, 5 );
- viaLeftColumn->AddGrowableCol( 1 );
- viaLeftColumn->SetFlexibleDirection( wxBOTH );
- viaLeftColumn->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
+ wxBoxSizer* bSizerViaCols;
+ bSizerViaCols = new wxBoxSizer( wxHORIZONTAL );
- m_ViaXLabel = new wxStaticText( m_sbViaSizer->GetStaticBox(), wxID_ANY, _("Position X:"), wxDefaultPosition, wxDefaultSize, 0 );
+ wxBoxSizer* bSizerViasLeftCol;
+ bSizerViasLeftCol = new wxBoxSizer( wxVERTICAL );
+
+ wxFlexGridSizer* fgViaPos;
+ fgViaPos = new wxFlexGridSizer( 6, 5, 4, 2 );
+ fgViaPos->AddGrowableCol( 1 );
+ fgViaPos->AddGrowableCol( 3 );
+ fgViaPos->SetFlexibleDirection( wxBOTH );
+ fgViaPos->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
+
+ m_ViaXLabel = new wxStaticText( m_sbViaSizer->GetStaticBox(), wxID_ANY, _("Pos X:"), wxDefaultPosition, wxDefaultSize, 0 );
m_ViaXLabel->Wrap( -1 );
- viaLeftColumn->Add( m_ViaXLabel, 0, wxALIGN_CENTER_VERTICAL, 3 );
+ fgViaPos->Add( m_ViaXLabel, 0, wxALIGN_CENTER_VERTICAL, 3 );
m_ViaXCtrl = new wxTextCtrl( m_sbViaSizer->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
- viaLeftColumn->Add( m_ViaXCtrl, 0, wxEXPAND|wxALIGN_CENTER_VERTICAL, 3 );
+ fgViaPos->Add( m_ViaXCtrl, 0, wxEXPAND|wxALIGN_CENTER_VERTICAL, 3 );
- m_ViaXUnit = new wxStaticText( m_sbViaSizer->GetStaticBox(), wxID_ANY, _("Unit"), wxDefaultPosition, wxDefaultSize, 0 );
- m_ViaXUnit->Wrap( -1 );
- viaLeftColumn->Add( m_ViaXUnit, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 3 );
-
- m_ViaYLabel = new wxStaticText( m_sbViaSizer->GetStaticBox(), wxID_ANY, _("Position Y:"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_ViaYLabel = new wxStaticText( m_sbViaSizer->GetStaticBox(), wxID_ANY, _("Y:"), wxDefaultPosition, wxDefaultSize, 0 );
m_ViaYLabel->Wrap( -1 );
- viaLeftColumn->Add( m_ViaYLabel, 0, wxALIGN_CENTER_VERTICAL|wxBOTTOM, 5 );
+ fgViaPos->Add( m_ViaYLabel, 0, wxALIGN_CENTER_VERTICAL|wxLEFT, 8 );
m_ViaYCtrl = new wxTextCtrl( m_sbViaSizer->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
- viaLeftColumn->Add( m_ViaYCtrl, 0, wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxEXPAND, 5 );
+ fgViaPos->Add( m_ViaYCtrl, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 3 );
- m_ViaYUnit = new wxStaticText( m_sbViaSizer->GetStaticBox(), wxID_ANY, _("Unit"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_ViaYUnit = new wxStaticText( m_sbViaSizer->GetStaticBox(), wxID_ANY, _("mm"), wxDefaultPosition, wxDefaultSize, 0 );
m_ViaYUnit->Wrap( -1 );
- viaLeftColumn->Add( m_ViaYUnit, 0, wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxRIGHT, 5 );
+ fgViaPos->Add( m_ViaYUnit, 0, wxALIGN_CENTER_VERTICAL, 5 );
+
+
+ bSizerViasLeftCol->Add( fgViaPos, 0, wxEXPAND|wxBOTTOM, 8 );
+
+ wxFlexGridSizer* fgViaSizes;
+ fgViaSizes = new wxFlexGridSizer( 6, 3, 3, 3 );
+ fgViaSizes->AddGrowableCol( 1 );
+ fgViaSizes->SetFlexibleDirection( wxBOTH );
+ fgViaSizes->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
m_DesignRuleVias = new wxStaticText( m_sbViaSizer->GetStaticBox(), wxID_ANY, _("Pre-defined sizes:"), wxDefaultPosition, wxDefaultSize, 0 );
m_DesignRuleVias->Wrap( -1 );
- viaLeftColumn->Add( m_DesignRuleVias, 0, wxALIGN_CENTER_VERTICAL|wxTOP, 5 );
+ fgViaSizes->Add( m_DesignRuleVias, 0, wxALIGN_CENTER_VERTICAL|wxTOP, 5 );
wxArrayString m_DesignRuleViasCtrlChoices;
m_DesignRuleViasCtrl = new wxChoice( m_sbViaSizer->GetStaticBox(), wxID_ANY, wxDefaultPosition, wxDefaultSize, m_DesignRuleViasCtrlChoices, 0 );
m_DesignRuleViasCtrl->SetSelection( 0 );
- viaLeftColumn->Add( m_DesignRuleViasCtrl, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND|wxTOP, 5 );
+ fgViaSizes->Add( m_DesignRuleViasCtrl, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND|wxTOP, 5 );
- m_DesignRuleViasUnit = new wxStaticText( m_sbViaSizer->GetStaticBox(), wxID_ANY, _("Unit"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_DesignRuleViasUnit = new wxStaticText( m_sbViaSizer->GetStaticBox(), wxID_ANY, _("mm"), wxDefaultPosition, wxDefaultSize, 0 );
m_DesignRuleViasUnit->Wrap( -1 );
- viaLeftColumn->Add( m_DesignRuleViasUnit, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxTOP, 5 );
+ fgViaSizes->Add( m_DesignRuleViasUnit, 0, wxALIGN_CENTER_VERTICAL|wxTOP, 5 );
m_ViaDiameterLabel = new wxStaticText( m_sbViaSizer->GetStaticBox(), wxID_ANY, _("Via diameter:"), wxDefaultPosition, wxDefaultSize, 0 );
m_ViaDiameterLabel->Wrap( -1 );
- viaLeftColumn->Add( m_ViaDiameterLabel, 0, wxALIGN_CENTER_VERTICAL, 5 );
+ fgViaSizes->Add( m_ViaDiameterLabel, 0, wxALIGN_CENTER_VERTICAL, 5 );
m_ViaDiameterCtrl = new wxTextCtrl( m_sbViaSizer->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
- viaLeftColumn->Add( m_ViaDiameterCtrl, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
+ fgViaSizes->Add( m_ViaDiameterCtrl, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
- m_ViaDiameterUnit = new wxStaticText( m_sbViaSizer->GetStaticBox(), wxID_ANY, _("Unit"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_ViaDiameterUnit = new wxStaticText( m_sbViaSizer->GetStaticBox(), wxID_ANY, _("mm"), wxDefaultPosition, wxDefaultSize, 0 );
m_ViaDiameterUnit->Wrap( -1 );
- viaLeftColumn->Add( m_ViaDiameterUnit, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 );
+ fgViaSizes->Add( m_ViaDiameterUnit, 0, wxALIGN_CENTER_VERTICAL, 5 );
m_ViaDrillLabel = new wxStaticText( m_sbViaSizer->GetStaticBox(), wxID_ANY, _("Via hole:"), wxDefaultPosition, wxDefaultSize, 0 );
m_ViaDrillLabel->Wrap( -1 );
- viaLeftColumn->Add( m_ViaDrillLabel, 0, wxALIGN_CENTER_VERTICAL, 5 );
+ fgViaSizes->Add( m_ViaDrillLabel, 0, wxALIGN_CENTER_VERTICAL, 5 );
m_ViaDrillCtrl = new wxTextCtrl( m_sbViaSizer->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
- viaLeftColumn->Add( m_ViaDrillCtrl, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
+ fgViaSizes->Add( m_ViaDrillCtrl, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
- m_ViaDrillUnit = new wxStaticText( m_sbViaSizer->GetStaticBox(), wxID_ANY, _("Unit"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_ViaDrillUnit = new wxStaticText( m_sbViaSizer->GetStaticBox(), wxID_ANY, _("mm"), wxDefaultPosition, wxDefaultSize, 0 );
m_ViaDrillUnit->Wrap( -1 );
- viaLeftColumn->Add( m_ViaDrillUnit, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 );
+ fgViaSizes->Add( m_ViaDrillUnit, 0, wxALIGN_CENTER_VERTICAL, 5 );
- viaLeftColumn->Add( 0, 0, 1, wxEXPAND, 5 );
+ fgViaSizes->Add( 0, 0, 1, wxEXPAND, 5 );
m_viaNetclass = new wxCheckBox( m_sbViaSizer->GetStaticBox(), wxID_ANY, _("Use net class sizes"), wxDefaultPosition, wxDefaultSize, 0 );
- viaLeftColumn->Add( m_viaNetclass, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM, 5 );
+ fgViaSizes->Add( m_viaNetclass, 0, wxALIGN_CENTER_VERTICAL|wxBOTTOM, 3 );
- viaLeftColumn->Add( 0, 0, 1, wxEXPAND, 5 );
+ fgViaSizes->Add( 0, 0, 1, wxEXPAND, 5 );
- m_sbViaSizer->Add( viaLeftColumn, 5, wxEXPAND|wxRIGHT|wxLEFT, 5 );
+ bSizerViasLeftCol->Add( fgViaSizes, 1, wxEXPAND, 5 );
- m_sbViaSizer->Add( 0, 0, 0, wxEXPAND|wxRIGHT|wxLEFT, 15 );
+ bSizerViaCols->Add( bSizerViasLeftCol, 1, wxEXPAND, 5 );
+
+
+ bSizerViaCols->Add( 0, 0, 0, wxEXPAND|wxRIGHT|wxLEFT, 15 );
wxBoxSizer* viaRightColumn;
viaRightColumn = new wxBoxSizer( wxVERTICAL );
wxFlexGridSizer* fgSizer4;
- fgSizer4 = new wxFlexGridSizer( 0, 2, 5, 0 );
+ fgSizer4 = new wxFlexGridSizer( 0, 2, 0, 5 );
fgSizer4->AddGrowableCol( 1 );
fgSizer4->SetFlexibleDirection( wxBOTH );
fgSizer4->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
m_ViaTypeLabel = new wxStaticText( m_sbViaSizer->GetStaticBox(), wxID_ANY, _("Via type:"), wxDefaultPosition, wxDefaultSize, 0 );
m_ViaTypeLabel->Wrap( -1 );
- fgSizer4->Add( m_ViaTypeLabel, 0, wxALIGN_CENTER_VERTICAL, 5 );
+ fgSizer4->Add( m_ViaTypeLabel, 0, wxALIGN_CENTER_VERTICAL|wxLEFT, 5 );
wxString m_ViaTypeChoiceChoices[] = { _("Through"), _("Micro"), _("Blind/buried") };
int m_ViaTypeChoiceNChoices = sizeof( m_ViaTypeChoiceChoices ) / sizeof( wxString );
@@ -260,35 +295,256 @@ DIALOG_TRACK_VIA_PROPERTIES_BASE::DIALOG_TRACK_VIA_PROPERTIES_BASE( wxWindow* pa
fgSizer4->Add( m_ViaTypeChoice, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
+
+ fgSizer4->Add( 0, 3, 1, wxEXPAND, 5 );
+
+
+ fgSizer4->Add( 0, 0, 1, wxEXPAND, 5 );
+
m_ViaStartLayerLabel = new wxStaticText( m_sbViaSizer->GetStaticBox(), wxID_ANY, _("Start layer:"), wxDefaultPosition, wxDefaultSize, 0 );
m_ViaStartLayerLabel->Wrap( -1 );
- fgSizer4->Add( m_ViaStartLayerLabel, 0, wxRIGHT|wxALIGN_CENTER_VERTICAL, 5 );
+ fgSizer4->Add( m_ViaStartLayerLabel, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 );
m_ViaStartLayer = new PCB_LAYER_BOX_SELECTOR( m_sbViaSizer->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, NULL, 0 );
fgSizer4->Add( m_ViaStartLayer, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
m_ViaEndLayerLabel1 = new wxStaticText( m_sbViaSizer->GetStaticBox(), wxID_ANY, _("End layer:"), wxDefaultPosition, wxDefaultSize, 0 );
m_ViaEndLayerLabel1->Wrap( -1 );
- fgSizer4->Add( m_ViaEndLayerLabel1, 0, wxRIGHT|wxALIGN_CENTER_VERTICAL, 5 );
+ fgSizer4->Add( m_ViaEndLayerLabel1, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 );
m_ViaEndLayer = new PCB_LAYER_BOX_SELECTOR( m_sbViaSizer->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, NULL, 0 );
fgSizer4->Add( m_ViaEndLayer, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
- viaRightColumn->Add( fgSizer4, 0, wxBOTTOM|wxEXPAND|wxRIGHT, 5 );
+ fgSizer4->Add( 0, 15, 1, wxEXPAND, 5 );
+
+
+ fgSizer4->Add( 0, 0, 1, wxEXPAND, 5 );
m_annularRingsLabel = new wxStaticText( m_sbViaSizer->GetStaticBox(), wxID_ANY, _("Annular rings:"), wxDefaultPosition, wxDefaultSize, 0 );
m_annularRingsLabel->Wrap( -1 );
- viaRightColumn->Add( m_annularRingsLabel, 0, wxTOP, 10 );
+ fgSizer4->Add( m_annularRingsLabel, 0, wxALIGN_CENTER_VERTICAL|wxLEFT, 5 );
wxString m_annularRingsCtrlChoices[] = { _("All copper layers"), _("Start, end, and connected layers"), _("Connected layers only") };
int m_annularRingsCtrlNChoices = sizeof( m_annularRingsCtrlChoices ) / sizeof( wxString );
m_annularRingsCtrl = new wxChoice( m_sbViaSizer->GetStaticBox(), wxID_ANY, wxDefaultPosition, wxDefaultSize, m_annularRingsCtrlNChoices, m_annularRingsCtrlChoices, 0 );
m_annularRingsCtrl->SetSelection( 0 );
- viaRightColumn->Add( m_annularRingsCtrl, 0, wxEXPAND|wxTOP|wxBOTTOM|wxRIGHT, 5 );
+ fgSizer4->Add( m_annularRingsCtrl, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
- m_sbViaSizer->Add( viaRightColumn, 4, wxEXPAND|wxRIGHT, 5 );
+ viaRightColumn->Add( fgSizer4, 0, wxEXPAND|wxBOTTOM|wxRIGHT, 3 );
+
+
+ bSizerViaCols->Add( viaRightColumn, 1, wxEXPAND, 5 );
+
+
+ m_sbViaSizer->Add( bSizerViaCols, 0, wxEXPAND, 5 );
+
+ m_staticline2 = new wxStaticLine( m_sbViaSizer->GetStaticBox(), wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL );
+ m_sbViaSizer->Add( m_staticline2, 0, wxEXPAND|wxTOP|wxBOTTOM, 5 );
+
+ m_legacyTeardropsWarning = new wxBoxSizer( wxHORIZONTAL );
+
+ m_legacyTeardropsIcon = new wxStaticBitmap( m_sbViaSizer->GetStaticBox(), wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 );
+ m_legacyTeardropsWarning->Add( m_legacyTeardropsIcon, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 );
+
+ wxBoxSizer* bSizer42;
+ bSizer42 = new wxBoxSizer( wxVERTICAL );
+
+ m_staticText85 = new wxStaticText( m_sbViaSizer->GetStaticBox(), wxID_ANY, _("Board contains legacy teardrops. "), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticText85->Wrap( -1 );
+ bSizer42->Add( m_staticText85, 0, wxRIGHT|wxLEFT, 5 );
+
+ m_staticText851 = new wxStaticText( m_sbViaSizer->GetStaticBox(), wxID_ANY, _("Use Edit > Edit Teardrops to apply automatic teardrops."), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticText851->Wrap( -1 );
+ bSizer42->Add( m_staticText851, 0, wxBOTTOM|wxRIGHT|wxLEFT, 5 );
+
+
+ m_legacyTeardropsWarning->Add( bSizer42, 1, wxALIGN_CENTER_VERTICAL, 5 );
+
+
+ m_sbViaSizer->Add( m_legacyTeardropsWarning, 0, wxEXPAND|wxTOP|wxBOTTOM, 5 );
+
+ wxBoxSizer* bSizerTeardrops;
+ bSizerTeardrops = new wxBoxSizer( wxVERTICAL );
+
+ wxBoxSizer* bSizerCols11;
+ bSizerCols11 = new wxBoxSizer( wxHORIZONTAL );
+
+ wxBoxSizer* bSizerLeftCol11;
+ bSizerLeftCol11 = new wxBoxSizer( wxVERTICAL );
+
+ m_cbTeardrops = new wxCheckBox( m_sbViaSizer->GetStaticBox(), wxID_ANY, _("Add teardrops on via's track connections"), wxDefaultPosition, wxDefaultSize, wxCHK_3STATE );
+ bSizerLeftCol11->Add( m_cbTeardrops, 0, wxBOTTOM|wxRIGHT, 5 );
+
+ m_cbTeardropsUseNextTrack = new wxCheckBox( m_sbViaSizer->GetStaticBox(), wxID_ANY, _("Allow teardrops to span 2 track segments"), wxDefaultPosition, wxDefaultSize, wxCHK_3STATE );
+ m_cbTeardropsUseNextTrack->SetToolTip( _("Allows a teardrop to spread over 2 tracks if the first track segment is too short") );
+
+ bSizerLeftCol11->Add( m_cbTeardropsUseNextTrack, 0, wxBOTTOM|wxRIGHT, 5 );
+
+
+ bSizerCols11->Add( bSizerLeftCol11, 1, wxEXPAND|wxTOP, 3 );
+
+
+ bSizerCols11->Add( 20, 0, 0, wxEXPAND, 5 );
+
+ wxBoxSizer* bSizerRightCol11;
+ bSizerRightCol11 = new wxBoxSizer( wxVERTICAL );
+
+ wxBoxSizer* bSizer39;
+ bSizer39 = new wxBoxSizer( wxHORIZONTAL );
+
+ m_stHDRatio = new wxStaticText( m_sbViaSizer->GetStaticBox(), wxID_ANY, _("Maximum track width:"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_stHDRatio->Wrap( -1 );
+ m_stHDRatio->SetToolTip( _("Max pad/via size to track width ratio to create a teardrop.\n100 always creates a teardrop.") );
+
+ bSizer39->Add( m_stHDRatio, 0, wxALIGN_CENTER_VERTICAL, 5 );
+
+ m_tcHDRatio = new wxTextCtrl( m_sbViaSizer->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize( -1,-1 ), 0 );
+ m_tcHDRatio->SetToolTip( _("Tracks which are similar in size to the via do not need teardrops.") );
+
+ bSizer39->Add( m_tcHDRatio, 0, wxRIGHT|wxLEFT, 5 );
+
+ m_stHDRatioUnits = new wxStaticText( m_sbViaSizer->GetStaticBox(), wxID_ANY, _("%"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_stHDRatioUnits->Wrap( -1 );
+ bSizer39->Add( m_stHDRatioUnits, 0, wxRIGHT|wxALIGN_CENTER_VERTICAL, 5 );
+
+
+ bSizerRightCol11->Add( bSizer39, 0, wxEXPAND, 3 );
+
+ wxBoxSizer* bSizer17;
+ bSizer17 = new wxBoxSizer( wxVERTICAL );
+
+ m_minTrackWidthHint = new wxStaticText( m_sbViaSizer->GetStaticBox(), wxID_ANY, _("(as a percentage of pad/via/track size)"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_minTrackWidthHint->Wrap( -1 );
+ bSizer17->Add( m_minTrackWidthHint, 0, wxEXPAND|wxTOP|wxBOTTOM, 2 );
+
+
+ bSizerRightCol11->Add( bSizer17, 0, wxEXPAND|wxLEFT, 5 );
+
+
+ bSizerCols11->Add( bSizerRightCol11, 1, wxEXPAND|wxLEFT, 10 );
+
+
+ bSizerTeardrops->Add( bSizerCols11, 0, wxEXPAND|wxTOP, 3 );
+
+
+ bSizerTeardrops->Add( 0, 5, 0, wxEXPAND, 5 );
+
+ wxBoxSizer* bSizerShapeColumns;
+ bSizerShapeColumns = new wxBoxSizer( wxHORIZONTAL );
+
+ wxBoxSizer* bSizerLeftCol;
+ bSizerLeftCol = new wxBoxSizer( wxVERTICAL );
+
+ m_bitmapTeardrop = new wxStaticBitmap( m_sbViaSizer->GetStaticBox(), wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 );
+ bSizerLeftCol->Add( m_bitmapTeardrop, 1, wxALIGN_CENTER_HORIZONTAL|wxRIGHT|wxLEFT, 5 );
+
+ wxBoxSizer* bSizer41;
+ bSizer41 = new wxBoxSizer( wxHORIZONTAL );
+
+ m_staticText15 = new wxStaticText( m_sbViaSizer->GetStaticBox(), wxID_ANY, _("Edges:"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticText15->Wrap( -1 );
+ bSizer41->Add( m_staticText15, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxRIGHT|wxLEFT, 5 );
+
+ m_rbStraightLines = new wxRadioButton( m_sbViaSizer->GetStaticBox(), wxID_ANY, _("Straight lines"), wxDefaultPosition, wxDefaultSize, wxRB_GROUP );
+ bSizer41->Add( m_rbStraightLines, 1, wxALIGN_CENTER_VERTICAL|wxTOP|wxRIGHT|wxLEFT, 5 );
+
+ m_rbCurved = new wxRadioButton( m_sbViaSizer->GetStaticBox(), wxID_ANY, _("Curved"), wxDefaultPosition, wxDefaultSize, wxRB_SINGLE );
+ bSizer41->Add( m_rbCurved, 1, wxALIGN_CENTER_VERTICAL|wxTOP|wxRIGHT|wxLEFT, 5 );
+
+
+ bSizerLeftCol->Add( bSizer41, 0, wxEXPAND|wxBOTTOM, 4 );
+
+
+ bSizerShapeColumns->Add( bSizerLeftCol, 1, wxEXPAND|wxRIGHT, 10 );
+
+
+ bSizerShapeColumns->Add( 20, 0, 0, wxEXPAND, 5 );
+
+ wxFlexGridSizer* fgSizerRightCol;
+ fgSizerRightCol = new wxFlexGridSizer( 0, 3, 2, 5 );
+ fgSizerRightCol->AddGrowableCol( 1 );
+ fgSizerRightCol->SetFlexibleDirection( wxBOTH );
+ fgSizerRightCol->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
+
+ m_stLenPercentLabel = new wxStaticText( m_sbViaSizer->GetStaticBox(), wxID_ANY, _("Best length:"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_stLenPercentLabel->Wrap( -1 );
+ fgSizerRightCol->Add( m_stLenPercentLabel, 0, wxALIGN_CENTER_VERTICAL|wxLEFT, 5 );
+
+ m_tcLenPercent = new wxTextCtrl( m_sbViaSizer->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
+ fgSizerRightCol->Add( m_tcLenPercent, 0, wxEXPAND|wxALIGN_CENTER_VERTICAL, 5 );
+
+ m_stLenPercentUnits = new wxStaticText( m_sbViaSizer->GetStaticBox(), wxID_ANY, _("%"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_stLenPercentUnits->Wrap( -1 );
+ fgSizerRightCol->Add( m_stLenPercentUnits, 0, wxALIGN_CENTER_VERTICAL, 5 );
+
+ m_stMaxLen = new wxStaticText( m_sbViaSizer->GetStaticBox(), wxID_ANY, _("Max length:"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_stMaxLen->Wrap( -1 );
+ fgSizerRightCol->Add( m_stMaxLen, 0, wxALIGN_CENTER_VERTICAL|wxLEFT, 5 );
+
+ m_tcTdMaxLen = new wxTextCtrl( m_sbViaSizer->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
+ fgSizerRightCol->Add( m_tcTdMaxLen, 0, wxEXPAND|wxALIGN_CENTER_VERTICAL, 5 );
+
+ m_stMaxLenUnits = new wxStaticText( m_sbViaSizer->GetStaticBox(), wxID_ANY, _("mm"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_stMaxLenUnits->Wrap( -1 );
+ fgSizerRightCol->Add( m_stMaxLenUnits, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 3 );
+
+
+ fgSizerRightCol->Add( 0, 3, 1, wxEXPAND, 5 );
+
+
+ fgSizerRightCol->Add( 0, 0, 1, wxEXPAND, 5 );
+
+
+ fgSizerRightCol->Add( 0, 0, 1, wxEXPAND, 5 );
+
+ m_stHeightPercentLabel = new wxStaticText( m_sbViaSizer->GetStaticBox(), wxID_ANY, _("Best height:"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_stHeightPercentLabel->Wrap( -1 );
+ fgSizerRightCol->Add( m_stHeightPercentLabel, 0, wxALIGN_CENTER_VERTICAL|wxLEFT, 5 );
+
+ m_tcHeightPercent = new wxTextCtrl( m_sbViaSizer->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
+ fgSizerRightCol->Add( m_tcHeightPercent, 0, wxEXPAND|wxALIGN_CENTER_VERTICAL, 5 );
+
+ m_stHeightPercentUnits = new wxStaticText( m_sbViaSizer->GetStaticBox(), wxID_ANY, _("%"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_stHeightPercentUnits->Wrap( -1 );
+ fgSizerRightCol->Add( m_stHeightPercentUnits, 0, wxALIGN_CENTER_VERTICAL, 5 );
+
+ m_stMaxHeight = new wxStaticText( m_sbViaSizer->GetStaticBox(), wxID_ANY, _("Max height:"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_stMaxHeight->Wrap( -1 );
+ fgSizerRightCol->Add( m_stMaxHeight, 0, wxALIGN_CENTER_VERTICAL|wxLEFT, 5 );
+
+ m_tcMaxHeight = new wxTextCtrl( m_sbViaSizer->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
+ fgSizerRightCol->Add( m_tcMaxHeight, 0, wxEXPAND|wxALIGN_CENTER_VERTICAL, 5 );
+
+ m_stMaxHeightUnits = new wxStaticText( m_sbViaSizer->GetStaticBox(), wxID_ANY, _("mm"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_stMaxHeightUnits->Wrap( -1 );
+ fgSizerRightCol->Add( m_stMaxHeightUnits, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 3 );
+
+
+ fgSizerRightCol->Add( 0, 0, 1, wxEXPAND, 5 );
+
+
+ fgSizerRightCol->Add( 0, 0, 1, wxEXPAND, 5 );
+
+
+ fgSizerRightCol->Add( 0, 3, 1, wxEXPAND, 5 );
+
+ m_curvePointsLabel = new wxStaticText( m_sbViaSizer->GetStaticBox(), wxID_ANY, _("Curve points:"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_curvePointsLabel->Wrap( -1 );
+ fgSizerRightCol->Add( m_curvePointsLabel, 0, wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxLEFT, 3 );
+
+ m_curvePointsCtrl = new wxTextCtrl( m_sbViaSizer->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize( -1,-1 ), 0 );
+ fgSizerRightCol->Add( m_curvePointsCtrl, 0, wxALIGN_CENTER_VERTICAL|wxBOTTOM, 3 );
+
+
+ bSizerShapeColumns->Add( fgSizerRightCol, 1, wxEXPAND|wxTOP|wxLEFT, 5 );
+
+
+ bSizerTeardrops->Add( bSizerShapeColumns, 1, wxEXPAND|wxBOTTOM, 3 );
+
+
+ m_sbViaSizer->Add( bSizerTeardrops, 1, wxEXPAND, 5 );
m_MainSizer->Add( m_sbViaSizer, 0, wxEXPAND|wxTOP|wxRIGHT|wxLEFT, 10 );
@@ -321,6 +577,32 @@ DIALOG_TRACK_VIA_PROPERTIES_BASE::DIALOG_TRACK_VIA_PROPERTIES_BASE( wxWindow* pa
m_ViaTypeChoice->Connect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( DIALOG_TRACK_VIA_PROPERTIES_BASE::onViaEdit ), NULL, this );
m_ViaStartLayer->Connect( wxEVT_COMMAND_COMBOBOX_SELECTED, wxCommandEventHandler( DIALOG_TRACK_VIA_PROPERTIES_BASE::onViaEdit ), NULL, this );
m_ViaEndLayer->Connect( wxEVT_COMMAND_COMBOBOX_SELECTED, wxCommandEventHandler( DIALOG_TRACK_VIA_PROPERTIES_BASE::onViaEdit ), NULL, this );
+ m_cbTeardrops->Connect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( DIALOG_TRACK_VIA_PROPERTIES_BASE::onTeardropsUpdateUi ), NULL, this );
+ m_cbTeardropsUseNextTrack->Connect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( DIALOG_TRACK_VIA_PROPERTIES_BASE::onTeardropsUpdateUi ), NULL, this );
+ m_stHDRatio->Connect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( DIALOG_TRACK_VIA_PROPERTIES_BASE::onTeardropsUpdateUi ), NULL, this );
+ m_tcHDRatio->Connect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( DIALOG_TRACK_VIA_PROPERTIES_BASE::onTeardropsUpdateUi ), NULL, this );
+ m_stHDRatioUnits->Connect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( DIALOG_TRACK_VIA_PROPERTIES_BASE::onTeardropsUpdateUi ), NULL, this );
+ m_minTrackWidthHint->Connect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( DIALOG_TRACK_VIA_PROPERTIES_BASE::onTeardropsUpdateUi ), NULL, this );
+ m_bitmapTeardrop->Connect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( DIALOG_TRACK_VIA_PROPERTIES_BASE::onTeardropsUpdateUi ), NULL, this );
+ m_staticText15->Connect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( DIALOG_TRACK_VIA_PROPERTIES_BASE::onTeardropsUpdateUi ), NULL, this );
+ m_rbStraightLines->Connect( wxEVT_LEFT_DOWN, wxMouseEventHandler( DIALOG_TRACK_VIA_PROPERTIES_BASE::onStraightLines ), NULL, this );
+ m_rbStraightLines->Connect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( DIALOG_TRACK_VIA_PROPERTIES_BASE::onTeardropsUpdateUi ), NULL, this );
+ m_rbCurved->Connect( wxEVT_LEFT_DOWN, wxMouseEventHandler( DIALOG_TRACK_VIA_PROPERTIES_BASE::onCurvedLines ), NULL, this );
+ m_rbCurved->Connect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( DIALOG_TRACK_VIA_PROPERTIES_BASE::onTeardropsUpdateUi ), NULL, this );
+ m_stLenPercentLabel->Connect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( DIALOG_TRACK_VIA_PROPERTIES_BASE::onTeardropsUpdateUi ), NULL, this );
+ m_tcLenPercent->Connect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( DIALOG_TRACK_VIA_PROPERTIES_BASE::onTeardropsUpdateUi ), NULL, this );
+ m_stLenPercentUnits->Connect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( DIALOG_TRACK_VIA_PROPERTIES_BASE::onTeardropsUpdateUi ), NULL, this );
+ m_stMaxLen->Connect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( DIALOG_TRACK_VIA_PROPERTIES_BASE::onTeardropsUpdateUi ), NULL, this );
+ m_tcTdMaxLen->Connect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( DIALOG_TRACK_VIA_PROPERTIES_BASE::onTeardropsUpdateUi ), NULL, this );
+ m_stMaxLenUnits->Connect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( DIALOG_TRACK_VIA_PROPERTIES_BASE::onTeardropsUpdateUi ), NULL, this );
+ m_stHeightPercentLabel->Connect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( DIALOG_TRACK_VIA_PROPERTIES_BASE::onTeardropsUpdateUi ), NULL, this );
+ m_tcHeightPercent->Connect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( DIALOG_TRACK_VIA_PROPERTIES_BASE::onTeardropsUpdateUi ), NULL, this );
+ m_stHeightPercentUnits->Connect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( DIALOG_TRACK_VIA_PROPERTIES_BASE::onTeardropsUpdateUi ), NULL, this );
+ m_stMaxHeight->Connect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( DIALOG_TRACK_VIA_PROPERTIES_BASE::onTeardropsUpdateUi ), NULL, this );
+ m_tcMaxHeight->Connect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( DIALOG_TRACK_VIA_PROPERTIES_BASE::onTeardropsUpdateUi ), NULL, this );
+ m_stMaxHeightUnits->Connect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( DIALOG_TRACK_VIA_PROPERTIES_BASE::onTeardropsUpdateUi ), NULL, this );
+ m_curvePointsLabel->Connect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( DIALOG_TRACK_VIA_PROPERTIES_BASE::onCurvedEdgesUpdateUi ), NULL, this );
+ m_curvePointsCtrl->Connect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( DIALOG_TRACK_VIA_PROPERTIES_BASE::onCurvedEdgesUpdateUi ), NULL, this );
}
DIALOG_TRACK_VIA_PROPERTIES_BASE::~DIALOG_TRACK_VIA_PROPERTIES_BASE()
@@ -337,5 +619,31 @@ DIALOG_TRACK_VIA_PROPERTIES_BASE::~DIALOG_TRACK_VIA_PROPERTIES_BASE()
m_ViaTypeChoice->Disconnect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( DIALOG_TRACK_VIA_PROPERTIES_BASE::onViaEdit ), NULL, this );
m_ViaStartLayer->Disconnect( wxEVT_COMMAND_COMBOBOX_SELECTED, wxCommandEventHandler( DIALOG_TRACK_VIA_PROPERTIES_BASE::onViaEdit ), NULL, this );
m_ViaEndLayer->Disconnect( wxEVT_COMMAND_COMBOBOX_SELECTED, wxCommandEventHandler( DIALOG_TRACK_VIA_PROPERTIES_BASE::onViaEdit ), NULL, this );
+ m_cbTeardrops->Disconnect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( DIALOG_TRACK_VIA_PROPERTIES_BASE::onTeardropsUpdateUi ), NULL, this );
+ m_cbTeardropsUseNextTrack->Disconnect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( DIALOG_TRACK_VIA_PROPERTIES_BASE::onTeardropsUpdateUi ), NULL, this );
+ m_stHDRatio->Disconnect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( DIALOG_TRACK_VIA_PROPERTIES_BASE::onTeardropsUpdateUi ), NULL, this );
+ m_tcHDRatio->Disconnect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( DIALOG_TRACK_VIA_PROPERTIES_BASE::onTeardropsUpdateUi ), NULL, this );
+ m_stHDRatioUnits->Disconnect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( DIALOG_TRACK_VIA_PROPERTIES_BASE::onTeardropsUpdateUi ), NULL, this );
+ m_minTrackWidthHint->Disconnect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( DIALOG_TRACK_VIA_PROPERTIES_BASE::onTeardropsUpdateUi ), NULL, this );
+ m_bitmapTeardrop->Disconnect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( DIALOG_TRACK_VIA_PROPERTIES_BASE::onTeardropsUpdateUi ), NULL, this );
+ m_staticText15->Disconnect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( DIALOG_TRACK_VIA_PROPERTIES_BASE::onTeardropsUpdateUi ), NULL, this );
+ m_rbStraightLines->Disconnect( wxEVT_LEFT_DOWN, wxMouseEventHandler( DIALOG_TRACK_VIA_PROPERTIES_BASE::onStraightLines ), NULL, this );
+ m_rbStraightLines->Disconnect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( DIALOG_TRACK_VIA_PROPERTIES_BASE::onTeardropsUpdateUi ), NULL, this );
+ m_rbCurved->Disconnect( wxEVT_LEFT_DOWN, wxMouseEventHandler( DIALOG_TRACK_VIA_PROPERTIES_BASE::onCurvedLines ), NULL, this );
+ m_rbCurved->Disconnect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( DIALOG_TRACK_VIA_PROPERTIES_BASE::onTeardropsUpdateUi ), NULL, this );
+ m_stLenPercentLabel->Disconnect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( DIALOG_TRACK_VIA_PROPERTIES_BASE::onTeardropsUpdateUi ), NULL, this );
+ m_tcLenPercent->Disconnect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( DIALOG_TRACK_VIA_PROPERTIES_BASE::onTeardropsUpdateUi ), NULL, this );
+ m_stLenPercentUnits->Disconnect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( DIALOG_TRACK_VIA_PROPERTIES_BASE::onTeardropsUpdateUi ), NULL, this );
+ m_stMaxLen->Disconnect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( DIALOG_TRACK_VIA_PROPERTIES_BASE::onTeardropsUpdateUi ), NULL, this );
+ m_tcTdMaxLen->Disconnect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( DIALOG_TRACK_VIA_PROPERTIES_BASE::onTeardropsUpdateUi ), NULL, this );
+ m_stMaxLenUnits->Disconnect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( DIALOG_TRACK_VIA_PROPERTIES_BASE::onTeardropsUpdateUi ), NULL, this );
+ m_stHeightPercentLabel->Disconnect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( DIALOG_TRACK_VIA_PROPERTIES_BASE::onTeardropsUpdateUi ), NULL, this );
+ m_tcHeightPercent->Disconnect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( DIALOG_TRACK_VIA_PROPERTIES_BASE::onTeardropsUpdateUi ), NULL, this );
+ m_stHeightPercentUnits->Disconnect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( DIALOG_TRACK_VIA_PROPERTIES_BASE::onTeardropsUpdateUi ), NULL, this );
+ m_stMaxHeight->Disconnect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( DIALOG_TRACK_VIA_PROPERTIES_BASE::onTeardropsUpdateUi ), NULL, this );
+ m_tcMaxHeight->Disconnect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( DIALOG_TRACK_VIA_PROPERTIES_BASE::onTeardropsUpdateUi ), NULL, this );
+ m_stMaxHeightUnits->Disconnect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( DIALOG_TRACK_VIA_PROPERTIES_BASE::onTeardropsUpdateUi ), NULL, this );
+ m_curvePointsLabel->Disconnect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( DIALOG_TRACK_VIA_PROPERTIES_BASE::onCurvedEdgesUpdateUi ), NULL, this );
+ m_curvePointsCtrl->Disconnect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( DIALOG_TRACK_VIA_PROPERTIES_BASE::onCurvedEdgesUpdateUi ), NULL, this );
}
diff --git a/pcbnew/dialogs/dialog_track_via_properties_base.fbp b/pcbnew/dialogs/dialog_track_via_properties_base.fbp
index b8f267b089..a6eb37929b 100644
--- a/pcbnew/dialogs/dialog_track_via_properties_base.fbp
+++ b/pcbnew/dialogs/dialog_track_via_properties_base.fbp
@@ -75,216 +75,228 @@
protected
10
- wxEXPAND|wxRIGHT
+ wxEXPAND
5
bSizerNetWidgets
wxHORIZONTAL
none
-
- 5
- wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxRIGHT|wxLEFT
- 0
-
- 1
- 1
- 1
- 1
-
-
-
-
-
-
-
- 1
- 0
- 1
-
- 1
- 0
- Dock
- 0
- Left
- 1
-
- 1
-
- 0
- 0
- wxID_ANY
- Net:
- 0
-
- 0
-
-
- 0
-
- 1
- m_netSelectorLabel
- 1
-
-
- protected
- 1
-
- Resizable
- 1
-
-
-
- 0
-
-
-
-
- -1
-
-
- 5
- wxBOTTOM|wxLEFT|wxRIGHT|wxEXPAND
+ 10
+ wxRIGHT|wxALIGN_CENTER_VERTICAL
1
-
- 1
- 1
- 1
- 1
-
-
-
-
-
-
-
- 1
- 0
- NET_SELECTOR
- 1
-
-
- 1
-
- 0
- Dock
- 0
- Left
- 1
-
- 1
-
- 0
- 0
- wxID_ANY
- #include <widgets/net_selector.h>
-
- 0
-
-
- 0
+
- 1
- m_netSelector
- 1
-
-
- protected
- 1
-
- Resizable
-
- 1
-
- ; ; forward_declare
- 0
-
-
-
-
+ bNetWidgetsLeftCol
+ wxHORIZONTAL
+ none
+
+ 5
+ wxRIGHT|wxALIGN_CENTER_VERTICAL
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ Net:
+ 0
+
+ 0
+
+
+ 0
+
+ 1
+ m_netSelectorLabel
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+
+ 0
+
+
+
+
+ -1
+
+
+
+ 5
+ wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL
+ 1
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ NET_SELECTOR
+ 1
+
+
+ 1
+
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ #include <widgets/net_selector.h>
+
+ 0
+
+
+ 0
+
+ 1
+ m_netSelector
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+
+ 1
+
+ ; ; forward_declare
+ 0
+
+
+
+
+
+
- 5
- wxEXPAND
- 0
-
- 0
- protected
- 20
-
-
-
- 5
- wxBOTTOM|wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL
- 0
-
- 1
- 1
- 1
- 1
-
-
-
-
-
-
-
- 1
- 0
- 0
- 1
-
- 1
- 0
- Dock
- 0
- Left
- 1
-
- 1
-
- 0
- 0
- wxID_ANY
- Automatically update via nets
-
- 0
-
-
- 0
+ 10
+ wxLEFT|wxALIGN_CENTER_VERTICAL
+ 1
+
- 1
- m_viaNotFree
- 1
-
-
- protected
- 1
-
- Resizable
- 1
-
- wxCHK_3STATE
- ; ; forward_declare
- 0
- Automatically change the net of this via when the pads or zones it touches are changed
-
- wxFILTER_NONE
- wxDefaultValidator
-
-
-
-
- onViaNotFreeClicked
+ bNetWidgetsRightCol
+ wxHORIZONTAL
+ none
+
+ 10
+ wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ Automatically update via nets
+
+ 0
+
+
+ 0
+
+ 1
+ m_viaNotFree
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+ wxCHK_3STATE
+ ; ; forward_declare
+ 0
+ Automatically change the net of this via when the pads or zones it touches are changed
+
+ wxFILTER_NONE
+ wxDefaultValidator
+
+
+
+
+ onViaNotFreeClicked
+
+
- 5
- wxBOTTOM|wxEXPAND|wxLEFT|wxRIGHT|wxTOP
+ 10
+ wxEXPAND|wxBOTTOM
0
1
@@ -341,8 +353,8 @@
- 5
- wxALL
+ 2
+ wxBOTTOM
0
1
@@ -420,1221 +432,1128 @@
protected
5
- wxEXPAND|wxRIGHT|wxLEFT
- 5
-
- 3
- wxBOTH
- 1
-
- 5
+ wxEXPAND
+ 1
+
- fgTrackLeftGridSizer
- wxFLEX_GROWMODE_SPECIFIED
+ bSizerTracksLeftCol
+ wxVERTICAL
none
- 7
- 3
-
- 3
- wxALIGN_CENTER_VERTICAL
- 0
-
- 1
- 1
- 1
- 1
-
-
-
-
-
-
-
- 1
- 0
- 1
-
- 0
- 0
- Dock
- 0
- Left
- 1
-
- 1
-
- 0
- 0
- wxID_ANY
- Start point X:
- 0
-
- 0
-
-
- 0
-
- 1
- m_TrackStartXLabel
- 1
-
-
- protected
- 1
-
- Resizable
- 1
-
-
-
- 0
-
-
-
-
- -1
-
-
-
- 3
- wxEXPAND
- 0
-
- 1
- 1
- 1
- 1
-
-
-
-
-
-
-
- 1
- 0
- 1
-
- 1
- 0
- Dock
- 0
- Left
- 1
-
- 1
-
- 0
- 0
- wxID_ANY
-
- 0
-
- 0
-
- 0
-
- 1
- m_TrackStartXCtrl
- 1
-
-
- protected
- 1
-
- Resizable
- 1
-
-
- ; ; forward_declare
- 0
-
-
- wxFILTER_NONE
- wxDefaultValidator
-
-
-
-
-
-
-
-
- 3
- wxALIGN_CENTER_VERTICAL|wxRIGHT
- 0
-
- 1
- 1
- 1
- 1
-
-
-
-
-
-
-
- 1
- 0
- 1
-
- 1
- 0
- Dock
- 0
- Left
- 1
-
- 1
-
- 0
- 0
- wxID_ANY
- Unit
- 0
-
- 0
-
-
- 0
-
- 1
- m_TrackStartXUnit
- 1
-
-
- protected
- 1
-
- Resizable
- 1
-
-
-
- 0
-
-
-
-
- -1
-
-
-
- 5
- wxALIGN_CENTER_VERTICAL|wxBOTTOM
- 0
-
- 1
- 1
- 1
- 1
-
-
-
-
-
-
-
- 1
- 0
- 1
-
- 0
- 0
- Dock
- 0
- Left
- 1
-
- 1
-
- 0
- 0
- wxID_ANY
- Start point Y:
- 0
-
- 0
-
-
- 0
-
- 1
- m_TrackStartYLabel
- 1
-
-
- protected
- 1
-
- Resizable
- 1
-
-
-
- 0
-
-
-
-
- -1
-
-
-
- 5
- wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxEXPAND
- 0
-
- 1
- 1
- 1
- 1
-
-
-
-
-
-
-
- 1
- 0
- 1
-
- 1
- 0
- Dock
- 0
- Left
- 1
-
- 1
-
- 0
- 0
- wxID_ANY
-
- 0
-
- 0
-
- 0
-
- 1
- m_TrackStartYCtrl
- 1
-
-
- protected
- 1
-
- Resizable
- 1
-
-
- ; ; forward_declare
- 0
-
-
- wxFILTER_NONE
- wxDefaultValidator
-
-
-
-
-
-
-
-
- 5
- wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxRIGHT
- 0
-
- 1
- 1
- 1
- 1
-
-
-
-
-
-
-
- 1
- 0
- 1
-
- 1
- 0
- Dock
- 0
- Left
- 1
-
- 1
-
- 0
- 0
- wxID_ANY
- Unit
- 0
-
- 0
-
-
- 0
-
- 1
- m_TrackStartYUnit
- 1
-
-
- protected
- 1
-
- Resizable
- 1
-
-
-
- 0
-
-
-
-
- -1
-
-
-
- 5
- wxALIGN_CENTER_VERTICAL
- 0
-
- 1
- 1
- 1
- 1
-
-
-
-
-
-
-
- 1
- 0
- 1
-
- 0
- 0
- Dock
- 0
- Left
- 1
-
- 1
-
- 0
- 0
- wxID_ANY
- End point X:
- 0
-
- 0
-
-
- 0
-
- 1
- m_TrackEndXLabel
- 1
-
-
- protected
- 1
-
- Resizable
- 1
-
-
-
- 0
-
-
-
-
- -1
-
-
-
- 5
- wxALIGN_CENTER_VERTICAL|wxEXPAND
- 0
-
- 1
- 1
- 1
- 1
-
-
-
-
-
-
-
- 1
- 0
- 1
-
- 1
- 0
- Dock
- 0
- Left
- 1
-
- 1
-
- 0
- 0
- wxID_ANY
-
- 0
-
- 0
-
- 0
-
- 1
- m_TrackEndXCtrl
- 1
-
-
- protected
- 1
-
- Resizable
- 1
-
-
- ; ; forward_declare
- 0
-
-
- wxFILTER_NONE
- wxDefaultValidator
-
-
-
-
-
-
-
-
- 5
- wxALIGN_CENTER_VERTICAL|wxRIGHT
- 0
-
- 1
- 1
- 1
- 1
-
-
-
-
-
-
-
- 1
- 0
- 1
-
- 1
- 0
- Dock
- 0
- Left
- 1
-
- 1
-
- 0
- 0
- wxID_ANY
- Unit
- 0
-
- 0
-
-
- 0
-
- 1
- m_TrackEndXUnit
- 1
-
-
- protected
- 1
-
- Resizable
- 1
-
-
-
- 0
-
-
-
-
- -1
-
-
8
- wxALIGN_CENTER_VERTICAL|wxBOTTOM
+ wxEXPAND|wxBOTTOM
0
-
- 1
- 1
- 1
- 1
-
-
-
-
-
-
-
- 1
- 0
- 1
-
- 0
- 0
- Dock
- 0
- Left
- 1
-
- 1
-
- 0
- 0
- wxID_ANY
- End point Y:
- 0
-
- 0
-
-
- 0
+
+ 5
+ wxBOTH
+ 1,3
+
+ 2
- 1
- m_TrackEndYLabel
- 1
-
-
- protected
- 1
-
- Resizable
- 1
-
-
-
- 0
-
-
-
-
- -1
-
-
-
- 8
- wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxEXPAND
- 0
-
- 1
- 1
- 1
- 1
-
-
-
-
-
-
-
- 1
- 0
- 1
-
- 1
- 0
- Dock
- 0
- Left
- 1
-
- 1
-
- 0
- 0
- wxID_ANY
-
- 0
-
- 0
-
- 0
-
- 1
- m_TrackEndYCtrl
- 1
-
-
- protected
- 1
-
- Resizable
- 1
-
-
- ; ; forward_declare
- 0
-
-
- wxFILTER_NONE
- wxDefaultValidator
-
-
-
-
-
-
-
-
- 8
- wxALIGN_CENTER_VERTICAL|wxBOTTOM
- 0
-
- 1
- 1
- 1
- 1
-
-
-
-
-
-
-
- 1
- 0
- 1
-
- 1
- 0
- Dock
- 0
- Left
- 1
-
- 1
-
- 0
- 0
- wxID_ANY
- Unit
- 0
-
- 0
-
-
- 0
-
- 1
- m_TrackEndYUnit
- 1
-
-
- protected
- 1
-
- Resizable
- 1
-
-
-
- 0
-
-
-
-
- -1
-
-
-
- 5
- wxALIGN_CENTER_VERTICAL|wxTOP
- 0
-
- 1
- 1
- 1
- 1
-
-
-
-
-
-
-
- 1
- 0
- 1
-
- 1
- 0
- Dock
- 0
- Left
- 1
-
- 1
-
- 0
- 0
- wxID_ANY
- Pre-defined widths:
- 0
-
- 0
-
-
- 0
-
- 1
- m_DesignRuleWidths
- 1
-
-
- protected
- 1
-
- Resizable
- 1
-
-
- ; forward_declare
- 0
-
-
-
-
- -1
-
-
-
- 5
- wxEXPAND|wxTOP|wxALIGN_CENTER_VERTICAL
- 0
-
- 1
- 1
- 1
- 1
-
-
-
-
-
-
-
- 1
- 0
-
- 1
-
- 1
- 0
- Dock
- 0
- Left
- 1
-
- 1
-
- 0
- 0
- wxID_ANY
-
- 0
-
-
- 0
-
- 1
- m_DesignRuleWidthsCtrl
- 1
-
-
- protected
- 1
-
- Resizable
- 0
- 1
-
-
- ; forward_declare
- 0
-
-
- wxFILTER_NONE
- wxDefaultValidator
-
-
-
-
- onWidthSelect
-
-
-
- 5
- wxALIGN_CENTER_VERTICAL|wxTOP|wxRIGHT
- 0
-
- 1
- 1
- 1
- 1
-
-
-
-
-
-
-
- 1
- 0
- 1
-
- 1
- 0
- Dock
- 0
- Left
- 1
-
- 1
-
- 0
- 0
- wxID_ANY
- Unit
- 0
-
- 0
-
-
- 0
-
- 1
- m_DesignRuleWidthsUnits
- 1
-
-
- protected
- 1
-
- Resizable
- 1
-
-
- ; forward_declare
- 0
-
-
-
-
- -1
-
-
-
- 5
- wxALIGN_CENTER_VERTICAL
- 0
-
- 1
- 1
- 1
- 1
-
-
-
-
-
-
-
- 1
- 0
- 1
-
- 0
- 0
- Dock
- 0
- Left
- 1
-
- 1
-
- 0
- 0
- wxID_ANY
- Track width:
- 0
-
- 0
-
-
- 0
-
- 1
- m_TrackWidthLabel
- 1
-
-
- protected
- 1
-
- Resizable
- 1
-
-
-
- 0
-
-
-
-
- -1
-
-
-
- 5
- wxALIGN_CENTER_VERTICAL|wxEXPAND
- 0
-
- 1
- 1
- 1
- 1
-
-
-
-
-
-
-
- 1
- 0
- 1
-
- 1
- 0
- Dock
- 0
- Left
- 1
-
- 1
-
- 0
- 0
- wxID_ANY
-
- 0
-
-
-
- 0
-
- 1
- m_TrackWidthCtrl
- 1
-
-
- protected
- 1
-
- Resizable
- 1
-
-
- ; forward_declare
- 0
-
-
- wxFILTER_NONE
- wxDefaultValidator
-
-
-
-
-
- onWidthEdit
-
-
-
- 5
- wxALIGN_CENTER_VERTICAL|wxTOP|wxRIGHT
- 0
-
- 1
- 1
- 1
- 1
-
-
-
-
-
-
-
- 1
- 0
- 1
-
- 1
- 0
- Dock
- 0
- Left
- 1
-
- 1
-
- 0
- 0
- wxID_ANY
- Unit
- 0
-
- 0
-
-
- 0
-
- 1
- m_TrackWidthUnit
- 1
-
-
- protected
- 1
-
- Resizable
- 1
-
-
-
- 0
-
-
-
-
- -1
+ fgTrackEnds
+ wxFLEX_GROWMODE_SPECIFIED
+ none
+ 7
+ 3
+
+ 3
+ wxALIGN_CENTER_VERTICAL
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 0
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ Start X:
+ 0
+
+ 0
+
+
+ 0
+
+ 1
+ m_TrackStartXLabel
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+
+ 0
+
+
+
+
+ -1
+
+
+
+ 3
+ wxALIGN_CENTER_VERTICAL|wxEXPAND
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+
+ 0
+
+ 0
+
+ 0
+
+ 1
+ m_TrackStartXCtrl
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+ ; ; forward_declare
+ 0
+
+
+ wxFILTER_NONE
+ wxDefaultValidator
+
+
+
+
+
+
+
+
+ 8
+ wxALIGN_CENTER_VERTICAL|wxLEFT
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 0
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ Y:
+ 0
+
+ 0
+
+
+ 0
+
+ 1
+ m_TrackStartYLabel
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+
+ 0
+
+
+
+
+ -1
+
+
+
+ 3
+ wxALIGN_CENTER_VERTICAL|wxEXPAND
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+
+ 0
+
+ 0
+
+ 0
+
+ 1
+ m_TrackStartYCtrl
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+ ; ; forward_declare
+ 0
+
+
+ wxFILTER_NONE
+ wxDefaultValidator
+
+
+
+
+
+
+
+
+ 5
+ wxALIGN_CENTER_VERTICAL
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ mm
+ 0
+
+ 0
+
+
+ 0
+
+ 1
+ m_TrackStartYUnit
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+
+ 0
+
+
+
+
+ -1
+
+
+
+ 5
+ wxALIGN_CENTER_VERTICAL
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 0
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ End X:
+ 0
+
+ 0
+
+
+ 0
+
+ 1
+ m_TrackEndXLabel
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+
+ 0
+
+
+
+
+ -1
+
+
+
+ 3
+ wxALIGN_CENTER_VERTICAL|wxEXPAND
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+
+ 0
+
+ 0
+
+ 0
+
+ 1
+ m_TrackEndXCtrl
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+ ; ; forward_declare
+ 0
+
+
+ wxFILTER_NONE
+ wxDefaultValidator
+
+
+
+
+
+
+
+
+ 8
+ wxALIGN_CENTER_VERTICAL|wxLEFT
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 0
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ Y:
+ 0
+
+ 0
+
+
+ 0
+
+ 1
+ m_TrackEndYLabel
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+
+ 0
+
+
+
+
+ -1
+
+
+
+ 3
+ wxALIGN_CENTER_VERTICAL|wxEXPAND
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+
+ 0
+
+ 0
+
+ 0
+
+ 1
+ m_TrackEndYCtrl
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+ ; ; forward_declare
+ 0
+
+
+ wxFILTER_NONE
+ wxDefaultValidator
+
+
+
+
+
+
+
+
+ 8
+ wxALIGN_CENTER_VERTICAL
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ mm
+ 0
+
+ 0
+
+
+ 0
+
+ 1
+ m_TrackEndYUnit
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+
+ 0
+
+
+
+
+ -1
+
+
5
wxEXPAND
1
-
- 0
- protected
- 0
-
-
-
- 5
- wxTOP|wxBOTTOM
- 0
-
- 1
- 1
- 1
- 1
-
-
-
-
-
-
-
- 1
- 0
- 0
- 1
-
- 1
- 0
- Dock
- 0
- Left
- 1
-
- 1
-
- 0
- 0
- wxID_ANY
- Use net class widths
-
- 0
-
-
- 0
+
+ 3
+ wxBOTH
+ 1
+
+ 3
- 1
- m_trackNetclass
- 1
-
-
- protected
- 1
-
- Resizable
- 1
-
-
-
- 0
-
-
- wxFILTER_NONE
- wxDefaultValidator
-
-
-
-
- onTrackNetclassCheck
-
-
-
- 5
- wxEXPAND
- 1
-
- 0
- protected
- 0
+ fgTrackSizes
+ wxFLEX_GROWMODE_SPECIFIED
+ none
+ 7
+ 3
+
+ 5
+ wxALIGN_CENTER_VERTICAL|wxTOP
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ Pre-defined sizes:
+ 0
+
+ 0
+
+
+ 0
+
+ 1
+ m_DesignRuleWidths
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+ ; forward_declare
+ 0
+
+
+
+
+ -1
+
+
+
+ 5
+ wxEXPAND|wxTOP|wxALIGN_CENTER_VERTICAL
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+
+ 0
+
+
+ 0
+
+ 1
+ m_DesignRuleWidthsCtrl
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 0
+ 1
+
+
+ ; forward_declare
+ 0
+
+
+ wxFILTER_NONE
+ wxDefaultValidator
+
+
+
+
+ onWidthSelect
+
+
+
+ 5
+ wxALIGN_CENTER_VERTICAL|wxTOP
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ mm
+ 0
+
+ 0
+
+
+ 0
+
+ 1
+ m_DesignRuleWidthsUnits
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+ ; forward_declare
+ 0
+
+
+
+
+ -1
+
+
+
+ 5
+ wxALIGN_CENTER_VERTICAL
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 0
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ Track width:
+ 0
+
+ 0
+
+
+ 0
+
+ 1
+ m_TrackWidthLabel
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+
+ 0
+
+
+
+
+ -1
+
+
+
+ 5
+ wxALIGN_CENTER_VERTICAL|wxEXPAND
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+
+ 0
+
+
+
+ 0
+
+ 1
+ m_TrackWidthCtrl
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+ ; forward_declare
+ 0
+
+
+ wxFILTER_NONE
+ wxDefaultValidator
+
+
+
+
+
+ onWidthEdit
+
+
+
+ 5
+ wxALIGN_CENTER_VERTICAL|wxTOP
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ mm
+ 0
+
+ 0
+
+
+ 0
+
+ 1
+ m_TrackWidthUnit
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+
+ 0
+
+
+
+
+ -1
+
+
+
+ 5
+ wxEXPAND
+ 1
+
+ 0
+ protected
+ 0
+
+
+
+ 3
+ wxBOTTOM
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ Use net class widths
+
+ 0
+
+
+ 0
+
+ 1
+ m_trackNetclass
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+
+ 0
+
+
+ wxFILTER_NONE
+ wxDefaultValidator
+
+
+
+
+ onTrackNetclassCheck
+
+
+
+ 5
+ wxEXPAND
+ 1
+
+ 0
+ protected
+ 0
+
+
@@ -1650,13 +1569,13 @@
- 10
+ 3
wxEXPAND|wxRIGHT
- 4
+ 1
3
wxBOTH
- 1
+ 2
5
@@ -1666,8 +1585,8 @@
1
3
- 25
- wxALIGN_CENTER_VERTICAL|wxRIGHT
+ 5
+ wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT
0
1
@@ -1726,6 +1645,16 @@
-1
+
+ 5
+ wxEXPAND
+ 0
+
+ 0
+ protected
+ 25
+
+
5
wxALIGN_CENTER_VERTICAL|wxEXPAND
@@ -1804,1585 +1733,3588 @@
Vias
m_sbViaSizer
- wxHORIZONTAL
+ wxVERTICAL
1
protected
5
- wxEXPAND|wxRIGHT|wxLEFT
- 5
-
- 3
- wxBOTH
- 1
-
- 5
-
- viaLeftColumn
- wxFLEX_GROWMODE_SPECIFIED
- none
- 6
- 4
-
- 3
- wxALIGN_CENTER_VERTICAL
- 0
-
- 1
- 1
- 1
- 1
-
-
-
-
-
-
-
- 1
- 0
- 1
-
- 0
- 0
- Dock
- 0
- Left
- 1
-
- 1
-
- 0
- 0
- wxID_ANY
- Position X:
- 0
-
- 0
-
-
- 0
-
- 1
- m_ViaXLabel
- 1
-
-
- protected
- 1
-
- Resizable
- 1
-
-
-
- 0
-
-
-
-
- -1
-
-
-
- 3
- wxEXPAND|wxALIGN_CENTER_VERTICAL
- 0
-
- 1
- 1
- 1
- 1
-
-
-
-
-
-
-
- 1
- 0
- 1
-
- 1
- 0
- Dock
- 0
- Left
- 1
-
- 1
-
- 0
- 0
- wxID_ANY
-
- 0
-
- 0
-
- 0
-
- 1
- m_ViaXCtrl
- 1
-
-
- protected
- 1
-
- Resizable
- 1
-
-
- ; ; forward_declare
- 0
-
-
- wxFILTER_NONE
- wxDefaultValidator
-
-
-
-
-
-
-
-
- 3
- wxALIGN_CENTER_VERTICAL|wxRIGHT
- 0
-
- 1
- 1
- 1
- 1
-
-
-
-
-
-
-
- 1
- 0
- 1
-
- 1
- 0
- Dock
- 0
- Left
- 1
-
- 1
-
- 0
- 0
- wxID_ANY
- Unit
- 0
-
- 0
-
-
- 0
-
- 1
- m_ViaXUnit
- 1
-
-
- protected
- 1
-
- Resizable
- 1
-
-
-
- 0
-
-
-
-
- -1
-
-
-
- 5
- wxALIGN_CENTER_VERTICAL|wxBOTTOM
- 0
-
- 1
- 1
- 1
- 1
-
-
-
-
-
-
-
- 1
- 0
- 1
-
- 0
- 0
- Dock
- 0
- Left
- 1
-
- 1
-
- 0
- 0
- wxID_ANY
- Position Y:
- 0
-
- 0
-
-
- 0
-
- 1
- m_ViaYLabel
- 1
-
-
- protected
- 1
-
- Resizable
- 1
-
-
-
- 0
-
-
-
-
- -1
-
-
-
- 5
- wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxEXPAND
- 0
-
- 1
- 1
- 1
- 1
-
-
-
-
-
-
-
- 1
- 0
- 1
-
- 1
- 0
- Dock
- 0
- Left
- 1
-
- 1
-
- 0
- 0
- wxID_ANY
-
- 0
-
- 0
-
- 0
-
- 1
- m_ViaYCtrl
- 1
-
-
- protected
- 1
-
- Resizable
- 1
-
-
- ; ; forward_declare
- 0
-
-
- wxFILTER_NONE
- wxDefaultValidator
-
-
-
-
-
-
-
-
- 5
- wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxRIGHT
- 0
-
- 1
- 1
- 1
- 1
-
-
-
-
-
-
-
- 1
- 0
- 1
-
- 1
- 0
- Dock
- 0
- Left
- 1
-
- 1
-
- 0
- 0
- wxID_ANY
- Unit
- 0
-
- 0
-
-
- 0
-
- 1
- m_ViaYUnit
- 1
-
-
- protected
- 1
-
- Resizable
- 1
-
-
-
- 0
-
-
-
-
- -1
-
-
-
- 5
- wxALIGN_CENTER_VERTICAL|wxTOP
- 0
-
- 1
- 1
- 1
- 1
-
-
-
-
-
-
-
- 1
- 0
- 1
-
- 0
- 0
- Dock
- 0
- Left
- 1
-
- 1
-
- 0
- 0
- wxID_ANY
- Pre-defined sizes:
- 0
-
- 0
-
-
- 0
-
- 1
- m_DesignRuleVias
- 1
-
-
- protected
- 1
-
- Resizable
- 1
-
-
-
- 0
-
-
-
-
- -1
-
-
-
- 5
- wxALIGN_CENTER_VERTICAL|wxEXPAND|wxTOP
- 0
-
- 1
- 1
- 1
- 1
-
-
-
-
-
-
-
- 1
- 0
-
- 1
-
- 1
- 0
- Dock
- 0
- Left
- 1
-
- 1
-
- 0
- 0
- wxID_ANY
-
- 0
-
-
- 0
-
- 1
- m_DesignRuleViasCtrl
- 1
-
-
- protected
- 1
-
- Resizable
- 0
- 1
-
-
-
- 0
-
-
- wxFILTER_NONE
- wxDefaultValidator
-
-
-
-
- onViaSelect
-
-
-
- 5
- wxALIGN_CENTER_VERTICAL|wxRIGHT|wxTOP
- 0
-
- 1
- 1
- 1
- 1
-
-
-
-
-
-
-
- 1
- 0
- 1
-
- 1
- 0
- Dock
- 0
- Left
- 1
-
- 1
-
- 0
- 0
- wxID_ANY
- Unit
- 0
-
- 0
-
-
- 0
-
- 1
- m_DesignRuleViasUnit
- 1
-
-
- protected
- 1
-
- Resizable
- 1
-
-
-
- 0
-
-
-
-
- -1
-
-
-
- 5
- wxALIGN_CENTER_VERTICAL
- 0
-
- 1
- 1
- 1
- 1
-
-
-
-
-
-
-
- 1
- 0
- 1
-
- 0
- 0
- Dock
- 0
- Left
- 1
-
- 1
-
- 0
- 0
- wxID_ANY
- Via diameter:
- 0
-
- 0
-
-
- 0
-
- 1
- m_ViaDiameterLabel
- 1
-
-
- protected
- 1
-
- Resizable
- 1
-
-
-
- 0
-
-
-
-
- -1
-
-
-
- 5
- wxALIGN_CENTER_VERTICAL|wxEXPAND
- 0
-
- 1
- 1
- 1
- 1
-
-
-
-
-
-
-
- 1
- 0
- 1
-
- 1
- 0
- Dock
- 0
- Left
- 1
-
- 1
-
- 0
- 0
- wxID_ANY
-
- 0
-
- 0
-
- 0
-
- 1
- m_ViaDiameterCtrl
- 1
-
-
- protected
- 1
-
- Resizable
- 1
-
-
- ; ; forward_declare
- 0
-
-
- wxFILTER_NONE
- wxDefaultValidator
-
-
-
-
-
- onViaEdit
-
-
-
- 5
- wxALIGN_CENTER_VERTICAL|wxRIGHT
- 0
-
- 1
- 1
- 1
- 1
-
-
-
-
-
-
-
- 1
- 0
- 1
-
- 1
- 0
- Dock
- 0
- Left
- 1
-
- 1
-
- 0
- 0
- wxID_ANY
- Unit
- 0
-
- 0
-
-
- 0
-
- 1
- m_ViaDiameterUnit
- 1
-
-
- protected
- 1
-
- Resizable
- 1
-
-
-
- 0
-
-
-
-
- -1
-
-
-
- 5
- wxALIGN_CENTER_VERTICAL
- 0
-
- 1
- 1
- 1
- 1
-
-
-
-
-
-
-
- 1
- 0
- 1
-
- 0
- 0
- Dock
- 0
- Left
- 1
-
- 1
-
- 0
- 0
- wxID_ANY
- Via hole:
- 0
-
- 0
-
-
- 0
-
- 1
- m_ViaDrillLabel
- 1
-
-
- protected
- 1
-
- Resizable
- 1
-
-
-
- 0
-
-
-
-
- -1
-
-
-
- 5
- wxALIGN_CENTER_VERTICAL|wxEXPAND
- 0
-
- 1
- 1
- 1
- 1
-
-
-
-
-
-
-
- 1
- 0
- 1
-
- 1
- 0
- Dock
- 0
- Left
- 1
-
- 1
-
- 0
- 0
- wxID_ANY
-
- 0
-
- 0
-
- 0
-
- 1
- m_ViaDrillCtrl
- 1
-
-
- protected
- 1
-
- Resizable
- 1
-
-
- ; ; forward_declare
- 0
-
-
- wxFILTER_NONE
- wxDefaultValidator
-
-
-
-
-
- onViaEdit
-
-
-
- 5
- wxALIGN_CENTER_VERTICAL|wxRIGHT
- 0
-
- 1
- 1
- 1
- 1
-
-
-
-
-
-
-
- 1
- 0
- 1
-
- 1
- 0
- Dock
- 0
- Left
- 1
-
- 1
-
- 0
- 0
- wxID_ANY
- Unit
- 0
-
- 0
-
-
- 0
-
- 1
- m_ViaDrillUnit
- 1
-
-
- protected
- 1
-
- Resizable
- 1
-
-
-
- 0
-
-
-
-
- -1
-
-
-
- 5
- wxEXPAND
- 1
-
- 0
- protected
- 0
-
-
-
- 5
- wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM
- 0
-
- 1
- 1
- 1
- 1
-
-
-
-
-
-
-
- 1
- 0
- 0
- 1
-
- 1
- 0
- Dock
- 0
- Left
- 1
-
- 1
-
- 0
- 0
- wxID_ANY
- Use net class sizes
-
- 0
-
-
- 0
-
- 1
- m_viaNetclass
- 1
-
-
- protected
- 1
-
- Resizable
- 1
-
-
-
- 0
-
-
- wxFILTER_NONE
- wxDefaultValidator
-
-
-
-
- onViaNetclassCheck
-
-
-
- 5
- wxEXPAND
- 1
-
- 0
- protected
- 0
-
-
-
-
-
- 15
- wxEXPAND|wxRIGHT|wxLEFT
+ wxEXPAND
0
-
- 0
- protected
- 0
+
+
+ bSizerViaCols
+ wxHORIZONTAL
+ none
+
+ 5
+ wxEXPAND
+ 1
+
+
+ bSizerViasLeftCol
+ wxVERTICAL
+ none
+
+ 8
+ wxEXPAND|wxBOTTOM
+ 0
+
+ 5
+ wxBOTH
+ 1,3
+
+ 2
+
+ fgViaPos
+ wxFLEX_GROWMODE_SPECIFIED
+ none
+ 6
+ 4
+
+ 3
+ wxALIGN_CENTER_VERTICAL
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 0
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ Pos X:
+ 0
+
+ 0
+
+
+ 0
+
+ 1
+ m_ViaXLabel
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+
+ 0
+
+
+
+
+ -1
+
+
+
+ 3
+ wxEXPAND|wxALIGN_CENTER_VERTICAL
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+
+ 0
+
+ 0
+
+ 0
+
+ 1
+ m_ViaXCtrl
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+ ; ; forward_declare
+ 0
+
+
+ wxFILTER_NONE
+ wxDefaultValidator
+
+
+
+
+
+
+
+
+ 8
+ wxALIGN_CENTER_VERTICAL|wxLEFT
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 0
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ Y:
+ 0
+
+ 0
+
+
+ 0
+
+ 1
+ m_ViaYLabel
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+
+ 0
+
+
+
+
+ -1
+
+
+
+ 3
+ wxALIGN_CENTER_VERTICAL|wxEXPAND
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+
+ 0
+
+ 0
+
+ 0
+
+ 1
+ m_ViaYCtrl
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+ ; ; forward_declare
+ 0
+
+
+ wxFILTER_NONE
+ wxDefaultValidator
+
+
+
+
+
+
+
+
+ 5
+ wxALIGN_CENTER_VERTICAL
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ mm
+ 0
+
+ 0
+
+
+ 0
+
+ 1
+ m_ViaYUnit
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+
+ 0
+
+
+
+
+ -1
+
+
+
+
+
+ 5
+ wxEXPAND
+ 1
+
+ 3
+ wxBOTH
+ 1
+
+ 3
+
+ fgViaSizes
+ wxFLEX_GROWMODE_SPECIFIED
+ none
+ 6
+ 3
+
+ 5
+ wxALIGN_CENTER_VERTICAL|wxTOP
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 0
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ Pre-defined sizes:
+ 0
+
+ 0
+
+
+ 0
+
+ 1
+ m_DesignRuleVias
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+
+ 0
+
+
+
+
+ -1
+
+
+
+ 5
+ wxALIGN_CENTER_VERTICAL|wxEXPAND|wxTOP
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+
+ 0
+
+
+ 0
+
+ 1
+ m_DesignRuleViasCtrl
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 0
+ 1
+
+
+
+ 0
+
+
+ wxFILTER_NONE
+ wxDefaultValidator
+
+
+
+
+ onViaSelect
+
+
+
+ 5
+ wxALIGN_CENTER_VERTICAL|wxTOP
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ mm
+ 0
+
+ 0
+
+
+ 0
+
+ 1
+ m_DesignRuleViasUnit
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+
+ 0
+
+
+
+
+ -1
+
+
+
+ 5
+ wxALIGN_CENTER_VERTICAL
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 0
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ Via diameter:
+ 0
+
+ 0
+
+
+ 0
+
+ 1
+ m_ViaDiameterLabel
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+
+ 0
+
+
+
+
+ -1
+
+
+
+ 5
+ wxALIGN_CENTER_VERTICAL|wxEXPAND
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+
+ 0
+
+ 0
+
+ 0
+
+ 1
+ m_ViaDiameterCtrl
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+ ; ; forward_declare
+ 0
+
+
+ wxFILTER_NONE
+ wxDefaultValidator
+
+
+
+
+
+ onViaEdit
+
+
+
+ 5
+ wxALIGN_CENTER_VERTICAL
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ mm
+ 0
+
+ 0
+
+
+ 0
+
+ 1
+ m_ViaDiameterUnit
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+
+ 0
+
+
+
+
+ -1
+
+
+
+ 5
+ wxALIGN_CENTER_VERTICAL
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 0
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ Via hole:
+ 0
+
+ 0
+
+
+ 0
+
+ 1
+ m_ViaDrillLabel
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+
+ 0
+
+
+
+
+ -1
+
+
+
+ 5
+ wxALIGN_CENTER_VERTICAL|wxEXPAND
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+
+ 0
+
+ 0
+
+ 0
+
+ 1
+ m_ViaDrillCtrl
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+ ; ; forward_declare
+ 0
+
+
+ wxFILTER_NONE
+ wxDefaultValidator
+
+
+
+
+
+ onViaEdit
+
+
+
+ 5
+ wxALIGN_CENTER_VERTICAL
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ mm
+ 0
+
+ 0
+
+
+ 0
+
+ 1
+ m_ViaDrillUnit
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+
+ 0
+
+
+
+
+ -1
+
+
+
+ 5
+ wxEXPAND
+ 1
+
+ 0
+ protected
+ 0
+
+
+
+ 3
+ wxALIGN_CENTER_VERTICAL|wxBOTTOM
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ Use net class sizes
+
+ 0
+
+
+ 0
+
+ 1
+ m_viaNetclass
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+
+ 0
+
+
+ wxFILTER_NONE
+ wxDefaultValidator
+
+
+
+
+ onViaNetclassCheck
+
+
+
+ 5
+ wxEXPAND
+ 1
+
+ 0
+ protected
+ 0
+
+
+
+
+
+
+
+ 15
+ wxEXPAND|wxRIGHT|wxLEFT
+ 0
+
+ 0
+ protected
+ 0
+
+
+
+ 5
+ wxEXPAND
+ 1
+
+
+ viaRightColumn
+ wxVERTICAL
+ none
+
+ 3
+ wxEXPAND|wxBOTTOM|wxRIGHT
+ 0
+
+ 2
+ wxBOTH
+ 1
+
+ 5
+
+ fgSizer4
+ wxFLEX_GROWMODE_SPECIFIED
+ none
+ 0
+ 0
+
+ 5
+ wxALIGN_CENTER_VERTICAL|wxLEFT
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ Via type:
+ 0
+
+ 0
+
+
+ 0
+
+ 1
+ m_ViaTypeLabel
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+
+ 0
+
+
+
+
+ -1
+
+
+
+ 5
+ wxALIGN_CENTER_VERTICAL|wxEXPAND
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ "Through" "Micro" "Blind/buried"
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 0
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+
+ 0
+
+
+ 0
+
+ 1
+ m_ViaTypeChoice
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 0
+ 1
+
+
+
+ 0
+
+
+ wxFILTER_NONE
+ wxDefaultValidator
+
+
+
+
+ onViaEdit
+
+
+
+ 5
+ wxEXPAND
+ 1
+
+ 3
+ protected
+ 0
+
+
+
+ 5
+ wxEXPAND
+ 1
+
+ 0
+ protected
+ 0
+
+
+
+ 5
+ wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ Start layer:
+ 0
+
+ 0
+
+
+ 0
+
+ 1
+ m_ViaStartLayerLabel
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+
+ 0
+
+
+
+
+ -1
+
+
+
+ 5
+ wxALIGN_CENTER_VERTICAL|wxEXPAND
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+
+ 0
+
+
+ 0
+
+ 1
+ m_ViaStartLayer
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ -1
+ 1
+
+
+ PCB_LAYER_BOX_SELECTOR; pcb_layer_box_selector.h
+ 0
+
+
+ wxFILTER_NONE
+ wxDefaultValidator
+
+
+
+
+
+ onViaEdit
+
+
+
+ 5
+ wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ End layer:
+ 0
+
+ 0
+
+
+ 0
+
+ 1
+ m_ViaEndLayerLabel1
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+
+ 0
+
+
+
+
+ -1
+
+
+
+ 5
+ wxALIGN_CENTER_VERTICAL|wxEXPAND
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+
+ 0
+
+
+ 0
+
+ 1
+ m_ViaEndLayer
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ -1
+ 1
+
+
+ PCB_LAYER_BOX_SELECTOR; pcb_layer_box_selector.h
+ 0
+
+
+ wxFILTER_NONE
+ wxDefaultValidator
+
+
+
+
+
+ onViaEdit
+
+
+
+ 5
+ wxEXPAND
+ 1
+
+ 15
+ protected
+ 0
+
+
+
+ 5
+ wxEXPAND
+ 1
+
+ 0
+ protected
+ 0
+
+
+
+ 5
+ wxALIGN_CENTER_VERTICAL|wxLEFT
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ Annular rings:
+ 0
+
+ 0
+
+
+ 0
+
+ 1
+ m_annularRingsLabel
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+ ; ; forward_declare
+ 0
+
+
+
+
+ -1
+
+
+
+ 5
+ wxALIGN_CENTER_VERTICAL|wxEXPAND
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ "All copper layers" "Start, end, and connected layers" "Connected layers only"
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+
+ 0
+
+
+ 0
+
+ 1
+ m_annularRingsCtrl
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 0
+ 1
+
+
+ ; ; forward_declare
+ 0
+
+
+ wxFILTER_NONE
+ wxDefaultValidator
+
+
+
+
+
+
+
+
+
+
5
- wxEXPAND|wxRIGHT
- 4
+ wxEXPAND|wxTOP|wxBOTTOM
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+
+ 0
+
+
+ 0
+
+ 1
+ m_staticline2
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+ wxLI_HORIZONTAL
+ ; ; forward_declare
+ 0
+
+
+
+
+
+
+
+ 5
+ wxEXPAND|wxTOP|wxBOTTOM
+ 0
- viaRightColumn
+ m_legacyTeardropsWarning
+ wxHORIZONTAL
+ protected
+
+ 5
+ wxALIGN_CENTER_VERTICAL|wxRIGHT
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+
+ 0
+
+
+ 0
+
+ 1
+ m_legacyTeardropsIcon
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+ ; ; forward_declare
+ 0
+
+
+
+
+
+
+
+ 5
+ wxALIGN_CENTER_VERTICAL
+ 1
+
+
+ bSizer42
+ wxVERTICAL
+ none
+
+ 5
+ wxRIGHT|wxLEFT
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ Board contains legacy teardrops.
+ 0
+
+ 0
+
+
+ 0
+
+ 1
+ m_staticText85
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+ ; ; forward_declare
+ 0
+
+
+
+
+ -1
+
+
+
+ 5
+ wxBOTTOM|wxRIGHT|wxLEFT
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ Use Edit > Edit Teardrops to apply automatic teardrops.
+ 0
+
+ 0
+
+
+ 0
+
+ 1
+ m_staticText851
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+ ; ; forward_declare
+ 0
+
+
+
+
+ -1
+
+
+
+
+
+
+
+ 5
+ wxEXPAND
+ 1
+
+
+ bSizerTeardrops
wxVERTICAL
none
- 5
- wxBOTTOM|wxEXPAND|wxRIGHT
+ 3
+ wxEXPAND|wxTOP
0
-
- 2
- wxBOTH
- 1
-
- 0
+
- fgSizer4
- wxFLEX_GROWMODE_SPECIFIED
+ bSizerCols11
+ wxHORIZONTAL
none
- 0
- 5
- 5
- wxALIGN_CENTER_VERTICAL
- 0
-
- 1
- 1
- 1
- 1
-
-
-
-
-
-
-
- 1
- 0
- 1
-
- 1
- 0
- Dock
- 0
- Left
- 1
-
- 1
-
- 0
- 0
- wxID_ANY
- Via type:
- 0
-
- 0
-
-
- 0
+ 3
+ wxEXPAND|wxTOP
+ 1
+
- 1
- m_ViaTypeLabel
- 1
-
-
- protected
- 1
-
- Resizable
- 1
-
-
-
- 0
-
-
-
-
- -1
+ bSizerLeftCol11
+ wxVERTICAL
+ none
+
+ 5
+ wxBOTTOM|wxRIGHT
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ Add teardrops on via's track connections
+
+ 0
+
+
+ 0
+
+ 1
+ m_cbTeardrops
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+ wxCHK_3STATE
+ ; ; forward_declare
+ 0
+
+
+ wxFILTER_NONE
+ wxDefaultValidator
+
+
+
+
+ onTeardropsUpdateUi
+
+
+
+ 5
+ wxBOTTOM|wxRIGHT
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ Allow teardrops to span 2 track segments
+
+ 0
+
+
+ 0
+
+ 1
+ m_cbTeardropsUseNextTrack
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+ wxCHK_3STATE
+ ; ; forward_declare
+ 0
+ Allows a teardrop to spread over 2 tracks if the first track segment is too short
+
+ wxFILTER_NONE
+ wxDefaultValidator
+
+
+
+
+ onTeardropsUpdateUi
+
+
5
- wxALIGN_CENTER_VERTICAL|wxEXPAND
+ wxEXPAND
0
-
- 1
- 1
- 1
- 1
-
-
-
-
-
-
-
- 1
- 0
- "Through" "Micro" "Blind/buried"
- 1
-
- 1
- 0
- Dock
- 0
- Left
- 0
-
- 1
-
- 0
- 0
- wxID_ANY
-
- 0
-
-
- 0
-
- 1
- m_ViaTypeChoice
- 1
-
-
+
+ 0
protected
- 1
-
- Resizable
- 0
- 1
-
-
-
- 0
-
-
- wxFILTER_NONE
- wxDefaultValidator
-
-
-
-
- onViaEdit
+ 20
- 5
- wxRIGHT|wxALIGN_CENTER_VERTICAL
- 0
-
- 1
- 1
- 1
- 1
-
-
-
-
-
-
-
- 1
- 0
- 1
-
- 1
- 0
- Dock
- 0
- Left
- 1
-
- 1
-
- 0
- 0
- wxID_ANY
- Start layer:
- 0
-
- 0
-
-
- 0
+ 10
+ wxEXPAND|wxLEFT
+ 1
+
- 1
- m_ViaStartLayerLabel
- 1
-
-
- protected
- 1
-
- Resizable
- 1
-
-
-
- 0
-
-
-
-
- -1
+ bSizerRightCol11
+ wxVERTICAL
+ none
+
+ 3
+ wxEXPAND
+ 0
+
+
+ bSizer39
+ wxHORIZONTAL
+ none
+
+ 5
+ wxALIGN_CENTER_VERTICAL
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ Maximum track width:
+ 0
+
+ 0
+
+
+ 0
+
+ 1
+ m_stHDRatio
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+ ; ; forward_declare
+ 0
+ Max pad/via size to track width ratio to create a teardrop.
100 always creates a teardrop.
+
+
+
+ -1
+ onTeardropsUpdateUi
+
+
+
+ 5
+ wxRIGHT|wxLEFT
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+
+ 0
+
+
+
+ 0
+
+ 1
+ m_tcHDRatio
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+ -1,-1
+
+ ; ; forward_declare
+ 0
+ Tracks which are similar in size to the via do not need teardrops.
+
+ wxFILTER_NONE
+ wxDefaultValidator
+
+
+
+
+
+ onTeardropsUpdateUi
+
+
+
+ 5
+ wxRIGHT|wxALIGN_CENTER_VERTICAL
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ %
+ 0
+
+ 0
+
+
+ 0
+
+ 1
+ m_stHDRatioUnits
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+ ; ; forward_declare
+ 0
+
+
+
+
+ -1
+ onTeardropsUpdateUi
+
+
+
+
+
+ 5
+ wxEXPAND|wxLEFT
+ 0
+
+
+ bSizer17
+ wxVERTICAL
+ none
+
+ 2
+ wxEXPAND|wxTOP|wxBOTTOM
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ (as a percentage of pad/via/track size)
+ 0
+
+ 0
+
+
+ 0
+
+ 1
+ m_minTrackWidthHint
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+ ; ; forward_declare
+ 0
+
+
+
+
+ -1
+ onTeardropsUpdateUi
+
+
+
+
-
- 5
- wxALIGN_CENTER_VERTICAL|wxEXPAND
- 0
-
- 1
- 1
- 1
- 1
-
-
-
-
-
-
-
- 1
- 0
-
- 1
-
- 1
- 0
- Dock
- 0
- Left
- 1
-
- 1
-
- 0
- 0
- wxID_ANY
-
- 0
-
-
- 0
-
- 1
- m_ViaStartLayer
- 1
-
-
- protected
- 1
-
- Resizable
- -1
- 1
-
-
- PCB_LAYER_BOX_SELECTOR; pcb_layer_box_selector.h
- 0
-
-
- wxFILTER_NONE
- wxDefaultValidator
-
-
-
-
-
- onViaEdit
-
-
-
- 5
- wxRIGHT|wxALIGN_CENTER_VERTICAL
- 0
-
- 1
- 1
- 1
- 1
-
-
-
-
-
-
-
- 1
- 0
- 1
-
- 1
- 0
- Dock
- 0
- Left
- 1
-
- 1
-
- 0
- 0
- wxID_ANY
- End layer:
- 0
-
- 0
-
-
- 0
-
- 1
- m_ViaEndLayerLabel1
- 1
-
-
- protected
- 1
-
- Resizable
- 1
-
-
-
- 0
-
-
-
-
- -1
-
-
-
- 5
- wxALIGN_CENTER_VERTICAL|wxEXPAND
- 0
-
- 1
- 1
- 1
- 1
-
-
-
-
-
-
-
- 1
- 0
-
- 1
-
- 1
- 0
- Dock
- 0
- Left
- 1
-
- 1
-
- 0
- 0
- wxID_ANY
-
- 0
-
-
- 0
-
- 1
- m_ViaEndLayer
- 1
-
-
- protected
- 1
-
- Resizable
- -1
- 1
-
-
- PCB_LAYER_BOX_SELECTOR; pcb_layer_box_selector.h
- 0
-
-
- wxFILTER_NONE
- wxDefaultValidator
-
-
-
-
-
- onViaEdit
-
-
-
-
-
- 10
- wxTOP
- 0
-
- 1
- 1
- 1
- 1
-
-
-
-
-
-
-
- 1
- 0
- 1
-
- 1
- 0
- Dock
- 0
- Left
- 1
-
- 1
-
- 0
- 0
- wxID_ANY
- Annular rings:
- 0
-
- 0
-
-
- 0
-
- 1
- m_annularRingsLabel
- 1
-
-
- protected
- 1
-
- Resizable
- 1
-
-
- ; ; forward_declare
- 0
-
-
-
-
- -1
5
- wxEXPAND|wxTOP|wxBOTTOM|wxRIGHT
+ wxEXPAND
0
-
- 1
- 1
- 1
- 1
-
-
-
-
-
-
-
- 1
- 0
- "All copper layers" "Start, end, and connected layers" "Connected layers only"
- 1
-
- 1
- 0
- Dock
- 0
- Left
- 1
-
- 1
-
- 0
- 0
- wxID_ANY
-
- 0
-
-
- 0
-
- 1
- m_annularRingsCtrl
- 1
-
-
+
+ 5
protected
- 1
-
- Resizable
- 0
- 1
-
-
- ; ; forward_declare
- 0
-
-
- wxFILTER_NONE
- wxDefaultValidator
-
-
-
-
+ 0
+
+
+
+ 3
+ wxEXPAND|wxBOTTOM
+ 1
+
+
+ bSizerShapeColumns
+ wxHORIZONTAL
+ none
+
+ 10
+ wxEXPAND|wxRIGHT
+ 1
+
+
+ bSizerLeftCol
+ wxVERTICAL
+ none
+
+ 5
+ wxALIGN_CENTER_HORIZONTAL|wxRIGHT|wxLEFT
+ 1
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+
+ 0
+
+
+ 0
+
+ 1
+ m_bitmapTeardrop
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+ ; ; forward_declare
+ 0
+
+
+
+
+ onTeardropsUpdateUi
+
+
+
+ 4
+ wxEXPAND|wxBOTTOM
+ 0
+
+
+ bSizer41
+ wxHORIZONTAL
+ none
+
+ 5
+ wxALIGN_CENTER_VERTICAL|wxTOP|wxRIGHT|wxLEFT
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ Edges:
+ 0
+
+ 0
+
+
+ 0
+
+ 1
+ m_staticText15
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+ ; ; forward_declare
+ 0
+
+
+
+
+ -1
+ onTeardropsUpdateUi
+
+
+
+ 5
+ wxALIGN_CENTER_VERTICAL|wxTOP|wxRIGHT|wxLEFT
+ 1
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ Straight lines
+
+ 0
+
+
+ 0
+
+ 1
+ m_rbStraightLines
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+ wxRB_GROUP
+ ; ; forward_declare
+ 0
+
+
+ wxFILTER_NONE
+ wxDefaultValidator
+
+ 0
+
+
+
+ onStraightLines
+ onTeardropsUpdateUi
+
+
+
+ 5
+ wxALIGN_CENTER_VERTICAL|wxTOP|wxRIGHT|wxLEFT
+ 1
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ Curved
+
+ 0
+
+
+ 0
+
+ 1
+ m_rbCurved
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+ wxRB_SINGLE
+ ; ; forward_declare
+ 0
+
+
+ wxFILTER_NONE
+ wxDefaultValidator
+
+ 0
+
+
+
+ onCurvedLines
+ onTeardropsUpdateUi
+
+
+
+
+
+
+
+ 5
+ wxEXPAND
+ 0
+
+ 0
+ protected
+ 20
+
+
+
+ 5
+ wxEXPAND|wxTOP|wxLEFT
+ 1
+
+ 3
+ wxBOTH
+ 1
+
+ 5
+
+ fgSizerRightCol
+ wxFLEX_GROWMODE_SPECIFIED
+ none
+ 0
+ 2
+
+ 5
+ wxALIGN_CENTER_VERTICAL|wxLEFT
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ Best length:
+ 0
+
+ 0
+
+
+ 0
+
+ 1
+ m_stLenPercentLabel
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+ ; ; forward_declare
+ 0
+
+
+
+
+ -1
+ onTeardropsUpdateUi
+
+
+
+ 5
+ wxEXPAND|wxALIGN_CENTER_VERTICAL
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+
+ 0
+
+
+
+ 0
+
+ 1
+ m_tcLenPercent
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+ ; ; forward_declare
+ 0
+
+
+ wxFILTER_NONE
+ wxDefaultValidator
+
+
+
+
+
+ onTeardropsUpdateUi
+
+
+
+ 5
+ wxALIGN_CENTER_VERTICAL
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ %
+ 0
+
+ 0
+
+
+ 0
+
+ 1
+ m_stLenPercentUnits
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+ ; ; forward_declare
+ 0
+
+
+
+
+ -1
+ onTeardropsUpdateUi
+
+
+
+ 5
+ wxALIGN_CENTER_VERTICAL|wxLEFT
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ Max length:
+ 0
+
+ 0
+
+
+ 0
+
+ 1
+ m_stMaxLen
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+ ; ; forward_declare
+ 0
+
+
+
+
+ -1
+ onTeardropsUpdateUi
+
+
+
+ 5
+ wxEXPAND|wxALIGN_CENTER_VERTICAL
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+
+ 0
+
+
+
+ 0
+
+ 1
+ m_tcTdMaxLen
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+ ; ; forward_declare
+ 0
+
+
+ wxFILTER_NONE
+ wxDefaultValidator
+
+
+
+
+
+ onTeardropsUpdateUi
+
+
+
+ 3
+ wxALIGN_CENTER_VERTICAL|wxRIGHT
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ mm
+ 0
+
+ 0
+
+
+ 0
+
+ 1
+ m_stMaxLenUnits
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+ ; ; forward_declare
+ 0
+
+
+
+
+ -1
+ onTeardropsUpdateUi
+
+
+
+ 5
+ wxEXPAND
+ 1
+
+ 3
+ protected
+ 0
+
+
+
+ 5
+ wxEXPAND
+ 1
+
+ 0
+ protected
+ 0
+
+
+
+ 5
+ wxEXPAND
+ 1
+
+ 0
+ protected
+ 0
+
+
+
+ 5
+ wxALIGN_CENTER_VERTICAL|wxLEFT
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ Best height:
+ 0
+
+ 0
+
+
+ 0
+
+ 1
+ m_stHeightPercentLabel
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+ ; ; forward_declare
+ 0
+
+
+
+
+ -1
+ onTeardropsUpdateUi
+
+
+
+ 5
+ wxEXPAND|wxALIGN_CENTER_VERTICAL
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+
+ 0
+
+
+
+ 0
+
+ 1
+ m_tcHeightPercent
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+ ; ; forward_declare
+ 0
+
+
+ wxFILTER_NONE
+ wxDefaultValidator
+
+
+
+
+
+ onTeardropsUpdateUi
+
+
+
+ 5
+ wxALIGN_CENTER_VERTICAL
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ %
+ 0
+
+ 0
+
+
+ 0
+
+ 1
+ m_stHeightPercentUnits
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+ ; ; forward_declare
+ 0
+
+
+
+
+ -1
+ onTeardropsUpdateUi
+
+
+
+ 5
+ wxALIGN_CENTER_VERTICAL|wxLEFT
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ Max height:
+ 0
+
+ 0
+
+
+ 0
+
+ 1
+ m_stMaxHeight
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+ ; ; forward_declare
+ 0
+
+
+
+
+ -1
+ onTeardropsUpdateUi
+
+
+
+ 5
+ wxEXPAND|wxALIGN_CENTER_VERTICAL
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+
+ 0
+
+
+
+ 0
+
+ 1
+ m_tcMaxHeight
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+ ; ; forward_declare
+ 0
+
+
+ wxFILTER_NONE
+ wxDefaultValidator
+
+
+
+
+
+ onTeardropsUpdateUi
+
+
+
+ 3
+ wxALIGN_CENTER_VERTICAL|wxRIGHT
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ mm
+ 0
+
+ 0
+
+
+ 0
+
+ 1
+ m_stMaxHeightUnits
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+ ; ; forward_declare
+ 0
+
+
+
+
+ -1
+ onTeardropsUpdateUi
+
+
+
+ 5
+ wxEXPAND
+ 1
+
+ 0
+ protected
+ 0
+
+
+
+ 5
+ wxEXPAND
+ 1
+
+ 0
+ protected
+ 0
+
+
+
+ 5
+ wxEXPAND
+ 1
+
+ 3
+ protected
+ 0
+
+
+
+ 3
+ wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxLEFT
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ Curve points:
+ 0
+
+ 0
+
+
+ 0
+
+ 1
+ m_curvePointsLabel
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+ ; ; forward_declare
+ 0
+
+
+
+
+ -1
+ onCurvedEdgesUpdateUi
+
+
+
+ 3
+ wxALIGN_CENTER_VERTICAL|wxBOTTOM
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+
+ 0
+
+
+
+ 0
+
+ 1
+ m_curvePointsCtrl
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+ -1,-1
+
+ ; ; forward_declare
+ 0
+
+
+ wxFILTER_NONE
+ wxDefaultValidator
+
+
+
+
+
+ onCurvedEdgesUpdateUi
+
+
+
+
diff --git a/pcbnew/dialogs/dialog_track_via_properties_base.h b/pcbnew/dialogs/dialog_track_via_properties_base.h
index fad8f0723a..c72aad9a23 100644
--- a/pcbnew/dialogs/dialog_track_via_properties_base.h
+++ b/pcbnew/dialogs/dialog_track_via_properties_base.h
@@ -20,13 +20,18 @@ class PCB_LAYER_BOX_SELECTOR;
#include
#include
#include
-#include
#include
+#include
#include
#include
#include
#include
#include
+#include
+#include
+#include
+#include
+#include
#include
#include
@@ -51,13 +56,11 @@ class DIALOG_TRACK_VIA_PROPERTIES_BASE : public DIALOG_SHIM
wxStaticBoxSizer* m_sbTrackSizer;
wxStaticText* m_TrackStartXLabel;
wxTextCtrl* m_TrackStartXCtrl;
- wxStaticText* m_TrackStartXUnit;
wxStaticText* m_TrackStartYLabel;
wxTextCtrl* m_TrackStartYCtrl;
wxStaticText* m_TrackStartYUnit;
wxStaticText* m_TrackEndXLabel;
wxTextCtrl* m_TrackEndXCtrl;
- wxStaticText* m_TrackEndXUnit;
wxStaticText* m_TrackEndYLabel;
wxTextCtrl* m_TrackEndYCtrl;
wxStaticText* m_TrackEndYUnit;
@@ -73,7 +76,6 @@ class DIALOG_TRACK_VIA_PROPERTIES_BASE : public DIALOG_SHIM
wxStaticBoxSizer* m_sbViaSizer;
wxStaticText* m_ViaXLabel;
wxTextCtrl* m_ViaXCtrl;
- wxStaticText* m_ViaXUnit;
wxStaticText* m_ViaYLabel;
wxTextCtrl* m_ViaYCtrl;
wxStaticText* m_ViaYUnit;
@@ -95,6 +97,35 @@ class DIALOG_TRACK_VIA_PROPERTIES_BASE : public DIALOG_SHIM
PCB_LAYER_BOX_SELECTOR* m_ViaEndLayer;
wxStaticText* m_annularRingsLabel;
wxChoice* m_annularRingsCtrl;
+ wxStaticLine* m_staticline2;
+ wxBoxSizer* m_legacyTeardropsWarning;
+ wxStaticBitmap* m_legacyTeardropsIcon;
+ wxStaticText* m_staticText85;
+ wxStaticText* m_staticText851;
+ wxCheckBox* m_cbTeardrops;
+ wxCheckBox* m_cbTeardropsUseNextTrack;
+ wxStaticText* m_stHDRatio;
+ wxTextCtrl* m_tcHDRatio;
+ wxStaticText* m_stHDRatioUnits;
+ wxStaticText* m_minTrackWidthHint;
+ wxStaticBitmap* m_bitmapTeardrop;
+ wxStaticText* m_staticText15;
+ wxRadioButton* m_rbStraightLines;
+ wxRadioButton* m_rbCurved;
+ wxStaticText* m_stLenPercentLabel;
+ wxTextCtrl* m_tcLenPercent;
+ wxStaticText* m_stLenPercentUnits;
+ wxStaticText* m_stMaxLen;
+ wxTextCtrl* m_tcTdMaxLen;
+ wxStaticText* m_stMaxLenUnits;
+ wxStaticText* m_stHeightPercentLabel;
+ wxTextCtrl* m_tcHeightPercent;
+ wxStaticText* m_stHeightPercentUnits;
+ wxStaticText* m_stMaxHeight;
+ wxTextCtrl* m_tcMaxHeight;
+ wxStaticText* m_stMaxHeightUnits;
+ wxStaticText* m_curvePointsLabel;
+ wxTextCtrl* m_curvePointsCtrl;
wxStdDialogButtonSizer* m_StdButtons;
wxButton* m_StdButtonsOK;
wxButton* m_StdButtonsCancel;
@@ -107,6 +138,10 @@ class DIALOG_TRACK_VIA_PROPERTIES_BASE : public DIALOG_SHIM
virtual void onViaSelect( wxCommandEvent& event ) { event.Skip(); }
virtual void onViaEdit( wxCommandEvent& event ) { event.Skip(); }
virtual void onViaNetclassCheck( wxCommandEvent& event ) { event.Skip(); }
+ virtual void onTeardropsUpdateUi( wxUpdateUIEvent& event ) { event.Skip(); }
+ virtual void onStraightLines( wxMouseEvent& event ) { event.Skip(); }
+ virtual void onCurvedLines( wxMouseEvent& event ) { event.Skip(); }
+ virtual void onCurvedEdgesUpdateUi( wxUpdateUIEvent& event ) { event.Skip(); }
public:
diff --git a/pcbnew/dialogs/dialog_track_via_size.cpp b/pcbnew/dialogs/dialog_track_via_size.cpp
index d4dc6b3426..b64fcf974a 100644
--- a/pcbnew/dialogs/dialog_track_via_size.cpp
+++ b/pcbnew/dialogs/dialog_track_via_size.cpp
@@ -62,9 +62,9 @@ bool DIALOG_TRACK_VIA_SIZE::TransferDataFromWindow()
}
// Store dialog values to the router settings
- m_settings.SetCustomTrackWidth( m_trackWidth.GetValue() );
- m_settings.SetCustomViaSize( m_viaDiameter.GetValue() );
- m_settings.SetCustomViaDrill( m_viaDrill.GetValue() );
+ m_settings.SetCustomTrackWidth( m_trackWidth.GetIntValue() );
+ m_settings.SetCustomViaSize( m_viaDiameter.GetIntValue() );
+ m_settings.SetCustomViaDrill( m_viaDrill.GetIntValue() );
return true;
}
diff --git a/pcbnew/dialogs/panel_setup_constraints.cpp b/pcbnew/dialogs/panel_setup_constraints.cpp
index 2db0f29235..f5a7b567d9 100644
--- a/pcbnew/dialogs/panel_setup_constraints.cpp
+++ b/pcbnew/dialogs/panel_setup_constraints.cpp
@@ -53,6 +53,20 @@ PANEL_SETUP_CONSTRAINTS::PANEL_SETUP_CONSTRAINTS( wxWindow* aParentWindow, PCB_E
m_Frame = aFrame;
m_BrdSettings = &m_Frame->GetBoard()->GetDesignSettings();
+ m_filletBitmap->SetBitmap( KiBitmap( BITMAPS::zone_fillet ) );
+ m_spokeBitmap->SetBitmap( KiBitmap( BITMAPS::thermal_spokes ) );
+ m_bitmapClearance->SetBitmap( KiBitmap( BITMAPS::ps_diff_pair_gap ) );
+ m_bitmapMinTrackWidth->SetBitmap( KiBitmap( BITMAPS::width_track ) );
+ m_bitmapMinConn->SetBitmap( KiBitmap( BITMAPS::width_conn ) );
+ m_bitmapMinViaAnnulus->SetBitmap( KiBitmap( BITMAPS::via_annulus ) );
+ m_bitmapMinViaDiameter->SetBitmap( KiBitmap( BITMAPS::via_diameter ) );
+ m_bitmapMinViaDrill->SetBitmap( KiBitmap( BITMAPS::via_hole_diameter ) );
+ m_bitmapMinuViaDiameter->SetBitmap( KiBitmap( BITMAPS::via_diameter ) );
+ m_bitmapMinuViaDrill->SetBitmap( KiBitmap( BITMAPS::via_hole_diameter ) );
+ m_bitmapHoleClearance->SetBitmap( KiBitmap( BITMAPS::hole_to_copper_clearance ) );
+ m_bitmapMinHoleClearance->SetBitmap( KiBitmap( BITMAPS::hole_to_hole_clearance ) );
+ m_bitmapEdgeClearance->SetBitmap( KiBitmap( BITMAPS::edge_to_copper_clearance ) );
+
m_stCircleToPolyWarning->SetFont( KIUI::GetInfoFont( this ) );
wxSize ctrlSize = m_minResolvedSpokeCountCtrl->GetSize();
@@ -158,36 +172,6 @@ bool PANEL_SETUP_CONSTRAINTS::TransferDataFromWindow()
}
-bool PANEL_SETUP_CONSTRAINTS::Show( bool aShow )
-{
- bool retVal = wxPanel::Show( aShow );
-
- if( aShow )
- {
- // These *should* work in the constructor, and indeed they do if this panel is the
- // first displayed. However, on OSX 3.0.5 (at least), if another panel is displayed
- // first then the icons will be blank unless they're set here.
- m_filletBitmap->SetBitmap( KiBitmap( BITMAPS::zone_fillet ) );
- m_spokeBitmap->SetBitmap( KiBitmap( BITMAPS::thermal_spokes ) );
- m_bitmapClearance->SetBitmap( KiBitmap( BITMAPS::ps_diff_pair_gap ) );
- m_bitmapMinTrackWidth->SetBitmap( KiBitmap( BITMAPS::width_track ) );
- m_bitmapMinConn->SetBitmap( KiBitmap( BITMAPS::width_conn ) );
- m_bitmapMinViaAnnulus->SetBitmap( KiBitmap( BITMAPS::via_annulus ) );
- m_bitmapMinViaDiameter->SetBitmap( KiBitmap( BITMAPS::via_diameter ) );
- m_bitmapMinViaDrill->SetBitmap( KiBitmap( BITMAPS::via_hole_diameter ) );
- m_bitmapMinuViaDiameter->SetBitmap( KiBitmap( BITMAPS::via_diameter ) );
- m_bitmapMinuViaDrill->SetBitmap( KiBitmap( BITMAPS::via_hole_diameter ) );
- m_bitmapHoleClearance->SetBitmap( KiBitmap( BITMAPS::hole_to_copper_clearance ) );
- m_bitmapMinHoleClearance->SetBitmap( KiBitmap( BITMAPS::hole_to_hole_clearance ) );
- m_bitmapEdgeClearance->SetBitmap( KiBitmap( BITMAPS::edge_to_copper_clearance ) );
-
- Layout();
- }
-
- return retVal;
-}
-
-
void PANEL_SETUP_CONSTRAINTS::ImportSettingsFrom( BOARD* aBoard )
{
BOARD_DESIGN_SETTINGS* savedSettings = m_BrdSettings;
diff --git a/pcbnew/dialogs/panel_setup_constraints.h b/pcbnew/dialogs/panel_setup_constraints.h
index 28d2b147a5..6946af6ccf 100644
--- a/pcbnew/dialogs/panel_setup_constraints.h
+++ b/pcbnew/dialogs/panel_setup_constraints.h
@@ -44,7 +44,6 @@ public:
void ImportSettingsFrom( BOARD* aBoard );
private:
- bool Show( bool aShow ) override;
bool TransferDataToWindow() override;
bool TransferDataFromWindow() override;
diff --git a/pcbnew/dialogs/panel_setup_formatting.cpp b/pcbnew/dialogs/panel_setup_formatting.cpp
index 729650033b..45f5b6446c 100644
--- a/pcbnew/dialogs/panel_setup_formatting.cpp
+++ b/pcbnew/dialogs/panel_setup_formatting.cpp
@@ -26,8 +26,6 @@
#include
#include
#include
-#include
-#include
PANEL_SETUP_FORMATTING::PANEL_SETUP_FORMATTING( wxWindow* aParentWindow, PCB_EDIT_FRAME* aFrame ) :
diff --git a/pcbnew/dialogs/panel_setup_teardrops.cpp b/pcbnew/dialogs/panel_setup_teardrops.cpp
new file mode 100644
index 0000000000..79edeee49b
--- /dev/null
+++ b/pcbnew/dialogs/panel_setup_teardrops.cpp
@@ -0,0 +1,164 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2023 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 2
+ * 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, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#include
+#include
+#include
+#include
+#include "panel_setup_teardrops.h"
+
+
+PANEL_SETUP_TEARDROPS::PANEL_SETUP_TEARDROPS( wxWindow* aParentWindow, PCB_EDIT_FRAME* aFrame ) :
+ PANEL_SETUP_TEARDROPS_BASE( aParentWindow ),
+ m_BrdSettings( &aFrame->GetBoard()->GetDesignSettings() ),
+ m_teardropMaxLenRound( aFrame, m_stMaxLen, m_tcTdMaxLen, m_stMaxLenUnits ),
+ m_teardropMaxHeightRound( aFrame, m_stTdMaxSize, m_tcMaxHeight, m_stMaxHeightUnits ),
+ m_teardropMaxLenRect( aFrame, m_stMaxLen1, m_tcTdMaxLen1, m_stMaxLenUnits1 ),
+ m_teardropMaxHeightRect( aFrame, m_stTdMaxSize1, m_tcMaxHeight1, m_stMaxHeightUnits1 ),
+ m_teardropMaxLenTrack( aFrame, m_stMaxLen2, m_tcTdMaxLen2, m_stMaxLenUnits2 ),
+ m_teardropMaxHeightTrack( aFrame, m_stTdMaxSize2, m_tcMaxHeight2, m_stMaxHeightUnits2 )
+{
+ m_bitmapTeardrop->SetBitmap( KiBitmap( BITMAPS::teardrop_sizes ) );
+ m_bitmapTeardrop1->SetBitmap( KiBitmap( BITMAPS::teardrop_rect_sizes ) );
+ m_bitmapTeardrop2->SetBitmap( KiBitmap( BITMAPS::teardrop_track_sizes ) );
+
+ wxFont infoFont = KIUI::GetInfoFont( this ).Italic();
+ m_minTrackWidthHint->SetFont( infoFont );
+ m_minTrackWidthHint1->SetFont( infoFont );
+ m_minTrackWidthHint2->SetFont( infoFont );
+}
+
+
+bool PANEL_SETUP_TEARDROPS::TransferDataToWindow()
+{
+ TEARDROP_PARAMETERS_LIST* prmsList = m_BrdSettings->GetTeadropParamsList();
+
+ TEARDROP_PARAMETERS* prms = prmsList->GetParameters( TARGET_ROUND );
+ m_teardropMaxLenRound.SetValue( prms->m_TdMaxLen );
+ m_teardropMaxHeightRound.SetValue( prms->m_TdMaxWidth );
+ m_spTeardropLenPercent->SetValue( prms->m_BestLengthRatio *100.0 );
+ m_spTeardropSizePercent->SetValue( prms->m_BestWidthRatio *100.0 );
+ m_spTeardropHDPercent->SetValue( prms->m_WidthtoSizeFilterRatio*100.0 );
+ m_cbPreferZoneConnection->SetValue( !prms->m_TdOnPadsInZones );
+ m_cbTeardropsUseNextTrack->SetValue( prms->m_AllowUseTwoTracks );
+
+ if( prms->IsCurved() )
+ {
+ m_rbCurved->SetValue( true );
+ m_curvePointsCtrl->SetValue( prms->m_CurveSegCount );
+ }
+ else
+ {
+ m_rbStraightLines->SetValue( true );
+ m_curvePointsCtrl->SetValue( 5 );
+ }
+
+ prms = prmsList->GetParameters( TARGET_RECT );
+ m_teardropMaxLenRect.SetValue( prms->m_TdMaxLen );
+ m_teardropMaxHeightRect.SetValue( prms->m_TdMaxWidth );
+ m_spTeardropLenPercent1->SetValue( prms->m_BestLengthRatio *100.0 );
+ m_spTeardropSizePercent1->SetValue( prms->m_BestWidthRatio *100.0 );
+ m_spTeardropHDPercent1->SetValue( prms->m_WidthtoSizeFilterRatio*100.0 );
+ m_cbPreferZoneConnection1->SetValue( !prms->m_TdOnPadsInZones );
+ m_cbTeardropsUseNextTrack1->SetValue( prms->m_AllowUseTwoTracks );
+
+ if( prms->IsCurved() )
+ {
+ m_rbCurved1->SetValue( true );
+ m_curvePointsCtrl1->SetValue( prms->m_CurveSegCount );
+ }
+ else
+ {
+ m_rbStraightLines1->SetValue( true );
+ m_curvePointsCtrl1->SetValue( 5 );
+ }
+
+ prms = prmsList->GetParameters( TARGET_TRACK );
+ m_teardropMaxLenTrack.SetValue( prms->m_TdMaxLen );
+ m_teardropMaxHeightTrack.SetValue( prms->m_TdMaxWidth );
+ m_spTeardropLenPercent2->SetValue( prms->m_BestLengthRatio *100.0 );
+ m_spTeardropSizePercent2->SetValue( prms->m_BestWidthRatio *100.0 );
+ m_spTeardropHDPercent2->SetValue( prms->m_WidthtoSizeFilterRatio*100.0 );
+ m_cbTeardropsUseNextTrack2->SetValue( prms->m_AllowUseTwoTracks );
+
+ if( prms->IsCurved() )
+ {
+ m_rbCurved2->SetValue( true );
+ m_curvePointsCtrl2->SetValue( prms->m_CurveSegCount );
+ }
+ else
+ {
+ m_rbStraightLines2->SetValue( true );
+ m_curvePointsCtrl2->SetValue( 5 );
+ }
+
+ return true;
+}
+
+
+bool PANEL_SETUP_TEARDROPS::TransferDataFromWindow()
+{
+ TEARDROP_PARAMETERS_LIST* prmsList = m_BrdSettings->GetTeadropParamsList();
+
+ TEARDROP_PARAMETERS* prms = prmsList->GetParameters( TARGET_ROUND );
+ prms->m_BestLengthRatio = m_spTeardropLenPercent->GetValue() / 100.0;
+ prms->m_BestWidthRatio = m_spTeardropSizePercent->GetValue() / 100.0;
+ prms->m_TdMaxLen = m_teardropMaxLenRound.GetIntValue();
+ prms->m_TdMaxWidth = m_teardropMaxHeightRound.GetIntValue();
+ prms->m_CurveSegCount = m_rbStraightLines->GetValue() ? 0 : m_curvePointsCtrl->GetValue();
+ prms->m_WidthtoSizeFilterRatio = m_spTeardropHDPercent->GetValue() / 100.0;
+ prms->m_TdOnPadsInZones = !m_cbPreferZoneConnection->GetValue();
+ prms->m_AllowUseTwoTracks = m_cbTeardropsUseNextTrack->GetValue();
+
+ prms = prmsList->GetParameters( TARGET_RECT );
+ prms->m_BestLengthRatio = m_spTeardropLenPercent1->GetValue() / 100.0;
+ prms->m_BestWidthRatio = m_spTeardropSizePercent1->GetValue() / 100.0;
+ prms->m_TdMaxLen = m_teardropMaxLenRect.GetIntValue();
+ prms->m_TdMaxWidth = m_teardropMaxHeightRect.GetIntValue();
+ prms->m_CurveSegCount = m_rbStraightLines1->GetValue() ? 0 : m_curvePointsCtrl1->GetValue();
+ prms->m_WidthtoSizeFilterRatio = m_spTeardropHDPercent1->GetValue() / 100.0;
+ prms->m_TdOnPadsInZones = !m_cbPreferZoneConnection1->GetValue();
+ prms->m_AllowUseTwoTracks = m_cbTeardropsUseNextTrack1->GetValue();
+
+ prms = prmsList->GetParameters( TARGET_TRACK );
+ prms->m_BestLengthRatio = m_spTeardropLenPercent2->GetValue() / 100.0;
+ prms->m_BestWidthRatio = m_spTeardropSizePercent2->GetValue() / 100.0;
+ prms->m_TdMaxLen = m_teardropMaxLenTrack.GetIntValue();
+ prms->m_TdMaxWidth = m_teardropMaxHeightTrack.GetIntValue();
+ prms->m_CurveSegCount = m_rbStraightLines2->GetValue() ? 0 : m_curvePointsCtrl2->GetValue();
+ prms->m_WidthtoSizeFilterRatio = m_spTeardropHDPercent2->GetValue() / 100.0;
+ prms->m_AllowUseTwoTracks = m_cbTeardropsUseNextTrack2->GetValue();
+
+ return true;
+}
+
+
+void PANEL_SETUP_TEARDROPS::ImportSettingsFrom( BOARD* aBoard )
+{
+ BOARD_DESIGN_SETTINGS* savedSettings = m_BrdSettings;
+
+ m_BrdSettings = &aBoard->GetDesignSettings();
+ TransferDataToWindow();
+
+ m_BrdSettings = savedSettings;
+}
diff --git a/pcbnew/dialogs/panel_setup_teardrops.h b/pcbnew/dialogs/panel_setup_teardrops.h
new file mode 100644
index 0000000000..c781438ca8
--- /dev/null
+++ b/pcbnew/dialogs/panel_setup_teardrops.h
@@ -0,0 +1,53 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2023 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 .
+ */
+
+#ifndef PANEL_SETUP_TEARDROPS_H
+#define PANEL_SETUP_TEARDROPS_H
+
+#include
+#include
+
+class PCB_EDIT_FRAME;
+class BOARD;
+class PAGED_DIALOG;
+
+
+class PANEL_SETUP_TEARDROPS : public PANEL_SETUP_TEARDROPS_BASE
+{
+public:
+ PANEL_SETUP_TEARDROPS( wxWindow* aParentWindow, PCB_EDIT_FRAME* aFrame );
+
+ bool TransferDataToWindow() override;
+ bool TransferDataFromWindow() override;
+
+ void ImportSettingsFrom( BOARD* aBoard );
+
+private:
+ BOARD_DESIGN_SETTINGS* m_BrdSettings;
+
+ UNIT_BINDER m_teardropMaxLenRound;
+ UNIT_BINDER m_teardropMaxHeightRound;
+ UNIT_BINDER m_teardropMaxLenRect;
+ UNIT_BINDER m_teardropMaxHeightRect;
+ UNIT_BINDER m_teardropMaxLenTrack;
+ UNIT_BINDER m_teardropMaxHeightTrack;
+};
+
+
+#endif //PANEL_SETUP_TEARDROPS_H
diff --git a/pcbnew/dialogs/panel_setup_teardrops_base.cpp b/pcbnew/dialogs/panel_setup_teardrops_base.cpp
new file mode 100644
index 0000000000..74a1c22290
--- /dev/null
+++ b/pcbnew/dialogs/panel_setup_teardrops_base.cpp
@@ -0,0 +1,423 @@
+///////////////////////////////////////////////////////////////////////////
+// C++ code generated with wxFormBuilder (version 3.10.1-0-g8feb16b)
+// http://www.wxformbuilder.org/
+//
+// PLEASE DO *NOT* EDIT THIS FILE!
+///////////////////////////////////////////////////////////////////////////
+
+#include "panel_setup_teardrops_base.h"
+
+///////////////////////////////////////////////////////////////////////////
+
+PANEL_SETUP_TEARDROPS_BASE::PANEL_SETUP_TEARDROPS_BASE( wxWindow* parent, wxWindowID id, const wxPoint& pos, const wxSize& size, long style, const wxString& name ) : wxPanel( parent, id, pos, size, style, name )
+{
+ wxBoxSizer* mainSizer;
+ mainSizer = new wxBoxSizer( wxVERTICAL );
+
+ m_gridSizer = new wxBoxSizer( wxVERTICAL );
+
+ m_roundShapesLabel = new wxStaticText( this, wxID_ANY, _("Default properties for round shapes:"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_roundShapesLabel->Wrap( -1 );
+ m_gridSizer->Add( m_roundShapesLabel, 0, wxTOP|wxRIGHT|wxLEFT, 8 );
+
+ m_staticline1 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL );
+ m_gridSizer->Add( m_staticline1, 0, wxEXPAND|wxBOTTOM, 10 );
+
+ wxBoxSizer* bSizerShapeColumns;
+ bSizerShapeColumns = new wxBoxSizer( wxHORIZONTAL );
+
+ wxBoxSizer* bSizerLeftCol;
+ bSizerLeftCol = new wxBoxSizer( wxVERTICAL );
+
+ m_bitmapTeardrop = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 );
+ bSizerLeftCol->Add( m_bitmapTeardrop, 1, wxALIGN_CENTER_HORIZONTAL|wxRIGHT|wxLEFT, 5 );
+
+ wxBoxSizer* bSizer41;
+ bSizer41 = new wxBoxSizer( wxHORIZONTAL );
+
+ m_edgesLabel = new wxStaticText( this, wxID_ANY, _("Edges:"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_edgesLabel->Wrap( -1 );
+ bSizer41->Add( m_edgesLabel, 0, wxALIGN_CENTER_VERTICAL|wxLEFT, 5 );
+
+ m_rbStraightLines = new wxRadioButton( this, wxID_ANY, _("Straight lines"), wxDefaultPosition, wxDefaultSize, wxRB_GROUP );
+ bSizer41->Add( m_rbStraightLines, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 );
+
+ m_rbCurved = new wxRadioButton( this, wxID_ANY, _("Curved"), wxDefaultPosition, wxDefaultSize, 0 );
+ bSizer41->Add( m_rbCurved, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 );
+
+
+ bSizerLeftCol->Add( bSizer41, 0, wxEXPAND|wxBOTTOM, 4 );
+
+
+ bSizerShapeColumns->Add( bSizerLeftCol, 0, wxEXPAND|wxRIGHT, 10 );
+
+
+ bSizerShapeColumns->Add( 10, 0, 0, wxEXPAND, 5 );
+
+ wxGridBagSizer* gbSizer;
+ gbSizer = new wxGridBagSizer( 2, 5 );
+ gbSizer->SetFlexibleDirection( wxBOTH );
+ gbSizer->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
+ gbSizer->SetEmptyCellSize( wxSize( 10,9 ) );
+
+ m_stHsetting = new wxStaticText( this, wxID_ANY, _("Best length:"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_stHsetting->Wrap( -1 );
+ gbSizer->Add( m_stHsetting, wxGBPosition( 0, 0 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL, 5 );
+
+ m_spTeardropLenPercent = new wxSpinCtrlDouble( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS, 20, 100, 40.000000, 10 );
+ m_spTeardropLenPercent->SetDigits( 0 );
+ gbSizer->Add( m_spTeardropLenPercent, wxGBPosition( 0, 1 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
+
+ m_stTeardropLenUnits = new wxStaticText( this, wxID_ANY, _("%"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_stTeardropLenUnits->Wrap( -1 );
+ gbSizer->Add( m_stTeardropLenUnits, wxGBPosition( 0, 2 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL, 5 );
+
+ m_stMaxLen = new wxStaticText( this, wxID_ANY, _("Max length:"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_stMaxLen->Wrap( -1 );
+ gbSizer->Add( m_stMaxLen, wxGBPosition( 1, 0 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL, 5 );
+
+ m_tcTdMaxLen = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
+ gbSizer->Add( m_tcTdMaxLen, wxGBPosition( 1, 1 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
+
+ m_stMaxLenUnits = new wxStaticText( this, wxID_ANY, _("mm"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_stMaxLenUnits->Wrap( -1 );
+ gbSizer->Add( m_stMaxLenUnits, wxGBPosition( 1, 2 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL, 5 );
+
+ m_stVsetting = new wxStaticText( this, wxID_ANY, _("Best height:"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_stVsetting->Wrap( -1 );
+ gbSizer->Add( m_stVsetting, wxGBPosition( 3, 0 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL, 5 );
+
+ m_spTeardropSizePercent = new wxSpinCtrlDouble( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS, 60, 100, 100.000000, 10 );
+ m_spTeardropSizePercent->SetDigits( 0 );
+ gbSizer->Add( m_spTeardropSizePercent, wxGBPosition( 3, 1 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
+
+ m_stLenPercent = new wxStaticText( this, wxID_ANY, _("%"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_stLenPercent->Wrap( -1 );
+ gbSizer->Add( m_stLenPercent, wxGBPosition( 3, 2 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL, 5 );
+
+ m_stTdMaxSize = new wxStaticText( this, wxID_ANY, _("Max height:"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_stTdMaxSize->Wrap( -1 );
+ gbSizer->Add( m_stTdMaxSize, wxGBPosition( 4, 0 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL, 5 );
+
+ m_tcMaxHeight = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
+ gbSizer->Add( m_tcMaxHeight, wxGBPosition( 4, 1 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
+
+ m_stMaxHeightUnits = new wxStaticText( this, wxID_ANY, _("mm"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_stMaxHeightUnits->Wrap( -1 );
+ gbSizer->Add( m_stMaxHeightUnits, wxGBPosition( 4, 2 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL, 5 );
+
+ m_curvePointsLabel = new wxStaticText( this, wxID_ANY, _("Curve points:"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_curvePointsLabel->Wrap( -1 );
+ gbSizer->Add( m_curvePointsLabel, wxGBPosition( 6, 0 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL, 5 );
+
+ m_curvePointsCtrl = new wxSpinCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS, 3, 10, 5 );
+ gbSizer->Add( m_curvePointsCtrl, wxGBPosition( 6, 1 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL, 5 );
+
+ m_cbPreferZoneConnection = new wxCheckBox( this, wxID_ANY, _("Prefer zone connection"), wxDefaultPosition, wxDefaultSize, 0 );
+ gbSizer->Add( m_cbPreferZoneConnection, wxGBPosition( 3, 3 ), wxGBSpan( 1, 3 ), wxALIGN_CENTER_VERTICAL|wxLEFT, 60 );
+
+ m_stHDRatio = new wxStaticText( this, wxID_ANY, _("Maximum track width:"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_stHDRatio->Wrap( -1 );
+ m_stHDRatio->SetToolTip( _("Max pad/via size to track width ratio to create a teardrop.\n100 always creates a teardrop.") );
+
+ gbSizer->Add( m_stHDRatio, wxGBPosition( 0, 3 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL|wxLEFT, 60 );
+
+ m_spTeardropHDPercent = new wxSpinCtrlDouble( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS, 0, 100, 90, 10 );
+ m_spTeardropHDPercent->SetDigits( 0 );
+ m_spTeardropHDPercent->SetToolTip( _("Tracks which are similar in size to the pad or via do not need teardrops.") );
+
+ gbSizer->Add( m_spTeardropHDPercent, wxGBPosition( 0, 4 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL, 5 );
+
+ m_minTrackWidthUnits = new wxStaticText( this, wxID_ANY, _("%"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_minTrackWidthUnits->Wrap( -1 );
+ gbSizer->Add( m_minTrackWidthUnits, wxGBPosition( 0, 5 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL, 5 );
+
+ m_minTrackWidthHint = new wxStaticText( this, wxID_ANY, _("(as a percentage of pad/via size)"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_minTrackWidthHint->Wrap( -1 );
+ gbSizer->Add( m_minTrackWidthHint, wxGBPosition( 1, 3 ), wxGBSpan( 1, 3 ), wxLEFT, 65 );
+
+ m_cbTeardropsUseNextTrack = new wxCheckBox( this, wxID_ANY, _("Allow teardrop to span two track segments"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_cbTeardropsUseNextTrack->SetValue(true);
+ gbSizer->Add( m_cbTeardropsUseNextTrack, wxGBPosition( 6, 2 ), wxGBSpan( 1, 5 ), wxALIGN_CENTER_VERTICAL|wxLEFT, 5 );
+
+
+ bSizerShapeColumns->Add( gbSizer, 0, wxEXPAND|wxLEFT, 20 );
+
+
+ m_gridSizer->Add( bSizerShapeColumns, 1, wxEXPAND, 5 );
+
+
+ m_gridSizer->Add( 0, 25, 0, wxEXPAND, 5 );
+
+ m_rectShapesLabel = new wxStaticText( this, wxID_ANY, _("Default properties for rectangular shapes:"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_rectShapesLabel->Wrap( -1 );
+ m_gridSizer->Add( m_rectShapesLabel, 0, wxTOP|wxRIGHT|wxLEFT, 8 );
+
+ m_staticline2 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL );
+ m_gridSizer->Add( m_staticline2, 0, wxEXPAND|wxBOTTOM, 10 );
+
+ wxBoxSizer* bSizerShapeColumns1;
+ bSizerShapeColumns1 = new wxBoxSizer( wxHORIZONTAL );
+
+ wxBoxSizer* bSizerLeftCol1;
+ bSizerLeftCol1 = new wxBoxSizer( wxVERTICAL );
+
+ m_bitmapTeardrop1 = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 );
+ bSizerLeftCol1->Add( m_bitmapTeardrop1, 1, wxALIGN_CENTER_HORIZONTAL|wxRIGHT|wxLEFT, 5 );
+
+ wxBoxSizer* bSizer411;
+ bSizer411 = new wxBoxSizer( wxHORIZONTAL );
+
+ m_edgesLabel1 = new wxStaticText( this, wxID_ANY, _("Edges:"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_edgesLabel1->Wrap( -1 );
+ bSizer411->Add( m_edgesLabel1, 0, wxALIGN_CENTER_VERTICAL|wxLEFT, 5 );
+
+ m_rbStraightLines1 = new wxRadioButton( this, wxID_ANY, _("Straight lines"), wxDefaultPosition, wxDefaultSize, wxRB_GROUP );
+ bSizer411->Add( m_rbStraightLines1, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 );
+
+ m_rbCurved1 = new wxRadioButton( this, wxID_ANY, _("Curved"), wxDefaultPosition, wxDefaultSize, 0 );
+ bSizer411->Add( m_rbCurved1, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 );
+
+
+ bSizerLeftCol1->Add( bSizer411, 0, wxEXPAND|wxBOTTOM, 4 );
+
+
+ bSizerShapeColumns1->Add( bSizerLeftCol1, 0, wxEXPAND|wxRIGHT, 10 );
+
+
+ bSizerShapeColumns1->Add( 10, 0, 0, wxEXPAND, 5 );
+
+ wxGridBagSizer* gbSizer1;
+ gbSizer1 = new wxGridBagSizer( 2, 5 );
+ gbSizer1->SetFlexibleDirection( wxBOTH );
+ gbSizer1->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
+ gbSizer1->SetEmptyCellSize( wxSize( 10,9 ) );
+
+ m_stHsetting1 = new wxStaticText( this, wxID_ANY, _("Best length:"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_stHsetting1->Wrap( -1 );
+ gbSizer1->Add( m_stHsetting1, wxGBPosition( 0, 0 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL, 5 );
+
+ m_spTeardropLenPercent1 = new wxSpinCtrlDouble( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS, 20, 100, 40.000000, 10 );
+ m_spTeardropLenPercent1->SetDigits( 0 );
+ gbSizer1->Add( m_spTeardropLenPercent1, wxGBPosition( 0, 1 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
+
+ m_stTeardropLenUnits1 = new wxStaticText( this, wxID_ANY, _("%"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_stTeardropLenUnits1->Wrap( -1 );
+ gbSizer1->Add( m_stTeardropLenUnits1, wxGBPosition( 0, 2 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL, 5 );
+
+ m_stMaxLen1 = new wxStaticText( this, wxID_ANY, _("Max length:"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_stMaxLen1->Wrap( -1 );
+ gbSizer1->Add( m_stMaxLen1, wxGBPosition( 1, 0 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL, 5 );
+
+ m_tcTdMaxLen1 = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
+ gbSizer1->Add( m_tcTdMaxLen1, wxGBPosition( 1, 1 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
+
+ m_stMaxLenUnits1 = new wxStaticText( this, wxID_ANY, _("mm"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_stMaxLenUnits1->Wrap( -1 );
+ gbSizer1->Add( m_stMaxLenUnits1, wxGBPosition( 1, 2 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL, 5 );
+
+ m_stVsetting1 = new wxStaticText( this, wxID_ANY, _("Best height:"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_stVsetting1->Wrap( -1 );
+ gbSizer1->Add( m_stVsetting1, wxGBPosition( 3, 0 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL, 5 );
+
+ m_spTeardropSizePercent1 = new wxSpinCtrlDouble( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS, 60, 100, 100.000000, 10 );
+ m_spTeardropSizePercent1->SetDigits( 0 );
+ gbSizer1->Add( m_spTeardropSizePercent1, wxGBPosition( 3, 1 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
+
+ m_stLenPercent1 = new wxStaticText( this, wxID_ANY, _("%"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_stLenPercent1->Wrap( -1 );
+ gbSizer1->Add( m_stLenPercent1, wxGBPosition( 3, 2 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL, 5 );
+
+ m_stTdMaxSize1 = new wxStaticText( this, wxID_ANY, _("Max height:"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_stTdMaxSize1->Wrap( -1 );
+ gbSizer1->Add( m_stTdMaxSize1, wxGBPosition( 4, 0 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL, 5 );
+
+ m_tcMaxHeight1 = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
+ gbSizer1->Add( m_tcMaxHeight1, wxGBPosition( 4, 1 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
+
+ m_stMaxHeightUnits1 = new wxStaticText( this, wxID_ANY, _("mm"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_stMaxHeightUnits1->Wrap( -1 );
+ gbSizer1->Add( m_stMaxHeightUnits1, wxGBPosition( 4, 2 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL, 5 );
+
+ m_curvePointsLabel1 = new wxStaticText( this, wxID_ANY, _("Curve points:"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_curvePointsLabel1->Wrap( -1 );
+ gbSizer1->Add( m_curvePointsLabel1, wxGBPosition( 6, 0 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL, 5 );
+
+ m_curvePointsCtrl1 = new wxSpinCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS, 3, 10, 5 );
+ gbSizer1->Add( m_curvePointsCtrl1, wxGBPosition( 6, 1 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL, 5 );
+
+ m_cbPreferZoneConnection1 = new wxCheckBox( this, wxID_ANY, _("Prefer zone connection"), wxDefaultPosition, wxDefaultSize, 0 );
+ gbSizer1->Add( m_cbPreferZoneConnection1, wxGBPosition( 3, 3 ), wxGBSpan( 1, 3 ), wxALIGN_CENTER_VERTICAL|wxLEFT, 60 );
+
+ m_stHDRatio1 = new wxStaticText( this, wxID_ANY, _("Maximum track width:"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_stHDRatio1->Wrap( -1 );
+ m_stHDRatio1->SetToolTip( _("Max pad/via size to track width ratio to create a teardrop.\n100 always creates a teardrop.") );
+
+ gbSizer1->Add( m_stHDRatio1, wxGBPosition( 0, 3 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL|wxLEFT, 60 );
+
+ m_spTeardropHDPercent1 = new wxSpinCtrlDouble( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS, 0, 100, 90, 10 );
+ m_spTeardropHDPercent1->SetDigits( 0 );
+ m_spTeardropHDPercent1->SetToolTip( _("Tracks which are similar in size to the pad do not need teardrops.") );
+
+ gbSizer1->Add( m_spTeardropHDPercent1, wxGBPosition( 0, 4 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL, 5 );
+
+ m_minTrackWidthUnits1 = new wxStaticText( this, wxID_ANY, _("%"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_minTrackWidthUnits1->Wrap( -1 );
+ gbSizer1->Add( m_minTrackWidthUnits1, wxGBPosition( 0, 5 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL, 5 );
+
+ m_minTrackWidthHint1 = new wxStaticText( this, wxID_ANY, _("(as a percentage of pad size)"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_minTrackWidthHint1->Wrap( -1 );
+ gbSizer1->Add( m_minTrackWidthHint1, wxGBPosition( 1, 3 ), wxGBSpan( 1, 3 ), wxLEFT, 65 );
+
+ m_cbTeardropsUseNextTrack1 = new wxCheckBox( this, wxID_ANY, _("Allow teardrop to span two track segments"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_cbTeardropsUseNextTrack1->SetValue(true);
+ gbSizer1->Add( m_cbTeardropsUseNextTrack1, wxGBPosition( 6, 2 ), wxGBSpan( 1, 5 ), wxALIGN_CENTER_VERTICAL|wxLEFT, 5 );
+
+
+ bSizerShapeColumns1->Add( gbSizer1, 0, wxEXPAND|wxLEFT, 20 );
+
+
+ m_gridSizer->Add( bSizerShapeColumns1, 1, wxEXPAND, 5 );
+
+
+ m_gridSizer->Add( 0, 25, 0, wxEXPAND, 5 );
+
+ m_tracksLabel = new wxStaticText( this, wxID_ANY, _("Properties for track-to-track teardrops:"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_tracksLabel->Wrap( -1 );
+ m_gridSizer->Add( m_tracksLabel, 0, wxTOP|wxRIGHT|wxLEFT, 8 );
+
+ m_staticline3 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL );
+ m_gridSizer->Add( m_staticline3, 0, wxEXPAND|wxBOTTOM, 10 );
+
+ wxBoxSizer* bSizerShapeColumns2;
+ bSizerShapeColumns2 = new wxBoxSizer( wxHORIZONTAL );
+
+ wxBoxSizer* bSizerLeftCol2;
+ bSizerLeftCol2 = new wxBoxSizer( wxVERTICAL );
+
+ m_bitmapTeardrop2 = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 );
+ bSizerLeftCol2->Add( m_bitmapTeardrop2, 1, wxALIGN_CENTER_HORIZONTAL|wxRIGHT|wxLEFT, 5 );
+
+ wxBoxSizer* bSizer412;
+ bSizer412 = new wxBoxSizer( wxHORIZONTAL );
+
+ m_edgesLabel2 = new wxStaticText( this, wxID_ANY, _("Edges:"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_edgesLabel2->Wrap( -1 );
+ bSizer412->Add( m_edgesLabel2, 0, wxALIGN_CENTER_VERTICAL|wxLEFT, 5 );
+
+ m_rbStraightLines2 = new wxRadioButton( this, wxID_ANY, _("Straight lines"), wxDefaultPosition, wxDefaultSize, wxRB_GROUP );
+ bSizer412->Add( m_rbStraightLines2, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 );
+
+ m_rbCurved2 = new wxRadioButton( this, wxID_ANY, _("Curved"), wxDefaultPosition, wxDefaultSize, 0 );
+ bSizer412->Add( m_rbCurved2, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 );
+
+
+ bSizerLeftCol2->Add( bSizer412, 0, wxEXPAND|wxBOTTOM, 4 );
+
+
+ bSizerShapeColumns2->Add( bSizerLeftCol2, 0, wxEXPAND|wxRIGHT, 10 );
+
+
+ bSizerShapeColumns2->Add( 10, 0, 0, wxEXPAND, 5 );
+
+ wxGridBagSizer* gbSizer2;
+ gbSizer2 = new wxGridBagSizer( 2, 5 );
+ gbSizer2->SetFlexibleDirection( wxBOTH );
+ gbSizer2->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
+ gbSizer2->SetEmptyCellSize( wxSize( 10,9 ) );
+
+ m_stHsetting2 = new wxStaticText( this, wxID_ANY, _("Best length:"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_stHsetting2->Wrap( -1 );
+ gbSizer2->Add( m_stHsetting2, wxGBPosition( 0, 0 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL, 5 );
+
+ m_spTeardropLenPercent2 = new wxSpinCtrlDouble( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS, 20, 100, 40.000000, 10 );
+ m_spTeardropLenPercent2->SetDigits( 0 );
+ gbSizer2->Add( m_spTeardropLenPercent2, wxGBPosition( 0, 1 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
+
+ m_stTeardropLenUnits2 = new wxStaticText( this, wxID_ANY, _("%"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_stTeardropLenUnits2->Wrap( -1 );
+ gbSizer2->Add( m_stTeardropLenUnits2, wxGBPosition( 0, 2 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL, 5 );
+
+ m_stMaxLen2 = new wxStaticText( this, wxID_ANY, _("Max length:"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_stMaxLen2->Wrap( -1 );
+ gbSizer2->Add( m_stMaxLen2, wxGBPosition( 1, 0 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL, 5 );
+
+ m_tcTdMaxLen2 = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
+ gbSizer2->Add( m_tcTdMaxLen2, wxGBPosition( 1, 1 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
+
+ m_stMaxLenUnits2 = new wxStaticText( this, wxID_ANY, _("mm"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_stMaxLenUnits2->Wrap( -1 );
+ gbSizer2->Add( m_stMaxLenUnits2, wxGBPosition( 1, 2 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL, 5 );
+
+ m_stVsetting2 = new wxStaticText( this, wxID_ANY, _("Best height:"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_stVsetting2->Wrap( -1 );
+ gbSizer2->Add( m_stVsetting2, wxGBPosition( 3, 0 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL, 5 );
+
+ m_spTeardropSizePercent2 = new wxSpinCtrlDouble( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS, 60, 100, 100.000000, 10 );
+ m_spTeardropSizePercent2->SetDigits( 0 );
+ gbSizer2->Add( m_spTeardropSizePercent2, wxGBPosition( 3, 1 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
+
+ m_stLenPercent2 = new wxStaticText( this, wxID_ANY, _("%"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_stLenPercent2->Wrap( -1 );
+ gbSizer2->Add( m_stLenPercent2, wxGBPosition( 3, 2 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL, 5 );
+
+ m_stTdMaxSize2 = new wxStaticText( this, wxID_ANY, _("Max height:"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_stTdMaxSize2->Wrap( -1 );
+ gbSizer2->Add( m_stTdMaxSize2, wxGBPosition( 4, 0 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL, 5 );
+
+ m_tcMaxHeight2 = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
+ gbSizer2->Add( m_tcMaxHeight2, wxGBPosition( 4, 1 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
+
+ m_stMaxHeightUnits2 = new wxStaticText( this, wxID_ANY, _("mm"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_stMaxHeightUnits2->Wrap( -1 );
+ gbSizer2->Add( m_stMaxHeightUnits2, wxGBPosition( 4, 2 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL, 5 );
+
+ m_curvePointsLabel2 = new wxStaticText( this, wxID_ANY, _("Curve points:"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_curvePointsLabel2->Wrap( -1 );
+ gbSizer2->Add( m_curvePointsLabel2, wxGBPosition( 6, 0 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL, 5 );
+
+ m_curvePointsCtrl2 = new wxSpinCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS, 3, 10, 5 );
+ gbSizer2->Add( m_curvePointsCtrl2, wxGBPosition( 6, 1 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL, 5 );
+
+ m_stHDRatio2 = new wxStaticText( this, wxID_ANY, _("Maximum track width"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_stHDRatio2->Wrap( -1 );
+ m_stHDRatio2->SetToolTip( _("Max pad/via size to track width ratio to create a teardrop.\n100 always creates a teardrop.") );
+
+ gbSizer2->Add( m_stHDRatio2, wxGBPosition( 0, 3 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL|wxLEFT, 60 );
+
+ m_spTeardropHDPercent2 = new wxSpinCtrlDouble( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS, 0, 100, 90, 10 );
+ m_spTeardropHDPercent2->SetDigits( 0 );
+ m_spTeardropHDPercent2->SetToolTip( _("Tracks which are similar in size do not need teardrops.") );
+
+ gbSizer2->Add( m_spTeardropHDPercent2, wxGBPosition( 0, 4 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL, 5 );
+
+ m_minTrackWidthUnits2 = new wxStaticText( this, wxID_ANY, _("%"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_minTrackWidthUnits2->Wrap( -1 );
+ gbSizer2->Add( m_minTrackWidthUnits2, wxGBPosition( 0, 5 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL, 5 );
+
+ m_minTrackWidthHint2 = new wxStaticText( this, wxID_ANY, _("(as a percentage of larger track width)"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_minTrackWidthHint2->Wrap( -1 );
+ gbSizer2->Add( m_minTrackWidthHint2, wxGBPosition( 1, 3 ), wxGBSpan( 1, 3 ), wxLEFT, 65 );
+
+ m_cbTeardropsUseNextTrack2 = new wxCheckBox( this, wxID_ANY, _("Allow teardrop to span two track segments"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_cbTeardropsUseNextTrack2->SetValue(true);
+ gbSizer2->Add( m_cbTeardropsUseNextTrack2, wxGBPosition( 6, 2 ), wxGBSpan( 1, 5 ), wxALIGN_CENTER_VERTICAL|wxLEFT, 5 );
+
+
+ bSizerShapeColumns2->Add( gbSizer2, 0, wxEXPAND|wxLEFT, 20 );
+
+
+ m_gridSizer->Add( bSizerShapeColumns2, 1, wxEXPAND, 5 );
+
+
+ mainSizer->Add( m_gridSizer, 0, wxLEFT, 5 );
+
+
+ this->SetSizer( mainSizer );
+ this->Layout();
+ mainSizer->Fit( this );
+}
+
+PANEL_SETUP_TEARDROPS_BASE::~PANEL_SETUP_TEARDROPS_BASE()
+{
+}
diff --git a/pcbnew/dialogs/panel_setup_teardrops_base.fbp b/pcbnew/dialogs/panel_setup_teardrops_base.fbp
new file mode 100644
index 0000000000..390c74d0a4
--- /dev/null
+++ b/pcbnew/dialogs/panel_setup_teardrops_base.fbp
@@ -0,0 +1,5211 @@
+
+
+
+
+
+ C++
+ 1
+ source_name
+ 0
+ 0
+ res
+ UTF-8
+ connect
+ panel_setup_teardrops_base
+ 1000
+ none
+
+
+ 1
+ panel_setup_teardrops_base
+
+ .
+
+ 1
+ 1
+ 1
+ 1
+ UI
+ 0
+ 1
+ 0
+
+ 0
+ wxAUI_MGR_DEFAULT
+
+
+ 1
+ 1
+ impl_virtual
+
+
+ 0
+ wxID_ANY
+
+
+ PANEL_SETUP_TEARDROPS_BASE
+
+ -1,-1
+ ; forward_declare
+
+ 0
+
+
+ wxTAB_TRAVERSAL
+
+
+ mainSizer
+ wxVERTICAL
+ none
+
+ 5
+ wxLEFT
+ 0
+
+
+ m_gridSizer
+ wxVERTICAL
+ protected
+
+ 8
+ wxTOP|wxRIGHT|wxLEFT
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ Default properties for round shapes:
+ 0
+
+ 0
+
+
+ 0
+
+ 1
+ m_roundShapesLabel
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+ ; forward_declare
+ 0
+
+
+
+
+ -1
+
+
+
+ 10
+ wxEXPAND|wxBOTTOM
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+
+ 0
+
+
+ 0
+
+ 1
+ m_staticline1
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+ wxLI_HORIZONTAL
+ ; ; forward_declare
+ 0
+
+
+
+
+
+
+
+ 5
+ wxEXPAND
+ 1
+
+
+ bSizerShapeColumns
+ wxHORIZONTAL
+ none
+
+ 10
+ wxEXPAND|wxRIGHT
+ 0
+
+
+ bSizerLeftCol
+ wxVERTICAL
+ none
+
+ 5
+ wxALIGN_CENTER_HORIZONTAL|wxRIGHT|wxLEFT
+ 1
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+
+ 0
+
+
+ 0
+
+ 1
+ m_bitmapTeardrop
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+ ; ; forward_declare
+ 0
+
+
+
+
+
+
+
+ 4
+ wxEXPAND|wxBOTTOM
+ 0
+
+
+ bSizer41
+ wxHORIZONTAL
+ none
+
+ 5
+ wxALIGN_CENTER_VERTICAL|wxLEFT
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ Edges:
+ 0
+
+ 0
+
+
+ 0
+
+ 1
+ m_edgesLabel
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+ ; ; forward_declare
+ 0
+
+
+
+
+ -1
+
+
+
+ 5
+ wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ Straight lines
+
+ 0
+
+
+ 0
+
+ 1
+ m_rbStraightLines
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+ wxRB_GROUP
+ ; ; forward_declare
+ 0
+
+
+ wxFILTER_NONE
+ wxDefaultValidator
+
+ 0
+
+
+
+
+
+
+ 5
+ wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ Curved
+
+ 0
+
+
+ 0
+
+ 1
+ m_rbCurved
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+ ; ; forward_declare
+ 0
+
+
+ wxFILTER_NONE
+ wxDefaultValidator
+
+ 0
+
+
+
+
+
+
+
+
+
+
+ 5
+ wxEXPAND
+ 0
+
+ 0
+ protected
+ 10
+
+
+
+ 20
+ wxEXPAND|wxLEFT
+ 0
+
+ 10,9
+ wxBOTH
+
+
+ 5
+
+ gbSizer
+ wxFLEX_GROWMODE_SPECIFIED
+ none
+ 2
+
+ 5
+ 1
+ 0
+ wxALIGN_CENTER_VERTICAL
+ 0
+ 1
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ Best length:
+ 0
+
+ 0
+
+
+ 0
+
+ 1
+ m_stHsetting
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+ ; ; forward_declare
+ 0
+
+
+
+
+ -1
+
+
+
+ 5
+ 1
+ 1
+ wxALIGN_CENTER_VERTICAL|wxEXPAND
+ 0
+ 1
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ 10
+ 40.000000
+ 100
+
+ 0
+
+ 20
+
+ 0
+
+ 1
+ m_spTeardropLenPercent
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+ wxSP_ARROW_KEYS
+ ; ; forward_declare
+ 0
+
+
+
+
+
+
+
+
+ 5
+ 1
+ 2
+ wxALIGN_CENTER_VERTICAL
+ 0
+ 1
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ %
+ 0
+
+ 0
+
+
+ 0
+
+ 1
+ m_stTeardropLenUnits
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+ ; ; forward_declare
+ 0
+
+
+
+
+ -1
+
+
+
+ 5
+ 1
+ 0
+ wxALIGN_CENTER_VERTICAL
+ 1
+ 1
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ Max length:
+ 0
+
+ 0
+
+
+ 0
+
+ 1
+ m_stMaxLen
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+ ; ; forward_declare
+ 0
+
+
+
+
+ -1
+
+
+
+ 5
+ 1
+ 1
+ wxALIGN_CENTER_VERTICAL|wxEXPAND
+ 1
+ 1
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+
+ 0
+
+
+
+ 0
+
+ 1
+ m_tcTdMaxLen
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+ ; ; forward_declare
+ 0
+
+
+ wxFILTER_NONE
+ wxDefaultValidator
+
+
+
+
+
+
+
+
+ 5
+ 1
+ 2
+ wxALIGN_CENTER_VERTICAL
+ 1
+ 1
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ mm
+ 0
+
+ 0
+
+
+ 0
+
+ 1
+ m_stMaxLenUnits
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+ ; ; forward_declare
+ 0
+
+
+
+
+ -1
+
+
+
+ 5
+ 1
+ 0
+ wxALIGN_CENTER_VERTICAL
+ 3
+ 1
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ Best height:
+ 0
+
+ 0
+
+
+ 0
+
+ 1
+ m_stVsetting
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+ ; ; forward_declare
+ 0
+
+
+
+
+ -1
+
+
+
+ 5
+ 1
+ 1
+ wxALIGN_CENTER_VERTICAL|wxEXPAND
+ 3
+ 1
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ 10
+ 100.000000
+ 100
+
+ 0
+
+ 60
+
+ 0
+
+ 1
+ m_spTeardropSizePercent
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+ wxSP_ARROW_KEYS
+ ; ; forward_declare
+ 0
+
+
+
+
+
+
+
+
+ 5
+ 1
+ 2
+ wxALIGN_CENTER_VERTICAL
+ 3
+ 1
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ %
+ 0
+
+ 0
+
+
+ 0
+
+ 1
+ m_stLenPercent
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+ ; ; forward_declare
+ 0
+
+
+
+
+ -1
+
+
+
+ 5
+ 1
+ 0
+ wxALIGN_CENTER_VERTICAL
+ 4
+ 1
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ Max height:
+ 0
+
+ 0
+
+
+ 0
+
+ 1
+ m_stTdMaxSize
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+ ; ; forward_declare
+ 0
+
+
+
+
+ -1
+
+
+
+ 5
+ 1
+ 1
+ wxALIGN_CENTER_VERTICAL|wxEXPAND
+ 4
+ 1
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+
+ 0
+
+
+
+ 0
+
+ 1
+ m_tcMaxHeight
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+ ; ; forward_declare
+ 0
+
+
+ wxFILTER_NONE
+ wxDefaultValidator
+
+
+
+
+
+
+
+
+ 5
+ 1
+ 2
+ wxALIGN_CENTER_VERTICAL
+ 4
+ 1
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ mm
+ 0
+
+ 0
+
+
+ 0
+
+ 1
+ m_stMaxHeightUnits
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+ ; ; forward_declare
+ 0
+
+
+
+
+ -1
+
+
+
+ 5
+ 1
+ 0
+ wxALIGN_CENTER_VERTICAL
+ 6
+ 1
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ Curve points:
+ 0
+
+ 0
+
+
+ 0
+
+ 1
+ m_curvePointsLabel
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+ ; ; forward_declare
+ 0
+
+
+
+
+ -1
+
+
+
+ 5
+ 1
+ 1
+ wxALIGN_CENTER_VERTICAL
+ 6
+ 1
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ 5
+ 10
+
+ 0
+
+ 3
+
+ 0
+
+ 1
+ m_curvePointsCtrl
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+ wxSP_ARROW_KEYS
+ ; ; forward_declare
+ 0
+
+
+
+
+
+
+
+
+ 60
+ 3
+ 3
+ wxALIGN_CENTER_VERTICAL|wxLEFT
+ 3
+ 1
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ Prefer zone connection
+
+ 0
+
+
+ 0
+
+ 1
+ m_cbPreferZoneConnection
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+ ; ; forward_declare
+ 0
+
+
+ wxFILTER_NONE
+ wxDefaultValidator
+
+
+
+
+
+
+
+ 60
+ 1
+ 3
+ wxALIGN_CENTER_VERTICAL|wxLEFT
+ 0
+ 1
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ Maximum track width:
+ 0
+
+ 0
+
+
+ 0
+
+ 1
+ m_stHDRatio
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+ ; ; forward_declare
+ 0
+ Max pad/via size to track width ratio to create a teardrop.
100 always creates a teardrop.
+
+
+
+ -1
+
+
+
+ 5
+ 1
+ 4
+ wxALIGN_CENTER_VERTICAL
+ 0
+ 1
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ 10
+ 90
+ 100
+
+ 0
+
+ 0
+
+ 0
+
+ 1
+ m_spTeardropHDPercent
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+ wxSP_ARROW_KEYS
+ ; ; forward_declare
+ 0
+ Tracks which are similar in size to the pad or via do not need teardrops.
+
+
+
+
+
+
+
+ 5
+ 1
+ 5
+ wxALIGN_CENTER_VERTICAL
+ 0
+ 1
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ %
+ 0
+
+ 0
+
+
+ 0
+
+ 1
+ m_minTrackWidthUnits
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+ ; ; forward_declare
+ 0
+
+
+
+
+ -1
+
+
+
+ 65
+ 3
+ 3
+ wxLEFT
+ 1
+ 1
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ (as a percentage of pad/via size)
+ 0
+
+ 0
+
+
+ 0
+
+ 1
+ m_minTrackWidthHint
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+ ; ; forward_declare
+ 0
+
+
+
+
+ -1
+
+
+
+ 5
+ 5
+ 2
+ wxALIGN_CENTER_VERTICAL|wxLEFT
+ 6
+ 1
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ Allow teardrop to span two track segments
+
+ 0
+
+
+ 0
+
+ 1
+ m_cbTeardropsUseNextTrack
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+ ; ; forward_declare
+ 0
+
+
+ wxFILTER_NONE
+ wxDefaultValidator
+
+
+
+
+
+
+
+
+
+
+
+ 5
+ wxEXPAND
+ 0
+
+ 25
+ protected
+ 0
+
+
+
+ 8
+ wxTOP|wxRIGHT|wxLEFT
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ Default properties for rectangular shapes:
+ 0
+
+ 0
+
+
+ 0
+
+ 1
+ m_rectShapesLabel
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+ ; forward_declare
+ 0
+
+
+
+
+ -1
+
+
+
+ 10
+ wxEXPAND|wxBOTTOM
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+
+ 0
+
+
+ 0
+
+ 1
+ m_staticline2
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+ wxLI_HORIZONTAL
+ ; ; forward_declare
+ 0
+
+
+
+
+
+
+
+ 5
+ wxEXPAND
+ 1
+
+
+ bSizerShapeColumns1
+ wxHORIZONTAL
+ none
+
+ 10
+ wxEXPAND|wxRIGHT
+ 0
+
+
+ bSizerLeftCol1
+ wxVERTICAL
+ none
+
+ 5
+ wxALIGN_CENTER_HORIZONTAL|wxRIGHT|wxLEFT
+ 1
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+
+ 0
+
+
+ 0
+
+ 1
+ m_bitmapTeardrop1
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+ ; ; forward_declare
+ 0
+
+
+
+
+
+
+
+ 4
+ wxEXPAND|wxBOTTOM
+ 0
+
+
+ bSizer411
+ wxHORIZONTAL
+ none
+
+ 5
+ wxALIGN_CENTER_VERTICAL|wxLEFT
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ Edges:
+ 0
+
+ 0
+
+
+ 0
+
+ 1
+ m_edgesLabel1
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+ ; ; forward_declare
+ 0
+
+
+
+
+ -1
+
+
+
+ 5
+ wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ Straight lines
+
+ 0
+
+
+ 0
+
+ 1
+ m_rbStraightLines1
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+ wxRB_GROUP
+ ; ; forward_declare
+ 0
+
+
+ wxFILTER_NONE
+ wxDefaultValidator
+
+ 0
+
+
+
+
+
+
+ 5
+ wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ Curved
+
+ 0
+
+
+ 0
+
+ 1
+ m_rbCurved1
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+ ; ; forward_declare
+ 0
+
+
+ wxFILTER_NONE
+ wxDefaultValidator
+
+ 0
+
+
+
+
+
+
+
+
+
+
+ 5
+ wxEXPAND
+ 0
+
+ 0
+ protected
+ 10
+
+
+
+ 20
+ wxEXPAND|wxLEFT
+ 0
+
+ 10,9
+ wxBOTH
+
+
+ 5
+
+ gbSizer1
+ wxFLEX_GROWMODE_SPECIFIED
+ none
+ 2
+
+ 5
+ 1
+ 0
+ wxALIGN_CENTER_VERTICAL
+ 0
+ 1
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ Best length:
+ 0
+
+ 0
+
+
+ 0
+
+ 1
+ m_stHsetting1
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+ ; ; forward_declare
+ 0
+
+
+
+
+ -1
+
+
+
+ 5
+ 1
+ 1
+ wxALIGN_CENTER_VERTICAL|wxEXPAND
+ 0
+ 1
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ 10
+ 40.000000
+ 100
+
+ 0
+
+ 20
+
+ 0
+
+ 1
+ m_spTeardropLenPercent1
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+ wxSP_ARROW_KEYS
+ ; ; forward_declare
+ 0
+
+
+
+
+
+
+
+
+ 5
+ 1
+ 2
+ wxALIGN_CENTER_VERTICAL
+ 0
+ 1
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ %
+ 0
+
+ 0
+
+
+ 0
+
+ 1
+ m_stTeardropLenUnits1
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+ ; ; forward_declare
+ 0
+
+
+
+
+ -1
+
+
+
+ 5
+ 1
+ 0
+ wxALIGN_CENTER_VERTICAL
+ 1
+ 1
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ Max length:
+ 0
+
+ 0
+
+
+ 0
+
+ 1
+ m_stMaxLen1
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+ ; ; forward_declare
+ 0
+
+
+
+
+ -1
+
+
+
+ 5
+ 1
+ 1
+ wxALIGN_CENTER_VERTICAL|wxEXPAND
+ 1
+ 1
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+
+ 0
+
+
+
+ 0
+
+ 1
+ m_tcTdMaxLen1
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+ ; ; forward_declare
+ 0
+
+
+ wxFILTER_NONE
+ wxDefaultValidator
+
+
+
+
+
+
+
+
+ 5
+ 1
+ 2
+ wxALIGN_CENTER_VERTICAL
+ 1
+ 1
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ mm
+ 0
+
+ 0
+
+
+ 0
+
+ 1
+ m_stMaxLenUnits1
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+ ; ; forward_declare
+ 0
+
+
+
+
+ -1
+
+
+
+ 5
+ 1
+ 0
+ wxALIGN_CENTER_VERTICAL
+ 3
+ 1
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ Best height:
+ 0
+
+ 0
+
+
+ 0
+
+ 1
+ m_stVsetting1
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+ ; ; forward_declare
+ 0
+
+
+
+
+ -1
+
+
+
+ 5
+ 1
+ 1
+ wxALIGN_CENTER_VERTICAL|wxEXPAND
+ 3
+ 1
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ 10
+ 100.000000
+ 100
+
+ 0
+
+ 60
+
+ 0
+
+ 1
+ m_spTeardropSizePercent1
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+ wxSP_ARROW_KEYS
+ ; ; forward_declare
+ 0
+
+
+
+
+
+
+
+
+ 5
+ 1
+ 2
+ wxALIGN_CENTER_VERTICAL
+ 3
+ 1
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ %
+ 0
+
+ 0
+
+
+ 0
+
+ 1
+ m_stLenPercent1
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+ ; ; forward_declare
+ 0
+
+
+
+
+ -1
+
+
+
+ 5
+ 1
+ 0
+ wxALIGN_CENTER_VERTICAL
+ 4
+ 1
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ Max height:
+ 0
+
+ 0
+
+
+ 0
+
+ 1
+ m_stTdMaxSize1
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+ ; ; forward_declare
+ 0
+
+
+
+
+ -1
+
+
+
+ 5
+ 1
+ 1
+ wxALIGN_CENTER_VERTICAL|wxEXPAND
+ 4
+ 1
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+
+ 0
+
+
+
+ 0
+
+ 1
+ m_tcMaxHeight1
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+ ; ; forward_declare
+ 0
+
+
+ wxFILTER_NONE
+ wxDefaultValidator
+
+
+
+
+
+
+
+
+ 5
+ 1
+ 2
+ wxALIGN_CENTER_VERTICAL
+ 4
+ 1
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ mm
+ 0
+
+ 0
+
+
+ 0
+
+ 1
+ m_stMaxHeightUnits1
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+ ; ; forward_declare
+ 0
+
+
+
+
+ -1
+
+
+
+ 5
+ 1
+ 0
+ wxALIGN_CENTER_VERTICAL
+ 6
+ 1
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ Curve points:
+ 0
+
+ 0
+
+
+ 0
+
+ 1
+ m_curvePointsLabel1
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+ ; ; forward_declare
+ 0
+
+
+
+
+ -1
+
+
+
+ 5
+ 1
+ 1
+ wxALIGN_CENTER_VERTICAL
+ 6
+ 1
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ 5
+ 10
+
+ 0
+
+ 3
+
+ 0
+
+ 1
+ m_curvePointsCtrl1
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+ wxSP_ARROW_KEYS
+ ; ; forward_declare
+ 0
+
+
+
+
+
+
+
+
+ 60
+ 3
+ 3
+ wxALIGN_CENTER_VERTICAL|wxLEFT
+ 3
+ 1
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ Prefer zone connection
+
+ 0
+
+
+ 0
+
+ 1
+ m_cbPreferZoneConnection1
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+ ; ; forward_declare
+ 0
+
+
+ wxFILTER_NONE
+ wxDefaultValidator
+
+
+
+
+
+
+
+ 60
+ 1
+ 3
+ wxALIGN_CENTER_VERTICAL|wxLEFT
+ 0
+ 1
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ Maximum track width:
+ 0
+
+ 0
+
+
+ 0
+
+ 1
+ m_stHDRatio1
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+ ; ; forward_declare
+ 0
+ Max pad/via size to track width ratio to create a teardrop.
100 always creates a teardrop.
+
+
+
+ -1
+
+
+
+ 5
+ 1
+ 4
+ wxALIGN_CENTER_VERTICAL
+ 0
+ 1
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ 10
+ 90
+ 100
+
+ 0
+
+ 0
+
+ 0
+
+ 1
+ m_spTeardropHDPercent1
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+ wxSP_ARROW_KEYS
+ ; ; forward_declare
+ 0
+ Tracks which are similar in size to the pad do not need teardrops.
+
+
+
+
+
+
+
+ 5
+ 1
+ 5
+ wxALIGN_CENTER_VERTICAL
+ 0
+ 1
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ %
+ 0
+
+ 0
+
+
+ 0
+
+ 1
+ m_minTrackWidthUnits1
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+ ; ; forward_declare
+ 0
+
+
+
+
+ -1
+
+
+
+ 65
+ 3
+ 3
+ wxLEFT
+ 1
+ 1
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ (as a percentage of pad size)
+ 0
+
+ 0
+
+
+ 0
+
+ 1
+ m_minTrackWidthHint1
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+ ; ; forward_declare
+ 0
+
+
+
+
+ -1
+
+
+
+ 5
+ 5
+ 2
+ wxALIGN_CENTER_VERTICAL|wxLEFT
+ 6
+ 1
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ Allow teardrop to span two track segments
+
+ 0
+
+
+ 0
+
+ 1
+ m_cbTeardropsUseNextTrack1
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+ ; ; forward_declare
+ 0
+
+
+ wxFILTER_NONE
+ wxDefaultValidator
+
+
+
+
+
+
+
+
+
+
+
+ 5
+ wxEXPAND
+ 0
+
+ 25
+ protected
+ 0
+
+
+
+ 8
+ wxTOP|wxRIGHT|wxLEFT
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ Properties for track-to-track teardrops:
+ 0
+
+ 0
+
+
+ 0
+
+ 1
+ m_tracksLabel
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+ ; forward_declare
+ 0
+
+
+
+
+ -1
+
+
+
+ 10
+ wxEXPAND|wxBOTTOM
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+
+ 0
+
+
+ 0
+
+ 1
+ m_staticline3
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+ wxLI_HORIZONTAL
+ ; ; forward_declare
+ 0
+
+
+
+
+
+
+
+ 5
+ wxEXPAND
+ 1
+
+
+ bSizerShapeColumns2
+ wxHORIZONTAL
+ none
+
+ 10
+ wxEXPAND|wxRIGHT
+ 0
+
+
+ bSizerLeftCol2
+ wxVERTICAL
+ none
+
+ 5
+ wxALIGN_CENTER_HORIZONTAL|wxRIGHT|wxLEFT
+ 1
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+
+ 0
+
+
+ 0
+
+ 1
+ m_bitmapTeardrop2
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+ ; ; forward_declare
+ 0
+
+
+
+
+
+
+
+ 4
+ wxEXPAND|wxBOTTOM
+ 0
+
+
+ bSizer412
+ wxHORIZONTAL
+ none
+
+ 5
+ wxALIGN_CENTER_VERTICAL|wxLEFT
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ Edges:
+ 0
+
+ 0
+
+
+ 0
+
+ 1
+ m_edgesLabel2
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+ ; ; forward_declare
+ 0
+
+
+
+
+ -1
+
+
+
+ 5
+ wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ Straight lines
+
+ 0
+
+
+ 0
+
+ 1
+ m_rbStraightLines2
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+ wxRB_GROUP
+ ; ; forward_declare
+ 0
+
+
+ wxFILTER_NONE
+ wxDefaultValidator
+
+ 0
+
+
+
+
+
+
+ 5
+ wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ Curved
+
+ 0
+
+
+ 0
+
+ 1
+ m_rbCurved2
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+ ; ; forward_declare
+ 0
+
+
+ wxFILTER_NONE
+ wxDefaultValidator
+
+ 0
+
+
+
+
+
+
+
+
+
+
+ 5
+ wxEXPAND
+ 0
+
+ 0
+ protected
+ 10
+
+
+
+ 20
+ wxEXPAND|wxLEFT
+ 0
+
+ 10,9
+ wxBOTH
+
+
+ 5
+
+ gbSizer2
+ wxFLEX_GROWMODE_SPECIFIED
+ none
+ 2
+
+ 5
+ 1
+ 0
+ wxALIGN_CENTER_VERTICAL
+ 0
+ 1
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ Best length:
+ 0
+
+ 0
+
+
+ 0
+
+ 1
+ m_stHsetting2
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+ ; ; forward_declare
+ 0
+
+
+
+
+ -1
+
+
+
+ 5
+ 1
+ 1
+ wxALIGN_CENTER_VERTICAL|wxEXPAND
+ 0
+ 1
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ 10
+ 40.000000
+ 100
+
+ 0
+
+ 20
+
+ 0
+
+ 1
+ m_spTeardropLenPercent2
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+ wxSP_ARROW_KEYS
+ ; ; forward_declare
+ 0
+
+
+
+
+
+
+
+
+ 5
+ 1
+ 2
+ wxALIGN_CENTER_VERTICAL
+ 0
+ 1
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ %
+ 0
+
+ 0
+
+
+ 0
+
+ 1
+ m_stTeardropLenUnits2
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+ ; ; forward_declare
+ 0
+
+
+
+
+ -1
+
+
+
+ 5
+ 1
+ 0
+ wxALIGN_CENTER_VERTICAL
+ 1
+ 1
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ Max length:
+ 0
+
+ 0
+
+
+ 0
+
+ 1
+ m_stMaxLen2
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+ ; ; forward_declare
+ 0
+
+
+
+
+ -1
+
+
+
+ 5
+ 1
+ 1
+ wxALIGN_CENTER_VERTICAL|wxEXPAND
+ 1
+ 1
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+
+ 0
+
+
+
+ 0
+
+ 1
+ m_tcTdMaxLen2
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+ ; ; forward_declare
+ 0
+
+
+ wxFILTER_NONE
+ wxDefaultValidator
+
+
+
+
+
+
+
+
+ 5
+ 1
+ 2
+ wxALIGN_CENTER_VERTICAL
+ 1
+ 1
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ mm
+ 0
+
+ 0
+
+
+ 0
+
+ 1
+ m_stMaxLenUnits2
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+ ; ; forward_declare
+ 0
+
+
+
+
+ -1
+
+
+
+ 5
+ 1
+ 0
+ wxALIGN_CENTER_VERTICAL
+ 3
+ 1
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ Best height:
+ 0
+
+ 0
+
+
+ 0
+
+ 1
+ m_stVsetting2
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+ ; ; forward_declare
+ 0
+
+
+
+
+ -1
+
+
+
+ 5
+ 1
+ 1
+ wxALIGN_CENTER_VERTICAL|wxEXPAND
+ 3
+ 1
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ 10
+ 100.000000
+ 100
+
+ 0
+
+ 60
+
+ 0
+
+ 1
+ m_spTeardropSizePercent2
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+ wxSP_ARROW_KEYS
+ ; ; forward_declare
+ 0
+
+
+
+
+
+
+
+
+ 5
+ 1
+ 2
+ wxALIGN_CENTER_VERTICAL
+ 3
+ 1
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ %
+ 0
+
+ 0
+
+
+ 0
+
+ 1
+ m_stLenPercent2
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+ ; ; forward_declare
+ 0
+
+
+
+
+ -1
+
+
+
+ 5
+ 1
+ 0
+ wxALIGN_CENTER_VERTICAL
+ 4
+ 1
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ Max height:
+ 0
+
+ 0
+
+
+ 0
+
+ 1
+ m_stTdMaxSize2
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+ ; ; forward_declare
+ 0
+
+
+
+
+ -1
+
+
+
+ 5
+ 1
+ 1
+ wxALIGN_CENTER_VERTICAL|wxEXPAND
+ 4
+ 1
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+
+ 0
+
+
+
+ 0
+
+ 1
+ m_tcMaxHeight2
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+ ; ; forward_declare
+ 0
+
+
+ wxFILTER_NONE
+ wxDefaultValidator
+
+
+
+
+
+
+
+
+ 5
+ 1
+ 2
+ wxALIGN_CENTER_VERTICAL
+ 4
+ 1
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ mm
+ 0
+
+ 0
+
+
+ 0
+
+ 1
+ m_stMaxHeightUnits2
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+ ; ; forward_declare
+ 0
+
+
+
+
+ -1
+
+
+
+ 5
+ 1
+ 0
+ wxALIGN_CENTER_VERTICAL
+ 6
+ 1
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ Curve points:
+ 0
+
+ 0
+
+
+ 0
+
+ 1
+ m_curvePointsLabel2
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+ ; ; forward_declare
+ 0
+
+
+
+
+ -1
+
+
+
+ 5
+ 1
+ 1
+ wxALIGN_CENTER_VERTICAL
+ 6
+ 1
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ 5
+ 10
+
+ 0
+
+ 3
+
+ 0
+
+ 1
+ m_curvePointsCtrl2
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+ wxSP_ARROW_KEYS
+ ; ; forward_declare
+ 0
+
+
+
+
+
+
+
+
+ 60
+ 1
+ 3
+ wxALIGN_CENTER_VERTICAL|wxLEFT
+ 0
+ 1
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ Maximum track width
+ 0
+
+ 0
+
+
+ 0
+
+ 1
+ m_stHDRatio2
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+ ; ; forward_declare
+ 0
+ Max pad/via size to track width ratio to create a teardrop.
100 always creates a teardrop.
+
+
+
+ -1
+
+
+
+ 5
+ 1
+ 4
+ wxALIGN_CENTER_VERTICAL
+ 0
+ 1
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ 10
+ 90
+ 100
+
+ 0
+
+ 0
+
+ 0
+
+ 1
+ m_spTeardropHDPercent2
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+ wxSP_ARROW_KEYS
+ ; ; forward_declare
+ 0
+ Tracks which are similar in size do not need teardrops.
+
+
+
+
+
+
+
+ 5
+ 1
+ 5
+ wxALIGN_CENTER_VERTICAL
+ 0
+ 1
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ %
+ 0
+
+ 0
+
+
+ 0
+
+ 1
+ m_minTrackWidthUnits2
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+ ; ; forward_declare
+ 0
+
+
+
+
+ -1
+
+
+
+ 65
+ 3
+ 3
+ wxLEFT
+ 1
+ 1
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ (as a percentage of larger track width)
+ 0
+
+ 0
+
+
+ 0
+
+ 1
+ m_minTrackWidthHint2
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+ ; ; forward_declare
+ 0
+
+
+
+
+ -1
+
+
+
+ 5
+ 5
+ 2
+ wxALIGN_CENTER_VERTICAL|wxLEFT
+ 6
+ 1
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ 1
+ 0
+ 1
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ Allow teardrop to span two track segments
+
+ 0
+
+
+ 0
+
+ 1
+ m_cbTeardropsUseNextTrack2
+ 1
+
+
+ protected
+ 1
+
+ Resizable
+ 1
+
+
+ ; ; forward_declare
+ 0
+
+
+ wxFILTER_NONE
+ wxDefaultValidator
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pcbnew/dialogs/panel_setup_teardrops_base.h b/pcbnew/dialogs/panel_setup_teardrops_base.h
new file mode 100644
index 0000000000..803efb7cf2
--- /dev/null
+++ b/pcbnew/dialogs/panel_setup_teardrops_base.h
@@ -0,0 +1,128 @@
+///////////////////////////////////////////////////////////////////////////
+// C++ code generated with wxFormBuilder (version 3.10.1-0-g8feb16b)
+// http://www.wxformbuilder.org/
+//
+// PLEASE DO *NOT* EDIT THIS FILE!
+///////////////////////////////////////////////////////////////////////////
+
+#pragma once
+
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+
+///////////////////////////////////////////////////////////////////////////
+
+///////////////////////////////////////////////////////////////////////////////
+/// Class PANEL_SETUP_TEARDROPS_BASE
+///////////////////////////////////////////////////////////////////////////////
+class PANEL_SETUP_TEARDROPS_BASE : public wxPanel
+{
+ private:
+
+ protected:
+ wxBoxSizer* m_gridSizer;
+ wxStaticText* m_roundShapesLabel;
+ wxStaticLine* m_staticline1;
+ wxStaticBitmap* m_bitmapTeardrop;
+ wxStaticText* m_edgesLabel;
+ wxRadioButton* m_rbStraightLines;
+ wxRadioButton* m_rbCurved;
+ wxStaticText* m_stHsetting;
+ wxSpinCtrlDouble* m_spTeardropLenPercent;
+ wxStaticText* m_stTeardropLenUnits;
+ wxStaticText* m_stMaxLen;
+ wxTextCtrl* m_tcTdMaxLen;
+ wxStaticText* m_stMaxLenUnits;
+ wxStaticText* m_stVsetting;
+ wxSpinCtrlDouble* m_spTeardropSizePercent;
+ wxStaticText* m_stLenPercent;
+ wxStaticText* m_stTdMaxSize;
+ wxTextCtrl* m_tcMaxHeight;
+ wxStaticText* m_stMaxHeightUnits;
+ wxStaticText* m_curvePointsLabel;
+ wxSpinCtrl* m_curvePointsCtrl;
+ wxCheckBox* m_cbPreferZoneConnection;
+ wxStaticText* m_stHDRatio;
+ wxSpinCtrlDouble* m_spTeardropHDPercent;
+ wxStaticText* m_minTrackWidthUnits;
+ wxStaticText* m_minTrackWidthHint;
+ wxCheckBox* m_cbTeardropsUseNextTrack;
+ wxStaticText* m_rectShapesLabel;
+ wxStaticLine* m_staticline2;
+ wxStaticBitmap* m_bitmapTeardrop1;
+ wxStaticText* m_edgesLabel1;
+ wxRadioButton* m_rbStraightLines1;
+ wxRadioButton* m_rbCurved1;
+ wxStaticText* m_stHsetting1;
+ wxSpinCtrlDouble* m_spTeardropLenPercent1;
+ wxStaticText* m_stTeardropLenUnits1;
+ wxStaticText* m_stMaxLen1;
+ wxTextCtrl* m_tcTdMaxLen1;
+ wxStaticText* m_stMaxLenUnits1;
+ wxStaticText* m_stVsetting1;
+ wxSpinCtrlDouble* m_spTeardropSizePercent1;
+ wxStaticText* m_stLenPercent1;
+ wxStaticText* m_stTdMaxSize1;
+ wxTextCtrl* m_tcMaxHeight1;
+ wxStaticText* m_stMaxHeightUnits1;
+ wxStaticText* m_curvePointsLabel1;
+ wxSpinCtrl* m_curvePointsCtrl1;
+ wxCheckBox* m_cbPreferZoneConnection1;
+ wxStaticText* m_stHDRatio1;
+ wxSpinCtrlDouble* m_spTeardropHDPercent1;
+ wxStaticText* m_minTrackWidthUnits1;
+ wxStaticText* m_minTrackWidthHint1;
+ wxCheckBox* m_cbTeardropsUseNextTrack1;
+ wxStaticText* m_tracksLabel;
+ wxStaticLine* m_staticline3;
+ wxStaticBitmap* m_bitmapTeardrop2;
+ wxStaticText* m_edgesLabel2;
+ wxRadioButton* m_rbStraightLines2;
+ wxRadioButton* m_rbCurved2;
+ wxStaticText* m_stHsetting2;
+ wxSpinCtrlDouble* m_spTeardropLenPercent2;
+ wxStaticText* m_stTeardropLenUnits2;
+ wxStaticText* m_stMaxLen2;
+ wxTextCtrl* m_tcTdMaxLen2;
+ wxStaticText* m_stMaxLenUnits2;
+ wxStaticText* m_stVsetting2;
+ wxSpinCtrlDouble* m_spTeardropSizePercent2;
+ wxStaticText* m_stLenPercent2;
+ wxStaticText* m_stTdMaxSize2;
+ wxTextCtrl* m_tcMaxHeight2;
+ wxStaticText* m_stMaxHeightUnits2;
+ wxStaticText* m_curvePointsLabel2;
+ wxSpinCtrl* m_curvePointsCtrl2;
+ wxStaticText* m_stHDRatio2;
+ wxSpinCtrlDouble* m_spTeardropHDPercent2;
+ wxStaticText* m_minTrackWidthUnits2;
+ wxStaticText* m_minTrackWidthHint2;
+ wxCheckBox* m_cbTeardropsUseNextTrack2;
+
+ public:
+
+ PANEL_SETUP_TEARDROPS_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_SETUP_TEARDROPS_BASE();
+
+};
+
diff --git a/pcbnew/drc/drc_cache_generator.cpp b/pcbnew/drc/drc_cache_generator.cpp
index 39b1337256..96e08035cc 100644
--- a/pcbnew/drc/drc_cache_generator.cpp
+++ b/pcbnew/drc/drc_cache_generator.cpp
@@ -142,7 +142,15 @@ bool DRC_CACHE_GENERATOR::Run()
};
forEachGeometryItem( itemTypes, LSET::AllCuMask(), countItems );
- forEachGeometryItem( itemTypes, LSET::AllCuMask(), addToCopperTree );
+
+ {
+ std::unique_lock cacheLock( m_board->m_CachesMutex );
+
+ if( !m_board->m_CopperItemRTreeCache )
+ m_board->m_CopperItemRTreeCache = std::make_shared();
+
+ forEachGeometryItem( itemTypes, LSET::AllCuMask(), addToCopperTree );
+ }
if( !reportPhase( _( "Tessellating copper zones..." ) ) )
return false; // DRC cancelled
@@ -205,7 +213,7 @@ bool DRC_CACHE_GENERATOR::Run()
for( ZONE* zone : m_board->Zones() )
{
- if( !zone->GetIsRuleArea() )
+ if( !zone->GetIsRuleArea() && !zone->IsTeardropArea() )
{
for( PCB_LAYER_ID layer : zone->GetLayerSet().Seq() )
m_board->m_ZoneIsolatedIslandsMap[ zone ][ layer ] = ISOLATED_ISLANDS();
diff --git a/pcbnew/menubar_pcb_editor.cpp b/pcbnew/menubar_pcb_editor.cpp
index f6636c82e8..e454617d26 100644
--- a/pcbnew/menubar_pcb_editor.cpp
+++ b/pcbnew/menubar_pcb_editor.cpp
@@ -207,6 +207,7 @@ void PCB_EDIT_FRAME::doReCreateMenuBar()
editMenu->AppendSeparator();
editMenu->Add( PCB_ACTIONS::editTracksAndVias );
editMenu->Add( PCB_ACTIONS::editTextAndGraphics );
+ editMenu->Add( PCB_ACTIONS::editTeardrops );
editMenu->Add( PCB_ACTIONS::changeFootprints );
editMenu->Add( PCB_ACTIONS::swapLayers );
@@ -413,11 +414,6 @@ void PCB_EDIT_FRAME::doReCreateMenuBar()
toolsMenu->Add( ACTIONS::showFootprintEditor );
toolsMenu->Add( PCB_ACTIONS::updateFootprints );
- // Add/remove teardrops menuitems:
- toolsMenu->AppendSeparator();
- toolsMenu->Add( _( "Add Teardrops..." ), "", ID_RUN_TEARDROP_TOOL, BITMAPS::via );
- toolsMenu->Add( _( "Remove Teardrops" ), "", ID_REMOVE_TEARDROP_TOOL, BITMAPS::via );
-
toolsMenu->AppendSeparator();
toolsMenu->Add( PCB_ACTIONS::cleanupTracksAndVias );
toolsMenu->Add( PCB_ACTIONS::removeUnusedPads );
diff --git a/pcbnew/pad.cpp b/pcbnew/pad.cpp
index 89679543bf..6ffeea083d 100644
--- a/pcbnew/pad.cpp
+++ b/pcbnew/pad.cpp
@@ -1811,12 +1811,15 @@ static struct PAD_DESC
&PAD::SetSizeY, &PAD::GetSizeY,
PROPERTY_DISPLAY::PT_SIZE ), groupPad );
- auto roundRadiusRatio = new PROPERTY( _HKI( "Round Radius Ratio" ),
+ auto roundRadiusRatio = new PROPERTY( _HKI( "Corner Radius Ratio" ),
&PAD::SetRoundRectRadiusRatio, &PAD::GetRoundRectRadiusRatio );
roundRadiusRatio->SetAvailableFunc(
[=]( INSPECTABLE* aItem ) -> bool
{
- return aItem->Get( shape ) == static_cast( PAD_SHAPE::ROUNDRECT );
+ if( PAD* pad = dynamic_cast( aItem ) )
+ return pad->GetShape() == PAD_SHAPE::ROUNDRECT;
+
+ return false;
} );
propMgr.AddProperty( roundRadiusRatio, groupPad );
diff --git a/pcbnew/pad.h b/pcbnew/pad.h
index b7576c2b2e..9555364f3c 100644
--- a/pcbnew/pad.h
+++ b/pcbnew/pad.h
@@ -779,13 +779,6 @@ private:
mutable std::shared_ptr m_effectivePolygon;
mutable int m_effectiveBoundingRadius;
- /*
- * How to build the custom shape in zone, to create the clearance area:
- * CUST_PAD_SHAPE_IN_ZONE_OUTLINE = use pad shape
- * CUST_PAD_SHAPE_IN_ZONE_CONVEXHULL = use the convex hull of the pad shape
- */
- CUST_PAD_SHAPE_IN_ZONE m_customShapeClearanceArea;
-
int m_subRatsnest; // Variable used to handle subnet (block) number in
// ratsnest computations
@@ -849,11 +842,18 @@ private:
double m_localSolderPasteMarginRatio; // Local solder mask margin ratio of pad size
// The final margin is the sum of these 2 values
- ZONE_CONNECTION m_zoneConnection; // No connection, thermal relief, etc.
- int m_thermalSpokeWidth; // Thermal spoke width.
- EDA_ANGLE m_thermalSpokeAngle; // Rotation of the spokes. 45° will produce an X,
+ /*
+ * How to build the custom shape in zone, to create the clearance area:
+ * CUST_PAD_SHAPE_IN_ZONE_OUTLINE = use pad shape
+ * CUST_PAD_SHAPE_IN_ZONE_CONVEXHULL = use the convex hull of the pad shape
+ */
+ CUST_PAD_SHAPE_IN_ZONE m_customShapeClearanceArea;
+
+ ZONE_CONNECTION m_zoneConnection; // No connection, thermal relief, etc.
+ int m_thermalSpokeWidth; // Thermal spoke width.
+ EDA_ANGLE m_thermalSpokeAngle; // Rotation of the spokes. 45° will produce an X,
// while 90° will produce a +.
- int m_thermalGap;
+ int m_thermalGap;
std::mutex m_zoneLayerOverridesMutex;
std::array m_zoneLayerOverrides;
diff --git a/pcbnew/pcb_edit_frame.cpp b/pcbnew/pcb_edit_frame.cpp
index dc7fc109c7..068fcdd6d8 100644
--- a/pcbnew/pcb_edit_frame.cpp
+++ b/pcbnew/pcb_edit_frame.cpp
@@ -146,9 +146,6 @@ BEGIN_EVENT_TABLE( PCB_EDIT_FRAME, PCB_BASE_FRAME )
EVT_MENU( ID_GEN_EXPORT_FILE_STEP, PCB_EDIT_FRAME::OnExportSTEP )
EVT_MENU( ID_GEN_EXPORT_FILE_HYPERLYNX, PCB_EDIT_FRAME::OnExportHyperlynx )
- EVT_MENU( ID_RUN_TEARDROP_TOOL, PCB_EDIT_FRAME::OnRunTeardropTool )
- EVT_MENU( ID_REMOVE_TEARDROP_TOOL, PCB_EDIT_FRAME::OnRemoveTeardropTool )
-
EVT_MENU( ID_MENU_EXPORT_FOOTPRINTS_TO_LIBRARY, PCB_EDIT_FRAME::Process_Special_Functions )
EVT_MENU( ID_MENU_EXPORT_FOOTPRINTS_TO_NEW_LIBRARY, PCB_EDIT_FRAME::Process_Special_Functions )
diff --git a/pcbnew/pcbnew_id.h b/pcbnew/pcbnew_id.h
index 83d3d7d843..94c5fda424 100644
--- a/pcbnew/pcbnew_id.h
+++ b/pcbnew/pcbnew_id.h
@@ -116,10 +116,6 @@ enum pcbnew_ids
ID_ADD_FOOTPRINT_TO_BOARD,
ID_LOAD_FOOTPRINT_FROM_BOARD,
- ID_RUN_TEARDROP_TOOL,
- ID_REMOVE_TEARDROP_TOOL,
- ID_PCB_UNUSED1,
-
ID_PCBNEW_END_LIST
};
diff --git a/pcbnew/plugins/kicad/pcb_parser.cpp b/pcbnew/plugins/kicad/pcb_parser.cpp
index 6ba3fd33e4..92cc522755 100644
--- a/pcbnew/plugins/kicad/pcb_parser.cpp
+++ b/pcbnew/plugins/kicad/pcb_parser.cpp
@@ -380,6 +380,69 @@ std::pair PCB_PARSER::parseProperty()
}
+void PCB_PARSER::parseTEARDROP_PARAMETERS( TEARDROP_PARAMETERS* tdParams )
+{
+ tdParams->m_Enabled = false;
+ tdParams->m_AllowUseTwoTracks = false;
+ tdParams->m_TdOnPadsInZones = true;
+
+ for( T token = NextTok(); token != T_RIGHT; token = NextTok() )
+ {
+ if( token == T_LEFT )
+ token = NextTok();
+
+ switch( token )
+ {
+ case T_enabled:
+ tdParams->m_Enabled = true;
+ break;
+
+ case T_allow_two_segments:
+ tdParams->m_AllowUseTwoTracks = true;
+ break;
+
+ case T_prefer_zone_connections:
+ tdParams->m_TdOnPadsInZones = false;
+ break;
+
+ case T_best_length_ratio:
+ tdParams->m_BestLengthRatio = parseDouble( "teardrop best length ratio" );
+ NeedRIGHT();
+ break;
+
+ case T_max_length:
+ tdParams->m_TdMaxLen = parseBoardUnits( "teardrop max length" );
+ NeedRIGHT();
+ break;
+
+ case T_best_width_ratio:
+ tdParams->m_BestWidthRatio = parseDouble( "teardrop best width ratio" );
+ NeedRIGHT();
+ break;
+
+ case T_max_width:
+ tdParams->m_TdMaxWidth = parseBoardUnits( "teardrop max width" );
+ NeedRIGHT();
+ break;
+
+ case T_curve_points:
+ tdParams->m_CurveSegCount = parseInt( "teardrop curve points count" );
+ NeedRIGHT();
+ break;
+
+ case T_filter_ratio:
+ tdParams->m_WidthtoSizeFilterRatio = parseDouble( "teardrop filter ratio" );
+ NeedRIGHT();
+ break;
+
+ default:
+ Expecting( "enabled, allow_two_segments, prefer_zone_connections, best_length_ratio, "
+ "max_length, best_width_ratio, max_width, curve_points or filter_ratio" );
+ }
+ }
+}
+
+
void PCB_PARSER::parseEDA_TEXT( EDA_TEXT* aText )
{
wxCHECK_RET( CurTok() == T_effects,
@@ -1124,7 +1187,12 @@ void PCB_PARSER::parseGeneralSection()
NeedRIGHT();
break;
- default: // Skip everything but the board thickness.
+ case T_legacy_teardrops:
+ m_board->SetLegacyTeardrops( true );
+ NeedRIGHT();
+ break;
+
+ default: // Skip everything else.
while( ( token = NextTok() ) != T_RIGHT )
{
if( !IsSymbol( token ) && token != T_NUMBER )
@@ -4276,6 +4344,10 @@ PAD* PCB_PARSER::parsePAD( FOOTPRINT* aParent )
NeedRIGHT();
break;
+ case T_teardrops:
+ parseTEARDROP_PARAMETERS( &pad->GetTeardropParams() );
+ break;
+
case T_zone_connect:
pad->SetZoneConnection( (ZONE_CONNECTION) parseInt( "zone connection value" ) );
NeedRIGHT();
@@ -4499,7 +4571,8 @@ PAD* PCB_PARSER::parsePAD( FOOTPRINT* aParent )
Expecting( "at, locked, drill, layers, net, die_length, roundrect_rratio, "
"solder_mask_margin, solder_paste_margin, solder_paste_margin_ratio, "
"clearance, tstamp, primitives, remove_unused_layers, keep_end_layers, "
- "pinfunction, pintype, zone_connect, thermal_width, or thermal_gap" );
+ "pinfunction, pintype, zone_connect, thermal_width, thermal_gap or "
+ "teardrops" );
}
}
@@ -4916,6 +4989,10 @@ PCB_VIA* PCB_PARSER::parsePCB_VIA()
}
break;
+ case T_teardrops:
+ parseTEARDROP_PARAMETERS( &via->GetTeardropParams() );
+ break;
+
case T_tstamp:
NextTok();
const_cast( via->m_Uuid ) = CurStrToKIID();
@@ -4940,7 +5017,8 @@ PCB_VIA* PCB_PARSER::parsePCB_VIA()
break;
default:
- Expecting( "blind, micro, at, size, drill, layers, net, free, tstamp, or status" );
+ Expecting( "blind, micro, at, size, drill, layers, net, free, tstamp, status or "
+ "teardrops" );
}
}
@@ -5478,14 +5556,6 @@ ZONE* PCB_PARSER::parseZONE( BOARD_ITEM_CONTAINER* aParent )
case T_name:
NextTok();
zone->SetZoneName( FromUTF8() );
-
- // TODO: remove this hack in next future, now keywords are added for teadrop attribute
- // If a zone name starts by "$teardrop_", set its teardrop property flag
- if( zone->GetZoneName().StartsWith( "$teardrop_p" ) )
- zone->SetTeardropAreaType( TEARDROP_TYPE::TD_VIAPAD );
- else if( zone->GetZoneName().StartsWith( "$teardrop_t" ) )
- zone->SetTeardropAreaType( TEARDROP_TYPE::TD_TRACKEND );
-
NeedRIGHT();
break;
@@ -5498,37 +5568,30 @@ ZONE* PCB_PARSER::parseZONE( BOARD_ITEM_CONTAINER* aParent )
switch( token )
{
case T_teardrop:
- token = NextTok();
-
- // Expected teardrop data (type padvia) or (type track_end)
- if( token == T_LEFT )
+ for( token = NextTok(); token != T_RIGHT; token = NextTok() )
{
- token = NextTok();
+ if( token == T_LEFT )
+ token = NextTok();
- if( token == T_type )
+ switch( token )
{
+ case T_type:
token = NextTok();
if( token == T_padvia )
- {
zone->SetTeardropAreaType( TEARDROP_TYPE::TD_VIAPAD );
- NeedRIGHT();
- }
else if( token == T_track_end )
- {
zone->SetTeardropAreaType( TEARDROP_TYPE::TD_TRACKEND );
- NeedRIGHT();
- }
else
Expecting( "padvia or track_end" );
NeedRIGHT();
- }
- else
+ break;
+
+ default:
Expecting( "type" );
+ }
}
- else
- Expecting( "(" );
break;
@@ -5598,6 +5661,9 @@ ZONE* PCB_PARSER::parseZONE( BOARD_ITEM_CONTAINER* aParent )
}
}
+ if( zone->IsTeardropArea() && m_requiredVersion < 20230517 )
+ m_board->SetLegacyTeardrops( true );
+
// Clear flags used in zone edition:
zone->SetNeedRefill( false );
diff --git a/pcbnew/plugins/kicad/pcb_parser.h b/pcbnew/plugins/kicad/pcb_parser.h
index 3c29feb85b..3319cedbc2 100644
--- a/pcbnew/plugins/kicad/pcb_parser.h
+++ b/pcbnew/plugins/kicad/pcb_parser.h
@@ -63,6 +63,7 @@ class FP_3DMODEL;
class SHAPE_LINE_CHAIN;
struct LAYER;
class PROGRESS_REPORTER;
+class TEARDROP_PARAMETERS;
/**
@@ -174,6 +175,8 @@ private:
void parseNETINFO_ITEM();
void parseNETCLASS();
+ void parseTEARDROP_PARAMETERS( TEARDROP_PARAMETERS* tdParams );
+
PCB_SHAPE* parsePCB_SHAPE( BOARD_ITEM* aParent );
PCB_TEXT* parsePCB_TEXT( BOARD_ITEM* aParent );
PCB_BITMAP* parsePCB_BITMAP( BOARD_ITEM* aParent );
diff --git a/pcbnew/plugins/kicad/pcb_plugin.cpp b/pcbnew/plugins/kicad/pcb_plugin.cpp
index 1cbff0bad3..cefd9f2a6f 100644
--- a/pcbnew/plugins/kicad/pcb_plugin.cpp
+++ b/pcbnew/plugins/kicad/pcb_plugin.cpp
@@ -581,9 +581,13 @@ void PCB_PLUGIN::formatGeneral( const BOARD* aBoard, int aNestLevel ) const
m_out->Print( 0, "\n" );
m_out->Print( aNestLevel, "(general\n" );
+
m_out->Print( aNestLevel+1, "(thickness %s)\n",
formatInternalUnits( dsnSettings.GetBoardThickness() ).c_str() );
+ if( aBoard->LegacyTeardrops() )
+ m_out->Print( aNestLevel+1, "(legacy_teardrops)\n" );
+
m_out->Print( aNestLevel, ")\n\n" );
aBoard->GetPageSettings().Format( m_out, aNestLevel, m_ctl );
@@ -709,6 +713,40 @@ void PCB_PLUGIN::formatHeader( const BOARD* aBoard, int aNestLevel ) const
}
+bool isDefaultTeardropParameters( const TEARDROP_PARAMETERS& tdParams )
+{
+ static const TEARDROP_PARAMETERS defaults;
+
+ return tdParams.m_Enabled == defaults.m_Enabled
+ && tdParams.m_BestLengthRatio == defaults.m_BestLengthRatio
+ && tdParams.m_TdMaxLen == defaults.m_TdMaxLen
+ && tdParams.m_BestWidthRatio == defaults.m_BestWidthRatio
+ && tdParams.m_TdMaxWidth == defaults.m_TdMaxWidth
+ && tdParams.m_CurveSegCount == defaults.m_CurveSegCount
+ && tdParams.m_WidthtoSizeFilterRatio == defaults.m_WidthtoSizeFilterRatio
+ && tdParams.m_AllowUseTwoTracks == defaults.m_AllowUseTwoTracks
+ && tdParams.m_TdOnPadsInZones == defaults.m_TdOnPadsInZones;
+}
+
+
+void PCB_PLUGIN::formatTeardropParameters( const TEARDROP_PARAMETERS& tdParams,
+ int aNestLevel ) const
+{
+ m_out->Print( aNestLevel, "(teardrops%s%s%s (best_length_ratio %s) (max_length %s) "
+ "(best_width_ratio %s) (max_width %s) (curve_points %d) "
+ "(filter_ratio %s))\n",
+ tdParams.m_Enabled ? " enabled" : "",
+ tdParams.m_AllowUseTwoTracks ? " allow_two_segments" : "",
+ tdParams.m_TdOnPadsInZones ? " prefer_zone_connections" : "",
+ FormatDouble2Str( tdParams.m_BestLengthRatio ).c_str(),
+ formatInternalUnits( tdParams.m_TdMaxLen ).c_str(),
+ FormatDouble2Str( tdParams.m_BestWidthRatio ).c_str(),
+ formatInternalUnits( tdParams.m_TdMaxWidth ).c_str(),
+ tdParams.m_CurveSegCount,
+ FormatDouble2Str( tdParams.m_WidthtoSizeFilterRatio ).c_str() );
+}
+
+
void PCB_PLUGIN::format( const BOARD* aBoard, int aNestLevel ) const
{
std::set sorted_footprints( aBoard->Footprints().begin(),
@@ -1690,10 +1728,16 @@ void PCB_PLUGIN::format( const PAD* aPad, int aNestLevel ) const
m_out->Print( 0, ")" );
}
- m_out->Print( 0, "\n");
+ m_out->Print( 0, "\n" );
m_out->Print( aNestLevel+1, ")" ); // end of (basic_shapes
}
+ if( !isDefaultTeardropParameters( aPad->GetTeardropParams() ) )
+ {
+ m_out->Print( 0, "\n" );
+ formatTeardropParameters( aPad->GetTeardropParams(), aNestLevel+1 );
+ }
+
m_out->Print( 0, " (tstamp %s)", TO_UTF8( aPad->m_Uuid.AsString() ) );
m_out->Print( 0, ")\n" );
@@ -1925,6 +1969,12 @@ void PCB_PLUGIN::format( const PCB_TRACK* aTrack, int aNestLevel ) const
m_out->Print( 0, ")" );
}
+
+ if( !isDefaultTeardropParameters( via->GetTeardropParams() ) )
+ {
+ m_out->Print( 0, "\n" );
+ formatTeardropParameters( via->GetTeardropParams(), aNestLevel+1 );
+ }
}
else if( aTrack->Type() == PCB_ARC_T )
{
diff --git a/pcbnew/plugins/kicad/pcb_plugin.h b/pcbnew/plugins/kicad/pcb_plugin.h
index 01980f1073..99484d3d78 100644
--- a/pcbnew/plugins/kicad/pcb_plugin.h
+++ b/pcbnew/plugins/kicad/pcb_plugin.h
@@ -50,6 +50,7 @@ class PCB_TEXT;
class PCB_TEXTBOX;
class EDA_TEXT;
class SHAPE_LINE_CHAIN;
+class TEARDROP_PARAMETERS;
class PCB_PLUGIN; // forward decl
/// Current s-expression file format version. 2 was the last legacy format version.
@@ -128,7 +129,8 @@ class PCB_PLUGIN; // forward decl
//#define SEXPR_BOARD_FILE_VERSION 20220818 // First-class storage for net-ties
//#define SEXPR_BOARD_FILE_VERSION 20220914 // Number boxes for custom-shape pads
//#define SEXPR_BOARD_FILE_VERSION 20221018 // Via & pad zone-layer-connections
-#define SEXPR_BOARD_FILE_VERSION 20230410 // DNP attribute propagated from schematic to attr
+//#define SEXPR_BOARD_FILE_VERSION 20230410 // DNP attribute propagated from schematic to attr
+#define SEXPR_BOARD_FILE_VERSION 20230517 // Teardrop parameters for pads and vias
#define BOARD_FILE_HOST_VERSION 20200825 ///< Earlier files than this include the host tag
#define LEGACY_ARC_FORMATTING 20210925 ///< These were the last to use old arc formatting
@@ -371,6 +373,8 @@ protected:
/// writes everything that comes before the board_items, like settings and layers etc
void formatHeader( const BOARD* aBoard, int aNestLevel = 0 ) const;
+ void formatTeardropParameters( const TEARDROP_PARAMETERS& tdParams, int aNestLevel = 0 ) const;
+
private:
void format( const BOARD* aBoard, int aNestLevel = 0 ) const;
diff --git a/pcbnew/router/pns_kicad_iface.cpp b/pcbnew/router/pns_kicad_iface.cpp
index cc611d95a1..bf429fc350 100644
--- a/pcbnew/router/pns_kicad_iface.cpp
+++ b/pcbnew/router/pns_kicad_iface.cpp
@@ -1181,9 +1181,6 @@ bool PNS_KICAD_IFACE_BASE::syncZone( PNS::NODE* aWorld, ZONE* aZone, SHAPE_POLY_
{
SHAPE_POLY_SET* poly;
- if( !aZone->GetIsRuleArea() && aZone->GetZoneName().IsEmpty() )
- return false;
-
// TODO handle aZone->GetDoNotAllowVias()
// TODO handle rules which disallow tracks & vias
if( !aZone->GetIsRuleArea() || !aZone->GetDoNotAllowTracks() )
@@ -1562,7 +1559,7 @@ void PNS_KICAD_IFACE_BASE::SyncWorld( PNS::NODE *aWorld )
void PNS_KICAD_IFACE::EraseView()
{
- for( auto item : m_hiddenItems )
+ for( BOARD_ITEM* item : m_hiddenItems )
m_view->SetVisible( item, true );
m_hiddenItems.clear();
@@ -1696,6 +1693,17 @@ void PNS_KICAD_IFACE::HideItem( PNS::ITEM* aItem )
m_view->SetVisible( parent, false );
m_view->Update( parent, KIGFX::APPEARANCE );
+
+ for( ZONE* td : m_board->Zones() )
+ {
+ if( td->IsTeardropArea()
+ && td->GetBoundingBox().Intersects( aItem->Parent()->GetBoundingBox() )
+ && td->Outline()->Collide( aItem->Shape() ) )
+ {
+ m_view->SetVisible( td, false );
+ m_view->Update( td, KIGFX::APPEARANCE );
+ }
+ }
}
}
@@ -1875,10 +1883,10 @@ void PNS_KICAD_IFACE::Commit()
EraseView();
- for( const std::pair& fpOffset : m_fpOffsets )
+ for( const auto& [ pad, fpOffset ] : m_fpOffsets )
{
- VECTOR2I offset = fpOffset.second.p_new - fpOffset.second.p_old;
- FOOTPRINT* footprint = fpOffset.first->GetParent();
+ VECTOR2I offset = fpOffset.p_new - fpOffset.p_old;
+ FOOTPRINT* footprint = pad->GetParent();
VECTOR2I p_orig = footprint->GetPosition();
VECTOR2I p_new = p_orig + offset;
diff --git a/pcbnew/teardrop/dialog_teardrop.cpp b/pcbnew/teardrop/dialog_teardrop.cpp
deleted file mode 100644
index 63a51fa55d..0000000000
--- a/pcbnew/teardrop/dialog_teardrop.cpp
+++ /dev/null
@@ -1,260 +0,0 @@
-/*
- * This program source code file is part of KiCad, a free EDA CAD application.
- *
- * Copyright (C) 2021 Jean-Pierre Charras, jp.charras at wanadoo.fr
- * Copyright (C) 2021-2022 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 2
- * 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, you may find one here:
- * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
- * or you may search the http://www.gnu.org website for the version 2 license,
- * or you may write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
- */
-
-
-#include
-#include
-#include
-#include
-#include
-#include "teardrop.h"
-#include "dialog_teardrop_base.h"
-#include
-#include
-
-
-// Curved shapes options. The actual value is the ORed of options
-#define CURVED_OPTION_NONE 0 /* No curved teardrop shape */
-#define CURVED_OPTION_ROUND 1 /* Curved teardrop shape for vias and round pad shapes */
-#define CURVED_OPTION_RECT 2 /* Curved teardrop shape for rect pad shapes */
-#define CURVED_OPTION_TRACK 4 /* Curved teardrop shape for track to track shapes */
-
-bool g_rawTeardrops = false;
-
-class TEARDROP_DIALOG: public TEARDROP_DIALOG_BASE
-{
-public:
- TEARDROP_DIALOG( PCB_EDIT_FRAME* aParent ):
- TEARDROP_DIALOG_BASE( aParent ),
- m_brdSettings( nullptr ),
- m_frame( aParent ),
- m_teardropMaxLenSettingRound( aParent,m_stMaxLenRound, m_tcTdMaxLenRound, m_stMaxLenRoundUnits ),
- m_teardropMaxHeightSettingRound( aParent, m_stTdMaxSizeRound, m_tcMaxHeightRound, m_stMaxHeightRoundUnits ),
- m_teardropMaxLenSettingRect( aParent,m_stMaxLenRect, m_tcTdMaxLenRect, m_stMaxLenRectUnits ),
- m_teardropMaxHeightSettingRect( aParent, m_stTdMaxSizeRect, m_tcMaxHeightRect, m_stMaxHeightRectUnits ),
- m_teardropMaxLenSettingTrack( aParent,m_stMaxLenTrack, m_tcTdMaxLenTrack, m_stMaxLenTrackUnits ),
- m_teardropMaxHeightSettingTrack( aParent, m_stTdMaxSizeTrack, m_tcMaxHeightTrack, m_stMaxHeightTrackUnits )
- {
- // Setup actual bitmaps that cannot be set inside wxFormBuilder:
- m_bitmapTdCircularInfo->SetBitmap( KiBitmap( BITMAPS::teardrop_sizes ) );
- m_bitmapTdRectangularInfo->SetBitmap( KiBitmap( BITMAPS::teardrop_rect_sizes ) );
- m_bitmapTdTrackInfo->SetBitmap( KiBitmap( BITMAPS::teardrop_track_sizes ) );
-
- m_rawTeardropsHint->SetFont( KIUI::GetInfoFont( this ) );
-
- m_brdSettings = &m_frame->GetBoard()->GetBoard()->GetDesignSettings();
- TEARDROP_PARAMETERS_LIST* prmsList = m_brdSettings->GetTeadropParamsList();
-
- m_cbPadVia->SetValue( prmsList->m_TargetViasPads );
- m_cbSmdSimilarPads->SetValue( prmsList->m_TargetPadsWithNoHole );
- m_cbRoundShapesOnly->SetValue( prmsList->m_UseRoundShapesOnly );
- m_cbTrack2Track->SetValue( prmsList->m_TargetTrack2Track );
- m_cbPadsInZones->SetValue( prmsList->m_TdOnPadsInZones );
-
- m_cbOptUseNextTrack->SetValue( prmsList->m_AllowUseTwoTracks );
- m_spPointCount->SetValue( prmsList->m_CurveSegCount );
-
- TEARDROP_PARAMETERS* prms = prmsList->GetParameters( TARGET_ROUND );
- m_teardropMaxLenSettingRound.SetValue( prms->m_TdMaxLen );
- m_teardropMaxHeightSettingRound.SetValue( prms->m_TdMaxHeight );
- m_spTeardropLenPercentRound->SetValue( prms->m_LengthRatio*100 );
- m_spTeardropSizePercentRound->SetValue( prms->m_HeightRatio*100 );
- m_rbShapeRound->SetSelection( prms->IsCurved() );
- m_spTeardropHDPercentRound->SetValue( prms->m_WidthtoSizeFilterRatio*100 );
-
- prms = prmsList->GetParameters( TARGET_RECT );
- m_teardropMaxLenSettingRect.SetValue( prms->m_TdMaxLen );
- m_teardropMaxHeightSettingRect.SetValue( prms->m_TdMaxHeight );
- m_spTeardropLenPercentRect->SetValue( prms->m_LengthRatio*100 );
- m_spTeardropSizePercentRect->SetValue( prms->m_HeightRatio*100 );
- m_rbShapeRect->SetSelection( prms->IsCurved() );
- m_spTeardropHDPercentRect->SetValue( prms->m_WidthtoSizeFilterRatio*100 );
-
- prms = prmsList->GetParameters( TARGET_TRACK );
- m_teardropMaxLenSettingTrack.SetValue(prms->m_TdMaxLen );
- m_teardropMaxHeightSettingTrack.SetValue( prms->m_TdMaxHeight );
- m_spTeardropLenPercentTrack->SetValue( prms->m_LengthRatio*100 );
- m_spTeardropSizePercentTrack->SetValue( prms->m_HeightRatio*100 );
- m_rbShapeTrack->SetSelection( prms->IsCurved() );
- m_spTeardropHDPercentTrack->SetValue( prms->m_WidthtoSizeFilterRatio*100 );
-
- m_generateRawTeardrops->SetValue( g_rawTeardrops );
-
- // recalculate sizers, now the bitmap is initialized
- finishDialogSettings();
- }
-
- ~TEARDROP_DIALOG()
- {
- g_rawTeardrops = m_generateRawTeardrops->GetValue();
-
- TransferToParamList();
- }
-
- /**
- * Copy the settings from dialog to the current board settings
- */
- void TransferToParamList()
- {
- int shape_seg_count = GetCurvePointCount();
- TEARDROP_PARAMETERS_LIST* prmsList = m_brdSettings->GetTeadropParamsList();
-
- prmsList->m_TargetViasPads = m_cbPadVia->GetValue();
- prmsList->m_TargetPadsWithNoHole = m_cbSmdSimilarPads->GetValue();
- prmsList->m_UseRoundShapesOnly = m_cbRoundShapesOnly->GetValue();
- prmsList->m_TargetTrack2Track = m_cbTrack2Track->GetValue();
- prmsList->m_TdOnPadsInZones = m_cbPadsInZones->GetValue();
-
- prmsList->m_AllowUseTwoTracks = m_cbOptUseNextTrack->GetValue();
- prmsList->m_CurveSegCount = m_spPointCount->GetValue();
-
- TEARDROP_PARAMETERS* prms = prmsList->GetParameters( TARGET_ROUND );
- prms->m_LengthRatio = GetTeardropLenPercentRound();
- prms->m_HeightRatio = GetTeardropSizePercentRound();
- prms->m_TdMaxLen = m_teardropMaxLenSettingRound.GetValue();
- prms->m_TdMaxHeight = m_teardropMaxHeightSettingRound.GetValue();
- prms->m_CurveSegCount = (CurvedShapeOption() & CURVED_OPTION_ROUND) ? shape_seg_count : 0;
- prms->m_WidthtoSizeFilterRatio = m_spTeardropHDPercentRound->GetValue() / 100.0;
-
- prms = prmsList->GetParameters( TARGET_RECT );
- prms->m_LengthRatio = GetTeardropLenPercentRect();
- prms->m_HeightRatio = GetTeardropSizePercentRect();
- prms->m_TdMaxLen = m_teardropMaxLenSettingRect.GetValue();
- prms->m_TdMaxHeight = m_teardropMaxHeightSettingRect.GetValue();
- prms->m_CurveSegCount = (CurvedShapeOption() & CURVED_OPTION_RECT) ? shape_seg_count : 0;
- prms->m_WidthtoSizeFilterRatio = m_spTeardropHDPercentRect->GetValue() / 100.0;
-
- prms = prmsList->GetParameters( TARGET_TRACK );
- prms->m_LengthRatio = GetTeardropLenPercentTrack();
- prms->m_HeightRatio = GetTeardropSizePercentTrack();
- prms->m_TdMaxLen = m_teardropMaxLenSettingTrack.GetValue();
- prms->m_TdMaxHeight = m_teardropMaxHeightSettingTrack.GetValue();
- prms->m_CurveSegCount = (CurvedShapeOption() & CURVED_OPTION_TRACK) ? shape_seg_count : 0;
- prms->m_WidthtoSizeFilterRatio = m_spTeardropHDPercentTrack->GetValue() / 100.0;
- }
-
- int CurvedShapeOption()
- {
- int opt = 0;
-
- if( m_rbShapeRound->GetSelection() )
- opt |= CURVED_OPTION_ROUND;
-
- if( m_rbShapeRect->GetSelection() )
- opt |= CURVED_OPTION_RECT;
-
- if( m_rbShapeTrack->GetSelection() )
- opt |= CURVED_OPTION_TRACK;
-
- return opt;
- }
-
- // Options for curved shapes
- int GetCurvePointCount() { return m_spPointCount->GetValue(); }
-
- // Getters for size parameters
- double GetTeardropLenPercentRound() { return m_spTeardropLenPercentRound->GetValue()/100.0; }
- double GetTeardropSizePercentRound() { return m_spTeardropSizePercentRound->GetValue()/100.0; }
- int GetTeardropMaxLenRound() { return m_teardropMaxLenSettingRound.GetValue(); }
- int GetTeardropMaxHeightRound() { return m_teardropMaxHeightSettingRound.GetValue(); }
-
- double GetTeardropLenPercentRect() { return m_spTeardropLenPercentRect->GetValue()/100.0; }
- double GetTeardropSizePercentRect() { return m_spTeardropSizePercentRect->GetValue()/100.0; }
- int GetTeardropMaxLenRect() { return m_teardropMaxLenSettingRect.GetValue(); }
- int GetTeardropMaxHeightRect() { return m_teardropMaxHeightSettingRect.GetValue(); }
-
- double GetTeardropLenPercentTrack() { return m_spTeardropLenPercentTrack->GetValue()/100.0; }
- double GetTeardropSizePercentTrack() { return m_spTeardropSizePercentTrack->GetValue()/100.0; }
- int GetTeardropMaxLenTrack() { return m_teardropMaxLenSettingTrack.GetValue(); }
- int GetTeardropMaxHeightTrack() { return m_teardropMaxHeightSettingTrack.GetValue(); }
-
- // Optins to filter pads
- bool TeardropOnPadVia() { return m_cbPadVia->GetValue(); }
- bool IncludeNotPTH() { return m_cbSmdSimilarPads->GetValue(); }
- bool RoundShapesOnly() { return m_cbRoundShapesOnly->GetValue(); }
-
- bool CanUseTwoTracks() { return m_cbOptUseNextTrack->GetValue(); }
-
- bool TeardropOnTracks() { return m_cbTrack2Track->GetValue(); }
-
- bool GenerateRawTeardrops() { return m_generateRawTeardrops->GetValue(); }
-
-private:
- BOARD_DESIGN_SETTINGS* m_brdSettings;
- PCB_EDIT_FRAME* m_frame;
- UNIT_BINDER m_teardropMaxLenSettingRound;
- UNIT_BINDER m_teardropMaxHeightSettingRound;
- UNIT_BINDER m_teardropMaxLenSettingRect;
- UNIT_BINDER m_teardropMaxHeightSettingRect;
- UNIT_BINDER m_teardropMaxLenSettingTrack;
- UNIT_BINDER m_teardropMaxHeightSettingTrack;
-};
-
-
-void PCB_EDIT_FRAME::OnRunTeardropTool( wxCommandEvent& event )
-{
- TEARDROP_DIALOG dlg( this );
-
- if( dlg.ShowModal() != wxID_OK )
- return;
-
- wxBusyCursor dummy;
-
- std::unique_ptr reporter;
- reporter = std::make_unique( this, _( "Filling Zones" ), 4 );
-
- BOARD_COMMIT committer( this );
-
- dlg.TransferToParamList();
- TEARDROP_MANAGER trdm( GetBoard(), this, reporter.get() );
-
- int added_count = trdm.SetTeardrops( &committer, dlg.CanUseTwoTracks(),
- !dlg.GenerateRawTeardrops() );
-
- GetToolManager()->PostEvent( EVENTS::ConnectivityChangedEvent );
-
- m_infoBar->RemoveAllButtons();
- m_infoBar->AddCloseButton();
- m_infoBar->ShowMessageFor( wxString::Format( _( "%d teardrops created" ), added_count ),
- 1000, wxICON_EXCLAMATION );
-}
-
-
-void PCB_EDIT_FRAME::OnRemoveTeardropTool( wxCommandEvent& event )
-{
- BOARD_COMMIT committer( this );
- TEARDROP_MANAGER trdm( GetBoard(), this );
-
- int count = trdm.RemoveTeardrops( &committer, true );
-
- GetCanvas()->RedrawRatsnest();
- GetCanvas()->Refresh();
- GetToolManager()->PostEvent( EVENTS::SelectedItemsModified );
-
- m_infoBar->RemoveAllButtons();
- m_infoBar->AddCloseButton();
- m_infoBar->ShowMessageFor( wxString::Format( _( "%d teardrops removed." ), count ),
- 1000, wxICON_EXCLAMATION );
-}
-
diff --git a/pcbnew/teardrop/dialog_teardrop_base.cpp b/pcbnew/teardrop/dialog_teardrop_base.cpp
deleted file mode 100644
index fbfa274a7f..0000000000
--- a/pcbnew/teardrop/dialog_teardrop_base.cpp
+++ /dev/null
@@ -1,450 +0,0 @@
-///////////////////////////////////////////////////////////////////////////
-// C++ code generated with wxFormBuilder (version 3.10.1-282-g1fa54006)
-// http://www.wxformbuilder.org/
-//
-// PLEASE DO *NOT* EDIT THIS FILE!
-///////////////////////////////////////////////////////////////////////////
-
-#include "dialog_teardrop_base.h"
-
-///////////////////////////////////////////////////////////////////////////
-
-TEARDROP_DIALOG_BASE::TEARDROP_DIALOG_BASE( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style ) : DIALOG_SHIM( parent, id, title, pos, size, style )
-{
- this->SetSizeHints( wxDefaultSize, wxDefaultSize );
-
- wxBoxSizer* bSizerMain;
- bSizerMain = new wxBoxSizer( wxVERTICAL );
-
- wxBoxSizer* bSizerUpper;
- bSizerUpper = new wxBoxSizer( wxVERTICAL );
-
- wxBoxSizer* bSizerTop;
- bSizerTop = new wxBoxSizer( wxVERTICAL );
-
- wxBoxSizer* bSizeScopeSize;
- bSizeScopeSize = new wxBoxSizer( wxVERTICAL );
-
- wxFlexGridSizer* fgSizerBitmaps;
- fgSizerBitmaps = new wxFlexGridSizer( 0, 4, 5, 0 );
- fgSizerBitmaps->AddGrowableCol( 2 );
- fgSizerBitmaps->SetFlexibleDirection( wxBOTH );
- fgSizerBitmaps->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
-
- m_staticTextRndS = new wxStaticText( this, wxID_ANY, _("Round shapes:"), wxDefaultPosition, wxDefaultSize, 0 );
- m_staticTextRndS->Wrap( -1 );
- fgSizerBitmaps->Add( m_staticTextRndS, 0, wxTOP|wxBOTTOM, 12 );
-
- m_bitmapTdCircularInfo = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 );
- fgSizerBitmaps->Add( m_bitmapTdCircularInfo, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
-
- wxFlexGridSizer* fgSizerParmRound;
- fgSizerParmRound = new wxFlexGridSizer( 0, 6, 5, 0 );
- fgSizerParmRound->AddGrowableCol( 1 );
- fgSizerParmRound->AddGrowableCol( 4 );
- fgSizerParmRound->SetFlexibleDirection( wxBOTH );
- fgSizerParmRound->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
-
- m_stHsettingRound = new wxStaticText( this, wxID_ANY, _("Best length:"), wxDefaultPosition, wxDefaultSize, 0 );
- m_stHsettingRound->Wrap( -1 );
- fgSizerParmRound->Add( m_stHsettingRound, 0, wxALIGN_CENTER_VERTICAL|wxLEFT, 5 );
-
- m_spTeardropLenPercentRound = new wxSpinCtrlDouble( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS, 20, 100, 40.000000, 10 );
- m_spTeardropLenPercentRound->SetDigits( 0 );
- fgSizerParmRound->Add( m_spTeardropLenPercentRound, 0, wxEXPAND|wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 );
-
- m_stTeardropLenUnits = new wxStaticText( this, wxID_ANY, _("%"), wxDefaultPosition, wxDefaultSize, 0 );
- m_stTeardropLenUnits->Wrap( -1 );
- fgSizerParmRound->Add( m_stTeardropLenUnits, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 );
-
- m_stVsettingRound = new wxStaticText( this, wxID_ANY, _("Best height:"), wxDefaultPosition, wxDefaultSize, 0 );
- m_stVsettingRound->Wrap( -1 );
- fgSizerParmRound->Add( m_stVsettingRound, 0, wxALIGN_CENTER_VERTICAL|wxLEFT, 10 );
-
- m_spTeardropSizePercentRound = new wxSpinCtrlDouble( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS, 60, 100, 100.000000, 10 );
- m_spTeardropSizePercentRound->SetDigits( 0 );
- fgSizerParmRound->Add( m_spTeardropSizePercentRound, 0, wxEXPAND|wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 );
-
- m_stLenPercentRound = new wxStaticText( this, wxID_ANY, _("%"), wxDefaultPosition, wxDefaultSize, 0 );
- m_stLenPercentRound->Wrap( -1 );
- fgSizerParmRound->Add( m_stLenPercentRound, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 );
-
- m_stMaxLenRound = new wxStaticText( this, wxID_ANY, _("Max length:"), wxDefaultPosition, wxDefaultSize, 0 );
- m_stMaxLenRound->Wrap( -1 );
- fgSizerParmRound->Add( m_stMaxLenRound, 0, wxALIGN_CENTER_VERTICAL|wxLEFT, 5 );
-
- m_tcTdMaxLenRound = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
- fgSizerParmRound->Add( m_tcTdMaxLenRound, 0, wxEXPAND|wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 );
-
- m_stMaxLenRoundUnits = new wxStaticText( this, wxID_ANY, _("mm"), wxDefaultPosition, wxDefaultSize, 0 );
- m_stMaxLenRoundUnits->Wrap( -1 );
- fgSizerParmRound->Add( m_stMaxLenRoundUnits, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 );
-
- m_stTdMaxSizeRound = new wxStaticText( this, wxID_ANY, _("Max height:"), wxDefaultPosition, wxDefaultSize, 0 );
- m_stTdMaxSizeRound->Wrap( -1 );
- fgSizerParmRound->Add( m_stTdMaxSizeRound, 0, wxALIGN_CENTER_VERTICAL|wxLEFT, 10 );
-
- m_tcMaxHeightRound = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
- fgSizerParmRound->Add( m_tcMaxHeightRound, 0, wxEXPAND|wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 );
-
- m_stMaxHeightRoundUnits = new wxStaticText( this, wxID_ANY, _("mm"), wxDefaultPosition, wxDefaultSize, 0 );
- m_stMaxHeightRoundUnits->Wrap( -1 );
- fgSizerParmRound->Add( m_stMaxHeightRoundUnits, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 );
-
-
- fgSizerParmRound->Add( 0, 0, 1, wxEXPAND, 5 );
-
-
- fgSizerParmRound->Add( 0, 0, 1, wxEXPAND, 5 );
-
-
- fgSizerParmRound->Add( 0, 0, 1, wxEXPAND, 5 );
-
- m_stHDRatioRound = new wxStaticText( this, wxID_ANY, _("Max height:"), wxDefaultPosition, wxDefaultSize, 0 );
- m_stHDRatioRound->Wrap( -1 );
- m_stHDRatioRound->SetToolTip( _("Max pad/via size to track width ratio to create a teardrop.\n100 always creates a teardrop.") );
-
- fgSizerParmRound->Add( m_stHDRatioRound, 0, wxALIGN_CENTER_VERTICAL|wxLEFT, 10 );
-
- m_spTeardropHDPercentRound = new wxSpinCtrlDouble( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS, 0, 100, 90, 10 );
- m_spTeardropHDPercentRound->SetDigits( 0 );
- fgSizerParmRound->Add( m_spTeardropHDPercentRound, 0, wxEXPAND|wxRIGHT|wxLEFT, 5 );
-
- m_stHDPercentRound = new wxStaticText( this, wxID_ANY, _("%"), wxDefaultPosition, wxDefaultSize, 0 );
- m_stHDPercentRound->Wrap( -1 );
- fgSizerParmRound->Add( m_stHDPercentRound, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 );
-
-
- fgSizerBitmaps->Add( fgSizerParmRound, 1, wxEXPAND|wxTOP|wxBOTTOM|wxLEFT, 10 );
-
- wxString m_rbShapeRoundChoices[] = { _("Straight lines"), _("Curved") };
- int m_rbShapeRoundNChoices = sizeof( m_rbShapeRoundChoices ) / sizeof( wxString );
- m_rbShapeRound = new wxRadioBox( this, wxID_ANY, _("Style"), wxDefaultPosition, wxDefaultSize, m_rbShapeRoundNChoices, m_rbShapeRoundChoices, 1, wxRA_SPECIFY_COLS );
- m_rbShapeRound->SetSelection( 0 );
- fgSizerBitmaps->Add( m_rbShapeRound, 0, wxALIGN_CENTER_VERTICAL|wxLEFT|wxEXPAND, 10 );
-
- m_staticline2 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL );
- fgSizerBitmaps->Add( m_staticline2, 0, wxEXPAND|wxALIGN_CENTER_VERTICAL, 5 );
-
- m_staticline3 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL );
- fgSizerBitmaps->Add( m_staticline3, 0, wxEXPAND|wxALIGN_CENTER_VERTICAL, 5 );
-
- m_staticline4 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL );
- fgSizerBitmaps->Add( m_staticline4, 0, wxEXPAND|wxALIGN_CENTER_VERTICAL, 5 );
-
- m_staticline5 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL );
- fgSizerBitmaps->Add( m_staticline5, 0, wxEXPAND|wxALIGN_CENTER_VERTICAL, 5 );
-
- m_staticTextRectS = new wxStaticText( this, wxID_ANY, _("Rect shapes:"), wxDefaultPosition, wxDefaultSize, 0 );
- m_staticTextRectS->Wrap( -1 );
- fgSizerBitmaps->Add( m_staticTextRectS, 0, wxTOP|wxBOTTOM, 12 );
-
- m_bitmapTdRectangularInfo = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 );
- fgSizerBitmaps->Add( m_bitmapTdRectangularInfo, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
-
- wxFlexGridSizer* fgSizerParmRect;
- fgSizerParmRect = new wxFlexGridSizer( 0, 6, 5, 0 );
- fgSizerParmRect->AddGrowableCol( 1 );
- fgSizerParmRect->AddGrowableCol( 4 );
- fgSizerParmRect->SetFlexibleDirection( wxBOTH );
- fgSizerParmRect->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
-
- m_stHsettingRect = new wxStaticText( this, wxID_ANY, _("Best length:"), wxDefaultPosition, wxDefaultSize, 0 );
- m_stHsettingRect->Wrap( -1 );
- fgSizerParmRect->Add( m_stHsettingRect, 0, wxALIGN_CENTER_VERTICAL|wxLEFT, 5 );
-
- m_spTeardropLenPercentRect = new wxSpinCtrlDouble( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS, 20, 100, 50.000000, 10 );
- m_spTeardropLenPercentRect->SetDigits( 0 );
- fgSizerParmRect->Add( m_spTeardropLenPercentRect, 0, wxEXPAND|wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 );
-
- m_stHDPercentRect = new wxStaticText( this, wxID_ANY, _("%"), wxDefaultPosition, wxDefaultSize, 0 );
- m_stHDPercentRect->Wrap( -1 );
- fgSizerParmRect->Add( m_stHDPercentRect, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 );
-
- m_stVsettingRect = new wxStaticText( this, wxID_ANY, _("Best height:"), wxDefaultPosition, wxDefaultSize, 0 );
- m_stVsettingRect->Wrap( -1 );
- fgSizerParmRect->Add( m_stVsettingRect, 0, wxALIGN_CENTER_VERTICAL|wxLEFT, 10 );
-
- m_spTeardropSizePercentRect = new wxSpinCtrlDouble( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS, 60, 100, 100.000000, 10 );
- m_spTeardropSizePercentRect->SetDigits( 0 );
- fgSizerParmRect->Add( m_spTeardropSizePercentRect, 0, wxEXPAND|wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL, 5 );
-
- m_stLenPercentRect = new wxStaticText( this, wxID_ANY, _("%"), wxDefaultPosition, wxDefaultSize, 0 );
- m_stLenPercentRect->Wrap( -1 );
- fgSizerParmRect->Add( m_stLenPercentRect, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 );
-
- m_stMaxLenRect = new wxStaticText( this, wxID_ANY, _("Max length:"), wxDefaultPosition, wxDefaultSize, 0 );
- m_stMaxLenRect->Wrap( -1 );
- fgSizerParmRect->Add( m_stMaxLenRect, 0, wxALIGN_CENTER_VERTICAL|wxLEFT, 5 );
-
- m_tcTdMaxLenRect = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
- fgSizerParmRect->Add( m_tcTdMaxLenRect, 0, wxEXPAND|wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL, 5 );
-
- m_stMaxLenRectUnits = new wxStaticText( this, wxID_ANY, _("mm"), wxDefaultPosition, wxDefaultSize, 0 );
- m_stMaxLenRectUnits->Wrap( -1 );
- fgSizerParmRect->Add( m_stMaxLenRectUnits, 0, wxRIGHT|wxALIGN_CENTER_VERTICAL, 5 );
-
- m_stTdMaxSizeRect = new wxStaticText( this, wxID_ANY, _("Max height:"), wxDefaultPosition, wxDefaultSize, 0 );
- m_stTdMaxSizeRect->Wrap( -1 );
- fgSizerParmRect->Add( m_stTdMaxSizeRect, 0, wxALIGN_CENTER_VERTICAL|wxLEFT, 10 );
-
- m_tcMaxHeightRect = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
- fgSizerParmRect->Add( m_tcMaxHeightRect, 0, wxEXPAND|wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL, 5 );
-
- m_stMaxHeightRectUnits = new wxStaticText( this, wxID_ANY, _("mm"), wxDefaultPosition, wxDefaultSize, 0 );
- m_stMaxHeightRectUnits->Wrap( -1 );
- fgSizerParmRect->Add( m_stMaxHeightRectUnits, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 );
-
-
- fgSizerParmRect->Add( 0, 0, 1, wxEXPAND, 5 );
-
-
- fgSizerParmRect->Add( 0, 0, 1, wxEXPAND, 5 );
-
-
- fgSizerParmRect->Add( 0, 0, 1, wxEXPAND, 5 );
-
- m_stHDRatioRect = new wxStaticText( this, wxID_ANY, _("Max height:"), wxDefaultPosition, wxDefaultSize, 0 );
- m_stHDRatioRect->Wrap( -1 );
- m_stHDRatioRect->SetToolTip( _("Max pad/via size to track width ratio to create a teardrop.\n100 always creates a teardrop.") );
-
- fgSizerParmRect->Add( m_stHDRatioRect, 0, wxALIGN_CENTER_VERTICAL|wxLEFT, 10 );
-
- m_spTeardropHDPercentRect = new wxSpinCtrlDouble( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS, 0, 100, 90, 10 );
- m_spTeardropHDPercentRect->SetDigits( 0 );
- fgSizerParmRect->Add( m_spTeardropHDPercentRect, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND|wxRIGHT|wxLEFT, 5 );
-
- m_stTeardropHUnits = new wxStaticText( this, wxID_ANY, _("%"), wxDefaultPosition, wxDefaultSize, 0 );
- m_stTeardropHUnits->Wrap( -1 );
- fgSizerParmRect->Add( m_stTeardropHUnits, 0, wxRIGHT|wxALIGN_CENTER_VERTICAL, 5 );
-
-
- fgSizerBitmaps->Add( fgSizerParmRect, 1, wxEXPAND|wxTOP|wxBOTTOM|wxLEFT, 10 );
-
- wxString m_rbShapeRectChoices[] = { _("Straight lines"), _("Curved") };
- int m_rbShapeRectNChoices = sizeof( m_rbShapeRectChoices ) / sizeof( wxString );
- m_rbShapeRect = new wxRadioBox( this, wxID_ANY, _("Style"), wxDefaultPosition, wxDefaultSize, m_rbShapeRectNChoices, m_rbShapeRectChoices, 1, wxRA_SPECIFY_COLS );
- m_rbShapeRect->SetSelection( 0 );
- fgSizerBitmaps->Add( m_rbShapeRect, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND|wxLEFT, 10 );
-
- m_staticline6 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL );
- fgSizerBitmaps->Add( m_staticline6, 0, wxEXPAND|wxALIGN_CENTER_VERTICAL, 5 );
-
- m_staticline7 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL );
- fgSizerBitmaps->Add( m_staticline7, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
-
- m_staticline8 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL );
- fgSizerBitmaps->Add( m_staticline8, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
-
- m_staticline9 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL );
- fgSizerBitmaps->Add( m_staticline9, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
-
- m_staticTextTrck = new wxStaticText( this, wxID_ANY, _("Tracks:"), wxDefaultPosition, wxDefaultSize, 0 );
- m_staticTextTrck->Wrap( -1 );
- fgSizerBitmaps->Add( m_staticTextTrck, 0, wxTOP|wxBOTTOM, 12 );
-
- m_bitmapTdTrackInfo = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 );
- fgSizerBitmaps->Add( m_bitmapTdTrackInfo, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
-
- wxFlexGridSizer* fgSizerParmTrack;
- fgSizerParmTrack = new wxFlexGridSizer( 0, 6, 5, 0 );
- fgSizerParmTrack->AddGrowableCol( 1 );
- fgSizerParmTrack->AddGrowableCol( 4 );
- fgSizerParmTrack->SetFlexibleDirection( wxBOTH );
- fgSizerParmTrack->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
-
- m_stHsettingtrack = new wxStaticText( this, wxID_ANY, _("Best length:"), wxDefaultPosition, wxDefaultSize, 0 );
- m_stHsettingtrack->Wrap( -1 );
- fgSizerParmTrack->Add( m_stHsettingtrack, 0, wxALIGN_CENTER_VERTICAL|wxLEFT, 5 );
-
- m_spTeardropLenPercentTrack = new wxSpinCtrlDouble( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS, 20, 100, 100.000000, 10 );
- m_spTeardropLenPercentTrack->SetDigits( 0 );
- fgSizerParmTrack->Add( m_spTeardropLenPercentTrack, 0, wxEXPAND|wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL, 5 );
-
- m_stTeardropLenTrackUnits = new wxStaticText( this, wxID_ANY, _("%"), wxDefaultPosition, wxDefaultSize, 0 );
- m_stTeardropLenTrackUnits->Wrap( -1 );
- fgSizerParmTrack->Add( m_stTeardropLenTrackUnits, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 );
-
- m_stVsettingtrack = new wxStaticText( this, wxID_ANY, _("Best height:"), wxDefaultPosition, wxDefaultSize, 0 );
- m_stVsettingtrack->Wrap( -1 );
- fgSizerParmTrack->Add( m_stVsettingtrack, 0, wxALIGN_CENTER_VERTICAL|wxLEFT, 10 );
-
- m_spTeardropSizePercentTrack = new wxSpinCtrlDouble( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS, 60, 100, 100.000000, 10 );
- m_spTeardropSizePercentTrack->SetDigits( 0 );
- fgSizerParmTrack->Add( m_spTeardropSizePercentTrack, 0, wxEXPAND|wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL, 5 );
-
- m_stLenPercentTrack = new wxStaticText( this, wxID_ANY, _("%"), wxDefaultPosition, wxDefaultSize, 0 );
- m_stLenPercentTrack->Wrap( -1 );
- fgSizerParmTrack->Add( m_stLenPercentTrack, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 );
-
- m_stMaxLenTrack = new wxStaticText( this, wxID_ANY, _("Max length:"), wxDefaultPosition, wxDefaultSize, 0 );
- m_stMaxLenTrack->Wrap( -1 );
- fgSizerParmTrack->Add( m_stMaxLenTrack, 0, wxALIGN_CENTER_VERTICAL|wxLEFT, 5 );
-
- m_tcTdMaxLenTrack = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
- fgSizerParmTrack->Add( m_tcTdMaxLenTrack, 0, wxEXPAND|wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL, 5 );
-
- m_stMaxLenTrackUnits = new wxStaticText( this, wxID_ANY, _("mm"), wxDefaultPosition, wxDefaultSize, 0 );
- m_stMaxLenTrackUnits->Wrap( -1 );
- fgSizerParmTrack->Add( m_stMaxLenTrackUnits, 0, wxRIGHT|wxALIGN_CENTER_VERTICAL, 5 );
-
- m_stTdMaxSizeTrack = new wxStaticText( this, wxID_ANY, _("Max height:"), wxDefaultPosition, wxDefaultSize, 0 );
- m_stTdMaxSizeTrack->Wrap( -1 );
- fgSizerParmTrack->Add( m_stTdMaxSizeTrack, 0, wxALIGN_CENTER_VERTICAL|wxLEFT, 10 );
-
- m_tcMaxHeightTrack = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
- fgSizerParmTrack->Add( m_tcMaxHeightTrack, 0, wxEXPAND|wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL, 5 );
-
- m_stMaxHeightTrackUnits = new wxStaticText( this, wxID_ANY, _("mm"), wxDefaultPosition, wxDefaultSize, 0 );
- m_stMaxHeightTrackUnits->Wrap( -1 );
- fgSizerParmTrack->Add( m_stMaxHeightTrackUnits, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 );
-
-
- fgSizerParmTrack->Add( 0, 0, 1, wxEXPAND, 5 );
-
-
- fgSizerParmTrack->Add( 0, 0, 1, wxEXPAND, 5 );
-
-
- fgSizerParmTrack->Add( 0, 0, 1, wxEXPAND, 5 );
-
- m_stHDRatioTrack = new wxStaticText( this, wxID_ANY, _("Max height:"), wxDefaultPosition, wxDefaultSize, 0 );
- m_stHDRatioTrack->Wrap( -1 );
- m_stHDRatioTrack->SetToolTip( _("Max pad/via size to track width ratio to create a teardrop.\n100 always creates a teardrop.") );
-
- fgSizerParmTrack->Add( m_stHDRatioTrack, 0, wxALIGN_CENTER_VERTICAL|wxLEFT, 10 );
-
- m_spTeardropHDPercentTrack = new wxSpinCtrlDouble( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS, 0, 100, 90, 10 );
- m_spTeardropHDPercentTrack->SetDigits( 0 );
- fgSizerParmTrack->Add( m_spTeardropHDPercentTrack, 0, wxEXPAND|wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 );
-
- m_stHDPercentTrack = new wxStaticText( this, wxID_ANY, _("%"), wxDefaultPosition, wxDefaultSize, 0 );
- m_stHDPercentTrack->Wrap( -1 );
- fgSizerParmTrack->Add( m_stHDPercentTrack, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 );
-
-
- fgSizerBitmaps->Add( fgSizerParmTrack, 1, wxEXPAND|wxTOP|wxBOTTOM|wxLEFT, 10 );
-
- wxString m_rbShapeTrackChoices[] = { _("Straight lines"), _("Curved") };
- int m_rbShapeTrackNChoices = sizeof( m_rbShapeTrackChoices ) / sizeof( wxString );
- m_rbShapeTrack = new wxRadioBox( this, wxID_ANY, _("Style"), wxDefaultPosition, wxDefaultSize, m_rbShapeTrackNChoices, m_rbShapeTrackChoices, 1, wxRA_SPECIFY_COLS );
- m_rbShapeTrack->SetSelection( 0 );
- fgSizerBitmaps->Add( m_rbShapeTrack, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND|wxLEFT, 10 );
-
-
- bSizeScopeSize->Add( fgSizerBitmaps, 1, wxEXPAND|wxRIGHT|wxLEFT, 10 );
-
-
- bSizerTop->Add( bSizeScopeSize, 0, wxEXPAND, 5 );
-
-
- bSizerUpper->Add( bSizerTop, 0, wxEXPAND, 5 );
-
- wxBoxSizer* bSizerShape;
- bSizerShape = new wxBoxSizer( wxHORIZONTAL );
-
- wxStaticBoxSizer* sbSizerScope;
- sbSizerScope = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Scope") ), wxVERTICAL );
-
- m_cbPadVia = new wxCheckBox( sbSizerScope->GetStaticBox(), wxID_ANY, _("Vias and PTH pads"), wxDefaultPosition, wxDefaultSize, 0 );
- m_cbPadVia->SetValue(true);
- m_cbPadVia->SetToolTip( _("Add teardrops to vias and pads with holes") );
-
- sbSizerScope->Add( m_cbPadVia, 0, wxBOTTOM|wxRIGHT|wxLEFT, 5 );
-
- m_cbRoundShapesOnly = new wxCheckBox( sbSizerScope->GetStaticBox(), wxID_ANY, _("Round pads only"), wxDefaultPosition, wxDefaultSize, 0 );
- m_cbRoundShapesOnly->SetToolTip( _("Add teardrops to round shapes only ") );
-
- sbSizerScope->Add( m_cbRoundShapesOnly, 0, wxBOTTOM|wxRIGHT|wxLEFT, 5 );
-
- m_cbSmdSimilarPads = new wxCheckBox( sbSizerScope->GetStaticBox(), wxID_ANY, _("SMD pads"), wxDefaultPosition, wxDefaultSize, 0 );
- m_cbSmdSimilarPads->SetValue(true);
- m_cbSmdSimilarPads->SetToolTip( _("Add teardrops to not driiled pads, like SMD") );
-
- sbSizerScope->Add( m_cbSmdSimilarPads, 0, wxBOTTOM|wxRIGHT|wxLEFT, 5 );
-
- m_cbTrack2Track = new wxCheckBox( sbSizerScope->GetStaticBox(), wxID_ANY, _("Track to track"), wxDefaultPosition, wxDefaultSize, 0 );
- m_cbTrack2Track->SetValue(true);
- m_cbTrack2Track->SetToolTip( _("Add teardrops to two connected tracks of different widths") );
-
- sbSizerScope->Add( m_cbTrack2Track, 0, wxBOTTOM|wxRIGHT|wxLEFT, 5 );
-
-
- bSizerShape->Add( sbSizerScope, 0, wxEXPAND|wxTOP, 5 );
-
- wxStaticBoxSizer* sbSizerOptions;
- sbSizerOptions = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Options") ), wxVERTICAL );
-
- m_cbOptUseNextTrack = new wxCheckBox( sbSizerOptions->GetStaticBox(), wxID_ANY, _("Allow teardrops to span two track segments"), wxDefaultPosition, wxDefaultSize, 0 );
- m_cbOptUseNextTrack->SetValue(true);
- m_cbOptUseNextTrack->SetToolTip( _("Allows a teardrop to spread over 2 tracks if the first track segment is too short") );
-
- sbSizerOptions->Add( m_cbOptUseNextTrack, 0, wxBOTTOM|wxRIGHT|wxLEFT, 5 );
-
- m_cbPadsInZones = new wxCheckBox( sbSizerOptions->GetStaticBox(), wxID_ANY, _("Place teardrops on pads in zones"), wxDefaultPosition, wxDefaultSize, 0 );
- m_cbPadsInZones->SetToolTip( _("Pads inside a copper zone outline of same net have no teardrop.\nCheck this option to allow teardrop for these pads.") );
-
- sbSizerOptions->Add( m_cbPadsInZones, 0, wxALL, 5 );
-
-
- sbSizerOptions->Add( 30, 0, 0, 0, 5 );
-
- wxBoxSizer* bSizer6;
- bSizer6 = new wxBoxSizer( wxHORIZONTAL );
-
- m_stPointCount = new wxStaticText( sbSizerOptions->GetStaticBox(), wxID_ANY, _("Curve points:"), wxDefaultPosition, wxDefaultSize, 0 );
- m_stPointCount->Wrap( -1 );
- m_stPointCount->SetToolTip( _("Number of segments to build a teardrop with curved shape") );
-
- bSizer6->Add( m_stPointCount, 0, wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxLEFT, 5 );
-
- m_spPointCount = new wxSpinCtrl( sbSizerOptions->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS, 3, 10, 5 );
- bSizer6->Add( m_spPointCount, 0, wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxRIGHT|wxLEFT, 5 );
-
-
- sbSizerOptions->Add( bSizer6, 1, wxEXPAND|wxTOP|wxBOTTOM, 5 );
-
- m_generateRawTeardrops = new wxCheckBox( sbSizerOptions->GetStaticBox(), wxID_ANY, _("Generate raw teardrops"), wxDefaultPosition, wxDefaultSize, 0 );
- sbSizerOptions->Add( m_generateRawTeardrops, 0, wxRIGHT|wxLEFT, 5 );
-
-
- sbSizerOptions->Add( 0, 2, 0, 0, 5 );
-
- m_rawTeardropsHint = new wxStaticText( sbSizerOptions->GetStaticBox(), wxID_ANY, _("(Shapes will be adjusted for clearances on next zone fill.)"), wxDefaultPosition, wxDefaultSize, 0 );
- m_rawTeardropsHint->Wrap( -1 );
- m_rawTeardropsHint->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_NORMAL, false, wxEmptyString ) );
-
- sbSizerOptions->Add( m_rawTeardropsHint, 0, wxLEFT, 27 );
-
-
- sbSizerOptions->Add( 0, 2, 0, 0, 5 );
-
-
- bSizerShape->Add( sbSizerOptions, 1, wxEXPAND|wxTOP|wxRIGHT|wxLEFT, 5 );
-
-
- bSizerUpper->Add( bSizerShape, 0, wxEXPAND|wxRIGHT|wxLEFT, 5 );
-
-
- bSizerMain->Add( bSizerUpper, 1, wxEXPAND, 5 );
-
- m_sdbSizer = new wxStdDialogButtonSizer();
- m_sdbSizerOK = new wxButton( this, wxID_OK );
- m_sdbSizer->AddButton( m_sdbSizerOK );
- m_sdbSizerCancel = new wxButton( this, wxID_CANCEL );
- m_sdbSizer->AddButton( m_sdbSizerCancel );
- m_sdbSizer->Realize();
-
- bSizerMain->Add( m_sdbSizer, 0, wxALIGN_RIGHT|wxALL, 5 );
-
-
- this->SetSizer( bSizerMain );
- this->Layout();
- bSizerMain->Fit( this );
-
- this->Centre( wxBOTH );
-}
-
-TEARDROP_DIALOG_BASE::~TEARDROP_DIALOG_BASE()
-{
-}
diff --git a/pcbnew/teardrop/dialog_teardrop_base.fbp b/pcbnew/teardrop/dialog_teardrop_base.fbp
deleted file mode 100644
index ea2f359458..0000000000
--- a/pcbnew/teardrop/dialog_teardrop_base.fbp
+++ /dev/null
@@ -1,4874 +0,0 @@
-
-
-
-
- ;
- C++
- 1
- source_name
- 0
- 0
- res
- UTF-8
- connect
- dialog_teardrop_base
- 1000
- none
-
-
- 1
- dialog_teardrop_base
-
- .
-
- 1
- 1
- 1
- 1
- UI
- 0
- 0
- 0
-
- 0
- wxAUI_MGR_DEFAULT
-
- wxBOTH
-
- 1
- 0
- 1
- impl_virtual
-
-
-
- 0
- wxID_ANY
-
-
- TEARDROP_DIALOG_BASE
-
- -1,-1
- wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER
- DIALOG_SHIM; dialog_shim.h; forward_declare
- Add Teardrops
-
- 0
-
-
-
-
-
- bSizerMain
- wxVERTICAL
- none
-
- 5
- wxEXPAND
- 1
-
-
- bSizerUpper
- wxVERTICAL
- none
-
- 5
- wxEXPAND
- 0
-
-
- bSizerTop
- wxVERTICAL
- none
-
- 5
- wxEXPAND
- 0
-
-
- bSizeScopeSize
- wxVERTICAL
- none
-
- 10
- wxEXPAND|wxRIGHT|wxLEFT
- 1
-
- 4
- wxBOTH
- 2
-
- 0
-
- fgSizerBitmaps
- wxFLEX_GROWMODE_SPECIFIED
- none
- 0
- 5
-
- 12
- wxTOP|wxBOTTOM
- 0
-
- 1
- 1
- 1
- 1
-
-
-
-
-
-
-
- 1
- 0
- 1
-
- 1
- 0
- Dock
- 0
- Left
- 0
- 1
-
- 1
-
- 0
- 0
- wxID_ANY
- Round shapes:
- 0
-
- 0
-
-
- 0
-
- 1
- m_staticTextRndS
- 1
-
-
- protected
- 1
-
- Resizable
- 1
-
-
- ; ; forward_declare
- 0
-
-
-
-
- -1
-
-
-
- 5
- wxALL|wxALIGN_CENTER_VERTICAL
- 0
-
- 1
- 1
- 1
- 1
-
-
-
-
-
-
-
-
- 1
- 0
- 1
-
- 1
- 0
- Dock
- 0
- Left
- 0
- 1
-
- 1
-
- 0
- 0
- wxID_ANY
-
- 0
-
-
- 0
-
- 1
- m_bitmapTdCircularInfo
- 1
-
-
- protected
- 1
-
- Resizable
- 1
-
- ; ; forward_declare
- 0
-
-
-
-
-
-
-
- 10
- wxEXPAND|wxTOP|wxBOTTOM|wxLEFT
- 1
-
- 6
- wxBOTH
- 1,4
-
- 0
-
- fgSizerParmRound
- wxFLEX_GROWMODE_SPECIFIED
- none
- 0
- 5
-
-