kicad-developers team mailing list archive
-
kicad-developers team
-
Mailing list archive
-
Message #09391
Re: [PATCH] Log of opened and closed applications in KiCad launcher
El 15/01/13 09:55, Jacobo Aragunde Pérez escribió:
> ...
>
> I've checked that the only flag used in KiCad is wxEXEC_ASYNC, and it
> doesn't have problems in Windows (in fact, it's the default flag when
> you don't set anything). Moreover, there is one flag which only has
> effect under Windows, so I think it's safe to pass that argument.
>
> In any case I will try to setup a Windows environment to confirm it works.
>
Tested the patch in a Windows machine and fixed coding style issues.
Sending again :)
--
Jacobo Aragunde
Software Engineer at Igalia
=== modified file 'common/common.cpp'
--- common/common.cpp 2012-09-02 16:38:52 +0000
+++ common/common.cpp 2013-01-15 08:40:21 +0000
@@ -313,15 +313,9 @@
}
-bool ProcessExecute( const wxString& aCommandLine, int aFlags )
+int ProcessExecute( const wxString& aCommandLine, int aFlags, wxProcess *callback )
{
-#ifdef __WINDOWS__
- int pid = wxExecute( aCommandLine );
- return pid ? true : false;
-#else
- wxProcess* process = wxProcess::Open( aCommandLine, aFlags );
- return (process != NULL) ? true : false;
-#endif
+ return wxExecute( aCommandLine, aFlags, callback );
}
=== modified file 'common/gestfich.cpp'
--- common/gestfich.cpp 2012-10-18 19:31:40 +0000
+++ common/gestfich.cpp 2013-01-15 09:03:09 +0000
@@ -415,7 +415,8 @@
}
-int ExecuteFile( wxWindow* frame, const wxString& ExecFile, const wxString& param )
+int ExecuteFile( wxWindow* frame, const wxString& ExecFile, const wxString& param,
+ wxProcess *callback )
{
wxString FullFileName;
@@ -425,19 +426,18 @@
#ifdef __WXMAC__
if( wxFileExists( FullFileName ) || wxDir::Exists( FullFileName ) )
{
- ProcessExecute( wxGetApp().GetExecutablePath() + wxT("/") + ExecFile + wxT(" ") + param );
+ return ProcessExecute( wxGetApp().GetExecutablePath() + wxT( "/" ) + ExecFile + wxT( " " )
+ + param, wxEXEC_ASYNC, callback );
} else {
- ProcessExecute( wxT("/usr/bin/open ") + param );
+ return ProcessExecute( wxT( "/usr/bin/open " ) + param, wxEXEC_ASYNC, callback );
}
- return 0;
#else
if( wxFileExists( FullFileName ) )
{
if( !param.IsEmpty() )
FullFileName += wxT( " " ) + param;
- ProcessExecute( FullFileName );
- return 0;
+ return ProcessExecute( FullFileName, wxEXEC_ASYNC, callback );
}
#endif
wxString msg;
=== modified file 'include/common.h'
--- include/common.h 2012-09-02 16:38:52 +0000
+++ include/common.h 2013-01-15 08:40:21 +0000
@@ -555,9 +555,13 @@
* @param aCommandLine The process and any arguments to it all in a single
* string.
* @param aFlags The same args as allowed for wxExecute()
- * @return bool - true if success, else false
+ * @param callback wxProcess implementing OnTerminate to be run when the
+ child process finishes
+ * @return int - pid of process, 0 in case of error (like return values of
+ * wxExecute())
*/
-bool ProcessExecute( const wxString& aCommandLine, int aFlags = wxEXEC_ASYNC );
+int ProcessExecute( const wxString& aCommandLine, int aFlags = wxEXEC_ASYNC,
+ wxProcess *callback = NULL );
/*******************/
=== modified file 'include/gestfich.h'
--- include/gestfich.h 2011-11-08 16:37:25 +0000
+++ include/gestfich.h 2013-01-15 08:40:21 +0000
@@ -10,6 +10,7 @@
#define __INCLUDE__GESTFICH_H__ 1
#include <wx/filename.h>
+#include <wx/process.h>
/* Forward class declarations. */
@@ -79,7 +80,7 @@
* calls the executable file \a ExecFile with the command line parameters \a param.
*/
int ExecuteFile( wxWindow* frame, const wxString& ExecFile,
- const wxString& param = wxEmptyString );
+ const wxString& param = wxEmptyString, wxProcess *callback = NULL );
/**
* Function AddDelimiterString
=== modified file 'kicad/class_treeproject_item.cpp'
--- kicad/class_treeproject_item.cpp 2013-01-03 19:25:12 +0000
+++ kicad/class_treeproject_item.cpp 2013-01-15 08:40:21 +0000
@@ -34,6 +34,7 @@
#include <macros.h>
#include <kicad.h>
+#include <appl_wxstruct.h>
#include <tree_project_frame.h>
#include <class_treeprojectfiles.h>
#include <class_treeproject_item.h>
@@ -188,6 +189,7 @@
wxString sep = wxFileName().GetPathSeparator();
wxString FullFileName = GetFileName();
wxTreeItemId id = GetId();
+ KICAD_MANAGER_FRAME* mainFrame = (KICAD_MANAGER_FRAME*) wxGetApp().GetTopWindow();
AddDelimiterString( FullFileName );
@@ -201,16 +203,16 @@
break;
case TREE_SCHEMA:
- ExecuteFile( m_parent, EESCHEMA_EXE, FullFileName );
+ mainFrame->Execute( m_parent, EESCHEMA_EXE, FullFileName );
break;
case TREE_LEGACY_PCB:
case TREE_SEXP_PCB:
- ExecuteFile( m_parent, PCBNEW_EXE, FullFileName );
+ mainFrame->Execute( m_parent, PCBNEW_EXE, FullFileName );
break;
case TREE_GERBER:
- ExecuteFile( m_parent, GERBVIEW_EXE, FullFileName );
+ mainFrame->Execute( m_parent, GERBVIEW_EXE, FullFileName );
break;
case TREE_PDF:
@@ -218,7 +220,7 @@
break;
case TREE_NET:
- ExecuteFile( m_parent, CVPCB_EXE, FullFileName );
+ mainFrame->Execute( m_parent, CVPCB_EXE, FullFileName );
break;
case TREE_TXT:
@@ -226,7 +228,7 @@
wxString editorname = wxGetApp().GetEditorName();
if( !editorname.IsEmpty() )
- ExecuteFile( m_parent, editorname, FullFileName );
+ mainFrame->Execute( m_parent, editorname, FullFileName );
break;
}
@@ -235,4 +237,5 @@
OpenFile( FullFileName );
break;
}
+
}
=== modified file 'kicad/kicad.h'
--- kicad/kicad.h 2013-01-02 21:49:56 +0000
+++ kicad/kicad.h 2013-01-16 09:24:32 +0000
@@ -1,6 +1,31 @@
-/***********/
-/* kicad.h */
-/***********/
+/**
+ * @file kicad/kicad.h
+ * @brief KICAD_MANAGER_FRAME is the KiCad main frame.
+ */
+
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2013 CERN (www.cern.ch)
+ * Copyright (C) 2013 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 KICAD_H
#define KICAD_H
@@ -10,6 +35,7 @@
#include <wx/treectrl.h>
#include <wx/dragimag.h>
#include <wx/filename.h>
+#include <wx/process.h>
#include <id.h>
#include <wxstruct.h>
@@ -182,6 +208,30 @@
*/
void SaveSettings();
+ /**
+ * Function Execute
+ * opens another KiCad application and logs a message.
+ * @param frame = owner frame.
+ * @param execFile = name of the executable file.
+ * @param param = parameters to be passed to the executable.
+ */
+ void Execute( wxWindow* frame, const wxString& execFile,
+ const wxString& param = wxEmptyString );
+
+ class PROCESS_TERMINATE_EVENT_HANDLER : public wxProcess
+ {
+ private:
+ wxString appName;
+
+ public:
+ PROCESS_TERMINATE_EVENT_HANDLER( const wxString& appName ) :
+ appName(appName)
+ {
+ }
+
+ void OnTerminate( int pid, int status );
+ };
+
#ifdef KICAD_USE_FILES_WATCHER
/**
* Called by sending a event with id = ID_INIT_WATCHED_PATHS
=== modified file 'kicad/mainframe.cpp'
--- kicad/mainframe.cpp 2013-01-01 14:06:49 +0000
+++ kicad/mainframe.cpp 2013-01-15 09:01:27 +0000
@@ -7,6 +7,7 @@
* This program source code file is part of KiCad, a free EDA CAD application.
*
* Copyright (C) 2012 Jean-Pierre Charras, jaen-pierre.charras@xxxxxxxxxxxxxxxxxx
+ * Copyright (C) 2013 CERN (www.cern.ch)
* Copyright (C) 2004-2012 KiCad Developers, see change_log.txt for contributors.
*
* This program is free software; you can redistribute it and/or
@@ -186,15 +187,50 @@
}
+void KICAD_MANAGER_FRAME::PROCESS_TERMINATE_EVENT_HANDLER::OnTerminate( int pid,
+ int status ) {
+
+ wxString msg;
+
+ msg.Printf( appName + _( " closed [%d]\n" ), pid );
+ ( (KICAD_MANAGER_FRAME*) wxGetApp().GetTopWindow() )->PrintMsg( msg );
+
+ delete this;
+}
+
+
+void KICAD_MANAGER_FRAME::Execute( wxWindow* frame, const wxString& execFile,
+ const wxString& param )
+{
+
+ PROCESS_TERMINATE_EVENT_HANDLER* callback;
+ long pid;
+ wxString msg;
+
+ callback = new PROCESS_TERMINATE_EVENT_HANDLER( execFile );
+ pid = ExecuteFile( frame, execFile, param, callback );
+
+ if( pid > 0 )
+ {
+ msg.Printf( execFile + _( " opened [%ld]\n" ), pid );
+ PrintMsg( msg );
+ }
+ else
+ {
+ delete callback;
+ }
+}
+
+
void KICAD_MANAGER_FRAME::OnRunBitmapConverter( wxCommandEvent& event )
{
- ExecuteFile( this, BITMAPCONVERTER_EXE, wxEmptyString );
+ Execute( this, BITMAPCONVERTER_EXE );
}
void KICAD_MANAGER_FRAME::OnRunPcbCalculator( wxCommandEvent& event )
{
- ExecuteFile( this, PCB_CALCULATOR_EXE, wxEmptyString );
+ Execute( this, PCB_CALCULATOR_EXE );
}
@@ -207,9 +243,9 @@
kicad_board.SetExt( KiCadPcbFileExtension );
if( !legacy_board.FileExists() || kicad_board.FileExists() )
- ExecuteFile( this, PCBNEW_EXE, QuoteFullPath( kicad_board ) );
+ Execute( this, PCBNEW_EXE, QuoteFullPath( kicad_board ) );
else
- ExecuteFile( this, PCBNEW_EXE, QuoteFullPath( legacy_board ) );
+ Execute( this, PCBNEW_EXE, QuoteFullPath( legacy_board ) );
}
@@ -218,26 +254,25 @@
wxFileName fn( m_ProjectFileName );
fn.SetExt( NetlistFileExtension );
- ExecuteFile( this, CVPCB_EXE, QuoteFullPath( fn ) );
+ Execute( this, CVPCB_EXE, QuoteFullPath( fn ) );
}
-
void KICAD_MANAGER_FRAME::OnRunEeschema( wxCommandEvent& event )
{
wxFileName fn( m_ProjectFileName );
fn.SetExt( SchematicFileExtension );
- ExecuteFile( this, EESCHEMA_EXE, QuoteFullPath( fn ) );
+ Execute( this, EESCHEMA_EXE, QuoteFullPath( fn ) );
+
}
-
void KICAD_MANAGER_FRAME::OnRunGerbview( wxCommandEvent& event )
{
wxFileName fn( m_ProjectFileName );
wxString path = wxT( "\"" );
path += fn.GetPath( wxPATH_GET_SEPARATOR | wxPATH_GET_VOLUME ) + wxT( "\"" );
- ExecuteFile( this, GERBVIEW_EXE, path );
+ Execute( this, GERBVIEW_EXE, path );
}
@@ -246,7 +281,7 @@
wxString editorname = wxGetApp().GetEditorName();
if( !editorname.IsEmpty() )
- ExecuteFile( this, editorname, wxEmptyString );
+ Execute( this, editorname, wxEmptyString );
}
@@ -271,7 +306,7 @@
filename += dlg.GetPath() + wxT( "\"" );
if( !dlg.GetPath().IsEmpty() && !wxGetApp().GetEditorName().IsEmpty() )
- ExecuteFile( this, wxGetApp().GetEditorName(), filename );
+ Execute( this, wxGetApp().GetEditorName(), filename );
}
Follow ups
References