Loading eeschema/dialogs/dialog_bom.cpp +41 −22 Original line number Original line Diff line number Diff line Loading @@ -181,18 +181,25 @@ private: void pluginInit(); void pluginInit(); void installPluginsList(); void installPluginsList(); wxString getPluginFileName(); /** * @return the Plugin filename from a command line * @param aCommand = the command line */ wxString getPluginFileName( const wxString& aCommand ); /** /** * display (when exists) the text found between the keyword "@package" * display (when exists) the text found between the keyword "@package" * (compatible with doxygen comments) * and the end of comment block (""" in python", --> in xml) * and the end of comment block (""" in python", --> in xml) */ */ void displayPluginInfo( FILE * aFile, const wxString& aFilename ); void displayPluginInfo( FILE * aFile, const wxString& aFilename ); /** /** * Browse plugin files, and set m_CommandStringCtrl field * Browse plugin files, and set m_CommandStringCtrl field * @return a command line ro run the plugin */ */ void choosePlugin(); wxString choosePlugin(); }; }; // Create and show DIALOG_BOM. // Create and show DIALOG_BOM. Loading Loading @@ -299,7 +306,7 @@ void DIALOG_BOM::pluginInit() m_textCtrlName->SetValue( m_plugins[2 * ii] ); m_textCtrlName->SetValue( m_plugins[2 * ii] ); m_textCtrlCommand->SetValue( m_plugins[(2 * ii)+1] ); m_textCtrlCommand->SetValue( m_plugins[(2 * ii)+1] ); wxString pluginName = getPluginFileName(); wxString pluginName = getPluginFileName( m_textCtrlCommand->GetValue() ); if( pluginName.IsEmpty() ) if( pluginName.IsEmpty() ) return; return; Loading @@ -317,14 +324,13 @@ void DIALOG_BOM::pluginInit() displayPluginInfo( pluginFile, pluginName ); displayPluginInfo( pluginFile, pluginName ); } } /* display (when exists) the text found between the keyword "@package" * and the end of comment block (""" in python", --> in xml) */ void DIALOG_BOM::displayPluginInfo( FILE * aFile, const wxString& aFilename ) void DIALOG_BOM::displayPluginInfo( FILE * aFile, const wxString& aFilename ) { { m_Messages->Clear(); m_Messages->Clear(); // display (when exists) the text found between the keyword "@package" // display (when exists) the text found between the keyword "@package" // (compatible with doxygen comments) // and the end of comment block (""" in python", --> in xml) // and the end of comment block (""" in python", --> in xml) wxString data; wxString data; Loading @@ -340,6 +346,10 @@ void DIALOG_BOM::displayPluginInfo( FILE * aFile, const wxString& aFilename ) if( fn.GetExt().IsSameAs( wxT("py"), false ) ) if( fn.GetExt().IsSameAs( wxT("py"), false ) ) endsection = wxT( "\"\"\"" ); endsection = wxT( "\"\"\"" ); else if( !fn.GetExt().IsSameAs( wxT("xsl"), false ) ) // If this is not a python file, we know nothing about file // and the info cannot be found return; // Extract substring between @package and """ // Extract substring between @package and """ int strstart = data.Find( header ); int strstart = data.Find( header ); Loading Loading @@ -422,8 +432,17 @@ void DIALOG_BOM::OnRemovePlugin( wxCommandEvent& event ) */ */ void DIALOG_BOM::OnAddPlugin( wxCommandEvent& event ) void DIALOG_BOM::OnAddPlugin( wxCommandEvent& event ) { { wxString cmdLine = choosePlugin(); if( cmdLine.IsEmpty() ) return; // Creates a new plugin entry // Creates a new plugin entry wxString name = wxGetTextFromUser( _("Plugin name in plugin list") ); wxFileName fn( getPluginFileName( cmdLine ) ); wxString defaultName = fn.GetName(); wxString name = wxGetTextFromUser( _("Plugin name in plugin list") , _("Plugin name"), defaultName ); if( name.IsEmpty() ) if( name.IsEmpty() ) return; return; Loading @@ -438,12 +457,13 @@ void DIALOG_BOM::OnAddPlugin( wxCommandEvent& event ) } } } } // Eppend the new plugin m_plugins.Add( name ); m_plugins.Add( name ); m_plugins.Add( wxEmptyString ); m_plugins.Add( wxEmptyString ); m_lbPlugins->SetSelection( m_lbPlugins->GetCount() - 1 ); m_lbPlugins->Append( name ); m_lbPlugins->Append( name ); m_lbPlugins->SetSelection( m_lbPlugins->GetCount() - 1 ); m_lbPlugins->SetSelection( m_lbPlugins->GetCount() - 1 ); m_textCtrlCommand->SetValue( cmdLine ); choosePlugin(); pluginInit(); pluginInit(); } } Loading @@ -451,7 +471,7 @@ void DIALOG_BOM::OnAddPlugin( wxCommandEvent& event ) /* /* * Browse plugin files, and set m_CommandStringCtrl field * Browse plugin files, and set m_CommandStringCtrl field */ */ void DIALOG_BOM::choosePlugin() wxString DIALOG_BOM::choosePlugin() { { wxString mask = wxT( "*" ); wxString mask = wxT( "*" ); #ifndef __WXMAC__ #ifndef __WXMAC__ Loading @@ -470,7 +490,7 @@ void DIALOG_BOM::choosePlugin() true true ); ); if( fullFileName.IsEmpty() ) if( fullFileName.IsEmpty() ) return; return wxEmptyString; // Creates a default command line, // Creates a default command line, // suitable to run the external tool xslproc or python // suitable to run the external tool xslproc or python Loading @@ -489,36 +509,35 @@ void DIALOG_BOM::choosePlugin() else else cmdLine.Printf(wxT("\"%s\""), GetChars( fullFileName ) ); cmdLine.Printf(wxT("\"%s\""), GetChars( fullFileName ) ); m_textCtrlCommand->SetValue( cmdLine ); return cmdLine; } } wxString DIALOG_BOM::getPluginFileName() wxString DIALOG_BOM::getPluginFileName( const wxString& aCommand ) { { wxString pluginName; wxString pluginName; // Try to find the plugin name. // Try to find the plugin name. // This is possible if the name ends by .py or .xsl // This is possible if the name ends by .py or .xsl wxString cmdline = m_textCtrlCommand->GetValue(); int pos = -1; int pos = -1; if( (pos = cmdline.Find( wxT(".py") )) != wxNOT_FOUND ) if( (pos = aCommand.Find( wxT(".py") )) != wxNOT_FOUND ) pos += 2; pos += 2; else if( (pos = cmdline.Find( wxT(".xsl") )) != wxNOT_FOUND ) else if( (pos = aCommand.Find( wxT(".xsl") )) != wxNOT_FOUND ) pos += 3; pos += 3; // the end of plugin name is at position pos. // the end of plugin name is at position pos. if( pos > 0 ) if( pos > 0 ) { { // Be sure this is the end of the name: the next char is " or space // Be sure this is the end of the name: the next char is " or space int eos = cmdline[pos+1]; int eos = aCommand[pos+1]; if( eos == ' '|| eos == '\"' ) if( eos == ' '|| eos == '\"' ) { { // search for the starting point of the name // search for the starting point of the name int jj = pos-1; int jj = pos-1; while( jj >= 0 ) while( jj >= 0 ) if( cmdline[jj] != eos ) if( aCommand[jj] != eos ) jj--; jj--; else else break; break; Loading @@ -526,12 +545,12 @@ wxString DIALOG_BOM::getPluginFileName() // extract the name // extract the name if( jj >= 0 ) if( jj >= 0 ) { { eos = cmdline[jj]; eos = aCommand[jj]; if( eos == ' '|| eos == '\"' ) // do not include delimiters if( eos == ' '|| eos == '\"' ) // do not include delimiters jj++; jj++; pluginName = cmdline.SubString( jj, pos ); pluginName = aCommand.SubString( jj, pos ); } } } } } } Loading @@ -541,7 +560,7 @@ wxString DIALOG_BOM::getPluginFileName() void DIALOG_BOM::OnEditPlugin( wxCommandEvent& event ) void DIALOG_BOM::OnEditPlugin( wxCommandEvent& event ) { { wxString pluginName = getPluginFileName(); wxString pluginName = getPluginFileName( m_textCtrlCommand->GetValue() ); if( pluginName.Length() <= 2 ) // if name != "" if( pluginName.Length() <= 2 ) // if name != "" { { Loading Loading
eeschema/dialogs/dialog_bom.cpp +41 −22 Original line number Original line Diff line number Diff line Loading @@ -181,18 +181,25 @@ private: void pluginInit(); void pluginInit(); void installPluginsList(); void installPluginsList(); wxString getPluginFileName(); /** * @return the Plugin filename from a command line * @param aCommand = the command line */ wxString getPluginFileName( const wxString& aCommand ); /** /** * display (when exists) the text found between the keyword "@package" * display (when exists) the text found between the keyword "@package" * (compatible with doxygen comments) * and the end of comment block (""" in python", --> in xml) * and the end of comment block (""" in python", --> in xml) */ */ void displayPluginInfo( FILE * aFile, const wxString& aFilename ); void displayPluginInfo( FILE * aFile, const wxString& aFilename ); /** /** * Browse plugin files, and set m_CommandStringCtrl field * Browse plugin files, and set m_CommandStringCtrl field * @return a command line ro run the plugin */ */ void choosePlugin(); wxString choosePlugin(); }; }; // Create and show DIALOG_BOM. // Create and show DIALOG_BOM. Loading Loading @@ -299,7 +306,7 @@ void DIALOG_BOM::pluginInit() m_textCtrlName->SetValue( m_plugins[2 * ii] ); m_textCtrlName->SetValue( m_plugins[2 * ii] ); m_textCtrlCommand->SetValue( m_plugins[(2 * ii)+1] ); m_textCtrlCommand->SetValue( m_plugins[(2 * ii)+1] ); wxString pluginName = getPluginFileName(); wxString pluginName = getPluginFileName( m_textCtrlCommand->GetValue() ); if( pluginName.IsEmpty() ) if( pluginName.IsEmpty() ) return; return; Loading @@ -317,14 +324,13 @@ void DIALOG_BOM::pluginInit() displayPluginInfo( pluginFile, pluginName ); displayPluginInfo( pluginFile, pluginName ); } } /* display (when exists) the text found between the keyword "@package" * and the end of comment block (""" in python", --> in xml) */ void DIALOG_BOM::displayPluginInfo( FILE * aFile, const wxString& aFilename ) void DIALOG_BOM::displayPluginInfo( FILE * aFile, const wxString& aFilename ) { { m_Messages->Clear(); m_Messages->Clear(); // display (when exists) the text found between the keyword "@package" // display (when exists) the text found between the keyword "@package" // (compatible with doxygen comments) // and the end of comment block (""" in python", --> in xml) // and the end of comment block (""" in python", --> in xml) wxString data; wxString data; Loading @@ -340,6 +346,10 @@ void DIALOG_BOM::displayPluginInfo( FILE * aFile, const wxString& aFilename ) if( fn.GetExt().IsSameAs( wxT("py"), false ) ) if( fn.GetExt().IsSameAs( wxT("py"), false ) ) endsection = wxT( "\"\"\"" ); endsection = wxT( "\"\"\"" ); else if( !fn.GetExt().IsSameAs( wxT("xsl"), false ) ) // If this is not a python file, we know nothing about file // and the info cannot be found return; // Extract substring between @package and """ // Extract substring between @package and """ int strstart = data.Find( header ); int strstart = data.Find( header ); Loading Loading @@ -422,8 +432,17 @@ void DIALOG_BOM::OnRemovePlugin( wxCommandEvent& event ) */ */ void DIALOG_BOM::OnAddPlugin( wxCommandEvent& event ) void DIALOG_BOM::OnAddPlugin( wxCommandEvent& event ) { { wxString cmdLine = choosePlugin(); if( cmdLine.IsEmpty() ) return; // Creates a new plugin entry // Creates a new plugin entry wxString name = wxGetTextFromUser( _("Plugin name in plugin list") ); wxFileName fn( getPluginFileName( cmdLine ) ); wxString defaultName = fn.GetName(); wxString name = wxGetTextFromUser( _("Plugin name in plugin list") , _("Plugin name"), defaultName ); if( name.IsEmpty() ) if( name.IsEmpty() ) return; return; Loading @@ -438,12 +457,13 @@ void DIALOG_BOM::OnAddPlugin( wxCommandEvent& event ) } } } } // Eppend the new plugin m_plugins.Add( name ); m_plugins.Add( name ); m_plugins.Add( wxEmptyString ); m_plugins.Add( wxEmptyString ); m_lbPlugins->SetSelection( m_lbPlugins->GetCount() - 1 ); m_lbPlugins->Append( name ); m_lbPlugins->Append( name ); m_lbPlugins->SetSelection( m_lbPlugins->GetCount() - 1 ); m_lbPlugins->SetSelection( m_lbPlugins->GetCount() - 1 ); m_textCtrlCommand->SetValue( cmdLine ); choosePlugin(); pluginInit(); pluginInit(); } } Loading @@ -451,7 +471,7 @@ void DIALOG_BOM::OnAddPlugin( wxCommandEvent& event ) /* /* * Browse plugin files, and set m_CommandStringCtrl field * Browse plugin files, and set m_CommandStringCtrl field */ */ void DIALOG_BOM::choosePlugin() wxString DIALOG_BOM::choosePlugin() { { wxString mask = wxT( "*" ); wxString mask = wxT( "*" ); #ifndef __WXMAC__ #ifndef __WXMAC__ Loading @@ -470,7 +490,7 @@ void DIALOG_BOM::choosePlugin() true true ); ); if( fullFileName.IsEmpty() ) if( fullFileName.IsEmpty() ) return; return wxEmptyString; // Creates a default command line, // Creates a default command line, // suitable to run the external tool xslproc or python // suitable to run the external tool xslproc or python Loading @@ -489,36 +509,35 @@ void DIALOG_BOM::choosePlugin() else else cmdLine.Printf(wxT("\"%s\""), GetChars( fullFileName ) ); cmdLine.Printf(wxT("\"%s\""), GetChars( fullFileName ) ); m_textCtrlCommand->SetValue( cmdLine ); return cmdLine; } } wxString DIALOG_BOM::getPluginFileName() wxString DIALOG_BOM::getPluginFileName( const wxString& aCommand ) { { wxString pluginName; wxString pluginName; // Try to find the plugin name. // Try to find the plugin name. // This is possible if the name ends by .py or .xsl // This is possible if the name ends by .py or .xsl wxString cmdline = m_textCtrlCommand->GetValue(); int pos = -1; int pos = -1; if( (pos = cmdline.Find( wxT(".py") )) != wxNOT_FOUND ) if( (pos = aCommand.Find( wxT(".py") )) != wxNOT_FOUND ) pos += 2; pos += 2; else if( (pos = cmdline.Find( wxT(".xsl") )) != wxNOT_FOUND ) else if( (pos = aCommand.Find( wxT(".xsl") )) != wxNOT_FOUND ) pos += 3; pos += 3; // the end of plugin name is at position pos. // the end of plugin name is at position pos. if( pos > 0 ) if( pos > 0 ) { { // Be sure this is the end of the name: the next char is " or space // Be sure this is the end of the name: the next char is " or space int eos = cmdline[pos+1]; int eos = aCommand[pos+1]; if( eos == ' '|| eos == '\"' ) if( eos == ' '|| eos == '\"' ) { { // search for the starting point of the name // search for the starting point of the name int jj = pos-1; int jj = pos-1; while( jj >= 0 ) while( jj >= 0 ) if( cmdline[jj] != eos ) if( aCommand[jj] != eos ) jj--; jj--; else else break; break; Loading @@ -526,12 +545,12 @@ wxString DIALOG_BOM::getPluginFileName() // extract the name // extract the name if( jj >= 0 ) if( jj >= 0 ) { { eos = cmdline[jj]; eos = aCommand[jj]; if( eos == ' '|| eos == '\"' ) // do not include delimiters if( eos == ' '|| eos == '\"' ) // do not include delimiters jj++; jj++; pluginName = cmdline.SubString( jj, pos ); pluginName = aCommand.SubString( jj, pos ); } } } } } } Loading @@ -541,7 +560,7 @@ wxString DIALOG_BOM::getPluginFileName() void DIALOG_BOM::OnEditPlugin( wxCommandEvent& event ) void DIALOG_BOM::OnEditPlugin( wxCommandEvent& event ) { { wxString pluginName = getPluginFileName(); wxString pluginName = getPluginFileName( m_textCtrlCommand->GetValue() ); if( pluginName.Length() <= 2 ) // if name != "" if( pluginName.Length() <= 2 ) // if name != "" { { Loading