From 98f91f8b0ab93f512f0c26d065c97f6a3de4d8b8 Mon Sep 17 00:00:00 2001 From: jean-pierre charras Date: Thu, 14 Jun 2012 21:10:32 +0200 Subject: [PATCH] Pcbnew: automatic selection of plugin when loading a file with .kicad_pcb extension from history list. Very minor other fixes --- .../dialogs/dialog_select_one_pcb_layer.cpp | 63 +++++++++---------- pcbnew/dialogs/dialog_layers_setup.cpp | 4 +- pcbnew/files.cpp | 12 +++- 3 files changed, 42 insertions(+), 37 deletions(-) diff --git a/gerbview/dialogs/dialog_select_one_pcb_layer.cpp b/gerbview/dialogs/dialog_select_one_pcb_layer.cpp index e34e07f4e5..14afd18e1a 100644 --- a/gerbview/dialogs/dialog_select_one_pcb_layer.cpp +++ b/gerbview/dialogs/dialog_select_one_pcb_layer.cpp @@ -185,42 +185,39 @@ const wxString GetPCBDefaultLayerName( int aLayerNumber ) { const wxChar* txt; - // These are only default layer names. For Pcbnew the copper names - // may be over-ridden in the BOARD (*.brd) file. - // Use a switch to explicitly show the mapping more clearly switch( aLayerNumber ) { - case LAYER_N_FRONT: txt = _( "Front" ); break; - case LAYER_N_2: txt = _( "Inner2" ); break; - case LAYER_N_3: txt = _( "Inner3" ); break; - case LAYER_N_4: txt = _( "Inner4" ); break; - case LAYER_N_5: txt = _( "Inner5" ); break; - case LAYER_N_6: txt = _( "Inner6" ); break; - case LAYER_N_7: txt = _( "Inner7" ); break; - case LAYER_N_8: txt = _( "Inner8" ); break; - case LAYER_N_9: txt = _( "Inner9" ); break; - case LAYER_N_10: txt = _( "Inner10" ); break; - case LAYER_N_11: txt = _( "Inner11" ); break; - case LAYER_N_12: txt = _( "Inner12" ); break; - case LAYER_N_13: txt = _( "Inner13" ); break; - case LAYER_N_14: txt = _( "Inner14" ); break; - case LAYER_N_15: txt = _( "Inner15" ); break; - case LAYER_N_BACK: txt = _( "Back" ); break; - case ADHESIVE_N_BACK: txt = _( "Adhes_Back" ); break; - case ADHESIVE_N_FRONT: txt = _( "Adhes_Front" ); break; - case SOLDERPASTE_N_BACK: txt = _( "SoldP_Back" ); break; - case SOLDERPASTE_N_FRONT: txt = _( "SoldP_Front" ); break; - case SILKSCREEN_N_BACK: txt = _( "SilkS_Back" ); break; - case SILKSCREEN_N_FRONT: txt = _( "SilkS_Front" ); break; - case SOLDERMASK_N_BACK: txt = _( "Mask_Back" ); break; - case SOLDERMASK_N_FRONT: txt = _( "Mask_Front" ); break; - case DRAW_N: txt = _( "Drawings" ); break; - case COMMENT_N: txt = _( "Comments" ); break; - case ECO1_N: txt = _( "Eco1" ); break; - case ECO2_N: txt = _( "Eco2" ); break; - case EDGE_N: txt = _( "PCB_Edges" ); break; - default: txt = _( "BAD INDEX" ); break; + case LAYER_N_FRONT: txt = _( "Front" ); break; + case LAYER_N_2: txt = _( "Inner1" ); break; + case LAYER_N_3: txt = _( "Inner2" ); break; + case LAYER_N_4: txt = _( "Inner3" ); break; + case LAYER_N_5: txt = _( "Inner4" ); break; + case LAYER_N_6: txt = _( "Inner5" ); break; + case LAYER_N_7: txt = _( "Inner6" ); break; + case LAYER_N_8: txt = _( "Inner7" ); break; + case LAYER_N_9: txt = _( "Inner8" ); break; + case LAYER_N_10: txt = _( "Inner9" ); break; + case LAYER_N_11: txt = _( "Inner10" ); break; + case LAYER_N_12: txt = _( "Inner11" ); break; + case LAYER_N_13: txt = _( "Inner12" ); break; + case LAYER_N_14: txt = _( "Inner13" ); break; + case LAYER_N_15: txt = _( "Inner14" ); break; + case LAYER_N_BACK: txt = _( "Back" ); break; + case ADHESIVE_N_BACK: txt = _( "Adhes_Back" ); break; + case ADHESIVE_N_FRONT: txt = _( "Adhes_Front" ); break; + case SOLDERPASTE_N_BACK: txt = _( "SoldP_Back" ); break; + case SOLDERPASTE_N_FRONT: txt = _( "SoldP_Front" ); break; + case SILKSCREEN_N_BACK: txt = _( "SilkS_Back" ); break; + case SILKSCREEN_N_FRONT: txt = _( "SilkS_Front" ); break; + case SOLDERMASK_N_BACK: txt = _( "Mask_Back" ); break; + case SOLDERMASK_N_FRONT: txt = _( "Mask_Front" ); break; + case DRAW_N: txt = _( "Drawings" ); break; + case COMMENT_N: txt = _( "Comments" ); break; + case ECO1_N: txt = _( "Eco1" ); break; + case ECO2_N: txt = _( "Eco2" ); break; + case EDGE_N: txt = _( "PCB_Edges" ); break; + default: txt = wxT( "BAD INDEX" ); break; } return wxString( txt ); diff --git a/pcbnew/dialogs/dialog_layers_setup.cpp b/pcbnew/dialogs/dialog_layers_setup.cpp index a652200e29..8057409c45 100644 --- a/pcbnew/dialogs/dialog_layers_setup.cpp +++ b/pcbnew/dialogs/dialog_layers_setup.cpp @@ -660,8 +660,8 @@ bool DIALOG_LAYERS_SETUP::testLayerNames() // 3) cannot have " chars // 4) cannot be 'signal' // 5) must be unique. - - static const wxString badchars( wxT("%$\" ") ); + // 6) cannot have illegal chars in filenames ( some filenames are built from layer names ) + static const wxString badchars( wxT("%$\" /\\.") ); if( name == wxEmptyString ) { diff --git a/pcbnew/files.cpp b/pcbnew/files.cpp index 6d5d6bd4b8..9be277668e 100644 --- a/pcbnew/files.cpp +++ b/pcbnew/files.cpp @@ -176,10 +176,12 @@ the changes?" ) ) ) // load a BOARD. Order is subject to change as KICAD plugin matures. // User may occasionally use the wrong plugin to load a *.brd file, // but eventually *.kicad_pcb will be more common than legacy *.brd files. - static const struct { + static const struct + { const wxString& filter; IO_MGR::PCB_FILE_T pluginType; - } loaders[] = { + } loaders[] = + { { LegacyPcbFileWildcard, IO_MGR::LEGACY }, { PcbFileWildcard, IO_MGR::KICAD }, { EaglePcbFileWildcard, IO_MGR::EAGLE }, @@ -216,6 +218,12 @@ the changes?" ) ) ) int chosenFilter = dlg.GetFilterIndex(); pluginType = loaders[chosenFilter].pluginType; } + else // if a filename is given, force IO_MGR::KICAD if the file est is kicad_pcb + // for instance if the filename comes from file history + { + if( fileName.GetExt() == IO_MGR::GetFileExtension( IO_MGR::KICAD ) ) + pluginType = IO_MGR::KICAD; + } PLUGIN::RELEASER pi( IO_MGR::PluginFind( pluginType ) );