Provide lazy loading of webview panel

Avoid instantiating the panel prior to it being shown (if at all)
This commit is contained in:
Seth Hillbrand
2026-03-18 21:36:14 -07:00
parent ea34bcad4b
commit 2439de47b7
3 changed files with 51 additions and 17 deletions
+13
View File
@@ -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,
+36 -17
View File
@@ -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 );
}
+2
View File
@@ -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 );