← Back to team overview

kicad-developers team mailing list archive

Re: [PATCH] Load library progress dialog

 

This sounds really nice, I'm testing it now.

I'm not sure how, but you seem to have got another patch tangled up in
this one. I've attached a cleaned version for the convenience of anyone
else looking to test this.

On Thu, Feb 02, 2017 at 07:51:41PM +1100, Oliver Walters wrote:
> When first launching eeschema, if there are many libs selected it can take
> a while to load, and appears as if KiCAD is "hanging".
> 
> This patch adds a progress dialog which displays the status of library
> loading, for improved UX.

>From dc54026f0ba36fbbe544b32449b30f0dc1f9ae8c Mon Sep 17 00:00:00 2001
From: Oliver <oliver.henry.walters@xxxxxxxxx>
Date: Thu, 2 Feb 2017 16:48:29 +1100
Subject: [PATCH] Added progress dialogs for library loading

- Modal wxProgressDialog when loading symbol libraries (eeschema / libedit)
---
 eeschema/class_library.cpp | 26 +++++++++++++++++++++++++-
 eeschema/class_library.h   |  2 +-
 2 files changed, 26 insertions(+), 2 deletions(-)

diff --git a/eeschema/class_library.cpp b/eeschema/class_library.cpp
index 994616d..988ac32 100644
--- a/eeschema/class_library.cpp
+++ b/eeschema/class_library.cpp
@@ -44,6 +44,7 @@
 #include <class_library.h>
 #include <sch_legacy_plugin.h>
 
+#include <wx/progdlg.h>
 #include <wx/tokenzr.h>
 #include <wx/regex.h>
 
@@ -900,7 +901,7 @@ const wxString PART_LIBS::CacheName( const wxString& aFullProjectFilename )
 }
 
 
-void PART_LIBS::LoadAllLibraries( PROJECT* aProject ) throw( IO_ERROR, boost::bad_pointer )
+void PART_LIBS::LoadAllLibraries( PROJECT* aProject, bool aShowProgress ) throw( IO_ERROR, boost::bad_pointer )
 {
     wxString        filename;
     wxString        libs_not_found;
@@ -920,8 +921,26 @@ void PART_LIBS::LoadAllLibraries( PROJECT* aProject ) throw( IO_ERROR, boost::ba
 
     wxASSERT( !size() );    // expect to load into "this" empty container.
 
+    wxProgressDialog lib_dialog( _( "Loading symbol libraries" ),
+                                 wxEmptyString,
+                                 lib_names.GetCount(),
+                                 NULL,
+                                 wxPD_APP_MODAL );
+
+    if( aShowProgress )
+    {
+        lib_dialog.Show();
+    }
+
+    wxString progress_message;
+
     for( unsigned i = 0; i < lib_names.GetCount();  ++i )
     {
+        if( aShowProgress )
+        {
+            lib_dialog.Update( i, _( "Loading " + lib_names[i] ) );
+        }
+
         wxFileName fn = lib_names[i];
         // lib_names[] does not store the file extension. Set it:
         fn.SetExt( SchematicLibraryFileExtension );
@@ -966,6 +985,11 @@ void PART_LIBS::LoadAllLibraries( PROJECT* aProject ) throw( IO_ERROR, boost::ba
         }
     }
 
+    if( aShowProgress )
+    {
+        lib_dialog.Destroy();
+    }
+
     // add the special cache library.
     wxString cache_name = CacheName( aProject->GetProjectFullName() );
     PART_LIB* cache_lib;
diff --git a/eeschema/class_library.h b/eeschema/class_library.h
index 31db70d..421bfdd 100644
--- a/eeschema/class_library.h
+++ b/eeschema/class_library.h
@@ -230,7 +230,7 @@ public:
      * loads all of the project's libraries into this container, which should
      * be cleared before calling it.
      */
-    void LoadAllLibraries( PROJECT* aProject ) throw( IO_ERROR, boost::bad_pointer );
+    void LoadAllLibraries( PROJECT* aProject, bool aShowProgress=true ) throw( IO_ERROR, boost::bad_pointer );
 
     /**
      * Function LibNamesAndPaths

Follow ups

References