pcbnew: Re-attach snap options
Snapping to item options were partially disconnected when unifying framework. This re-attaches the options and adds the additional option for graphical items. Fixes: lp:1801377 * https://bugs.launchpad.net/kicad/+bug/1801377
This commit is contained in:
parent
914596fcbb
commit
05483a06c6
|
@ -2,7 +2,7 @@
|
|||
* This program source code file is part of KiCad, a free EDA CAD application.
|
||||
*
|
||||
* Copyright (C) 2009 Jean-Pierre Charras, jaen-pierre.charras@gipsa-lab.inpg.com
|
||||
* Copyright (C) 1992-2018 KiCad Developers, see AUTHORS.txt for contributors.
|
||||
* Copyright (C) 1992-2019 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
|
||||
|
@ -56,8 +56,9 @@ bool PANEL_PCBNEW_SETTINGS::TransferDataToWindow()
|
|||
m_Track_45_Only_Ctrl->SetValue( m_Frame->Settings().m_legacyUse45DegreeTracks );
|
||||
m_Segments_45_Only_Ctrl->SetValue( m_Frame->Settings().m_use45DegreeGraphicSegments );
|
||||
m_Track_DoubleSegm_Ctrl->SetValue( m_Frame->Settings().m_legacyUseTwoSegmentTracks );
|
||||
m_MagneticPadOptCtrl->SetSelection( m_Frame->Settings().m_magneticPads );
|
||||
m_MagneticTrackOptCtrl->SetSelection( m_Frame->Settings().m_magneticTracks );
|
||||
m_magneticPadChoice->SetSelection( m_Frame->Settings().m_magneticPads );
|
||||
m_magneticTrackChoice->SetSelection( m_Frame->Settings().m_magneticTracks );
|
||||
m_magneticGraphicsChoice->SetSelection( !m_Frame->Settings().m_magneticGraphics );
|
||||
m_UseEditKeyForWidth->SetValue( m_Frame->Settings().m_editActionChangesTrackWidth );
|
||||
m_dragSelects->SetValue( m_Frame->Settings().m_dragSelects );
|
||||
|
||||
|
@ -84,8 +85,9 @@ bool PANEL_PCBNEW_SETTINGS::TransferDataFromWindow()
|
|||
m_Frame->Settings().m_legacyUse45DegreeTracks = m_Track_45_Only_Ctrl->GetValue();
|
||||
|
||||
m_Frame->Settings().m_legacyUseTwoSegmentTracks = m_Track_DoubleSegm_Ctrl->GetValue();
|
||||
m_Frame->Settings().m_magneticPads = (MAGNETIC_PAD_OPTION_VALUES) m_MagneticPadOptCtrl->GetSelection();
|
||||
m_Frame->Settings().m_magneticTracks = (MAGNETIC_PAD_OPTION_VALUES) m_MagneticTrackOptCtrl->GetSelection();
|
||||
m_Frame->Settings().m_magneticPads = (MAGNETIC_PAD_OPTION_VALUES) m_magneticPadChoice->GetSelection();
|
||||
m_Frame->Settings().m_magneticTracks = (MAGNETIC_PAD_OPTION_VALUES) m_magneticTrackChoice->GetSelection();
|
||||
m_Frame->Settings().m_magneticGraphics = !m_magneticGraphicsChoice->GetSelection();
|
||||
m_Frame->Settings().m_editActionChangesTrackWidth = m_UseEditKeyForWidth->GetValue();
|
||||
m_Frame->Settings().m_dragSelects = m_dragSelects->GetValue();
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
///////////////////////////////////////////////////////////////////////////
|
||||
// C++ code generated with wxFormBuilder (version Jul 11 2018)
|
||||
// C++ code generated with wxFormBuilder (version Jan 17 2019)
|
||||
// http://www.wxformbuilder.org/
|
||||
//
|
||||
// PLEASE DO *NOT* EDIT THIS FILE!
|
||||
|
@ -9,7 +9,7 @@
|
|||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
|
||||
PANEL_PCBNEW_SETTINGS_BASE::PANEL_PCBNEW_SETTINGS_BASE( wxWindow* parent, wxWindowID id, const wxPoint& pos, const wxSize& size, long style ) : wxPanel( parent, id, pos, size, style )
|
||||
PANEL_PCBNEW_SETTINGS_BASE::PANEL_PCBNEW_SETTINGS_BASE( wxWindow* parent, wxWindowID id, const wxPoint& pos, const wxSize& size, long style, const wxString& name ) : wxPanel( parent, id, pos, size, style, name )
|
||||
{
|
||||
wxBoxSizer* bPanelSizer;
|
||||
bPanelSizer = new wxBoxSizer( wxHORIZONTAL );
|
||||
|
@ -85,21 +85,61 @@ PANEL_PCBNEW_SETTINGS_BASE::PANEL_PCBNEW_SETTINGS_BASE( wxWindow* parent, wxWind
|
|||
wxBoxSizer* bRightSizer;
|
||||
bRightSizer = new wxBoxSizer( wxVERTICAL );
|
||||
|
||||
wxString m_MagneticPadOptCtrlChoices[] = { _("Never"), _("When creating tracks"), _("Always") };
|
||||
int m_MagneticPadOptCtrlNChoices = sizeof( m_MagneticPadOptCtrlChoices ) / sizeof( wxString );
|
||||
m_MagneticPadOptCtrl = new wxRadioBox( this, wxID_ANY, _("Magnetic Pads"), wxDefaultPosition, wxDefaultSize, m_MagneticPadOptCtrlNChoices, m_MagneticPadOptCtrlChoices, 1, wxRA_SPECIFY_COLS );
|
||||
m_MagneticPadOptCtrl->SetSelection( 2 );
|
||||
m_MagneticPadOptCtrl->SetToolTip( _("Control capture of the cursor when the mouse enters a pad area.") );
|
||||
wxStaticBoxSizer* sbMagnets;
|
||||
sbMagnets = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Magnetic Points") ), wxVERTICAL );
|
||||
|
||||
bRightSizer->Add( m_MagneticPadOptCtrl, 0, wxEXPAND|wxTOP|wxBOTTOM|wxLEFT, 5 );
|
||||
wxFlexGridSizer* fgSizer2;
|
||||
fgSizer2 = new wxFlexGridSizer( 0, 2, 0, 15 );
|
||||
fgSizer2->SetFlexibleDirection( wxVERTICAL );
|
||||
fgSizer2->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
|
||||
|
||||
wxString m_MagneticTrackOptCtrlChoices[] = { _("Never"), _("When creating tracks"), _("Always") };
|
||||
int m_MagneticTrackOptCtrlNChoices = sizeof( m_MagneticTrackOptCtrlChoices ) / sizeof( wxString );
|
||||
m_MagneticTrackOptCtrl = new wxRadioBox( this, wxID_MAGNETIC_TRACKS, _("Magnetic Tracks"), wxDefaultPosition, wxDefaultSize, m_MagneticTrackOptCtrlNChoices, m_MagneticTrackOptCtrlChoices, 1, wxRA_SPECIFY_COLS );
|
||||
m_MagneticTrackOptCtrl->SetSelection( 0 );
|
||||
m_MagneticTrackOptCtrl->SetToolTip( _("Control capture of the cursor when the mouse approaches a track.") );
|
||||
m_staticText2 = new wxStaticText( sbMagnets->GetStaticBox(), wxID_ANY, _("Snap to Pads"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_staticText2->Wrap( -1 );
|
||||
m_staticText2->SetToolTip( _("Capture cursor when the mouse enters a pad area") );
|
||||
|
||||
bRightSizer->Add( m_MagneticTrackOptCtrl, 0, wxEXPAND|wxTOP|wxBOTTOM|wxLEFT, 5 );
|
||||
fgSizer2->Add( m_staticText2, 0, wxALIGN_CENTER_VERTICAL|wxALL|wxEXPAND|wxLEFT|wxRIGHT, 5 );
|
||||
|
||||
wxString m_magneticPadChoiceChoices[] = { _("Never"), _("When creating tracks"), _("Always") };
|
||||
int m_magneticPadChoiceNChoices = sizeof( m_magneticPadChoiceChoices ) / sizeof( wxString );
|
||||
m_magneticPadChoice = new wxChoice( sbMagnets->GetStaticBox(), wxID_ANY, wxDefaultPosition, wxDefaultSize, m_magneticPadChoiceNChoices, m_magneticPadChoiceChoices, 0 );
|
||||
m_magneticPadChoice->SetSelection( 1 );
|
||||
m_magneticPadChoice->SetToolTip( _("Capture cursor when the mouse enters a pad area") );
|
||||
|
||||
fgSizer2->Add( m_magneticPadChoice, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND|wxLEFT|wxRIGHT, 5 );
|
||||
|
||||
m_staticText21 = new wxStaticText( sbMagnets->GetStaticBox(), wxID_ANY, _("Snap to Tracks"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_staticText21->Wrap( -1 );
|
||||
m_staticText21->SetToolTip( _("Capture cursor when the mouse approaches a track") );
|
||||
|
||||
fgSizer2->Add( m_staticText21, 0, wxALL, 5 );
|
||||
|
||||
wxString m_magneticTrackChoiceChoices[] = { _("Never"), _("When creating tracks"), _("Always") };
|
||||
int m_magneticTrackChoiceNChoices = sizeof( m_magneticTrackChoiceChoices ) / sizeof( wxString );
|
||||
m_magneticTrackChoice = new wxChoice( sbMagnets->GetStaticBox(), wxID_ANY, wxDefaultPosition, wxDefaultSize, m_magneticTrackChoiceNChoices, m_magneticTrackChoiceChoices, 0 );
|
||||
m_magneticTrackChoice->SetSelection( 1 );
|
||||
m_magneticTrackChoice->SetToolTip( _("Capture cursor when the mouse approaches a track") );
|
||||
|
||||
fgSizer2->Add( m_magneticTrackChoice, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND|wxLEFT|wxRIGHT, 5 );
|
||||
|
||||
m_staticText211 = new wxStaticText( sbMagnets->GetStaticBox(), wxID_ANY, _("Snap to Graphical"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_staticText211->Wrap( -1 );
|
||||
m_staticText211->SetToolTip( _("Capture cursor when the mouse approaches graphical control points") );
|
||||
|
||||
fgSizer2->Add( m_staticText211, 0, wxALL, 5 );
|
||||
|
||||
wxString m_magneticGraphicsChoiceChoices[] = { _("Yes"), _("No") };
|
||||
int m_magneticGraphicsChoiceNChoices = sizeof( m_magneticGraphicsChoiceChoices ) / sizeof( wxString );
|
||||
m_magneticGraphicsChoice = new wxChoice( sbMagnets->GetStaticBox(), wxID_ANY, wxDefaultPosition, wxDefaultSize, m_magneticGraphicsChoiceNChoices, m_magneticGraphicsChoiceChoices, 0 );
|
||||
m_magneticGraphicsChoice->SetSelection( 0 );
|
||||
m_magneticGraphicsChoice->SetToolTip( _("Capture cursor when the mouse approaches graphical control points") );
|
||||
|
||||
fgSizer2->Add( m_magneticGraphicsChoice, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND|wxLEFT|wxRIGHT, 5 );
|
||||
|
||||
|
||||
sbMagnets->Add( fgSizer2, 1, wxEXPAND, 5 );
|
||||
|
||||
|
||||
bRightSizer->Add( sbMagnets, 1, wxEXPAND, 5 );
|
||||
|
||||
wxStaticBoxSizer* bLegacyOptionsSizer;
|
||||
bLegacyOptionsSizer = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Legacy Toolset Routing Options") ), wxVERTICAL );
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -1,12 +1,11 @@
|
|||
///////////////////////////////////////////////////////////////////////////
|
||||
// C++ code generated with wxFormBuilder (version Jul 11 2018)
|
||||
// C++ code generated with wxFormBuilder (version Jan 17 2019)
|
||||
// http://www.wxformbuilder.org/
|
||||
//
|
||||
// PLEASE DO *NOT* EDIT THIS FILE!
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#ifndef __PANEL_PCBNEW_SETTINGS_BASE_H__
|
||||
#define __PANEL_PCBNEW_SETTINGS_BASE_H__
|
||||
#pragma once
|
||||
|
||||
#include <wx/artprov.h>
|
||||
#include <wx/xrc/xmlres.h>
|
||||
|
@ -22,6 +21,7 @@
|
|||
#include <wx/textctrl.h>
|
||||
#include <wx/sizer.h>
|
||||
#include <wx/statbox.h>
|
||||
#include <wx/choice.h>
|
||||
#include <wx/panel.h>
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
|
@ -39,7 +39,6 @@ class PANEL_PCBNEW_SETTINGS_BASE : public wxPanel
|
|||
wxID_POLAR_CTRL = 1000,
|
||||
wxID_UNITS,
|
||||
wxID_SEGMENTS45,
|
||||
wxID_MAGNETIC_TRACKS,
|
||||
wxID_DRC_ONOFF,
|
||||
wxID_TRACK_AUTODEL,
|
||||
wxID_TRACKS45
|
||||
|
@ -53,8 +52,12 @@ class PANEL_PCBNEW_SETTINGS_BASE : public wxPanel
|
|||
wxCheckBox* m_dragSelects;
|
||||
wxStaticText* m_staticTextRotationAngle;
|
||||
wxTextCtrl* m_RotationAngle;
|
||||
wxRadioBox* m_MagneticPadOptCtrl;
|
||||
wxRadioBox* m_MagneticTrackOptCtrl;
|
||||
wxStaticText* m_staticText2;
|
||||
wxChoice* m_magneticPadChoice;
|
||||
wxStaticText* m_staticText21;
|
||||
wxChoice* m_magneticTrackChoice;
|
||||
wxStaticText* m_staticText211;
|
||||
wxChoice* m_magneticGraphicsChoice;
|
||||
wxCheckBox* m_DrcOn;
|
||||
wxCheckBox* m_TrackAutodel;
|
||||
wxCheckBox* m_Track_45_Only_Ctrl;
|
||||
|
@ -62,9 +65,8 @@ class PANEL_PCBNEW_SETTINGS_BASE : public wxPanel
|
|||
|
||||
public:
|
||||
|
||||
PANEL_PCBNEW_SETTINGS_BASE( wxWindow* parent, wxWindowID id = wxID_ANY, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( -1,-1 ), long style = wxTAB_TRAVERSAL );
|
||||
PANEL_PCBNEW_SETTINGS_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_PCBNEW_SETTINGS_BASE();
|
||||
|
||||
};
|
||||
|
||||
#endif //__PANEL_PCBNEW_SETTINGS_BASE_H__
|
||||
|
|
|
@ -36,6 +36,7 @@ PCB_GENERAL_SETTINGS::PCB_GENERAL_SETTINGS( FRAME_T aFrameType )
|
|||
Add( "Use45DegreeGraphicSegments", &m_use45DegreeGraphicSegments, false);
|
||||
Add( "MagneticPads", reinterpret_cast<int*>( &m_magneticPads ), CAPTURE_CURSOR_IN_TRACK_TOOL );
|
||||
Add( "MagneticTracks", reinterpret_cast<int*>( &m_magneticTracks ), CAPTURE_CURSOR_IN_TRACK_TOOL );
|
||||
Add( "MagneticGraphics", &m_magneticGraphics, true );
|
||||
Add( "EditActionChangesTrackWidth", &m_editActionChangesTrackWidth, false );
|
||||
Add( "DragSelects", &m_dragSelects, true );
|
||||
break;
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* This program source code file is part of KICAD, a free EDA CAD application.
|
||||
*
|
||||
* Copyright (C) 2012-2017 Kicad Developers, see AUTHORS.txt for contributors.
|
||||
* Copyright (C) 2012-2019 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
|
||||
|
@ -65,6 +65,7 @@ public:
|
|||
|
||||
MAGNETIC_PAD_OPTION_VALUES m_magneticPads = CAPTURE_CURSOR_IN_TRACK_TOOL;
|
||||
MAGNETIC_PAD_OPTION_VALUES m_magneticTracks = CAPTURE_CURSOR_IN_TRACK_TOOL;
|
||||
bool m_magneticGraphics = true;
|
||||
|
||||
#if defined(KICAD_SCRIPTING) && defined(KICAD_SCRIPTING_ACTION_MENU)
|
||||
std::vector< std::pair<wxString, wxString> > m_pluginSettings; // Settings for action plugins
|
||||
|
|
|
@ -260,7 +260,7 @@ bool TOOL_BASE::checkSnap( ITEM *aItem )
|
|||
void TOOL_BASE::updateStartItem( const TOOL_EVENT& aEvent, bool aIgnorePads )
|
||||
{
|
||||
int tl = getView()->GetTopLayer();
|
||||
VECTOR2I cp = controls()->GetCursorPosition();
|
||||
VECTOR2I cp = controls()->GetCursorPosition( !aEvent.Modifier( MD_SHIFT ) );
|
||||
VECTOR2I p;
|
||||
|
||||
controls()->ForceCursorPosition( false );
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
* This program source code file is part of KiCad, a free EDA CAD application.
|
||||
*
|
||||
* Copyright (C) 2014 CERN
|
||||
* Copyright (C) 2018-2019 KiCad Developers, see AUTHORS.txt for contributors.
|
||||
* @author Tomasz Wlostowski <tomasz.wlostowski@cern.ch>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
|
@ -336,7 +337,8 @@ void GRID_HELPER::computeAnchors( BOARD_ITEM* aItem, const VECTOR2I& aRefPos )
|
|||
|
||||
for( auto pad : mod->Pads() )
|
||||
{
|
||||
if( pad->GetBoundingBox().Contains( wxPoint( aRefPos.x, aRefPos.y ) ) )
|
||||
if( m_frame->Settings().m_magneticPads == CAPTURE_ALWAYS &&
|
||||
pad->GetBoundingBox().Contains( wxPoint( aRefPos.x, aRefPos.y ) ) )
|
||||
{
|
||||
addAnchor( pad->GetPosition(), CORNER | SNAPPABLE, pad );
|
||||
break;
|
||||
|
@ -350,14 +352,21 @@ void GRID_HELPER::computeAnchors( BOARD_ITEM* aItem, const VECTOR2I& aRefPos )
|
|||
|
||||
case PCB_PAD_T:
|
||||
{
|
||||
D_PAD* pad = static_cast<D_PAD*>( aItem );
|
||||
addAnchor( pad->GetPosition(), CORNER | SNAPPABLE, pad );
|
||||
if( m_frame->Settings().m_magneticPads == CAPTURE_ALWAYS )
|
||||
{
|
||||
D_PAD* pad = static_cast<D_PAD*>( aItem );
|
||||
addAnchor( pad->GetPosition(), CORNER | SNAPPABLE, pad );
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
case PCB_MODULE_EDGE_T:
|
||||
case PCB_LINE_T:
|
||||
{
|
||||
if( !m_frame->Settings().m_magneticGraphics )
|
||||
break;
|
||||
|
||||
DRAWSEGMENT* dseg = static_cast<DRAWSEGMENT*>( aItem );
|
||||
VECTOR2I start = dseg->GetStart();
|
||||
VECTOR2I end = dseg->GetEnd();
|
||||
|
@ -418,23 +427,34 @@ void GRID_HELPER::computeAnchors( BOARD_ITEM* aItem, const VECTOR2I& aRefPos )
|
|||
|
||||
case PCB_TRACE_T:
|
||||
{
|
||||
TRACK* track = static_cast<TRACK*>( aItem );
|
||||
VECTOR2I start = track->GetStart();
|
||||
VECTOR2I end = track->GetEnd();
|
||||
origin.x = start.x + ( start.x - end.x ) / 2;
|
||||
origin.y = start.y + ( start.y - end.y ) / 2;
|
||||
addAnchor( start, CORNER | SNAPPABLE, track );
|
||||
addAnchor( end, CORNER | SNAPPABLE, track );
|
||||
addAnchor( origin, ORIGIN, track);
|
||||
if( m_frame->Settings().m_magneticTracks == CAPTURE_ALWAYS )
|
||||
{
|
||||
TRACK* track = static_cast<TRACK*>( aItem );
|
||||
VECTOR2I start = track->GetStart();
|
||||
VECTOR2I end = track->GetEnd();
|
||||
origin.x = start.x + ( start.x - end.x ) / 2;
|
||||
origin.y = start.y + ( start.y - end.y ) / 2;
|
||||
addAnchor( start, CORNER | SNAPPABLE, track );
|
||||
addAnchor( end, CORNER | SNAPPABLE, track );
|
||||
addAnchor( origin, ORIGIN, track);
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
case PCB_MARKER_T:
|
||||
case PCB_TARGET_T:
|
||||
case PCB_VIA_T:
|
||||
addAnchor( aItem->GetPosition(), ORIGIN | CORNER | SNAPPABLE, aItem );
|
||||
break;
|
||||
|
||||
case PCB_VIA_T:
|
||||
{
|
||||
if( m_frame->Settings().m_magneticTracks == CAPTURE_ALWAYS )
|
||||
addAnchor( aItem->GetPosition(), ORIGIN | CORNER | SNAPPABLE, aItem );
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
case PCB_ZONE_AREA_T:
|
||||
{
|
||||
const SHAPE_POLY_SET* outline = static_cast<const ZONE_CONTAINER*>( aItem )->Outline();
|
||||
|
|
|
@ -452,7 +452,7 @@ int PCB_EDITOR_CONTROL::PlaceModule( const TOOL_EVENT& aEvent )
|
|||
// Main loop: keep receiving events
|
||||
while( OPT_TOOL_EVENT evt = Wait() )
|
||||
{
|
||||
cursorPos = controls->GetCursorPosition();
|
||||
cursorPos = controls->GetCursorPosition( !evt->Modifier( MD_ALT ) );
|
||||
|
||||
if( reselect && module )
|
||||
m_toolMgr->RunAction( PCB_ACTIONS::selectItem, true, module );
|
||||
|
@ -625,7 +625,7 @@ int PCB_EDITOR_CONTROL::PlaceTarget( const TOOL_EVENT& aEvent )
|
|||
// Main loop: keep receiving events
|
||||
while( OPT_TOOL_EVENT evt = Wait() )
|
||||
{
|
||||
cursorPos = controls->GetCursorPosition();
|
||||
cursorPos = controls->GetCursorPosition( !evt->Modifier( MD_ALT ) );
|
||||
|
||||
if( TOOL_EVT_UTILS::IsCancelInteractive( *evt ) )
|
||||
break;
|
||||
|
|
Loading…
Reference in New Issue