279 lines
7.8 KiB
C++
279 lines
7.8 KiB
C++
|
/*********************************************/
|
|||
|
/* Routines de gestion des mires de centrage */
|
|||
|
/*********************************************/
|
|||
|
|
|||
|
#include "fctsys.h"
|
|||
|
#include "gr_basic.h"
|
|||
|
|
|||
|
#include "common.h"
|
|||
|
#include "pcbnew.h"
|
|||
|
|
|||
|
#include "protos.h"
|
|||
|
|
|||
|
|
|||
|
/* Routines Locales */
|
|||
|
static void Exit_EditMire(WinEDA_DrawPanel * Panel, wxDC *DC);
|
|||
|
static void Montre_Position_Mire(WinEDA_DrawPanel * panel, wxDC * DC, bool erase);
|
|||
|
|
|||
|
/* Variables locales : */
|
|||
|
static wxPoint OldPos;
|
|||
|
static int MireDefaultSize = 5000;
|
|||
|
|
|||
|
enum id_mire_properties
|
|||
|
{
|
|||
|
ID_ACCEPT_MIRE_PROPERTIES = 1900,
|
|||
|
ID_CANCEL_MIRE_PROPERTIES,
|
|||
|
ID_SIZE_MIRE,
|
|||
|
ID_LISTBOX_SHAPE_MIRE
|
|||
|
};
|
|||
|
|
|||
|
/************************************/
|
|||
|
/* class WinEDA_MirePropertiesFrame */
|
|||
|
/************************************/
|
|||
|
|
|||
|
class WinEDA_MirePropertiesFrame: public wxDialog
|
|||
|
{
|
|||
|
private:
|
|||
|
|
|||
|
WinEDA_PcbFrame * m_Parent;
|
|||
|
wxDC * m_DC;
|
|||
|
MIREPCB * m_MirePcb;
|
|||
|
WinEDA_ValueCtrl * m_MireWidthCtrl;
|
|||
|
WinEDA_ValueCtrl * m_MireSizeCtrl;
|
|||
|
wxRadioBox * m_MireShape;
|
|||
|
|
|||
|
public:
|
|||
|
// Constructor and destructor
|
|||
|
WinEDA_MirePropertiesFrame(WinEDA_PcbFrame *parent,
|
|||
|
MIREPCB * Mire, wxDC * DC, const wxPoint & pos);
|
|||
|
~WinEDA_MirePropertiesFrame(void)
|
|||
|
{
|
|||
|
}
|
|||
|
|
|||
|
private:
|
|||
|
void MirePropertiesAccept(wxCommandEvent& event);
|
|||
|
void OnQuit(wxCommandEvent& event);
|
|||
|
|
|||
|
DECLARE_EVENT_TABLE()
|
|||
|
};
|
|||
|
|
|||
|
BEGIN_EVENT_TABLE(WinEDA_MirePropertiesFrame, wxDialog)
|
|||
|
EVT_BUTTON(ID_ACCEPT_MIRE_PROPERTIES, WinEDA_MirePropertiesFrame::MirePropertiesAccept)
|
|||
|
EVT_BUTTON(ID_CANCEL_MIRE_PROPERTIES, WinEDA_MirePropertiesFrame::OnQuit)
|
|||
|
END_EVENT_TABLE()
|
|||
|
|
|||
|
|
|||
|
|
|||
|
/***************************************************************/
|
|||
|
void WinEDA_PcbFrame::InstallMireOptionsFrame(MIREPCB * MirePcb,
|
|||
|
wxDC * DC, const wxPoint & pos)
|
|||
|
/***************************************************************/
|
|||
|
{
|
|||
|
WinEDA_MirePropertiesFrame * frame = new WinEDA_MirePropertiesFrame(this,
|
|||
|
MirePcb, DC, pos);
|
|||
|
frame->ShowModal(); frame->Destroy();
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
WinEDA_MirePropertiesFrame::WinEDA_MirePropertiesFrame(WinEDA_PcbFrame *parent,
|
|||
|
MIREPCB * Mire,wxDC * DC,
|
|||
|
const wxPoint & framepos):
|
|||
|
wxDialog(parent, -1, _("Mire properties"), framepos, wxSize(270, 210),
|
|||
|
DIALOG_STYLE)
|
|||
|
{
|
|||
|
wxString number;
|
|||
|
wxButton * Button;
|
|||
|
|
|||
|
m_Parent = parent;
|
|||
|
SetFont(*g_DialogFont);
|
|||
|
m_DC = DC;
|
|||
|
Centre();
|
|||
|
|
|||
|
m_MirePcb = Mire;
|
|||
|
|
|||
|
wxBoxSizer * MainBoxSizer = new wxBoxSizer(wxHORIZONTAL);
|
|||
|
SetSizer(MainBoxSizer);
|
|||
|
wxBoxSizer * LeftBoxSizer = new wxBoxSizer(wxVERTICAL);
|
|||
|
wxBoxSizer * RightBoxSizer = new wxBoxSizer(wxVERTICAL);
|
|||
|
MainBoxSizer->Add(LeftBoxSizer, 0, wxGROW|wxALL, 5);
|
|||
|
MainBoxSizer->Add(RightBoxSizer, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5);
|
|||
|
|
|||
|
/* Creation des boutons de commande */
|
|||
|
Button = new wxButton(this, ID_ACCEPT_MIRE_PROPERTIES, _("Ok"));
|
|||
|
Button->SetForegroundColour(*wxRED);
|
|||
|
RightBoxSizer->Add(Button, 0, wxGROW|wxALL, 5);
|
|||
|
|
|||
|
Button = new wxButton(this, ID_CANCEL_MIRE_PROPERTIES, _("Cancel"));
|
|||
|
Button->SetForegroundColour(*wxBLUE);
|
|||
|
RightBoxSizer->Add(Button, 0, wxGROW|wxALL, 5);
|
|||
|
|
|||
|
// Size:
|
|||
|
m_MireSizeCtrl = new WinEDA_ValueCtrl(this, _("Size"),
|
|||
|
m_MirePcb->m_Size,
|
|||
|
g_UnitMetric, LeftBoxSizer, m_Parent->m_InternalUnits );
|
|||
|
|
|||
|
// Width:
|
|||
|
m_MireWidthCtrl = new WinEDA_ValueCtrl(this, _("Width"),
|
|||
|
m_MirePcb->m_Width,
|
|||
|
g_UnitMetric, LeftBoxSizer, m_Parent->m_InternalUnits );
|
|||
|
|
|||
|
// Shape
|
|||
|
wxString shape_list[2] = { _("shape +"), _("shape X") };
|
|||
|
m_MireShape = new wxRadioBox(this, ID_LISTBOX_SHAPE_MIRE,
|
|||
|
_("Mire Shape:"),
|
|||
|
wxDefaultPosition, wxSize(-1,-1),
|
|||
|
2, shape_list, 1);
|
|||
|
m_MireShape->SetSelection(m_MirePcb->m_Shape ? 1 : 0);
|
|||
|
LeftBoxSizer->Add(m_MireShape, 0, wxGROW|wxALL, 5);
|
|||
|
|
|||
|
GetSizer()->Fit(this);
|
|||
|
GetSizer()->SetSizeHints(this);
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
/**********************************************************************/
|
|||
|
void WinEDA_MirePropertiesFrame::OnQuit(wxCommandEvent& WXUNUSED(event))
|
|||
|
/**********************************************************************/
|
|||
|
{
|
|||
|
Close(true); // true is to force the frame to close
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
|
|||
|
/**************************************************************************/
|
|||
|
void WinEDA_MirePropertiesFrame::MirePropertiesAccept(wxCommandEvent& event)
|
|||
|
/**************************************************************************/
|
|||
|
/* Met a jour les differents parametres pour le composant en cours d'<27>dition
|
|||
|
*/
|
|||
|
{
|
|||
|
m_MirePcb->Draw(m_Parent->DrawPanel, m_DC, wxPoint(0,0), GR_XOR);
|
|||
|
|
|||
|
m_MirePcb->m_Width = m_MireWidthCtrl->GetValue();
|
|||
|
MireDefaultSize = m_MirePcb->m_Size = m_MireSizeCtrl->GetValue();
|
|||
|
m_MirePcb->m_Shape = m_MireShape->GetSelection() ? 1 : 0;
|
|||
|
|
|||
|
m_MirePcb->Draw(m_Parent->DrawPanel, m_DC, wxPoint(0,0), GR_OR);
|
|||
|
|
|||
|
m_Parent->GetScreen()->SetModify();
|
|||
|
Close(TRUE);
|
|||
|
}
|
|||
|
|
|||
|
/**************************************************************/
|
|||
|
void WinEDA_PcbFrame::Delete_Mire(MIREPCB * MirePcb, wxDC * DC)
|
|||
|
/**************************************************************/
|
|||
|
{
|
|||
|
|
|||
|
if( MirePcb == NULL ) return;
|
|||
|
|
|||
|
MirePcb->Draw(DrawPanel, DC, wxPoint(0,0), GR_XOR);
|
|||
|
DeleteStructure(MirePcb);
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
/**********************************************************/
|
|||
|
static void Exit_EditMire(WinEDA_DrawPanel * Panel, wxDC *DC)
|
|||
|
/**********************************************************/
|
|||
|
{
|
|||
|
BASE_SCREEN * screen = Panel->GetScreen();
|
|||
|
MIREPCB * MirePcb = (MIREPCB *) screen->m_CurrentItem;
|
|||
|
|
|||
|
Panel->ManageCurseur = NULL;
|
|||
|
Panel->ForceCloseManageCurseur = NULL;
|
|||
|
|
|||
|
if( MirePcb )
|
|||
|
{
|
|||
|
/* Effacement de la mire */
|
|||
|
MirePcb->Draw(Panel, DC, wxPoint(0,0), GR_XOR);
|
|||
|
|
|||
|
if( MirePcb->m_Flags & IS_NEW )
|
|||
|
{
|
|||
|
MirePcb->Draw(Panel, DC, wxPoint(0,0), GR_XOR);
|
|||
|
DeleteStructure(MirePcb);
|
|||
|
MirePcb = NULL ;
|
|||
|
}
|
|||
|
else /* Ancienne mire en deplacement: Remise en ancienne position */
|
|||
|
{
|
|||
|
MirePcb->m_Pos = OldPos;
|
|||
|
MirePcb->m_Flags = 0;
|
|||
|
MirePcb->Draw(Panel, DC, wxPoint(0,0),GR_OR);
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
/*****************************************************/
|
|||
|
MIREPCB * WinEDA_PcbFrame::Create_Mire( wxDC *DC)
|
|||
|
/*****************************************************/
|
|||
|
/* Routine de creation d'un Draw Symbole Pcb type MIRE
|
|||
|
*/
|
|||
|
{
|
|||
|
MIREPCB * MirePcb = new MIREPCB(m_Pcb);
|
|||
|
|
|||
|
MirePcb->Pnext = m_Pcb->m_Drawings;
|
|||
|
MirePcb->Pback = m_Pcb;
|
|||
|
if( m_Pcb->m_Drawings )
|
|||
|
m_Pcb->m_Drawings->Pback = MirePcb;
|
|||
|
m_Pcb->m_Drawings = MirePcb;
|
|||
|
|
|||
|
MirePcb->m_Layer = EDGE_N;
|
|||
|
MirePcb->m_Width = g_DesignSettings.m_EdgeSegmentWidth;
|
|||
|
MirePcb->m_Size = MireDefaultSize;
|
|||
|
MirePcb->m_Pos = GetScreen()->m_Curseur ;
|
|||
|
|
|||
|
Place_Mire(MirePcb, DC);
|
|||
|
|
|||
|
return MirePcb;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
/**********************************************************************/
|
|||
|
void WinEDA_PcbFrame::StartMove_Mire(MIREPCB * MirePcb, wxDC * DC)
|
|||
|
/**********************************************************************/
|
|||
|
/* Routine d'initialisation du deplacement d'une mire
|
|||
|
*/
|
|||
|
{
|
|||
|
if(MirePcb == NULL ) return;
|
|||
|
|
|||
|
OldPos = MirePcb->m_Pos;
|
|||
|
MirePcb->m_Flags |= IS_MOVED;
|
|||
|
DrawPanel->ManageCurseur = Montre_Position_Mire;
|
|||
|
DrawPanel->ForceCloseManageCurseur = Exit_EditMire;
|
|||
|
GetScreen()->m_CurrentItem = MirePcb;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
/**************************************************************/
|
|||
|
void WinEDA_PcbFrame::Place_Mire(MIREPCB * MirePcb, wxDC * DC)
|
|||
|
/**************************************************************/
|
|||
|
{
|
|||
|
if( MirePcb == NULL ) return ;
|
|||
|
|
|||
|
MirePcb->Draw(DrawPanel, DC, wxPoint(0,0),GR_OR);
|
|||
|
|
|||
|
MirePcb->m_Flags = 0;
|
|||
|
DrawPanel->ManageCurseur = NULL;
|
|||
|
DrawPanel->ForceCloseManageCurseur = NULL;
|
|||
|
GetScreen()->m_CurrentItem = NULL;
|
|||
|
GetScreen()->SetModify();
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
/******************************************************************************/
|
|||
|
static void Montre_Position_Mire(WinEDA_DrawPanel * panel, wxDC * DC, bool erase)
|
|||
|
/*********************************************************************************/
|
|||
|
/* redessin du contour de la piste lors des deplacements de la souris */
|
|||
|
{
|
|||
|
BASE_SCREEN * screen = panel->GetScreen();
|
|||
|
MIREPCB * MirePcb = (MIREPCB *) screen->m_CurrentItem;
|
|||
|
|
|||
|
if(MirePcb == NULL ) return ;
|
|||
|
|
|||
|
/* efface ancienne position */
|
|||
|
if ( erase ) MirePcb->Draw(panel, DC, wxPoint(0,0),GR_XOR);
|
|||
|
|
|||
|
MirePcb->m_Pos = screen->m_Curseur;
|
|||
|
|
|||
|
// Reaffichage
|
|||
|
MirePcb->Draw(panel, DC, wxPoint(0,0),GR_XOR);
|
|||
|
}
|
|||
|
|