dialog_get_component.cpp 3.66 KB
Newer Older
1 2 3 4
/*********************************/
/*  dialog_get_component.cpp     */
/*********************************/

5 6 7 8 9
#include <fctsys.h>
#include <common.h>
#include <macros.h>
#include <wxstruct.h>
#include <dialog_get_component.h>
10 11 12 13 14 15 16 17 18 19 20 21 22 23


/****************************************************************************/
/* Show a dialog frame to choose a name from an history list, or a new name */
/* to select a component or a module                                        */
/****************************************************************************/

static unsigned s_HistoryMaxCount = 8;  // Max number of items displayed in history list


/*
 * Dialog frame to choose a component or a footprint
 *   This dialog shows an history of last selected items
 */
24
DIALOG_GET_COMPONENT::DIALOG_GET_COMPONENT( EDA_DRAW_FRAME* parent,
25
                                           wxArrayString&  HistoryList,
26 27
                                            const wxString& Title,
                                            bool            show_extra_tool ) :
28
    DIALOG_GET_COMPONENT_BASE( parent, -1, Title )
29 30 31 32 33 34 35 36 37
{

#ifdef __WXMAC__
    m_auxToolSelector = false;
#else
    m_auxToolSelector = show_extra_tool;
#endif
    initDialog( HistoryList );

38
    m_textCmpNameCtrl->SetFocus();
39 40 41 42 43 44 45 46
    GetSizer()->Fit( this );
    GetSizer()->SetSizeHints( this );
}

void DIALOG_GET_COMPONENT::initDialog( wxArrayString& aHistoryList )
{
    SetFocus();
    m_GetExtraFunction = false;
47
    m_selectionIsKeyword = false;
48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64
    m_historyList->Append( aHistoryList );
    if( !m_auxToolSelector )
    {
        m_buttonBrowse->Show( false );
        m_buttonBrowse->Enable( false );
    }
}


void DIALOG_GET_COMPONENT::OnCancel( wxCommandEvent& event )
{
    m_Text = wxEmptyString;
    EndModal( wxID_CANCEL );
}

void DIALOG_GET_COMPONENT::Accept( wxCommandEvent& event )
{
65
    m_selectionIsKeyword = false;
66 67 68 69 70 71 72 73 74 75 76
    switch( event.GetId() )
    {
    case ID_SEL_BY_LISTBOX:
        m_Text = m_historyList->GetStringSelection();
        break;

    case wxID_OK:
        m_Text = m_textCmpNameCtrl->GetValue();
        break;

    case ID_ACCEPT_KEYWORD:
77 78
        m_selectionIsKeyword = true;
        m_Text = m_textCmpNameCtrl->GetValue();
79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144
        break;

    case ID_LIST_ALL:
        m_Text = wxT( "*" );
        break;
    }

    m_Text.Trim( false );      // Remove blanks at beginning
    m_Text.Trim( true );       // Remove blanks at end

    EndModal( wxID_OK );
}


/* Get the component name by the extra function */
void DIALOG_GET_COMPONENT::GetExtraSelection( wxCommandEvent& event )
{
    m_GetExtraFunction = true;
    EndModal( wxID_OK );
}


// Return the component name selected by the dialog
wxString DIALOG_GET_COMPONENT::GetComponentName( void )
{
    return m_Text;
}


/* Initialize the default component name default choice
*/
void DIALOG_GET_COMPONENT::SetComponentName( const wxString& name )
{
    if( m_textCmpNameCtrl )
    {
        m_textCmpNameCtrl->SetValue( name );
        m_textCmpNameCtrl->SetSelection(-1, -1);
    }
}


/*
 * Add the string "aName" to the history list aHistoryList
 */
void AddHistoryComponentName( wxArrayString& aHistoryList, const wxString& aName )
{
    if( ( aHistoryList.GetCount() > 0 ) && ( aName == aHistoryList[0] ) )
        return;

    /* remove an old identical name if exists */
    for( unsigned ii = 1; ii < aHistoryList.GetCount(); ii++ )
    {
        if( aName == aHistoryList[ii] )
        {
            aHistoryList.RemoveAt( ii );
            ii--;
        }
    }

    // Add the new name at the beginning of the history list
    aHistoryList.Insert(aName, 0);

    // Remove extra names
    while( aHistoryList.GetCount() >= s_HistoryMaxCount )
        aHistoryList.RemoveAt( aHistoryList.GetCount()-1 );
}