KiCad PCB EDA Suite
dialog_pns_length_tuning_settings.cpp
Go to the documentation of this file.
1 /*
2  * KiRouter - a push-and-(sometimes-)shove PCB router
3  *
4  * Copyright (C) 2014-2018 CERN
5  * Copyright (C) 2016 KiCad Developers, see AUTHORS.txt for contributors.
6  * Author: Tomasz Wlostowski <tomasz.wlostowski@cern.ch>
7  *
8  * This program is free software: you can redistribute it and/or modify it
9  * under the terms of the GNU General Public License as published by the
10  * Free Software Foundation, either version 3 of the License, or (at your
11  * option) any later version.
12  *
13  * This program is distributed in the hope that it will be useful, but
14  * WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16  * General Public License for more details.
17  *
18  * You should have received a copy of the GNU General Public License along
19  * with this program. If not, see <http://www.gnu.org/licenses/>.
20  */
21 
28 #include <widgets/text_ctrl_eval.h>
29 #include <bitmaps.h>
30 #include <eda_draw_frame.h>
31 
33  PNS::MEANDER_SETTINGS& aSettings,
34  PNS::ROUTER_MODE aMode ) :
36  m_minAmpl( aParent, m_minAmplLabel, m_minAmplText, m_minAmplUnit ),
37  m_maxAmpl( aParent, m_maxAmplLabel, m_maxAmplText, m_maxAmplUnit ),
38  m_spacing( aParent, m_spacingLabel, m_spacingText, m_spacingUnit ),
39  m_targetLength( aParent, m_targetLengthLabel, m_targetLengthText, m_targetLengthUnit ),
40  m_radius( aParent, m_radiusLabel, m_radiusText, m_radiusUnit ),
41  m_settings( aSettings ),
42  m_mode( aMode )
43 {
44  m_stdButtonsOK->SetDefault();
45  m_targetLengthText->SetSelection( -1, -1 );
46  m_targetLengthText->SetFocus();
48 
49  GetSizer()->SetSizeHints(this);
50  Centre();
51 }
52 
53 
55 {
56 
57  if( !wxDialog::TransferDataToWindow() )
58  return false;
59 
61  {
62  // TODO: fix diff-pair meandering so we can use non-100% radii
63  m_radiusText->SetValue( wxT( "100" ) );
64  m_radiusText->Enable( false );
65  }
66  else
67  {
69  }
70 
75 
76  switch( m_mode )
77  {
79  SetTitle( _( "Single Track Length Tuning" ) );
82  break;
83 
85  SetTitle( _( "Differential Pair Length Tuning" ) );
88  break;
89 
91  SetTitle( _( "Differential Pair Skew Tuning" ) );
93  m_targetLengthLabel->SetLabel( _( "Target skew:" ) + wxS( " " ) );
95  break;
96 
97  default:
98  break;
99  }
100 
101  // Bitmap has a new size, so recalculate sizes
102  GetSizer()->SetSizeHints(this);
103 
104  return true;
105 }
106 
107 
109 {
110  if( !m_minAmpl.Validate( 0, std::numeric_limits<int>::max() ) )
111  return false;
112  if( !m_maxAmpl.Validate( m_minAmpl.GetValue(), std::numeric_limits<int>::max() ) )
113  return false;
114  if( !m_spacing.Validate( 0, std::numeric_limits<int>::max() ) )
115  return false;
116  if( !m_targetLength.Validate( 0, static_cast<double>( std::numeric_limits<long long int>::max() ) ) )
117  return false;
118  if( !m_radius.Validate( 0, 100 ) )
119  return false;
120 
121  return true;
122 }
123 
125 {
126  if( !AcceptOptions() || !wxDialog::TransferDataToWindow() )
127  return false;
128 
133 
136  else
138 
141 
142  m_settings.m_cornerStyle = m_miterStyle->GetSelection() ?
144 
145  return true;
146 }
int m_minAmplitude
Maximum meandering amplitude.
Definition: pns_meander.h:77
Dimensions for the meandering algorithm.
Definition: pns_meander.h:58
The base class for create windows for drawing purpose.
MEANDER_STYLE m_cornerStyle
Rounding percentage (0 - 100).
Definition: pns_meander.h:95
void SetValue(const wxString &aValue) override
Set a new value in evaluator buffer, and display it in the wxTextCtrl.
DIALOG_PNS_LENGTH_TUNING_SETTINGS(EDA_DRAW_FRAME *aParent, PNS::MEANDER_SETTINGS &aSettings, PNS::ROUTER_MODE aMode)
Length tuner settings dialog.
int m_cornerRadiusPercentage
Allowable tuning error.
Definition: pns_meander.h:98
#define _(s)
wxBitmap KiBitmap(BITMAPS aBitmap, int aHeightTag)
Construct a wxBitmap from an image identifier Returns the image from the active theme if the image ha...
Definition: bitmap.cpp:105
void Format(OUTPUTFORMATTER *out, int aNestLevel, int aCtl, const CPTREE &aTree)
Output a PTREE into s-expression format via an OUTPUTFORMATTER derivative.
Definition: ptree.cpp:200
ROUTER_MODE
Definition: pns_router.h:62
virtual void SetUnits(EDA_UNITS aUnits)
Normally not needed (as the UNIT_BINDER inherits from the parent frame), but can be used to set to DE...
Definition: unit_binder.cpp:92
virtual bool Validate(double aMin, double aMax, EDA_UNITS aUnits=EDA_UNITS::UNSCALED)
Validate the control against the given range, informing the user of any errors found.
virtual void SetValue(int aValue)
Set new value (in Internal Units) for the text field, taking care of units conversion.
long long int m_targetLength
Type of corners for the meandered line.
Definition: pns_meander.h:92
virtual long long int GetValue()
Return the current value in Internal Units.
int m_spacing
Amplitude/spacing adjustment step.
Definition: pns_meander.h:83
int m_maxAmplitude
Meandering period/spacing (see dialog picture for explanation).
Definition: pns_meander.h:80
Class DIALOG_PNS_LENGTH_TUNING_SETTINGS_BASE.