← Back to team overview

kicad-developers team mailing list archive

Re: [PATCH] Add live footprint filtering in modview window

 

Hi Oliver,

I admit that recently I have wished for a footprint filter (/me puts a
tinfoil hat), so I like the idea.

Being picky, I noticed that library and footprint filters behave a
little differently: for libraries one needs to explicitly use wildcards,
whereas it is not necessary for footprint names. To give an example:
"SMD:" leaves an empty list but "*SMD*:" gets me beloved SMD parts. For
footprint names it is enough to type "0603", no need to use "*0603*". As
you see, it is a minor detail, no showstoppers.

Cheers,
Orson

On 11/16/2017 10:26 PM, Oliver Walters wrote:
> Wayne,
> 
> Patch set now goes to 0009 (all patches re-attached to this email).
> 
> Most recent patch adds the following:
> 
> - Busy cursor while loading each library (otherwise it feels like KiCad is
> just sleepy)
> - Further nullptr checks, trying to fix Seth's error
> - Removed a tooltip that erroneously suggested that regex was supported.
> 
> Cheers
> 
> On Wed, Nov 1, 2017 at 11:21 AM, Wayne Stambaugh <stambaughw@xxxxxxxxx>
> wrote:
> 
>> On 10/31/2017 5:01 PM, Oliver Walters wrote:
>>> How should I proceed here then?
>>>
>>> I would like to see the various libraries being "cached" in the
>>> background, but this is increasing the scope of the work by a large
>> factor.
>>>
>>> One thing I have noticed:
>>>
>>> In eeschema when you launch the component viewer, it (on first run) maps
>>> and caches all the footprint libraries. This can take AGES (especially
>>> on Windows). However on subsequent launches of the component viewer it
>>> appears instantly. It appears to be keeping a static map of the
>>> footprint library data.
>>>
>>> a) Would this be an acceptable approach for the footprint viewer window
>>
>> Sure.  Code reuse is a good thing.  I'm pretty sure the threaded
>> footprint library code is split out from the component chooser so it
>> should be reusable.
>>
>>> b) What happens when the library data changes externally? Does component
>>> viewer need to be reloaded?
>>
>> No, only the library that changed gets reloaded the next time it's
>> accessed.  It is not automatic.  I thought about using wxFileWatcher but
>> that could be a lot of overhead for little net gain.  See the pcb plugin
>> cache() functions.
>>
>>> c) Can we globally perform this caching in a background thread when
>>> KiCad launches? This will hide the large pauses (up to a minute under
>>> Windows) from the user...
>>
>> Yes, this should be done as a project element so that it can be accessed
>> from all of the main windows.  Please keep in mind, this could be a lot
>> of work and given that we are nearing a stable 5 release feature freeze,
>> so if it's not by then it will not make it into the stable 5 release.
>>
>>>
>>> Oliver
>>>
>>> On Tue, Oct 31, 2017 at 11:32 PM, Wayne Stambaugh <stambaughw@xxxxxxxxx
>>> <mailto:stambaughw@xxxxxxxxx>> wrote:
>>>
>>>     On 10/31/2017 1:25 AM, Oliver Walters wrote:
>>>     > Hmm, I had thought that there was a way to load only the *names* of
>>>     > footprints, rather than individually parsing each footprint file.
>> It
>>>     > appears that this is not the case. Any suggestions on how the speed
>>>     > could be improved? Currently I'm reading out all the footprint
>> names in
>>>     > each footprint library and only storing the names (wxString)
>> rather than
>>>     > the MODULE* objects. However, I still have to parse the entire
>> library
>>>     > on load.
>>>     >
>>>     > Ideally, I think it would be good to just read in the names, and
>> then
>>>     > load and display individual MODULE objects on demand.. Is this
>> possible?
>>>
>>>     This is possible (although not implemented) for library types (kicad,
>>>     geda) that use one file per footprint.  You could just read the file
>>>     names from the folder and load the files as required.  If you want to
>>>     search any other properties of the footprint, then you will have to
>> load
>>>     all of the footprints anyway.  I don't know if this would be worth
>> the
>>>     effort.
>>>
>>>     For library types that contain multiple footprints per file (legacy,
>>>     Eagle), this wouldn't make much sense.  Parsing the entire file just
>> to
>>>     pick out the footprint names probably isn't going to save you very
>> much
>>>     time.
>>>
>>>     >
>>>     > On Tue, Oct 31, 2017 at 10:40 AM, Wayne Stambaugh <
>> stambaughw@xxxxxxxxx <mailto:stambaughw@xxxxxxxxx>
>>>     > <mailto:stambaughw@xxxxxxxxx <mailto:stambaughw@xxxxxxxxx>>>
>> wrote:
>>>     >
>>>     >     On 10/30/2017 5:23 PM, Oliver Walters wrote:
>>>     >     > Thanks for the suggestions on fixing the text. I have that
>> sorted.
>>>     >     >
>>>     >     > I will look into different ways of caching footprint data so
>> it is quicker.
>>>     >     >
>>>     >     > Wayne, I didn't know about FOOTPRINT_FILTER I will switch to
>> using that
>>>     >     > instead (and provide regex search).
>>>     >
>>>     >     Thanks Oliver!
>>>     >
>>>     >     >
>>>     >     > On 31 Oct 2017 06:55, "Seth Hillbrand" <
>> seth.hillbrand@xxxxxxxxx <mailto:seth.hillbrand@xxxxxxxxx>
>>>     <mailto:seth.hillbrand@xxxxxxxxx <mailto:seth.hillbrand@xxxxxxxxx>>
>>>     >     > <mailto:seth.hillbrand@xxxxxxxxx <mailto:
>> seth.hillbrand@xxxxxxxxx>
>>>     <mailto:seth.hillbrand@xxxxxxxxx
>>>     <mailto:seth.hillbrand@xxxxxxxxx>>>> wrote:
>>>     >     >
>>>     >     >     On Mon, Oct 30, 2017 at 11:42 AM, Wayne Stambaugh
>>>     >     >     <stambaughw@xxxxxxxxx <mailto:stambaughw@xxxxxxxxx>
>>>     <mailto:stambaughw@xxxxxxxxx <mailto:stambaughw@xxxxxxxxx>>
>>>     >     <mailto:stambaughw@xxxxxxxxx <mailto:stambaughw@xxxxxxxxx>
>>>     <mailto:stambaughw@xxxxxxxxx <mailto:stambaughw@xxxxxxxxx>>>>wrote:
>>>     >     >
>>>     >     >         On 10/30/2017 1:16 PM, Seth Hillbrand wrote:
>>>     >     >         > Oliver, this is neat and very helpful.
>>>     >     >         >
>>>     >     >         > The greyed-out thing is a wx2.8 bug.  You can work
>>>     >     around it by setting
>>>     >     >         > the foreground color when updating the filter like
>>>     this:
>>>     >     >         >
>>>     >     >         >  void FOOTPRINT_VIEWER_FRAME::OnFilterUpdated(
>>>     >     wxCommandEvent& event )
>>>     >     >         >  {
>>>     >     >         > +    // Workaround wx2.8 bug showing greyed color
>>>     >     >         > +    if( m_searchBox->GetValue() !=
>>>     >     m_searchBox->GetDescriptiveText() )
>>>     >     >         > +        m_searchBox->SetForegroundColour(
>>>     >     >         > m_searchBox->GetDefaultAttributes().colFg );
>>>     >     >         > +
>>>     >     >         >      // Filter is non case sensitive
>>>     >     >         >      wxString filter =
>>>     m_searchBox->GetValue().Lower();
>>>     >     >         >
>>>     >     >         > The searchbox handles resetting it to grey on
>> idle()
>>>     >     when the text is empty.
>>>     >     >
>>>     >     >         Don't you mean wx 3.0?  CMake should not even
>>>     generate the
>>>     >     build
>>>     >     >         configuration files without wx 3.0 or greater.
>>>     >     >
>>>     >     >
>>>     >     >     Hmm... This was an issue back in 2.8 that appears to be
>> only
>>>     >     partly
>>>     >     >     fixed.  The workaround I suggest above is functional
>>>     but, for
>>>     >     this,
>>>     >     >     we can also execute a cleaner fix by setting the
>> descriptive
>>>     >     text in
>>>     >     >     the declaration:
>>>     >     >
>>>     >     >     @@ -67,9 +67,10 @@ void
>>>     FOOTPRINT_VIEWER_FRAME::ReCreateHToolbar()
>>>     >     >                                      KiBitmap( module_xpm ),
>>>     >     >                                      _( "Select footprint to
>>>     >     browse" ) );
>>>     >     >
>>>     >     >     -        m_searchBox = new wxSearchCtrl( m_mainToolBar,
>>>     >     >     ID_MODVIEW_SEARCH_TEXT );
>>>     >     >     +        m_searchBox = new wxSearchCtrl( m_mainToolBar,
>>>     >     >     ID_MODVIEW_SEARCH_TEXT,
>>>     >     >     +                _( "Enter filter string" ) );
>>>     >     >              m_searchBox->SetMinSize( wxSize( 250, 30 ) );
>>>     >     >     -        m_searchBox->SetDescriptiveText( _( "Enter
>> filter
>>>     >     string" ) );
>>>     >     >
>>>     >     >
>>>     >     >
>>>     >     >     _______________________________________________
>>>     >     >     Mailing list: https://launchpad.net/~kicad-developers
>>>     <https://launchpad.net/~kicad-developers>
>>>     >     <https://launchpad.net/~kicad-developers
>>>     <https://launchpad.net/~kicad-developers>>
>>>     >     >     <https://launchpad.net/~kicad-developers
>>>     <https://launchpad.net/~kicad-developers>
>>>     >     <https://launchpad.net/~kicad-developers
>>>     <https://launchpad.net/~kicad-developers>>>
>>>     >     >     Post to     : kicad-developers@xxxxxxxxxxxxxxxxxxx
>>>     <mailto:kicad-developers@xxxxxxxxxxxxxxxxxxx>
>>>     >     <mailto:kicad-developers@xxxxxxxxxxxxxxxxxxx
>>>     <mailto:kicad-developers@xxxxxxxxxxxxxxxxxxx>>
>>>     >     >     <mailto:kicad-developers@xxxxxxxxxxxxxxxxxxx
>>>     <mailto:kicad-developers@xxxxxxxxxxxxxxxxxxx>
>>>     >     <mailto:kicad-developers@xxxxxxxxxxxxxxxxxxx
>>>     <mailto:kicad-developers@xxxxxxxxxxxxxxxxxxx>>>
>>>     >     >     Unsubscribe : https://launchpad.net/~kicad-developers
>>>     <https://launchpad.net/~kicad-developers>
>>>     >     <https://launchpad.net/~kicad-developers
>>>     <https://launchpad.net/~kicad-developers>>
>>>     >     >     <https://launchpad.net/~kicad-developers
>>>     <https://launchpad.net/~kicad-developers>
>>>     >     <https://launchpad.net/~kicad-developers
>>>     <https://launchpad.net/~kicad-developers>>>
>>>     >     >     More help   : https://help.launchpad.net/ListHelp
>>>     <https://help.launchpad.net/ListHelp>
>>>     >     <https://help.launchpad.net/ListHelp
>>>     <https://help.launchpad.net/ListHelp>>
>>>     >     >     <https://help.launchpad.net/ListHelp
>>>     <https://help.launchpad.net/ListHelp>
>>>     >     <https://help.launchpad.net/ListHelp
>>>     <https://help.launchpad.net/ListHelp>>>
>>>     >     >
>>>     >     >
>>>     >     >
>>>     >     > _______________________________________________
>>>     >     > Mailing list: https://launchpad.net/~kicad-developers
>>>     <https://launchpad.net/~kicad-developers>
>>>     >     <https://launchpad.net/~kicad-developers
>>>     <https://launchpad.net/~kicad-developers>>
>>>     >     > Post to     : kicad-developers@xxxxxxxxxxxxxxxxxxx
>>>     <mailto:kicad-developers@xxxxxxxxxxxxxxxxxxx>
>>>     >     <mailto:kicad-developers@xxxxxxxxxxxxxxxxxxx
>>>     <mailto:kicad-developers@xxxxxxxxxxxxxxxxxxx>>
>>>     >     > Unsubscribe : https://launchpad.net/~kicad-developers
>>>     <https://launchpad.net/~kicad-developers>
>>>     >     <https://launchpad.net/~kicad-developers
>>>     <https://launchpad.net/~kicad-developers>>
>>>     >     > More help   : https://help.launchpad.net/ListHelp
>>>     <https://help.launchpad.net/ListHelp>
>>>     >     <https://help.launchpad.net/ListHelp
>>>     <https://help.launchpad.net/ListHelp>>
>>>     >     >
>>>     >
>>>     >
>>>     >     _______________________________________________
>>>     >     Mailing list: https://launchpad.net/~kicad-developers
>>>     <https://launchpad.net/~kicad-developers>
>>>     >     <https://launchpad.net/~kicad-developers
>>>     <https://launchpad.net/~kicad-developers>>
>>>     >     Post to     : kicad-developers@xxxxxxxxxxxxxxxxxxx
>>>     <mailto:kicad-developers@xxxxxxxxxxxxxxxxxxx>
>>>     >     <mailto:kicad-developers@xxxxxxxxxxxxxxxxxxx
>>>     <mailto:kicad-developers@xxxxxxxxxxxxxxxxxxx>>
>>>     >     Unsubscribe : https://launchpad.net/~kicad-developers
>>>     <https://launchpad.net/~kicad-developers>
>>>     >     <https://launchpad.net/~kicad-developers
>>>     <https://launchpad.net/~kicad-developers>>
>>>     >     More help   : https://help.launchpad.net/ListHelp
>>>     <https://help.launchpad.net/ListHelp>
>>>     >     <https://help.launchpad.net/ListHelp
>>>     <https://help.launchpad.net/ListHelp>>
>>>     >
>>>     >
>>>
>>>
>>
>>
> 
> 
> 
> _______________________________________________
> Mailing list: https://launchpad.net/~kicad-developers
> Post to     : kicad-developers@xxxxxxxxxxxxxxxxxxx
> Unsubscribe : https://launchpad.net/~kicad-developers
> More help   : https://help.launchpad.net/ListHelp
> 


Follow ups

References