Commit af048ff2 authored by charras's avatar charras
Browse files

Italic option for pcb texts

parent f1eb69a1
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
@@ -26,6 +26,8 @@ void DialogLabelEditor::OnInitDialog( wxInitDialogEvent& event )
{
wxString msg;

	SetFont(*g_DialogFont);

    m_TextLabel->SetValue(m_CurrentText->m_Text);
    m_TextLabel->SetFocus();

@@ -65,8 +67,6 @@ wxString msg;
    msg = ReturnStringFromValue(g_UnitMetric, m_CurrentText->m_Size.x, m_Parent->m_InternalUnits);
    m_TextSize->SetValue(msg);

    SetFocus();
    
    if (m_CurrentText->Type() != TYPE_SCH_GLOBALLABEL  &&
        m_CurrentText->Type() != TYPE_SCH_HIERLABEL)
        m_TextShape->Show(false);
+1 −2
Original line number Diff line number Diff line
@@ -453,8 +453,7 @@ public:
    void                Delete_Texte_Pcb( TEXTE_PCB* TextePcb, wxDC* DC );
    void                StartMoveTextePcb( TEXTE_PCB* TextePcb, wxDC* DC );
    void                Place_Texte_Pcb( TEXTE_PCB* TextePcb, wxDC* DC );
    void                InstallTextPCBOptionsFrame( TEXTE_PCB* TextPCB,
                                                    wxDC* DC, const wxPoint& pos );
    void                InstallTextPCBOptionsFrame( TEXTE_PCB* TextPCB, wxDC* DC );

    // Graphic Segments type DRAWSEGMENT
    void                Start_Move_DrawItem( DRAWSEGMENT* drawitem, wxDC* DC );
+2 −1
Original line number Diff line number Diff line
@@ -56,6 +56,7 @@ set(PCBNEW_SRCS
#   dialog_graphic_items_options.cpp
#   dialog_initpcb.cpp
#   dialog_netlist.cpp
    dialog_pcb_text_properties.cpp
    zones_non_copper_type_functions.cpp
    dialog_non_copper_zones_properties_base.cpp
    dialog_pad_properties.cpp
@@ -74,6 +75,7 @@ set(PCBNEW_SRCS
    editmod.cpp
    editrack.cpp
    editrack-part2.cpp
	edit_pcb_text.cpp
    edit_track_width.cpp
    edtxtmod.cpp
    export_gencad.cpp
@@ -114,7 +116,6 @@ set(PCBNEW_SRCS
    pcbframe.cpp
    pcbnew.cpp
    pcbplot.cpp
    pcbtexte.cpp
    plotgerb.cpp
    plothpgl.cpp
    plotps.cpp
+16 −8
Original line number Diff line number Diff line
/************************************/
/* fonctions de la classe TEXTE_PCB */
/************************************/
/*********************************************************/
/* class TEXTE_PCB : texts on copper or technical layers */
/*********************************************************/

#include "fctsys.h"
#include "wxstruct.h"
@@ -53,7 +53,7 @@ int TEXTE_PCB::ReadTextePcbDescr( FILE* File, int* LineNum )
/****************************************************************/
{
    char text[1024], Line[1024];
    int  dummy;
    char  style[256];

    while( GetLine( File, Line, LineNum ) != NULL )
    {
@@ -77,13 +77,18 @@ int TEXTE_PCB::ReadTextePcbDescr( FILE* File, int* LineNum )
        }
        if( strncmp( Line, "De", 2 ) == 0 )
        {
            sscanf( Line + 2, " %d %d %lX %d\n", &m_Layer, &m_Miroir,
                    &m_TimeStamp, &dummy );
			style[0] = 0;
            sscanf( Line + 2, " %d %d %lX %s\n", &m_Layer, &m_Miroir,
                    &m_TimeStamp, style );
            if( m_Layer < FIRST_COPPER_LAYER )
                m_Layer = FIRST_COPPER_LAYER;
            if( m_Layer > LAST_NO_COPPER_LAYER )
                m_Layer = LAST_NO_COPPER_LAYER;

			if ( strnicmp( style, "Italic", 6) == 0 )
				m_Italic = 1;
			else
				m_Italic = 0;
            continue;
        }
    }
@@ -92,7 +97,9 @@ int TEXTE_PCB::ReadTextePcbDescr( FILE* File, int* LineNum )
}


/*****************************************/
bool TEXTE_PCB::Save( FILE* aFile ) const
/*****************************************/
{
    if( GetState( DELETED ) )
        return true;
@@ -101,6 +108,7 @@ bool TEXTE_PCB::Save( FILE* aFile ) const
        return true;

    bool rc = false;
	const char * style = m_Italic ? "Italic" : "Normal";

    if( fprintf( aFile, "$TEXTPCB\n" ) != sizeof("$TEXTPCB\n")-1 )
        goto out;
@@ -108,7 +116,7 @@ bool TEXTE_PCB::Save( FILE* aFile ) const
    fprintf( aFile, "Te \"%s\"\n", CONV_TO_UTF8( m_Text ) );
    fprintf( aFile, "Po %d %d %d %d %d %d\n",
             m_Pos.x, m_Pos.y, m_Size.x, m_Size.y, m_Width, m_Orient );
    fprintf( aFile, "De %d %d %lX %d\n", m_Layer, m_Miroir, m_TimeStamp, 0 );
    fprintf( aFile, "De %d %d %lX %s\n", m_Layer, m_Miroir, m_TimeStamp, style );

    if( fprintf( aFile, "$EndTEXTPCB\n" ) != sizeof("$EndTEXTPCB\n")-1 )
        goto out;
+29 −200
Original line number Diff line number Diff line
/**************************************************/
/* traitement des editions des textes sur modules */
/**************************************************/
/***************************************************************************/
/* Dialog editor for text on copper and technical layers (TEXTE_PCB class) */
/***************************************************************************/

#include "fctsys.h"
#include "gr_basic.h"
@@ -8,18 +8,6 @@
#include "common.h"
#include "pcbnew.h"

#include "protos.h"

#define L_MIN_DESSIN 1 /* seuil de largeur des segments pour trace autre que filaire */

/* Routines Locales */
static void Move_Texte_Pcb( WinEDA_DrawPanel* panel, wxDC* DC, bool erase );
static void Exit_Texte_Pcb( WinEDA_DrawPanel* Panel, wxDC* DC );

/* Variables locales : */
static wxPoint old_pos; // position originelle du texte selecte


enum id_TextPCB_properties {
    ID_TEXTPCB_SELECT_LAYER = 1900
};
@@ -41,13 +29,14 @@ private:
    WinEDA_ValueCtrl*    m_TxtWidthCtlr;
    wxRadioBox*          m_Orient;
    wxRadioBox*          m_Mirror;
    wxRadioBox*          m_Style;
    WinEDAChoiceBox*     m_SelLayerBox;

public:

    // Constructor and destructor
    WinEDA_TextPCBPropertiesFrame( WinEDA_PcbFrame* parent,
                                   TEXTE_PCB* TextPCB, wxDC* DC, const wxPoint& pos );
                                   TEXTE_PCB* TextPCB, wxDC* DC );
    ~WinEDA_TextPCBPropertiesFrame()
    {
    }
@@ -66,14 +55,12 @@ EVT_BUTTON( wxID_CANCEL, WinEDA_TextPCBPropertiesFrame::OnCancelClick )
END_EVENT_TABLE()


/********************************************************************/
void WinEDA_PcbFrame::InstallTextPCBOptionsFrame( TEXTE_PCB* TextPCB,
                                                  wxDC* DC, const wxPoint& pos )
/********************************************************************/
/******************************************************************************/
void WinEDA_PcbFrame::InstallTextPCBOptionsFrame( TEXTE_PCB* TextPCB, wxDC* DC )
/*******************************************************************************/
{
    DrawPanel->m_IgnoreMouseEvents = TRUE;
    WinEDA_TextPCBPropertiesFrame* frame = new WinEDA_TextPCBPropertiesFrame( this,
                                                                              TextPCB, DC, pos );
    WinEDA_TextPCBPropertiesFrame* frame = new WinEDA_TextPCBPropertiesFrame( this, TextPCB, DC );
    frame->ShowModal();
    frame->Destroy();
    DrawPanel->MouseToCursorSchema();
@@ -83,10 +70,8 @@ void WinEDA_PcbFrame::InstallTextPCBOptionsFrame( TEXTE_PCB* TextPCB,

/************************************************************************************/
WinEDA_TextPCBPropertiesFrame::WinEDA_TextPCBPropertiesFrame( WinEDA_PcbFrame* parent,
                                                              TEXTE_PCB* TextPCB, wxDC* DC,
                                                              const wxPoint& framepos ) :
    wxDialog( parent, -1, _( "TextPCB properties" ), framepos, wxSize( 390, 340 ),
              DIALOG_STYLE )
                                                              TEXTE_PCB* TextPCB, wxDC* DC ) :
    wxDialog( parent, -1, _( "TextPCB properties" ), wxDefaultPosition, wxSize( 390, 340 ) )
/************************************************************************************/
{
    wxButton*   Button;
@@ -94,7 +79,6 @@ WinEDA_TextPCBPropertiesFrame::WinEDA_TextPCBPropertiesFrame( WinEDA_PcbFrame* p

    m_Parent = parent;


    SetFont( *g_DialogFont );
    m_DC = DC;
    Centre();
@@ -110,6 +94,7 @@ WinEDA_TextPCBPropertiesFrame::WinEDA_TextPCBPropertiesFrame( WinEDA_PcbFrame* p
    MainBoxSizer->Add( MiddleBoxSizer, 0, wxGROW | wxALL, 5 );
    MainBoxSizer->Add( RightBoxSizer, 0, wxALIGN_CENTER_VERTICAL | wxALL, 5 );


    /* Creation des boutons de commande */
    Button = new wxButton( this, wxID_OK, _( "OK" ) );
    Button->SetForegroundColour( *wxRED );
@@ -185,6 +170,16 @@ WinEDA_TextPCBPropertiesFrame::WinEDA_TextPCBPropertiesFrame( WinEDA_PcbFrame* p
        m_Mirror->SetSelection( 1 );
    MiddleBoxSizer->Add( m_Mirror, 0, wxGROW | wxALL, 5 );

	int style = 0;
	if (CurrentTextPCB->m_Italic )
		style = 1;
    wxString style_msg[] = { _( "Normal" ), _( "Italic" ) };
    m_Style = new wxRadioBox( this, -1, _( "Style" ),
                               wxDefaultPosition, wxSize( -1, -1 ), 2, style_msg,
                               1, wxRA_SPECIFY_COLS );
	m_Style->SetSelection(style);
    MiddleBoxSizer->Add( m_Style, 0, wxGROW | wxALL, 5 );

    GetSizer()->Fit( this );
    GetSizer()->SetSizeHints( this );
}
@@ -213,7 +208,7 @@ void WinEDA_TextPCBPropertiesFrame::OnOkClick( wxCommandEvent& event )
    if ( newsize.y > TEXTS_MAX_WIDTH )
        newsize.y = TEXTS_MAX_WIDTH;

    if( m_DC )     // Effacement ancien texte
    if( m_DC )     // Erase old text on screen
    {
        CurrentTextPCB->Draw( m_Parent->DrawPanel, m_DC, GR_XOR );
    }
@@ -227,187 +222,21 @@ void WinEDA_TextPCBPropertiesFrame::OnOkClick( wxCommandEvent& event )

    CurrentTextPCB->m_Width  = m_TxtWidthCtlr->GetValue();
    // test for acceptable values for parameters:
    if ( CurrentTextPCB->m_Width > TEXTS_MAX_WIDTH)
        CurrentTextPCB->m_Width = TEXTS_MAX_WIDTH;
	int max_tickness = min( CurrentTextPCB->m_Size.x, CurrentTextPCB->m_Size.y);
	max_tickness /= 4;
    if ( CurrentTextPCB->m_Width > max_tickness)
        CurrentTextPCB->m_Width = max_tickness;

    CurrentTextPCB->m_Miroir = (m_Mirror->GetSelection() == 0) ? 1 : 0;
    CurrentTextPCB->m_Orient = m_Orient->GetSelection() * 900;
    CurrentTextPCB->SetLayer( m_SelLayerBox->GetChoice() );
	CurrentTextPCB->m_Italic = m_Style->GetSelection() ? 1 : 0;

    if( m_DC )     // Affichage nouveau texte
    if( m_DC )     // Displya new text
    {
        /* Redessin du Texte */
       CurrentTextPCB->Draw( m_Parent->DrawPanel, m_DC, GR_OR );
    }
    m_Parent->GetScreen()->SetModify();
    EndModal( 1 );
}

/******************************************************/
void Exit_Texte_Pcb( WinEDA_DrawPanel* Panel, wxDC* DC )
/*******************************************************/

/*
 *  Routine de sortie du menu edit texte Pcb
 *  Si un texte est selectionne, ses coord initiales sont regenerees
 */
{
    TEXTE_PCB* TextePcb;

    TextePcb = (TEXTE_PCB*) Panel->GetScreen()->GetCurItem();

    if( TextePcb )
    {
        TextePcb->Draw( Panel, DC, GR_XOR );
        TextePcb->m_Pos = old_pos;
        TextePcb->Draw( Panel, DC, GR_OR );
        TextePcb->m_Flags = 0;
    }

    Panel->ManageCurseur = NULL;
    Panel->ForceCloseManageCurseur = NULL;
    ((WinEDA_PcbFrame*)Panel->m_Parent)->SetCurItem( NULL );
}


/*********************************************************************/
void WinEDA_PcbFrame::Place_Texte_Pcb( TEXTE_PCB* TextePcb, wxDC* DC )
/*********************************************************************/

/*
 *  Routine de placement du texte en cours de deplacement
 */
{
    if( TextePcb == NULL )
        return;

    TextePcb->Draw( DrawPanel, DC, GR_OR );
    DrawPanel->ManageCurseur = NULL;
    DrawPanel->ForceCloseManageCurseur = NULL;
    SetCurItem( NULL );
    GetScreen()->SetModify();
    TextePcb->m_Flags = 0;
}


/***********************************************************************/
void WinEDA_PcbFrame::StartMoveTextePcb( TEXTE_PCB* TextePcb, wxDC* DC )
/***********************************************************************/

/* Routine de preparation du deplacement d'un texte
 */
{
    if( TextePcb == NULL )
        return;
    old_pos = TextePcb->m_Pos;
    TextePcb->Draw( DrawPanel, DC, GR_XOR );
    TextePcb->m_Flags |= IS_MOVED;
    TextePcb->Display_Infos( this );
    DrawPanel->ManageCurseur = Move_Texte_Pcb;
    DrawPanel->ForceCloseManageCurseur = Exit_Texte_Pcb;
    SetCurItem( TextePcb );
    DrawPanel->ManageCurseur( DrawPanel, DC, FALSE );
}


/*************************************************************************/
static void Move_Texte_Pcb( WinEDA_DrawPanel* panel, wxDC* DC, bool erase )
/*************************************************************************/
/* Routine deplacant le texte PCB suivant le curseur de la souris */
{
    TEXTE_PCB* TextePcb = (TEXTE_PCB*) panel->GetScreen()->GetCurItem();

    if( TextePcb == NULL )
        return;

    /* effacement du texte : */

    if( erase )
        TextePcb->Draw( panel, DC, GR_XOR );

    TextePcb->m_Pos = panel->GetScreen()->m_Curseur;

    /* Redessin du Texte */
    TextePcb->Draw( panel, DC, GR_XOR );
}


/**********************************************************************/
void WinEDA_PcbFrame::Delete_Texte_Pcb( TEXTE_PCB* TextePcb, wxDC* DC )
/**********************************************************************/
{
    if( TextePcb == NULL )
        return;

    TextePcb->Draw( DrawPanel, DC, GR_XOR );

    /* Suppression du texte en Memoire*/
    TextePcb ->DeleteStructure();
    DrawPanel->ManageCurseur = NULL;
    DrawPanel->ForceCloseManageCurseur = NULL;
    SetCurItem( NULL );
}


/*******************************************************/
TEXTE_PCB* WinEDA_PcbFrame::Create_Texte_Pcb( wxDC* DC )
/*******************************************************/
{
    TEXTE_PCB* TextePcb;

    TextePcb = new TEXTE_PCB( m_Pcb );

    /* Chainage de la nouvelle structure en debut de liste */
    m_Pcb->Add( TextePcb );

    /* Mise a jour des caracteristiques */
    TextePcb->m_Flags  = IS_NEW;
    TextePcb->SetLayer( ((PCB_SCREEN*)GetScreen())->m_Active_Layer );
    TextePcb->m_Miroir = 1;
    if( TextePcb->GetLayer() == COPPER_LAYER_N )
        TextePcb->m_Miroir = 0;

    TextePcb->m_Size  = g_DesignSettings.m_PcbTextSize;
    TextePcb->m_Pos   = GetScreen()->m_Curseur;
    TextePcb->m_Width = g_DesignSettings.m_PcbTextWidth;

    InstallTextPCBOptionsFrame( TextePcb, DC, TextePcb->m_Pos );
    if( TextePcb->m_Text.IsEmpty() )
    {
        TextePcb ->DeleteStructure();
        TextePcb = NULL;
    }
    else
        StartMoveTextePcb( TextePcb, DC );

    return TextePcb;
}


/***********************************************************************/
void WinEDA_PcbFrame::Rotate_Texte_Pcb( TEXTE_PCB* TextePcb, wxDC* DC )
/***********************************************************************/
{
    int angle    = 900;
    int drawmode = GR_XOR;

    if( TextePcb == NULL )
        return;

    /* effacement du texte : */
    TextePcb->Draw( DrawPanel, DC, GR_XOR );


    TextePcb->m_Orient += angle;
    if( TextePcb->m_Orient >= 3600 )
        TextePcb->m_Orient -= 3600;
    if( TextePcb->m_Orient < 0 )
        TextePcb->m_Orient += 3600;

    /* Redessin du Texte */
    TextePcb->Draw( DrawPanel, DC, drawmode );
    TextePcb->Display_Infos( this );

    GetScreen()->SetModify();
}
Loading