diff --git a/pcbnew/dialogs/dialog_drc.cpp b/pcbnew/dialogs/dialog_drc.cpp index b2f1f8da6a..9f5afd07dc 100644 --- a/pcbnew/dialogs/dialog_drc.cpp +++ b/pcbnew/dialogs/dialog_drc.cpp @@ -320,22 +320,8 @@ void DIALOG_DRC_CONTROL::OnLeftDClickClearance( wxMouseEvent& event ) if( selection != wxNOT_FOUND ) { - // Find the selected MARKER in the PCB, position cursor there. - // Then close the dialog. - const DRC_ITEM* item = m_ClearanceListBox->GetItem( selection ); - - if( item ) + if( focusOnItem( m_ClearanceListBox->GetItem( selection ) ) ) { - auto pos = item->GetPointA(); - - if( auto marker = item->GetParent() ) - pos = marker->GetPos(); - - // When selecting a item, center it on GAL and just move the graphic - // cursor in legacy mode gives the best result - bool center = m_brdEditor->IsGalCanvasActive() ? true : false; - m_brdEditor->FocusOnLocation( pos, true, center ); - if( !IsModal() ) { // turn control over to m_brdEditor, hide this DIALOG_DRC_CONTROL window, @@ -354,19 +340,62 @@ void DIALOG_DRC_CONTROL::OnLeftDClickClearance( wxMouseEvent& event ) void DIALOG_DRC_CONTROL::OnRightUpFootprints( wxMouseEvent& event ) { // popup menu to go to either of the items listed in the DRC_ITEM. + // Check if user right-clicked on a different item + int selection = m_FootprintsListBox->HitTest( event.GetPosition() ); - int selection = m_FootprintsListBox->GetSelection(); + if( selection == wxNOT_FOUND ) + selection = m_FootprintsListBox->GetSelection(); + else + m_FootprintsListBox->SetSelection( selection ); if( selection != wxNOT_FOUND ) doSelectionMenu( m_FootprintsListBox->GetItem( selection ) ); } +void DIALOG_DRC_CONTROL::OnLeftUpClearance( wxMouseEvent& event ) +{ + int selection = m_ClearanceListBox->GetSelection(); + + if( selection != wxNOT_FOUND ) + focusOnItem( m_ClearanceListBox->GetItem( selection ) ); +} + + +bool DIALOG_DRC_CONTROL::focusOnItem( const DRC_ITEM* aItem ) +{ + if( !aItem ) + return false; + + auto toolmgr = m_brdEditor->GetToolManager(); + auto pos = aItem->GetPointA(); + auto marker = static_cast( aItem->GetParent() ); + + if( marker ) + { + pos = marker->GetPos(); + + toolmgr->RunAction( PCB_ACTIONS::selectionClear, true ); + toolmgr->RunAction( PCB_ACTIONS::selectItem, true, marker ); + } + + toolmgr->GetView()->SetCenter( pos ); + m_brdEditor->GetCanvas()->Refresh(); + + return true; +} + + void DIALOG_DRC_CONTROL::OnRightUpUnconnected( wxMouseEvent& event ) { // popup menu to go to either of the items listed in the DRC_ITEM. + // Check if user right-clicked on a different item + int selection = m_UnconnectedListBox->HitTest( event.GetPosition() ); - int selection = m_UnconnectedListBox->GetSelection(); + if( selection == wxNOT_FOUND ) + selection = m_UnconnectedListBox->GetSelection(); + else + m_UnconnectedListBox->SetSelection( selection ); if( selection != wxNOT_FOUND ) doSelectionMenu( m_UnconnectedListBox->GetItem( selection ) ); @@ -376,8 +405,13 @@ void DIALOG_DRC_CONTROL::OnRightUpUnconnected( wxMouseEvent& event ) void DIALOG_DRC_CONTROL::OnRightUpClearance( wxMouseEvent& event ) { // popup menu to go to either of the items listed in the DRC_ITEM. + // Check if user right-clicked on a different item + int selection = m_ClearanceListBox->HitTest( event.GetPosition() ); - int selection = m_ClearanceListBox->GetSelection(); + if( selection == wxNOT_FOUND ) + selection = m_ClearanceListBox->GetSelection(); + else + m_ClearanceListBox->SetSelection( selection ); if( selection != wxNOT_FOUND ) doSelectionMenu( m_ClearanceListBox->GetItem( selection ) ); @@ -387,15 +421,29 @@ void DIALOG_DRC_CONTROL::OnRightUpClearance( wxMouseEvent& event ) void DIALOG_DRC_CONTROL::doSelectionMenu( const DRC_ITEM* aItem ) { // popup menu to go to either of the items listed in the DRC_ITEM. + + BOARD_ITEM* first = aItem->GetMainItem( m_brdEditor->GetBoard() ); + BOARD_ITEM* second = nullptr; + GENERAL_COLLECTOR items; - items.Append( aItem->GetMainItem( m_brdEditor->GetBoard() ) ); + items.Append( first ); if( aItem->HasSecondItem() ) - items.Append( aItem->GetAuxiliaryItem( m_brdEditor->GetBoard() ) ); + { + second = aItem->GetAuxiliaryItem( m_brdEditor->GetBoard() ); + items.Append( second ); + } WINDOW_THAWER thawer( m_brdEditor ); m_brdEditor->GetToolManager()->RunAction( PCB_ACTIONS::selectionMenu, true, &items ); + + // If we got an item, focus on it + BOARD_ITEM* selection = m_brdEditor->GetCurItem(); + + if( selection && ( selection == first || selection == second ) ) + m_brdEditor->GetToolManager()->GetView()->SetCenter( selection->GetPosition() ); + m_brdEditor->GetCanvas()->Refresh(); } @@ -410,14 +458,8 @@ void DIALOG_DRC_CONTROL::OnLeftDClickFootprints( wxMouseEvent& event ) { // Find the selected DRC_ITEM in the listbox, position cursor there. // Then hide the dialog. - const DRC_ITEM* item = m_FootprintsListBox->GetItem( selection ); - if( item ) + if( focusOnItem( m_FootprintsListBox->GetItem( selection ) ) ) { - // When selecting a item, center it on GAL and just move the graphic - // cursor in legacy mode gives the best result - bool center = m_brdEditor->IsGalCanvasActive() ? true : false; - m_brdEditor->FocusOnLocation( item->GetPointA(), true, center ); - if( !IsModal() ) { Show( false ); @@ -439,18 +481,12 @@ void DIALOG_DRC_CONTROL::OnLeftDClickUnconnected( wxMouseEvent& event ) if( selection != wxNOT_FOUND ) { - // Find the selected DRC_ITEM in the listbox, position cursor there. - // Then hide the dialog. - const DRC_ITEM* item = m_UnconnectedListBox->GetItem( selection ); - if( item ) + if( focusOnItem( m_UnconnectedListBox->GetItem( selection ) ) ) { - // When selecting a item, center it on GAL and just move the graphic - // cursor in legacy mode gives the best result - bool center = m_brdEditor->IsGalCanvasActive() ? true : false; - m_brdEditor->FocusOnLocation( item->GetPointA(), true, center ); - if( !IsModal() ) { + // turn control over to m_brdEditor, hide this DIALOG_DRC_CONTROL window, + // no destruction so we can preserve listbox cursor Show( false ); // We do not want the clarify selection popup when releasing the @@ -462,6 +498,15 @@ void DIALOG_DRC_CONTROL::OnLeftDClickUnconnected( wxMouseEvent& event ) } +void DIALOG_DRC_CONTROL::OnLeftUpUnconnected( wxMouseEvent& event ) +{ + int selection = m_UnconnectedListBox->GetSelection(); + + if( selection != wxNOT_FOUND ) + focusOnItem( m_UnconnectedListBox->GetItem( selection ) ); +} + + /* called when switching from Error list to Unconnected list * To avoid mistakes, the current marker is selection is cleared */ @@ -487,20 +532,7 @@ void DIALOG_DRC_CONTROL::OnMarkerSelectionEvent( wxCommandEvent& event ) m_DeleteCurrentMarkerButton->Enable( true ); // Find the selected DRC_ITEM in the listbox, position cursor there. - const DRC_ITEM* item = m_ClearanceListBox->GetItem( selection ); - if( item ) - { - auto pos = item->GetPointA(); - - if( auto marker = item->GetParent() ) - pos = marker->GetPos(); - - // When selecting a item, center it on GAL and just move the graphic - // cursor in legacy mode gives the best result - bool center = m_brdEditor->IsGalCanvasActive() ? true : false; - m_brdEditor->FocusOnLocation( pos, false, center ); - RedrawDrawPanel(); - } + focusOnItem( m_ClearanceListBox->GetItem( selection ) ); } event.Skip(); @@ -517,16 +549,7 @@ void DIALOG_DRC_CONTROL::OnUnconnectedSelectionEvent( wxCommandEvent& event ) m_DeleteCurrentMarkerButton->Enable( true ); // Find the selected DRC_ITEM in the listbox, position cursor there. - const DRC_ITEM* item = m_UnconnectedListBox->GetItem( selection ); - - if( item ) - { - // When selecting a item, center it on GAL and just move the graphic - // cursor in legacy mode gives the best result - bool center = m_brdEditor->IsGalCanvasActive() ? true : false; - m_brdEditor->FocusOnLocation( item->GetPointA(), false, center ); - RedrawDrawPanel(); - } + focusOnItem( m_UnconnectedListBox->GetItem( selection ) ); } event.Skip(); @@ -543,16 +566,7 @@ void DIALOG_DRC_CONTROL::OnFootprintsSelectionEvent( wxCommandEvent& event ) m_DeleteCurrentMarkerButton->Enable( true ); // Find the selected DRC_ITEM in the listbox, position cursor there. - const DRC_ITEM* item = m_FootprintsListBox->GetItem( selection ); - - if( item ) - { - // When selecting a item, center it on GAL and just move the graphic - // cursor in legacy mode gives the best result - bool center = m_brdEditor->IsGalCanvasActive() ? true : false; - m_brdEditor->FocusOnLocation( item->GetPointA(), false, center ); - RedrawDrawPanel(); - } + focusOnItem( m_FootprintsListBox->GetItem( selection ) ); } event.Skip(); diff --git a/pcbnew/dialogs/dialog_drc.h b/pcbnew/dialogs/dialog_drc.h index 84a945d89b..e9702b3956 100644 --- a/pcbnew/dialogs/dialog_drc.h +++ b/pcbnew/dialogs/dialog_drc.h @@ -115,12 +115,18 @@ private: /// wxEVT_LEFT_DCLICK event handler for ID_CLEARANCE_LIST void OnLeftDClickClearance( wxMouseEvent& event ) override; + /// wxEVT_LEFT_UP event handler for ID_CLEARANCE_LIST + void OnLeftUpClearance( wxMouseEvent& event ) override; + /// wxEVT_RIGHT_UP event handler for ID_CLEARANCE_LIST void OnRightUpClearance( wxMouseEvent& event ) override; /// wxEVT_LEFT_DCLICK event handler for ID_UNCONNECTED_LIST void OnLeftDClickUnconnected( wxMouseEvent& event ) override; + /// wxEVT_LEFT_UP event handler for ID_UNCONNECTED_LIST + void OnLeftUpUnconnected( wxMouseEvent& event ) override; + /// wxEVT_RIGHT_UP event handler for ID_UNCONNECTED_LIST void OnRightUpUnconnected( wxMouseEvent& event ) override; @@ -149,6 +155,8 @@ private: /// in the DRC_ITEM. void doSelectionMenu( const DRC_ITEM* aItem ); + bool focusOnItem( const DRC_ITEM* aItem ); + BOARD* m_currentBoard; // the board currently on test DRC* m_tester; PCB_EDIT_FRAME* m_brdEditor; diff --git a/pcbnew/dialogs/dialog_drc_base.cpp b/pcbnew/dialogs/dialog_drc_base.cpp index b6f1f1aa8b..1b48992ecb 100644 --- a/pcbnew/dialogs/dialog_drc_base.cpp +++ b/pcbnew/dialogs/dialog_drc_base.cpp @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////// -// C++ code generated with wxFormBuilder (version Dec 30 2017) +// C++ code generated with wxFormBuilder (version Oct 26 2018) // http://www.wxformbuilder.org/ // // PLEASE DO *NOT* EDIT THIS FILE! @@ -14,147 +14,147 @@ DIALOG_DRC_CONTROL_BASE::DIALOG_DRC_CONTROL_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* m_MainSizer; m_MainSizer = new wxBoxSizer( wxVERTICAL ); - + wxGridBagSizer* gbSizer1; gbSizer1 = new wxGridBagSizer( 0, 10 ); gbSizer1->SetFlexibleDirection( wxBOTH ); gbSizer1->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED ); - + wxBoxSizer* bSizerOptions; bSizerOptions = new wxBoxSizer( wxVERTICAL ); - + wxFlexGridSizer* fgMinValuesSizer; fgMinValuesSizer = new wxFlexGridSizer( 4, 3, 0, 0 ); fgMinValuesSizer->AddGrowableCol( 1 ); fgMinValuesSizer->SetFlexibleDirection( wxHORIZONTAL ); fgMinValuesSizer->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED ); - + m_TrackMinWidthTitle = new wxStaticText( this, wxID_ANY, _("Minimum track width:"), wxDefaultPosition, wxDefaultSize, 0 ); m_TrackMinWidthTitle->Wrap( -1 ); m_TrackMinWidthTitle->SetToolTip( _("Enter the minimum acceptable value for a track width") ); - + fgMinValuesSizer->Add( m_TrackMinWidthTitle, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxLEFT, 5 ); - + m_SetTrackMinWidthCtrl = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); fgMinValuesSizer->Add( m_SetTrackMinWidthCtrl, 0, wxEXPAND|wxTOP|wxRIGHT|wxLEFT, 3 ); - + m_TrackMinWidthUnit = new wxStaticText( this, wxID_ANY, _("unit"), wxDefaultPosition, wxDefaultSize, 0 ); m_TrackMinWidthUnit->Wrap( -1 ); m_TrackMinWidthUnit->SetToolTip( _("Enter the minimum acceptable value for a track width") ); - + fgMinValuesSizer->Add( m_TrackMinWidthUnit, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 ); - + m_ViaMinTitle = new wxStaticText( this, wxID_ANY, _("Minimum via size:"), wxDefaultPosition, wxDefaultSize, 0 ); m_ViaMinTitle->Wrap( -1 ); m_ViaMinTitle->SetHelpText( _("Enter the minimum acceptable diameter for a standard via") ); - + fgMinValuesSizer->Add( m_ViaMinTitle, 0, wxALIGN_CENTER_VERTICAL|wxLEFT, 5 ); - + m_SetViaMinSizeCtrl = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); fgMinValuesSizer->Add( m_SetViaMinSizeCtrl, 0, wxEXPAND|wxTOP|wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL, 3 ); - + m_ViaMinUnit = new wxStaticText( this, wxID_ANY, _("unit"), wxDefaultPosition, wxDefaultSize, 0 ); m_ViaMinUnit->Wrap( -1 ); m_ViaMinUnit->SetHelpText( _("Enter the minimum acceptable diameter for a standard via") ); - + fgMinValuesSizer->Add( m_ViaMinUnit, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 ); - + m_MicroViaMinTitle = new wxStaticText( this, wxID_ANY, _("Minimum uVia size:"), wxDefaultPosition, wxDefaultSize, 0 ); m_MicroViaMinTitle->Wrap( -1 ); m_MicroViaMinTitle->SetToolTip( _("Enter the minimum acceptable diameter for a micro via") ); - + fgMinValuesSizer->Add( m_MicroViaMinTitle, 0, wxALIGN_CENTER_VERTICAL|wxLEFT, 5 ); - + m_SetMicroViakMinSizeCtrl = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); fgMinValuesSizer->Add( m_SetMicroViakMinSizeCtrl, 0, wxEXPAND|wxTOP|wxRIGHT|wxLEFT, 3 ); - + m_MicroViaMinUnit = new wxStaticText( this, wxID_ANY, _("unit"), wxDefaultPosition, wxDefaultSize, 0 ); m_MicroViaMinUnit->Wrap( -1 ); m_MicroViaMinUnit->SetToolTip( _("Enter the minimum acceptable diameter for a micro via") ); - + fgMinValuesSizer->Add( m_MicroViaMinUnit, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 ); - - + + bSizerOptions->Add( fgMinValuesSizer, 0, wxEXPAND|wxTOP|wxBOTTOM, 5 ); - + wxBoxSizer* bSizerOptSettings; bSizerOptSettings = new wxBoxSizer( wxVERTICAL ); - + m_cbRefillZones = new wxCheckBox( this, wxID_ANY, _("Refill all zones before performing DRC"), wxDefaultPosition, wxDefaultSize, 0 ); bSizerOptSettings->Add( m_cbRefillZones, 0, wxALL, 5 ); - + m_cbReportAllTrackErrors = new wxCheckBox( this, wxID_ANY, _("Report all errors for tracks (slower)"), wxDefaultPosition, wxDefaultSize, 0 ); m_cbReportAllTrackErrors->SetToolTip( _("If selected, all DRC violations for tracks will be reported. This can be slow for complicated designs.\n\nIf unselected, only the first DRC violation will be reported for each track connection.") ); - + bSizerOptSettings->Add( m_cbReportAllTrackErrors, 0, wxBOTTOM|wxRIGHT|wxLEFT, 5 ); - + m_cbReportTracksToZonesErrors = new wxCheckBox( this, wxID_ANY, _("Test tracks against filled copper areas (very slow)"), wxDefaultPosition, wxDefaultSize, 0 ); m_cbReportTracksToZonesErrors->SetToolTip( _("If selected, tracks will be tested against copper zones. \nIf copper zones are up to date, this test should be not needed.\n\nThis test can be *very slow* for complicated designs.") ); - + bSizerOptSettings->Add( m_cbReportTracksToZonesErrors, 0, wxBOTTOM|wxRIGHT|wxLEFT, 5 ); - + m_cbTestFootprints = new wxCheckBox( this, wxID_ANY, _("Test footprints against schematic"), wxDefaultPosition, wxDefaultSize, 0 ); bSizerOptSettings->Add( m_cbTestFootprints, 0, wxBOTTOM|wxRIGHT|wxLEFT, 5 ); - - + + bSizerOptions->Add( bSizerOptSettings, 1, wxEXPAND, 5 ); - - + + gbSizer1->Add( bSizerOptions, wxGBPosition( 0, 0 ), wxGBSpan( 1, 1 ), wxEXPAND|wxRIGHT|wxLEFT, 5 ); - + m_Messages = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxHSCROLL|wxTE_MULTILINE|wxTE_READONLY ); m_Messages->SetMinSize( wxSize( 280,-1 ) ); - + gbSizer1->Add( m_Messages, wxGBPosition( 0, 1 ), wxGBSpan( 1, 1 ), wxEXPAND|wxTOP|wxLEFT, 5 ); - + wxFlexGridSizer* fgSizerRpt; fgSizerRpt = new wxFlexGridSizer( 0, 3, 0, 0 ); fgSizerRpt->AddGrowableCol( 1 ); fgSizerRpt->SetFlexibleDirection( wxBOTH ); fgSizerRpt->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED ); - + m_CreateRptCtrl = new wxCheckBox( this, ID_CHECKBOX_RPT_FILE, _("Create report file:"), wxDefaultPosition, wxDefaultSize, 0 ); m_CreateRptCtrl->SetToolTip( _("Enable writing report to this file") ); - + fgSizerRpt->Add( m_CreateRptCtrl, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 10 ); - + m_RptFilenameCtrl = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); m_RptFilenameCtrl->SetToolTip( _("Enter the report filename") ); m_RptFilenameCtrl->SetMinSize( wxSize( 180,-1 ) ); - + fgSizerRpt->Add( m_RptFilenameCtrl, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND|wxTOP|wxBOTTOM, 3 ); - - m_BrowseButton = new wxBitmapButton( this, ID_BUTTON_BROWSE_RPT_FILE, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); + + m_BrowseButton = new wxBitmapButton( this, ID_BUTTON_BROWSE_RPT_FILE, wxNullBitmap, wxDefaultPosition, wxDefaultSize, wxBU_AUTODRAW|0 ); m_BrowseButton->SetMinSize( wxSize( 30,28 ) ); - + fgSizerRpt->Add( m_BrowseButton, 0, wxALIGN_CENTER_VERTICAL, 2 ); - - + + gbSizer1->Add( fgSizerRpt, wxGBPosition( 1, 0 ), wxGBSpan( 1, 3 ), wxEXPAND|wxTOP|wxRIGHT, 7 ); - - + + gbSizer1->AddGrowableCol( 0 ); gbSizer1->AddGrowableCol( 1 ); - + m_MainSizer->Add( gbSizer1, 0, wxEXPAND|wxALL, 5 ); - + m_Notebook = new wxNotebook( this, ID_NOTEBOOK1, wxDefaultPosition, wxDefaultSize, 0 ); m_Notebook->SetMinSize( wxSize( 640,280 ) ); - + m_panelViolations = new wxPanel( m_Notebook, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); wxBoxSizer* bSizerViolationsBox; bSizerViolationsBox = new wxBoxSizer( wxVERTICAL ); - - m_ClearanceListBox = new DRCLISTBOX( m_panelViolations, ID_CLEARANCE_LIST, wxDefaultPosition, wxDefaultSize, 0, NULL, 0 ); + + m_ClearanceListBox = new DRCLISTBOX( m_panelViolations, ID_CLEARANCE_LIST, wxDefaultPosition, wxDefaultSize, 0, NULL, 0 ); m_ClearanceListBox->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_NORMAL, false, wxEmptyString ) ); m_ClearanceListBox->SetToolTip( _("Left-click to center on problem marker. Right-click to highlight items.") ); - + bSizerViolationsBox->Add( m_ClearanceListBox, 1, wxEXPAND|wxALL, 5 ); - - + + m_panelViolations->SetSizer( bSizerViolationsBox ); m_panelViolations->Layout(); bSizerViolationsBox->Fit( m_panelViolations ); @@ -162,13 +162,13 @@ DIALOG_DRC_CONTROL_BASE::DIALOG_DRC_CONTROL_BASE( wxWindow* parent, wxWindowID i m_panelUnconnectedItems = new wxPanel( m_Notebook, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); wxBoxSizer* bSizerUnconnectedBox; bSizerUnconnectedBox = new wxBoxSizer( wxVERTICAL ); - - m_UnconnectedListBox = new DRCLISTBOX( m_panelUnconnectedItems, ID_UNCONNECTED_LIST, wxDefaultPosition, wxDefaultSize, 0, NULL, 0 ); + + m_UnconnectedListBox = new DRCLISTBOX( m_panelUnconnectedItems, ID_UNCONNECTED_LIST, wxDefaultPosition, wxDefaultSize, 0, NULL, 0 ); m_UnconnectedListBox->SetToolTip( _("Left-click to center on unconnected pair. Right-click to highlight unconnected items.") ); - + bSizerUnconnectedBox->Add( m_UnconnectedListBox, 1, wxALL|wxEXPAND, 5 ); - - + + m_panelUnconnectedItems->SetSizer( bSizerUnconnectedBox ); m_panelUnconnectedItems->Layout(); bSizerUnconnectedBox->Fit( m_panelUnconnectedItems ); @@ -176,43 +176,43 @@ DIALOG_DRC_CONTROL_BASE::DIALOG_DRC_CONTROL_BASE( wxWindow* parent, wxWindowID i m_panelFootprintWarnings = new wxPanel( m_Notebook, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); wxBoxSizer* bSizerFootprintsBox; bSizerFootprintsBox = new wxBoxSizer( wxVERTICAL ); - - m_FootprintsListBox = new DRCLISTBOX( m_panelFootprintWarnings, ID_FOOTPRINTS_LIST, wxDefaultPosition, wxDefaultSize, 0, NULL, 0 ); + + m_FootprintsListBox = new DRCLISTBOX( m_panelFootprintWarnings, ID_FOOTPRINTS_LIST, wxDefaultPosition, wxDefaultSize, 0, NULL, 0 ); bSizerFootprintsBox->Add( m_FootprintsListBox, 1, wxALL|wxEXPAND, 5 ); - - + + m_panelFootprintWarnings->SetSizer( bSizerFootprintsBox ); m_panelFootprintWarnings->Layout(); bSizerFootprintsBox->Fit( m_panelFootprintWarnings ); m_Notebook->AddPage( m_panelFootprintWarnings, _("Footprint Warnings (%d)"), false ); - + m_MainSizer->Add( m_Notebook, 1, wxEXPAND|wxLEFT|wxRIGHT, 5 ); - + m_sizerButtons = new wxBoxSizer( wxHORIZONTAL ); - + m_DeleteCurrentMarkerButton = new wxButton( this, wxID_ANY, _("Delete Marker"), wxDefaultPosition, wxDefaultSize, 0 ); m_sizerButtons->Add( m_DeleteCurrentMarkerButton, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 10 ); - + m_DeleteAllMarkersButton = new wxButton( this, wxID_ANY, _("Delete All Markers"), wxDefaultPosition, wxDefaultSize, 0 ); m_sizerButtons->Add( m_DeleteAllMarkersButton, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 ); - + m_sdbSizer1 = new wxStdDialogButtonSizer(); m_sdbSizer1OK = new wxButton( this, wxID_OK ); m_sdbSizer1->AddButton( m_sdbSizer1OK ); m_sdbSizer1Cancel = new wxButton( this, wxID_CANCEL ); m_sdbSizer1->AddButton( m_sdbSizer1Cancel ); m_sdbSizer1->Realize(); - + m_sizerButtons->Add( m_sdbSizer1, 1, wxEXPAND|wxALL, 5 ); - - + + m_MainSizer->Add( m_sizerButtons, 0, wxEXPAND|wxLEFT, 5 ); - - + + this->SetSizer( m_MainSizer ); this->Layout(); m_MainSizer->Fit( this ); - + // Connect Events this->Connect( wxEVT_ACTIVATE, wxActivateEventHandler( DIALOG_DRC_CONTROL_BASE::OnActivateDlg ) ); m_CreateRptCtrl->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( DIALOG_DRC_CONTROL_BASE::OnReportCheckBoxClicked ), NULL, this ); @@ -220,9 +220,11 @@ DIALOG_DRC_CONTROL_BASE::DIALOG_DRC_CONTROL_BASE( wxWindow* parent, wxWindowID i m_BrowseButton->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_DRC_CONTROL_BASE::OnButtonBrowseRptFileClick ), NULL, this ); m_Notebook->Connect( wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGED, wxNotebookEventHandler( DIALOG_DRC_CONTROL_BASE::OnChangingMarkerList ), NULL, this ); m_ClearanceListBox->Connect( wxEVT_LEFT_DCLICK, wxMouseEventHandler( DIALOG_DRC_CONTROL_BASE::OnLeftDClickClearance ), NULL, this ); + m_ClearanceListBox->Connect( wxEVT_LEFT_UP, wxMouseEventHandler( DIALOG_DRC_CONTROL_BASE::OnLeftUpClearance ), NULL, this ); m_ClearanceListBox->Connect( wxEVT_COMMAND_LISTBOX_SELECTED, wxCommandEventHandler( DIALOG_DRC_CONTROL_BASE::OnMarkerSelectionEvent ), NULL, this ); m_ClearanceListBox->Connect( wxEVT_RIGHT_UP, wxMouseEventHandler( DIALOG_DRC_CONTROL_BASE::OnRightUpClearance ), NULL, this ); m_UnconnectedListBox->Connect( wxEVT_LEFT_DCLICK, wxMouseEventHandler( DIALOG_DRC_CONTROL_BASE::OnLeftDClickUnconnected ), NULL, this ); + m_UnconnectedListBox->Connect( wxEVT_LEFT_UP, wxMouseEventHandler( DIALOG_DRC_CONTROL_BASE::OnLeftUpUnconnected ), NULL, this ); m_UnconnectedListBox->Connect( wxEVT_COMMAND_LISTBOX_SELECTED, wxCommandEventHandler( DIALOG_DRC_CONTROL_BASE::OnUnconnectedSelectionEvent ), NULL, this ); m_UnconnectedListBox->Connect( wxEVT_RIGHT_UP, wxMouseEventHandler( DIALOG_DRC_CONTROL_BASE::OnRightUpUnconnected ), NULL, this ); m_FootprintsListBox->Connect( wxEVT_LEFT_DCLICK, wxMouseEventHandler( DIALOG_DRC_CONTROL_BASE::OnLeftDClickFootprints ), NULL, this ); @@ -243,9 +245,11 @@ DIALOG_DRC_CONTROL_BASE::~DIALOG_DRC_CONTROL_BASE() m_BrowseButton->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_DRC_CONTROL_BASE::OnButtonBrowseRptFileClick ), NULL, this ); m_Notebook->Disconnect( wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGED, wxNotebookEventHandler( DIALOG_DRC_CONTROL_BASE::OnChangingMarkerList ), NULL, this ); m_ClearanceListBox->Disconnect( wxEVT_LEFT_DCLICK, wxMouseEventHandler( DIALOG_DRC_CONTROL_BASE::OnLeftDClickClearance ), NULL, this ); + m_ClearanceListBox->Disconnect( wxEVT_LEFT_UP, wxMouseEventHandler( DIALOG_DRC_CONTROL_BASE::OnLeftUpClearance ), NULL, this ); m_ClearanceListBox->Disconnect( wxEVT_COMMAND_LISTBOX_SELECTED, wxCommandEventHandler( DIALOG_DRC_CONTROL_BASE::OnMarkerSelectionEvent ), NULL, this ); m_ClearanceListBox->Disconnect( wxEVT_RIGHT_UP, wxMouseEventHandler( DIALOG_DRC_CONTROL_BASE::OnRightUpClearance ), NULL, this ); m_UnconnectedListBox->Disconnect( wxEVT_LEFT_DCLICK, wxMouseEventHandler( DIALOG_DRC_CONTROL_BASE::OnLeftDClickUnconnected ), NULL, this ); + m_UnconnectedListBox->Disconnect( wxEVT_LEFT_UP, wxMouseEventHandler( DIALOG_DRC_CONTROL_BASE::OnLeftUpUnconnected ), NULL, this ); m_UnconnectedListBox->Disconnect( wxEVT_COMMAND_LISTBOX_SELECTED, wxCommandEventHandler( DIALOG_DRC_CONTROL_BASE::OnUnconnectedSelectionEvent ), NULL, this ); m_UnconnectedListBox->Disconnect( wxEVT_RIGHT_UP, wxMouseEventHandler( DIALOG_DRC_CONTROL_BASE::OnRightUpUnconnected ), NULL, this ); m_FootprintsListBox->Disconnect( wxEVT_LEFT_DCLICK, wxMouseEventHandler( DIALOG_DRC_CONTROL_BASE::OnLeftDClickFootprints ), NULL, this ); @@ -255,5 +259,5 @@ DIALOG_DRC_CONTROL_BASE::~DIALOG_DRC_CONTROL_BASE() m_DeleteAllMarkersButton->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_DRC_CONTROL_BASE::OnDeleteAllClick ), NULL, this ); m_sdbSizer1Cancel->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_DRC_CONTROL_BASE::OnCancelClick ), NULL, this ); m_sdbSizer1OK->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_DRC_CONTROL_BASE::OnStartdrcClick ), NULL, this ); - + } diff --git a/pcbnew/dialogs/dialog_drc_base.fbp b/pcbnew/dialogs/dialog_drc_base.fbp index cd7e507586..0bc3bdb061 100644 --- a/pcbnew/dialogs/dialog_drc_base.fbp +++ b/pcbnew/dialogs/dialog_drc_base.fbp @@ -1,6 +1,6 @@ - + C++ @@ -14,6 +14,7 @@ dialog_drc_base 1000 none + 1 dialog_drc_base @@ -53,41 +54,6 @@ OnActivateDlg - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - m_MainSizer @@ -169,6 +135,7 @@ 0 wxID_ANY Minimum track width: + 0 0 @@ -194,29 +161,6 @@ -1 - - - - - - - - - - - - - - - - - - - - - - - @@ -281,33 +225,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -343,6 +260,7 @@ 0 wxID_ANY unit + 0 0 @@ -368,29 +286,6 @@ -1 - - - - - - - - - - - - - - - - - - - - - - - @@ -426,6 +321,7 @@ 0 wxID_ANY Minimum via size: + 0 0 @@ -451,29 +347,6 @@ -1 - - - - - - - - - - - - - - - - - - - - - - - @@ -538,33 +411,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -600,6 +446,7 @@ 0 wxID_ANY unit + 0 0 @@ -625,29 +472,6 @@ -1 - - - - - - - - - - - - - - - - - - - - - - - @@ -683,6 +507,7 @@ 0 wxID_ANY Minimum uVia size: + 0 0 @@ -708,29 +533,6 @@ -1 - - - - - - - - - - - - - - - - - - - - - - - @@ -795,33 +597,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -857,6 +632,7 @@ 0 wxID_ANY unit + 0 0 @@ -882,29 +658,6 @@ -1 - - - - - - - - - - - - - - - - - - - - - - - @@ -980,30 +733,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - @@ -1068,30 +797,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - @@ -1156,30 +861,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - @@ -1244,30 +925,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - @@ -1339,33 +996,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -1449,30 +1079,7 @@ - OnReportCheckBoxClicked - - - - - - - - - - - - - - - - - - - - - - @@ -1537,33 +1144,7 @@ - - - - - - - - - - - - - - - - - - - - - - OnReportFilenameEdited - - - - @@ -1588,6 +1169,7 @@ 1 1 + 0 0 @@ -1601,9 +1183,10 @@ 0 0 - ID_BUTTON_BROWSE_RPT_FILE Browse + + 0 0 @@ -1618,8 +1201,9 @@ protected 1 + + Resizable - 1 @@ -1634,29 +1218,6 @@ OnButtonBrowseRptFileClick - - - - - - - - - - - - - - - - - - - - - - - @@ -1720,31 +1281,7 @@ - - - - - - - - - - - - - - - - OnChangingMarkerList - - - - - - - - Violations / Markers (%d) @@ -1800,29 +1337,6 @@ wxTAB_TRAVERSAL - - - - - - - - - - - - - - - - - - - - - - - bSizerViolationsBox @@ -1889,31 +1403,10 @@ - - - - - - - OnLeftDClickClearance - - + OnLeftUpClearance OnMarkerSelectionEvent - - - - - - - - - - OnRightUpClearance - - - @@ -1974,29 +1467,6 @@ wxTAB_TRAVERSAL - - - - - - - - - - - - - - - - - - - - - - - bSizerUnconnectedBox @@ -2063,31 +1533,10 @@ - - - - - - - OnLeftDClickUnconnected - - + OnLeftUpUnconnected OnUnconnectedSelectionEvent - - - - - - - - - - OnRightUpUnconnected - - - @@ -2148,29 +1597,6 @@ wxTAB_TRAVERSAL - - - - - - - - - - - - - - - - - - - - - - - bSizerFootprintsBox @@ -2237,31 +1663,9 @@ - - - - - - - OnLeftDClickFootprints - - OnFootprintsSelectionEvent - - - - - - - - - - OnRightUpFootprints - - - @@ -2293,25 +1697,31 @@ + 1 0 1 1 + 0 0 + Dock 0 Left 1 1 + 0 0 wxID_ANY Delete Marker + + 0 0 @@ -2326,6 +1736,8 @@ protected 1 + + Resizable 1 @@ -2341,29 +1753,6 @@ OnDeleteOneClick - - - - - - - - - - - - - - - - - - - - - - - @@ -2381,25 +1770,31 @@ + 1 0 1 1 + 0 0 + Dock 0 Left 1 1 + 0 0 wxID_ANY Delete All Markers + + 0 0 @@ -2414,6 +1809,8 @@ protected 1 + + Resizable 1 @@ -2429,29 +1826,6 @@ OnDeleteAllClick - - - - - - - - - - - - - - - - - - - - - - - @@ -2470,14 +1844,8 @@ m_sdbSizer1 protected - OnCancelClick - - - OnStartdrcClick - - diff --git a/pcbnew/dialogs/dialog_drc_base.h b/pcbnew/dialogs/dialog_drc_base.h index ef637f60dc..b01d36c9c3 100644 --- a/pcbnew/dialogs/dialog_drc_base.h +++ b/pcbnew/dialogs/dialog_drc_base.h @@ -1,12 +1,11 @@ /////////////////////////////////////////////////////////////////////////// -// C++ code generated with wxFormBuilder (version Dec 30 2017) +// C++ code generated with wxFormBuilder (version Oct 26 2018) // http://www.wxformbuilder.org/ // // PLEASE DO *NOT* EDIT THIS FILE! /////////////////////////////////////////////////////////////////////////// -#ifndef __DIALOG_DRC_BASE_H__ -#define __DIALOG_DRC_BASE_H__ +#pragma once #include #include @@ -23,10 +22,10 @@ class DRCLISTBOX; #include #include #include +#include #include #include #include -#include #include #include #include @@ -50,7 +49,7 @@ class DIALOG_DRC_CONTROL_BASE : public DIALOG_SHIM { private: wxPanel* m_panelUnconnectedItems; - + protected: wxStaticText* m_TrackMinWidthTitle; wxStaticText* m_TrackMinWidthUnit; @@ -75,7 +74,7 @@ class DIALOG_DRC_CONTROL_BASE : public DIALOG_SHIM wxStdDialogButtonSizer* m_sdbSizer1; wxButton* m_sdbSizer1OK; wxButton* m_sdbSizer1Cancel; - + // Virtual event handlers, overide them in your derived class virtual void OnActivateDlg( wxActivateEvent& event ) { event.Skip(); } virtual void OnReportCheckBoxClicked( wxCommandEvent& event ) { event.Skip(); } @@ -83,9 +82,11 @@ class DIALOG_DRC_CONTROL_BASE : public DIALOG_SHIM virtual void OnButtonBrowseRptFileClick( wxCommandEvent& event ) { event.Skip(); } virtual void OnChangingMarkerList( wxNotebookEvent& event ) { event.Skip(); } virtual void OnLeftDClickClearance( wxMouseEvent& event ) { event.Skip(); } + virtual void OnLeftUpClearance( wxMouseEvent& event ) { event.Skip(); } virtual void OnMarkerSelectionEvent( wxCommandEvent& event ) { event.Skip(); } virtual void OnRightUpClearance( wxMouseEvent& event ) { event.Skip(); } virtual void OnLeftDClickUnconnected( wxMouseEvent& event ) { event.Skip(); } + virtual void OnLeftUpUnconnected( wxMouseEvent& event ) { event.Skip(); } virtual void OnUnconnectedSelectionEvent( wxCommandEvent& event ) { event.Skip(); } virtual void OnRightUpUnconnected( wxMouseEvent& event ) { event.Skip(); } virtual void OnLeftDClickFootprints( wxMouseEvent& event ) { event.Skip(); } @@ -95,8 +96,8 @@ class DIALOG_DRC_CONTROL_BASE : public DIALOG_SHIM virtual void OnDeleteAllClick( wxCommandEvent& event ) { event.Skip(); } virtual void OnCancelClick( wxCommandEvent& event ) { event.Skip(); } virtual void OnStartdrcClick( wxCommandEvent& event ) { event.Skip(); } - - + + public: wxTextCtrl* m_SetTrackMinWidthCtrl; wxTextCtrl* m_SetViaMinSizeCtrl; @@ -104,10 +105,9 @@ class DIALOG_DRC_CONTROL_BASE : public DIALOG_SHIM DRCLISTBOX* m_ClearanceListBox; DRCLISTBOX* m_UnconnectedListBox; DRCLISTBOX* m_FootprintsListBox; - - DIALOG_DRC_CONTROL_BASE( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("DRC Control"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( -1,-1 ), long style = wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER ); + + DIALOG_DRC_CONTROL_BASE( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("DRC Control"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( -1,-1 ), long style = wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER ); ~DIALOG_DRC_CONTROL_BASE(); - + }; -#endif //__DIALOG_DRC_BASE_H__ diff --git a/pcbnew/tools/selection_tool.cpp b/pcbnew/tools/selection_tool.cpp index d4899be236..e3747bf408 100644 --- a/pcbnew/tools/selection_tool.cpp +++ b/pcbnew/tools/selection_tool.cpp @@ -579,7 +579,6 @@ bool SELECTION_TOOL::selectPoint( const VECTOR2I& aWhere, bool aOnDrag, if( item ) { - toggleSelection( item ); return true; } else @@ -1518,6 +1517,9 @@ BOARD_ITEM* SELECTION_TOOL::doSelectionMenu( GENERAL_COLLECTOR* aCollector, } getView()->Remove( &highlightGroup ); + if( current ) + toggleSelection( current ); + return current; }