Commit 66f1de70 authored by Marco Mattila's avatar Marco Mattila
Browse files

Add horizontal text justification to text items in pcbnew.

parent 160ab816
Loading
Loading
Loading
Loading
+7 −4
Original line number Diff line number Diff line
@@ -230,7 +230,7 @@ EDA_TEXT::~EDA_TEXT()

int EDA_TEXT::LenSize( const wxString& aLine ) const
{
    return ReturnGraphicTextWidth( aLine, m_Size.x, m_Italic, m_Bold ) + m_Thickness;
    return ReturnGraphicTextWidth( aLine, m_Size.x, m_Italic, m_Bold );
}


@@ -286,7 +286,6 @@ EDA_RECT EDA_TEXT::GetTextBox( int aLine, int aThickness, bool aInvertY ) const
    delete list;

    rect.SetSize( textsize );
    rect.Inflate( thickness / 2 );      // ensure a small margin

    /* Now, calculate the rect origin, according to text justification
     * At this point the rectangle origin is the text origin (m_Pos).
@@ -297,6 +296,8 @@ EDA_RECT EDA_TEXT::GetTextBox( int aLine, int aThickness, bool aInvertY ) const
    switch( m_HJustify )
    {
    case GR_TEXT_HJUSTIFY_LEFT:
        if( m_Mirror )
            rect.SetX( rect.GetX() - rect.GetWidth() );
        break;

    case GR_TEXT_HJUSTIFY_CENTER:
@@ -304,6 +305,7 @@ EDA_RECT EDA_TEXT::GetTextBox( int aLine, int aThickness, bool aInvertY ) const
        break;

    case GR_TEXT_HJUSTIFY_RIGHT:
        if( !m_Mirror )
            rect.SetX( rect.GetX() - rect.GetWidth() );
        break;
    }
@@ -324,6 +326,7 @@ EDA_RECT EDA_TEXT::GetTextBox( int aLine, int aThickness, bool aInvertY ) const
        break;
    }

    rect.Inflate( thickness / 2 );
    rect.Normalize();       // Make h and v sizes always >= 0

    return rect;
@@ -378,7 +381,7 @@ void EDA_TEXT::Draw( EDA_DRAW_PANEL* aPanel, wxDC* aDC, const wxPoint& aOffset,
                               aColor,
                               aDrawMode,
                               aFillMode,
                               aAnchor_color,
                               i ?  UNSPECIFIED_COLOR : aAnchor_color,
                               txt,
                               pos );
            pos += offset;
+5 −0
Original line number Diff line number Diff line
@@ -845,6 +845,11 @@ public:
    void SetText( const wxString& aText ) { m_Text = aText; }

    wxString GetText() const { return m_Text; }

    GRTextHorizJustifyType GetHorizJustify() const { return m_HJustify; };
    GRTextVertJustifyType GetVertJustify() const { return m_VJustify; };
    void SetHorizJustify( GRTextHorizJustifyType aType ) { m_HJustify = aType; };
    void SetVertJustify( GRTextVertJustifyType aType ) { m_VJustify = aType; };
};

#endif /* BASE_STRUCT_H */
+50 −13
Original line number Diff line number Diff line
@@ -16,7 +16,7 @@
#include "trigo.h"
#include "protos.h"
#include "richio.h"

#include "class_drawpanel.h"

/*******************/
/* class TEXTE_PCB */
@@ -119,8 +119,9 @@ int TEXTE_PCB::ReadTextePcbDescr( LINE_READER* aReader )
        {
            style[0] = 0;
            int normal_display = 1;
            sscanf( line + 2, " %d %d %lX %s\n", &m_Layer, &normal_display,
                    &m_TimeStamp, style );
            char hJustify = 'l';
            sscanf( line + 2, " %d %d %lX %s %c\n", &m_Layer, &normal_display,
                    &m_TimeStamp, style, &hJustify );

            m_Mirror = normal_display ? false : true;

@@ -133,6 +134,25 @@ int TEXTE_PCB::ReadTextePcbDescr( LINE_READER* aReader )
                m_Italic = 1;
            else
                m_Italic = 0;

            switch( hJustify )
            {
            case 'l':
            case 'L':
                m_HJustify = GR_TEXT_HJUSTIFY_LEFT;
                break;
            case 'c':
            case 'C':
                m_HJustify = GR_TEXT_HJUSTIFY_CENTER;
                break;
            case 'r':
            case 'R':
                m_HJustify = GR_TEXT_HJUSTIFY_RIGHT;
                break;
            default:
                m_HJustify = GR_TEXT_HJUSTIFY_CENTER;
                break;
            }
            continue;
        }
    }
@@ -173,9 +193,26 @@ bool TEXTE_PCB::Save( FILE* aFile ) const
    fprintf( aFile, "Po %d %d %d %d %d %d\n",
             m_Pos.x, m_Pos.y, m_Size.x, m_Size.y, m_Thickness, m_Orient );

    fprintf( aFile, "De %d %d %lX %s\n", m_Layer,
    char hJustify = 'L';
    switch( m_HJustify )
    {
    case GR_TEXT_HJUSTIFY_LEFT:
        hJustify = 'L';
        break;
    case GR_TEXT_HJUSTIFY_CENTER:
        hJustify = 'C';
        break;
    case GR_TEXT_HJUSTIFY_RIGHT:
        hJustify = 'R';
        break;
    default:
        hJustify = 'C';
        break;
    }

    fprintf( aFile, "De %d %d %lX %s %c\n", m_Layer,
             m_Mirror ? 0 : 1,
             m_TimeStamp, style );
             m_TimeStamp, style, hJustify );

    if( fprintf( aFile, "$EndTEXTPCB\n" ) != sizeof("$EndTEXTPCB\n") - 1 )
        return false;
@@ -245,16 +282,16 @@ void TEXTE_PCB::DisplayInfo( EDA_DRAW_FRAME* frame )
        frame->AppendMsgPanel( _( "Mirror" ), _( "Yes" ), DARKGREEN );

    msg.Printf( wxT( "%.1f" ), (float) m_Orient / 10 );
    frame->AppendMsgPanel( _( "Orient" ), msg, DARKGREEN );
    frame->AppendMsgPanel( _( "Orientation" ), msg, DARKGREEN );

    valeur_param( m_Thickness, msg );
    frame->AppendMsgPanel( _( "Thickness" ), msg, MAGENTA );

    valeur_param( m_Size.x, msg );
    frame->AppendMsgPanel( _( "H Size" ), msg, RED );
    frame->AppendMsgPanel( _( "Size X" ), msg, RED );

    valeur_param( m_Size.y, msg );
    frame->AppendMsgPanel( _( "V Size" ), msg, RED );
    frame->AppendMsgPanel( _( "Size Y" ), msg, RED );
}


+41 −3
Original line number Diff line number Diff line
@@ -58,6 +58,7 @@ DIALOG_PCB_TEXT_PROPERTIES::DIALOG_PCB_TEXT_PROPERTIES( PCB_EDIT_FRAME* parent,
    Centre();
}


/**
 * Routine for main window class to launch text properties dialog.
 */
@@ -70,6 +71,7 @@ void PCB_EDIT_FRAME::InstallTextPCBOptionsFrame( TEXTE_PCB* TextPCB, wxDC* DC )
    DrawPanel->m_IgnoreMouseEvents = FALSE;
}


void DIALOG_PCB_TEXT_PROPERTIES::MyInit()
{
    SetFocus();
@@ -95,11 +97,18 @@ void DIALOG_PCB_TEXT_PROPERTIES::MyInit()
    PutValueInLocalUnits( *m_PositionYCtrl, m_SelectedPCBText->m_Pos.y,
        m_Parent->m_InternalUnits );

    int enabledLayers = m_Parent->GetBoard()->GetEnabledLayers();
    for( int layer = 0; layer < NB_LAYERS;  ++layer )
    {
        if( enabledLayers & (1 << layer) )
        {
            layerList.push_back( layer );
            int itemIndex =
                m_LayerSelectionCtrl->Append( m_Parent->GetBoard()->GetLayerName( layer ) );
            if( m_SelectedPCBText->GetLayer() == layer )
                m_LayerSelectionCtrl->SetSelection( itemIndex );
        }
    }
     m_LayerSelectionCtrl->SetSelection( m_SelectedPCBText->GetLayer() );

    switch( m_SelectedPCBText->m_Orient )
    {
@@ -127,16 +136,28 @@ void DIALOG_PCB_TEXT_PROPERTIES::MyInit()
    else
        m_StyleCtrl->SetSelection( 0 );

    // Set justification
    GRTextHorizJustifyType hJustify = m_SelectedPCBText->GetHorizJustify();
    m_justifyChoice->SetSelection( (int) hJustify + 1 );

    // Set focus on most important control
    m_TextContentCtrl->SetFocus();
    m_TextContentCtrl->SetSelection( -1, -1 );
}


void DIALOG_PCB_TEXT_PROPERTIES::OnClose( wxCloseEvent& event )
{
    EndModal( 0 );
}


void DIALOG_PCB_TEXT_PROPERTIES::OnCancelClick( wxCommandEvent& event )
{
    EndModal( wxID_CANCEL );
}


void DIALOG_PCB_TEXT_PROPERTIES::OnOkClick( wxCommandEvent& event )
{
    wxPoint newPosition;
@@ -174,6 +195,7 @@ void DIALOG_PCB_TEXT_PROPERTIES::OnOkClick( wxCommandEvent& event )
    // Check constraints and set PCB Text size
    newSize.x = ReturnValueFromString( g_UserUnit, m_SizeXCtrl->GetValue(), m_Parent->m_InternalUnits );
    newSize.y = ReturnValueFromString( g_UserUnit, m_SizeYCtrl->GetValue(), m_Parent->m_InternalUnits );

    if( newSize.x < TEXTS_MIN_SIZE )
        newSize.x = TEXTS_MIN_SIZE;
    if( newSize.y < TEXTS_MIN_SIZE )
@@ -196,7 +218,7 @@ void DIALOG_PCB_TEXT_PROPERTIES::OnOkClick( wxCommandEvent& event )
    }

    // Set the layer on which the PCB text is laying
    m_SelectedPCBText->SetLayer(  m_LayerSelectionCtrl->GetSelection() );
    m_SelectedPCBText->SetLayer( layerList[m_LayerSelectionCtrl->GetSelection()] );

    // Set whether the PCB text is mirrored (faced down from layer face perspective)
    m_SelectedPCBText->m_Mirror = (m_DisplayCtrl->GetSelection() == 1) ? true : false;
@@ -207,6 +229,22 @@ void DIALOG_PCB_TEXT_PROPERTIES::OnOkClick( wxCommandEvent& event )
    // Set whether the PCB text is slanted (it is not italics, as italics has additional curves in style)
    m_SelectedPCBText->m_Italic = m_StyleCtrl->GetSelection() ? 1 : 0;

    // Set justification
    switch( m_justifyChoice->GetSelection() )
    {
    case 0:
        m_SelectedPCBText->SetHorizJustify( GR_TEXT_HJUSTIFY_LEFT );
        break;
    case 1:
        m_SelectedPCBText->SetHorizJustify( GR_TEXT_HJUSTIFY_CENTER );
        break;
    case 2:
        m_SelectedPCBText->SetHorizJustify( GR_TEXT_HJUSTIFY_RIGHT );
        break;
    default:
        break;
    }

    // Finally, display new text if there is a context to do so
    if( m_DC )
    {
+7 −13
Original line number Diff line number Diff line
#ifndef __dialog_pcb_text_properties__
#define __dialog_pcb_text_properties__

/**
@file
Subclass of DIALOG_PCB_TEXT_PROPERTIES_BASE, which is generated by wxFormBuilder.
*/
#ifndef DIALOG_PCB_TEXT_PROPERTIES_H
#define DIALOG_PCB_TEXT_PROPERTIES_H

#include <vector>
#include <wx/wx.h>
#include "dialog_pcb_text_properties_base.h"

//// end generated include

class PCB_EDIT_FRAME;
class wxDC;
class TEXTE_PCB;

/** Implementing DIALOG_PCB_TEXT_PROPERTIES_BASE */
@@ -21,18 +15,18 @@ private:
    PCB_EDIT_FRAME*      m_Parent;
    wxDC*                m_DC;
    TEXTE_PCB*           m_SelectedPCBText;
    std::vector<int>     layerList;

    void MyInit();

protected:
    // Handlers for DIALOG_PCB_TEXT_PROPERTIES_BASE events.
    void OnClose( wxCloseEvent& event );
    void OnCancelClick( wxCommandEvent& event );
    void OnOkClick( wxCommandEvent& event );

public:
    DIALOG_PCB_TEXT_PROPERTIES( PCB_EDIT_FRAME* parent, TEXTE_PCB* passedTextPCB, wxDC* DC );
    //// end generated class members

};

#endif // __dialog_pcb_text_properties__
#endif // DIALOG_PCB_TEXT_PROPERTIES_H
Loading