mirror of
https://gitlab.com/kicad/code/kicad.git
synced 2025-04-21 13:41:43 +00:00
Text size sanity checking for TEXT_ITEMS_GRID.
Oh dear, there was a bunch going on here. Firstly the move from int to long long int for ValueFromString() means that we were no longer catching overflows (as we were C-style casting it back to int in many places). But even when the overflow is caught, it would run in to wxWidgets' empty string bug while trying to log it. Fixes https://gitlab.com/kicad/code/kicad/issues/12577
This commit is contained in:
parent
b52106aa37
commit
19d270fe74
common
eeschema
include
libs/kimath
pcbnew
@ -336,7 +336,7 @@ bool PANEL_SETUP_NETCLASSES::TransferDataFromWindow()
|
||||
int row = 0;
|
||||
|
||||
auto getCell =
|
||||
[this]( int aRow, int aCol ) -> long long int
|
||||
[this]( int aRow, int aCol ) -> int
|
||||
{
|
||||
return m_frame->ValueFromString( m_netclassGrid->GetCellValue( aRow, aCol ) );
|
||||
};
|
||||
|
@ -60,15 +60,18 @@ void COMMON_TOOLS::Reset( RESET_REASON aReason )
|
||||
|
||||
for( const wxString& gridDef : settings.sizes )
|
||||
{
|
||||
int gridSize = (int) EDA_UNIT_UTILS::UI::ValueFromString( scale, EDA_UNITS::MILLIMETRES,
|
||||
gridDef );
|
||||
m_grids.emplace_back( gridSize, gridSize );
|
||||
double gridSize = EDA_UNIT_UTILS::UI::DoubleValueFromString( scale, EDA_UNITS::MILLIMETRES,
|
||||
gridDef );
|
||||
|
||||
m_grids.emplace_back( KiROUND<double, int>( gridSize ), KiROUND<double, int>( gridSize ) );
|
||||
}
|
||||
|
||||
m_grids.emplace_back( EDA_UNIT_UTILS::UI::ValueFromString( scale, EDA_UNITS::MILLIMETRES,
|
||||
settings.user_grid_x ),
|
||||
EDA_UNIT_UTILS::UI::ValueFromString( scale, EDA_UNITS::MILLIMETRES,
|
||||
settings.user_grid_y ) );
|
||||
double userGridX = EDA_UNIT_UTILS::UI::DoubleValueFromString( scale, EDA_UNITS::MILLIMETRES,
|
||||
settings.user_grid_x );
|
||||
double userGridY = EDA_UNIT_UTILS::UI::DoubleValueFromString( scale, EDA_UNITS::MILLIMETRES,
|
||||
settings.user_grid_y );
|
||||
|
||||
m_grids.emplace_back( KiROUND<double, int>( userGridX ), KiROUND<double, int>( userGridY ) );
|
||||
|
||||
OnGridChanged();
|
||||
}
|
||||
|
@ -94,8 +94,8 @@ void GRID_MENU::BuildChoiceList( wxArrayString* aGridsList, APP_SETTINGS_BASE* a
|
||||
|
||||
for( const wxString& gridSize : aCfg->m_Window.grid.sizes )
|
||||
{
|
||||
int val = (int) EDA_UNIT_UTILS::UI::ValueFromString( scale, EDA_UNITS::MILLIMETRES,
|
||||
gridSize );
|
||||
double val = EDA_UNIT_UTILS::UI::DoubleValueFromString( scale, EDA_UNITS::MILLIMETRES,
|
||||
gridSize );
|
||||
|
||||
msg.Printf( _( "Grid: %s (%s)" ),
|
||||
EDA_UNIT_UTILS::UI::MessageTextFromValue( scale, primaryUnit, val ),
|
||||
@ -106,8 +106,8 @@ void GRID_MENU::BuildChoiceList( wxArrayString* aGridsList, APP_SETTINGS_BASE* a
|
||||
|
||||
if( !aCfg->m_Window.grid.user_grid_x.empty() )
|
||||
{
|
||||
int val = (int) EDA_UNIT_UTILS::UI::ValueFromString( scale, EDA_UNITS::INCHES,
|
||||
aCfg->m_Window.grid.user_grid_x );
|
||||
double val = EDA_UNIT_UTILS::UI::DoubleValueFromString( scale, EDA_UNITS::INCHES,
|
||||
aCfg->m_Window.grid.user_grid_x );
|
||||
|
||||
msg.Printf( _( "User grid: %s (%s)" ),
|
||||
EDA_UNIT_UTILS::UI::MessageTextFromValue( scale, primaryUnit, val ),
|
||||
|
@ -349,29 +349,25 @@ public:
|
||||
break;
|
||||
|
||||
case COL_NUMBER_SIZE:
|
||||
pin->SetNumberTextSize( EDA_UNIT_UTILS::UI::ValueFromString( schIUScale, m_frame->GetUserUnits(), aValue ) );
|
||||
pin->SetNumberTextSize( m_frame->ValueFromString( aValue ) );
|
||||
break;
|
||||
|
||||
case COL_NAME_SIZE:
|
||||
pin->SetNameTextSize( EDA_UNIT_UTILS::UI::ValueFromString(
|
||||
schIUScale, m_frame->GetUserUnits(), aValue ) );
|
||||
pin->SetNameTextSize( m_frame->ValueFromString( aValue ) );
|
||||
break;
|
||||
|
||||
case COL_LENGTH:
|
||||
pin->ChangeLength( EDA_UNIT_UTILS::UI::ValueFromString(
|
||||
schIUScale, m_frame->GetUserUnits(), aValue ) );
|
||||
pin->ChangeLength( m_frame->ValueFromString( aValue ) );
|
||||
break;
|
||||
|
||||
case COL_POSX:
|
||||
pin->SetPosition( wxPoint( EDA_UNIT_UTILS::UI::ValueFromString(
|
||||
schIUScale, m_frame->GetUserUnits(), aValue ),
|
||||
pin->SetPosition( wxPoint( m_frame->ValueFromString( aValue ),
|
||||
pin->GetPosition().y ) );
|
||||
break;
|
||||
|
||||
case COL_POSY:
|
||||
pin->SetPosition( wxPoint( pin->GetPosition().x,
|
||||
-EDA_UNIT_UTILS::UI::ValueFromString(
|
||||
schIUScale, m_frame->GetUserUnits(), aValue ) ) );
|
||||
-m_frame->ValueFromString( aValue ) ) );
|
||||
break;
|
||||
|
||||
case COL_VISIBLE:
|
||||
|
@ -709,9 +709,8 @@ void FIELDS_GRID_TABLE<T>::SetValue( int aRow, int aCol, const wxString &aValue
|
||||
break;
|
||||
|
||||
case FDC_TEXT_SIZE:
|
||||
field.SetTextSize(
|
||||
wxSize( EDA_UNIT_UTILS::UI::ValueFromString( schIUScale, m_frame->GetUserUnits(), aValue ),
|
||||
EDA_UNIT_UTILS::UI::ValueFromString( schIUScale, m_frame->GetUserUnits(), aValue ) ) );
|
||||
field.SetTextSize( wxSize( m_frame->ValueFromString( aValue ),
|
||||
m_frame->ValueFromString( aValue ) ) );
|
||||
break;
|
||||
|
||||
case FDC_ORIENTATION:
|
||||
@ -729,10 +728,9 @@ void FIELDS_GRID_TABLE<T>::SetValue( int aRow, int aCol, const wxString &aValue
|
||||
pos = field.GetTextPos();
|
||||
|
||||
if( aCol == FDC_POSX )
|
||||
pos.x = EDA_UNIT_UTILS::UI::ValueFromString( schIUScale, m_frame->GetUserUnits(), aValue );
|
||||
pos.x = m_frame->ValueFromString( aValue );
|
||||
else
|
||||
pos.y = EDA_UNIT_UTILS::UI::ValueFromString( schIUScale, m_frame->GetUserUnits(),
|
||||
aValue );
|
||||
pos.y = m_frame->ValueFromString( aValue );
|
||||
|
||||
field.SetTextPos( pos );
|
||||
break;
|
||||
|
@ -93,11 +93,20 @@ public:
|
||||
* @param aTextValue A reference to a wxString object containing the string to convert.
|
||||
* @return internal units value
|
||||
*/
|
||||
long long int ValueFromString( const wxString& aTextValue,
|
||||
EDA_DATA_TYPE aType = EDA_DATA_TYPE::DISTANCE )
|
||||
int ValueFromString( const wxString& aTextValue, EDA_DATA_TYPE aType = EDA_DATA_TYPE::DISTANCE )
|
||||
{
|
||||
return EDA_UNIT_UTILS::UI::ValueFromString( GetIuScale(), GetUserUnits(), aTextValue,
|
||||
aType );
|
||||
double value = EDA_UNIT_UTILS::UI::DoubleValueFromString( GetIuScale(), GetUserUnits(),
|
||||
aTextValue, aType );
|
||||
|
||||
return KiROUND<double, int>( value );
|
||||
}
|
||||
|
||||
EDA_ANGLE AngleValueFromString( const wxString& aTextValue )
|
||||
{
|
||||
double angle = EDA_UNIT_UTILS::UI::DoubleValueFromString( GetIuScale(), EDA_UNITS::DEGREES,
|
||||
aTextValue );
|
||||
|
||||
return EDA_ANGLE( angle, DEGREES_T );
|
||||
}
|
||||
|
||||
private:
|
||||
|
@ -3,7 +3,7 @@
|
||||
*
|
||||
* Copyright (c) 2005 Michael Niedermayer <michaelni@gmx.at>
|
||||
* Copyright (C) CERN
|
||||
* Copyright (C) 2021 KiCad Developers, see AUTHORS.txt for contributors.
|
||||
* Copyright (C) 2021-2022 KiCad Developers, see AUTHORS.txt for contributors.
|
||||
*
|
||||
* @author Tomasz Wlostowski <tomasz.wlostowski@cern.ch>
|
||||
*
|
||||
@ -45,6 +45,11 @@
|
||||
*/
|
||||
void kimathLogDebug( const char* aFormatString, ... );
|
||||
|
||||
/**
|
||||
* Workaround to avoid the empty-string conversion issue in wxWidgets
|
||||
*/
|
||||
void kimathLogOverflow( double v, const char* aTypeName );
|
||||
|
||||
/**
|
||||
* Limit @a value within the range @a lower <= @a value <= @a upper.
|
||||
*
|
||||
@ -82,12 +87,20 @@ constexpr ret_type KiROUND( fp_type v )
|
||||
using max_ret = long long int;
|
||||
fp_type ret = v < 0 ? v - 0.5 : v + 0.5;
|
||||
|
||||
if( std::numeric_limits<ret_type>::max() < ret ||
|
||||
std::numeric_limits<ret_type>::lowest() > ret )
|
||||
if( ret > std::numeric_limits<ret_type>::max() )
|
||||
{
|
||||
kimathLogDebug( "Overflow KiROUND converting value %f to %s", double( v ),
|
||||
typeid( ret_type ).name() );
|
||||
return 0;
|
||||
kimathLogOverflow( double( v ), typeid( ret_type ).name() );
|
||||
|
||||
return std::numeric_limits<ret_type>::max() - 1;
|
||||
}
|
||||
else if( ret < std::numeric_limits<ret_type>::lowest() )
|
||||
{
|
||||
kimathLogOverflow( double( v ), typeid( ret_type ).name() );
|
||||
|
||||
if( std::numeric_limits<ret_type>::is_signed )
|
||||
return std::numeric_limits<ret_type>::lowest() + 1;
|
||||
else
|
||||
return 0;
|
||||
}
|
||||
|
||||
return ret_type( max_ret( ret ) );
|
||||
|
@ -29,6 +29,7 @@
|
||||
#include <climits>
|
||||
#include <math/util.h>
|
||||
#include <wx/log.h>
|
||||
#include <wx/string.h>
|
||||
|
||||
#ifdef _MSC_VER
|
||||
#include <windows.h>
|
||||
@ -54,6 +55,13 @@ void kimathLogDebug( const char* aFormatString, ... )
|
||||
}
|
||||
|
||||
|
||||
void kimathLogOverflow( double v, const char* aTypeName )
|
||||
{
|
||||
wxString typeName( aTypeName );
|
||||
wxLogWarning( wxString::Format( wxT( "Overflow converting value %f to %s." ), v, typeName ) );
|
||||
}
|
||||
|
||||
|
||||
template<>
|
||||
int rescale( int aNumerator, int aValue, int aDenominator )
|
||||
{
|
||||
|
@ -165,9 +165,8 @@ void PANEL_SETUP_BOARD_STACKUP::onAdjustDielectricThickness( wxCommandEvent& eve
|
||||
}
|
||||
|
||||
wxTextCtrl* textCtrl = static_cast<wxTextCtrl*>( ui_item.m_ThicknessCtrl );
|
||||
wxString txt = textCtrl->GetValue();
|
||||
|
||||
int item_thickness = EDA_UNIT_UTILS::UI::ValueFromString( pcbIUScale, m_frame->GetUserUnits(), txt );
|
||||
int item_thickness = m_frame->ValueFromString( textCtrl->GetValue() );
|
||||
min_thickness += item_thickness;
|
||||
}
|
||||
|
||||
@ -1089,7 +1088,6 @@ void PANEL_SETUP_BOARD_STACKUP::buildLayerStackPanel( bool aCreatedInitialStacku
|
||||
// Transfer current UI settings to m_stackup but not to the board
|
||||
bool PANEL_SETUP_BOARD_STACKUP::transferDataFromUIToStackup()
|
||||
{
|
||||
wxString txt;
|
||||
wxString error_msg;
|
||||
bool success = true;
|
||||
double value;
|
||||
@ -1117,7 +1115,7 @@ bool PANEL_SETUP_BOARD_STACKUP::transferDataFromUIToStackup()
|
||||
if( item->HasEpsilonRValue() )
|
||||
{
|
||||
wxTextCtrl* textCtrl = static_cast<wxTextCtrl*>( ui_item.m_EpsilonCtrl );
|
||||
txt = textCtrl->GetValue();
|
||||
wxString txt = textCtrl->GetValue();
|
||||
|
||||
if( txt.ToDouble( &value ) && value >= 0.0 )
|
||||
item->SetEpsilonR( value, sub_item );
|
||||
@ -1134,7 +1132,7 @@ bool PANEL_SETUP_BOARD_STACKUP::transferDataFromUIToStackup()
|
||||
if( item->HasLossTangentValue() )
|
||||
{
|
||||
wxTextCtrl* textCtrl = static_cast<wxTextCtrl*>( ui_item.m_LossTgCtrl );
|
||||
txt = textCtrl->GetValue();
|
||||
wxString txt = textCtrl->GetValue();
|
||||
|
||||
if( txt.ToDouble( &value ) && value >= 0.0 )
|
||||
item->SetLossTangent( value, sub_item );
|
||||
@ -1182,9 +1180,8 @@ bool PANEL_SETUP_BOARD_STACKUP::transferDataFromUIToStackup()
|
||||
if( item->IsThicknessEditable() )
|
||||
{
|
||||
wxTextCtrl* textCtrl = static_cast<wxTextCtrl*>( ui_item.m_ThicknessCtrl );
|
||||
txt = textCtrl->GetValue();
|
||||
int new_thickness = m_frame->ValueFromString( textCtrl->GetValue() );
|
||||
|
||||
int new_thickness = EDA_UNIT_UTILS::UI::ValueFromString( pcbIUScale, m_frame->GetUserUnits(), txt );
|
||||
item->SetThickness( new_thickness, sub_item );
|
||||
|
||||
if( new_thickness < 0 )
|
||||
@ -1505,7 +1502,7 @@ void PANEL_SETUP_BOARD_STACKUP::onThicknessChange( wxCommandEvent& event )
|
||||
BOARD_STACKUP_ITEM* item = GetStackupItem( row );
|
||||
int idx = GetSublayerId( row );
|
||||
|
||||
item->SetThickness( EDA_UNIT_UTILS::UI::ValueFromString( pcbIUScale, m_frame->GetUserUnits(), value ), idx );
|
||||
item->SetThickness( m_frame->ValueFromString( value ), idx );
|
||||
|
||||
computeBoardThickness();
|
||||
}
|
||||
|
@ -35,7 +35,7 @@
|
||||
#include <pcb_edit_frame.h>
|
||||
#include <pcbnew_settings.h>
|
||||
#include <pgm_base.h>
|
||||
#include <validators.h>
|
||||
#include <pcbnew.h>
|
||||
#include <kiplatform/ui.h>
|
||||
#include <widgets/grid_text_button_helpers.h>
|
||||
#include <widgets/text_ctrl_eval.h>
|
||||
@ -347,19 +347,100 @@ bool DIALOG_FOOTPRINT_PROPERTIES::Validate()
|
||||
if( !DIALOG_SHIM::Validate() )
|
||||
return false;
|
||||
|
||||
// Check for empty texts.
|
||||
for( size_t i = 2; i < m_texts->size(); ++i )
|
||||
// Validate texts.
|
||||
for( size_t i = 0; i < m_texts->size(); ++i )
|
||||
{
|
||||
FP_TEXT& text = m_texts->at( i );
|
||||
|
||||
if( text.GetText().IsEmpty() )
|
||||
if( i >= 2 )
|
||||
{
|
||||
if( m_NoteBook->GetSelection() != 0 )
|
||||
m_NoteBook->SetSelection( 0 );
|
||||
if( text.GetText().IsEmpty() )
|
||||
{
|
||||
if( m_NoteBook->GetSelection() != 0 )
|
||||
m_NoteBook->SetSelection( 0 );
|
||||
|
||||
m_delayedFocusGrid = m_itemsGrid;
|
||||
m_delayedErrorMessage = _( "Text items must have some content." );
|
||||
m_delayedFocusColumn = FPT_TEXT;
|
||||
m_delayedFocusRow = i;
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
int width = m_frame->ValueFromString( m_itemsGrid->GetCellValue( i, FPT_WIDTH ) );
|
||||
|
||||
if( width < TEXTS_MIN_SIZE )
|
||||
{
|
||||
wxString min = m_frame->StringFromValue( TEXTS_MIN_SIZE, true );
|
||||
|
||||
m_itemsGrid->SetCellValue( i, FPT_WIDTH, min );
|
||||
|
||||
m_delayedFocusGrid = m_itemsGrid;
|
||||
m_delayedErrorMessage = _( "Text items must have some content." );
|
||||
m_delayedFocusColumn = FPT_TEXT;
|
||||
m_delayedErrorMessage = wxString::Format( _( "Text width must be at least %s." ), min );
|
||||
m_delayedFocusColumn = FPT_WIDTH;
|
||||
m_delayedFocusRow = i;
|
||||
|
||||
return false;
|
||||
}
|
||||
else if( width > TEXTS_MAX_SIZE )
|
||||
{
|
||||
wxString max = m_frame->StringFromValue( TEXTS_MAX_SIZE, true );
|
||||
|
||||
m_itemsGrid->SetCellValue( i, FPT_WIDTH, max );
|
||||
|
||||
m_delayedFocusGrid = m_itemsGrid;
|
||||
m_delayedErrorMessage = wxString::Format( _( "Text width must be at most %s." ), max );
|
||||
m_delayedFocusColumn = FPT_WIDTH;
|
||||
m_delayedFocusRow = i;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
int height = m_frame->ValueFromString( m_itemsGrid->GetCellValue( i, FPT_HEIGHT ) );
|
||||
|
||||
if( height < TEXTS_MIN_SIZE )
|
||||
{
|
||||
wxString min = m_frame->StringFromValue( TEXTS_MIN_SIZE, true );
|
||||
|
||||
m_itemsGrid->SetCellValue( i, FPT_HEIGHT, min );
|
||||
|
||||
m_delayedFocusGrid = m_itemsGrid;
|
||||
m_delayedErrorMessage = wxString::Format( _( "Text height must be at least %s." ), min );
|
||||
m_delayedFocusColumn = FPT_HEIGHT;
|
||||
m_delayedFocusRow = i;
|
||||
|
||||
return false;
|
||||
}
|
||||
else if( height > TEXTS_MAX_SIZE )
|
||||
{
|
||||
wxString max = m_frame->StringFromValue( TEXTS_MAX_SIZE, true );
|
||||
|
||||
m_itemsGrid->SetCellValue( i, FPT_HEIGHT, max );
|
||||
|
||||
m_delayedFocusGrid = m_itemsGrid;
|
||||
m_delayedErrorMessage = wxString::Format( _( "Text height must be at most %s." ), max );
|
||||
m_delayedFocusColumn = FPT_HEIGHT;
|
||||
m_delayedFocusRow = i;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
// Test for acceptable values for thickness and size and clamp if fails
|
||||
int maxPenWidth = Clamp_Text_PenSize( text.GetTextThickness(), text.GetTextSize() );
|
||||
|
||||
if( text.GetTextThickness() > maxPenWidth )
|
||||
{
|
||||
wxString clamped = m_frame->StringFromValue( maxPenWidth, true );
|
||||
|
||||
m_itemsGrid->SetCellValue( i, FPT_THICKNESS, clamped );
|
||||
|
||||
m_delayedFocusGrid = m_itemsGrid;
|
||||
m_delayedErrorMessage = wxString::Format( _( "Text thickness is too large for the "
|
||||
"text size.\n"
|
||||
"It will be clamped at %s." ),
|
||||
clamped );
|
||||
m_delayedFocusColumn = FPT_THICKNESS;
|
||||
m_delayedFocusRow = i;
|
||||
|
||||
return false;
|
||||
|
@ -4,7 +4,7 @@
|
||||
* Copyright (C) 2018 Jean-Pierre Charras, jp.charras at wanadoo.fr
|
||||
* Copyright (C) 2015 Dick Hollenbeck, dick@softplc.com
|
||||
* Copyright (C) 2008 Wayne Stambaugh <stambaughw@gmail.com>
|
||||
* Copyright (C) 2004-2021 KiCad Developers, see AUTHORS.txt for contributors.
|
||||
* Copyright (C) 2004-2022 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
|
||||
@ -43,6 +43,7 @@
|
||||
#include "3d_rendering/opengl/3d_model.h"
|
||||
#include "filename_resolver.h"
|
||||
#include <pgm_base.h>
|
||||
#include <pcbnew.h>
|
||||
#include "dialogs/panel_preview_3d_model.h"
|
||||
#include "dialogs/3d_cache_dialogs.h"
|
||||
#include <settings/settings_manager.h>
|
||||
@ -414,6 +415,47 @@ bool DIALOG_FOOTPRINT_PROPERTIES_FP_EDITOR::Validate()
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
if( text.GetTextWidth() < TEXTS_MIN_SIZE || text.GetTextWidth() > TEXTS_MAX_SIZE )
|
||||
{
|
||||
m_delayedFocusGrid = m_itemsGrid;
|
||||
m_delayedErrorMessage = wxString::Format( _( "The text width must be between %s and %s." ),
|
||||
m_frame->StringFromValue( TEXTS_MIN_SIZE, true ),
|
||||
m_frame->StringFromValue( TEXTS_MAX_SIZE, true ) );
|
||||
m_delayedFocusColumn = FPT_WIDTH;
|
||||
m_delayedFocusRow = i;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
if( text.GetTextHeight() < TEXTS_MIN_SIZE || text.GetTextHeight() > TEXTS_MAX_SIZE )
|
||||
{
|
||||
m_delayedFocusGrid = m_itemsGrid;
|
||||
m_delayedErrorMessage = wxString::Format( _( "The text height must be between %s and %s." ),
|
||||
m_frame->StringFromValue( TEXTS_MIN_SIZE, true ),
|
||||
m_frame->StringFromValue( TEXTS_MAX_SIZE, true ) );
|
||||
m_delayedFocusColumn = FPT_HEIGHT;
|
||||
m_delayedFocusRow = i;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
// Test for acceptable values for thickness and size and clamp if fails
|
||||
int maxPenWidth = Clamp_Text_PenSize( text.GetTextThickness(), text.GetTextSize() );
|
||||
|
||||
if( text.GetTextThickness() > maxPenWidth )
|
||||
{
|
||||
m_itemsGrid->SetCellValue( i, FPT_THICKNESS,
|
||||
m_frame->StringFromValue( maxPenWidth, true ) );
|
||||
|
||||
m_delayedFocusGrid = m_itemsGrid;
|
||||
m_delayedErrorMessage = _( "The text thickness is too large for the text size.\n"
|
||||
"It will be clamped." );
|
||||
m_delayedFocusColumn = FPT_THICKNESS;
|
||||
m_delayedFocusRow = i;
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
if( !m_netClearance.Validate( 0, INT_MAX ) )
|
||||
|
@ -564,9 +564,9 @@ void DIALOG_PAD_PRIMITIVE_POLY_PROPS::onCellChanging( wxGridEvent& event )
|
||||
return;
|
||||
|
||||
if( col == 0 ) // Set the X value
|
||||
m_currPoints[row].x = EDA_UNIT_UTILS::UI::ValueFromString( pcbIUScale, GetUserUnits(), msg );
|
||||
m_currPoints[row].x = m_frame->ValueFromString( msg );
|
||||
else // Set the Y value
|
||||
m_currPoints[row].y = EDA_UNIT_UTILS::UI::ValueFromString( pcbIUScale, GetUserUnits(), msg );
|
||||
m_currPoints[row].y = m_frame->ValueFromString( msg );
|
||||
|
||||
Validate();
|
||||
|
||||
|
@ -317,7 +317,10 @@ bool PANEL_FP_EDITOR_DEFAULTS::Show( bool aShow )
|
||||
|
||||
int PANEL_FP_EDITOR_DEFAULTS::getGridValue( int aRow, int aCol )
|
||||
{
|
||||
return EDA_UNIT_UTILS::UI::ValueFromString( pcbIUScale, m_units, m_graphicsGrid->GetCellValue( aRow, aCol ) );
|
||||
wxString msg = m_graphicsGrid->GetCellValue( aRow, aCol );
|
||||
double value = EDA_UNIT_UTILS::UI::DoubleValueFromString( pcbIUScale, m_units, msg );
|
||||
|
||||
return KiROUND<double, int>( value );
|
||||
}
|
||||
|
||||
|
||||
|
@ -198,7 +198,7 @@ bool PANEL_SETUP_TEXT_AND_GRAPHICS::TransferDataToWindow()
|
||||
|
||||
int PANEL_SETUP_TEXT_AND_GRAPHICS::getGridValue( int aRow, int aCol )
|
||||
{
|
||||
return EDA_UNIT_UTILS::UI::ValueFromString( pcbIUScale, m_Frame->GetUserUnits(), m_grid->GetCellValue( aRow, aCol ) );
|
||||
return m_Frame->ValueFromString( m_grid->GetCellValue( aRow, aCol ) );
|
||||
}
|
||||
|
||||
|
||||
|
@ -141,7 +141,7 @@ void PANEL_SETUP_TRACKS_AND_VIAS::OnSortTrackWidthsClick( wxCommandEvent& aEvent
|
||||
msg = m_trackWidthsGrid->GetCellValue( row, TR_WIDTH_COL );
|
||||
|
||||
if( !msg.IsEmpty() )
|
||||
trackWidths.push_back( EDA_UNIT_UTILS::UI::ValueFromString( pcbIUScale, m_Frame->GetUserUnits(), msg ) );
|
||||
trackWidths.push_back( m_Frame->ValueFromString( msg ) );
|
||||
}
|
||||
|
||||
std::sort( trackWidths.begin(), trackWidths.end() );
|
||||
@ -166,12 +166,12 @@ void PANEL_SETUP_TRACKS_AND_VIAS::OnSortViaSizesClick( wxCommandEvent& aEvent )
|
||||
if( !msg.IsEmpty() )
|
||||
{
|
||||
VIA_DIMENSION via_dim;
|
||||
via_dim.m_Diameter = EDA_UNIT_UTILS::UI::ValueFromString( pcbIUScale, m_Frame->GetUserUnits(), msg );
|
||||
via_dim.m_Diameter = m_Frame->ValueFromString( msg );
|
||||
|
||||
msg = m_viaSizesGrid->GetCellValue( row, VIA_DRILL_COL );
|
||||
|
||||
if( !msg.IsEmpty() )
|
||||
via_dim.m_Drill = EDA_UNIT_UTILS::UI::ValueFromString( pcbIUScale, m_Frame->GetUserUnits(), msg );
|
||||
via_dim.m_Drill = m_Frame->ValueFromString( msg );
|
||||
|
||||
vias.push_back( via_dim );
|
||||
}
|
||||
@ -199,15 +199,15 @@ void PANEL_SETUP_TRACKS_AND_VIAS::OnSortDiffPairsClick( wxCommandEvent& aEvent )
|
||||
if( !msg.IsEmpty() )
|
||||
{
|
||||
DIFF_PAIR_DIMENSION diffPair_dim;
|
||||
diffPair_dim.m_Width = EDA_UNIT_UTILS::UI::ValueFromString( pcbIUScale, m_Frame->GetUserUnits(), msg );
|
||||
diffPair_dim.m_Width = m_Frame->ValueFromString( msg );
|
||||
|
||||
msg = m_diffPairsGrid->GetCellValue( row, DP_GAP_COL );
|
||||
diffPair_dim.m_Gap = EDA_UNIT_UTILS::UI::ValueFromString( pcbIUScale, m_Frame->GetUserUnits(), msg );
|
||||
diffPair_dim.m_Gap = m_Frame->ValueFromString( msg );
|
||||
|
||||
msg = m_diffPairsGrid->GetCellValue( row, DP_VIA_GAP_COL );
|
||||
|
||||
if( !msg.IsEmpty() )
|
||||
diffPair_dim.m_ViaGap = EDA_UNIT_UTILS::UI::ValueFromString( pcbIUScale, m_Frame->GetUserUnits(), msg );
|
||||
diffPair_dim.m_ViaGap = m_Frame->ValueFromString( msg );
|
||||
|
||||
diffPairs.push_back( diffPair_dim );
|
||||
}
|
||||
@ -289,7 +289,7 @@ bool PANEL_SETUP_TRACKS_AND_VIAS::TransferDataFromWindow()
|
||||
msg = m_trackWidthsGrid->GetCellValue( row, TR_WIDTH_COL );
|
||||
|
||||
if( !msg.IsEmpty() )
|
||||
trackWidths.push_back( EDA_UNIT_UTILS::UI::ValueFromString( pcbIUScale, m_Frame->GetUserUnits(), msg ) );
|
||||
trackWidths.push_back( m_Frame->ValueFromString( msg ) );
|
||||
}
|
||||
|
||||
for( int row = 0; row < m_viaSizesGrid->GetNumberRows(); ++row )
|
||||
@ -299,12 +299,12 @@ bool PANEL_SETUP_TRACKS_AND_VIAS::TransferDataFromWindow()
|
||||
if( !msg.IsEmpty() )
|
||||
{
|
||||
VIA_DIMENSION via_dim;
|
||||
via_dim.m_Diameter = EDA_UNIT_UTILS::UI::ValueFromString( pcbIUScale, m_Frame->GetUserUnits(), msg );
|
||||
via_dim.m_Diameter = m_Frame->ValueFromString( msg );
|
||||
|
||||
msg = m_viaSizesGrid->GetCellValue( row, VIA_DRILL_COL );
|
||||
|
||||
if( !msg.IsEmpty() )
|
||||
via_dim.m_Drill = EDA_UNIT_UTILS::UI::ValueFromString( pcbIUScale, m_Frame->GetUserUnits(), msg );
|
||||
via_dim.m_Drill = m_Frame->ValueFromString( msg );
|
||||
|
||||
vias.push_back( via_dim );
|
||||
}
|
||||
@ -317,15 +317,15 @@ bool PANEL_SETUP_TRACKS_AND_VIAS::TransferDataFromWindow()
|
||||
if( !msg.IsEmpty() )
|
||||
{
|
||||
DIFF_PAIR_DIMENSION diffPair_dim;
|
||||
diffPair_dim.m_Width = EDA_UNIT_UTILS::UI::ValueFromString( pcbIUScale, m_Frame->GetUserUnits(), msg );
|
||||
diffPair_dim.m_Width = m_Frame->ValueFromString( msg );
|
||||
|
||||
msg = m_diffPairsGrid->GetCellValue( row, DP_GAP_COL );
|
||||
diffPair_dim.m_Gap = EDA_UNIT_UTILS::UI::ValueFromString( pcbIUScale, m_Frame->GetUserUnits(), msg );
|
||||
diffPair_dim.m_Gap = m_Frame->ValueFromString( msg );
|
||||
|
||||
msg = m_diffPairsGrid->GetCellValue( row, DP_VIA_GAP_COL );
|
||||
|
||||
if( !msg.IsEmpty() )
|
||||
diffPair_dim.m_ViaGap = EDA_UNIT_UTILS::UI::ValueFromString( pcbIUScale, m_Frame->GetUserUnits(), msg );
|
||||
diffPair_dim.m_ViaGap = m_Frame->ValueFromString( msg );
|
||||
|
||||
diffPairs.push_back( diffPair_dim );
|
||||
}
|
||||
|
@ -193,8 +193,9 @@ FOOTPRINT_PREVIEW_PANEL* FOOTPRINT_PREVIEW_PANEL::New( KIWAY* aKiway, wxWindow*
|
||||
panel->GetGAL()->SetGridVisibility( gridCfg.show );
|
||||
|
||||
//Bounds checking cannot include number of elements as an index!
|
||||
int gridIdx = std::max( 0, std::min( gridCfg.last_size_idx, (int) gridCfg.sizes.size() - 1 ) );
|
||||
int gridSize = (int) EDA_UNIT_UTILS::UI::ValueFromString( pcbIUScale, EDA_UNITS::MILS, gridCfg.sizes[ gridIdx ] );
|
||||
int gridIdx = std::max( 0, std::min( gridCfg.last_size_idx, (int) gridCfg.sizes.size() - 1 ) );
|
||||
double gridSize = EDA_UNIT_UTILS::UI::DoubleValueFromString( pcbIUScale, EDA_UNITS::MILS,
|
||||
gridCfg.sizes[ gridIdx ] );
|
||||
panel->GetGAL()->SetGridSize( VECTOR2D( gridSize, gridSize ) );
|
||||
|
||||
return panel;
|
||||
|
@ -271,18 +271,19 @@ void FP_TEXT_GRID_TABLE::SetValue( int aRow, int aCol, const wxString &aValue )
|
||||
break;
|
||||
|
||||
case FPT_WIDTH:
|
||||
text.SetTextWidth( EDA_UNIT_UTILS::UI::ValueFromString( pcbIUScale, m_frame->GetUserUnits(), aValue ) );
|
||||
text.SetTextWidth( m_frame->ValueFromString( aValue ) );
|
||||
break;
|
||||
|
||||
case FPT_HEIGHT:
|
||||
text.SetTextHeight( EDA_UNIT_UTILS::UI::ValueFromString( pcbIUScale, m_frame->GetUserUnits(), aValue ) );
|
||||
text.SetTextHeight( m_frame->ValueFromString( aValue ) );
|
||||
break;
|
||||
|
||||
case FPT_THICKNESS:text.SetTextThickness( EDA_UNIT_UTILS::UI::ValueFromString( pcbIUScale, m_frame->GetUserUnits(), aValue ) );
|
||||
case FPT_THICKNESS:
|
||||
text.SetTextThickness( m_frame->ValueFromString( aValue ) );
|
||||
break;
|
||||
|
||||
case FPT_ORIENTATION:
|
||||
text.SetTextAngle( EDA_ANGLE( EDA_UNIT_UTILS::UI::DoubleValueFromString( pcbIUScale, EDA_UNITS::UNSCALED, aValue ), DEGREES_T ) );
|
||||
text.SetTextAngle( m_frame->AngleValueFromString( aValue ) );
|
||||
text.SetDrawCoord();
|
||||
break;
|
||||
|
||||
@ -291,9 +292,9 @@ void FP_TEXT_GRID_TABLE::SetValue( int aRow, int aCol, const wxString &aValue )
|
||||
pos = text.GetPos0();
|
||||
|
||||
if( aCol == FPT_XOFFSET )
|
||||
pos.x = EDA_UNIT_UTILS::UI::ValueFromString( pcbIUScale, m_frame->GetUserUnits(), aValue );
|
||||
pos.x = m_frame->ValueFromString( aValue );
|
||||
else
|
||||
pos.y = EDA_UNIT_UTILS::UI::ValueFromString( pcbIUScale, m_frame->GetUserUnits(), aValue );
|
||||
pos.y = m_frame->ValueFromString( aValue );
|
||||
|
||||
text.SetPos0( pos );
|
||||
text.SetDrawCoord();
|
||||
|
Loading…
Reference in New Issue
Block a user