Browse Source
Cleaning code for PCB_LAYER_BOX_SELECTOR class, and use it in edit dimension dialog.
pull/1/head
Cleaning code for PCB_LAYER_BOX_SELECTOR class, and use it in edit dimension dialog.
pull/1/head
17 changed files with 855 additions and 384 deletions
-
87common/class_layer_box_selector.cpp
-
6gerbview/class_gbr_layer_box_selector.cpp
-
17gerbview/class_gbr_layer_box_selector.h
-
58include/class_layer_box_selector.h
-
9pagelayout_editor/files.cpp
-
1pcbnew/CMakeLists.txt
-
20pcbnew/class_pcb_layer_box_selector.cpp
-
45pcbnew/class_pcb_layer_box_selector.h
-
12pcbnew/dialogs/dialog_dimension_editor_base.cpp
-
2pcbnew/dialogs/dialog_dimension_editor_base.fbp
-
7pcbnew/dialogs/dialog_dimension_editor_base.h
-
225pcbnew/dialogs/dialog_layer_selection_base.cpp
-
87pcbnew/dialogs/dialog_layer_selection_base.h
-
15pcbnew/dimension.cpp
-
8pcbnew/edit.cpp
-
636pcbnew/sel_layer.cpp
-
4pcbnew/tool_pcb.cpp
@ -0,0 +1,225 @@ |
|||
///////////////////////////////////////////////////////////////////////////
|
|||
// C++ code generated with wxFormBuilder (version Oct 8 2012)
|
|||
// http://www.wxformbuilder.org/
|
|||
//
|
|||
// PLEASE DO "NOT" EDIT THIS FILE!
|
|||
///////////////////////////////////////////////////////////////////////////
|
|||
|
|||
#include "dialog_layer_selection_base.h"
|
|||
|
|||
///////////////////////////////////////////////////////////////////////////
|
|||
|
|||
DIALOG_LAYER_SELECTION_BASE::DIALOG_LAYER_SELECTION_BASE( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style ) : wxDialog( parent, id, title, pos, size, style ) |
|||
{ |
|||
this->SetSizeHints( wxDefaultSize, wxDefaultSize ); |
|||
|
|||
wxBoxSizer* bSizerMain; |
|||
bSizerMain = new wxBoxSizer( wxVERTICAL ); |
|||
|
|||
wxBoxSizer* bSizerUpper; |
|||
bSizerUpper = new wxBoxSizer( wxHORIZONTAL ); |
|||
|
|||
m_leftGridLayers = new wxGrid( this, ID_LEFT_LIST, wxDefaultPosition, wxDefaultSize, 0 ); |
|||
|
|||
// Grid
|
|||
m_leftGridLayers->CreateGrid( 1, 4 ); |
|||
m_leftGridLayers->EnableEditing( false ); |
|||
m_leftGridLayers->EnableGridLines( true ); |
|||
m_leftGridLayers->EnableDragGridSize( false ); |
|||
m_leftGridLayers->SetMargins( 0, 3 ); |
|||
|
|||
// Columns
|
|||
m_leftGridLayers->EnableDragColMove( false ); |
|||
m_leftGridLayers->EnableDragColSize( false ); |
|||
m_leftGridLayers->SetColLabelSize( 0 ); |
|||
m_leftGridLayers->SetColLabelAlignment( wxALIGN_CENTRE, wxALIGN_CENTRE ); |
|||
|
|||
// Rows
|
|||
m_leftGridLayers->EnableDragRowSize( false ); |
|||
m_leftGridLayers->SetRowLabelSize( 0 ); |
|||
m_leftGridLayers->SetRowLabelAlignment( wxALIGN_CENTRE, wxALIGN_CENTRE ); |
|||
|
|||
// Label Appearance
|
|||
m_leftGridLayers->SetLabelBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); |
|||
|
|||
// Cell Defaults
|
|||
m_leftGridLayers->SetDefaultCellBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_MENU ) ); |
|||
m_leftGridLayers->SetDefaultCellAlignment( wxALIGN_LEFT, wxALIGN_TOP ); |
|||
bSizerUpper->Add( m_leftGridLayers, 0, wxALL|wxEXPAND, 5 ); |
|||
|
|||
m_rightGridLayers = new wxGrid( this, ID_RIGHT_LIST, wxDefaultPosition, wxDefaultSize, 0 ); |
|||
|
|||
// Grid
|
|||
m_rightGridLayers->CreateGrid( 1, 4 ); |
|||
m_rightGridLayers->EnableEditing( false ); |
|||
m_rightGridLayers->EnableGridLines( true ); |
|||
m_rightGridLayers->EnableDragGridSize( false ); |
|||
m_rightGridLayers->SetMargins( 0, 3 ); |
|||
|
|||
// Columns
|
|||
m_rightGridLayers->EnableDragColMove( false ); |
|||
m_rightGridLayers->EnableDragColSize( false ); |
|||
m_rightGridLayers->SetColLabelSize( 0 ); |
|||
m_rightGridLayers->SetColLabelAlignment( wxALIGN_CENTRE, wxALIGN_CENTRE ); |
|||
|
|||
// Rows
|
|||
m_rightGridLayers->EnableDragRowSize( false ); |
|||
m_rightGridLayers->SetRowLabelSize( 0 ); |
|||
m_rightGridLayers->SetRowLabelAlignment( wxALIGN_CENTRE, wxALIGN_CENTRE ); |
|||
|
|||
// Label Appearance
|
|||
|
|||
// Cell Defaults
|
|||
m_rightGridLayers->SetDefaultCellBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_MENU ) ); |
|||
m_rightGridLayers->SetDefaultCellAlignment( wxALIGN_LEFT, wxALIGN_TOP ); |
|||
bSizerUpper->Add( m_rightGridLayers, 0, wxALL|wxEXPAND, 5 ); |
|||
|
|||
|
|||
bSizerMain->Add( bSizerUpper, 1, wxEXPAND, 5 ); |
|||
|
|||
m_buttonClear = new wxButton( this, wxID_ANY, _("Clear Selection"), wxDefaultPosition, wxDefaultSize, 0 ); |
|||
bSizerMain->Add( m_buttonClear, 0, wxALL|wxALIGN_RIGHT, 5 ); |
|||
|
|||
|
|||
this->SetSizer( bSizerMain ); |
|||
this->Layout(); |
|||
|
|||
this->Centre( wxBOTH ); |
|||
|
|||
// Connect Events
|
|||
m_leftGridLayers->Connect( wxEVT_GRID_CELL_LEFT_CLICK, wxGridEventHandler( DIALOG_LAYER_SELECTION_BASE::OnLeftGridClick ), NULL, this ); |
|||
m_rightGridLayers->Connect( wxEVT_GRID_CELL_LEFT_CLICK, wxGridEventHandler( DIALOG_LAYER_SELECTION_BASE::OnRightGridClick ), NULL, this ); |
|||
m_buttonClear->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_LAYER_SELECTION_BASE::OnClearSelection ), NULL, this ); |
|||
} |
|||
|
|||
DIALOG_LAYER_SELECTION_BASE::~DIALOG_LAYER_SELECTION_BASE() |
|||
{ |
|||
// Disconnect Events
|
|||
m_leftGridLayers->Disconnect( wxEVT_GRID_CELL_LEFT_CLICK, wxGridEventHandler( DIALOG_LAYER_SELECTION_BASE::OnLeftGridClick ), NULL, this ); |
|||
m_rightGridLayers->Disconnect( wxEVT_GRID_CELL_LEFT_CLICK, wxGridEventHandler( DIALOG_LAYER_SELECTION_BASE::OnRightGridClick ), NULL, this ); |
|||
m_buttonClear->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_LAYER_SELECTION_BASE::OnClearSelection ), NULL, this ); |
|||
|
|||
} |
|||
|
|||
DIALOG_COPPER_LAYER_PAIR_SELECTION_BASE::DIALOG_COPPER_LAYER_PAIR_SELECTION_BASE( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style ) : wxDialog( parent, id, title, pos, size, style ) |
|||
{ |
|||
this->SetSizeHints( wxDefaultSize, wxDefaultSize ); |
|||
|
|||
wxBoxSizer* bSizerMain; |
|||
bSizerMain = new wxBoxSizer( wxVERTICAL ); |
|||
|
|||
wxBoxSizer* bSizerUpper; |
|||
bSizerUpper = new wxBoxSizer( wxHORIZONTAL ); |
|||
|
|||
wxBoxSizer* bSizerLeft; |
|||
bSizerLeft = new wxBoxSizer( wxVERTICAL ); |
|||
|
|||
m_staticTextTopLayer = new wxStaticText( this, wxID_ANY, _("Top/Front Layer"), wxDefaultPosition, wxDefaultSize, 0 ); |
|||
m_staticTextTopLayer->Wrap( -1 ); |
|||
bSizerLeft->Add( m_staticTextTopLayer, 0, wxTOP|wxRIGHT|wxLEFT, 5 ); |
|||
|
|||
m_leftGridLayers = new wxGrid( this, ID_LEFT_LIST, wxDefaultPosition, wxDefaultSize, 0 ); |
|||
|
|||
// Grid
|
|||
m_leftGridLayers->CreateGrid( 1, 4 ); |
|||
m_leftGridLayers->EnableEditing( false ); |
|||
m_leftGridLayers->EnableGridLines( true ); |
|||
m_leftGridLayers->EnableDragGridSize( false ); |
|||
m_leftGridLayers->SetMargins( 0, 3 ); |
|||
|
|||
// Columns
|
|||
m_leftGridLayers->EnableDragColMove( false ); |
|||
m_leftGridLayers->EnableDragColSize( false ); |
|||
m_leftGridLayers->SetColLabelSize( 0 ); |
|||
m_leftGridLayers->SetColLabelAlignment( wxALIGN_CENTRE, wxALIGN_CENTRE ); |
|||
|
|||
// Rows
|
|||
m_leftGridLayers->EnableDragRowSize( false ); |
|||
m_leftGridLayers->SetRowLabelSize( 0 ); |
|||
m_leftGridLayers->SetRowLabelAlignment( wxALIGN_CENTRE, wxALIGN_CENTRE ); |
|||
|
|||
// Label Appearance
|
|||
m_leftGridLayers->SetLabelBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); |
|||
|
|||
// Cell Defaults
|
|||
m_leftGridLayers->SetDefaultCellBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_MENU ) ); |
|||
m_leftGridLayers->SetDefaultCellAlignment( wxALIGN_LEFT, wxALIGN_TOP ); |
|||
bSizerLeft->Add( m_leftGridLayers, 1, wxALL|wxEXPAND, 5 ); |
|||
|
|||
|
|||
bSizerUpper->Add( bSizerLeft, 1, wxEXPAND, 5 ); |
|||
|
|||
wxBoxSizer* bSizerRight; |
|||
bSizerRight = new wxBoxSizer( wxVERTICAL ); |
|||
|
|||
m_staticTextBottomLayer = new wxStaticText( this, wxID_ANY, _("Bottom/Back Layer"), wxDefaultPosition, wxDefaultSize, 0 ); |
|||
m_staticTextBottomLayer->Wrap( -1 ); |
|||
bSizerRight->Add( m_staticTextBottomLayer, 0, wxTOP|wxRIGHT|wxLEFT, 5 ); |
|||
|
|||
m_rightGridLayers = new wxGrid( this, ID_RIGHT_LIST, wxDefaultPosition, wxDefaultSize, 0 ); |
|||
|
|||
// Grid
|
|||
m_rightGridLayers->CreateGrid( 1, 4 ); |
|||
m_rightGridLayers->EnableEditing( false ); |
|||
m_rightGridLayers->EnableGridLines( true ); |
|||
m_rightGridLayers->EnableDragGridSize( false ); |
|||
m_rightGridLayers->SetMargins( 0, 3 ); |
|||
|
|||
// Columns
|
|||
m_rightGridLayers->EnableDragColMove( false ); |
|||
m_rightGridLayers->EnableDragColSize( false ); |
|||
m_rightGridLayers->SetColLabelSize( 0 ); |
|||
m_rightGridLayers->SetColLabelAlignment( wxALIGN_CENTRE, wxALIGN_CENTRE ); |
|||
|
|||
// Rows
|
|||
m_rightGridLayers->EnableDragRowSize( false ); |
|||
m_rightGridLayers->SetRowLabelSize( 0 ); |
|||
m_rightGridLayers->SetRowLabelAlignment( wxALIGN_CENTRE, wxALIGN_CENTRE ); |
|||
|
|||
// Label Appearance
|
|||
|
|||
// Cell Defaults
|
|||
m_rightGridLayers->SetDefaultCellBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_MENU ) ); |
|||
m_rightGridLayers->SetDefaultCellAlignment( wxALIGN_LEFT, wxALIGN_TOP ); |
|||
bSizerRight->Add( m_rightGridLayers, 1, wxALL|wxEXPAND, 5 ); |
|||
|
|||
|
|||
bSizerUpper->Add( bSizerRight, 1, wxEXPAND, 5 ); |
|||
|
|||
|
|||
bSizerMain->Add( bSizerUpper, 1, wxEXPAND, 5 ); |
|||
|
|||
m_staticline1 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); |
|||
bSizerMain->Add( m_staticline1, 0, wxEXPAND | wxALL, 5 ); |
|||
|
|||
m_sdbSizer = new wxStdDialogButtonSizer(); |
|||
m_sdbSizerOK = new wxButton( this, wxID_OK ); |
|||
m_sdbSizer->AddButton( m_sdbSizerOK ); |
|||
m_sdbSizerCancel = new wxButton( this, wxID_CANCEL ); |
|||
m_sdbSizer->AddButton( m_sdbSizerCancel ); |
|||
m_sdbSizer->Realize(); |
|||
|
|||
bSizerMain->Add( m_sdbSizer, 0, wxEXPAND, 5 ); |
|||
|
|||
|
|||
this->SetSizer( bSizerMain ); |
|||
this->Layout(); |
|||
|
|||
this->Centre( wxBOTH ); |
|||
|
|||
// Connect Events
|
|||
m_leftGridLayers->Connect( wxEVT_GRID_CELL_LEFT_CLICK, wxGridEventHandler( DIALOG_COPPER_LAYER_PAIR_SELECTION_BASE::OnLeftGridClick ), NULL, this ); |
|||
m_rightGridLayers->Connect( wxEVT_GRID_CELL_LEFT_CLICK, wxGridEventHandler( DIALOG_COPPER_LAYER_PAIR_SELECTION_BASE::OnRightGridClick ), NULL, this ); |
|||
m_sdbSizerCancel->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_COPPER_LAYER_PAIR_SELECTION_BASE::OnCancelClick ), NULL, this ); |
|||
m_sdbSizerOK->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_COPPER_LAYER_PAIR_SELECTION_BASE::OnOKClick ), NULL, this ); |
|||
} |
|||
|
|||
DIALOG_COPPER_LAYER_PAIR_SELECTION_BASE::~DIALOG_COPPER_LAYER_PAIR_SELECTION_BASE() |
|||
{ |
|||
// Disconnect Events
|
|||
m_leftGridLayers->Disconnect( wxEVT_GRID_CELL_LEFT_CLICK, wxGridEventHandler( DIALOG_COPPER_LAYER_PAIR_SELECTION_BASE::OnLeftGridClick ), NULL, this ); |
|||
m_rightGridLayers->Disconnect( wxEVT_GRID_CELL_LEFT_CLICK, wxGridEventHandler( DIALOG_COPPER_LAYER_PAIR_SELECTION_BASE::OnRightGridClick ), NULL, this ); |
|||
m_sdbSizerCancel->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_COPPER_LAYER_PAIR_SELECTION_BASE::OnCancelClick ), NULL, this ); |
|||
m_sdbSizerOK->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_COPPER_LAYER_PAIR_SELECTION_BASE::OnOKClick ), NULL, this ); |
|||
|
|||
} |
@ -0,0 +1,87 @@ |
|||
/////////////////////////////////////////////////////////////////////////// |
|||
// C++ code generated with wxFormBuilder (version Oct 8 2012) |
|||
// http://www.wxformbuilder.org/ |
|||
// |
|||
// PLEASE DO "NOT" EDIT THIS FILE! |
|||
/////////////////////////////////////////////////////////////////////////// |
|||
|
|||
#ifndef __DIALOG_LAYER_SELECTION_BASE_H__ |
|||
#define __DIALOG_LAYER_SELECTION_BASE_H__ |
|||
|
|||
#include <wx/artprov.h> |
|||
#include <wx/xrc/xmlres.h> |
|||
#include <wx/intl.h> |
|||
#include <wx/colour.h> |
|||
#include <wx/settings.h> |
|||
#include <wx/string.h> |
|||
#include <wx/font.h> |
|||
#include <wx/grid.h> |
|||
#include <wx/gdicmn.h> |
|||
#include <wx/sizer.h> |
|||
#include <wx/button.h> |
|||
#include <wx/dialog.h> |
|||
#include <wx/stattext.h> |
|||
#include <wx/statline.h> |
|||
|
|||
/////////////////////////////////////////////////////////////////////////// |
|||
|
|||
#define ID_LEFT_LIST 1000 |
|||
#define ID_RIGHT_LIST 1001 |
|||
|
|||
/////////////////////////////////////////////////////////////////////////////// |
|||
/// Class DIALOG_LAYER_SELECTION_BASE |
|||
/////////////////////////////////////////////////////////////////////////////// |
|||
class DIALOG_LAYER_SELECTION_BASE : public wxDialog |
|||
{ |
|||
private: |
|||
|
|||
protected: |
|||
wxGrid* m_leftGridLayers; |
|||
wxGrid* m_rightGridLayers; |
|||
wxButton* m_buttonClear; |
|||
|
|||
// Virtual event handlers, overide them in your derived class |
|||
virtual void OnLeftGridClick( wxGridEvent& event ) { event.Skip(); } |
|||
virtual void OnRightGridClick( wxGridEvent& event ) { event.Skip(); } |
|||
virtual void OnClearSelection( wxCommandEvent& event ) { event.Skip(); } |
|||
|
|||
|
|||
public: |
|||
|
|||
DIALOG_LAYER_SELECTION_BASE( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Select Layer:"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 452,183 ), long style = wxCAPTION|wxCLOSE_BOX ); |
|||
~DIALOG_LAYER_SELECTION_BASE(); |
|||
|
|||
}; |
|||
|
|||
/////////////////////////////////////////////////////////////////////////////// |
|||
/// Class DIALOG_COPPER_LAYER_PAIR_SELECTION_BASE |
|||
/////////////////////////////////////////////////////////////////////////////// |
|||
class DIALOG_COPPER_LAYER_PAIR_SELECTION_BASE : public wxDialog |
|||
{ |
|||
private: |
|||
|
|||
protected: |
|||
wxStaticText* m_staticTextTopLayer; |
|||
wxGrid* m_leftGridLayers; |
|||
wxStaticText* m_staticTextBottomLayer; |
|||
wxGrid* m_rightGridLayers; |
|||
wxStaticLine* m_staticline1; |
|||
wxStdDialogButtonSizer* m_sdbSizer; |
|||
wxButton* m_sdbSizerOK; |
|||
wxButton* m_sdbSizerCancel; |
|||
|
|||
// Virtual event handlers, overide them in your derived class |
|||
virtual void OnLeftGridClick( wxGridEvent& event ) { event.Skip(); } |
|||
virtual void OnRightGridClick( wxGridEvent& event ) { event.Skip(); } |
|||
virtual void OnCancelClick( wxCommandEvent& event ) { event.Skip(); } |
|||
virtual void OnOKClick( wxCommandEvent& event ) { event.Skip(); } |
|||
|
|||
|
|||
public: |
|||
|
|||
DIALOG_COPPER_LAYER_PAIR_SELECTION_BASE( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Select Cpper Layer Pair:"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 332,175 ), long style = wxDEFAULT_DIALOG_STYLE ); |
|||
~DIALOG_COPPER_LAYER_PAIR_SELECTION_BASE(); |
|||
|
|||
}; |
|||
|
|||
#endif //__DIALOG_LAYER_SELECTION_BASE_H__ |
@ -1,348 +1,478 @@ |
|||
/**
|
|||
* @file sel_layer.cpp |
|||
* @brief Set up the basic primitives for Layer control. |
|||
* @brief dialogs for one layer selection and a layer pair selection. |
|||
*/ |
|||
/*
|
|||
* This program source code file is part of KiCad, a free EDA CAD application. |
|||
* |
|||
* Copyright (C) 2013 Jean-Pierre Charras, jp.charras at wanadoo.fr |
|||
* Copyright (C) 1992-2013 KiCad Developers, see AUTHORS.txt for contributors. |
|||
* |
|||
* This program is free software; you can redistribute it and/or |
|||
* modify it under the terms of the GNU General Public License |
|||
* as published by the Free Software Foundation; either version 2 |
|||
* of the License, or (at your option) any later version. |
|||
* |
|||
* This program is distributed in the hope that it will be useful, |
|||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
|||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|||
* GNU General Public License for more details. |
|||
* |
|||
* You should have received a copy of the GNU General Public License |
|||
* along with this program; if not, you may find one here: |
|||
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
|
|||
* or you may search the http://www.gnu.org website for the version 2 license,
|
|||
* or you may write to the Free Software Foundation, Inc., |
|||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA |
|||
*/ |
|||
|
|||
|
|||
#include <fctsys.h>
|
|||
#include <common.h>
|
|||
#include <class_drawpanel.h>
|
|||
#include <confirm.h>
|
|||
#include <wxBasePcbFrame.h>
|
|||
#include <pcbcommon.h>
|
|||
|
|||
#include <class_layer_box_selector.h>
|
|||
#include <class_board.h>
|
|||
#include <dialogs/dialog_layer_selection_base.h>
|
|||
|
|||
|
|||
enum layer_sel_id { |
|||
ID_LAYER_SELECT_TOP = 1800, |
|||
ID_LAYER_SELECT_BOTTOM, |
|||
ID_LAYER_SELECT |
|||
}; |
|||
|
|||
|
|||
class SELECT_LAYER_DIALOG : public wxDialog |
|||
/* classes to display a layer list using a wxGrid.
|
|||
*/ |
|||
class PCB_LAYER_SELECTOR: public LAYER_SELECTOR |
|||
{ |
|||
private: |
|||
PCB_BASE_FRAME* m_Parent; |
|||
wxRadioBox* m_LayerList; |
|||
LAYER_NUM m_LayerId[int(NB_PCB_LAYERS) + 1]; // One extra element for "(Deselect)" radiobutton
|
|||
BOARD * m_brd; |
|||
|
|||
public: |
|||
// Constructor and destructor
|
|||
SELECT_LAYER_DIALOG( PCB_BASE_FRAME* parent, LAYER_NUM default_layer, |
|||
LAYER_NUM min_layer, LAYER_NUM max_layer, bool null_layer ); |
|||
~SELECT_LAYER_DIALOG() { }; |
|||
|
|||
private: |
|||
void OnLayerSelected( wxCommandEvent& event ); |
|||
void OnCancelClick( wxCommandEvent& event ); |
|||
|
|||
DECLARE_EVENT_TABLE() |
|||
}; |
|||
|
|||
PCB_LAYER_SELECTOR( BOARD* aBrd ):LAYER_SELECTOR() |
|||
{ |
|||
m_brd = aBrd; |
|||
} |
|||
|
|||
BEGIN_EVENT_TABLE( SELECT_LAYER_DIALOG, wxDialog ) |
|||
EVT_BUTTON( wxID_OK, SELECT_LAYER_DIALOG::OnLayerSelected ) |
|||
EVT_BUTTON( wxID_CANCEL, SELECT_LAYER_DIALOG::OnCancelClick ) |
|||
EVT_RADIOBOX( ID_LAYER_SELECT, SELECT_LAYER_DIALOG::OnLayerSelected ) |
|||
END_EVENT_TABLE() |
|||
protected: |
|||
// Returns true if the layer id is enabled (i.e. is it should be displayed)
|
|||
bool IsLayerEnabled( LAYER_NUM aLayer ) const |
|||
{ |
|||
return m_brd->IsLayerEnabled( aLayer ); |
|||
} |
|||
|
|||
// Returns a color index from the layer id
|
|||
// Virtual function
|
|||
EDA_COLOR_T GetLayerColor( LAYER_NUM aLayer ) const |
|||
{ |
|||
return m_brd->GetLayerColor( aLayer ); |
|||
} |
|||
|
|||
/** Install the dialog box for layer selection
|
|||
* @param default_layer = Preselection (NB_PCB_LAYERS for "(Deselect)" layer) |
|||
* @param min_layer = min layer value (-1 if no min value) |
|||
* @param max_layer = max layer value (-1 if no max value) |
|||
* @param null_layer = display a "(Deselect)" radiobutton (when set to true) |
|||
* @return new layer value (NB_PCB_LAYERS when "(Deselect)" radiobutton selected), |
|||
* or -1 if canceled |
|||
* |
|||
* Providing the option to also display a "(Deselect)" radiobutton makes the |
|||
* "Swap Layers" command (and GerbView's "Export to Pcbnew" command) more "user |
|||
* friendly", by permitting any layer to be "deselected" immediately after its |
|||
* corresponding radiobutton has been clicked on. (It would otherwise be |
|||
* necessary to first cancel the "Select Layer:" dialog box (invoked after a |
|||
* different radiobutton is clicked on) prior to then clicking on the |
|||
* "Deselect" |
|||
* button provided within the "Swap Layers:" or "Layer selection:" dialog box). |
|||
*/ |
|||
LAYER_NUM PCB_BASE_FRAME::SelectLayer( LAYER_NUM default_layer, |
|||
LAYER_NUM min_layer, |
|||
LAYER_NUM max_layer, |
|||
bool null_layer ) |
|||
{ |
|||
SELECT_LAYER_DIALOG* frame = new SELECT_LAYER_DIALOG( this, |
|||
default_layer, |
|||
min_layer, |
|||
max_layer, |
|||
null_layer ); |
|||
|
|||
LAYER_NUM layer = frame->ShowModal(); |
|||
frame->Destroy(); |
|||
return layer; |
|||
} |
|||
// Returns the name of the layer id
|
|||
// Virtual function
|
|||
wxString GetLayerName( LAYER_NUM aLayer ) const |
|||
{ |
|||
return m_brd->GetLayerName( aLayer ); |
|||
} |
|||
|
|||
}; |
|||
|
|||
/*
|
|||
* The "OK" and "Cancel" buttons are positioned (in a horizontal line) |
|||
* beneath the "Layer" radiobox, unless that contains only one column of |
|||
* radiobuttons, in which case they are positioned (in a vertical line) |
|||
* to the right of that radiobox. |
|||
* This class display a pcb layers list in adialog, |
|||
* to select one layer from this list |
|||
*/ |
|||
SELECT_LAYER_DIALOG::SELECT_LAYER_DIALOG( PCB_BASE_FRAME* parent, |
|||
LAYER_NUM default_layer, LAYER_NUM min_layer, |
|||
LAYER_NUM max_layer, bool null_layer ) : |
|||
wxDialog( parent, -1, _( "Select Layer:" ), wxPoint( -1, -1 ), |
|||
wxSize( 470, 250 ), |
|||
DIALOG_STYLE ) |
|||
class PCB_ONE_LAYER_SELECTOR : public PCB_LAYER_SELECTOR, |
|||
public DIALOG_LAYER_SELECTION_BASE |
|||
{ |
|||
BOARD* board = parent->GetBoard(); |
|||
wxButton* Button; |
|||
LAYER_NUM ii; |
|||
wxString LayerList[NB_PCB_LAYERS + 1]; // One extra element for "(Deselect)"
|
|||
// radiobutton
|
|||
int LayerCount, LayerSelect = -1; |
|||
|
|||
m_Parent = parent; |
|||
LAYER_NUM m_layerSelected; |
|||
LAYER_NUM m_minLayer; |
|||
LAYER_NUM m_maxLayer; |
|||
|
|||
// Build the layer list
|
|||
LayerCount = 0; |
|||
LAYER_MSK Masque_Layer = g_TabAllCopperLayerMask[board->GetCopperLayerCount() - 1]; |
|||
Masque_Layer |= ALL_NO_CU_LAYERS; |
|||
|
|||
for( ii = FIRST_LAYER; ii < NB_PCB_LAYERS; ++ii ) |
|||
{ |
|||
m_LayerId[ii] = FIRST_LAYER; |
|||
|
|||
if( GetLayerMask( ii ) & Masque_Layer ) |
|||
public: |
|||
PCB_ONE_LAYER_SELECTOR( wxWindow* aParent, BOARD * aBrd, |
|||
LAYER_NUM aDefaultLayer, |
|||
LAYER_NUM aMinLayer = -1, LAYER_NUM aMaxLayer = -1, |
|||
bool aClearTool = false ) |
|||
:PCB_LAYER_SELECTOR( aBrd ), DIALOG_LAYER_SELECTION_BASE( aParent ) |
|||
{ |
|||
if( min_layer > ii ) |
|||
continue; |
|||
m_layerSelected = (int) aDefaultLayer; |
|||
// When not needed, remove the "Clear" button
|
|||
m_buttonClear->Show( aClearTool ); |
|||
m_minLayer = aMinLayer; |
|||
m_maxLayer = aMaxLayer; |
|||
BuildList(); |
|||
Layout(); |
|||
GetSizer()->SetSizeHints(this); |
|||
SetFocus(); |
|||
} |
|||
|
|||
if( ( max_layer >= 0 ) && ( max_layer < ii ) ) |
|||
break; |
|||
LAYER_NUM GetLayerSelection() { return m_layerSelected; } |
|||
|
|||
LayerList[LayerCount] = board->GetLayerName( ii ); |
|||
private: |
|||
// Event handlers
|
|||
void OnLeftGridClick( wxGridEvent& event ); |
|||
void OnRightGridClick( wxGridEvent& event ); |
|||
void OnClearSelection( wxCommandEvent& event ) |
|||
{ |
|||
m_layerSelected = NB_PCB_LAYERS; |
|||
EndModal( NB_PCB_LAYERS ); |
|||
} |
|||
|
|||
if( ii == default_layer ) |
|||
LayerSelect = LayerCount; |
|||
void BuildList(); |
|||
}; |
|||
|
|||
m_LayerId[LayerCount] = ii; |
|||
LayerCount++; |
|||
} |
|||
} |
|||
// Build the layers list
|
|||
// Column position by function:
|
|||
#define SELECT_COLNUM 0
|
|||
#define COLOR_COLNUM 1
|
|||
#define LAYERNAME_COLNUM 2
|
|||
#define LAYERID_COLNUM 3
|
|||
static DECLARE_LAYERS_ORDER_LIST( layertranscode ); |
|||
|
|||
// When appropriate, also provide a "(Deselect)" radiobutton
|
|||
if( null_layer ) |
|||
void PCB_ONE_LAYER_SELECTOR::BuildList() |
|||
{ |
|||
m_leftGridLayers->SetColFormatNumber( LAYERID_COLNUM ); |
|||
m_rightGridLayers->SetColFormatNumber( LAYERID_COLNUM ); |
|||
m_leftGridLayers->HideCol( LAYERID_COLNUM ); |
|||
m_rightGridLayers->HideCol( LAYERID_COLNUM ); |
|||
m_leftGridLayers->SetColSize( COLOR_COLNUM, 20 ); |
|||
m_rightGridLayers->SetColSize( COLOR_COLNUM, 20 ); |
|||
|
|||
// Select a not show cell, to avoid a wrong cell selection for user
|
|||
m_leftGridLayers->GoToCell( 0, LAYERID_COLNUM ); |
|||
m_rightGridLayers->GoToCell( 0, LAYERID_COLNUM ); |
|||
|
|||
int left_row = 0; |
|||
int right_row = 0; |
|||
wxString layernum; |
|||
wxString layername; |
|||
for( LAYER_NUM i = FIRST_LAYER; i < NB_LAYERS; ++i ) |
|||
{ |
|||
LayerList[LayerCount] = _( "(Deselect)" ); |
|||
|
|||
if( NB_PCB_LAYERS == default_layer ) |
|||
LayerSelect = LayerCount; |
|||
LAYER_NUM layerid = i; |
|||
|
|||
m_LayerId[LayerCount] = NB_PCB_LAYERS; |
|||
LayerCount++; |
|||
} |
|||
if( m_layerorder ) |
|||
layerid = layertranscode[i]; |
|||
|
|||
m_LayerList = new wxRadioBox( this, ID_LAYER_SELECT, _( "Layer" ), |
|||
wxPoint( -1, -1 ), wxSize( -1, -1 ), |
|||
LayerCount, LayerList, |
|||
(LayerCount < 8) ? LayerCount : 8, |
|||
wxRA_SPECIFY_ROWS ); |
|||
if( ! IsLayerEnabled( layerid ) ) |
|||
continue; |
|||
|
|||
if( LayerSelect >= 0 ) |
|||
m_LayerList->SetSelection( LayerSelect ); |
|||
if( m_minLayer >= 0 && layerid < m_minLayer ) |
|||
continue; |
|||
|
|||
wxBoxSizer* FrameBoxSizer = new wxBoxSizer( wxHORIZONTAL ); |
|||
SetSizer( FrameBoxSizer ); |
|||
FrameBoxSizer->Add( m_LayerList, 0, wxALIGN_TOP | wxALL, 5 ); |
|||
wxBoxSizer* ButtonBoxSizer = new wxBoxSizer( wxVERTICAL ); |
|||
FrameBoxSizer->Add( ButtonBoxSizer, 0, wxALIGN_BOTTOM | wxALL, 0 ); |
|||
if( m_maxLayer >= 0 && layerid > m_maxLayer ) |
|||
continue; |
|||
|
|||
Button = new wxButton( this, wxID_OK, _( "OK" ) ); |
|||
Button->SetDefault(); |
|||
ButtonBoxSizer->Add( Button, 0, wxGROW | wxALL, 5 ); |
|||
wxColour color = MakeColour( GetLayerColor( layerid ) ); |
|||
layername = GetLayerName( layerid ); |
|||
layernum.Printf( wxT("%d"), layerid ); |
|||
|
|||
Button = new wxButton( this, wxID_CANCEL, _( "Cancel" ) ); |
|||
ButtonBoxSizer->Add( Button, 0, wxGROW | wxALL, 5 ); |
|||
if( layerid <= LAST_COPPER_LAYER ) |
|||
{ |
|||
if( left_row ) |
|||
m_leftGridLayers->AppendRows( 1 ); |
|||
|
|||
m_leftGridLayers->SetCellBackgroundColour ( left_row, COLOR_COLNUM, |
|||
color ); |
|||
m_leftGridLayers->SetCellValue( left_row, LAYERNAME_COLNUM, |
|||
layername ); |
|||
m_leftGridLayers->SetCellValue( left_row, LAYERID_COLNUM, |
|||
layernum ); |
|||
|
|||
if( m_layerSelected == layerid ) |
|||
{ |
|||
m_leftGridLayers->SetCellValue( left_row, SELECT_COLNUM, |
|||
wxT("X") ); |
|||
m_leftGridLayers->SetCellBackgroundColour ( left_row, SELECT_COLNUM, |
|||
color ); |
|||
} |
|||
|
|||
left_row++; |
|||
} |
|||
else |
|||
{ |
|||
if( right_row ) |
|||
m_rightGridLayers->AppendRows( 1 ); |
|||
|
|||
m_rightGridLayers->SetCellBackgroundColour ( right_row, COLOR_COLNUM, |
|||
color ); |
|||
m_rightGridLayers->SetCellValue( right_row, LAYERNAME_COLNUM, |
|||
layername ); |
|||
m_rightGridLayers->SetCellValue( right_row, LAYERID_COLNUM, |
|||
layernum ); |
|||
|
|||
if( m_layerSelected == layerid ) |
|||
{ |
|||
m_rightGridLayers->SetCellValue( right_row, SELECT_COLNUM, |
|||
wxT("X") ); |
|||
m_rightGridLayers->SetCellBackgroundColour ( right_row, SELECT_COLNUM, |
|||
color ); |
|||
} |
|||
|
|||
right_row++; |
|||
} |
|||
} |
|||
|
|||
SetFocus(); |
|||
// Show only populated lists:
|
|||
if( left_row <= 0 ) |
|||
m_leftGridLayers->Show( false ); |
|||
|
|||
GetSizer()->SetSizeHints( this ); |
|||
if( right_row <= 0 ) |
|||
m_rightGridLayers->Show( false ); |
|||
|
|||
Center(); |
|||
m_leftGridLayers->AutoSizeColumn(LAYERNAME_COLNUM); |
|||
m_rightGridLayers->AutoSizeColumn(LAYERNAME_COLNUM); |
|||
m_leftGridLayers->AutoSizeColumn(SELECT_COLNUM); |
|||
m_rightGridLayers->AutoSizeColumn(SELECT_COLNUM); |
|||
} |
|||
|
|||
|
|||
void SELECT_LAYER_DIALOG::OnLayerSelected( wxCommandEvent& event ) |
|||
void PCB_ONE_LAYER_SELECTOR::OnLeftGridClick( wxGridEvent& event ) |
|||
{ |
|||
int ii = m_LayerId[m_LayerList->GetSelection()]; |
|||
|
|||
EndModal( ii ); |
|||
wxString text = m_leftGridLayers->GetCellValue(event.GetRow(), LAYERID_COLNUM); |
|||
long layer; |
|||
text.ToLong( &layer ); |
|||
m_layerSelected = layer; |
|||
EndModal( 1 ); |
|||
} |
|||
|
|||
|
|||
void SELECT_LAYER_DIALOG::OnCancelClick( wxCommandEvent& event ) |
|||
void PCB_ONE_LAYER_SELECTOR::OnRightGridClick( wxGridEvent& event ) |
|||
{ |
|||
EndModal( -1 ); |
|||
wxString text = m_rightGridLayers->GetCellValue(event.GetRow(), LAYERID_COLNUM); |
|||
long layer; |
|||
text.ToLong( &layer ); |
|||
m_layerSelected = layer; |
|||
EndModal( 2 ); |
|||
} |
|||
|
|||
/** Install the dialog box for layer selection
|
|||
* @param aDefaultLayer = Preselection (NB_PCB_LAYERS for "(Deselect)" layer) |
|||
* @param aMinlayer = min layer id value (-1 if no min value) |
|||
* @param aMaxLayer = max layer id value (-1 if no max value) |
|||
* @param aDeselectTool = display a "Clear" button when true |
|||
* @return new layer value (NB_PCB_LAYERS when "(Deselect)" radiobutton selected), |
|||
* or -1 if canceled |
|||
* |
|||
* Providing the option to also display a "Clear" button makes the |
|||
* "Swap Layers" command more "user friendly", |
|||
* by permitting any layer to be "deselected" immediately after its |
|||
* corresponding radiobutton has been clicked on. (It would otherwise be |
|||
* necessary to first cancel the "Select Layer:" dialog box (invoked after a |
|||
* different radiobutton is clicked on) prior to then clicking on the |
|||
* "Clear" button provided within the "Swap Layers:" |
|||
* or "Layer selection:" dialog box). |
|||
*/ |
|||
LAYER_NUM PCB_BASE_FRAME::SelectLayer( LAYER_NUM aDefaultLayer, |
|||
LAYER_NUM aMinlayer, |
|||
LAYER_NUM aMaxLayer, |
|||
bool aDeselectTool ) |
|||
{ |
|||
PCB_ONE_LAYER_SELECTOR dlg( this, GetBoard(), |
|||
aDefaultLayer, aMinlayer, aMaxLayer, |
|||
aDeselectTool ); |
|||
dlg.ShowModal(); |
|||
LAYER_NUM layer = dlg.GetLayerSelection(); |
|||
return layer; |
|||
} |
|||
|
|||
/*********************************************/ |
|||
/* Dialog for the selecting pairs of layers. */ |
|||
/*********************************************/ |
|||
|
|||
class SELECT_LAYERS_PAIR_DIALOG : public wxDialog |
|||
/*
|
|||
* This class display a double pcb copper layers list in a dialog, |
|||
* to select a layer pair from this list |
|||
*/ |
|||
class SELECT_COPPER_LAYERS_PAIR_DIALOG: public PCB_LAYER_SELECTOR, |
|||
public DIALOG_COPPER_LAYER_PAIR_SELECTION_BASE |
|||
{ |
|||
private: |
|||
PCB_BASE_FRAME* m_Parent; |
|||
wxRadioBox* m_LayerListTOP; |
|||
wxRadioBox* m_LayerListBOTTOM; |
|||
LAYER_NUM m_LayerId[NB_COPPER_LAYERS]; |
|||
BOARD* m_brd; |
|||
LAYER_NUM m_frontLayer; |
|||
LAYER_NUM m_backLayer; |
|||
int m_leftRowSelected; |
|||
int m_rightRowSelected; |
|||
|
|||
public: |
|||
SELECT_COPPER_LAYERS_PAIR_DIALOG( wxWindow* aParent, BOARD * aPcb, |
|||
LAYER_NUM aFrontLayer, LAYER_NUM aBackLayer ); |
|||
|
|||
public: SELECT_LAYERS_PAIR_DIALOG( PCB_BASE_FRAME* parent ); |
|||
~SELECT_LAYERS_PAIR_DIALOG() { }; |
|||
void GetLayerPair( LAYER_NUM& aFrontLayer, LAYER_NUM& aBackLayer ) |
|||
{ |
|||
aFrontLayer = m_frontLayer; |
|||
aBackLayer = m_backLayer; |
|||
} |
|||
|
|||
private: |
|||
void OnOkClick( wxCommandEvent& event ); |
|||
void OnCancelClick( wxCommandEvent& event ); |
|||
void OnLeftGridClick( wxGridEvent& event ); |
|||
void OnRightGridClick( wxGridEvent& event ); |
|||
|
|||
DECLARE_EVENT_TABLE() |
|||
}; |
|||
void OnOkClick( wxCommandEvent& event ) |
|||
{ |
|||
EndModal( wxID_OK ); |
|||
} |
|||
|
|||
void OnCancelClick( wxCommandEvent& event ) |
|||
{ |
|||
EndModal( wxID_CANCEL ); |
|||
} |
|||
|
|||
BEGIN_EVENT_TABLE( SELECT_LAYERS_PAIR_DIALOG, wxDialog ) |
|||
EVT_BUTTON( wxID_OK, SELECT_LAYERS_PAIR_DIALOG::OnOkClick ) |
|||
EVT_BUTTON( wxID_CANCEL, SELECT_LAYERS_PAIR_DIALOG::OnCancelClick ) |
|||
END_EVENT_TABLE() |
|||
void BuildList(); |
|||
|
|||
}; |
|||
|
|||
/* Display a list of two copper layers for selection of a pair of layers
|
|||
/* Display a list of two copper layers to choose a pair of layers
|
|||
* for auto-routing, vias ... |
|||
*/ |
|||
void PCB_BASE_FRAME::SelectLayerPair() |
|||
{ |
|||
// Check whether more than one copper layer has been enabled for the
|
|||
// current PCB file, as Layer Pairs can only meaningfully be defined
|
|||
// within PCB files which contain at least two copper layers.
|
|||
if( GetBoard()->GetCopperLayerCount() < 2 ) |
|||
PCB_SCREEN* screen = GetScreen(); |
|||
SELECT_COPPER_LAYERS_PAIR_DIALOG dlg( this, GetBoard(), |
|||
screen->m_Route_Layer_TOP, |
|||
screen->m_Route_Layer_BOTTOM ); |
|||
|
|||
if( dlg.ShowModal() == wxID_OK ) |
|||
{ |
|||
wxString InfoMsg; |
|||
InfoMsg = _( "Less than two copper layers are being used." ); |
|||
InfoMsg << wxT( "\n" ) << _( "Hence layer pairs cannot be specified." ); |
|||
DisplayInfoMessage( this, InfoMsg ); |
|||
return; |
|||
} |
|||
dlg.GetLayerPair( screen->m_Route_Layer_TOP, screen->m_Route_Layer_BOTTOM ); |
|||
|
|||
SELECT_LAYERS_PAIR_DIALOG* frame = new SELECT_LAYERS_PAIR_DIALOG( this ); |
|||
// select the same layer for both layers is allowed (normal in some boards)
|
|||
// but could be a mistake. So display an info message
|
|||
if( screen->m_Route_Layer_TOP == screen->m_Route_Layer_BOTTOM ) |
|||
DisplayInfoMessage( this, |
|||
_( "Warning: The Top Layer and Bottom Layer are same." ) ); |
|||
} |
|||
|
|||
int result = frame->ShowModal(); |
|||
frame->Destroy(); |
|||
m_canvas->MoveCursorToCrossHair(); |
|||
|
|||
// if user changed colors and we are in high contrast mode, then redraw
|
|||
// because the PAD_SMD pads may change color.
|
|||
if( result >= 0 && DisplayOpt.ContrastModeDisplay ) |
|||
{ |
|||
m_canvas->Refresh(); |
|||
} |
|||
} |
|||
|
|||
|
|||
SELECT_LAYERS_PAIR_DIALOG::SELECT_LAYERS_PAIR_DIALOG( PCB_BASE_FRAME* parent ) : |
|||
wxDialog( parent, -1, _( "Select Layer Pair:" ), wxPoint( -1, -1 ), |
|||
wxSize( 470, 250 ), DIALOG_STYLE ) |
|||
SELECT_COPPER_LAYERS_PAIR_DIALOG:: |
|||
SELECT_COPPER_LAYERS_PAIR_DIALOG( wxWindow* aParent, BOARD * aPcb, |
|||
LAYER_NUM aFrontLayer, LAYER_NUM aBackLayer) : |
|||
PCB_LAYER_SELECTOR( aPcb ), |
|||
DIALOG_COPPER_LAYER_PAIR_SELECTION_BASE( aParent ) |
|||
{ |
|||
BOARD* board = parent->GetBoard(); |
|||
wxButton* Button; |
|||
wxString LayerList[NB_COPPER_LAYERS]; |
|||
LAYER_NUM LayerTopSelect = FIRST_LAYER, LayerBottomSelect = FIRST_LAYER; |
|||
m_frontLayer = aFrontLayer; |
|||
m_backLayer = aBackLayer; |
|||
m_leftRowSelected = 0; |
|||
m_rightRowSelected = 0; |
|||
BuildList(); |
|||
SetFocus(); |
|||
GetSizer()->SetSizeHints( this ); |
|||
Center(); |
|||
} |
|||
|
|||
m_Parent = parent; |
|||
void SELECT_COPPER_LAYERS_PAIR_DIALOG::BuildList() |
|||
{ |
|||
m_leftGridLayers->SetColFormatNumber( LAYERID_COLNUM ); |
|||
m_rightGridLayers->SetColFormatNumber( LAYERID_COLNUM ); |
|||
m_leftGridLayers->HideCol( LAYERID_COLNUM ); |
|||
m_rightGridLayers->HideCol( LAYERID_COLNUM ); |
|||
m_leftGridLayers->SetColSize( COLOR_COLNUM, 20 ); |
|||
m_rightGridLayers->SetColSize( COLOR_COLNUM, 20 ); |
|||
|
|||
// Select a not show cell, to avoid a wrong cell selection for user
|
|||
m_leftGridLayers->GoToCell( 0, LAYERID_COLNUM ); |
|||
m_rightGridLayers->GoToCell( 0, LAYERID_COLNUM ); |
|||
|
|||
int row = 0; |
|||
wxString layernum; |
|||
wxString layername; |
|||
for( LAYER_NUM i = FIRST_LAYER; i < NB_LAYERS; ++i ) |
|||
{ |
|||
LAYER_NUM layerid = i; |
|||
|
|||
PCB_SCREEN* screen = (PCB_SCREEN*) m_Parent->GetScreen(); |
|||
LAYER_MSK Masque_Layer = g_TabAllCopperLayerMask[board->GetCopperLayerCount() - 1]; |
|||
Masque_Layer |= ALL_NO_CU_LAYERS; |
|||
if( m_layerorder ) |
|||
layerid = layertranscode[i]; |
|||
|
|||
LAYER_NUM LayerCount = FIRST_LAYER; |
|||
for( LAYER_NUM ii = FIRST_COPPER_LAYER; ii < NB_COPPER_LAYERS; ++ii ) |
|||
{ |
|||
m_LayerId[ii] = FIRST_LAYER; |
|||
if( ! IsLayerEnabled( layerid ) ) |
|||
continue; |
|||
|
|||
if( (GetLayerMask( ii ) & Masque_Layer) ) |
|||
{ |
|||
LayerList[LayerCount] = board->GetLayerName( ii ); |
|||
if( layerid > LAST_COPPER_LAYER ) |
|||
continue; |
|||
|
|||
if( ii == screen->m_Route_Layer_TOP ) |
|||
LayerTopSelect = LayerCount; |
|||
wxColour color = MakeColour( GetLayerColor( layerid ) ); |
|||
layername = GetLayerName( layerid ); |
|||
layernum.Printf( wxT("%d"), layerid ); |
|||
|
|||
if( ii == screen->m_Route_Layer_BOTTOM ) |
|||
LayerBottomSelect = LayerCount; |
|||
if( row ) |
|||
m_leftGridLayers->AppendRows( 1 ); |
|||
m_leftGridLayers->SetCellBackgroundColour ( row, COLOR_COLNUM, |
|||
color ); |
|||
m_leftGridLayers->SetCellValue( row, LAYERNAME_COLNUM, |
|||
layername ); |
|||
m_leftGridLayers->SetCellValue( row, LAYERID_COLNUM, |
|||
layernum ); |
|||
|
|||
m_LayerId[LayerCount] = ii; |
|||
++LayerCount; |
|||
if( m_frontLayer == layerid ) |
|||
{ |
|||
m_leftGridLayers->SetCellValue( row, SELECT_COLNUM, |
|||
wxT("X") ); |
|||
m_leftGridLayers->SetCellBackgroundColour( row, SELECT_COLNUM, |
|||
color ); |
|||
m_leftRowSelected = row; |
|||
} |
|||
} |
|||
|
|||
m_LayerListTOP = new wxRadioBox( this, ID_LAYER_SELECT_TOP, |
|||
_( "Top Layer" ), |
|||
wxPoint( -1, -1 ), wxSize( -1, -1 ), |
|||
LayerCount, LayerList, |
|||
(LayerCount < 8) ? LayerCount : 8, |
|||
wxRA_SPECIFY_ROWS ); |
|||
m_LayerListTOP->SetSelection( LayerTopSelect ); |
|||
if( row ) |
|||
m_rightGridLayers->AppendRows( 1 ); |
|||
m_rightGridLayers->SetCellBackgroundColour ( row, COLOR_COLNUM, |
|||
color ); |
|||
m_rightGridLayers->SetCellValue( row, LAYERNAME_COLNUM, |
|||
layername ); |
|||
m_rightGridLayers->SetCellValue( row, LAYERID_COLNUM, |
|||
layernum ); |
|||
|
|||
m_LayerListBOTTOM = new wxRadioBox( this, ID_LAYER_SELECT_BOTTOM, |
|||
_( "Bottom Layer" ), |
|||
wxPoint( -1, -1 ), wxSize( -1, -1 ), |
|||
LayerCount, LayerList, |
|||
(LayerCount < 8) ? LayerCount : 8, |
|||
wxRA_SPECIFY_ROWS ); |
|||
m_LayerListBOTTOM->SetSelection( LayerBottomSelect ); |
|||
if( m_backLayer == layerid ) |
|||
{ |
|||
m_rightGridLayers->SetCellValue( row, SELECT_COLNUM, |
|||
wxT("X") ); |
|||
m_rightGridLayers->SetCellBackgroundColour ( row, SELECT_COLNUM, |
|||
color ); |
|||
m_rightRowSelected = row; |
|||
} |
|||
|
|||
wxBoxSizer* FrameBoxSizer = new wxBoxSizer( wxVERTICAL ); |
|||
SetSizer( FrameBoxSizer ); |
|||
row++; |
|||
} |
|||
|
|||
wxBoxSizer* RadioBoxSizer = new wxBoxSizer( wxHORIZONTAL ); |
|||
FrameBoxSizer->Add( RadioBoxSizer, 0, wxALIGN_LEFT | wxALL, 0 ); |
|||
m_leftGridLayers->AutoSizeColumn(LAYERNAME_COLNUM); |
|||
m_rightGridLayers->AutoSizeColumn(LAYERNAME_COLNUM); |
|||
m_leftGridLayers->AutoSizeColumn(SELECT_COLNUM); |
|||
m_rightGridLayers->AutoSizeColumn(SELECT_COLNUM); |
|||
} |
|||
|
|||
wxBoxSizer* ButtonBoxSizer = new wxBoxSizer( wxHORIZONTAL ); |
|||
FrameBoxSizer->Add( ButtonBoxSizer, 0, wxALIGN_RIGHT | wxALL, 0 ); |
|||
void SELECT_COPPER_LAYERS_PAIR_DIALOG::OnLeftGridClick( wxGridEvent& event ) |
|||
{ |
|||
int row = event.GetRow(); |
|||
wxString text = m_leftGridLayers->GetCellValue( row, LAYERID_COLNUM ); |
|||
long layer; |
|||
text.ToLong( &layer ); |
|||
|
|||
RadioBoxSizer->Add( m_LayerListTOP, 0, wxALIGN_TOP | wxALL, 5 ); |
|||
RadioBoxSizer->Add( m_LayerListBOTTOM, 0, wxALIGN_TOP | wxALL, 5 ); |
|||
if( m_frontLayer == layer ) |
|||
return; |
|||
|
|||
Button = new wxButton( this, wxID_OK, _( "OK" ) ); |
|||
Button->SetDefault(); |
|||
ButtonBoxSizer->Add( Button, 0, wxGROW | wxALL, 5 ); |
|||
m_leftGridLayers->SetCellValue( m_leftRowSelected, SELECT_COLNUM, |
|||
wxEmptyString ); |
|||
m_leftGridLayers->SetCellBackgroundColour ( m_leftRowSelected, SELECT_COLNUM, |
|||
m_leftGridLayers->GetDefaultCellBackgroundColour() ); |
|||
|
|||
Button = new wxButton( this, wxID_CANCEL, _( "Cancel" ) ); |
|||
ButtonBoxSizer->Add( Button, 0, wxGROW | wxALL, 5 ); |
|||
SetFocus(); |
|||
m_frontLayer = layer; |
|||
m_leftRowSelected = row; |
|||
m_leftGridLayers->SetCellValue( row, SELECT_COLNUM, |
|||
wxT("X") ); |
|||
m_leftGridLayers->SetCellBackgroundColour( row, SELECT_COLNUM, |
|||
MakeColour( GetLayerColor( layer ) ) ); |
|||
|
|||
GetSizer()->SetSizeHints( this ); |
|||
Center(); |
|||
} |
|||
|
|||
|
|||
void SELECT_LAYERS_PAIR_DIALOG::OnOkClick( wxCommandEvent& event ) |
|||
void SELECT_COPPER_LAYERS_PAIR_DIALOG::OnRightGridClick( wxGridEvent& event ) |
|||
{ |
|||
// select the same layer for top and bottom is allowed (normal in some
|
|||
// boards)
|
|||
// but could be a mistake. So display an info message
|
|||
if( m_LayerId[m_LayerListTOP->GetSelection()] == m_LayerId[m_LayerListBOTTOM->GetSelection()] ) |
|||
DisplayInfoMessage( this, |
|||
_( "Warning: The Top Layer and Bottom Layer are same." ) ); |
|||
|
|||
PCB_SCREEN* screen = (PCB_SCREEN*) m_Parent->GetScreen(); |
|||
|
|||
screen->m_Route_Layer_TOP = m_LayerId[m_LayerListTOP->GetSelection()]; |
|||
screen->m_Route_Layer_BOTTOM = m_LayerId[m_LayerListBOTTOM->GetSelection()]; |
|||
|
|||
EndModal( 0 ); |
|||
} |
|||
int row = event.GetRow(); |
|||
wxString text = m_rightGridLayers->GetCellValue( row, LAYERID_COLNUM ); |
|||
long layer; |
|||
text.ToLong( &layer ); |
|||
|
|||
if( m_backLayer == layer ) |
|||
return; |
|||
|
|||
void SELECT_LAYERS_PAIR_DIALOG::OnCancelClick( wxCommandEvent& event ) |
|||
{ |
|||
EndModal( -1 ); |
|||
m_rightGridLayers->SetCellValue( m_rightRowSelected, SELECT_COLNUM, |
|||
wxEmptyString ); |
|||
m_rightGridLayers->SetCellBackgroundColour ( m_rightRowSelected, SELECT_COLNUM, |
|||
m_rightGridLayers->GetDefaultCellBackgroundColour() ); |
|||
|
|||
m_backLayer = layer; |
|||
m_rightRowSelected = row; |
|||
m_rightGridLayers->SetCellValue( row, SELECT_COLNUM, |
|||
wxT("X") ); |
|||
m_rightGridLayers->SetCellBackgroundColour ( row, SELECT_COLNUM, |
|||
MakeColour( GetLayerColor( layer ) ) ); |
|||
} |
Write
Preview
Loading…
Cancel
Save
Reference in new issue