kicad/gerbview/options.cpp

408 lines
12 KiB
C++

/********************************************/
/* GERBVIEW - Gestion des Options et Reglages */
/********************************************/
/* File options.cpp */
/*
* Set the display options for Gerbview
*/
#include "fctsys.h"
#include "common.h"
#include "gerbview.h"
#include "pcbplot.h"
#include "id.h"
#include "protos.h"
#include <wx/spinctrl.h>
/*****************************************************************/
void WinEDA_GerberFrame::OnSelectOptionToolbar(wxCommandEvent& event)
/*****************************************************************/
/** Function OnSelectOptionToolbar
* called to validate current choices
*/
{
int id = event.GetId();
switch ( id )
{
case ID_TB_OPTIONS_SHOW_GRID:
m_Draw_Grid = g_ShowGrid = m_OptionsToolBar->GetToolState(id);
DrawPanel->Refresh(TRUE);
break;
case ID_TB_OPTIONS_SELECT_UNIT_MM:
g_UnitMetric = MILLIMETRE;
Affiche_Status_Box();
break;
case ID_TB_OPTIONS_SELECT_UNIT_INCH:
g_UnitMetric = INCHES;
Affiche_Status_Box();
break;
case ID_TB_OPTIONS_SHOW_POLAR_COORD:
Affiche_Message(wxEmptyString);
DisplayOpt.DisplayPolarCood = m_OptionsToolBar->GetToolState(id);
Affiche_Status_Box();
break;
case ID_TB_OPTIONS_SELECT_CURSOR:
g_CursorShape = m_OptionsToolBar->GetToolState(id);
DrawPanel->Refresh(TRUE);
break;
case ID_TB_OPTIONS_SHOW_PADS_SKETCH:
if ( m_OptionsToolBar->GetToolState(id) )
{
m_DisplayPadFill = FALSE;
DisplayOpt.DisplayPadFill = FALSE;
}
else
{
m_DisplayPadFill = TRUE;
DisplayOpt.DisplayPadFill = TRUE;
}
DrawPanel->Refresh(TRUE);
break;
case ID_TB_OPTIONS_SHOW_TRACKS_SKETCH:
if( m_OptionsToolBar->GetToolState(id) )
{
m_DisplayPcbTrackFill = FALSE;
DisplayOpt.DisplayPcbTrackFill = FALSE;
}
else
{
m_DisplayPcbTrackFill = TRUE;
DisplayOpt.DisplayPcbTrackFill = TRUE;
}
DrawPanel->Refresh(TRUE);
break;
case ID_TB_OPTIONS_SHOW_POLYGONS_SKETCH:
if ( m_OptionsToolBar->GetToolState(id) ) // Polygons filled asked
g_DisplayPolygonsModeSketch = 1;
else g_DisplayPolygonsModeSketch = 0;
DrawPanel->Refresh(TRUE);
break;
case ID_TB_OPTIONS_SHOW_DCODES:
DisplayOpt.DisplayPadNum = m_OptionsToolBar->GetToolState(id);
DrawPanel->Refresh(TRUE);
break;
default:
DisplayError(this, wxT("WinEDA_PcbFrame::OnSelectOptionToolbar error"));
break;
}
SetToolbars();
}
/******************************************************/
class WinEDA_GerberGeneralOptionsFrame: public wxDialog
/******************************************************/
{
private:
WinEDA_BasePcbFrame * m_Parent;
wxRadioBox * m_PolarDisplay;
wxRadioBox * m_BoxUnits;
wxRadioBox * m_CursorShape;
wxRadioBox * m_GerberDefaultScale;
// Constructor and destructor
public:
WinEDA_GerberGeneralOptionsFrame(WinEDA_BasePcbFrame *parent,const wxPoint& pos);
~WinEDA_GerberGeneralOptionsFrame() {};
private:
void OnOkClick(wxCommandEvent& event);
void OnCancelClick(wxCommandEvent & event);
DECLARE_EVENT_TABLE()
};
/* Events table for WinEDA_GerberGeneralOptionsFrame */
BEGIN_EVENT_TABLE(WinEDA_GerberGeneralOptionsFrame, wxDialog)
EVT_BUTTON(wxID_OK, WinEDA_GerberGeneralOptionsFrame::OnOkClick)
EVT_BUTTON(wxID_CANCEL, WinEDA_GerberGeneralOptionsFrame::OnCancelClick)
END_EVENT_TABLE()
/**********************************************************************************************/
WinEDA_GerberGeneralOptionsFrame::WinEDA_GerberGeneralOptionsFrame(WinEDA_BasePcbFrame *parent,
const wxPoint& framepos):
wxDialog(parent, -1, _("Gerbview Options"),
framepos, wxSize(300, 240),
wxDEFAULT_DIALOG_STYLE|wxFRAME_FLOAT_ON_PARENT )
/**********************************************************************************************/
/** WinEDA_GerberGeneralOptionsFrame Constructor
*/
{
m_Parent = parent;
SetFont(*g_DialogFont);
wxBoxSizer * MainBoxSizer = new wxBoxSizer(wxHORIZONTAL);
SetSizer(MainBoxSizer);
wxBoxSizer * RightBoxSizer = new wxBoxSizer(wxVERTICAL);
wxBoxSizer * MiddleBoxSizer = new wxBoxSizer(wxVERTICAL);
wxBoxSizer * LeftBoxSizer = new wxBoxSizer(wxVERTICAL);
MainBoxSizer->Add(LeftBoxSizer, 0, wxGROW|wxALL, 5);
MainBoxSizer->Add(MiddleBoxSizer, 0, wxGROW|wxALL, 5);
MainBoxSizer->Add(RightBoxSizer, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5);
wxButton * Button = new wxButton(this, wxID_OK, _("OK"));
Button->SetForegroundColour(*wxRED);
RightBoxSizer->Add(Button, 0, wxGROW|wxALL, 5);
Button = new wxButton(this, wxID_CANCEL, _("Cancel"));
Button->SetForegroundColour(*wxBLUE);
RightBoxSizer->Add(Button, 0, wxGROW|wxALL, 5);
/* Display / not display polar coordinates: */
wxString list_coord[2] =
{ _("No Display"),
_("Display") };
m_PolarDisplay = new wxRadioBox(this, -1, _("Display Polar Coord"),
wxDefaultPosition, wxDefaultSize,
2, list_coord, 1);
m_PolarDisplay->SetSelection(DisplayOpt.DisplayPolarCood ? 1 : 0);
LeftBoxSizer->Add(m_PolarDisplay, 0, wxGROW|wxALL, 5);
/* Selection of units */
wxString list_units[2] = {
_("Inches"),
_("millimeters") };
m_BoxUnits = new wxRadioBox(this, -1, _("Units"), wxDefaultPosition, wxDefaultSize,
2, list_units, 1);
m_BoxUnits->SetSelection( g_UnitMetric ? 1 : 0);
LeftBoxSizer->Add(m_BoxUnits, 0, wxGROW|wxALL, 5);
/* Selection of cursor shape */
wxString list_cursors[2] = { _("Small"), _("Big") };
m_CursorShape = new wxRadioBox(this, -1, _("Cursor"), wxDefaultPosition, wxDefaultSize,
2, list_cursors, 1);
m_CursorShape->SetSelection( g_CursorShape ? 1 : 0);
MiddleBoxSizer->Add(m_CursorShape, 0, wxGROW|wxALL, 5);
/* Selection Default Scale (i.e. format 2.3 ou 3.4) */
wxString list_scales[2] = { _("format: 2.3"), _("format 3.4") };
m_GerberDefaultScale = new wxRadioBox(this, -1, _("Default format"),
wxDefaultPosition, wxDefaultSize,
2, list_scales, 1);
m_GerberDefaultScale->SetSelection( (g_Default_GERBER_Format == 23) ? 0 : 1);
MiddleBoxSizer->Add(m_GerberDefaultScale, 0, wxGROW|wxALL, 5);
GetSizer()->Fit(this);
GetSizer()->SetSizeHints(this);
}
/************************************************************************/
void WinEDA_GerberGeneralOptionsFrame::OnCancelClick(wxCommandEvent& WXUNUSED(event))
/************************************************************************/
{
EndModal( -1 );
}
/*****************************************************************************/
void WinEDA_GerberGeneralOptionsFrame::OnOkClick(wxCommandEvent& event)
/*****************************************************************************/
{
DisplayOpt.DisplayPolarCood =
(m_PolarDisplay->GetSelection() == 0) ? FALSE : TRUE;
g_UnitMetric = (m_BoxUnits->GetSelection() == 0) ? 0 : 1;
g_CursorShape = m_CursorShape->GetSelection();
g_Default_GERBER_Format =
(m_GerberDefaultScale->GetSelection() == 0) ? 23 : 34;
EndModal( 1 );
}
/*******************************************/
/* Dialog frame to select deisplay options */
/*******************************************/
class WinEDA_LookFrame: public wxDialog
{
private:
WinEDA_BasePcbFrame * m_Parent;
wxRadioBox * m_OptDisplayLines;
wxRadioBox * m_OptDisplayFlashes;
wxRadioBox * m_OptDisplayPolygons;
wxCheckBox * m_OptDisplayDCodes;
wxRadioBox * m_OptDisplayDrawings;
public:
// Constructor and destructor
WinEDA_LookFrame(WinEDA_BasePcbFrame *parent,const wxPoint& pos);
~WinEDA_LookFrame() {};
private:
void OnOkClick(wxCommandEvent& event);
void OnCancelClick(wxCommandEvent & event);
DECLARE_EVENT_TABLE()
};
/* Construction de la table des evenements pour WinEDA_LookFrame */
BEGIN_EVENT_TABLE(WinEDA_LookFrame, wxDialog)
EVT_BUTTON(wxID_OK, WinEDA_LookFrame::OnOkClick)
EVT_BUTTON(wxID_CANCEL, WinEDA_LookFrame::OnCancelClick)
END_EVENT_TABLE()
/*******************************************************************************/
WinEDA_LookFrame::WinEDA_LookFrame(WinEDA_BasePcbFrame *parent,
const wxPoint& framepos):
wxDialog(parent, -1, _("Gerbview Draw Options"), framepos, wxSize(350, 200),
wxDEFAULT_DIALOG_STYLE|wxFRAME_FLOAT_ON_PARENT )
/*******************************************************************************/
{
m_Parent = parent;
SetFont(*g_DialogFont);
wxBoxSizer * MainBoxSizer = new wxBoxSizer(wxHORIZONTAL);
SetSizer(MainBoxSizer);
wxBoxSizer * RightBoxSizer = new wxBoxSizer(wxVERTICAL);
wxBoxSizer * MiddleBoxSizer = new wxBoxSizer(wxVERTICAL);
wxBoxSizer * LeftBoxSizer = new wxBoxSizer(wxVERTICAL);
MainBoxSizer->Add(LeftBoxSizer, 0, wxGROW|wxALL, 5);
MainBoxSizer->Add(MiddleBoxSizer, 0, wxGROW|wxALL, 5);
MainBoxSizer->Add(RightBoxSizer, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5);
wxButton * Button = new wxButton(this, wxID_OK, _("OK"));
Button->SetForegroundColour(*wxRED);
RightBoxSizer->Add(Button, 0, wxGROW|wxALL, 5);
Button = new wxButton(this, wxID_CANCEL, _("Cancel"));
Button->SetForegroundColour(*wxBLUE);
RightBoxSizer->Add(Button, 0, wxGROW|wxALL, 5);
// Show Option Draw Tracks
wxString list_opt2[2] = { _("Sketch"), _("Filled") };
m_OptDisplayLines = new wxRadioBox(this, -1, _("Lines:"),
wxDefaultPosition, wxDefaultSize,
2, list_opt2, 1);
if ( DisplayOpt.DisplayPcbTrackFill )
m_OptDisplayLines->SetSelection(1);
LeftBoxSizer->Add(m_OptDisplayLines, 0, wxGROW|wxALL, 5);
m_OptDisplayFlashes = new wxRadioBox(this, -1, _("Spots:"),
wxDefaultPosition, wxDefaultSize,
2, list_opt2, 1);
if ( DisplayOpt.DisplayPadFill )
m_OptDisplayFlashes->SetSelection(1);
LeftBoxSizer->Add(m_OptDisplayFlashes, 0, wxGROW|wxALL, 5);
// Show Option Draw polygons
m_OptDisplayPolygons = new wxRadioBox(this, -1, _("Polygons:"),
wxDefaultPosition, wxDefaultSize,
2, list_opt2, 1);
if ( g_DisplayPolygonsModeSketch == 0)
m_OptDisplayPolygons->SetSelection(1);
LeftBoxSizer->Add(m_OptDisplayPolygons, 0, wxGROW|wxALL, 5);
wxString list_opt3[3] = { _("Sketch"), _("Filled"), _("Line") };
m_OptDisplayDrawings = new wxRadioBox(this, -1, _("Display other items:"),
wxDefaultPosition, wxDefaultSize,
3, list_opt3, 1);
m_OptDisplayDrawings->SetSelection(DisplayOpt.DisplayDrawItems);
MiddleBoxSizer->Add(m_OptDisplayDrawings, 0, wxGROW|wxALL, 5);
m_OptDisplayDCodes = new wxCheckBox(this, -1, _("Show D codes"));
if ( DisplayOpt.DisplayPadNum )
m_OptDisplayDCodes->SetValue(TRUE);
MiddleBoxSizer->Add(m_OptDisplayDCodes, 0, wxGROW|wxALL, 5);
GetSizer()->Fit(this);
GetSizer()->SetSizeHints(this);
}
/**************************************************************/
void WinEDA_LookFrame::OnCancelClick(wxCommandEvent& WXUNUSED(event))
/**************************************************************/
{
EndModal( -1 );
}
/*************************************************************/
void WinEDA_LookFrame::OnOkClick(wxCommandEvent& event)
/*************************************************************/
/* Met a jour les options
*/
{
if ( m_OptDisplayLines->GetSelection() == 1 )
DisplayOpt.DisplayPcbTrackFill = TRUE;
else
DisplayOpt.DisplayPcbTrackFill = FALSE;
if ( m_OptDisplayFlashes->GetSelection() == 1 )
DisplayOpt.DisplayPadFill = TRUE;
else
DisplayOpt.DisplayPadFill = FALSE;
if ( m_OptDisplayPolygons->GetSelection() == 0 )
g_DisplayPolygonsModeSketch = 1;
else
g_DisplayPolygonsModeSketch = 0;
DisplayOpt.DisplayPadNum = m_OptDisplayDCodes->GetValue();
DisplayOpt.DisplayDrawItems = m_OptDisplayDrawings->GetSelection();
m_Parent->m_DisplayPadFill = DisplayOpt.DisplayPadFill;
m_Parent->m_DisplayPcbTrackFill = DisplayOpt.DisplayPcbTrackFill;
m_Parent->GetScreen()->SetRefreshReq();
EndModal( 1 );
}
/***************************************************************************/
void WinEDA_GerberFrame::InstallPcbOptionsFrame(const wxPoint & pos, int id)
/***************************************************************************/
{
switch ( id )
{
case ID_PCB_LOOK_SETUP:
{
WinEDA_LookFrame * OptionsFrame =
new WinEDA_LookFrame(this, pos);
OptionsFrame->ShowModal();
OptionsFrame->Destroy();
}
break;
case ID_OPTIONS_SETUP:
{
WinEDA_GerberGeneralOptionsFrame * OptionsFrame =
new WinEDA_GerberGeneralOptionsFrame(this, pos);
OptionsFrame->ShowModal();
OptionsFrame->Destroy();
}
break;
}
}