diff --git a/cvpcb/class_components_listbox.cpp b/cvpcb/class_components_listbox.cpp index 2c09c5215d..9d0a7a721b 100644 --- a/cvpcb/class_components_listbox.cpp +++ b/cvpcb/class_components_listbox.cpp @@ -17,7 +17,7 @@ COMPONENTS_LISTBOX::COMPONENTS_LISTBOX( CVPCB_MAINFRAME* parent, wxWindowID id, const wxPoint& loc, const wxSize& size, int nbitems, wxString choice[] ) : - ITEMS_LISTBOX_BASE( parent, id, loc, size ) + ITEMS_LISTBOX_BASE( parent, id, loc, size, ~wxLC_SINGLE_SEL) { } diff --git a/cvpcb/cvstruct.h b/cvpcb/cvstruct.h index c95bfde9fe..5d7ed48187 100644 --- a/cvpcb/cvstruct.h +++ b/cvpcb/cvstruct.h @@ -18,7 +18,8 @@ class ITEMS_LISTBOX_BASE : public wxListView { public: ITEMS_LISTBOX_BASE( CVPCB_MAINFRAME* aParent, wxWindowID aId, - const wxPoint& aLocation, const wxSize& aSize ); + const wxPoint& aLocation, const wxSize& aSize, + long aStyle = wxLC_SINGLE_SEL); ~ITEMS_LISTBOX_BASE(); diff --git a/cvpcb/listboxes.cpp b/cvpcb/listboxes.cpp index a3b432c24d..65393727c3 100644 --- a/cvpcb/listboxes.cpp +++ b/cvpcb/listboxes.cpp @@ -19,11 +19,12 @@ ******************************************************************************/ #define LISTB_STYLE wxSUNKEN_BORDER | wxLC_NO_HEADER | \ - wxLC_SINGLE_SEL | wxLC_REPORT | wxLC_VIRTUAL + wxLC_REPORT | wxLC_VIRTUAL ITEMS_LISTBOX_BASE::ITEMS_LISTBOX_BASE( CVPCB_MAINFRAME* aParent, wxWindowID aId, - const wxPoint& aLocation, const wxSize& aSize ) : - wxListView( aParent, aId, aLocation, aSize, LISTB_STYLE ) + const wxPoint& aLocation, const wxSize& aSize, + long aStyle) : + wxListView( aParent, aId, aLocation, aSize, LISTB_STYLE | aStyle ) { InsertColumn( 0, wxEmptyString ); SetColumnWidth( 0, wxLIST_AUTOSIZE ); diff --git a/cvpcb/readwrite_dlgs.cpp b/cvpcb/readwrite_dlgs.cpp index 30f1c46a34..ff42551271 100644 --- a/cvpcb/readwrite_dlgs.cpp +++ b/cvpcb/readwrite_dlgs.cpp @@ -39,52 +39,74 @@ #define titleComponentLibErr _( "Component Library Error" ) - void CVPCB_MAINFRAME::SetNewPkg( const wxString& aFootprintName ) { - COMPONENT_INFO* Component; - bool isUndefined = false; - int NumCmp; - wxString msg; + COMPONENT_INFO* component; + bool hasFootprint = false; + int componentIndex; + wxString description; if( m_components.empty() ) return; - NumCmp = m_ListCmp->GetSelection(); + // if no component is selected, select the first one - if( NumCmp < 0 ) + if(m_ListCmp->GetFirstSelected() < 0) { - NumCmp = 0; - m_ListCmp->SetSelection( NumCmp, true ); + componentIndex = 0; + m_ListCmp->SetSelection( componentIndex, true ); } - Component = &m_components[ NumCmp ]; + // iterate over the selection - if( Component == NULL ) - return; + while( m_ListCmp->GetFirstSelected() != -1) + { + // get the component for the current iteration - isUndefined = Component->m_Footprint.IsEmpty(); + componentIndex = m_ListCmp->GetFirstSelected(); + component = &m_components[componentIndex]; - Component->m_Footprint = aFootprintName; + if( component == NULL ) + return; - msg.Printf( CMP_FORMAT, NumCmp + 1, - GetChars( Component->m_Reference ), - GetChars( Component->m_Value ), - GetChars( Component->m_Footprint ) ); + // check to see if the component has allready a footprint set. + + hasFootprint = !(component->m_Footprint.IsEmpty()); + + component->m_Footprint = aFootprintName; + + // create the new component description + + description.Printf( CMP_FORMAT, componentIndex + 1, + GetChars( component->m_Reference ), + GetChars( component->m_Value ), + GetChars( component->m_Footprint ) ); + + // if the component hasn't had a footprint associated with it + // it now has, so we decrement the count of components without + // a footprint assigned. + + if( !hasFootprint ) + { + hasFootprint = true; + m_undefinedComponentCnt -= 1; + } + + // set the new description and deselect the processed component + m_ListCmp->SetString( componentIndex, description ); + m_ListCmp->SetSelection( componentIndex, false ); + } + + // mark this "session" as modified m_modified = true; - if( isUndefined ) - m_undefinedComponentCnt -= 1; + // select the next component, if there is one + if( componentIndex < (m_ListCmp->GetCount() - 1) ) + componentIndex++; - m_ListCmp->SetString( NumCmp, msg ); - m_ListCmp->SetSelection( NumCmp, false ); - - // We activate next component: - if( NumCmp < (m_ListCmp->GetCount() - 1) ) - NumCmp++; - - m_ListCmp->SetSelection( NumCmp, true ); + m_ListCmp->SetSelection( componentIndex, true ); + // update the statusbar DisplayStatus(); }