tools: added TOOL_SETTINGS class for storing persistent tool settings in config file (just a wrapper for wxConfigBase) router: free angle mode (mark obstacles only) & persistent settings

This commit is contained in:
Tomasz Wlostowski 2015-07-02 16:09:51 +02:00 committed by Maciej Suminski
parent 7724c581fd
commit a86fda1d37
15 changed files with 505 additions and 8 deletions

View File

@ -25,6 +25,8 @@
#include <tool/tool_event.h> #include <tool/tool_event.h>
#include <tool/tool_manager.h> #include <tool/tool_manager.h>
#include <wxPcbStruct.h> // LAME!
KIGFX::VIEW* TOOL_BASE::getView() const KIGFX::VIEW* TOOL_BASE::getView() const
{ {
return m_toolMgr->GetView(); return m_toolMgr->GetView();
@ -47,3 +49,43 @@ EDA_ITEM* TOOL_BASE::getModelInt() const
{ {
return m_toolMgr->GetModel(); return m_toolMgr->GetModel();
} }
void TOOL_BASE::attachManager( TOOL_MANAGER* aManager )
{
m_toolMgr = aManager;
m_toolSettings = TOOL_SETTINGS ( this );
}
TOOL_SETTINGS::TOOL_SETTINGS ( TOOL_BASE *aTool )
{
m_tool = aTool;
if(!aTool)
{
m_config = NULL;
return;
}
// fixme: make independent of pcbnew (post-stable)
PCB_EDIT_FRAME *frame = aTool->getEditFrame<PCB_EDIT_FRAME> ();
m_config = frame->GetSettings();
}
TOOL_SETTINGS::~TOOL_SETTINGS ()
{
}
TOOL_SETTINGS& TOOL_BASE::GetSettings()
{
return m_toolSettings;
}
wxString TOOL_SETTINGS::getKeyName(const wxString& entryName) const
{
wxString key ( m_tool->GetName() );
key += wxT(".");
key += entryName;
return key;
}

View File

@ -236,7 +236,7 @@ void TOOL_MANAGER::RegisterTool( TOOL_BASE* aTool )
m_toolIdIndex[aTool->GetId()] = st; m_toolIdIndex[aTool->GetId()] = st;
m_toolTypes[typeid( *aTool ).name()] = st->theTool; m_toolTypes[typeid( *aTool ).name()] = st->theTool;
aTool->m_toolMgr = this; aTool->attachManager( this );
if( !aTool->Init() ) if( !aTool->Init() )
{ {

View File

@ -29,6 +29,8 @@
#include <base_struct.h> // for KICAD_T #include <base_struct.h> // for KICAD_T
#include <tool/tool_event.h> #include <tool/tool_event.h>
#include <tool/tool_settings.h>
#include <tool/delegate.h> #include <tool/delegate.h>
class EDA_ITEM; class EDA_ITEM;
@ -147,8 +149,11 @@ public:
*/ */
virtual void SetTransitions() {}; virtual void SetTransitions() {};
TOOL_SETTINGS& GetSettings();
protected: protected:
friend class TOOL_MANAGER; friend class TOOL_MANAGER;
friend class TOOL_SETTINGS;
/** /**
* Function attachManager() * Function attachManager()
@ -209,6 +214,7 @@ protected:
///> (eg. pcbnew.InteractiveSelection). ///> (eg. pcbnew.InteractiveSelection).
std::string m_toolName; std::string m_toolName;
TOOL_MANAGER* m_toolMgr; TOOL_MANAGER* m_toolMgr;
TOOL_SETTINGS m_toolSettings;
private: private:
// hide the implementation to avoid spreading half of // hide the implementation to avoid spreading half of

View File

@ -0,0 +1,74 @@
/*
* This program source code file is part of KiCad, a free EDA CAD application.
*
* Copyright (C) 2015 CERN
* @author Tomasz Wlostowski <tomasz.wlostowski@cern.ch>
*
* 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 __TOOL_SETTINGS_H
#define __TOOL_SETTINGS_H
#include <wx/confbase.h>
/**
* Class TOOL_SETTINGS
*
* Manages persistent settings for a tool (just a simple wrapper to wxConfigBase)
*/
class TOOL_BASE;
class TOOL_SETTINGS
{
public:
TOOL_SETTINGS ( TOOL_BASE *aTool = NULL );
~TOOL_SETTINGS ();
template <class T>
T Get( const wxString& aName, T aDefaultValue ) const
{
if(!m_config)
return aDefaultValue;
T tmp = aDefaultValue;
m_config->Read ( getKeyName( aName ), &tmp );
return tmp;
}
template <class T>
void Set( const wxString& aName, const T &aValue )
{
if(!m_config)
return;
m_config->Write ( getKeyName( aName ), aValue );
}
private:
wxString getKeyName(const wxString& entryName) const;
wxConfigBase *m_config;
TOOL_BASE *m_tool;
};
#endif

View File

@ -395,6 +395,8 @@ public:
void SaveSettings( wxConfigBase* aCfg ); // override virtual void SaveSettings( wxConfigBase* aCfg ); // override virtual
wxConfigBase *GetSettings() { return config(); };
/** /**
* Get the last net list read with the net list dialog box. * Get the last net list read with the net list dialog box.
* *

View File

@ -41,6 +41,8 @@ DIALOG_PNS_SETTINGS::DIALOG_PNS_SETTINGS( wxWindow* aParent, PNS_ROUTING_SETTING
m_effort->SetValue( m_settings.OptimizerEffort() ); m_effort->SetValue( m_settings.OptimizerEffort() );
m_smoothDragged->SetValue( m_settings.SmoothDraggedSegments() ); m_smoothDragged->SetValue( m_settings.SmoothDraggedSegments() );
m_violateDrc->SetValue( m_settings.CanViolateDRC() ); m_violateDrc->SetValue( m_settings.CanViolateDRC() );
m_freeAngleMode->SetValue( m_settings.GetFreeAngleMode() );
SetDefaultItem( m_stdButtonsOK ); SetDefaultItem( m_stdButtonsOK );
GetSizer()->Fit( this ); GetSizer()->Fit( this );
@ -67,6 +69,7 @@ void DIALOG_PNS_SETTINGS::OnOkClick( wxCommandEvent& aEvent )
m_settings.SetOptimizerEffort( (PNS_OPTIMIZATION_EFFORT) m_effort->GetValue() ); m_settings.SetOptimizerEffort( (PNS_OPTIMIZATION_EFFORT) m_effort->GetValue() );
m_settings.SetSmoothDraggedSegments( m_smoothDragged->GetValue() ); m_settings.SetSmoothDraggedSegments( m_smoothDragged->GetValue() );
m_settings.SetCanViolateDRC( m_violateDrc->GetValue() ); m_settings.SetCanViolateDRC( m_violateDrc->GetValue() );
m_settings.SetFreeAngleMode( m_freeAngleMode->GetValue() );
EndModal( 1 ); EndModal( 1 );
} }

View File

@ -1,5 +1,5 @@
/////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////
// C++ code generated with wxFormBuilder (version Jun 5 2014) // C++ code generated with wxFormBuilder (version Jun 6 2014)
// http://www.wxformbuilder.org/ // http://www.wxformbuilder.org/
// //
// PLEASE DO "NOT" EDIT THIS FILE! // PLEASE DO "NOT" EDIT THIS FILE!
@ -25,7 +25,31 @@ DIALOG_PNS_SETTINGS_BASE::DIALOG_PNS_SETTINGS_BASE( wxWindow* parent, wxWindowID
wxStaticBoxSizer* bOptions; wxStaticBoxSizer* bOptions;
bOptions = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Options") ), wxVERTICAL ); bOptions = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Options") ), wxVERTICAL );
wxFlexGridSizer* fgSizer1;
fgSizer1 = new wxFlexGridSizer( 0, 2, 0, 0 );
fgSizer1->AddGrowableCol( 1 );
fgSizer1->SetFlexibleDirection( wxBOTH );
fgSizer1->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
m_staticText4 = new wxStaticText( this, wxID_ANY, _("Mouse drag behaviour:"), wxDefaultPosition, wxDefaultSize, 0 );
m_staticText4->Wrap( -1 );
fgSizer1->Add( m_staticText4, 0, wxTOP|wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL, 5 );
wxString m_dragToolModeChoices[] = { _("move item"), _("interactive drag") };
int m_dragToolModeNChoices = sizeof( m_dragToolModeChoices ) / sizeof( wxString );
m_dragToolMode = new wxChoice( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_dragToolModeNChoices, m_dragToolModeChoices, 0 );
m_dragToolMode->SetSelection( 0 );
fgSizer1->Add( m_dragToolMode, 1, wxALIGN_CENTER_VERTICAL|wxTOP|wxRIGHT|wxLEFT|wxEXPAND, 5 );
bOptions->Add( fgSizer1, 1, wxEXPAND, 5 );
m_freeAngleMode = new wxCheckBox( this, wxID_ANY, _("Free angle mode (no shove/walkaround)"), wxDefaultPosition, wxDefaultSize, 0 );
bOptions->Add( m_freeAngleMode, 0, wxTOP|wxRIGHT|wxLEFT, 5 );
m_shoveVias = new wxCheckBox( this, wxID_ANY, _("Shove vias"), wxDefaultPosition, wxDefaultSize, 0 ); m_shoveVias = new wxCheckBox( this, wxID_ANY, _("Shove vias"), wxDefaultPosition, wxDefaultSize, 0 );
m_shoveVias->Enable( false );
bOptions->Add( m_shoveVias, 0, wxTOP|wxRIGHT|wxLEFT, 5 ); bOptions->Add( m_shoveVias, 0, wxTOP|wxRIGHT|wxLEFT, 5 );
m_backPressure = new wxCheckBox( this, wxID_ANY, _("Jump over obstacles"), wxDefaultPosition, wxDefaultSize, 0 ); m_backPressure = new wxCheckBox( this, wxID_ANY, _("Jump over obstacles"), wxDefaultPosition, wxDefaultSize, 0 );
@ -112,6 +136,7 @@ DIALOG_PNS_SETTINGS_BASE::DIALOG_PNS_SETTINGS_BASE( wxWindow* parent, wxWindowID
// Connect Events // Connect Events
this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( DIALOG_PNS_SETTINGS_BASE::OnClose ) ); this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( DIALOG_PNS_SETTINGS_BASE::OnClose ) );
m_freeAngleMode->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( DIALOG_PNS_SETTINGS_BASE::onFreeAngleModeChange ), NULL, this );
m_stdButtonsCancel->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_PNS_SETTINGS_BASE::OnCancelClick ), NULL, this ); m_stdButtonsCancel->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_PNS_SETTINGS_BASE::OnCancelClick ), NULL, this );
m_stdButtonsOK->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_PNS_SETTINGS_BASE::OnOkClick ), NULL, this ); m_stdButtonsOK->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_PNS_SETTINGS_BASE::OnOkClick ), NULL, this );
} }
@ -120,6 +145,7 @@ DIALOG_PNS_SETTINGS_BASE::~DIALOG_PNS_SETTINGS_BASE()
{ {
// Disconnect Events // Disconnect Events
this->Disconnect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( DIALOG_PNS_SETTINGS_BASE::OnClose ) ); this->Disconnect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( DIALOG_PNS_SETTINGS_BASE::OnClose ) );
m_freeAngleMode->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( DIALOG_PNS_SETTINGS_BASE::onFreeAngleModeChange ), NULL, this );
m_stdButtonsCancel->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_PNS_SETTINGS_BASE::OnCancelClick ), NULL, this ); m_stdButtonsCancel->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_PNS_SETTINGS_BASE::OnCancelClick ), NULL, this );
m_stdButtonsOK->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_PNS_SETTINGS_BASE::OnOkClick ), NULL, this ); m_stdButtonsOK->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_PNS_SETTINGS_BASE::OnOkClick ), NULL, this );

View File

@ -195,6 +195,283 @@
<property name="orient">wxVERTICAL</property> <property name="orient">wxVERTICAL</property>
<property name="permission">none</property> <property name="permission">none</property>
<event name="OnUpdateUI"></event> <event name="OnUpdateUI"></event>
<object class="sizeritem" expanded="1">
<property name="border">5</property>
<property name="flag">wxEXPAND</property>
<property name="proportion">1</property>
<object class="wxFlexGridSizer" expanded="1">
<property name="cols">2</property>
<property name="flexible_direction">wxBOTH</property>
<property name="growablecols">1</property>
<property name="growablerows"></property>
<property name="hgap">0</property>
<property name="minimum_size"></property>
<property name="name">fgSizer1</property>
<property name="non_flexible_grow_mode">wxFLEX_GROWMODE_SPECIFIED</property>
<property name="permission">none</property>
<property name="rows">0</property>
<property name="vgap">0</property>
<object class="sizeritem" expanded="1">
<property name="border">5</property>
<property name="flag">wxTOP|wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL</property>
<property name="proportion">0</property>
<object class="wxStaticText" expanded="1">
<property name="BottomDockable">1</property>
<property name="LeftDockable">1</property>
<property name="RightDockable">1</property>
<property name="TopDockable">1</property>
<property name="aui_layer"></property>
<property name="aui_name"></property>
<property name="aui_position"></property>
<property name="aui_row"></property>
<property name="best_size"></property>
<property name="bg"></property>
<property name="caption"></property>
<property name="caption_visible">1</property>
<property name="center_pane">0</property>
<property name="close_button">1</property>
<property name="context_help"></property>
<property name="context_menu">1</property>
<property name="default_pane">0</property>
<property name="dock">Dock</property>
<property name="dock_fixed">0</property>
<property name="docking">Left</property>
<property name="enabled">1</property>
<property name="fg"></property>
<property name="floatable">1</property>
<property name="font"></property>
<property name="gripper">0</property>
<property name="hidden">0</property>
<property name="id">wxID_ANY</property>
<property name="label">Mouse drag behaviour:</property>
<property name="max_size"></property>
<property name="maximize_button">0</property>
<property name="maximum_size"></property>
<property name="min_size"></property>
<property name="minimize_button">0</property>
<property name="minimum_size"></property>
<property name="moveable">1</property>
<property name="name">m_staticText4</property>
<property name="pane_border">1</property>
<property name="pane_position"></property>
<property name="pane_size"></property>
<property name="permission">protected</property>
<property name="pin_button">1</property>
<property name="pos"></property>
<property name="resize">Resizable</property>
<property name="show">1</property>
<property name="size"></property>
<property name="style"></property>
<property name="subclass"></property>
<property name="toolbar_pane">0</property>
<property name="tooltip"></property>
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></property>
<property name="wrap">-1</property>
<event name="OnChar"></event>
<event name="OnEnterWindow"></event>
<event name="OnEraseBackground"></event>
<event name="OnKeyDown"></event>
<event name="OnKeyUp"></event>
<event name="OnKillFocus"></event>
<event name="OnLeaveWindow"></event>
<event name="OnLeftDClick"></event>
<event name="OnLeftDown"></event>
<event name="OnLeftUp"></event>
<event name="OnMiddleDClick"></event>
<event name="OnMiddleDown"></event>
<event name="OnMiddleUp"></event>
<event name="OnMotion"></event>
<event name="OnMouseEvents"></event>
<event name="OnMouseWheel"></event>
<event name="OnPaint"></event>
<event name="OnRightDClick"></event>
<event name="OnRightDown"></event>
<event name="OnRightUp"></event>
<event name="OnSetFocus"></event>
<event name="OnSize"></event>
<event name="OnUpdateUI"></event>
</object>
</object>
<object class="sizeritem" expanded="1">
<property name="border">5</property>
<property name="flag">wxALIGN_CENTER_VERTICAL|wxTOP|wxRIGHT|wxLEFT|wxEXPAND</property>
<property name="proportion">1</property>
<object class="wxChoice" expanded="1">
<property name="BottomDockable">1</property>
<property name="LeftDockable">1</property>
<property name="RightDockable">1</property>
<property name="TopDockable">1</property>
<property name="aui_layer"></property>
<property name="aui_name"></property>
<property name="aui_position"></property>
<property name="aui_row"></property>
<property name="best_size"></property>
<property name="bg"></property>
<property name="caption"></property>
<property name="caption_visible">1</property>
<property name="center_pane">0</property>
<property name="choices">&quot;move item&quot; &quot;interactive drag&quot;</property>
<property name="close_button">1</property>
<property name="context_help"></property>
<property name="context_menu">1</property>
<property name="default_pane">0</property>
<property name="dock">Dock</property>
<property name="dock_fixed">0</property>
<property name="docking">Left</property>
<property name="enabled">1</property>
<property name="fg"></property>
<property name="floatable">1</property>
<property name="font"></property>
<property name="gripper">0</property>
<property name="hidden">0</property>
<property name="id">wxID_ANY</property>
<property name="max_size"></property>
<property name="maximize_button">0</property>
<property name="maximum_size"></property>
<property name="min_size"></property>
<property name="minimize_button">0</property>
<property name="minimum_size"></property>
<property name="moveable">1</property>
<property name="name">m_dragToolMode</property>
<property name="pane_border">1</property>
<property name="pane_position"></property>
<property name="pane_size"></property>
<property name="permission">protected</property>
<property name="pin_button">1</property>
<property name="pos"></property>
<property name="resize">Resizable</property>
<property name="selection">0</property>
<property name="show">1</property>
<property name="size"></property>
<property name="style"></property>
<property name="subclass"></property>
<property name="toolbar_pane">0</property>
<property name="tooltip"></property>
<property name="validator_data_type"></property>
<property name="validator_style">wxFILTER_NONE</property>
<property name="validator_type">wxDefaultValidator</property>
<property name="validator_variable"></property>
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></property>
<event name="OnChar"></event>
<event name="OnChoice"></event>
<event name="OnEnterWindow"></event>
<event name="OnEraseBackground"></event>
<event name="OnKeyDown"></event>
<event name="OnKeyUp"></event>
<event name="OnKillFocus"></event>
<event name="OnLeaveWindow"></event>
<event name="OnLeftDClick"></event>
<event name="OnLeftDown"></event>
<event name="OnLeftUp"></event>
<event name="OnMiddleDClick"></event>
<event name="OnMiddleDown"></event>
<event name="OnMiddleUp"></event>
<event name="OnMotion"></event>
<event name="OnMouseEvents"></event>
<event name="OnMouseWheel"></event>
<event name="OnPaint"></event>
<event name="OnRightDClick"></event>
<event name="OnRightDown"></event>
<event name="OnRightUp"></event>
<event name="OnSetFocus"></event>
<event name="OnSize"></event>
<event name="OnUpdateUI"></event>
</object>
</object>
</object>
</object>
<object class="sizeritem" expanded="1">
<property name="border">5</property>
<property name="flag">wxTOP|wxRIGHT|wxLEFT</property>
<property name="proportion">0</property>
<object class="wxCheckBox" expanded="1">
<property name="BottomDockable">1</property>
<property name="LeftDockable">1</property>
<property name="RightDockable">1</property>
<property name="TopDockable">1</property>
<property name="aui_layer"></property>
<property name="aui_name"></property>
<property name="aui_position"></property>
<property name="aui_row"></property>
<property name="best_size"></property>
<property name="bg"></property>
<property name="caption"></property>
<property name="caption_visible">1</property>
<property name="center_pane">0</property>
<property name="checked">0</property>
<property name="close_button">1</property>
<property name="context_help"></property>
<property name="context_menu">1</property>
<property name="default_pane">0</property>
<property name="dock">Dock</property>
<property name="dock_fixed">0</property>
<property name="docking">Left</property>
<property name="enabled">1</property>
<property name="fg"></property>
<property name="floatable">1</property>
<property name="font"></property>
<property name="gripper">0</property>
<property name="hidden">0</property>
<property name="id">wxID_ANY</property>
<property name="label">Free angle mode (no shove/walkaround)</property>
<property name="max_size"></property>
<property name="maximize_button">0</property>
<property name="maximum_size"></property>
<property name="min_size"></property>
<property name="minimize_button">0</property>
<property name="minimum_size"></property>
<property name="moveable">1</property>
<property name="name">m_freeAngleMode</property>
<property name="pane_border">1</property>
<property name="pane_position"></property>
<property name="pane_size"></property>
<property name="permission">protected</property>
<property name="pin_button">1</property>
<property name="pos"></property>
<property name="resize">Resizable</property>
<property name="show">1</property>
<property name="size"></property>
<property name="style"></property>
<property name="subclass"></property>
<property name="toolbar_pane">0</property>
<property name="tooltip"></property>
<property name="validator_data_type"></property>
<property name="validator_style">wxFILTER_NONE</property>
<property name="validator_type">wxDefaultValidator</property>
<property name="validator_variable"></property>
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></property>
<event name="OnChar"></event>
<event name="OnCheckBox">onFreeAngleModeChange</event>
<event name="OnEnterWindow"></event>
<event name="OnEraseBackground"></event>
<event name="OnKeyDown"></event>
<event name="OnKeyUp"></event>
<event name="OnKillFocus"></event>
<event name="OnLeaveWindow"></event>
<event name="OnLeftDClick"></event>
<event name="OnLeftDown"></event>
<event name="OnLeftUp"></event>
<event name="OnMiddleDClick"></event>
<event name="OnMiddleDown"></event>
<event name="OnMiddleUp"></event>
<event name="OnMotion"></event>
<event name="OnMouseEvents"></event>
<event name="OnMouseWheel"></event>
<event name="OnPaint"></event>
<event name="OnRightDClick"></event>
<event name="OnRightDown"></event>
<event name="OnRightUp"></event>
<event name="OnSetFocus"></event>
<event name="OnSize"></event>
<event name="OnUpdateUI"></event>
</object>
</object>
<object class="sizeritem" expanded="0"> <object class="sizeritem" expanded="0">
<property name="border">5</property> <property name="border">5</property>
<property name="flag">wxTOP|wxRIGHT|wxLEFT</property> <property name="flag">wxTOP|wxRIGHT|wxLEFT</property>
@ -221,7 +498,7 @@
<property name="dock">Dock</property> <property name="dock">Dock</property>
<property name="dock_fixed">0</property> <property name="dock_fixed">0</property>
<property name="docking">Left</property> <property name="docking">Left</property>
<property name="enabled">1</property> <property name="enabled">0</property>
<property name="fg"></property> <property name="fg"></property>
<property name="floatable">1</property> <property name="floatable">1</property>
<property name="font"></property> <property name="font"></property>

View File

@ -1,5 +1,5 @@
/////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////
// C++ code generated with wxFormBuilder (version Jun 5 2014) // C++ code generated with wxFormBuilder (version Jun 6 2014)
// http://www.wxformbuilder.org/ // http://www.wxformbuilder.org/
// //
// PLEASE DO "NOT" EDIT THIS FILE! // PLEASE DO "NOT" EDIT THIS FILE!
@ -20,11 +20,12 @@ class DIALOG_SHIM;
#include <wx/font.h> #include <wx/font.h>
#include <wx/colour.h> #include <wx/colour.h>
#include <wx/settings.h> #include <wx/settings.h>
#include <wx/stattext.h>
#include <wx/choice.h>
#include <wx/sizer.h>
#include <wx/checkbox.h> #include <wx/checkbox.h>
#include <wx/statline.h> #include <wx/statline.h>
#include <wx/stattext.h>
#include <wx/slider.h> #include <wx/slider.h>
#include <wx/sizer.h>
#include <wx/statbox.h> #include <wx/statbox.h>
#include <wx/button.h> #include <wx/button.h>
#include <wx/dialog.h> #include <wx/dialog.h>
@ -41,6 +42,9 @@ class DIALOG_PNS_SETTINGS_BASE : public DIALOG_SHIM
protected: protected:
wxRadioBox* m_mode; wxRadioBox* m_mode;
wxStaticText* m_staticText4;
wxChoice* m_dragToolMode;
wxCheckBox* m_freeAngleMode;
wxCheckBox* m_shoveVias; wxCheckBox* m_shoveVias;
wxCheckBox* m_backPressure; wxCheckBox* m_backPressure;
wxCheckBox* m_removeLoops; wxCheckBox* m_removeLoops;
@ -59,6 +63,7 @@ class DIALOG_PNS_SETTINGS_BASE : public DIALOG_SHIM
// Virtual event handlers, overide them in your derived class // Virtual event handlers, overide them in your derived class
virtual void OnClose( wxCloseEvent& event ) { event.Skip(); } virtual void OnClose( wxCloseEvent& event ) { event.Skip(); }
virtual void onFreeAngleModeChange( wxCommandEvent& event ) { event.Skip(); }
virtual void OnCancelClick( wxCommandEvent& event ) { event.Skip(); } virtual void OnCancelClick( wxCommandEvent& event ) { event.Skip(); }
virtual void OnOkClick( wxCommandEvent& event ) { event.Skip(); } virtual void OnOkClick( wxCommandEvent& event ) { event.Skip(); }

View File

@ -1028,8 +1028,13 @@ bool PNS_LINE_PLACER::buildInitialLine( const VECTOR2I& aP, PNS_LINE& aHead )
if(m_p_start == aP) if(m_p_start == aP)
{ {
l.Clear(); l.Clear();
} else {
if( Settings().GetFreeAngleMode() && Settings().Mode() == RM_MarkObstacles )
{
l = SHAPE_LINE_CHAIN ( m_p_start, aP );
} else { } else {
l = m_direction.BuildInitialTrace( m_p_start, aP ); l = m_direction.BuildInitialTrace( m_p_start, aP );
}
if( l.SegmentCount() > 1 && m_orthoMode ) if( l.SegmentCount() > 1 && m_orthoMode )
{ {

View File

@ -18,6 +18,8 @@
* with this program. If not, see <http://www.gnu.org/licenses/>. * with this program. If not, see <http://www.gnu.org/licenses/>.
*/ */
#include <tool/tool_settings.h>
#include "pns_routing_settings.h" #include "pns_routing_settings.h"
#include "direction.h" #include "direction.h"
@ -37,8 +39,44 @@ PNS_ROUTING_SETTINGS::PNS_ROUTING_SETTINGS()
m_jumpOverObstacles = false; m_jumpOverObstacles = false;
m_smoothDraggedSegments = true; m_smoothDraggedSegments = true;
m_canViolateDRC = false; m_canViolateDRC = false;
m_freeAngleMode = false;
} }
void PNS_ROUTING_SETTINGS::Save ( TOOL_SETTINGS& aSettings ) const
{
aSettings.Set( "Mode", (int)m_routingMode );
aSettings.Set( "OptimizerEffort", (int) m_optimizerEffort );
aSettings.Set( "RemoveLoops", m_removeLoops );
aSettings.Set( "SmartPads", m_smartPads );
aSettings.Set( "ShoveVias", m_shoveVias );
aSettings.Set( "StartDiagonal", m_startDiagonal );
aSettings.Set( "ShoveTimeLimit", m_shoveTimeLimit.Get() );
aSettings.Set( "ShoveIterationLimit", m_shoveIterationLimit );
aSettings.Set( "WalkaroundIterationLimit", m_walkaroundIterationLimit );
aSettings.Set( "JumpOverObstacles", m_jumpOverObstacles );
aSettings.Set( "SmoothDraggedSegments", m_smoothDraggedSegments );
aSettings.Set( "CanViolateDRC", m_canViolateDRC );
aSettings.Set( "SuggestFinish", m_suggestFinish );
aSettings.Set( "FreeAngleMode", m_freeAngleMode );
}
void PNS_ROUTING_SETTINGS::Load ( const TOOL_SETTINGS& aSettings )
{
m_routingMode = (PNS_MODE) aSettings.Get( "Mode", (int) RM_Walkaround );
m_optimizerEffort = (PNS_OPTIMIZATION_EFFORT) aSettings.Get( "OptimizerEffort", (int) OE_MEDIUM );
m_removeLoops = aSettings.Get( "RemoveLoops", true );
m_smartPads = aSettings.Get( "SmartPads", true );
m_shoveVias = aSettings.Get( "ShoveVias", true );
m_startDiagonal = aSettings.Get( "StartDiagonal", false );
m_shoveTimeLimit.Set( aSettings.Get( "ShoveTimeLimit", 1000 ) );
m_shoveIterationLimit = aSettings.Get( "ShoveIterationLimit", 250 );
m_walkaroundIterationLimit = aSettings.Get( "WalkaroundIterationLimit", 50 );
m_jumpOverObstacles = aSettings.Get( "JumpOverObstacles", false );
m_smoothDraggedSegments = aSettings.Get( "SmoothDraggedSegments", true );
m_canViolateDRC = aSettings.Get( "CanViolateDRC", false );
m_suggestFinish = aSettings.Get( "SuggestFinish", false );
m_freeAngleMode = aSettings.Get( "FreeAngleMode", false );
}
const DIRECTION_45 PNS_ROUTING_SETTINGS::InitialDirection() const const DIRECTION_45 PNS_ROUTING_SETTINGS::InitialDirection() const
{ {

View File

@ -26,6 +26,7 @@
#include "time_limit.h" #include "time_limit.h"
class DIRECTION_45; class DIRECTION_45;
class TOOL_SETTINGS;
///> Routing modes ///> Routing modes
enum PNS_MODE enum PNS_MODE
@ -55,6 +56,9 @@ class PNS_ROUTING_SETTINGS
public: public:
PNS_ROUTING_SETTINGS(); PNS_ROUTING_SETTINGS();
void Load ( const TOOL_SETTINGS& where );
void Save ( TOOL_SETTINGS& where ) const;
///> Returns the routing mode. ///> Returns the routing mode.
PNS_MODE Mode() const { return m_routingMode; } PNS_MODE Mode() const { return m_routingMode; }
@ -114,6 +118,10 @@ public:
bool CanViolateDRC() const { return m_canViolateDRC; } bool CanViolateDRC() const { return m_canViolateDRC; }
void SetCanViolateDRC( bool aViolate ) { m_canViolateDRC = aViolate; } void SetCanViolateDRC( bool aViolate ) { m_canViolateDRC = aViolate; }
bool GetFreeAngleMode() const { return m_freeAngleMode; }
void SetFreeAngleMode( bool aEnable ) { m_freeAngleMode = aEnable; }
const DIRECTION_45 InitialDirection() const; const DIRECTION_45 InitialDirection() const;
int ShoveIterationLimit() const; int ShoveIterationLimit() const;
@ -133,6 +141,7 @@ private:
bool m_jumpOverObstacles; bool m_jumpOverObstacles;
bool m_smoothDraggedSegments; bool m_smoothDraggedSegments;
bool m_canViolateDRC; bool m_canViolateDRC;
bool m_freeAngleMode;
PNS_MODE m_routingMode; PNS_MODE m_routingMode;
PNS_OPTIMIZATION_EFFORT m_optimizerEffort; PNS_OPTIMIZATION_EFFORT m_optimizerEffort;

View File

@ -42,6 +42,7 @@
#include <tool/context_menu.h> #include <tool/context_menu.h>
#include <tool/tool_manager.h> #include <tool/tool_manager.h>
#include <tool/tool_settings.h>
#include <tools/common_actions.h> #include <tools/common_actions.h>
#include <ratsnest_data.h> #include <ratsnest_data.h>
@ -260,6 +261,13 @@ public:
ROUTER_TOOL::~ROUTER_TOOL() ROUTER_TOOL::~ROUTER_TOOL()
{ {
m_savedSettings.Save( GetSettings() );
}
bool ROUTER_TOOL::Init()
{
m_savedSettings.Load( GetSettings() );
return true;
} }

View File

@ -30,6 +30,7 @@ public:
ROUTER_TOOL(); ROUTER_TOOL();
~ROUTER_TOOL(); ~ROUTER_TOOL();
bool Init();
void Reset( RESET_REASON aReason ); void Reset( RESET_REASON aReason );
int RouteSingleTrace ( const TOOL_EVENT& aEvent ); int RouteSingleTrace ( const TOOL_EVENT& aEvent );

View File

@ -33,6 +33,7 @@ public:
void Restart(); void Restart();
void Set( int aMilliseconds ); void Set( int aMilliseconds );
int Get () const { return m_limitMs; }
private: private:
int m_limitMs; int m_limitMs;