From 4fd2a4da94b2dd56c49e4f529c85be0990d810bf Mon Sep 17 00:00:00 2001 From: jean-pierre charras Date: Fri, 31 Oct 2014 15:45:46 +0100 Subject: [PATCH] Pcbnew, python console: refinements. --- pcbnew/pcbframe.cpp | 27 +++---- pcbnew/scripting/python_console_frame.h | 98 +++++++++++++++++++++++++ pcbnew/tool_pcb.cpp | 2 +- 3 files changed, 108 insertions(+), 19 deletions(-) create mode 100644 pcbnew/scripting/python_console_frame.h diff --git a/pcbnew/pcbframe.cpp b/pcbnew/pcbframe.cpp index 03605e3fb1..19ca312d7b 100644 --- a/pcbnew/pcbframe.cpp +++ b/pcbnew/pcbframe.cpp @@ -79,6 +79,7 @@ #include #include +#include #if defined(KICAD_SCRIPTING) || defined(KICAD_SCRIPTING_WXPYTHON) #include @@ -211,11 +212,12 @@ BEGIN_EVENT_TABLE( PCB_EDIT_FRAME, PCB_BASE_FRAME ) EVT_TOOL( ID_TOOLBARH_PCB_MODE_MODULE, PCB_EDIT_FRAME::OnSelectAutoPlaceMode ) EVT_TOOL( ID_TOOLBARH_PCB_MODE_TRACKS, PCB_EDIT_FRAME::OnSelectAutoPlaceMode ) EVT_TOOL( ID_TOOLBARH_PCB_FREEROUTE_ACCESS, PCB_EDIT_FRAME::Access_to_External_Tool ) -#ifdef KICAD_SCRIPTING_WXPYTHON + + // has meaning only with KICAD_SCRIPTING_WXPYTHON enabled EVT_TOOL( ID_TOOLBARH_PCB_SCRIPTING_CONSOLE, PCB_EDIT_FRAME::ScriptingConsoleEnableDisable ) EVT_UPDATE_UI( ID_TOOLBARH_PCB_SCRIPTING_CONSOLE, PCB_EDIT_FRAME::OnUpdateScriptingConsoleState ) -#endif + // Option toolbar EVT_TOOL( ID_TB_OPTIONS_DRC_OFF, PCB_EDIT_FRAME::OnSelectOptionToolbar ) @@ -992,34 +994,23 @@ void PCB_EDIT_FRAME::UpdateTitle() } -#if defined(KICAD_SCRIPTING_WXPYTHON) +wxSize PYTHON_CONSOLE_FRAME::m_frameSize; ///< The size of the PYTHON_CONSOLE_FRAME frame, stored during a session +wxPoint PYTHON_CONSOLE_FRAME::m_framePos; ///< The position ofPYTHON_CONSOLE_FRAME the frame, stored during a session + void PCB_EDIT_FRAME::ScriptingConsoleEnableDisable( wxCommandEvent& aEvent ) { - wxMiniFrame * pythonPanelFrame = (wxMiniFrame *) findPythonConsole(); + wxWindow * pythonPanelFrame = findPythonConsole(); bool pythonPanelShown = false; if( pythonPanelFrame == NULL ) - { - long style = wxCAPTION|wxCLOSE_BOX|wxMINIMIZE_BOX|wxMAXIMIZE_BOX|wxRESIZE_BORDER|wxFRAME_FLOAT_ON_PARENT; - pythonPanelFrame = new wxMiniFrame( this, wxID_ANY, wxT("Python console"), wxDefaultPosition, wxDefaultSize, - style, pythonConsoleNameId() ); - wxBoxSizer* sizer = new wxBoxSizer( wxVERTICAL ); - - wxWindow * pythonPanel = CreatePythonShellWindow( pythonPanelFrame ); - sizer->Add( pythonPanel, 1, wxEXPAND | wxALL, 5 ); - pythonPanelFrame->SetSizer( sizer ); - pythonPanelFrame->SetSize( wxSize( 600, 300 ) ); - pythonPanelFrame->Layout(); - pythonPanelFrame->Centre(); - } + pythonPanelFrame = new PYTHON_CONSOLE_FRAME( this, pythonConsoleNameId() ); else pythonPanelShown = pythonPanelFrame->IsShown(); pythonPanelShown = ! pythonPanelShown; pythonPanelFrame->Show( pythonPanelShown ); } -#endif void PCB_EDIT_FRAME::OnSelectAutoPlaceMode( wxCommandEvent& aEvent ) diff --git a/pcbnew/scripting/python_console_frame.h b/pcbnew/scripting/python_console_frame.h new file mode 100644 index 0000000000..84a44ccd54 --- /dev/null +++ b/pcbnew/scripting/python_console_frame.h @@ -0,0 +1,98 @@ +/* + * This program source code file is part of KiCad, a free EDA CAD application. + * + * Copyright (C) 2014 Jean-Pierre Charras, jp.charras at wanadoo.fr + * Copyright (C) 2004-2014 KiCad Developers, see change_log.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 + */ + +/** + * @file python_console_frame.h + */ + +#ifndef PYTHON_CONSOLE_FRAME_H_ +#define PYTHON_CONSOLE_FRAME_H_ + + + +/** + * Class PYTHON_CONSOLE_FRAME is a simple derived class from wxMiniFrame + * to handle the scripting python console + */ +class PYTHON_CONSOLE_FRAME : public wxMiniFrame +{ +private: + static wxSize m_frameSize; ///< The size of the frame, stored during a session + static wxPoint m_framePos; ///< The position of the frame, stored during a session + +public: + + PYTHON_CONSOLE_FRAME( wxWindow* aParent, const wxString& aFramenameId ) + : wxMiniFrame( aParent, wxID_ANY, wxT("Python console"), wxDefaultPosition, wxDefaultSize, + wxCAPTION|wxCLOSE_BOX|wxRESIZE_BORDER|wxFRAME_FLOAT_ON_PARENT, + aFramenameId ) + { + wxBoxSizer* sizer = new wxBoxSizer( wxVERTICAL ); + +#if defined(KICAD_SCRIPTING_WXPYTHON) + wxWindow * pythonPanel = CreatePythonShellWindow( pythonPanelFrame ); + sizer->Add( pythonPanel, 1, wxEXPAND | wxALL, 5 ); +#endif + SetSizer( sizer ); + SetMinSize( wxSize( 400, 200 ) ); + + if( m_frameSize.x <= 0 || m_frameSize.y <= 0 ) + SetSize( wxSize( 600, 300 ) ); + else + SetSize( m_frameSize ); + + if( m_framePos.x == 0 && m_framePos.y == 0 ) + Centre(); + else + SetPosition( m_framePos ); + + Layout(); + + // Connect Events + this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( PYTHON_CONSOLE_FRAME::OnClose ) ); + } + + ~PYTHON_CONSOLE_FRAME() + { + // Disconnect Events + this->Disconnect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( PYTHON_CONSOLE_FRAME::OnClose ) ); + } + +private: + + void OnClose( wxCloseEvent& event ) + { + if( !IsIconized() ) + { + m_frameSize = GetSize(); + m_framePos = GetPosition(); + } + + event.Skip(); + } + +// DECLARE_EVENT_TABLE() +}; + +#endif // PYTHON_CONSOLE_FRAME_H_ diff --git a/pcbnew/tool_pcb.cpp b/pcbnew/tool_pcb.cpp index ea60a5079b..e1ad70bd66 100644 --- a/pcbnew/tool_pcb.cpp +++ b/pcbnew/tool_pcb.cpp @@ -309,7 +309,7 @@ void PCB_EDIT_FRAME::ReCreateHToolbar() _( "Fast access to the Web Based FreeROUTE advanced router" ) ); // Access to the scripting console -#ifdef KICAD_SCRIPTING_WXPYTHON +#if defined(KICAD_SCRIPTING_WXPYTHON) m_mainToolBar->AddSeparator(); m_mainToolBar->AddTool( ID_TOOLBARH_PCB_SCRIPTING_CONSOLE, wxEmptyString,