From 1886082fce92341130663d3990bae527350aaeb2 Mon Sep 17 00:00:00 2001 From: jean-pierre charras Date: Mon, 10 Dec 2012 20:08:09 +0100 Subject: [PATCH] Eeschema: Erc dialog: enhancement. Now not modal. Pcbnew: Drc dialog: fix a old very minor bug. Added: single click on an item in marker list moves the board graphic cursor on the corresponding marker location on the board Double clicking is not modified. --- eeschema/dialogs/dialog_erc.cpp | 31 +++++++++++++++++++--------- eeschema/dialogs/dialog_erc.h | 17 +++++---------- eeschema/dialogs/dialog_erc_base.cpp | 5 +++-- eeschema/dialogs/dialog_erc_base.fbp | 6 +++--- eeschema/dialogs/dialog_erc_base.h | 26 ++++++++++++----------- eeschema/schframe.cpp | 4 ++-- pcbnew/dialogs/dialog_drc.cpp | 24 +++++++++++++++++++++ pcbnew/dialogs/dialog_drc.h | 1 + pcbnew/dialogs/dialog_drc_base.cpp | 6 ++++++ pcbnew/dialogs/dialog_drc_base.fbp | 6 +++--- pcbnew/dialogs/dialog_drc_base.h | 3 +++ 11 files changed, 85 insertions(+), 44 deletions(-) diff --git a/eeschema/dialogs/dialog_erc.cpp b/eeschema/dialogs/dialog_erc.cpp index 0a3c4d8d02..d0714e75e7 100644 --- a/eeschema/dialogs/dialog_erc.cpp +++ b/eeschema/dialogs/dialog_erc.cpp @@ -1,9 +1,9 @@ /* * 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) 2011 Wayne Stambaugh - * Copyright (C) 1992-2011 KiCad Developers, see AUTHORS.txt for contributors. + * Copyright (C) 2012 Jean-Pierre Charras, jp.charras at wanadoo.fr + * Copyright (C) 2012 Wayne Stambaugh + * Copyright (C) 1992-2012 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 @@ -41,7 +41,6 @@ #include #include #include -#include #include #include @@ -67,6 +66,10 @@ DIALOG_ERC::DIALOG_ERC( SCH_EDIT_FRAME* parent ) : Centre(); } +DIALOG_ERC::~DIALOG_ERC() +{ +} + void DIALOG_ERC::Init() { @@ -101,8 +104,6 @@ void DIALOG_ERC::Init() m_buttonERC->SetDefault(); } - -/* wxEVT_COMMAND_BUTTON_CLICKED event handler for ID_ERASE_DRC_MARKERS */ /* Delete the old ERC markers, over the whole hierarchy */ void DIALOG_ERC::OnEraseDrcMarkersClick( wxCommandEvent& event ) @@ -115,10 +116,16 @@ void DIALOG_ERC::OnEraseDrcMarkersClick( wxCommandEvent& event ) } -/* wxEVT_COMMAND_BUTTON_CLICKED event handler for wxID_CANCEL */ -void DIALOG_ERC::OnCancelClick( wxCommandEvent& event ) +/* event handler for Close button +*/ +void DIALOG_ERC::OnButtonCloseClick( wxCommandEvent& event ) { - EndModal( 0 ); + Close(); +} + +void DIALOG_ERC::OnCloseErcDialog( wxCloseEvent& event ) +{ + Destroy(); } @@ -179,6 +186,9 @@ void DIALOG_ERC::OnLeftClickMarkersList( wxCommandEvent& event ) if( notFound ) // Error { wxMessageBox( _( "Marker not found" ) ); + + // The marker was deleted, so rebuild marker list + DisplayERC_MarkersList(); return; } @@ -210,8 +220,9 @@ void DIALOG_ERC::OnLeftDblClickMarkersList( wxCommandEvent& event ) // ( the button is released after closing this dialog and will generate // an unwanted event in parent frame) m_parent->SkipNextLeftButtonReleaseEvent(); - EndModal( 1 ); } + + Close(); } diff --git a/eeschema/dialogs/dialog_erc.h b/eeschema/dialogs/dialog_erc.h index 665409dc1d..61ad84b033 100644 --- a/eeschema/dialogs/dialog_erc.h +++ b/eeschema/dialogs/dialog_erc.h @@ -39,25 +39,18 @@ private: static bool m_writeErcFile; public: - - /// Constructors DIALOG_ERC( SCH_EDIT_FRAME* parent ); + ~DIALOG_ERC(); +private: void Init(); - /// wxEVT_COMMAND_BUTTON_CLICKED event handler for ID_ERC_CMP + // from DIALOG_ERC_BASE: + void OnCloseErcDialog( wxCloseEvent& event ); void OnErcCmpClick( wxCommandEvent& event ); - - /// wxEVT_COMMAND_BUTTON_CLICKED event handler for ID_ERASE_DRC_MARKERS void OnEraseDrcMarkersClick( wxCommandEvent& event ); - - /// wxEVT_COMMAND_BUTTON_CLICKED event handler for wxID_CANCEL - void OnCancelClick( wxCommandEvent& event ); - - /// wxEVT_COMMAND_BUTTON_CLICKED event handler for ID_RESET_MATRIX + void OnButtonCloseClick( wxCommandEvent& event ); void OnResetMatrixClick( wxCommandEvent& event ); - - // Single click on a marker info: void OnLeftClickMarkersList( wxCommandEvent& event ); // Double click on a marker info: diff --git a/eeschema/dialogs/dialog_erc_base.cpp b/eeschema/dialogs/dialog_erc_base.cpp index 7e7ff0ddc4..c4ece6514c 100644 --- a/eeschema/dialogs/dialog_erc_base.cpp +++ b/eeschema/dialogs/dialog_erc_base.cpp @@ -10,9 +10,10 @@ /////////////////////////////////////////////////////////////////////////// BEGIN_EVENT_TABLE( DIALOG_ERC_BASE, DIALOG_SHIM ) + EVT_CLOSE( DIALOG_ERC_BASE::_wxFB_OnCloseErcDialog ) EVT_BUTTON( ID_ERC_CMP, DIALOG_ERC_BASE::_wxFB_OnErcCmpClick ) EVT_BUTTON( ID_ERASE_DRC_MARKERS, DIALOG_ERC_BASE::_wxFB_OnEraseDrcMarkersClick ) - EVT_BUTTON( wxID_CANCEL, DIALOG_ERC_BASE::_wxFB_OnCancelClick ) + EVT_BUTTON( wxID_CANCEL, DIALOG_ERC_BASE::_wxFB_OnButtonCloseClick ) EVT_LISTBOX( ID_MAKER_HTMLLISTBOX, DIALOG_ERC_BASE::_wxFB_OnLeftClickMarkersList ) EVT_LISTBOX_DCLICK( ID_MAKER_HTMLLISTBOX, DIALOG_ERC_BASE::_wxFB_OnLeftDblClickMarkersList ) EVT_BUTTON( ID_RESET_MATRIX, DIALOG_ERC_BASE::_wxFB_OnResetMatrixClick ) @@ -106,7 +107,7 @@ DIALOG_ERC_BASE::DIALOG_ERC_BASE( wxWindow* parent, wxWindowID id, const wxStrin bercSizer->Add( m_textMarkers, 0, wxTOP|wxRIGHT|wxLEFT, 5 ); m_MarkersList = new ERC_HTML_LISTBOX( m_PanelERC, ID_MAKER_HTMLLISTBOX, wxDefaultPosition, wxDefaultSize, 0, NULL, 0|wxSIMPLE_BORDER ); - m_MarkersList->SetMinSize( wxSize( 450,250 ) ); + m_MarkersList->SetMinSize( wxSize( 500,250 ) ); bercSizer->Add( m_MarkersList, 1, wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 5 ); diff --git a/eeschema/dialogs/dialog_erc_base.fbp b/eeschema/dialogs/dialog_erc_base.fbp index d780852006..e15044cb7e 100644 --- a/eeschema/dialogs/dialog_erc_base.fbp +++ b/eeschema/dialogs/dialog_erc_base.fbp @@ -59,7 +59,7 @@ - + OnCloseErcDialog @@ -1335,7 +1335,7 @@ - OnCancelClick + OnButtonCloseClick @@ -1486,7 +1486,7 @@ 0 - 450,250 + 500,250 1 m_MarkersList 1 diff --git a/eeschema/dialogs/dialog_erc_base.h b/eeschema/dialogs/dialog_erc_base.h index 72f2de1e58..5626b5cda1 100644 --- a/eeschema/dialogs/dialog_erc_base.h +++ b/eeschema/dialogs/dialog_erc_base.h @@ -41,16 +41,17 @@ class DIALOG_ERC_BASE : public DIALOG_SHIM { DECLARE_EVENT_TABLE() private: - + // Private event handlers + void _wxFB_OnCloseErcDialog( wxCloseEvent& event ){ OnCloseErcDialog( event ); } void _wxFB_OnErcCmpClick( wxCommandEvent& event ){ OnErcCmpClick( event ); } void _wxFB_OnEraseDrcMarkersClick( wxCommandEvent& event ){ OnEraseDrcMarkersClick( event ); } - void _wxFB_OnCancelClick( wxCommandEvent& event ){ OnCancelClick( event ); } + void _wxFB_OnButtonCloseClick( wxCommandEvent& event ){ OnButtonCloseClick( event ); } void _wxFB_OnLeftClickMarkersList( wxCommandEvent& event ){ OnLeftClickMarkersList( event ); } void _wxFB_OnLeftDblClickMarkersList( wxCommandEvent& event ){ OnLeftDblClickMarkersList( event ); } void _wxFB_OnResetMatrixClick( wxCommandEvent& event ){ OnResetMatrixClick( event ); } - - + + protected: enum { @@ -59,7 +60,7 @@ class DIALOG_ERC_BASE : public DIALOG_SHIM ID_MAKER_HTMLLISTBOX, ID_RESET_MATRIX }; - + wxNotebook* m_NoteBook; wxPanel* m_PanelERC; wxStaticText* m_ErcTotalErrorsText; @@ -79,21 +80,22 @@ class DIALOG_ERC_BASE : public DIALOG_SHIM wxPanel* m_PanelERCOptions; wxButton* m_ResetOptButton; wxPanel* m_matrixPanel; - + // Virtual event handlers, overide them in your derived class + virtual void OnCloseErcDialog( wxCloseEvent& event ) { event.Skip(); } virtual void OnErcCmpClick( wxCommandEvent& event ) { event.Skip(); } virtual void OnEraseDrcMarkersClick( wxCommandEvent& event ) { event.Skip(); } - virtual void OnCancelClick( wxCommandEvent& event ) { event.Skip(); } + virtual void OnButtonCloseClick( wxCommandEvent& event ) { event.Skip(); } virtual void OnLeftClickMarkersList( wxCommandEvent& event ) { event.Skip(); } virtual void OnLeftDblClickMarkersList( wxCommandEvent& event ) { event.Skip(); } virtual void OnResetMatrixClick( wxCommandEvent& event ) { event.Skip(); } - - + + public: - - DIALOG_ERC_BASE( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("EESchema Erc"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 519,392 ), long style = wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER ); + + DIALOG_ERC_BASE( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("EESchema Erc"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 519,392 ), long style = wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER ); ~DIALOG_ERC_BASE(); - + }; #endif //__DIALOG_ERC_BASE_H__ diff --git a/eeschema/schframe.cpp b/eeschema/schframe.cpp index 92be307df2..f5f236cf48 100644 --- a/eeschema/schframe.cpp +++ b/eeschema/schframe.cpp @@ -616,8 +616,8 @@ void SCH_EDIT_FRAME::OnErc( wxCommandEvent& event ) { DIALOG_ERC* dlg = new DIALOG_ERC( this ); - dlg->ShowModal(); - dlg->Destroy(); + dlg->Show( true ); +// dlg->Destroy(); } diff --git a/pcbnew/dialogs/dialog_drc.cpp b/pcbnew/dialogs/dialog_drc.cpp index 0f721838d1..b71d8db831 100644 --- a/pcbnew/dialogs/dialog_drc.cpp +++ b/pcbnew/dialogs/dialog_drc.cpp @@ -75,6 +75,8 @@ void DIALOG_DRC_CONTROL::InitValues() AddUnitSymbol( *m_ViaMinTitle ); AddUnitSymbol( *m_MicroViaMinTitle ); + m_DeleteCurrentMarkerButton->Enable( false ); + /* this looks terrible! does not fit into text field, do it in wxformbuilder instead m_SetClearance->SetValue( _("Netclasses values")); */ @@ -493,6 +495,15 @@ void DIALOG_DRC_CONTROL::OnLeftDClickUnconnected( wxMouseEvent& event ) } } +/* called when switching from Error list to Unconnected list + * To avoid mistakes, the current marker is selection is cleared + */ +void DIALOG_DRC_CONTROL::OnChangingMarkerList( wxNotebookEvent& event ) +{ + m_DeleteCurrentMarkerButton->Enable( false ); + m_ClearanceListBox->SetSelection( -1 ); + m_UnconnectedListBox->SetSelection( -1 ); +} void DIALOG_DRC_CONTROL::OnMarkerSelectionEvent( wxCommandEvent& event ) { @@ -502,6 +513,12 @@ void DIALOG_DRC_CONTROL::OnMarkerSelectionEvent( wxCommandEvent& event ) { // until a MARKER is selected, this button is not enabled. m_DeleteCurrentMarkerButton->Enable( true ); + + // Find the selected DRC_ITEM in the listbox, position cursor there, + // at the first of the two pads. + const DRC_ITEM* item = m_ClearanceListBox->GetItem( selection ); + if( item ) + m_Parent->CursorGoto( item->GetPointA(), false ); } event.Skip(); @@ -516,6 +533,12 @@ void DIALOG_DRC_CONTROL::OnUnconnectedSelectionEvent( wxCommandEvent& event ) { // until a MARKER is selected, this button is not enabled. m_DeleteCurrentMarkerButton->Enable( true ); + + // Find the selected DRC_ITEM in the listbox, position cursor there, + // at the first of the two pads. + const DRC_ITEM* item = m_UnconnectedListBox->GetItem( selection ); + if( item ) + m_Parent->CursorGoto( item->GetPointA(), false ); } event.Skip(); @@ -533,6 +556,7 @@ void DIALOG_DRC_CONTROL::DelDRCMarkers() m_Parent->SetCurItem( NULL ); // clear curr item, because it could be a DRC marker m_ClearanceListBox->DeleteAllItems(); m_UnconnectedListBox->DeleteAllItems(); + m_DeleteCurrentMarkerButton->Enable( false ); } diff --git a/pcbnew/dialogs/dialog_drc.h b/pcbnew/dialogs/dialog_drc.h index 4c1fb5b660..6f299429e1 100644 --- a/pcbnew/dialogs/dialog_drc.h +++ b/pcbnew/dialogs/dialog_drc.h @@ -111,6 +111,7 @@ private: void OnMarkerSelectionEvent( wxCommandEvent& event ); void OnUnconnectedSelectionEvent( wxCommandEvent& event ); + void OnChangingMarkerList( wxNotebookEvent& event ); void DelDRCMarkers(); void RedrawDrawPanel(); diff --git a/pcbnew/dialogs/dialog_drc_base.cpp b/pcbnew/dialogs/dialog_drc_base.cpp index 8dc6aa9e7d..8e103f50e4 100644 --- a/pcbnew/dialogs/dialog_drc_base.cpp +++ b/pcbnew/dialogs/dialog_drc_base.cpp @@ -199,9 +199,12 @@ DIALOG_DRC_CONTROL_BASE::DIALOG_DRC_CONTROL_BASE( wxWindow* parent, wxWindowID i m_buttonListUnconnected->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_DRC_CONTROL_BASE::OnListUnconnectedClick ), NULL, this ); m_DeleteAllButton->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_DRC_CONTROL_BASE::OnDeleteAllClick ), NULL, this ); m_DeleteCurrentMarkerButton->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_DRC_CONTROL_BASE::OnDeleteOneClick ), 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_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_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_sdbSizer1Cancel->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_DRC_CONTROL_BASE::OnCancelClick ), NULL, this ); m_sdbSizer1OK->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_DRC_CONTROL_BASE::OnOkClick ), NULL, this ); @@ -216,9 +219,12 @@ DIALOG_DRC_CONTROL_BASE::~DIALOG_DRC_CONTROL_BASE() m_buttonListUnconnected->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_DRC_CONTROL_BASE::OnListUnconnectedClick ), NULL, this ); m_DeleteAllButton->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_DRC_CONTROL_BASE::OnDeleteAllClick ), NULL, this ); m_DeleteCurrentMarkerButton->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_DRC_CONTROL_BASE::OnDeleteOneClick ), 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_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_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_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::OnOkClick ), NULL, this ); diff --git a/pcbnew/dialogs/dialog_drc_base.fbp b/pcbnew/dialogs/dialog_drc_base.fbp index cc8edd7db6..49c9ef68ea 100644 --- a/pcbnew/dialogs/dialog_drc_base.fbp +++ b/pcbnew/dialogs/dialog_drc_base.fbp @@ -1826,7 +1826,7 @@ - + OnChangingMarkerList @@ -1989,7 +1989,7 @@ OnLeftDClickClearance - + OnMarkerSelectionEvent @@ -2163,7 +2163,7 @@ OnLeftDClickUnconnected - + OnUnconnectedSelectionEvent diff --git a/pcbnew/dialogs/dialog_drc_base.h b/pcbnew/dialogs/dialog_drc_base.h index ec010aa5ce..175ca402d4 100644 --- a/pcbnew/dialogs/dialog_drc_base.h +++ b/pcbnew/dialogs/dialog_drc_base.h @@ -77,9 +77,12 @@ class DIALOG_DRC_CONTROL_BASE : public DIALOG_SHIM virtual void OnListUnconnectedClick( wxCommandEvent& event ) { event.Skip(); } virtual void OnDeleteAllClick( wxCommandEvent& event ) { event.Skip(); } virtual void OnDeleteOneClick( wxCommandEvent& event ) { event.Skip(); } + virtual void OnChangingMarkerList( wxNotebookEvent& event ) { event.Skip(); } virtual void OnLeftDClickClearance( 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 OnUnconnectedSelectionEvent( wxCommandEvent& event ) { event.Skip(); } virtual void OnRightUpUnconnected( wxMouseEvent& event ) { event.Skip(); } virtual void OnCancelClick( wxCommandEvent& event ) { event.Skip(); } virtual void OnOkClick( wxCommandEvent& event ) { event.Skip(); }