kicad/eeschema/options.cpp

286 lines
7.4 KiB
C++

/*************************/
/* eeschema: options.cpp */
/*************************/
/*
Gestion de la fenetre des options generales:
Grille
Unites d'affichage
options complementaires (increments X, Y et label pour la fct de repetition
*/
#include "fctsys.h"
#include "gr_basic.h"
#include "common.h"
#include "program.h"
#include "libcmp.h"
#include "general.h"
#include "id.h"
#include "wx/spinctrl.h"
#include "protos.h"
/* Variables locales */
/* Fonctions locales: */
enum options_id {
ID_OPTION_ACCEPT = 3900,
ID_OPTION_CANCEL,
ID_GRID_SIZE,
ID_SHOW_GRID,
ID_GRID_NORMAL,
ID_GRID_SMALL,
ID_GRID_VERY_SMALL,
ID_SEL_SHOW_PINS,
ID_SEL_HV_WIRE,
ID_SEL_SHOW_PAGE_LIMITS,
ID_SEL_METRIC
};
/*************************************************************/
/* classe derivee pour la frame de Configuration des options*/
/*************************************************************/
class WinEDA_SetOptionsFrame: public wxDialog
{
private:
WinEDA_DrawFrame * m_Parent;
wxCheckBox * m_ShowGridButt;
wxCheckBox * m_AutoPANOpt;
wxRadioBox * m_SelGridSize;
wxRadioBox * m_SelShowPins;
wxRadioBox * m_Selunits;
wxRadioBox * m_SelDirWires;
wxRadioBox * m_Show_Page_Limits;
WinEDA_SizeCtrl * m_DeltaStepCtrl;
wxSpinCtrl * m_DeltaLabelCtrl;
public:
// Constructor and destructor
WinEDA_SetOptionsFrame(WinEDA_DrawFrame *parent, const wxPoint& framepos);
~WinEDA_SetOptionsFrame() {};
private:
void Accept(wxCommandEvent& event);
void OnCancel(wxCommandEvent& event);
DECLARE_EVENT_TABLE()
};
/* Table des evenements pour WinEDA_SetOptionsFrame */
BEGIN_EVENT_TABLE(WinEDA_SetOptionsFrame, wxDialog)
EVT_BUTTON(ID_OPTION_ACCEPT, WinEDA_SetOptionsFrame::Accept)
EVT_BUTTON(ID_OPTION_CANCEL, WinEDA_SetOptionsFrame::OnCancel)
END_EVENT_TABLE()
/**************************************************************************/
void DisplayOptionFrame(WinEDA_DrawFrame * parent, const wxPoint & framepos)
/**************************************************************************/
{
WinEDA_SetOptionsFrame * frame =
new WinEDA_SetOptionsFrame(parent, framepos);
frame->ShowModal(); frame->Destroy();
}
/***********************************************************************/
WinEDA_SetOptionsFrame::WinEDA_SetOptionsFrame(WinEDA_DrawFrame *parent,
const wxPoint& framepos):
wxDialog(parent, -1, _("EESchema Preferences"), framepos,
wxSize(450, 340), DIALOG_STYLE)
/***********************************************************************/
{
#define START_Y 10
wxButton * Button;
wxPoint pos;
wxSize size;
int w, h;
m_Parent = parent;
SetFont(*g_DialogFont);
pos.x = 330; pos.y = START_Y;
Button = new wxButton(this, ID_OPTION_ACCEPT, _("OK"), pos);
Button->SetForegroundColour(*wxRED);
pos.y += Button->GetDefaultSize().y + 5;
Button = new wxButton(this, ID_OPTION_CANCEL, _("Cancel"), pos);
Button->SetForegroundColour(*wxBLUE);
pos.x = 5; pos.y = START_Y;
m_ShowGridButt = new wxCheckBox( this, ID_SHOW_GRID, _("Show grid"),
pos);
m_ShowGridButt->SetValue(m_Parent->m_Draw_Grid);
pos.x += 150;
m_AutoPANOpt = new wxCheckBox( this, ID_SHOW_GRID, _("Auto PAN"),
pos);
m_AutoPANOpt->SetValue(m_Parent->DrawPanel-> m_AutoPAN_Enable);
m_AutoPANOpt->SetForegroundColour(*wxBLUE);
pos.x = 5; pos.y += 25;
wxString grid_choice[6] = { _("Normal (50 mils)"),
_("Small (25 mils)"),
_("Very small (10 mils)"),
_("Special (5 mils)"),
_("Special (2 mils)"),
_("Special (1 mil)"), };
m_SelGridSize = new wxRadioBox(this, ID_GRID_SIZE,
_("Grid Size"), pos,
wxDefaultSize, 6, grid_choice, 1, wxRA_SPECIFY_COLS);
if ( m_Parent->GetScreen() )
{
switch( m_Parent->GetScreen()->GetGrid().x )
{
case 50:
m_SelGridSize->SetSelection(0);
break;
case 25:
m_SelGridSize->SetSelection(1);
break;
case 10:
m_SelGridSize->SetSelection(2);
break;
case 5:
m_SelGridSize->SetSelection(3);
break;
case 2:
m_SelGridSize->SetSelection(4);
break;
case 1:
m_SelGridSize->SetSelection(5);
break;
default:
DisplayError(this, wxT("WinEDA_SetOptionsFrame: Grid value not handle"));
break;
}
}
/* Choix d' l'affichage des pins invisibles */
m_SelGridSize->GetSize(&w, &h);
pos.y += h + 20;
wxString pin_choice[2] = { _("Normal"), _("Show alls") };
m_SelShowPins = new wxRadioBox(this, ID_SEL_SHOW_PINS,
_("Show pins"), pos,
wxDefaultSize, 2, pin_choice, 1, wxRA_SPECIFY_COLS);
m_SelShowPins->SetSelection( g_ShowAllPins ? TRUE : FALSE);
/* Choix de l'affichage des unites */
pos.x = 15 + w; pos.y = START_Y + 25;
wxString unit_choice[2] = { _("millimeters"), _("inches") };
m_Selunits = new wxRadioBox(this, ID_SEL_METRIC,
_("Units"), pos,
wxDefaultSize, 2, unit_choice, 1, wxRA_SPECIFY_COLS);
m_Selunits->SetSelection( UnitMetric ? 0 : 1);
/* Choix de l'orientation des bus et wires */
m_Selunits->GetSize(&w, &h);
pos.y += h + 15;
wxString dir_choice[2] = { _("Horiz/Vertical"), _("Any") };
m_SelDirWires = new wxRadioBox(this, ID_SEL_HV_WIRE,
_("Wires - Bus orient"), pos,
wxDefaultSize, 2, dir_choice, 1, wxRA_SPECIFY_COLS);
m_SelDirWires->SetSelection( g_HVLines ? 0 : 1);
m_SelDirWires->GetSize(&w, &h);
pos.y += h + 15;
wxString show_page_limits_choice[2] = { _("Yes"), _("No") };
m_Show_Page_Limits = new wxRadioBox(this, ID_SEL_SHOW_PAGE_LIMITS,
_("Show page limits"), pos,
wxDefaultSize, 2, show_page_limits_choice, 1, wxRA_SPECIFY_COLS);
m_Show_Page_Limits->SetSelection( g_ShowPageLimits ? 0 : 1);
/* Choix des parametres pour la fonction de repetition */
size.x = 100; size.y = -1;
pos.y = 90; pos.x = 320;
m_DeltaStepCtrl = new WinEDA_SizeCtrl(this, _("Delta Step"),
g_RepeatStep,
UnitMetric, pos, m_Parent->m_InternalUnits);
pos.y += 10 + m_DeltaStepCtrl->GetDimension().y;
new wxStaticText(this, -1, _("Delta Label:"),
wxPoint(pos.x, pos.y ),
wxSize(-1,-1), 0 );
wxString val;
pos.y += 14;
val << g_RepeatDeltaLabel;
m_DeltaLabelCtrl = new wxSpinCtrl(this, -1, val, pos);
m_DeltaLabelCtrl->SetRange(-16, +16);
}
/**************************************************************************/
void WinEDA_SetOptionsFrame::OnCancel(wxCommandEvent& event)
/**************************************************************************/
{
Close(TRUE);
}
/**************************************************************************/
void WinEDA_SetOptionsFrame::Accept(wxCommandEvent& event)
/**************************************************************************/
{
wxSize grid;
bool setgrid = TRUE;
g_RepeatStep = m_DeltaStepCtrl->GetCoord();
g_RepeatDeltaLabel = m_DeltaLabelCtrl->GetValue();
if ( m_Show_Page_Limits->GetSelection() == 0 ) g_ShowPageLimits = TRUE;
else g_ShowPageLimits = FALSE;
if ( m_SelDirWires->GetSelection() == 0 ) g_HVLines = 1;
else g_HVLines = 0;
if ( m_Selunits->GetSelection() == 0 ) UnitMetric = 1;
else UnitMetric = 0;
if ( m_SelShowPins->GetSelection() == 0 ) g_ShowAllPins = FALSE;
else g_ShowAllPins = TRUE;
g_ShowGrid = m_Parent->m_Draw_Grid = m_ShowGridButt->GetValue();
m_Parent->DrawPanel->m_AutoPAN_Enable = m_AutoPANOpt->GetValue();
switch( m_SelGridSize->GetSelection() )
{
default:
setgrid = FALSE;
break;
case 0:
grid = wxSize(50,50);
break;
case 1:
grid = wxSize(25,25);
break;
case 2:
grid = wxSize(10,10);
break;
}
if ( m_Parent->m_CurrentScreen )
{
if ( setgrid ) m_Parent->m_CurrentScreen->SetGrid(grid);
m_Parent->m_CurrentScreen->SetRefreshReq();
}
Close(TRUE);
}