Added support for multi-selection and multi-editing in cvpcb.
This commit is contained in:
commit
21dbfef350
|
@ -17,7 +17,7 @@
|
||||||
COMPONENTS_LISTBOX::COMPONENTS_LISTBOX( CVPCB_MAINFRAME* parent, wxWindowID id,
|
COMPONENTS_LISTBOX::COMPONENTS_LISTBOX( CVPCB_MAINFRAME* parent, wxWindowID id,
|
||||||
const wxPoint& loc, const wxSize& size,
|
const wxPoint& loc, const wxSize& size,
|
||||||
int nbitems, wxString choice[] ) :
|
int nbitems, wxString choice[] ) :
|
||||||
ITEMS_LISTBOX_BASE( parent, id, loc, size )
|
ITEMS_LISTBOX_BASE( parent, id, loc, size, ~wxLC_SINGLE_SEL)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -18,7 +18,8 @@ class ITEMS_LISTBOX_BASE : public wxListView
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
ITEMS_LISTBOX_BASE( CVPCB_MAINFRAME* aParent, wxWindowID aId,
|
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();
|
~ITEMS_LISTBOX_BASE();
|
||||||
|
|
||||||
|
|
|
@ -19,11 +19,12 @@
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
|
|
||||||
#define LISTB_STYLE wxSUNKEN_BORDER | wxLC_NO_HEADER | \
|
#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,
|
ITEMS_LISTBOX_BASE::ITEMS_LISTBOX_BASE( CVPCB_MAINFRAME* aParent, wxWindowID aId,
|
||||||
const wxPoint& aLocation, const wxSize& aSize ) :
|
const wxPoint& aLocation, const wxSize& aSize,
|
||||||
wxListView( aParent, aId, aLocation, aSize, LISTB_STYLE )
|
long aStyle) :
|
||||||
|
wxListView( aParent, aId, aLocation, aSize, LISTB_STYLE | aStyle )
|
||||||
{
|
{
|
||||||
InsertColumn( 0, wxEmptyString );
|
InsertColumn( 0, wxEmptyString );
|
||||||
SetColumnWidth( 0, wxLIST_AUTOSIZE );
|
SetColumnWidth( 0, wxLIST_AUTOSIZE );
|
||||||
|
|
|
@ -39,52 +39,74 @@
|
||||||
|
|
||||||
#define titleComponentLibErr _( "Component Library Error" )
|
#define titleComponentLibErr _( "Component Library Error" )
|
||||||
|
|
||||||
|
|
||||||
void CVPCB_MAINFRAME::SetNewPkg( const wxString& aFootprintName )
|
void CVPCB_MAINFRAME::SetNewPkg( const wxString& aFootprintName )
|
||||||
{
|
{
|
||||||
COMPONENT_INFO* Component;
|
COMPONENT_INFO* component;
|
||||||
bool isUndefined = false;
|
bool hasFootprint = false;
|
||||||
int NumCmp;
|
int componentIndex;
|
||||||
wxString msg;
|
wxString description;
|
||||||
|
|
||||||
if( m_components.empty() )
|
if( m_components.empty() )
|
||||||
return;
|
return;
|
||||||
|
|
||||||
NumCmp = m_ListCmp->GetSelection();
|
// if no component is selected, select the first one
|
||||||
|
|
||||||
if( NumCmp < 0 )
|
if(m_ListCmp->GetFirstSelected() < 0)
|
||||||
{
|
{
|
||||||
NumCmp = 0;
|
componentIndex = 0;
|
||||||
m_ListCmp->SetSelection( NumCmp, true );
|
m_ListCmp->SetSelection( componentIndex, true );
|
||||||
}
|
}
|
||||||
|
|
||||||
Component = &m_components[ NumCmp ];
|
// iterate over the selection
|
||||||
|
|
||||||
if( Component == NULL )
|
while( m_ListCmp->GetFirstSelected() != -1)
|
||||||
return;
|
{
|
||||||
|
// 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,
|
// check to see if the component has allready a footprint set.
|
||||||
GetChars( Component->m_Reference ),
|
|
||||||
GetChars( Component->m_Value ),
|
hasFootprint = !(component->m_Footprint.IsEmpty());
|
||||||
GetChars( Component->m_Footprint ) );
|
|
||||||
|
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;
|
m_modified = true;
|
||||||
|
|
||||||
if( isUndefined )
|
// select the next component, if there is one
|
||||||
m_undefinedComponentCnt -= 1;
|
if( componentIndex < (m_ListCmp->GetCount() - 1) )
|
||||||
|
componentIndex++;
|
||||||
|
|
||||||
m_ListCmp->SetString( NumCmp, msg );
|
m_ListCmp->SetSelection( componentIndex, true );
|
||||||
m_ListCmp->SetSelection( NumCmp, false );
|
|
||||||
|
|
||||||
// We activate next component:
|
|
||||||
if( NumCmp < (m_ListCmp->GetCount() - 1) )
|
|
||||||
NumCmp++;
|
|
||||||
|
|
||||||
m_ListCmp->SetSelection( NumCmp, true );
|
|
||||||
|
|
||||||
|
// update the statusbar
|
||||||
DisplayStatus();
|
DisplayStatus();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue