275 lines
8.4 KiB
C++
275 lines
8.4 KiB
C++
/*********************************/
|
|
/* get_component_dialog.cpp */
|
|
/*********************************/
|
|
|
|
#include "fctsys.h"
|
|
#include "gr_basic.h"
|
|
#include "common.h"
|
|
#include "macros.h"
|
|
#include "wxstruct.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
|
|
static wxString s_ItemName;
|
|
|
|
|
|
enum selcmp_id {
|
|
ID_ACCEPT_NAME = 3900,
|
|
ID_ACCEPT_KEYWORD,
|
|
ID_ENTER_NAME,
|
|
ID_CANCEL,
|
|
ID_LIST_ALL,
|
|
ID_EXTRA_TOOL,
|
|
ID_SEL_BY_LISTBOX
|
|
};
|
|
|
|
/***************************************/
|
|
class WinEDA_SelectCmp : public wxDialog
|
|
/***************************************/
|
|
{
|
|
private:
|
|
WinEDA_DrawFrame* m_Parent;
|
|
bool m_AuxTool;
|
|
wxString* m_Text;
|
|
wxTextCtrl* m_TextCtrl;
|
|
wxListBox* m_List;
|
|
public:
|
|
bool m_GetExtraFunction;
|
|
|
|
public:
|
|
|
|
// Constructor and destructor
|
|
WinEDA_SelectCmp( WinEDA_DrawFrame* parent, const wxPoint& framepos,
|
|
wxArrayString& HistoryList, const wxString& Title,
|
|
bool show_extra_tool );
|
|
~WinEDA_SelectCmp() {};
|
|
|
|
private:
|
|
void Accept( wxCommandEvent& event );
|
|
void GetExtraSelection( wxCommandEvent& event );
|
|
|
|
DECLARE_EVENT_TABLE()
|
|
};
|
|
|
|
BEGIN_EVENT_TABLE( WinEDA_SelectCmp, wxDialog )
|
|
EVT_BUTTON( ID_ACCEPT_NAME, WinEDA_SelectCmp::Accept )
|
|
EVT_BUTTON( ID_ACCEPT_KEYWORD, WinEDA_SelectCmp::Accept )
|
|
EVT_BUTTON( ID_CANCEL, WinEDA_SelectCmp::Accept )
|
|
EVT_BUTTON( ID_LIST_ALL, WinEDA_SelectCmp::Accept )
|
|
EVT_BUTTON( ID_EXTRA_TOOL, WinEDA_SelectCmp::GetExtraSelection )
|
|
EVT_LISTBOX( ID_SEL_BY_LISTBOX, WinEDA_SelectCmp::Accept )
|
|
END_EVENT_TABLE()
|
|
|
|
|
|
/****************************************************************************/
|
|
WinEDA_SelectCmp::WinEDA_SelectCmp( WinEDA_DrawFrame* parent,
|
|
const wxPoint& framepos,
|
|
wxArrayString& HistoryList,
|
|
const wxString& Title,
|
|
bool show_extra_tool ) :
|
|
wxDialog( parent, -1, Title, framepos, wxDefaultSize, DIALOG_STYLE )
|
|
/****************************************************************************/
|
|
|
|
/* Dialog frame to choose a component or a footprint
|
|
* This dialog shows an history of last selected items
|
|
*/
|
|
{
|
|
wxButton* Button;
|
|
wxStaticText* Text;
|
|
|
|
m_Parent = parent;
|
|
m_AuxTool = show_extra_tool;
|
|
m_GetExtraFunction = FALSE;
|
|
|
|
s_ItemName.Empty();
|
|
m_Text = &s_ItemName;
|
|
|
|
wxBoxSizer* MainBoxSizer = new wxBoxSizer( wxHORIZONTAL );
|
|
SetSizer( MainBoxSizer );
|
|
|
|
wxBoxSizer* LeftBoxSizer = new wxBoxSizer( wxVERTICAL );
|
|
MainBoxSizer->Add( LeftBoxSizer,
|
|
0,
|
|
wxALIGN_CENTER_HORIZONTAL | wxALL | wxADJUST_MINSIZE,
|
|
5 );
|
|
wxBoxSizer* RightBoxSizer = new wxBoxSizer( wxVERTICAL );
|
|
MainBoxSizer->Add( RightBoxSizer, 0, wxALIGN_CENTER_HORIZONTAL | wxALL, 5 );
|
|
|
|
Text = new wxStaticText( this, -1, _( "Name:" ) );
|
|
LeftBoxSizer->Add( Text, 0, wxALIGN_LEFT | wxLEFT | wxRIGHT | wxTOP, 5 );
|
|
|
|
m_TextCtrl = new wxTextCtrl( this, ID_ENTER_NAME, *m_Text );
|
|
m_TextCtrl->SetInsertionPoint( 1 );
|
|
LeftBoxSizer->Add( m_TextCtrl,
|
|
0,
|
|
wxGROW | wxLEFT | wxRIGHT | wxBOTTOM | wxADJUST_MINSIZE,
|
|
5 );
|
|
|
|
Text = new wxStaticText( this, -1, _( "History list:" ) );
|
|
LeftBoxSizer->Add( Text, 0, wxALIGN_LEFT | wxLEFT | wxRIGHT | wxTOP, 5 );
|
|
|
|
m_List = new wxListBox( this, ID_SEL_BY_LISTBOX, wxDefaultPosition,
|
|
wxSize( 220, -1 ), HistoryList, wxLB_SINGLE );
|
|
LeftBoxSizer->Add( m_List,
|
|
0,
|
|
wxGROW | wxLEFT | wxRIGHT | wxBOTTOM | wxADJUST_MINSIZE,
|
|
5 );
|
|
|
|
Button = new wxButton( this, ID_ACCEPT_NAME, _( "OK" ) );
|
|
Button->SetDefault();
|
|
RightBoxSizer->Add( Button,
|
|
0,
|
|
wxGROW | wxLEFT | wxRIGHT | wxTOP | wxBOTTOM,
|
|
5 );
|
|
|
|
Button = new wxButton( this, ID_ACCEPT_KEYWORD, _( "Search KeyWord" ) );
|
|
RightBoxSizer->Add( Button, 0, wxGROW | wxLEFT | wxRIGHT | wxBOTTOM, 5 );
|
|
|
|
Button = new wxButton( this, ID_CANCEL, _( "Cancel" ) );
|
|
RightBoxSizer->Add( Button, 0, wxGROW | wxLEFT | wxRIGHT | wxBOTTOM, 5 );
|
|
|
|
Button = new wxButton( this, ID_LIST_ALL, _( "List All" ) );
|
|
RightBoxSizer->Add( Button, 0, wxGROW | wxLEFT | wxRIGHT | wxBOTTOM, 5 );
|
|
|
|
#ifndef __WXMAC__
|
|
if( m_AuxTool ) /* The selection can be done by an extra function */
|
|
{
|
|
Button = new wxButton( this, ID_EXTRA_TOOL, _( "By Lib Browser" ) );
|
|
RightBoxSizer->Add( Button, 0, wxGROW | wxLEFT | wxRIGHT | wxBOTTOM, 5 );
|
|
}
|
|
#endif
|
|
|
|
GetSizer()->Fit( this );
|
|
GetSizer()->SetSizeHints( this );
|
|
}
|
|
|
|
|
|
/*********************************************************/
|
|
void WinEDA_SelectCmp::Accept( wxCommandEvent& event )
|
|
/*********************************************************/
|
|
{
|
|
switch( event.GetId() )
|
|
{
|
|
case ID_SEL_BY_LISTBOX:
|
|
*m_Text = m_List->GetStringSelection();
|
|
break;
|
|
|
|
case ID_ACCEPT_NAME:
|
|
*m_Text = m_TextCtrl->GetValue();
|
|
break;
|
|
|
|
case ID_ACCEPT_KEYWORD:
|
|
*m_Text = wxT( "= " ) + m_TextCtrl->GetValue();
|
|
break;
|
|
|
|
case ID_CANCEL:
|
|
*m_Text = wxEmptyString;
|
|
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
|
|
Close( TRUE );
|
|
}
|
|
|
|
|
|
/**************************************************************/
|
|
void WinEDA_SelectCmp::GetExtraSelection( wxCommandEvent& event )
|
|
/**************************************************************/
|
|
|
|
/* Get the component name by the extra function
|
|
*/
|
|
{
|
|
m_GetExtraFunction = TRUE;
|
|
Close( TRUE );
|
|
}
|
|
|
|
|
|
/******************************************************************************/
|
|
wxString GetComponentName( WinEDA_DrawFrame* frame,
|
|
wxArrayString& HistoryList, const wxString& Title,
|
|
wxString (*AuxTool)( WinEDA_DrawFrame* parent ) )
|
|
/*******************************************************************************/
|
|
|
|
/* Dialog frame to choose a component name
|
|
*/
|
|
{
|
|
wxPoint framepos;
|
|
int x, y, w, h;
|
|
bool GetExtraFunction;
|
|
|
|
framepos = wxGetMousePosition();
|
|
wxClientDisplayRect( &x, &y, &w, &h );
|
|
framepos.x -= 100;
|
|
framepos.y -= 50;
|
|
if( framepos.x < x )
|
|
framepos.x = x;
|
|
if( framepos.y < y )
|
|
framepos.y = y;
|
|
if( framepos.x < x )
|
|
framepos.x = x;
|
|
x += w - 350;
|
|
if( framepos.x > x )
|
|
framepos.x = x;
|
|
if( framepos.y < y )
|
|
framepos.y = y;
|
|
WinEDA_SelectCmp* selframe =
|
|
new WinEDA_SelectCmp( frame, framepos, HistoryList, Title,
|
|
AuxTool ? TRUE : FALSE );
|
|
selframe->ShowModal();
|
|
GetExtraFunction = selframe->m_GetExtraFunction;
|
|
selframe->Destroy();
|
|
|
|
if( GetExtraFunction )
|
|
s_ItemName = AuxTool( frame );
|
|
return s_ItemName;
|
|
}
|
|
|
|
|
|
/*******************************************************************************/
|
|
void AddHistoryComponentName( wxArrayString& HistoryList, const wxString& Name )
|
|
/*******************************************************************************/
|
|
|
|
/* Add the string "Name" to the history list HistoryList
|
|
*/
|
|
{
|
|
int ii, c_max;
|
|
|
|
if( HistoryList.GetCount() > 0 )
|
|
{
|
|
if( Name == HistoryList[0] )
|
|
return;
|
|
|
|
/* remove an old identical selection if exists */
|
|
for( ii = 1; (unsigned) ii < HistoryList.GetCount(); ii++ )
|
|
{
|
|
if( Name == HistoryList[ii] )
|
|
{
|
|
HistoryList.RemoveAt( ii ); ii--;
|
|
}
|
|
}
|
|
|
|
/* shift the list */
|
|
if( HistoryList.GetCount() < s_HistoryMaxCount )
|
|
HistoryList.Add( wxT( "" ) );
|
|
|
|
c_max = HistoryList.GetCount() - 2;
|
|
for( ii = c_max; ii >= 0; ii-- )
|
|
HistoryList[ii + 1] = HistoryList[ii];
|
|
|
|
/* Add the new name at the beginning of the history list */
|
|
HistoryList[0] = Name;
|
|
}
|
|
else
|
|
HistoryList.Add( Name );
|
|
}
|