summaryrefslogtreecommitdiff
path: root/common/wxwineda.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'common/wxwineda.cpp')
-rw-r--r--common/wxwineda.cpp324
1 files changed, 324 insertions, 0 deletions
diff --git a/common/wxwineda.cpp b/common/wxwineda.cpp
new file mode 100644
index 0000000..8ff4c2c
--- /dev/null
+++ b/common/wxwineda.cpp
@@ -0,0 +1,324 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2004 Jean-Pierre Charras, jaen-pierre.charras@gipsa-lab.inpg.com
+ * Copyright (C) 1992-2011 KiCad Developers, see AUTHORS.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 wxwineda.cpp
+ */
+
+#include <fctsys.h>
+#include <wxstruct.h>
+#include <dialog_helpers.h>
+#include <base_units.h>
+#include <macros.h>
+
+
+/*******************************************************/
+/* Class to edit a graphic + text size in INCHES or MM */
+/*******************************************************/
+EDA_GRAPHIC_TEXT_CTRL::EDA_GRAPHIC_TEXT_CTRL( wxWindow* parent,
+ const wxString& Title,
+ const wxString& TextToEdit,
+ int textsize,
+ EDA_UNITS_T user_unit,
+ wxBoxSizer* BoxSizer,
+ int framelen )
+{
+ m_UserUnit = user_unit;
+ m_Title = NULL;
+
+ m_Title = new wxStaticText( parent, -1, Title );
+
+ BoxSizer->Add( m_Title, 0, wxGROW | wxLEFT | wxRIGHT | wxTOP, 5 );
+
+ m_FrameText = new wxTextCtrl( parent, -1, TextToEdit );
+
+ BoxSizer->Add( m_FrameText, 0, wxGROW | wxLEFT | wxRIGHT | wxBOTTOM, 5 );
+
+ if( !Title.IsEmpty() )
+ {
+ wxString msg;
+ msg.Printf( _( "Size%s" ), GetChars( ReturnUnitSymbol( m_UserUnit ) ) );
+ wxStaticText* text = new wxStaticText( parent, -1, msg );
+
+ BoxSizer->Add( text, 0, wxGROW | wxLEFT | wxRIGHT, 5 );
+ }
+
+ wxString value = FormatSize( m_UserUnit, textsize );
+
+ m_FrameSize = new wxTextCtrl( parent, -1, value, wxDefaultPosition, wxSize( 70, -1 ) );
+
+ BoxSizer->Add( m_FrameSize, 0, wxGROW | wxLEFT | wxRIGHT | wxBOTTOM, 5 );
+}
+
+
+EDA_GRAPHIC_TEXT_CTRL::~EDA_GRAPHIC_TEXT_CTRL()
+{
+ /* no, these are deleted by the BoxSizer
+ delete m_FrameText;
+ delete m_Title;
+ */
+}
+
+
+wxString EDA_GRAPHIC_TEXT_CTRL::FormatSize( EDA_UNITS_T aUnit, int textSize )
+{
+ // Limiting the size of the text of reasonable values.
+ if( textSize < 10 )
+ textSize = 10;
+
+ if( textSize > 3000 )
+ textSize = 3000;
+
+ return StringFromValue( aUnit, textSize );
+}
+
+
+void EDA_GRAPHIC_TEXT_CTRL::SetTitle( const wxString& title )
+{
+ m_Title->SetLabel( title );
+}
+
+
+void EDA_GRAPHIC_TEXT_CTRL::SetValue( const wxString& value )
+{
+ m_FrameText->SetValue( value );
+}
+
+
+void EDA_GRAPHIC_TEXT_CTRL::SetValue( int textSize )
+{
+ wxString value = FormatSize( m_UserUnit, textSize );
+ m_FrameSize->SetValue( value );
+}
+
+
+const wxString EDA_GRAPHIC_TEXT_CTRL::GetText() const
+{
+ wxString text = m_FrameText->GetValue();
+ return text;
+}
+
+
+int EDA_GRAPHIC_TEXT_CTRL::ParseSize( const wxString& sizeText, EDA_UNITS_T aUnit )
+{
+ int textsize;
+
+ textsize = ValueFromString( aUnit, sizeText );
+
+ // Limit to reasonable size
+ if( textsize < 10 )
+ textsize = 10;
+
+ if( textsize > 3000 )
+ textsize = 3000;
+
+ return textsize;
+}
+
+
+int EDA_GRAPHIC_TEXT_CTRL::GetTextSize()
+{
+ return ParseSize( m_FrameSize->GetValue(), m_UserUnit );
+}
+
+
+void EDA_GRAPHIC_TEXT_CTRL::Enable( bool state )
+{
+ m_FrameText->Enable( state );
+}
+
+
+/********************************************************/
+/* Class to display and edit a coordinated INCHES or MM */
+/********************************************************/
+EDA_POSITION_CTRL::EDA_POSITION_CTRL( wxWindow* parent,
+ const wxString& title,
+ const wxPoint& pos_to_edit,
+ EDA_UNITS_T user_unit,
+ wxBoxSizer* BoxSizer )
+{
+ wxString text;
+
+ m_UserUnit = user_unit;
+
+ if( title.IsEmpty() )
+ text = _( "Pos " );
+ else
+ text = title;
+
+ text += _( "X" ) + ReturnUnitSymbol( m_UserUnit );
+ m_TextX = new wxStaticText( parent, -1, text );
+
+ BoxSizer->Add( m_TextX, 0, wxGROW | wxLEFT | wxRIGHT | wxTOP, 5 );
+ m_FramePosX = new wxTextCtrl( parent, -1, wxEmptyString, wxDefaultPosition );
+
+ BoxSizer->Add( m_FramePosX, 0, wxGROW | wxLEFT | wxRIGHT | wxBOTTOM, 5 );
+
+
+ if( title.IsEmpty() )
+ text = _( "Pos " );
+ else
+ text = title;
+ text += _( "Y" ) + ReturnUnitSymbol( m_UserUnit );
+
+ m_TextY = new wxStaticText( parent, -1, text );
+
+ BoxSizer->Add( m_TextY, 0, wxGROW | wxLEFT | wxRIGHT | wxTOP, 5 );
+
+ m_FramePosY = new wxTextCtrl( parent, -1, wxEmptyString );
+
+ BoxSizer->Add( m_FramePosY, 0, wxGROW | wxLEFT | wxRIGHT | wxBOTTOM, 5 );
+
+ SetValue( pos_to_edit.x, pos_to_edit.y );
+}
+
+
+EDA_POSITION_CTRL::~EDA_POSITION_CTRL()
+{
+ delete m_TextX;
+ delete m_TextY;
+ delete m_FramePosX;
+ delete m_FramePosY;
+}
+
+
+/* Returns (in internal units) to coordinate between (in user units)
+ */
+wxPoint EDA_POSITION_CTRL::GetValue()
+{
+ wxPoint coord;
+
+ coord.x = ValueFromString( m_UserUnit, m_FramePosX->GetValue() );
+ coord.y = ValueFromString( m_UserUnit, m_FramePosY->GetValue() );
+
+ return coord;
+}
+
+
+void EDA_POSITION_CTRL::Enable( bool x_win_on, bool y_win_on )
+{
+ m_FramePosX->Enable( x_win_on );
+ m_FramePosY->Enable( y_win_on );
+}
+
+
+void EDA_POSITION_CTRL::SetValue( int x_value, int y_value )
+{
+ wxString msg;
+
+ m_Pos_To_Edit.x = x_value;
+ m_Pos_To_Edit.y = y_value;
+
+ msg = StringFromValue( m_UserUnit, m_Pos_To_Edit.x );
+ m_FramePosX->Clear();
+ m_FramePosX->SetValue( msg );
+
+ msg = StringFromValue( m_UserUnit, m_Pos_To_Edit.y );
+ m_FramePosY->Clear();
+ m_FramePosY->SetValue( msg );
+}
+
+
+/*******************/
+/* EDA_SIZE_CTRL */
+/*******************/
+EDA_SIZE_CTRL::EDA_SIZE_CTRL( wxWindow* parent, const wxString& title,
+ const wxSize& size_to_edit, EDA_UNITS_T aUnit,
+ wxBoxSizer* aBoxSizer ) :
+ EDA_POSITION_CTRL( parent, title, wxPoint( size_to_edit.x, size_to_edit.y ),
+ aUnit, aBoxSizer )
+{
+}
+
+
+wxSize EDA_SIZE_CTRL::GetValue()
+{
+ wxPoint pos = EDA_POSITION_CTRL::GetValue();
+ wxSize size;
+
+ size.x = pos.x;
+ size.y = pos.y;
+ return size;
+}
+
+
+/**************************************************************/
+/* Class to display and edit a dimension INCHES, MM, or other */
+/**************************************************************/
+EDA_VALUE_CTRL::EDA_VALUE_CTRL( wxWindow* parent, const wxString& title,
+ int value, EDA_UNITS_T user_unit, wxBoxSizer* BoxSizer )
+{
+ wxString label = title;
+
+ m_UserUnit = user_unit;
+ m_Value = value;
+ label += ReturnUnitSymbol( m_UserUnit );
+
+ m_Text = new wxStaticText( parent, -1, label );
+
+ BoxSizer->Add( m_Text, 0, wxGROW | wxLEFT | wxRIGHT | wxTOP, 5 );
+
+ wxString stringvalue = StringFromValue( m_UserUnit, m_Value );
+ m_ValueCtrl = new wxTextCtrl( parent, -1, stringvalue );
+
+ BoxSizer->Add( m_ValueCtrl,
+ 0,
+ wxGROW | wxALIGN_CENTER_VERTICAL | wxLEFT | wxRIGHT | wxBOTTOM,
+ 5 );
+}
+
+
+EDA_VALUE_CTRL::~EDA_VALUE_CTRL()
+{
+ delete m_ValueCtrl;
+ delete m_Text;
+}
+
+
+int EDA_VALUE_CTRL::GetValue()
+{
+ int coord;
+ wxString txtvalue = m_ValueCtrl->GetValue();
+
+ coord = ValueFromString( m_UserUnit, txtvalue );
+ return coord;
+}
+
+
+void EDA_VALUE_CTRL::SetValue( int new_value )
+{
+ wxString buffer;
+
+ m_Value = new_value;
+
+ buffer = StringFromValue( m_UserUnit, m_Value );
+ m_ValueCtrl->SetValue( buffer );
+}
+
+
+void EDA_VALUE_CTRL::Enable( bool enbl )
+{
+ m_ValueCtrl->Enable( enbl );
+ m_Text->Enable( enbl );
+}