From af048ff2e3b9713a9569b92301308c935ce46907 Mon Sep 17 00:00:00 2001 From: charras Date: Sat, 20 Dec 2008 17:28:25 +0000 Subject: [PATCH] Italic option for pcb texts --- eeschema/dialog_edit_label.cpp | 6 +- include/wxPcbStruct.h | 3 +- pcbnew/CMakeLists.txt | 3 +- pcbnew/class_pcb_text.cpp | 24 +- ...xte.cpp => dialog_pcb_text_properties.cpp} | 231 +++--------------- pcbnew/edit.cpp | 3 +- pcbnew/edit_pcb_text.cpp | 187 ++++++++++++++ pcbnew/makefile.include | 5 +- pcbnew/onleftclick.cpp | 3 +- 9 files changed, 244 insertions(+), 221 deletions(-) rename pcbnew/{pcbtexte.cpp => dialog_pcb_text_properties.cpp} (54%) create mode 100644 pcbnew/edit_pcb_text.cpp diff --git a/eeschema/dialog_edit_label.cpp b/eeschema/dialog_edit_label.cpp index ee50cdcbc6..4c54b66990 100644 --- a/eeschema/dialog_edit_label.cpp +++ b/eeschema/dialog_edit_label.cpp @@ -26,6 +26,8 @@ void DialogLabelEditor::OnInitDialog( wxInitDialogEvent& event ) { wxString msg; + SetFont(*g_DialogFont); + m_TextLabel->SetValue(m_CurrentText->m_Text); m_TextLabel->SetFocus(); @@ -64,9 +66,7 @@ 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); diff --git a/include/wxPcbStruct.h b/include/wxPcbStruct.h index 9c931d8d3b..4e29a7f4cb 100644 --- a/include/wxPcbStruct.h +++ b/include/wxPcbStruct.h @@ -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 ); diff --git a/pcbnew/CMakeLists.txt b/pcbnew/CMakeLists.txt index 53dcfa51e1..a4b2569880 100644 --- a/pcbnew/CMakeLists.txt +++ b/pcbnew/CMakeLists.txt @@ -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 diff --git a/pcbnew/class_pcb_text.cpp b/pcbnew/class_pcb_text.cpp index f52deab79a..f3b8a8e7fb 100644 --- a/pcbnew/class_pcb_text.cpp +++ b/pcbnew/class_pcb_text.cpp @@ -1,6 +1,6 @@ -/************************************/ -/* fonctions de la classe TEXTE_PCB */ -/************************************/ +/*********************************************************/ +/* class TEXTE_PCB : texts on copper or technical layers */ +/*********************************************************/ #include "fctsys.h" #include "wxstruct.h" @@ -40,7 +40,7 @@ void TEXTE_PCB::Copy( TEXTE_PCB* source ) m_Layer = source->m_Layer; m_Width = source->m_Width; m_Attributs = source->m_Attributs; - m_Italic = source->m_Italic; + m_Italic = source->m_Italic; m_HJustify = source->m_HJustify; m_VJustify = source->m_VJustify; @@ -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; diff --git a/pcbnew/pcbtexte.cpp b/pcbnew/dialog_pcb_text_properties.cpp similarity index 54% rename from pcbnew/pcbtexte.cpp rename to pcbnew/dialog_pcb_text_properties.cpp index f97763c6fc..7bd62658bb 100644 --- a/pcbnew/pcbtexte.cpp +++ b/pcbnew/dialog_pcb_text_properties.cpp @@ -1,6 +1,6 @@ -/**************************************************/ -/* 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 ); + 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(); -} diff --git a/pcbnew/edit.cpp b/pcbnew/edit.cpp index 6908afbd54..038b1ca79b 100644 --- a/pcbnew/edit.cpp +++ b/pcbnew/edit.cpp @@ -784,8 +784,7 @@ void WinEDA_PcbFrame::Process_Special_Functions( wxCommandEvent& event ) break; case ID_POPUP_PCB_EDIT_TEXTEPCB: - InstallTextPCBOptionsFrame( (TEXTE_PCB*) GetCurItem(), - &dc, pos ); + InstallTextPCBOptionsFrame( (TEXTE_PCB*) GetCurItem(), &dc ); DrawPanel->MouseToCursorSchema(); break; diff --git a/pcbnew/edit_pcb_text.cpp b/pcbnew/edit_pcb_text.cpp new file mode 100644 index 0000000000..9e0b25b400 --- /dev/null +++ b/pcbnew/edit_pcb_text.cpp @@ -0,0 +1,187 @@ +/*********************************************************************/ +/* Edition of texts on copper and technical layers (TEXTE_PCB class) */ +/*********************************************************************/ + +#include "fctsys.h" +#include "gr_basic.h" + +#include "common.h" +#include "pcbnew.h" + +#include "protos.h" + +/* Local functions */ +static void Move_Texte_Pcb( WinEDA_DrawPanel* panel, wxDC* DC, bool erase ); +static void Abort_Edit_Pcb_Text( WinEDA_DrawPanel* Panel, wxDC* DC ); + +/* Local variables : */ +static wxPoint old_pos; // initial position of the text when moving it + + +/*************************************************************/ +void Abort_Edit_Pcb_Text( 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 ) +/*********************************************************************/ + +/* + * Place the current text being moving + */ +{ + 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 ) +/***********************************************************************/ + +/* Initialise parameters to move a pcb text + */ +{ + 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 = Abort_Edit_Pcb_Text; + 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 ); + 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(); +} diff --git a/pcbnew/makefile.include b/pcbnew/makefile.include index 453582afcc..c4e9c5b48c 100644 --- a/pcbnew/makefile.include +++ b/pcbnew/makefile.include @@ -30,6 +30,7 @@ OBJECTS= $(TARGET).o classpcb.o\ block_module_editor.o\ dialog_pad_properties.o\ dialog_pad_properties_base.o\ + dialog_pcb_text_properties.o\ onrightclick.o\ onleftclick.o\ modedit_onclick.o\ @@ -72,7 +73,7 @@ OBJECTS= $(TARGET).o classpcb.o\ tracemod.o \ trpiste.o \ surbrill.o \ - pcbtexte.o \ + edit_pcb_text.o \ locate.o \ modules.o \ loadcmp.o \ @@ -198,7 +199,7 @@ trpiste.o: trpiste.cpp surbrill.o: surbrill.cpp -pcbtexte.o: pcbtexte.cpp +edit_pcb_text.o: edit_pcb_text.cpp locate.o: locate.cpp diff --git a/pcbnew/onleftclick.cpp b/pcbnew/onleftclick.cpp index 48084147c3..051cfadf9f 100644 --- a/pcbnew/onleftclick.cpp +++ b/pcbnew/onleftclick.cpp @@ -372,8 +372,7 @@ void WinEDA_PcbFrame::OnLeftDClick( wxDC* DC, const wxPoint& MousePos ) break; case TYPE_TEXTE: - InstallTextPCBOptionsFrame( (TEXTE_PCB*) DrawStruct, - DC, ( (TEXTE_PCB*) DrawStruct )->m_Pos ); + InstallTextPCBOptionsFrame( (TEXTE_PCB*) DrawStruct, DC ); DrawPanel->MouseToCursorSchema(); break;