Break sch_text.h/.cpp into sch_text and sch_label.

Also moves SCH_NETCLASS_FLAG to SCH_DIRECTIVE_LABEL, and remaps Altium
harnesses from SCH_TEXT to SCH_DIRECTIVE_LABEL.
This commit is contained in:
Jeff Young 2022-01-24 13:40:39 +00:00
parent 0036f44e37
commit 3409783d9f
44 changed files with 2254 additions and 2163 deletions

View File

@ -347,7 +347,7 @@ static struct EDA_ITEM_DESC
.Map( SCH_BITMAP_T, _HKI( "Bitmap" ) )
.Map( SCH_TEXT_T, _HKI( "Text" ) )
.Map( SCH_LABEL_T, _HKI( "Net Label" ) )
.Map( SCH_NETCLASS_FLAG_T, _HKI( "Net Class Flag" ) )
.Map( SCH_DIRECTIVE_LABEL_T, _HKI( "Directive Label" ) )
.Map( SCH_GLOBAL_LABEL_T, _HKI( "Global Label" ) )
.Map( SCH_HIER_LABEL_T, _HKI( "Hierarchical Label" ) )
.Map( SCH_FIELD_T, _HKI( "Field" ) )

View File

@ -92,7 +92,7 @@ COLOR_SETTINGS::COLOR_SETTINGS( const wxString& aFilename, bool aAbsolutePath )
CLR( "schematic.label_global", LAYER_GLOBLABEL );
CLR( "schematic.label_hier", LAYER_HIERLABEL );
CLR( "schematic.label_local", LAYER_LOCLABEL );
CLR( "schematic.netclass_flag", LAYER_NETCLASS_REFS );
CLR( "schematic.netclass_flag", LAYER_NETCLASS_REFS );
CLR( "schematic.no_connect", LAYER_NOCONNECT );
CLR( "schematic.note", LAYER_NOTES );
CLR( "schematic.note_background", LAYER_NOTES_BACKGROUND );

View File

@ -198,12 +198,11 @@ set( EESCHEMA_SRCS
sch_bus_entry.cpp
ee_collectors.cpp
sch_connection.cpp
sch_plugins/eagle/sch_eagle_plugin.cpp
sch_field.cpp
sch_io_mgr.cpp
sch_item.cpp
sch_junction.cpp
sch_plugins/legacy/sch_legacy_plugin.cpp
sch_label.cpp
sch_line.cpp
sch_marker.cpp
sch_no_connect.cpp
@ -211,8 +210,6 @@ set( EESCHEMA_SRCS
sch_plugin.cpp
sch_preview_panel.cpp
sch_screen.cpp
sch_plugins/kicad/sch_sexpr_parser.cpp
sch_plugins/kicad/sch_sexpr_plugin.cpp
sch_shape.cpp
sch_sheet.cpp
sch_sheet_path.cpp
@ -243,6 +240,11 @@ set( EESCHEMA_SRCS
netlist_exporters/netlist_exporter_pspice.cpp
netlist_exporters/netlist_generator.cpp
sch_plugins/eagle/sch_eagle_plugin.cpp
sch_plugins/kicad/sch_sexpr_parser.cpp
sch_plugins/kicad/sch_sexpr_plugin.cpp
sch_plugins/legacy/sch_legacy_plugin.cpp
# Simulator settings must get built even when the simulator build option is disabled.
sim/spice_settings.cpp

View File

@ -283,7 +283,7 @@ void DIALOG_GLOBAL_EDIT_TEXT_AND_GRAPHICS::processItem( const SCH_SHEET_PATH& aS
if( sch_text )
{
if( m_orientation->GetStringSelection() != INDETERMINATE_ACTION )
sch_text->SetLabelSpinStyle( (LABEL_SPIN_STYLE::SPIN) m_orientation->GetSelection() );
sch_text->SetTextSpinStyle( (TEXT_SPIN_STYLE::SPIN) m_orientation->GetSelection() );
}
if( aItem->HasLineStroke() )

View File

@ -40,6 +40,7 @@
#include <project/net_settings.h>
#include <project/project_file.h>
#include <kiface_base.h>
#include <sch_label.h>
class SCH_EDIT_FRAME;
@ -82,7 +83,7 @@ DIALOG_LABEL_PROPERTIES::DIALOG_LABEL_PROPERTIES( SCH_EDIT_FRAME* aParent, SCH_L
m_valueSingleLine->SetValidator( m_netNameValidator );
}
else if( m_currentLabel->Type() == SCH_NETCLASS_FLAG_T )
else if( m_currentLabel->Type() == SCH_DIRECTIVE_LABEL_T )
{
SetInitialFocus( m_grid );
m_delayedFocusRow = 0;
@ -98,12 +99,12 @@ DIALOG_LABEL_PROPERTIES::DIALOG_LABEL_PROPERTIES( SCH_EDIT_FRAME* aParent, SCH_L
switch( m_currentLabel->Type() )
{
case SCH_GLOBAL_LABEL_T: SetTitle( _( "Global Label Properties" ) ); break;
case SCH_HIER_LABEL_T: SetTitle( _( "Hierarchical Label Properties" ) ); break;
case SCH_LABEL_T: SetTitle( _( "Label Properties" ) ); break;
case SCH_NETCLASS_FLAG_T: SetTitle( _( "Net Class Flag Properties" ) ); break;
case SCH_SHEET_PIN_T: SetTitle( _( "Hierarchical Sheet Pin Properties" ) ); break;
default: UNIMPLEMENTED_FOR( m_currentLabel->GetClass() ); break;
case SCH_GLOBAL_LABEL_T: SetTitle( _( "Global Label Properties" ) ); break;
case SCH_HIER_LABEL_T: SetTitle( _( "Hierarchical Label Properties" ) ); break;
case SCH_LABEL_T: SetTitle( _( "Label Properties" ) ); break;
case SCH_DIRECTIVE_LABEL_T: SetTitle( _( "Directive Label Properties" ) ); break;
case SCH_SHEET_PIN_T: SetTitle( _( "Hierarchical Sheet Pin Properties" ) ); break;
default: UNIMPLEMENTED_FOR( m_currentLabel->GetClass() ); break;
}
// Give a bit more room for combobox editors
@ -158,7 +159,7 @@ DIALOG_LABEL_PROPERTIES::DIALOG_LABEL_PROPERTIES( SCH_EDIT_FRAME* aParent, SCH_L
m_spin2->SetBitmap( KiBitmap( BITMAPS::label_align_bottom ) );
m_spin3->SetBitmap( KiBitmap( BITMAPS::label_align_top ) );
}
else if( m_currentLabel->Type() == SCH_NETCLASS_FLAG_T )
else if( m_currentLabel->Type() == SCH_DIRECTIVE_LABEL_T )
{
m_input->Hide();
m_output->Hide();
@ -249,9 +250,10 @@ bool DIALOG_LABEL_PROPERTIES::TransferDataToWindow()
m_valueCombo->Append( existingLabelArray );
}
else if( m_currentLabel->Type() == SCH_NETCLASS_FLAG_T )
else if( m_currentLabel->Type() == SCH_DIRECTIVE_LABEL_T )
{
// Load the combobox with existing existingNetclassNames
// Load the combobox with existing existing netclass names. While it's not the only
// think a directive is used for, it is the most common.
NET_SETTINGS& netSettings = m_Parent->Schematic().Prj().GetProjectFile().NetSettings();
wxArrayString existingNetclassNames;
@ -297,20 +299,20 @@ bool DIALOG_LABEL_PROPERTIES::TransferDataToWindow()
m_fontCtrl->SetFontSelection( m_currentLabel->GetFont() );
if( m_currentLabel->Type() == SCH_NETCLASS_FLAG_T )
m_textSize.SetValue( static_cast<SCH_NETCLASS_FLAG*>( m_currentLabel )->GetPinLength() );
if( m_currentLabel->Type() == SCH_DIRECTIVE_LABEL_T )
m_textSize.SetValue( static_cast<SCH_DIRECTIVE_LABEL*>( m_currentLabel )->GetPinLength() );
else
m_textSize.SetValue( m_currentLabel->GetTextWidth() );
m_bold->Check( m_currentLabel->IsBold() );
m_italic->Check( m_currentLabel->IsItalic() );
switch( m_currentLabel->GetLabelSpinStyle() )
switch( m_currentLabel->GetTextSpinStyle() )
{
case LABEL_SPIN_STYLE::RIGHT: m_spin0->Check( true ); break;
case LABEL_SPIN_STYLE::LEFT: m_spin1->Check( true ); break;
case LABEL_SPIN_STYLE::UP: m_spin2->Check( true ); break;
case LABEL_SPIN_STYLE::BOTTOM: m_spin3->Check( true ); break;
case TEXT_SPIN_STYLE::RIGHT: m_spin0->Check( true ); break;
case TEXT_SPIN_STYLE::LEFT: m_spin1->Check( true ); break;
case TEXT_SPIN_STYLE::UP: m_spin2->Check( true ); break;
case TEXT_SPIN_STYLE::BOTTOM: m_spin3->Check( true ); break;
}
return true;
@ -448,8 +450,8 @@ bool DIALOG_LABEL_PROPERTIES::TransferDataFromWindow()
m_italic->IsChecked() ) );
}
if( m_currentLabel->Type() == SCH_NETCLASS_FLAG_T )
static_cast<SCH_NETCLASS_FLAG*>( m_currentLabel )->SetPinLength( m_textSize.GetValue() );
if( m_currentLabel->Type() == SCH_DIRECTIVE_LABEL_T )
static_cast<SCH_DIRECTIVE_LABEL*>( m_currentLabel )->SetPinLength( m_textSize.GetValue() );
else if( m_currentLabel->GetTextWidth() != m_textSize.GetValue() )
m_currentLabel->SetTextSize( wxSize( m_textSize.GetValue(), m_textSize.GetValue() ) );
@ -469,19 +471,19 @@ bool DIALOG_LABEL_PROPERTIES::TransferDataFromWindow()
m_currentLabel->SetItalic( m_italic->IsChecked() );
LABEL_SPIN_STYLE selectedSpinStyle= LABEL_SPIN_STYLE::LEFT;
TEXT_SPIN_STYLE selectedSpinStyle= TEXT_SPIN_STYLE::LEFT;
if( m_spin0->IsChecked() )
selectedSpinStyle = LABEL_SPIN_STYLE::RIGHT;
selectedSpinStyle = TEXT_SPIN_STYLE::RIGHT;
else if( m_spin1->IsChecked() )
selectedSpinStyle = LABEL_SPIN_STYLE::LEFT;
selectedSpinStyle = TEXT_SPIN_STYLE::LEFT;
else if( m_spin2->IsChecked() )
selectedSpinStyle = LABEL_SPIN_STYLE::UP;
selectedSpinStyle = TEXT_SPIN_STYLE::UP;
else if( m_spin3->IsChecked() )
selectedSpinStyle = LABEL_SPIN_STYLE::BOTTOM;
selectedSpinStyle = TEXT_SPIN_STYLE::BOTTOM;
if( m_currentLabel->GetLabelSpinStyle() != selectedSpinStyle )
m_currentLabel->SetLabelSpinStyle( selectedSpinStyle );
if( m_currentLabel->GetTextSpinStyle() != selectedSpinStyle )
m_currentLabel->SetTextSpinStyle( selectedSpinStyle );
if( doAutoplace )
m_currentLabel->AutoAutoplaceFields( m_Parent->GetScreen() );

View File

@ -121,12 +121,12 @@ bool DIALOG_TEXT_PROPERTIES::TransferDataToWindow()
m_bold->Check( m_currentText->IsBold() );
m_italic->Check( m_currentText->IsItalic() );
switch( m_currentText->GetLabelSpinStyle() )
switch( m_currentText->GetTextSpinStyle() )
{
case LABEL_SPIN_STYLE::RIGHT: m_spin0->Check( true ); break;
case LABEL_SPIN_STYLE::LEFT: m_spin1->Check( true ); break;
case LABEL_SPIN_STYLE::UP: m_spin2->Check( true ); break;
case LABEL_SPIN_STYLE::BOTTOM: m_spin3->Check( true ); break;
case TEXT_SPIN_STYLE::RIGHT: m_spin0->Check( true ); break;
case TEXT_SPIN_STYLE::LEFT: m_spin1->Check( true ); break;
case TEXT_SPIN_STYLE::UP: m_spin2->Check( true ); break;
case TEXT_SPIN_STYLE::BOTTOM: m_spin3->Check( true ); break;
}
return true;
@ -267,19 +267,19 @@ bool DIALOG_TEXT_PROPERTIES::TransferDataFromWindow()
m_currentText->SetItalic( m_italic->IsChecked() );
LABEL_SPIN_STYLE selectedSpinStyle= LABEL_SPIN_STYLE::LEFT;
TEXT_SPIN_STYLE selectedSpinStyle= TEXT_SPIN_STYLE::LEFT;
if( m_spin0->IsChecked() )
selectedSpinStyle = LABEL_SPIN_STYLE::RIGHT;
selectedSpinStyle = TEXT_SPIN_STYLE::RIGHT;
else if( m_spin1->IsChecked() )
selectedSpinStyle = LABEL_SPIN_STYLE::LEFT;
selectedSpinStyle = TEXT_SPIN_STYLE::LEFT;
else if( m_spin2->IsChecked() )
selectedSpinStyle = LABEL_SPIN_STYLE::UP;
selectedSpinStyle = TEXT_SPIN_STYLE::UP;
else if( m_spin3->IsChecked() )
selectedSpinStyle = LABEL_SPIN_STYLE::BOTTOM;
selectedSpinStyle = TEXT_SPIN_STYLE::BOTTOM;
if( m_currentText->GetLabelSpinStyle() != selectedSpinStyle )
m_currentText->SetLabelSpinStyle( selectedSpinStyle );
if( m_currentText->GetTextSpinStyle() != selectedSpinStyle )
m_currentText->SetTextSpinStyle( selectedSpinStyle );
m_frame->UpdateItem( m_currentText, false, true );
m_frame->GetCanvas()->Refresh();

View File

@ -317,26 +317,26 @@ void PANEL_EESCHEMA_COLOR_SETTINGS::createPreviewItems()
addItem( e2 );
SCH_TEXT* t1 = new SCH_TEXT( MILS_POINT( 2850, 2250 ), wxT( "PLAIN TEXT" ) );
t1->SetLabelSpinStyle( LABEL_SPIN_STYLE::SPIN::LEFT );
t1->SetTextSpinStyle( TEXT_SPIN_STYLE::SPIN::LEFT );
addItem( t1 );
SCH_LABEL* t2 = new SCH_LABEL( MILS_POINT( 1975, 1500 ), wxT( "LABEL_{0}" ) );
t2->SetLabelSpinStyle( LABEL_SPIN_STYLE::SPIN::RIGHT );
t2->SetTextSpinStyle( TEXT_SPIN_STYLE::SPIN::RIGHT );
t2->SetIsDangling( false );
addItem( t2 );
SCH_LABEL* t3 = new SCH_LABEL( MILS_POINT( 1975, 2600 ), wxT( "LABEL_{1}" ) );
t3->SetLabelSpinStyle( LABEL_SPIN_STYLE::SPIN::RIGHT );
t3->SetTextSpinStyle( TEXT_SPIN_STYLE::SPIN::RIGHT );
t3->SetIsDangling( false );
addItem( t3 );
SCH_GLOBALLABEL* t4 = new SCH_GLOBALLABEL( MILS_POINT( 1750, 1400 ), wxT( "GLOBAL[0..3]" ) );
t4->SetLabelSpinStyle( LABEL_SPIN_STYLE::SPIN::LEFT );
t4->SetTextSpinStyle( TEXT_SPIN_STYLE::SPIN::LEFT );
t4->SetIsDangling( false );
addItem( t4 );
SCH_HIERLABEL* t5 = new SCH_HIERLABEL( MILS_POINT( 3250, 1600 ), wxT( "HIER_LABEL" ) );
t5->SetLabelSpinStyle( LABEL_SPIN_STYLE::SPIN::RIGHT );
t5->SetTextSpinStyle( TEXT_SPIN_STYLE::SPIN::RIGHT );
t5->SetIsDangling( false );
addItem( t5 );

View File

@ -48,7 +48,7 @@ const KICAD_T EE_COLLECTOR::EditableItems[] = {
SCH_LABEL_T,
SCH_GLOBAL_LABEL_T,
SCH_HIER_LABEL_T,
SCH_NETCLASS_FLAG_T,
SCH_DIRECTIVE_LABEL_T,
SCH_FIELD_T,
SCH_SYMBOL_T,
SCH_SHEET_PIN_T,
@ -87,7 +87,7 @@ const KICAD_T EE_COLLECTOR::MovableItems[] =
SCH_LABEL_T,
SCH_GLOBAL_LABEL_T,
SCH_HIER_LABEL_T,
SCH_NETCLASS_FLAG_T,
SCH_DIRECTIVE_LABEL_T,
SCH_FIELD_T,
SCH_SYMBOL_T,
SCH_SHEET_PIN_T,
@ -108,7 +108,7 @@ const KICAD_T EE_COLLECTOR::FieldOwners[] = {
SCH_LABEL_T,
SCH_GLOBAL_LABEL_T,
SCH_HIER_LABEL_T,
SCH_NETCLASS_FLAG_T,
SCH_DIRECTIVE_LABEL_T,
EOT
};

View File

@ -27,7 +27,7 @@
#include <fields_grid_table.h>
#include <sch_base_frame.h>
#include <sch_field.h>
#include <sch_text.h>
#include <sch_label.h>
#include <sch_validators.h>
#include <validators.h>
#include <sch_edit_frame.h>

View File

@ -321,7 +321,7 @@ void SCH_BASE_FRAME::UpdateItem( EDA_ITEM* aItem, bool isAddOrDelete, bool aUpda
SCH_LABEL_T,
SCH_GLOBAL_LABEL_T,
SCH_HIER_LABEL_T,
SCH_NETCLASS_FLAG_T,
SCH_DIRECTIVE_LABEL_T,
EOT };
if( parent && parent->IsType( parentTypes ) )

View File

@ -31,7 +31,7 @@
#include <sch_edit_frame.h>
#include <sch_junction.h>
#include <sch_line.h>
#include <sch_text.h>
#include <sch_label.h>
#include <project/net_settings.h>
#include <project/project_file.h>
#include <settings/color_settings.h>

View File

@ -44,6 +44,7 @@
#include <symbol_library.h>
#include <sch_symbol.h>
#include <sch_field.h>
#include <sch_label.h>
#include <schematic.h>
#include <settings/color_settings.h>
#include <string_utils.h>

View File

@ -72,4 +72,5 @@
//#define SEXPR_SCHEMATIC_FILE_VERSION 20220101 // Circles, arcs, rects, polys & beziers
//#define SEXPR_SCHEMATIC_FILE_VERSION 20220102 // Dash-dot-dot
//#define SEXPR_SCHEMATIC_FILE_VERSION 20220103 // Label fields
#define SEXPR_SCHEMATIC_FILE_VERSION 20220104 // Fonts
//#define SEXPR_SCHEMATIC_FILE_VERSION 20220104 // Fonts
#define SEXPR_SCHEMATIC_FILE_VERSION 20220124 // netclass_flag -> directive_label

1481
eeschema/sch_label.cpp Normal file

File diff suppressed because it is too large Load Diff

384
eeschema/sch_label.h Normal file
View File

@ -0,0 +1,384 @@
/*
* This program source code file is part of KiCad, a free EDA CAD application.
*
* Copyright (C) 2015 Jean-Pierre Charras, jp.charras at wanadoo.fr
* Copyright (C) 1992-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
* 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
*/
#ifndef SCH_LABEL_H
#define SCH_LABEL_H
#include <sch_text.h>
#include <sch_item.h>
#include <sch_field.h>
#include <sch_connection.h> // for CONNECTION_TYPE
extern const char* SheetLabelType[]; /* names of types of labels */
class SCH_LABEL_BASE : public SCH_TEXT
{
public:
SCH_LABEL_BASE( const VECTOR2I& aPos, const wxString& aText, KICAD_T aType );
SCH_LABEL_BASE( const SCH_LABEL_BASE& aLabel );
// Abstract class
virtual wxString GetClass() const override = 0;
bool IsType( const KICAD_T aScanTypes[] ) const override;
void SwapData( SCH_ITEM* aItem ) override;
LABEL_FLAG_SHAPE GetShape() const override { return m_shape; }
void SetShape( LABEL_FLAG_SHAPE aShape ) override { m_shape = aShape; }
static const wxString GetDefaultFieldName( const wxString& aName, bool aUseDefaultName );
virtual int GetMandatoryFieldCount() { return 0; }
std::vector<SCH_FIELD>& GetFields() { return m_fields; }
const std::vector<SCH_FIELD>& GetFields() const { return m_fields; }
/**
* Set multiple schematic fields.
*
* @param aFields are the fields to set in this symbol.
*/
void SetFields( const std::vector<SCH_FIELD>& aFields )
{
m_fields = aFields; // vector copying, length is changed possibly
}
/**
* Increment the label text, if it ends with a number.
*
* @param aIncrement = the increment value to add to the number ending the text.
*/
bool IncrementLabel( int aIncrement );
void Move( const VECTOR2I& aMoveVector ) override
{
SCH_TEXT::Move( aMoveVector );
for( SCH_FIELD& field : m_fields )
field.Offset( aMoveVector );
}
void Rotate( const VECTOR2I& aCenter ) override;
void Rotate90( bool aClockwise ) override;
void AutoplaceFields( SCH_SCREEN* aScreen, bool aManual ) override;
virtual bool ResolveTextVar( wxString* token, int aDepth ) const;
wxString GetShownText( int aDepth = 0 ) const override;
void RunOnChildren( const std::function<void( SCH_ITEM* )>& aFunction ) override;
SEARCH_RESULT Visit( INSPECTOR inspector, void* testData, const KICAD_T scanTypes[] ) override;
VECTOR2I GetSchematicTextOffset( const RENDER_SETTINGS* aSettings ) const override;
/**
* Calculate the graphic shape (a polygon) associated to the text.
*
* @param aPoints A buffer to fill with polygon corners coordinates
* @param Pos Position of the shape, for texts and labels: do nothing
*/
virtual void CreateGraphicShape( const RENDER_SETTINGS* aSettings,
std::vector<VECTOR2I>& aPoints, const VECTOR2I& Pos ) const
{
aPoints.clear();
}
int GetLabelBoxExpansion( const RENDER_SETTINGS* aSettings = nullptr ) const;
/**
* Return the bounding box of the label only, without taking in account its fields.
*/
virtual const EDA_RECT GetBodyBoundingBox() const;
/**
* Return the bounding box of the label including its fields.
*/
const EDA_RECT GetBoundingBox() const override;
bool HitTest( const VECTOR2I& aPosition, int aAccuracy = 0 ) const override;
bool HitTest( const EDA_RECT& aRect, bool aContained, int aAccuracy = 0 ) const override;
std::vector<VECTOR2I> GetConnectionPoints() const override;
void GetEndPoints( std::vector< DANGLING_END_ITEM >& aItemList ) override;
bool UpdateDanglingState( std::vector<DANGLING_END_ITEM>& aItemList,
const SCH_SHEET_PATH* aPath = nullptr ) override;
bool IsDangling() const override { return m_isDangling; }
void SetIsDangling( bool aIsDangling ) { m_isDangling = aIsDangling; }
void ViewGetLayers( int aLayers[], int& aCount ) const override;
void GetMsgPanelInfo( EDA_DRAW_FRAME* aFrame, std::vector<MSG_PANEL_ITEM>& aList ) override;
void Plot( PLOTTER* aPlotter ) const override;
void Print( const RENDER_SETTINGS* aSettings, const VECTOR2I& offset ) override;
protected:
std::vector<SCH_FIELD> m_fields;
LABEL_FLAG_SHAPE m_shape;
CONNECTION_TYPE m_connectionType;
bool m_isDangling;
};
class SCH_LABEL : public SCH_LABEL_BASE
{
public:
SCH_LABEL( const VECTOR2I& aPos = VECTOR2I( 0, 0 ), const wxString& aText = wxEmptyString );
// Do not create a copy constructor. The one generated by the compiler is adequate.
~SCH_LABEL() { }
static inline bool ClassOf( const EDA_ITEM* aItem )
{
return aItem && SCH_LABEL_T == aItem->Type();
}
wxString GetClass() const override
{
return wxT( "SCH_LABEL" );
}
const EDA_RECT GetBodyBoundingBox() const override;
bool IsConnectable() const override { return true; }
bool CanConnect( const SCH_ITEM* aItem ) const override
{
return aItem->Type() == SCH_LINE_T &&
( aItem->GetLayer() == LAYER_WIRE || aItem->GetLayer() == LAYER_BUS );
}
wxString GetSelectMenuText( EDA_UNITS aUnits ) const override;
BITMAPS GetMenuImage() const override;
bool IsReplaceable() const override { return true; }
EDA_ITEM* Clone() const override
{
return new SCH_LABEL( *this );
}
bool IsPointClickableAnchor( const VECTOR2I& aPos ) const override
{
return m_isDangling && GetPosition() == aPos;
}
private:
bool doIsConnected( const VECTOR2I& aPosition ) const override
{
return EDA_TEXT::GetTextPos() == aPosition;
}
};
class SCH_DIRECTIVE_LABEL : public SCH_LABEL_BASE
{
public:
SCH_DIRECTIVE_LABEL( const VECTOR2I& aPos = VECTOR2I( 0, 0 ) );
SCH_DIRECTIVE_LABEL( const SCH_DIRECTIVE_LABEL& aClassLabel );
~SCH_DIRECTIVE_LABEL() { }
static inline bool ClassOf( const EDA_ITEM* aItem )
{
return aItem && SCH_DIRECTIVE_LABEL_T == aItem->Type();
}
wxString GetClass() const override
{
return wxT( "SCH_DIRECTIVE_LABEL" );
}
EDA_ITEM* Clone() const override
{
return new SCH_DIRECTIVE_LABEL( *this );
}
int GetPinLength() const { return m_pinLength; }
void SetPinLength( int aLength ) { m_pinLength = aLength; }
void CreateGraphicShape( const RENDER_SETTINGS* aSettings, std::vector<VECTOR2I>& aPoints,
const VECTOR2I& aPos ) const override;
void AutoplaceFields( SCH_SCREEN* aScreen, bool aManual ) override;
wxString GetSelectMenuText( EDA_UNITS aUnits ) const override;
bool IsConnectable() const override { return true; }
bool CanConnect( const SCH_ITEM* aItem ) const override
{
return aItem->Type() == SCH_LINE_T &&
( aItem->GetLayer() == LAYER_WIRE || aItem->GetLayer() == LAYER_BUS );
}
private:
int m_pinLength;
int m_symbolSize;
};
class SCH_GLOBALLABEL : public SCH_LABEL_BASE
{
public:
SCH_GLOBALLABEL( const VECTOR2I& aPos = VECTOR2I( 0, 0 ), const wxString& aText = wxEmptyString );
SCH_GLOBALLABEL( const SCH_GLOBALLABEL& aGlobalLabel );
~SCH_GLOBALLABEL() { }
static inline bool ClassOf( const EDA_ITEM* aItem )
{
return aItem && SCH_GLOBAL_LABEL_T == aItem->Type();
}
wxString GetClass() const override
{
return wxT( "SCH_GLOBALLABEL" );
}
EDA_ITEM* Clone() const override
{
return new SCH_GLOBALLABEL( *this );
}
int GetMandatoryFieldCount() override { return 1; }
void MirrorSpinStyle( bool aLeftRight ) override;
void MirrorHorizontally( int aCenter ) override;
void MirrorVertically( int aCenter ) override;
void SetTextSpinStyle( TEXT_SPIN_STYLE aSpinStyle ) override;
VECTOR2I GetSchematicTextOffset( const RENDER_SETTINGS* aSettings ) const override;
void CreateGraphicShape( const RENDER_SETTINGS* aRenderSettings, std::vector<VECTOR2I>& aPoints,
const VECTOR2I& aPos ) const override;
bool ResolveTextVar( wxString* token, int aDepth ) const override;
bool IsConnectable() const override { return true; }
bool CanConnect( const SCH_ITEM* aItem ) const override
{
return aItem->Type() == SCH_LINE_T &&
( aItem->GetLayer() == LAYER_WIRE || aItem->GetLayer() == LAYER_BUS );
}
void ViewGetLayers( int aLayers[], int& aCount ) const override;
wxString GetSelectMenuText( EDA_UNITS aUnits ) const override;
BITMAPS GetMenuImage() const override;
bool IsPointClickableAnchor( const VECTOR2I& aPos ) const override
{
return m_isDangling && GetPosition() == aPos;
}
private:
bool doIsConnected( const VECTOR2I& aPosition ) const override
{
return EDA_TEXT::GetTextPos() == aPosition;
}
};
class SCH_HIERLABEL : public SCH_LABEL_BASE
{
public:
SCH_HIERLABEL( const VECTOR2I& aPos = VECTOR2I( 0, 0 ), const wxString& aText = wxEmptyString,
KICAD_T aType = SCH_HIER_LABEL_T );
// Do not create a copy constructor. The one generated by the compiler is adequate.
~SCH_HIERLABEL() { }
static inline bool ClassOf( const EDA_ITEM* aItem )
{
return aItem && SCH_HIER_LABEL_T == aItem->Type();
}
wxString GetClass() const override
{
return wxT( "SCH_HIERLABEL" );
}
void SetTextSpinStyle( TEXT_SPIN_STYLE aSpinStyle ) override;
VECTOR2I GetSchematicTextOffset( const RENDER_SETTINGS* aSettings ) const override;
void CreateGraphicShape( const RENDER_SETTINGS* aSettings, std::vector<VECTOR2I>& aPoints,
const VECTOR2I& aPos ) const override;
void CreateGraphicShape( const RENDER_SETTINGS* aSettings, std::vector<VECTOR2I>& aPoints,
const VECTOR2I& aPos, LABEL_FLAG_SHAPE aShape ) const;
const EDA_RECT GetBodyBoundingBox() const override;
bool IsConnectable() const override { return true; }
bool CanConnect( const SCH_ITEM* aItem ) const override
{
return aItem->Type() == SCH_LINE_T &&
( aItem->GetLayer() == LAYER_WIRE || aItem->GetLayer() == LAYER_BUS );
}
wxString GetSelectMenuText( EDA_UNITS aUnits ) const override;
BITMAPS GetMenuImage() const override;
EDA_ITEM* Clone() const override
{
return new SCH_HIERLABEL( *this );
}
bool IsPointClickableAnchor( const VECTOR2I& aPos ) const override
{
return m_isDangling && GetPosition() == aPos;
}
private:
bool doIsConnected( const VECTOR2I& aPosition ) const override
{
return EDA_TEXT::GetTextPos() == aPosition;
}
};
#endif /* SCH_LABEL_H */

View File

@ -668,7 +668,7 @@ bool SCH_LINE::CanConnect( const SCH_ITEM* aItem ) const
case SCH_LABEL_T:
case SCH_GLOBAL_LABEL_T:
case SCH_HIER_LABEL_T:
case SCH_NETCLASS_FLAG_T:
case SCH_DIRECTIVE_LABEL_T:
case SCH_BUS_WIRE_ENTRY_T:
case SCH_SYMBOL_T:
case SCH_SHEET_T:
@ -686,7 +686,7 @@ bool SCH_LINE::CanConnect( const SCH_ITEM* aItem ) const
case SCH_LABEL_T:
case SCH_GLOBAL_LABEL_T:
case SCH_HIER_LABEL_T:
case SCH_NETCLASS_FLAG_T:
case SCH_DIRECTIVE_LABEL_T:
case SCH_BUS_WIRE_ENTRY_T:
case SCH_SHEET_T:
case SCH_SHEET_PIN_T:

View File

@ -225,7 +225,7 @@ bool SCH_PAINTER::Draw( const VIEW_ITEM *aItem, int aLayer )
HANDLE_ITEM( SCH_SHAPE_T, SCH_SHAPE );
HANDLE_ITEM( SCH_TEXT_T, SCH_TEXT );
HANDLE_ITEM( SCH_LABEL_T, SCH_LABEL );
HANDLE_ITEM( SCH_NETCLASS_FLAG_T, SCH_NETCLASS_FLAG );
HANDLE_ITEM( SCH_DIRECTIVE_LABEL_T, SCH_DIRECTIVE_LABEL );
HANDLE_ITEM( SCH_FIELD_T, SCH_FIELD );
HANDLE_ITEM( SCH_HIER_LABEL_T, SCH_HIERLABEL );
HANDLE_ITEM( SCH_GLOBAL_LABEL_T, SCH_GLOBALLABEL );
@ -1473,12 +1473,12 @@ void SCH_PAINTER::draw( const SCH_TEXT *aText, int aLayer )
switch( aText->Type() )
{
case SCH_SHEET_PIN_T: aLayer = LAYER_SHEETLABEL; break;
case SCH_HIER_LABEL_T: aLayer = LAYER_HIERLABEL; break;
case SCH_GLOBAL_LABEL_T: aLayer = LAYER_GLOBLABEL; break;
case SCH_NETCLASS_FLAG_T: aLayer = LAYER_NETCLASS_REFS; break;
case SCH_LABEL_T: aLayer = LAYER_LOCLABEL; break;
default: aLayer = LAYER_NOTES; break;
case SCH_SHEET_PIN_T: aLayer = LAYER_SHEETLABEL; break;
case SCH_HIER_LABEL_T: aLayer = LAYER_HIERLABEL; break;
case SCH_GLOBAL_LABEL_T: aLayer = LAYER_GLOBLABEL; break;
case SCH_DIRECTIVE_LABEL_T: aLayer = LAYER_NETCLASS_REFS; break;
case SCH_LABEL_T: aLayer = LAYER_LOCLABEL; break;
default: aLayer = LAYER_NOTES; break;
}
COLOR4D color = getRenderColor( aText, aLayer, drawingShadows );
@ -1892,7 +1892,7 @@ void SCH_PAINTER::draw( const SCH_HIERLABEL *aLabel, int aLayer )
}
void SCH_PAINTER::draw( const SCH_NETCLASS_FLAG *aLabel, int aLayer )
void SCH_PAINTER::draw( const SCH_DIRECTIVE_LABEL *aLabel, int aLayer )
{
bool drawingShadows = aLayer == LAYER_SELECTION_SHADOWS;

View File

@ -44,7 +44,7 @@ class SCH_JUNCTION;
class SCH_LABEL;
class SCH_TEXT;
class SCH_HIERLABEL;
class SCH_NETCLASS_FLAG;
class SCH_DIRECTIVE_LABEL;
class SCH_GLOBALLABEL;
class SCH_SHEET;
class SCH_SHEET_PIN;
@ -161,7 +161,7 @@ private:
void draw( const SCH_SHAPE* shape, int aLayer );
void draw( const SCH_TEXT* aText, int aLayer );
void draw( const SCH_LABEL* aText, int aLayer );
void draw( const SCH_NETCLASS_FLAG* aLabel, int aLayer );
void draw( const SCH_DIRECTIVE_LABEL* aLabel, int aLayer );
void draw( const SCH_HIERLABEL* aLabel, int aLayer );
void draw( const SCH_GLOBALLABEL* aLabel, int aLayer );
void draw( const SCH_SHEET* aSheet, int aLayer );

View File

@ -45,9 +45,9 @@
#include <sch_line.h>
#include <sch_no_connect.h>
#include <sch_screen.h>
#include <sch_label.h>
#include <sch_sheet.h>
#include <sch_sheet_pin.h>
#include <sch_text.h>
#include <bezier_curves.h>
#include <compoundfilereader.h>
@ -920,14 +920,14 @@ void SCH_ALTIUM_PLUGIN::ParseTextFrame( const std::map<wxString, wxString>& aPro
{
default:
case ASCH_TEXT_FRAME_ALIGNMENT::LEFT:
text->SetLabelSpinStyle( LABEL_SPIN_STYLE::SPIN::RIGHT );
text->SetTextSpinStyle( TEXT_SPIN_STYLE::SPIN::RIGHT );
break;
case ASCH_TEXT_FRAME_ALIGNMENT::CENTER:
// No support for centered text in Eeschema yet...
text->SetLabelSpinStyle( LABEL_SPIN_STYLE::SPIN::RIGHT );
text->SetTextSpinStyle( TEXT_SPIN_STYLE::SPIN::RIGHT );
break;
case ASCH_TEXT_FRAME_ALIGNMENT::RIGHT:
text->SetLabelSpinStyle( LABEL_SPIN_STYLE::SPIN::LEFT );
text->SetTextSpinStyle( TEXT_SPIN_STYLE::SPIN::LEFT );
break;
}
@ -960,14 +960,14 @@ void SCH_ALTIUM_PLUGIN::ParseNote( const std::map<wxString, wxString>& aProperti
{
default:
case ASCH_TEXT_FRAME_ALIGNMENT::LEFT:
text->SetLabelSpinStyle( LABEL_SPIN_STYLE::SPIN::RIGHT );
text->SetTextSpinStyle( TEXT_SPIN_STYLE::SPIN::RIGHT );
break;
case ASCH_TEXT_FRAME_ALIGNMENT::CENTER:
// No support for centered text in Eeschema yet...
text->SetLabelSpinStyle( LABEL_SPIN_STYLE::SPIN::RIGHT );
text->SetTextSpinStyle( TEXT_SPIN_STYLE::SPIN::RIGHT );
break;
case ASCH_TEXT_FRAME_ALIGNMENT::RIGHT:
text->SetLabelSpinStyle( LABEL_SPIN_STYLE::SPIN::LEFT );
text->SetTextSpinStyle( TEXT_SPIN_STYLE::SPIN::LEFT );
break;
}
@ -1502,7 +1502,7 @@ void SCH_ALTIUM_PLUGIN::ParseSheetEntry( const std::map<wxString, wxString>& aPr
sheetPin->SetText( elem.name );
sheetPin->SetShape( LABEL_FLAG_SHAPE::L_UNSPECIFIED );
//sheetPin->SetLabelSpinStyle( getSpinStyle( term.OrientAngle, false ) );
//sheetPin->SetTextSpinStyle( getSpinStyle( term.OrientAngle, false ) );
//sheetPin->SetPosition( getKiCadPoint( term.Position ) );
VECTOR2I pos = sheetIt->second->GetPosition();
@ -1513,22 +1513,22 @@ void SCH_ALTIUM_PLUGIN::ParseSheetEntry( const std::map<wxString, wxString>& aPr
default:
case ASCH_SHEET_ENTRY_SIDE::LEFT:
sheetPin->SetPosition( { pos.x, pos.y + elem.distanceFromTop } );
sheetPin->SetLabelSpinStyle( LABEL_SPIN_STYLE::LEFT );
sheetPin->SetTextSpinStyle( TEXT_SPIN_STYLE::LEFT );
sheetPin->SetSide( SHEET_SIDE::LEFT );
break;
case ASCH_SHEET_ENTRY_SIDE::RIGHT:
sheetPin->SetPosition( { pos.x + size.x, pos.y + elem.distanceFromTop } );
sheetPin->SetLabelSpinStyle( LABEL_SPIN_STYLE::RIGHT );
sheetPin->SetTextSpinStyle( TEXT_SPIN_STYLE::RIGHT );
sheetPin->SetSide( SHEET_SIDE::RIGHT );
break;
case ASCH_SHEET_ENTRY_SIDE::TOP:
sheetPin->SetPosition( { pos.x + elem.distanceFromTop, pos.y } );
sheetPin->SetLabelSpinStyle( LABEL_SPIN_STYLE::UP );
sheetPin->SetTextSpinStyle( TEXT_SPIN_STYLE::UP );
sheetPin->SetSide( SHEET_SIDE::TOP );
break;
case ASCH_SHEET_ENTRY_SIDE::BOTTOM:
sheetPin->SetPosition( { pos.x + elem.distanceFromTop, pos.y + size.y } );
sheetPin->SetLabelSpinStyle( LABEL_SPIN_STYLE::BOTTOM );
sheetPin->SetTextSpinStyle( TEXT_SPIN_STYLE::BOTTOM );
sheetPin->SetSide( SHEET_SIDE::BOTTOM );
break;
}
@ -1900,17 +1900,18 @@ void SCH_ALTIUM_PLUGIN::ParsePort( const ASCH_PORT& aElem )
}
// Select label position. In case both match, we will add a line later.
VECTOR2I position = ( startIsWireTerminal || startIsBusTerminal ) ? start : end;
SCH_TEXT* label;
VECTOR2I position = ( startIsWireTerminal || startIsBusTerminal ) ? start : end;
SCH_LABEL_BASE* label;
if( isHarness )
{
wxString name = wxT( "HARNESS: " ) + aElem.name;
label = new SCH_DIRECTIVE_LABEL( position );
if( aElem.harnessType != aElem.name )
name += wxString::Format( wxT( " (%s)" ), aElem.harnessType );
std::vector<SCH_FIELD>& fields = label->GetFields();
label = new SCH_TEXT( position, name );
fields.emplace_back( SCH_FIELD( { 0, 0 }, 0, label, wxT( "Harness" ) ) );
fields[0].SetText( aElem.harnessType );
fields[0].SetVisible( true );
}
// TODO: detect correct label type depending on sheet settings, etc.
//{
@ -1947,18 +1948,18 @@ void SCH_ALTIUM_PLUGIN::ParsePort( const ASCH_PORT& aElem )
case ASCH_PORT_STYLE::RIGHT:
case ASCH_PORT_STYLE::LEFT_RIGHT:
if( ( startIsWireTerminal || startIsBusTerminal ) )
label->SetLabelSpinStyle( LABEL_SPIN_STYLE::RIGHT );
label->SetTextSpinStyle( TEXT_SPIN_STYLE::RIGHT );
else
label->SetLabelSpinStyle( LABEL_SPIN_STYLE::LEFT );
label->SetTextSpinStyle( TEXT_SPIN_STYLE::LEFT );
break;
case ASCH_PORT_STYLE::NONE_VERTICAL:
case ASCH_PORT_STYLE::TOP:
case ASCH_PORT_STYLE::BOTTOM:
case ASCH_PORT_STYLE::TOP_BOTTOM:
if( ( startIsWireTerminal || startIsBusTerminal ) )
label->SetLabelSpinStyle( LABEL_SPIN_STYLE::UP );
label->SetTextSpinStyle( TEXT_SPIN_STYLE::UP );
else
label->SetLabelSpinStyle( LABEL_SPIN_STYLE::BOTTOM );
label->SetTextSpinStyle( TEXT_SPIN_STYLE::BOTTOM );
break;
}
@ -2008,16 +2009,16 @@ void SCH_ALTIUM_PLUGIN::ParseNetLabel( const std::map<wxString, wxString>& aProp
switch( elem.orientation )
{
case ASCH_RECORD_ORIENTATION::RIGHTWARDS:
label->SetLabelSpinStyle( LABEL_SPIN_STYLE::RIGHT );
label->SetTextSpinStyle( TEXT_SPIN_STYLE::RIGHT );
break;
case ASCH_RECORD_ORIENTATION::UPWARDS:
label->SetLabelSpinStyle( LABEL_SPIN_STYLE::UP );
label->SetTextSpinStyle( TEXT_SPIN_STYLE::UP );
break;
case ASCH_RECORD_ORIENTATION::LEFTWARDS:
label->SetLabelSpinStyle( LABEL_SPIN_STYLE::LEFT );
label->SetTextSpinStyle( TEXT_SPIN_STYLE::LEFT );
break;
case ASCH_RECORD_ORIENTATION::DOWNWARDS:
label->SetLabelSpinStyle( LABEL_SPIN_STYLE::BOTTOM );
label->SetTextSpinStyle( TEXT_SPIN_STYLE::BOTTOM );
break;
default:
break;

View File

@ -42,7 +42,7 @@
#include <sch_sheet.h>
#include <sch_sheet_path.h>
#include <sch_sheet_pin.h>
#include <sch_text.h>
#include <sch_label.h>
#include <schematic.h>
#include <trigo.h>
#include <wildcards_and_files_ext.h>
@ -347,7 +347,7 @@ void CADSTAR_SCH_ARCHIVE_LOADER::loadHierarchicalSheetPins()
sheetPin->SetText( name );
sheetPin->SetShape( LABEL_FLAG_SHAPE::L_UNSPECIFIED );
sheetPin->SetLabelSpinStyle( getSpinStyle( term.OrientAngle, false ) );
sheetPin->SetTextSpinStyle( getSpinStyle( term.OrientAngle, false ) );
sheetPin->SetPosition( getKiCadPoint( term.Position ) );
if( sheetPin->Type() == SCH_SHEET_PIN_T )
@ -661,7 +661,7 @@ void CADSTAR_SCH_ARCHIVE_LOADER::loadSchematicSymbolInstances()
linkOrigin.Justification );
}
netLabel->SetLabelSpinStyle( getSpinStyle( sym.OrientAngle, sym.Mirror ) );
netLabel->SetTextSpinStyle( getSpinStyle( sym.OrientAngle, sym.Mirror ) );
if( libSymDef.Alternate.Lower().Contains( "in" ) )
netLabel->SetShape( LABEL_FLAG_SHAPE::L_INPUT );
@ -1064,15 +1064,15 @@ void CADSTAR_SCH_ARCHIVE_LOADER::loadNets()
auto fixNetLabelsAndSheetPins =
[&]( const EDA_ANGLE& aWireAngle, NETELEMENT_ID& aNetEleID )
{
LABEL_SPIN_STYLE spin = getSpinStyle( aWireAngle );
TEXT_SPIN_STYLE spin = getSpinStyle( aWireAngle );
if( netlabels.find( aNetEleID ) != netlabels.end() )
netlabels.at( aNetEleID )->SetLabelSpinStyle( spin.MirrorY() );
netlabels.at( aNetEleID )->SetTextSpinStyle( spin.MirrorY() );
SCH_HIERLABEL* sheetPin = getHierarchicalLabel( aNetEleID );
if( sheetPin )
sheetPin->SetLabelSpinStyle( spin.MirrorX() );
sheetPin->SetTextSpinStyle( spin.MirrorX() );
};
// Now we can load the wires and fix the label orientations
@ -1135,8 +1135,8 @@ void CADSTAR_SCH_ARCHIVE_LOADER::loadNets()
label->SetVisible( true );
EDA_ANGLE labelAngle = getAngle( junc.NetLabel.OrientAngle );
LABEL_SPIN_STYLE spin = getSpinStyle( labelAngle );
label->SetLabelSpinStyle( spin );
TEXT_SPIN_STYLE spin = getSpinStyle( labelAngle );
label->SetTextSpinStyle( spin );
m_sheetMap.at( junc.LayerID )->GetScreen()->Append( label );
}
@ -2514,11 +2514,11 @@ int CADSTAR_SCH_ARCHIVE_LOADER::getKiCadUnitNumberFromGate( const GATE_ID& aCads
}
LABEL_SPIN_STYLE CADSTAR_SCH_ARCHIVE_LOADER::getSpinStyle( const long long& aCadstarOrientation,
bool aMirror )
TEXT_SPIN_STYLE CADSTAR_SCH_ARCHIVE_LOADER::getSpinStyle( const long long& aCadstarOrientation,
bool aMirror )
{
EDA_ANGLE orientation = getAngle( aCadstarOrientation );
LABEL_SPIN_STYLE spinStyle = getSpinStyle( orientation );
EDA_ANGLE orientation = getAngle( aCadstarOrientation );
TEXT_SPIN_STYLE spinStyle = getSpinStyle( orientation );
if( aMirror )
{
@ -2530,21 +2530,21 @@ LABEL_SPIN_STYLE CADSTAR_SCH_ARCHIVE_LOADER::getSpinStyle( const long long& aCad
}
LABEL_SPIN_STYLE CADSTAR_SCH_ARCHIVE_LOADER::getSpinStyle( const EDA_ANGLE& aOrientation )
TEXT_SPIN_STYLE CADSTAR_SCH_ARCHIVE_LOADER::getSpinStyle( const EDA_ANGLE& aOrientation )
{
LABEL_SPIN_STYLE spinStyle = LABEL_SPIN_STYLE::LEFT;
TEXT_SPIN_STYLE spinStyle = TEXT_SPIN_STYLE::LEFT;
EDA_ANGLE oDeg = aOrientation;
oDeg.Normalize180();
if( oDeg >= -ANGLE_45 && oDeg <= ANGLE_45 )
spinStyle = LABEL_SPIN_STYLE::RIGHT; // 0deg
spinStyle = TEXT_SPIN_STYLE::RIGHT; // 0deg
else if( oDeg >= ANGLE_45 && oDeg <= ANGLE_135 )
spinStyle = LABEL_SPIN_STYLE::UP; // 90deg
spinStyle = TEXT_SPIN_STYLE::UP; // 90deg
else if( oDeg >= ANGLE_135 || oDeg <= -ANGLE_135 )
spinStyle = LABEL_SPIN_STYLE::LEFT; // 180deg
spinStyle = TEXT_SPIN_STYLE::LEFT; // 180deg
else
spinStyle = LABEL_SPIN_STYLE::BOTTOM; // 270deg
spinStyle = TEXT_SPIN_STYLE::BOTTOM; // 270deg
return spinStyle;
}
@ -2694,8 +2694,8 @@ void CADSTAR_SCH_ARCHIVE_LOADER::applyTextSettings( EDA_TEXT* aKiCadT
}
};
LABEL_SPIN_STYLE spin = getSpinStyle( aCadstarOrientAngle, aMirrored );
EDA_ITEM* textEdaItem = dynamic_cast<EDA_ITEM*>( aKiCadTextItem );
TEXT_SPIN_STYLE spin = getSpinStyle( aCadstarOrientAngle, aMirrored );
EDA_ITEM* textEdaItem = dynamic_cast<EDA_ITEM*>( aKiCadTextItem );
wxCHECK( textEdaItem, /* void */ ); // ensure this is a EDA_ITEM
switch( textEdaItem->Type() )
@ -2752,10 +2752,10 @@ void CADSTAR_SCH_ARCHIVE_LOADER::applyTextSettings( EDA_TEXT* aKiCadT
// And correct the error introduced by the text offsetting in KiCad
switch( spin )
{
case LABEL_SPIN_STYLE::BOTTOM: pos = { bb.GetRight() - off, bb.GetTop() }; break;
case LABEL_SPIN_STYLE::UP: pos = { bb.GetRight() - off, bb.GetBottom() }; break;
case LABEL_SPIN_STYLE::LEFT: pos = { bb.GetRight() , bb.GetBottom() + off }; break;
case LABEL_SPIN_STYLE::RIGHT: pos = { bb.GetLeft() , bb.GetBottom() + off }; break;
case TEXT_SPIN_STYLE::BOTTOM: pos = { bb.GetRight() - off, bb.GetTop() }; break;
case TEXT_SPIN_STYLE::UP: pos = { bb.GetRight() - off, bb.GetBottom() }; break;
case TEXT_SPIN_STYLE::LEFT: pos = { bb.GetRight() , bb.GetBottom() + off }; break;
case TEXT_SPIN_STYLE::RIGHT: pos = { bb.GetLeft() , bb.GetBottom() + off }; break;
}
aKiCadTextItem->SetTextPos( pos );
@ -2767,7 +2767,7 @@ void CADSTAR_SCH_ARCHIVE_LOADER::applyTextSettings( EDA_TEXT* aKiCadT
case SCH_GLOBAL_LABEL_T:
case SCH_HIER_LABEL_T:
case SCH_SHEET_PIN_T:
static_cast<SCH_TEXT*>( aKiCadTextItem )->SetLabelSpinStyle( spin );
static_cast<SCH_TEXT*>( aKiCadTextItem )->SetTextSpinStyle( spin );
return;
default:

View File

@ -36,7 +36,7 @@
class BUS_ALIAS;
class EDA_TEXT;
class LABEL_SPIN_STYLE;
class TEXT_SPIN_STYLE;
class LIB_FIELD;
class LIB_SYMBOL;
class SCH_SYMBOL;
@ -211,17 +211,17 @@ private:
int getTextHeightFromTextCode( const TEXTCODE_ID& aCadstarTextCodeID );
wxString getAttributeName( const ATTRIBUTE_ID& aCadstarAttributeID );
PART::DEFINITION::PIN getPartDefinitionPin(
const PART& aCadstarPart, const GATE_ID& aGateID, const TERMINAL_ID& aTerminalID );
PART::DEFINITION::PIN getPartDefinitionPin( const PART& aCadstarPart, const GATE_ID& aGateID,
const TERMINAL_ID& aTerminalID );
//Helper Functions for obtaining individual elements as KiCad elements:
ELECTRICAL_PINTYPE getKiCadPinType( const PART::PIN_TYPE& aPinType );
int getKiCadUnitNumberFromGate( const GATE_ID& aCadstarGateID );
LABEL_SPIN_STYLE getSpinStyle( const long long& aCadstarOrientation, bool aMirror );
LABEL_SPIN_STYLE getSpinStyle( const EDA_ANGLE& aOrientation );
ALIGNMENT mirrorX( const ALIGNMENT& aCadstarAlignment );
ALIGNMENT rotate180( const ALIGNMENT& aCadstarAlignment );
int getKiCadUnitNumberFromGate( const GATE_ID& aCadstarGateID );
TEXT_SPIN_STYLE getSpinStyle( const long long& aCadstarOrientation, bool aMirror );
TEXT_SPIN_STYLE getSpinStyle( const EDA_ANGLE& aOrientation );
ALIGNMENT mirrorX( const ALIGNMENT& aCadstarAlignment );
ALIGNMENT rotate180( const ALIGNMENT& aCadstarAlignment );
//General Graphical manipulation functions

View File

@ -2,7 +2,7 @@
* This program source code file is part of KiCad, a free EDA CAD application.
*
* Copyright (C) 2017 CERN
* Copyright (C) 2017-2021 Kicad Developers, see AUTHORS.txt for contributors.
* Copyright (C) 2017-2022 Kicad Developers, see AUTHORS.txt for contributors.
*
* @author Alejandro García Montoro <alejandro.garciamontoro@gmail.com>
* @author Maciej Suminski <maciej.suminski@cern.ch>
@ -54,7 +54,7 @@
#include <sch_screen.h>
#include <sch_sheet.h>
#include <sch_sheet_path.h>
#include <sch_text.h>
#include <sch_label.h>
#include <schematic.h>
#include <symbol_lib_table.h>
#include <wildcards_and_files_ext.h>
@ -1135,9 +1135,9 @@ void SCH_EAGLE_PLUGIN::loadSegments( wxXmlNode* aSegmentsNode, const wxString& n
label->SetTextSize( wxSize( Mils2iu( 40 ), Mils2iu( 40 ) ) );
if( firstWire->GetEndPoint().x > firstWire->GetStartPoint().x )
label->SetLabelSpinStyle( LABEL_SPIN_STYLE::LEFT );
label->SetTextSpinStyle( TEXT_SPIN_STYLE::LEFT );
else
label->SetLabelSpinStyle( LABEL_SPIN_STYLE::RIGHT );
label->SetTextSpinStyle( TEXT_SPIN_STYLE::RIGHT );
screen->Append( label.release() );
}
@ -1207,7 +1207,7 @@ SCH_TEXT* SCH_EAGLE_PLUGIN::loadLabel( wxXmlNode* aLabelNode, const wxString& aN
label->SetPosition( elabelpos );
label->SetText( escapeName( elabel.netname ) );
label->SetTextSize( textSize );
label->SetLabelSpinStyle( LABEL_SPIN_STYLE::RIGHT );
label->SetTextSpinStyle( TEXT_SPIN_STYLE::RIGHT );
if( elabel.rot )
{
@ -2963,10 +2963,10 @@ void SCH_EAGLE_PLUGIN::addImplicitConnections( SCH_SYMBOL* aSymbol, SCH_SCREEN*
switch( pin->GetOrientation() )
{
case PIN_LEFT: netLabel->SetLabelSpinStyle( LABEL_SPIN_STYLE::RIGHT ); break;
case PIN_RIGHT: netLabel->SetLabelSpinStyle( LABEL_SPIN_STYLE::LEFT ); break;
case PIN_UP: netLabel->SetLabelSpinStyle( LABEL_SPIN_STYLE::UP ); break;
case PIN_DOWN: netLabel->SetLabelSpinStyle( LABEL_SPIN_STYLE::BOTTOM ); break;
case PIN_LEFT: netLabel->SetTextSpinStyle( TEXT_SPIN_STYLE::RIGHT ); break;
case PIN_RIGHT: netLabel->SetTextSpinStyle( TEXT_SPIN_STYLE::LEFT ); break;
case PIN_UP: netLabel->SetTextSpinStyle( TEXT_SPIN_STYLE::UP ); break;
case PIN_DOWN: netLabel->SetTextSpinStyle( TEXT_SPIN_STYLE::BOTTOM ); break;
}
aScreen->Append( netLabel );

View File

@ -45,6 +45,7 @@
#include <sch_edit_frame.h> // SYM_ORIENT_XXX
#include <sch_field.h>
#include <sch_line.h>
#include <sch_label.h>
#include <sch_junction.h>
#include <sch_no_connect.h>
#include <sch_screen.h>
@ -2169,11 +2170,14 @@ void SCH_SEXPR_PARSER::ParseSchematic( SCH_SHEET* aSheet, bool aIsCopyableOnly,
screen->Append( static_cast<SCH_ITEM*>( parseSchBezier() ) );
break;
case T_netclass_flag: // legacy
KI_FALLTHROUGH;
case T_text:
case T_label:
case T_global_label:
case T_hierarchical_label:
case T_netclass_flag:
case T_directive_label:
screen->Append( static_cast<SCH_ITEM*>( parseSchText() ) );
break;
@ -3105,11 +3109,12 @@ SCH_TEXT* SCH_SEXPR_PARSER::parseSchText()
switch( CurTok() )
{
case T_text: text = std::make_unique<SCH_TEXT>(); break;
case T_label: text = std::make_unique<SCH_LABEL>(); break;
case T_global_label: text = std::make_unique<SCH_GLOBALLABEL>(); break;
case T_hierarchical_label: text = std::make_unique<SCH_HIERLABEL>(); break;
case T_netclass_flag: text = std::make_unique<SCH_NETCLASS_FLAG>(); break;
case T_text: text = std::make_unique<SCH_TEXT>(); break;
case T_label: text = std::make_unique<SCH_LABEL>(); break;
case T_global_label: text = std::make_unique<SCH_GLOBALLABEL>(); break;
case T_hierarchical_label: text = std::make_unique<SCH_HIERLABEL>(); break;
case T_netclass_flag: text = std::make_unique<SCH_DIRECTIVE_LABEL>(); break;
case T_directive_label: text = std::make_unique<SCH_DIRECTIVE_LABEL>(); break;
default:
wxCHECK_MSG( false, nullptr, "Cannot parse " + GetTokenString( CurTok() ) + " as text." );
}
@ -3139,13 +3144,13 @@ SCH_TEXT* SCH_SEXPR_PARSER::parseSchText()
switch( static_cast<int>( parseDouble( "text angle" ) ) )
{
case 0: text->SetLabelSpinStyle( LABEL_SPIN_STYLE::RIGHT ); break;
case 90: text->SetLabelSpinStyle( LABEL_SPIN_STYLE::UP ); break;
case 180: text->SetLabelSpinStyle( LABEL_SPIN_STYLE::LEFT ); break;
case 270: text->SetLabelSpinStyle( LABEL_SPIN_STYLE::BOTTOM ); break;
case 0: text->SetTextSpinStyle( TEXT_SPIN_STYLE::RIGHT ); break;
case 90: text->SetTextSpinStyle( TEXT_SPIN_STYLE::UP ); break;
case 180: text->SetTextSpinStyle( TEXT_SPIN_STYLE::LEFT ); break;
case 270: text->SetTextSpinStyle( TEXT_SPIN_STYLE::BOTTOM ); break;
default:
wxFAIL;
text->SetLabelSpinStyle( LABEL_SPIN_STYLE::RIGHT );
text->SetTextSpinStyle( TEXT_SPIN_STYLE::RIGHT );
break;
}
@ -3153,22 +3158,25 @@ SCH_TEXT* SCH_SEXPR_PARSER::parseSchText()
break;
case T_shape:
{
if( text->Type() == SCH_TEXT_T || text->Type() == SCH_LABEL_T )
Unexpected( T_shape );
SCH_LABEL_BASE* label = static_cast<SCH_LABEL_BASE*>( text.get() );
token = NextTok();
switch( token )
{
case T_input: text->SetShape( LABEL_FLAG_SHAPE::L_INPUT ); break;
case T_output: text->SetShape( LABEL_FLAG_SHAPE::L_OUTPUT ); break;
case T_bidirectional: text->SetShape( LABEL_FLAG_SHAPE::L_BIDI ); break;
case T_tri_state: text->SetShape( LABEL_FLAG_SHAPE::L_TRISTATE ); break;
case T_passive: text->SetShape( LABEL_FLAG_SHAPE::L_UNSPECIFIED ); break;
case T_dot: text->SetShape( LABEL_FLAG_SHAPE::F_DOT ); break;
case T_round: text->SetShape( LABEL_FLAG_SHAPE::F_ROUND ); break;
case T_diamond: text->SetShape( LABEL_FLAG_SHAPE::F_DIAMOND ); break;
case T_rectangle: text->SetShape( LABEL_FLAG_SHAPE::F_RECTANGLE ); break;
case T_input: label->SetShape( LABEL_FLAG_SHAPE::L_INPUT ); break;
case T_output: label->SetShape( LABEL_FLAG_SHAPE::L_OUTPUT ); break;
case T_bidirectional: label->SetShape( LABEL_FLAG_SHAPE::L_BIDI ); break;
case T_tri_state: label->SetShape( LABEL_FLAG_SHAPE::L_TRISTATE ); break;
case T_passive: label->SetShape( LABEL_FLAG_SHAPE::L_UNSPECIFIED ); break;
case T_dot: label->SetShape( LABEL_FLAG_SHAPE::F_DOT ); break;
case T_round: label->SetShape( LABEL_FLAG_SHAPE::F_ROUND ); break;
case T_diamond: label->SetShape( LABEL_FLAG_SHAPE::F_DIAMOND ); break;
case T_rectangle: label->SetShape( LABEL_FLAG_SHAPE::F_RECTANGLE ); break;
default:
Expecting( "input, output, bidirectional, tri_state, passive, dot, round, diamond"
"or rectangle" );
@ -3176,13 +3184,14 @@ SCH_TEXT* SCH_SEXPR_PARSER::parseSchText()
NeedRIGHT();
break;
}
case T_length:
{
if( text->Type() != SCH_NETCLASS_FLAG_T )
if( text->Type() != SCH_DIRECTIVE_LABEL_T )
Unexpected( T_length );
SCH_NETCLASS_FLAG* label = static_cast<SCH_NETCLASS_FLAG*>( text.get() );
SCH_DIRECTIVE_LABEL* label = static_cast<SCH_DIRECTIVE_LABEL*>( text.get() );
label->SetPinLength( parseInternalUnits( "pin length" ) );
NeedRIGHT();
@ -3205,14 +3214,14 @@ SCH_TEXT* SCH_SEXPR_PARSER::parseSchText()
{
// The vertically aligned text angle is always 90 (labels use 270 for the
// down direction) combined with the text justification flags.
text->SetLabelSpinStyle( LABEL_SPIN_STYLE::BOTTOM );
text->SetTextSpinStyle( TEXT_SPIN_STYLE::BOTTOM );
}
else if( text->GetHorizJustify() == GR_TEXT_H_ALIGN_RIGHT
&& text->GetTextAngle().IsHorizontal() )
{
// The horizontally aligned text angle is always 0 (labels use 180 for the
// left direction) combined with the text justification flags.
text->SetLabelSpinStyle( LABEL_SPIN_STYLE::LEFT );
text->SetTextSpinStyle( TEXT_SPIN_STYLE::LEFT );
}
}

View File

@ -240,12 +240,12 @@ static const char* getTextTypeToken( KICAD_T aType )
{
switch( aType )
{
case SCH_TEXT_T: return SCHEMATIC_LEXER::TokenName( T_text );
case SCH_LABEL_T: return SCHEMATIC_LEXER::TokenName( T_label );
case SCH_GLOBAL_LABEL_T: return SCHEMATIC_LEXER::TokenName( T_global_label );
case SCH_HIER_LABEL_T: return SCHEMATIC_LEXER::TokenName( T_hierarchical_label );
case SCH_NETCLASS_FLAG_T: return SCHEMATIC_LEXER::TokenName( T_netclass_flag );
default: wxFAIL; return SCHEMATIC_LEXER::TokenName( T_text );
case SCH_TEXT_T: return SCHEMATIC_LEXER::TokenName( T_text );
case SCH_LABEL_T: return SCHEMATIC_LEXER::TokenName( T_label );
case SCH_GLOBAL_LABEL_T: return SCHEMATIC_LEXER::TokenName( T_global_label );
case SCH_HIER_LABEL_T: return SCHEMATIC_LEXER::TokenName( T_hierarchical_label );
case SCH_DIRECTIVE_LABEL_T: return SCHEMATIC_LEXER::TokenName( T_netclass_flag );
default: wxFAIL; return SCHEMATIC_LEXER::TokenName( T_text );
}
}
@ -826,7 +826,7 @@ void SCH_SEXPR_PLUGIN::Format( SCH_SHEET* aSheet )
case SCH_LABEL_T:
case SCH_GLOBAL_LABEL_T:
case SCH_HIER_LABEL_T:
case SCH_NETCLASS_FLAG_T:
case SCH_DIRECTIVE_LABEL_T:
saveText( static_cast<SCH_TEXT*>( item ), 1 );
break;
@ -972,7 +972,7 @@ void SCH_SEXPR_PLUGIN::Format( EE_SELECTION* aSelection, SCH_SHEET_PATH* aSelect
case SCH_LABEL_T:
case SCH_GLOBAL_LABEL_T:
case SCH_HIER_LABEL_T:
case SCH_NETCLASS_FLAG_T:
case SCH_DIRECTIVE_LABEL_T:
saveText( static_cast< SCH_TEXT* >( item ), 0 );
break;
@ -1406,35 +1406,37 @@ void SCH_SEXPR_PLUGIN::saveText( SCH_TEXT* aText, int aNestLevel )
{
wxCHECK_RET( aText != nullptr && m_out != nullptr, "" );
SCH_LABEL_BASE* label = dynamic_cast<SCH_LABEL_BASE*>( aText );
m_out->Print( aNestLevel, "(%s %s",
getTextTypeToken( aText->Type() ),
m_out->Quotew( aText->GetText() ).c_str() );
if( aText->Type() == SCH_NETCLASS_FLAG_T )
if( aText->Type() == SCH_DIRECTIVE_LABEL_T )
{
SCH_NETCLASS_FLAG* label = static_cast<SCH_NETCLASS_FLAG*>( aText );
SCH_DIRECTIVE_LABEL* flag = static_cast<SCH_DIRECTIVE_LABEL*>( aText );
m_out->Print( 0, " (length %s)",
FormatInternalUnits( label->GetPinLength() ).c_str() );
FormatInternalUnits( flag->GetPinLength() ).c_str() );
}
EDA_ANGLE angle = aText->GetTextAngle();
if( aText->Type() == SCH_GLOBAL_LABEL_T
|| aText->Type() == SCH_HIER_LABEL_T
|| aText->Type() == SCH_NETCLASS_FLAG_T )
|| aText->Type() == SCH_DIRECTIVE_LABEL_T )
{
m_out->Print( 0, " (shape %s)", getSheetPinShapeToken( aText->GetShape() ) );
m_out->Print( 0, " (shape %s)", getSheetPinShapeToken( label->GetShape() ) );
// The angle of the text is always 0 or 90 degrees for readibility reasons,
// but the item itself can have more rotation (-90 and 180 deg)
switch( aText->GetLabelSpinStyle() )
switch( aText->GetTextSpinStyle() )
{
default:
case LABEL_SPIN_STYLE::LEFT: angle += ANGLE_180; break;
case LABEL_SPIN_STYLE::UP: break;
case LABEL_SPIN_STYLE::RIGHT: break;
case LABEL_SPIN_STYLE::BOTTOM: angle += ANGLE_180; break;
case TEXT_SPIN_STYLE::LEFT: angle += ANGLE_180; break;
case TEXT_SPIN_STYLE::UP: break;
case TEXT_SPIN_STYLE::RIGHT: break;
case TEXT_SPIN_STYLE::BOTTOM: angle += ANGLE_180; break;
}
}
@ -1463,8 +1465,6 @@ void SCH_SEXPR_PLUGIN::saveText( SCH_TEXT* aText, int aNestLevel )
m_out->Print( aNestLevel + 1, "(uuid %s)\n", TO_UTF8( aText->m_Uuid.AsString() ) );
SCH_LABEL_BASE* label = dynamic_cast<SCH_LABEL_BASE*>( aText );
if( label )
{
for( SCH_FIELD& field : label->GetFields() )

View File

@ -1465,7 +1465,7 @@ SCH_TEXT* SCH_LEGACY_PLUGIN::loadText( LINE_READER& aReader )
spinStyle = 0;
}
text->SetLabelSpinStyle( (LABEL_SPIN_STYLE::SPIN) spinStyle );
text->SetTextSpinStyle( static_cast<TEXT_SPIN_STYLE::SPIN>( spinStyle ) );
int size = Mils2Iu( parseInt( aReader, line, &line ) );
@ -2409,7 +2409,7 @@ void SCH_LEGACY_PLUGIN::saveText( SCH_TEXT* aText )
}
// Local labels must have their spin style inverted for left and right
int spinStyle = static_cast<int>( aText->GetLabelSpinStyle() );
int spinStyle = static_cast<int>( aText->GetTextSpinStyle() );
if( spinStyle == 0 )
spinStyle = 2;
@ -2431,7 +2431,7 @@ void SCH_LEGACY_PLUGIN::saveText( SCH_TEXT* aText )
m_out->Print( 0, "Text %s %-4d %-4d %-4d %-4d %s %s %d\n%s\n", textType,
Iu2Mils( aText->GetPosition().x ), Iu2Mils( aText->GetPosition().y ),
static_cast<int>( aText->GetLabelSpinStyle() ),
static_cast<int>( aText->GetTextSpinStyle() ),
Iu2Mils( aText->GetTextWidth() ),
shapeLabelIt->second,
italics,

View File

@ -1015,7 +1015,7 @@ void SCH_SCREEN::GetHierarchicalItems( std::vector<SCH_ITEM*>* aItems ) const
SCH_SHEET_T,
SCH_LABEL_T,
SCH_HIER_LABEL_T,
SCH_NETCLASS_FLAG_T,
SCH_DIRECTIVE_LABEL_T,
SCH_GLOBAL_LABEL_T,
EOT };
@ -1119,7 +1119,7 @@ SCH_TEXT* SCH_SCREEN::GetLabel( const VECTOR2I& aPosition, int aAccuracy ) const
case SCH_LABEL_T:
case SCH_GLOBAL_LABEL_T:
case SCH_HIER_LABEL_T:
case SCH_NETCLASS_FLAG_T:
case SCH_DIRECTIVE_LABEL_T:
if( item->HitTest( aPosition, aAccuracy ) )
return static_cast<SCH_TEXT*>( item );

View File

@ -123,25 +123,25 @@ void SCH_SHEET_PIN::SetSide( SHEET_SIDE aEdge )
case SHEET_SIDE::LEFT:
m_edge = aEdge;
SetTextX( Sheet->m_pos.x );
SetLabelSpinStyle( LABEL_SPIN_STYLE::RIGHT ); // Orientation horiz inverse
SetTextSpinStyle( TEXT_SPIN_STYLE::RIGHT ); // Orientation horiz inverse
break;
case SHEET_SIDE::RIGHT:
m_edge = aEdge;
SetTextX( Sheet->m_pos.x + Sheet->m_size.x );
SetLabelSpinStyle( LABEL_SPIN_STYLE::LEFT ); // Orientation horiz normal
SetTextSpinStyle( TEXT_SPIN_STYLE::LEFT ); // Orientation horiz normal
break;
case SHEET_SIDE::TOP:
m_edge = aEdge;
SetTextY( Sheet->m_pos.y );
SetLabelSpinStyle( LABEL_SPIN_STYLE::BOTTOM ); // Orientation vert BOTTOM
SetTextSpinStyle( TEXT_SPIN_STYLE::BOTTOM ); // Orientation vert BOTTOM
break;
case SHEET_SIDE::BOTTOM:
m_edge = aEdge;
SetTextY( Sheet->m_pos.y + Sheet->m_size.y );
SetLabelSpinStyle( LABEL_SPIN_STYLE::UP ); // Orientation vert UP
SetTextSpinStyle( TEXT_SPIN_STYLE::UP ); // Orientation vert UP
break;
default:

View File

@ -22,10 +22,10 @@
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
*/
#ifndef _SCH_SHEEET_PIN_H_
#define _SCH_SHEEET_PIN_H_
#ifndef SCH_SHEEET_PIN_H
#define SCH_SHEEET_PIN_H
#include <sch_text.h>
#include <sch_label.h>
class KIID;
class LINE_READER;
@ -206,4 +206,4 @@ private:
SHEET_SIDE m_edge;
};
#endif // _SCH_SHEEET_PIN_H_
#endif // SCH_SHEEET_PIN_H

View File

@ -605,7 +605,7 @@ public:
( aItem->Type() == SCH_NO_CONNECT_T ) ||
( aItem->Type() == SCH_JUNCTION_T ) ||
( aItem->Type() == SCH_SYMBOL_T ) ||
( aItem->Type() == SCH_NETCLASS_FLAG_T ) ||
( aItem->Type() == SCH_DIRECTIVE_LABEL_T ) ||
( aItem->Type() == SCH_LABEL_T ) ||
( aItem->Type() == SCH_HIER_LABEL_T ) ||
( aItem->Type() == SCH_GLOBAL_LABEL_T );

File diff suppressed because it is too large Load Diff

View File

@ -2,7 +2,7 @@
* This program source code file is part of KiCad, a free EDA CAD application.
*
* Copyright (C) 2015 Jean-Pierre Charras, jp.charras at wanadoo.fr
* Copyright (C) 1992-2021 KiCad Developers, see AUTHORS.txt for contributors.
* Copyright (C) 1992-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
@ -22,8 +22,8 @@
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
*/
#ifndef CLASS_TEXT_LABEL_H
#define CLASS_TEXT_LABEL_H
#ifndef SCH_TEXT_H
#define SCH_TEXT_H
#include <eda_text.h>
@ -32,14 +32,13 @@
#include <sch_connection.h> // for CONNECTION_TYPE
class NETLIST_OBJECT_LIST;
class HTML_MESSAGE_BOX;
/*
* Spin style for text items of all kinds on schematics
* Basically a higher level abstraction of rotation and justification of text
*/
class LABEL_SPIN_STYLE
class TEXT_SPIN_STYLE
{
public:
enum SPIN : int
@ -51,8 +50,8 @@ public:
};
LABEL_SPIN_STYLE() = default;
constexpr LABEL_SPIN_STYLE( SPIN aSpin ) : m_spin( aSpin )
TEXT_SPIN_STYLE() = default;
constexpr TEXT_SPIN_STYLE( SPIN aSpin ) : m_spin( aSpin )
{
}
@ -71,26 +70,27 @@ public:
return static_cast<int>( m_spin );
}
LABEL_SPIN_STYLE RotateCW();
TEXT_SPIN_STYLE RotateCW();
LABEL_SPIN_STYLE RotateCCW();
TEXT_SPIN_STYLE RotateCCW();
/**
* Mirror the label spin style across the X axis or simply swaps up and bottom.
*/
LABEL_SPIN_STYLE MirrorX();
TEXT_SPIN_STYLE MirrorX();
/**
* Mirror the label spin style across the Y axis or simply swaps left and right.
*/
LABEL_SPIN_STYLE MirrorY();
TEXT_SPIN_STYLE MirrorY();
private:
SPIN m_spin;
};
/*
* Shape/Type of #SCH_HIERLABEL, #SCH_GLOBALLABEL and #SCH_NETCLASS_FLAG.
* Label and flag shapes used with text objects.
*/
enum LABEL_FLAG_SHAPE
{
@ -114,7 +114,7 @@ extern const char* SheetLabelType[]; /* names of types of labels */
class SCH_TEXT : public SCH_ITEM, public EDA_TEXT
{
public:
SCH_TEXT( const VECTOR2I& aPos = VECTOR2I( 0, 0 ), const wxString& aText = wxEmptyString,
SCH_TEXT( const VECTOR2I& aPos = { 0, 0 }, const wxString& aText = wxEmptyString,
KICAD_T aType = SCH_TEXT_T );
SCH_TEXT( const SCH_TEXT& aText );
@ -133,22 +133,15 @@ public:
wxString GetShownText( int aDepth = 0 ) const override;
/**
* Increment the label text, if it ends with a number.
*
* @param aIncrement = the increment value to add to the number ending the text.
*/
bool IncrementLabel( int aIncrement );
/**
* Set a spin or rotation angle, along with specific horizontal and vertical justification
* styles with each angle.
*
* @param aSpinStyle Spin style as per #LABEL_SPIN_STYLE storage class, may be the enum
* @param aSpinStyle Spin style as per #TEXT_SPIN_STYLE storage class, may be the enum
* values or int value
*/
virtual void SetLabelSpinStyle( LABEL_SPIN_STYLE aSpinStyle );
LABEL_SPIN_STYLE GetLabelSpinStyle() const { return m_spin_style; }
virtual void SetTextSpinStyle( TEXT_SPIN_STYLE aSpinStyle );
TEXT_SPIN_STYLE GetTextSpinStyle() const { return m_spin_style; }
virtual LABEL_FLAG_SHAPE GetShape() const { return L_UNSPECIFIED; }
virtual void SetShape( LABEL_FLAG_SHAPE aShape ) { }
@ -237,348 +230,8 @@ protected:
* This is a duplication of m_Orient, m_HJustified, and m_VJustified in #EDA_TEXT but is
* easier to handle than 3 parameters when editing and reading and saving files.
*/
LABEL_SPIN_STYLE m_spin_style;
TEXT_SPIN_STYLE m_spin_style;
};
class SCH_LABEL_BASE : public SCH_TEXT
{
public:
SCH_LABEL_BASE( const VECTOR2I& aPos, const wxString& aText, KICAD_T aType );
SCH_LABEL_BASE( const SCH_LABEL_BASE& aLabel );
// Abstract class
virtual wxString GetClass() const override = 0;
bool IsType( const KICAD_T aScanTypes[] ) const override;
void SwapData( SCH_ITEM* aItem ) override;
LABEL_FLAG_SHAPE GetShape() const override { return m_shape; }
void SetShape( LABEL_FLAG_SHAPE aShape ) override { m_shape = aShape; }
static const wxString GetDefaultFieldName( const wxString& aName, bool aUseDefaultName );
virtual int GetMandatoryFieldCount() { return 0; }
std::vector<SCH_FIELD>& GetFields() { return m_fields; }
const std::vector<SCH_FIELD>& GetFields() const { return m_fields; }
/**
* Set multiple schematic fields.
*
* @param aFields are the fields to set in this symbol.
*/
void SetFields( const std::vector<SCH_FIELD>& aFields )
{
m_fields = aFields; // vector copying, length is changed possibly
}
void Move( const VECTOR2I& aMoveVector ) override
{
SCH_TEXT::Move( aMoveVector );
for( SCH_FIELD& field : m_fields )
field.Offset( aMoveVector );
}
void Rotate( const VECTOR2I& aCenter ) override;
void Rotate90( bool aClockwise ) override;
void AutoplaceFields( SCH_SCREEN* aScreen, bool aManual ) override;
virtual bool ResolveTextVar( wxString* token, int aDepth ) const;
wxString GetShownText( int aDepth = 0 ) const override;
void RunOnChildren( const std::function<void( SCH_ITEM* )>& aFunction ) override;
SEARCH_RESULT Visit( INSPECTOR inspector, void* testData, const KICAD_T scanTypes[] ) override;
VECTOR2I GetSchematicTextOffset( const RENDER_SETTINGS* aSettings ) const override;
/**
* Calculate the graphic shape (a polygon) associated to the text.
*
* @param aPoints A buffer to fill with polygon corners coordinates
* @param Pos Position of the shape, for texts and labels: do nothing
*/
virtual void CreateGraphicShape( const RENDER_SETTINGS* aSettings,
std::vector<VECTOR2I>& aPoints, const VECTOR2I& Pos ) const
{
aPoints.clear();
}
int GetLabelBoxExpansion( const RENDER_SETTINGS* aSettings = nullptr ) const;
/**
* Return the bounding box of the label only, without taking in account its fields.
*/
virtual const EDA_RECT GetBodyBoundingBox() const;
/**
* Return the bounding box of the label including its fields.
*/
const EDA_RECT GetBoundingBox() const override;
bool HitTest( const VECTOR2I& aPosition, int aAccuracy = 0 ) const override;
bool HitTest( const EDA_RECT& aRect, bool aContained, int aAccuracy = 0 ) const override;
std::vector<VECTOR2I> GetConnectionPoints() const override;
void GetEndPoints( std::vector< DANGLING_END_ITEM >& aItemList ) override;
bool UpdateDanglingState( std::vector<DANGLING_END_ITEM>& aItemList,
const SCH_SHEET_PATH* aPath = nullptr ) override;
bool IsDangling() const override { return m_isDangling; }
void SetIsDangling( bool aIsDangling ) { m_isDangling = aIsDangling; }
void ViewGetLayers( int aLayers[], int& aCount ) const override;
void GetMsgPanelInfo( EDA_DRAW_FRAME* aFrame, std::vector<MSG_PANEL_ITEM>& aList ) override;
void Plot( PLOTTER* aPlotter ) const override;
void Print( const RENDER_SETTINGS* aSettings, const VECTOR2I& offset ) override;
protected:
std::vector<SCH_FIELD> m_fields;
LABEL_FLAG_SHAPE m_shape;
CONNECTION_TYPE m_connectionType;
bool m_isDangling;
};
class SCH_LABEL : public SCH_LABEL_BASE
{
public:
SCH_LABEL( const VECTOR2I& aPos = VECTOR2I( 0, 0 ), const wxString& aText = wxEmptyString );
// Do not create a copy constructor. The one generated by the compiler is adequate.
~SCH_LABEL() { }
static inline bool ClassOf( const EDA_ITEM* aItem )
{
return aItem && SCH_LABEL_T == aItem->Type();
}
wxString GetClass() const override
{
return wxT( "SCH_LABEL" );
}
const EDA_RECT GetBodyBoundingBox() const override;
bool IsConnectable() const override { return true; }
bool CanConnect( const SCH_ITEM* aItem ) const override
{
return aItem->Type() == SCH_LINE_T &&
( aItem->GetLayer() == LAYER_WIRE || aItem->GetLayer() == LAYER_BUS );
}
wxString GetSelectMenuText( EDA_UNITS aUnits ) const override;
BITMAPS GetMenuImage() const override;
bool IsReplaceable() const override { return true; }
EDA_ITEM* Clone() const override
{
return new SCH_LABEL( *this );
}
bool IsPointClickableAnchor( const VECTOR2I& aPos ) const override
{
return m_isDangling && GetPosition() == aPos;
}
private:
bool doIsConnected( const VECTOR2I& aPosition ) const override
{
return EDA_TEXT::GetTextPos() == aPosition;
}
};
class SCH_NETCLASS_FLAG : public SCH_LABEL_BASE
{
public:
SCH_NETCLASS_FLAG( const VECTOR2I& aPos = VECTOR2I( 0, 0 ) );
SCH_NETCLASS_FLAG( const SCH_NETCLASS_FLAG& aClassLabel );
~SCH_NETCLASS_FLAG() { }
static inline bool ClassOf( const EDA_ITEM* aItem )
{
return aItem && SCH_NETCLASS_FLAG_T == aItem->Type();
}
wxString GetClass() const override
{
return wxT( "SCH_NETCLASS_FLAG" );
}
EDA_ITEM* Clone() const override
{
return new SCH_NETCLASS_FLAG( *this );
}
int GetPinLength() const { return m_pinLength; }
void SetPinLength( int aLength ) { m_pinLength = aLength; }
void CreateGraphicShape( const RENDER_SETTINGS* aSettings, std::vector<VECTOR2I>& aPoints,
const VECTOR2I& aPos ) const override;
void AutoplaceFields( SCH_SCREEN* aScreen, bool aManual ) override;
wxString GetSelectMenuText( EDA_UNITS aUnits ) const override;
bool IsConnectable() const override { return true; }
bool CanConnect( const SCH_ITEM* aItem ) const override
{
return aItem->Type() == SCH_LINE_T &&
( aItem->GetLayer() == LAYER_WIRE || aItem->GetLayer() == LAYER_BUS );
}
private:
int m_pinLength;
int m_symbolSize;
};
class SCH_GLOBALLABEL : public SCH_LABEL_BASE
{
public:
SCH_GLOBALLABEL( const VECTOR2I& aPos = VECTOR2I( 0, 0 ), const wxString& aText = wxEmptyString );
SCH_GLOBALLABEL( const SCH_GLOBALLABEL& aGlobalLabel );
~SCH_GLOBALLABEL() { }
static inline bool ClassOf( const EDA_ITEM* aItem )
{
return aItem && SCH_GLOBAL_LABEL_T == aItem->Type();
}
wxString GetClass() const override
{
return wxT( "SCH_GLOBALLABEL" );
}
EDA_ITEM* Clone() const override
{
return new SCH_GLOBALLABEL( *this );
}
int GetMandatoryFieldCount() override { return 1; }
void MirrorSpinStyle( bool aLeftRight ) override;
void MirrorHorizontally( int aCenter ) override;
void MirrorVertically( int aCenter ) override;
void SetLabelSpinStyle( LABEL_SPIN_STYLE aSpinStyle ) override;
VECTOR2I GetSchematicTextOffset( const RENDER_SETTINGS* aSettings ) const override;
void CreateGraphicShape( const RENDER_SETTINGS* aRenderSettings, std::vector<VECTOR2I>& aPoints,
const VECTOR2I& aPos ) const override;
bool ResolveTextVar( wxString* token, int aDepth ) const override;
bool IsConnectable() const override { return true; }
bool CanConnect( const SCH_ITEM* aItem ) const override
{
return aItem->Type() == SCH_LINE_T &&
( aItem->GetLayer() == LAYER_WIRE || aItem->GetLayer() == LAYER_BUS );
}
void ViewGetLayers( int aLayers[], int& aCount ) const override;
wxString GetSelectMenuText( EDA_UNITS aUnits ) const override;
BITMAPS GetMenuImage() const override;
bool IsPointClickableAnchor( const VECTOR2I& aPos ) const override
{
return m_isDangling && GetPosition() == aPos;
}
private:
bool doIsConnected( const VECTOR2I& aPosition ) const override
{
return EDA_TEXT::GetTextPos() == aPosition;
}
};
class SCH_HIERLABEL : public SCH_LABEL_BASE
{
public:
SCH_HIERLABEL( const VECTOR2I& aPos = VECTOR2I( 0, 0 ), const wxString& aText = wxEmptyString,
KICAD_T aType = SCH_HIER_LABEL_T );
// Do not create a copy constructor. The one generated by the compiler is adequate.
~SCH_HIERLABEL() { }
static inline bool ClassOf( const EDA_ITEM* aItem )
{
return aItem && SCH_HIER_LABEL_T == aItem->Type();
}
wxString GetClass() const override
{
return wxT( "SCH_HIERLABEL" );
}
void SetLabelSpinStyle( LABEL_SPIN_STYLE aSpinStyle ) override;
VECTOR2I GetSchematicTextOffset( const RENDER_SETTINGS* aSettings ) const override;
void CreateGraphicShape( const RENDER_SETTINGS* aSettings, std::vector<VECTOR2I>& aPoints,
const VECTOR2I& aPos ) const override;
void CreateGraphicShape( const RENDER_SETTINGS* aSettings, std::vector<VECTOR2I>& aPoints,
const VECTOR2I& aPos, LABEL_FLAG_SHAPE aShape ) const;
const EDA_RECT GetBodyBoundingBox() const override;
bool IsConnectable() const override { return true; }
bool CanConnect( const SCH_ITEM* aItem ) const override
{
return aItem->Type() == SCH_LINE_T &&
( aItem->GetLayer() == LAYER_WIRE || aItem->GetLayer() == LAYER_BUS );
}
wxString GetSelectMenuText( EDA_UNITS aUnits ) const override;
BITMAPS GetMenuImage() const override;
EDA_ITEM* Clone() const override
{
return new SCH_HIERLABEL( *this );
}
bool IsPointClickableAnchor( const VECTOR2I& aPos ) const override
{
return m_isDangling && GetPosition() == aPos;
}
private:
bool doIsConnected( const VECTOR2I& aPosition ) const override
{
return EDA_TEXT::GetTextPos() == aPosition;
}
};
#endif /* CLASS_TEXT_LABEL_H */
#endif /* SCH_TEXT_H */

View File

@ -26,6 +26,7 @@ date
default
diameter
diamond
directive_label
dot
edge_clock_high
effects

View File

@ -31,6 +31,7 @@
#include <reporter.h>
#include <sch_edit_frame.h>
#include <sch_sheet_path.h>
#include <sch_label.h>
#include <schematic.h>
#include <string_utils.h>
#include <kiface_base.h>
@ -417,17 +418,17 @@ void BACK_ANNOTATE::applyChangelist()
}
static LABEL_SPIN_STYLE orientLabel( SCH_PIN* aPin )
static TEXT_SPIN_STYLE orientLabel( SCH_PIN* aPin )
{
LABEL_SPIN_STYLE spin = LABEL_SPIN_STYLE::RIGHT;
TEXT_SPIN_STYLE spin = TEXT_SPIN_STYLE::RIGHT;
// Initial orientation from the pin
switch( aPin->GetLibPin()->GetOrientation() )
{
case PIN_UP: spin = LABEL_SPIN_STYLE::BOTTOM; break;
case PIN_DOWN: spin = LABEL_SPIN_STYLE::UP; break;
case PIN_LEFT: spin = LABEL_SPIN_STYLE::RIGHT; break;
case PIN_RIGHT: spin = LABEL_SPIN_STYLE::LEFT; break;
case PIN_UP: spin = TEXT_SPIN_STYLE::BOTTOM; break;
case PIN_DOWN: spin = TEXT_SPIN_STYLE::UP; break;
case PIN_LEFT: spin = TEXT_SPIN_STYLE::RIGHT; break;
case PIN_RIGHT: spin = TEXT_SPIN_STYLE::LEFT; break;
}
// Reorient based on the actual symbol orientation now
@ -551,8 +552,8 @@ void BACK_ANNOTATE::processNetNameChange( const wxString& aRef, SCH_PIN* aPin,
case SCH_PIN_T:
{
SCH_PIN* schPin = static_cast<SCH_PIN*>( driver );
LABEL_SPIN_STYLE spin = orientLabel( schPin );
SCH_PIN* schPin = static_cast<SCH_PIN*>( driver );
TEXT_SPIN_STYLE spin = orientLabel( schPin );
if( schPin->IsPowerConnection() )
{
@ -576,7 +577,7 @@ void BACK_ANNOTATE::processNetNameChange( const wxString& aRef, SCH_PIN* aPin,
SCH_LABEL* label = new SCH_LABEL( driver->GetPosition(), aNewName );
label->SetParent( &m_frame->Schematic() );
label->SetTextSize( wxSize( settings.m_DefaultTextSize, settings.m_DefaultTextSize ) );
label->SetLabelSpinStyle( spin );
label->SetTextSpinStyle( spin );
label->SetFlags( IS_NEW );
SCH_SCREEN* screen = aConnection->Sheet().LastScreen();

View File

@ -298,7 +298,7 @@ TOOL_ACTION EE_ACTIONS::placeLabel( "eeschema.InteractiveDrawing.placeLabel",
TOOL_ACTION EE_ACTIONS::placeClassLabel( "eeschema.InteractiveDrawing.placeClassLabel",
AS_GLOBAL, 0, "",
_( "Add Net Class Flag" ), _( "Add a net class flag" ),
_( "Add Net Class Directive" ), _( "Add a net class directive label" ),
BITMAPS::add_class_flag, AF_ACTIVATE );
TOOL_ACTION EE_ACTIONS::placeHierLabel( "eeschema.InteractiveDrawing.placeHierarchicalLabel",
@ -475,8 +475,8 @@ TOOL_ACTION EE_ACTIONS::toLabel( "eeschema.InteractiveEdit.toLabel",
TOOL_ACTION EE_ACTIONS::toCLabel( "eeschema.InteractiveEdit.toCLabel",
AS_GLOBAL, 0, "",
_( "Change to Net Class Flag" ), _( "Change existing item to a net class flag" ),
BITMAPS::add_class_flag, AF_NONE, (void*) SCH_NETCLASS_FLAG_T );
_( "Change to Directive Label" ), _( "Change existing item to a directive label" ),
BITMAPS::add_class_flag, AF_NONE, (void*) SCH_DIRECTIVE_LABEL_T );
TOOL_ACTION EE_ACTIONS::toHLabel( "eeschema.InteractiveEdit.toHLabel",
AS_GLOBAL, 0, "",

View File

@ -293,7 +293,7 @@ void EE_GRID_HELPER::computeAnchors( SCH_ITEM *aItem, const VECTOR2I &aRefPos, b
case SCH_GLOBAL_LABEL_T:
case SCH_HIER_LABEL_T:
case SCH_LABEL_T:
case SCH_NETCLASS_FLAG_T:
case SCH_DIRECTIVE_LABEL_T:
case SCH_BUS_WIRE_ENTRY_T:
{
std::vector<VECTOR2I> pts = aItem->GetConnectionPoints();

View File

@ -166,7 +166,7 @@ bool EE_SELECTION_TOOL::Init()
SCH_GLOBAL_LABEL_T,
SCH_HIER_LABEL_T,
SCH_LABEL_T,
SCH_NETCLASS_FLAG_T,
SCH_DIRECTIVE_LABEL_T,
SCH_SHEET_PIN_T,
SCH_PIN_T,
EOT };
@ -1341,19 +1341,19 @@ bool EE_SELECTION_TOOL::selectMultiple()
static KICAD_T nodeTypes[] =
{
SCH_SYMBOL_LOCATE_POWER_T,
SCH_PIN_T,
SCH_ITEM_LOCATE_WIRE_T,
SCH_ITEM_LOCATE_BUS_T,
SCH_BUS_WIRE_ENTRY_T,
SCH_BUS_BUS_ENTRY_T,
SCH_LABEL_T,
SCH_HIER_LABEL_T,
SCH_GLOBAL_LABEL_T,
SCH_SHEET_PIN_T,
SCH_NETCLASS_FLAG_T,
SCH_JUNCTION_T,
EOT
SCH_SYMBOL_LOCATE_POWER_T,
SCH_PIN_T,
SCH_ITEM_LOCATE_WIRE_T,
SCH_ITEM_LOCATE_BUS_T,
SCH_BUS_WIRE_ENTRY_T,
SCH_BUS_BUS_ENTRY_T,
SCH_LABEL_T,
SCH_HIER_LABEL_T,
SCH_GLOBAL_LABEL_T,
SCH_SHEET_PIN_T,
SCH_DIRECTIVE_LABEL_T,
SCH_JUNCTION_T,
EOT
};

View File

@ -31,7 +31,6 @@
#include <id.h>
#include <eeschema_id.h>
#include <confirm.h>
#include <widgets/infobar.h>
#include <view/view_controls.h>
#include <view/view.h>
#include <sch_symbol.h>
@ -61,10 +60,10 @@ SCH_DRAWING_TOOLS::SCH_DRAWING_TOOLS() :
m_lastSheetPinType( LABEL_FLAG_SHAPE::L_INPUT ),
m_lastGlobalLabelShape( LABEL_FLAG_SHAPE::L_INPUT ),
m_lastNetClassFlagShape( LABEL_FLAG_SHAPE::F_ROUND ),
m_lastTextOrientation( LABEL_SPIN_STYLE::RIGHT ),
m_lastTextOrientation( TEXT_SPIN_STYLE::RIGHT ),
m_lastTextBold( false ),
m_lastTextItalic( false ),
m_lastNetClassFlagItalic( true ),
m_lastNetClassDirectiveItalic( true ),
m_lastFillStyle( FILL_T::NO_FILL ),
m_inPlaceSymbol( false ),
m_inDrawShape( false ),
@ -868,6 +867,7 @@ SCH_TEXT* SCH_DRAWING_TOOLS::createNewText( const VECTOR2I& aPosition, int aType
SCHEMATIC* schematic = getModel<SCHEMATIC>();
SCHEMATIC_SETTINGS& settings = schematic->Settings();
SCH_TEXT* textItem = nullptr;
SCH_LABEL_BASE* labelItem = nullptr;
switch( aType )
{
@ -876,23 +876,30 @@ SCH_TEXT* SCH_DRAWING_TOOLS::createNewText( const VECTOR2I& aPosition, int aType
break;
case LAYER_LOCLABEL:
textItem = new SCH_LABEL( aPosition );
labelItem = new SCH_LABEL( aPosition );
textItem = labelItem;
break;
case LAYER_NETCLASS_REFS:
textItem = new SCH_NETCLASS_FLAG( aPosition );
textItem->SetShape( m_lastNetClassFlagShape );
labelItem = new SCH_DIRECTIVE_LABEL( aPosition );
labelItem->SetShape( m_lastNetClassFlagShape );
labelItem->GetFields().emplace_back( SCH_FIELD( {0,0}, 0, labelItem, wxT( "Netclass" ) ) );
labelItem->GetFields().back().SetItalic( true );
labelItem->GetFields().back().SetVisible( true );
textItem = labelItem;
break;
case LAYER_HIERLABEL:
textItem = new SCH_HIERLABEL( aPosition );
textItem->SetShape( m_lastGlobalLabelShape );
labelItem = new SCH_HIERLABEL( aPosition );
labelItem->SetShape( m_lastGlobalLabelShape );
textItem = labelItem;
break;
case LAYER_GLOBLABEL:
textItem = new SCH_GLOBALLABEL( aPosition );
textItem->SetShape( m_lastGlobalLabelShape );
static_cast<SCH_GLOBALLABEL*>( textItem )->GetFields()[0].SetVisible( true );
labelItem = new SCH_GLOBALLABEL( aPosition );
labelItem->SetShape( m_lastGlobalLabelShape );
labelItem->GetFields()[0].SetVisible( true );
textItem = labelItem;
break;
default:
@ -903,16 +910,16 @@ SCH_TEXT* SCH_DRAWING_TOOLS::createNewText( const VECTOR2I& aPosition, int aType
textItem->SetParent( schematic );
textItem->SetBold( m_lastTextBold );
if( textItem->Type() == SCH_NETCLASS_FLAG_T )
textItem->SetItalic( m_lastNetClassFlagItalic );
if( aType == LAYER_NETCLASS_REFS )
textItem->SetItalic( m_lastNetClassDirectiveItalic );
else
textItem->SetItalic( m_lastTextItalic );
textItem->SetLabelSpinStyle( m_lastTextOrientation );
textItem->SetTextSpinStyle( m_lastTextOrientation );
textItem->SetTextSize( wxSize( settings.m_DefaultTextSize, settings.m_DefaultTextSize ) );
textItem->SetFlags( IS_NEW | IS_MOVING );
if( aType == LAYER_NOTES )
if( !labelItem )
{
DIALOG_TEXT_PROPERTIES dlg( m_frame, textItem );
@ -930,14 +937,14 @@ SCH_TEXT* SCH_DRAWING_TOOLS::createNewText( const VECTOR2I& aPosition, int aType
// Must be quasi modal for syntax help
if( dlg.ShowQuasiModal() != wxID_OK )
{
delete textItem;
delete labelItem;
return nullptr;
}
}
wxString text = textItem->GetText();
if( textItem->Type() != SCH_NETCLASS_FLAG_T && NoPrintableChars( text ) )
if( textItem->Type() != SCH_DIRECTIVE_LABEL_T && NoPrintableChars( text ) )
{
delete textItem;
return nullptr;
@ -945,17 +952,17 @@ SCH_TEXT* SCH_DRAWING_TOOLS::createNewText( const VECTOR2I& aPosition, int aType
m_lastTextBold = textItem->IsBold();
if( textItem->Type() == SCH_NETCLASS_FLAG_T )
m_lastNetClassFlagItalic = textItem->IsItalic();
if( aType == LAYER_NETCLASS_REFS )
m_lastNetClassDirectiveItalic = textItem->IsItalic();
else
m_lastTextItalic = textItem->IsItalic();
m_lastTextOrientation = textItem->GetLabelSpinStyle();
m_lastTextOrientation = textItem->GetTextSpinStyle();
if( textItem->Type() == SCH_GLOBAL_LABEL_T || textItem->Type() == SCH_HIER_LABEL_T )
m_lastGlobalLabelShape = textItem->GetShape();
else if( textItem->Type() == SCH_NETCLASS_FLAG_T )
m_lastNetClassFlagShape = textItem->GetShape();
if( aType == LAYER_GLOBLABEL || aType == LAYER_HIERLABEL )
m_lastGlobalLabelShape = labelItem->GetShape();
else if( aType == LAYER_NETCLASS_REFS )
m_lastNetClassFlagShape = labelItem->GetShape();
return textItem;
}

View File

@ -27,11 +27,11 @@
#include <tools/ee_tool_base.h>
#include <sch_base_frame.h>
#include <sch_label.h>
#include <status_popup.h>
class SCH_SYMBOL;
class SCH_BUS_WIRE_ENTRY;
class SCH_LABEL;
class SCHLIB_FILTER;
class SCH_EDIT_FRAME;
class EE_SELECTION_TOOL;
@ -87,10 +87,10 @@ private:
LABEL_FLAG_SHAPE m_lastSheetPinType;
LABEL_FLAG_SHAPE m_lastGlobalLabelShape;
LABEL_FLAG_SHAPE m_lastNetClassFlagShape;
LABEL_SPIN_STYLE m_lastTextOrientation;
TEXT_SPIN_STYLE m_lastTextOrientation;
bool m_lastTextBold;
bool m_lastTextItalic;
bool m_lastNetClassFlagItalic;
bool m_lastNetClassDirectiveItalic;
FILL_T m_lastFillStyle;
///< Re-entrancy guards

View File

@ -253,7 +253,7 @@ bool SCH_EDIT_TOOL::Init()
case SCH_LABEL_T:
case SCH_GLOBAL_LABEL_T:
case SCH_HIER_LABEL_T:
case SCH_NETCLASS_FLAG_T:
case SCH_DIRECTIVE_LABEL_T:
case SCH_FIELD_T:
case SCH_SHAPE_T:
case SCH_BITMAP_T:
@ -284,13 +284,13 @@ bool SCH_EDIT_TOOL::Init()
};
static KICAD_T allLabelTypes[] = { SCH_LABEL_T,
SCH_NETCLASS_FLAG_T,
SCH_DIRECTIVE_LABEL_T,
SCH_GLOBAL_LABEL_T,
SCH_HIER_LABEL_T,
SCH_TEXT_T,
EOT };
static KICAD_T toLabelTypes[] = { SCH_NETCLASS_FLAG_T, SCH_GLOBAL_LABEL_T, SCH_HIER_LABEL_T, SCH_TEXT_T, EOT };
static KICAD_T toLabelTypes[] = { SCH_DIRECTIVE_LABEL_T, SCH_GLOBAL_LABEL_T, SCH_HIER_LABEL_T, SCH_TEXT_T, EOT };
auto toLabelCondition = ( E_C::Count( 1 ) && E_C::OnlyTypes( toLabelTypes ) )
|| ( E_C::MoreThan( 1 ) && E_C::OnlyTypes( allLabelTypes ) );
@ -298,15 +298,15 @@ bool SCH_EDIT_TOOL::Init()
auto toCLabelCondition = ( E_C::Count( 1 ) && E_C::OnlyTypes( toCLabelTypes ) )
|| ( E_C::MoreThan( 1 ) && E_C::OnlyTypes( allLabelTypes ) );
static KICAD_T toHLabelTypes[] = { SCH_LABEL_T, SCH_NETCLASS_FLAG_T, SCH_GLOBAL_LABEL_T, SCH_TEXT_T, EOT };
static KICAD_T toHLabelTypes[] = { SCH_LABEL_T, SCH_DIRECTIVE_LABEL_T, SCH_GLOBAL_LABEL_T, SCH_TEXT_T, EOT };
auto toHLabelCondition = ( E_C::Count( 1 ) && E_C::OnlyTypes( toHLabelTypes ) )
|| ( E_C::MoreThan( 1 ) && E_C::OnlyTypes( allLabelTypes ) );
static KICAD_T toGLabelTypes[] = { SCH_LABEL_T, SCH_NETCLASS_FLAG_T, SCH_HIER_LABEL_T, SCH_TEXT_T, EOT };
static KICAD_T toGLabelTypes[] = { SCH_LABEL_T, SCH_DIRECTIVE_LABEL_T, SCH_HIER_LABEL_T, SCH_TEXT_T, EOT };
auto toGLabelCondition = ( E_C::Count( 1 ) && E_C::OnlyTypes( toGLabelTypes ) )
|| ( E_C::MoreThan( 1 ) && E_C::OnlyTypes( allLabelTypes ) );
static KICAD_T toTextTypes[] = { SCH_LABEL_T, SCH_NETCLASS_FLAG_T, SCH_GLOBAL_LABEL_T, SCH_HIER_LABEL_T, EOT };
static KICAD_T toTextTypes[] = { SCH_LABEL_T, SCH_DIRECTIVE_LABEL_T, SCH_GLOBAL_LABEL_T, SCH_HIER_LABEL_T, EOT };
auto toTextCondition = ( E_C::Count( 1 ) && E_C::OnlyTypes( toTextTypes ) )
|| ( E_C::MoreThan( 1 ) && E_C::OnlyTypes( allLabelTypes ) );
@ -433,7 +433,7 @@ const KICAD_T rotatableItems[] = {
SCH_LABEL_T,
SCH_GLOBAL_LABEL_T,
SCH_HIER_LABEL_T,
SCH_NETCLASS_FLAG_T,
SCH_DIRECTIVE_LABEL_T,
SCH_FIELD_T,
SCH_SYMBOL_T,
SCH_SHEET_PIN_T,
@ -507,7 +507,7 @@ int SCH_EDIT_TOOL::Rotate( const TOOL_EVENT& aEvent )
case SCH_LABEL_T:
case SCH_GLOBAL_LABEL_T:
case SCH_HIER_LABEL_T:
case SCH_NETCLASS_FLAG_T:
case SCH_DIRECTIVE_LABEL_T:
{
SCH_TEXT* textItem = static_cast<SCH_TEXT*>( head );
textItem->Rotate90( clockwise );
@ -724,7 +724,7 @@ int SCH_EDIT_TOOL::Mirror( const TOOL_EVENT& aEvent )
case SCH_LABEL_T:
case SCH_GLOBAL_LABEL_T:
case SCH_HIER_LABEL_T:
case SCH_NETCLASS_FLAG_T:
case SCH_DIRECTIVE_LABEL_T:
{
SCH_TEXT* textItem = static_cast<SCH_TEXT*>( item );
textItem->MirrorSpinStyle( !vertical );
@ -894,13 +894,11 @@ int SCH_EDIT_TOOL::RepeatDrawItem( const TOOL_EVENT& aEvent )
{
EESCHEMA_SETTINGS* cfg = Pgm().GetSettingsManager().GetAppSettings<EESCHEMA_SETTINGS>();
if( dynamic_cast<SCH_TEXT*>( newItem ) )
if( SCH_LABEL_BASE* label = dynamic_cast<SCH_LABEL_BASE*>( newItem ) )
{
SCH_TEXT* text = static_cast<SCH_TEXT*>( newItem );
// If incrementing tries to go below zero, tell user why the value is repeated
if( !text->IncrementLabel( cfg->m_Drawing.repeat_label_increment ) )
if( !label->IncrementLabel( cfg->m_Drawing.repeat_label_increment ) )
m_frame->ShowInfoBarWarning( _( "Label value cannot go below zero" ), true );
}
@ -952,7 +950,7 @@ static KICAD_T deletableItems[] =
SCH_LABEL_T,
SCH_GLOBAL_LABEL_T,
SCH_HIER_LABEL_T,
SCH_NETCLASS_FLAG_T,
SCH_DIRECTIVE_LABEL_T,
SCH_NO_CONNECT_T,
SCH_SHEET_T,
SCH_SHEET_PIN_T,
@ -1473,7 +1471,7 @@ int SCH_EDIT_TOOL::Properties( const TOOL_EVENT& aEvent )
case SCH_LABEL_T:
case SCH_GLOBAL_LABEL_T:
case SCH_HIER_LABEL_T:
case SCH_NETCLASS_FLAG_T:
case SCH_DIRECTIVE_LABEL_T:
{
DIALOG_LABEL_PROPERTIES dlg( m_frame, static_cast<SCH_LABEL_BASE*>( item ) );
@ -1602,7 +1600,7 @@ int SCH_EDIT_TOOL::ChangeTextType( const TOOL_EVENT& aEvent )
SCH_GLOBAL_LABEL_T,
SCH_HIER_LABEL_T,
SCH_TEXT_T,
SCH_NETCLASS_FLAG_T,
SCH_DIRECTIVE_LABEL_T,
EOT };
EE_SELECTION selection = m_selectionTool->RequestSelection( allTextTypes );
@ -1612,11 +1610,11 @@ int SCH_EDIT_TOOL::ChangeTextType( const TOOL_EVENT& aEvent )
if( text && text->Type() != convertTo )
{
bool selected = text->IsSelected();
SCH_TEXT* newtext = nullptr;
const VECTOR2I& position = text->GetPosition();
LABEL_SPIN_STYLE orientation = text->GetLabelSpinStyle();
wxString txt = UnescapeString( text->GetText() );
bool selected = text->IsSelected();
SCH_TEXT* newtext = nullptr;
const VECTOR2I& position = text->GetPosition();
TEXT_SPIN_STYLE orientation = text->GetTextSpinStyle();
wxString txt = UnescapeString( text->GetText() );
// There can be characters in a SCH_TEXT object that can break labels so we have to
// fix them here.
@ -1639,12 +1637,12 @@ int SCH_EDIT_TOOL::ChangeTextType( const TOOL_EVENT& aEvent )
switch( convertTo )
{
case SCH_LABEL_T: newtext = new SCH_LABEL( position, txt ); break;
case SCH_GLOBAL_LABEL_T: newtext = new SCH_GLOBALLABEL( position, txt ); break;
case SCH_HIER_LABEL_T: newtext = new SCH_HIERLABEL( position, txt ); break;
case SCH_TEXT_T: newtext = new SCH_TEXT( position, txt ); break;
case SCH_NETCLASS_FLAG_T: newtext = new SCH_NETCLASS_FLAG( position ); break;
default: UNIMPLEMENTED_FOR( wxString::Format( "%d.", convertTo ) ); break;
case SCH_LABEL_T: newtext = new SCH_LABEL( position, txt ); break;
case SCH_GLOBAL_LABEL_T: newtext = new SCH_GLOBALLABEL( position, txt ); break;
case SCH_HIER_LABEL_T: newtext = new SCH_HIERLABEL( position, txt ); break;
case SCH_TEXT_T: newtext = new SCH_TEXT( position, txt ); break;
case SCH_DIRECTIVE_LABEL_T: newtext = new SCH_DIRECTIVE_LABEL( position ); break;
default: UNIMPLEMENTED_FOR( wxString::Format( "%d.", convertTo ) ); break;
}
// Copy the old text item settings to the new one. Justifications are not copied
@ -1653,7 +1651,7 @@ int SCH_EDIT_TOOL::ChangeTextType( const TOOL_EVENT& aEvent )
//
newtext->SetFlags( text->GetEditFlags() );
newtext->SetShape( text->GetShape() );
newtext->SetLabelSpinStyle( orientation );
newtext->SetTextSpinStyle( orientation );
newtext->SetTextSize( text->GetTextSize() );
newtext->SetTextThickness( text->GetTextThickness() );
newtext->SetItalic( text->IsItalic() );

View File

@ -1591,7 +1591,7 @@ int SCH_EDITOR_CONTROL::Paste( const TOOL_EVENT& aEvent )
{
// If it wasn't content, then paste as content
SCH_TEXT* text_item = new SCH_TEXT( wxPoint( 0, 0 ), content );
text_item->SetLabelSpinStyle( LABEL_SPIN_STYLE::RIGHT ); // Left alignment
text_item->SetTextSpinStyle( TEXT_SPIN_STYLE::RIGHT ); // Left alignment
tempScreen->Append( text_item );
}

View File

@ -376,7 +376,7 @@ SCH_LINE* SCH_LINE_WIRE_BUS_TOOL::doUnfoldBus( const wxString& aNet, const VECTO
m_busUnfold.label = new SCH_LABEL( m_busUnfold.entry->GetEnd(), aNet );
m_busUnfold.label->SetTextSize( wxSize( cfg.m_DefaultTextSize, cfg.m_DefaultTextSize ) );
m_busUnfold.label->SetLabelSpinStyle( LABEL_SPIN_STYLE::RIGHT );
m_busUnfold.label->SetTextSpinStyle( TEXT_SPIN_STYLE::RIGHT );
m_busUnfold.label->SetParent( m_frame->GetScreen() );
m_busUnfold.label->SetFlags( IS_NEW | IS_MOVING );

View File

@ -583,7 +583,7 @@ void SCH_MOVE_TOOL::getConnectedDragItems( SCH_ITEM* aOriginalItem, const VECTOR
// end.
for( SCH_ITEM* item : itemsOverlapping )
{
if( item->Type() == SCH_LABEL_T || item->Type() == SCH_NETCLASS_FLAG_T )
if( item->Type() == SCH_LABEL_T || item->Type() == SCH_DIRECTIVE_LABEL_T )
{
SCH_TEXT* label = static_cast<SCH_TEXT*>( item );
@ -647,7 +647,7 @@ void SCH_MOVE_TOOL::getConnectedDragItems( SCH_ITEM* aOriginalItem, const VECTOR
case SCH_LABEL_T:
case SCH_GLOBAL_LABEL_T:
case SCH_HIER_LABEL_T:
case SCH_NETCLASS_FLAG_T:
case SCH_DIRECTIVE_LABEL_T:
// Performance optimization:
if( test->HasFlag( TEMP_SELECTED ) )
break;
@ -774,7 +774,7 @@ void SCH_MOVE_TOOL::moveItem( EDA_ITEM* aItem, const VECTOR2I& aDelta )
break;
}
case SCH_LABEL_T:
case SCH_NETCLASS_FLAG_T:
case SCH_DIRECTIVE_LABEL_T:
{
SCH_TEXT* label = static_cast<SCH_TEXT*>( aItem );

View File

@ -138,7 +138,7 @@ enum KICAD_T
SCH_LABEL_T,
SCH_GLOBAL_LABEL_T,
SCH_HIER_LABEL_T,
SCH_NETCLASS_FLAG_T,
SCH_DIRECTIVE_LABEL_T,
SCH_FIELD_T,
SCH_SYMBOL_T,
SCH_SHEET_PIN_T,
@ -349,7 +349,7 @@ constexpr bool IsEeschemaType( const KICAD_T aType )
case SCH_BITMAP_T:
case SCH_TEXT_T:
case SCH_LABEL_T:
case SCH_NETCLASS_FLAG_T:
case SCH_DIRECTIVE_LABEL_T:
case SCH_GLOBAL_LABEL_T:
case SCH_HIER_LABEL_T:
case SCH_FIELD_T:

View File

@ -77,21 +77,21 @@ public:
switch( aType )
{
case SCH_MARKER_T: return new SCH_MARKER( m_ercItem, wxPoint( 0, 0 ) );
case SCH_JUNCTION_T: return new SCH_JUNCTION();
case SCH_NO_CONNECT_T: return new SCH_NO_CONNECT();
case SCH_BUS_WIRE_ENTRY_T: return new SCH_BUS_WIRE_ENTRY();
case SCH_BUS_BUS_ENTRY_T: return new SCH_BUS_BUS_ENTRY();
case SCH_LINE_T: return new SCH_LINE();
case SCH_SHAPE_T: return new SCH_SHAPE( SHAPE_T::ARC );
case SCH_BITMAP_T: return new SCH_BITMAP();
case SCH_TEXT_T: return new SCH_TEXT( wxPoint( 0, 0 ), "test text" );
case SCH_LABEL_T: return new SCH_LABEL( wxPoint( 0, 0 ), "test label" );
case SCH_NETCLASS_FLAG_T: return new SCH_NETCLASS_FLAG( wxPoint( 0, 0 ) );
case SCH_GLOBAL_LABEL_T: return new SCH_GLOBALLABEL();
case SCH_HIER_LABEL_T: return new SCH_HIERLABEL();
case SCH_FIELD_T: return new SCH_FIELD( wxPoint( 0, 0 ), 0, nullptr );
case SCH_SYMBOL_T: return new SCH_SYMBOL();
case SCH_MARKER_T: return new SCH_MARKER( m_ercItem, wxPoint( 0, 0 ) );
case SCH_JUNCTION_T: return new SCH_JUNCTION();
case SCH_NO_CONNECT_T: return new SCH_NO_CONNECT();
case SCH_BUS_WIRE_ENTRY_T: return new SCH_BUS_WIRE_ENTRY();
case SCH_BUS_BUS_ENTRY_T: return new SCH_BUS_BUS_ENTRY();
case SCH_LINE_T: return new SCH_LINE();
case SCH_SHAPE_T: return new SCH_SHAPE( SHAPE_T::ARC );
case SCH_BITMAP_T: return new SCH_BITMAP();
case SCH_TEXT_T: return new SCH_TEXT( wxPoint( 0, 0 ), "test text" );
case SCH_LABEL_T: return new SCH_LABEL( wxPoint( 0, 0 ), "test label" );
case SCH_DIRECTIVE_LABEL_T: return new SCH_DIRECTIVE_LABEL( wxPoint( 0, 0 ) );
case SCH_GLOBAL_LABEL_T: return new SCH_GLOBALLABEL();
case SCH_HIER_LABEL_T: return new SCH_HIERLABEL();
case SCH_FIELD_T: return new SCH_FIELD( wxPoint( 0, 0 ), 0, nullptr );
case SCH_SYMBOL_T: return new SCH_SYMBOL();
case SCH_SHEET_PIN_T:
// XXX: m_sheet pins currently have to have their initial positions calculated manually.
@ -100,17 +100,16 @@ public:
m_sheet.GetPosition().y + Millimeter2iu( 40 ) ),
"test aPin" );
case SCH_SHEET_T: return new SCH_SHEET();
case LIB_SHAPE_T: return new LIB_SHAPE( &m_symbol, SHAPE_T::ARC );
case LIB_TEXT_T: return new LIB_TEXT( &m_symbol );
case LIB_PIN_T: return new LIB_PIN( &m_symbol );
case LIB_FIELD_T: return new LIB_FIELD( &m_symbol );
case SCH_SHEET_T: return new SCH_SHEET();
case LIB_SHAPE_T: return new LIB_SHAPE( &m_symbol, SHAPE_T::ARC );
case LIB_TEXT_T: return new LIB_TEXT( &m_symbol );
case LIB_PIN_T: return new LIB_PIN( &m_symbol );
case LIB_FIELD_T: return new LIB_FIELD( &m_symbol );
case SCHEMATIC_T:
case SCH_PIN_T:
case LIB_SYMBOL_T:
case LIB_ALIAS_T:
return nullptr;
case LIB_ALIAS_T: return nullptr;
default:
BOOST_FAIL( wxString::Format(