diff --git a/change_log.txt b/change_log.txt index 8630a431ce..dc7ded1bb7 100644 --- a/change_log.txt +++ b/change_log.txt @@ -4,6 +4,14 @@ Started 2007-June-11 Please add newer entries at the top, list the date and your name with email address. +2007-Oct-29 UPDATE Jean-Pierre Charras +================================================================================ ++cvpcb: listboxes.cpp problem solved: Workaround for a curious bug in wxWidgets: + if we switch from a long list of footprints to a short list (a filtered footprint list), + and if the selected item is near the end of the long list, + the new list is not displayed from the top of the list box + + 2007-Oct-27 UPDATE Jean-Pierre Charras ================================================================================ + all: diff --git a/common/edaappl.cpp b/common/edaappl.cpp index f27818dacb..f17d788200 100644 --- a/common/edaappl.cpp +++ b/common/edaappl.cpp @@ -54,21 +54,21 @@ * The real font size will be computed at run time */ -/*****************************/ -/* Constructeur de WinEDA_App */ -/*****************************/ +/**************************/ +/* WinEDA_App Constructor */ +/**************************/ WinEDA_App::WinEDA_App() { m_Checker = NULL; m_MainFrame = NULL; m_PcbFrame = NULL; - m_ModuleEditFrame = NULL; // Edition des modules - m_SchematicFrame = NULL; // Edition des Schemas - m_LibeditFrame = NULL; // Edition des composants - m_ViewlibFrame = NULL; // Visualisation des composants + m_ModuleEditFrame = NULL; // Frame for footprint edition + m_SchematicFrame = NULL; // Frame for schematic edition + m_LibeditFrame = NULL; // Frame for component edition + m_ViewlibFrame = NULL; // Frame for browsing component libraries m_CvpcbFrame = NULL; - m_GerberFrame = NULL; // ecran de visualisation GERBER + m_GerberFrame = NULL; // Frame for the gerber viewer GERBVIEW m_LastProjectMaxCount = 10; m_HtmlCtrl = NULL; @@ -83,15 +83,15 @@ WinEDA_App::WinEDA_App() } -/*****************************/ -/* Destructeur de WinEDA_App */ -/*****************************/ +/*************************/ +/* WinEDA_App Destructor */ +/*************************/ WinEDA_App::~WinEDA_App() { SaveSettings(); - /* delete data non directement geree par wxAppl */ + /* delete user datas */ delete g_Prj_Config; delete m_EDA_Config; delete m_EDA_CommonConfig; @@ -116,10 +116,12 @@ void WinEDA_App::InitEDA_Appl( const wxString& name ) ident = name + wxT( "-" ) + wxGetUserId(); m_Checker = new wxSingleInstanceChecker( ident ); - /* Init environnement - * (KICAD definit le chemin de kicad ex: set KICAD=d:\kicad) */ + /* Init kicad environment + * the environment variable KICAD (if exists) gives the kicad path: + * something like set KICAD=d:\kicad + */ m_Env_Defined = wxGetEnv( wxT( "KICAD" ), &m_KicadEnv ); - if( m_Env_Defined ) // m_KicadEnv doit finir par "/" ou "\" + if( m_Env_Defined ) // ensure m_KicadEnv ends by "/" { m_KicadEnv.Replace( WIN_STRING_DIR_SEP, UNIX_STRING_DIR_SEP ); if( m_KicadEnv.Last() != '/' ) @@ -129,13 +131,13 @@ void WinEDA_App::InitEDA_Appl( const wxString& name ) /* Prepare On Line Help */ m_HelpFileName = name + wxT( ".html" ); - // Init parametres pour configuration + // Init parameters for configuration SetVendorName( wxT( "kicad" ) ); SetAppName( name ); m_EDA_Config = new wxConfig( name ); m_EDA_CommonConfig = new wxConfig( wxT( "kicad_common" ) ); - /* Creation des fontes utiles */ + /* Create the fontes used in dialogs and messages */ g_StdFontPointSize = FONT_DEFAULT_SIZE; g_MsgFontPointSize = FONT_DEFAULT_SIZE; g_DialogFontPointSize = FONT_DEFAULT_SIZE; @@ -155,12 +157,12 @@ void WinEDA_App::InitEDA_Appl( const wxString& name ) wxImage::AddHandler( new wxJPEGHandler ); wxFileSystem::AddHandler( new wxZipFSHandler ); - // Analyse command line & init binary path + // Analyse the command line & init binary path SetBinDir(); ReadPdfBrowserInfos(); - // Internationalisation: chargement du Dictionnaire de kicad + // Internationalisation: loading the kicad suitable Dictionnary m_EDA_CommonConfig->Read( wxT( "Language" ), &m_LanguageId, wxLANGUAGE_DEFAULT ); bool succes = SetLanguage( TRUE ); @@ -262,7 +264,7 @@ bool WinEDA_App::SetBinDir() void WinEDA_App::GetSettings() /*********************************/ -/* Lit les infos utiles sauvees lors de la derniere utilisation du logiciel +/* Get the last setup used (fontes, files opened...) */ { wxString Line, Ident; @@ -639,8 +641,11 @@ wxMenu* WinEDA_App::SetLanguageList( wxMenu* MasterMenu ) } +/**********************/ int WinEDA_App::OnRun() -/* Run init scripts */ +/**********************/ +/* Run init scripts +*/ { #ifdef KICAD_PYTHON PyHandler::GetInstance()->RunScripts(); diff --git a/common/msgpanel.cpp b/common/msgpanel.cpp index bbd8903205..0dcf9f4b99 100644 --- a/common/msgpanel.cpp +++ b/common/msgpanel.cpp @@ -141,7 +141,7 @@ void WinEDA_MsgPanel::Affiche_1_Parametre( int pos_X, const wxString& texte_H, } -void WinEDA_MsgPanel::showItem( wxWindowDC& dc, const MsgItem& aItem ) +void WinEDA_MsgPanel::showItem( wxDC& dc, const MsgItem& aItem ) { int color = aItem.m_Color; diff --git a/cvpcb/listboxes.cpp b/cvpcb/listboxes.cpp index 15a5860ec5..a4679f3f6f 100644 --- a/cvpcb/listboxes.cpp +++ b/cvpcb/listboxes.cpp @@ -12,66 +12,68 @@ #include "protos.h" -/************************************************************************/ -/* Class (from wxListView) for displaying component and footprint lists */ -/************************************************************************/ +/******************************************************************************/ +/* Basic class (from wxListView) for displaying component and footprint lists */ +/* Not directly used: the 2 list boxes actually used are derived from it */ +/******************************************************************************/ -ListBoxBase::ListBoxBase(WinEDA_CvpcbFrame * parent, - wxWindowID id, const wxPoint& loc, const wxSize& size): - LIST_BOX_TYPE(parent, id, loc, size, - wxSUNKEN_BORDER | wxLC_NO_HEADER | - wxLC_SINGLE_SEL|wxLC_REPORT | wxLC_VIRTUAL) +ListBoxBase::ListBoxBase( WinEDA_CvpcbFrame* parent, + wxWindowID id, const wxPoint& loc, const wxSize& size ) : + LIST_BOX_TYPE( parent, id, loc, size, + wxSUNKEN_BORDER | wxLC_NO_HEADER | + wxLC_SINGLE_SEL | wxLC_REPORT | wxLC_VIRTUAL ) { - m_Parent = parent; - InsertColumn(0, wxEmptyString); - SetColumnWidth(0, wxLIST_AUTOSIZE ); + m_Parent = parent; + InsertColumn( 0, wxEmptyString ); + SetColumnWidth( 0, wxLIST_AUTOSIZE ); } - ListBoxBase::~ListBoxBase() { } + /************************************************/ -void ListBoxBase::OnSize(wxSizeEvent& event) +void ListBoxBase::OnSize( wxSizeEvent& event ) /************************************************/ + // Ajust the column width to the entire available window width { -wxSize size = GetClientSize(); -int width = 0; - + wxSize size = GetClientSize(); + int width = 0; + // SetColumnWidth(0, wxLIST_AUTOSIZE ); // width = GetColumnWidth(0); - SetColumnWidth(0, MAX(width, size.x) ); + SetColumnWidth( 0, MAX( width, size.x ) ); - event.Skip(); + event.Skip(); } /*********************************/ int ListBoxBase::GetSelection() /*********************************/ + // Return an index for the selected item { - return GetFirstSelected(); + return GetFirstSelected(); } -/************************************************************/ -/* ListBox derivee pour l'affichage de la liste des Modules */ -/************************************************************/ +/***************************************/ +/* ListBox handling the footprint list */ +/***************************************/ -FootprintListBox::FootprintListBox(WinEDA_CvpcbFrame * parent, - wxWindowID id, const wxPoint& loc, const wxSize& size, - int nbitems, wxString choice[]): - ListBoxBase(parent, id, loc, size) +FootprintListBox::FootprintListBox( WinEDA_CvpcbFrame* parent, + wxWindowID id, const wxPoint& loc, const wxSize& size, + int nbitems, wxString choice[] ) : + ListBoxBase( parent, id, loc, size ) { - SetActiveFootprintList(TRUE); + SetActiveFootprintList( TRUE ); } - FootprintListBox::~FootprintListBox() { } @@ -80,235 +82,251 @@ FootprintListBox::~FootprintListBox() /**********************************/ int FootprintListBox::GetCount() /**********************************/ + // Return number of items { - return m_ActiveFootprintList->Count(); + return m_ActiveFootprintList->Count(); } /*****************************************************************************/ -void FootprintListBox::SetString(unsigned linecount, const wxString & text) +void FootprintListBox::SetString( unsigned linecount, const wxString& text ) /*****************************************************************************/ + // Change an item text { - if (linecount >= m_ActiveFootprintList->Count()) - linecount = m_ActiveFootprintList->Count()-1; - if ( linecount >= 0 ) (*m_ActiveFootprintList)[linecount] = text; + if( linecount >= m_ActiveFootprintList->Count() ) + linecount = m_ActiveFootprintList->Count() - 1; + if( linecount >= 0 ) + (*m_ActiveFootprintList)[linecount] = text; } + /***************************************************/ wxString FootprintListBox::GetSelectedFootprint() /***************************************************/ + // Return an index for the selected item { -wxString FootprintName; -int ii = GetFirstSelected(); - - if ( ii >= 0 ) - { - wxString msg = (*m_ActiveFootprintList)[ii]; - msg.Trim(TRUE); msg.Trim(FALSE); - FootprintName = msg.AfterFirst(wxChar(' ')); - } + wxString FootprintName; + int ii = GetFirstSelected(); - return FootprintName; + if( ii >= 0 ) + { + wxString msg = (*m_ActiveFootprintList)[ii]; + msg.Trim( TRUE ); msg.Trim( FALSE ); + FootprintName = msg.AfterFirst( wxChar( ' ' ) ); + } + + return FootprintName; } /*********************************************************/ -void FootprintListBox::AppendLine(const wxString & text) +void FootprintListBox::AppendLine( const wxString& text ) /*********************************************************/ + // Add an item at end of list { - m_ActiveFootprintList->Add(text); - SetItemCount(m_ActiveFootprintList->Count() ); + m_ActiveFootprintList->Add( text ); + SetItemCount( m_ActiveFootprintList->Count() ); } /*********************************************************************/ -wxString FootprintListBox::OnGetItemText(long item, long column) const +wxString FootprintListBox::OnGetItemText( long item, long column ) const /*********************************************************************/ + /* Overlayed function: MUST be provided in wxLC_VIRTUAL mode - because real datas are not handled by ListBoxBase -*/ + * because real datas are not handled by ListBoxBase + */ { - return m_ActiveFootprintList->Item(item); + return m_ActiveFootprintList->Item( item ); } + /*****************************************************************/ -void FootprintListBox::SetSelection(unsigned index, bool State) +void FootprintListBox::SetSelection( unsigned index, bool State ) /*****************************************************************/ + // Enable or disable an item { - if ( (int) index >= GetCount() ) index = GetCount()-1; + if( (int) index >= GetCount() ) + index = GetCount() - 1; #ifndef __WXMAC__ - Select(index, State); + Select( index, State ); #endif - EnsureVisible(index); + EnsureVisible( index ); #ifdef __WXMAC__ - Refresh(); + Refresh(); #endif } -/***************************************************************/ -/* ListBox derivee pour l'affichage de la liste des Composants */ -/***************************************************************/ +/**************************************************/ +/* ListBox handling the schematic components list */ +/**************************************************/ -ListBoxCmp::ListBoxCmp(WinEDA_CvpcbFrame * parent, wxWindowID id, - const wxPoint& loc, const wxSize& size, - int nbitems, wxString choice[]): - ListBoxBase(parent, id, loc, size) +ListBoxCmp::ListBoxCmp( WinEDA_CvpcbFrame* parent, wxWindowID id, + const wxPoint& loc, const wxSize& size, + int nbitems, wxString choice[] ) : + ListBoxBase( parent, id, loc, size ) { } - ListBoxCmp::~ListBoxCmp() { } +/* Build the events table for the schematic components list box + */ -/***********************************************************************/ -/* Construction de la table des evenements pour la fenetre des composants */ -/***********************************************************************/ - -BEGIN_EVENT_TABLE(ListBoxCmp, LIST_BOX_TYPE) - EVT_SIZE( ListBoxBase::OnSize) +BEGIN_EVENT_TABLE( ListBoxCmp, LIST_BOX_TYPE ) +EVT_SIZE( ListBoxBase::OnSize ) END_EVENT_TABLE() /****************************/ void ListBoxCmp::Clear() /****************************/ + // Reset ALL datas { - m_ComponentList.Clear(); - SetItemCount(0); + m_ComponentList.Clear(); + SetItemCount( 0 ); } + /******************************/ int ListBoxCmp::GetCount() /******************************/ + // Return number of items { - return m_ComponentList.Count(); + return m_ComponentList.Count(); } + + /********************************************************************/ -void ListBoxCmp::SetString(unsigned linecount, const wxString & text) +void ListBoxCmp::SetString( unsigned linecount, const wxString& text ) /********************************************************************/ + // Change an item text { - if (linecount >= m_ComponentList.Count()) - linecount = m_ComponentList.Count()-1; - if ( linecount >= 0 ) m_ComponentList[linecount] = text; + if( linecount >= m_ComponentList.Count() ) + linecount = m_ComponentList.Count() - 1; + if( linecount >= 0 ) + m_ComponentList[linecount] = text; } + /****************************************************/ -void ListBoxCmp::AppendLine(const wxString & text) +void ListBoxCmp::AppendLine( const wxString& text ) /****************************************************/ + // Add an item at end of list { - m_ComponentList.Add(text); - SetItemCount(m_ComponentList.Count() ); + m_ComponentList.Add( text ); + SetItemCount( m_ComponentList.Count() ); } /****************************************************************/ -wxString ListBoxCmp::OnGetItemText(long item, long column) const +wxString ListBoxCmp::OnGetItemText( long item, long column ) const /****************************************************************/ + /* Overlayed function: MUST be provided in wxLC_VIRTUAL mode - because real datas are not handled by ListBoxBase -*/ + * because real datas are not handled by ListBoxBase + */ { - return m_ComponentList.Item(item); + return m_ComponentList.Item( item ); } + /********************************************************/ -void ListBoxCmp::SetSelection(unsigned index, bool State) +void ListBoxCmp::SetSelection( unsigned index, bool State ) /*********************************************************/ + // Enable or disable an item { - if ( (int) index >= GetCount() ) index = GetCount()-1; + if( (int) index >= GetCount() ) + index = GetCount() - 1; #ifndef __WXMAC__ - Select(index, State); + Select( index, State ); #endif - EnsureVisible(index); + EnsureVisible( index ); #ifdef __WXMAC__ - Refresh(); + Refresh(); #endif } + /********************************************/ void WinEDA_CvpcbFrame::BuildCmpListBox() /********************************************/ -/* Construit la fenetre d'affichage de la liste des composant. - dimx et dimy sont les dimensions de la surface totale d'affichage - et non les dims de la fenetre des Cmp - Si la fenetre d'affichage a deja ete creee, il y a seulement - mise a jour de la liste -*/ + +/* Create or update the schematic components list. + */ { -int ii; -STORECMP * Composant; -wxString msg; -wxSize size(10,10); + int ii; + STORECMP* Composant; + wxString msg; + wxSize size( 10, 10 ); - if( m_ListCmp == NULL ) - { - m_ListCmp = new ListBoxCmp(this, ID_CVPCB_COMPONENT_LIST, - wxDefaultPosition, size, - 0, NULL); - m_ListCmp->SetBackgroundColour(wxColour(225,255,255)); - m_ListCmp->SetForegroundColour(wxColour(0,0,0)); - m_ListCmp->SetFont(*g_FixedFont); - } + if( m_ListCmp == NULL ) + { + m_ListCmp = new ListBoxCmp( this, ID_CVPCB_COMPONENT_LIST, + wxDefaultPosition, size, + 0, NULL ); + m_ListCmp->SetBackgroundColour( wxColour( 225, 255, 255 ) ); + m_ListCmp->SetForegroundColour( wxColour( 0, 0, 0 ) ); + m_ListCmp->SetFont( *g_FixedFont ); + } - m_ListCmp->m_ComponentList.Clear(); - Composant = g_BaseListeCmp; - for (ii = 1 ; Composant != NULL; Composant = Composant->Pnext, ii++ ) - { - msg.Printf(CMP_FORMAT ,ii, - Composant->m_Reference.GetData(), Composant->m_Valeur.GetData(), - Composant->m_Module.GetData()); - m_ListCmp->m_ComponentList.Add(msg); - } - m_ListCmp->SetItemCount(m_ListCmp->m_ComponentList.Count() ); + m_ListCmp->m_ComponentList.Clear(); + Composant = g_BaseListeCmp; + for( ii = 1; Composant != NULL; Composant = Composant->Pnext, ii++ ) + { + msg.Printf( CMP_FORMAT, ii, + Composant->m_Reference.GetData(), Composant->m_Valeur.GetData(), + Composant->m_Module.GetData() ); + m_ListCmp->m_ComponentList.Add( msg ); + } - m_ListCmp->SetSelection(0, TRUE); + m_ListCmp->SetItemCount( m_ListCmp->m_ComponentList.Count() ); + + m_ListCmp->SetSelection( 0, TRUE ); } -/*************************************************************/ +/**********************************************/ void WinEDA_CvpcbFrame::BuildFootprintListBox() -/*************************************************************/ -/* Construit la fenetre d'affichage de la liste des Modules. - dimx et dimy sont les dimensions de la surface totale d'affichage - et non les dims de la fenetre des Modules - Si la fenetre d'affichage a deja ete creee, il y a seulement - mise a jour de la liste -*/ +/**********************************************/ + +/* Create or update the footprint list. + */ { -wxString msg; -wxSize size(10,10); + wxString msg; + wxSize size( 10, 10 ); - if( m_FootprintList == NULL ) - { - m_FootprintList = new FootprintListBox(this, ID_CVPCB_FOOTPRINT_LIST, - wxDefaultPosition, size, - 0, NULL); - m_FootprintList->SetBackgroundColour(wxColour(225,255,225)); - m_FootprintList->SetForegroundColour(wxColour(0,0,0)); - m_FootprintList->SetFont(*g_FixedFont); - } + if( m_FootprintList == NULL ) + { + m_FootprintList = new FootprintListBox( this, ID_CVPCB_FOOTPRINT_LIST, + wxDefaultPosition, size, + 0, NULL ); + m_FootprintList->SetBackgroundColour( wxColour( 225, 255, 225 ) ); + m_FootprintList->SetForegroundColour( wxColour( 0, 0, 0 ) ); + m_FootprintList->SetFont( *g_FixedFont ); + } - m_FootprintList->SetFootprintFullList(); - - msg.Printf(_("Footprints: %d"), m_FootprintList->GetCount()); - SetStatusText(msg,2); + m_FootprintList->SetFootprintFullList(); + + msg.Printf( _( "Footprints: %d" ), m_FootprintList->GetCount() ); + SetStatusText( msg, 2 ); } @@ -316,157 +334,184 @@ wxSize size(10,10); void FootprintListBox::SetFootprintFullList() /************************************************/ { -STOREMOD * FootprintItem; -wxString msg; -int OldSelection = GetSelection(); - - m_FullFootprintList.Clear(); - FootprintItem = g_BaseListePkg; + STOREMOD* FootprintItem; + wxString msg; + int OldSelection = GetSelection(); - for ( int ii = 1; FootprintItem != NULL; FootprintItem = FootprintItem->Pnext, ii++ ) - { - msg.Printf( wxT("%3d %s"), ii, FootprintItem->m_Module.GetData()); - m_FullFootprintList.Add(msg); - } - - SetActiveFootprintList(TRUE); + m_FullFootprintList.Clear(); + FootprintItem = g_BaseListePkg; - if ( (GetCount() == 0) || (OldSelection < 0) || ( OldSelection >= GetCount() ) ) - SetSelection(0, TRUE); - Refresh(); + for( int ii = 1; FootprintItem != NULL; FootprintItem = FootprintItem->Pnext, ii++ ) + { + msg.Printf( wxT( "%3d %s" ), ii, FootprintItem->m_Module.GetData() ); + m_FullFootprintList.Add( msg ); + } + + SetActiveFootprintList( TRUE ); + + if( (GetCount() == 0) || (OldSelection < 0) || ( OldSelection >= GetCount() ) ) + SetSelection( 0, TRUE ); + Refresh(); } + /**********************************************************************/ -void FootprintListBox::SetFootprintFilteredList(STORECMP * Component) +void FootprintListBox::SetFootprintFilteredList( STORECMP* Component ) /*********************************************************************/ { -STOREMOD * FootprintItem; -wxString msg; -int OldSelection = GetSelection(); -bool HasItem = FALSE; - - m_FilteredFootprintList.Clear(); - FootprintItem = g_BaseListePkg; + STOREMOD* FootprintItem; + wxString msg; + int OldSelection = GetSelection(); + bool HasItem = FALSE; - int cmpnum = 1; - for ( int ii = 0; FootprintItem != NULL; FootprintItem = FootprintItem->Pnext, ii++ ) - { - /* Search for matching footprints */ - for ( unsigned jj = 0; jj < Component->m_FootprintFilter.GetCount(); jj ++ ) - { - if ( ! FootprintItem->m_Module.Matches(Component->m_FootprintFilter[jj]) ) - continue; - msg.Printf( wxT("%3d %s"), cmpnum++, FootprintItem->m_Module.GetData()); - m_FilteredFootprintList.Add(msg); - HasItem = TRUE; - } - } - - - if ( HasItem ) SetActiveFootprintList(FALSE); - else SetActiveFootprintList(TRUE); + m_FilteredFootprintList.Clear(); + FootprintItem = g_BaseListePkg; - - if ( (GetCount() == 0) || ( OldSelection >= GetCount() ) ) - SetSelection(0, TRUE); - - Refresh(); + int cmpnum = 1; + for( int ii = 0; FootprintItem != NULL; FootprintItem = FootprintItem->Pnext, ii++ ) + { + /* Search for matching footprints */ + for( unsigned jj = 0; jj < Component->m_FootprintFilter.GetCount(); jj++ ) + { + if( !FootprintItem->m_Module.Matches( Component->m_FootprintFilter[jj] ) ) + continue; + msg.Printf( wxT( "%3d %s" ), cmpnum++, FootprintItem->m_Module.GetData() ); + m_FilteredFootprintList.Add( msg ); + HasItem = TRUE; + } + } + + if( HasItem ) + SetActiveFootprintList( FALSE ); + else + SetActiveFootprintList( TRUE ); + + if( (GetCount() == 0) || ( OldSelection >= GetCount() ) ) + SetSelection( 0, TRUE ); + + Refresh(); } /**************************************************************************/ -void FootprintListBox::SetActiveFootprintList(bool FullList, bool Redraw) +void FootprintListBox::SetActiveFootprintList( bool FullList, bool Redraw ) /**************************************************************************/ + +/** Set the footprint list. We can have 2 footprint list: + * The full footprint list + * The filtered footprint list (if the current selected component has a filter for footprints) + * @param FullList true = full footprint list, false = filtered footprint list + * @param Redraw = true to redraw the window + */ { -bool old_selection = m_UseFootprintFullList; - - if ( FullList ) + bool old_selection = m_UseFootprintFullList; + + /* Workaround for a curious bug in wxWidgets: + * if we switch from a long list of footprints to a short list (a filtered footprint list), + * and if the selected item is near the end of the long list, + * the new list is not displayed from the top of the list box + */ + if ( m_ActiveFootprintList ) { - m_UseFootprintFullList = TRUE; - m_ActiveFootprintList = &m_FullFootprintList; - SetItemCount(m_FullFootprintList.GetCount() ); - } - else - { - m_UseFootprintFullList = FALSE; - m_ActiveFootprintList = &m_FilteredFootprintList; - SetItemCount(m_FilteredFootprintList.GetCount() ); + bool new_selection; + if( FullList ) new_selection = TRUE; + else new_selection = FALSE; + if( new_selection != old_selection ) + SetSelection( 0, TRUE ); } - if ( Redraw ) - { - if ( ! m_UseFootprintFullList || (m_UseFootprintFullList != old_selection) ) - { - Refresh(); - } - } + if( FullList ) + { + m_UseFootprintFullList = TRUE; + m_ActiveFootprintList = &m_FullFootprintList; + SetItemCount( m_FullFootprintList.GetCount() ); + } + else + { + m_UseFootprintFullList = FALSE; + m_ActiveFootprintList = &m_FilteredFootprintList; + SetItemCount( m_FilteredFootprintList.GetCount() ); + } - if ( ! m_UseFootprintFullList || (m_UseFootprintFullList != old_selection) ) - { - m_Parent->SetStatusText(wxEmptyString,0); - m_Parent->SetStatusText(wxEmptyString,1); - } - - wxString msg; - if ( FullList ) - msg.Printf(_("Footprints (All): %d"), m_ActiveFootprintList->GetCount()); - else - msg.Printf(_("Footprints (filtered): %d"), m_ActiveFootprintList->GetCount()); - m_Parent->SetStatusText(msg,2); + if( Redraw ) + { + if( !m_UseFootprintFullList || (m_UseFootprintFullList != old_selection) ) + { + Refresh(); + } + } + + if( !m_UseFootprintFullList || (m_UseFootprintFullList != old_selection) ) + { + m_Parent->SetStatusText( wxEmptyString, 0 ); + m_Parent->SetStatusText( wxEmptyString, 1 ); + } + + wxString msg; + if( FullList ) + msg.Printf( _( "Footprints (All): %d" ), m_ActiveFootprintList->GetCount() ); + else + msg.Printf( _( "Footprints (filtered): %d" ), m_ActiveFootprintList->GetCount() ); + m_Parent->SetStatusText( msg, 2 ); } -/***********************************************************************/ -/* Construction de la table des evenements pour la fenetre des modules */ -/***********************************************************************/ -BEGIN_EVENT_TABLE(FootprintListBox, LIST_BOX_TYPE) - EVT_SIZE( ListBoxBase::OnSize) +/**************************************/ +/* Event table for the footprint list */ +/**************************************/ + +BEGIN_EVENT_TABLE( FootprintListBox, LIST_BOX_TYPE ) +EVT_SIZE( ListBoxBase::OnSize ) END_EVENT_TABLE() /********************************************************/ -void FootprintListBox::OnLeftClick(wxListEvent & event) +void FootprintListBox::OnLeftClick( wxListEvent& event ) /********************************************************/ { -STOREMOD * Module; -wxString msg; -wxString FootprintName = GetSelectedFootprint(); - - Module = GetModuleDescrByName(FootprintName); - if( m_Parent->DrawFrame ) - { - m_Parent->CreateScreenCmp(); /* refresh general */ - } + STOREMOD* Module; + wxString msg; + wxString FootprintName = GetSelectedFootprint(); - if ( Module ) msg = Module->m_Doc; - m_Parent->SetStatusText(msg,0); + Module = GetModuleDescrByName( FootprintName ); + if( m_Parent->DrawFrame ) + { + m_Parent->CreateScreenCmp(); /* refresh general */ + } - msg = wxT("KeyW: "); - if( Module ) msg += Module->m_KeyWord; - m_Parent->SetStatusText(msg, 1); + if( Module ) + msg = Module->m_Doc; + m_Parent->SetStatusText( msg, 0 ); + + msg = wxT( "KeyW: " ); + if( Module ) + msg += Module->m_KeyWord; + m_Parent->SetStatusText( msg, 1 ); } /******************************************************/ -void FootprintListBox::OnLeftDClick(wxListEvent & event) +void FootprintListBox::OnLeftDClick( wxListEvent& event ) /******************************************************/ { -wxString FootprintName = GetSelectedFootprint(); + wxString FootprintName = GetSelectedFootprint(); - m_Parent->SetNewPkg(FootprintName); + m_Parent->SetNewPkg( FootprintName ); } + /**************************************************************/ -STOREMOD * GetModuleDescrByName(const wxString & FootprintName) +STOREMOD* GetModuleDescrByName( const wxString& FootprintName ) /**************************************************************/ { -STOREMOD * FootprintItem = g_BaseListePkg; + STOREMOD* FootprintItem = g_BaseListePkg; - for ( ; FootprintItem != NULL; FootprintItem = FootprintItem->Pnext ) - { - if( FootprintItem->m_Module == FootprintName) - break; // found ! - } - return FootprintItem; + for( ; FootprintItem != NULL; FootprintItem = FootprintItem->Pnext ) + { + if( FootprintItem->m_Module == FootprintName ) + break; // found ! + } + + return FootprintItem; } diff --git a/include/wxstruct.h b/include/wxstruct.h index c4b5d4461c..2cfe2a6d54 100644 --- a/include/wxstruct.h +++ b/include/wxstruct.h @@ -1409,7 +1409,7 @@ class WinEDA_MsgPanel : public wxPanel protected: std::vector m_Items; - void showItem( wxWindowDC& dc, const MsgItem& aItem ); + void showItem( wxDC& dc, const MsgItem& aItem ); public: WinEDA_DrawFrame* m_Parent;