From ca11fcb5c9a88554191aa264cf8eaffea87fbf8c Mon Sep 17 00:00:00 2001 From: Wayne Stambaugh Date: Tue, 17 Dec 2013 16:38:20 -0500 Subject: [PATCH] Pcbnew: change general properties dialog rotation angle to text edit control. --- common/string.cpp | 15 +++++++++++++++ include/kicad_string.h | 12 ++++++++++++ pcbnew/dialogs/dialog_general_options.cpp | 16 +++++----------- .../dialog_general_options_BoardEditor_base.cpp | 9 +++------ .../dialog_general_options_BoardEditor_base.fbp | 15 +++++++++------ .../dialog_general_options_BoardEditor_base.h | 4 ++-- pcbnew/edit.cpp | 5 ++--- pcbnew/pcbframe.cpp | 2 +- pcbnew/pcbnew_config.cpp | 2 +- 9 files changed, 50 insertions(+), 30 deletions(-) diff --git a/common/string.cpp b/common/string.cpp index 7d3a74f0c4..86b60d938f 100644 --- a/common/string.cpp +++ b/common/string.cpp @@ -477,3 +477,18 @@ bool ReplaceIllegalFileNameChars( std::string* aName ) return changed; } + + +wxString RemoveTrailingZeros( const wxString& aString ) +{ + wxString retv = aString; + int i = retv.Length(); + + while( --i > 0 && retv[i] == wxChar( '0' ) ) + retv.RemoveLast(); + + if( retv[i] == wxChar( '.' ) ) + retv.RemoveLast(); + + return retv; +} diff --git a/include/kicad_string.h b/include/kicad_string.h index 314e803a8f..ee13446132 100644 --- a/include/kicad_string.h +++ b/include/kicad_string.h @@ -164,6 +164,18 @@ wxString GetIllegalFileNameWxChars(); */ bool ReplaceIllegalFileNameChars( std::string* aName ); +/** + * Function RemoveTrailingZeros + * removes the trailing zeros from \a aString. + * + * All trailing zeros and the '.' character from floating point numbers are removed from + * \a aString. + * + * @param aString is a wxString object to remove the trailing zeros from. + * @return a wxString with the trailing zeros removed. + */ +wxString RemoveTrailingZeros( const wxString& aString ); + #ifndef HAVE_STRTOKR // common/strtok_r.c optionally: extern "C" char* strtok_r( char* str, const char* delim, char** nextp ); diff --git a/pcbnew/dialogs/dialog_general_options.cpp b/pcbnew/dialogs/dialog_general_options.cpp index 8a57f7461c..3470426f2c 100644 --- a/pcbnew/dialogs/dialog_general_options.cpp +++ b/pcbnew/dialogs/dialog_general_options.cpp @@ -37,7 +37,7 @@ #include #include #include - +#include #include #include @@ -69,15 +69,9 @@ void DIALOG_GENERALOPTIONS::init() m_CursorShape->SetSelection( GetParent()->GetCursorShape() ? 1 : 0 ); - switch( GetParent()->GetRotationAngle() ) - { - case 450: - m_RotationAngle->SetSelection( 0 ); - break; - - default: - m_RotationAngle->SetSelection( 1 ); - } + wxString rotationAngle; + rotationAngle.Printf( wxT( "%.1f" ), ((double)GetParent()->GetRotationAngle()) / 10.0 ); + m_RotationAngle->SetValue( RemoveTrailingZeros( rotationAngle ) ); wxString timevalue; timevalue << GetParent()->GetAutoSaveInterval() / 60; @@ -121,7 +115,7 @@ void DIALOG_GENERALOPTIONS::OnOkClick( wxCommandEvent& event ) GetParent()->SetCursorShape( m_CursorShape->GetSelection() ); GetParent()->SetAutoSaveInterval( m_SaveTime->GetValue() * 60 ); - GetParent()->SetRotationAngle( 10 * wxAtoi( m_RotationAngle->GetStringSelection() ) ); + GetParent()->SetRotationAngle( wxRound( 10.0 * wxAtof( m_RotationAngle->GetValue() ) ) ); /* Updating the combobox to display the active layer. */ g_MaxLinksShowed = m_MaxShowLinks->GetValue(); diff --git a/pcbnew/dialogs/dialog_general_options_BoardEditor_base.cpp b/pcbnew/dialogs/dialog_general_options_BoardEditor_base.cpp index a368448e28..6a2daad28a 100644 --- a/pcbnew/dialogs/dialog_general_options_BoardEditor_base.cpp +++ b/pcbnew/dialogs/dialog_general_options_BoardEditor_base.cpp @@ -79,13 +79,10 @@ DIALOG_GENERALOPTIONS_BOARDEDITOR_BASE::DIALOG_GENERALOPTIONS_BOARDEDITOR_BASE( m_staticTextRotationAngle->Wrap( -1 ); fgSizer1->Add( m_staticTextRotationAngle, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); - wxString m_RotationAngleChoices[] = { _("45"), _("90") }; - int m_RotationAngleNChoices = sizeof( m_RotationAngleChoices ) / sizeof( wxString ); - m_RotationAngle = new wxChoice( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_RotationAngleNChoices, m_RotationAngleChoices, 0 ); - m_RotationAngle->SetSelection( 0 ); - m_RotationAngle->SetToolTip( _("Footprints rotation increment, for rotate menu or hot key.") ); + m_RotationAngle = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); + m_RotationAngle->SetToolTip( _("Context menu and hot key footprint rotation increment.") ); - fgSizer1->Add( m_RotationAngle, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); + fgSizer1->Add( m_RotationAngle, 0, wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxLEFT|wxRIGHT, 5 ); bMiddleLeftSizer->Add( fgSizer1, 0, wxEXPAND, 5 ); diff --git a/pcbnew/dialogs/dialog_general_options_BoardEditor_base.fbp b/pcbnew/dialogs/dialog_general_options_BoardEditor_base.fbp index 715589dd05..e4b73b36fa 100644 --- a/pcbnew/dialogs/dialog_general_options_BoardEditor_base.fbp +++ b/pcbnew/dialogs/dialog_general_options_BoardEditor_base.fbp @@ -831,9 +831,9 @@ 5 - wxALIGN_CENTER_VERTICAL|wxALL + wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxLEFT|wxRIGHT 0 - + 1 1 1 @@ -847,7 +847,6 @@ 1 0 - "45" "90" 1 1 @@ -865,6 +864,7 @@ 0 + 0 @@ -877,22 +877,21 @@ 1 Resizable - 0 1 0 - Footprints rotation increment, for rotate menu or hot key. + Context menu and hot key footprint rotation increment. wxFILTER_NONE wxDefaultValidator + - @@ -914,6 +913,10 @@ + + + + diff --git a/pcbnew/dialogs/dialog_general_options_BoardEditor_base.h b/pcbnew/dialogs/dialog_general_options_BoardEditor_base.h index e5eeb92afd..b66bb0c3f7 100644 --- a/pcbnew/dialogs/dialog_general_options_BoardEditor_base.h +++ b/pcbnew/dialogs/dialog_general_options_BoardEditor_base.h @@ -23,7 +23,7 @@ class DIALOG_SHIM; #include #include #include -#include +#include #include #include #include @@ -64,7 +64,7 @@ class DIALOG_GENERALOPTIONS_BOARDEDITOR_BASE : public DIALOG_SHIM wxStaticText* m_staticTextautosave; wxSpinCtrl* m_SaveTime; wxStaticText* m_staticTextRotationAngle; - wxChoice* m_RotationAngle; + wxTextCtrl* m_RotationAngle; wxCheckBox* m_DrcOn; wxCheckBox* m_ShowGlobalRatsnest; wxCheckBox* m_ShowModuleRatsnest; diff --git a/pcbnew/edit.cpp b/pcbnew/edit.cpp index b535873ac4..a742523dbe 100644 --- a/pcbnew/edit.cpp +++ b/pcbnew/edit.cpp @@ -745,7 +745,7 @@ void PCB_EDIT_FRAME::Process_Special_Functions( wxCommandEvent& event ) // This is a simple rotation, no other editing in progress if( !GetCurItem()->IsMoving() ) - SaveCopyInUndoList( GetCurItem(), UR_ROTATED, ((MODULE*)GetCurItem())->GetPosition() ); + SaveCopyInUndoList( GetCurItem(), UR_CHANGED, ((MODULE*)GetCurItem())->GetPosition() ); Rotate_Module( &dc, (MODULE*) GetCurItem(), m_rotationAngle, true ); break; @@ -773,8 +773,7 @@ void PCB_EDIT_FRAME::Process_Special_Functions( wxCommandEvent& event ) // This is a simple rotation, no other editing in progress if( !GetCurItem()->IsMoving() ) - SaveCopyInUndoList( GetCurItem(), UR_ROTATED_CLOCKWISE, - ((MODULE*)GetCurItem())->GetPosition() ); + SaveCopyInUndoList( GetCurItem(), UR_CHANGED, ((MODULE*)GetCurItem())->GetPosition() ); Rotate_Module( &dc, (MODULE*) GetCurItem(), -m_rotationAngle, true ); break; diff --git a/pcbnew/pcbframe.cpp b/pcbnew/pcbframe.cpp index a9ae898d9c..44f48f5e1f 100644 --- a/pcbnew/pcbframe.cpp +++ b/pcbnew/pcbframe.cpp @@ -1077,7 +1077,7 @@ void PCB_EDIT_FRAME::ToPlotter( wxCommandEvent& event ) void PCB_EDIT_FRAME::SetRotationAngle( int aRotationAngle ) { - wxCHECK2_MSG( aRotationAngle > 0 && aRotationAngle < 900, aRotationAngle = 900, + wxCHECK2_MSG( aRotationAngle > 0 && aRotationAngle <= 900, aRotationAngle = 900, wxT( "Invalid rotation angle, defaulting to 90." ) ); m_rotationAngle = aRotationAngle; diff --git a/pcbnew/pcbnew_config.cpp b/pcbnew/pcbnew_config.cpp index 9e3b18458a..9d5b1c9724 100644 --- a/pcbnew/pcbnew_config.cpp +++ b/pcbnew/pcbnew_config.cpp @@ -479,7 +479,7 @@ PARAM_CFG_ARRAY& PCB_EDIT_FRAME::GetConfigurationSettings() // Miscellaneous: m_configSettings.push_back( new PARAM_CFG_INT( true, wxT( "RotationAngle" ), &m_rotationAngle, - 900, 450, 900 ) ); + 900, 1, 900 ) ); m_configSettings.push_back( new PARAM_CFG_INT( true, wxT( "MaxLnkS" ), &g_MaxLinksShowed, 3, 0, 15 ) ); m_configSettings.push_back( new PARAM_CFG_BOOL( true, wxT( "ShowMRa" ),