diff options
author | saurabhb17 | 2020-02-26 16:01:28 +0530 |
---|---|---|
committer | GitHub | 2020-02-26 16:01:28 +0530 |
commit | d51317f0193609fb43e932730d78aa86a4984083 (patch) | |
tree | 6acee185a4dc19113fcbf0f9a3d6941085dedaf7 /cvpcb/dialogs/fp_conflict_assignment_selector.cpp | |
parent | 0db48f6533517ecebfd9f0693f89deca28408b76 (diff) | |
parent | 886d9cb772e81d2e5262284bc3082664f084337f (diff) | |
download | KiCad-eSim-d51317f0193609fb43e932730d78aa86a4984083.tar.gz KiCad-eSim-d51317f0193609fb43e932730d78aa86a4984083.tar.bz2 KiCad-eSim-d51317f0193609fb43e932730d78aa86a4984083.zip |
Merge pull request #2 from FOSSEE/develop
Develop
Diffstat (limited to 'cvpcb/dialogs/fp_conflict_assignment_selector.cpp')
-rw-r--r-- | cvpcb/dialogs/fp_conflict_assignment_selector.cpp | 190 |
1 files changed, 190 insertions, 0 deletions
diff --git a/cvpcb/dialogs/fp_conflict_assignment_selector.cpp b/cvpcb/dialogs/fp_conflict_assignment_selector.cpp new file mode 100644 index 0000000..35dcd8f --- /dev/null +++ b/cvpcb/dialogs/fp_conflict_assignment_selector.cpp @@ -0,0 +1,190 @@ +/** + * @file fp_conflict_assignment_selector.cpp + */ + +/* + * This program source code file is part of KICAD, a free EDA CAD application. + * + * Copyright (C) 2010-2014 Jean-Pierre Charras <jp.charras at wanadoo.fr> + * Copyright (C) 1992-2014 Kicad Developers, see CHANGELOG.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 <common.h> + +#include <fp_conflict_assignment_selector.h> + + +DIALOG_FP_CONFLICT_ASSIGNMENT_SELECTOR::DIALOG_FP_CONFLICT_ASSIGNMENT_SELECTOR( wxWindow* aParent ) + : DIALOG_FP_CONFLICT_ASSIGNMENT_SELECTOR_BASE( aParent ) +{ + m_listFp->AppendColumn( _( "Ref" ) ); + m_listFp->AppendColumn( _( "Schematic assignment" ) ); + m_listFp->AppendColumn( wxT( "<=" ) ); + m_listFp->AppendColumn( wxT( "=>" ) ); + m_listFp->AppendColumn( _( "Cmp file assignment" ) ); + + m_lineCount = 0; +} + +void DIALOG_FP_CONFLICT_ASSIGNMENT_SELECTOR::Add( const wxString& aRef, const wxString& aFpSchName, + const wxString& aFpCmpName ) +{ + long idx = m_listFp->InsertItem(m_lineCount, aRef ); + + m_listFp->SetItem(idx, COL_FPSCH, aFpSchName ); + m_listFp->SetItem(idx, COL_SELSCH, wxT("") ); + m_listFp->SetItem(idx, COL_SELCMP, wxT("X") ); + m_listFp->SetItem(idx, COL_FPCMP, aFpCmpName ); + + m_lineCount ++; +} + +int DIALOG_FP_CONFLICT_ASSIGNMENT_SELECTOR::GetSelection( const wxString& aReference ) +{ + // Find Reference + for( int ii = 0; ii < m_listFp->GetItemCount(); ii++ ) + { + if( m_listFp->GetItemText( ii, COL_REF ) == aReference ) + { + if( m_listFp->GetItemText( ii, COL_SELSCH ) != wxT("X") ) + return 1; + + return 0; + } + } + + return -1; +} + +void DIALOG_FP_CONFLICT_ASSIGNMENT_SELECTOR::OnColumnClick( wxListEvent& event ) +{ + // When clicking on the column title: + // when it is the COL_SELCMP column, set all item choices to cmp file assigment. + // when it is the COL_SELSCH column, set all item choices to schematic assigment. + + wxListItem item = event.GetItem(); + + int column = event.GetColumn(); + int colclr, colset; + + switch( column ) + { + case COL_SELSCH: + colclr = COL_SELCMP; + colset = COL_SELSCH; + break; + + case COL_SELCMP: + colclr = COL_SELSCH; + colset = COL_SELCMP; + break; + + default: + return; + } + + for( int i = 0; i < m_listFp->GetItemCount(); i++ ) + { + m_listFp->SetItem( i, colclr, wxT("") ); + m_listFp->SetItem( i, colset, wxT("X") ); + } +} + +void DIALOG_FP_CONFLICT_ASSIGNMENT_SELECTOR::OnItemClicked( wxMouseEvent& event ) +{ + wxPoint pos = event.GetPosition(); + int flgs = wxLIST_HITTEST_ONITEMLABEL; + long idx = m_listFp->HitTest( pos, flgs ); + + // Try to find the column clicked (must be COL_SELCMP or COL_SELSCH) + int colclr = -1, colset; + int minpx = m_listFp->GetColumnWidth( 0 ) + m_listFp->GetColumnWidth( 1 ); + int maxpx = minpx + m_listFp->GetColumnWidth( 2 ); + + if( pos.x > minpx && pos.x < maxpx ) + { + colclr = COL_SELCMP; + colset = COL_SELSCH; + } + + else + { + minpx = maxpx; + int maxpx = minpx + m_listFp->GetColumnWidth( 3 ); + + if( pos.x > minpx && pos.x < maxpx ) + { + colclr = COL_SELSCH; + colset = COL_SELCMP; + } + } + + if( colclr < 0 ) + return; + + // Move selection to schematic or cmp file choice + // according to the column position (COL_SELCMP or COL_SELSCH) + m_listFp->SetItem( idx, colclr, wxT("") ); + m_listFp->SetItem( idx, colset, wxT("X") ); + + event.Skip(); +} + + +void DIALOG_FP_CONFLICT_ASSIGNMENT_SELECTOR::OnSize( wxSizeEvent& aEvent ) +{ + recalculateColumns(); + aEvent.Skip(); +} + + +void DIALOG_FP_CONFLICT_ASSIGNMENT_SELECTOR::recalculateColumns() +{ + const int margin = 16; + int totalLength = 0; + int sel_length = GetTextSize( wxT("XX"), m_listFp ).x; + int maxRefLength = GetTextSize( wxT("XXX"), m_listFp ).x; + + sel_length += margin; + m_listFp->SetColumnWidth( COL_SELSCH, sel_length ); + m_listFp->SetColumnWidth( COL_SELCMP, sel_length ); + + // Find max character width of column Reference + for( int i = 0; i < m_listFp->GetItemCount(); i++ ) + { + int length = GetTextSize( m_listFp->GetItemText( i, COL_REF ), m_listFp ).x; + + if( length > maxRefLength ) + maxRefLength = length; + } + + + // Use the lengths of column texts to create a scale of the max list width + // to set the column widths + maxRefLength += margin; + totalLength = maxRefLength + sel_length + sel_length; + + int cwidth = (GetClientSize().x - totalLength) / 2; + + m_listFp->SetColumnWidth( COL_REF, maxRefLength ); + m_listFp->SetColumnWidth( COL_FPSCH, cwidth - 2 ); + m_listFp->SetColumnWidth( COL_FPCMP, cwidth ); +} + |