Commit 992cc5f1 authored by HennerZeller's avatar HennerZeller Committed by jean-pierre charras
Browse files

Eeschema: * Preselect the currently chosen component in the browser when...

Eeschema:  * Preselect the currently chosen component in the browser when pressing the thumbnail view.
* Various smallish documentation updates in the component chooser area.
parent c7e794dc
Loading
Loading
Loading
Loading
+3 −0
Original line number Original line Diff line number Diff line
@@ -206,6 +206,9 @@ void COMPONENT_TREE_SEARCH_CONTAINER::AddAliasList( const wxString& aNodeName,


LIB_ALIAS* COMPONENT_TREE_SEARCH_CONTAINER::GetSelectedAlias( int* aUnit )
LIB_ALIAS* COMPONENT_TREE_SEARCH_CONTAINER::GetSelectedAlias( int* aUnit )
{
{
    if( tree == NULL )
        return NULL;

    const wxTreeItemId& select_id = tree->GetSelection();
    const wxTreeItemId& select_id = tree->GetSelection();


    BOOST_FOREACH( TREE_NODE* node, nodes )
    BOOST_FOREACH( TREE_NODE* node, nodes )
+1 −1
Original line number Original line Diff line number Diff line
@@ -97,7 +97,7 @@ public:
    /** Function GetSelectedAlias
    /** Function GetSelectedAlias
     *
     *
     * @param if not-NULL, the selected sub-unit is set here.
     * @param if not-NULL, the selected sub-unit is set here.
     * @return the selected alias or NULL if there is none.
     * @return the selected alias or NULL if there is none, or there is no tree.
     */
     */
    LIB_ALIAS* GetSelectedAlias( int* aUnit );
    LIB_ALIAS* GetSelectedAlias( int* aUnit );


+7 −8
Original line number Original line Diff line number Diff line
@@ -57,16 +57,15 @@ DIALOG_CHOOSE_COMPONENT::DIALOG_CHOOSE_COMPONENT( wxWindow* aParent, const wxStr
}
}




// After this dialog is done: return the alias that has been selected, or an
DIALOG_CHOOSE_COMPONENT::~DIALOG_CHOOSE_COMPONENT()
// empty string if there is none.
wxString DIALOG_CHOOSE_COMPONENT::GetSelectedAliasName( int* aUnit ) const
{
{
    LIB_ALIAS *alias = m_search_container->GetSelectedAlias( aUnit );
    m_search_container->SetTree( NULL );
}


    if( alias )
        return alias->GetName();


    return wxEmptyString;
LIB_ALIAS* DIALOG_CHOOSE_COMPONENT::GetSelectedAlias( int* aUnit ) const
{
    return m_search_container->GetSelectedAlias( aUnit );
}
}




+17 −5
Original line number Original line Diff line number Diff line
@@ -27,27 +27,39 @@
#include <dialog_choose_component_base.h>
#include <dialog_choose_component_base.h>


class COMPONENT_TREE_SEARCH_CONTAINER;
class COMPONENT_TREE_SEARCH_CONTAINER;
class LIB_ALIAS;
class LIB_COMPONENT;
class LIB_COMPONENT;
class wxTreeItemId;
class wxTreeItemId;


class DIALOG_CHOOSE_COMPONENT : public DIALOG_CHOOSE_COMPONENT_BASE
class DIALOG_CHOOSE_COMPONENT : public DIALOG_CHOOSE_COMPONENT_BASE
{
{
public:
public:
    /**
     * Create dialog to choose component.
     *
     * @param aParent          Parent window.
     * @param aTitle           Dialog title.
     * @param aSearchContainer The tree selection search container. Needs to be pre-populated
     *                         This dialog does not take over ownership of this object.
     * @param aDeMorganConvert preferred deMorgan conversion (TODO: should happen in dialog)
     */
    DIALOG_CHOOSE_COMPONENT( wxWindow* aParent, const wxString& aTitle,
    DIALOG_CHOOSE_COMPONENT( wxWindow* aParent, const wxString& aTitle,
                             COMPONENT_TREE_SEARCH_CONTAINER* aSearch_container,
                             COMPONENT_TREE_SEARCH_CONTAINER* aSearchContainer,
                             int aDeMorganConvert );
                             int aDeMorganConvert );
    virtual ~DIALOG_CHOOSE_COMPONENT();


    /** Function GetSelectedAliasName
    /** Function GetSelectedAlias
     * To be called after this dialog returns from ShowModal().
     * To be called after this dialog returns from ShowModal().
     *
     *
     * @param aUnit if not NULL, the selected unit is filled in here.
     * @param aUnit if not NULL, the selected unit is filled in here.
     * @return the alias that has been selected, or an empty string if there is none.
     * @return the alias that has been selected, or NULL if there is none.
     */
     */
    wxString GetSelectedAliasName( int* aUnit ) const;
    LIB_ALIAS* GetSelectedAlias( int* aUnit ) const;


    /** Function IsExternalBrowserSelected
    /** Function IsExternalBrowserSelected
     *
     *
     * @return true, iff the browser pressed the browsing button.
     * @return true, iff the user pressed the thumbnail view of the component to
     *               launch the component browser.
     */
     */
    bool IsExternalBrowserSelected() const { return m_external_browser_requested; }
    bool IsExternalBrowserSelected() const { return m_external_browser_requested; }


+30 −14
Original line number Original line Diff line number Diff line
@@ -52,8 +52,8 @@
#include <boost/foreach.hpp>
#include <boost/foreach.hpp>




// TODO(hzeller): would be good if we could give a pre-selected component.
wxString SCH_BASE_FRAME::SelectComponentFromLibBrowser( LIB_ALIAS* aPreselectedAlias,
wxString SCH_BASE_FRAME::SelectComponentFromLibBrowser( void )
                                                        int* aUnit, int* aConvert )
{
{
    wxSemaphore semaphore( 0, 1 );
    wxSemaphore semaphore( 0, 1 );
    wxString cmpname;
    wxString cmpname;
@@ -65,6 +65,20 @@ wxString SCH_BASE_FRAME::SelectComponentFromLibBrowser( void )


    viewlibFrame = new LIB_VIEW_FRAME( this, NULL, &semaphore,
    viewlibFrame = new LIB_VIEW_FRAME( this, NULL, &semaphore,
                                       KICAD_DEFAULT_DRAWFRAME_STYLE | wxFRAME_FLOAT_ON_PARENT );
                                       KICAD_DEFAULT_DRAWFRAME_STYLE | wxFRAME_FLOAT_ON_PARENT );
    if ( aPreselectedAlias )
    {
        viewlibFrame->SetSelectedLibrary( aPreselectedAlias->GetLibraryName() );
        viewlibFrame->SetSelectedComponent( aPreselectedAlias->GetName() );
    }

    if( aUnit && *aUnit > 0 )
        viewlibFrame->SetUnit( *aUnit );

    if( aConvert && *aConvert > 0 )
        viewlibFrame->SetConvert( *aConvert );

    viewlibFrame->Refresh();

    // Show the library viewer frame until it is closed
    // Show the library viewer frame until it is closed
    // Wait for viewer closing event:
    // Wait for viewer closing event:
    while( semaphore.TryWait() == wxSEMA_BUSY )
    while( semaphore.TryWait() == wxSEMA_BUSY )
@@ -74,6 +88,13 @@ wxString SCH_BASE_FRAME::SelectComponentFromLibBrowser( void )
    }
    }


    cmpname = viewlibFrame->GetSelectedComponent();
    cmpname = viewlibFrame->GetSelectedComponent();

    if( aUnit )
        *aUnit = viewlibFrame->GetUnit();

    if( aConvert )
        *aConvert = viewlibFrame->GetConvert();

    viewlibFrame->Destroy();
    viewlibFrame->Destroy();


    return cmpname;
    return cmpname;
@@ -125,18 +146,13 @@ wxString SCH_BASE_FRAME::SelectComponentFromLibrary( const wxString& aLibname,
    if( dlg.ShowModal() == wxID_CANCEL )
    if( dlg.ShowModal() == wxID_CANCEL )
        return wxEmptyString;
        return wxEmptyString;


    wxString cmpName = dlg.GetSelectedAliasName( aUnit );
    wxString cmpName;

    LIB_ALIAS* const alias = dlg.GetSelectedAlias( aUnit );
    if( dlg.IsExternalBrowserSelected() )
    if ( alias )
    {
        cmpName = alias->GetName();
        cmpName = SelectComponentFromLibBrowser();  // Would be good if we could pre-select.

        if( aUnit )
            *aUnit = LIB_VIEW_FRAME::GetUnit();


        if( aConvert )
    if( dlg.IsExternalBrowserSelected() )   // User requested big component browser.
            *aConvert = LIB_VIEW_FRAME::GetConvert();
        cmpName = SelectComponentFromLibBrowser( alias, aUnit, aConvert);
    }


    if ( !cmpName.empty() )
    if ( !cmpName.empty() )
    {
    {
Loading