Provide lazy loading of webview panel
Avoid instantiating the panel prior to it being shown (if at all)
This commit is contained in:
@@ -368,7 +368,9 @@ SCH_EDIT_FRAME::SCH_EDIT_FRAME( KIWAY* aKiway, wxWindow* aParent ) :
|
||||
SetAuiPaneSize( m_auimgr, designBlocksPane, aui_cfg.design_blocks_panel_docked_width, -1 );
|
||||
|
||||
if( aui_cfg.remote_symbol_show )
|
||||
{
|
||||
SetAuiPaneSize( m_auimgr, remoteSymbolPane, aui_cfg.remote_symbol_panel_docked_width, -1 );
|
||||
}
|
||||
|
||||
if( aui_cfg.hierarchy_panel_docked_width > 0 )
|
||||
{
|
||||
@@ -412,6 +414,14 @@ SCH_EDIT_FRAME::SCH_EDIT_FRAME( KIWAY* aKiway, wxWindow* aParent ) :
|
||||
m_auimgr.Update();
|
||||
}
|
||||
|
||||
CallAfter( [this]()
|
||||
{
|
||||
wxAuiPaneInfo& remotePane = m_auimgr.GetPane( RemoteSymbolPaneName() );
|
||||
|
||||
if( remotePane.IsShown() && m_remoteSymbolPane )
|
||||
m_remoteSymbolPane->Activate();
|
||||
} );
|
||||
|
||||
resolveCanvasType();
|
||||
SwitchCanvas( m_canvasType );
|
||||
|
||||
@@ -2954,6 +2964,9 @@ void SCH_EDIT_FRAME::ToggleRemoteSymbolPanel()
|
||||
|
||||
if( remotePane.IsShown() )
|
||||
{
|
||||
if( m_remoteSymbolPane )
|
||||
m_remoteSymbolPane->Activate();
|
||||
|
||||
if( remotePane.IsFloating() )
|
||||
{
|
||||
remotePane.FloatingSize( cfg->m_AuiPanels.remote_symbol_panel_float_width,
|
||||
|
||||
@@ -258,21 +258,6 @@ PANEL_REMOTE_SYMBOL::PANEL_REMOTE_SYMBOL( SCH_EDIT_FRAME* aParent ) :
|
||||
controlsSizer->Add( m_configButton, 0, wxALIGN_CENTER_VERTICAL );
|
||||
|
||||
topSizer->Add( controlsSizer, 0, wxEXPAND | wxALL, FromDIP( 4 ) );
|
||||
|
||||
m_webView = new WEBVIEW_PANEL( this );
|
||||
m_webView->AddMessageHandler( wxS( "kicad" ),
|
||||
[this]( const wxString& aPayload )
|
||||
{
|
||||
onKicadMessage( aPayload );
|
||||
} );
|
||||
m_webView->SetHandleExternalLinks( true );
|
||||
m_webView->BindLoadedEvent();
|
||||
|
||||
if( wxWebView* browser = m_webView->GetWebView() )
|
||||
browser->Bind( wxEVT_WEBVIEW_LOADED, &PANEL_REMOTE_SYMBOL::onWebViewLoaded, this );
|
||||
|
||||
topSizer->Add( m_webView, 1, wxEXPAND | wxLEFT | wxRIGHT | wxBOTTOM, FromDIP( 2 ) );
|
||||
|
||||
SetSizer( topSizer );
|
||||
|
||||
m_dataSourceChoice->Bind( wxEVT_CHOICE, &PANEL_REMOTE_SYMBOL::onDataSourceChanged, this );
|
||||
@@ -292,6 +277,35 @@ PANEL_REMOTE_SYMBOL::~PANEL_REMOTE_SYMBOL()
|
||||
}
|
||||
|
||||
|
||||
void PANEL_REMOTE_SYMBOL::Activate()
|
||||
{
|
||||
ensureWebView();
|
||||
RefreshDataSources();
|
||||
}
|
||||
|
||||
|
||||
void PANEL_REMOTE_SYMBOL::ensureWebView()
|
||||
{
|
||||
if( m_webView )
|
||||
return;
|
||||
|
||||
m_webView = new WEBVIEW_PANEL( this );
|
||||
m_webView->AddMessageHandler( wxS( "kicad" ),
|
||||
[this]( const wxString& aPayload )
|
||||
{
|
||||
onKicadMessage( aPayload );
|
||||
} );
|
||||
m_webView->SetHandleExternalLinks( true );
|
||||
m_webView->BindLoadedEvent();
|
||||
|
||||
if( wxWebView* browser = m_webView->GetWebView() )
|
||||
browser->Bind( wxEVT_WEBVIEW_LOADED, &PANEL_REMOTE_SYMBOL::onWebViewLoaded, this );
|
||||
|
||||
GetSizer()->Add( m_webView, 1, wxEXPAND | wxLEFT | wxRIGHT | wxBOTTOM, FromDIP( 2 ) );
|
||||
Layout();
|
||||
}
|
||||
|
||||
|
||||
void PANEL_REMOTE_SYMBOL::BindWebViewLoaded()
|
||||
{
|
||||
if( wxWebView* browser = m_webView ? m_webView->GetWebView() : nullptr )
|
||||
@@ -376,7 +390,10 @@ void PANEL_REMOTE_SYMBOL::RefreshDataSources()
|
||||
if( m_providerEntries.empty() )
|
||||
{
|
||||
m_dataSourceChoice->Enable( false );
|
||||
showMessage( _( "No remote providers configured." ) );
|
||||
|
||||
if( m_webView )
|
||||
showMessage( _( "No remote providers configured." ) );
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -397,7 +414,9 @@ void PANEL_REMOTE_SYMBOL::RefreshDataSources()
|
||||
}
|
||||
|
||||
m_dataSourceChoice->SetSelection( selected );
|
||||
loadProvider( selected );
|
||||
|
||||
if( m_webView )
|
||||
loadProvider( selected );
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -56,6 +56,7 @@ public:
|
||||
explicit PANEL_REMOTE_SYMBOL( SCH_EDIT_FRAME* aParent );
|
||||
~PANEL_REMOTE_SYMBOL() override;
|
||||
|
||||
void Activate();
|
||||
void RefreshDataSources();
|
||||
bool HasDataSources() const { return !m_providerEntries.empty(); }
|
||||
void BindWebViewLoaded();
|
||||
@@ -63,6 +64,7 @@ public:
|
||||
void LoadCookies();
|
||||
|
||||
private:
|
||||
void ensureWebView();
|
||||
void onDataSourceChanged( wxCommandEvent& aEvent );
|
||||
void onConfigure( wxCommandEvent& aEvent );
|
||||
void onRefresh( wxCommandEvent& aEvent );
|
||||
|
||||
Reference in New Issue
Block a user