/* * This program source code file is part of KiCad, a free EDA CAD application. * * Copyright (C) 2023 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 . */ #include #include #include DIALOG_IMPORT_CHOOSE_PROJECT::DIALOG_IMPORT_CHOOSE_PROJECT( wxWindow* aParent, const std::vector& aProjectDesc ) : DIALOG_IMPORT_CHOOSE_PROJECT_BASE( aParent ) { m_project_desc = aProjectDesc; // Initialize columns in the wxListCtrl elements: int comboNameColId = m_listCtrl->AppendColumn( _( "Project Name" ) ); int pcbNameColId = m_listCtrl->AppendColumn( _( "PCB" ) ); int schNameColId = m_listCtrl->AppendColumn( _( "Schematic" ) ); // Load the project/PCB/schematic names int row = 0; auto convertName = []( const wxString& aName, const wxString& aId ) -> wxString { if( aId.empty() ) return wxEmptyString; return aName; }; for( const IMPORT_PROJECT_DESC& desc : m_project_desc ) { m_listCtrl->InsertItem( row, convertName( desc.ComboName, desc.ComboId ) ); m_listCtrl->SetItem( row, pcbNameColId, convertName( desc.PCBName, desc.PCBId ) ); m_listCtrl->SetItem( row, schNameColId, convertName( desc.SchematicName, desc.SchematicId ) ); ++row; } // Auto select the first item to improve ease-of-use m_listCtrl->SetItemState( 0, wxLIST_STATE_SELECTED, wxLIST_STATE_SELECTED ); m_listCtrl->SetColumnWidth( comboNameColId, wxLIST_AUTOSIZE_USEHEADER ); m_listCtrl->SetColumnWidth( pcbNameColId, wxLIST_AUTOSIZE_USEHEADER ); m_listCtrl->SetColumnWidth( schNameColId, wxLIST_AUTOSIZE_USEHEADER ); SetupStandardButtons(); Fit(); finishDialogSettings(); } void DIALOG_IMPORT_CHOOSE_PROJECT::onItemActivated( wxListEvent& event ) { EndModal( wxID_OK ); } void DIALOG_IMPORT_CHOOSE_PROJECT::onClose( wxCloseEvent& event ) { EndModal( wxID_CANCEL ); } std::vector DIALOG_IMPORT_CHOOSE_PROJECT::GetProjects() { std::vector result; long selected = -1; do { selected = m_listCtrl->GetNextItem( selected, wxLIST_NEXT_ALL, wxLIST_STATE_SELECTED ); if( selected != -1 && selected < long( m_project_desc.size() ) ) result.emplace_back( m_project_desc[selected] ); } while( selected != -1 ); return result; } std::vector DIALOG_IMPORT_CHOOSE_PROJECT::RunModal( wxWindow* aParent, const std::vector& aProjectDesc ) { DIALOG_IMPORT_CHOOSE_PROJECT dlg( aParent, aProjectDesc ); if( dlg.ShowModal() != wxID_OK ) return {}; return dlg.GetProjects(); }