Smarten isEmpty checks to include nothing-but-whitespace.

Fixes https://gitlab.com/kicad/code/kicad/issues/6567
This commit is contained in:
Jeff Young 2020-12-01 14:58:33 +00:00
parent d50d1d84da
commit 3c521942ed
5 changed files with 30 additions and 17 deletions

View File

@ -362,6 +362,12 @@ wxString EscapeHTML( const wxString& aString )
}
bool NoPrintableChars( wxString aString )
{
return aString.Trim( true ).Trim( false ).IsEmpty();
}
char* StrPurge( char* text )
{
static const char whitespace[] = " \t\n\r\f\v";

View File

@ -40,6 +40,7 @@
#include <pgm_base.h>
#include <symbol_editor/symbol_editor_settings.h>
#include <settings/settings_manager.h>
#include <kicad_string.h>
#include "ee_point_editor.h"
static void* g_lastPinWeakPtr;
@ -181,7 +182,7 @@ int LIB_DRAWING_TOOLS::TwoClickPlace( const TOOL_EVENT& aEvent )
DIALOG_LIB_EDIT_TEXT dlg( m_frame, text );
if( dlg.ShowModal() != wxID_OK )
if( dlg.ShowModal() != wxID_OK || NoPrintableChars( text->GetText() ) )
delete text;
else
item = text;

View File

@ -24,7 +24,6 @@
#include "sch_drawing_tools.h"
#include "ee_selection_tool.h"
#include "ee_point_editor.h"
#include <ee_actions.h>
#include <sch_edit_frame.h>
#include <project.h>
@ -48,6 +47,7 @@
#include <dialogs/dialog_edit_line_style.h>
#include <dialogs/dialog_junction_props.h>
#include <dialogs/dialog_sheet_pin_properties.h>
#include <kicad_string.h>
SCH_DRAWING_TOOLS::SCH_DRAWING_TOOLS() :
EE_TOOL_BASE<SCH_EDIT_FRAME>( "eeschema.InteractiveDrawing" ),
@ -733,7 +733,7 @@ SCH_TEXT* SCH_DRAWING_TOOLS::createNewText( const VECTOR2I& aPosition, int aType
DIALOG_LABEL_EDITOR dlg( m_frame, textItem );
// Must be quasi modal for syntax help
if( dlg.ShowQuasiModal() != wxID_OK || textItem->GetText().IsEmpty() )
if( dlg.ShowQuasiModal() != wxID_OK || NoPrintableChars( textItem->GetText() ) )
{
delete textItem;
return nullptr;
@ -789,7 +789,7 @@ SCH_SHEET_PIN* SCH_DRAWING_TOOLS::createSheetPin( SCH_SHEET* aSheet, SCH_HIERLAB
{
DIALOG_SHEET_PIN_PROPERTIES dlg( m_frame, sheetPin );
if( dlg.ShowModal() != wxID_OK || sheetPin->GetText().IsEmpty() )
if( dlg.ShowModal() != wxID_OK || NoPrintableChars( sheetPin->GetText() ) )
{
delete sheetPin;
return nullptr;

View File

@ -115,6 +115,11 @@ wxString EscapeHTML( const wxString& aString );
*/
char* GetLine( FILE* aFile, char* Line, int* LineNum = NULL, int SizeLine = 255 );
/**
* Return true if the string is empty or contains only whitespace.
*/
bool NoPrintableChars( wxString aString );
/**
* Remove leading and training spaces, tabs and end of line chars in \a text
*

View File

@ -23,14 +23,18 @@
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
*/
#include "drawing_tool.h"
#include "pcb_actions.h"
#include <pcb_edit_frame.h>
#include <confirm.h>
#include <import_gfx/dialog_import_gfx.h>
#include <view/view_controls.h>
#include <view/view.h>
#include <tool/tool_manager.h>
#include <tools/pcb_actions.h>
#include <tools/grid_helper.h>
#include <tools/selection_tool.h>
#include <tools/tool_event_utils.h>
#include <tools/zone_create_helper.h>
#include <tools/drawing_tool.h>
#include <geometry/geometry_utils.h>
#include <board_commit.h>
#include <scoped_set_reset.h>
@ -39,24 +43,18 @@
#include <status_popup.h>
#include <dialogs/dialog_text_properties.h>
#include <preview_items/arc_assistant.h>
#include <board.h>
#include <fp_shape.h>
#include <pcb_text.h>
#include <dimension.h>
#include <zone.h>
#include <footprint.h>
#include <preview_items/two_point_assistant.h>
#include <preview_items/two_point_geom_manager.h>
#include <ratsnest/ratsnest_data.h>
#include <tools/grid_helper.h>
#include <tools/point_editor.h>
#include <tools/selection_tool.h>
#include <tools/tool_event_utils.h>
#include <tools/zone_create_helper.h>
#include <pcbnew_id.h>
#include <dialogs/dialog_track_via_size.h>
#include <kicad_string.h>
using SCOPED_DRAW_MODE = SCOPED_SET_RESET<DRAWING_TOOL::MODE>;
@ -99,11 +97,15 @@ protected:
VIA_DIMENSION via = bds.m_ViasDimensionsList[i];
if( via.m_Drill > 0 )
{
msg.Printf( _("Via %s, drill %s" ),
MessageTextFromValue( units, via.m_Diameter ),
MessageTextFromValue( units, via.m_Drill ) );
}
else
{
msg.Printf( _( "Via %s" ), MessageTextFromValue( units, via.m_Diameter ) );
}
int menuIdx = ID_POPUP_PCB_SELECT_VIASIZE1 + i;
Append( menuIdx, msg, wxEmptyString, wxITEM_CHECK );
@ -522,11 +524,10 @@ int DRAWING_TOOL::PlaceText( const TOOL_EVENT& aEvent )
RunMainStack( [&]()
{
cancelled = !textDialog.ShowModal()
|| fpText->GetText().IsEmpty();
cancelled = !textDialog.ShowModal();
} );
if( cancelled )
if( cancelled || NoPrintableChars( fpText->GetText() ) )
{
delete text;
text = nullptr;
@ -560,7 +561,7 @@ int DRAWING_TOOL::PlaceText( const TOOL_EVENT& aEvent )
m_frame->ShowTextPropertiesDialog( pcbText );
} );
if( pcbText->GetText().IsEmpty() )
if( NoPrintableChars( pcbText->GetText() ) )
delete pcbText;
else
text = pcbText;