layer widget incorporation into pcbnew
This commit is contained in:
parent
c4bc7bb46b
commit
58fc9d8f09
|
@ -5,6 +5,8 @@
|
||||||
#ifndef _BOARD_DESIGN_SETTING_H
|
#ifndef _BOARD_DESIGN_SETTING_H
|
||||||
#define _BOARD_DESIGN_SETTING_H
|
#define _BOARD_DESIGN_SETTING_H
|
||||||
|
|
||||||
|
#include "pcbstruct.h" // NB_COLORS
|
||||||
|
|
||||||
// Class for handle current printed board design settings
|
// Class for handle current printed board design settings
|
||||||
class EDA_BoardDesignSettings
|
class EDA_BoardDesignSettings
|
||||||
{
|
{
|
||||||
|
@ -38,7 +40,7 @@ protected:
|
||||||
public:
|
public:
|
||||||
|
|
||||||
// Color options for screen display of the Printed Board:
|
// Color options for screen display of the Printed Board:
|
||||||
int m_LayerColor[32]; // Layer colors (tracks and graphic items)
|
int m_LayerColor[NB_LAYERS]; ///< Layer colors (tracks and graphic items)
|
||||||
|
|
||||||
int m_ViaColor[4]; // Via color (depending on is type)
|
int m_ViaColor[4]; // Via color (depending on is type)
|
||||||
|
|
||||||
|
@ -120,7 +122,7 @@ public:
|
||||||
{
|
{
|
||||||
if( aCategoryIndex < 0 || aCategoryIndex > PAD_CMP_VISIBLE )
|
if( aCategoryIndex < 0 || aCategoryIndex > PAD_CMP_VISIBLE )
|
||||||
return false;
|
return false;
|
||||||
return (bool) ( m_VisibleElements & 1 << aCategoryIndex );
|
return (bool) ( m_VisibleElements & (1 << aCategoryIndex) );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -179,6 +181,34 @@ public:
|
||||||
* @param aNewLayerCount = The new number of enabled copper layers
|
* @param aNewLayerCount = The new number of enabled copper layers
|
||||||
*/
|
*/
|
||||||
void SetCopperLayerCount( int aNewLayerCount );
|
void SetCopperLayerCount( int aNewLayerCount );
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Function GetLayerColor
|
||||||
|
* returns the color for aLayer which is one of the layer indices given
|
||||||
|
* in pcbstruct.h
|
||||||
|
*/
|
||||||
|
int GetLayerColor( int aLayer )
|
||||||
|
{
|
||||||
|
if( (unsigned) aLayer < (unsigned) NB_LAYERS )
|
||||||
|
{
|
||||||
|
return m_LayerColor[aLayer];
|
||||||
|
}
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Function SetLayerColor
|
||||||
|
* sets the color for aLayer which is one of the layer indices given
|
||||||
|
* in pcbstruct.h
|
||||||
|
*/
|
||||||
|
void SetLayerColor( int aLayer, int aColor )
|
||||||
|
{
|
||||||
|
if( (unsigned) aLayer < (unsigned) NB_LAYERS )
|
||||||
|
{
|
||||||
|
m_LayerColor[aLayer] = aColor;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -56,7 +56,8 @@ struct KEYWORD
|
||||||
* to the parser if it wants also to support them.
|
* to the parser if it wants also to support them.
|
||||||
*/
|
*/
|
||||||
enum DSN_SYNTAX_T {
|
enum DSN_SYNTAX_T {
|
||||||
DSN_NONE = -10,
|
DSN_NONE = -11,
|
||||||
|
DSN_COMMENT = -10,
|
||||||
DSN_STRING_QUOTE = -9,
|
DSN_STRING_QUOTE = -9,
|
||||||
DSN_QUOTE_DEF = -8,
|
DSN_QUOTE_DEF = -8,
|
||||||
DSN_DASH = -7,
|
DSN_DASH = -7,
|
||||||
|
@ -84,6 +85,7 @@ class DSNLEXER
|
||||||
LINE_READER reader;
|
LINE_READER reader;
|
||||||
int stringDelimiter;
|
int stringDelimiter;
|
||||||
bool space_in_quoted_tokens; ///< blank spaces within quoted strings
|
bool space_in_quoted_tokens; ///< blank spaces within quoted strings
|
||||||
|
bool comments_are_tokens; ///< true if should return comments as tokens
|
||||||
|
|
||||||
wxString filename;
|
wxString filename;
|
||||||
int prevTok; ///< curTok from previous NextTok() call.
|
int prevTok; ///< curTok from previous NextTok() call.
|
||||||
|
@ -108,6 +110,18 @@ class DSNLEXER
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Function readLineOrCmt
|
||||||
|
* reads a line from the LINE_READER and returns either:
|
||||||
|
* <ol>
|
||||||
|
* <li> a positive line length (a +1 if empty line)
|
||||||
|
* <li> zero of end of file.
|
||||||
|
* <li> DSN_COMMENT if the line is a comment
|
||||||
|
* </ol>
|
||||||
|
*/
|
||||||
|
int readLineOrCmt();
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Function findToken
|
* Function findToken
|
||||||
* takes a string and looks up the string in the list of expected
|
* takes a string and looks up the string in the list of expected
|
||||||
|
@ -172,6 +186,19 @@ public:
|
||||||
return old;
|
return old;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Function SetCommentsAreTokens
|
||||||
|
* changes the handling of comments. If set true, comments are returns
|
||||||
|
* as single line strings with a terminating newline, else they are
|
||||||
|
* consumed by the lexer and not returned.
|
||||||
|
*/
|
||||||
|
bool SetCommentsAreTokens( bool val )
|
||||||
|
{
|
||||||
|
bool old = comments_are_tokens;
|
||||||
|
comments_are_tokens = val;
|
||||||
|
return old;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Function NextTok
|
* Function NextTok
|
||||||
|
|
|
@ -55,14 +55,14 @@
|
||||||
#define NB_COPPER_LAYERS (LAST_COPPER_LAYER + 1)
|
#define NB_COPPER_LAYERS (LAST_COPPER_LAYER + 1)
|
||||||
|
|
||||||
#define FIRST_NO_COPPER_LAYER 16
|
#define FIRST_NO_COPPER_LAYER 16
|
||||||
#define ADHESIVE_N_BACK 16
|
#define ADHESIVE_N_BACK 16
|
||||||
#define ADHESIVE_N_FRONT 17
|
#define ADHESIVE_N_FRONT 17
|
||||||
#define SOLDERPASTE_N_BACK 18
|
#define SOLDERPASTE_N_BACK 18
|
||||||
#define SOLDERPASTE_N_FRONT 19
|
#define SOLDERPASTE_N_FRONT 19
|
||||||
#define SILKSCREEN_N_BACK 20
|
#define SILKSCREEN_N_BACK 20
|
||||||
#define SILKSCREEN_N_FRONT 21
|
#define SILKSCREEN_N_FRONT 21
|
||||||
#define SOLDERMASK_N_BACK 22
|
#define SOLDERMASK_N_BACK 22
|
||||||
#define SOLDERMASK_N_FRONT 23
|
#define SOLDERMASK_N_FRONT 23
|
||||||
#define DRAW_N 24
|
#define DRAW_N 24
|
||||||
#define COMMENT_N 25
|
#define COMMENT_N 25
|
||||||
#define ECO1_N 26
|
#define ECO1_N 26
|
||||||
|
|
|
@ -6,10 +6,9 @@
|
||||||
#define WXPCB_STRUCT_H
|
#define WXPCB_STRUCT_H
|
||||||
|
|
||||||
|
|
||||||
#include <vector>
|
|
||||||
|
|
||||||
#include "wxstruct.h"
|
#include "wxstruct.h"
|
||||||
#include "base_struct.h"
|
#include "base_struct.h"
|
||||||
|
#include "layer_widget.h"
|
||||||
|
|
||||||
#ifndef PCB_INTERNAL_UNIT
|
#ifndef PCB_INTERNAL_UNIT
|
||||||
#define PCB_INTERNAL_UNIT 10000
|
#define PCB_INTERNAL_UNIT 10000
|
||||||
|
@ -50,6 +49,46 @@ class GENERAL_COLLECTORS_GUIDE;
|
||||||
/*****************************************************/
|
/*****************************************************/
|
||||||
class WinEDA_PcbFrame : public WinEDA_BasePcbFrame
|
class WinEDA_PcbFrame : public WinEDA_BasePcbFrame
|
||||||
{
|
{
|
||||||
|
protected:
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Class LYRS
|
||||||
|
* is here to implement the abtract functions of LAYER_WIDGET so they
|
||||||
|
* may be tied into this frame's data.
|
||||||
|
*/
|
||||||
|
class LYRS : public LAYER_WIDGET
|
||||||
|
{
|
||||||
|
WinEDA_PcbFrame* myframe;
|
||||||
|
|
||||||
|
public:
|
||||||
|
LYRS( WinEDA_PcbFrame* aParent ) :
|
||||||
|
LAYER_WIDGET( aParent ),
|
||||||
|
myframe( aParent )
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
//-----<implement LAYER_WIDGET abstract 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 functions>---------------
|
||||||
|
};
|
||||||
|
|
||||||
|
/// render rows are fixed, layer rows are dynamically determined.
|
||||||
|
static LAYER_WIDGET::ROW renderRows[];
|
||||||
|
|
||||||
|
LYRS* m_Layers; // established in constructor
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Function ReFillLayerWidget
|
||||||
|
* changes out all the layers in m_Layers and may be called upon
|
||||||
|
* loading a new BOARD.
|
||||||
|
*/
|
||||||
|
void ReFillLayerWidget();
|
||||||
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
WinEDAChoiceBox* m_SelLayerBox; // a combo box to display and
|
WinEDAChoiceBox* m_SelLayerBox; // a combo box to display and
|
||||||
// select active layer
|
// select active layer
|
||||||
|
@ -323,7 +362,17 @@ public:
|
||||||
void OnFileHistory( wxCommandEvent& event );
|
void OnFileHistory( wxCommandEvent& event );
|
||||||
void Files_io( wxCommandEvent& event );
|
void Files_io( wxCommandEvent& event );
|
||||||
bool LoadOnePcbFile( const wxString& FileName, bool Append );
|
bool LoadOnePcbFile( const wxString& FileName, bool Append );
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Function ReadPcbFile
|
||||||
|
* reads a board file <file>.brd
|
||||||
|
* @param Append if 0: a previously loaded board is deleted before loading
|
||||||
|
* the file else all items of the board file are added to the
|
||||||
|
* existing board
|
||||||
|
*/
|
||||||
int ReadPcbFile( FILE* File, bool Append );
|
int ReadPcbFile( FILE* File, bool Append );
|
||||||
|
|
||||||
bool SavePcbFile( const wxString& FileName );
|
bool SavePcbFile( const wxString& FileName );
|
||||||
int SavePcbFormatAscii( FILE* File );
|
int SavePcbFormatAscii( FILE* File );
|
||||||
bool WriteGeneralDescrPcb( FILE* File );
|
bool WriteGeneralDescrPcb( FILE* File );
|
||||||
|
|
|
@ -9,9 +9,9 @@ include_directories(${CMAKE_CURRENT_SOURCE_DIR}
|
||||||
# on other targets this should be as normal
|
# on other targets this should be as normal
|
||||||
##
|
##
|
||||||
if(APPLE)
|
if(APPLE)
|
||||||
set(PCBNEW_NAME PCBNew)
|
set(PCBNEW_NAME PCBNew)
|
||||||
else(APPLE)
|
else(APPLE)
|
||||||
set(PCBNEW_NAME pcbnew)
|
set(PCBNEW_NAME pcbnew)
|
||||||
endif(APPLE)
|
endif(APPLE)
|
||||||
|
|
||||||
# Many of the commented out ones are nested in *.cpp files for dialogs
|
# Many of the commented out ones are nested in *.cpp files for dialogs
|
||||||
|
@ -111,6 +111,8 @@ set(PCBNEW_SRCS
|
||||||
ioascii.cpp
|
ioascii.cpp
|
||||||
print_board_functions.cpp
|
print_board_functions.cpp
|
||||||
printout_controler.cpp
|
printout_controler.cpp
|
||||||
|
layer_panel_base.cpp
|
||||||
|
layer_widget.cpp
|
||||||
librairi.cpp
|
librairi.cpp
|
||||||
loadcmp.cpp
|
loadcmp.cpp
|
||||||
locate.cpp
|
locate.cpp
|
||||||
|
|
|
@ -209,36 +209,36 @@ wxString BOARD::GetDefaultLayerName( int aLayerNumber )
|
||||||
// Use a switch to explicitly show the mapping more clearly
|
// Use a switch to explicitly show the mapping more clearly
|
||||||
switch( aLayerNumber )
|
switch( aLayerNumber )
|
||||||
{
|
{
|
||||||
case LAYER_N_FRONT: txt = _( "Front" ); break;
|
case LAYER_N_FRONT: txt = _( "Front" ); break;
|
||||||
case LAYER_N_2: txt = _( "Inner2" ); break;
|
case LAYER_N_2: txt = _( "Inner2" ); break;
|
||||||
case LAYER_N_3: txt = _( "Inner3" ); break;
|
case LAYER_N_3: txt = _( "Inner3" ); break;
|
||||||
case LAYER_N_4: txt = _( "Inner4" ); break;
|
case LAYER_N_4: txt = _( "Inner4" ); break;
|
||||||
case LAYER_N_5: txt = _( "Inner5" ); break;
|
case LAYER_N_5: txt = _( "Inner5" ); break;
|
||||||
case LAYER_N_6: txt = _( "Inner6" ); break;
|
case LAYER_N_6: txt = _( "Inner6" ); break;
|
||||||
case LAYER_N_7: txt = _( "Inner7" ); break;
|
case LAYER_N_7: txt = _( "Inner7" ); break;
|
||||||
case LAYER_N_8: txt = _( "Inner8" ); break;
|
case LAYER_N_8: txt = _( "Inner8" ); break;
|
||||||
case LAYER_N_9: txt = _( "Inner9" ); break;
|
case LAYER_N_9: txt = _( "Inner9" ); break;
|
||||||
case LAYER_N_10: txt = _( "Inner10" ); break;
|
case LAYER_N_10: txt = _( "Inner10" ); break;
|
||||||
case LAYER_N_11: txt = _( "Inner11" ); break;
|
case LAYER_N_11: txt = _( "Inner11" ); break;
|
||||||
case LAYER_N_12: txt = _( "Inner12" ); break;
|
case LAYER_N_12: txt = _( "Inner12" ); break;
|
||||||
case LAYER_N_13: txt = _( "Inner13" ); break;
|
case LAYER_N_13: txt = _( "Inner13" ); break;
|
||||||
case LAYER_N_14: txt = _( "Inner14" ); break;
|
case LAYER_N_14: txt = _( "Inner14" ); break;
|
||||||
case LAYER_N_15: txt = _( "Inner15" ); break;
|
case LAYER_N_15: txt = _( "Inner15" ); break;
|
||||||
case LAYER_N_BACK: txt = _( "Back" ); break;
|
case LAYER_N_BACK: txt = _( "Back" ); break;
|
||||||
case ADHESIVE_N_BACK: txt = _( "Adhes_Back" ); break;
|
case ADHESIVE_N_BACK: txt = _( "Adhes_Back" ); break;
|
||||||
case ADHESIVE_N_FRONT: txt = _( "Adhes_Front" ); break;
|
case ADHESIVE_N_FRONT: txt = _( "Adhes_Front" ); break;
|
||||||
case SOLDERPASTE_N_BACK: txt = _( "SoldP_Back" ); break;
|
case SOLDERPASTE_N_BACK: txt = _( "SoldP_Back" ); break;
|
||||||
case SOLDERPASTE_N_FRONT: txt = _( "SoldP_Front" ); break;
|
case SOLDERPASTE_N_FRONT: txt = _( "SoldP_Front" ); break;
|
||||||
case SILKSCREEN_N_BACK: txt = _( "SilkS_Back" ); break;
|
case SILKSCREEN_N_BACK: txt = _( "SilkS_Back" ); break;
|
||||||
case SILKSCREEN_N_FRONT: txt = _( "SilkS_Front" ); break;
|
case SILKSCREEN_N_FRONT: txt = _( "SilkS_Front" ); break;
|
||||||
case SOLDERMASK_N_BACK: txt = _( "Mask_Back" ); break;
|
case SOLDERMASK_N_BACK: txt = _( "Mask_Back" ); break;
|
||||||
case SOLDERMASK_N_FRONT: txt = _( "Mask_Front" ); break;
|
case SOLDERMASK_N_FRONT: txt = _( "Mask_Front" ); break;
|
||||||
case DRAW_N: txt = _( "Drawings" ); break;
|
case DRAW_N: txt = _( "Drawings" ); break;
|
||||||
case COMMENT_N: txt = _( "Comments" ); break;
|
case COMMENT_N: txt = _( "Comments" ); break;
|
||||||
case ECO1_N: txt = _( "Eco1" ); break;
|
case ECO1_N: txt = _( "Eco1" ); break;
|
||||||
case ECO2_N: txt = _( "Eco2" ); break;
|
case ECO2_N: txt = _( "Eco2" ); break;
|
||||||
case EDGE_N: txt = _( "PCB_Edges" ); break;
|
case EDGE_N: txt = _( "PCB_Edges" ); break;
|
||||||
default: txt = _( "BAD INDEX" ); break;
|
default: txt = _( "BAD INDEX" ); break;
|
||||||
}
|
}
|
||||||
|
|
||||||
return wxString( txt );
|
return wxString( txt );
|
||||||
|
@ -351,11 +351,14 @@ LAYER_T LAYER::ParseType( const char* aType )
|
||||||
return LAYER_T( -1 );
|
return LAYER_T( -1 );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int BOARD::GetCopperLayerCount() const
|
int BOARD::GetCopperLayerCount() const
|
||||||
{
|
{
|
||||||
return m_BoardSettings->GetCopperLayerCount();
|
return m_BoardSettings->GetCopperLayerCount();
|
||||||
}
|
}
|
||||||
|
void BOARD::SetCopperLayerCount( int aCount )
|
||||||
|
{
|
||||||
|
m_BoardSettings->SetCopperLayerCount( aCount );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
int BOARD::GetEnabledLayers() const
|
int BOARD::GetEnabledLayers() const
|
||||||
|
@ -393,6 +396,16 @@ int BOARD::GetVisibleElements() const
|
||||||
return m_BoardSettings->GetVisibleElements();
|
return m_BoardSettings->GetVisibleElements();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void BOARD::SetLayerColor( int aLayer, int aColor )
|
||||||
|
{
|
||||||
|
m_BoardSettings->SetLayerColor( aLayer, aColor );
|
||||||
|
}
|
||||||
|
|
||||||
|
int BOARD::GetLayerColor( int aLayer )
|
||||||
|
{
|
||||||
|
return m_BoardSettings->GetLayerColor( aLayer );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
wxPoint& BOARD::GetPosition()
|
wxPoint& BOARD::GetPosition()
|
||||||
{
|
{
|
||||||
|
|
|
@ -87,6 +87,7 @@ public:
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Class BOARD
|
* Class BOARD
|
||||||
* holds information pertinent to a PCBNEW printed circuit board.
|
* holds information pertinent to a PCBNEW printed circuit board.
|
||||||
|
@ -245,7 +246,10 @@ public:
|
||||||
* Function GetCopperLayerCount
|
* Function GetCopperLayerCount
|
||||||
* @return int - The number of copper layers in the BOARD.
|
* @return int - The number of copper layers in the BOARD.
|
||||||
*/
|
*/
|
||||||
int GetCopperLayerCount() const;
|
int GetCopperLayerCount() const;
|
||||||
|
|
||||||
|
void SetCopperLayerCount( int aCount );
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Function GetEnabledLayers
|
* Function GetEnabledLayers
|
||||||
|
@ -255,14 +259,6 @@ public:
|
||||||
*/
|
*/
|
||||||
int GetEnabledLayers() const;
|
int GetEnabledLayers() const;
|
||||||
|
|
||||||
/**
|
|
||||||
* Function GetVisibleLayers
|
|
||||||
* is a proxy function that calls the correspondent function in m_BoardSettings
|
|
||||||
* Returns a bit-mask of all the layers that are visible
|
|
||||||
* @return int - the visible layers in bit-mapped form.
|
|
||||||
*/
|
|
||||||
int GetVisibleLayers() const;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Function SetEnabledLayers
|
* Function SetEnabledLayers
|
||||||
* is a proxy function that calls the correspondent function in m_BoardSettings
|
* is a proxy function that calls the correspondent function in m_BoardSettings
|
||||||
|
@ -271,6 +267,14 @@ public:
|
||||||
*/
|
*/
|
||||||
void SetEnabledLayers( int aLayerMask );
|
void SetEnabledLayers( int aLayerMask );
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Function GetVisibleLayers
|
||||||
|
* is a proxy function that calls the correspondent function in m_BoardSettings
|
||||||
|
* Returns a bit-mask of all the layers that are visible
|
||||||
|
* @return int - the visible layers in bit-mapped form.
|
||||||
|
*/
|
||||||
|
int GetVisibleLayers() const;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Function SetVisibleLayers
|
* Function SetVisibleLayers
|
||||||
* is a proxy function that calls the correspondent function in m_BoardSettings
|
* is a proxy function that calls the correspondent function in m_BoardSettings
|
||||||
|
@ -279,6 +283,14 @@ public:
|
||||||
*/
|
*/
|
||||||
void SetVisibleLayers( int aLayerMask );
|
void SetVisibleLayers( int aLayerMask );
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Function GetVisibleElements
|
||||||
|
* is a proxy function that calls the correspondent function in m_BoardSettings
|
||||||
|
* returns a bit-mask of all the element categories that are visible
|
||||||
|
* @return int - the visible element categories in bit-mapped form.
|
||||||
|
*/
|
||||||
|
int GetVisibleElements() const;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Function SetVisibleElements
|
* Function SetVisibleElements
|
||||||
* is a proxy function that calls the correspondent function in m_BoardSettings
|
* is a proxy function that calls the correspondent function in m_BoardSettings
|
||||||
|
@ -287,18 +299,9 @@ public:
|
||||||
*/
|
*/
|
||||||
void SetVisibleElements( int aMask );
|
void SetVisibleElements( int aMask );
|
||||||
|
|
||||||
/**
|
|
||||||
* Function GetVisibleElements
|
|
||||||
* is a proxy function that calls the correspondent function in m_BoardSettings
|
|
||||||
* returns a bit-mask of all the element categories that are visible
|
|
||||||
* @return int - the visible element categories in bit-mapped form.
|
|
||||||
*/
|
|
||||||
int GetVisibleElements() const;
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Function GetLayerName
|
* Function GetLayerName
|
||||||
* returns the name of the copper layer given by aLayerIndex.
|
* returns the name of the layer given by aLayerIndex.
|
||||||
*
|
*
|
||||||
* @param aLayerIndex A layer index, like LAYER_N_BACK, etc.
|
* @param aLayerIndex A layer index, like LAYER_N_BACK, etc.
|
||||||
* @return wxString - the layer name.
|
* @return wxString - the layer name.
|
||||||
|
@ -336,6 +339,13 @@ public:
|
||||||
*/
|
*/
|
||||||
bool SetLayerType( int aLayerIndex, LAYER_T aLayerType );
|
bool SetLayerType( int aLayerIndex, LAYER_T aLayerType );
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Function SetLayerColor
|
||||||
|
* changes a layer color for any valid layer, including non-copper ones.
|
||||||
|
*/
|
||||||
|
void SetLayerColor( int aLayer, int aColor );
|
||||||
|
|
||||||
|
int GetLayerColor( int aLayer );
|
||||||
|
|
||||||
/* Functions to get some items count */
|
/* Functions to get some items count */
|
||||||
int GetNumSegmTrack();
|
int GetNumSegmTrack();
|
||||||
|
|
|
@ -85,7 +85,7 @@ int EDA_BoardDesignSettings::GetVisibleLayers() const
|
||||||
|
|
||||||
void EDA_BoardDesignSettings::SetVisibleLayers( int aMask )
|
void EDA_BoardDesignSettings::SetVisibleLayers( int aMask )
|
||||||
{
|
{
|
||||||
// Altough Pcbnew uses only 29, Gerbview uses all 32 layers
|
// Although Pcbnew uses only 29, Gerbview uses all 32 layers
|
||||||
m_VisibleLayers = aMask & m_EnabledLayers & FULL_LAYERS;
|
m_VisibleLayers = aMask & m_EnabledLayers & FULL_LAYERS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -115,6 +115,8 @@ void EDA_BoardDesignSettings::SetElementVisibility( int aElementCategory, bool a
|
||||||
|
|
||||||
void EDA_BoardDesignSettings::SetCopperLayerCount( int aNewLayerCount )
|
void EDA_BoardDesignSettings::SetCopperLayerCount( int aNewLayerCount )
|
||||||
{
|
{
|
||||||
|
// if( aNewLayerCount < 2 ) aNewLayerCount = 2;
|
||||||
|
|
||||||
m_CopperLayerCount = aNewLayerCount;
|
m_CopperLayerCount = aNewLayerCount;
|
||||||
|
|
||||||
// ensure consistency with the m_EnabledLayers member
|
// ensure consistency with the m_EnabledLayers member
|
||||||
|
@ -135,23 +137,20 @@ void EDA_BoardDesignSettings::SetCopperLayerCount( int aNewLayerCount )
|
||||||
*/
|
*/
|
||||||
void EDA_BoardDesignSettings::SetEnabledLayers( int aMask )
|
void EDA_BoardDesignSettings::SetEnabledLayers( int aMask )
|
||||||
{
|
{
|
||||||
|
// Back and front layers are always enabled.
|
||||||
|
aMask |= LAYER_BACK | LAYER_FRONT;
|
||||||
|
|
||||||
m_EnabledLayers = aMask;
|
m_EnabledLayers = aMask;
|
||||||
|
|
||||||
// Ensure consistency with m_CopperLayerCount
|
|
||||||
long enabledLayers = aMask & ~ALL_CU_LAYERS;
|
|
||||||
// Back and front layers are always existing (but not necessary enabled)
|
|
||||||
// so we must count them
|
|
||||||
enabledLayers |= LAYER_BACK|LAYER_FRONT;
|
|
||||||
|
|
||||||
long mask = 1;
|
|
||||||
m_CopperLayerCount = 0;
|
|
||||||
for( int ii = 0; ii < NB_COPPER_LAYERS; ii++, mask <<= 1 )
|
|
||||||
{
|
|
||||||
if( (aMask & mask) )
|
|
||||||
m_CopperLayerCount ++;
|
|
||||||
}
|
|
||||||
|
|
||||||
// A disabled layer cannot be visible
|
// A disabled layer cannot be visible
|
||||||
m_VisibleLayers &= aMask;
|
m_VisibleLayers &= aMask;
|
||||||
|
|
||||||
|
// update m_CopperLayerCount to ensure its consistency with m_EnabledLayers
|
||||||
|
m_CopperLayerCount = 0;
|
||||||
|
for( int ii = 0; aMask && ii < NB_COPPER_LAYERS; ii++, aMask >>= 1 )
|
||||||
|
{
|
||||||
|
if( aMask & 1 )
|
||||||
|
m_CopperLayerCount++;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -254,6 +254,9 @@ this file again."));
|
||||||
// Update info shown by the horizontal toolbars
|
// Update info shown by the horizontal toolbars
|
||||||
GetBoard()->SetCurrentNetClass( NETCLASS::Default );
|
GetBoard()->SetCurrentNetClass( NETCLASS::Default );
|
||||||
m_TrackAndViasSizesList_Changed = true;
|
m_TrackAndViasSizesList_Changed = true;
|
||||||
|
|
||||||
|
ReFillLayerWidget();
|
||||||
|
|
||||||
ReCreateLayerBox( NULL );
|
ReCreateLayerBox( NULL );
|
||||||
AuxiliaryToolBar_Update_UI();
|
AuxiliaryToolBar_Update_UI();
|
||||||
|
|
||||||
|
|
|
@ -176,13 +176,18 @@ bool WinEDA_PcbFrame::Clear_Pcb( bool aQuery )
|
||||||
GetScreen()->SetGrid( gridsize );
|
GetScreen()->SetGrid( gridsize );
|
||||||
|
|
||||||
g_HightLigt_Status = 0;
|
g_HightLigt_Status = 0;
|
||||||
|
|
||||||
// Enable all layers (SetCopperLayerCount() will adjust the copper layers enabled)
|
// Enable all layers (SetCopperLayerCount() will adjust the copper layers enabled)
|
||||||
g_DesignSettings.SetEnabledLayers(ALL_LAYERS);
|
GetBoard()->SetEnabledLayers(ALL_LAYERS);
|
||||||
|
|
||||||
// Default copper layers count set to 2: double layer board
|
// Default copper layers count set to 2: double layer board
|
||||||
g_DesignSettings.SetCopperLayerCount(2);
|
GetBoard()->SetCopperLayerCount(2);
|
||||||
|
|
||||||
// Update display:
|
// Update display:
|
||||||
g_DesignSettings.SetVisibleLayers( ALL_LAYERS );
|
GetBoard()->SetVisibleLayers( ALL_LAYERS );
|
||||||
|
|
||||||
|
ReFillLayerWidget();
|
||||||
|
|
||||||
SetToolbars();
|
SetToolbars();
|
||||||
Zoom_Automatique( true );
|
Zoom_Automatique( true );
|
||||||
|
|
||||||
|
|
|
@ -900,12 +900,6 @@ static bool ReadSheetDescr( BASE_SCREEN* screen, FILE* File, int* LineNum )
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/** ReadPcbFile
|
|
||||||
* Read a board file <file>.brd
|
|
||||||
* @param Append if 0: a previously loaded board is deleted before loading
|
|
||||||
* the file else all items of the board file are added to the
|
|
||||||
* existing board
|
|
||||||
*/
|
|
||||||
int WinEDA_PcbFrame::ReadPcbFile( FILE* File, bool Append )
|
int WinEDA_PcbFrame::ReadPcbFile( FILE* File, bool Append )
|
||||||
{
|
{
|
||||||
char Line[1024];
|
char Line[1024];
|
||||||
|
|
|
@ -29,10 +29,17 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
#define STAND_ALONE 1 // define to enable test program for LAYER_WIDGET
|
//#define STAND_ALONE 1 // define to enable test program for LAYER_WIDGET
|
||||||
// also enable KICAD_AUIMANAGER and KICAD_AUITOOLBAR in ccmake to
|
// also enable KICAD_AUIMANAGER and KICAD_AUITOOLBAR in ccmake to
|
||||||
// build this test program
|
// build this test program
|
||||||
|
|
||||||
|
#include <wx/wx.h>
|
||||||
|
#include <wx/statbmp.h>
|
||||||
|
|
||||||
|
#include "macros.h"
|
||||||
|
#include "common.h"
|
||||||
|
#include "colors.h"
|
||||||
|
|
||||||
#include "layer_widget.h"
|
#include "layer_widget.h"
|
||||||
|
|
||||||
#include "pcbstruct.h" // IsValidCopperLayerIndex()
|
#include "pcbstruct.h" // IsValidCopperLayerIndex()
|
||||||
|
@ -41,6 +48,11 @@
|
||||||
#define LYR_COLUMN_COUNT 4 ///< Layer tab column count
|
#define LYR_COLUMN_COUNT 4 ///< Layer tab column count
|
||||||
#define RND_COLUMN_COUNT 2 ///< Rendering tab column count
|
#define RND_COLUMN_COUNT 2 ///< Rendering tab column count
|
||||||
|
|
||||||
|
#define BUTT_SIZE_X 32
|
||||||
|
#define BUTT_SIZE_Y 22
|
||||||
|
#define BUTT_VOID 6
|
||||||
|
|
||||||
|
|
||||||
#define ID_SHOW_ALL_COPPERS wxID_HIGHEST
|
#define ID_SHOW_ALL_COPPERS wxID_HIGHEST
|
||||||
#define ID_SHOW_NO_COPPERS (wxID_HIGHEST+1)
|
#define ID_SHOW_NO_COPPERS (wxID_HIGHEST+1)
|
||||||
|
|
||||||
|
@ -120,9 +132,9 @@ static int getDecodedId( int aControlId )
|
||||||
*/
|
*/
|
||||||
static wxString makeColorTxt( int aColor )
|
static wxString makeColorTxt( int aColor )
|
||||||
{
|
{
|
||||||
char colorValue[64];
|
wxString txt;
|
||||||
sprintf( colorValue, "0x%08x", aColor );
|
txt.Printf( wxT("0x%08x"), aColor );
|
||||||
return wxString( CONV_FROM_UTF8(colorValue) );
|
return txt;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -200,10 +212,7 @@ void LAYER_WIDGET::OnLeftDownLayers( wxMouseEvent& event )
|
||||||
SelectLayerRow( row );
|
SelectLayerRow( row );
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Function OnMiddleDownLayerColor
|
|
||||||
* is called only from a color button when user right clicks.
|
|
||||||
*/
|
|
||||||
void LAYER_WIDGET::OnMiddleDownLayerColor( wxMouseEvent& event )
|
void LAYER_WIDGET::OnMiddleDownLayerColor( wxMouseEvent& event )
|
||||||
{
|
{
|
||||||
wxBitmapButton* eventSource = (wxBitmapButton*) event.GetEventObject();
|
wxBitmapButton* eventSource = (wxBitmapButton*) event.GetEventObject();
|
||||||
|
@ -228,10 +237,6 @@ void LAYER_WIDGET::OnMiddleDownLayerColor( wxMouseEvent& event )
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Function OnRightDownLayers
|
|
||||||
* puts up a popup menu for the layer panel.
|
|
||||||
*/
|
|
||||||
void LAYER_WIDGET::OnRightDownLayers( wxMouseEvent& event )
|
void LAYER_WIDGET::OnRightDownLayers( wxMouseEvent& event )
|
||||||
{
|
{
|
||||||
wxMenu menu;
|
wxMenu menu;
|
||||||
|
@ -262,7 +267,19 @@ void LAYER_WIDGET::OnPopupSelection( wxCommandEvent& event )
|
||||||
case ID_SHOW_NO_COPPERS:
|
case ID_SHOW_NO_COPPERS:
|
||||||
visible = false;
|
visible = false;
|
||||||
L_change_coppers:
|
L_change_coppers:
|
||||||
|
int lastCu = -1;
|
||||||
rowCount = GetLayerRowCount();
|
rowCount = GetLayerRowCount();
|
||||||
|
for( int row=rowCount-1; row>=0; --row )
|
||||||
|
{
|
||||||
|
wxCheckBox* cb = (wxCheckBox*) getLayerComp( row*LYR_COLUMN_COUNT + 3 );
|
||||||
|
int layer = getDecodedId( cb->GetId() );
|
||||||
|
if( IsValidCopperLayerIndex( layer ) )
|
||||||
|
{
|
||||||
|
lastCu = row;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
for( int row=0; row<rowCount; ++row )
|
for( int row=0; row<rowCount; ++row )
|
||||||
{
|
{
|
||||||
wxCheckBox* cb = (wxCheckBox*) getLayerComp( row*LYR_COLUMN_COUNT + 3 );
|
wxCheckBox* cb = (wxCheckBox*) getLayerComp( row*LYR_COLUMN_COUNT + 3 );
|
||||||
|
@ -271,7 +288,13 @@ void LAYER_WIDGET::OnPopupSelection( wxCommandEvent& event )
|
||||||
if( IsValidCopperLayerIndex( layer ) )
|
if( IsValidCopperLayerIndex( layer ) )
|
||||||
{
|
{
|
||||||
cb->SetValue( visible );
|
cb->SetValue( visible );
|
||||||
OnLayerVisible( layer, visible );
|
|
||||||
|
bool isLastCopperLayer = (row==lastCu);
|
||||||
|
|
||||||
|
OnLayerVisible( layer, visible, isLastCopperLayer );
|
||||||
|
|
||||||
|
if( isLastCopperLayer )
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -279,11 +302,6 @@ void LAYER_WIDGET::OnPopupSelection( wxCommandEvent& event )
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Function OnLayerCheckBox
|
|
||||||
* handles the "is layer visible" checkbox and propogates the
|
|
||||||
* event to the client's notification function.
|
|
||||||
*/
|
|
||||||
void LAYER_WIDGET::OnLayerCheckBox( wxCommandEvent& event )
|
void LAYER_WIDGET::OnLayerCheckBox( wxCommandEvent& event )
|
||||||
{
|
{
|
||||||
wxCheckBox* eventSource = (wxCheckBox*) event.GetEventObject();
|
wxCheckBox* eventSource = (wxCheckBox*) event.GetEventObject();
|
||||||
|
@ -323,14 +341,6 @@ void LAYER_WIDGET::OnRenderCheckBox( wxCommandEvent& event )
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Function getLayerComp
|
|
||||||
* returns the component within the m_LayersFlexGridSizer at aSizerNdx or
|
|
||||||
* NULL if \a aSizerNdx is out of range.
|
|
||||||
*
|
|
||||||
* @param aSizerNdx is the 0 based index into all the wxWindows which have
|
|
||||||
* been added to the m_LayersFlexGridSizer.
|
|
||||||
*/
|
|
||||||
wxWindow* LAYER_WIDGET::getLayerComp( int aSizerNdx )
|
wxWindow* LAYER_WIDGET::getLayerComp( int aSizerNdx )
|
||||||
{
|
{
|
||||||
if( (unsigned) aSizerNdx < m_LayersFlexGridSizer->GetChildren().GetCount() )
|
if( (unsigned) aSizerNdx < m_LayersFlexGridSizer->GetChildren().GetCount() )
|
||||||
|
@ -338,10 +348,7 @@ wxWindow* LAYER_WIDGET::getLayerComp( int aSizerNdx )
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Function findLayerRow
|
|
||||||
* returns the row index that \a aLayer resides in, or -1 if not found.
|
|
||||||
*/
|
|
||||||
int LAYER_WIDGET::findLayerRow( int aLayer )
|
int LAYER_WIDGET::findLayerRow( int aLayer )
|
||||||
{
|
{
|
||||||
int count = GetLayerRowCount();
|
int count = GetLayerRowCount();
|
||||||
|
@ -356,10 +363,7 @@ int LAYER_WIDGET::findLayerRow( int aLayer )
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Function insertLayerRow
|
|
||||||
* appends or inserts a new row in the layer portion of the widget.
|
|
||||||
*/
|
|
||||||
void LAYER_WIDGET::insertLayerRow( int aRow, const ROW& aSpec )
|
void LAYER_WIDGET::insertLayerRow( int aRow, const ROW& aSpec )
|
||||||
{
|
{
|
||||||
wxASSERT( aRow >= 0 && aRow < MAX_LAYER_ROWS );
|
wxASSERT( aRow >= 0 && aRow < MAX_LAYER_ROWS );
|
||||||
|
@ -402,6 +406,7 @@ void LAYER_WIDGET::insertLayerRow( int aRow, const ROW& aSpec )
|
||||||
m_LayersFlexGridSizer->Insert( index+col, cb, 0, flags );
|
m_LayersFlexGridSizer->Insert( index+col, cb, 0, flags );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void LAYER_WIDGET::insertRenderRow( int aRow, const ROW& aSpec )
|
void LAYER_WIDGET::insertRenderRow( int aRow, const ROW& aSpec )
|
||||||
{
|
{
|
||||||
wxASSERT( aRow >= 0 && aRow < MAX_LAYER_ROWS );
|
wxASSERT( aRow >= 0 && aRow < MAX_LAYER_ROWS );
|
||||||
|
@ -421,7 +426,7 @@ void LAYER_WIDGET::insertRenderRow( int aRow, const ROW& aSpec )
|
||||||
|
|
||||||
// could add a left click handler on the color button that toggles checkbox.
|
// could add a left click handler on the color button that toggles checkbox.
|
||||||
}
|
}
|
||||||
else // no color selection wanted
|
else // == -1, no color selection wanted
|
||||||
{
|
{
|
||||||
// need a place holder within the sizer to keep grid full.
|
// need a place holder within the sizer to keep grid full.
|
||||||
wxPanel* invisible = new wxPanel( m_RenderScrolledWindow );
|
wxPanel* invisible = new wxPanel( m_RenderScrolledWindow );
|
||||||
|
@ -441,7 +446,6 @@ void LAYER_WIDGET::insertRenderRow( int aRow, const ROW& aSpec )
|
||||||
|
|
||||||
//-----<public>-------------------------------------------------------
|
//-----<public>-------------------------------------------------------
|
||||||
|
|
||||||
/** Constructor */
|
|
||||||
LAYER_WIDGET::LAYER_WIDGET( wxWindow* parent ) :
|
LAYER_WIDGET::LAYER_WIDGET( wxWindow* parent ) :
|
||||||
LAYER_PANEL_BASE( parent )
|
LAYER_PANEL_BASE( parent )
|
||||||
{
|
{
|
||||||
|
@ -554,13 +558,13 @@ void LAYER_WIDGET::AppendLayerRow( const ROW& aRow )
|
||||||
{
|
{
|
||||||
int nextRow = GetLayerRowCount();
|
int nextRow = GetLayerRowCount();
|
||||||
insertLayerRow( nextRow, aRow );
|
insertLayerRow( nextRow, aRow );
|
||||||
FitInside();
|
UpdateLayouts();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void LAYER_WIDGET::ClearLayerRows()
|
void LAYER_WIDGET::ClearLayerRows()
|
||||||
{
|
{
|
||||||
m_LayerScrolledWindow->DestroyChildren();
|
m_LayersFlexGridSizer->Clear( true );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -568,13 +572,13 @@ void LAYER_WIDGET::AppendRenderRow( const ROW& aRow )
|
||||||
{
|
{
|
||||||
int nextRow = GetRenderRowCount();
|
int nextRow = GetRenderRowCount();
|
||||||
insertRenderRow( nextRow, aRow );
|
insertRenderRow( nextRow, aRow );
|
||||||
FitInside();
|
UpdateLayouts();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void LAYER_WIDGET::ClearRenderRows()
|
void LAYER_WIDGET::ClearRenderRows()
|
||||||
{
|
{
|
||||||
m_RenderScrolledWindow->DestroyChildren();
|
m_RenderFlexGridSizer->Clear( true );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -641,9 +645,17 @@ void LAYER_WIDGET::SetLayerVisible( int aLayer, bool isVisible )
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void LAYER_WIDGET::UpdateLayouts()
|
||||||
|
{
|
||||||
|
m_LayersFlexGridSizer->Layout();
|
||||||
|
m_RenderFlexGridSizer->Layout();
|
||||||
|
}
|
||||||
|
|
||||||
#if defined(STAND_ALONE)
|
#if defined(STAND_ALONE)
|
||||||
|
|
||||||
|
#include <wx/aui/aui.h>
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Class MYFRAME
|
* Class MYFRAME
|
||||||
* is a test class here to exercise the LAYER_WIDGET and explore use cases.
|
* is a test class here to exercise the LAYER_WIDGET and explore use cases.
|
||||||
|
@ -687,9 +699,9 @@ class MYFRAME : public wxFrame
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void OnLayerVisible( int aLayer, bool isVisible )
|
void OnLayerVisible( int aLayer, bool isVisible, bool isFinal )
|
||||||
{
|
{
|
||||||
printf( "OnLayerVisible( aLayer:%d, isVisible:%d )\n", aLayer, isVisible );
|
printf( "OnLayerVisible( aLayer:%d, isVisible:%d isFinal:%d)\n", aLayer, isVisible, isFinal );
|
||||||
}
|
}
|
||||||
|
|
||||||
void OnRenderColorChange( int aId, int aColor )
|
void OnRenderColorChange( int aId, int aColor )
|
||||||
|
@ -715,15 +727,23 @@ public:
|
||||||
MYLAYERS* lw = new MYLAYERS( this, this );
|
MYLAYERS* lw = new MYLAYERS( this, this );
|
||||||
|
|
||||||
// add some layer rows
|
// add some layer rows
|
||||||
lw->AppendLayerRow( LAYER_WIDGET::ROW( wxT("layer 1"), 0, RED, _("RED"), false ) );
|
static const LAYER_WIDGET::ROW layerRows[] = {
|
||||||
lw->AppendLayerRow( LAYER_WIDGET::ROW( wxT("layer 2"), 1, GREEN, _("GREEN"), true ) );
|
LAYER_WIDGET::ROW( wxT("layer 1"), 0, RED, _("RED"), false ),
|
||||||
lw->AppendLayerRow( LAYER_WIDGET::ROW( wxT("brown_layer"), 2, BROWN, _("BROWN"), true ) );
|
LAYER_WIDGET::ROW( wxT("layer 2"), 1, GREEN, _("GREEN"), true ),
|
||||||
lw->AppendLayerRow( LAYER_WIDGET::ROW( wxT("layer_4_you"), 3, BLUE, _("BLUE"), false ) );
|
LAYER_WIDGET::ROW( wxT("brown_layer"), 2, BROWN, _("BROWN"), true ),
|
||||||
|
LAYER_WIDGET::ROW( wxT("layer_4_you"), 3, BLUE, _("BLUE"), false ),
|
||||||
|
};
|
||||||
|
|
||||||
|
lw->AppendLayerRows( layerRows, DIM(layerRows) );
|
||||||
|
|
||||||
// add some render rows
|
// add some render rows
|
||||||
lw->AppendRenderRow( LAYER_WIDGET::ROW( wxT("With Very Large Ears"), 0, -1, _("Spock here") ) );
|
static const LAYER_WIDGET::ROW renderRows[] = {
|
||||||
lw->AppendRenderRow( LAYER_WIDGET::ROW( wxT("With Legs"), 1, YELLOW ) );
|
LAYER_WIDGET::ROW( wxT("With Very Large Ears"), 0, -1, _("Spock here") ),
|
||||||
lw->AppendRenderRow( LAYER_WIDGET::ROW( wxT("With Oval Eyes"), 1, BROWN, _("My eyes are upon you") ) );
|
LAYER_WIDGET::ROW( wxT("With Legs"), 1, YELLOW ),
|
||||||
|
LAYER_WIDGET::ROW( wxT("With Oval Eyes"), 1, BROWN, _("My eyes are upon you") ),
|
||||||
|
};
|
||||||
|
|
||||||
|
lw->AppendRenderRows( renderRows, DIM(renderRows) );
|
||||||
|
|
||||||
lw->SelectLayerRow( 1 );
|
lw->SelectLayerRow( 1 );
|
||||||
|
|
||||||
|
|
|
@ -25,20 +25,7 @@
|
||||||
#ifndef LAYERWIDGET_H_
|
#ifndef LAYERWIDGET_H_
|
||||||
#define LAYERWIDGET_H_
|
#define LAYERWIDGET_H_
|
||||||
|
|
||||||
#include <wx/wx.h>
|
|
||||||
#include <wx/statbmp.h>
|
|
||||||
#include <wx/aui/aui.h>
|
|
||||||
|
|
||||||
#include "macros.h"
|
|
||||||
#include "common.h"
|
|
||||||
|
|
||||||
#include "layer_panel_base.h"
|
#include "layer_panel_base.h"
|
||||||
#include "colors.h"
|
|
||||||
|
|
||||||
/* no external data knowledge needed or wanted
|
|
||||||
#include "pcbnew.h"
|
|
||||||
#include "wxPcbStruct.h"
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -59,7 +46,6 @@
|
||||||
*/
|
*/
|
||||||
class LAYER_WIDGET : public LAYER_PANEL_BASE
|
class LAYER_WIDGET : public LAYER_PANEL_BASE
|
||||||
{
|
{
|
||||||
|
|
||||||
public:
|
public:
|
||||||
/**
|
/**
|
||||||
* Struct ROW
|
* Struct ROW
|
||||||
|
@ -88,11 +74,6 @@ public:
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|
||||||
#define MAX_LAYER_ROWS 64
|
|
||||||
#define BUTT_SIZE_X 32
|
|
||||||
#define BUTT_SIZE_Y 22
|
|
||||||
#define BUTT_VOID 6
|
|
||||||
|
|
||||||
wxBitmap* m_BlankBitmap;
|
wxBitmap* m_BlankBitmap;
|
||||||
wxBitmap* m_RightArrowBitmap;
|
wxBitmap* m_RightArrowBitmap;
|
||||||
wxSize m_BitmapSize;
|
wxSize m_BitmapSize;
|
||||||
|
@ -190,6 +171,19 @@ public:
|
||||||
*/
|
*/
|
||||||
void AppendLayerRow( const ROW& aRow );
|
void AppendLayerRow( const ROW& aRow );
|
||||||
|
|
||||||
|
#define MAX_LAYER_ROWS 64 ///< cannot append more than this number of rows
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Function AppendLayerRows
|
||||||
|
* appends new rows in the layer portion of the widget. The user must
|
||||||
|
* ensure that ROW::id is unique for all existing rows on Windows.
|
||||||
|
*/
|
||||||
|
void AppendLayerRows( const ROW* aRowsArray, int aRowCount )
|
||||||
|
{
|
||||||
|
for( int row=0; row<aRowCount; ++row )
|
||||||
|
AppendLayerRow( aRowsArray[row] );
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Function ClearLayerRows
|
* Function ClearLayerRows
|
||||||
* empties out the layer rows.
|
* empties out the layer rows.
|
||||||
|
@ -203,6 +197,18 @@ public:
|
||||||
*/
|
*/
|
||||||
void AppendRenderRow( const ROW& aRow );
|
void AppendRenderRow( const ROW& aRow );
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Function AppendRenderRows
|
||||||
|
* appends new rows in the render portion of the widget. The user must
|
||||||
|
* ensure that ROW::id is unique for all existing rows on Windows.
|
||||||
|
*/
|
||||||
|
void AppendRenderRows( const ROW* aRowsArray, int aRowCount )
|
||||||
|
{
|
||||||
|
for( int row=0; row<aRowCount; ++row )
|
||||||
|
AppendRenderRow( aRowsArray[row] );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Function ClearRenderRows
|
* Function ClearRenderRows
|
||||||
* empties out the render rows.
|
* empties out the render rows.
|
||||||
|
@ -233,6 +239,7 @@ public:
|
||||||
*/
|
*/
|
||||||
void SetLayerVisible( int aLayer, bool isVisible );
|
void SetLayerVisible( int aLayer, bool isVisible );
|
||||||
|
|
||||||
|
void UpdateLayouts();
|
||||||
|
|
||||||
//-----<abstract functions>-------------------------------------------
|
//-----<abstract functions>-------------------------------------------
|
||||||
|
|
||||||
|
@ -254,8 +261,12 @@ public:
|
||||||
/**
|
/**
|
||||||
* Function OnLayerVisible
|
* Function OnLayerVisible
|
||||||
* is called to notify client code about a layer visibility change.
|
* is called to notify client code about a layer visibility change.
|
||||||
|
*
|
||||||
|
* @param isFinal is true when this is the last of potentially several
|
||||||
|
* such calls, and can be used to decide when to update the screen only
|
||||||
|
* one time instead of several times in the midst of a multiple layer change.
|
||||||
*/
|
*/
|
||||||
virtual void OnLayerVisible( int aLayer, bool isVisible ) = 0;
|
virtual void OnLayerVisible( int aLayer, bool isVisible, bool isFinal = true ) = 0;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Function OnRenderColorChange
|
* Function OnRenderColorChange
|
||||||
|
|
|
@ -207,6 +207,25 @@ END_EVENT_TABLE()
|
||||||
|
|
||||||
///////****************************///////////:
|
///////****************************///////////:
|
||||||
|
|
||||||
|
|
||||||
|
// the fixed "Rendering" tab rows within the LAYER_WIDGET:
|
||||||
|
LAYER_WIDGET::ROW WinEDA_PcbFrame::renderRows[] = {
|
||||||
|
// text id color tooltip checked
|
||||||
|
LAYER_WIDGET::ROW( _( "Through Via"), 0, LIGHTBLUE, _("Show through vias") ),
|
||||||
|
LAYER_WIDGET::ROW( _( "Blind/Buried Via"), 1, YELLOW, _("Show blind or buried vias") ),
|
||||||
|
LAYER_WIDGET::ROW( _( "Micro Via" ), 2, BROWN, _("Show micro vias") ),
|
||||||
|
LAYER_WIDGET::ROW( _( "Ratsnets" ), 3, BLUE, _("Show the ratsnest") ),
|
||||||
|
LAYER_WIDGET::ROW( _( "Mod Text Back" ), 4, WHITE, _("Show footprint text residing on board's back") ),
|
||||||
|
LAYER_WIDGET::ROW( _( "Mod Text Front" ), 5, WHITE, _("Show footprint text residing on board's front") ),
|
||||||
|
LAYER_WIDGET::ROW( _( "Mod Text Hide" ), 6, WHITE, _("TBD") ),
|
||||||
|
LAYER_WIDGET::ROW( _( "Anchors" ), 7, WHITE, _("TBD") ),
|
||||||
|
// LAYER_WIDGET::ROW( _( "Grid" ), 8, WHITE, _("Show grid") ),
|
||||||
|
LAYER_WIDGET::ROW( _( "Not Connecteds" ), 9, -1, _("TBD") ),
|
||||||
|
LAYER_WIDGET::ROW( _( "Modules Front" ), 10, -1, _("TBD") ),
|
||||||
|
LAYER_WIDGET::ROW( _( "Modules Back" ), 11, -1, _("TBD") ),
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
WinEDA_PcbFrame::WinEDA_PcbFrame( wxWindow* father,
|
WinEDA_PcbFrame::WinEDA_PcbFrame( wxWindow* father,
|
||||||
const wxString& title,
|
const wxString& title,
|
||||||
const wxPoint& pos, const wxSize& size,
|
const wxPoint& pos, const wxSize& size,
|
||||||
|
@ -223,6 +242,9 @@ WinEDA_PcbFrame::WinEDA_PcbFrame( wxWindow* father,
|
||||||
m_TrackAndViasSizesList_Changed = false;
|
m_TrackAndViasSizesList_Changed = false;
|
||||||
m_show_microwave_tools = false;
|
m_show_microwave_tools = false;
|
||||||
|
|
||||||
|
m_Layers = new LYRS( this );
|
||||||
|
m_Layers->AppendRenderRows( renderRows, DIM(renderRows) );
|
||||||
|
|
||||||
SetBoard( new BOARD( NULL, this ) );
|
SetBoard( new BOARD( NULL, this ) );
|
||||||
m_TrackAndViasSizesList_Changed = true;
|
m_TrackAndViasSizesList_Changed = true;
|
||||||
|
|
||||||
|
@ -273,6 +295,15 @@ WinEDA_PcbFrame::WinEDA_PcbFrame( 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_Layers->GetBestSize() ); // updated in ReFillLayerWidget
|
||||||
|
lyrs.BestSize( m_Layers->GetBestSize() );
|
||||||
|
lyrs.CloseButton( false );
|
||||||
|
lyrs.Caption( wxT( "Layers" ) );
|
||||||
|
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 ) );
|
||||||
|
@ -283,11 +314,13 @@ WinEDA_PcbFrame::WinEDA_PcbFrame( wxWindow* father,
|
||||||
|
|
||||||
if( m_AuxVToolBar )
|
if( m_AuxVToolBar )
|
||||||
m_auimgr.AddPane( m_AuxVToolBar,
|
m_auimgr.AddPane( m_AuxVToolBar,
|
||||||
wxAuiPaneInfo( vert ).Name( wxT( "m_AuxVToolBar" ) ).Right().Row( 1 ).Hide() );
|
wxAuiPaneInfo( vert ).Name( wxT( "m_AuxVToolBar" ) ).Right().Row( 2 ).Hide() );
|
||||||
|
|
||||||
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_Layers, lyrs.Right().Row( 0 ) );
|
||||||
|
|
||||||
if( m_OptionsToolBar )
|
if( m_OptionsToolBar )
|
||||||
m_auimgr.AddPane( m_OptionsToolBar,
|
m_auimgr.AddPane( m_OptionsToolBar,
|
||||||
|
@ -308,6 +341,7 @@ WinEDA_PcbFrame::WinEDA_PcbFrame( wxWindow* father,
|
||||||
m_AuxVToolBar->Show(m_show_microwave_tools);
|
m_AuxVToolBar->Show(m_show_microwave_tools);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
ReFillLayerWidget(); // this is near end because contents establishes size
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -319,6 +353,95 @@ WinEDA_PcbFrame::~WinEDA_PcbFrame()
|
||||||
delete m_drc;
|
delete m_drc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//-----<LAYER_WIDGET callbacks>-------------------------------------------
|
||||||
|
|
||||||
|
void WinEDA_PcbFrame::LYRS::OnLayerColorChange( int aLayer, int aColor )
|
||||||
|
{
|
||||||
|
myframe->GetBoard()->SetLayerColor( aLayer, aColor );
|
||||||
|
myframe->DrawPanel->Refresh();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool WinEDA_PcbFrame::LYRS::OnLayerSelect( int aLayer )
|
||||||
|
{
|
||||||
|
// @todo
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void WinEDA_PcbFrame::LYRS::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 WinEDA_PcbFrame::LYRS::OnRenderColorChange( int aId, int aColor )
|
||||||
|
{
|
||||||
|
// @todo
|
||||||
|
//myframe->GetBoard()->SetLayerColor( aId, aColor );
|
||||||
|
//myframe->DrawPanel->Refresh();
|
||||||
|
}
|
||||||
|
|
||||||
|
void WinEDA_PcbFrame::LYRS::OnRenderEnable( int aId, bool isEnabled )
|
||||||
|
{
|
||||||
|
// @todo
|
||||||
|
// mframe->GetBoard()->Set
|
||||||
|
}
|
||||||
|
|
||||||
|
//-----</LAYER_WIDGET callbacks>------------------------------------------
|
||||||
|
|
||||||
|
void WinEDA_PcbFrame::ReFillLayerWidget()
|
||||||
|
{
|
||||||
|
BOARD* brd = GetBoard();
|
||||||
|
int layer;
|
||||||
|
|
||||||
|
int enabledLayers = brd->GetEnabledLayers();
|
||||||
|
|
||||||
|
m_Layers->Freeze(); // no screen updates until done modifying
|
||||||
|
|
||||||
|
m_Layers->ClearLayerRows();
|
||||||
|
|
||||||
|
// show all coppers first, with front on top, back on bottom, then technical layers
|
||||||
|
|
||||||
|
layer = LAYER_N_FRONT;
|
||||||
|
if( enabledLayers & (1 << layer) )
|
||||||
|
{
|
||||||
|
m_Layers->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) )
|
||||||
|
{
|
||||||
|
m_Layers->AppendLayerRow( LAYER_WIDGET::ROW(
|
||||||
|
brd->GetLayerName( layer ), layer, brd->GetLayerColor( layer ), _("An innner copper layer"), true ) );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
layer = LAYER_N_BACK;
|
||||||
|
if( enabledLayers & (1 << layer) )
|
||||||
|
{
|
||||||
|
m_Layers->AppendLayerRow( LAYER_WIDGET::ROW(
|
||||||
|
brd->GetLayerName( layer ), layer, brd->GetLayerColor( layer ), _("Back copper layer"), true ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
m_Layers->SelectLayer( LAYER_N_FRONT );
|
||||||
|
|
||||||
|
m_Layers->Thaw();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void WinEDA_PcbFrame::OnQuit( wxCommandEvent & WXUNUSED(event) )
|
void WinEDA_PcbFrame::OnQuit( wxCommandEvent & WXUNUSED(event) )
|
||||||
{
|
{
|
||||||
Close(true);
|
Close(true);
|
||||||
|
|
Loading…
Reference in New Issue