diff --git a/pcbnew/layer_panel_base.cpp b/pcbnew/layer_panel_base.cpp index 4a69e73d5a..03a0590826 100644 --- a/pcbnew/layer_panel_base.cpp +++ b/pcbnew/layer_panel_base.cpp @@ -7,66 +7,82 @@ #include "layer_panel_base.h" +#include + /////////////////////////////////////////////////////////////////////////// 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_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, 1, 3 ); - 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|wxTOP, 5 ); - - m_LayerPanel->SetSizer( bSizer3 ); - m_LayerPanel->Layout(); - bSizer3->Fit( m_LayerPanel ); - m_notebook->AddPage( m_LayerPanel, _("Layers"), 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, 1, 3 ); - 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, _("Rendering"), 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 ); + 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 ); + // 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 ); } diff --git a/pcbnew/layer_panel_base.h b/pcbnew/layer_panel_base.h index 472473a574..b732970240 100644 --- a/pcbnew/layer_panel_base.h +++ b/pcbnew/layer_panel_base.h @@ -21,7 +21,8 @@ #include #include #include -#include +//#include +#include /////////////////////////////////////////////////////////////////////////// @@ -29,28 +30,30 @@ /////////////////////////////////////////////////////////////////////////////// /// Class LAYER_PANEL_BASE /////////////////////////////////////////////////////////////////////////////// -class LAYER_PANEL_BASE : public wxPanel +class LAYER_PANEL_BASE : public wxPanel { - private: - - protected: - wxNotebook* 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(); - + 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__ diff --git a/pcbnew/layer_widget.cpp b/pcbnew/layer_widget.cpp index c411f37d66..950db72fc9 100644 --- a/pcbnew/layer_widget.cpp +++ b/pcbnew/layer_widget.cpp @@ -49,9 +49,9 @@ #define LYR_COLUMN_COUNT 4 ///< Layer tab column count #define RND_COLUMN_COUNT 2 ///< Rendering tab column count -#define BUTT_SIZE_X 32 -#define BUTT_SIZE_Y 22 -#define BUTT_VOID 6 +#define BUTT_SIZE_X 20 +#define BUTT_SIZE_Y 18 +#define BUTT_VOID 4 #define ID_SHOW_ALL_COPPERS wxID_HIGHEST @@ -60,46 +60,45 @@ /* XPM */ static const char * clear_xpm[] = { -"28 14 1 1", +"10 14 1 1", " c None", -" ", -" ", -" ", -" ", -" ", -" ", -" ", -" ", -" ", -" ", -" ", -" ", -" ", -" "}; +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" "}; /* XPM */ static const char * rightarrow_xpm[] = { -"28 14 5 1", -" c None", -". c white", -"X c #8080ff", -"o c BLUE", -"O c gray56", -" .X ", -" .XX ", -" .XXX ", -" .XXXX ", -" ................XXXXX ", -" XXXXXXXXXXXXXXXXXXXXXX ", -" XXXXXXXXXXXXXXXXXXXXXXX ", -" oooooooooooooooooooooooO", -" ooooooooooooooooooooooO ", -" OOOOOOOOOOOOOOOoooooO ", -" ooooO ", -" oooO ", -" ooO ", -" oO "}; - +"10 14 5 1", +" c None", +". c white", +"X c #8080ff", +"o c BLUE", +"O c gray56", +" X ", +" XX ", +" XXX ", +" XXXX ", +" XXXXX ", +" XXXXXX ", +" XXXXXXX ", +" oooooooO", +" ooooooO ", +" oooooO ", +" ooooO ", +" oooO ", +" ooO ", +" oO "}; /** * Function encodeId @@ -139,6 +138,17 @@ static wxString makeColorTxt( int aColor ) } +/** + * Function shrinkFont + * reduces the size of the wxFont associated with \a aControl + */ +static void shrinkFont( wxWindow* aControl ) +{ + wxFont font = aControl->GetFont(); + font.SetPointSize( (font.GetPointSize() * 8) / 10 ); // go to 80% of original. + aControl->SetFont( font ); +} + wxBitmap LAYER_WIDGET::makeBitmap( int aColor ) { // the bitmap will be BUTT_VOID*2 pixels smaller than the button, leaving a @@ -353,10 +363,10 @@ void LAYER_WIDGET::OnRenderCheckBox( wxCommandEvent& event ) void LAYER_WIDGET::OnTabChange( wxNotebookEvent& event ) { -// printf("OnTabChange\n"); -// passOnFocus(); // this segfaults, cannot enable it. - // maybe we need to find a way to call the stock tab change event handler - // first, then call passOnFocus() before we consider this event done. +// wxFocusEvent event( wxEVT_SET_FOCUS ); +// m_FocusOwner->AddPendingEvent( event ); + + passOnFocus(); // does not work in this context, probably because we have receive control here too early. } @@ -411,6 +421,7 @@ void LAYER_WIDGET::insertLayerRow( int aRow, const ROW& aSpec ) // column 2 col = 2; wxStaticText* st = new wxStaticText( m_LayerScrolledWindow, encodeId( col, aSpec.id ), aSpec.rowName ); + shrinkFont( st ); 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 ); @@ -456,6 +467,7 @@ void LAYER_WIDGET::insertRenderRow( int aRow, const ROW& aSpec ) col = 1; wxCheckBox* cb = new wxCheckBox( m_RenderScrolledWindow, encodeId( col, aSpec.id ), aSpec.rowName, wxDefaultPosition, wxDefaultSize, wxALIGN_LEFT ); + shrinkFont( cb ); cb->SetValue( aSpec.state ); cb->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( LAYER_WIDGET::OnRenderCheckBox ), NULL, this ); @@ -496,12 +508,22 @@ LAYER_WIDGET::LAYER_WIDGET( wxWindow* aParent, wxWindow* aFocusOwner ) : // trap the tab changes so that we can call passOnFocus(). m_notebook->Connect( -1, wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGED, - wxNotebookEventHandler( LAYER_WIDGET::OnTabChange ) ); + wxNotebookEventHandler( LAYER_WIDGET::OnTabChange ), NULL, this ); } wxSize LAYER_WIDGET::GetBestSize() const { +#if 0 + wxSize layerz = m_LayersFlexGridSizer->GetMinSize(); + wxSize renderz = m_RenderFlexGridSizer->GetMinSize(); + + wxSize clientz( max(renderz.x,layerz.x), max(renderz.y,layerz.y) ); + + return ClientToWindowSize( clientz ); + +#else + // size of m_LayerScrolledWindow -------------- wxArrayInt widths = m_LayersFlexGridSizer->GetColWidths(); int totWidth = 0; @@ -527,7 +549,6 @@ wxSize LAYER_WIDGET::GetBestSize() const totHeight += heights[i] + m_LayersFlexGridSizer->GetVGap(); // printf("heights[%d]:%d\n", i, heights[i] ); } - totHeight += 2 * heights[0]; // use 2 row heights to approximate tab height } else @@ -535,6 +556,8 @@ wxSize LAYER_WIDGET::GetBestSize() const wxSize layerz( totWidth, totHeight ); + layerz += m_LayerPanel->GetWindowBorderSize(); + // size of m_RenderScrolledWindow -------------- widths = m_RenderFlexGridSizer->GetColWidths(); @@ -568,7 +591,17 @@ wxSize LAYER_WIDGET::GetBestSize() const wxSize renderz( totWidth, totHeight ); - return wxSize( max(renderz.x,layerz.x), max(renderz.y,layerz.y) ); + renderz += m_RenderingPanel->GetWindowBorderSize(); + + wxSize clientz( max(renderz.x,layerz.x), max(renderz.y,layerz.y) ); + +// wxSize diffz( GetSize() - GetClientSize() ); +// clientz += diffz; + + return clientz; + +#endif + } @@ -617,7 +650,7 @@ void LAYER_WIDGET::ClearRenderRows() void LAYER_WIDGET::SelectLayerRow( int aRow ) { // enable the layer tab at index 0 - m_notebook->ChangeSelection( 0 ); + m_notebook->SetSelection( 0 ); int oldNdx = LYR_COLUMN_COUNT * m_CurrentRow; int newNdx = LYR_COLUMN_COUNT * aRow; @@ -699,15 +732,12 @@ class MYFRAME : public wxFrame // abstract methods. class MYLAYERS : public LAYER_WIDGET { - MYFRAME* frame; - public: // your constructor could take a BOARD argument. here I leave it // out because this source module wants to know nothing of BOARDs // to maximize re-use. - MYLAYERS( wxWindow* aParent, MYFRAME* aFrame ) : - LAYER_WIDGET( aParent ), - frame( aFrame ) + MYLAYERS( wxWindow* aParent ) : + LAYER_WIDGET( aParent, aParent ) { } @@ -755,7 +785,7 @@ public: // notify wxAUI which frame to use m_mgr.SetManagedWindow( this ); - MYLAYERS* lw = new MYLAYERS( this, this ); + MYLAYERS* lw = new MYLAYERS( this ); // add some layer rows static const LAYER_WIDGET::ROW layerRows[] = { diff --git a/pcbnew/panel_layer_select.fbp b/pcbnew/panel_layer_select.fbp index c2a623a39e..75cf3ce47b 100644 --- a/pcbnew/panel_layer_select.fbp +++ b/pcbnew/panel_layer_select.fbp @@ -117,14 +117,14 @@ layerbitmap; Load From File - Layers + Layer 1 1 - + ,90,90,10,70,0 0 wxID_ANY @@ -167,8 +167,8 @@ wxVERTICAL none - 5 - wxBOTTOM|wxEXPAND|wxTOP + 2 + wxBOTTOM|wxEXPAND|wxLEFT|wxTOP 1 @@ -219,13 +219,13 @@ wxHORIZONTAL - 3 + 1 m_LayersFlexGridSizer wxFLEX_GROWMODE_SPECIFIED protected 0 - 1 + 0 @@ -234,14 +234,14 @@ ; Load From File - Rendering + Render 0 1 - + ,90,90,10,70,0 0 wxID_ANY @@ -336,13 +336,13 @@ wxHORIZONTAL - 3 + 1 m_RenderFlexGridSizer wxFLEX_GROWMODE_NONE protected 0 - 1 + 0 diff --git a/pcbnew/pcbframe.cpp b/pcbnew/pcbframe.cpp index a9494db3d1..e4b3fb4b06 100644 --- a/pcbnew/pcbframe.cpp +++ b/pcbnew/pcbframe.cpp @@ -327,7 +327,7 @@ WinEDA_PcbFrame::WinEDA_PcbFrame( wxWindow* father, lyrs.MinSize( m_Layers->GetBestSize() ); // updated in ReFillLayerWidget lyrs.BestSize( m_Layers->GetBestSize() ); lyrs.CloseButton( false ); - lyrs.Caption( wxT( "Layers" ) ); + lyrs.Caption( _( "Visibles" ) ); lyrs.IsFloatable(); @@ -520,6 +520,8 @@ void WinEDA_PcbFrame::ReFillLayerWidget() int layerId; wxString tooltip; } techLayerSeq[] = { + + /* some layers are not visible nor editable, don't show them for now: { 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") }, @@ -528,11 +530,12 @@ void WinEDA_PcbFrame::ReFillLayerWidget() { 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") }, + */ + { 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