You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

80 lines
2.5 KiB

  1. /*
  2. * This program source code file is part of KICAD, a free EDA CAD application.
  3. *
  4. * Copyright (C) 2016 CERN
  5. * @author Maciej Suminski <maciej.suminski@cern.ch>
  6. *
  7. * This program is free software; you can redistribute it and/or
  8. * modify it under the terms of the GNU General Public License
  9. * as published by the Free Software Foundation; either version 2
  10. * of the License, or (at your option) any later version.
  11. *
  12. * This program is distributed in the hope that it will be useful,
  13. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  14. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  15. * GNU General Public License for more details.
  16. *
  17. * You should have received a copy of the GNU General Public License
  18. * along with this program; if not, you may find one here:
  19. * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
  20. * or you may search the http://www.gnu.org website for the version 2 license,
  21. * or you may write to the Free Software Foundation, Inc.,
  22. * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
  23. */
  24. #include "graphics_import_mgr.h"
  25. #include <core/kicad_algo.h>
  26. #include <eda_item.h>
  27. #include "dxf_import_plugin.h"
  28. #include "svg_import_plugin.h"
  29. #include <wx/regex.h>
  30. GRAPHICS_IMPORT_MGR::GRAPHICS_IMPORT_MGR( const TYPE_LIST& aBlacklist )
  31. {
  32. // This is the full list of types, from which we'll subtract our blacklist
  33. static const TYPE_LIST all_types = {
  34. DXF,
  35. SVG,
  36. };
  37. std::copy_if( all_types.begin(), all_types.end(), std::back_inserter( m_importableTypes ),
  38. [&aBlacklist]( const GFX_FILE_T& arg )
  39. {
  40. return !alg::contains( aBlacklist, arg );
  41. } );
  42. }
  43. std::unique_ptr<GRAPHICS_IMPORT_PLUGIN> GRAPHICS_IMPORT_MGR::GetPlugin( GFX_FILE_T aType ) const
  44. {
  45. std::unique_ptr<GRAPHICS_IMPORT_PLUGIN> ret;
  46. switch( aType )
  47. {
  48. case DXF: ret = std::make_unique<DXF_IMPORT_PLUGIN>(); break;
  49. case SVG: ret = std::make_unique<SVG_IMPORT_PLUGIN>(); break;
  50. default: throw std::runtime_error( "Unhandled graphics format" ); break;
  51. }
  52. return ret;
  53. }
  54. std::unique_ptr<GRAPHICS_IMPORT_PLUGIN> GRAPHICS_IMPORT_MGR::GetPluginByExt(
  55. const wxString& aExtension ) const
  56. {
  57. for( auto fileType : GetImportableFileTypes() )
  58. {
  59. auto plugin = GetPlugin( fileType );
  60. auto fileExtensions = plugin->GetFileExtensions();
  61. if( compareFileExtensions( aExtension.ToStdString(), fileExtensions ) )
  62. return plugin;
  63. }
  64. return {};
  65. }