Pcbnew: Console python: use a wxMiniFrame to show the console and remove the management by a EDA_PANEINFO, which was not the right way to manage this console.

This commit is contained in:
jean-pierre charras 2014-10-31 08:51:22 +01:00
parent 359e64850d
commit 7e431a0d4b
4 changed files with 41 additions and 60 deletions

View File

@ -100,13 +100,6 @@ class PCB_EDIT_FRAME : public PCB_BASE_EDIT_FRAME
throw( IO_ERROR, PARSE_ERROR ); throw( IO_ERROR, PARSE_ERROR );
protected: protected:
#ifdef KICAD_SCRIPTING_WXPYTHON
// Panel used to let user talk with internal scripting
wxWindow* m_pythonPanel;
bool m_pythonPanelShow; ///< Visibility flag for Python Console
#endif
PCB_LAYER_WIDGET* m_Layers; PCB_LAYER_WIDGET* m_Layers;
DRC* m_drc; ///< the DRC controller, see drc.cpp DRC* m_drc; ///< the DRC controller, see drc.cpp
@ -130,6 +123,24 @@ protected:
void createPopUpBlockMenu( wxMenu* menu ); void createPopUpBlockMenu( wxMenu* menu );
void createPopUpMenuForMarkers( MARKER_PCB* aMarker, wxMenu* aPopMenu ); void createPopUpMenuForMarkers( MARKER_PCB* aMarker, wxMenu* aPopMenu );
// Has meaning only if DKICAD_SCRIPTING_WXPYTHON option is on
/**
* @return the frame name identifier for the python console frame
*/
static const wxChar * pythonConsoleNameId()
{
return wxT( "PythonConsole" );
}
/**
* @return a pointer to the python console frame, or NULL if not exist
*/
static wxWindow * findPythonConsole()
{
return FindWindowByName( pythonConsoleNameId() );
}
/** /**
* Function syncLayerWidgetLayer * Function syncLayerWidgetLayer
* updates the currently layer "selection" within the PCB_LAYER_WIDGET. * updates the currently layer "selection" within the PCB_LAYER_WIDGET.

View File

@ -484,21 +484,6 @@ public:
CaptionVisible( false ); CaptionVisible( false );
return *this; return *this;
} }
/**
* Function ScriptingConsolePane
* Change *this to a python scripting console pane for KiCad.
* Used in Pcbnew
*/
EDA_PANEINFO& ScriptingConsolePane()
{
CloseButton( false );
Floatable( true );
Resizable( true );
return *this;
}
}; };
#endif // WXSTRUCT_H_ #endif // WXSTRUCT_H_

View File

@ -82,8 +82,6 @@
#if defined(KICAD_SCRIPTING) || defined(KICAD_SCRIPTING_WXPYTHON) #if defined(KICAD_SCRIPTING) || defined(KICAD_SCRIPTING_WXPYTHON)
#include <python_scripting.h> #include <python_scripting.h>
// The name of the pane info handling the python console:
#define PYTHONCONSOLE_STRID wxT( "PythonPanel" )
#endif #endif
#include <pcb_draw_panel_gal.h> #include <pcb_draw_panel_gal.h>
@ -330,10 +328,6 @@ PCB_EDIT_FRAME::PCB_EDIT_FRAME( KIWAY* aKiway, wxWindow* aParent ) :
m_RecordingMacros = -1; m_RecordingMacros = -1;
m_microWaveToolBar = NULL; m_microWaveToolBar = NULL;
m_useCmpFileForFpNames = true; m_useCmpFileForFpNames = true;
#if defined(KICAD_SCRIPTING_WXPYTHON)
m_pythonPanel = NULL;
m_pythonPanelShow = false;
#endif
m_rotationAngle = 900; m_rotationAngle = 900;
@ -1001,39 +995,29 @@ void PCB_EDIT_FRAME::UpdateTitle()
#if defined(KICAD_SCRIPTING_WXPYTHON) #if defined(KICAD_SCRIPTING_WXPYTHON)
void PCB_EDIT_FRAME::ScriptingConsoleEnableDisable( wxCommandEvent& aEvent ) void PCB_EDIT_FRAME::ScriptingConsoleEnableDisable( wxCommandEvent& aEvent )
{ {
if( m_pythonPanel == NULL )
wxMiniFrame * pythonPanelFrame = (wxMiniFrame *) findPythonConsole();
bool pythonPanelShown = false;
if( pythonPanelFrame == NULL )
{ {
// Add the scripting panel long style = wxCAPTION|wxCLOSE_BOX|wxMINIMIZE_BOX|wxMAXIMIZE_BOX|wxRESIZE_BORDER|wxFRAME_FLOAT_ON_PARENT;
EDA_PANEINFO pythonAuiPane; pythonPanelFrame = new wxMiniFrame( this, wxID_ANY, wxT("Python console"), wxDefaultPosition, wxDefaultSize,
pythonAuiPane.ScriptingConsolePane(); style, pythonConsoleNameId() );
pythonAuiPane.Caption( wxT( "Python Scripting" ) ); wxBoxSizer* sizer = new wxBoxSizer( wxVERTICAL );
pythonAuiPane.MinSize( 300, 150 );
#if 1 // Set to 0 to make the Python console dockable wxWindow * pythonPanel = CreatePythonShellWindow( pythonPanelFrame );
// Currently the console is not dockable. Reasons: sizer->Add( pythonPanel, 1, wxEXPAND | wxALL, 5 );
// * When docked there is an issue with accelerator keys used in the main menu: pythonPanelFrame->SetSizer( sizer );
// these keys are not sent to the console, even if it has the focus pythonPanelFrame->SetSize( wxSize( 600, 300 ) );
// * The console is more easy to move if it is not dockable pythonPanelFrame->Layout();
pythonAuiPane.Dockable( false ).Float(); pythonPanelFrame->Centre();
// Gives a reasonnable position to the console
wxPoint pos = m_canvas->GetScreenPosition();
pythonAuiPane.FloatingPosition( pos.x + 10, pos.y + 10 );
pythonAuiPane.FloatingSize( 600, 200 );
#else
pythonAuiPane.BestSize( 600, 200 );
pythonAuiPane.LeftDockable( false ).RightDockable( false );
#endif
m_pythonPanel = CreatePythonShellWindow( this );
m_auimgr.AddPane( m_pythonPanel,
pythonAuiPane.Name( PYTHONCONSOLE_STRID ).Bottom().Layer(9) );
} }
else
pythonPanelShown = pythonPanelFrame->IsShown();
m_pythonPanelShow = ! m_pythonPanelShow; pythonPanelShown = ! pythonPanelShown;
m_auimgr.GetPane( PYTHONCONSOLE_STRID ).Show( m_pythonPanelShow ); pythonPanelFrame->Show( pythonPanelShown );
m_auimgr.Update();
} }
#endif #endif

View File

@ -106,12 +106,13 @@ void PCB_EDIT_FRAME::OnUpdateLayerSelectBox( wxUpdateUIEvent& aEvent )
m_SelLayerBox->SetLayerSelection( GetActiveLayer() ); m_SelLayerBox->SetLayerSelection( GetActiveLayer() );
} }
#ifdef KICAD_SCRIPTING_WXPYTHON // Used only when the DKICAD_SCRIPTING_WXPYTHON option is on
void PCB_EDIT_FRAME::OnUpdateScriptingConsoleState( wxUpdateUIEvent& aEvent ) void PCB_EDIT_FRAME::OnUpdateScriptingConsoleState( wxUpdateUIEvent& aEvent )
{ {
aEvent.Check( m_pythonPanelShow ); wxMiniFrame * pythonPanelFrame = (wxMiniFrame *) findPythonConsole();
bool pythonPanelShown = pythonPanelFrame ? pythonPanelFrame->IsShown() : false;
aEvent.Check( pythonPanelShown );
} }
#endif
void PCB_EDIT_FRAME::OnUpdateZoneDisplayStyle( wxUpdateUIEvent& aEvent ) void PCB_EDIT_FRAME::OnUpdateZoneDisplayStyle( wxUpdateUIEvent& aEvent )
{ {