summaryrefslogtreecommitdiff
path: root/common/dialogs/dialog_get_component.cpp
blob: c0516bb5ba16326916b4e81dcdc915e9c9f1e22c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
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
/*********************************/
/*  dialog_get_component.cpp     */
/*********************************/

#include <fctsys.h>
#include <common.h>
#include <macros.h>
#include <draw_frame.h>
#include <dialog_get_component.h>


/****************************************************************************/
/* 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
 */
DIALOG_GET_COMPONENT::DIALOG_GET_COMPONENT( EDA_DRAW_FRAME* parent,
                                           wxArrayString&  HistoryList,
                                            const wxString& Title,
                                            bool            show_extra_tool ) :
    DIALOG_GET_COMPONENT_BASE( parent, -1, Title )
{

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

    m_textCmpNameCtrl->SetFocus();
    GetSizer()->Fit( this );
    GetSizer()->SetSizeHints( this );
}

void DIALOG_GET_COMPONENT::initDialog( wxArrayString& aHistoryList )
{
    SetFocus();
    m_GetExtraFunction = false;
    m_selectionIsKeyword = false;
    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 )
{
    m_selectionIsKeyword = false;
    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:
        m_selectionIsKeyword = true;
        m_Text = m_textCmpNameCtrl->GetValue();
        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 );
}