Convert Place Footprint to component tree.
This commit is contained in:
parent
97f7bd4cb9
commit
b400565880
|
@ -51,6 +51,22 @@
|
||||||
#include <wildcards_and_files_ext.h>
|
#include <wildcards_and_files_ext.h>
|
||||||
|
|
||||||
|
|
||||||
|
FOOTPRINT_INFO* FOOTPRINT_LIST::GetModuleInfo( const wxString& aLibNickname,
|
||||||
|
const wxString& aFootprintName )
|
||||||
|
{
|
||||||
|
if( aFootprintName.IsEmpty() )
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
for( auto& fp : m_list )
|
||||||
|
{
|
||||||
|
if( aLibNickname == fp->GetNickname() && aFootprintName == fp->GetFootprintName() )
|
||||||
|
return &*fp;
|
||||||
|
}
|
||||||
|
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
FOOTPRINT_INFO* FOOTPRINT_LIST::GetModuleInfo( const wxString& aFootprintName )
|
FOOTPRINT_INFO* FOOTPRINT_LIST::GetModuleInfo( const wxString& aFootprintName )
|
||||||
{
|
{
|
||||||
if( aFootprintName.IsEmpty() )
|
if( aFootprintName.IsEmpty() )
|
||||||
|
@ -61,16 +77,7 @@ FOOTPRINT_INFO* FOOTPRINT_LIST::GetModuleInfo( const wxString& aFootprintName )
|
||||||
wxCHECK_MSG( fpid.Parse( aFootprintName, LIB_ID::ID_PCB ) < 0, NULL,
|
wxCHECK_MSG( fpid.Parse( aFootprintName, LIB_ID::ID_PCB ) < 0, NULL,
|
||||||
wxString::Format( wxT( "\"%s\" is not a valid LIB_ID." ), aFootprintName ) );
|
wxString::Format( wxT( "\"%s\" is not a valid LIB_ID." ), aFootprintName ) );
|
||||||
|
|
||||||
wxString libNickname = fpid.GetLibNickname();
|
return GetModuleInfo( fpid.GetLibNickname(), fpid.GetLibItemName() );
|
||||||
wxString footprintName = fpid.GetLibItemName();
|
|
||||||
|
|
||||||
for( auto& fp : m_list )
|
|
||||||
{
|
|
||||||
if( libNickname == fp->GetNickname() && footprintName == fp->GetFootprintName() )
|
|
||||||
return &*fp;
|
|
||||||
}
|
|
||||||
|
|
||||||
return NULL;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -37,6 +37,7 @@
|
||||||
#include <ki_mutex.h>
|
#include <ki_mutex.h>
|
||||||
#include <kicad_string.h>
|
#include <kicad_string.h>
|
||||||
#include <sync_queue.h>
|
#include <sync_queue.h>
|
||||||
|
#include <lib_tree_item.h>
|
||||||
|
|
||||||
#include <atomic>
|
#include <atomic>
|
||||||
#include <functional>
|
#include <functional>
|
||||||
|
@ -62,7 +63,7 @@ class KIWAY;
|
||||||
* This is a virtual class; its implementation lives in pcbnew/footprint_info_impl.cpp.
|
* This is a virtual class; its implementation lives in pcbnew/footprint_info_impl.cpp.
|
||||||
* To get instances of these classes, see FOOTPRINT_LIST::GetInstance().
|
* To get instances of these classes, see FOOTPRINT_LIST::GetInstance().
|
||||||
*/
|
*/
|
||||||
class APIEXPORT FOOTPRINT_INFO
|
class APIEXPORT FOOTPRINT_INFO : public LIB_TREE_ITEM
|
||||||
{
|
{
|
||||||
friend bool operator<( const FOOTPRINT_INFO& item1, const FOOTPRINT_INFO& item2 );
|
friend bool operator<( const FOOTPRINT_INFO& item1, const FOOTPRINT_INFO& item2 );
|
||||||
|
|
||||||
|
@ -84,18 +85,33 @@ public:
|
||||||
return m_nickname;
|
return m_nickname;
|
||||||
}
|
}
|
||||||
|
|
||||||
const wxString& GetDoc()
|
const wxString& GetName() const override
|
||||||
|
{
|
||||||
|
return m_fpname;
|
||||||
|
}
|
||||||
|
|
||||||
|
LIB_ID GetLibId() const override
|
||||||
|
{
|
||||||
|
return LIB_ID( m_nickname, m_fpname );
|
||||||
|
}
|
||||||
|
|
||||||
|
wxString GetDescription() override
|
||||||
{
|
{
|
||||||
ensure_loaded();
|
ensure_loaded();
|
||||||
return m_doc;
|
return m_doc;
|
||||||
}
|
}
|
||||||
|
|
||||||
const wxString& GetKeywords()
|
wxString GetKeywords()
|
||||||
{
|
{
|
||||||
ensure_loaded();
|
ensure_loaded();
|
||||||
return m_keywords;
|
return m_keywords;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
wxString GetSearchText() override
|
||||||
|
{
|
||||||
|
return GetKeywords() + wxT( " " ) + GetDescription();
|
||||||
|
}
|
||||||
|
|
||||||
unsigned GetPadCount()
|
unsigned GetPadCount()
|
||||||
{
|
{
|
||||||
ensure_loaded();
|
ensure_loaded();
|
||||||
|
@ -207,11 +223,14 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get info for a module by name.
|
* Get info for a module by id.
|
||||||
* @param aFootprintName = the footprint name inside the FOOTPRINT_INFO of interest.
|
|
||||||
* @return FOOTPRINT_INF* - the item stored in list if found
|
|
||||||
*/
|
*/
|
||||||
FOOTPRINT_INFO* GetModuleInfo( const wxString& aFootprintName );
|
FOOTPRINT_INFO* GetModuleInfo( const wxString& aFootprintId );
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get info for a module by libNickname/footprintName
|
||||||
|
*/
|
||||||
|
FOOTPRINT_INFO* GetModuleInfo( const wxString& aLibNickname, const wxString& aFootprintName );
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get info for a module by index.
|
* Get info for a module by index.
|
||||||
|
@ -223,12 +242,6 @@ public:
|
||||||
return *m_list[aIdx];
|
return *m_list[aIdx];
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Add aItem to list
|
|
||||||
* @param aItem = item to add
|
|
||||||
*/
|
|
||||||
void AddItem( FOOTPRINT_INFO* aItem );
|
|
||||||
|
|
||||||
unsigned GetErrorCount() const
|
unsigned GetErrorCount() const
|
||||||
{
|
{
|
||||||
return m_errors.size();
|
return m_errors.size();
|
||||||
|
|
|
@ -125,16 +125,6 @@ public:
|
||||||
*/
|
*/
|
||||||
MODULE* LoadFootprint( const LIB_ID& aFootprintId );
|
MODULE* LoadFootprint( const LIB_ID& aFootprintId );
|
||||||
|
|
||||||
/**
|
|
||||||
* Check to see if a footprint is available
|
|
||||||
* Note that this is more strict than LoadFootprint as it also checks to see that
|
|
||||||
* the footprint's library is enabled in the fpTable.
|
|
||||||
*
|
|
||||||
* @param aFootprintId
|
|
||||||
* @return true if \a aFootprintId is available and can be loaded
|
|
||||||
*/
|
|
||||||
bool CheckFootprint( const LIB_ID& aFootprintId );
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Function GetBoardBoundingBox
|
* Function GetBoardBoundingBox
|
||||||
* calculates the bounding box containing all board items (or board edge segments).
|
* calculates the bounding box containing all board items (or board edge segments).
|
||||||
|
@ -460,7 +450,7 @@ public:
|
||||||
* @param aLibrary = the library name to use, or empty string to search all libraries
|
* @param aLibrary = the library name to use, or empty string to search all libraries
|
||||||
* @param aUseFootprintViewer = true to allow selection by the footprint viewer
|
* @param aUseFootprintViewer = true to allow selection by the footprint viewer
|
||||||
*/
|
*/
|
||||||
MODULE* LoadModuleFromLibrary( const wxString& aLibrary, bool aUseFootprintViewer = true );
|
MODULE* SelectFootprintFromLibTree( const wxString& aLibrary, bool aUseFootprintViewer = true );
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Adds the given module to the board.
|
* Adds the given module to the board.
|
||||||
|
|
|
@ -54,6 +54,7 @@ set( PCBNEW_DIALOGS
|
||||||
dialogs/dialog_block_options.cpp
|
dialogs/dialog_block_options.cpp
|
||||||
dialogs/dialog_block_options_base.cpp
|
dialogs/dialog_block_options_base.cpp
|
||||||
dialogs/dialog_board_setup.cpp
|
dialogs/dialog_board_setup.cpp
|
||||||
|
dialogs/dialog_choose_footprint.cpp
|
||||||
dialogs/dialog_cleaning_options.cpp
|
dialogs/dialog_cleaning_options.cpp
|
||||||
dialogs/dialog_cleaning_options_base.cpp
|
dialogs/dialog_cleaning_options_base.cpp
|
||||||
dialogs/dialog_copper_zones.cpp
|
dialogs/dialog_copper_zones.cpp
|
||||||
|
@ -88,8 +89,6 @@ set( PCBNEW_DIALOGS
|
||||||
dialogs/dialog_gencad_export_options.cpp
|
dialogs/dialog_gencad_export_options.cpp
|
||||||
dialogs/dialog_gendrill.cpp
|
dialogs/dialog_gendrill.cpp
|
||||||
dialogs/dialog_gendrill_base.cpp
|
dialogs/dialog_gendrill_base.cpp
|
||||||
dialogs/dialog_get_footprint.cpp
|
|
||||||
dialogs/dialog_get_footprint_base.cpp
|
|
||||||
dialogs/dialog_get_footprint_by_name_base.cpp
|
dialogs/dialog_get_footprint_by_name_base.cpp
|
||||||
dialogs/dialog_global_deletion.cpp
|
dialogs/dialog_global_deletion.cpp
|
||||||
dialogs/dialog_global_deletion_base.cpp
|
dialogs/dialog_global_deletion_base.cpp
|
||||||
|
@ -244,6 +243,8 @@ set( PCBNEW_CLASS_SRCS
|
||||||
footprint_edit_frame.cpp
|
footprint_edit_frame.cpp
|
||||||
footprint_libraries_utils.cpp
|
footprint_libraries_utils.cpp
|
||||||
footprint_viewer_frame.cpp
|
footprint_viewer_frame.cpp
|
||||||
|
fp_tree_model_adapter.cpp
|
||||||
|
generate_footprint_info.cpp
|
||||||
grid_layer_box_helpers.cpp
|
grid_layer_box_helpers.cpp
|
||||||
grid_layer_box_helpers.h
|
grid_layer_box_helpers.h
|
||||||
highlight.cpp
|
highlight.cpp
|
||||||
|
|
|
@ -0,0 +1,256 @@
|
||||||
|
/*
|
||||||
|
* This program source code file is part of KiCad, a free EDA CAD application.
|
||||||
|
*
|
||||||
|
* Copyright (C) 2014 Henner Zeller <h.zeller@acm.org>
|
||||||
|
* Copyright (C) 2016-2018 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
|
||||||
|
* as published by the Free Software Foundation; either version 2
|
||||||
|
* of the License, or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program; if not, you may find one here:
|
||||||
|
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
|
||||||
|
* or you may search the http://www.gnu.org website for the version 2 license,
|
||||||
|
* or you may write to the Free Software Foundation, Inc.,
|
||||||
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <dialog_choose_footprint.h>
|
||||||
|
|
||||||
|
#include <algorithm>
|
||||||
|
#include <set>
|
||||||
|
#include <wx/utils.h>
|
||||||
|
|
||||||
|
#include <wx/button.h>
|
||||||
|
#include <wx/dataview.h>
|
||||||
|
#include <wx/panel.h>
|
||||||
|
#include <wx/sizer.h>
|
||||||
|
#include <wx/splitter.h>
|
||||||
|
#include <wx/timer.h>
|
||||||
|
#include <wx/utils.h>
|
||||||
|
|
||||||
|
#include <pcb_base_frame.h>
|
||||||
|
#include <fp_lib_table.h>
|
||||||
|
#include <widgets/lib_tree.h>
|
||||||
|
#include <widgets/footprint_preview_widget.h>
|
||||||
|
#include <widgets/footprint_select_widget.h>
|
||||||
|
|
||||||
|
|
||||||
|
wxSize DIALOG_CHOOSE_FOOTPRINT::m_last_dlg_size( -1, -1 );
|
||||||
|
int DIALOG_CHOOSE_FOOTPRINT::m_h_sash_pos = 0;
|
||||||
|
int DIALOG_CHOOSE_FOOTPRINT::m_v_sash_pos = 0;
|
||||||
|
|
||||||
|
|
||||||
|
DIALOG_CHOOSE_FOOTPRINT::DIALOG_CHOOSE_FOOTPRINT( PCB_BASE_FRAME* aParent,
|
||||||
|
const wxString& aTitle,
|
||||||
|
FP_TREE_MODEL_ADAPTER::PTR& aAdapter,
|
||||||
|
bool aAllowBrowser )
|
||||||
|
: DIALOG_SHIM( aParent, wxID_ANY, aTitle, wxDefaultPosition, wxDefaultSize,
|
||||||
|
wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER ),
|
||||||
|
m_browser_button( nullptr ),
|
||||||
|
m_hsplitter( nullptr ),
|
||||||
|
m_vsplitter( nullptr ),
|
||||||
|
m_parent( aParent ),
|
||||||
|
m_external_browser_requested( false )
|
||||||
|
{
|
||||||
|
auto sizer = new wxBoxSizer( wxVERTICAL );
|
||||||
|
wxHtmlWindow* details = nullptr;
|
||||||
|
|
||||||
|
m_vsplitter = new wxSplitterWindow( this, wxID_ANY, wxDefaultPosition, wxDefaultSize,
|
||||||
|
wxSP_LIVE_UPDATE | wxSP_3DSASH );
|
||||||
|
|
||||||
|
m_hsplitter = new wxSplitterWindow( m_vsplitter, wxID_ANY, wxDefaultPosition, wxDefaultSize,
|
||||||
|
wxSP_LIVE_UPDATE | wxSP_3DSASH );
|
||||||
|
|
||||||
|
//Avoid the splitter window being assigned as the Parent to additional windows
|
||||||
|
m_hsplitter->SetExtraStyle( wxWS_EX_TRANSIENT );
|
||||||
|
|
||||||
|
auto detailsPanel = new wxPanel( m_vsplitter );
|
||||||
|
auto detailsSizer = new wxBoxSizer( wxVERTICAL );
|
||||||
|
detailsPanel->SetSizer( detailsSizer );
|
||||||
|
|
||||||
|
details = new wxHtmlWindow( detailsPanel, wxID_ANY, wxDefaultPosition, wxDefaultSize,
|
||||||
|
wxHW_SCROLLBAR_AUTO | wxRAISED_BORDER );
|
||||||
|
detailsSizer->Add( details, 1, wxEXPAND | wxLEFT | wxRIGHT, 5 );
|
||||||
|
detailsPanel->Layout();
|
||||||
|
detailsSizer->Fit( detailsPanel );
|
||||||
|
|
||||||
|
m_vsplitter->SetSashGravity( 0.5 );
|
||||||
|
m_vsplitter->SetMinimumPaneSize( 20 );
|
||||||
|
m_vsplitter->SplitHorizontally( m_hsplitter, detailsPanel );
|
||||||
|
|
||||||
|
sizer->Add( m_vsplitter, 1, wxEXPAND | wxLEFT | wxRIGHT | wxTOP, 5 );
|
||||||
|
|
||||||
|
m_tree = new LIB_TREE( m_hsplitter, Prj().PcbFootprintLibs(), aAdapter,
|
||||||
|
LIB_TREE::WIDGETS::ALL, details );
|
||||||
|
|
||||||
|
m_hsplitter->SetSashGravity( 0.8 );
|
||||||
|
m_hsplitter->SetMinimumPaneSize( 20 );
|
||||||
|
m_hsplitter->SplitVertically( m_tree, ConstructRightPanel( m_hsplitter ) );
|
||||||
|
|
||||||
|
m_dbl_click_timer = new wxTimer( this );
|
||||||
|
|
||||||
|
auto buttonsSizer = new wxBoxSizer( wxHORIZONTAL );
|
||||||
|
|
||||||
|
if( aAllowBrowser )
|
||||||
|
{
|
||||||
|
m_browser_button = new wxButton( this, wxID_ANY, _( "Select with Browser" ) );
|
||||||
|
buttonsSizer->Add( m_browser_button, 0, wxALL | wxALIGN_CENTER_VERTICAL, 10 );
|
||||||
|
}
|
||||||
|
|
||||||
|
auto sdbSizer = new wxStdDialogButtonSizer();
|
||||||
|
auto okButton = new wxButton( this, wxID_OK );
|
||||||
|
auto cancelButton = new wxButton( this, wxID_CANCEL );
|
||||||
|
sdbSizer->AddButton( okButton );
|
||||||
|
sdbSizer->AddButton( cancelButton );
|
||||||
|
sdbSizer->Realize();
|
||||||
|
|
||||||
|
buttonsSizer->Add( sdbSizer, 1, wxALL, 5 );
|
||||||
|
|
||||||
|
sizer->Add( buttonsSizer, 0, wxEXPAND | wxLEFT, 5 );
|
||||||
|
SetSizer( sizer );
|
||||||
|
|
||||||
|
Bind( wxEVT_TIMER, &DIALOG_CHOOSE_FOOTPRINT::OnCloseTimer, this, m_dbl_click_timer->GetId() );
|
||||||
|
Bind( COMPONENT_PRESELECTED, &DIALOG_CHOOSE_FOOTPRINT::OnComponentPreselected, this );
|
||||||
|
Bind( COMPONENT_SELECTED, &DIALOG_CHOOSE_FOOTPRINT::OnComponentSelected, this );
|
||||||
|
|
||||||
|
if( m_browser_button )
|
||||||
|
m_browser_button->Bind( wxEVT_COMMAND_BUTTON_CLICKED, &DIALOG_CHOOSE_FOOTPRINT::OnUseBrowser, this );
|
||||||
|
|
||||||
|
Layout();
|
||||||
|
|
||||||
|
// We specify the width of the right window (m_symbol_view_panel), because specify
|
||||||
|
// the width of the left window does not work as expected when SetSashGravity() is called
|
||||||
|
m_hsplitter->SetSashPosition( m_h_sash_pos ? m_h_sash_pos : HorizPixelsFromDU( 220 ) );
|
||||||
|
|
||||||
|
if( m_vsplitter )
|
||||||
|
m_vsplitter->SetSashPosition( m_v_sash_pos ? m_v_sash_pos : VertPixelsFromDU( 230 ) );
|
||||||
|
|
||||||
|
if( m_last_dlg_size == wxSize( -1, -1 ) )
|
||||||
|
SetSizeInDU( 440, 340 );
|
||||||
|
else
|
||||||
|
SetSize( m_last_dlg_size );
|
||||||
|
|
||||||
|
SetInitialFocus( m_tree );
|
||||||
|
okButton->SetDefault();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
DIALOG_CHOOSE_FOOTPRINT::~DIALOG_CHOOSE_FOOTPRINT()
|
||||||
|
{
|
||||||
|
Unbind( wxEVT_TIMER, &DIALOG_CHOOSE_FOOTPRINT::OnCloseTimer, this );
|
||||||
|
Unbind( COMPONENT_PRESELECTED, &DIALOG_CHOOSE_FOOTPRINT::OnComponentPreselected, this );
|
||||||
|
Unbind( COMPONENT_SELECTED, &DIALOG_CHOOSE_FOOTPRINT::OnComponentSelected, this );
|
||||||
|
|
||||||
|
if( m_browser_button )
|
||||||
|
m_browser_button->Unbind( wxEVT_COMMAND_BUTTON_CLICKED, &DIALOG_CHOOSE_FOOTPRINT::OnUseBrowser, this );
|
||||||
|
|
||||||
|
// I am not sure the following two lines are necessary,
|
||||||
|
// but they will not hurt anyone
|
||||||
|
m_dbl_click_timer->Stop();
|
||||||
|
delete m_dbl_click_timer;
|
||||||
|
|
||||||
|
m_last_dlg_size = GetSize();
|
||||||
|
m_h_sash_pos = m_hsplitter->GetSashPosition();
|
||||||
|
|
||||||
|
if( m_vsplitter )
|
||||||
|
m_v_sash_pos = m_vsplitter->GetSashPosition();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
wxPanel* DIALOG_CHOOSE_FOOTPRINT::ConstructRightPanel( wxWindow* aParent )
|
||||||
|
{
|
||||||
|
auto panel = new wxPanel( aParent );
|
||||||
|
auto sizer = new wxBoxSizer( wxVERTICAL );
|
||||||
|
|
||||||
|
m_preview_ctrl = new FOOTPRINT_PREVIEW_WIDGET( panel, Kiway() );
|
||||||
|
sizer->Add( m_preview_ctrl, 1, wxEXPAND | wxBOTTOM | wxRIGHT, 5 );
|
||||||
|
|
||||||
|
panel->SetSizer( sizer );
|
||||||
|
panel->Layout();
|
||||||
|
sizer->Fit( panel );
|
||||||
|
|
||||||
|
return panel;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
LIB_ID DIALOG_CHOOSE_FOOTPRINT::GetSelectedLibId() const
|
||||||
|
{
|
||||||
|
return m_tree->GetSelectedLibId();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void DIALOG_CHOOSE_FOOTPRINT::OnUseBrowser( wxCommandEvent& aEvent )
|
||||||
|
{
|
||||||
|
m_external_browser_requested = true;
|
||||||
|
EndQuasiModal( wxID_OK );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void DIALOG_CHOOSE_FOOTPRINT::OnCloseTimer( wxTimerEvent& aEvent )
|
||||||
|
{
|
||||||
|
// Hack handler because of eaten MouseUp event. See
|
||||||
|
// DIALOG_CHOOSE_FOOTPRINT::OnComponentSelected for the beginning
|
||||||
|
// of this spaghetti noodle.
|
||||||
|
|
||||||
|
auto state = wxGetMouseState();
|
||||||
|
|
||||||
|
if( state.LeftIsDown() )
|
||||||
|
{
|
||||||
|
// Mouse hasn't been raised yet, so fire the timer again. Otherwise the
|
||||||
|
// purpose of this timer is defeated.
|
||||||
|
m_dbl_click_timer->StartOnce( DIALOG_CHOOSE_FOOTPRINT::DblClickDelay );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
EndQuasiModal( wxID_OK );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void DIALOG_CHOOSE_FOOTPRINT::OnComponentPreselected( wxCommandEvent& aEvent )
|
||||||
|
{
|
||||||
|
if( !m_preview_ctrl || !m_preview_ctrl->IsInitialized() )
|
||||||
|
return;
|
||||||
|
|
||||||
|
LIB_ID lib_id = m_tree->GetSelectedLibId();
|
||||||
|
|
||||||
|
if( !lib_id.IsValid() )
|
||||||
|
{
|
||||||
|
m_preview_ctrl->SetStatusText( _( "No footprint selected" ) );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
m_preview_ctrl->ClearStatus();
|
||||||
|
m_preview_ctrl->CacheFootprint( lib_id );
|
||||||
|
m_preview_ctrl->DisplayFootprint( lib_id );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void DIALOG_CHOOSE_FOOTPRINT::OnComponentSelected( wxCommandEvent& aEvent )
|
||||||
|
{
|
||||||
|
if( m_tree->GetSelectedLibId().IsValid() )
|
||||||
|
{
|
||||||
|
// Got a selection. We can't just end the modal dialog here, because
|
||||||
|
// wx leaks some events back to the parent window (in particular, the
|
||||||
|
// MouseUp following a double click).
|
||||||
|
//
|
||||||
|
// NOW, here's where it gets really fun. wxTreeListCtrl eats MouseUp.
|
||||||
|
// This isn't really feasible to bypass without a fully custom
|
||||||
|
// wxDataViewCtrl implementation, and even then might not be fully
|
||||||
|
// possible (docs are vague). To get around this, we use a one-shot
|
||||||
|
// timer to schedule the dialog close.
|
||||||
|
//
|
||||||
|
// See DIALOG_CHOOSE_FOOTPRINT::OnCloseTimer for the other end of this
|
||||||
|
// spaghetti noodle.
|
||||||
|
m_dbl_click_timer->StartOnce( DIALOG_CHOOSE_FOOTPRINT::DblClickDelay );
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,154 @@
|
||||||
|
/* -*- c++ -*-
|
||||||
|
* This program source code file is part of KiCad, a free EDA CAD application.
|
||||||
|
*
|
||||||
|
* Copyright (C) 2014 Henner Zeller <h.zeller@acm.org>
|
||||||
|
* Copyright (C) 2014-2018 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
|
||||||
|
* as published by the Free Software Foundation; either version 2
|
||||||
|
* of the License, or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program; if not, you may find one here:
|
||||||
|
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
|
||||||
|
* or you may search the http://www.gnu.org website for the version 2 license,
|
||||||
|
* or you may write to the Free Software Foundation, Inc.,
|
||||||
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
|
||||||
|
*/
|
||||||
|
#ifndef DIALOG_CHOOSE_FOOTPRINT_H
|
||||||
|
#define DIALOG_CHOOSE_FOOTPRINT_H
|
||||||
|
|
||||||
|
#include "dialog_shim.h"
|
||||||
|
#include <fp_tree_model_adapter.h>
|
||||||
|
#include <footprint_info.h>
|
||||||
|
#include <widgets/footprint_preview_widget.h>
|
||||||
|
|
||||||
|
class wxStaticBitmap;
|
||||||
|
class wxTextCtrl;
|
||||||
|
class wxStdDialogButtonSizer;
|
||||||
|
class wxDataViewCtrl;
|
||||||
|
class wxHtmlWindow;
|
||||||
|
class wxHtmlLinkEvent;
|
||||||
|
class wxPanel;
|
||||||
|
class wxChoice;
|
||||||
|
class wxButton;
|
||||||
|
class wxTimer;
|
||||||
|
|
||||||
|
class PCB_BASE_FRAME;
|
||||||
|
class LIB_TREE;
|
||||||
|
class MODULE;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Dialog class to select a footprint from the libraries. This is the master
|
||||||
|
* View class in a Model-View-Adapter (mediated MVC) architecture. The other
|
||||||
|
* pieces are in:
|
||||||
|
*
|
||||||
|
* - Adapter: CMP_TREE_MODEL_ADAPTER in common/cmp_tree_model_adapter.h
|
||||||
|
* - Model: CMP_TREE_NODE and descendants in common/cmp_tree_model.h
|
||||||
|
*
|
||||||
|
* Because everything is tied together in the adapter class, see that file
|
||||||
|
* for thorough documentation. A simple example usage follows:
|
||||||
|
*
|
||||||
|
* // Create the adapter class
|
||||||
|
* auto adapter( FP_TREE_MODEL_ADAPTER::Create( Prj().PcbFootprintLibs() ) );
|
||||||
|
*
|
||||||
|
* // Perform any configuration of adapter properties here
|
||||||
|
* adapter->SetPreselectNode( "LIB_NICKNAME", "FP_NAME", 2 );
|
||||||
|
*
|
||||||
|
* // Initialize model from #FP_LIB_TABLE
|
||||||
|
* libNicknames = libs->GetLogicalLibs();
|
||||||
|
*
|
||||||
|
* for( auto nickname : libNicknames )
|
||||||
|
* {
|
||||||
|
* adapter->AddLibrary( nickname );
|
||||||
|
* }
|
||||||
|
*
|
||||||
|
* // Create and display dialog
|
||||||
|
* DIALOG_CHOOSE_FOOTPRINT dlg( this, title, adapter, 1 );
|
||||||
|
* bool selected = ( dlg.ShowModal() != wxID_CANCEL );
|
||||||
|
*
|
||||||
|
* // Receive part
|
||||||
|
* if( selected )
|
||||||
|
* {
|
||||||
|
* int unit;
|
||||||
|
* #LIB_ID id = dlg.GetSelectedAlias( &unit );
|
||||||
|
* do_something( id, unit );
|
||||||
|
* }
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
class DIALOG_CHOOSE_FOOTPRINT : public DIALOG_SHIM
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
/**
|
||||||
|
* Create dialog to choose component.
|
||||||
|
*
|
||||||
|
* @param aParent a PCB_BASE_FRAME parent window.
|
||||||
|
* @param aAdapter FP_TREE_MODEL_ADAPTER::PTR. See CMP_TREE_MODEL_ADAPTER
|
||||||
|
* for documentation.
|
||||||
|
*/
|
||||||
|
DIALOG_CHOOSE_FOOTPRINT( PCB_BASE_FRAME* aParent, const wxString& aTitle,
|
||||||
|
FP_TREE_MODEL_ADAPTER::PTR& aAdapter, bool aAllowBrowser );
|
||||||
|
|
||||||
|
~DIALOG_CHOOSE_FOOTPRINT();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* To be called after this dialog returns from ShowModal().
|
||||||
|
*
|
||||||
|
* @return the #LIB_ID of the symbol that has been selected.
|
||||||
|
*/
|
||||||
|
LIB_ID GetSelectedLibId() const;
|
||||||
|
|
||||||
|
/** Function IsExternalBrowserSelected
|
||||||
|
*
|
||||||
|
* @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;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected:
|
||||||
|
static constexpr int DblClickDelay = 100; // milliseconds
|
||||||
|
|
||||||
|
wxPanel* ConstructRightPanel( wxWindow* aParent );
|
||||||
|
|
||||||
|
void OnCloseTimer( wxTimerEvent& aEvent );
|
||||||
|
void OnUseBrowser( wxCommandEvent& aEvent );
|
||||||
|
|
||||||
|
void OnComponentPreselected( wxCommandEvent& aEvent );
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Handle the selection of an item. This is called when either the search
|
||||||
|
* box or the tree receive an Enter, or the tree receives a double click.
|
||||||
|
* If the item selected is a category, it is expanded or collapsed; if it
|
||||||
|
* is a component, the component is picked.
|
||||||
|
*/
|
||||||
|
void OnComponentSelected( wxCommandEvent& aEvent );
|
||||||
|
|
||||||
|
wxTimer* m_dbl_click_timer;
|
||||||
|
wxButton* m_browser_button;
|
||||||
|
wxSplitterWindow* m_hsplitter;
|
||||||
|
wxSplitterWindow* m_vsplitter;
|
||||||
|
|
||||||
|
static int m_h_sash_pos; // remember sash positions during a session
|
||||||
|
static int m_v_sash_pos;
|
||||||
|
|
||||||
|
FOOTPRINT_PREVIEW_WIDGET* m_preview_ctrl;
|
||||||
|
LIB_TREE* m_tree;
|
||||||
|
|
||||||
|
PCB_BASE_FRAME* m_parent;
|
||||||
|
bool m_external_browser_requested;
|
||||||
|
|
||||||
|
// Remember the dialog size during a session
|
||||||
|
static wxSize m_last_dlg_size;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif /* DIALOG_CHOOSE_FOOTPRINT_H */
|
|
@ -1,157 +0,0 @@
|
||||||
/*
|
|
||||||
* This program source code file is part of KiCad, a free EDA CAD application.
|
|
||||||
*
|
|
||||||
* Copyright (C) 2010-2014 Jean-Pierre Charras, jp.charras at wanadoo.fr
|
|
||||||
* Copyright (C) 1992-2018 KiCad Developers, see CHANGELOG.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
|
|
||||||
* as published by the Free Software Foundation; either version 2
|
|
||||||
* of the License, or (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program; if not, you may find one here:
|
|
||||||
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
|
|
||||||
* or you may search the http://www.gnu.org website for the version 2 license,
|
|
||||||
* or you may write to the Free Software Foundation, Inc.,
|
|
||||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <fctsys.h>
|
|
||||||
#include <common.h>
|
|
||||||
#include <macros.h>
|
|
||||||
#include <draw_frame.h>
|
|
||||||
#include <dialogs/dialog_get_footprint.h>
|
|
||||||
#include <lib_id.h>
|
|
||||||
#include <pcb_base_frame.h>
|
|
||||||
#include <lib_table_base.h>
|
|
||||||
|
|
||||||
|
|
||||||
/****************************************************************************/
|
|
||||||
/* Show a dialog frame to choose a name from an history list, or a new name */
|
|
||||||
/* to select a module */
|
|
||||||
/****************************************************************************/
|
|
||||||
|
|
||||||
static wxArrayString s_HistoryList;
|
|
||||||
static unsigned s_HistoryMaxCount = 8; // Max number of items displayed in history list
|
|
||||||
|
|
||||||
|
|
||||||
DIALOG_GET_FOOTPRINT::DIALOG_GET_FOOTPRINT( PCB_BASE_FRAME* parent, bool aShowBrowseButton ) :
|
|
||||||
DIALOG_GET_FOOTPRINT_BASE( parent, -1 ),
|
|
||||||
m_frame( parent )
|
|
||||||
{
|
|
||||||
|
|
||||||
m_Text = wxEmptyString;
|
|
||||||
m_selectByBrowser = false;
|
|
||||||
m_selectionIsKeyword = false;
|
|
||||||
|
|
||||||
for( size_t ii = 0; ii < s_HistoryList.size(); ++ii )
|
|
||||||
{
|
|
||||||
LIB_ID fpid;
|
|
||||||
fpid.Parse( s_HistoryList[ ii ], LIB_ID::ID_PCB );
|
|
||||||
|
|
||||||
if( m_frame->CheckFootprint( fpid ) )
|
|
||||||
m_historyList->Append( s_HistoryList[ ii ] );
|
|
||||||
}
|
|
||||||
|
|
||||||
m_buttonBrowse->Show( aShowBrowseButton );
|
|
||||||
m_buttonBrowse->Enable( aShowBrowseButton );
|
|
||||||
|
|
||||||
m_sdbSizerOK->SetDefault();
|
|
||||||
|
|
||||||
m_textCmpNameCtrl->SetFocus();
|
|
||||||
GetSizer()->Fit( this );
|
|
||||||
GetSizer()->SetSizeHints( this );
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void DIALOG_GET_FOOTPRINT::OnHistoryClick( wxCommandEvent& aEvent )
|
|
||||||
{
|
|
||||||
m_textCmpNameCtrl->SetValue( m_historyList->GetStringSelection() );
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void DIALOG_GET_FOOTPRINT::Accept( wxCommandEvent& aEvent )
|
|
||||||
{
|
|
||||||
m_selectionIsKeyword = false;
|
|
||||||
switch( aEvent.GetId() )
|
|
||||||
{
|
|
||||||
case ID_SEL_BY_LISTBOX:
|
|
||||||
m_Text = m_historyList->GetStringSelection();
|
|
||||||
break;
|
|
||||||
|
|
||||||
case wxID_OK:
|
|
||||||
if( m_historyList->HasFocus() )
|
|
||||||
m_Text = m_historyList->GetStringSelection();
|
|
||||||
else
|
|
||||||
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;
|
|
||||||
|
|
||||||
case ID_BROWSE:
|
|
||||||
m_Text = wxEmptyString;
|
|
||||||
m_selectByBrowser = true;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
m_Text.Trim( false ); // Remove blanks at beginning
|
|
||||||
m_Text.Trim( true ); // Remove blanks at end
|
|
||||||
|
|
||||||
// Put an wxID_OK event through the dialog infrastrucutre
|
|
||||||
aEvent.SetEventType( wxEVT_COMMAND_BUTTON_CLICKED );
|
|
||||||
aEvent.SetId( wxID_OK );
|
|
||||||
aEvent.Skip();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// Return the component name selected by the dialog
|
|
||||||
wxString DIALOG_GET_FOOTPRINT::GetComponentName( void )
|
|
||||||
{
|
|
||||||
return m_Text;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/* Initialize the default component name default choice
|
|
||||||
*/
|
|
||||||
void DIALOG_GET_FOOTPRINT::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( const wxString& aName )
|
|
||||||
{
|
|
||||||
// Remove duplicates
|
|
||||||
for( int ii = s_HistoryList.GetCount() - 1; ii >= 0; --ii )
|
|
||||||
{
|
|
||||||
if( s_HistoryList[ ii ] == aName )
|
|
||||||
s_HistoryList.RemoveAt( (size_t) ii );
|
|
||||||
}
|
|
||||||
|
|
||||||
// Add the new name at the beginning of the history list
|
|
||||||
s_HistoryList.Insert( aName, 0 );
|
|
||||||
|
|
||||||
// Remove extra names
|
|
||||||
while( s_HistoryList.GetCount() >= s_HistoryMaxCount )
|
|
||||||
s_HistoryList.RemoveAt( s_HistoryList.GetCount() - 1 );
|
|
||||||
}
|
|
|
@ -1,82 +0,0 @@
|
||||||
/*
|
|
||||||
* This program source code file is part of KiCad, a free EDA CAD application.
|
|
||||||
*
|
|
||||||
* Copyright (C) 2010-2014 Jean-Pierre Charras, jp.charras at wanadoo.fr
|
|
||||||
* Copyright (C) 1992-2018 KiCad Developers, see CHANGELOG.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
|
|
||||||
* as published by the Free Software Foundation; either version 2
|
|
||||||
* of the License, or (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program; if not, you may find one here:
|
|
||||||
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
|
|
||||||
* or you may search the http://www.gnu.org website for the version 2 license,
|
|
||||||
* or you may write to the Free Software Foundation, Inc.,
|
|
||||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
#ifndef __INCLUDE_DIALOG_GET_COMPONENT_H__
|
|
||||||
#define __INCLUDE_DIALOG_GET_COMPONENT_H__
|
|
||||||
|
|
||||||
#include "dialog_get_footprint_base.h"
|
|
||||||
|
|
||||||
class PCB_BASE_FRAME;
|
|
||||||
|
|
||||||
void AddHistoryComponentName( const wxString& Name );
|
|
||||||
|
|
||||||
|
|
||||||
/* Dialog frame to choose a component name */
|
|
||||||
class DIALOG_GET_FOOTPRINT : public DIALOG_GET_FOOTPRINT_BASE
|
|
||||||
{
|
|
||||||
private:
|
|
||||||
PCB_BASE_FRAME* m_frame;
|
|
||||||
wxString m_Text;
|
|
||||||
bool m_selectionIsKeyword;
|
|
||||||
bool m_selectByBrowser;
|
|
||||||
|
|
||||||
public:
|
|
||||||
// Constructor and destructor
|
|
||||||
DIALOG_GET_FOOTPRINT( PCB_BASE_FRAME* parent, bool aShowBrowseButton );
|
|
||||||
~DIALOG_GET_FOOTPRINT() override {};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Function GetComponentName
|
|
||||||
* @return the selection (name or keyword)
|
|
||||||
*/
|
|
||||||
wxString GetComponentName();
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Function IsKeyword
|
|
||||||
* @return true if the returned string is a keyword
|
|
||||||
*/
|
|
||||||
bool IsKeyword()
|
|
||||||
{
|
|
||||||
return m_selectionIsKeyword;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Function SelectByBrowser
|
|
||||||
* @return true if the footprint browser should be shown to select the footprint
|
|
||||||
*/
|
|
||||||
bool SelectByBrowser()
|
|
||||||
{
|
|
||||||
return m_selectByBrowser;
|
|
||||||
}
|
|
||||||
|
|
||||||
void SetComponentName( const wxString& name );
|
|
||||||
|
|
||||||
private:
|
|
||||||
void OnHistoryClick( wxCommandEvent& aEvent ) override;
|
|
||||||
void Accept( wxCommandEvent& aEvent ) override;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
#endif /* __INCLUDE_DIALOG_GET_COMPONENT_H__ */
|
|
|
@ -1,100 +0,0 @@
|
||||||
///////////////////////////////////////////////////////////////////////////
|
|
||||||
// C++ code generated with wxFormBuilder (version Apr 20 2018)
|
|
||||||
// http://www.wxformbuilder.org/
|
|
||||||
//
|
|
||||||
// PLEASE DO *NOT* EDIT THIS FILE!
|
|
||||||
///////////////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
#include "dialog_get_footprint_base.h"
|
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
DIALOG_GET_FOOTPRINT_BASE::DIALOG_GET_FOOTPRINT_BASE( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style ) : DIALOG_SHIM( parent, id, title, pos, size, style )
|
|
||||||
{
|
|
||||||
this->SetSizeHints( wxDefaultSize, wxDefaultSize );
|
|
||||||
|
|
||||||
wxBoxSizer* bSizerMain;
|
|
||||||
bSizerMain = new wxBoxSizer( wxVERTICAL );
|
|
||||||
|
|
||||||
wxBoxSizer* bSizerUpper;
|
|
||||||
bSizerUpper = new wxBoxSizer( wxHORIZONTAL );
|
|
||||||
|
|
||||||
wxBoxSizer* bSizerLeft;
|
|
||||||
bSizerLeft = new wxBoxSizer( wxVERTICAL );
|
|
||||||
|
|
||||||
m_staticTextName = new wxStaticText( this, wxID_ANY, _("Name:"), wxDefaultPosition, wxDefaultSize, 0 );
|
|
||||||
m_staticTextName->Wrap( -1 );
|
|
||||||
bSizerLeft->Add( m_staticTextName, 0, wxTOP|wxRIGHT|wxLEFT, 5 );
|
|
||||||
|
|
||||||
m_textCmpNameCtrl = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
|
|
||||||
bSizerLeft->Add( m_textCmpNameCtrl, 0, wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 5 );
|
|
||||||
|
|
||||||
m_staticTextHistory = new wxStaticText( this, wxID_ANY, _("History list:"), wxDefaultPosition, wxDefaultSize, 0 );
|
|
||||||
m_staticTextHistory->Wrap( -1 );
|
|
||||||
bSizerLeft->Add( m_staticTextHistory, 0, wxTOP|wxRIGHT|wxLEFT, 5 );
|
|
||||||
|
|
||||||
m_historyList = new wxListBox( this, ID_SEL_BY_LISTBOX, wxDefaultPosition, wxDefaultSize, 0, NULL, 0 );
|
|
||||||
m_historyList->SetMinSize( wxSize( 200,100 ) );
|
|
||||||
|
|
||||||
bSizerLeft->Add( m_historyList, 1, wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 5 );
|
|
||||||
|
|
||||||
|
|
||||||
bSizerUpper->Add( bSizerLeft, 1, wxEXPAND, 5 );
|
|
||||||
|
|
||||||
wxBoxSizer* bSizerRight;
|
|
||||||
bSizerRight = new wxBoxSizer( wxVERTICAL );
|
|
||||||
|
|
||||||
m_buttonKW = new wxButton( this, ID_ACCEPT_KEYWORD, _("Search by Keyword"), wxDefaultPosition, wxDefaultSize, 0 );
|
|
||||||
bSizerRight->Add( m_buttonKW, 0, wxALL|wxEXPAND, 5 );
|
|
||||||
|
|
||||||
m_buttonList = new wxButton( this, ID_LIST_ALL, _("List All"), wxDefaultPosition, wxDefaultSize, 0 );
|
|
||||||
bSizerRight->Add( m_buttonList, 0, wxALL|wxEXPAND, 5 );
|
|
||||||
|
|
||||||
m_buttonBrowse = new wxButton( this, ID_BROWSE, _("Select by Browser"), wxDefaultPosition, wxDefaultSize, 0 );
|
|
||||||
bSizerRight->Add( m_buttonBrowse, 0, wxALL|wxEXPAND, 5 );
|
|
||||||
|
|
||||||
|
|
||||||
bSizerUpper->Add( bSizerRight, 0, wxALIGN_CENTER_VERTICAL, 5 );
|
|
||||||
|
|
||||||
|
|
||||||
bSizerMain->Add( bSizerUpper, 1, wxEXPAND, 5 );
|
|
||||||
|
|
||||||
m_staticline1 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL );
|
|
||||||
bSizerMain->Add( m_staticline1, 0, wxEXPAND|wxLEFT|wxRIGHT, 5 );
|
|
||||||
|
|
||||||
m_sdbSizer = new wxStdDialogButtonSizer();
|
|
||||||
m_sdbSizerOK = new wxButton( this, wxID_OK );
|
|
||||||
m_sdbSizer->AddButton( m_sdbSizerOK );
|
|
||||||
m_sdbSizerCancel = new wxButton( this, wxID_CANCEL );
|
|
||||||
m_sdbSizer->AddButton( m_sdbSizerCancel );
|
|
||||||
m_sdbSizer->Realize();
|
|
||||||
|
|
||||||
bSizerMain->Add( m_sdbSizer, 0, wxALL|wxEXPAND, 5 );
|
|
||||||
|
|
||||||
|
|
||||||
this->SetSizer( bSizerMain );
|
|
||||||
this->Layout();
|
|
||||||
bSizerMain->Fit( this );
|
|
||||||
|
|
||||||
this->Centre( wxBOTH );
|
|
||||||
|
|
||||||
// Connect Events
|
|
||||||
m_historyList->Connect( wxEVT_COMMAND_LISTBOX_SELECTED, wxCommandEventHandler( DIALOG_GET_FOOTPRINT_BASE::OnHistoryClick ), NULL, this );
|
|
||||||
m_historyList->Connect( wxEVT_COMMAND_LISTBOX_DOUBLECLICKED, wxCommandEventHandler( DIALOG_GET_FOOTPRINT_BASE::Accept ), NULL, this );
|
|
||||||
m_buttonKW->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_GET_FOOTPRINT_BASE::Accept ), NULL, this );
|
|
||||||
m_buttonList->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_GET_FOOTPRINT_BASE::Accept ), NULL, this );
|
|
||||||
m_buttonBrowse->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_GET_FOOTPRINT_BASE::Accept ), NULL, this );
|
|
||||||
m_sdbSizerOK->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_GET_FOOTPRINT_BASE::Accept ), NULL, this );
|
|
||||||
}
|
|
||||||
|
|
||||||
DIALOG_GET_FOOTPRINT_BASE::~DIALOG_GET_FOOTPRINT_BASE()
|
|
||||||
{
|
|
||||||
// Disconnect Events
|
|
||||||
m_historyList->Disconnect( wxEVT_COMMAND_LISTBOX_SELECTED, wxCommandEventHandler( DIALOG_GET_FOOTPRINT_BASE::OnHistoryClick ), NULL, this );
|
|
||||||
m_historyList->Disconnect( wxEVT_COMMAND_LISTBOX_DOUBLECLICKED, wxCommandEventHandler( DIALOG_GET_FOOTPRINT_BASE::Accept ), NULL, this );
|
|
||||||
m_buttonKW->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_GET_FOOTPRINT_BASE::Accept ), NULL, this );
|
|
||||||
m_buttonList->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_GET_FOOTPRINT_BASE::Accept ), NULL, this );
|
|
||||||
m_buttonBrowse->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_GET_FOOTPRINT_BASE::Accept ), NULL, this );
|
|
||||||
m_sdbSizerOK->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_GET_FOOTPRINT_BASE::Accept ), NULL, this );
|
|
||||||
|
|
||||||
}
|
|
|
@ -1,849 +0,0 @@
|
||||||
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
|
|
||||||
<wxFormBuilder_Project>
|
|
||||||
<FileVersion major="1" minor="13" />
|
|
||||||
<object class="Project" expanded="1">
|
|
||||||
<property name="class_decoration"></property>
|
|
||||||
<property name="code_generation">C++</property>
|
|
||||||
<property name="disconnect_events">1</property>
|
|
||||||
<property name="disconnect_mode">source_name</property>
|
|
||||||
<property name="disconnect_php_events">0</property>
|
|
||||||
<property name="disconnect_python_events">0</property>
|
|
||||||
<property name="embedded_files_path">res</property>
|
|
||||||
<property name="encoding">UTF-8</property>
|
|
||||||
<property name="event_generation">connect</property>
|
|
||||||
<property name="file">dialog_get_footprint_base</property>
|
|
||||||
<property name="first_id">1000</property>
|
|
||||||
<property name="help_provider">none</property>
|
|
||||||
<property name="indent_with_spaces"></property>
|
|
||||||
<property name="internationalize">1</property>
|
|
||||||
<property name="name">dialog_get_footprint_base</property>
|
|
||||||
<property name="namespace"></property>
|
|
||||||
<property name="path">.</property>
|
|
||||||
<property name="precompiled_header"></property>
|
|
||||||
<property name="relative_path">1</property>
|
|
||||||
<property name="skip_lua_events">1</property>
|
|
||||||
<property name="skip_php_events">1</property>
|
|
||||||
<property name="skip_python_events">1</property>
|
|
||||||
<property name="ui_table">UI</property>
|
|
||||||
<property name="use_enum">0</property>
|
|
||||||
<property name="use_microsoft_bom">0</property>
|
|
||||||
<object class="Dialog" expanded="1">
|
|
||||||
<property name="aui_managed">0</property>
|
|
||||||
<property name="aui_manager_style">wxAUI_MGR_DEFAULT</property>
|
|
||||||
<property name="bg"></property>
|
|
||||||
<property name="center">wxBOTH</property>
|
|
||||||
<property name="context_help"></property>
|
|
||||||
<property name="context_menu">1</property>
|
|
||||||
<property name="enabled">1</property>
|
|
||||||
<property name="event_handler">impl_virtual</property>
|
|
||||||
<property name="extra_style"></property>
|
|
||||||
<property name="fg"></property>
|
|
||||||
<property name="font"></property>
|
|
||||||
<property name="hidden">0</property>
|
|
||||||
<property name="id">wxID_ANY</property>
|
|
||||||
<property name="maximum_size"></property>
|
|
||||||
<property name="minimum_size"></property>
|
|
||||||
<property name="name">DIALOG_GET_FOOTPRINT_BASE</property>
|
|
||||||
<property name="pos"></property>
|
|
||||||
<property name="size">-1,-1</property>
|
|
||||||
<property name="style">wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER</property>
|
|
||||||
<property name="subclass">DIALOG_SHIM; dialog_shim.h</property>
|
|
||||||
<property name="title">Choose Footprint</property>
|
|
||||||
<property name="tooltip"></property>
|
|
||||||
<property name="window_extra_style"></property>
|
|
||||||
<property name="window_name"></property>
|
|
||||||
<property name="window_style"></property>
|
|
||||||
<event name="OnActivate"></event>
|
|
||||||
<event name="OnActivateApp"></event>
|
|
||||||
<event name="OnAuiFindManager"></event>
|
|
||||||
<event name="OnAuiPaneButton"></event>
|
|
||||||
<event name="OnAuiPaneClose"></event>
|
|
||||||
<event name="OnAuiPaneMaximize"></event>
|
|
||||||
<event name="OnAuiPaneRestore"></event>
|
|
||||||
<event name="OnAuiRender"></event>
|
|
||||||
<event name="OnChar"></event>
|
|
||||||
<event name="OnClose"></event>
|
|
||||||
<event name="OnEnterWindow"></event>
|
|
||||||
<event name="OnEraseBackground"></event>
|
|
||||||
<event name="OnHibernate"></event>
|
|
||||||
<event name="OnIconize"></event>
|
|
||||||
<event name="OnIdle"></event>
|
|
||||||
<event name="OnInitDialog"></event>
|
|
||||||
<event name="OnKeyDown"></event>
|
|
||||||
<event name="OnKeyUp"></event>
|
|
||||||
<event name="OnKillFocus"></event>
|
|
||||||
<event name="OnLeaveWindow"></event>
|
|
||||||
<event name="OnLeftDClick"></event>
|
|
||||||
<event name="OnLeftDown"></event>
|
|
||||||
<event name="OnLeftUp"></event>
|
|
||||||
<event name="OnMiddleDClick"></event>
|
|
||||||
<event name="OnMiddleDown"></event>
|
|
||||||
<event name="OnMiddleUp"></event>
|
|
||||||
<event name="OnMotion"></event>
|
|
||||||
<event name="OnMouseEvents"></event>
|
|
||||||
<event name="OnMouseWheel"></event>
|
|
||||||
<event name="OnPaint"></event>
|
|
||||||
<event name="OnRightDClick"></event>
|
|
||||||
<event name="OnRightDown"></event>
|
|
||||||
<event name="OnRightUp"></event>
|
|
||||||
<event name="OnSetFocus"></event>
|
|
||||||
<event name="OnSize"></event>
|
|
||||||
<event name="OnUpdateUI"></event>
|
|
||||||
<object class="wxBoxSizer" expanded="1">
|
|
||||||
<property name="minimum_size"></property>
|
|
||||||
<property name="name">bSizerMain</property>
|
|
||||||
<property name="orient">wxVERTICAL</property>
|
|
||||||
<property name="permission">none</property>
|
|
||||||
<object class="sizeritem" expanded="1">
|
|
||||||
<property name="border">5</property>
|
|
||||||
<property name="flag">wxEXPAND</property>
|
|
||||||
<property name="proportion">1</property>
|
|
||||||
<object class="wxBoxSizer" expanded="1">
|
|
||||||
<property name="minimum_size"></property>
|
|
||||||
<property name="name">bSizerUpper</property>
|
|
||||||
<property name="orient">wxHORIZONTAL</property>
|
|
||||||
<property name="permission">none</property>
|
|
||||||
<object class="sizeritem" expanded="1">
|
|
||||||
<property name="border">5</property>
|
|
||||||
<property name="flag">wxEXPAND</property>
|
|
||||||
<property name="proportion">1</property>
|
|
||||||
<object class="wxBoxSizer" expanded="1">
|
|
||||||
<property name="minimum_size"></property>
|
|
||||||
<property name="name">bSizerLeft</property>
|
|
||||||
<property name="orient">wxVERTICAL</property>
|
|
||||||
<property name="permission">none</property>
|
|
||||||
<object class="sizeritem" expanded="1">
|
|
||||||
<property name="border">5</property>
|
|
||||||
<property name="flag">wxTOP|wxRIGHT|wxLEFT</property>
|
|
||||||
<property name="proportion">0</property>
|
|
||||||
<object class="wxStaticText" expanded="1">
|
|
||||||
<property name="BottomDockable">1</property>
|
|
||||||
<property name="LeftDockable">1</property>
|
|
||||||
<property name="RightDockable">1</property>
|
|
||||||
<property name="TopDockable">1</property>
|
|
||||||
<property name="aui_layer"></property>
|
|
||||||
<property name="aui_name"></property>
|
|
||||||
<property name="aui_position"></property>
|
|
||||||
<property name="aui_row"></property>
|
|
||||||
<property name="best_size"></property>
|
|
||||||
<property name="bg"></property>
|
|
||||||
<property name="caption"></property>
|
|
||||||
<property name="caption_visible">1</property>
|
|
||||||
<property name="center_pane">0</property>
|
|
||||||
<property name="close_button">1</property>
|
|
||||||
<property name="context_help"></property>
|
|
||||||
<property name="context_menu">1</property>
|
|
||||||
<property name="default_pane">0</property>
|
|
||||||
<property name="dock">Dock</property>
|
|
||||||
<property name="dock_fixed">0</property>
|
|
||||||
<property name="docking">Left</property>
|
|
||||||
<property name="enabled">1</property>
|
|
||||||
<property name="fg"></property>
|
|
||||||
<property name="floatable">1</property>
|
|
||||||
<property name="font"></property>
|
|
||||||
<property name="gripper">0</property>
|
|
||||||
<property name="hidden">0</property>
|
|
||||||
<property name="id">wxID_ANY</property>
|
|
||||||
<property name="label">Name:</property>
|
|
||||||
<property name="max_size"></property>
|
|
||||||
<property name="maximize_button">0</property>
|
|
||||||
<property name="maximum_size"></property>
|
|
||||||
<property name="min_size"></property>
|
|
||||||
<property name="minimize_button">0</property>
|
|
||||||
<property name="minimum_size"></property>
|
|
||||||
<property name="moveable">1</property>
|
|
||||||
<property name="name">m_staticTextName</property>
|
|
||||||
<property name="pane_border">1</property>
|
|
||||||
<property name="pane_position"></property>
|
|
||||||
<property name="pane_size"></property>
|
|
||||||
<property name="permission">protected</property>
|
|
||||||
<property name="pin_button">1</property>
|
|
||||||
<property name="pos"></property>
|
|
||||||
<property name="resize">Resizable</property>
|
|
||||||
<property name="show">1</property>
|
|
||||||
<property name="size"></property>
|
|
||||||
<property name="style"></property>
|
|
||||||
<property name="subclass"></property>
|
|
||||||
<property name="toolbar_pane">0</property>
|
|
||||||
<property name="tooltip"></property>
|
|
||||||
<property name="window_extra_style"></property>
|
|
||||||
<property name="window_name"></property>
|
|
||||||
<property name="window_style"></property>
|
|
||||||
<property name="wrap">-1</property>
|
|
||||||
<event name="OnChar"></event>
|
|
||||||
<event name="OnEnterWindow"></event>
|
|
||||||
<event name="OnEraseBackground"></event>
|
|
||||||
<event name="OnKeyDown"></event>
|
|
||||||
<event name="OnKeyUp"></event>
|
|
||||||
<event name="OnKillFocus"></event>
|
|
||||||
<event name="OnLeaveWindow"></event>
|
|
||||||
<event name="OnLeftDClick"></event>
|
|
||||||
<event name="OnLeftDown"></event>
|
|
||||||
<event name="OnLeftUp"></event>
|
|
||||||
<event name="OnMiddleDClick"></event>
|
|
||||||
<event name="OnMiddleDown"></event>
|
|
||||||
<event name="OnMiddleUp"></event>
|
|
||||||
<event name="OnMotion"></event>
|
|
||||||
<event name="OnMouseEvents"></event>
|
|
||||||
<event name="OnMouseWheel"></event>
|
|
||||||
<event name="OnPaint"></event>
|
|
||||||
<event name="OnRightDClick"></event>
|
|
||||||
<event name="OnRightDown"></event>
|
|
||||||
<event name="OnRightUp"></event>
|
|
||||||
<event name="OnSetFocus"></event>
|
|
||||||
<event name="OnSize"></event>
|
|
||||||
<event name="OnUpdateUI"></event>
|
|
||||||
</object>
|
|
||||||
</object>
|
|
||||||
<object class="sizeritem" expanded="1">
|
|
||||||
<property name="border">5</property>
|
|
||||||
<property name="flag">wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT</property>
|
|
||||||
<property name="proportion">0</property>
|
|
||||||
<object class="wxTextCtrl" expanded="1">
|
|
||||||
<property name="BottomDockable">1</property>
|
|
||||||
<property name="LeftDockable">1</property>
|
|
||||||
<property name="RightDockable">1</property>
|
|
||||||
<property name="TopDockable">1</property>
|
|
||||||
<property name="aui_layer"></property>
|
|
||||||
<property name="aui_name"></property>
|
|
||||||
<property name="aui_position"></property>
|
|
||||||
<property name="aui_row"></property>
|
|
||||||
<property name="best_size"></property>
|
|
||||||
<property name="bg"></property>
|
|
||||||
<property name="caption"></property>
|
|
||||||
<property name="caption_visible">1</property>
|
|
||||||
<property name="center_pane">0</property>
|
|
||||||
<property name="close_button">1</property>
|
|
||||||
<property name="context_help"></property>
|
|
||||||
<property name="context_menu">1</property>
|
|
||||||
<property name="default_pane">0</property>
|
|
||||||
<property name="dock">Dock</property>
|
|
||||||
<property name="dock_fixed">0</property>
|
|
||||||
<property name="docking">Left</property>
|
|
||||||
<property name="enabled">1</property>
|
|
||||||
<property name="fg"></property>
|
|
||||||
<property name="floatable">1</property>
|
|
||||||
<property name="font"></property>
|
|
||||||
<property name="gripper">0</property>
|
|
||||||
<property name="hidden">0</property>
|
|
||||||
<property name="id">wxID_ANY</property>
|
|
||||||
<property name="max_size"></property>
|
|
||||||
<property name="maximize_button">0</property>
|
|
||||||
<property name="maximum_size"></property>
|
|
||||||
<property name="maxlength">0</property>
|
|
||||||
<property name="min_size"></property>
|
|
||||||
<property name="minimize_button">0</property>
|
|
||||||
<property name="minimum_size"></property>
|
|
||||||
<property name="moveable">1</property>
|
|
||||||
<property name="name">m_textCmpNameCtrl</property>
|
|
||||||
<property name="pane_border">1</property>
|
|
||||||
<property name="pane_position"></property>
|
|
||||||
<property name="pane_size"></property>
|
|
||||||
<property name="permission">protected</property>
|
|
||||||
<property name="pin_button">1</property>
|
|
||||||
<property name="pos"></property>
|
|
||||||
<property name="resize">Resizable</property>
|
|
||||||
<property name="show">1</property>
|
|
||||||
<property name="size"></property>
|
|
||||||
<property name="style"></property>
|
|
||||||
<property name="subclass"></property>
|
|
||||||
<property name="toolbar_pane">0</property>
|
|
||||||
<property name="tooltip"></property>
|
|
||||||
<property name="validator_data_type"></property>
|
|
||||||
<property name="validator_style">wxFILTER_NONE</property>
|
|
||||||
<property name="validator_type">wxDefaultValidator</property>
|
|
||||||
<property name="validator_variable"></property>
|
|
||||||
<property name="value"></property>
|
|
||||||
<property name="window_extra_style"></property>
|
|
||||||
<property name="window_name"></property>
|
|
||||||
<property name="window_style"></property>
|
|
||||||
<event name="OnChar"></event>
|
|
||||||
<event name="OnEnterWindow"></event>
|
|
||||||
<event name="OnEraseBackground"></event>
|
|
||||||
<event name="OnKeyDown"></event>
|
|
||||||
<event name="OnKeyUp"></event>
|
|
||||||
<event name="OnKillFocus"></event>
|
|
||||||
<event name="OnLeaveWindow"></event>
|
|
||||||
<event name="OnLeftDClick"></event>
|
|
||||||
<event name="OnLeftDown"></event>
|
|
||||||
<event name="OnLeftUp"></event>
|
|
||||||
<event name="OnMiddleDClick"></event>
|
|
||||||
<event name="OnMiddleDown"></event>
|
|
||||||
<event name="OnMiddleUp"></event>
|
|
||||||
<event name="OnMotion"></event>
|
|
||||||
<event name="OnMouseEvents"></event>
|
|
||||||
<event name="OnMouseWheel"></event>
|
|
||||||
<event name="OnPaint"></event>
|
|
||||||
<event name="OnRightDClick"></event>
|
|
||||||
<event name="OnRightDown"></event>
|
|
||||||
<event name="OnRightUp"></event>
|
|
||||||
<event name="OnSetFocus"></event>
|
|
||||||
<event name="OnSize"></event>
|
|
||||||
<event name="OnText"></event>
|
|
||||||
<event name="OnTextEnter"></event>
|
|
||||||
<event name="OnTextMaxLen"></event>
|
|
||||||
<event name="OnTextURL"></event>
|
|
||||||
<event name="OnUpdateUI"></event>
|
|
||||||
</object>
|
|
||||||
</object>
|
|
||||||
<object class="sizeritem" expanded="1">
|
|
||||||
<property name="border">5</property>
|
|
||||||
<property name="flag">wxTOP|wxRIGHT|wxLEFT</property>
|
|
||||||
<property name="proportion">0</property>
|
|
||||||
<object class="wxStaticText" expanded="1">
|
|
||||||
<property name="BottomDockable">1</property>
|
|
||||||
<property name="LeftDockable">1</property>
|
|
||||||
<property name="RightDockable">1</property>
|
|
||||||
<property name="TopDockable">1</property>
|
|
||||||
<property name="aui_layer"></property>
|
|
||||||
<property name="aui_name"></property>
|
|
||||||
<property name="aui_position"></property>
|
|
||||||
<property name="aui_row"></property>
|
|
||||||
<property name="best_size"></property>
|
|
||||||
<property name="bg"></property>
|
|
||||||
<property name="caption"></property>
|
|
||||||
<property name="caption_visible">1</property>
|
|
||||||
<property name="center_pane">0</property>
|
|
||||||
<property name="close_button">1</property>
|
|
||||||
<property name="context_help"></property>
|
|
||||||
<property name="context_menu">1</property>
|
|
||||||
<property name="default_pane">0</property>
|
|
||||||
<property name="dock">Dock</property>
|
|
||||||
<property name="dock_fixed">0</property>
|
|
||||||
<property name="docking">Left</property>
|
|
||||||
<property name="enabled">1</property>
|
|
||||||
<property name="fg"></property>
|
|
||||||
<property name="floatable">1</property>
|
|
||||||
<property name="font"></property>
|
|
||||||
<property name="gripper">0</property>
|
|
||||||
<property name="hidden">0</property>
|
|
||||||
<property name="id">wxID_ANY</property>
|
|
||||||
<property name="label">History list:</property>
|
|
||||||
<property name="max_size"></property>
|
|
||||||
<property name="maximize_button">0</property>
|
|
||||||
<property name="maximum_size"></property>
|
|
||||||
<property name="min_size"></property>
|
|
||||||
<property name="minimize_button">0</property>
|
|
||||||
<property name="minimum_size"></property>
|
|
||||||
<property name="moveable">1</property>
|
|
||||||
<property name="name">m_staticTextHistory</property>
|
|
||||||
<property name="pane_border">1</property>
|
|
||||||
<property name="pane_position"></property>
|
|
||||||
<property name="pane_size"></property>
|
|
||||||
<property name="permission">protected</property>
|
|
||||||
<property name="pin_button">1</property>
|
|
||||||
<property name="pos"></property>
|
|
||||||
<property name="resize">Resizable</property>
|
|
||||||
<property name="show">1</property>
|
|
||||||
<property name="size"></property>
|
|
||||||
<property name="style"></property>
|
|
||||||
<property name="subclass"></property>
|
|
||||||
<property name="toolbar_pane">0</property>
|
|
||||||
<property name="tooltip"></property>
|
|
||||||
<property name="window_extra_style"></property>
|
|
||||||
<property name="window_name"></property>
|
|
||||||
<property name="window_style"></property>
|
|
||||||
<property name="wrap">-1</property>
|
|
||||||
<event name="OnChar"></event>
|
|
||||||
<event name="OnEnterWindow"></event>
|
|
||||||
<event name="OnEraseBackground"></event>
|
|
||||||
<event name="OnKeyDown"></event>
|
|
||||||
<event name="OnKeyUp"></event>
|
|
||||||
<event name="OnKillFocus"></event>
|
|
||||||
<event name="OnLeaveWindow"></event>
|
|
||||||
<event name="OnLeftDClick"></event>
|
|
||||||
<event name="OnLeftDown"></event>
|
|
||||||
<event name="OnLeftUp"></event>
|
|
||||||
<event name="OnMiddleDClick"></event>
|
|
||||||
<event name="OnMiddleDown"></event>
|
|
||||||
<event name="OnMiddleUp"></event>
|
|
||||||
<event name="OnMotion"></event>
|
|
||||||
<event name="OnMouseEvents"></event>
|
|
||||||
<event name="OnMouseWheel"></event>
|
|
||||||
<event name="OnPaint"></event>
|
|
||||||
<event name="OnRightDClick"></event>
|
|
||||||
<event name="OnRightDown"></event>
|
|
||||||
<event name="OnRightUp"></event>
|
|
||||||
<event name="OnSetFocus"></event>
|
|
||||||
<event name="OnSize"></event>
|
|
||||||
<event name="OnUpdateUI"></event>
|
|
||||||
</object>
|
|
||||||
</object>
|
|
||||||
<object class="sizeritem" expanded="1">
|
|
||||||
<property name="border">5</property>
|
|
||||||
<property name="flag">wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT</property>
|
|
||||||
<property name="proportion">1</property>
|
|
||||||
<object class="wxListBox" expanded="1">
|
|
||||||
<property name="BottomDockable">1</property>
|
|
||||||
<property name="LeftDockable">1</property>
|
|
||||||
<property name="RightDockable">1</property>
|
|
||||||
<property name="TopDockable">1</property>
|
|
||||||
<property name="aui_layer"></property>
|
|
||||||
<property name="aui_name"></property>
|
|
||||||
<property name="aui_position"></property>
|
|
||||||
<property name="aui_row"></property>
|
|
||||||
<property name="best_size"></property>
|
|
||||||
<property name="bg"></property>
|
|
||||||
<property name="caption"></property>
|
|
||||||
<property name="caption_visible">1</property>
|
|
||||||
<property name="center_pane">0</property>
|
|
||||||
<property name="choices"></property>
|
|
||||||
<property name="close_button">1</property>
|
|
||||||
<property name="context_help"></property>
|
|
||||||
<property name="context_menu">1</property>
|
|
||||||
<property name="default_pane">0</property>
|
|
||||||
<property name="dock">Dock</property>
|
|
||||||
<property name="dock_fixed">0</property>
|
|
||||||
<property name="docking">Left</property>
|
|
||||||
<property name="enabled">1</property>
|
|
||||||
<property name="fg"></property>
|
|
||||||
<property name="floatable">1</property>
|
|
||||||
<property name="font"></property>
|
|
||||||
<property name="gripper">0</property>
|
|
||||||
<property name="hidden">0</property>
|
|
||||||
<property name="id">ID_SEL_BY_LISTBOX</property>
|
|
||||||
<property name="max_size"></property>
|
|
||||||
<property name="maximize_button">0</property>
|
|
||||||
<property name="maximum_size"></property>
|
|
||||||
<property name="min_size"></property>
|
|
||||||
<property name="minimize_button">0</property>
|
|
||||||
<property name="minimum_size">200,100</property>
|
|
||||||
<property name="moveable">1</property>
|
|
||||||
<property name="name">m_historyList</property>
|
|
||||||
<property name="pane_border">1</property>
|
|
||||||
<property name="pane_position"></property>
|
|
||||||
<property name="pane_size"></property>
|
|
||||||
<property name="permission">protected</property>
|
|
||||||
<property name="pin_button">1</property>
|
|
||||||
<property name="pos"></property>
|
|
||||||
<property name="resize">Resizable</property>
|
|
||||||
<property name="show">1</property>
|
|
||||||
<property name="size"></property>
|
|
||||||
<property name="style"></property>
|
|
||||||
<property name="subclass"></property>
|
|
||||||
<property name="toolbar_pane">0</property>
|
|
||||||
<property name="tooltip"></property>
|
|
||||||
<property name="validator_data_type"></property>
|
|
||||||
<property name="validator_style">wxFILTER_NONE</property>
|
|
||||||
<property name="validator_type">wxDefaultValidator</property>
|
|
||||||
<property name="validator_variable"></property>
|
|
||||||
<property name="window_extra_style"></property>
|
|
||||||
<property name="window_name"></property>
|
|
||||||
<property name="window_style"></property>
|
|
||||||
<event name="OnChar"></event>
|
|
||||||
<event name="OnEnterWindow"></event>
|
|
||||||
<event name="OnEraseBackground"></event>
|
|
||||||
<event name="OnKeyDown"></event>
|
|
||||||
<event name="OnKeyUp"></event>
|
|
||||||
<event name="OnKillFocus"></event>
|
|
||||||
<event name="OnLeaveWindow"></event>
|
|
||||||
<event name="OnLeftDClick"></event>
|
|
||||||
<event name="OnLeftDown"></event>
|
|
||||||
<event name="OnLeftUp"></event>
|
|
||||||
<event name="OnListBox">OnHistoryClick</event>
|
|
||||||
<event name="OnListBoxDClick">Accept</event>
|
|
||||||
<event name="OnMiddleDClick"></event>
|
|
||||||
<event name="OnMiddleDown"></event>
|
|
||||||
<event name="OnMiddleUp"></event>
|
|
||||||
<event name="OnMotion"></event>
|
|
||||||
<event name="OnMouseEvents"></event>
|
|
||||||
<event name="OnMouseWheel"></event>
|
|
||||||
<event name="OnPaint"></event>
|
|
||||||
<event name="OnRightDClick"></event>
|
|
||||||
<event name="OnRightDown"></event>
|
|
||||||
<event name="OnRightUp"></event>
|
|
||||||
<event name="OnSetFocus"></event>
|
|
||||||
<event name="OnSize"></event>
|
|
||||||
<event name="OnUpdateUI"></event>
|
|
||||||
</object>
|
|
||||||
</object>
|
|
||||||
</object>
|
|
||||||
</object>
|
|
||||||
<object class="sizeritem" expanded="1">
|
|
||||||
<property name="border">5</property>
|
|
||||||
<property name="flag">wxALIGN_CENTER_VERTICAL</property>
|
|
||||||
<property name="proportion">0</property>
|
|
||||||
<object class="wxBoxSizer" expanded="1">
|
|
||||||
<property name="minimum_size"></property>
|
|
||||||
<property name="name">bSizerRight</property>
|
|
||||||
<property name="orient">wxVERTICAL</property>
|
|
||||||
<property name="permission">none</property>
|
|
||||||
<object class="sizeritem" expanded="1">
|
|
||||||
<property name="border">5</property>
|
|
||||||
<property name="flag">wxALL|wxEXPAND</property>
|
|
||||||
<property name="proportion">0</property>
|
|
||||||
<object class="wxButton" expanded="1">
|
|
||||||
<property name="BottomDockable">1</property>
|
|
||||||
<property name="LeftDockable">1</property>
|
|
||||||
<property name="RightDockable">1</property>
|
|
||||||
<property name="TopDockable">1</property>
|
|
||||||
<property name="aui_layer"></property>
|
|
||||||
<property name="aui_name"></property>
|
|
||||||
<property name="aui_position"></property>
|
|
||||||
<property name="aui_row"></property>
|
|
||||||
<property name="best_size"></property>
|
|
||||||
<property name="bg"></property>
|
|
||||||
<property name="caption"></property>
|
|
||||||
<property name="caption_visible">1</property>
|
|
||||||
<property name="center_pane">0</property>
|
|
||||||
<property name="close_button">1</property>
|
|
||||||
<property name="context_help"></property>
|
|
||||||
<property name="context_menu">1</property>
|
|
||||||
<property name="default">0</property>
|
|
||||||
<property name="default_pane">0</property>
|
|
||||||
<property name="dock">Dock</property>
|
|
||||||
<property name="dock_fixed">0</property>
|
|
||||||
<property name="docking">Left</property>
|
|
||||||
<property name="enabled">1</property>
|
|
||||||
<property name="fg"></property>
|
|
||||||
<property name="floatable">1</property>
|
|
||||||
<property name="font"></property>
|
|
||||||
<property name="gripper">0</property>
|
|
||||||
<property name="hidden">0</property>
|
|
||||||
<property name="id">ID_ACCEPT_KEYWORD</property>
|
|
||||||
<property name="label">Search by Keyword</property>
|
|
||||||
<property name="max_size"></property>
|
|
||||||
<property name="maximize_button">0</property>
|
|
||||||
<property name="maximum_size"></property>
|
|
||||||
<property name="min_size"></property>
|
|
||||||
<property name="minimize_button">0</property>
|
|
||||||
<property name="minimum_size"></property>
|
|
||||||
<property name="moveable">1</property>
|
|
||||||
<property name="name">m_buttonKW</property>
|
|
||||||
<property name="pane_border">1</property>
|
|
||||||
<property name="pane_position"></property>
|
|
||||||
<property name="pane_size"></property>
|
|
||||||
<property name="permission">protected</property>
|
|
||||||
<property name="pin_button">1</property>
|
|
||||||
<property name="pos"></property>
|
|
||||||
<property name="resize">Resizable</property>
|
|
||||||
<property name="show">1</property>
|
|
||||||
<property name="size"></property>
|
|
||||||
<property name="style"></property>
|
|
||||||
<property name="subclass"></property>
|
|
||||||
<property name="toolbar_pane">0</property>
|
|
||||||
<property name="tooltip"></property>
|
|
||||||
<property name="validator_data_type"></property>
|
|
||||||
<property name="validator_style">wxFILTER_NONE</property>
|
|
||||||
<property name="validator_type">wxDefaultValidator</property>
|
|
||||||
<property name="validator_variable"></property>
|
|
||||||
<property name="window_extra_style"></property>
|
|
||||||
<property name="window_name"></property>
|
|
||||||
<property name="window_style"></property>
|
|
||||||
<event name="OnButtonClick">Accept</event>
|
|
||||||
<event name="OnChar"></event>
|
|
||||||
<event name="OnEnterWindow"></event>
|
|
||||||
<event name="OnEraseBackground"></event>
|
|
||||||
<event name="OnKeyDown"></event>
|
|
||||||
<event name="OnKeyUp"></event>
|
|
||||||
<event name="OnKillFocus"></event>
|
|
||||||
<event name="OnLeaveWindow"></event>
|
|
||||||
<event name="OnLeftDClick"></event>
|
|
||||||
<event name="OnLeftDown"></event>
|
|
||||||
<event name="OnLeftUp"></event>
|
|
||||||
<event name="OnMiddleDClick"></event>
|
|
||||||
<event name="OnMiddleDown"></event>
|
|
||||||
<event name="OnMiddleUp"></event>
|
|
||||||
<event name="OnMotion"></event>
|
|
||||||
<event name="OnMouseEvents"></event>
|
|
||||||
<event name="OnMouseWheel"></event>
|
|
||||||
<event name="OnPaint"></event>
|
|
||||||
<event name="OnRightDClick"></event>
|
|
||||||
<event name="OnRightDown"></event>
|
|
||||||
<event name="OnRightUp"></event>
|
|
||||||
<event name="OnSetFocus"></event>
|
|
||||||
<event name="OnSize"></event>
|
|
||||||
<event name="OnUpdateUI"></event>
|
|
||||||
</object>
|
|
||||||
</object>
|
|
||||||
<object class="sizeritem" expanded="1">
|
|
||||||
<property name="border">5</property>
|
|
||||||
<property name="flag">wxALL|wxEXPAND</property>
|
|
||||||
<property name="proportion">0</property>
|
|
||||||
<object class="wxButton" expanded="1">
|
|
||||||
<property name="BottomDockable">1</property>
|
|
||||||
<property name="LeftDockable">1</property>
|
|
||||||
<property name="RightDockable">1</property>
|
|
||||||
<property name="TopDockable">1</property>
|
|
||||||
<property name="aui_layer"></property>
|
|
||||||
<property name="aui_name"></property>
|
|
||||||
<property name="aui_position"></property>
|
|
||||||
<property name="aui_row"></property>
|
|
||||||
<property name="best_size"></property>
|
|
||||||
<property name="bg"></property>
|
|
||||||
<property name="caption"></property>
|
|
||||||
<property name="caption_visible">1</property>
|
|
||||||
<property name="center_pane">0</property>
|
|
||||||
<property name="close_button">1</property>
|
|
||||||
<property name="context_help"></property>
|
|
||||||
<property name="context_menu">1</property>
|
|
||||||
<property name="default">0</property>
|
|
||||||
<property name="default_pane">0</property>
|
|
||||||
<property name="dock">Dock</property>
|
|
||||||
<property name="dock_fixed">0</property>
|
|
||||||
<property name="docking">Left</property>
|
|
||||||
<property name="enabled">1</property>
|
|
||||||
<property name="fg"></property>
|
|
||||||
<property name="floatable">1</property>
|
|
||||||
<property name="font"></property>
|
|
||||||
<property name="gripper">0</property>
|
|
||||||
<property name="hidden">0</property>
|
|
||||||
<property name="id">ID_LIST_ALL</property>
|
|
||||||
<property name="label">List All</property>
|
|
||||||
<property name="max_size"></property>
|
|
||||||
<property name="maximize_button">0</property>
|
|
||||||
<property name="maximum_size"></property>
|
|
||||||
<property name="min_size"></property>
|
|
||||||
<property name="minimize_button">0</property>
|
|
||||||
<property name="minimum_size"></property>
|
|
||||||
<property name="moveable">1</property>
|
|
||||||
<property name="name">m_buttonList</property>
|
|
||||||
<property name="pane_border">1</property>
|
|
||||||
<property name="pane_position"></property>
|
|
||||||
<property name="pane_size"></property>
|
|
||||||
<property name="permission">protected</property>
|
|
||||||
<property name="pin_button">1</property>
|
|
||||||
<property name="pos"></property>
|
|
||||||
<property name="resize">Resizable</property>
|
|
||||||
<property name="show">1</property>
|
|
||||||
<property name="size"></property>
|
|
||||||
<property name="style"></property>
|
|
||||||
<property name="subclass"></property>
|
|
||||||
<property name="toolbar_pane">0</property>
|
|
||||||
<property name="tooltip"></property>
|
|
||||||
<property name="validator_data_type"></property>
|
|
||||||
<property name="validator_style">wxFILTER_NONE</property>
|
|
||||||
<property name="validator_type">wxDefaultValidator</property>
|
|
||||||
<property name="validator_variable"></property>
|
|
||||||
<property name="window_extra_style"></property>
|
|
||||||
<property name="window_name"></property>
|
|
||||||
<property name="window_style"></property>
|
|
||||||
<event name="OnButtonClick">Accept</event>
|
|
||||||
<event name="OnChar"></event>
|
|
||||||
<event name="OnEnterWindow"></event>
|
|
||||||
<event name="OnEraseBackground"></event>
|
|
||||||
<event name="OnKeyDown"></event>
|
|
||||||
<event name="OnKeyUp"></event>
|
|
||||||
<event name="OnKillFocus"></event>
|
|
||||||
<event name="OnLeaveWindow"></event>
|
|
||||||
<event name="OnLeftDClick"></event>
|
|
||||||
<event name="OnLeftDown"></event>
|
|
||||||
<event name="OnLeftUp"></event>
|
|
||||||
<event name="OnMiddleDClick"></event>
|
|
||||||
<event name="OnMiddleDown"></event>
|
|
||||||
<event name="OnMiddleUp"></event>
|
|
||||||
<event name="OnMotion"></event>
|
|
||||||
<event name="OnMouseEvents"></event>
|
|
||||||
<event name="OnMouseWheel"></event>
|
|
||||||
<event name="OnPaint"></event>
|
|
||||||
<event name="OnRightDClick"></event>
|
|
||||||
<event name="OnRightDown"></event>
|
|
||||||
<event name="OnRightUp"></event>
|
|
||||||
<event name="OnSetFocus"></event>
|
|
||||||
<event name="OnSize"></event>
|
|
||||||
<event name="OnUpdateUI"></event>
|
|
||||||
</object>
|
|
||||||
</object>
|
|
||||||
<object class="sizeritem" expanded="1">
|
|
||||||
<property name="border">5</property>
|
|
||||||
<property name="flag">wxALL|wxEXPAND</property>
|
|
||||||
<property name="proportion">0</property>
|
|
||||||
<object class="wxButton" expanded="1">
|
|
||||||
<property name="BottomDockable">1</property>
|
|
||||||
<property name="LeftDockable">1</property>
|
|
||||||
<property name="RightDockable">1</property>
|
|
||||||
<property name="TopDockable">1</property>
|
|
||||||
<property name="aui_layer"></property>
|
|
||||||
<property name="aui_name"></property>
|
|
||||||
<property name="aui_position"></property>
|
|
||||||
<property name="aui_row"></property>
|
|
||||||
<property name="best_size"></property>
|
|
||||||
<property name="bg"></property>
|
|
||||||
<property name="caption"></property>
|
|
||||||
<property name="caption_visible">1</property>
|
|
||||||
<property name="center_pane">0</property>
|
|
||||||
<property name="close_button">1</property>
|
|
||||||
<property name="context_help"></property>
|
|
||||||
<property name="context_menu">1</property>
|
|
||||||
<property name="default">0</property>
|
|
||||||
<property name="default_pane">0</property>
|
|
||||||
<property name="dock">Dock</property>
|
|
||||||
<property name="dock_fixed">0</property>
|
|
||||||
<property name="docking">Left</property>
|
|
||||||
<property name="enabled">1</property>
|
|
||||||
<property name="fg"></property>
|
|
||||||
<property name="floatable">1</property>
|
|
||||||
<property name="font"></property>
|
|
||||||
<property name="gripper">0</property>
|
|
||||||
<property name="hidden">0</property>
|
|
||||||
<property name="id">ID_BROWSE</property>
|
|
||||||
<property name="label">Select by Browser</property>
|
|
||||||
<property name="max_size"></property>
|
|
||||||
<property name="maximize_button">0</property>
|
|
||||||
<property name="maximum_size"></property>
|
|
||||||
<property name="min_size"></property>
|
|
||||||
<property name="minimize_button">0</property>
|
|
||||||
<property name="minimum_size"></property>
|
|
||||||
<property name="moveable">1</property>
|
|
||||||
<property name="name">m_buttonBrowse</property>
|
|
||||||
<property name="pane_border">1</property>
|
|
||||||
<property name="pane_position"></property>
|
|
||||||
<property name="pane_size"></property>
|
|
||||||
<property name="permission">protected</property>
|
|
||||||
<property name="pin_button">1</property>
|
|
||||||
<property name="pos"></property>
|
|
||||||
<property name="resize">Resizable</property>
|
|
||||||
<property name="show">1</property>
|
|
||||||
<property name="size"></property>
|
|
||||||
<property name="style"></property>
|
|
||||||
<property name="subclass"></property>
|
|
||||||
<property name="toolbar_pane">0</property>
|
|
||||||
<property name="tooltip"></property>
|
|
||||||
<property name="validator_data_type"></property>
|
|
||||||
<property name="validator_style">wxFILTER_NONE</property>
|
|
||||||
<property name="validator_type">wxDefaultValidator</property>
|
|
||||||
<property name="validator_variable"></property>
|
|
||||||
<property name="window_extra_style"></property>
|
|
||||||
<property name="window_name"></property>
|
|
||||||
<property name="window_style"></property>
|
|
||||||
<event name="OnButtonClick">Accept</event>
|
|
||||||
<event name="OnChar"></event>
|
|
||||||
<event name="OnEnterWindow"></event>
|
|
||||||
<event name="OnEraseBackground"></event>
|
|
||||||
<event name="OnKeyDown"></event>
|
|
||||||
<event name="OnKeyUp"></event>
|
|
||||||
<event name="OnKillFocus"></event>
|
|
||||||
<event name="OnLeaveWindow"></event>
|
|
||||||
<event name="OnLeftDClick"></event>
|
|
||||||
<event name="OnLeftDown"></event>
|
|
||||||
<event name="OnLeftUp"></event>
|
|
||||||
<event name="OnMiddleDClick"></event>
|
|
||||||
<event name="OnMiddleDown"></event>
|
|
||||||
<event name="OnMiddleUp"></event>
|
|
||||||
<event name="OnMotion"></event>
|
|
||||||
<event name="OnMouseEvents"></event>
|
|
||||||
<event name="OnMouseWheel"></event>
|
|
||||||
<event name="OnPaint"></event>
|
|
||||||
<event name="OnRightDClick"></event>
|
|
||||||
<event name="OnRightDown"></event>
|
|
||||||
<event name="OnRightUp"></event>
|
|
||||||
<event name="OnSetFocus"></event>
|
|
||||||
<event name="OnSize"></event>
|
|
||||||
<event name="OnUpdateUI"></event>
|
|
||||||
</object>
|
|
||||||
</object>
|
|
||||||
</object>
|
|
||||||
</object>
|
|
||||||
</object>
|
|
||||||
</object>
|
|
||||||
<object class="sizeritem" expanded="1">
|
|
||||||
<property name="border">5</property>
|
|
||||||
<property name="flag">wxEXPAND|wxLEFT|wxRIGHT</property>
|
|
||||||
<property name="proportion">0</property>
|
|
||||||
<object class="wxStaticLine" expanded="1">
|
|
||||||
<property name="BottomDockable">1</property>
|
|
||||||
<property name="LeftDockable">1</property>
|
|
||||||
<property name="RightDockable">1</property>
|
|
||||||
<property name="TopDockable">1</property>
|
|
||||||
<property name="aui_layer"></property>
|
|
||||||
<property name="aui_name"></property>
|
|
||||||
<property name="aui_position"></property>
|
|
||||||
<property name="aui_row"></property>
|
|
||||||
<property name="best_size"></property>
|
|
||||||
<property name="bg"></property>
|
|
||||||
<property name="caption"></property>
|
|
||||||
<property name="caption_visible">1</property>
|
|
||||||
<property name="center_pane">0</property>
|
|
||||||
<property name="close_button">1</property>
|
|
||||||
<property name="context_help"></property>
|
|
||||||
<property name="context_menu">1</property>
|
|
||||||
<property name="default_pane">0</property>
|
|
||||||
<property name="dock">Dock</property>
|
|
||||||
<property name="dock_fixed">0</property>
|
|
||||||
<property name="docking">Left</property>
|
|
||||||
<property name="enabled">1</property>
|
|
||||||
<property name="fg"></property>
|
|
||||||
<property name="floatable">1</property>
|
|
||||||
<property name="font"></property>
|
|
||||||
<property name="gripper">0</property>
|
|
||||||
<property name="hidden">0</property>
|
|
||||||
<property name="id">wxID_ANY</property>
|
|
||||||
<property name="max_size"></property>
|
|
||||||
<property name="maximize_button">0</property>
|
|
||||||
<property name="maximum_size"></property>
|
|
||||||
<property name="min_size"></property>
|
|
||||||
<property name="minimize_button">0</property>
|
|
||||||
<property name="minimum_size"></property>
|
|
||||||
<property name="moveable">1</property>
|
|
||||||
<property name="name">m_staticline1</property>
|
|
||||||
<property name="pane_border">1</property>
|
|
||||||
<property name="pane_position"></property>
|
|
||||||
<property name="pane_size"></property>
|
|
||||||
<property name="permission">protected</property>
|
|
||||||
<property name="pin_button">1</property>
|
|
||||||
<property name="pos"></property>
|
|
||||||
<property name="resize">Resizable</property>
|
|
||||||
<property name="show">1</property>
|
|
||||||
<property name="size"></property>
|
|
||||||
<property name="style">wxLI_HORIZONTAL</property>
|
|
||||||
<property name="subclass"></property>
|
|
||||||
<property name="toolbar_pane">0</property>
|
|
||||||
<property name="tooltip"></property>
|
|
||||||
<property name="window_extra_style"></property>
|
|
||||||
<property name="window_name"></property>
|
|
||||||
<property name="window_style"></property>
|
|
||||||
<event name="OnChar"></event>
|
|
||||||
<event name="OnEnterWindow"></event>
|
|
||||||
<event name="OnEraseBackground"></event>
|
|
||||||
<event name="OnKeyDown"></event>
|
|
||||||
<event name="OnKeyUp"></event>
|
|
||||||
<event name="OnKillFocus"></event>
|
|
||||||
<event name="OnLeaveWindow"></event>
|
|
||||||
<event name="OnLeftDClick"></event>
|
|
||||||
<event name="OnLeftDown"></event>
|
|
||||||
<event name="OnLeftUp"></event>
|
|
||||||
<event name="OnMiddleDClick"></event>
|
|
||||||
<event name="OnMiddleDown"></event>
|
|
||||||
<event name="OnMiddleUp"></event>
|
|
||||||
<event name="OnMotion"></event>
|
|
||||||
<event name="OnMouseEvents"></event>
|
|
||||||
<event name="OnMouseWheel"></event>
|
|
||||||
<event name="OnPaint"></event>
|
|
||||||
<event name="OnRightDClick"></event>
|
|
||||||
<event name="OnRightDown"></event>
|
|
||||||
<event name="OnRightUp"></event>
|
|
||||||
<event name="OnSetFocus"></event>
|
|
||||||
<event name="OnSize"></event>
|
|
||||||
<event name="OnUpdateUI"></event>
|
|
||||||
</object>
|
|
||||||
</object>
|
|
||||||
<object class="sizeritem" expanded="1">
|
|
||||||
<property name="border">5</property>
|
|
||||||
<property name="flag">wxALL|wxEXPAND</property>
|
|
||||||
<property name="proportion">0</property>
|
|
||||||
<object class="wxStdDialogButtonSizer" expanded="1">
|
|
||||||
<property name="Apply">0</property>
|
|
||||||
<property name="Cancel">1</property>
|
|
||||||
<property name="ContextHelp">0</property>
|
|
||||||
<property name="Help">0</property>
|
|
||||||
<property name="No">0</property>
|
|
||||||
<property name="OK">1</property>
|
|
||||||
<property name="Save">0</property>
|
|
||||||
<property name="Yes">0</property>
|
|
||||||
<property name="minimum_size"></property>
|
|
||||||
<property name="name">m_sdbSizer</property>
|
|
||||||
<property name="permission">protected</property>
|
|
||||||
<event name="OnApplyButtonClick"></event>
|
|
||||||
<event name="OnCancelButtonClick"></event>
|
|
||||||
<event name="OnContextHelpButtonClick"></event>
|
|
||||||
<event name="OnHelpButtonClick"></event>
|
|
||||||
<event name="OnNoButtonClick"></event>
|
|
||||||
<event name="OnOKButtonClick">Accept</event>
|
|
||||||
<event name="OnSaveButtonClick"></event>
|
|
||||||
<event name="OnYesButtonClick"></event>
|
|
||||||
</object>
|
|
||||||
</object>
|
|
||||||
</object>
|
|
||||||
</object>
|
|
||||||
</object>
|
|
||||||
</wxFormBuilder_Project>
|
|
|
@ -1,67 +0,0 @@
|
||||||
///////////////////////////////////////////////////////////////////////////
|
|
||||||
// C++ code generated with wxFormBuilder (version Apr 20 2018)
|
|
||||||
// http://www.wxformbuilder.org/
|
|
||||||
//
|
|
||||||
// PLEASE DO *NOT* EDIT THIS FILE!
|
|
||||||
///////////////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
#ifndef __DIALOG_GET_FOOTPRINT_BASE_H__
|
|
||||||
#define __DIALOG_GET_FOOTPRINT_BASE_H__
|
|
||||||
|
|
||||||
#include <wx/artprov.h>
|
|
||||||
#include <wx/xrc/xmlres.h>
|
|
||||||
#include <wx/intl.h>
|
|
||||||
#include "dialog_shim.h"
|
|
||||||
#include <wx/string.h>
|
|
||||||
#include <wx/stattext.h>
|
|
||||||
#include <wx/gdicmn.h>
|
|
||||||
#include <wx/font.h>
|
|
||||||
#include <wx/colour.h>
|
|
||||||
#include <wx/settings.h>
|
|
||||||
#include <wx/textctrl.h>
|
|
||||||
#include <wx/listbox.h>
|
|
||||||
#include <wx/sizer.h>
|
|
||||||
#include <wx/button.h>
|
|
||||||
#include <wx/statline.h>
|
|
||||||
#include <wx/dialog.h>
|
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
#define ID_SEL_BY_LISTBOX 1000
|
|
||||||
#define ID_ACCEPT_KEYWORD 1001
|
|
||||||
#define ID_LIST_ALL 1002
|
|
||||||
#define ID_BROWSE 1003
|
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////
|
|
||||||
/// Class DIALOG_GET_FOOTPRINT_BASE
|
|
||||||
///////////////////////////////////////////////////////////////////////////////
|
|
||||||
class DIALOG_GET_FOOTPRINT_BASE : public DIALOG_SHIM
|
|
||||||
{
|
|
||||||
private:
|
|
||||||
|
|
||||||
protected:
|
|
||||||
wxStaticText* m_staticTextName;
|
|
||||||
wxTextCtrl* m_textCmpNameCtrl;
|
|
||||||
wxStaticText* m_staticTextHistory;
|
|
||||||
wxListBox* m_historyList;
|
|
||||||
wxButton* m_buttonKW;
|
|
||||||
wxButton* m_buttonList;
|
|
||||||
wxButton* m_buttonBrowse;
|
|
||||||
wxStaticLine* m_staticline1;
|
|
||||||
wxStdDialogButtonSizer* m_sdbSizer;
|
|
||||||
wxButton* m_sdbSizerOK;
|
|
||||||
wxButton* m_sdbSizerCancel;
|
|
||||||
|
|
||||||
// Virtual event handlers, overide them in your derived class
|
|
||||||
virtual void OnHistoryClick( wxCommandEvent& event ) { event.Skip(); }
|
|
||||||
virtual void Accept( wxCommandEvent& event ) { event.Skip(); }
|
|
||||||
|
|
||||||
|
|
||||||
public:
|
|
||||||
|
|
||||||
DIALOG_GET_FOOTPRINT_BASE( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Choose Footprint"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( -1,-1 ), long style = wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER );
|
|
||||||
~DIALOG_GET_FOOTPRINT_BASE();
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif //__DIALOG_GET_FOOTPRINT_BASE_H__
|
|
|
@ -316,7 +316,7 @@ public:
|
||||||
* @return a pointer to a module if this module is selected or NULL otherwise
|
* @return a pointer to a module if this module is selected or NULL otherwise
|
||||||
* @param aPcb = the board from modules can be loaded
|
* @param aPcb = the board from modules can be loaded
|
||||||
*/
|
*/
|
||||||
MODULE* SelectFootprint( BOARD* aPcb );
|
MODULE* SelectFootprintFromBoard( BOARD* aPcb );
|
||||||
|
|
||||||
// functions to edit footprint edges
|
// functions to edit footprint edges
|
||||||
|
|
||||||
|
|
|
@ -537,7 +537,7 @@ void FOOTPRINT_EDIT_FRAME::Process_Special_Functions( wxCommandEvent& event )
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
MODULE* module = LoadModuleFromLibrary( wxEmptyString );
|
MODULE* module = SelectFootprintFromLibTree( wxEmptyString );
|
||||||
|
|
||||||
if( !module )
|
if( !module )
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -785,7 +785,7 @@ void FOOTPRINT_VIEWER_FRAME::SelectCurrentFootprint( wxCommandEvent& event )
|
||||||
{
|
{
|
||||||
wxString curr_nickname = getCurNickname();
|
wxString curr_nickname = getCurNickname();
|
||||||
MODULE* oldmodule = GetBoard()->m_Modules;
|
MODULE* oldmodule = GetBoard()->m_Modules;
|
||||||
MODULE* module = LoadModuleFromLibrary( curr_nickname, false );
|
MODULE* module = SelectFootprintFromLibTree( curr_nickname, false );
|
||||||
|
|
||||||
if( module )
|
if( module )
|
||||||
{
|
{
|
||||||
|
|
|
@ -0,0 +1,75 @@
|
||||||
|
/*
|
||||||
|
* This program source code file is part of KiCad, a free EDA CAD application.
|
||||||
|
*
|
||||||
|
* Copyright (C) 2018 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 as published by the
|
||||||
|
* Free Software Foundation, either version 3 of the License, or (at your
|
||||||
|
* option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful, but
|
||||||
|
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
* General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License along
|
||||||
|
* with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <wx/tokenzr.h>
|
||||||
|
#include <wx/progdlg.h>
|
||||||
|
|
||||||
|
#include <eda_pattern_match.h>
|
||||||
|
#include <fp_lib_table.h>
|
||||||
|
#include <footprint_info.h>
|
||||||
|
#include <generate_footprint_info.h>
|
||||||
|
|
||||||
|
#include "fp_tree_model_adapter.h"
|
||||||
|
|
||||||
|
|
||||||
|
FP_TREE_MODEL_ADAPTER::PTR FP_TREE_MODEL_ADAPTER::Create( LIB_TABLE* aLibs )
|
||||||
|
{
|
||||||
|
return PTR( new FP_TREE_MODEL_ADAPTER( aLibs ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
FP_TREE_MODEL_ADAPTER::FP_TREE_MODEL_ADAPTER( LIB_TABLE* aLibs )
|
||||||
|
: m_libs( (FP_LIB_TABLE*) aLibs )
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
FP_TREE_MODEL_ADAPTER::~FP_TREE_MODEL_ADAPTER()
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
void FP_TREE_MODEL_ADAPTER::AddLibraries( FOOTPRINT_LIST* aFootprintInfoList )
|
||||||
|
{
|
||||||
|
// Note: FOOTPRINT_INFO list must be sorted!
|
||||||
|
|
||||||
|
wxString currentLib;
|
||||||
|
std::vector<LIB_TREE_ITEM*> footprints;
|
||||||
|
|
||||||
|
for( auto& footprint : aFootprintInfoList->GetList() )
|
||||||
|
{
|
||||||
|
if( footprint->GetNickname() != currentLib )
|
||||||
|
{
|
||||||
|
if( footprints.size() )
|
||||||
|
DoAddLibrary( currentLib, m_libs->GetDescription( currentLib ), footprints );
|
||||||
|
|
||||||
|
footprints.clear();
|
||||||
|
currentLib = footprint->GetNickname();
|
||||||
|
}
|
||||||
|
|
||||||
|
footprints.push_back( footprint.get() );
|
||||||
|
}
|
||||||
|
|
||||||
|
if( footprints.size() )
|
||||||
|
DoAddLibrary( currentLib, m_libs->GetDescription( currentLib ), footprints );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
wxString FP_TREE_MODEL_ADAPTER::GenerateInfo( LIB_ID const& aLibId, int aUnit )
|
||||||
|
{
|
||||||
|
return GenerateFootprintInfo( m_libs, aLibId );
|
||||||
|
}
|
|
@ -0,0 +1,61 @@
|
||||||
|
/*
|
||||||
|
* This program source code file is part of KiCad, a free EDA CAD application.
|
||||||
|
*
|
||||||
|
* Copyright (C) 2017 Chris Pavlina <pavlina.chris@gmail.com>
|
||||||
|
* Copyright (C) 2014 Henner Zeller <h.zeller@acm.org>
|
||||||
|
* Copyright (C) 2014-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 as published by the
|
||||||
|
* Free Software Foundation, either version 3 of the License, or (at your
|
||||||
|
* option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful, but
|
||||||
|
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
* General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License along
|
||||||
|
* with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef FP_TREE_MODEL_ADAPTER_H
|
||||||
|
#define FP_TREE_MODEL_ADAPTER_H
|
||||||
|
|
||||||
|
#include <lib_tree_model_adapter.h>
|
||||||
|
#include <footprint_info.h>
|
||||||
|
|
||||||
|
class LIB_TABLE;
|
||||||
|
class FP_LIB_TABLE;
|
||||||
|
|
||||||
|
class FP_TREE_MODEL_ADAPTER : public LIB_TREE_MODEL_ADAPTER
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
/**
|
||||||
|
* Destructor. Do NOT delete this class manually; it is reference-counted by wxObject.
|
||||||
|
*/
|
||||||
|
~FP_TREE_MODEL_ADAPTER();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Factory function: create a model adapter in a reference-counting container.
|
||||||
|
*
|
||||||
|
* @param aLibs library set from which parts will be loaded
|
||||||
|
*/
|
||||||
|
static PTR Create( LIB_TABLE* aLibs );
|
||||||
|
|
||||||
|
void AddLibraries( FOOTPRINT_LIST* aFootprintInfoList );
|
||||||
|
|
||||||
|
wxString GenerateInfo( LIB_ID const& aLibId, int aUnit ) override;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructor; takes a set of libraries to be included in the search.
|
||||||
|
*/
|
||||||
|
FP_TREE_MODEL_ADAPTER( LIB_TABLE* aLibs );
|
||||||
|
|
||||||
|
private:
|
||||||
|
FP_LIB_TABLE* m_libs;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // FP_TREE_MODEL_ADAPTER_H
|
|
@ -0,0 +1,141 @@
|
||||||
|
/*
|
||||||
|
* This program source code file is part of KiCad, a free EDA CAD application.
|
||||||
|
*
|
||||||
|
* Copyright (C) 2017 Chris Pavlina <pavlina.chris@gmail.com>
|
||||||
|
* Copyright (C) 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 as published by the
|
||||||
|
* Free Software Foundation, either version 3 of the License, or (at your
|
||||||
|
* option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful, but
|
||||||
|
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
* General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License along
|
||||||
|
* with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <generate_footprint_info.h>
|
||||||
|
#include <kicad_string.h>
|
||||||
|
#include <class_module.h>
|
||||||
|
#include <fp_lib_table.h>
|
||||||
|
|
||||||
|
|
||||||
|
static const wxString DescriptionFormat =
|
||||||
|
"<b>__NAME__</b>"
|
||||||
|
"<br>__DESC__"
|
||||||
|
"<hr><table border=0>"
|
||||||
|
"__FIELDS__"
|
||||||
|
"</table>";
|
||||||
|
|
||||||
|
static const wxString KeywordsFormat =
|
||||||
|
"<tr>"
|
||||||
|
" <td><b>" + _( "Keywords" ) + "</b></td>"
|
||||||
|
" <td>__KEYWORDS__</td>"
|
||||||
|
"</tr>";
|
||||||
|
|
||||||
|
static const wxString DocFormat =
|
||||||
|
"<tr>"
|
||||||
|
" <td><b>" + _( "Documentation" ) + "</b></td>"
|
||||||
|
" <td><a href=\"__HREF__\">__TEXT__</a></td>"
|
||||||
|
"</tr>";
|
||||||
|
|
||||||
|
|
||||||
|
class FOOTPRINT_INFO_GENERATOR
|
||||||
|
{
|
||||||
|
wxString m_html;
|
||||||
|
FP_LIB_TABLE* m_fp_lib_table;
|
||||||
|
LIB_ID const m_lib_id;
|
||||||
|
MODULE* m_module;
|
||||||
|
|
||||||
|
public:
|
||||||
|
FOOTPRINT_INFO_GENERATOR( FP_LIB_TABLE* aFpLibTable, LIB_ID const& aLibId )
|
||||||
|
: m_html( DescriptionFormat ),
|
||||||
|
m_fp_lib_table( aFpLibTable ),
|
||||||
|
m_lib_id( aLibId ),
|
||||||
|
m_module( nullptr )
|
||||||
|
{ }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Generate the HTML internally.
|
||||||
|
*/
|
||||||
|
void GenerateHtml()
|
||||||
|
{
|
||||||
|
wxCHECK_RET( m_fp_lib_table, "Footprint library table pointer is not valid" );
|
||||||
|
|
||||||
|
if( !m_lib_id.IsValid() )
|
||||||
|
return;
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
m_module = m_fp_lib_table->FootprintLoad( m_lib_id.GetLibNickname(),
|
||||||
|
m_lib_id.GetLibItemName() );
|
||||||
|
}
|
||||||
|
catch( const IO_ERROR& ioe )
|
||||||
|
{
|
||||||
|
wxLogError( wxString::Format( _( "Error loading footprint %s from library %s.\n\n%s" ),
|
||||||
|
m_lib_id.GetLibItemName().wx_str(),
|
||||||
|
m_lib_id.GetLibNickname().wx_str(),
|
||||||
|
ioe.What() ) );
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if( m_module )
|
||||||
|
{
|
||||||
|
wxString name = m_lib_id.GetLibItemName();
|
||||||
|
wxString desc = m_module->GetDescription();
|
||||||
|
wxString keywords = m_module->GetKeywords();
|
||||||
|
wxString doc;
|
||||||
|
|
||||||
|
// It is currently common practice to store a documentation link in the description.
|
||||||
|
int idx = desc.find( wxT( "http:" ) );
|
||||||
|
|
||||||
|
if( idx >= 0 )
|
||||||
|
{
|
||||||
|
doc = desc.substr( (unsigned) idx );
|
||||||
|
|
||||||
|
desc = desc.substr( 0, (unsigned) idx );
|
||||||
|
desc = desc.Trim( true );
|
||||||
|
|
||||||
|
if( desc.Last() == ',' )
|
||||||
|
desc.RemoveLast( 1 );
|
||||||
|
}
|
||||||
|
|
||||||
|
m_html.Replace( "__NAME__", EscapedHTML( name ) );
|
||||||
|
m_html.Replace( "__DESC__", EscapedHTML( desc ) );
|
||||||
|
|
||||||
|
wxString keywordsHtml = KeywordsFormat;
|
||||||
|
keywordsHtml.Replace( "__KEYWORDS__", EscapedHTML( keywords ) );
|
||||||
|
|
||||||
|
wxString docHtml = DocFormat;
|
||||||
|
docHtml.Replace( "__HREF__", EscapedHTML( doc ) );
|
||||||
|
|
||||||
|
if( doc.Length() > 75 )
|
||||||
|
doc = doc.Left( 72 ) + wxT( "..." );
|
||||||
|
|
||||||
|
docHtml.Replace( "__TEXT__", EscapedHTML( doc ) );
|
||||||
|
|
||||||
|
m_html.Replace( "__FIELDS__", keywordsHtml + docHtml );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return the generated HTML.
|
||||||
|
*/
|
||||||
|
wxString GetHtml()
|
||||||
|
{
|
||||||
|
return m_html;
|
||||||
|
}
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
wxString GenerateFootprintInfo( FP_LIB_TABLE* aSymLibTable, LIB_ID const& aLibId )
|
||||||
|
{
|
||||||
|
FOOTPRINT_INFO_GENERATOR gen( aSymLibTable, aLibId );
|
||||||
|
gen.GenerateHtml();
|
||||||
|
return gen.GetHtml();
|
||||||
|
}
|
|
@ -0,0 +1,35 @@
|
||||||
|
/*
|
||||||
|
* This program source code file is part of KiCad, a free EDA CAD application.
|
||||||
|
*
|
||||||
|
* Copyright (C) 2017 Chris Pavlina <pavlina.chris@gmail.com>
|
||||||
|
* Copyright (C) 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 as published by the
|
||||||
|
* Free Software Foundation, either version 3 of the License, or (at your
|
||||||
|
* option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful, but
|
||||||
|
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
* General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License along
|
||||||
|
* with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef GENERATE_FOOTPRINT_INFO_H
|
||||||
|
#define GENERATE_FOOTPRINT_INFO_H
|
||||||
|
|
||||||
|
#include <wx/string.h>
|
||||||
|
|
||||||
|
class LIB_ID;
|
||||||
|
class FP_LIB_TABLE;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return an HTML page describing a #LIB_ID in a #FP_LIB_TABLE. This is suitable for inclusion
|
||||||
|
* in a wxHtmlWindow.
|
||||||
|
*/
|
||||||
|
wxString GenerateFootprintInfo( FP_LIB_TABLE* aFpLibTable, LIB_ID const& aLibId );
|
||||||
|
|
||||||
|
#endif // GENERATE_FOOTPRINT_INFO_H
|
|
@ -55,17 +55,33 @@ using namespace std::placeholders;
|
||||||
#include <footprint_edit_frame.h>
|
#include <footprint_edit_frame.h>
|
||||||
#include <footprint_info.h>
|
#include <footprint_info.h>
|
||||||
#include <footprint_info_impl.h>
|
#include <footprint_info_impl.h>
|
||||||
#include <dialog_get_footprint.h>
|
#include <dialog_choose_footprint.h>
|
||||||
#include <footprint_viewer_frame.h>
|
#include <footprint_viewer_frame.h>
|
||||||
#include <wildcards_and_files_ext.h>
|
#include <wildcards_and_files_ext.h>
|
||||||
#include <widgets/progress_reporter.h>
|
#include <widgets/progress_reporter.h>
|
||||||
|
#include "fp_tree_model_adapter.h"
|
||||||
|
|
||||||
|
|
||||||
static void DisplayCmpDoc( wxString& aName, void* aData );
|
static wxArrayString s_ModuleHistoryList;
|
||||||
|
static unsigned s_ModuleHistoryMaxCount = 8;
|
||||||
|
|
||||||
|
static void AddModuleToHistory( const wxString& aName )
|
||||||
|
{
|
||||||
|
// Remove duplicates
|
||||||
|
for( int ii = s_ModuleHistoryList.GetCount() - 1; ii >= 0; --ii )
|
||||||
|
{
|
||||||
|
if( s_ModuleHistoryList[ ii ] == aName )
|
||||||
|
s_ModuleHistoryList.RemoveAt( (size_t) ii );
|
||||||
|
}
|
||||||
|
|
||||||
|
// Add the new name at the beginning of the history list
|
||||||
|
s_ModuleHistoryList.Insert( aName, 0 );
|
||||||
|
|
||||||
|
// Remove extra names
|
||||||
|
while( s_ModuleHistoryList.GetCount() >= s_ModuleHistoryMaxCount )
|
||||||
|
s_ModuleHistoryList.RemoveAt( s_ModuleHistoryList.GetCount() - 1 );
|
||||||
|
}
|
||||||
|
|
||||||
// Use the _IMPL class directly here because this is static - don't want to yank
|
|
||||||
// a static through kiface.
|
|
||||||
static FOOTPRINT_LIST_IMPL MList;
|
|
||||||
|
|
||||||
static void clearModuleItemFlags( BOARD_ITEM* aItem )
|
static void clearModuleItemFlags( BOARD_ITEM* aItem )
|
||||||
{
|
{
|
||||||
|
@ -86,7 +102,7 @@ bool FOOTPRINT_EDIT_FRAME::Load_Module_From_BOARD( MODULE* aModule )
|
||||||
if( ! frame->GetBoard() || ! frame->GetBoard()->m_Modules )
|
if( ! frame->GetBoard() || ! frame->GetBoard()->m_Modules )
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
aModule = SelectFootprint( frame->GetBoard() );
|
aModule = SelectFootprintFromBoard( frame->GetBoard());
|
||||||
}
|
}
|
||||||
|
|
||||||
if( aModule == NULL )
|
if( aModule == NULL )
|
||||||
|
@ -101,8 +117,6 @@ bool FOOTPRINT_EDIT_FRAME::Load_Module_From_BOARD( MODULE* aModule )
|
||||||
newModule->SetParent( GetBoard() );
|
newModule->SetParent( GetBoard() );
|
||||||
newModule->SetLink( aModule->GetTimeStamp() );
|
newModule->SetLink( aModule->GetTimeStamp() );
|
||||||
|
|
||||||
aModule = newModule;
|
|
||||||
|
|
||||||
newModule->ClearFlags();
|
newModule->ClearFlags();
|
||||||
newModule->RunOnChildren( std::bind( &clearModuleItemFlags, _1 ) );
|
newModule->RunOnChildren( std::bind( &clearModuleItemFlags, _1 ) );
|
||||||
|
|
||||||
|
@ -169,130 +183,82 @@ wxString PCB_BASE_FRAME::SelectFootprintFromLibBrowser()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
MODULE* PCB_BASE_FRAME::LoadModuleFromLibrary( const wxString& aLibrary, bool aUseFootprintViewer )
|
MODULE* PCB_BASE_FRAME::SelectFootprintFromLibTree( const wxString& aLibrary, bool aAllowBrowser )
|
||||||
{
|
{
|
||||||
FP_LIB_TABLE* fpTable = Prj().PcbFootprintLibs();
|
FP_LIB_TABLE* fpTable = Prj().PcbFootprintLibs();
|
||||||
|
wxString moduleName;
|
||||||
|
LIB_ID fpid;
|
||||||
MODULE* module = NULL;
|
MODULE* module = NULL;
|
||||||
wxString moduleName, keys;
|
|
||||||
const wxString& libName = aLibrary;
|
|
||||||
bool allowWildSeach = true;
|
|
||||||
|
|
||||||
static wxString lastComponentName;
|
static wxString lastComponentName;
|
||||||
|
|
||||||
// Ask for a component name or key words
|
WX_PROGRESS_REPORTER progressReporter( this, _( "Loading Footprint Libraries" ), 2 );
|
||||||
DIALOG_GET_FOOTPRINT dlg( this, aUseFootprintViewer );
|
GFootprintList.ReadFootprintFiles( fpTable, aLibrary.length() ? &aLibrary : NULL, &progressReporter );
|
||||||
|
progressReporter.Show( false );
|
||||||
|
|
||||||
dlg.SetComponentName( lastComponentName );
|
if( GFootprintList.GetErrorCount() )
|
||||||
|
GFootprintList.DisplayErrors( this );
|
||||||
|
|
||||||
if( dlg.ShowModal() == wxID_CANCEL )
|
auto adapterPtr( FP_TREE_MODEL_ADAPTER::Create( fpTable ) );
|
||||||
|
auto adapter = static_cast<FP_TREE_MODEL_ADAPTER*>( adapterPtr.get() );
|
||||||
|
|
||||||
|
if( !s_ModuleHistoryList.empty() )
|
||||||
|
{
|
||||||
|
std::vector<LIB_TREE_ITEM*> history_list;
|
||||||
|
|
||||||
|
for( auto const& item : s_ModuleHistoryList )
|
||||||
|
history_list.push_back( GFootprintList.GetModuleInfo( item ) );
|
||||||
|
|
||||||
|
adapter->DoAddLibrary( "-- " + _( "Recently Used" ) + " --", wxEmptyString, history_list );
|
||||||
|
adapter->SetPreselectNode( history_list[0]->GetLibId(), 0 );
|
||||||
|
}
|
||||||
|
|
||||||
|
adapter->AddLibraries( &GFootprintList );
|
||||||
|
|
||||||
|
wxString title;
|
||||||
|
title.Printf( _( "Choose Footprint (%d items loaded)" ), adapter->GetItemCount() );
|
||||||
|
|
||||||
|
DIALOG_CHOOSE_FOOTPRINT dialog( this, title, adapterPtr, aAllowBrowser );
|
||||||
|
|
||||||
|
if( dialog.ShowQuasiModal() == wxID_CANCEL )
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
if( dlg.SelectByBrowser() )
|
if( dialog.IsExternalBrowserSelected() )
|
||||||
{
|
{
|
||||||
// SelectFootprintFromLibBrowser() returns the "full" footprint name, i.e.
|
// SelectFootprintFromLibBrowser() returns the "full" footprint name, i.e.
|
||||||
// <lib_name>/<footprint name> or LIB_ID format "lib_name:fp_name:rev#"
|
// <lib_name>/<footprint name> or LIB_ID format "lib_name:fp_name:rev#"
|
||||||
moduleName = SelectFootprintFromLibBrowser();
|
moduleName = SelectFootprintFromLibBrowser();
|
||||||
|
|
||||||
|
if( moduleName.IsEmpty() ) // Cancel command
|
||||||
|
return NULL;
|
||||||
|
else
|
||||||
|
fpid.Parse( moduleName, LIB_ID::ID_PCB );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
moduleName = dlg.GetComponentName();
|
fpid = dialog.GetSelectedLibId();
|
||||||
|
|
||||||
|
if( !fpid.IsValid() )
|
||||||
|
return NULL;
|
||||||
|
else
|
||||||
|
moduleName = fpid.Format();
|
||||||
}
|
}
|
||||||
|
|
||||||
if( moduleName.IsEmpty() ) // Cancel command
|
|
||||||
{
|
|
||||||
m_canvas->MoveCursorToCrossHair();
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
if( dlg.IsKeyword() || moduleName.Contains( wxT( "?" ) ) || moduleName.Contains( wxT( "*" ) ) )
|
|
||||||
{
|
|
||||||
// While SelectFootprint() can load a library at a time (and stop when a match
|
|
||||||
// is found), the async loader gives much better feedback and loads the libraries
|
|
||||||
// in parallel.
|
|
||||||
// If the footprints are already in the cache, ReadFootprintFiles() will return
|
|
||||||
// immediately.
|
|
||||||
WX_PROGRESS_REPORTER progressReporter( this, _( "Loading Footprint Libraries" ), 2 );
|
|
||||||
MList.ReadFootprintFiles( fpTable, libName.length() ? &libName : NULL, &progressReporter );
|
|
||||||
progressReporter.Show( false );
|
|
||||||
|
|
||||||
if( MList.GetErrorCount() )
|
|
||||||
MList.DisplayErrors( this );
|
|
||||||
|
|
||||||
if( dlg.IsKeyword() ) // Selection by keywords
|
|
||||||
{
|
|
||||||
allowWildSeach = false;
|
|
||||||
keys = moduleName;
|
|
||||||
moduleName = SelectFootprint( this, libName, wxEmptyString, keys, fpTable );
|
|
||||||
|
|
||||||
if( moduleName.IsEmpty() ) // Cancel command
|
|
||||||
{
|
|
||||||
m_canvas->MoveCursorToCrossHair();
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else // Selection wild card
|
|
||||||
{
|
|
||||||
allowWildSeach = false;
|
|
||||||
moduleName = SelectFootprint( this, libName, moduleName, wxEmptyString, fpTable );
|
|
||||||
|
|
||||||
if( moduleName.IsEmpty() )
|
|
||||||
{
|
|
||||||
m_canvas->MoveCursorToCrossHair();
|
|
||||||
return NULL; // Cancel command.
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
LIB_ID fpid;
|
|
||||||
|
|
||||||
wxCHECK_MSG( fpid.Parse( moduleName, LIB_ID::ID_PCB ) < 0, NULL,
|
|
||||||
wxString::Format( wxT( "Could not parse LIB_ID \"%s\"." ), moduleName ) );
|
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
module = loadFootprint( fpid );
|
module = loadFootprint( fpid );
|
||||||
}
|
}
|
||||||
catch( const IO_ERROR& ioe )
|
catch( const IO_ERROR& ioe )
|
||||||
{
|
{
|
||||||
wxLogDebug( wxT( "An error occurred attemping to load footprint '%s'.\n\nError: %s" ),
|
wxLogDebug( wxT( "Error loading footprint '%s'.\n\nError: %s" ),
|
||||||
fpid.Format().c_str(), GetChars( ioe.What() ) );
|
fpid.Format().c_str(),
|
||||||
}
|
ioe.What() );
|
||||||
|
|
||||||
if( !module && allowWildSeach ) // Search with wild card
|
|
||||||
{
|
|
||||||
allowWildSeach = false;
|
|
||||||
|
|
||||||
wxString wildname = wxChar( '*' ) + moduleName + wxChar( '*' );
|
|
||||||
moduleName = wildname;
|
|
||||||
|
|
||||||
moduleName = SelectFootprint( this, libName, moduleName, wxEmptyString, fpTable );
|
|
||||||
|
|
||||||
if( moduleName.IsEmpty() )
|
|
||||||
{
|
|
||||||
m_canvas->MoveCursorToCrossHair();
|
|
||||||
return NULL; // Cancel command.
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
wxCHECK_MSG( fpid.Parse( moduleName, LIB_ID::ID_PCB ) < 0, NULL,
|
|
||||||
wxString::Format( wxT( "Could not parse LIB_ID \"%s\"." ), moduleName ) );
|
|
||||||
|
|
||||||
try
|
|
||||||
{
|
|
||||||
module = loadFootprint( fpid );
|
|
||||||
}
|
|
||||||
catch( const IO_ERROR& ioe )
|
|
||||||
{
|
|
||||||
wxLogDebug( wxT( "An error occurred attemping to load footprint '%s'.\n\nError: %s" ),
|
|
||||||
fpid.Format().c_str(), GetChars( ioe.What() ) );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if( module )
|
if( module )
|
||||||
{
|
{
|
||||||
lastComponentName = moduleName;
|
lastComponentName = moduleName;
|
||||||
AddHistoryComponentName( moduleName );
|
AddModuleToHistory( moduleName );
|
||||||
}
|
}
|
||||||
|
|
||||||
return module;
|
return module;
|
||||||
|
@ -352,26 +318,6 @@ MODULE* PCB_BASE_FRAME::LoadFootprint( const LIB_ID& aFootprintId )
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
bool PCB_BASE_FRAME::CheckFootprint( const LIB_ID& aFootprintId )
|
|
||||||
{
|
|
||||||
const wxString& libNickname = aFootprintId.GetLibNickname();
|
|
||||||
const wxString& fpName = aFootprintId.GetLibItemName();
|
|
||||||
FP_LIB_TABLE* fpTable = Prj().PcbFootprintLibs();
|
|
||||||
|
|
||||||
try
|
|
||||||
{
|
|
||||||
const FP_LIB_TABLE_ROW* fpTableRow = fpTable->FindRow( aFootprintId.GetLibNickname() );
|
|
||||||
|
|
||||||
if( fpTableRow && fpTableRow->GetIsEnabled() )
|
|
||||||
return fpTable->FootprintLoad( libNickname, fpName ) != nullptr;
|
|
||||||
}
|
|
||||||
catch( ... )
|
|
||||||
{ }
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
MODULE* PCB_BASE_FRAME::loadFootprint( const LIB_ID& aFootprintId )
|
MODULE* PCB_BASE_FRAME::loadFootprint( const LIB_ID& aFootprintId )
|
||||||
{
|
{
|
||||||
FP_LIB_TABLE* fptbl = Prj().PcbFootprintLibs();
|
FP_LIB_TABLE* fptbl = Prj().PcbFootprintLibs();
|
||||||
|
@ -400,131 +346,7 @@ MODULE* PCB_BASE_FRAME::loadFootprint( const LIB_ID& aFootprintId )
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
wxString PCB_BASE_FRAME::SelectFootprint( EDA_DRAW_FRAME* aWindow,
|
MODULE* FOOTPRINT_EDIT_FRAME::SelectFootprintFromBoard( BOARD* aPcb )
|
||||||
const wxString& aLibraryName,
|
|
||||||
const wxString& aMask,
|
|
||||||
const wxString& aKeyWord,
|
|
||||||
FP_LIB_TABLE* aTable )
|
|
||||||
{
|
|
||||||
static wxString oldName; // Save the name of the last module loaded.
|
|
||||||
|
|
||||||
wxString fpname;
|
|
||||||
wxString msg;
|
|
||||||
wxArrayString libraries;
|
|
||||||
|
|
||||||
std::vector< wxArrayString > rows;
|
|
||||||
|
|
||||||
wxASSERT( aTable != NULL );
|
|
||||||
|
|
||||||
MList.ReadFootprintFiles( aTable, !aLibraryName ? NULL : &aLibraryName );
|
|
||||||
|
|
||||||
if( MList.GetErrorCount() )
|
|
||||||
MList.DisplayErrors( this );
|
|
||||||
|
|
||||||
if( MList.GetCount() == 0 )
|
|
||||||
{
|
|
||||||
wxString tmp;
|
|
||||||
|
|
||||||
for( unsigned i = 0; i < libraries.GetCount(); i++ )
|
|
||||||
tmp += libraries[i] + wxT( "\n" );
|
|
||||||
|
|
||||||
msg.Printf( _( "No footprints could be read from library file(s):\n\n%s\nin any of "
|
|
||||||
"the library search paths. Verify your system is configured properly "
|
|
||||||
"so the footprint libraries can be found." ), GetChars( tmp ) );
|
|
||||||
DisplayError( aWindow, msg );
|
|
||||||
return wxEmptyString;
|
|
||||||
}
|
|
||||||
|
|
||||||
if( !aKeyWord.IsEmpty() ) // Create a list of modules found by keyword.
|
|
||||||
{
|
|
||||||
wxString keyword = aKeyWord.Upper();
|
|
||||||
|
|
||||||
for( unsigned ii = 0; ii < MList.GetCount(); ii++ )
|
|
||||||
{
|
|
||||||
if( KeywordMatch( keyword, MList.GetItem( ii ).GetKeywords().Upper() ) )
|
|
||||||
{
|
|
||||||
wxArrayString cols;
|
|
||||||
cols.Add( MList.GetItem( ii ).GetFootprintName() );
|
|
||||||
cols.Add( MList.GetItem( ii ).GetNickname() );
|
|
||||||
rows.push_back( cols );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if( !aMask.IsEmpty() ) // Create a list of modules found by pattern
|
|
||||||
{
|
|
||||||
for( unsigned ii = 0; ii < MList.GetCount(); ii++ )
|
|
||||||
{
|
|
||||||
const wxString& candidate = MList.GetItem( ii ).GetFootprintName();
|
|
||||||
|
|
||||||
if( WildCompareString( aMask, candidate, false ) )
|
|
||||||
{
|
|
||||||
wxArrayString cols;
|
|
||||||
cols.Add( MList.GetItem( ii ).GetFootprintName() );
|
|
||||||
cols.Add( MList.GetItem( ii ).GetNickname() );
|
|
||||||
rows.push_back( cols );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else // Create the full list of modules
|
|
||||||
{
|
|
||||||
for( unsigned ii = 0; ii < MList.GetCount(); ii++ )
|
|
||||||
{
|
|
||||||
wxArrayString cols;
|
|
||||||
cols.Add( MList.GetItem( ii ).GetFootprintName() );
|
|
||||||
cols.Add( MList.GetItem( ii ).GetNickname() );
|
|
||||||
rows.push_back( cols );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if( !rows.empty() )
|
|
||||||
{
|
|
||||||
wxArrayString headers;
|
|
||||||
|
|
||||||
headers.Add( _( "Footprint" ) );
|
|
||||||
headers.Add( _( "Library" ) );
|
|
||||||
|
|
||||||
msg.Printf( _( "Footprints [%d items]" ), (int) rows.size() );
|
|
||||||
|
|
||||||
EDA_LIST_DIALOG dlg( aWindow, msg, headers, rows, oldName, DisplayCmpDoc );
|
|
||||||
|
|
||||||
if( dlg.ShowModal() == wxID_OK )
|
|
||||||
{
|
|
||||||
if( !dlg.GetTextSelection( 0 ).IsEmpty() )
|
|
||||||
fpname = dlg.GetTextSelection( 1 ) + wxT( ":" ) + dlg.GetTextSelection( 0 );
|
|
||||||
|
|
||||||
SkipNextLeftButtonReleaseEvent();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
DisplayError( aWindow, _( "No footprint found." ) );
|
|
||||||
}
|
|
||||||
|
|
||||||
if( fpname != wxEmptyString )
|
|
||||||
oldName = fpname;
|
|
||||||
|
|
||||||
wxLogDebug( wxT( "Footprint '%s' was selected." ), GetChars( fpname ) );
|
|
||||||
|
|
||||||
return fpname;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
static void DisplayCmpDoc( wxString& aName, void* aData )
|
|
||||||
{
|
|
||||||
FOOTPRINT_INFO* module_info = MList.GetModuleInfo( aName );
|
|
||||||
|
|
||||||
if( !module_info )
|
|
||||||
{
|
|
||||||
aName.Empty();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
aName = _( "Description: " ) + module_info->GetDoc();
|
|
||||||
aName += _( "\nKey words: " ) + module_info->GetKeywords();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
MODULE* FOOTPRINT_EDIT_FRAME::SelectFootprint( BOARD* aPcb )
|
|
||||||
{
|
{
|
||||||
static wxString oldName; // Save name of last module selected.
|
static wxString oldName; // Save name of last module selected.
|
||||||
|
|
||||||
|
@ -576,7 +398,7 @@ MODULE* FOOTPRINT_EDIT_FRAME::SelectFootprint( BOARD* aPcb )
|
||||||
|
|
||||||
void FOOTPRINT_EDIT_FRAME::OnSaveLibraryAs( wxCommandEvent& aEvent )
|
void FOOTPRINT_EDIT_FRAME::OnSaveLibraryAs( wxCommandEvent& aEvent )
|
||||||
{
|
{
|
||||||
wxString curLibPath = getLibPath();
|
wxString curLibPath;
|
||||||
wxString dstLibPath = CreateNewLibrary();
|
wxString dstLibPath = CreateNewLibrary();
|
||||||
|
|
||||||
if( !dstLibPath )
|
if( !dstLibPath )
|
||||||
|
|
|
@ -368,7 +368,7 @@ void PCB_EDIT_FRAME::OnLeftClick( wxDC* aDC, const wxPoint& aPosition )
|
||||||
if( (curr_item == NULL) || (curr_item->GetFlags() == 0) )
|
if( (curr_item == NULL) || (curr_item->GetFlags() == 0) )
|
||||||
{
|
{
|
||||||
m_canvas->MoveCursorToCrossHair();
|
m_canvas->MoveCursorToCrossHair();
|
||||||
MODULE* module = LoadModuleFromLibrary( wxEmptyString, Prj().PcbFootprintLibs() );
|
MODULE* module = SelectFootprintFromLibTree( wxEmptyString, Prj().PcbFootprintLibs());
|
||||||
|
|
||||||
SetCurItem( (BOARD_ITEM*) module );
|
SetCurItem( (BOARD_ITEM*) module );
|
||||||
|
|
||||||
|
|
|
@ -467,7 +467,7 @@ int PCB_EDITOR_CONTROL::PlaceModule( const TOOL_EVENT& aEvent )
|
||||||
if( !module )
|
if( !module )
|
||||||
{
|
{
|
||||||
// Pick the module to be placed
|
// Pick the module to be placed
|
||||||
module = m_frame->LoadModuleFromLibrary( wxEmptyString );
|
module = m_frame->SelectFootprintFromLibTree( wxEmptyString );
|
||||||
|
|
||||||
if( module == NULL )
|
if( module == NULL )
|
||||||
continue;
|
continue;
|
||||||
|
|
Loading…
Reference in New Issue