more layer widget work
This commit is contained in:
parent
84d82cf2f5
commit
6518139b26
|
@ -4,6 +4,26 @@ KiCad ChangeLog 2010
|
||||||
Please add newer entries at the top, list the date and your name with
|
Please add newer entries at the top, list the date and your name with
|
||||||
email address.
|
email address.
|
||||||
|
|
||||||
|
2010-Jan-23 UPDATE Dick Hollenbeck <dick@softplc.com>
|
||||||
|
================================================================================
|
||||||
|
++pcbnew's PCB_LAYER_WIDGET
|
||||||
|
Removed wxformbuilder dependency from LAYER_WIDGET, thus killing off
|
||||||
|
layer_widget_base.* and panel_layer_select.fbp.
|
||||||
|
Added aPointSize to LAYER_WIDGET constructor so it uses that font size.
|
||||||
|
Removed layer_widget.h from wxPcbStruct.h for faster compiles with less
|
||||||
|
dependencies, and this meant moving the class LYRS out of
|
||||||
|
class WinEDA_PcbFrame. While doing that I renamed it to PCB_LAYER_WIDGET.
|
||||||
|
Integration of PCB_LAYER_WIDGET into WinEDA_PcbFrame to fully support
|
||||||
|
the layer change logic. Added syncLayerWidget(),
|
||||||
|
* WinEDA_PcbFrame:
|
||||||
|
Added syncLayerWidget(), syncLayerBox() (via a rename), setActiveLayer(),
|
||||||
|
and getActiveLayer().
|
||||||
|
Use a font size in PCB_LAYER_WIDGET 80% of the system font size for systems
|
||||||
|
with screen resolution height <= 900, or 100% if not. See WinEDA_PcbFrame
|
||||||
|
constructor.
|
||||||
|
* See TODO.txt for more things that need to be done.
|
||||||
|
|
||||||
|
|
||||||
2010-Jan-23 UPDATE Jean-Pierre Charras <jean-pierre.charras@gipsa-lab.inpg.fr>
|
2010-Jan-23 UPDATE Jean-Pierre Charras <jean-pierre.charras@gipsa-lab.inpg.fr>
|
||||||
================================================================================
|
================================================================================
|
||||||
++ Pcbnew:
|
++ Pcbnew:
|
||||||
|
|
19
TODO.txt
19
TODO.txt
|
@ -72,19 +72,24 @@ PCBNew
|
||||||
* Need to add polygon aperture type.
|
* Need to add polygon aperture type.
|
||||||
Then example 2 in RS274xrevd_e.pdf will draw properly.
|
Then example 2 in RS274xrevd_e.pdf will draw properly.
|
||||||
|
|
||||||
|
Dick:
|
||||||
|
* Get the nested quote support for DSNLEXER fixed up and committed.
|
||||||
|
|
||||||
|
|
||||||
LAYER_WIDGET for PCBNEW
|
LAYER_WIDGET for PCBNEW
|
||||||
-----------------------
|
-----------------------
|
||||||
L2) Hook in bool WinEDA_PcbFrame::LYRS::OnLayerSelect( int aLayer )
|
|
||||||
|
|
||||||
L4) Move popup menu code from class LAYER_WIDGET into WinEDA_PcbFrame::LYRS so as
|
|
||||||
to keep LAYER_WIDGET fully usage agnostic. Remove #include "pcbstruct.h" // IsValidCopperLayerIndex()
|
|
||||||
from layer_widget.cpp.
|
|
||||||
|
|
||||||
L5) Add to moved popu menu code the ability to save the current layer widget
|
L5) Add to moved popu menu code the ability to save the current layer widget
|
||||||
color and enable settings with an additional menu item.
|
color and enable settings with an additional menu item.
|
||||||
|
|
||||||
L6) Test, and fix up any remaining issues with the PCB_VISIBLE support, several
|
L6) Test, and fix up any remaining issues with the PCB_VISIBLE support, several
|
||||||
items which are stored on globals could and should be stored in
|
items which are stored on globals could and should be stored in
|
||||||
EDA_Settings.m_VisibleElements using enum PCB_VISIBLE.
|
EDA_Settings.m_VisibleElements using enum PCB_VISIBLE. Initial Render
|
||||||
|
checkbox settings are probably not correct, for example grid.
|
||||||
|
|
||||||
|
L7) make the bitmapbutton a staticbitmap, and make its size dependent on
|
||||||
|
the point size.
|
||||||
|
|
||||||
|
L8) LAYER_WIDGET::GetBestSize() needs platform independence.
|
||||||
|
|
||||||
|
Dick:
|
||||||
|
L9) still thinking about background colors, easier now without wxformbuilder.
|
||||||
|
|
|
@ -8,7 +8,6 @@
|
||||||
|
|
||||||
#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
|
||||||
|
@ -36,6 +35,7 @@ class ZONE_CONTAINER;
|
||||||
class DRAWSEGMENT;
|
class DRAWSEGMENT;
|
||||||
class GENERAL_COLLECTOR;
|
class GENERAL_COLLECTOR;
|
||||||
class GENERAL_COLLECTORS_GUIDE;
|
class GENERAL_COLLECTORS_GUIDE;
|
||||||
|
class PCB_LAYER_WIDGET;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -49,34 +49,64 @@ class GENERAL_COLLECTORS_GUIDE;
|
||||||
/*****************************************************/
|
/*****************************************************/
|
||||||
class WinEDA_PcbFrame : public WinEDA_BasePcbFrame
|
class WinEDA_PcbFrame : public WinEDA_BasePcbFrame
|
||||||
{
|
{
|
||||||
|
friend class PCB_LAYER_WIDGET;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|
||||||
|
PCB_LAYER_WIDGET* m_Layers;
|
||||||
|
|
||||||
|
DRC* m_drc; ///< the DRC controller, see drc.cpp
|
||||||
|
|
||||||
|
// we'll use lower case function names for private member functions.
|
||||||
|
void createPopUpMenuForZones( ZONE_CONTAINER* edge_zone, wxMenu* aPopMenu );
|
||||||
|
void createPopUpMenuForFootprints( MODULE* aModule, wxMenu* aPopMenu );
|
||||||
|
void createPopUpMenuForFpTexts( TEXTE_MODULE* aText, wxMenu* aPopMenu );
|
||||||
|
void createPopUpMenuForFpPads( D_PAD* aPad, wxMenu* aPopMenu );
|
||||||
|
void createPopupMenuForTracks( TRACK* aTrack, wxMenu* aPopMenu );
|
||||||
|
void createPopUpMenuForTexts( TEXTE_PCB* Text, wxMenu* menu );
|
||||||
|
void createPopUpBlockMenu( wxMenu* menu );
|
||||||
|
void createPopUpMenuForMarkers( MARKER_PCB* aMarker, wxMenu* aPopMenu );
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Class LYRS
|
* Function setActiveLayer
|
||||||
* is here to implement the abtract functions of LAYER_WIDGET so they
|
* will change the currently active layer to \a aLayer and also
|
||||||
* may be tied into this frame's data.
|
* update the PCB_LAYER_WIDGET.
|
||||||
*/
|
*/
|
||||||
class LYRS : public LAYER_WIDGET
|
void setActiveLayer( int aLayer, bool doLayerWidgetUpdate = true )
|
||||||
{
|
{
|
||||||
WinEDA_PcbFrame* myframe;
|
( (PCB_SCREEN*) GetScreen() )->m_Active_Layer = aLayer;
|
||||||
|
|
||||||
public:
|
if( doLayerWidgetUpdate )
|
||||||
LYRS( WinEDA_PcbFrame* aParent, wxWindow* aFocusOwner ) :
|
syncLayerWidget();
|
||||||
LAYER_WIDGET( aParent, aFocusOwner ),
|
}
|
||||||
myframe( aParent )
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
//-----<implement LAYER_WIDGET abstract callback functions>-----------
|
/**
|
||||||
void OnLayerColorChange( int aLayer, int aColor );
|
* Function getActiveLayer
|
||||||
bool OnLayerSelect( int aLayer );
|
* returns the active layer
|
||||||
void OnLayerVisible( int aLayer, bool isVisible, bool isFinal );
|
*/
|
||||||
void OnRenderColorChange( int aId, int aColor );
|
int getActiveLayer()
|
||||||
void OnRenderEnable( int aId, bool isEnabled );
|
{
|
||||||
//-----</implement LAYER_WIDGET abstract callback functions>----------
|
return ( (PCB_SCREEN*) GetScreen() )->m_Active_Layer;
|
||||||
};
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Function syncLayerWidget
|
||||||
|
* updates the currently "selected" layer within the PCB_LAYER_WIDGET.
|
||||||
|
* The currently active layer is defined by the return value of getActiveLayer().
|
||||||
|
* <p>
|
||||||
|
* This function cannot be inline without including layer_widget.h in
|
||||||
|
* here and we do not want to do that.
|
||||||
|
*/
|
||||||
|
void syncLayerWidget();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Function syncLayerBox
|
||||||
|
* updates the currently "selected" layer within m_SelLayerBox
|
||||||
|
* The currently active layer, as defined by the return value of
|
||||||
|
* getActiveLayer(). And updates the colored icon in the toolbar.
|
||||||
|
*/
|
||||||
|
void syncLayerBox();
|
||||||
|
|
||||||
LYRS* m_Layers; // established in constructor
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
WinEDAChoiceBox* m_SelLayerBox; // a combo box to display and
|
WinEDAChoiceBox* m_SelLayerBox; // a combo box to display and
|
||||||
|
@ -95,19 +125,6 @@ public:
|
||||||
bool m_show_microwave_tools;
|
bool m_show_microwave_tools;
|
||||||
bool m_show_layer_manager_tools;
|
bool m_show_layer_manager_tools;
|
||||||
|
|
||||||
private:
|
|
||||||
|
|
||||||
DRC* m_drc; ///< the DRC controller, see drc.cpp
|
|
||||||
|
|
||||||
// we'll use lower case function names for private member functions.
|
|
||||||
void createPopUpMenuForZones( ZONE_CONTAINER* edge_zone, wxMenu* aPopMenu );
|
|
||||||
void createPopUpMenuForFootprints( MODULE* aModule, wxMenu* aPopMenu );
|
|
||||||
void createPopUpMenuForFpTexts( TEXTE_MODULE* aText, wxMenu* aPopMenu );
|
|
||||||
void createPopUpMenuForFpPads( D_PAD* aPad, wxMenu* aPopMenu );
|
|
||||||
void createPopupMenuForTracks( TRACK* aTrack, wxMenu* aPopMenu );
|
|
||||||
void createPopUpMenuForTexts( TEXTE_PCB* Text, wxMenu* menu );
|
|
||||||
void createPopUpBlockMenu( wxMenu* menu );
|
|
||||||
void createPopUpMenuForMarkers( MARKER_PCB* aMarker, wxMenu* aPopMenu );
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
WinEDA_PcbFrame( wxWindow* father, const wxString& title,
|
WinEDA_PcbFrame( wxWindow* father, const wxString& title,
|
||||||
|
@ -183,13 +200,6 @@ public:
|
||||||
|
|
||||||
/* toolbars update UI functions: */
|
/* toolbars update UI functions: */
|
||||||
|
|
||||||
/**
|
|
||||||
* Function UpdateToolbarLayerInfo
|
|
||||||
* updates the currently selected layer in the layer listbox and
|
|
||||||
* the colored icon in the toolbar.
|
|
||||||
*/
|
|
||||||
void UpdateToolbarLayerInfo();
|
|
||||||
|
|
||||||
void PrepareLayerIndicator();
|
void PrepareLayerIndicator();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -206,14 +216,6 @@ public:
|
||||||
*/
|
*/
|
||||||
void AuxiliaryToolBar_DesignRules_Update_UI();
|
void AuxiliaryToolBar_DesignRules_Update_UI();
|
||||||
|
|
||||||
/** Function SynchronizeLayersManager( )
|
|
||||||
* Must be called when info displayed in the layer manager Toolbar
|
|
||||||
* as been changed in the main window ( by hotkey or a tool option.
|
|
||||||
* Mainly when the active layer as changed.
|
|
||||||
* @param aFlag = flag giving the type of data (layers, checkboxes...)
|
|
||||||
*/
|
|
||||||
void SynchronizeLayersManager( int aFlag );
|
|
||||||
|
|
||||||
/* mouse functions events: */
|
/* mouse functions events: */
|
||||||
void OnLeftClick( wxDC* DC, const wxPoint& MousePos );
|
void OnLeftClick( wxDC* DC, const wxPoint& MousePos );
|
||||||
void OnLeftDClick( wxDC* DC, const wxPoint& MousePos );
|
void OnLeftDClick( wxDC* DC, const wxPoint& MousePos );
|
||||||
|
|
|
@ -111,7 +111,6 @@ 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
|
layer_widget.cpp
|
||||||
librairi.cpp
|
librairi.cpp
|
||||||
loadcmp.cpp
|
loadcmp.cpp
|
||||||
|
@ -243,7 +242,6 @@ endif(NOT MSVC)
|
||||||
|
|
||||||
# This one gets made only when testing.
|
# This one gets made only when testing.
|
||||||
add_executable(layer_widget_test WIN32 EXCLUDE_FROM_ALL
|
add_executable(layer_widget_test WIN32 EXCLUDE_FROM_ALL
|
||||||
layer_panel_base.cpp
|
|
||||||
layer_widget.cpp
|
layer_widget.cpp
|
||||||
)
|
)
|
||||||
target_link_libraries(layer_widget_test common ${wxWidgets_LIBRARIES})
|
target_link_libraries(layer_widget_test common ${wxWidgets_LIBRARIES})
|
||||||
|
|
|
@ -36,7 +36,7 @@ TRACK* WinEDA_PcbFrame::Delete_Segment( wxDC* DC, TRACK* aTrack )
|
||||||
{
|
{
|
||||||
if( g_CurrentTrackList.GetCount() > 0 )
|
if( g_CurrentTrackList.GetCount() > 0 )
|
||||||
{
|
{
|
||||||
int previous_layer = ( (PCB_SCREEN*) GetScreen() )->m_Active_Layer;
|
int previous_layer = getActiveLayer();
|
||||||
|
|
||||||
D( g_CurrentTrackList.VerifyListIntegrity(); )
|
D( g_CurrentTrackList.VerifyListIntegrity(); )
|
||||||
|
|
||||||
|
@ -71,7 +71,7 @@ TRACK* WinEDA_PcbFrame::Delete_Segment( wxDC* DC, TRACK* aTrack )
|
||||||
|
|
||||||
// Correct active layer which could change if a via
|
// Correct active layer which could change if a via
|
||||||
// has been erased
|
// has been erased
|
||||||
( (PCB_SCREEN*) GetScreen() )->m_Active_Layer = previous_layer;
|
setActiveLayer( previous_layer );
|
||||||
|
|
||||||
UpdateStatusBar();
|
UpdateStatusBar();
|
||||||
if( g_TwoSegmentTrackBuild ) // We must have 2 segments or more,
|
if( g_TwoSegmentTrackBuild ) // We must have 2 segments or more,
|
||||||
|
|
|
@ -738,12 +738,10 @@ void WinEDA_PcbFrame::Process_Special_Functions( wxCommandEvent& event )
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ID_POPUP_PCB_SELECT_LAYER:
|
case ID_POPUP_PCB_SELECT_LAYER:
|
||||||
itmp = SelectLayer(
|
itmp = SelectLayer( getActiveLayer(), -1, -1 );
|
||||||
( (PCB_SCREEN*) GetScreen() )->m_Active_Layer, -1, -1 );
|
|
||||||
if( itmp >= 0 )
|
if( itmp >= 0 )
|
||||||
( (PCB_SCREEN*) GetScreen() )->m_Active_Layer = itmp;
|
setActiveLayer( itmp );
|
||||||
DrawPanel->MouseToCursorSchema();
|
DrawPanel->MouseToCursorSchema();
|
||||||
SynchronizeLayersManager( 1 );
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ID_AUX_TOOLBAR_PCB_SELECT_LAYER_PAIR:
|
case ID_AUX_TOOLBAR_PCB_SELECT_LAYER_PAIR:
|
||||||
|
@ -751,24 +749,17 @@ void WinEDA_PcbFrame::Process_Special_Functions( wxCommandEvent& event )
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ID_POPUP_PCB_SELECT_NO_CU_LAYER:
|
case ID_POPUP_PCB_SELECT_NO_CU_LAYER:
|
||||||
itmp = SelectLayer(
|
itmp = SelectLayer( getActiveLayer(), FIRST_NO_COPPER_LAYER, -1 );
|
||||||
( (PCB_SCREEN*) GetScreen() )->m_Active_Layer,
|
|
||||||
FIRST_NO_COPPER_LAYER,
|
|
||||||
-1 );
|
|
||||||
if( itmp >= 0 )
|
if( itmp >= 0 )
|
||||||
( (PCB_SCREEN*) GetScreen() )->m_Active_Layer = itmp;
|
setActiveLayer( itmp );
|
||||||
DrawPanel->MouseToCursorSchema();
|
DrawPanel->MouseToCursorSchema();
|
||||||
SynchronizeLayersManager( 1 );
|
break;
|
||||||
break;
|
|
||||||
|
|
||||||
case ID_POPUP_PCB_SELECT_CU_LAYER:
|
case ID_POPUP_PCB_SELECT_CU_LAYER:
|
||||||
itmp = SelectLayer(
|
itmp = SelectLayer( getActiveLayer(), -1, LAST_COPPER_LAYER );
|
||||||
( (PCB_SCREEN*) GetScreen() )->m_Active_Layer, -1,
|
|
||||||
LAST_COPPER_LAYER );
|
|
||||||
if( itmp >= 0 )
|
if( itmp >= 0 )
|
||||||
( (PCB_SCREEN*) GetScreen() )->m_Active_Layer = itmp;
|
setActiveLayer( itmp );
|
||||||
SynchronizeLayersManager( 1 );
|
break;
|
||||||
break;
|
|
||||||
|
|
||||||
case ID_POPUP_PCB_SELECT_LAYER_PAIR:
|
case ID_POPUP_PCB_SELECT_LAYER_PAIR:
|
||||||
SelectLayerPair();
|
SelectLayerPair();
|
||||||
|
@ -777,9 +768,7 @@ void WinEDA_PcbFrame::Process_Special_Functions( wxCommandEvent& event )
|
||||||
|
|
||||||
case ID_TOOLBARH_PCB_SELECT_LAYER:
|
case ID_TOOLBARH_PCB_SELECT_LAYER:
|
||||||
itmp = m_SelLayerBox->GetChoice();
|
itmp = m_SelLayerBox->GetChoice();
|
||||||
( (PCB_SCREEN*) GetScreen() )->m_Active_Layer =
|
setActiveLayer( (size_t) m_SelLayerBox->GetClientData( itmp ) );
|
||||||
(int) ( (size_t) m_SelLayerBox->GetClientData( itmp ) );
|
|
||||||
SynchronizeLayersManager( 1 ); // Ensure Layer manager synchronization
|
|
||||||
if( DisplayOpt.ContrastModeDisplay )
|
if( DisplayOpt.ContrastModeDisplay )
|
||||||
DrawPanel->Refresh( true );
|
DrawPanel->Refresh( true );
|
||||||
break;
|
break;
|
||||||
|
@ -1076,10 +1065,10 @@ void WinEDA_PcbFrame::RemoveStruct( BOARD_ITEM* Item, wxDC* DC )
|
||||||
|
|
||||||
void WinEDA_PcbFrame::SwitchLayer( wxDC* DC, int layer )
|
void WinEDA_PcbFrame::SwitchLayer( wxDC* DC, int layer )
|
||||||
{
|
{
|
||||||
int preslayer = GetScreen()->m_Active_Layer;
|
int curLayer = getActiveLayer();
|
||||||
|
|
||||||
// Check if the specified layer matches the present layer
|
// Check if the specified layer matches the present layer
|
||||||
if( layer == preslayer )
|
if( layer == curLayer )
|
||||||
return;
|
return;
|
||||||
|
|
||||||
// Copper layers cannot be selected unconditionally; how many
|
// Copper layers cannot be selected unconditionally; how many
|
||||||
|
@ -1087,7 +1076,7 @@ void WinEDA_PcbFrame::SwitchLayer( wxDC* DC, int layer )
|
||||||
if( IsValidCopperLayerIndex( layer ) )
|
if( IsValidCopperLayerIndex( layer ) )
|
||||||
{
|
{
|
||||||
// If only one copper layer is enabled, the only such layer
|
// If only one copper layer is enabled, the only such layer
|
||||||
// that can be selected to is the "Copper" layer (so the
|
// that can be selected to is the "Back" layer (so the
|
||||||
// selection of any other copper layer is disregarded).
|
// selection of any other copper layer is disregarded).
|
||||||
if( GetBoard()->m_BoardSettings->GetCopperLayerCount() < 2 )
|
if( GetBoard()->m_BoardSettings->GetCopperLayerCount() < 2 )
|
||||||
{
|
{
|
||||||
|
@ -1129,9 +1118,10 @@ void WinEDA_PcbFrame::SwitchLayer( wxDC* DC, int layer )
|
||||||
// Want to set the routing layers so that it switches properly -
|
// Want to set the routing layers so that it switches properly -
|
||||||
// see the implementation of Other_Layer_Route - the working
|
// see the implementation of Other_Layer_Route - the working
|
||||||
// layer is used to 'start' the via and set the layer masks appropriately.
|
// layer is used to 'start' the via and set the layer masks appropriately.
|
||||||
GetScreen()->m_Route_Layer_TOP = preslayer;
|
GetScreen()->m_Route_Layer_TOP = curLayer;
|
||||||
GetScreen()->m_Route_Layer_BOTTOM = layer;
|
GetScreen()->m_Route_Layer_BOTTOM = layer;
|
||||||
GetScreen()->m_Active_Layer = preslayer;
|
|
||||||
|
setActiveLayer( curLayer );
|
||||||
|
|
||||||
if( Other_Layer_Route( (TRACK*) GetScreen()->GetCurItem(), DC ) )
|
if( Other_Layer_Route( (TRACK*) GetScreen()->GetCurItem(), DC ) )
|
||||||
{
|
{
|
||||||
|
@ -1140,7 +1130,7 @@ void WinEDA_PcbFrame::SwitchLayer( wxDC* DC, int layer )
|
||||||
}
|
}
|
||||||
// if the via was allowed by DRC, then the layer swap has already
|
// if the via was allowed by DRC, then the layer swap has already
|
||||||
// been done by Other_Layer_Route(). if via not allowed, then
|
// been done by Other_Layer_Route(). if via not allowed, then
|
||||||
// return now so assignment to m_Active_Layer below doesn't happen.
|
// return now so assignment to setActiveLayer() below doesn't happen.
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1151,8 +1141,7 @@ void WinEDA_PcbFrame::SwitchLayer( wxDC* DC, int layer )
|
||||||
// and a non-copper layer, or vice-versa?
|
// and a non-copper layer, or vice-versa?
|
||||||
// ...
|
// ...
|
||||||
|
|
||||||
GetScreen()->m_Active_Layer = layer;
|
setActiveLayer( layer );
|
||||||
SynchronizeLayersManager( 1 ); // Ensure Layer manager synchronization
|
|
||||||
|
|
||||||
if( DisplayOpt.ContrastModeDisplay )
|
if( DisplayOpt.ContrastModeDisplay )
|
||||||
GetScreen()->SetRefreshReq();
|
GetScreen()->SetRefreshReq();
|
||||||
|
|
|
@ -128,17 +128,14 @@ bool WinEDA_PcbFrame::Other_Layer_Route( TRACK* aTrack, wxDC* DC )
|
||||||
|
|
||||||
if( aTrack == NULL )
|
if( aTrack == NULL )
|
||||||
{
|
{
|
||||||
if( ((PCB_SCREEN*)GetScreen())->m_Active_Layer !=
|
if( getActiveLayer() !=
|
||||||
((PCB_SCREEN*)GetScreen())->m_Route_Layer_TOP )
|
((PCB_SCREEN*)GetScreen())->m_Route_Layer_TOP )
|
||||||
((PCB_SCREEN*)GetScreen())->m_Active_Layer =
|
setActiveLayer( ((PCB_SCREEN*)GetScreen())->m_Route_Layer_TOP );
|
||||||
((PCB_SCREEN*)GetScreen())->m_Route_Layer_TOP;
|
|
||||||
else
|
else
|
||||||
((PCB_SCREEN*)GetScreen())->m_Active_Layer =
|
setActiveLayer(((PCB_SCREEN*)GetScreen())->m_Route_Layer_BOTTOM );
|
||||||
((PCB_SCREEN*)GetScreen())->m_Route_Layer_BOTTOM;
|
|
||||||
|
|
||||||
UpdateStatusBar();
|
UpdateStatusBar();
|
||||||
SetToolbars();
|
SetToolbars();
|
||||||
SynchronizeLayersManager( 1 );
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -185,39 +182,34 @@ bool WinEDA_PcbFrame::Other_Layer_Route( TRACK* aTrack, wxDC* DC )
|
||||||
via->m_Width = GetBoard()->GetCurrentViaSize();
|
via->m_Width = GetBoard()->GetCurrentViaSize();
|
||||||
via->SetNet( g_HightLigth_NetCode );
|
via->SetNet( g_HightLigth_NetCode );
|
||||||
via->m_Start = via->m_End = g_CurrentTrackSegment->m_End;
|
via->m_Start = via->m_End = g_CurrentTrackSegment->m_End;
|
||||||
int old_layer = ((PCB_SCREEN*)GetScreen())->m_Active_Layer;
|
int old_layer = getActiveLayer();
|
||||||
|
|
||||||
// swap the layers.
|
// swap the layers.
|
||||||
if( ((PCB_SCREEN*)GetScreen())->m_Active_Layer !=
|
if( getActiveLayer() !=
|
||||||
((PCB_SCREEN*)GetScreen())->m_Route_Layer_TOP )
|
((PCB_SCREEN*)GetScreen())->m_Route_Layer_TOP )
|
||||||
((PCB_SCREEN*)GetScreen())->m_Active_Layer =
|
setActiveLayer(((PCB_SCREEN*)GetScreen())->m_Route_Layer_TOP );
|
||||||
((PCB_SCREEN*)GetScreen())->m_Route_Layer_TOP;
|
|
||||||
else
|
else
|
||||||
((PCB_SCREEN*)GetScreen())->m_Active_Layer =
|
setActiveLayer( ((PCB_SCREEN*)GetScreen())->m_Route_Layer_BOTTOM );
|
||||||
((PCB_SCREEN*)GetScreen())->m_Route_Layer_BOTTOM;
|
|
||||||
|
|
||||||
/* Adjust the via layer pair */
|
/* Adjust the via layer pair */
|
||||||
switch ( via->Shape() )
|
switch ( via->Shape() )
|
||||||
{
|
{
|
||||||
case VIA_BLIND_BURIED:
|
case VIA_BLIND_BURIED:
|
||||||
via->SetLayerPair( old_layer,
|
via->SetLayerPair( old_layer, getActiveLayer() );
|
||||||
((PCB_SCREEN*)GetScreen())->m_Active_Layer );
|
|
||||||
via->SetDrillValue( GetBoard()->GetCurrentViaDrill() );
|
via->SetDrillValue( GetBoard()->GetCurrentViaDrill() );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case VIA_MICROVIA: // from external to the near neighbor inner layer
|
case VIA_MICROVIA: // from external to the near neighbor inner layer
|
||||||
if ( old_layer == LAYER_N_BACK )
|
if ( old_layer == LAYER_N_BACK )
|
||||||
((PCB_SCREEN*)GetScreen())->m_Active_Layer = LAYER_N_2;
|
setActiveLayer( LAYER_N_2 );
|
||||||
else if ( old_layer == LAYER_N_FRONT )
|
else if ( old_layer == LAYER_N_FRONT )
|
||||||
((PCB_SCREEN*)GetScreen())->m_Active_Layer =
|
setActiveLayer( GetBoard()->m_BoardSettings->GetCopperLayerCount() - 2 );
|
||||||
GetBoard()->m_BoardSettings->GetCopperLayerCount() - 2;
|
|
||||||
else if ( old_layer == LAYER_N_2 )
|
else if ( old_layer == LAYER_N_2 )
|
||||||
((PCB_SCREEN*)GetScreen())->m_Active_Layer = LAYER_N_BACK;
|
setActiveLayer( LAYER_N_BACK );
|
||||||
else if ( old_layer == GetBoard()->m_BoardSettings->GetCopperLayerCount() - 2 )
|
else if ( old_layer == GetBoard()->m_BoardSettings->GetCopperLayerCount() - 2 );
|
||||||
((PCB_SCREEN*)GetScreen())->m_Active_Layer = LAYER_N_FRONT;
|
setActiveLayer( LAYER_N_FRONT );
|
||||||
// else error
|
// else error
|
||||||
via->SetLayerPair( old_layer,
|
via->SetLayerPair( old_layer, getActiveLayer() );
|
||||||
((PCB_SCREEN*)GetScreen())->m_Active_Layer );
|
|
||||||
{
|
{
|
||||||
NETINFO_ITEM* net = GetBoard()->FindNet( via->GetNet() );
|
NETINFO_ITEM* net = GetBoard()->FindNet( via->GetNet() );
|
||||||
via->m_Width = net->GetMicroViaSize();
|
via->m_Width = net->GetMicroViaSize();
|
||||||
|
@ -236,7 +228,7 @@ bool WinEDA_PcbFrame::Other_Layer_Route( TRACK* aTrack, wxDC* DC )
|
||||||
/* DRC fault: the Via cannot be placed here ... */
|
/* DRC fault: the Via cannot be placed here ... */
|
||||||
delete via;
|
delete via;
|
||||||
|
|
||||||
((PCB_SCREEN*)GetScreen())->m_Active_Layer = old_layer;
|
setActiveLayer( old_layer );
|
||||||
|
|
||||||
DrawPanel->ManageCurseur( DrawPanel, DC, FALSE );
|
DrawPanel->ManageCurseur( DrawPanel, DC, FALSE );
|
||||||
|
|
||||||
|
@ -274,7 +266,7 @@ bool WinEDA_PcbFrame::Other_Layer_Route( TRACK* aTrack, wxDC* DC )
|
||||||
*/
|
*/
|
||||||
|
|
||||||
// set the layer to the new value
|
// set the layer to the new value
|
||||||
track->SetLayer( ((PCB_SCREEN*)GetScreen())->m_Active_Layer );
|
track->SetLayer( getActiveLayer() );
|
||||||
|
|
||||||
/* the start point is the via position and the end point is the cursor
|
/* the start point is the via position and the end point is the cursor
|
||||||
* which also is on the via (will change when moving mouse)
|
* which also is on the via (will change when moving mouse)
|
||||||
|
@ -294,7 +286,6 @@ bool WinEDA_PcbFrame::Other_Layer_Route( TRACK* aTrack, wxDC* DC )
|
||||||
|
|
||||||
UpdateStatusBar();
|
UpdateStatusBar();
|
||||||
SetToolbars();
|
SetToolbars();
|
||||||
SynchronizeLayersManager( 1 );
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -307,8 +298,7 @@ bool WinEDA_PcbFrame::Other_Layer_Route( TRACK* aTrack, wxDC* DC )
|
||||||
void WinEDA_PcbFrame::Affiche_Status_Net( wxDC* DC )
|
void WinEDA_PcbFrame::Affiche_Status_Net( wxDC* DC )
|
||||||
{
|
{
|
||||||
TRACK* pt_segm;
|
TRACK* pt_segm;
|
||||||
int masquelayer =
|
int masquelayer = (1 << getActiveLayer());
|
||||||
g_TabOneLayerMask[((PCB_SCREEN*)GetScreen())->m_Active_Layer];
|
|
||||||
|
|
||||||
pt_segm = Locate_Pistes( GetBoard()->m_Track, masquelayer,
|
pt_segm = Locate_Pistes( GetBoard()->m_Track, masquelayer,
|
||||||
CURSEUR_OFF_GRILLE );
|
CURSEUR_OFF_GRILLE );
|
||||||
|
|
|
@ -1,88 +0,0 @@
|
||||||
///////////////////////////////////////////////////////////////////////////
|
|
||||||
// C++ code generated with wxFormBuilder (version Dec 29 2008)
|
|
||||||
// http://www.wxformbuilder.org/
|
|
||||||
//
|
|
||||||
// PLEASE DO "NOT" EDIT THIS FILE!
|
|
||||||
///////////////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
#include "layer_panel_base.h"
|
|
||||||
|
|
||||||
#include <wx/settings.h>
|
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
LAYER_PANEL_BASE::LAYER_PANEL_BASE( wxWindow* parent, wxWindowID id, const wxPoint& pos, const wxSize& size, long style ) : wxPanel( parent, id, pos, size, style )
|
|
||||||
{
|
|
||||||
wxBoxSizer* boxSizer;
|
|
||||||
boxSizer = new wxBoxSizer( wxVERTICAL );
|
|
||||||
|
|
||||||
// m_notebook = new wxNotebook( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0 );
|
|
||||||
|
|
||||||
m_notebook = new wxAuiNotebook( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxAUI_NB_TOP );
|
|
||||||
|
|
||||||
// wxFont font = wxSystemSettings::GetFont( wxSYS_DEFAULT_GUI_FONT );
|
|
||||||
wxFont font = m_notebook->GetFont();
|
|
||||||
font.SetPointSize( (font.GetPointSize() * 8) / 10 );
|
|
||||||
m_notebook->SetFont( font );
|
|
||||||
m_notebook->SetNormalFont( font );
|
|
||||||
m_notebook->SetSelectedFont( font );
|
|
||||||
m_notebook->SetMeasuringFont( font );
|
|
||||||
|
|
||||||
|
|
||||||
m_LayerPanel = new wxPanel( m_notebook, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
|
|
||||||
|
|
||||||
wxBoxSizer* bSizer3;
|
|
||||||
bSizer3 = new wxBoxSizer( wxVERTICAL );
|
|
||||||
|
|
||||||
m_LayerScrolledWindow = new wxScrolledWindow( m_LayerPanel, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxNO_BORDER );
|
|
||||||
m_LayerScrolledWindow->SetScrollRate( 5, 5 );
|
|
||||||
m_LayersFlexGridSizer = new wxFlexGridSizer( 0, 4, 0, 1 );
|
|
||||||
m_LayersFlexGridSizer->SetFlexibleDirection( wxHORIZONTAL );
|
|
||||||
m_LayersFlexGridSizer->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
|
|
||||||
|
|
||||||
m_LayerScrolledWindow->SetSizer( m_LayersFlexGridSizer );
|
|
||||||
m_LayerScrolledWindow->Layout();
|
|
||||||
m_LayersFlexGridSizer->Fit( m_LayerScrolledWindow );
|
|
||||||
bSizer3->Add( m_LayerScrolledWindow, 1, wxBOTTOM|wxEXPAND|wxLEFT|wxTOP, 2 );
|
|
||||||
|
|
||||||
m_LayerPanel->SetSizer( bSizer3 );
|
|
||||||
m_LayerPanel->Layout();
|
|
||||||
bSizer3->Fit( m_LayerPanel );
|
|
||||||
m_notebook->AddPage( m_LayerPanel, _("Layer"), true );
|
|
||||||
m_RenderingPanel = new wxPanel( m_notebook, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
|
|
||||||
|
|
||||||
wxBoxSizer* bSizer4;
|
|
||||||
bSizer4 = new wxBoxSizer( wxVERTICAL );
|
|
||||||
|
|
||||||
m_RenderScrolledWindow = new wxScrolledWindow( m_RenderingPanel, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxNO_BORDER );
|
|
||||||
m_RenderScrolledWindow->SetScrollRate( 5, 5 );
|
|
||||||
m_RenderFlexGridSizer = new wxFlexGridSizer( 0, 2, 0, 1 );
|
|
||||||
m_RenderFlexGridSizer->SetFlexibleDirection( wxHORIZONTAL );
|
|
||||||
m_RenderFlexGridSizer->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_NONE );
|
|
||||||
|
|
||||||
m_RenderScrolledWindow->SetSizer( m_RenderFlexGridSizer );
|
|
||||||
m_RenderScrolledWindow->Layout();
|
|
||||||
m_RenderFlexGridSizer->Fit( m_RenderScrolledWindow );
|
|
||||||
bSizer4->Add( m_RenderScrolledWindow, 1, wxALL|wxEXPAND, 5 );
|
|
||||||
|
|
||||||
m_RenderingPanel->SetSizer( bSizer4 );
|
|
||||||
m_RenderingPanel->Layout();
|
|
||||||
bSizer4->Fit( m_RenderingPanel );
|
|
||||||
m_notebook->AddPage( m_RenderingPanel, _("Render"), false );
|
|
||||||
|
|
||||||
boxSizer->Add( m_notebook, 1, wxEXPAND | wxALL, 5 );
|
|
||||||
|
|
||||||
this->SetSizer( boxSizer );
|
|
||||||
this->Layout();
|
|
||||||
|
|
||||||
// Connect Events
|
|
||||||
m_LayerScrolledWindow->Connect( wxEVT_LEFT_DOWN, wxMouseEventHandler( LAYER_PANEL_BASE::OnLeftDownLayers ), NULL, this );
|
|
||||||
m_LayerScrolledWindow->Connect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( LAYER_PANEL_BASE::OnRightDownLayers ), NULL, this );
|
|
||||||
}
|
|
||||||
|
|
||||||
LAYER_PANEL_BASE::~LAYER_PANEL_BASE()
|
|
||||||
{
|
|
||||||
// Disconnect Events
|
|
||||||
m_LayerScrolledWindow->Disconnect( wxEVT_LEFT_DOWN, wxMouseEventHandler( LAYER_PANEL_BASE::OnLeftDownLayers ), NULL, this );
|
|
||||||
m_LayerScrolledWindow->Disconnect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( LAYER_PANEL_BASE::OnRightDownLayers ), NULL, this );
|
|
||||||
}
|
|
|
@ -1,59 +0,0 @@
|
||||||
///////////////////////////////////////////////////////////////////////////
|
|
||||||
// C++ code generated with wxFormBuilder (version Dec 29 2008)
|
|
||||||
// http://www.wxformbuilder.org/
|
|
||||||
//
|
|
||||||
// PLEASE DO "NOT" EDIT THIS FILE!
|
|
||||||
///////////////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
#ifndef __layer_panel_base__
|
|
||||||
#define __layer_panel_base__
|
|
||||||
|
|
||||||
#include <wx/intl.h>
|
|
||||||
|
|
||||||
#include <wx/sizer.h>
|
|
||||||
#include <wx/gdicmn.h>
|
|
||||||
#include <wx/scrolwin.h>
|
|
||||||
#include <wx/font.h>
|
|
||||||
#include <wx/colour.h>
|
|
||||||
#include <wx/settings.h>
|
|
||||||
#include <wx/string.h>
|
|
||||||
#include <wx/panel.h>
|
|
||||||
#include <wx/bitmap.h>
|
|
||||||
#include <wx/image.h>
|
|
||||||
#include <wx/icon.h>
|
|
||||||
//#include <wx/notebook.h>
|
|
||||||
#include <wx/aui/auibook.h>
|
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////
|
|
||||||
/// Class LAYER_PANEL_BASE
|
|
||||||
///////////////////////////////////////////////////////////////////////////////
|
|
||||||
class LAYER_PANEL_BASE : public wxPanel
|
|
||||||
{
|
|
||||||
private:
|
|
||||||
|
|
||||||
protected:
|
|
||||||
// wxNotebook* m_notebook;
|
|
||||||
wxAuiNotebook* m_notebook;
|
|
||||||
|
|
||||||
wxPanel* m_LayerPanel;
|
|
||||||
wxScrolledWindow* m_LayerScrolledWindow;
|
|
||||||
wxFlexGridSizer* m_LayersFlexGridSizer;
|
|
||||||
wxPanel* m_RenderingPanel;
|
|
||||||
wxScrolledWindow* m_RenderScrolledWindow;
|
|
||||||
wxFlexGridSizer* m_RenderFlexGridSizer;
|
|
||||||
|
|
||||||
// Virtual event handlers, overide them in your derived class
|
|
||||||
virtual void OnLeftDownLayers( wxMouseEvent& event ){ event.Skip(); }
|
|
||||||
virtual void OnRightDownLayers( wxMouseEvent& event ){ event.Skip(); }
|
|
||||||
|
|
||||||
|
|
||||||
public:
|
|
||||||
LAYER_PANEL_BASE( wxWindow* parent, wxWindowID id = wxID_ANY, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 200,200 ), long style = wxTAB_TRAVERSAL );
|
|
||||||
~LAYER_PANEL_BASE();
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif //__layer_panel_base__
|
|
|
@ -26,6 +26,7 @@
|
||||||
|
|
||||||
|
|
||||||
/* This source module implements the layer visibility and selection widget
|
/* This source module implements the layer visibility and selection widget
|
||||||
|
@todo make the bitmapbutton a staticbitmap, and make dependent on the point size.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
@ -33,31 +34,19 @@
|
||||||
// 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 "layer_widget.h"
|
||||||
#include <wx/notebook.h>
|
|
||||||
|
|
||||||
#include "macros.h"
|
#include "macros.h"
|
||||||
#include "common.h"
|
#include "common.h"
|
||||||
#include "colors.h"
|
#include "colors.h"
|
||||||
|
|
||||||
#include "layer_widget.h"
|
|
||||||
|
|
||||||
#include "pcbstruct.h" // IsValidCopperLayerIndex()
|
|
||||||
|
|
||||||
|
|
||||||
#define LYR_COLUMN_COUNT 4 ///< Layer tab column count
|
|
||||||
#define RND_COLUMN_COUNT 2 ///< Rendering tab column count
|
|
||||||
|
|
||||||
#define BUTT_SIZE_X 20
|
#define BUTT_SIZE_X 20
|
||||||
#define BUTT_SIZE_Y 18
|
#define BUTT_SIZE_Y 18
|
||||||
#define BUTT_VOID 4
|
#define BUTT_VOID 4
|
||||||
|
|
||||||
|
|
||||||
#define ID_SHOW_ALL_COPPERS wxID_HIGHEST
|
|
||||||
#define ID_SHOW_NO_COPPERS (wxID_HIGHEST+1)
|
|
||||||
|
|
||||||
|
|
||||||
/* XPM */
|
/* XPM */
|
||||||
static const char * clear_xpm[] = {
|
static const char * clear_xpm[] = {
|
||||||
"10 14 1 1",
|
"10 14 1 1",
|
||||||
|
@ -100,30 +89,6 @@ static const char * rightarrow_xpm[] = {
|
||||||
" ooO ",
|
" ooO ",
|
||||||
" oO "};
|
" oO "};
|
||||||
|
|
||||||
/**
|
|
||||||
* Function encodeId
|
|
||||||
* is here to allow saving a layer index within a control as its wxControl id,
|
|
||||||
* but to do so in a way that all child wxControl ids within a wxWindow are unique,
|
|
||||||
* since this is required by Windows.
|
|
||||||
* @see getDecodedId()
|
|
||||||
*/
|
|
||||||
static int encodeId( int aColumn, int aId )
|
|
||||||
{
|
|
||||||
int id = aId * LYR_COLUMN_COUNT + aColumn;
|
|
||||||
return id;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Function getDecodedId
|
|
||||||
* decodes \a aControlId to original un-encoded value.
|
|
||||||
*/
|
|
||||||
static int getDecodedId( int aControlId )
|
|
||||||
{
|
|
||||||
int id = aControlId / LYR_COLUMN_COUNT; // rounding is OK.
|
|
||||||
return id;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Function makeColorTxt
|
* Function makeColorTxt
|
||||||
|
@ -142,13 +107,28 @@ static wxString makeColorTxt( int aColor )
|
||||||
* Function shrinkFont
|
* Function shrinkFont
|
||||||
* reduces the size of the wxFont associated with \a aControl
|
* reduces the size of the wxFont associated with \a aControl
|
||||||
*/
|
*/
|
||||||
static void shrinkFont( wxWindow* aControl )
|
static void shrinkFont( wxWindow* aControl, int aPointSize )
|
||||||
{
|
{
|
||||||
wxFont font = aControl->GetFont();
|
wxFont font = aControl->GetFont();
|
||||||
font.SetPointSize( (font.GetPointSize() * 8) / 10 ); // go to 80% of original.
|
font.SetPointSize( aPointSize );
|
||||||
aControl->SetFont( font );
|
aControl->SetFont( font ); // need this?
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int LAYER_WIDGET::encodeId( int aColumn, int aId )
|
||||||
|
{
|
||||||
|
int id = aId * LYR_COLUMN_COUNT + aColumn;
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int LAYER_WIDGET::getDecodedId( int aControlId )
|
||||||
|
{
|
||||||
|
int id = aControlId / LYR_COLUMN_COUNT; // rounding is OK.
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
wxBitmap LAYER_WIDGET::makeBitmap( int aColor )
|
wxBitmap LAYER_WIDGET::makeBitmap( int aColor )
|
||||||
{
|
{
|
||||||
// the bitmap will be BUTT_VOID*2 pixels smaller than the button, leaving a
|
// the bitmap will be BUTT_VOID*2 pixels smaller than the button, leaving a
|
||||||
|
@ -185,6 +165,7 @@ wxBitmapButton* LAYER_WIDGET::makeColorButton( wxWindow* aParent, int aColor, in
|
||||||
void LAYER_WIDGET::OnLeftDownLayers( wxMouseEvent& event )
|
void LAYER_WIDGET::OnLeftDownLayers( wxMouseEvent& event )
|
||||||
{
|
{
|
||||||
int row;
|
int row;
|
||||||
|
int layer;
|
||||||
|
|
||||||
wxWindow* eventSource = (wxWindow*) event.GetEventObject();
|
wxWindow* eventSource = (wxWindow*) event.GetEventObject();
|
||||||
|
|
||||||
|
@ -209,17 +190,20 @@ void LAYER_WIDGET::OnLeftDownLayers( wxMouseEvent& event )
|
||||||
|
|
||||||
if( row >= rowCount )
|
if( row >= rowCount )
|
||||||
row = rowCount - 1;
|
row = rowCount - 1;
|
||||||
|
|
||||||
|
layer = getDecodedId( getLayerComp( row * LYR_COLUMN_COUNT )->GetId() );
|
||||||
}
|
}
|
||||||
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// all nested controls on a given row will have their ID encoded with
|
// all nested controls on a given row will have their ID encoded with
|
||||||
// encodeId(), and the corresponding decoding is getDecodedId()
|
// encodeId(), and the corresponding decoding is getDecodedId()
|
||||||
int layer = getDecodedId( eventSource ->GetId() );
|
int id = eventSource->GetId();
|
||||||
row = findLayerRow( layer );
|
layer = getDecodedId( id );
|
||||||
|
row = findLayerRow( layer );
|
||||||
}
|
}
|
||||||
|
|
||||||
if( OnLayerSelect( row ) ) // if client allows this change.
|
if( OnLayerSelect( layer ) ) // if client allows this change.
|
||||||
SelectLayerRow( row );
|
SelectLayerRow( row );
|
||||||
|
|
||||||
passOnFocus();
|
passOnFocus();
|
||||||
|
@ -252,73 +236,6 @@ void LAYER_WIDGET::OnMiddleDownLayerColor( wxMouseEvent& event )
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void 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 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*LYR_COLUMN_COUNT + 3 );
|
|
||||||
int layer = getDecodedId( cb->GetId() );
|
|
||||||
if( IsValidCopperLayerIndex( layer ) )
|
|
||||||
{
|
|
||||||
lastCu = row;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for( int row=0; row<rowCount; ++row )
|
|
||||||
{
|
|
||||||
wxCheckBox* cb = (wxCheckBox*) getLayerComp( row*LYR_COLUMN_COUNT + 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 LAYER_WIDGET::OnLayerCheckBox( wxCommandEvent& event )
|
void LAYER_WIDGET::OnLayerCheckBox( wxCommandEvent& event )
|
||||||
{
|
{
|
||||||
wxCheckBox* eventSource = (wxCheckBox*) event.GetEventObject();
|
wxCheckBox* eventSource = (wxCheckBox*) event.GetEventObject();
|
||||||
|
@ -406,7 +323,6 @@ void LAYER_WIDGET::insertLayerRow( int aRow, const ROW& aSpec )
|
||||||
wxStaticBitmap* sbm = new wxStaticBitmap( m_LayerScrolledWindow, encodeId( col, aSpec.id ),
|
wxStaticBitmap* sbm = new wxStaticBitmap( m_LayerScrolledWindow, encodeId( col, aSpec.id ),
|
||||||
*m_BlankBitmap, wxDefaultPosition, m_BitmapSize );
|
*m_BlankBitmap, wxDefaultPosition, m_BitmapSize );
|
||||||
sbm->Connect( wxEVT_LEFT_DOWN, wxMouseEventHandler( LAYER_WIDGET::OnLeftDownLayers ), NULL, this );
|
sbm->Connect( wxEVT_LEFT_DOWN, wxMouseEventHandler( LAYER_WIDGET::OnLeftDownLayers ), NULL, this );
|
||||||
sbm->Connect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( LAYER_WIDGET::OnRightDownLayers ), NULL, this );
|
|
||||||
m_LayersFlexGridSizer->wxSizer::Insert( index+col, sbm, 0, flags );
|
m_LayersFlexGridSizer->wxSizer::Insert( index+col, sbm, 0, flags );
|
||||||
|
|
||||||
// column 1
|
// column 1
|
||||||
|
@ -414,16 +330,14 @@ void LAYER_WIDGET::insertLayerRow( int aRow, const ROW& aSpec )
|
||||||
wxBitmapButton* bmb = makeColorButton( m_LayerScrolledWindow, aSpec.color, encodeId( col, aSpec.id ) );
|
wxBitmapButton* bmb = makeColorButton( m_LayerScrolledWindow, aSpec.color, encodeId( col, aSpec.id ) );
|
||||||
bmb->Connect( wxEVT_LEFT_DOWN, wxMouseEventHandler( LAYER_WIDGET::OnLeftDownLayers ), NULL, this );
|
bmb->Connect( wxEVT_LEFT_DOWN, wxMouseEventHandler( LAYER_WIDGET::OnLeftDownLayers ), NULL, this );
|
||||||
bmb->Connect( wxEVT_MIDDLE_DOWN, wxMouseEventHandler( LAYER_WIDGET::OnMiddleDownLayerColor ), NULL, this );
|
bmb->Connect( wxEVT_MIDDLE_DOWN, wxMouseEventHandler( LAYER_WIDGET::OnMiddleDownLayerColor ), NULL, this );
|
||||||
bmb->Connect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( LAYER_WIDGET::OnRightDownLayers ), NULL, this );
|
|
||||||
bmb->SetToolTip( _("Left click to select, middle click for color change, right click for menu" ) );
|
bmb->SetToolTip( _("Left click to select, middle click for color change, right click for menu" ) );
|
||||||
m_LayersFlexGridSizer->wxSizer::Insert( index+col, bmb, 0, flags );
|
m_LayersFlexGridSizer->wxSizer::Insert( index+col, bmb, 0, flags );
|
||||||
|
|
||||||
// column 2
|
// column 2
|
||||||
col = 2;
|
col = 2;
|
||||||
wxStaticText* st = new wxStaticText( m_LayerScrolledWindow, encodeId( col, aSpec.id ), aSpec.rowName );
|
wxStaticText* st = new wxStaticText( m_LayerScrolledWindow, encodeId( col, aSpec.id ), aSpec.rowName );
|
||||||
shrinkFont( st );
|
shrinkFont( st, m_PointSize );
|
||||||
st->Connect( wxEVT_LEFT_DOWN, wxMouseEventHandler( LAYER_WIDGET::OnLeftDownLayers ), NULL, this );
|
st->Connect( wxEVT_LEFT_DOWN, wxMouseEventHandler( LAYER_WIDGET::OnLeftDownLayers ), NULL, this );
|
||||||
st->Connect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( LAYER_WIDGET::OnRightDownLayers ), NULL, this );
|
|
||||||
st->SetToolTip( aSpec.tooltip );
|
st->SetToolTip( aSpec.tooltip );
|
||||||
m_LayersFlexGridSizer->wxSizer::Insert( index+col, st, 0, flags );
|
m_LayersFlexGridSizer->wxSizer::Insert( index+col, st, 0, flags );
|
||||||
|
|
||||||
|
@ -467,7 +381,7 @@ void LAYER_WIDGET::insertRenderRow( int aRow, const ROW& aSpec )
|
||||||
col = 1;
|
col = 1;
|
||||||
wxCheckBox* cb = new wxCheckBox( m_RenderScrolledWindow, encodeId( col, aSpec.id ),
|
wxCheckBox* cb = new wxCheckBox( m_RenderScrolledWindow, encodeId( col, aSpec.id ),
|
||||||
aSpec.rowName, wxDefaultPosition, wxDefaultSize, wxALIGN_LEFT );
|
aSpec.rowName, wxDefaultPosition, wxDefaultSize, wxALIGN_LEFT );
|
||||||
shrinkFont( cb );
|
shrinkFont( cb, m_PointSize );
|
||||||
cb->SetValue( aSpec.state );
|
cb->SetValue( aSpec.state );
|
||||||
cb->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED,
|
cb->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED,
|
||||||
wxCommandEventHandler( LAYER_WIDGET::OnRenderCheckBox ), NULL, this );
|
wxCommandEventHandler( LAYER_WIDGET::OnRenderCheckBox ), NULL, this );
|
||||||
|
@ -484,31 +398,84 @@ void LAYER_WIDGET::passOnFocus()
|
||||||
|
|
||||||
//-----<public>-------------------------------------------------------
|
//-----<public>-------------------------------------------------------
|
||||||
|
|
||||||
LAYER_WIDGET::LAYER_WIDGET( wxWindow* aParent, wxWindow* aFocusOwner ) :
|
LAYER_WIDGET::LAYER_WIDGET( wxWindow* aParent, wxWindow* aFocusOwner, int aPointSize,
|
||||||
LAYER_PANEL_BASE( aParent )
|
wxWindowID id, const wxPoint& pos, const wxSize& size, long style ) :
|
||||||
|
wxPanel( aParent, id, pos, size, style )
|
||||||
{
|
{
|
||||||
|
m_PointSize = aPointSize;
|
||||||
|
|
||||||
|
wxBoxSizer* boxSizer;
|
||||||
|
boxSizer = new wxBoxSizer( wxVERTICAL );
|
||||||
|
|
||||||
|
m_notebook = new wxAuiNotebook( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxAUI_NB_TOP );
|
||||||
|
|
||||||
|
// change the font size on the notebook's tabs to match aPointSize
|
||||||
|
wxFont font = m_notebook->GetFont();
|
||||||
|
font.SetPointSize( aPointSize );
|
||||||
|
m_notebook->SetFont( font );
|
||||||
|
m_notebook->SetNormalFont( font );
|
||||||
|
m_notebook->SetSelectedFont( font );
|
||||||
|
m_notebook->SetMeasuringFont( font );
|
||||||
|
|
||||||
|
m_LayerPanel = new wxPanel( m_notebook, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
|
||||||
|
|
||||||
|
wxBoxSizer* bSizer3;
|
||||||
|
bSizer3 = new wxBoxSizer( wxVERTICAL );
|
||||||
|
|
||||||
|
m_LayerScrolledWindow = new wxScrolledWindow( m_LayerPanel, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxNO_BORDER );
|
||||||
|
m_LayerScrolledWindow->SetScrollRate( 5, 5 );
|
||||||
|
m_LayersFlexGridSizer = new wxFlexGridSizer( 0, 4, 0, 1 );
|
||||||
|
m_LayersFlexGridSizer->SetFlexibleDirection( wxHORIZONTAL );
|
||||||
|
m_LayersFlexGridSizer->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
|
||||||
|
|
||||||
|
m_LayerScrolledWindow->SetSizer( m_LayersFlexGridSizer );
|
||||||
|
m_LayerScrolledWindow->Layout();
|
||||||
|
m_LayersFlexGridSizer->Fit( m_LayerScrolledWindow );
|
||||||
|
bSizer3->Add( m_LayerScrolledWindow, 1, wxBOTTOM|wxEXPAND|wxLEFT|wxTOP, 2 );
|
||||||
|
|
||||||
|
m_LayerPanel->SetSizer( bSizer3 );
|
||||||
|
m_LayerPanel->Layout();
|
||||||
|
bSizer3->Fit( m_LayerPanel );
|
||||||
|
m_notebook->AddPage( m_LayerPanel, _("Layer"), true );
|
||||||
|
m_RenderingPanel = new wxPanel( m_notebook, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
|
||||||
|
|
||||||
|
wxBoxSizer* bSizer4;
|
||||||
|
bSizer4 = new wxBoxSizer( wxVERTICAL );
|
||||||
|
|
||||||
|
m_RenderScrolledWindow = new wxScrolledWindow( m_RenderingPanel, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxNO_BORDER );
|
||||||
|
m_RenderScrolledWindow->SetScrollRate( 5, 5 );
|
||||||
|
m_RenderFlexGridSizer = new wxFlexGridSizer( 0, 2, 0, 1 );
|
||||||
|
m_RenderFlexGridSizer->SetFlexibleDirection( wxHORIZONTAL );
|
||||||
|
m_RenderFlexGridSizer->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_NONE );
|
||||||
|
|
||||||
|
m_RenderScrolledWindow->SetSizer( m_RenderFlexGridSizer );
|
||||||
|
m_RenderScrolledWindow->Layout();
|
||||||
|
m_RenderFlexGridSizer->Fit( m_RenderScrolledWindow );
|
||||||
|
bSizer4->Add( m_RenderScrolledWindow, 1, wxALL|wxEXPAND, 5 );
|
||||||
|
|
||||||
|
m_RenderingPanel->SetSizer( bSizer4 );
|
||||||
|
m_RenderingPanel->Layout();
|
||||||
|
bSizer4->Fit( m_RenderingPanel );
|
||||||
|
m_notebook->AddPage( m_RenderingPanel, _("Render"), false );
|
||||||
|
|
||||||
|
boxSizer->Add( m_notebook, 1, wxEXPAND | wxALL, 5 );
|
||||||
|
|
||||||
|
SetSizer( boxSizer );
|
||||||
|
|
||||||
m_FocusOwner = aFocusOwner;
|
m_FocusOwner = aFocusOwner;
|
||||||
|
|
||||||
m_CurrentRow = -1;
|
m_CurrentRow = -1; // hide the arrow initially
|
||||||
|
|
||||||
m_RightArrowBitmap = new wxBitmap( rightarrow_xpm );
|
m_RightArrowBitmap = new wxBitmap( rightarrow_xpm );
|
||||||
|
|
||||||
m_BlankBitmap = new wxBitmap( clear_xpm ); // translucent
|
m_BlankBitmap = new wxBitmap( clear_xpm ); // translucent
|
||||||
m_BitmapSize = wxSize(m_BlankBitmap->GetWidth(), m_BlankBitmap->GetHeight());
|
m_BitmapSize = wxSize(m_BlankBitmap->GetWidth(), m_BlankBitmap->GetHeight());
|
||||||
|
|
||||||
// handle the popup menu over the layer window
|
|
||||||
m_LayerScrolledWindow->Connect( wxEVT_RIGHT_DOWN,
|
|
||||||
wxMouseEventHandler( 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( LAYER_WIDGET::OnPopupSelection ), NULL, this );
|
|
||||||
|
|
||||||
// trap the tab changes so that we can call passOnFocus().
|
// trap the tab changes so that we can call passOnFocus().
|
||||||
m_notebook->Connect( -1, wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGED,
|
m_notebook->Connect( -1, wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGED,
|
||||||
wxNotebookEventHandler( LAYER_WIDGET::OnTabChange ), NULL, this );
|
wxNotebookEventHandler( LAYER_WIDGET::OnTabChange ), NULL, this );
|
||||||
|
|
||||||
|
Layout();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -518,7 +485,7 @@ wxSize LAYER_WIDGET::GetBestSize() const
|
||||||
wxSize layerz = m_LayersFlexGridSizer->GetMinSize();
|
wxSize layerz = m_LayersFlexGridSizer->GetMinSize();
|
||||||
wxSize renderz = m_RenderFlexGridSizer->GetMinSize();
|
wxSize renderz = m_RenderFlexGridSizer->GetMinSize();
|
||||||
|
|
||||||
wxSize clientz( max(renderz.x,layerz.x), max(renderz.y,layerz.y) );
|
wxSize clientz( MAX(renderz.x,layerz.x), MAX(renderz.y,layerz.y) );
|
||||||
|
|
||||||
return ClientToWindowSize( clientz );
|
return ClientToWindowSize( clientz );
|
||||||
|
|
||||||
|
@ -593,7 +560,7 @@ wxSize LAYER_WIDGET::GetBestSize() const
|
||||||
|
|
||||||
renderz += m_RenderingPanel->GetWindowBorderSize();
|
renderz += m_RenderingPanel->GetWindowBorderSize();
|
||||||
|
|
||||||
wxSize clientz( max(renderz.x,layerz.x), max(renderz.y,layerz.y) );
|
wxSize clientz( MAX(renderz.x,layerz.x), MAX(renderz.y,layerz.y) );
|
||||||
|
|
||||||
// wxSize diffz( GetSize() - GetClientSize() );
|
// wxSize diffz( GetSize() - GetClientSize() );
|
||||||
// clientz += diffz;
|
// clientz += diffz;
|
||||||
|
|
|
@ -25,7 +25,26 @@
|
||||||
#ifndef LAYERWIDGET_H_
|
#ifndef LAYERWIDGET_H_
|
||||||
#define LAYERWIDGET_H_
|
#define LAYERWIDGET_H_
|
||||||
|
|
||||||
#include "layer_panel_base.h"
|
#include <wx/intl.h>
|
||||||
|
#include <wx/wx.h>
|
||||||
|
#include <wx/statbmp.h>
|
||||||
|
#include <wx/string.h>
|
||||||
|
#include <wx/aui/auibook.h>
|
||||||
|
#include <wx/notebook.h>
|
||||||
|
#include <wx/sizer.h>
|
||||||
|
#include <wx/gdicmn.h>
|
||||||
|
#include <wx/scrolwin.h>
|
||||||
|
#include <wx/font.h>
|
||||||
|
#include <wx/colour.h>
|
||||||
|
#include <wx/settings.h>
|
||||||
|
#include <wx/panel.h>
|
||||||
|
#include <wx/bitmap.h>
|
||||||
|
#include <wx/image.h>
|
||||||
|
#include <wx/icon.h>
|
||||||
|
|
||||||
|
|
||||||
|
#define LYR_COLUMN_COUNT 4 ///< Layer tab column count
|
||||||
|
#define RND_COLUMN_COUNT 2 ///< Rendering tab column count
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -44,7 +63,7 @@
|
||||||
* <p> void OnRenderColorChange( int id, int aColor );
|
* <p> void OnRenderColorChange( int id, int aColor );
|
||||||
* <p> void OnRenderEnable( int id, bool isEnabled );
|
* <p> void OnRenderEnable( int id, bool isEnabled );
|
||||||
*/
|
*/
|
||||||
class LAYER_WIDGET : public LAYER_PANEL_BASE
|
class LAYER_WIDGET : public wxPanel
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
/**
|
/**
|
||||||
|
@ -74,14 +93,37 @@ public:
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|
||||||
wxWindow* m_FocusOwner;
|
wxAuiNotebook* m_notebook;
|
||||||
wxBitmap* m_BlankBitmap;
|
wxPanel* m_LayerPanel;
|
||||||
wxBitmap* m_RightArrowBitmap;
|
wxScrolledWindow* m_LayerScrolledWindow;
|
||||||
wxSize m_BitmapSize;
|
wxFlexGridSizer* m_LayersFlexGridSizer;
|
||||||
int m_CurrentRow; ///< selected row of layer list
|
wxPanel* m_RenderingPanel;
|
||||||
|
wxScrolledWindow* m_RenderScrolledWindow;
|
||||||
|
wxFlexGridSizer* m_RenderFlexGridSizer;
|
||||||
|
|
||||||
|
wxWindow* m_FocusOwner;
|
||||||
|
wxBitmap* m_BlankBitmap;
|
||||||
|
wxBitmap* m_RightArrowBitmap;
|
||||||
|
wxSize m_BitmapSize;
|
||||||
|
int m_CurrentRow; ///< selected row of layer list
|
||||||
|
int m_PointSize;
|
||||||
|
|
||||||
static wxBitmap makeBitmap( int aColor );
|
static wxBitmap makeBitmap( int aColor );
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Function encodeId
|
||||||
|
* is here to allow saving a layer index within a control as its wxControl id,
|
||||||
|
* but to do so in a way that all child wxControl ids within a wxWindow are unique,
|
||||||
|
* since this is required by Windows.
|
||||||
|
* @see getDecodedId()
|
||||||
|
*/
|
||||||
|
static int encodeId( int aColumn, int aId );
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Function getDecodedId
|
||||||
|
* decodes \a aControlId to original un-encoded value.
|
||||||
|
*/
|
||||||
|
static int getDecodedId( int aControlId );
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Function makeColorButton
|
* Function makeColorButton
|
||||||
|
@ -97,14 +139,6 @@ protected:
|
||||||
*/
|
*/
|
||||||
void OnMiddleDownLayerColor( wxMouseEvent& event );
|
void OnMiddleDownLayerColor( wxMouseEvent& event );
|
||||||
|
|
||||||
/**
|
|
||||||
* Function OnRightDownLayers
|
|
||||||
* puts up a popup menu for the layer panel.
|
|
||||||
*/
|
|
||||||
void OnRightDownLayers( wxMouseEvent& event );
|
|
||||||
|
|
||||||
void OnPopupSelection( wxCommandEvent& event );
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Function OnLayerCheckBox
|
* Function OnLayerCheckBox
|
||||||
* handles the "is layer visible" checkbox and propogates the
|
* handles the "is layer visible" checkbox and propogates the
|
||||||
|
@ -155,7 +189,9 @@ public:
|
||||||
* @param aFocusOwner is the window that should be sent the focus after
|
* @param aFocusOwner is the window that should be sent the focus after
|
||||||
* every operation.
|
* every operation.
|
||||||
*/
|
*/
|
||||||
LAYER_WIDGET( wxWindow* aParent, wxWindow* aFocusOwner );
|
LAYER_WIDGET( wxWindow* aParent, wxWindow* aFocusOwner, int aPointSize,
|
||||||
|
wxWindowID id = wxID_ANY, const wxPoint& pos = wxDefaultPosition,
|
||||||
|
const wxSize& size = wxDefaultSize, long style = wxTAB_TRAVERSAL );
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Function GetBestSize
|
* Function GetBestSize
|
||||||
|
|
|
@ -196,7 +196,7 @@ void WinEDA_PcbFrame::OnLeftClick( wxDC* DC, const wxPoint& MousePos )
|
||||||
if( m_ID_current_state == ID_PCB_ARC_BUTT )
|
if( m_ID_current_state == ID_PCB_ARC_BUTT )
|
||||||
shape = S_ARC;
|
shape = S_ARC;
|
||||||
|
|
||||||
if( ( (PCB_SCREEN*) GetScreen() )->m_Active_Layer <= LAST_COPPER_LAYER )
|
if( getActiveLayer() <= LAST_COPPER_LAYER )
|
||||||
{
|
{
|
||||||
DisplayError( this, _( "Graphic not authorized on Copper layers" ) );
|
DisplayError( this, _( "Graphic not authorized on Copper layers" ) );
|
||||||
break;
|
break;
|
||||||
|
@ -219,7 +219,7 @@ void WinEDA_PcbFrame::OnLeftClick( wxDC* DC, const wxPoint& MousePos )
|
||||||
}
|
}
|
||||||
|
|
||||||
case ID_TRACK_BUTT:
|
case ID_TRACK_BUTT:
|
||||||
if( ( (PCB_SCREEN*) GetScreen() )->m_Active_Layer > LAST_COPPER_LAYER )
|
if( getActiveLayer() > LAST_COPPER_LAYER )
|
||||||
{
|
{
|
||||||
DisplayError( this, _( "Tracks on Copper layers only " ) );
|
DisplayError( this, _( "Tracks on Copper layers only " ) );
|
||||||
break;
|
break;
|
||||||
|
@ -328,7 +328,7 @@ void WinEDA_PcbFrame::OnLeftClick( wxDC* DC, const wxPoint& MousePos )
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ID_PCB_COTATION_BUTT:
|
case ID_PCB_COTATION_BUTT:
|
||||||
if( ( (PCB_SCREEN*) GetScreen() )->m_Active_Layer <= LAST_COPPER_LAYER )
|
if( getActiveLayer() <= LAST_COPPER_LAYER )
|
||||||
{
|
{
|
||||||
DisplayError( this, _( "Cotation not authorized on Copper layers" ) );
|
DisplayError( this, _( "Cotation not authorized on Copper layers" ) );
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -1,357 +0,0 @@
|
||||||
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
|
|
||||||
<wxFormBuilder_Project>
|
|
||||||
<FileVersion major="1" minor="9" />
|
|
||||||
<object class="Project" expanded="1">
|
|
||||||
<property name="class_decoration"></property>
|
|
||||||
<property name="code_generation">C++</property>
|
|
||||||
<property name="disconnect_events">1</property>
|
|
||||||
<property name="encoding">UTF-8</property>
|
|
||||||
<property name="event_generation">connect</property>
|
|
||||||
<property name="file">layer_panel_base</property>
|
|
||||||
<property name="first_id">1000</property>
|
|
||||||
<property name="help_provider">none</property>
|
|
||||||
<property name="internationalize">1</property>
|
|
||||||
<property name="name">LAYER_PANEL</property>
|
|
||||||
<property name="namespace"></property>
|
|
||||||
<property name="path">.</property>
|
|
||||||
<property name="precompiled_header"></property>
|
|
||||||
<property name="relative_path">1</property>
|
|
||||||
<property name="use_enum">0</property>
|
|
||||||
<property name="use_microsoft_bom">0</property>
|
|
||||||
<object class="Panel" expanded="1">
|
|
||||||
<property name="bg"></property>
|
|
||||||
<property name="context_help"></property>
|
|
||||||
<property name="enabled">1</property>
|
|
||||||
<property name="fg"></property>
|
|
||||||
<property name="font"></property>
|
|
||||||
<property name="hidden">0</property>
|
|
||||||
<property name="id">wxID_ANY</property>
|
|
||||||
<property name="maximum_size"></property>
|
|
||||||
<property name="minimum_size">-1,-1</property>
|
|
||||||
<property name="name">LAYER_PANEL_BASE</property>
|
|
||||||
<property name="pos"></property>
|
|
||||||
<property name="size">200,200</property>
|
|
||||||
<property name="subclass">; </property>
|
|
||||||
<property name="tooltip"></property>
|
|
||||||
<property name="window_extra_style"></property>
|
|
||||||
<property name="window_name"></property>
|
|
||||||
<property name="window_style">wxTAB_TRAVERSAL</property>
|
|
||||||
<event name="OnChar"></event>
|
|
||||||
<event name="OnEnterWindow"></event>
|
|
||||||
<event name="OnEraseBackground"></event>
|
|
||||||
<event name="OnInitDialog"></event>
|
|
||||||
<event name="OnKeyDown"></event>
|
|
||||||
<event name="OnKeyUp"></event>
|
|
||||||
<event name="OnKillFocus"></event>
|
|
||||||
<event name="OnLeaveWindow"></event>
|
|
||||||
<event name="OnLeftDClick"></event>
|
|
||||||
<event name="OnLeftDown"></event>
|
|
||||||
<event name="OnLeftUp"></event>
|
|
||||||
<event name="OnMiddleDClick"></event>
|
|
||||||
<event name="OnMiddleDown"></event>
|
|
||||||
<event name="OnMiddleUp"></event>
|
|
||||||
<event name="OnMotion"></event>
|
|
||||||
<event name="OnMouseEvents"></event>
|
|
||||||
<event name="OnMouseWheel"></event>
|
|
||||||
<event name="OnPaint"></event>
|
|
||||||
<event name="OnRightDClick"></event>
|
|
||||||
<event name="OnRightDown"></event>
|
|
||||||
<event name="OnRightUp"></event>
|
|
||||||
<event name="OnSetFocus"></event>
|
|
||||||
<event name="OnSize"></event>
|
|
||||||
<event name="OnUpdateUI"></event>
|
|
||||||
<object class="wxBoxSizer" expanded="1">
|
|
||||||
<property name="minimum_size"></property>
|
|
||||||
<property name="name">boxSizer</property>
|
|
||||||
<property name="orient">wxVERTICAL</property>
|
|
||||||
<property name="permission">none</property>
|
|
||||||
<object class="sizeritem" expanded="1">
|
|
||||||
<property name="border">5</property>
|
|
||||||
<property name="flag">wxEXPAND | wxALL</property>
|
|
||||||
<property name="proportion">1</property>
|
|
||||||
<object class="wxNotebook" expanded="1">
|
|
||||||
<property name="bg"></property>
|
|
||||||
<property name="bitmapsize"></property>
|
|
||||||
<property name="context_help"></property>
|
|
||||||
<property name="enabled">1</property>
|
|
||||||
<property name="fg"></property>
|
|
||||||
<property name="font"></property>
|
|
||||||
<property name="hidden">0</property>
|
|
||||||
<property name="id">wxID_ANY</property>
|
|
||||||
<property name="maximum_size"></property>
|
|
||||||
<property name="minimum_size"></property>
|
|
||||||
<property name="name">m_notebook</property>
|
|
||||||
<property name="permission">protected</property>
|
|
||||||
<property name="pos"></property>
|
|
||||||
<property name="size"></property>
|
|
||||||
<property name="style"></property>
|
|
||||||
<property name="subclass"></property>
|
|
||||||
<property name="tooltip"></property>
|
|
||||||
<property name="window_extra_style"></property>
|
|
||||||
<property name="window_name"></property>
|
|
||||||
<property name="window_style"></property>
|
|
||||||
<event name="OnChar"></event>
|
|
||||||
<event name="OnEnterWindow"></event>
|
|
||||||
<event name="OnEraseBackground"></event>
|
|
||||||
<event name="OnKeyDown"></event>
|
|
||||||
<event name="OnKeyUp"></event>
|
|
||||||
<event name="OnKillFocus"></event>
|
|
||||||
<event name="OnLeaveWindow"></event>
|
|
||||||
<event name="OnLeftDClick"></event>
|
|
||||||
<event name="OnLeftDown"></event>
|
|
||||||
<event name="OnLeftUp"></event>
|
|
||||||
<event name="OnMiddleDClick"></event>
|
|
||||||
<event name="OnMiddleDown"></event>
|
|
||||||
<event name="OnMiddleUp"></event>
|
|
||||||
<event name="OnMotion"></event>
|
|
||||||
<event name="OnMouseEvents"></event>
|
|
||||||
<event name="OnMouseWheel"></event>
|
|
||||||
<event name="OnNotebookPageChanged"></event>
|
|
||||||
<event name="OnNotebookPageChanging"></event>
|
|
||||||
<event name="OnPaint"></event>
|
|
||||||
<event name="OnRightDClick"></event>
|
|
||||||
<event name="OnRightDown"></event>
|
|
||||||
<event name="OnRightUp"></event>
|
|
||||||
<event name="OnSetFocus"></event>
|
|
||||||
<event name="OnSize"></event>
|
|
||||||
<event name="OnUpdateUI"></event>
|
|
||||||
<object class="notebookpage" expanded="1">
|
|
||||||
<property name="bitmap">layerbitmap; Load From File</property>
|
|
||||||
<property name="label">Layer</property>
|
|
||||||
<property name="select">1</property>
|
|
||||||
<object class="wxPanel" expanded="1">
|
|
||||||
<property name="bg"></property>
|
|
||||||
<property name="context_help"></property>
|
|
||||||
<property name="enabled">1</property>
|
|
||||||
<property name="fg"></property>
|
|
||||||
<property name="font">,90,90,10,70,0</property>
|
|
||||||
<property name="hidden">0</property>
|
|
||||||
<property name="id">wxID_ANY</property>
|
|
||||||
<property name="maximum_size"></property>
|
|
||||||
<property name="minimum_size"></property>
|
|
||||||
<property name="name">m_LayerPanel</property>
|
|
||||||
<property name="permission">protected</property>
|
|
||||||
<property name="pos"></property>
|
|
||||||
<property name="size"></property>
|
|
||||||
<property name="subclass"></property>
|
|
||||||
<property name="tooltip"></property>
|
|
||||||
<property name="window_extra_style"></property>
|
|
||||||
<property name="window_name"></property>
|
|
||||||
<property name="window_style">wxTAB_TRAVERSAL</property>
|
|
||||||
<event name="OnChar"></event>
|
|
||||||
<event name="OnEnterWindow"></event>
|
|
||||||
<event name="OnEraseBackground"></event>
|
|
||||||
<event name="OnKeyDown"></event>
|
|
||||||
<event name="OnKeyUp"></event>
|
|
||||||
<event name="OnKillFocus"></event>
|
|
||||||
<event name="OnLeaveWindow"></event>
|
|
||||||
<event name="OnLeftDClick"></event>
|
|
||||||
<event name="OnLeftDown"></event>
|
|
||||||
<event name="OnLeftUp"></event>
|
|
||||||
<event name="OnMiddleDClick"></event>
|
|
||||||
<event name="OnMiddleDown"></event>
|
|
||||||
<event name="OnMiddleUp"></event>
|
|
||||||
<event name="OnMotion"></event>
|
|
||||||
<event name="OnMouseEvents"></event>
|
|
||||||
<event name="OnMouseWheel"></event>
|
|
||||||
<event name="OnPaint"></event>
|
|
||||||
<event name="OnRightDClick"></event>
|
|
||||||
<event name="OnRightDown"></event>
|
|
||||||
<event name="OnRightUp"></event>
|
|
||||||
<event name="OnSetFocus"></event>
|
|
||||||
<event name="OnSize"></event>
|
|
||||||
<event name="OnUpdateUI"></event>
|
|
||||||
<object class="wxBoxSizer" expanded="1">
|
|
||||||
<property name="minimum_size"></property>
|
|
||||||
<property name="name">bSizer3</property>
|
|
||||||
<property name="orient">wxVERTICAL</property>
|
|
||||||
<property name="permission">none</property>
|
|
||||||
<object class="sizeritem" expanded="1">
|
|
||||||
<property name="border">2</property>
|
|
||||||
<property name="flag">wxBOTTOM|wxEXPAND|wxLEFT|wxTOP</property>
|
|
||||||
<property name="proportion">1</property>
|
|
||||||
<object class="wxScrolledWindow" expanded="1">
|
|
||||||
<property name="bg"></property>
|
|
||||||
<property name="context_help"></property>
|
|
||||||
<property name="enabled">1</property>
|
|
||||||
<property name="fg"></property>
|
|
||||||
<property name="font"></property>
|
|
||||||
<property name="hidden">0</property>
|
|
||||||
<property name="id">wxID_ANY</property>
|
|
||||||
<property name="maximum_size"></property>
|
|
||||||
<property name="minimum_size"></property>
|
|
||||||
<property name="name">m_LayerScrolledWindow</property>
|
|
||||||
<property name="permission">protected</property>
|
|
||||||
<property name="pos"></property>
|
|
||||||
<property name="scroll_rate_x">5</property>
|
|
||||||
<property name="scroll_rate_y">5</property>
|
|
||||||
<property name="size"></property>
|
|
||||||
<property name="subclass">; </property>
|
|
||||||
<property name="tooltip"></property>
|
|
||||||
<property name="window_extra_style"></property>
|
|
||||||
<property name="window_name"></property>
|
|
||||||
<property name="window_style">wxNO_BORDER</property>
|
|
||||||
<event name="OnChar"></event>
|
|
||||||
<event name="OnEnterWindow"></event>
|
|
||||||
<event name="OnEraseBackground"></event>
|
|
||||||
<event name="OnKeyDown"></event>
|
|
||||||
<event name="OnKeyUp"></event>
|
|
||||||
<event name="OnKillFocus"></event>
|
|
||||||
<event name="OnLeaveWindow"></event>
|
|
||||||
<event name="OnLeftDClick"></event>
|
|
||||||
<event name="OnLeftDown">OnLeftDownLayers</event>
|
|
||||||
<event name="OnLeftUp"></event>
|
|
||||||
<event name="OnMiddleDClick"></event>
|
|
||||||
<event name="OnMiddleDown"></event>
|
|
||||||
<event name="OnMiddleUp"></event>
|
|
||||||
<event name="OnMotion"></event>
|
|
||||||
<event name="OnMouseEvents"></event>
|
|
||||||
<event name="OnMouseWheel"></event>
|
|
||||||
<event name="OnPaint"></event>
|
|
||||||
<event name="OnRightDClick"></event>
|
|
||||||
<event name="OnRightDown">OnRightDownLayers</event>
|
|
||||||
<event name="OnRightUp"></event>
|
|
||||||
<event name="OnSetFocus"></event>
|
|
||||||
<event name="OnSize"></event>
|
|
||||||
<event name="OnUpdateUI"></event>
|
|
||||||
<object class="wxFlexGridSizer" expanded="1">
|
|
||||||
<property name="cols">4</property>
|
|
||||||
<property name="flexible_direction">wxHORIZONTAL</property>
|
|
||||||
<property name="growablecols"></property>
|
|
||||||
<property name="growablerows"></property>
|
|
||||||
<property name="hgap">1</property>
|
|
||||||
<property name="minimum_size"></property>
|
|
||||||
<property name="name">m_LayersFlexGridSizer</property>
|
|
||||||
<property name="non_flexible_grow_mode">wxFLEX_GROWMODE_SPECIFIED</property>
|
|
||||||
<property name="permission">protected</property>
|
|
||||||
<property name="rows">0</property>
|
|
||||||
<property name="vgap">0</property>
|
|
||||||
</object>
|
|
||||||
</object>
|
|
||||||
</object>
|
|
||||||
</object>
|
|
||||||
</object>
|
|
||||||
</object>
|
|
||||||
<object class="notebookpage" expanded="1">
|
|
||||||
<property name="bitmap">; Load From File</property>
|
|
||||||
<property name="label">Render</property>
|
|
||||||
<property name="select">0</property>
|
|
||||||
<object class="wxPanel" expanded="1">
|
|
||||||
<property name="bg"></property>
|
|
||||||
<property name="context_help"></property>
|
|
||||||
<property name="enabled">1</property>
|
|
||||||
<property name="fg"></property>
|
|
||||||
<property name="font">,90,90,10,70,0</property>
|
|
||||||
<property name="hidden">0</property>
|
|
||||||
<property name="id">wxID_ANY</property>
|
|
||||||
<property name="maximum_size"></property>
|
|
||||||
<property name="minimum_size"></property>
|
|
||||||
<property name="name">m_RenderingPanel</property>
|
|
||||||
<property name="permission">protected</property>
|
|
||||||
<property name="pos"></property>
|
|
||||||
<property name="size"></property>
|
|
||||||
<property name="subclass"></property>
|
|
||||||
<property name="tooltip"></property>
|
|
||||||
<property name="window_extra_style"></property>
|
|
||||||
<property name="window_name"></property>
|
|
||||||
<property name="window_style">wxTAB_TRAVERSAL</property>
|
|
||||||
<event name="OnChar"></event>
|
|
||||||
<event name="OnEnterWindow"></event>
|
|
||||||
<event name="OnEraseBackground"></event>
|
|
||||||
<event name="OnKeyDown"></event>
|
|
||||||
<event name="OnKeyUp"></event>
|
|
||||||
<event name="OnKillFocus"></event>
|
|
||||||
<event name="OnLeaveWindow"></event>
|
|
||||||
<event name="OnLeftDClick"></event>
|
|
||||||
<event name="OnLeftDown"></event>
|
|
||||||
<event name="OnLeftUp"></event>
|
|
||||||
<event name="OnMiddleDClick"></event>
|
|
||||||
<event name="OnMiddleDown"></event>
|
|
||||||
<event name="OnMiddleUp"></event>
|
|
||||||
<event name="OnMotion"></event>
|
|
||||||
<event name="OnMouseEvents"></event>
|
|
||||||
<event name="OnMouseWheel"></event>
|
|
||||||
<event name="OnPaint"></event>
|
|
||||||
<event name="OnRightDClick"></event>
|
|
||||||
<event name="OnRightDown"></event>
|
|
||||||
<event name="OnRightUp"></event>
|
|
||||||
<event name="OnSetFocus"></event>
|
|
||||||
<event name="OnSize"></event>
|
|
||||||
<event name="OnUpdateUI"></event>
|
|
||||||
<object class="wxBoxSizer" expanded="1">
|
|
||||||
<property name="minimum_size"></property>
|
|
||||||
<property name="name">bSizer4</property>
|
|
||||||
<property name="orient">wxVERTICAL</property>
|
|
||||||
<property name="permission">none</property>
|
|
||||||
<object class="sizeritem" expanded="1">
|
|
||||||
<property name="border">5</property>
|
|
||||||
<property name="flag">wxALL|wxEXPAND</property>
|
|
||||||
<property name="proportion">1</property>
|
|
||||||
<object class="wxScrolledWindow" expanded="1">
|
|
||||||
<property name="bg"></property>
|
|
||||||
<property name="context_help"></property>
|
|
||||||
<property name="enabled">1</property>
|
|
||||||
<property name="fg"></property>
|
|
||||||
<property name="font"></property>
|
|
||||||
<property name="hidden">0</property>
|
|
||||||
<property name="id">wxID_ANY</property>
|
|
||||||
<property name="maximum_size"></property>
|
|
||||||
<property name="minimum_size"></property>
|
|
||||||
<property name="name">m_RenderScrolledWindow</property>
|
|
||||||
<property name="permission">protected</property>
|
|
||||||
<property name="pos"></property>
|
|
||||||
<property name="scroll_rate_x">5</property>
|
|
||||||
<property name="scroll_rate_y">5</property>
|
|
||||||
<property name="size"></property>
|
|
||||||
<property name="subclass"></property>
|
|
||||||
<property name="tooltip"></property>
|
|
||||||
<property name="window_extra_style"></property>
|
|
||||||
<property name="window_name"></property>
|
|
||||||
<property name="window_style">wxNO_BORDER</property>
|
|
||||||
<event name="OnChar"></event>
|
|
||||||
<event name="OnEnterWindow"></event>
|
|
||||||
<event name="OnEraseBackground"></event>
|
|
||||||
<event name="OnKeyDown"></event>
|
|
||||||
<event name="OnKeyUp"></event>
|
|
||||||
<event name="OnKillFocus"></event>
|
|
||||||
<event name="OnLeaveWindow"></event>
|
|
||||||
<event name="OnLeftDClick"></event>
|
|
||||||
<event name="OnLeftDown"></event>
|
|
||||||
<event name="OnLeftUp"></event>
|
|
||||||
<event name="OnMiddleDClick"></event>
|
|
||||||
<event name="OnMiddleDown"></event>
|
|
||||||
<event name="OnMiddleUp"></event>
|
|
||||||
<event name="OnMotion"></event>
|
|
||||||
<event name="OnMouseEvents"></event>
|
|
||||||
<event name="OnMouseWheel"></event>
|
|
||||||
<event name="OnPaint"></event>
|
|
||||||
<event name="OnRightDClick"></event>
|
|
||||||
<event name="OnRightDown"></event>
|
|
||||||
<event name="OnRightUp"></event>
|
|
||||||
<event name="OnSetFocus"></event>
|
|
||||||
<event name="OnSize"></event>
|
|
||||||
<event name="OnUpdateUI"></event>
|
|
||||||
<object class="wxFlexGridSizer" expanded="1">
|
|
||||||
<property name="cols">2</property>
|
|
||||||
<property name="flexible_direction">wxHORIZONTAL</property>
|
|
||||||
<property name="growablecols"></property>
|
|
||||||
<property name="growablerows"></property>
|
|
||||||
<property name="hgap">1</property>
|
|
||||||
<property name="minimum_size"></property>
|
|
||||||
<property name="name">m_RenderFlexGridSizer</property>
|
|
||||||
<property name="non_flexible_grow_mode">wxFLEX_GROWMODE_NONE</property>
|
|
||||||
<property name="permission">protected</property>
|
|
||||||
<property name="rows">0</property>
|
|
||||||
<property name="vgap">0</property>
|
|
||||||
</object>
|
|
||||||
</object>
|
|
||||||
</object>
|
|
||||||
</object>
|
|
||||||
</object>
|
|
||||||
</object>
|
|
||||||
</object>
|
|
||||||
</object>
|
|
||||||
</object>
|
|
||||||
</object>
|
|
||||||
</object>
|
|
||||||
</wxFormBuilder_Project>
|
|
|
@ -1,3 +1,29 @@
|
||||||
|
/*
|
||||||
|
* 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
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
/******************************************/
|
/******************************************/
|
||||||
/* pcbframe.cpp - PCB editor main window. */
|
/* pcbframe.cpp - PCB editor main window. */
|
||||||
/******************************************/
|
/******************************************/
|
||||||
|
@ -17,9 +43,374 @@
|
||||||
#include "drc_stuff.h"
|
#include "drc_stuff.h"
|
||||||
#include "3d_viewer.h"
|
#include "3d_viewer.h"
|
||||||
#include "kbool/include/kbool/booleng.h"
|
#include "kbool/include/kbool/booleng.h"
|
||||||
|
#include "layer_widget.h"
|
||||||
#include "dialog_design_rules.h"
|
#include "dialog_design_rules.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[14] = {
|
||||||
|
|
||||||
|
#define RR LAYER_WIDGET::ROW // Render Row abreviation to reduce source width
|
||||||
|
|
||||||
|
// text id color tooltip checked
|
||||||
|
RR( _( "Through Via" ), VIAS_VISIBLE, WHITE, _( "Show through vias" ) ),
|
||||||
|
RR( _( "Bl/Buried Via" ), VIA_MICROVIA_VISIBLE, WHITE, _( "Show blind or buried vias" ) ),
|
||||||
|
RR( _( "Micro Via" ), VIA_BBLIND_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") ),
|
||||||
|
};
|
||||||
|
|
||||||
|
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 );
|
||||||
|
}
|
||||||
|
// @todo
|
||||||
|
// renderRows[row].state = GetBoard()->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 * LYR_COLUMN_COUNT + 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*LYR_COLUMN_COUNT + 3 );
|
||||||
|
int layer = getDecodedId( cb->GetId() );
|
||||||
|
if( IsValidCopperLayerIndex( layer ) )
|
||||||
|
{
|
||||||
|
lastCu = row;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for( int row=0; row<rowCount; ++row )
|
||||||
|
{
|
||||||
|
wxCheckBox* cb = (wxCheckBox*) getLayerComp( row*LYR_COLUMN_COUNT + 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();
|
||||||
|
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:
|
||||||
|
|
||||||
|
1) move:
|
||||||
|
|
||||||
|
RATSNEST_VISIBLE,
|
||||||
|
GRID_VISIBLE, ? maybe not this one
|
||||||
|
|
||||||
|
NO_CONNECTS_VISIBLE,
|
||||||
|
MOD_FR_VISIBLE,
|
||||||
|
MOD_BK_VISIBLE,
|
||||||
|
|
||||||
|
into m_VisibleElements and get rid of globals.
|
||||||
|
|
||||||
|
2) Add IsElementVisible() & SetVisibleElement() to class BOARD
|
||||||
|
*/
|
||||||
|
|
||||||
|
switch( aId )
|
||||||
|
{
|
||||||
|
// see todo above, don't really want anything except IsElementVisible() here.
|
||||||
|
|
||||||
|
case GRID_VISIBLE:
|
||||||
|
myframe->m_Draw_Grid = isEnabled;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case MOD_FR_VISIBLE:
|
||||||
|
DisplayOpt.Show_Modules_Cmp = isEnabled;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case MOD_BK_VISIBLE:
|
||||||
|
DisplayOpt.Show_Modules_Cu = isEnabled;
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
|
||||||
|
int visibleElements = brd->GetVisibleElements();
|
||||||
|
|
||||||
|
if( isEnabled )
|
||||||
|
visibleElements |= (1 << aId );
|
||||||
|
else
|
||||||
|
visibleElements &= ~(1 << aId);
|
||||||
|
|
||||||
|
brd->SetVisibleElements( visibleElements );
|
||||||
|
}
|
||||||
|
|
||||||
|
myframe->DrawPanel->Refresh();
|
||||||
|
}
|
||||||
|
|
||||||
|
//-----</LAYER_WIDGET callbacks>------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// Keys used in read/write config
|
// Keys used in read/write config
|
||||||
#define PCB_MAGNETIC_PADS_OPT wxT( "PcbMagPadOpt" )
|
#define PCB_MAGNETIC_PADS_OPT wxT( "PcbMagPadOpt" )
|
||||||
#define PCB_MAGNETIC_TRACKS_OPT wxT( "PcbMagTrackOpt" )
|
#define PCB_MAGNETIC_TRACKS_OPT wxT( "PcbMagTrackOpt" )
|
||||||
|
@ -228,10 +619,21 @@ WinEDA_PcbFrame::WinEDA_PcbFrame( wxWindow* father,
|
||||||
m_show_microwave_tools = false;
|
m_show_microwave_tools = false;
|
||||||
m_show_layer_manager_tools = true;
|
m_show_layer_manager_tools = true;
|
||||||
|
|
||||||
m_Layers = new LYRS( this, DrawPanel );
|
|
||||||
|
|
||||||
SetBoard( new BOARD( NULL, this ) );
|
SetBoard( new BOARD( NULL, this ) );
|
||||||
|
|
||||||
|
// 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 );
|
||||||
|
|
||||||
|
// printf( "pointSize:%d 80%%:%d\n", pointSize, (pointSize*8)/10 );
|
||||||
|
|
||||||
|
if( screenHeight <= 900 )
|
||||||
|
pointSize = (pointSize * 8) / 10;
|
||||||
|
|
||||||
|
m_Layers = new PCB_LAYER_WIDGET( this, DrawPanel, pointSize );
|
||||||
|
|
||||||
m_TrackAndViasSizesList_Changed = true;
|
m_TrackAndViasSizesList_Changed = true;
|
||||||
|
|
||||||
m_drc = new DRC( this ); // these 2 objects point to each other
|
m_drc = new DRC( this ); // these 2 objects point to each other
|
||||||
|
@ -265,47 +667,6 @@ WinEDA_PcbFrame::WinEDA_PcbFrame( wxWindow* father,
|
||||||
|
|
||||||
ReCreateAuxVToolbar();
|
ReCreateAuxVToolbar();
|
||||||
|
|
||||||
// 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[14] = {
|
|
||||||
|
|
||||||
#define RR LAYER_WIDGET::ROW // Render Row abreviation to reduce source width
|
|
||||||
|
|
||||||
// text id color tooltip checked
|
|
||||||
RR( _( "Through Via" ), VIAS_VISIBLE, WHITE, _( "Show through vias" ) ),
|
|
||||||
RR( _( "Bl/Buried Via" ), VIA_MICROVIA_VISIBLE, WHITE, _( "Show blind or buried vias" ) ),
|
|
||||||
RR( _( "Micro Via" ), VIA_BBLIND_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") ),
|
|
||||||
};
|
|
||||||
|
|
||||||
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 = GetBoard()->GetVisibleElementColor( renderRows[row].id );
|
|
||||||
}
|
|
||||||
// @todo
|
|
||||||
// renderRows[row].state = GetBoard()->IsElementVisible( renderRows[row].id );
|
|
||||||
}
|
|
||||||
|
|
||||||
m_Layers->AppendRenderRows( renderRows, DIM(renderRows) );
|
|
||||||
|
|
||||||
#if defined(KICAD_AUIMANAGER)
|
#if defined(KICAD_AUIMANAGER)
|
||||||
m_auimgr.SetManagedWindow( this );
|
m_auimgr.SetManagedWindow( this );
|
||||||
|
|
||||||
|
@ -373,7 +734,9 @@ 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
|
ReFillLayerWidget(); // this is near end because contents establish size
|
||||||
|
|
||||||
|
syncLayerWidget();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -385,179 +748,9 @@ 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 )
|
|
||||||
{
|
|
||||||
myframe->GetBoard()->SetVisibleElementColor( aId, aColor );
|
|
||||||
myframe->DrawPanel->Refresh();
|
|
||||||
}
|
|
||||||
|
|
||||||
void WinEDA_PcbFrame::LYRS::OnRenderEnable( int aId, bool isEnabled )
|
|
||||||
{
|
|
||||||
BOARD* brd = myframe->GetBoard();
|
|
||||||
|
|
||||||
/* @todo:
|
|
||||||
|
|
||||||
1) move:
|
|
||||||
|
|
||||||
RATSNEST_VISIBLE,
|
|
||||||
GRID_VISIBLE, ? maybe not this one
|
|
||||||
|
|
||||||
NO_CONNECTS_VISIBLE,
|
|
||||||
MOD_FR_VISIBLE,
|
|
||||||
MOD_BK_VISIBLE,
|
|
||||||
|
|
||||||
into m_VisibleElements and get rid of globals.
|
|
||||||
|
|
||||||
2) Add IsElementVisible() & SetVisibleElement() to class BOARD
|
|
||||||
*/
|
|
||||||
|
|
||||||
switch( aId )
|
|
||||||
{
|
|
||||||
// see todo above, don't really want anything except IsElementVisible() here.
|
|
||||||
|
|
||||||
case GRID_VISIBLE:
|
|
||||||
myframe->m_Draw_Grid = isEnabled;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case MOD_FR_VISIBLE:
|
|
||||||
DisplayOpt.Show_Modules_Cmp = isEnabled;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case MOD_BK_VISIBLE:
|
|
||||||
DisplayOpt.Show_Modules_Cu = isEnabled;
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
|
|
||||||
int visibleElements = brd->GetVisibleElements();
|
|
||||||
|
|
||||||
if( isEnabled )
|
|
||||||
visibleElements |= (1 << aId );
|
|
||||||
else
|
|
||||||
visibleElements &= ~(1 << aId);
|
|
||||||
|
|
||||||
brd->SetVisibleElements( visibleElements );
|
|
||||||
}
|
|
||||||
|
|
||||||
myframe->DrawPanel->Refresh();
|
|
||||||
}
|
|
||||||
|
|
||||||
//-----</LAYER_WIDGET callbacks>------------------------------------------
|
|
||||||
|
|
||||||
|
|
||||||
void WinEDA_PcbFrame::ReFillLayerWidget()
|
void WinEDA_PcbFrame::ReFillLayerWidget()
|
||||||
{
|
{
|
||||||
BOARD* brd = GetBoard();
|
m_Layers->ReFill();
|
||||||
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 );
|
|
||||||
|
|
||||||
// technical layers are shown in this order:
|
|
||||||
static const struct {
|
|
||||||
int layerId;
|
|
||||||
wxString tooltip;
|
|
||||||
} techLayerSeq[] = {
|
|
||||||
|
|
||||||
/* some layers are not visible nor editable, don't show them for now:
|
|
||||||
* >> In fact they are useful here because we must be able to change
|
|
||||||
* the color and visibility because they can be visible.
|
|
||||||
* slikscreen and adhesive layers are visible (adhesive layer is rarely used)
|
|
||||||
* Solder mask and solder paste (used for pads) are visible in *Hight Color*
|
|
||||||
* mode when they are selected
|
|
||||||
* they are now editable because Pcbnew handle parameters (global and local)
|
|
||||||
* to calculate pads shapes on these layers
|
|
||||||
*/
|
|
||||||
{ 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;
|
|
||||||
|
|
||||||
m_Layers->AppendLayerRow( LAYER_WIDGET::ROW(
|
|
||||||
brd->GetLayerName( layer ), layer, brd->GetLayerColor( layer ),
|
|
||||||
techLayerSeq[i].tooltip, true ) );
|
|
||||||
}
|
|
||||||
|
|
||||||
// m_Layers->Thaw();
|
|
||||||
|
|
||||||
wxAuiPaneInfo& lyrs = m_auimgr.GetPane( m_Layers );
|
wxAuiPaneInfo& lyrs = m_auimgr.GetPane( m_Layers );
|
||||||
|
|
||||||
|
@ -688,15 +881,8 @@ void WinEDA_PcbFrame::SaveSettings()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/** Function SynchronizeLayersManager( )
|
void WinEDA_PcbFrame::syncLayerWidget()
|
||||||
* Must be called when info displayed in the layer manager Toolbar
|
|
||||||
* as been changed in the main window ( by hotkey or a tool option.
|
|
||||||
* Mainly when the active layer as changed.
|
|
||||||
* @param aFlag = flag giving the type of data (layers, checkboxes...)
|
|
||||||
*/
|
|
||||||
void WinEDA_PcbFrame::SynchronizeLayersManager( int aFlag )
|
|
||||||
{
|
{
|
||||||
// Ensure Layer manager synchronization for the active layer
|
m_Layers->SelectLayer( getActiveLayer() );
|
||||||
if( (aFlag & 1) )
|
|
||||||
m_Layers->SelectLayer(GetScreen()->m_Active_Layer);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -68,7 +68,7 @@ void WinEDA_PcbFrame::PrepareLayerIndicator()
|
||||||
previous_Route_Layer_BOTTOM_color, previous_via_color;
|
previous_Route_Layer_BOTTOM_color, previous_via_color;
|
||||||
|
|
||||||
/* get colors, and redraw bitmap button only on changes */
|
/* get colors, and redraw bitmap button only on changes */
|
||||||
active_layer_color = g_DesignSettings.m_LayerColor[((PCB_SCREEN*)GetScreen())->m_Active_Layer];
|
active_layer_color = g_DesignSettings.m_LayerColor[ getActiveLayer() ];
|
||||||
if( previous_active_layer_color != active_layer_color )
|
if( previous_active_layer_color != active_layer_color )
|
||||||
{
|
{
|
||||||
previous_active_layer_color = active_layer_color;
|
previous_active_layer_color = active_layer_color;
|
||||||
|
@ -387,12 +387,12 @@ void WinEDA_PcbFrame::ReCreateOptToolbar()
|
||||||
|
|
||||||
m_OptionsToolBar->AddSeparator();
|
m_OptionsToolBar->AddSeparator();
|
||||||
m_OptionsToolBar->AddTool( ID_TB_OPTIONS_SHOW_MANAGE_LAYERS_VERTICAL_TOOLBAR,
|
m_OptionsToolBar->AddTool( ID_TB_OPTIONS_SHOW_MANAGE_LAYERS_VERTICAL_TOOLBAR,
|
||||||
wxEmptyString,
|
wxEmptyString,
|
||||||
wxBitmap( layers_manager_xpm ),
|
wxBitmap( layers_manager_xpm ),
|
||||||
_(
|
_(
|
||||||
"Show/hide the layers manager toolbar" ),
|
"Show/hide the layers manager toolbar" ),
|
||||||
wxITEM_CHECK );
|
wxITEM_CHECK );
|
||||||
m_OptionsToolBar->AddTool( ID_TB_OPTIONS_SHOW_EXTRA_VERTICAL_TOOLBAR1,
|
m_OptionsToolBar->AddTool( ID_TB_OPTIONS_SHOW_EXTRA_VERTICAL_TOOLBAR1,
|
||||||
wxEmptyString,
|
wxEmptyString,
|
||||||
wxBitmap( mw_toolbar_xpm ),
|
wxBitmap( mw_toolbar_xpm ),
|
||||||
_( "Show/hide the toolbar for microwaves tools\n This is a experimental feature (under development)" ),
|
_( "Show/hide the toolbar for microwaves tools\n This is a experimental feature (under development)" ),
|
||||||
|
@ -664,20 +664,22 @@ an existing track use its width\notherwise, use current width setting" ),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void WinEDA_PcbFrame::UpdateToolbarLayerInfo()
|
void WinEDA_PcbFrame::syncLayerBox()
|
||||||
{
|
{
|
||||||
wxASSERT( m_SelLayerBox );
|
wxASSERT( m_SelLayerBox );
|
||||||
|
|
||||||
// Enable the display on the correct layer
|
// Enable the display on the correct layer
|
||||||
// To avoid reentrancy ( Bug wxGTK Linux version? ), the selection is
|
// To avoid reentrancy ( Bug wxGTK Linux version? ), the selection is
|
||||||
// made where it is bad ( corrected on wxGTK 2.6.0 )
|
// made only if it needs changing ( corrected on wxGTK 2.6.0 )
|
||||||
int count = m_SelLayerBox->GetCount();
|
int count = m_SelLayerBox->GetCount();
|
||||||
int choice = m_SelLayerBox->GetChoice();
|
int choice = m_SelLayerBox->GetChoice();
|
||||||
int layer = GetScreen()->m_Active_Layer;
|
int layer = getActiveLayer();
|
||||||
|
|
||||||
for( int listNdx=0; listNdx<count; ++listNdx )
|
for( int listNdx=0; listNdx<count; ++listNdx )
|
||||||
{
|
{
|
||||||
if( (int) (size_t) m_SelLayerBox->GetClientData( listNdx ) == layer )
|
int clientData = (int) (size_t) m_SelLayerBox->GetClientData( listNdx );
|
||||||
|
|
||||||
|
if( clientData == layer )
|
||||||
{
|
{
|
||||||
if( listNdx != choice )
|
if( listNdx != choice )
|
||||||
m_SelLayerBox->SetSelection( listNdx );
|
m_SelLayerBox->SetSelection( listNdx );
|
||||||
|
@ -766,7 +768,7 @@ WinEDAChoiceBox* WinEDA_PcbFrame::ReCreateLayerBox( WinEDA_Toolbar* parent )
|
||||||
|
|
||||||
m_SelLayerBox->SetToolTip( _( "+/- to switch" ) );
|
m_SelLayerBox->SetToolTip( _( "+/- to switch" ) );
|
||||||
|
|
||||||
UpdateToolbarLayerInfo();
|
syncLayerBox();
|
||||||
|
|
||||||
return m_SelLayerBox;
|
return m_SelLayerBox;
|
||||||
}
|
}
|
||||||
|
|
|
@ -285,7 +285,8 @@ void WinEDA_PcbFrame::SetToolbars()
|
||||||
if( m_AuxiliaryToolBar )
|
if( m_AuxiliaryToolBar )
|
||||||
AuxiliaryToolBar_Update_UI();
|
AuxiliaryToolBar_Update_UI();
|
||||||
|
|
||||||
UpdateToolbarLayerInfo();
|
syncLayerBox();
|
||||||
|
|
||||||
PrepareLayerIndicator();
|
PrepareLayerIndicator();
|
||||||
DisplayUnitsMsg();
|
DisplayUnitsMsg();
|
||||||
#if defined(KICAD_AUIMANAGER)
|
#if defined(KICAD_AUIMANAGER)
|
||||||
|
|
|
@ -500,7 +500,7 @@ int WinEDA_PcbFrame::Begin_Zone( wxDC* DC )
|
||||||
{
|
{
|
||||||
int diag;
|
int diag;
|
||||||
// Init zone params to reasonnable values
|
// Init zone params to reasonnable values
|
||||||
zone->SetLayer( GetScreen()->m_Active_Layer );
|
zone->SetLayer( getActiveLayer() );
|
||||||
|
|
||||||
// Prompt user for parameters:
|
// Prompt user for parameters:
|
||||||
DrawPanel->m_IgnoreMouseEvents = TRUE;
|
DrawPanel->m_IgnoreMouseEvents = TRUE;
|
||||||
|
@ -535,12 +535,12 @@ int WinEDA_PcbFrame::Begin_Zone( wxDC* DC )
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
// Switch active layer to the selectec zonz layer
|
// Switch active layer to the selectec zonz layer
|
||||||
GetScreen()->m_Active_Layer = g_Zone_Default_Setting.m_CurrentZone_Layer;
|
setActiveLayer( g_Zone_Default_Setting.m_CurrentZone_Layer );
|
||||||
}
|
}
|
||||||
else // Start a new contour: init zone params (net and layer) from an existing zone (add cutout or similar zone)
|
else // Start a new contour: init zone params (net and layer) from an existing zone (add cutout or similar zone)
|
||||||
{
|
{
|
||||||
( (PCB_SCREEN*) GetScreen() )->m_Active_Layer = g_Zone_Default_Setting.m_CurrentZone_Layer =
|
g_Zone_Default_Setting.m_CurrentZone_Layer = s_CurrentZone->GetLayer();
|
||||||
s_CurrentZone->GetLayer();
|
setActiveLayer( s_CurrentZone->GetLayer() );
|
||||||
g_Zone_Default_Setting.ImportSetting( * s_CurrentZone);
|
g_Zone_Default_Setting.ImportSetting( * s_CurrentZone);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue