kicad-developers team mailing list archive
-
kicad-developers team
-
Mailing list archive
-
Message #27424
[PATCH] libedit: preselect active component when switching
Hi,
This patch makes libedit preselect the current part when choosing the
next part to edit. That makes it easier to go through a library one part
at a time and not lose your place. I figure this is pretty
noncontroversial, so I'll push it in a day or so if nobody sees anything
wrong with it.
--
Chris
>From 78aea6145b8a6f21e7290238c07be987250af8b7 Mon Sep 17 00:00:00 2001
From: Chris Pavlina <pavlina.chris@xxxxxxxxx>
Date: Mon, 30 Jan 2017 16:53:48 -0500
Subject: [PATCH] libedit: preselect active component when switching
---
eeschema/component_tree_search_container.cpp | 27 +++++++++++++++++++--------
eeschema/getpart.cpp | 8 ++++++--
eeschema/libedit.cpp | 8 ++++++--
eeschema/sch_base_frame.h | 7 +++++--
4 files changed, 36 insertions(+), 14 deletions(-)
diff --git a/eeschema/component_tree_search_container.cpp b/eeschema/component_tree_search_container.cpp
index 815956873..ad7649a98 100644
--- a/eeschema/component_tree_search_container.cpp
+++ b/eeschema/component_tree_search_container.cpp
@@ -2,7 +2,7 @@
* This program source code file is part of KiCad, a free EDA CAD application.
*
* Copyright (C) 2014 Henner Zeller <h.zeller@xxxxxxx>
- * Copyright (C) 2015 KiCad Developers, see change_log.txt for contributors.
+ * Copyright (C) 2015-2017 KiCad Developers, see AUTHORS.txt for contributors.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
@@ -445,6 +445,7 @@ void COMPONENT_TREE_SEARCH_CONTAINER::UpdateSearchTerm( const wxString& aSearch
const wxTreeItemId root_id = m_tree->AddRoot( wxEmptyString );
const TREE_NODE* first_match = NULL;
const TREE_NODE* preselected_node = NULL;
+ bool override_preselect = false;
for( TREE_NODE* node : m_nodes )
{
@@ -470,16 +471,26 @@ void COMPONENT_TREE_SEARCH_CONTAINER::UpdateSearchTerm( const wxString& aSearch
node->TreeId = m_tree->AppendItem( node->Parent ? node->Parent->TreeId : root_id,
node_text );
- // If we are a nicely scored alias, we want to have it visible. Also, if there
- // is only a single library in this container, we want to have it unfolded
- // (example: power library).
- if( node->Type == TREE_NODE::TYPE_ALIAS
- && ( node->MatchScore > kLowestDefaultScore || m_libraries_added == 1 ) )
+ // If there is only a single library in this container, we want to have it
+ // unfolded (example: power library, libedit)
+ if( node->Type == TREE_NODE::TYPE_ALIAS && m_libraries_added == 1 )
+ {
+ m_tree->Expand( node->TreeId );
+
+ if( first_match == NULL )
+ first_match = node;
+ }
+
+ // If we are a nicely scored alias, we want to have it visible.
+ if( node->Type == TREE_NODE::TYPE_ALIAS && ( node->MatchScore > kLowestDefaultScore ) )
{
m_tree->Expand( node->TreeId );
if( first_match == NULL )
first_match = node; // First, highest scoring: the "I am feeling lucky" element.
+
+ // The user is searching, don't preselect!
+ override_preselect = true;
}
// The first node that matches our pre-select criteria is choosen. 'First node'
@@ -497,12 +508,12 @@ void COMPONENT_TREE_SEARCH_CONTAINER::UpdateSearchTerm( const wxString& aSearch
preselected_node = node;
}
- if( first_match ) // Highest score search match pre-selected.
+ if( first_match && ( !preselected_node || override_preselect ) )
{
m_tree->SelectItem( first_match->TreeId );
m_tree->EnsureVisible( first_match->TreeId );
}
- else if( preselected_node ) // No search, so history item preselected.
+ else if( preselected_node )
{
m_tree->SelectItem( preselected_node->TreeId );
m_tree->EnsureVisible( preselected_node->TreeId );
diff --git a/eeschema/getpart.cpp b/eeschema/getpart.cpp
index 5a922f126..958bc1006 100644
--- a/eeschema/getpart.cpp
+++ b/eeschema/getpart.cpp
@@ -3,7 +3,7 @@
*
* Copyright (C) 2015 Jean-Pierre Charras, jp.charras at wanadoo.fr
* Copyright (C) 2008-2012 Wayne Stambaugh <stambaughw@xxxxxxxxxxx>
- * Copyright (C) 2004-2015 KiCad Developers, see change_log.txt for contributors.
+ * Copyright (C) 2004-2017 KiCad Developers, see AUTHORS.txt for contributors.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
@@ -101,7 +101,8 @@ wxString SCH_BASE_FRAME::SelectComponentFromLibrary( const SCHLIB_FILTER* aFilte
int& aHistoryLastUnit,
bool aUseLibBrowser,
int* aUnit,
- int* aConvert )
+ int* aConvert,
+ const wxString& aHighlight )
{
wxString dialogTitle;
PART_LIBS* libs = Prj().SchLibs();
@@ -152,6 +153,9 @@ wxString SCH_BASE_FRAME::SelectComponentFromLibrary( const SCHLIB_FILTER* aFilte
search_container.SetPreselectNode( aHistoryList[0], aHistoryLastUnit );
}
+ if( !aHighlight.IsEmpty() )
+ search_container.SetPreselectNode( aHighlight, /* aUnit */ 0 );
+
const int deMorgan = aConvert ? *aConvert : 1;
dialogTitle.Printf( _( "Choose Component (%d items loaded)" ), search_container.GetComponentsCount() );
DIALOG_CHOOSE_COMPONENT dlg( this, dialogTitle, &search_container, deMorgan );
diff --git a/eeschema/libedit.cpp b/eeschema/libedit.cpp
index b76170e55..c22deaea9 100644
--- a/eeschema/libedit.cpp
+++ b/eeschema/libedit.cpp
@@ -3,7 +3,7 @@
*
* Copyright (C) 2015 Jean-Pierre Charras, jp.charras at wanadoo.fr
* Copyright (C) 2008-2013 Wayne Stambaugh <stambaughw@xxxxxxxxxxx>
- * Copyright (C) 2004-2016 KiCad Developers, see AUTHORS.txt for contributors.
+ * Copyright (C) 2004-2017 KiCad Developers, see AUTHORS.txt for contributors.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
@@ -122,12 +122,16 @@ void LIB_EDIT_FRAME::LoadOneLibraryPart( wxCommandEvent& event )
return;
}
+ // Get the name of the current part to preselect it
+ LIB_PART* current_part = GetCurPart();
+ wxString part_name = current_part ? current_part->GetName() : wxString( wxEmptyString );
+
wxArrayString dummyHistoryList;
int dummyLastUnit;
SCHLIB_FILTER filter;
filter.LoadFrom( lib->GetName() );
cmp_name = SelectComponentFromLibrary( &filter, dummyHistoryList, dummyLastUnit,
- true, NULL, NULL );
+ true, NULL, NULL, part_name );
if( cmp_name.IsEmpty() )
return;
diff --git a/eeschema/sch_base_frame.h b/eeschema/sch_base_frame.h
index fe8ef783c..2f9669602 100644
--- a/eeschema/sch_base_frame.h
+++ b/eeschema/sch_base_frame.h
@@ -4,7 +4,7 @@
* This program source code file is part of KiCad, a free EDA CAD application.
*
* Copyright (C) 2015 SoftPLC Corporation, Dick Hollenbeck <dick@xxxxxxxxxxx>
- * Copyright (C) 2015-2016 KiCad Developers, see change_log.txt for contributors.
+ * Copyright (C) 2015-2017 KiCad Developers, see AUTHORS.txt for contributors.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
@@ -135,6 +135,8 @@ public:
* @param aUseLibBrowser bool to call the library viewer to select the component
* @param aUnit a pointer to int to return the selected unit (if any)
* @param aConvert a pointer to int to return the selected De Morgan shape (if any)
+ * @param aHighlight name of component to highlight in the list.
+ * highlights none if there isn't one by that name
*
* @return the component name
*/
@@ -143,7 +145,8 @@ public:
int& aHistoryLastUnit,
bool aUseLibBrowser,
int* aUnit,
- int* aConvert );
+ int* aConvert,
+ const wxString& aHighlight = wxEmptyString );
protected:
--
2.11.0
Follow ups