kicad/gerbview/options.cpp

440 lines
15 KiB
C++

/********************************************/
/* GERBVIEW - Gestion des Options et Reglages */
/********************************************/
/* File options.cpp */
/*
* Set the display options for Gerbview
*/
#include "fctsys.h"
#include "common.h"
#include "class_drawpanel.h"
#include "confirm.h"
#include "pcbplot.h"
#include "gerbview.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 = m_OptionsToolBar->GetToolState( id );
DrawPanel->Refresh( TRUE );
break;
case ID_TB_OPTIONS_SELECT_UNIT_MM:
g_UnitMetric = MILLIMETRE;
UpdateStatusBar();
break;
case ID_TB_OPTIONS_SELECT_UNIT_INCH:
g_UnitMetric = INCHES;
UpdateStatusBar();
break;
case ID_TB_OPTIONS_SHOW_POLAR_COORD:
Affiche_Message( wxEmptyString );
DisplayOpt.DisplayPolarCood = m_OptionsToolBar->GetToolState( id );
UpdateStatusBar();
break;
case ID_TB_OPTIONS_SELECT_CURSOR:
m_CursorShape = m_OptionsToolBar->GetToolState( id );
DrawPanel->Refresh( TRUE );
break;
case ID_TB_OPTIONS_SHOW_PADS_SKETCH:
if( m_OptionsToolBar->GetToolState( id ) )
{
DisplayOpt.DisplayPadFill = m_DisplayPadFill = false;
}
else
{
DisplayOpt.DisplayPadFill = m_DisplayPadFill = true;
}
DrawPanel->Refresh( TRUE );
break;
case ID_TB_OPTIONS_SHOW_VIAS_SKETCH:
if( m_OptionsToolBar->GetToolState( id ) )
{
DisplayOpt.DisplayViaFill = m_DisplayViaFill = false;
}
else
{
DisplayOpt.DisplayViaFill = m_DisplayViaFill = 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;
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" ) );
RightBoxSizer->Add( Button, 0, wxGROW | wxALL, 5 );
Button = new wxButton( this, wxID_CANCEL, _( "Cancel" ) );
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( parent->m_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;
m_Parent->m_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_OptDisplayVias; //@@@@TODO: Does it belong here?
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;
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" ) );
RightBoxSizer->Add( Button, 0, wxGROW | wxALL, 5 );
Button = new wxButton( this, wxID_CANCEL, _( "Cancel" ) );
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 );
m_OptDisplayVias = new wxRadioBox( this, -1, _( "Spots:" ),
wxDefaultPosition, wxDefaultSize,
2, list_opt2, 1 );
if( DisplayOpt.DisplayViaFill )
m_OptDisplayVias->SetSelection( 1 );
LeftBoxSizer->Add( m_OptDisplayVias, 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_OptDisplayVias->GetSelection() == 1 )
DisplayOpt.DisplayViaFill = true;
else
DisplayOpt.DisplayViaFill = 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_DisplayViaFill = DisplayOpt.DisplayViaFill;
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_DISPLAY_OPTIONS_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;
}
}