Remove background fp loading from Choose Symbol dlg.
There are a bunch of problems with event processing and closing documents, etc., when enabled. See the bug report for more info. Fixes: lp:1774777 * https://bugs.launchpad.net/kicad/+bug/1774777
This commit is contained in:
parent
5098c5796a
commit
b9874da3a6
|
@ -603,6 +603,8 @@ int DIALOG_SHIM::ShowQuasiModal()
|
|||
|
||||
event_loop.Run();
|
||||
|
||||
m_qmodal_showing = false;
|
||||
|
||||
return GetReturnCode();
|
||||
}
|
||||
|
||||
|
@ -622,8 +624,6 @@ void DIALOG_SHIM::EndQuasiModal( int retCode )
|
|||
return;
|
||||
}
|
||||
|
||||
m_qmodal_showing = false;
|
||||
|
||||
if( m_qmodal_loop )
|
||||
{
|
||||
if( m_qmodal_loop->IsRunning() )
|
||||
|
|
|
@ -20,19 +20,10 @@
|
|||
#include <dialog_shim.h>
|
||||
#include <kiway.h>
|
||||
#include <kiway_player.h>
|
||||
#include <make_unique.h>
|
||||
#include <project.h>
|
||||
#include <widgets/footprint_choice.h>
|
||||
#include <widgets/footprint_select_widget.h>
|
||||
|
||||
#include <functional>
|
||||
#include <wx/combo.h>
|
||||
#include <wx/gauge.h>
|
||||
#include <wx/odcombo.h>
|
||||
#include <wx/simplebook.h>
|
||||
#include <wx/sizer.h>
|
||||
#include <wx/timer.h>
|
||||
#include <wx/utils.h>
|
||||
#include <wx/wupdlock.h>
|
||||
#include <widgets/progress_reporter.h>
|
||||
|
||||
|
@ -47,16 +38,6 @@ enum
|
|||
};
|
||||
|
||||
|
||||
/**
|
||||
* Page numbers in the wxSimplebook
|
||||
*/
|
||||
enum
|
||||
{
|
||||
PAGE_PROGRESS,
|
||||
PAGE_SELECT
|
||||
};
|
||||
|
||||
|
||||
wxDEFINE_EVENT( EVT_FOOTPRINT_SELECTED, wxCommandEvent );
|
||||
|
||||
|
||||
|
@ -73,22 +54,15 @@ FOOTPRINT_SELECT_WIDGET::FOOTPRINT_SELECT_WIDGET( wxWindow* aParent,
|
|||
{
|
||||
m_zero_filter = true;
|
||||
m_sizer = new wxBoxSizer( wxVERTICAL );
|
||||
m_book = new wxSimplebook( this, wxID_ANY );
|
||||
m_progress_ctrl = new GAUGE_PROGRESS_REPORTER( m_book, 2 );
|
||||
m_fp_sel_ctrl = new FOOTPRINT_CHOICE( m_book, wxID_ANY );
|
||||
|
||||
m_book->SetEffect( wxSHOW_EFFECT_BLEND );
|
||||
m_book->AddPage( m_progress_ctrl, "", true );
|
||||
m_book->AddPage( m_fp_sel_ctrl, "", false );
|
||||
m_sizer->Add( m_book, 1, wxEXPAND | wxALL, 5 );
|
||||
m_fp_sel_ctrl = new FOOTPRINT_CHOICE( this, wxID_ANY );
|
||||
m_sizer->Add( m_fp_sel_ctrl, 1, wxEXPAND | wxALL, 5 );
|
||||
|
||||
SetSizer( m_sizer );
|
||||
Layout();
|
||||
m_sizer->Fit( this );
|
||||
|
||||
m_fp_sel_ctrl->Bind( wxEVT_COMBOBOX, &FOOTPRINT_SELECT_WIDGET::OnComboBox, this );
|
||||
m_fp_sel_ctrl->Bind(
|
||||
EVT_INTERACTIVE_CHOICE, &FOOTPRINT_SELECT_WIDGET::OnComboInteractive, this );
|
||||
m_fp_sel_ctrl->Bind( EVT_INTERACTIVE_CHOICE, &FOOTPRINT_SELECT_WIDGET::OnComboInteractive, this );
|
||||
}
|
||||
|
||||
|
||||
|
@ -101,7 +75,8 @@ void FOOTPRINT_SELECT_WIDGET::Load( KIWAY& aKiway, PROJECT& aProject )
|
|||
auto fp_lib_table = aProject.PcbFootprintLibs( aKiway );
|
||||
m_fp_list = FOOTPRINT_LIST::GetInstance( aKiway );
|
||||
|
||||
m_fp_list->ReadFootprintFiles( fp_lib_table, nullptr, m_progress_ctrl );
|
||||
WX_PROGRESS_REPORTER progressReporter( this, _( "Loading Footprint Libraries" ), 2 );
|
||||
m_fp_list->ReadFootprintFiles( fp_lib_table, nullptr, &progressReporter );
|
||||
FootprintsLoaded();
|
||||
}
|
||||
catch( ... )
|
||||
|
@ -115,7 +90,6 @@ void FOOTPRINT_SELECT_WIDGET::FootprintsLoaded()
|
|||
{
|
||||
m_fp_filter.SetList( *m_fp_list );
|
||||
|
||||
m_book->SetSelection( PAGE_SELECT );
|
||||
m_finished_loading = true;
|
||||
|
||||
if( m_update )
|
||||
|
|
|
@ -62,7 +62,6 @@ DIALOG_CHOOSE_COMPONENT::DIALOG_CHOOSE_COMPONENT( SCH_BASE_FRAME* aParent, const
|
|||
m_deMorganConvert( aDeMorganConvert >= 0 ? aDeMorganConvert : 0 ),
|
||||
m_allow_field_edits( aAllowFieldEdits ),
|
||||
m_show_footprints( aShowFootprints ),
|
||||
m_load_footprints( aShowFootprints ),
|
||||
m_external_browser_requested( false )
|
||||
{
|
||||
auto sizer = new wxBoxSizer( wxVERTICAL );
|
||||
|
@ -101,7 +100,7 @@ DIALOG_CHOOSE_COMPONENT::DIALOG_CHOOSE_COMPONENT( SCH_BASE_FRAME* aParent, const
|
|||
SetSizer( sizer );
|
||||
|
||||
Bind( wxEVT_INIT_DIALOG, &DIALOG_CHOOSE_COMPONENT::OnInitDialog, this );
|
||||
Bind( wxEVT_IDLE, &DIALOG_CHOOSE_COMPONENT::OnIdle, this );
|
||||
Bind( wxEVT_ACTIVATE, &DIALOG_CHOOSE_COMPONENT::OnActivate, this );
|
||||
Bind( wxEVT_TIMER, &DIALOG_CHOOSE_COMPONENT::OnCloseTimer, this, m_dbl_click_timer->GetId() );
|
||||
Bind( COMPONENT_PRESELECTED, &DIALOG_CHOOSE_COMPONENT::OnComponentPreselected, this );
|
||||
Bind( COMPONENT_SELECTED, &DIALOG_CHOOSE_COMPONENT::OnComponentSelected, this );
|
||||
|
@ -138,11 +137,21 @@ DIALOG_CHOOSE_COMPONENT::DIALOG_CHOOSE_COMPONENT( SCH_BASE_FRAME* aParent, const
|
|||
|
||||
DIALOG_CHOOSE_COMPONENT::~DIALOG_CHOOSE_COMPONENT()
|
||||
{
|
||||
Unbind( wxEVT_INIT_DIALOG, &DIALOG_CHOOSE_COMPONENT::OnInitDialog, this );
|
||||
Unbind( wxEVT_ACTIVATE, &DIALOG_CHOOSE_COMPONENT::OnActivate, this );
|
||||
Unbind( wxEVT_TIMER, &DIALOG_CHOOSE_COMPONENT::OnCloseTimer, this );
|
||||
Unbind( COMPONENT_PRESELECTED, &DIALOG_CHOOSE_COMPONENT::OnComponentPreselected, this );
|
||||
Unbind( COMPONENT_SELECTED, &DIALOG_CHOOSE_COMPONENT::OnComponentSelected, this );
|
||||
|
||||
m_sch_view_ctrl->Unbind( wxEVT_LEFT_DCLICK, &DIALOG_CHOOSE_COMPONENT::OnSchViewDClick, this );
|
||||
m_sch_view_ctrl->Unbind( wxEVT_PAINT, &DIALOG_CHOOSE_COMPONENT::OnSchViewPaint, this );
|
||||
|
||||
if( m_fp_sel_ctrl )
|
||||
m_fp_sel_ctrl->Unbind( EVT_FOOTPRINT_SELECTED, &DIALOG_CHOOSE_COMPONENT::OnFootprintSelected, this );
|
||||
|
||||
// I am not sure the following two lines are necessary,
|
||||
// but they will not hurt anyone
|
||||
m_dbl_click_timer->Stop();
|
||||
Unbind( wxEVT_TIMER, &DIALOG_CHOOSE_COMPONENT::OnCloseTimer, this );
|
||||
|
||||
delete m_dbl_click_timer;
|
||||
|
||||
m_last_dlg_size = GetSize();
|
||||
|
@ -197,17 +206,17 @@ void DIALOG_CHOOSE_COMPONENT::OnInitDialog( wxInitDialogEvent& aEvent )
|
|||
// This hides the GAL panel and shows the status label
|
||||
m_fp_view_ctrl->SetStatusText( wxEmptyString );
|
||||
}
|
||||
|
||||
if( m_fp_sel_ctrl )
|
||||
m_fp_sel_ctrl->Load( Kiway(), Prj() );
|
||||
}
|
||||
|
||||
|
||||
// Let the dialog display before starting the footprint load
|
||||
void DIALOG_CHOOSE_COMPONENT::OnIdle( wxIdleEvent& aEvent )
|
||||
void DIALOG_CHOOSE_COMPONENT::OnActivate( wxActivateEvent& event )
|
||||
{
|
||||
if( m_load_footprints && m_fp_sel_ctrl )
|
||||
{
|
||||
m_load_footprints = false;
|
||||
m_fp_sel_ctrl->Load( Kiway(), Prj() );
|
||||
}
|
||||
m_tree->SetFocus();
|
||||
|
||||
event.Skip(); // required under wxMAC
|
||||
}
|
||||
|
||||
|
||||
|
@ -220,7 +229,7 @@ LIB_ID DIALOG_CHOOSE_COMPONENT::GetSelectedLibId( int* aUnit ) const
|
|||
void DIALOG_CHOOSE_COMPONENT::OnCloseTimer( wxTimerEvent& aEvent )
|
||||
{
|
||||
// Hack handler because of eaten MouseUp event. See
|
||||
// DIALOG_CHOOSE_COMPONENT::OnDoubleClickTreeActivation for the beginning
|
||||
// DIALOG_CHOOSE_COMPONENT::OnComponentSelected for the beginning
|
||||
// of this spaghetti noodle.
|
||||
|
||||
auto state = wxGetMouseState();
|
||||
|
@ -279,7 +288,7 @@ void DIALOG_CHOOSE_COMPONENT::ShowFootprintFor( LIB_ID const& aLibId )
|
|||
|
||||
void DIALOG_CHOOSE_COMPONENT::ShowFootprint( wxString const& aName )
|
||||
{
|
||||
if( !m_fp_view_ctrl )
|
||||
if( !m_fp_view_ctrl || !m_fp_view_ctrl->IsInitialized() )
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
|
|
@ -148,8 +148,8 @@ protected:
|
|||
wxPanel* ConstructRightPanel( wxWindow* aParent );
|
||||
|
||||
void OnInitDialog( wxInitDialogEvent& aEvent );
|
||||
void OnActivate( wxActivateEvent& event );
|
||||
void OnCloseTimer( wxTimerEvent& aEvent );
|
||||
void OnIdle( wxIdleEvent& aEvent );
|
||||
|
||||
void OnSchViewDClick( wxMouseEvent& aEvent );
|
||||
void OnSchViewPaint( wxPaintEvent& aEvent );
|
||||
|
@ -207,7 +207,6 @@ protected:
|
|||
int m_deMorganConvert;
|
||||
bool m_allow_field_edits;
|
||||
bool m_show_footprints;
|
||||
bool m_load_footprints;
|
||||
bool m_external_browser_requested;
|
||||
wxString m_fp_override;
|
||||
|
||||
|
|
|
@ -182,6 +182,15 @@ void COMPONENT_TREE::Regenerate()
|
|||
}
|
||||
|
||||
|
||||
void COMPONENT_TREE::SetFocus()
|
||||
{
|
||||
if( m_query_ctrl )
|
||||
m_query_ctrl->SetFocus();
|
||||
else
|
||||
m_tree_ctrl->SetFocus();
|
||||
}
|
||||
|
||||
|
||||
void COMPONENT_TREE::toggleExpand( const wxDataViewItem& aTreeId )
|
||||
{
|
||||
if( !aTreeId.IsOk() )
|
||||
|
|
|
@ -106,6 +106,8 @@ public:
|
|||
*/
|
||||
void Regenerate();
|
||||
|
||||
void SetFocus() override;
|
||||
|
||||
protected:
|
||||
/**
|
||||
* Expands or collapses a node, switching it to the opposite state.
|
||||
|
|
|
@ -29,12 +29,7 @@
|
|||
class KIWAY;
|
||||
class PROJECT;
|
||||
class FOOTPRINT_CHOICE;
|
||||
class GAUGE_PROGRESS_REPORTER;
|
||||
class wxMenu;
|
||||
class wxTimer;
|
||||
class wxTimerEvent;
|
||||
class wxWindow;
|
||||
class wxSimplebook;
|
||||
|
||||
/**
|
||||
* This event is fired when a footprint is selected. The string data of the
|
||||
|
@ -130,10 +125,8 @@ public:
|
|||
|
||||
private:
|
||||
KIWAY* m_kiway;
|
||||
GAUGE_PROGRESS_REPORTER* m_progress_ctrl;
|
||||
FOOTPRINT_CHOICE* m_fp_sel_ctrl;
|
||||
wxSizer* m_sizer;
|
||||
wxSimplebook* m_book;
|
||||
|
||||
bool m_update;
|
||||
bool m_finished_loading;
|
||||
|
|
Loading…
Reference in New Issue