Use layer_widget in Gerbview
Added sample gerber files for test (gerbview has problem with 2 files)
This commit is contained in:
parent
9a6f753cac
commit
98ba50f80e
|
@ -18,6 +18,7 @@ endif(APPLE)
|
||||||
|
|
||||||
set(GERBVIEW_SRCS
|
set(GERBVIEW_SRCS
|
||||||
block.cpp
|
block.cpp
|
||||||
|
class_gerbview_layer_widget.cpp
|
||||||
controle.cpp
|
controle.cpp
|
||||||
dcode.cpp
|
dcode.cpp
|
||||||
deltrack.cpp
|
deltrack.cpp
|
||||||
|
@ -50,6 +51,7 @@ set(GERBVIEW_SRCS
|
||||||
|
|
||||||
set(GERBVIEW_EXTRA_SRCS
|
set(GERBVIEW_EXTRA_SRCS
|
||||||
../share/setpage.cpp
|
../share/setpage.cpp
|
||||||
|
../pcbnew/layer_widget.cpp
|
||||||
../pcbnew/printout_controler.cpp
|
../pcbnew/printout_controler.cpp
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,246 @@
|
||||||
|
/*
|
||||||
|
* This program source code file is part of KICAD, a free EDA CAD application.
|
||||||
|
*
|
||||||
|
* Copyright (C) 2004-2010 Jean-Pierre Charras, jean-pierre.charras@gpisa-lab.inpg.fr
|
||||||
|
* Copyright (C) 2010 SoftPLC Corporation, Dick Hollenbeck <dick@softplc.com>
|
||||||
|
* Copyright (C) 2010 Kicad Developers, see change_log.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
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/*********************************************************/
|
||||||
|
/* class_gerbview_layer_widget.cpp - gerbview layers manager. */
|
||||||
|
/*********************************************************/
|
||||||
|
|
||||||
|
#include "fctsys.h"
|
||||||
|
#include "common.h"
|
||||||
|
#include "class_drawpanel.h"
|
||||||
|
#include "pcbstruct.h"
|
||||||
|
#include "gerbview.h"
|
||||||
|
#include "wxGerberFrame.h"
|
||||||
|
#include "layer_widget.h"
|
||||||
|
#include "class_gerbview_layer_widget.h"
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Class GERBER_LAYER_WIDGET
|
||||||
|
* is here to implement the abtract functions of LAYER_WIDGET so they
|
||||||
|
* may be tied into the WinEDA_GerberFrame's data and so we can add a popup
|
||||||
|
* menu which is specific to PCBNEW's needs.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
GERBER_LAYER_WIDGET::GERBER_LAYER_WIDGET( WinEDA_GerberFrame* aParent, wxWindow* aFocusOwner, int aPointSize ) :
|
||||||
|
LAYER_WIDGET( aParent, aFocusOwner, aPointSize ),
|
||||||
|
myframe( aParent )
|
||||||
|
{
|
||||||
|
BOARD* board = myframe->GetBoard();
|
||||||
|
|
||||||
|
// Fixed "Rendering" tab rows within the LAYER_WIDGET, only the initial color
|
||||||
|
// is changed before appending to the LAYER_WIDGET. This is an automatic variable
|
||||||
|
// not a static variable, change the color & state after copying from code to renderRows
|
||||||
|
// on the stack.
|
||||||
|
LAYER_WIDGET::ROW renderRows[2] = {
|
||||||
|
|
||||||
|
#define RR LAYER_WIDGET::ROW // Render Row abreviation to reduce source width
|
||||||
|
|
||||||
|
// text id color tooltip checked
|
||||||
|
RR( _( "Grid" ), GERBER_GRID_VISIBLE, WHITE, _( "Show the (x,y) grid dots" ) ),
|
||||||
|
RR( _( "DCodes" ), DCODES_VISIBLE, WHITE, _( "Show DCodes identification" ) ),
|
||||||
|
};
|
||||||
|
|
||||||
|
for( unsigned row=0; row<DIM(renderRows); ++row )
|
||||||
|
{
|
||||||
|
if( renderRows[row].color != -1 ) // does this row show a color?
|
||||||
|
{
|
||||||
|
// this window frame must have an established BOARD, i.e. after SetBoard()
|
||||||
|
renderRows[row].color = board->GetVisibleElementColor( renderRows[row].id );
|
||||||
|
}
|
||||||
|
renderRows[row].state = board->IsElementVisible( renderRows[row].id );
|
||||||
|
}
|
||||||
|
|
||||||
|
AppendRenderRows( renderRows, DIM(renderRows) );
|
||||||
|
|
||||||
|
//-----<Popup menu>-------------------------------------------------
|
||||||
|
// handle the popup menu over the layer window.
|
||||||
|
m_LayerScrolledWindow->Connect( wxEVT_RIGHT_DOWN,
|
||||||
|
wxMouseEventHandler( GERBER_LAYER_WIDGET::onRightDownLayers ), NULL, this );
|
||||||
|
|
||||||
|
// since Popupmenu() calls this->ProcessEvent() we must call this->Connect()
|
||||||
|
// and not m_LayerScrolledWindow->Connect()
|
||||||
|
Connect( ID_SHOW_ALL_COPPERS, ID_SHOW_NO_COPPERS, wxEVT_COMMAND_MENU_SELECTED,
|
||||||
|
wxCommandEventHandler( GERBER_LAYER_WIDGET::onPopupSelection ), NULL, this );
|
||||||
|
|
||||||
|
// install the right click handler into each control at end of ReFill()
|
||||||
|
// using installRightLayerClickHandler
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void GERBER_LAYER_WIDGET::installRightLayerClickHandler()
|
||||||
|
{
|
||||||
|
int rowCount = GetLayerRowCount();
|
||||||
|
for( int row=0; row<rowCount; ++row )
|
||||||
|
{
|
||||||
|
for( int col=0; col<LYR_COLUMN_COUNT; ++col )
|
||||||
|
{
|
||||||
|
wxWindow* w = getLayerComp( row, col );
|
||||||
|
|
||||||
|
w->Connect( wxEVT_RIGHT_DOWN, wxMouseEventHandler(
|
||||||
|
GERBER_LAYER_WIDGET::onRightDownLayers ), NULL, this );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void GERBER_LAYER_WIDGET::onRightDownLayers( wxMouseEvent& event )
|
||||||
|
{
|
||||||
|
wxMenu menu;
|
||||||
|
|
||||||
|
// menu text is capitalized:
|
||||||
|
// http://library.gnome.org/devel/hig-book/2.20/design-text-labels.html.en#layout-capitalization
|
||||||
|
menu.Append( new wxMenuItem( &menu, ID_SHOW_ALL_COPPERS,
|
||||||
|
_("Show All Layers") ) );
|
||||||
|
|
||||||
|
menu.Append( new wxMenuItem( &menu, ID_SHOW_NO_COPPERS,
|
||||||
|
_( "Hide All Layers" ) ) );
|
||||||
|
|
||||||
|
PopupMenu( &menu );
|
||||||
|
|
||||||
|
passOnFocus();
|
||||||
|
}
|
||||||
|
|
||||||
|
void GERBER_LAYER_WIDGET::onPopupSelection( wxCommandEvent& event )
|
||||||
|
{
|
||||||
|
int rowCount;
|
||||||
|
int menuId = event.GetId();
|
||||||
|
bool visible;
|
||||||
|
|
||||||
|
switch( menuId )
|
||||||
|
{
|
||||||
|
case ID_SHOW_ALL_COPPERS:
|
||||||
|
visible = true;
|
||||||
|
goto L_change_coppers;
|
||||||
|
|
||||||
|
case ID_SHOW_NO_COPPERS:
|
||||||
|
visible = false;
|
||||||
|
L_change_coppers:
|
||||||
|
int lastCu = -1;
|
||||||
|
rowCount = GetLayerRowCount();
|
||||||
|
for( int row=rowCount-1; row>=0; --row )
|
||||||
|
{
|
||||||
|
wxCheckBox* cb = (wxCheckBox*) getLayerComp( row, 3 );
|
||||||
|
int layer = getDecodedId( cb->GetId() );
|
||||||
|
if( IsValidCopperLayerIndex( layer ) )
|
||||||
|
{
|
||||||
|
lastCu = row;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for( int row=0; row<rowCount; ++row )
|
||||||
|
{
|
||||||
|
wxCheckBox* cb = (wxCheckBox*) getLayerComp( row, 3 );
|
||||||
|
int layer = getDecodedId( cb->GetId() );
|
||||||
|
|
||||||
|
if( IsValidCopperLayerIndex( layer ) )
|
||||||
|
{
|
||||||
|
cb->SetValue( visible );
|
||||||
|
|
||||||
|
bool isLastCopperLayer = (row==lastCu);
|
||||||
|
|
||||||
|
OnLayerVisible( layer, visible, isLastCopperLayer );
|
||||||
|
|
||||||
|
if( isLastCopperLayer )
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void GERBER_LAYER_WIDGET::ReFill()
|
||||||
|
{
|
||||||
|
BOARD* brd = myframe->GetBoard();
|
||||||
|
int layer;
|
||||||
|
ClearLayerRows();
|
||||||
|
for( layer = 0; layer < LAYER_COUNT; layer++ )
|
||||||
|
{
|
||||||
|
wxString msg;
|
||||||
|
msg.Printf( _("Layer %d"), layer+1 );
|
||||||
|
AppendLayerRow( LAYER_WIDGET::ROW( msg, layer, brd->GetLayerColor( layer ), wxEmptyString, true ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
installRightLayerClickHandler();
|
||||||
|
}
|
||||||
|
|
||||||
|
//-----<LAYER_WIDGET callbacks>-------------------------------------------
|
||||||
|
|
||||||
|
void GERBER_LAYER_WIDGET::OnLayerColorChange( int aLayer, int aColor )
|
||||||
|
{
|
||||||
|
myframe->GetBoard()->SetLayerColor( aLayer, aColor );
|
||||||
|
myframe->DrawPanel->Refresh();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool GERBER_LAYER_WIDGET::OnLayerSelect( int aLayer )
|
||||||
|
{
|
||||||
|
// the layer change from the GERBER_LAYER_WIDGET can be denied by returning
|
||||||
|
// false from this function.
|
||||||
|
// myframe->setActiveLayer( aLayer, false );
|
||||||
|
// myframe->syncLayerBox();
|
||||||
|
if(DisplayOpt.ContrastModeDisplay)
|
||||||
|
myframe->DrawPanel->Refresh();
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void GERBER_LAYER_WIDGET::OnLayerVisible( int aLayer, bool isVisible, bool isFinal )
|
||||||
|
{
|
||||||
|
BOARD* brd = myframe->GetBoard();
|
||||||
|
|
||||||
|
int visibleLayers = brd->GetVisibleLayers();
|
||||||
|
|
||||||
|
if( isVisible )
|
||||||
|
visibleLayers |= (1 << aLayer);
|
||||||
|
else
|
||||||
|
visibleLayers &= ~(1 << aLayer);
|
||||||
|
|
||||||
|
brd->SetVisibleLayers( visibleLayers );
|
||||||
|
|
||||||
|
if( isFinal )
|
||||||
|
myframe->DrawPanel->Refresh();
|
||||||
|
}
|
||||||
|
|
||||||
|
void GERBER_LAYER_WIDGET::OnRenderColorChange( int aId, int aColor )
|
||||||
|
{
|
||||||
|
myframe->GetBoard()->SetVisibleElementColor( aId, aColor );
|
||||||
|
myframe->DrawPanel->Refresh();
|
||||||
|
}
|
||||||
|
|
||||||
|
void GERBER_LAYER_WIDGET::OnRenderEnable( int aId, bool isEnabled )
|
||||||
|
{
|
||||||
|
BOARD* brd = myframe->GetBoard();
|
||||||
|
brd->SetElementVisibility( aId, isEnabled );
|
||||||
|
|
||||||
|
myframe->DrawPanel->Refresh();
|
||||||
|
}
|
||||||
|
|
||||||
|
//-----</LAYER_WIDGET callbacks>------------------------------------------
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,83 @@
|
||||||
|
/*
|
||||||
|
* This program source code file is part of KICAD, a free EDA CAD application.
|
||||||
|
*
|
||||||
|
* Copyright (C) 2004-2010 Jean-Pierre Charras, jean-pierre.charras@gpisa-lab.inpg.fr
|
||||||
|
* Copyright (C) 2010 SoftPLC Corporation, Dick Hollenbeck <dick@softplc.com>
|
||||||
|
* Copyright (C) 2010 Kicad Developers, see change_log.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
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/************************************************************/
|
||||||
|
/* class_gerber_layer_widget.h : header for the layers manager */
|
||||||
|
/************************************************************/
|
||||||
|
|
||||||
|
#ifndef _CLASS_GERBER_LAYER_WIDGET_H_
|
||||||
|
#define _CLASS_GERBER_LAYER_WIDGET_H_
|
||||||
|
|
||||||
|
#include "layer_widget.h"
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Class GERBER_LAYER_WIDGET
|
||||||
|
* is here to implement the abtract functions of LAYER_WIDGET so they
|
||||||
|
* may be tied into the WinEDA_GerberFrame's data and so we can add a popup
|
||||||
|
* menu which is specific to PCBNEW's needs.
|
||||||
|
*/
|
||||||
|
class GERBER_LAYER_WIDGET : public LAYER_WIDGET
|
||||||
|
{
|
||||||
|
WinEDA_GerberFrame* myframe;
|
||||||
|
|
||||||
|
// popup menu ids.
|
||||||
|
#define ID_SHOW_ALL_COPPERS wxID_HIGHEST
|
||||||
|
#define ID_SHOW_NO_COPPERS (wxID_HIGHEST+1)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Function OnRightDownLayers
|
||||||
|
* puts up a popup menu for the layer panel.
|
||||||
|
*/
|
||||||
|
void onRightDownLayers( wxMouseEvent& event );
|
||||||
|
|
||||||
|
void onPopupSelection( wxCommandEvent& event );
|
||||||
|
|
||||||
|
/// this is for the popup menu, the right click handler has to be installed
|
||||||
|
/// on every child control within the layer panel.
|
||||||
|
void installRightLayerClickHandler();
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructor
|
||||||
|
* @param aPointSize is the font point size to use within the widget. This
|
||||||
|
* effectively sets the overal size of the widget via the row height and bitmap
|
||||||
|
* button sizes.
|
||||||
|
*/
|
||||||
|
GERBER_LAYER_WIDGET( WinEDA_GerberFrame* aParent, wxWindow* aFocusOwner, int aPointSize = 10 );
|
||||||
|
|
||||||
|
void ReFill();
|
||||||
|
|
||||||
|
//-----<implement LAYER_WIDGET abstract callback functions>-----------
|
||||||
|
void OnLayerColorChange( int aLayer, int aColor );
|
||||||
|
bool OnLayerSelect( int aLayer );
|
||||||
|
void OnLayerVisible( int aLayer, bool isVisible, bool isFinal );
|
||||||
|
void OnRenderColorChange( int aId, int aColor );
|
||||||
|
void OnRenderEnable( int aId, bool isEnabled );
|
||||||
|
//-----</implement LAYER_WIDGET abstract callback functions>----------
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // _CLASS_GERBER_LAYER_WIDGET_H_
|
|
@ -49,7 +49,7 @@ void WinEDA_GerberFrame::OnLeftClick( wxDC* DC, const wxPoint& MousePos )
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|
||||||
case ID_PCB_DELETE_ITEM_BUTT:
|
case ID_GERBVIEW_DELETE_ITEM_BUTT:
|
||||||
DrawStruct = GerberGeneralLocateAndDisplay();
|
DrawStruct = GerberGeneralLocateAndDisplay();
|
||||||
if( DrawStruct == NULL )
|
if( DrawStruct == NULL )
|
||||||
break;
|
break;
|
||||||
|
@ -126,7 +126,7 @@ void WinEDA_GerberFrame::Process_Special_Functions( wxCommandEvent& event )
|
||||||
Files_io( event );
|
Files_io( event );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ID_PCB_GLOBAL_DELETE:
|
case ID_GERBVIEW_GLOBAL_DELETE:
|
||||||
Erase_Current_Layer( TRUE );
|
Erase_Current_Layer( TRUE );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -152,20 +152,11 @@ void WinEDA_GerberFrame::Process_Special_Functions( wxCommandEvent& event )
|
||||||
case ID_POPUP_CANCEL_CURRENT_COMMAND:
|
case ID_POPUP_CANCEL_CURRENT_COMMAND:
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ID_POPUP_PCB_DELETE_TRACKSEG:
|
case ID_GERBVIEW_DELETE_ITEM_BUTT:
|
||||||
DrawPanel->MouseToCursorSchema();
|
|
||||||
if( GetScreen()->GetCurItem() == NULL )
|
|
||||||
break;
|
|
||||||
Delete_Segment( &dc, (TRACK*) GetScreen()->GetCurItem() );
|
|
||||||
GetScreen()->SetCurItem( NULL );
|
|
||||||
GetScreen()->SetModify();
|
|
||||||
break;
|
|
||||||
|
|
||||||
case ID_PCB_DELETE_ITEM_BUTT:
|
|
||||||
SetToolID( id, wxCURSOR_BULLSEYE, wxT( "Delete item" ) );
|
SetToolID( id, wxCURSOR_BULLSEYE, wxT( "Delete item" ) );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ID_TOOLBARH_PCB_SELECT_LAYER:
|
case ID_TOOLBARH_GERBVIEW_SELECT_LAYER:
|
||||||
GetScreen()->m_Active_Layer = m_SelLayerBox->GetChoice();
|
GetScreen()->m_Active_Layer = m_SelLayerBox->GetChoice();
|
||||||
DrawPanel->Refresh( TRUE );
|
DrawPanel->Refresh( TRUE );
|
||||||
break;
|
break;
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
@ -57,9 +57,9 @@ BEGIN_EVENT_TABLE( WinEDA_GerberFrame, WinEDA_BasePcbFrame )
|
||||||
ID_CONFIG_AND_PREFERENCES_END,
|
ID_CONFIG_AND_PREFERENCES_END,
|
||||||
WinEDA_GerberFrame::Process_Config )
|
WinEDA_GerberFrame::Process_Config )
|
||||||
|
|
||||||
EVT_MENU( ID_COLORS_SETUP, WinEDA_GerberFrame::Process_Config )
|
EVT_MENU( ID_MENU_GERBVIEW_SHOW_HIDE_LAYERS_MANAGER_DIALOG, WinEDA_GerberFrame::OnSelectOptionToolbar )
|
||||||
EVT_MENU( ID_OPTIONS_SETUP, WinEDA_GerberFrame::InstallGerberGeneralOptionsFrame )
|
EVT_MENU( ID_OPTIONS_SETUP, WinEDA_GerberFrame::InstallGerberGeneralOptionsFrame )
|
||||||
EVT_MENU( ID_PCB_DISPLAY_OPTIONS_SETUP, WinEDA_GerberFrame::InstallGerberDisplayOptionsDialog )
|
EVT_MENU( ID_GERBVIEW_DISPLAY_OPTIONS_SETUP, WinEDA_GerberFrame::InstallGerberDisplayOptionsDialog )
|
||||||
|
|
||||||
EVT_MENU_RANGE( ID_LANGUAGE_CHOICE, ID_LANGUAGE_CHOICE_END,
|
EVT_MENU_RANGE( ID_LANGUAGE_CHOICE, ID_LANGUAGE_CHOICE_END,
|
||||||
WinEDA_DrawFrame::SetLanguage )
|
WinEDA_DrawFrame::SetLanguage )
|
||||||
|
@ -74,7 +74,7 @@ BEGIN_EVENT_TABLE( WinEDA_GerberFrame, WinEDA_BasePcbFrame )
|
||||||
|
|
||||||
|
|
||||||
// menu Miscellaneous
|
// menu Miscellaneous
|
||||||
EVT_MENU( ID_PCB_GLOBAL_DELETE,
|
EVT_MENU( ID_GERBVIEW_GLOBAL_DELETE,
|
||||||
WinEDA_GerberFrame::Process_Special_Functions )
|
WinEDA_GerberFrame::Process_Special_Functions )
|
||||||
|
|
||||||
// Menu Help
|
// Menu Help
|
||||||
|
@ -88,7 +88,7 @@ BEGIN_EVENT_TABLE( WinEDA_GerberFrame, WinEDA_BasePcbFrame )
|
||||||
EVT_TOOL( wxID_UNDO, WinEDA_GerberFrame::Process_Special_Functions )
|
EVT_TOOL( wxID_UNDO, WinEDA_GerberFrame::Process_Special_Functions )
|
||||||
EVT_TOOL( ID_GEN_PRINT, WinEDA_GerberFrame::ToPrinter )
|
EVT_TOOL( ID_GEN_PRINT, WinEDA_GerberFrame::ToPrinter )
|
||||||
EVT_TOOL( ID_FIND_ITEMS, WinEDA_GerberFrame::Process_Special_Functions )
|
EVT_TOOL( ID_FIND_ITEMS, WinEDA_GerberFrame::Process_Special_Functions )
|
||||||
EVT_KICAD_CHOICEBOX( ID_TOOLBARH_PCB_SELECT_LAYER,
|
EVT_KICAD_CHOICEBOX( ID_TOOLBARH_GERBVIEW_SELECT_LAYER,
|
||||||
WinEDA_GerberFrame::Process_Special_Functions )
|
WinEDA_GerberFrame::Process_Special_Functions )
|
||||||
|
|
||||||
EVT_KICAD_CHOICEBOX( ID_TOOLBARH_GERBER_SELECT_TOOL,
|
EVT_KICAD_CHOICEBOX( ID_TOOLBARH_GERBER_SELECT_TOOL,
|
||||||
|
@ -96,7 +96,7 @@ BEGIN_EVENT_TABLE( WinEDA_GerberFrame, WinEDA_BasePcbFrame )
|
||||||
|
|
||||||
// Vertical toolbar:
|
// Vertical toolbar:
|
||||||
EVT_TOOL( ID_NO_SELECT_BUTT, WinEDA_GerberFrame::Process_Special_Functions )
|
EVT_TOOL( ID_NO_SELECT_BUTT, WinEDA_GerberFrame::Process_Special_Functions )
|
||||||
EVT_TOOL( ID_PCB_DELETE_ITEM_BUTT,
|
EVT_TOOL( ID_GERBVIEW_DELETE_ITEM_BUTT,
|
||||||
WinEDA_GerberFrame::Process_Special_Functions )
|
WinEDA_GerberFrame::Process_Special_Functions )
|
||||||
|
|
||||||
EVT_MENU_RANGE( ID_POPUP_GENERAL_START_RANGE, ID_POPUP_GENERAL_END_RANGE,
|
EVT_MENU_RANGE( ID_POPUP_GENERAL_START_RANGE, ID_POPUP_GENERAL_END_RANGE,
|
||||||
|
@ -109,6 +109,8 @@ BEGIN_EVENT_TABLE( WinEDA_GerberFrame, WinEDA_BasePcbFrame )
|
||||||
// Option toolbar
|
// Option toolbar
|
||||||
EVT_TOOL_RANGE( ID_TB_OPTIONS_START, ID_TB_OPTIONS_END,
|
EVT_TOOL_RANGE( ID_TB_OPTIONS_START, ID_TB_OPTIONS_END,
|
||||||
WinEDA_GerberFrame::OnSelectOptionToolbar )
|
WinEDA_GerberFrame::OnSelectOptionToolbar )
|
||||||
|
EVT_TOOL( ID_TB_OPTIONS_SHOW_LAYERS_MANAGER_VERTICAL_TOOLBAR,
|
||||||
|
WinEDA_GerberFrame::OnSelectOptionToolbar )
|
||||||
|
|
||||||
END_EVENT_TABLE()
|
END_EVENT_TABLE()
|
||||||
|
|
||||||
|
@ -120,6 +122,7 @@ WinEDA_GerberFrame::WinEDA_GerberFrame( wxWindow* father,
|
||||||
WinEDA_BasePcbFrame( father, GERBER_FRAME, title, pos, size, style )
|
WinEDA_BasePcbFrame( father, GERBER_FRAME, title, pos, size, style )
|
||||||
{
|
{
|
||||||
m_FrameName = wxT( "GerberFrame" );
|
m_FrameName = wxT( "GerberFrame" );
|
||||||
|
m_show_layer_manager_tools = true;
|
||||||
|
|
||||||
m_Draw_Axis = true; // true to show X and Y axis on screen
|
m_Draw_Axis = true; // true to show X and Y axis on screen
|
||||||
m_Draw_Sheet_Ref = FALSE; // TRUE for reference drawings.
|
m_Draw_Sheet_Ref = FALSE; // TRUE for reference drawings.
|
||||||
|
@ -136,8 +139,20 @@ WinEDA_GerberFrame::WinEDA_GerberFrame( wxWindow* father,
|
||||||
SetBaseScreen( ScreenPcb );
|
SetBaseScreen( ScreenPcb );
|
||||||
ActiveScreen = ScreenPcb;
|
ActiveScreen = ScreenPcb;
|
||||||
|
|
||||||
LoadSettings();
|
SetBoard( new BOARD( NULL, this ) );
|
||||||
|
GetBoard()->SetEnabledLayers( FULL_LAYERS ); // All 32 layers enabled at first.
|
||||||
|
|
||||||
|
// Create the PCB_LAYER_WIDGET *after* SetBoard():
|
||||||
|
wxFont font = wxSystemSettings::GetFont( wxSYS_DEFAULT_GUI_FONT );
|
||||||
|
int pointSize = font.GetPointSize();
|
||||||
|
int screenHeight = wxSystemSettings::GetMetric( wxSYS_SCREEN_Y );
|
||||||
|
if( screenHeight <= 900 )
|
||||||
|
pointSize = (pointSize * 8) / 10;
|
||||||
|
m_LayersManager = new GERBER_LAYER_WIDGET( this, DrawPanel, pointSize );
|
||||||
|
|
||||||
|
// LoadSettings() *after* creating m_LayersManager, because LoadSettings()
|
||||||
|
// initialize parameters in m_LayersManager
|
||||||
|
LoadSettings();
|
||||||
SetSize( m_FramePos.x, m_FramePos.y, m_FrameSize.x, m_FrameSize.y );
|
SetSize( m_FramePos.x, m_FramePos.y, m_FrameSize.x, m_FrameSize.y );
|
||||||
GetScreen()->SetGrid( ID_POPUP_GRID_LEVEL_1000 + m_LastGridSizeId );
|
GetScreen()->SetGrid( ID_POPUP_GRID_LEVEL_1000 + m_LastGridSizeId );
|
||||||
|
|
||||||
|
@ -146,7 +161,6 @@ WinEDA_GerberFrame::WinEDA_GerberFrame( wxWindow* father,
|
||||||
ReCreateVToolbar();
|
ReCreateVToolbar();
|
||||||
ReCreateOptToolbar();
|
ReCreateOptToolbar();
|
||||||
|
|
||||||
#if defined(KICAD_AUIMANAGER)
|
|
||||||
m_auimgr.SetManagedWindow( this );
|
m_auimgr.SetManagedWindow( this );
|
||||||
|
|
||||||
wxAuiPaneInfo horiz;
|
wxAuiPaneInfo horiz;
|
||||||
|
@ -162,13 +176,23 @@ WinEDA_GerberFrame::WinEDA_GerberFrame( wxWindow* father,
|
||||||
vert.TopDockable( false ).BottomDockable( false );
|
vert.TopDockable( false ).BottomDockable( false );
|
||||||
horiz.LeftDockable( false ).RightDockable( false );
|
horiz.LeftDockable( false ).RightDockable( false );
|
||||||
|
|
||||||
|
// LAYER_WIDGET is floatable, but initially docked at far right
|
||||||
|
wxAuiPaneInfo lyrs;
|
||||||
|
lyrs.MinSize( m_LayersManager->GetBestSize() ); // updated in ReFillLayerWidget
|
||||||
|
lyrs.BestSize( m_LayersManager->GetBestSize() );
|
||||||
|
lyrs.CloseButton( false );
|
||||||
|
lyrs.Caption( _( "Visibles" ) );
|
||||||
|
lyrs.IsFloatable();
|
||||||
|
|
||||||
if( m_HToolBar )
|
if( m_HToolBar )
|
||||||
m_auimgr.AddPane( m_HToolBar,
|
m_auimgr.AddPane( m_HToolBar,
|
||||||
wxAuiPaneInfo( horiz ).Name( wxT( "m_HToolBar" ) ).Top().Row( 0 ) );
|
wxAuiPaneInfo( horiz ).Name( wxT( "m_HToolBar" ) ).Top().Row( 0 ) );
|
||||||
|
|
||||||
if( m_VToolBar )
|
if( m_VToolBar )
|
||||||
m_auimgr.AddPane( m_VToolBar,
|
m_auimgr.AddPane( m_VToolBar,
|
||||||
wxAuiPaneInfo( vert ).Name( wxT( "m_VToolBar" ) ).Right() );
|
wxAuiPaneInfo( vert ).Name( wxT( "m_VToolBar" ) ).Right().Row( 1 ) );
|
||||||
|
|
||||||
|
m_auimgr.AddPane( m_LayersManager, lyrs.Name( wxT( "m_LayersManagerToolBar" ) ).Right().Row( 0 ) );
|
||||||
|
|
||||||
if( m_OptionsToolBar )
|
if( m_OptionsToolBar )
|
||||||
m_auimgr.AddPane( m_OptionsToolBar,
|
m_auimgr.AddPane( m_OptionsToolBar,
|
||||||
|
@ -183,7 +207,8 @@ WinEDA_GerberFrame::WinEDA_GerberFrame( wxWindow* father,
|
||||||
wxAuiPaneInfo( horiz ).Name( wxT( "MsgPanel" ) ).Bottom() );
|
wxAuiPaneInfo( horiz ).Name( wxT( "MsgPanel" ) ).Bottom() );
|
||||||
|
|
||||||
m_auimgr.Update();
|
m_auimgr.Update();
|
||||||
#endif
|
|
||||||
|
ReFillLayerWidget(); // this is near end because contents establish size
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -197,34 +222,6 @@ WinEDA_GerberFrame::~WinEDA_GerberFrame()
|
||||||
|
|
||||||
void WinEDA_GerberFrame::OnCloseWindow( wxCloseEvent& Event )
|
void WinEDA_GerberFrame::OnCloseWindow( wxCloseEvent& Event )
|
||||||
{
|
{
|
||||||
PCB_SCREEN* screen = ScreenPcb;
|
|
||||||
|
|
||||||
#if 0 // unused currently
|
|
||||||
while( screen )
|
|
||||||
{
|
|
||||||
if( screen->IsModify() )
|
|
||||||
break;
|
|
||||||
screen = screen->Next();
|
|
||||||
}
|
|
||||||
|
|
||||||
if( screen )
|
|
||||||
{
|
|
||||||
if( !IsOK( this, _( "Layer modified, Continue ?" ) ) )
|
|
||||||
{
|
|
||||||
Event.Veto();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
while( screen ) // Modify delete flag to prevent further message.
|
|
||||||
{
|
|
||||||
screen->ClrModify();
|
|
||||||
screen = screen->Next();
|
|
||||||
}
|
|
||||||
|
|
||||||
SetBaseScreen( ActiveScreen = ScreenPcb );
|
|
||||||
|
|
||||||
SaveSettings();
|
SaveSettings();
|
||||||
Destroy();
|
Destroy();
|
||||||
}
|
}
|
||||||
|
@ -307,15 +304,23 @@ void WinEDA_GerberFrame::SetToolbars()
|
||||||
g_DisplayPolygonsModeSketch == 0 ? 0 : 1 );
|
g_DisplayPolygonsModeSketch == 0 ? 0 : 1 );
|
||||||
|
|
||||||
m_OptionsToolBar->ToggleTool( ID_TB_OPTIONS_SHOW_DCODES,
|
m_OptionsToolBar->ToggleTool( ID_TB_OPTIONS_SHOW_DCODES,
|
||||||
DisplayOpt.DisplayPadNum );
|
IsElementVisible( DCODES_VISIBLE) );
|
||||||
|
|
||||||
|
m_OptionsToolBar->ToggleTool( ID_TB_OPTIONS_SHOW_LAYERS_MANAGER_VERTICAL_TOOLBAR,
|
||||||
|
m_show_layer_manager_tools );
|
||||||
|
if( m_show_layer_manager_tools )
|
||||||
|
GetMenuBar()->SetLabel(ID_MENU_GERBVIEW_SHOW_HIDE_LAYERS_MANAGER_DIALOG,
|
||||||
|
_("Hide &Layers Manager" ) );
|
||||||
|
else
|
||||||
|
GetMenuBar()->SetLabel(ID_MENU_GERBVIEW_SHOW_HIDE_LAYERS_MANAGER_DIALOG,
|
||||||
|
_("Show &Layers Manager" ) );
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
DisplayUnitsMsg();
|
DisplayUnitsMsg();
|
||||||
|
|
||||||
#if defined(KICAD_AUIMANAGER)
|
|
||||||
if( m_auimgr.GetManagedWindow() )
|
if( m_auimgr.GetManagedWindow() )
|
||||||
m_auimgr.Update();
|
m_auimgr.Update();
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -356,6 +361,10 @@ void WinEDA_GerberFrame::LoadSettings()
|
||||||
{
|
{
|
||||||
m_Draw_Sheet_Ref = true;
|
m_Draw_Sheet_Ref = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
long tmp;
|
||||||
|
config->Read( GerbviewShowDCodes, &tmp, 1);
|
||||||
|
SetElementVisibility( DCODES_VISIBLE, tmp);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**************************************/
|
/**************************************/
|
||||||
|
@ -384,4 +393,71 @@ void WinEDA_GerberFrame::SaveSettings()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
config->Write( GerbviewShowPageSizeOption, pageSize_opt );
|
config->Write( GerbviewShowPageSizeOption, pageSize_opt );
|
||||||
|
config->Write( GerbviewShowDCodes, IsElementVisible( DCODES_VISIBLE) );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void WinEDA_GerberFrame::ReFillLayerWidget()
|
||||||
|
{
|
||||||
|
m_LayersManager->ReFill();
|
||||||
|
|
||||||
|
wxAuiPaneInfo& lyrs = m_auimgr.GetPane( m_LayersManager );
|
||||||
|
|
||||||
|
wxSize bestz = m_LayersManager->GetBestSize();
|
||||||
|
|
||||||
|
lyrs.MinSize( bestz );
|
||||||
|
lyrs.BestSize( bestz );
|
||||||
|
lyrs.FloatingSize( bestz );
|
||||||
|
|
||||||
|
if( lyrs.IsDocked() )
|
||||||
|
m_auimgr.Update();
|
||||||
|
else
|
||||||
|
m_LayersManager->SetSize( bestz );
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Function IsGridVisible() , virtual
|
||||||
|
* @return true if the grid must be shown
|
||||||
|
*/
|
||||||
|
bool WinEDA_GerberFrame::IsGridVisible()
|
||||||
|
{
|
||||||
|
return IsElementVisible(GERBER_GRID_VISIBLE);
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Function SetGridVisibility() , virtual
|
||||||
|
* It may be overloaded by derived classes
|
||||||
|
* if you want to store/retrieve the grid visiblity in configuration.
|
||||||
|
* @param aVisible = true if the grid must be shown
|
||||||
|
*/
|
||||||
|
void WinEDA_GerberFrame::SetGridVisibility(bool aVisible)
|
||||||
|
{
|
||||||
|
SetElementVisibility(GERBER_GRID_VISIBLE, aVisible);
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Function GetGridColor() , virtual
|
||||||
|
* @return the color of the grid
|
||||||
|
*/
|
||||||
|
int WinEDA_GerberFrame::GetGridColor()
|
||||||
|
{
|
||||||
|
return GetBoard()->GetVisibleElementColor( GERBER_GRID_VISIBLE );
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Function SetGridColor() , virtual
|
||||||
|
* @param aColor = the new color of the grid
|
||||||
|
*/
|
||||||
|
void WinEDA_GerberFrame::SetGridColor(int aColor)
|
||||||
|
{
|
||||||
|
GetBoard()->SetVisibleElementColor( GERBER_GRID_VISIBLE, aColor );
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Function SetElementVisibility
|
||||||
|
* changes the visibility of an element category
|
||||||
|
* @param aGERBER_VISIBLE is from the enum by the same name
|
||||||
|
* @param aNewState = The new visibility state of the element category
|
||||||
|
* @see enum aGERBER_VISIBLE
|
||||||
|
*/
|
||||||
|
void WinEDA_GerberFrame::SetElementVisibility( int aGERBER_VISIBLE, bool aNewState )
|
||||||
|
{
|
||||||
|
GetBoard()->SetElementVisibility( aGERBER_VISIBLE, aNewState );
|
||||||
|
m_LayersManager->SetRenderState( aGERBER_VISIBLE, aNewState );
|
||||||
}
|
}
|
||||||
|
|
|
@ -41,6 +41,7 @@ const wxString GerbviewProjectFileWildcard( _( "GerbView project files (.cnf)|*.
|
||||||
|
|
||||||
// Config keywords
|
// Config keywords
|
||||||
const wxString GerbviewShowPageSizeOption( wxT( "ShowPageSizeOpt" ) );
|
const wxString GerbviewShowPageSizeOption( wxT( "ShowPageSizeOpt" ) );
|
||||||
|
extern const wxString GerbviewShowDCodes( wxT( "ShowDCodesOpt" ) );
|
||||||
|
|
||||||
GERBER* g_GERBER_List[32];
|
GERBER* g_GERBER_List[32];
|
||||||
|
|
||||||
|
@ -105,9 +106,6 @@ bool WinEDA_App::OnInit()
|
||||||
|
|
||||||
/* Gerbview mainframe title */
|
/* Gerbview mainframe title */
|
||||||
frame->SetTitle( GetTitle() + wxT( " " ) + GetBuildVersion() );
|
frame->SetTitle( GetTitle() + wxT( " " ) + GetBuildVersion() );
|
||||||
frame->SetBoard( new BOARD( NULL, frame ) );
|
|
||||||
frame->GetBoard()->SetEnabledLayers( FULL_LAYERS ); // All 32 layers enabled at first.
|
|
||||||
|
|
||||||
|
|
||||||
// Initialize some display options
|
// Initialize some display options
|
||||||
DisplayOpt.DisplayPadIsol = false; // Pad clearance has no meaning
|
DisplayOpt.DisplayPadIsol = false; // Pad clearance has no meaning
|
||||||
|
|
|
@ -29,11 +29,11 @@ typedef enum
|
||||||
* Enum ITEM_VISIBLE
|
* Enum ITEM_VISIBLE
|
||||||
* is a set of visible PCB elements.
|
* is a set of visible PCB elements.
|
||||||
*/
|
*/
|
||||||
enum ITEM_VISIBLE
|
enum GERBER_VISIBLE
|
||||||
{
|
{
|
||||||
DCODES_VISIBLE,
|
DCODES_VISIBLE = 1, // visible item id cannot be 0 because this id is used as wxWidget id
|
||||||
|
GERBER_GRID_VISIBLE,
|
||||||
END_ITEM_VISIBLE_LIST // sentinel
|
END_GERBER_VISIBLE_LIST // sentinel
|
||||||
};
|
};
|
||||||
|
|
||||||
extern wxString g_PhotoFilenameExt;
|
extern wxString g_PhotoFilenameExt;
|
||||||
|
@ -52,6 +52,7 @@ extern Ki_PageDescr* g_GerberPageSizeList[];
|
||||||
|
|
||||||
// Config keywords
|
// Config keywords
|
||||||
extern const wxString GerbviewShowPageSizeOption;
|
extern const wxString GerbviewShowPageSizeOption;
|
||||||
|
extern const wxString GerbviewShowDCodes;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Enum APERTURE_T
|
* Enum APERTURE_T
|
||||||
|
|
|
@ -33,10 +33,6 @@ void WinEDA_GerberFrame::Process_Config( wxCommandEvent& event )
|
||||||
|
|
||||||
switch( id )
|
switch( id )
|
||||||
{
|
{
|
||||||
case ID_COLORS_SETUP:
|
|
||||||
DisplayColorSetupFrame( this, pos );
|
|
||||||
break;
|
|
||||||
|
|
||||||
case ID_CONFIG_REQ:
|
case ID_CONFIG_REQ:
|
||||||
{
|
{
|
||||||
InstallConfigFrame( pos );
|
InstallConfigFrame( pos );
|
||||||
|
|
|
@ -73,14 +73,6 @@ static PARAM_CFG_INT ViaFillCfg
|
||||||
TRUE
|
TRUE
|
||||||
);
|
);
|
||||||
|
|
||||||
static PARAM_CFG_BOOL PadShowNumCfg // Show DCodes
|
|
||||||
(
|
|
||||||
INSETUP,
|
|
||||||
wxT("PadSNum"),
|
|
||||||
&DisplayOpt.DisplayPadNum,
|
|
||||||
TRUE
|
|
||||||
);
|
|
||||||
|
|
||||||
static PARAM_CFG_SETCOLOR ColorLayer0Cfg
|
static PARAM_CFG_SETCOLOR ColorLayer0Cfg
|
||||||
(
|
(
|
||||||
INSETUP,
|
INSETUP,
|
||||||
|
@ -379,7 +371,6 @@ PARAM_CFG_BASE * ParamCfgList[] =
|
||||||
& SegmFillCfg,
|
& SegmFillCfg,
|
||||||
& PadFillCfg,
|
& PadFillCfg,
|
||||||
& ViaFillCfg, //TODO: Will adding this line break tha pcbnew file compatibility?
|
& ViaFillCfg, //TODO: Will adding this line break tha pcbnew file compatibility?
|
||||||
& PadShowNumCfg,
|
|
||||||
& ColorLayer0Cfg,
|
& ColorLayer0Cfg,
|
||||||
& ColorLayer1Cfg,
|
& ColorLayer1Cfg,
|
||||||
& ColorLayer2Cfg,
|
& ColorLayer2Cfg,
|
||||||
|
|
|
@ -19,11 +19,11 @@
|
||||||
class DIALOG_DISPLAY_OPTIONS : public DIALOG_DISPLAY_OPTIONS_BASE
|
class DIALOG_DISPLAY_OPTIONS : public DIALOG_DISPLAY_OPTIONS_BASE
|
||||||
{
|
{
|
||||||
private:
|
private:
|
||||||
WinEDA_BasePcbFrame* m_Parent;
|
WinEDA_GerberFrame* m_Parent;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
DIALOG_DISPLAY_OPTIONS( WinEDA_BasePcbFrame* parent );
|
DIALOG_DISPLAY_OPTIONS( WinEDA_GerberFrame* parent );
|
||||||
~DIALOG_DISPLAY_OPTIONS() {};
|
~DIALOG_DISPLAY_OPTIONS() {};
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
@ -40,7 +40,7 @@ void WinEDA_GerberFrame::InstallGerberDisplayOptionsDialog( wxCommandEvent& even
|
||||||
DrawPanel->Refresh();
|
DrawPanel->Refresh();
|
||||||
}
|
}
|
||||||
|
|
||||||
DIALOG_DISPLAY_OPTIONS::DIALOG_DISPLAY_OPTIONS( WinEDA_BasePcbFrame *parent) :
|
DIALOG_DISPLAY_OPTIONS::DIALOG_DISPLAY_OPTIONS( WinEDA_GerberFrame *parent) :
|
||||||
DIALOG_DISPLAY_OPTIONS_BASE( parent, wxID_ANY )
|
DIALOG_DISPLAY_OPTIONS_BASE( parent, wxID_ANY )
|
||||||
{
|
{
|
||||||
m_Parent = parent;
|
m_Parent = parent;
|
||||||
|
@ -76,7 +76,7 @@ DIALOG_DISPLAY_OPTIONS::DIALOG_DISPLAY_OPTIONS( WinEDA_BasePcbFrame *parent) :
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
m_OptDisplayDCodes->SetValue( DisplayOpt.DisplayPadNum );
|
m_OptDisplayDCodes->SetValue( m_Parent->IsElementVisible( DCODES_VISIBLE ) );
|
||||||
|
|
||||||
GetSizer()->Fit( this );
|
GetSizer()->Fit( this );
|
||||||
GetSizer()->SetSizeHints( this );
|
GetSizer()->SetSizeHints( this );
|
||||||
|
@ -113,7 +113,7 @@ void DIALOG_DISPLAY_OPTIONS::OnOKBUttonClick( wxCommandEvent& event )
|
||||||
else
|
else
|
||||||
g_DisplayPolygonsModeSketch = 0;
|
g_DisplayPolygonsModeSketch = 0;
|
||||||
|
|
||||||
DisplayOpt.DisplayPadNum = m_OptDisplayDCodes->GetValue();
|
m_Parent->SetElementVisibility( DCODES_VISIBLE, m_OptDisplayDCodes->GetValue() );
|
||||||
|
|
||||||
m_Parent->m_DisplayPadFill = m_Parent->m_DisplayViaFill =
|
m_Parent->m_DisplayPadFill = m_Parent->m_DisplayViaFill =
|
||||||
DisplayOpt.DisplayViaFill;
|
DisplayOpt.DisplayViaFill;
|
||||||
|
|
|
@ -15,11 +15,17 @@ enum gerbview_ids
|
||||||
{
|
{
|
||||||
ID_MAIN_MENUBAR = ID_END_LIST,
|
ID_MAIN_MENUBAR = ID_END_LIST,
|
||||||
|
|
||||||
ID_TOOLBARH_PCB_SELECT_LAYER,
|
ID_MENU_GERBVIEW_SHOW_HIDE_LAYERS_MANAGER_DIALOG,
|
||||||
ID_PCB_DELETE_ITEM_BUTT,
|
|
||||||
ID_PCB_GLOBAL_DELETE,
|
ID_TOOLBARH_GERBVIEW_SELECT_LAYER,
|
||||||
ID_POPUP_PCB_DELETE_TRACKSEG,
|
ID_GERBVIEW_DELETE_ITEM_BUTT,
|
||||||
ID_PCB_DISPLAY_OPTIONS_SETUP
|
ID_GERBVIEW_GLOBAL_DELETE,
|
||||||
|
ID_POPUP_GERBVIEW_DELETE_TRACKSEG,
|
||||||
|
ID_GERBVIEW_DISPLAY_OPTIONS_SETUP,
|
||||||
|
ID_TB_OPTIONS_SHOW_LAYERS_MANAGER_VERTICAL_TOOLBAR,
|
||||||
|
ID_TB_OPTIONS_SHOW_DCODES,
|
||||||
|
|
||||||
|
ID_GERBER_END_LIST
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif /* __GERBVIEW_IDS_H__ */
|
#endif /* __GERBVIEW_IDS_H__ */
|
||||||
|
|
|
@ -80,10 +80,6 @@ bool WinEDA_GerberFrame::OnRightClick( const wxPoint& MousePos,
|
||||||
switch( DrawStruct->Type() )
|
switch( DrawStruct->Type() )
|
||||||
{
|
{
|
||||||
case TYPE_TRACK:
|
case TYPE_TRACK:
|
||||||
|
|
||||||
// PopMenu->AppendSeparator();
|
|
||||||
// PopMenu->Append(ID_POPUP_PCB_EDIT_TRACK, _("Edit"));
|
|
||||||
// PopMenu->Append(ID_POPUP_PCB_DELETE_TRACKSEG, _("Delete"));
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -16,7 +16,7 @@
|
||||||
#include "gerbview.h"
|
#include "gerbview.h"
|
||||||
#include "protos.h"
|
#include "protos.h"
|
||||||
|
|
||||||
#include <wx/spinctrl.h>
|
#include "gerbview_id.h"
|
||||||
|
|
||||||
|
|
||||||
/** Function OnSelectOptionToolbar
|
/** Function OnSelectOptionToolbar
|
||||||
|
@ -25,11 +25,24 @@
|
||||||
void WinEDA_GerberFrame::OnSelectOptionToolbar( wxCommandEvent& event )
|
void WinEDA_GerberFrame::OnSelectOptionToolbar( wxCommandEvent& event )
|
||||||
{
|
{
|
||||||
int id = event.GetId();
|
int id = event.GetId();
|
||||||
|
bool state;
|
||||||
|
|
||||||
|
switch( id )
|
||||||
|
{
|
||||||
|
case ID_MENU_GERBVIEW_SHOW_HIDE_LAYERS_MANAGER_DIALOG:
|
||||||
|
state = ! m_show_layer_manager_tools;
|
||||||
|
id = ID_TB_OPTIONS_SHOW_LAYERS_MANAGER_VERTICAL_TOOLBAR;
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
state = m_OptionsToolBar->GetToolState( id );
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
switch( id )
|
switch( id )
|
||||||
{
|
{
|
||||||
case ID_TB_OPTIONS_SHOW_GRID:
|
case ID_TB_OPTIONS_SHOW_GRID:
|
||||||
SetGridVisibility( m_OptionsToolBar->GetToolState( id ) );
|
SetGridVisibility( state );
|
||||||
DrawPanel->Refresh( TRUE );
|
DrawPanel->Refresh( TRUE );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -45,17 +58,17 @@ void WinEDA_GerberFrame::OnSelectOptionToolbar( wxCommandEvent& event )
|
||||||
|
|
||||||
case ID_TB_OPTIONS_SHOW_POLAR_COORD:
|
case ID_TB_OPTIONS_SHOW_POLAR_COORD:
|
||||||
Affiche_Message( wxEmptyString );
|
Affiche_Message( wxEmptyString );
|
||||||
DisplayOpt.DisplayPolarCood = m_OptionsToolBar->GetToolState( id );
|
DisplayOpt.DisplayPolarCood = state;
|
||||||
UpdateStatusBar();
|
UpdateStatusBar();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ID_TB_OPTIONS_SELECT_CURSOR:
|
case ID_TB_OPTIONS_SELECT_CURSOR:
|
||||||
m_CursorShape = m_OptionsToolBar->GetToolState( id );
|
m_CursorShape = state;
|
||||||
DrawPanel->Refresh( TRUE );
|
DrawPanel->Refresh( TRUE );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ID_TB_OPTIONS_SHOW_PADS_SKETCH:
|
case ID_TB_OPTIONS_SHOW_PADS_SKETCH:
|
||||||
if( m_OptionsToolBar->GetToolState( id ) )
|
if( state )
|
||||||
{
|
{
|
||||||
DisplayOpt.DisplayPadFill = m_DisplayPadFill = false;
|
DisplayOpt.DisplayPadFill = m_DisplayPadFill = false;
|
||||||
}
|
}
|
||||||
|
@ -67,7 +80,7 @@ void WinEDA_GerberFrame::OnSelectOptionToolbar( wxCommandEvent& event )
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ID_TB_OPTIONS_SHOW_VIAS_SKETCH:
|
case ID_TB_OPTIONS_SHOW_VIAS_SKETCH:
|
||||||
if( m_OptionsToolBar->GetToolState( id ) )
|
if( state )
|
||||||
{
|
{
|
||||||
DisplayOpt.DisplayViaFill = m_DisplayViaFill = false;
|
DisplayOpt.DisplayViaFill = m_DisplayViaFill = false;
|
||||||
}
|
}
|
||||||
|
@ -79,7 +92,7 @@ void WinEDA_GerberFrame::OnSelectOptionToolbar( wxCommandEvent& event )
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ID_TB_OPTIONS_SHOW_TRACKS_SKETCH:
|
case ID_TB_OPTIONS_SHOW_TRACKS_SKETCH:
|
||||||
if( m_OptionsToolBar->GetToolState( id ) )
|
if(state )
|
||||||
{
|
{
|
||||||
m_DisplayPcbTrackFill = FALSE;
|
m_DisplayPcbTrackFill = FALSE;
|
||||||
DisplayOpt.DisplayPcbTrackFill = FALSE;
|
DisplayOpt.DisplayPcbTrackFill = FALSE;
|
||||||
|
@ -93,7 +106,7 @@ void WinEDA_GerberFrame::OnSelectOptionToolbar( wxCommandEvent& event )
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ID_TB_OPTIONS_SHOW_POLYGONS_SKETCH:
|
case ID_TB_OPTIONS_SHOW_POLYGONS_SKETCH:
|
||||||
if( m_OptionsToolBar->GetToolState( id ) ) // Polygons filled asked
|
if( state ) // Polygons filled asked
|
||||||
g_DisplayPolygonsModeSketch = 1;
|
g_DisplayPolygonsModeSketch = 1;
|
||||||
else
|
else
|
||||||
g_DisplayPolygonsModeSketch = 0;
|
g_DisplayPolygonsModeSketch = 0;
|
||||||
|
@ -101,10 +114,17 @@ void WinEDA_GerberFrame::OnSelectOptionToolbar( wxCommandEvent& event )
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ID_TB_OPTIONS_SHOW_DCODES:
|
case ID_TB_OPTIONS_SHOW_DCODES:
|
||||||
DisplayOpt.DisplayPadNum = m_OptionsToolBar->GetToolState( id );
|
SetElementVisibility( DCODES_VISIBLE, state );
|
||||||
DrawPanel->Refresh( TRUE );
|
DrawPanel->Refresh( TRUE );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case ID_TB_OPTIONS_SHOW_LAYERS_MANAGER_VERTICAL_TOOLBAR:
|
||||||
|
// show/hide auxiliary Vertical layers and visibility manager toolbar
|
||||||
|
m_show_layer_manager_tools = state;
|
||||||
|
m_auimgr.GetPane( wxT( "m_LayersManagerToolBar" ) ).Show( m_show_layer_manager_tools );
|
||||||
|
m_auimgr.Update();
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
DisplayError( this,
|
DisplayError( this,
|
||||||
wxT( "WinEDA_PcbFrame::OnSelectOptionToolbar error" ) );
|
wxT( "WinEDA_PcbFrame::OnSelectOptionToolbar error" ) );
|
||||||
|
|
|
@ -73,17 +73,18 @@ void WinEDA_GerberFrame::ReCreateMenuBar( void )
|
||||||
|
|
||||||
wxGetApp().m_fileHistory.AddFilesToMenu( filesMenu );
|
wxGetApp().m_fileHistory.AddFilesToMenu( filesMenu );
|
||||||
|
|
||||||
// Configuration:
|
// Configuration and preferences:
|
||||||
wxMenu* configmenu = new wxMenu;
|
wxMenu* configmenu = new wxMenu;
|
||||||
ADD_MENUITEM_WITH_HELP( configmenu, ID_CONFIG_REQ, _( "&File Ext" ),
|
ADD_MENUITEM_WITH_HELP( configmenu, ID_CONFIG_REQ, _( "&File Ext" ),
|
||||||
_( "Set files extensions" ), config_xpm );
|
_( "Set files extensions" ), config_xpm );
|
||||||
ADD_MENUITEM_WITH_HELP( configmenu, ID_COLORS_SETUP, _( "&Colors" ),
|
ADD_MENUITEM_WITH_HELP( configmenu, ID_MENU_GERBVIEW_SHOW_HIDE_LAYERS_MANAGER_DIALOG,
|
||||||
_( "Select colors and display for layers" ),
|
_( "Hide &Layers Manager" ),
|
||||||
palette_xpm );
|
_( "Show/hide the layers manager toolbar" ),
|
||||||
|
layers_manager_xpm );
|
||||||
ADD_MENUITEM_WITH_HELP( configmenu, ID_OPTIONS_SETUP, _( "&Options" ),
|
ADD_MENUITEM_WITH_HELP( configmenu, ID_OPTIONS_SETUP, _( "&Options" ),
|
||||||
_( "Select general options" ), preference_xpm );
|
_( "Select general options" ), preference_xpm );
|
||||||
|
|
||||||
ADD_MENUITEM_WITH_HELP( configmenu, ID_PCB_DISPLAY_OPTIONS_SETUP,
|
ADD_MENUITEM_WITH_HELP( configmenu, ID_GERBVIEW_DISPLAY_OPTIONS_SETUP,
|
||||||
_( "Display" ),
|
_( "Display" ),
|
||||||
_( "Select how items are displayed" ),
|
_( "Select how items are displayed" ),
|
||||||
display_options_xpm );
|
display_options_xpm );
|
||||||
|
@ -98,11 +99,6 @@ void WinEDA_GerberFrame::ReCreateMenuBar( void )
|
||||||
configmenu->AppendSeparator();
|
configmenu->AppendSeparator();
|
||||||
AddHotkeyConfigMenu( configmenu );
|
AddHotkeyConfigMenu( configmenu );
|
||||||
|
|
||||||
/* wxMenu *drill_menu = new wxMenu;
|
|
||||||
* postprocess_menu->Append(ID_PCB_GEN_DRILL_FILE, "Create &Drill file",
|
|
||||||
* "Gen Drill (EXCELLON] file and/or Drill sheet");
|
|
||||||
*/
|
|
||||||
|
|
||||||
wxMenu* miscellaneous_menu = new wxMenu;
|
wxMenu* miscellaneous_menu = new wxMenu;
|
||||||
ADD_MENUITEM_WITH_HELP( miscellaneous_menu, ID_GERBVIEW_SHOW_LIST_DCODES,
|
ADD_MENUITEM_WITH_HELP( miscellaneous_menu, ID_GERBVIEW_SHOW_LIST_DCODES,
|
||||||
_( "&List DCodes" ),
|
_( "&List DCodes" ),
|
||||||
|
@ -112,7 +108,7 @@ void WinEDA_GerberFrame::ReCreateMenuBar( void )
|
||||||
_( "Show source file for the current layer" ),
|
_( "Show source file for the current layer" ),
|
||||||
tools_xpm );
|
tools_xpm );
|
||||||
miscellaneous_menu->AppendSeparator();
|
miscellaneous_menu->AppendSeparator();
|
||||||
ADD_MENUITEM_WITH_HELP( miscellaneous_menu, ID_PCB_GLOBAL_DELETE,
|
ADD_MENUITEM_WITH_HELP( miscellaneous_menu, ID_GERBVIEW_GLOBAL_DELETE,
|
||||||
_( "&Delete Layer" ),
|
_( "&Delete Layer" ),
|
||||||
_( "Delete current layer" ), general_deletions_xpm );
|
_( "Delete current layer" ), general_deletions_xpm );
|
||||||
|
|
||||||
|
@ -155,10 +151,6 @@ void WinEDA_GerberFrame::ReCreateHToolbar( void )
|
||||||
|
|
||||||
m_HToolBar = new WinEDA_Toolbar( TOOLBAR_MAIN, this, ID_H_TOOLBAR, TRUE );
|
m_HToolBar = new WinEDA_Toolbar( TOOLBAR_MAIN, this, ID_H_TOOLBAR, TRUE );
|
||||||
|
|
||||||
#if !defined(KICAD_AUIMANAGER)
|
|
||||||
SetToolBar( (wxToolBar*)m_HToolBar );
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// Set up toolbar
|
// Set up toolbar
|
||||||
m_HToolBar->AddTool( ID_NEW_BOARD, wxEmptyString,
|
m_HToolBar->AddTool( ID_NEW_BOARD, wxEmptyString,
|
||||||
wxBitmap( new_xpm ),
|
wxBitmap( new_xpm ),
|
||||||
|
@ -168,33 +160,9 @@ void WinEDA_GerberFrame::ReCreateHToolbar( void )
|
||||||
wxBitmap( open_xpm ),
|
wxBitmap( open_xpm ),
|
||||||
_( "Open existing Layer" ) );
|
_( "Open existing Layer" ) );
|
||||||
|
|
||||||
#if 0
|
|
||||||
m_HToolBar->AddTool( ID_SAVE_PROJECT, wxEmptyString,
|
|
||||||
wxBitmap( save_button ),
|
|
||||||
_( "Save" ) );
|
|
||||||
|
|
||||||
m_HToolBar->AddSeparator();
|
|
||||||
m_HToolBar->AddTool( ID_SHEET_SET, wxEmptyString,
|
|
||||||
wxBitmap( sheetset_xpm ),
|
|
||||||
_( "page settings (size, texts)" ) );
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
m_HToolBar->AddSeparator();
|
m_HToolBar->AddSeparator();
|
||||||
|
|
||||||
#if 0
|
|
||||||
m_HToolBar->AddTool( wxID_CUT, wxEmptyString,
|
|
||||||
wxBitmap( cut_button ),
|
|
||||||
_( "Cut selected item" ) );
|
|
||||||
|
|
||||||
m_HToolBar->AddTool( wxID_COPY, wxEmptyString,
|
|
||||||
wxBitmap( copy_button ),
|
|
||||||
_( "Copy selected item" ) );
|
|
||||||
|
|
||||||
m_HToolBar->AddTool( wxID_PASTE, wxEmptyString,
|
|
||||||
wxBitmap( paste_xpm ),
|
|
||||||
_( "Paste" ) );
|
|
||||||
#endif
|
|
||||||
|
|
||||||
m_HToolBar->AddTool( wxID_UNDO, wxEmptyString,
|
m_HToolBar->AddTool( wxID_UNDO, wxEmptyString,
|
||||||
wxBitmap( undelete_xpm ),
|
wxBitmap( undelete_xpm ),
|
||||||
|
@ -243,7 +211,7 @@ void WinEDA_GerberFrame::ReCreateHToolbar( void )
|
||||||
}
|
}
|
||||||
|
|
||||||
m_SelLayerBox = new WinEDAChoiceBox( m_HToolBar,
|
m_SelLayerBox = new WinEDAChoiceBox( m_HToolBar,
|
||||||
ID_TOOLBARH_PCB_SELECT_LAYER,
|
ID_TOOLBARH_GERBVIEW_SELECT_LAYER,
|
||||||
wxDefaultPosition, wxSize( 150, -1 ),
|
wxDefaultPosition, wxSize( 150, -1 ),
|
||||||
choices );
|
choices );
|
||||||
m_SelLayerBox->SetSelection( GetScreen()->m_Active_Layer );
|
m_SelLayerBox->SetSelection( GetScreen()->m_Active_Layer );
|
||||||
|
@ -288,29 +256,8 @@ void WinEDA_GerberFrame::ReCreateVToolbar( void )
|
||||||
m_VToolBar->AddTool( ID_NO_SELECT_BUTT, wxEmptyString,
|
m_VToolBar->AddTool( ID_NO_SELECT_BUTT, wxEmptyString,
|
||||||
wxBitmap( cursor_xpm ) );
|
wxBitmap( cursor_xpm ) );
|
||||||
m_VToolBar->ToggleTool( ID_NO_SELECT_BUTT, TRUE );
|
m_VToolBar->ToggleTool( ID_NO_SELECT_BUTT, TRUE );
|
||||||
|
|
||||||
#if 0
|
|
||||||
m_VToolBar->AddSeparator();
|
m_VToolBar->AddSeparator();
|
||||||
m_VToolBar->AddTool( ID_COMPONENT_BUTT, wxEmptyString,
|
m_VToolBar->AddTool( ID_GERBVIEW_DELETE_ITEM_BUTT, wxEmptyString,
|
||||||
wxBitmap( component_button ),
|
|
||||||
_( "Add flashes" ) );
|
|
||||||
|
|
||||||
m_VToolBar->AddTool( ID_BUS_BUTT, wxEmptyString,
|
|
||||||
wxBitmap( bus_button ),
|
|
||||||
_( "Add lines" ) );
|
|
||||||
|
|
||||||
m_VToolBar->AddTool( ID_JUNCTION_BUTT, wxEmptyString,
|
|
||||||
wxBitmap( junction_xpm ),
|
|
||||||
_( "Add layer alignment target" ) );
|
|
||||||
|
|
||||||
m_VToolBar->AddSeparator();
|
|
||||||
m_VToolBar->AddTool( ID_PCB_ADD_TEXT_BUTT, wxEmptyString,
|
|
||||||
wxBitmap( tool_text_xpm ),
|
|
||||||
_( "Add text" ) );
|
|
||||||
|
|
||||||
#endif
|
|
||||||
m_VToolBar->AddSeparator();
|
|
||||||
m_VToolBar->AddTool( ID_PCB_DELETE_ITEM_BUTT, wxEmptyString,
|
|
||||||
wxBitmap( delete_body_xpm ),
|
wxBitmap( delete_body_xpm ),
|
||||||
_( "Delete items" ) );
|
_( "Delete items" ) );
|
||||||
|
|
||||||
|
@ -369,7 +316,16 @@ void WinEDA_GerberFrame::ReCreateOptToolbar( void )
|
||||||
wxBitmap( show_dcodenumber_xpm ),
|
wxBitmap( show_dcodenumber_xpm ),
|
||||||
_( "Show dcode number" ), wxITEM_CHECK );
|
_( "Show dcode number" ), wxITEM_CHECK );
|
||||||
|
|
||||||
m_OptionsToolBar->Realize();
|
// Tools to show/hide toolbars:
|
||||||
|
m_OptionsToolBar->AddSeparator();
|
||||||
|
m_OptionsToolBar->AddTool( ID_TB_OPTIONS_SHOW_LAYERS_MANAGER_VERTICAL_TOOLBAR,
|
||||||
|
wxEmptyString,
|
||||||
|
wxBitmap( layers_manager_xpm ),
|
||||||
|
_(
|
||||||
|
"Show/hide the layers manager toolbar" ),
|
||||||
|
wxITEM_CHECK );
|
||||||
|
|
||||||
|
|
||||||
|
m_OptionsToolBar->Realize();
|
||||||
SetToolbars();
|
SetToolbars();
|
||||||
}
|
}
|
||||||
|
|
|
@ -189,7 +189,7 @@ void WinEDA_GerberFrame::Trace_Gerber( wxDC* DC, int draw_mode, int printmasklay
|
||||||
|
|
||||||
SetPenMinWidth( tmp );
|
SetPenMinWidth( tmp );
|
||||||
|
|
||||||
if( DisplayOpt.DisplayPadNum )
|
if( IsElementVisible( DCODES_VISIBLE) )
|
||||||
Affiche_DCodes_Pistes( DrawPanel, DC, GetBoard(), GR_COPY );
|
Affiche_DCodes_Pistes( DrawPanel, DC, GetBoard(), GR_COPY );
|
||||||
|
|
||||||
GetScreen()->ClrRefreshReq();
|
GetScreen()->ClrRefreshReq();
|
||||||
|
|
|
@ -7,6 +7,7 @@
|
||||||
|
|
||||||
|
|
||||||
#include "id.h"
|
#include "id.h"
|
||||||
|
#include "class_gerbview_layer_widget.h"
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -37,10 +38,18 @@ class WinEDA_GerberFrame: this is the main window used in gerbview
|
||||||
|
|
||||||
class WinEDA_GerberFrame : public WinEDA_BasePcbFrame
|
class WinEDA_GerberFrame : public WinEDA_BasePcbFrame
|
||||||
{
|
{
|
||||||
|
friend class PCB_LAYER_WIDGET;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
GERBER_LAYER_WIDGET* m_LayersManager;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
WinEDAChoiceBox* m_SelLayerBox;
|
WinEDAChoiceBox* m_SelLayerBox;
|
||||||
WinEDAChoiceBox* m_SelLayerTool;
|
WinEDAChoiceBox* m_SelLayerTool;
|
||||||
|
|
||||||
|
private:
|
||||||
|
bool m_show_layer_manager_tools;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
WinEDA_GerberFrame( wxWindow* father, const wxString& title,
|
WinEDA_GerberFrame( wxWindow* father, const wxString& title,
|
||||||
const wxPoint& pos, const wxSize& size,
|
const wxPoint& pos, const wxSize& size,
|
||||||
|
@ -50,6 +59,64 @@ public:
|
||||||
|
|
||||||
void Update_config();
|
void Update_config();
|
||||||
void OnCloseWindow( wxCloseEvent& Event );
|
void OnCloseWindow( wxCloseEvent& Event );
|
||||||
|
|
||||||
|
/** Function IsGridVisible() , virtual
|
||||||
|
* @return true if the grid must be shown
|
||||||
|
*/
|
||||||
|
virtual bool IsGridVisible();
|
||||||
|
|
||||||
|
/** Function SetGridVisibility() , virtual
|
||||||
|
* It may be overloaded by derived classes
|
||||||
|
* if you want to store/retrieve the grid visiblity in configuration.
|
||||||
|
* @param aVisible = true if the grid must be shown
|
||||||
|
*/
|
||||||
|
virtual void SetGridVisibility(bool aVisible);
|
||||||
|
|
||||||
|
/** Function GetGridColor() , virtual
|
||||||
|
* @return the color of the grid
|
||||||
|
*/
|
||||||
|
virtual int GetGridColor();
|
||||||
|
|
||||||
|
/** Function SetGridColor() , virtual
|
||||||
|
* @param aColor = the new color of the grid
|
||||||
|
*/
|
||||||
|
virtual void SetGridColor(int aColor);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Function IsElementVisible
|
||||||
|
* tests whether a given element category is visible. Keep this as an
|
||||||
|
* inline function.
|
||||||
|
* @param aGERBER_VISIBLE is from the enum by the same name
|
||||||
|
* @return bool - true if the element is visible.
|
||||||
|
* @see enum PCB_VISIBLE
|
||||||
|
*/
|
||||||
|
bool IsElementVisible( int aGERBER_VISIBLE )
|
||||||
|
{
|
||||||
|
return GetBoard()->IsElementVisible( aGERBER_VISIBLE );
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Function SetElementVisibility
|
||||||
|
* changes the visibility of an element category
|
||||||
|
* @param aGERBER_VISIBLE is from the enum by the same name
|
||||||
|
* @param aNewState = The new visibility state of the element category
|
||||||
|
* @see enum PCB_VISIBLE
|
||||||
|
*/
|
||||||
|
void SetElementVisibility( int aGERBER_VISIBLE, bool aNewState );
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Function SetVisibleAlls
|
||||||
|
* Set the status of all visible element categories and layers to VISIBLE
|
||||||
|
*/
|
||||||
|
void SetVisibleAlls( );
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Function ReFillLayerWidget
|
||||||
|
* changes out all the layers in m_Layers and may be called upon
|
||||||
|
* loading a new BOARD.
|
||||||
|
*/
|
||||||
|
void ReFillLayerWidget();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Load applications settings specific to the PCBNew.
|
* Load applications settings specific to the PCBNew.
|
||||||
*
|
*
|
||||||
|
|
|
@ -231,7 +231,6 @@ enum main_id
|
||||||
ID_TB_OPTIONS_SHOW_TRACKS_SKETCH,
|
ID_TB_OPTIONS_SHOW_TRACKS_SKETCH,
|
||||||
ID_TB_OPTIONS_SHOW_MODULE_TEXT_SKETCH,
|
ID_TB_OPTIONS_SHOW_MODULE_TEXT_SKETCH,
|
||||||
ID_TB_OPTIONS_SHOW_MODULE_EDGE_SKETCH,
|
ID_TB_OPTIONS_SHOW_MODULE_EDGE_SKETCH,
|
||||||
ID_TB_OPTIONS_SHOW_DCODES,
|
|
||||||
ID_TB_OPTIONS_SHOW_HIGH_CONTRAST_MODE,
|
ID_TB_OPTIONS_SHOW_HIGH_CONTRAST_MODE,
|
||||||
ID_TB_OPTIONS_SHOW_EXTRA_VERTICAL_TOOLBAR1,
|
ID_TB_OPTIONS_SHOW_EXTRA_VERTICAL_TOOLBAR1,
|
||||||
ID_TB_OPTIONS_SHOW_POLYGONS_SKETCH,
|
ID_TB_OPTIONS_SHOW_POLYGONS_SKETCH,
|
||||||
|
|
Binary file not shown.
File diff suppressed because it is too large
Load Diff
|
@ -27,6 +27,7 @@ set(PCBNEW_SRCS
|
||||||
block.cpp
|
block.cpp
|
||||||
block_module_editor.cpp
|
block_module_editor.cpp
|
||||||
build_BOM_from_board.cpp
|
build_BOM_from_board.cpp
|
||||||
|
class_pcb_layer_widget.cpp
|
||||||
clean.cpp
|
clean.cpp
|
||||||
# cleaningoptions_dialog.cpp
|
# cleaningoptions_dialog.cpp
|
||||||
connect.cpp
|
connect.cpp
|
||||||
|
|
|
@ -0,0 +1,347 @@
|
||||||
|
/*
|
||||||
|
* This program source code file is part of KICAD, a free EDA CAD application.
|
||||||
|
*
|
||||||
|
* Copyright (C) 2004-2010 Jean-Pierre Charras, jean-pierre.charras@gpisa-lab.inpg.fr
|
||||||
|
* Copyright (C) 2010 SoftPLC Corporation, Dick Hollenbeck <dick@softplc.com>
|
||||||
|
* Copyright (C) 2010 Kicad Developers, see change_log.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
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/******************************************************/
|
||||||
|
/* class_pcb_layer_widget.cpp - Pcbnew layers manager */
|
||||||
|
/******************************************************/
|
||||||
|
|
||||||
|
#include "fctsys.h"
|
||||||
|
#include "appl_wxstruct.h"
|
||||||
|
#include "common.h"
|
||||||
|
#include "class_drawpanel.h"
|
||||||
|
#include "confirm.h"
|
||||||
|
#include "pcbnew.h"
|
||||||
|
#include "wxPcbStruct.h"
|
||||||
|
#include "pcbstruct.h" // enum PCB_VISIBLE
|
||||||
|
#include "collectors.h"
|
||||||
|
#include "bitmaps.h"
|
||||||
|
#include "pcbnew_id.h"
|
||||||
|
#include "layer_widget.h"
|
||||||
|
#include "class_pcb_layer_widget.h"
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Class PCB_LAYER_WIDGET
|
||||||
|
* is here to implement the abtract functions of LAYER_WIDGET so they
|
||||||
|
* may be tied into the WinEDA_PcbFrame's data and so we can add a popup
|
||||||
|
* menu which is specific to PCBNEW's needs.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
PCB_LAYER_WIDGET::PCB_LAYER_WIDGET( WinEDA_PcbFrame* aParent, wxWindow* aFocusOwner, int aPointSize ) :
|
||||||
|
LAYER_WIDGET( aParent, aFocusOwner, aPointSize ),
|
||||||
|
myframe( aParent )
|
||||||
|
{
|
||||||
|
BOARD* board = myframe->GetBoard();
|
||||||
|
|
||||||
|
// Fixed "Rendering" tab rows within the LAYER_WIDGET, only the initial color
|
||||||
|
// is changed before appending to the LAYER_WIDGET. This is an automatic variable
|
||||||
|
// not a static variable, change the color & state after copying from code to renderRows
|
||||||
|
// on the stack.
|
||||||
|
LAYER_WIDGET::ROW renderRows[16] = {
|
||||||
|
|
||||||
|
#define RR LAYER_WIDGET::ROW // Render Row abreviation to reduce source width
|
||||||
|
|
||||||
|
// text id color tooltip checked
|
||||||
|
RR( _( "Through Via" ), VIA_THROUGH_VISIBLE, WHITE, _( "Show through vias" ) ),
|
||||||
|
RR( _( "Bl/Buried Via" ), VIA_BBLIND_VISIBLE, WHITE, _( "Show blind or buried vias" ) ),
|
||||||
|
RR( _( "Micro Via" ), VIA_MICROVIA_VISIBLE, WHITE, _( "Show micro vias") ),
|
||||||
|
RR( _( "Ratsnest" ), RATSNEST_VISIBLE, WHITE, _( "Show unconnected nets as a ratsnest") ),
|
||||||
|
|
||||||
|
RR( _( "Pads Front" ), PAD_FR_VISIBLE, WHITE, _( "Show footprint pads on board's front" ) ),
|
||||||
|
RR( _( "Pads Back" ), PAD_BK_VISIBLE, WHITE, _( "Show footprint pads on board's back" ) ),
|
||||||
|
|
||||||
|
RR( _( "Text Front" ), MOD_TEXT_FR_VISIBLE, WHITE, _( "Show footprint text on board's back" ) ),
|
||||||
|
RR( _( "Text Back" ), MOD_TEXT_BK_VISIBLE, WHITE, _( "Show footprint text on board's back" ) ),
|
||||||
|
RR( _( "Hidden Text" ), MOD_TEXT_INVISIBLE, WHITE, _( "Show footprint text marked as invisible" ) ),
|
||||||
|
|
||||||
|
RR( _( "Anchors" ), ANCHOR_VISIBLE, WHITE, _( "Show footprint and text origins as a cross" ) ),
|
||||||
|
RR( _( "Grid" ), GRID_VISIBLE, WHITE, _( "Show the (x,y) grid dots" ) ),
|
||||||
|
RR( _( "No-Connects" ), NO_CONNECTS_VISIBLE, -1, _( "Show a marker on pads which have no net connected" ) ),
|
||||||
|
RR( _( "Modules Front" ), MOD_FR_VISIBLE, -1, _( "Show footprints that are on board's front") ),
|
||||||
|
RR( _( "Modules Back" ), MOD_BK_VISIBLE, -1, _( "Show footprints that are on board's back") ),
|
||||||
|
RR( _( "Values" ), MOD_VALUES_VISIBLE, -1, _( "Show footprint's values") ),
|
||||||
|
RR( _( "References" ), MOD_REFERENCES_VISIBLE, -1, _( "Show footprint's references") ),
|
||||||
|
};
|
||||||
|
|
||||||
|
for( unsigned row=0; row<DIM(renderRows); ++row )
|
||||||
|
{
|
||||||
|
if( renderRows[row].color != -1 ) // does this row show a color?
|
||||||
|
{
|
||||||
|
// this window frame must have an established BOARD, i.e. after SetBoard()
|
||||||
|
renderRows[row].color = board->GetVisibleElementColor( renderRows[row].id );
|
||||||
|
}
|
||||||
|
renderRows[row].state = board->IsElementVisible( renderRows[row].id );
|
||||||
|
}
|
||||||
|
|
||||||
|
AppendRenderRows( renderRows, DIM(renderRows) );
|
||||||
|
|
||||||
|
//-----<Popup menu>-------------------------------------------------
|
||||||
|
// handle the popup menu over the layer window.
|
||||||
|
m_LayerScrolledWindow->Connect( wxEVT_RIGHT_DOWN,
|
||||||
|
wxMouseEventHandler( PCB_LAYER_WIDGET::onRightDownLayers ), NULL, this );
|
||||||
|
|
||||||
|
// since Popupmenu() calls this->ProcessEvent() we must call this->Connect()
|
||||||
|
// and not m_LayerScrolledWindow->Connect()
|
||||||
|
Connect( ID_SHOW_ALL_COPPERS, ID_SHOW_NO_COPPERS, wxEVT_COMMAND_MENU_SELECTED,
|
||||||
|
wxCommandEventHandler( PCB_LAYER_WIDGET::onPopupSelection ), NULL, this );
|
||||||
|
|
||||||
|
// install the right click handler into each control at end of ReFill()
|
||||||
|
// using installRightLayerClickHandler
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void PCB_LAYER_WIDGET::installRightLayerClickHandler()
|
||||||
|
{
|
||||||
|
int rowCount = GetLayerRowCount();
|
||||||
|
for( int row=0; row<rowCount; ++row )
|
||||||
|
{
|
||||||
|
for( int col=0; col<LYR_COLUMN_COUNT; ++col )
|
||||||
|
{
|
||||||
|
wxWindow* w = getLayerComp( row, col );
|
||||||
|
|
||||||
|
w->Connect( wxEVT_RIGHT_DOWN, wxMouseEventHandler(
|
||||||
|
PCB_LAYER_WIDGET::onRightDownLayers ), NULL, this );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void PCB_LAYER_WIDGET::onRightDownLayers( wxMouseEvent& event )
|
||||||
|
{
|
||||||
|
wxMenu menu;
|
||||||
|
|
||||||
|
// menu text is capitalized:
|
||||||
|
// http://library.gnome.org/devel/hig-book/2.20/design-text-labels.html.en#layout-capitalization
|
||||||
|
menu.Append( new wxMenuItem( &menu, ID_SHOW_ALL_COPPERS,
|
||||||
|
_("Show All Cu") ) );
|
||||||
|
|
||||||
|
menu.Append( new wxMenuItem( &menu, ID_SHOW_NO_COPPERS,
|
||||||
|
_( "Hide All Cu" ) ) );
|
||||||
|
|
||||||
|
PopupMenu( &menu );
|
||||||
|
|
||||||
|
passOnFocus();
|
||||||
|
}
|
||||||
|
|
||||||
|
void PCB_LAYER_WIDGET::onPopupSelection( wxCommandEvent& event )
|
||||||
|
{
|
||||||
|
int rowCount;
|
||||||
|
int menuId = event.GetId();
|
||||||
|
bool visible;
|
||||||
|
|
||||||
|
switch( menuId )
|
||||||
|
{
|
||||||
|
case ID_SHOW_ALL_COPPERS:
|
||||||
|
visible = true;
|
||||||
|
goto L_change_coppers;
|
||||||
|
|
||||||
|
case ID_SHOW_NO_COPPERS:
|
||||||
|
visible = false;
|
||||||
|
L_change_coppers:
|
||||||
|
int lastCu = -1;
|
||||||
|
rowCount = GetLayerRowCount();
|
||||||
|
for( int row=rowCount-1; row>=0; --row )
|
||||||
|
{
|
||||||
|
wxCheckBox* cb = (wxCheckBox*) getLayerComp( row, 3 );
|
||||||
|
int layer = getDecodedId( cb->GetId() );
|
||||||
|
if( IsValidCopperLayerIndex( layer ) )
|
||||||
|
{
|
||||||
|
lastCu = row;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for( int row=0; row<rowCount; ++row )
|
||||||
|
{
|
||||||
|
wxCheckBox* cb = (wxCheckBox*) getLayerComp( row, 3 );
|
||||||
|
int layer = getDecodedId( cb->GetId() );
|
||||||
|
|
||||||
|
if( IsValidCopperLayerIndex( layer ) )
|
||||||
|
{
|
||||||
|
cb->SetValue( visible );
|
||||||
|
|
||||||
|
bool isLastCopperLayer = (row==lastCu);
|
||||||
|
|
||||||
|
OnLayerVisible( layer, visible, isLastCopperLayer );
|
||||||
|
|
||||||
|
if( isLastCopperLayer )
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void PCB_LAYER_WIDGET::ReFill()
|
||||||
|
{
|
||||||
|
BOARD* brd = myframe->GetBoard();
|
||||||
|
int layer;
|
||||||
|
|
||||||
|
int enabledLayers = brd->GetEnabledLayers();
|
||||||
|
|
||||||
|
// m_Layers->Freeze(); // no screen updates until done modifying
|
||||||
|
|
||||||
|
ClearLayerRows();
|
||||||
|
|
||||||
|
// show all coppers first, with front on top, back on bottom, then technical layers
|
||||||
|
|
||||||
|
layer = LAYER_N_FRONT;
|
||||||
|
if( enabledLayers & (1 << layer) )
|
||||||
|
{
|
||||||
|
AppendLayerRow( LAYER_WIDGET::ROW(
|
||||||
|
brd->GetLayerName( layer ), layer, brd->GetLayerColor( layer ), _("Front copper layer"), true ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
for( layer = LAYER_N_FRONT-1; layer >= 1; --layer )
|
||||||
|
{
|
||||||
|
if( enabledLayers & (1 << layer) )
|
||||||
|
{
|
||||||
|
AppendLayerRow( LAYER_WIDGET::ROW(
|
||||||
|
brd->GetLayerName( layer ), layer, brd->GetLayerColor( layer ), _("An innner copper layer"), true ) );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
layer = LAYER_N_BACK;
|
||||||
|
if( enabledLayers & (1 << layer) )
|
||||||
|
{
|
||||||
|
AppendLayerRow( LAYER_WIDGET::ROW(
|
||||||
|
brd->GetLayerName( layer ), layer, brd->GetLayerColor( layer ), _("Back copper layer"), true ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
// technical layers are shown in this order:
|
||||||
|
static const struct {
|
||||||
|
int layerId;
|
||||||
|
wxString tooltip;
|
||||||
|
} techLayerSeq[] = {
|
||||||
|
{ ADHESIVE_N_FRONT, _( "Adhesive on board's front" ) },
|
||||||
|
{ ADHESIVE_N_BACK, _( "Adhesive on board's back" ) },
|
||||||
|
{ SOLDERPASTE_N_FRONT, _( "Solder paste on board's front" )},
|
||||||
|
{ SOLDERPASTE_N_BACK, _( "Solder paste on board's back" ) },
|
||||||
|
{ SILKSCREEN_N_FRONT, _( "Silkscreen on board's front" ) },
|
||||||
|
{ SILKSCREEN_N_BACK, _( "Silkscreen on board's back" ) },
|
||||||
|
{ SOLDERMASK_N_FRONT, _( "Solder mask on board's front" ) },
|
||||||
|
{ SOLDERMASK_N_BACK, _( "Solder mask on board's back" ) },
|
||||||
|
{ DRAW_N, _( "Explanatory drawings" ) },
|
||||||
|
{ COMMENT_N, _( "Explanatory comments" ) },
|
||||||
|
{ ECO1_N, _( "TDB" ) },
|
||||||
|
{ ECO2_N, _( "TBD" ) },
|
||||||
|
{ EDGE_N, _( "Board's perimeter definition" ) },
|
||||||
|
};
|
||||||
|
|
||||||
|
for( unsigned i=0; i<DIM(techLayerSeq); ++i )
|
||||||
|
{
|
||||||
|
layer = techLayerSeq[i].layerId;
|
||||||
|
|
||||||
|
if( !(enabledLayers & (1 << layer)) )
|
||||||
|
continue;
|
||||||
|
|
||||||
|
AppendLayerRow( LAYER_WIDGET::ROW(
|
||||||
|
brd->GetLayerName( layer ), layer, brd->GetLayerColor( layer ),
|
||||||
|
techLayerSeq[i].tooltip, true ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
installRightLayerClickHandler();
|
||||||
|
|
||||||
|
// m_Layers->Thaw();
|
||||||
|
}
|
||||||
|
|
||||||
|
//-----<LAYER_WIDGET callbacks>-------------------------------------------
|
||||||
|
|
||||||
|
void PCB_LAYER_WIDGET::OnLayerColorChange( int aLayer, int aColor )
|
||||||
|
{
|
||||||
|
myframe->GetBoard()->SetLayerColor( aLayer, aColor );
|
||||||
|
myframe->DrawPanel->Refresh();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool PCB_LAYER_WIDGET::OnLayerSelect( int aLayer )
|
||||||
|
{
|
||||||
|
// the layer change from the PCB_LAYER_WIDGET can be denied by returning
|
||||||
|
// false from this function.
|
||||||
|
myframe->setActiveLayer( aLayer, false );
|
||||||
|
myframe->syncLayerBox();
|
||||||
|
if(DisplayOpt.ContrastModeDisplay)
|
||||||
|
myframe->DrawPanel->Refresh();
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void PCB_LAYER_WIDGET::OnLayerVisible( int aLayer, bool isVisible, bool isFinal )
|
||||||
|
{
|
||||||
|
BOARD* brd = myframe->GetBoard();
|
||||||
|
|
||||||
|
int visibleLayers = brd->GetVisibleLayers();
|
||||||
|
|
||||||
|
if( isVisible )
|
||||||
|
visibleLayers |= (1 << aLayer);
|
||||||
|
else
|
||||||
|
visibleLayers &= ~(1 << aLayer);
|
||||||
|
|
||||||
|
brd->SetVisibleLayers( visibleLayers );
|
||||||
|
|
||||||
|
if( isFinal )
|
||||||
|
myframe->DrawPanel->Refresh();
|
||||||
|
}
|
||||||
|
|
||||||
|
void PCB_LAYER_WIDGET::OnRenderColorChange( int aId, int aColor )
|
||||||
|
{
|
||||||
|
myframe->GetBoard()->SetVisibleElementColor( aId, aColor );
|
||||||
|
myframe->DrawPanel->Refresh();
|
||||||
|
}
|
||||||
|
|
||||||
|
void PCB_LAYER_WIDGET::OnRenderEnable( int aId, bool isEnabled )
|
||||||
|
{
|
||||||
|
BOARD* brd = myframe->GetBoard();
|
||||||
|
|
||||||
|
/* @todo:
|
||||||
|
|
||||||
|
move:
|
||||||
|
|
||||||
|
GRID_VISIBLE, ? maybe not this one
|
||||||
|
into m_VisibleElements and get rid of globals.
|
||||||
|
*/
|
||||||
|
|
||||||
|
switch( aId )
|
||||||
|
{
|
||||||
|
// see todo above, don't really want anything except IsElementVisible() here.
|
||||||
|
|
||||||
|
case GRID_VISIBLE:
|
||||||
|
// @todo, make read/write accessors for grid control so the write accessor can fire updates to
|
||||||
|
// grid state listeners. I think the grid state should be kept in the BOARD.
|
||||||
|
brd->SetElementVisibility( aId, isEnabled ); // set visibilty flag also in list, and myframe->m_Draw_Grid
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
brd->SetElementVisibility( aId, isEnabled );
|
||||||
|
}
|
||||||
|
|
||||||
|
myframe->DrawPanel->Refresh();
|
||||||
|
}
|
||||||
|
|
||||||
|
//-----</LAYER_WIDGET callbacks>------------------------------------------
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,81 @@
|
||||||
|
/*
|
||||||
|
* This program source code file is part of KICAD, a free EDA CAD application.
|
||||||
|
*
|
||||||
|
* Copyright (C) 2004-2010 Jean-Pierre Charras, jean-pierre.charras@gpisa-lab.inpg.fr
|
||||||
|
* Copyright (C) 2010 SoftPLC Corporation, Dick Hollenbeck <dick@softplc.com>
|
||||||
|
* Copyright (C) 2010 Kicad Developers, see change_log.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
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/************************************************************/
|
||||||
|
/* class_pcb_layer_widget.h : header for the layers manager */
|
||||||
|
/************************************************************/
|
||||||
|
|
||||||
|
#ifndef _CLASS_PCB_LAYER_WIDGET_H_
|
||||||
|
#define _CLASS_PCB_LAYER_WIDGET_H_
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Class PCB_LAYER_WIDGET
|
||||||
|
* is here to implement the abtract functions of LAYER_WIDGET so they
|
||||||
|
* may be tied into the WinEDA_PcbFrame's data and so we can add a popup
|
||||||
|
* menu which is specific to PCBNEW's needs.
|
||||||
|
*/
|
||||||
|
class PCB_LAYER_WIDGET : public LAYER_WIDGET
|
||||||
|
{
|
||||||
|
WinEDA_PcbFrame* myframe;
|
||||||
|
|
||||||
|
// popup menu ids.
|
||||||
|
#define ID_SHOW_ALL_COPPERS wxID_HIGHEST
|
||||||
|
#define ID_SHOW_NO_COPPERS (wxID_HIGHEST+1)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Function OnRightDownLayers
|
||||||
|
* puts up a popup menu for the layer panel.
|
||||||
|
*/
|
||||||
|
void onRightDownLayers( wxMouseEvent& event );
|
||||||
|
|
||||||
|
void onPopupSelection( wxCommandEvent& event );
|
||||||
|
|
||||||
|
/// this is for the popup menu, the right click handler has to be installed
|
||||||
|
/// on every child control within the layer panel.
|
||||||
|
void installRightLayerClickHandler();
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructor
|
||||||
|
* @param aPointSize is the font point size to use within the widget. This
|
||||||
|
* effectively sets the overal size of the widget via the row height and bitmap
|
||||||
|
* button sizes.
|
||||||
|
*/
|
||||||
|
PCB_LAYER_WIDGET( WinEDA_PcbFrame* aParent, wxWindow* aFocusOwner, int aPointSize = 10 );
|
||||||
|
|
||||||
|
void ReFill();
|
||||||
|
|
||||||
|
//-----<implement LAYER_WIDGET abstract callback functions>-----------
|
||||||
|
void OnLayerColorChange( int aLayer, int aColor );
|
||||||
|
bool OnLayerSelect( int aLayer );
|
||||||
|
void OnLayerVisible( int aLayer, bool isVisible, bool isFinal );
|
||||||
|
void OnRenderColorChange( int aId, int aColor );
|
||||||
|
void OnRenderEnable( int aId, bool isEnabled );
|
||||||
|
//-----</implement LAYER_WIDGET abstract callback functions>----------
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // _CLASS_PCB_LAYER_WIDGET_H_
|
|
@ -44,18 +44,6 @@ void Dialog_GeneralOptions::init()
|
||||||
wxString timevalue;
|
wxString timevalue;
|
||||||
timevalue << g_TimeOut / 60;
|
timevalue << g_TimeOut / 60;
|
||||||
m_SaveTime->SetValue( timevalue );
|
m_SaveTime->SetValue( timevalue );
|
||||||
|
|
||||||
/*
|
|
||||||
* int layer_count[] = {1,2,4,6,8,10,12,14,16};
|
|
||||||
* m_LayerNumber->SetSelection(1);
|
|
||||||
* for ( unsigned ii = 0; ii < sizeof(layer_count); ii++ )
|
|
||||||
* {
|
|
||||||
* if ( g_DesignSettings.m_CopperLayerCount != layer_count[ii] )
|
|
||||||
* continue;
|
|
||||||
* m_LayerNumber->SetSelection(ii);
|
|
||||||
* break;
|
|
||||||
* }
|
|
||||||
*/
|
|
||||||
m_MaxShowLinks->SetValue( g_MaxLinksShowed );
|
m_MaxShowLinks->SetValue( g_MaxLinksShowed );
|
||||||
|
|
||||||
m_DrcOn->SetValue( Drc_On );
|
m_DrcOn->SetValue( Drc_On );
|
||||||
|
@ -249,21 +237,11 @@ void WinEDA_PcbFrame::OnSelectOptionToolbar( wxCommandEvent& event )
|
||||||
|
|
||||||
case ID_TB_OPTIONS_SHOW_EXTRA_VERTICAL_TOOLBAR1:
|
case ID_TB_OPTIONS_SHOW_EXTRA_VERTICAL_TOOLBAR1:
|
||||||
m_show_microwave_tools = state;
|
m_show_microwave_tools = state;
|
||||||
#if !defined(KICAD_AUIMANAGER)
|
|
||||||
// show auxiliary Vertical toolbar (Microwave tool)
|
|
||||||
m_AuxVToolBar->Show(m_show_microwave_tools);
|
|
||||||
{
|
|
||||||
wxSizeEvent SizeEv( GetSize() );
|
|
||||||
OnSize( SizeEv );
|
|
||||||
}
|
|
||||||
#else
|
|
||||||
m_auimgr.GetPane( wxT( "m_AuxVToolBar" ) ).Show( m_show_microwave_tools );
|
m_auimgr.GetPane( wxT( "m_AuxVToolBar" ) ).Show( m_show_microwave_tools );
|
||||||
m_auimgr.Update();
|
m_auimgr.Update();
|
||||||
#endif
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ID_TB_OPTIONS_SHOW_MANAGE_LAYERS_VERTICAL_TOOLBAR:
|
case ID_TB_OPTIONS_SHOW_LAYERS_MANAGER_VERTICAL_TOOLBAR:
|
||||||
#if defined(KICAD_AUIMANAGER)
|
|
||||||
// show auxiliary Vertical layers and visibility manager toolbar
|
// show auxiliary Vertical layers and visibility manager toolbar
|
||||||
m_show_layer_manager_tools = state;
|
m_show_layer_manager_tools = state;
|
||||||
m_auimgr.GetPane( wxT( "m_LayersManagerToolBar" ) ).Show( m_show_layer_manager_tools );
|
m_auimgr.GetPane( wxT( "m_LayersManagerToolBar" ) ).Show( m_show_layer_manager_tools );
|
||||||
|
@ -274,7 +252,6 @@ void WinEDA_PcbFrame::OnSelectOptionToolbar( wxCommandEvent& event )
|
||||||
else
|
else
|
||||||
GetMenuBar()->SetLabel(ID_MENU_PCB_SHOW_HIDE_LAYERS_MANAGER_DIALOG,
|
GetMenuBar()->SetLabel(ID_MENU_PCB_SHOW_HIDE_LAYERS_MANAGER_DIALOG,
|
||||||
_("Show &Layers Manager" ) );
|
_("Show &Layers Manager" ) );
|
||||||
#endif
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
|
|
|
@ -397,7 +397,7 @@ void WinEDA_PcbFrame::ReCreateMenuBar()
|
||||||
item = new wxMenuItem( configmenu, ID_MENU_PCB_SHOW_HIDE_LAYERS_MANAGER_DIALOG,
|
item = new wxMenuItem( configmenu, ID_MENU_PCB_SHOW_HIDE_LAYERS_MANAGER_DIALOG,
|
||||||
_( "Hide &Layers Manager" ),
|
_( "Hide &Layers Manager" ),
|
||||||
_( "Show/hide the layers manager toolbar" ) );
|
_( "Show/hide the layers manager toolbar" ) );
|
||||||
item->SetBitmap( palette_xpm );
|
item->SetBitmap( layers_manager_xpm );
|
||||||
configmenu->Append( item );
|
configmenu->Append( item );
|
||||||
|
|
||||||
/* General */
|
/* General */
|
||||||
|
|
|
@ -45,350 +45,7 @@
|
||||||
#include "kbool/include/kbool/booleng.h"
|
#include "kbool/include/kbool/booleng.h"
|
||||||
#include "layer_widget.h"
|
#include "layer_widget.h"
|
||||||
#include "dialog_design_rules.h"
|
#include "dialog_design_rules.h"
|
||||||
|
#include "class_pcb_layer_widget.h"
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Class PCB_LAYER_WIDGET
|
|
||||||
* is here to implement the abtract functions of LAYER_WIDGET so they
|
|
||||||
* may be tied into the WinEDA_PcbFrame's data and so we can add a popup
|
|
||||||
* menu which is specific to PCBNEW's needs.
|
|
||||||
*/
|
|
||||||
class PCB_LAYER_WIDGET : public LAYER_WIDGET
|
|
||||||
{
|
|
||||||
WinEDA_PcbFrame* myframe;
|
|
||||||
|
|
||||||
// popup menu ids.
|
|
||||||
#define ID_SHOW_ALL_COPPERS wxID_HIGHEST
|
|
||||||
#define ID_SHOW_NO_COPPERS (wxID_HIGHEST+1)
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Function OnRightDownLayers
|
|
||||||
* puts up a popup menu for the layer panel.
|
|
||||||
*/
|
|
||||||
void onRightDownLayers( wxMouseEvent& event );
|
|
||||||
|
|
||||||
void onPopupSelection( wxCommandEvent& event );
|
|
||||||
|
|
||||||
/// this is for the popup menu, the right click handler has to be installed
|
|
||||||
/// on every child control within the layer panel.
|
|
||||||
void installRightLayerClickHandler();
|
|
||||||
|
|
||||||
public:
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Constructor
|
|
||||||
* @param aPointSize is the font point size to use within the widget. This
|
|
||||||
* effectively sets the overal size of the widget via the row height and bitmap
|
|
||||||
* button sizes.
|
|
||||||
*/
|
|
||||||
PCB_LAYER_WIDGET( WinEDA_PcbFrame* aParent, wxWindow* aFocusOwner, int aPointSize = 10 );
|
|
||||||
|
|
||||||
void ReFill();
|
|
||||||
|
|
||||||
//-----<implement LAYER_WIDGET abstract callback functions>-----------
|
|
||||||
void OnLayerColorChange( int aLayer, int aColor );
|
|
||||||
bool OnLayerSelect( int aLayer );
|
|
||||||
void OnLayerVisible( int aLayer, bool isVisible, bool isFinal );
|
|
||||||
void OnRenderColorChange( int aId, int aColor );
|
|
||||||
void OnRenderEnable( int aId, bool isEnabled );
|
|
||||||
//-----</implement LAYER_WIDGET abstract callback functions>----------
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
PCB_LAYER_WIDGET::PCB_LAYER_WIDGET( WinEDA_PcbFrame* aParent, wxWindow* aFocusOwner, int aPointSize ) :
|
|
||||||
LAYER_WIDGET( aParent, aFocusOwner, aPointSize ),
|
|
||||||
myframe( aParent )
|
|
||||||
{
|
|
||||||
BOARD* board = myframe->GetBoard();
|
|
||||||
|
|
||||||
// Fixed "Rendering" tab rows within the LAYER_WIDGET, only the initial color
|
|
||||||
// is changed before appending to the LAYER_WIDGET. This is an automatic variable
|
|
||||||
// not a static variable, change the color & state after copying from code to renderRows
|
|
||||||
// on the stack.
|
|
||||||
LAYER_WIDGET::ROW renderRows[16] = {
|
|
||||||
|
|
||||||
#define RR LAYER_WIDGET::ROW // Render Row abreviation to reduce source width
|
|
||||||
|
|
||||||
// text id color tooltip checked
|
|
||||||
RR( _( "Through Via" ), VIA_THROUGH_VISIBLE, WHITE, _( "Show through vias" ) ),
|
|
||||||
RR( _( "Bl/Buried Via" ), VIA_BBLIND_VISIBLE, WHITE, _( "Show blind or buried vias" ) ),
|
|
||||||
RR( _( "Micro Via" ), VIA_MICROVIA_VISIBLE, WHITE, _( "Show micro vias") ),
|
|
||||||
RR( _( "Ratsnest" ), RATSNEST_VISIBLE, WHITE, _( "Show unconnected nets as a ratsnest") ),
|
|
||||||
|
|
||||||
RR( _( "Pads Front" ), PAD_FR_VISIBLE, WHITE, _( "Show footprint pads on board's front" ) ),
|
|
||||||
RR( _( "Pads Back" ), PAD_BK_VISIBLE, WHITE, _( "Show footprint pads on board's back" ) ),
|
|
||||||
|
|
||||||
RR( _( "Text Front" ), MOD_TEXT_FR_VISIBLE, WHITE, _( "Show footprint text on board's back" ) ),
|
|
||||||
RR( _( "Text Back" ), MOD_TEXT_BK_VISIBLE, WHITE, _( "Show footprint text on board's back" ) ),
|
|
||||||
RR( _( "Hidden Text" ), MOD_TEXT_INVISIBLE, WHITE, _( "Show footprint text marked as invisible" ) ),
|
|
||||||
|
|
||||||
RR( _( "Anchors" ), ANCHOR_VISIBLE, WHITE, _( "Show footprint and text origins as a cross" ) ),
|
|
||||||
RR( _( "Grid" ), GRID_VISIBLE, WHITE, _( "Show the (x,y) grid dots" ) ),
|
|
||||||
RR( _( "No-Connects" ), NO_CONNECTS_VISIBLE, -1, _( "Show a marker on pads which have no net connected" ) ),
|
|
||||||
RR( _( "Modules Front" ), MOD_FR_VISIBLE, -1, _( "Show footprints that are on board's front") ),
|
|
||||||
RR( _( "Modules Back" ), MOD_BK_VISIBLE, -1, _( "Show footprints that are on board's back") ),
|
|
||||||
RR( _( "Values" ), MOD_VALUES_VISIBLE, -1, _( "Show footprint's values") ),
|
|
||||||
RR( _( "References" ), MOD_REFERENCES_VISIBLE, -1, _( "Show footprint's references") ),
|
|
||||||
};
|
|
||||||
|
|
||||||
for( unsigned row=0; row<DIM(renderRows); ++row )
|
|
||||||
{
|
|
||||||
if( renderRows[row].color != -1 ) // does this row show a color?
|
|
||||||
{
|
|
||||||
// this window frame must have an established BOARD, i.e. after SetBoard()
|
|
||||||
renderRows[row].color = board->GetVisibleElementColor( renderRows[row].id );
|
|
||||||
}
|
|
||||||
renderRows[row].state = board->IsElementVisible( renderRows[row].id );
|
|
||||||
}
|
|
||||||
|
|
||||||
AppendRenderRows( renderRows, DIM(renderRows) );
|
|
||||||
|
|
||||||
//-----<Popup menu>-------------------------------------------------
|
|
||||||
// handle the popup menu over the layer window.
|
|
||||||
m_LayerScrolledWindow->Connect( wxEVT_RIGHT_DOWN,
|
|
||||||
wxMouseEventHandler( PCB_LAYER_WIDGET::onRightDownLayers ), NULL, this );
|
|
||||||
|
|
||||||
// since Popupmenu() calls this->ProcessEvent() we must call this->Connect()
|
|
||||||
// and not m_LayerScrolledWindow->Connect()
|
|
||||||
Connect( ID_SHOW_ALL_COPPERS, ID_SHOW_NO_COPPERS, wxEVT_COMMAND_MENU_SELECTED,
|
|
||||||
wxCommandEventHandler( PCB_LAYER_WIDGET::onPopupSelection ), NULL, this );
|
|
||||||
|
|
||||||
// install the right click handler into each control at end of ReFill()
|
|
||||||
// using installRightLayerClickHandler
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void PCB_LAYER_WIDGET::installRightLayerClickHandler()
|
|
||||||
{
|
|
||||||
int rowCount = GetLayerRowCount();
|
|
||||||
for( int row=0; row<rowCount; ++row )
|
|
||||||
{
|
|
||||||
for( int col=0; col<LYR_COLUMN_COUNT; ++col )
|
|
||||||
{
|
|
||||||
wxWindow* w = getLayerComp( row, col );
|
|
||||||
|
|
||||||
w->Connect( wxEVT_RIGHT_DOWN, wxMouseEventHandler(
|
|
||||||
PCB_LAYER_WIDGET::onRightDownLayers ), NULL, this );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void PCB_LAYER_WIDGET::onRightDownLayers( wxMouseEvent& event )
|
|
||||||
{
|
|
||||||
wxMenu menu;
|
|
||||||
|
|
||||||
// menu text is capitalized:
|
|
||||||
// http://library.gnome.org/devel/hig-book/2.20/design-text-labels.html.en#layout-capitalization
|
|
||||||
menu.Append( new wxMenuItem( &menu, ID_SHOW_ALL_COPPERS,
|
|
||||||
_("Show All Cu") ) );
|
|
||||||
|
|
||||||
menu.Append( new wxMenuItem( &menu, ID_SHOW_NO_COPPERS,
|
|
||||||
_( "Hide All Cu" ) ) );
|
|
||||||
|
|
||||||
PopupMenu( &menu );
|
|
||||||
|
|
||||||
passOnFocus();
|
|
||||||
}
|
|
||||||
|
|
||||||
void PCB_LAYER_WIDGET::onPopupSelection( wxCommandEvent& event )
|
|
||||||
{
|
|
||||||
int rowCount;
|
|
||||||
int menuId = event.GetId();
|
|
||||||
bool visible;
|
|
||||||
|
|
||||||
switch( menuId )
|
|
||||||
{
|
|
||||||
case ID_SHOW_ALL_COPPERS:
|
|
||||||
visible = true;
|
|
||||||
goto L_change_coppers;
|
|
||||||
|
|
||||||
case ID_SHOW_NO_COPPERS:
|
|
||||||
visible = false;
|
|
||||||
L_change_coppers:
|
|
||||||
int lastCu = -1;
|
|
||||||
rowCount = GetLayerRowCount();
|
|
||||||
for( int row=rowCount-1; row>=0; --row )
|
|
||||||
{
|
|
||||||
wxCheckBox* cb = (wxCheckBox*) getLayerComp( row, 3 );
|
|
||||||
int layer = getDecodedId( cb->GetId() );
|
|
||||||
if( IsValidCopperLayerIndex( layer ) )
|
|
||||||
{
|
|
||||||
lastCu = row;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for( int row=0; row<rowCount; ++row )
|
|
||||||
{
|
|
||||||
wxCheckBox* cb = (wxCheckBox*) getLayerComp( row, 3 );
|
|
||||||
int layer = getDecodedId( cb->GetId() );
|
|
||||||
|
|
||||||
if( IsValidCopperLayerIndex( layer ) )
|
|
||||||
{
|
|
||||||
cb->SetValue( visible );
|
|
||||||
|
|
||||||
bool isLastCopperLayer = (row==lastCu);
|
|
||||||
|
|
||||||
OnLayerVisible( layer, visible, isLastCopperLayer );
|
|
||||||
|
|
||||||
if( isLastCopperLayer )
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void PCB_LAYER_WIDGET::ReFill()
|
|
||||||
{
|
|
||||||
BOARD* brd = myframe->GetBoard();
|
|
||||||
int layer;
|
|
||||||
|
|
||||||
int enabledLayers = brd->GetEnabledLayers();
|
|
||||||
|
|
||||||
// m_Layers->Freeze(); // no screen updates until done modifying
|
|
||||||
|
|
||||||
ClearLayerRows();
|
|
||||||
|
|
||||||
// show all coppers first, with front on top, back on bottom, then technical layers
|
|
||||||
|
|
||||||
layer = LAYER_N_FRONT;
|
|
||||||
if( enabledLayers & (1 << layer) )
|
|
||||||
{
|
|
||||||
AppendLayerRow( LAYER_WIDGET::ROW(
|
|
||||||
brd->GetLayerName( layer ), layer, brd->GetLayerColor( layer ), _("Front copper layer"), true ) );
|
|
||||||
}
|
|
||||||
|
|
||||||
for( layer = LAYER_N_FRONT-1; layer >= 1; --layer )
|
|
||||||
{
|
|
||||||
if( enabledLayers & (1 << layer) )
|
|
||||||
{
|
|
||||||
AppendLayerRow( LAYER_WIDGET::ROW(
|
|
||||||
brd->GetLayerName( layer ), layer, brd->GetLayerColor( layer ), _("An innner copper layer"), true ) );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
layer = LAYER_N_BACK;
|
|
||||||
if( enabledLayers & (1 << layer) )
|
|
||||||
{
|
|
||||||
AppendLayerRow( LAYER_WIDGET::ROW(
|
|
||||||
brd->GetLayerName( layer ), layer, brd->GetLayerColor( layer ), _("Back copper layer"), true ) );
|
|
||||||
}
|
|
||||||
|
|
||||||
// technical layers are shown in this order:
|
|
||||||
static const struct {
|
|
||||||
int layerId;
|
|
||||||
wxString tooltip;
|
|
||||||
} techLayerSeq[] = {
|
|
||||||
{ ADHESIVE_N_FRONT, _( "Adhesive on board's front" ) },
|
|
||||||
{ ADHESIVE_N_BACK, _( "Adhesive on board's back" ) },
|
|
||||||
{ SOLDERPASTE_N_FRONT, _( "Solder paste on board's front" )},
|
|
||||||
{ SOLDERPASTE_N_BACK, _( "Solder paste on board's back" ) },
|
|
||||||
{ SILKSCREEN_N_FRONT, _( "Silkscreen on board's front" ) },
|
|
||||||
{ SILKSCREEN_N_BACK, _( "Silkscreen on board's back" ) },
|
|
||||||
{ SOLDERMASK_N_FRONT, _( "Solder mask on board's front" ) },
|
|
||||||
{ SOLDERMASK_N_BACK, _( "Solder mask on board's back" ) },
|
|
||||||
{ DRAW_N, _( "Explanatory drawings" ) },
|
|
||||||
{ COMMENT_N, _( "Explanatory comments" ) },
|
|
||||||
{ ECO1_N, _( "TDB" ) },
|
|
||||||
{ ECO2_N, _( "TBD" ) },
|
|
||||||
{ EDGE_N, _( "Board's perimeter definition" ) },
|
|
||||||
};
|
|
||||||
|
|
||||||
for( unsigned i=0; i<DIM(techLayerSeq); ++i )
|
|
||||||
{
|
|
||||||
layer = techLayerSeq[i].layerId;
|
|
||||||
|
|
||||||
if( !(enabledLayers & (1 << layer)) )
|
|
||||||
continue;
|
|
||||||
|
|
||||||
AppendLayerRow( LAYER_WIDGET::ROW(
|
|
||||||
brd->GetLayerName( layer ), layer, brd->GetLayerColor( layer ),
|
|
||||||
techLayerSeq[i].tooltip, true ) );
|
|
||||||
}
|
|
||||||
|
|
||||||
installRightLayerClickHandler();
|
|
||||||
|
|
||||||
// m_Layers->Thaw();
|
|
||||||
}
|
|
||||||
|
|
||||||
//-----<LAYER_WIDGET callbacks>-------------------------------------------
|
|
||||||
|
|
||||||
void PCB_LAYER_WIDGET::OnLayerColorChange( int aLayer, int aColor )
|
|
||||||
{
|
|
||||||
myframe->GetBoard()->SetLayerColor( aLayer, aColor );
|
|
||||||
myframe->DrawPanel->Refresh();
|
|
||||||
}
|
|
||||||
|
|
||||||
bool PCB_LAYER_WIDGET::OnLayerSelect( int aLayer )
|
|
||||||
{
|
|
||||||
// the layer change from the PCB_LAYER_WIDGET can be denied by returning
|
|
||||||
// false from this function.
|
|
||||||
myframe->setActiveLayer( aLayer, false );
|
|
||||||
myframe->syncLayerBox();
|
|
||||||
if(DisplayOpt.ContrastModeDisplay)
|
|
||||||
myframe->DrawPanel->Refresh();
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
void PCB_LAYER_WIDGET::OnLayerVisible( int aLayer, bool isVisible, bool isFinal )
|
|
||||||
{
|
|
||||||
BOARD* brd = myframe->GetBoard();
|
|
||||||
|
|
||||||
int visibleLayers = brd->GetVisibleLayers();
|
|
||||||
|
|
||||||
if( isVisible )
|
|
||||||
visibleLayers |= (1 << aLayer);
|
|
||||||
else
|
|
||||||
visibleLayers &= ~(1 << aLayer);
|
|
||||||
|
|
||||||
brd->SetVisibleLayers( visibleLayers );
|
|
||||||
|
|
||||||
if( isFinal )
|
|
||||||
myframe->DrawPanel->Refresh();
|
|
||||||
}
|
|
||||||
|
|
||||||
void PCB_LAYER_WIDGET::OnRenderColorChange( int aId, int aColor )
|
|
||||||
{
|
|
||||||
myframe->GetBoard()->SetVisibleElementColor( aId, aColor );
|
|
||||||
myframe->DrawPanel->Refresh();
|
|
||||||
}
|
|
||||||
|
|
||||||
void PCB_LAYER_WIDGET::OnRenderEnable( int aId, bool isEnabled )
|
|
||||||
{
|
|
||||||
BOARD* brd = myframe->GetBoard();
|
|
||||||
|
|
||||||
/* @todo:
|
|
||||||
|
|
||||||
move:
|
|
||||||
|
|
||||||
GRID_VISIBLE, ? maybe not this one
|
|
||||||
into m_VisibleElements and get rid of globals.
|
|
||||||
*/
|
|
||||||
|
|
||||||
switch( aId )
|
|
||||||
{
|
|
||||||
// see todo above, don't really want anything except IsElementVisible() here.
|
|
||||||
|
|
||||||
case GRID_VISIBLE:
|
|
||||||
// @todo, make read/write accessors for grid control so the write accessor can fire updates to
|
|
||||||
// grid state listeners. I think the grid state should be kept in the BOARD.
|
|
||||||
brd->SetElementVisibility( aId, isEnabled ); // set visibilty flag also in list, and myframe->m_Draw_Grid
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
brd->SetElementVisibility( aId, isEnabled );
|
|
||||||
}
|
|
||||||
|
|
||||||
myframe->DrawPanel->Refresh();
|
|
||||||
}
|
|
||||||
|
|
||||||
//-----</LAYER_WIDGET callbacks>------------------------------------------
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -634,6 +291,9 @@ WinEDA_PcbFrame::WinEDA_PcbFrame( wxWindow* father,
|
||||||
|
|
||||||
m_InternalUnits = PCB_INTERNAL_UNIT; // Unites internes = 1/10000 inch
|
m_InternalUnits = PCB_INTERNAL_UNIT; // Unites internes = 1/10000 inch
|
||||||
SetBaseScreen( ScreenPcb );
|
SetBaseScreen( ScreenPcb );
|
||||||
|
|
||||||
|
// LoadSettings() *after* creating m_LayersManager, because LoadSettings()
|
||||||
|
// initialize parameters in m_LayersManager
|
||||||
LoadSettings();
|
LoadSettings();
|
||||||
SetSize( m_FramePos.x, m_FramePos.y, m_FrameSize.x, m_FrameSize.y );
|
SetSize( m_FramePos.x, m_FramePos.y, m_FrameSize.x, m_FrameSize.y );
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue