Commit d5f2f586 authored by Dick Hollenbeck's avatar Dick Hollenbeck

merge

parents 325a13a7 597f6775
...@@ -4,6 +4,13 @@ KiCad ChangeLog 2010 ...@@ -4,6 +4,13 @@ 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-Dec-19 UPDATE Dick Hollenbeck <dick@softplc.com>
================================================================================
++new:
Completed a good portion of /new class DIR_LIB_SOURCE.
Added an autonomous CMakeLists.txt file to /new, with new-docs target and
test program target.
2010-dec-15, UPDATE Jean-Pierre Charras <jean-pierre.charras@gipsa-lab.inpg.fr> 2010-dec-15, UPDATE Jean-Pierre Charras <jean-pierre.charras@gipsa-lab.inpg.fr>
================================================================================ ================================================================================
Gerbview: Gerbview:
......
...@@ -93,11 +93,9 @@ void WinEDA_BasicFrame::SetLanguage( wxCommandEvent& event ) ...@@ -93,11 +93,9 @@ void WinEDA_BasicFrame::SetLanguage( wxCommandEvent& event )
int id = event.GetId(); int id = event.GetId();
wxGetApp().SetLanguageIdentifier( id ); wxGetApp().SetLanguageIdentifier( id );
if ( wxGetApp().SetLanguage() ) wxGetApp().SetLanguage();
{ ReCreateMenuBar();
ReCreateMenuBar(); GetMenuBar()->Refresh();
Refresh();
}
} }
......
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
#endif #endif
#ifndef KICAD_BUILD_VERSION #ifndef KICAD_BUILD_VERSION
#define KICAD_BUILD_VERSION "(2010-12-10 BZR 26xx)" #define KICAD_BUILD_VERSION "(2010-12-18 BZR 26xx)"
#endif #endif
//#define VERSION_STABILITY "stable" //#define VERSION_STABILITY "stable"
......
...@@ -22,7 +22,7 @@ void WinEDA_DrawFrame::PlotWorkSheet( PLOTTER* plotter, BASE_SCREEN* screen ) ...@@ -22,7 +22,7 @@ void WinEDA_DrawFrame::PlotWorkSheet( PLOTTER* plotter, BASE_SCREEN* screen )
{ {
#define WSTEXTSIZE 50 // Text size in mils #define WSTEXTSIZE 50 // Text size in mils
Ki_PageDescr* Sheet = screen->m_CurrentSheetDesc; Ki_PageDescr* Sheet = screen->m_CurrentSheetDesc;
int xg, yg, ipas, gxpas, gypas; int xg, yg;
wxSize PageSize; wxSize PageSize;
wxPoint pos, ref; wxPoint pos, ref;
EDA_Colors color; EDA_Colors color;
...@@ -36,10 +36,11 @@ void WinEDA_DrawFrame::PlotWorkSheet( PLOTTER* plotter, BASE_SCREEN* screen ) ...@@ -36,10 +36,11 @@ void WinEDA_DrawFrame::PlotWorkSheet( PLOTTER* plotter, BASE_SCREEN* screen )
wxSize text_size2; wxSize text_size2;
wxSize text_size3; wxSize text_size3;
wxSize text_size1_5; wxSize text_size1_5;
#endif #else
int UpperLimit = VARIABLE_BLOCK_START_POSITION; int UpperLimit = VARIABLE_BLOCK_START_POSITION;
bool italic = false;
bool bold = false; bool bold = false;
#endif
bool italic = false;
bool thickness = 0; //@todo : use current pen bool thickness = 0; //@todo : use current pen
color = BLACK; color = BLACK;
...@@ -150,8 +151,8 @@ void WinEDA_DrawFrame::PlotWorkSheet( PLOTTER* plotter, BASE_SCREEN* screen ) ...@@ -150,8 +151,8 @@ void WinEDA_DrawFrame::PlotWorkSheet( PLOTTER* plotter, BASE_SCREEN* screen )
#else #else
/* Plot legend along the X axis. */ /* Plot legend along the X axis. */
ipas = ( xg - ref.x ) / PAS_REF; int ipas = ( xg - ref.x ) / PAS_REF;
gxpas = ( xg - ref.x ) / ipas; int gxpas = ( xg - ref.x ) / ipas;
for( int ii = ref.x + gxpas, jj = 1; ipas > 0; ii += gxpas, jj++, ipas-- ) for( int ii = ref.x + gxpas, jj = 1; ipas > 0; ii += gxpas, jj++, ipas-- )
{ {
msg.Empty(); msg.Empty();
...@@ -193,7 +194,7 @@ void WinEDA_DrawFrame::PlotWorkSheet( PLOTTER* plotter, BASE_SCREEN* screen ) ...@@ -193,7 +194,7 @@ void WinEDA_DrawFrame::PlotWorkSheet( PLOTTER* plotter, BASE_SCREEN* screen )
/* Plot legend along the Y axis. */ /* Plot legend along the Y axis. */
ipas = ( yg - ref.y ) / PAS_REF; ipas = ( yg - ref.y ) / PAS_REF;
gypas = ( yg - ref.y ) / ipas; int gypas = ( yg - ref.y ) / ipas;
for( int ii = ref.y + gypas, jj = 0; ipas > 0; ii += gypas, jj++, ipas-- ) for( int ii = ref.y + gypas, jj = 0; ipas > 0; ii += gypas, jj++, ipas-- )
{ {
if( jj < 26 ) if( jj < 26 )
......
...@@ -79,6 +79,7 @@ WinEDA_DrawPanel::WinEDA_DrawPanel( WinEDA_DrawFrame* parent, int id, ...@@ -79,6 +79,7 @@ WinEDA_DrawPanel::WinEDA_DrawPanel( WinEDA_DrawFrame* parent, int id,
m_AbortEnable = m_AbortRequest = false; m_AbortEnable = m_AbortRequest = false;
m_AutoPAN_Enable = TRUE; m_AutoPAN_Enable = TRUE;
m_IgnoreMouseEvents = 0; m_IgnoreMouseEvents = 0;
m_DisableEraseBG = false;
ManageCurseur = NULL; ManageCurseur = NULL;
ForceCloseManageCurseur = NULL; ForceCloseManageCurseur = NULL;
...@@ -673,7 +674,7 @@ void WinEDA_DrawPanel::OnPaint( wxPaintEvent& event ) ...@@ -673,7 +674,7 @@ void WinEDA_DrawPanel::OnPaint( wxPaintEvent& event )
// call ~wxDCClipper() before ~wxPaintDC() // call ~wxDCClipper() before ~wxPaintDC()
{ {
wxDCClipper dcclip( paintDC, PaintClipBox ); wxDCClipper dcclip( paintDC, PaintClipBox );
ReDraw( &paintDC, true ); ReDraw( &paintDC, m_DisableEraseBG ? false : true );
} }
m_ClipBox = tmp; m_ClipBox = tmp;
...@@ -914,6 +915,13 @@ void WinEDA_DrawPanel::DrawGrid( wxDC* DC ) ...@@ -914,6 +915,13 @@ void WinEDA_DrawPanel::DrawGrid( wxDC* DC )
tmpDC.DrawPoint( 0, ypos ); tmpDC.DrawPoint( 0, ypos );
} }
// Use the layer bitmap itself as a mask when blitting.
// The bitmap cannot be referenced by a device context
// when setting the mask.
tmpDC.SelectObject( wxNullBitmap );
tmpBM.SetMask( new wxMask( tmpBM, MakeColour( g_DrawBgColor ) ) );
tmpDC.SelectObject( tmpBM );
ypos = GRMapY( org.y ); ypos = GRMapY( org.y );
for( ii = 0; ; ii += increment ) for( ii = 0; ; ii += increment )
{ {
...@@ -925,7 +933,7 @@ void WinEDA_DrawPanel::DrawGrid( wxDC* DC ) ...@@ -925,7 +933,7 @@ void WinEDA_DrawPanel::DrawGrid( wxDC* DC )
continue; continue;
if( xpos > m_ClipBox.GetEnd().x) // end of active area reached. if( xpos > m_ClipBox.GetEnd().x) // end of active area reached.
break; break;
DC->Blit( xpos, ypos, 1, screenSize.y, &tmpDC, 0, 0 ); DC->Blit( xpos, ypos, 1, screenSize.y, &tmpDC, 0, 0, wxCOPY, true );
} }
#endif #endif
......
...@@ -872,7 +872,7 @@ wxString WinEDA_App::FindFileInSearchPaths( const wxString& filename, ...@@ -872,7 +872,7 @@ wxString WinEDA_App::FindFileInSearchPaths( const wxString& filename,
} }
/** /* GetHelpFile
* Get the help file path. * Get the help file path.
* *
* Return the Kicad help file with path. The base paths defined in * Return the Kicad help file with path. The base paths defined in
...@@ -880,9 +880,9 @@ wxString WinEDA_App::FindFileInSearchPaths( const wxString& filename, ...@@ -880,9 +880,9 @@ wxString WinEDA_App::FindFileInSearchPaths( const wxString& filename,
* be relative depending on the paths added to m_searchPaths. See the * be relative depending on the paths added to m_searchPaths. See the
* documentation for wxPathList for more information. If the help file * documentation for wxPathList for more information. If the help file
* for the current locale is not found, an attempt to find the English * for the current locale is not found, an attempt to find the English
* version of the help file is made. wxEmptyString is returned if the * version of the help file is made.
* help file is not found. * wxEmptyString is returned if help file not found.
* Help file is searched in directories in this order: * Help file is searched in directories in this order:
* help/<canonical name> like help/en_GB * help/<canonical name> like help/en_GB
* help/<short name> like help/en * help/<short name> like help/en
* help/en * help/en
...@@ -1070,13 +1070,12 @@ wxString WinEDA_App::ReturnFilenameWithRelativePathInLibPath( const wxString& aF ...@@ -1070,13 +1070,12 @@ wxString WinEDA_App::ReturnFilenameWithRelativePathInLibPath( const wxString& aF
} }
/** FindLibraryPath /* FindLibraryPath
* Kicad saves user defined library files that are not in the standard * Kicad saves user defined library files that are not in the standard
* library search path list with the full file path. Calling the library * library search path list with the full file path. Calling the library
* search path list with a user library file will fail. This helper method * search path list with a user library file will fail. This helper method
* solves that problem. * solves that problem.
* @param fileName * return a wxEmptyString if library file is not found.
* @return a wxEmptyString if library file is not found.
*/ */
wxString WinEDA_App::FindLibraryPath( const wxString& aFileName ) wxString WinEDA_App::FindLibraryPath( const wxString& aFileName )
{ {
...@@ -1087,10 +1086,9 @@ wxString WinEDA_App::FindLibraryPath( const wxString& aFileName ) ...@@ -1087,10 +1086,9 @@ wxString WinEDA_App::FindLibraryPath( const wxString& aFileName )
} }
/** /* Function RemoveLibraryPath
* Function RemoveLibraryPath
* Removes the given path(s) from the library path list * Removes the given path(s) from the library path list
* @param aPaths = path or path list to remove. paths must be separated by ";" * aPaths = path or path list to remove. paths must be separated by ";"
*/ */
void WinEDA_App::RemoveLibraryPath( const wxString& aPaths ) void WinEDA_App::RemoveLibraryPath( const wxString& aPaths )
{ {
......
...@@ -37,7 +37,7 @@ void WinEDA_DrawFrame::Recadre_Trace( bool ToMouse ) ...@@ -37,7 +37,7 @@ void WinEDA_DrawFrame::Recadre_Trace( bool ToMouse )
* use Refresh() and update() do not change problems * use Refresh() and update() do not change problems
*/ */
INSTALL_DC( dc, DrawPanel ); INSTALL_DC( dc, DrawPanel );
DrawPanel->ReDraw( &dc ); DrawPanel->ReDraw( &dc, DrawPanel->m_DisableEraseBG ? false : true );
/* Move the mouse cursor to the on grid graphic cursor position */ /* Move the mouse cursor to the on grid graphic cursor position */
if( ToMouse == TRUE ) if( ToMouse == TRUE )
......
...@@ -36,7 +36,7 @@ set(CVPCB_SRCS ...@@ -36,7 +36,7 @@ set(CVPCB_SRCS
listboxes.cpp listboxes.cpp
listlib.cpp listlib.cpp
loadcmp.cpp loadcmp.cpp
menucfg.cpp menubar.cpp
readschematicnetlist.cpp readschematicnetlist.cpp
savecmp.cpp savecmp.cpp
setvisu.cpp setvisu.cpp
......
/** /**
* @file ./menucfg.cpp * @file menucfg.cpp
* (Re)Create the CvPCB main MenuBar * (Re)Create the CvPCB main MenuBar
*/ */
#include "fctsys.h" #include "fctsys.h"
...@@ -18,9 +18,18 @@ ...@@ -18,9 +18,18 @@
void WinEDA_CvpcbFrame::ReCreateMenuBar() void WinEDA_CvpcbFrame::ReCreateMenuBar()
{ {
wxMenuItem* item; wxMenuItem* item;
wxMenuBar* menuBar; wxMenuBar* menuBar = GetMenuBar();
menuBar = new wxMenuBar(); if( ! menuBar )
menuBar = new wxMenuBar();
// Delete all existing menus so they can be rebuilt.
// This allows language changes of the menu text on the fly.
menuBar->Freeze();
while( menuBar->GetMenuCount() )
delete menuBar->Remove(0);
// Recreate all menus:
wxMenu* filesMenu = new wxMenu; wxMenu* filesMenu = new wxMenu;
item = new wxMenuItem( filesMenu, ID_LOAD_PROJECT, item = new wxMenuItem( filesMenu, ID_LOAD_PROJECT,
...@@ -29,7 +38,7 @@ void WinEDA_CvpcbFrame::ReCreateMenuBar() ...@@ -29,7 +38,7 @@ void WinEDA_CvpcbFrame::ReCreateMenuBar()
item->SetBitmap( open_xpm ); item->SetBitmap( open_xpm );
filesMenu->Append( item ); filesMenu->Append( item );
/* Open Recent submenu */ /* Open Recent submenu */
wxMenu* openRecentMenu = new wxMenu(); wxMenu* openRecentMenu = new wxMenu();
wxGetApp().m_fileHistory.AddFilesToMenu( openRecentMenu ); wxGetApp().m_fileHistory.AddFilesToMenu( openRecentMenu );
ADD_MENUITEM_WITH_HELP_AND_SUBMENU( filesMenu, openRecentMenu, -1, _( "Open &Recent" ), ADD_MENUITEM_WITH_HELP_AND_SUBMENU( filesMenu, openRecentMenu, -1, _( "Open &Recent" ),
...@@ -96,14 +105,16 @@ void WinEDA_CvpcbFrame::ReCreateMenuBar() ...@@ -96,14 +105,16 @@ void WinEDA_CvpcbFrame::ReCreateMenuBar()
#endif /* !defined(__WXMAC__) */ #endif /* !defined(__WXMAC__) */
/** // Create the menubar and append all submenus
* Create the menubar and append all submenus
*/
menuBar->Append( filesMenu, _( "&File" ) ); menuBar->Append( filesMenu, _( "&File" ) );
menuBar->Append( configmenu, _( "&Preferences" ) ); menuBar->Append( configmenu, _( "&Preferences" ) );
menuBar->Append( helpMenu, _( "&Help" ) ); menuBar->Append( helpMenu, _( "&Help" ) );
/* Calling SetMenuBar() will Destroy the existing menu bar so it can be menuBar->Thaw();
* rebuilt. This allows language changes of the menu text on the fly. */
SetMenuBar( menuBar ); // Associate the menu bar with the frame, if no previous menubar
if( GetMenuBar() == NULL )
SetMenuBar( menuBar );
else
menuBar->Refresh();
} }
...@@ -45,6 +45,7 @@ static ColorButton SheetColorButtons[] = { ...@@ -45,6 +45,7 @@ static ColorButton SheetColorButtons[] = {
{ _( "Sheet" ), LAYER_SHEET }, { _( "Sheet" ), LAYER_SHEET },
{ _( "Sheet file name" ), LAYER_SHEETFILENAME }, { _( "Sheet file name" ), LAYER_SHEETFILENAME },
{ _( "Sheet name" ), LAYER_SHEETNAME }, { _( "Sheet name" ), LAYER_SHEETNAME },
{ _( "Sheet label" ), LAYER_SHEETLABEL },
{ _( "Hierarchical label" ), LAYER_HIERLABEL }, { _( "Hierarchical label" ), LAYER_HIERLABEL },
{ wxT( "" ), -1 } // Sentinel marking end of list. { wxT( "" ), -1 } // Sentinel marking end of list.
}; };
...@@ -291,6 +292,7 @@ void DIALOG_COLOR_CONFIG::UpdateLayerSettings() ...@@ -291,6 +292,7 @@ void DIALOG_COLOR_CONFIG::UpdateLayerSettings()
else else
g_DrawBgColor = BLACK; g_DrawBgColor = BLACK;
m_Parent->SetGridColor( g_LayerDescr.LayerColor[LAYER_GRID] );
m_Parent->Refresh(); m_Parent->Refresh();
} }
......
...@@ -409,8 +409,7 @@ void SCH_EDIT_FRAME::SaveProjectFile( wxWindow* displayframe, bool askoverwrite ...@@ -409,8 +409,7 @@ void SCH_EDIT_FRAME::SaveProjectFile( wxWindow* displayframe, bool askoverwrite
if( dlg.ShowModal() == wxID_CANCEL ) if( dlg.ShowModal() == wxID_CANCEL )
return; return;
wxGetApp().WriteProjectConfig( dlg.GetPath(), GROUP, wxGetApp().WriteProjectConfig( dlg.GetPath(), GROUP, GetProjectFileParameters() );
GetProjectFileParameters() );
} }
...@@ -460,7 +459,7 @@ PARAM_CFG_ARRAY& SCH_EDIT_FRAME::GetConfigurationSettings( void ) ...@@ -460,7 +459,7 @@ PARAM_CFG_ARRAY& SCH_EDIT_FRAME::GetConfigurationSettings( void )
return m_configSettings; return m_configSettings;
m_configSettings.push_back( new PARAM_CFG_INT( wxT( "Unite" ), m_configSettings.push_back( new PARAM_CFG_INT( wxT( "Unite" ),
(int*)&g_UserUnit, 0 ) ); (int*)&g_UserUnit, 0 ) );
m_configSettings.push_back( new PARAM_CFG_SETCOLOR( true, wxT( "ColWire" ), m_configSettings.push_back( new PARAM_CFG_SETCOLOR( true, wxT( "ColWire" ),
&g_LayerDescr.LayerColor[LAYER_WIRE], &g_LayerDescr.LayerColor[LAYER_WIRE],
GREEN ) ); GREEN ) );
...@@ -534,10 +533,13 @@ PARAM_CFG_ARRAY& SCH_EDIT_FRAME::GetConfigurationSettings( void ) ...@@ -534,10 +533,13 @@ PARAM_CFG_ARRAY& SCH_EDIT_FRAME::GetConfigurationSettings( void )
m_configSettings.push_back( new PARAM_CFG_SETCOLOR( true, wxT( "ColorErcE" ), m_configSettings.push_back( new PARAM_CFG_SETCOLOR( true, wxT( "ColorErcE" ),
&g_LayerDescr.LayerColor[LAYER_ERC_ERR], &g_LayerDescr.LayerColor[LAYER_ERC_ERR],
RED ) ); RED ) );
m_configSettings.push_back( new PARAM_CFG_SETCOLOR( true, wxT( "ColorGrid" ),
&g_LayerDescr.LayerColor[LAYER_GRID],
DARKGRAY ) );
m_configSettings.push_back( new PARAM_CFG_BOOL( true, wxT( "PrintMonochrome" ), m_configSettings.push_back( new PARAM_CFG_BOOL( true, wxT( "PrintMonochrome" ),
&m_printMonochrome, true ) ); &m_printMonochrome, true ) );
m_configSettings.push_back( new PARAM_CFG_BOOL( true, wxT( "PrintSheetReferenceAndTitleBlock" ), m_configSettings.push_back( new PARAM_CFG_BOOL( true, wxT( "PrintSheetReferenceAndTitleBlock" ),
&m_printSheetReference, true ) ); &m_printSheetReference, true ) );
return m_configSettings; return m_configSettings;
} }
...@@ -558,8 +560,10 @@ void SCH_EDIT_FRAME::LoadSettings() ...@@ -558,8 +560,10 @@ void SCH_EDIT_FRAME::LoadSettings()
wxGetApp().ReadCurrentSetupValues( GetConfigurationSettings() ); wxGetApp().ReadCurrentSetupValues( GetConfigurationSettings() );
g_DrawDefaultLineThickness = cfg->Read( DefaultDrawLineWidthEntry, // This is eqired until someone gets rid of the global variable g_LayerDescription().
(long) 6 ); m_GridColor = g_LayerDescr.LayerColor[LAYER_GRID];
g_DrawDefaultLineThickness = cfg->Read( DefaultDrawLineWidthEntry,(long) 6 );
cfg->Read( ShowHiddenPinsEntry, &m_ShowAllPins, false ); cfg->Read( ShowHiddenPinsEntry, &m_ShowAllPins, false );
cfg->Read( HorzVertLinesOnlyEntry, &g_HVLines, true ); cfg->Read( HorzVertLinesOnlyEntry, &g_HVLines, true );
...@@ -633,8 +637,8 @@ void SCH_EDIT_FRAME::LoadSettings() ...@@ -633,8 +637,8 @@ void SCH_EDIT_FRAME::LoadSettings()
catch( IO_ERROR e ) catch( IO_ERROR e )
{ {
// @todo show error msg // @todo show error msg
D(printf("templatefieldnames parsing error: '%s'\n", D( printf( "templatefieldnames parsing error: '%s'\n",
CONV_TO_UTF8(e.errorText) );) CONV_TO_UTF8( e.errorText ) ); )
} }
} }
...@@ -711,7 +715,6 @@ void SCH_EDIT_FRAME::SaveSettings() ...@@ -711,7 +715,6 @@ void SCH_EDIT_FRAME::SaveSettings()
record.Replace( wxT("\n"), wxT(""), true ); // strip all newlines record.Replace( wxT("\n"), wxT(""), true ); // strip all newlines
record.Replace( wxT(" "), wxT(" "), true ); // double space to single record.Replace( wxT(" "), wxT(" "), true ); // double space to single
cfg->Write( FieldNamesEntry, record ); cfg->Write( FieldNamesEntry, record );
} }
...@@ -958,6 +958,9 @@ void LIB_EDIT_FRAME::SetLanguage( wxCommandEvent& event ) ...@@ -958,6 +958,9 @@ void LIB_EDIT_FRAME::SetLanguage( wxCommandEvent& event )
{ {
WinEDA_BasicFrame::SetLanguage( event ); WinEDA_BasicFrame::SetLanguage( event );
SCH_EDIT_FRAME *parent = (SCH_EDIT_FRAME *)GetParent(); SCH_EDIT_FRAME *parent = (SCH_EDIT_FRAME *)GetParent();
// Call parent->WinEDA_BasicFrame::SetLanguage and NOT
// parent->SetLanguage because parent->SetLanguage call
// LIB_EDIT_FRAME::SetLanguage
parent->WinEDA_BasicFrame::SetLanguage( event ); parent->WinEDA_BasicFrame::SetLanguage( event );
} }
......
...@@ -28,34 +28,34 @@ void SCH_EDIT_FRAME::ReCreateMenuBar() ...@@ -28,34 +28,34 @@ void SCH_EDIT_FRAME::ReCreateMenuBar()
wxMenuItem* item; wxMenuItem* item;
wxMenuBar* menuBar = GetMenuBar(); wxMenuBar* menuBar = GetMenuBar();
/** if( ! menuBar )
* Destroy the existing menu bar so it can be rebuilt. This allows menuBar = new wxMenuBar();
* language changes of the menu text on the fly.
*/
if( menuBar )
SetMenuBar( NULL );
menuBar = new wxMenuBar(); // Delete all existing menus so they can be rebuilt.
// This allows language changes of the menu text on the fly.
menuBar->Freeze();
while( menuBar->GetMenuCount() )
delete menuBar->Remove(0);
/** // Recreate all menus:
* File menu
*/ // File menu
wxMenu* filesMenu = new wxMenu; wxMenu* filesMenu = new wxMenu;
/* New */ // New
item = new wxMenuItem( filesMenu, ID_NEW_PROJECT, _( "&New\tCtrl+N" ), item = new wxMenuItem( filesMenu, ID_NEW_PROJECT, _( "&New\tCtrl+N" ),
_( "New schematic project" ) ); _( "New schematic project" ) );
item->SetBitmap( new_xpm ); item->SetBitmap( new_xpm );
filesMenu->Append( item ); filesMenu->Append( item );
/* Open */ // Open
item = new wxMenuItem( filesMenu, ID_LOAD_PROJECT, _( "&Open\tCtrl+O" ), item = new wxMenuItem( filesMenu, ID_LOAD_PROJECT, _( "&Open\tCtrl+O" ),
_( "Open an existing schematic project" ) ); _( "Open an existing schematic project" ) );
item->SetBitmap( open_xpm ); item->SetBitmap( open_xpm );
filesMenu->Append( item ); filesMenu->Append( item );
/* Open Recent submenu */ // Open Recent submenu
wxMenu* openRecentMenu = new wxMenu(); wxMenu* openRecentMenu = new wxMenu();
wxGetApp().m_fileHistory.AddFilesToMenu( openRecentMenu ); wxGetApp().m_fileHistory.AddFilesToMenu( openRecentMenu );
ADD_MENUITEM_WITH_HELP_AND_SUBMENU( filesMenu, openRecentMenu, ADD_MENUITEM_WITH_HELP_AND_SUBMENU( filesMenu, openRecentMenu,
...@@ -63,11 +63,9 @@ void SCH_EDIT_FRAME::ReCreateMenuBar() ...@@ -63,11 +63,9 @@ void SCH_EDIT_FRAME::ReCreateMenuBar()
_( "Open a recent opened schematic project" ), _( "Open a recent opened schematic project" ),
open_project_xpm ); open_project_xpm );
/* Separator */
filesMenu->AppendSeparator();
/* Save */ // Save schematic
/* Save Project */ filesMenu->AppendSeparator();
item = new wxMenuItem( filesMenu, ID_SAVE_PROJECT, item = new wxMenuItem( filesMenu, ID_SAVE_PROJECT,
_( "&Save Whole Schematic Project\tCtrl+S" ), _( "&Save Whole Schematic Project\tCtrl+S" ),
_( "Save all sheets in the schematic project" ) ); _( "Save all sheets in the schematic project" ) );
...@@ -79,22 +77,21 @@ void SCH_EDIT_FRAME::ReCreateMenuBar() ...@@ -79,22 +77,21 @@ void SCH_EDIT_FRAME::ReCreateMenuBar()
item->SetBitmap( save_xpm ); item->SetBitmap( save_xpm );
filesMenu->Append( item ); filesMenu->Append( item );
/* Save as... */ // Save as...
item = new wxMenuItem( filesMenu, ID_SAVE_ONE_SHEET_AS, item = new wxMenuItem( filesMenu, ID_SAVE_ONE_SHEET_AS,
_( "Save Current Sheet &as" ), _( "Save Current Sheet &as" ),
_( "Save current schematic sheet as..." ) ); _( "Save current schematic sheet as..." ) );
item->SetBitmap( save_as_xpm ); item->SetBitmap( save_as_xpm );
filesMenu->Append( item ); filesMenu->Append( item );
/* Separator */
filesMenu->AppendSeparator();
/* Print */ // Print
filesMenu->AppendSeparator();
item = new wxMenuItem( filesMenu, wxID_PRINT, _( "P&rint" ), _( "Print schematic" ) ); item = new wxMenuItem( filesMenu, wxID_PRINT, _( "P&rint" ), _( "Print schematic" ) );
item->SetBitmap( print_button ); item->SetBitmap( print_button );
filesMenu->Append( item ); filesMenu->Append( item );
/* Plot submenu */ // Plot submenu
wxMenu* choice_plot_fmt = new wxMenu; wxMenu* choice_plot_fmt = new wxMenu;
item = new wxMenuItem( choice_plot_fmt, ID_GEN_PLOT_PS, item = new wxMenuItem( choice_plot_fmt, ID_GEN_PLOT_PS,
_( "Plot PostScript" ), _( "Plot PostScript" ),
...@@ -108,19 +105,19 @@ void SCH_EDIT_FRAME::ReCreateMenuBar() ...@@ -108,19 +105,19 @@ void SCH_EDIT_FRAME::ReCreateMenuBar()
item->SetBitmap( plot_HPG_xpm ); item->SetBitmap( plot_HPG_xpm );
choice_plot_fmt->Append( item ); choice_plot_fmt->Append( item );
/* Plot SVG */ // Plot SVG
item = new wxMenuItem( choice_plot_fmt, ID_GEN_PLOT_SVG, _( "Plot SVG" ), item = new wxMenuItem( choice_plot_fmt, ID_GEN_PLOT_SVG, _( "Plot SVG" ),
_( "Plot schematic sheet in SVG format" ) ); _( "Plot schematic sheet in SVG format" ) );
item->SetBitmap( plot_xpm ); item->SetBitmap( plot_xpm );
choice_plot_fmt->Append( item ); choice_plot_fmt->Append( item );
/* Plot DXF */ // Plot DXF
item = new wxMenuItem( choice_plot_fmt, ID_GEN_PLOT_DXF, _( "Plot DXF" ), item = new wxMenuItem( choice_plot_fmt, ID_GEN_PLOT_DXF, _( "Plot DXF" ),
_( "Plot schematic sheet in DXF format" ) ); _( "Plot schematic sheet in DXF format" ) );
item->SetBitmap( plot_xpm ); item->SetBitmap( plot_xpm );
choice_plot_fmt->Append( item ); choice_plot_fmt->Append( item );
/* Under windows, one can draw to the clipboard */ // Under windows, one can draw to the clipboard
#ifdef __WINDOWS__ #ifdef __WINDOWS__
item = new wxMenuItem( choice_plot_fmt, ID_GEN_COPY_SHEET_TO_CLIPBOARD, item = new wxMenuItem( choice_plot_fmt, ID_GEN_COPY_SHEET_TO_CLIPBOARD,
...@@ -128,7 +125,6 @@ void SCH_EDIT_FRAME::ReCreateMenuBar() ...@@ -128,7 +125,6 @@ void SCH_EDIT_FRAME::ReCreateMenuBar()
_( "Export drawings to clipboard" ) ); _( "Export drawings to clipboard" ) );
item->SetBitmap( copy_button ); item->SetBitmap( copy_button );
choice_plot_fmt->Append( item ); choice_plot_fmt->Append( item );
#endif #endif
ADD_MENUITEM_WITH_HELP_AND_SUBMENU( filesMenu, choice_plot_fmt, ADD_MENUITEM_WITH_HELP_AND_SUBMENU( filesMenu, choice_plot_fmt,
...@@ -136,7 +132,7 @@ void SCH_EDIT_FRAME::ReCreateMenuBar() ...@@ -136,7 +132,7 @@ void SCH_EDIT_FRAME::ReCreateMenuBar()
_( "Plot schematic sheet in HPGL, PostScript or SVG format" ), _( "Plot schematic sheet in HPGL, PostScript or SVG format" ),
plot_xpm ); plot_xpm );
/* Quit on all platforms except WXMAC */ // Quit on all platforms except WXMAC
#if !defined(__WXMAC__) #if !defined(__WXMAC__)
filesMenu->AppendSeparator(); filesMenu->AppendSeparator();
...@@ -144,15 +140,12 @@ void SCH_EDIT_FRAME::ReCreateMenuBar() ...@@ -144,15 +140,12 @@ void SCH_EDIT_FRAME::ReCreateMenuBar()
item->SetBitmap( exit_xpm ); item->SetBitmap( exit_xpm );
filesMenu->Append( item ); filesMenu->Append( item );
#endif /* !defined( __WXMAC__) */ #endif // !defined( __WXMAC__)
/** // Edit menu
* Edit menu
*/
wxMenu* editMenu = new wxMenu; wxMenu* editMenu = new wxMenu;
/* Undo */ // Undo
text = AddHotkeyName( _( "Undo" ), s_Schematic_Hokeys_Descr, HK_UNDO ); text = AddHotkeyName( _( "Undo" ), s_Schematic_Hokeys_Descr, HK_UNDO );
item = new wxMenuItem( editMenu, wxID_UNDO, text, HELP_UNDO, wxITEM_NORMAL ); item = new wxMenuItem( editMenu, wxID_UNDO, text, HELP_UNDO, wxITEM_NORMAL );
...@@ -166,10 +159,8 @@ void SCH_EDIT_FRAME::ReCreateMenuBar() ...@@ -166,10 +159,8 @@ void SCH_EDIT_FRAME::ReCreateMenuBar()
item->SetBitmap( redo_xpm ); item->SetBitmap( redo_xpm );
editMenu->Append( item ); editMenu->Append( item );
/* Separator */
editMenu->AppendSeparator();
/* Delete */ /* Delete */
editMenu->AppendSeparator();
item = new wxMenuItem( editMenu, ID_SCHEMATIC_DELETE_ITEM_BUTT, item = new wxMenuItem( editMenu, ID_SCHEMATIC_DELETE_ITEM_BUTT,
_( "Delete" ), HELP_DELETE_ITEMS, wxITEM_NORMAL ); _( "Delete" ), HELP_DELETE_ITEMS, wxITEM_NORMAL );
item->SetBitmap( delete_body_xpm ); item->SetBitmap( delete_body_xpm );
...@@ -195,9 +186,7 @@ void SCH_EDIT_FRAME::ReCreateMenuBar() ...@@ -195,9 +186,7 @@ void SCH_EDIT_FRAME::ReCreateMenuBar()
editMenu->Append( item ); editMenu->Append( item );
/** // View menu
* View menu
*/
wxMenu* viewMenu = new wxMenu; wxMenu* viewMenu = new wxMenu;
/* Important Note for ZOOM IN and ZOOM OUT commands from menubar: /* Important Note for ZOOM IN and ZOOM OUT commands from menubar:
...@@ -378,9 +367,7 @@ void SCH_EDIT_FRAME::ReCreateMenuBar() ...@@ -378,9 +367,7 @@ void SCH_EDIT_FRAME::ReCreateMenuBar()
placeMenu->Append( item ); placeMenu->Append( item );
/** // Preferences Menu
* Preferences Menu
*/
wxMenu* configmenu = new wxMenu; wxMenu* configmenu = new wxMenu;
/* Library */ /* Library */
...@@ -423,9 +410,7 @@ void SCH_EDIT_FRAME::ReCreateMenuBar() ...@@ -423,9 +410,7 @@ void SCH_EDIT_FRAME::ReCreateMenuBar()
configmenu->Append( item ); configmenu->Append( item );
/** // Help Menu
* Help Menu
*/
wxMenu* helpMenu = new wxMenu; wxMenu* helpMenu = new wxMenu;
AddHelpVersionInfoMenuEntry( helpMenu ); AddHelpVersionInfoMenuEntry( helpMenu );
...@@ -446,9 +431,7 @@ void SCH_EDIT_FRAME::ReCreateMenuBar() ...@@ -446,9 +431,7 @@ void SCH_EDIT_FRAME::ReCreateMenuBar()
#endif /* !defined(__WXMAC__) */ #endif /* !defined(__WXMAC__) */
/** // Create the menubar and append all submenus
* Create the menubar and append all submenus
*/
menuBar->Append( filesMenu, _( "&File" ) ); menuBar->Append( filesMenu, _( "&File" ) );
menuBar->Append( editMenu, _( "&Edit" ) ); menuBar->Append( editMenu, _( "&Edit" ) );
menuBar->Append( viewMenu, _( "&View" ) ); menuBar->Append( viewMenu, _( "&View" ) );
...@@ -456,6 +439,11 @@ void SCH_EDIT_FRAME::ReCreateMenuBar() ...@@ -456,6 +439,11 @@ void SCH_EDIT_FRAME::ReCreateMenuBar()
menuBar->Append( configmenu, _( "&Preferences" ) ); menuBar->Append( configmenu, _( "&Preferences" ) );
menuBar->Append( helpMenu, _( "&Help" ) ); menuBar->Append( helpMenu, _( "&Help" ) );
/* Associate the menu bar with the frame */ menuBar->Thaw();
SetMenuBar( menuBar );
// Associate the menu bar with the frame, if no previous menubar
if( GetMenuBar() == NULL )
SetMenuBar( menuBar );
else
menuBar->Refresh();
} }
...@@ -23,44 +23,44 @@ void LIB_EDIT_FRAME::ReCreateMenuBar() ...@@ -23,44 +23,44 @@ void LIB_EDIT_FRAME::ReCreateMenuBar()
wxMenuItem *item; wxMenuItem *item;
wxMenuBar *menuBar = GetMenuBar(); wxMenuBar *menuBar = GetMenuBar();
/** if( ! menuBar )
* Destroy the existing menu bar so it can be rebuilt. This allows menuBar = new wxMenuBar();
* language changes of the menu text on the fly.
*/
if( menuBar )
SetMenuBar( NULL );
menuBar = new wxMenuBar(); // Delete all existing menus so they can be rebuilt.
// This allows language changes of the menu text on the fly.
menuBar->Freeze();
while( menuBar->GetMenuCount() )
delete menuBar->Remove(0);
/** // Recreate all menus:
* File menu
*/ // File menu
wxMenu* filesMenu = new wxMenu; wxMenu* filesMenu = new wxMenu;
/* Save current lib */ // Save current lib
item = new wxMenuItem( filesMenu, ID_LIBEDIT_SAVE_CURRENT_LIB, item = new wxMenuItem( filesMenu, ID_LIBEDIT_SAVE_CURRENT_LIB,
_( "&Save Current Library\tCtrl+S" ), _( "&Save Current Library\tCtrl+S" ),
_( "Save the current active library" ) ); _( "Save the current active library" ) );
item->SetBitmap( save_xpm ); item->SetBitmap( save_xpm );
filesMenu->Append( item ); filesMenu->Append( item );
/* Save as... */ // Save as...
item = new wxMenuItem( filesMenu, ID_LIBEDIT_SAVE_CURRENT_LIB_AS, item = new wxMenuItem( filesMenu, ID_LIBEDIT_SAVE_CURRENT_LIB_AS,
_( "Save Current Library &as" ), _( "Save Current Library &as" ),
_( "Save current active library as..." ) ); _( "Save current active library as..." ) );
item->SetBitmap( save_as_xpm ); item->SetBitmap( save_as_xpm );
filesMenu->Append( item ); filesMenu->Append( item );
/* Separator */ // Separator
filesMenu->AppendSeparator(); filesMenu->AppendSeparator();
/* Export as png file */ // Export as png file
item = new wxMenuItem( filesMenu, ID_LIBEDIT_GEN_PNG_FILE, _( "&Create PNG File from Screen" ), item = new wxMenuItem( filesMenu, ID_LIBEDIT_GEN_PNG_FILE, _( "&Create PNG File from Screen" ),
_( "Create a PNG file from the component displayed on screen" ) ); _( "Create a PNG file from the component displayed on screen" ) );
item->SetBitmap( plot_xpm ); item->SetBitmap( plot_xpm );
filesMenu->Append( item ); filesMenu->Append( item );
/* Export as SVG file */ // Export as SVG file
item = new wxMenuItem( filesMenu, ID_LIBEDIT_GEN_SVG_FILE, _( "&Create SVG File" ), item = new wxMenuItem( filesMenu, ID_LIBEDIT_GEN_SVG_FILE, _( "&Create SVG File" ),
_( "Create a SVG file from the current loaded component" ) ); _( "Create a SVG file from the current loaded component" ) );
item->SetBitmap( plot_xpm ); item->SetBitmap( plot_xpm );
...@@ -77,19 +77,17 @@ void LIB_EDIT_FRAME::ReCreateMenuBar() ...@@ -77,19 +77,17 @@ void LIB_EDIT_FRAME::ReCreateMenuBar()
filesMenu->Append( item ); filesMenu->Append( item );
#endif #endif
/** // Edit menu
* Edit menu
*/
wxMenu* editMenu = new wxMenu; wxMenu* editMenu = new wxMenu;
/* Undo */ // Undo
text = AddHotkeyName( _( "Undo" ), s_Libedit_Hokeys_Descr, HK_UNDO); text = AddHotkeyName( _( "Undo" ), s_Libedit_Hokeys_Descr, HK_UNDO);
item = new wxMenuItem( editMenu, wxID_UNDO, text, _( "Undo last edition" ), wxITEM_NORMAL ); item = new wxMenuItem( editMenu, wxID_UNDO, text, _( "Undo last edition" ), wxITEM_NORMAL );
item->SetBitmap( undo_xpm ); item->SetBitmap( undo_xpm );
editMenu->Append( item ); editMenu->Append( item );
/* Redo */ // Redo
text = AddHotkeyName( _( "Redo" ), s_Libedit_Hokeys_Descr, HK_REDO); text = AddHotkeyName( _( "Redo" ), s_Libedit_Hokeys_Descr, HK_REDO);
item = new wxMenuItem( editMenu, wxID_REDO, text, item = new wxMenuItem( editMenu, wxID_REDO, text,
...@@ -97,18 +95,14 @@ void LIB_EDIT_FRAME::ReCreateMenuBar() ...@@ -97,18 +95,14 @@ void LIB_EDIT_FRAME::ReCreateMenuBar()
item->SetBitmap( redo_xpm ); item->SetBitmap( redo_xpm );
editMenu->Append( item ); editMenu->Append( item );
/* Separator */ // Delete
editMenu->AppendSeparator(); editMenu->AppendSeparator();
/* Delete */
item = new wxMenuItem( editMenu, ID_LIBEDIT_DELETE_ITEM_BUTT, item = new wxMenuItem( editMenu, ID_LIBEDIT_DELETE_ITEM_BUTT,
_( "Delete" ), HELP_DELETE_ITEMS, wxITEM_NORMAL ); _( "Delete" ), HELP_DELETE_ITEMS, wxITEM_NORMAL );
item->SetBitmap( delete_body_xpm ); item->SetBitmap( delete_body_xpm );
editMenu->Append( item ); editMenu->Append( item );
/** // View menu
* View menu
*/
wxMenu* viewMenu = new wxMenu; wxMenu* viewMenu = new wxMenu;
/* Important Note for ZOOM IN and ZOOM OUT commands from menubar: /* Important Note for ZOOM IN and ZOOM OUT commands from menubar:
...@@ -128,13 +122,13 @@ void LIB_EDIT_FRAME::ReCreateMenuBar() ...@@ -128,13 +122,13 @@ void LIB_EDIT_FRAME::ReCreateMenuBar()
item->SetBitmap( zoom_in_xpm ); item->SetBitmap( zoom_in_xpm );
viewMenu->Append( item ); viewMenu->Append( item );
/* Zoom out */ // Zoom out
text = _( "Zoom Out" ); text = _( "Zoom Out" );
item = new wxMenuItem( viewMenu, ID_ZOOM_OUT, text, HELP_ZOOM_OUT, wxITEM_NORMAL ); item = new wxMenuItem( viewMenu, ID_ZOOM_OUT, text, HELP_ZOOM_OUT, wxITEM_NORMAL );
item->SetBitmap( zoom_out_xpm ); item->SetBitmap( zoom_out_xpm );
viewMenu->Append( item ); viewMenu->Append( item );
/* Fit on screen */ // Fit on screen
text = AddHotkeyName( _( "Fit on Screen" ), s_Schematic_Hokeys_Descr, HK_ZOOM_AUTO ); text = AddHotkeyName( _( "Fit on Screen" ), s_Schematic_Hokeys_Descr, HK_ZOOM_AUTO );
item = new wxMenuItem( viewMenu, ID_ZOOM_PAGE, text, HELP_ZOOM_FIT, wxITEM_NORMAL ); item = new wxMenuItem( viewMenu, ID_ZOOM_PAGE, text, HELP_ZOOM_FIT, wxITEM_NORMAL );
...@@ -143,40 +137,37 @@ void LIB_EDIT_FRAME::ReCreateMenuBar() ...@@ -143,40 +137,37 @@ void LIB_EDIT_FRAME::ReCreateMenuBar()
viewMenu->AppendSeparator(); viewMenu->AppendSeparator();
/* Redraw view */ // Redraw view
text = AddHotkeyName( _( "Redraw" ), s_Schematic_Hokeys_Descr, HK_ZOOM_REDRAW ); text = AddHotkeyName( _( "Redraw" ), s_Schematic_Hokeys_Descr, HK_ZOOM_REDRAW );
item = new wxMenuItem( viewMenu, ID_ZOOM_REDRAW, text, HELP_ZOOM_REDRAW, wxITEM_NORMAL ); item = new wxMenuItem( viewMenu, ID_ZOOM_REDRAW, text, HELP_ZOOM_REDRAW, wxITEM_NORMAL );
item->SetBitmap( zoom_redraw_xpm ); item->SetBitmap( zoom_redraw_xpm );
viewMenu->Append( item ); viewMenu->Append( item );
/** // Place menu
* Place menu
* TODO: Unify the ID names!
*/
wxMenu* placeMenu = new wxMenu; wxMenu* placeMenu = new wxMenu;
/* Pin */ // place Pin
item = new wxMenuItem( placeMenu, ID_LIBEDIT_PIN_BUTT, _( "&Pin" ), item = new wxMenuItem( placeMenu, ID_LIBEDIT_PIN_BUTT, _( "&Pin" ),
HELP_ADD_PIN, wxITEM_NORMAL ); HELP_ADD_PIN, wxITEM_NORMAL );
item->SetBitmap( pin_xpm ); item->SetBitmap( pin_xpm );
placeMenu->Append( item ); placeMenu->Append( item );
/* Graphic text */ // Graphic text
item = new wxMenuItem( placeMenu, ID_LIBEDIT_BODY_TEXT_BUTT, item = new wxMenuItem( placeMenu, ID_LIBEDIT_BODY_TEXT_BUTT,
_( "Graphic text" ), _( "Graphic text" ),
HELP_ADD_BODYTEXT, wxITEM_NORMAL ); HELP_ADD_BODYTEXT, wxITEM_NORMAL );
item->SetBitmap( add_text_xpm ); item->SetBitmap( add_text_xpm );
placeMenu->Append( item ); placeMenu->Append( item );
/* Graphic rectangle */ // Graphic rectangle
item = new wxMenuItem( placeMenu, ID_LIBEDIT_BODY_RECT_BUTT, item = new wxMenuItem( placeMenu, ID_LIBEDIT_BODY_RECT_BUTT,
_( "Rectangle" ), _( "Rectangle" ),
HELP_ADD_BODYRECT, wxITEM_NORMAL ); HELP_ADD_BODYRECT, wxITEM_NORMAL );
item->SetBitmap( add_rectangle_xpm ); item->SetBitmap( add_rectangle_xpm );
placeMenu->Append( item ); placeMenu->Append( item );
/* Graphic Circle */ // Graphic Circle
item = new wxMenuItem( placeMenu, ID_LIBEDIT_BODY_CIRCLE_BUTT, item = new wxMenuItem( placeMenu, ID_LIBEDIT_BODY_CIRCLE_BUTT,
_( "Circle" ), _( "Circle" ),
HELP_ADD_BODYCIRCLE, HELP_ADD_BODYCIRCLE,
...@@ -184,68 +175,55 @@ void LIB_EDIT_FRAME::ReCreateMenuBar() ...@@ -184,68 +175,55 @@ void LIB_EDIT_FRAME::ReCreateMenuBar()
item->SetBitmap( add_circle_xpm ); item->SetBitmap( add_circle_xpm );
placeMenu->Append( item ); placeMenu->Append( item );
/* Graphic Arc */ // Graphic Arc
item = new wxMenuItem( placeMenu, ID_LIBEDIT_BODY_ARC_BUTT, item = new wxMenuItem( placeMenu, ID_LIBEDIT_BODY_ARC_BUTT,
_( "Arc" ), _( "Arc" ),
HELP_ADD_BODYARC, wxITEM_NORMAL ); HELP_ADD_BODYARC, wxITEM_NORMAL );
item->SetBitmap( add_arc_xpm ); item->SetBitmap( add_arc_xpm );
placeMenu->Append( item ); placeMenu->Append( item );
/* Graphic line or polygon */ // Graphic line or polygon
item = new wxMenuItem( placeMenu, ID_LIBEDIT_BODY_LINE_BUTT, item = new wxMenuItem( placeMenu, ID_LIBEDIT_BODY_LINE_BUTT,
_( "Line or Polygon" ), _( "Line or Polygon" ),
HELP_ADD_BODYPOLYGON, wxITEM_NORMAL ); HELP_ADD_BODYPOLYGON, wxITEM_NORMAL );
item->SetBitmap( add_polygon_xpm ); item->SetBitmap( add_polygon_xpm );
placeMenu->Append( item ); placeMenu->Append( item );
/** // Preferences Menu
* Preferences Menu
*/
wxMenu* configmenu = new wxMenu; wxMenu* configmenu = new wxMenu;
/* Library */ // Library
item = new wxMenuItem( configmenu, ID_CONFIG_REQ, _( "&Library" ), item = new wxMenuItem( configmenu, ID_CONFIG_REQ, _( "&Library" ),
_( "Library preferences" ) ); _( "Library preferences" ) );
item->SetBitmap( library_xpm ); item->SetBitmap( library_xpm );
configmenu->Append( item ); configmenu->Append( item );
/* Colors */ // Colors
item = new wxMenuItem( configmenu, ID_COLORS_SETUP, _( "&Colors" ), item = new wxMenuItem( configmenu, ID_COLORS_SETUP, _( "&Colors" ),
_( "Color preferences" ) ); _( "Color preferences" ) );
item->SetBitmap( palette_xpm ); item->SetBitmap( palette_xpm );
configmenu->Append( item ); configmenu->Append( item );
#if 0 // work in progress. activated when finished // Language submenu
/* Dimension */
item = new wxMenuItem( configmenu, ID_LIBEDIT_DIMENSIONS, _( "&Dimensions" ),
_( "Thickness of graphic lines, texts sizes and others" ) );
item->SetBitmap( add_dimension_xpm );
configmenu->Append( item );
#endif
/* Language submenu */
wxGetApp().AddMenuLanguageList( configmenu ); wxGetApp().AddMenuLanguageList( configmenu );
/* Hotkey submenu */ // Hotkey submenu
AddHotkeyConfigMenu( configmenu ); AddHotkeyConfigMenu( configmenu );
/* Separator */ // Save preferences
configmenu->AppendSeparator(); configmenu->AppendSeparator();
/* Save preferences */
item = new wxMenuItem( configmenu, ID_CONFIG_SAVE, _( "&Save preferences" ), item = new wxMenuItem( configmenu, ID_CONFIG_SAVE, _( "&Save preferences" ),
_( "Save application preferences" ) ); _( "Save application preferences" ) );
item->SetBitmap( save_setup_xpm ); item->SetBitmap( save_setup_xpm );
configmenu->Append( item ); configmenu->Append( item );
/* Read preferences */ // Read preferences
item = new wxMenuItem( configmenu, ID_CONFIG_READ, _( "&Read preferences" ), item = new wxMenuItem( configmenu, ID_CONFIG_READ, _( "&Read preferences" ),
_( "Read application preferences" ) ); _( "Read application preferences" ) );
item->SetBitmap( read_setup_xpm ); item->SetBitmap( read_setup_xpm );
configmenu->Append( item ); configmenu->Append( item );
/** // Help Menu
* Help Menu
*/
wxMenu* helpMenu = new wxMenu; wxMenu* helpMenu = new wxMenu;
AddHelpVersionInfoMenuEntry( helpMenu ); AddHelpVersionInfoMenuEntry( helpMenu );
...@@ -255,9 +233,7 @@ void LIB_EDIT_FRAME::ReCreateMenuBar() ...@@ -255,9 +233,7 @@ void LIB_EDIT_FRAME::ReCreateMenuBar()
item->SetBitmap( online_help_xpm ); item->SetBitmap( online_help_xpm );
helpMenu->Append( item ); helpMenu->Append( item );
/** // Create the menubar and append all submenus
* Create the menubar and append all submenus
*/
menuBar->Append( filesMenu, _( "&File" ) ); menuBar->Append( filesMenu, _( "&File" ) );
menuBar->Append( editMenu, _( "&Edit" ) ); menuBar->Append( editMenu, _( "&Edit" ) );
menuBar->Append( viewMenu, _( "&View" ) ); menuBar->Append( viewMenu, _( "&View" ) );
...@@ -265,6 +241,11 @@ void LIB_EDIT_FRAME::ReCreateMenuBar() ...@@ -265,6 +241,11 @@ void LIB_EDIT_FRAME::ReCreateMenuBar()
menuBar->Append( configmenu, _( "&Preferences" ) ); menuBar->Append( configmenu, _( "&Preferences" ) );
menuBar->Append( helpMenu, _( "&Help" ) ); menuBar->Append( helpMenu, _( "&Help" ) );
/* Associate the menu bar with the frame */ menuBar->Thaw();
SetMenuBar( menuBar );
// Associate the menu bar with the frame, if no previous menubar
if( GetMenuBar() == NULL )
SetMenuBar( menuBar );
else
menuBar->Refresh();
} }
...@@ -1031,9 +1031,9 @@ bool SCH_LINE::DoHitTest( const wxPoint& aPoint, int aAccuracy, SCH_FILTER_T aFi ...@@ -1031,9 +1031,9 @@ bool SCH_LINE::DoHitTest( const wxPoint& aPoint, int aAccuracy, SCH_FILTER_T aFi
|| ( ( aFilter & WIRE_T ) && ( m_Layer == LAYER_WIRE ) ) || ( ( aFilter & WIRE_T ) && ( m_Layer == LAYER_WIRE ) )
|| ( ( aFilter & BUS_T ) && ( m_Layer == LAYER_BUS ) ) ) || ( ( aFilter & BUS_T ) && ( m_Layer == LAYER_BUS ) ) )
{ {
if( aFilter & EXCLUDE_WIRE_BUS_ENDPOINTS && IsEndPoint( aPoint ) if( ( aFilter & EXCLUDE_WIRE_BUS_ENDPOINTS && IsEndPoint( aPoint ) )
|| aFilter & WIRE_BUS_ENDPOINTS_ONLY && !IsEndPoint( aPoint ) || ( aFilter & WIRE_BUS_ENDPOINTS_ONLY && !IsEndPoint( aPoint ) )
|| TestSegmentHit( aPoint, m_Start, m_End, aAccuracy ) ) || ( TestSegmentHit( aPoint, m_Start, m_End, aAccuracy ) ) )
return true; return true;
} }
......
...@@ -25,6 +25,7 @@ set(GERBVIEW_SRCS ...@@ -25,6 +25,7 @@ set(GERBVIEW_SRCS
block.cpp block.cpp
class_am_param.cpp class_am_param.cpp
class_aperture_macro.cpp class_aperture_macro.cpp
class_DCodeSelectionbox.cpp
class_GERBER.cpp class_GERBER.cpp
class_gerber_draw_item.cpp class_gerber_draw_item.cpp
class_gerbview_layer_widget.cpp class_gerbview_layer_widget.cpp
......
/*****************************************************************/
/* class_DCodeSelectionbox.cpp: class for displaying DCodes list */
/*****************************************************************/
#include "fctsys.h"
#include "appl_wxstruct.h"
#include "wxstruct.h"
#include "common.h"
#include "class_drawpanel.h"
#include "gerbview.h"
#include "class_DCodeSelectionbox.h"
/*******************************************/
/* Helper class for displaying DCodes list */
/*******************************************/
DCODE_SELECTION_BOX::DCODE_SELECTION_BOX( WinEDA_Toolbar* aParent, wxWindowID aId,
const wxPoint& aLocation, const wxSize& aSize,
const wxArrayString& aChoices ) :
wxComboBox( aParent, aId, wxEmptyString, aLocation, aSize, 0, NULL, wxCB_READONLY )
{
m_dcodeList = &aChoices;
// Append aChoices here is by far faster than use aChoices inside
// the wxComboBox constructor
Append(aChoices);
}
DCODE_SELECTION_BOX::~DCODE_SELECTION_BOX()
{
}
int DCODE_SELECTION_BOX::GetSelectedDCodeId()
{
int ii = GetSelection();
if( ii > 0 )
{
wxString msg = (*m_dcodeList)[ii].AfterFirst( wxChar( ' ' ) );
long id;
msg.ToLong(&id);
return id;
}
return -1;
}
/* SetDCodeSelection
* aDCodeId = the DCode Id to select or -1 to select "no dcode"
*/
void DCODE_SELECTION_BOX::SetDCodeSelection( int aDCodeId )
{
if( aDCodeId > LAST_DCODE )
aDCodeId = LAST_DCODE;
int index = 0;
if( aDCodeId >= FIRST_DCODE )
index = aDCodeId - FIRST_DCODE + 1;
SetSelection(index);
}
// file class_DCodeSelectionbox.h
#ifndef CLASS_DCODESELECTIONBOX_H
#define CLASS_DCODESELECTIONBOX_H
/* helper class to display a DCode list and select a DCode id.
*/
// Define event type for DCODE_SELECTION_BOX
#define EVT_SELECT_DCODE EVT_COMBOBOX
class DCODE_SELECTION_BOX : public wxComboBox
{
private:
const wxArrayString* m_dcodeList;
public: DCODE_SELECTION_BOX( WinEDA_Toolbar* aParent, wxWindowID aId,
const wxPoint& aLocation, const wxSize& aSize,
const wxArrayString& aChoices);
~DCODE_SELECTION_BOX();
/**
* Function GetSelectedDCodeId
* @return the current selected DCode Id or -1 if no dcode
*/
int GetSelectedDCodeId();
/**
* Function SetDCodeSelection
* @param aDCodeId = the DCode Id to select or -1 to select "no dcode"
*/
void SetDCodeSelection( int aDCodeId );
};
#endif //CLASS_DCODESELECTIONBOX_H
...@@ -189,6 +189,7 @@ struct APERTURE_MACRO ...@@ -189,6 +189,7 @@ struct APERTURE_MACRO
* But some parameters are defined outside the aperture primitive * But some parameters are defined outside the aperture primitive
* and are local to the aperture macro * and are local to the aperture macro
* @return the value of a defered parameter defined inside the aperture macro * @return the value of a defered parameter defined inside the aperture macro
* @param aDcode = the D_CODE that uses this apertur macro and define defered parameters
* @param aParamId = the param id (defined by $3 or $5 ..) to evaluate * @param aParamId = the param id (defined by $3 or $5 ..) to evaluate
*/ */
double GetLocalParam( const D_CODE* aDcode, unsigned aParamId ) const; double GetLocalParam( const D_CODE* aDcode, unsigned aParamId ) const;
......
...@@ -271,7 +271,7 @@ EDA_Rect GERBER_DRAW_ITEM::GetBoundingBox() const ...@@ -271,7 +271,7 @@ EDA_Rect GERBER_DRAW_ITEM::GetBoundingBox() const
/** /**
* Function MoveAB * Function MoveAB
* move this object. * move this object.
* @param const wxPoint& aMoveVector - the move vector for this object, in AB plotter axis. * @param aMoveVector - the move vector for this object, in AB plotter axis.
*/ */
void GERBER_DRAW_ITEM::MoveAB( const wxPoint& aMoveVector ) void GERBER_DRAW_ITEM::MoveAB( const wxPoint& aMoveVector )
{ {
...@@ -288,7 +288,7 @@ void GERBER_DRAW_ITEM::MoveAB( const wxPoint& aMoveVector ) ...@@ -288,7 +288,7 @@ void GERBER_DRAW_ITEM::MoveAB( const wxPoint& aMoveVector )
/** /**
* Function MoveXY * Function MoveXY
* move this object. * move this object.
* @param const wxPoint& aMoveVector - the move vector for this object, in XY gerber axis. * @param aMoveVector - the move vector for this object, in XY gerber axis.
*/ */
void GERBER_DRAW_ITEM::MoveXY( const wxPoint& aMoveVector ) void GERBER_DRAW_ITEM::MoveXY( const wxPoint& aMoveVector )
{ {
...@@ -323,7 +323,7 @@ bool GERBER_DRAW_ITEM::HasNegativeItems() ...@@ -323,7 +323,7 @@ bool GERBER_DRAW_ITEM::HasNegativeItems()
// we must see if this aperture macro uses a negative shape. // we must see if this aperture macro uses a negative shape.
if( isClear ) if( isClear )
return true; return true;
// see for a macro def // see for a macro def
D_CODE* dcodeDescr = GetDcodeDescr(); D_CODE* dcodeDescr = GetDcodeDescr();
if( dcodeDescr == NULL ) if( dcodeDescr == NULL )
...@@ -334,7 +334,7 @@ bool GERBER_DRAW_ITEM::HasNegativeItems() ...@@ -334,7 +334,7 @@ bool GERBER_DRAW_ITEM::HasNegativeItems()
if( macro ) // macro == NULL should not occurs if( macro ) // macro == NULL should not occurs
return macro->HasNegativeItems( this ); return macro->HasNegativeItems( this );
} }
return false; return false;
} }
...@@ -552,7 +552,7 @@ void GERBER_DRAW_ITEM::ConvertSegmentToPolygon( ) ...@@ -552,7 +552,7 @@ void GERBER_DRAW_ITEM::ConvertSegmentToPolygon( )
} }
/** /*
* Function DrawGbrPoly * Function DrawGbrPoly
* a helper function used id ::Draw to draw the polygon stored in m_PolyCorners * a helper function used id ::Draw to draw the polygon stored in m_PolyCorners
* Draw filled polygons * Draw filled polygons
...@@ -661,17 +661,17 @@ bool GERBER_DRAW_ITEM::HitTest( const wxPoint& aRefPos ) ...@@ -661,17 +661,17 @@ bool GERBER_DRAW_ITEM::HitTest( const wxPoint& aRefPos )
* Function HitTest (overlayed) * Function HitTest (overlayed)
* tests if the given EDA_Rect intersect this object. * tests if the given EDA_Rect intersect this object.
* For now, an ending point must be inside this rect. * For now, an ending point must be inside this rect.
* @param refArea : the given EDA_Rect in AB plotter axis * @param aRefArea : the given EDA_Rect in AB plotter axis
* @return bool - true if a hit, else false * @return bool - true if a hit, else false
*/ */
bool GERBER_DRAW_ITEM::HitTest( EDA_Rect& refArea ) bool GERBER_DRAW_ITEM::HitTest( EDA_Rect& aRefArea )
{ {
wxPoint pos = GetABPosition( m_Start ); wxPoint pos = GetABPosition( m_Start );
if( refArea.Inside( pos ) ) if( aRefArea.Inside( pos ) )
return true; return true;
pos = GetABPosition( m_End ); pos = GetABPosition( m_End );
if( refArea.Inside( pos ) ) if( aRefArea.Inside( pos ) )
return true; return true;
return false; return false;
} }
......
...@@ -119,7 +119,7 @@ public: ...@@ -119,7 +119,7 @@ public:
{ {
return m_LayerNegative; return m_LayerNegative;
} }
/** /**
* Function HasNegativeItems * Function HasNegativeItems
* @return true if this item or at least one shape (when using aperture macros * @return true if this item or at least one shape (when using aperture macros
...@@ -147,14 +147,14 @@ public: ...@@ -147,14 +147,14 @@ public:
/** /**
* Function MoveAB * Function MoveAB
* move this object. * move this object.
* @param const wxPoint& aMoveVector - the move vector for this object. * @param aMoveVector - the move vector for this object.
*/ */
void MoveAB( const wxPoint& aMoveVector ); void MoveAB( const wxPoint& aMoveVector );
/** /**
* Function MoveXY * Function MoveXY
* move this object. * move this object.
* @param const wxPoint& aMoveVector - the move vector for this object, in XY gerber axis. * @param aMoveVector - the move vector for this object, in XY gerber axis.
*/ */
void MoveXY( const wxPoint& aMoveVector ); void MoveXY( const wxPoint& aMoveVector );
...@@ -238,7 +238,7 @@ public: ...@@ -238,7 +238,7 @@ public:
/** /**
* Function HitTest * Function HitTest
* tests if the given wxPoint is within the bounds of this object. * tests if the given wxPoint is within the bounds of this object.
* @param aRefPos A wxPoint to test * @param aRefPos a wxPoint to test
* @return bool - true if a hit, else false * @return bool - true if a hit, else false
*/ */
bool HitTest( const wxPoint& aRefPos ); bool HitTest( const wxPoint& aRefPos );
...@@ -247,7 +247,7 @@ public: ...@@ -247,7 +247,7 @@ public:
* Function HitTest (overlayed) * Function HitTest (overlayed)
* tests if the given wxRect intersect this object. * tests if the given wxRect intersect this object.
* For now, an ending point must be inside this rect. * For now, an ending point must be inside this rect.
* @param aRefPos A wxPoint to test * @param aRefArea a wxPoint to test
* @return bool - true if a hit, else false * @return bool - true if a hit, else false
*/ */
bool HitTest( EDA_Rect& aRefArea ); bool HitTest( EDA_Rect& aRefArea );
......
...@@ -38,7 +38,7 @@ ...@@ -38,7 +38,7 @@
#include "class_gerbview_layer_widget.h" #include "class_gerbview_layer_widget.h"
/** /*
* Class GERBER_LAYER_WIDGET * Class GERBER_LAYER_WIDGET
* is here to implement the abtract functions of LAYER_WIDGET so they * is here to implement the abtract functions of LAYER_WIDGET so they
* may be tied into the WinEDA_GerberFrame's data and so we can add a popup * may be tied into the WinEDA_GerberFrame's data and so we can add a popup
......
...@@ -63,6 +63,8 @@ public: ...@@ -63,6 +63,8 @@ public:
/** /**
* Constructor * Constructor
* @param aParent : the parent frame
* @param aFocusOwner : the window that has the keyboard focus.
* @param aPointSize is the font point size to use within the widget. This * @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 * effectively sets the overal size of the widget via the row height and bitmap
* button sizes. * button sizes.
......
...@@ -136,7 +136,7 @@ int D_CODE::GetShapeDim( GERBER_DRAW_ITEM* aParent ) ...@@ -136,7 +136,7 @@ int D_CODE::GetShapeDim( GERBER_DRAW_ITEM* aParent )
} }
/** /*
* Function Read_D_Code_File * Function Read_D_Code_File
* Can be useful only with old RS274D Gerber file format. * Can be useful only with old RS274D Gerber file format.
* Is not needed with RS274X files format. * Is not needed with RS274X files format.
...@@ -326,7 +326,7 @@ void WinEDA_GerberFrame::CopyDCodesSizeToItems() ...@@ -326,7 +326,7 @@ void WinEDA_GerberFrame::CopyDCodesSizeToItems()
} }
/** /*
* Function DrawFlashedShape * Function DrawFlashedShape
* Draw the dcode shape for flashed items. * Draw the dcode shape for flashed items.
* When an item is flashed, the DCode shape is the shape of the item * When an item is flashed, the DCode shape is the shape of the item
...@@ -442,7 +442,7 @@ void D_CODE::DrawFlashedShape( GERBER_DRAW_ITEM* aParent, ...@@ -442,7 +442,7 @@ void D_CODE::DrawFlashedShape( GERBER_DRAW_ITEM* aParent,
} }
/** /*
* Function DrawFlashedPolygon * Function DrawFlashedPolygon
* a helper function used id ::Draw to draw the polygon stored ion m_PolyCorners * a helper function used id ::Draw to draw the polygon stored ion m_PolyCorners
* Draw some Apertures shapes when they are defined as filled polygons. * Draw some Apertures shapes when they are defined as filled polygons.
......
...@@ -164,8 +164,8 @@ public: ...@@ -164,8 +164,8 @@ public:
* @param aDC = device context * @param aDC = device context
* @param aColor = the normal color to use * @param aColor = the normal color to use
* @param aAltColor = the color used to draw with "reverse" exposure mode (used in aperture macros only) * @param aAltColor = the color used to draw with "reverse" exposure mode (used in aperture macros only)
* @param aFilled = true to draw in filled mode, false to draw in skecth mode * @param aShapePos = the actual shape position
* @param aPosition = the actual shape position * @param aFilledShape = true to draw in filled mode, false to draw in skecth mode
*/ */
void DrawFlashedShape( GERBER_DRAW_ITEM* aParent, void DrawFlashedShape( GERBER_DRAW_ITEM* aParent,
EDA_Rect* aClipBox, wxDC* aDC, int aColor, int aAltColor, EDA_Rect* aClipBox, wxDC* aDC, int aColor, int aAltColor,
......
...@@ -124,7 +124,7 @@ WinEDA_ConfigFrame::WinEDA_ConfigFrame( WinEDA_GerberFrame* parent, ...@@ -124,7 +124,7 @@ WinEDA_ConfigFrame::WinEDA_ConfigFrame( WinEDA_GerberFrame* parent,
} }
void WinEDA_ConfigFrame::OnOkClick( wxCommandEvent& WXUNUSED (event) ) void WinEDA_ConfigFrame::OnOkClick( wxCommandEvent &event )
{ {
g_DrillFilenameExt = TextDrillExt->GetValue(); g_DrillFilenameExt = TextDrillExt->GetValue();
g_PhotoFilenameExt = TextPhotoExt->GetValue(); g_PhotoFilenameExt = TextPhotoExt->GetValue();
...@@ -134,7 +134,7 @@ void WinEDA_ConfigFrame::OnOkClick( wxCommandEvent& WXUNUSED (event) ) ...@@ -134,7 +134,7 @@ void WinEDA_ConfigFrame::OnOkClick( wxCommandEvent& WXUNUSED (event) )
} }
void WinEDA_ConfigFrame::OnCancelClick( wxCommandEvent& WXUNUSED (event) ) void WinEDA_ConfigFrame::OnCancelClick( wxCommandEvent &event )
{ {
EndModal( -1 ); EndModal( -1 );
} }
......
...@@ -54,7 +54,7 @@ DIALOG_DISPLAY_OPTIONS::DIALOG_DISPLAY_OPTIONS( WinEDA_GerberFrame *parent) : ...@@ -54,7 +54,7 @@ DIALOG_DISPLAY_OPTIONS::DIALOG_DISPLAY_OPTIONS( WinEDA_GerberFrame *parent) :
} }
void DIALOG_DISPLAY_OPTIONS::OnCancelButtonClick( wxCommandEvent& WXUNUSED(event) ) void DIALOG_DISPLAY_OPTIONS::OnCancelButtonClick( wxCommandEvent& event )
{ {
EndModal( 0 ); EndModal( 0 );
} }
......
...@@ -80,6 +80,8 @@ void WinEDA_GerberFrame::RedrawActiveWindow( wxDC* DC, bool EraseBg ) ...@@ -80,6 +80,8 @@ void WinEDA_GerberFrame::RedrawActiveWindow( wxDC* DC, bool EraseBg )
if( !GetBoard() ) if( !GetBoard() )
return; return;
wxBusyCursor dummy;
ActiveScreen = screen; ActiveScreen = screen;
GRSetDrawMode( DC, GR_COPY ); GRSetDrawMode( DC, GR_COPY );
...@@ -124,9 +126,10 @@ void WinEDA_GerberFrame::RedrawActiveWindow( wxDC* DC, bool EraseBg ) ...@@ -124,9 +126,10 @@ void WinEDA_GerberFrame::RedrawActiveWindow( wxDC* DC, bool EraseBg )
} }
/********************************************************************/ /*
* Redraw All gerbview layers, using a buffered mode or not
*/
void BOARD::Draw( WinEDA_DrawPanel* aPanel, wxDC* aDC, int aDrawMode, const wxPoint& aOffset ) void BOARD::Draw( WinEDA_DrawPanel* aPanel, wxDC* aDC, int aDrawMode, const wxPoint& aOffset )
/********************************************************************/
{ {
// Because Images can be negative (i.e with background filled in color) items are drawn // Because Images can be negative (i.e with background filled in color) items are drawn
// graphic layer per graphic layer, after the background is filled // graphic layer per graphic layer, after the background is filled
......
...@@ -15,7 +15,7 @@ ...@@ -15,7 +15,7 @@
#include "gerbview_id.h" #include "gerbview_id.h"
#include "class_GERBER.h" #include "class_GERBER.h"
#include "dialog_helpers.h" #include "dialog_helpers.h"
#include "class_DCodeSelectionbox.h"
/* Process the command triggered by the left button of the mouse when a tool /* Process the command triggered by the left button of the mouse when a tool
* is already selected. * is already selected.
...@@ -145,19 +145,18 @@ void WinEDA_GerberFrame::Process_Special_Functions( wxCommandEvent& event ) ...@@ -145,19 +145,18 @@ void WinEDA_GerberFrame::Process_Special_Functions( wxCommandEvent& event )
case ID_TOOLBARH_GERBVIEW_SELECT_LAYER: case ID_TOOLBARH_GERBVIEW_SELECT_LAYER:
setActiveLayer(m_SelLayerBox->GetChoice()); setActiveLayer(m_SelLayerBox->GetChoice());
DrawPanel->Refresh( TRUE ); DrawPanel->Refresh();
break; break;
case ID_TOOLBARH_GERBER_SELECT_TOOL: case ID_TOOLBARH_GERBER_SELECT_TOOL:
if( gerber_layer ) if( gerber_layer )
{ {
int tool = m_SelLayerTool->GetChoice(); int tool = m_DCodeSelector->GetSelectedDCodeId();
if( tool > 0 ) if( tool != gerber_layer->m_Selected_Tool )
tool = tool - 1 + FIRST_DCODE; {
else gerber_layer->m_Selected_Tool = tool;
tool = 0; DrawPanel->Refresh();
gerber_layer->m_Selected_Tool = tool; }
DrawPanel->Refresh( TRUE );
} }
break; break;
......
...@@ -9,8 +9,6 @@ ...@@ -9,8 +9,6 @@
#include "gestfich.h" #include "gestfich.h"
#include "gerbview.h" #include "gerbview.h"
#include "pcbplot.h"
static void LoadDCodeFile( WinEDA_GerberFrame* frame, static void LoadDCodeFile( WinEDA_GerberFrame* frame,
const wxString& FullFileName ); const wxString& FullFileName );
...@@ -159,7 +157,7 @@ bool WinEDA_GerberFrame::LoadGerberFiles( const wxString& aFullFileName ) ...@@ -159,7 +157,7 @@ bool WinEDA_GerberFrame::LoadGerberFiles( const wxString& aFullFileName )
} }
// Read gerber files: each file is loaded on a new gerbview layer // Read gerber files: each file is loaded on a new gerbview layer
int layer = getActiveLayer() - 1; int layer = getActiveLayer();
for( unsigned ii = 0; ii < filenamesList.GetCount(); ii++ ) for( unsigned ii = 0; ii < filenamesList.GetCount(); ii++ )
{ {
wxFileName filename = filenamesList[ii]; wxFileName filename = filenamesList[ii];
...@@ -167,21 +165,13 @@ bool WinEDA_GerberFrame::LoadGerberFiles( const wxString& aFullFileName ) ...@@ -167,21 +165,13 @@ bool WinEDA_GerberFrame::LoadGerberFiles( const wxString& aFullFileName )
GetScreen()->m_FileName = filename.GetFullPath(); GetScreen()->m_FileName = filename.GetFullPath();
filename.SetExt( g_PenFilenameExt ); filename.SetExt( g_PenFilenameExt );
layer++; setActiveLayer( layer, false );
if( layer >= NB_LAYERS )
layer = 0;
setActiveLayer(layer);
if( Read_GERBER_File( GetScreen()->m_FileName, filename.GetFullPath() ) ) if( Read_GERBER_File( GetScreen()->m_FileName, filename.GetFullPath() ) )
{ {
SetLastProject( GetScreen()->m_FileName ); SetLastProject( GetScreen()->m_FileName );
} layer++;
else if( layer >= NB_LAYERS )
{ layer = 0;
layer--;
if( layer >= 0 )
setActiveLayer(layer);
else
setActiveLayer(0);
} }
} }
...@@ -189,6 +179,10 @@ bool WinEDA_GerberFrame::LoadGerberFiles( const wxString& aFullFileName ) ...@@ -189,6 +179,10 @@ bool WinEDA_GerberFrame::LoadGerberFiles( const wxString& aFullFileName )
GetScreen()->SetRefreshReq(); GetScreen()->SetRefreshReq();
g_SaveTime = time( NULL ); g_SaveTime = time( NULL );
// Synchronize layers tools with actual active layer:
setActiveLayer(getActiveLayer());
syncLayerBox();
return true; return true;
} }
......
...@@ -2,10 +2,6 @@ ...@@ -2,10 +2,6 @@
/* gerberframe.cpp */ /* gerberframe.cpp */
/*******************/ /*******************/
#ifdef __GNUG__
#pragma implementation
#endif
#include "fctsys.h" #include "fctsys.h"
#include "appl_wxstruct.h" #include "appl_wxstruct.h"
#include "wxstruct.h" #include "wxstruct.h"
...@@ -20,6 +16,7 @@ ...@@ -20,6 +16,7 @@
#include "hotkeys.h" #include "hotkeys.h"
#include "class_GERBER.h" #include "class_GERBER.h"
#include "dialog_helpers.h" #include "dialog_helpers.h"
#include "class_DCodeSelectionbox.h"
#include "build_version.h" #include "build_version.h"
...@@ -29,110 +26,109 @@ ...@@ -29,110 +26,109 @@
/****************************************/ /****************************************/
BEGIN_EVENT_TABLE( WinEDA_GerberFrame, WinEDA_BasePcbFrame ) BEGIN_EVENT_TABLE( WinEDA_GerberFrame, WinEDA_BasePcbFrame )
EVT_CLOSE( WinEDA_GerberFrame::OnCloseWindow ) EVT_CLOSE( WinEDA_GerberFrame::OnCloseWindow )
EVT_SIZE( WinEDA_GerberFrame::OnSize ) EVT_SIZE( WinEDA_GerberFrame::OnSize )
EVT_TOOL_RANGE( ID_ZOOM_IN, ID_ZOOM_PAGE, WinEDA_GerberFrame::OnZoom ) EVT_TOOL_RANGE( ID_ZOOM_IN, ID_ZOOM_PAGE, WinEDA_GerberFrame::OnZoom )
EVT_TOOL( wxID_FILE, WinEDA_GerberFrame::Files_io ) EVT_TOOL( wxID_FILE, WinEDA_GerberFrame::Files_io )
EVT_TOOL( ID_INC_LAYER_AND_APPEND_FILE, WinEDA_GerberFrame::Files_io ) EVT_TOOL( ID_INC_LAYER_AND_APPEND_FILE, WinEDA_GerberFrame::Files_io )
EVT_TOOL( ID_GERBVIEW_LOAD_DRILL_FILE, WinEDA_GerberFrame::Files_io ) EVT_TOOL( ID_GERBVIEW_LOAD_DRILL_FILE, WinEDA_GerberFrame::Files_io )
EVT_TOOL( ID_GERBVIEW_LOAD_DCODE_FILE, WinEDA_GerberFrame::Files_io ) EVT_TOOL( ID_GERBVIEW_LOAD_DCODE_FILE, WinEDA_GerberFrame::Files_io )
EVT_TOOL( ID_NEW_BOARD, WinEDA_GerberFrame::Files_io ) EVT_TOOL( ID_NEW_BOARD, WinEDA_GerberFrame::Files_io )
// Menu Files: // Menu Files:
EVT_MENU( wxID_FILE, WinEDA_GerberFrame::Files_io ) EVT_MENU( wxID_FILE, WinEDA_GerberFrame::Files_io )
EVT_MENU( ID_MENU_INC_LAYER_AND_APPEND_FILE, WinEDA_GerberFrame::Files_io ) EVT_MENU( ID_MENU_INC_LAYER_AND_APPEND_FILE, WinEDA_GerberFrame::Files_io )
EVT_MENU( ID_NEW_BOARD, WinEDA_GerberFrame::Files_io ) EVT_MENU( ID_NEW_BOARD, WinEDA_GerberFrame::Files_io )
EVT_MENU( ID_GEN_PLOT, WinEDA_GerberFrame::ToPlotter ) EVT_MENU( ID_GEN_PLOT, WinEDA_GerberFrame::ToPlotter )
EVT_MENU( ID_GERBVIEW_EXPORT_TO_PCBNEW, EVT_MENU( ID_GERBVIEW_EXPORT_TO_PCBNEW,
WinEDA_GerberFrame::ExportDataInPcbnewFormat ) WinEDA_GerberFrame::ExportDataInPcbnewFormat )
EVT_MENU_RANGE( wxID_FILE1, wxID_FILE9, WinEDA_GerberFrame::OnFileHistory ) EVT_MENU_RANGE( wxID_FILE1, wxID_FILE9, WinEDA_GerberFrame::OnFileHistory )
EVT_MENU( ID_EXIT, WinEDA_GerberFrame::Process_Special_Functions ) EVT_MENU( ID_EXIT, WinEDA_GerberFrame::Process_Special_Functions )
// menu Preferences // menu Preferences
EVT_MENU( ID_CONFIG_REQ, EVT_MENU( ID_CONFIG_REQ,
WinEDA_GerberFrame::Process_Config ) WinEDA_GerberFrame::Process_Config )
EVT_MENU( ID_CONFIG_SAVE, EVT_MENU( ID_CONFIG_SAVE,
WinEDA_GerberFrame::Process_Config ) WinEDA_GerberFrame::Process_Config )
EVT_MENU_RANGE( ID_PREFERENCES_HOTKEY_START, EVT_MENU_RANGE( ID_PREFERENCES_HOTKEY_START,
ID_PREFERENCES_HOTKEY_END, ID_PREFERENCES_HOTKEY_END,
WinEDA_GerberFrame::Process_Config ) WinEDA_GerberFrame::Process_Config )
EVT_MENU( ID_MENU_GERBVIEW_SHOW_HIDE_LAYERS_MANAGER_DIALOG, WinEDA_GerberFrame::OnSelectOptionToolbar ) EVT_MENU( ID_MENU_GERBVIEW_SHOW_HIDE_LAYERS_MANAGER_DIALOG,
EVT_MENU( ID_GERBVIEW_OPTIONS_SETUP, WinEDA_GerberFrame::InstallGerberOptionsDialog ) WinEDA_GerberFrame::OnSelectOptionToolbar )
EVT_MENU( ID_GERBVIEW_OPTIONS_SETUP, WinEDA_GerberFrame::InstallGerberOptionsDialog )
EVT_MENU_RANGE( ID_LANGUAGE_CHOICE, ID_LANGUAGE_CHOICE_END, EVT_MENU_RANGE( ID_LANGUAGE_CHOICE, ID_LANGUAGE_CHOICE_END,
WinEDA_DrawFrame::SetLanguage ) WinEDA_DrawFrame::SetLanguage )
// menu Postprocess // menu Postprocess
EVT_MENU( ID_GERBVIEW_SHOW_LIST_DCODES, EVT_MENU( ID_GERBVIEW_SHOW_LIST_DCODES,
WinEDA_GerberFrame::Process_Special_Functions ) WinEDA_GerberFrame::Process_Special_Functions )
EVT_MENU( ID_GERBVIEW_POPUP_DELETE_DCODE_ITEMS, EVT_MENU( ID_GERBVIEW_POPUP_DELETE_DCODE_ITEMS,
WinEDA_GerberFrame::Process_Special_Functions ) WinEDA_GerberFrame::Process_Special_Functions )
EVT_MENU( ID_GERBVIEW_SHOW_SOURCE, EVT_MENU( ID_GERBVIEW_SHOW_SOURCE,
WinEDA_GerberFrame::Process_Special_Functions ) WinEDA_GerberFrame::Process_Special_Functions )
// menu Miscellaneous // menu Miscellaneous
EVT_MENU( ID_GERBVIEW_GLOBAL_DELETE, EVT_MENU( ID_GERBVIEW_GLOBAL_DELETE,
WinEDA_GerberFrame::Process_Special_Functions ) WinEDA_GerberFrame::Process_Special_Functions )
// Menu Help // Menu Help
EVT_MENU( ID_GENERAL_HELP, WinEDA_DrawFrame::GetKicadHelp ) EVT_MENU( ID_GENERAL_HELP, WinEDA_DrawFrame::GetKicadHelp )
EVT_MENU( ID_KICAD_ABOUT, WinEDA_DrawFrame::GetKicadAbout ) EVT_MENU( ID_KICAD_ABOUT, WinEDA_DrawFrame::GetKicadAbout )
EVT_TOOL( wxID_CUT, WinEDA_GerberFrame::Process_Special_Functions ) EVT_TOOL( wxID_CUT, WinEDA_GerberFrame::Process_Special_Functions )
EVT_TOOL( wxID_COPY, WinEDA_GerberFrame::Process_Special_Functions ) EVT_TOOL( wxID_COPY, WinEDA_GerberFrame::Process_Special_Functions )
EVT_TOOL( wxID_PASTE, WinEDA_GerberFrame::Process_Special_Functions ) EVT_TOOL( wxID_PASTE, WinEDA_GerberFrame::Process_Special_Functions )
EVT_TOOL( wxID_UNDO, WinEDA_GerberFrame::Process_Special_Functions ) EVT_TOOL( wxID_UNDO, WinEDA_GerberFrame::Process_Special_Functions )
EVT_TOOL( wxID_PRINT, WinEDA_GerberFrame::ToPrinter ) EVT_TOOL( wxID_PRINT, WinEDA_GerberFrame::ToPrinter )
EVT_TOOL( ID_FIND_ITEMS, WinEDA_GerberFrame::Process_Special_Functions ) EVT_TOOL( ID_FIND_ITEMS, WinEDA_GerberFrame::Process_Special_Functions )
EVT_KICAD_CHOICEBOX( ID_TOOLBARH_GERBVIEW_SELECT_LAYER, EVT_KICAD_CHOICEBOX( ID_TOOLBARH_GERBVIEW_SELECT_LAYER,
WinEDA_GerberFrame::Process_Special_Functions ) WinEDA_GerberFrame::Process_Special_Functions )
EVT_KICAD_CHOICEBOX( ID_TOOLBARH_GERBER_SELECT_TOOL, EVT_SELECT_DCODE( ID_TOOLBARH_GERBER_SELECT_TOOL,
WinEDA_GerberFrame::Process_Special_Functions ) WinEDA_GerberFrame::Process_Special_Functions )
// Vertical toolbar: // Vertical toolbar:
EVT_TOOL( ID_NO_SELECT_BUTT, WinEDA_GerberFrame::Process_Special_Functions ) EVT_TOOL( ID_NO_SELECT_BUTT, WinEDA_GerberFrame::Process_Special_Functions )
EVT_TOOL( ID_GERBVIEW_DELETE_ITEM_BUTT, EVT_TOOL( ID_GERBVIEW_DELETE_ITEM_BUTT,
WinEDA_GerberFrame::Process_Special_Functions ) WinEDA_GerberFrame::Process_Special_Functions )
EVT_MENU_RANGE( ID_POPUP_GENERAL_START_RANGE, ID_POPUP_GENERAL_END_RANGE, EVT_MENU_RANGE( ID_POPUP_GENERAL_START_RANGE, ID_POPUP_GENERAL_END_RANGE,
WinEDA_GerberFrame::Process_Special_Functions ) WinEDA_GerberFrame::Process_Special_Functions )
// Pop up menu // Pop up menu
EVT_MENU( ID_GERBVIEW_POPUP_DELETE_DCODE_ITEMS, EVT_MENU( ID_GERBVIEW_POPUP_DELETE_DCODE_ITEMS,
WinEDA_GerberFrame::Process_Special_Functions ) WinEDA_GerberFrame::Process_Special_Functions )
// Option toolbar // Option toolbar
EVT_TOOL_RANGE( ID_TB_OPTIONS_START, ID_TB_OPTIONS_END, EVT_TOOL_RANGE( ID_TB_OPTIONS_START, ID_TB_OPTIONS_END,
WinEDA_GerberFrame::OnSelectOptionToolbar ) WinEDA_GerberFrame::OnSelectOptionToolbar )
EVT_TOOL( ID_TB_OPTIONS_SHOW_FLASHED_ITEMS_SKETCH, EVT_TOOL( ID_TB_OPTIONS_SHOW_FLASHED_ITEMS_SKETCH,
WinEDA_GerberFrame::OnSelectOptionToolbar ) WinEDA_GerberFrame::OnSelectOptionToolbar )
EVT_TOOL( ID_TB_OPTIONS_SHOW_LINES_SKETCH, EVT_TOOL( ID_TB_OPTIONS_SHOW_LINES_SKETCH,
WinEDA_GerberFrame::OnSelectOptionToolbar ) WinEDA_GerberFrame::OnSelectOptionToolbar )
EVT_TOOL( ID_TB_OPTIONS_SHOW_LAYERS_MANAGER_VERTICAL_TOOLBAR, EVT_TOOL( ID_TB_OPTIONS_SHOW_LAYERS_MANAGER_VERTICAL_TOOLBAR,
WinEDA_GerberFrame::OnSelectOptionToolbar ) WinEDA_GerberFrame::OnSelectOptionToolbar )
EVT_TOOL( ID_TB_OPTIONS_SHOW_DCODES, EVT_TOOL( ID_TB_OPTIONS_SHOW_DCODES,
WinEDA_GerberFrame::OnSelectOptionToolbar ) WinEDA_GerberFrame::OnSelectOptionToolbar )
EVT_TOOL( ID_TB_OPTIONS_SHOW_GBR_MODE_0, EVT_TOOL( ID_TB_OPTIONS_SHOW_GBR_MODE_0,
WinEDA_GerberFrame::OnSelectDisplayMode ) WinEDA_GerberFrame::OnSelectDisplayMode )
EVT_TOOL( ID_TB_OPTIONS_SHOW_GBR_MODE_1, EVT_TOOL( ID_TB_OPTIONS_SHOW_GBR_MODE_1,
WinEDA_GerberFrame::OnSelectDisplayMode ) WinEDA_GerberFrame::OnSelectDisplayMode )
EVT_TOOL( ID_TB_OPTIONS_SHOW_GBR_MODE_2, EVT_TOOL( ID_TB_OPTIONS_SHOW_GBR_MODE_2,
WinEDA_GerberFrame::OnSelectDisplayMode ) WinEDA_GerberFrame::OnSelectDisplayMode )
END_EVENT_TABLE() END_EVENT_TABLE() WinEDA_GerberFrame::WinEDA_GerberFrame( wxWindow* father,
const wxString& title,
WinEDA_GerberFrame::WinEDA_GerberFrame( wxWindow* father, const wxPoint& pos,
const wxString& title, const wxSize& size,
const wxPoint& pos, long style ) :
const wxSize& size,
long style ) :
WinEDA_BasePcbFrame( father, GERBER_FRAME, title, pos, size, style ) WinEDA_BasePcbFrame( father, GERBER_FRAME, title, pos, size, style )
{ {
m_FrameName = wxT( "GerberFrame" ); m_FrameName = wxT( "GerberFrame" );
...@@ -141,9 +137,9 @@ WinEDA_GerberFrame::WinEDA_GerberFrame( wxWindow* father, ...@@ -141,9 +137,9 @@ WinEDA_GerberFrame::WinEDA_GerberFrame( wxWindow* father,
m_Draw_Axis = true; // true to show X and Y axis on screen m_Draw_Axis = true; // true to show X and Y axis on screen
m_Draw_Sheet_Ref = false; // true for reference drawings. m_Draw_Sheet_Ref = false; // true for reference drawings.
m_HotkeysZoomAndGridList = s_Gerbview_Hokeys_Descr; m_HotkeysZoomAndGridList = s_Gerbview_Hokeys_Descr;
m_SelLayerBox = NULL; m_SelLayerBox = NULL;
m_SelLayerTool = NULL; m_DCodeSelector = NULL;
m_displayMode = 0; m_displayMode = 0;
if( DrawPanel ) if( DrawPanel )
DrawPanel->m_Block_Enable = true; DrawPanel->m_Block_Enable = true;
...@@ -163,8 +159,8 @@ WinEDA_GerberFrame::WinEDA_GerberFrame( wxWindow* father, ...@@ -163,8 +159,8 @@ WinEDA_GerberFrame::WinEDA_GerberFrame( wxWindow* father,
// Create the PCB_LAYER_WIDGET *after* SetBoard(): // Create the PCB_LAYER_WIDGET *after* SetBoard():
wxFont font = wxSystemSettings::GetFont( wxSYS_DEFAULT_GUI_FONT ); wxFont font = wxSystemSettings::GetFont( wxSYS_DEFAULT_GUI_FONT );
int pointSize = font.GetPointSize(); int pointSize = font.GetPointSize();
int screenHeight = wxSystemSettings::GetMetric( wxSYS_SCREEN_Y ); int screenHeight = wxSystemSettings::GetMetric( wxSYS_SCREEN_Y );
if( screenHeight <= 900 ) if( screenHeight <= 900 )
pointSize = (pointSize * 8) / 10; pointSize = (pointSize * 8) / 10;
...@@ -176,9 +172,12 @@ WinEDA_GerberFrame::WinEDA_GerberFrame( wxWindow* father, ...@@ -176,9 +172,12 @@ WinEDA_GerberFrame::WinEDA_GerberFrame( wxWindow* father,
LoadSettings(); LoadSettings();
SetSize( m_FramePos.x, m_FramePos.y, m_FrameSize.x, m_FrameSize.y ); SetSize( m_FramePos.x, m_FramePos.y, m_FrameSize.x, m_FrameSize.y );
GetScreen()->SetGrid( ID_POPUP_GRID_LEVEL_1000 + m_LastGridSizeId ); GetScreen()->SetGrid( ID_POPUP_GRID_LEVEL_1000 + m_LastGridSizeId );
if( GetDisplayMode() == 1 || GetDisplayMode() == 2 )
DrawPanel->m_DisableEraseBG = true;
ReCreateMenuBar(); ReCreateMenuBar();
ReCreateHToolbar(); ReCreateHToolbar();
// ReCreateVToolbar(); // Currently: no right vertical toolbar // ReCreateVToolbar(); // Currently: no right vertical toolbar
ReCreateOptToolbar(); ReCreateOptToolbar();
...@@ -198,39 +197,38 @@ WinEDA_GerberFrame::WinEDA_GerberFrame( wxWindow* father, ...@@ -198,39 +197,38 @@ WinEDA_GerberFrame::WinEDA_GerberFrame( wxWindow* father,
horiz.LeftDockable( false ).RightDockable( false ); horiz.LeftDockable( false ).RightDockable( false );
// LAYER_WIDGET is floatable, but initially docked at far right // LAYER_WIDGET is floatable, but initially docked at far right
wxAuiPaneInfo lyrs; wxAuiPaneInfo lyrs;
lyrs.CloseButton( false ); lyrs.CloseButton( false );
lyrs.Caption( _( "Visibles" ) ); lyrs.Caption( _( "Visibles" ) );
lyrs.IsFloatable(); lyrs.IsFloatable();
if( m_HToolBar ) if( m_HToolBar )
m_auimgr.AddPane( m_HToolBar, m_auimgr.AddPane( m_HToolBar,
wxAuiPaneInfo( horiz ).Name( wxT( "m_HToolBar" ) ).Top().Row( 0 ) ); wxAuiPaneInfo( horiz ).Name( wxT( "m_HToolBar" ) ).Top().Row( 0 ) );
if( m_VToolBar ) if( m_VToolBar )
m_auimgr.AddPane( m_VToolBar, m_auimgr.AddPane( m_VToolBar,
wxAuiPaneInfo( vert ).Name( wxT( "m_VToolBar" ) ).Right().Row( 1 ) ); wxAuiPaneInfo( vert ).Name( wxT( "m_VToolBar" ) ).Right().Row( 1 ) );
m_auimgr.AddPane( m_LayersManager, m_auimgr.AddPane( m_LayersManager,
lyrs.Name( wxT( "m_LayersManagerToolBar" ) ).Right().Row( 0 ) ); lyrs.Name( wxT( "m_LayersManagerToolBar" ) ).Right().Row( 0 ) );
if( m_OptionsToolBar ) if( m_OptionsToolBar )
m_auimgr.AddPane( m_OptionsToolBar, m_auimgr.AddPane( m_OptionsToolBar,
wxAuiPaneInfo( vert ).Name( wxT( "m_OptionsToolBar" ) ).Left() ); wxAuiPaneInfo( vert ).Name( wxT( "m_OptionsToolBar" ) ).Left() );
if( DrawPanel ) if( DrawPanel )
m_auimgr.AddPane( DrawPanel, m_auimgr.AddPane( DrawPanel,
wxAuiPaneInfo().Name( wxT( "DrawFrame" ) ).CentrePane() ); wxAuiPaneInfo().Name( wxT( "DrawFrame" ) ).CentrePane() );
if( MsgPanel ) if( MsgPanel )
m_auimgr.AddPane( MsgPanel, m_auimgr.AddPane( MsgPanel,
wxAuiPaneInfo( horiz ).Name( wxT( "MsgPanel" ) ).Bottom() ); wxAuiPaneInfo( horiz ).Name( wxT( "MsgPanel" ) ).Bottom() );
ReFillLayerWidget(); // this is near end because contents establish size ReFillLayerWidget(); // this is near end because contents establish size
SetToolbars(); SetToolbars();
m_auimgr.Update(); m_auimgr.Update();
} }
...@@ -253,10 +251,10 @@ int WinEDA_GerberFrame::BestZoom() ...@@ -253,10 +251,10 @@ int WinEDA_GerberFrame::BestZoom()
{ {
// gives a minimal value to zoom, if no item in list // gives a minimal value to zoom, if no item in list
if( GetBoard()->m_Drawings == NULL ) if( GetBoard()->m_Drawings == NULL )
return(16 * GetScreen()->m_ZoomScalar) ; return 16 * GetScreen()->m_ZoomScalar;
double x, y; double x, y;
EDA_Rect bbox; EDA_Rect bbox;
BOARD_ITEM* item = GetBoard()->m_Drawings; BOARD_ITEM* item = GetBoard()->m_Drawings;
...@@ -267,14 +265,14 @@ int WinEDA_GerberFrame::BestZoom() ...@@ -267,14 +265,14 @@ int WinEDA_GerberFrame::BestZoom()
} }
bbox.Inflate( wxRound( GetScreen()->GetGridSize().x * 2 ), bbox.Inflate( wxRound( GetScreen()->GetGridSize().x * 2 ),
wxRound( GetScreen()->GetGridSize().y * 2 ) ); wxRound( GetScreen()->GetGridSize().y * 2 ) );
wxSize size = DrawPanel->GetClientSize(); wxSize size = DrawPanel->GetClientSize();
x = bbox.GetWidth() / (double) size.x; x = bbox.GetWidth() / (double) size.x;
y = bbox.GetHeight() / (double) size.y; y = bbox.GetHeight() / (double) size.y;
GetScreen()->m_Curseur = bbox.Centre(); GetScreen()->m_Curseur = bbox.Centre();
int best_zoom = wxRound( MAX( x, y ) * (double) GetScreen()->m_ZoomScalar ) ; int best_zoom = wxRound( MAX( x, y ) * (double) GetScreen()->m_ZoomScalar );
return best_zoom; return best_zoom;
} }
...@@ -289,16 +287,17 @@ void WinEDA_GerberFrame::LoadSettings() ...@@ -289,16 +287,17 @@ void WinEDA_GerberFrame::LoadSettings()
config->Read( GerbviewDrawModeOption, &m_displayMode, 0l ); config->Read( GerbviewDrawModeOption, &m_displayMode, 0l );
long pageSize_opt; long pageSize_opt;
config->Read( GerbviewShowPageSizeOption, &pageSize_opt, 0l ); config->Read( GerbviewShowPageSizeOption, &pageSize_opt, 0l );
int imax = 0; int imax = 0;
for( ; g_GerberPageSizeList[imax] != NULL; imax++ ); for( ; g_GerberPageSizeList[imax] != NULL; imax++ )
;
if( pageSize_opt < 0 || pageSize_opt >= imax ) if( pageSize_opt < 0 || pageSize_opt >= imax )
pageSize_opt = 0; pageSize_opt = 0;
GetScreen()->m_CurrentSheetDesc = g_GerberPageSizeList[pageSize_opt]; GetScreen()->m_CurrentSheetDesc = g_GerberPageSizeList[pageSize_opt];
if ( pageSize_opt > 0 ) if( pageSize_opt > 0 )
{ {
m_Draw_Sheet_Ref = true; m_Draw_Sheet_Ref = true;
} }
...@@ -320,7 +319,7 @@ void WinEDA_GerberFrame::SaveSettings() ...@@ -320,7 +319,7 @@ void WinEDA_GerberFrame::SaveSettings()
wxRealPoint GridSize = GetScreen()->GetGridSize(); wxRealPoint GridSize = GetScreen()->GetGridSize();
long pageSize_opt = 0; long pageSize_opt = 0;
if( m_Draw_Sheet_Ref ) if( m_Draw_Sheet_Ref )
{ {
...@@ -346,7 +345,7 @@ void WinEDA_GerberFrame::ReFillLayerWidget() ...@@ -346,7 +345,7 @@ void WinEDA_GerberFrame::ReFillLayerWidget()
wxAuiPaneInfo& lyrs = m_auimgr.GetPane( m_LayersManager ); wxAuiPaneInfo& lyrs = m_auimgr.GetPane( m_LayersManager );
wxSize bestz = m_LayersManager->GetBestSize(); wxSize bestz = m_LayersManager->GetBestSize();
lyrs.MinSize( bestz ); lyrs.MinSize( bestz );
lyrs.BestSize( bestz ); lyrs.BestSize( bestz );
...@@ -397,7 +396,7 @@ int WinEDA_GerberFrame::GetGridColor() ...@@ -397,7 +396,7 @@ int WinEDA_GerberFrame::GetGridColor()
* Function SetGridColor() , virtual * Function SetGridColor() , virtual
* @param aColor = the new color of the grid * @param aColor = the new color of the grid
*/ */
void WinEDA_GerberFrame::SetGridColor(int aColor) void WinEDA_GerberFrame::SetGridColor( int aColor )
{ {
GetBoard()->SetVisibleElementColor( GERBER_GRID_VISIBLE, aColor ); GetBoard()->SetVisibleElementColor( GERBER_GRID_VISIBLE, aColor );
} }
...@@ -417,12 +416,13 @@ void WinEDA_GerberFrame::SetElementVisibility( int aGERBER_VISIBLE, bool aNewSta ...@@ -417,12 +416,13 @@ void WinEDA_GerberFrame::SetElementVisibility( int aGERBER_VISIBLE, bool aNewSta
} }
void WinEDA_GerberFrame::syncLayerWidget( ) void WinEDA_GerberFrame::syncLayerWidget()
{ {
m_LayersManager->SelectLayer( getActiveLayer() ); m_LayersManager->SelectLayer( getActiveLayer() );
UpdateTitleAndInfo(); UpdateTitleAndInfo();
} }
/** /**
* Function syncLayerBox * Function syncLayerBox
* updates the currently "selected" layer within m_SelLayerBox * updates the currently "selected" layer within m_SelLayerBox
...@@ -432,6 +432,15 @@ void WinEDA_GerberFrame::syncLayerWidget( ) ...@@ -432,6 +432,15 @@ void WinEDA_GerberFrame::syncLayerWidget( )
void WinEDA_GerberFrame::syncLayerBox() void WinEDA_GerberFrame::syncLayerBox()
{ {
m_SelLayerBox->SetSelection( getActiveLayer() ); m_SelLayerBox->SetSelection( getActiveLayer() );
int dcodeSelected = -1;
GERBER_IMAGE* gerber = g_GERBER_List[getActiveLayer()];
if( gerber )
dcodeSelected = gerber->m_Selected_Tool;
if( m_DCodeSelector )
{
m_DCodeSelector->SetDCodeSelection( dcodeSelected );
m_DCodeSelector->Enable( gerber != NULL );
}
UpdateTitleAndInfo(); UpdateTitleAndInfo();
} }
...@@ -453,9 +462,9 @@ void WinEDA_GerberFrame::SetLanguage( wxCommandEvent& event ) ...@@ -453,9 +462,9 @@ void WinEDA_GerberFrame::SetLanguage( wxCommandEvent& event )
} }
void WinEDA_GerberFrame::Liste_D_Codes( ) void WinEDA_GerberFrame::Liste_D_Codes()
{ {
int ii, jj; int ii, jj;
D_CODE* pt_D_code; D_CODE* pt_D_code;
wxString Line; wxString Line;
WinEDA_TextFrame* List; WinEDA_TextFrame* List;
...@@ -518,7 +527,7 @@ void WinEDA_GerberFrame::Liste_D_Codes( ) ...@@ -518,7 +527,7 @@ void WinEDA_GerberFrame::Liste_D_Codes( )
} }
/** /*
* Function UpdateTitleAndInfo * Function UpdateTitleAndInfo
* displays the short filename (if exists) of the selected layer * displays the short filename (if exists) of the selected layer
* on the caption of the main gerbview window * on the caption of the main gerbview window
...@@ -530,7 +539,7 @@ void WinEDA_GerberFrame::Liste_D_Codes( ) ...@@ -530,7 +539,7 @@ void WinEDA_GerberFrame::Liste_D_Codes( )
void WinEDA_GerberFrame::UpdateTitleAndInfo() void WinEDA_GerberFrame::UpdateTitleAndInfo()
{ {
GERBER_IMAGE* gerber = g_GERBER_List[ GetScreen()->m_Active_Layer ]; GERBER_IMAGE* gerber = g_GERBER_List[ GetScreen()->m_Active_Layer ];
wxString text; wxString text;
// Display the gerber filename // Display the gerber filename
if( gerber == NULL ) if( gerber == NULL )
...@@ -538,7 +547,7 @@ void WinEDA_GerberFrame::UpdateTitleAndInfo() ...@@ -538,7 +547,7 @@ void WinEDA_GerberFrame::UpdateTitleAndInfo()
text = wxGetApp().GetAppName() + wxT( " " ) + GetBuildVersion(); text = wxGetApp().GetAppName() + wxT( " " ) + GetBuildVersion();
SetTitle( text ); SetTitle( text );
SetStatusText( wxEmptyString, 0 ); SetStatusText( wxEmptyString, 0 );
text.Printf( _("Layer %d not used"), GetScreen()->m_Active_Layer+1 ); text.Printf( _( "Layer %d not in use" ), GetScreen()->m_Active_Layer + 1 );
m_TextInfo->SetValue( text ); m_TextInfo->SetValue( text );
ClearMsgPanel(); ClearMsgPanel();
return; return;
...@@ -552,12 +561,12 @@ void WinEDA_GerberFrame::UpdateTitleAndInfo() ...@@ -552,12 +561,12 @@ void WinEDA_GerberFrame::UpdateTitleAndInfo()
// Display Image Name and Layer Name (from the current gerber data): // Display Image Name and Layer Name (from the current gerber data):
text.Printf( _( "Image name: \"%s\" Layer name: \"%s\"" ), text.Printf( _( "Image name: \"%s\" Layer name: \"%s\"" ),
GetChars( gerber->m_ImageName ), GetChars( gerber->m_ImageName ),
GetChars( gerber->GetLayerParams().m_LayerName ) ); GetChars( gerber->GetLayerParams().m_LayerName ) );
SetStatusText( text, 0 ); SetStatusText( text, 0 );
// Display data format like fmt in X3.4Y3.4 no LZ or fmt mm X2.3 Y3.5 no TZ in main toolbar // Display data format like fmt in X3.4Y3.4 no LZ or fmt mm X2.3 Y3.5 no TZ in main toolbar
text.Printf( wxT("fmt: %s X%d.%d Y%d.%d no %cZ"), text.Printf( wxT( "fmt: %s X%d.%d Y%d.%d no %cZ" ),
gerber->m_GerbMetric ? wxT( "mm" ) : wxT( "in" ), gerber->m_GerbMetric ? wxT( "mm" ) : wxT( "in" ),
gerber->m_FmtLen.x - gerber->m_FmtScale.x, gerber->m_FmtScale.x, gerber->m_FmtLen.x - gerber->m_FmtScale.x, gerber->m_FmtScale.x,
gerber->m_FmtLen.y - gerber->m_FmtScale.y, gerber->m_FmtScale.y, gerber->m_FmtLen.y - gerber->m_FmtScale.y, gerber->m_FmtScale.y,
...@@ -573,24 +582,26 @@ void WinEDA_GerberFrame::UpdateTitleAndInfo() ...@@ -573,24 +582,26 @@ void WinEDA_GerberFrame::UpdateTitleAndInfo()
void WinEDA_GerberFrame::OnSelectDisplayMode( wxCommandEvent& event ) void WinEDA_GerberFrame::OnSelectDisplayMode( wxCommandEvent& event )
{ {
int oldMode = GetDisplayMode(); int oldMode = GetDisplayMode();
switch( event.GetId() ) switch( event.GetId() )
{ {
case ID_TB_OPTIONS_SHOW_GBR_MODE_0: case ID_TB_OPTIONS_SHOW_GBR_MODE_0:
SetDisplayMode( 0 ); SetDisplayMode( 0 );
break; DrawPanel->m_DisableEraseBG = false;
break;
case ID_TB_OPTIONS_SHOW_GBR_MODE_1:
SetDisplayMode( 1 ); case ID_TB_OPTIONS_SHOW_GBR_MODE_1:
break; SetDisplayMode( 1 );
DrawPanel->m_DisableEraseBG = true;
case ID_TB_OPTIONS_SHOW_GBR_MODE_2: break;
SetDisplayMode( 2 );
break; case ID_TB_OPTIONS_SHOW_GBR_MODE_2:
SetDisplayMode( 2 );
DrawPanel->m_DisableEraseBG = true;
break;
} }
SetToolbars(); SetToolbars();
if( GetDisplayMode() != oldMode ) if( GetDisplayMode() != oldMode )
DrawPanel->Refresh(); DrawPanel->Refresh();
} }
...@@ -87,7 +87,6 @@ bool WinEDA_App::OnInit() ...@@ -87,7 +87,6 @@ bool WinEDA_App::OnInit()
} }
ScreenPcb = new PCB_SCREEN(); ScreenPcb = new PCB_SCREEN();
ScreenPcb->m_CurrentSheetDesc = &g_Sheet_GERBER; ScreenPcb->m_CurrentSheetDesc = &g_Sheet_GERBER;
ActiveScreen = ScreenPcb; ActiveScreen = ScreenPcb;
// read current setup and reopen last directory if no filename to open in // read current setup and reopen last directory if no filename to open in
......
...@@ -3,7 +3,6 @@ ...@@ -3,7 +3,6 @@
/*************************************/ /*************************************/
#include "fctsys.h" #include "fctsys.h"
#include "wx/wupdlock.h"
#include "appl_wxstruct.h" #include "appl_wxstruct.h"
#include "common.h" #include "common.h"
...@@ -16,17 +15,18 @@ ...@@ -16,17 +15,18 @@
void WinEDA_GerberFrame::ReCreateMenuBar( void ) void WinEDA_GerberFrame::ReCreateMenuBar( void )
{ {
wxWindowUpdateLocker dummy(this);
wxMenuBar *menuBar = GetMenuBar(); wxMenuBar *menuBar = GetMenuBar();
/* Destroy the existing menu bar so it can be rebuilt. This allows if( ! menuBar )
* language changes of the menu text on the fly. */ menuBar = new wxMenuBar();
if( menuBar )
SetMenuBar( NULL );
menuBar = new wxMenuBar(); // Delete all existing menus so they can be rebuilt.
// This allows language changes of the menu text on the fly.
menuBar->Freeze();
while( menuBar->GetMenuCount() )
delete menuBar->Remove(0);
// Recreate all menus:
wxMenu* filesMenu = new wxMenu; wxMenu* filesMenu = new wxMenu;
filesMenu->Append( wxID_FILE, _( "Load Gerber File" ), filesMenu->Append( wxID_FILE, _( "Load Gerber File" ),
_( "Load a new Gerber file on the current layer. Previous data will be deleted" ), _( "Load a new Gerber file on the current layer. Previous data will be deleted" ),
...@@ -111,9 +111,13 @@ void WinEDA_GerberFrame::ReCreateMenuBar( void ) ...@@ -111,9 +111,13 @@ void WinEDA_GerberFrame::ReCreateMenuBar( void )
menuBar->Append( configmenu, _( "&Preferences" ) ); menuBar->Append( configmenu, _( "&Preferences" ) );
menuBar->Append( miscellaneous_menu, _( "&Miscellaneous" ) ); menuBar->Append( miscellaneous_menu, _( "&Miscellaneous" ) );
//TODO: one day... menuBar->Append(drill_menu, _("&Drill"));
menuBar->Append( helpMenu, _( "&Help" ) ); menuBar->Append( helpMenu, _( "&Help" ) );
// Associate the menu bar with the frame menuBar->Thaw();
SetMenuBar( menuBar );
// Associate the menu bar with the frame, if no previous menubar
if( GetMenuBar() == NULL )
SetMenuBar( menuBar );
else
menuBar->Refresh();
} }
...@@ -86,7 +86,6 @@ static wxPoint LastPosition; ...@@ -86,7 +86,6 @@ static wxPoint LastPosition;
* @param aPos The center point of the flash * @param aPos The center point of the flash
* @param aSize The diameter of the round flash * @param aSize The diameter of the round flash
* @param aLayerNegative = true if the current layer is negative * @param aLayerNegative = true if the current layer is negative
* @param aImageNegative = true if the current image is negative
*/ */
static void fillFlashedGBRITEM( GERBER_DRAW_ITEM* aGbrItem, static void fillFlashedGBRITEM( GERBER_DRAW_ITEM* aGbrItem,
APERTURE_T aAperture, APERTURE_T aAperture,
...@@ -177,17 +176,19 @@ static void fillLineGBRITEM( GERBER_DRAW_ITEM* aGbrItem, ...@@ -177,17 +176,19 @@ static void fillLineGBRITEM( GERBER_DRAW_ITEM* aGbrItem,
* <li> absolute angle 180 to 270 (quadrant 3) or * <li> absolute angle 180 to 270 (quadrant 3) or
* <li> absolute angle 270 to 0 (quadrant 4) * <li> absolute angle 270 to 0 (quadrant 4)
* </ul><p> * </ul><p>
* @param GERBER_DRAW_ITEM is the GBRITEM to fill in. * @param aGbrItem is the GBRITEM to fill in.
* @param Dcode_index is the DCODE value, like D14 * @param Dcode_index is the DCODE value, like D14
* @param aLayer is the layer index to set into the GBRITEM * @param aLayer is the layer index to set into the GBRITEM
* @param aStart is the starting point * @param aStart is the starting point
* @param aEnd is the ending point * @param aEnd is the ending point
* @param rel_center is the center coordinate relative to start point, * @param aRelCenter is the center coordinate relative to start point,
* given in ABSOLUTE VALUE and the sign of values x et y de rel_center * given in ABSOLUTE VALUE and the sign of values x et y de rel_center
* must be calculated from the previously given constraint: arc only in the * must be calculated from the previously given constraint: arc only in the
* same quadrant. * same quadrant.
* @param aDiameter The diameter of the round flash * @param aClockwise true if arc must be created clockwise
* @param aPenSize The size of the flash. Note rectangular shapes are legal. * @param aPenSize The size of the flash. Note rectangular shapes are legal.
* @param aMultiquadrant = true to create arcs upto 360 deg,
* false when arc is inside one quadrant
* @param aLayerNegative = true if the current layer is negative * @param aLayerNegative = true if the current layer is negative
*/ */
static void fillArcGBRITEM( GERBER_DRAW_ITEM* aGbrItem, int Dcode_index, int aLayer, static void fillArcGBRITEM( GERBER_DRAW_ITEM* aGbrItem, int Dcode_index, int aLayer,
...@@ -212,7 +213,7 @@ static void fillArcGBRITEM( GERBER_DRAW_ITEM* aGbrItem, int Dcode_index, int aL ...@@ -212,7 +213,7 @@ static void fillArcGBRITEM( GERBER_DRAW_ITEM* aGbrItem, int Dcode_index, int aL
// So we must recalculate the actual sign of aRelCenter.x and aRelCenter.y // So we must recalculate the actual sign of aRelCenter.x and aRelCenter.y
center = aRelCenter; center = aRelCenter;
// calculate arc end coordinate relative to the staring point, // calculate arc end coordinate relative to the starting point,
// because center is relative to the center point // because center is relative to the center point
delta = aEnd - aStart; delta = aEnd - aStart;
...@@ -305,22 +306,22 @@ static void fillArcGBRITEM( GERBER_DRAW_ITEM* aGbrItem, int Dcode_index, int aL ...@@ -305,22 +306,22 @@ static void fillArcGBRITEM( GERBER_DRAW_ITEM* aGbrItem, int Dcode_index, int aL
* <li> absolute angle 270 to 0 (quadrant 4) * <li> absolute angle 270 to 0 (quadrant 4)
* </ul><p> * </ul><p>
* @param aPcb is the board. * @param aPcb is the board.
* @param aLayer is the layer index to set into the GBRITEM * @param aGbrItem is the GBRITEM to fill in.
* @param aStart is the starting point * @param aStart is the starting point
* @param aEnd is the ending point * @param aEnd is the ending point
* @param rel_center is the center coordinate relative to start point, * @param rel_center is the center coordinate relative to start point,
* given in ABSOLUTE VALUE and the sign of values x et y de rel_center * given in ABSOLUTE VALUE and the sign of values x et y de rel_center
* must be calculated from the previously given constraint: arc only in the * must be calculated from the previously given constraint: arc only in the
* same quadrant. * same quadrant.
* @param aDiameter The diameter of the round flash * @param aClockwise true if arc must be created clockwise
* @param aWidth is the pen width. * @param aMultiquadrant = true to create arcs upto 360 deg,
* false when arc is inside one quadrant
* @param aLayerNegative = true if the current layer is negative * @param aLayerNegative = true if the current layer is negative
* @param aImageNegative = true if the current image is negative
*/ */
static void fillArcPOLY( BOARD* aPcb, GERBER_DRAW_ITEM* aGbrItem, static void fillArcPOLY( BOARD* aPcb, GERBER_DRAW_ITEM* aGbrItem,
const wxPoint& aStart, const wxPoint& aEnd, const wxPoint& aStart, const wxPoint& aEnd,
const wxPoint& rel_center, const wxPoint& rel_center,
bool clockwise, bool multiquadrant, bool aClockwise, bool aMultiquadrant,
bool aLayerNegative ) bool aLayerNegative )
{ {
/* in order to calculate arc parameters, we use fillArcGBRITEM /* in order to calculate arc parameters, we use fillArcGBRITEM
...@@ -332,7 +333,7 @@ static void fillArcPOLY( BOARD* aPcb, GERBER_DRAW_ITEM* aGbrItem, ...@@ -332,7 +333,7 @@ static void fillArcPOLY( BOARD* aPcb, GERBER_DRAW_ITEM* aGbrItem,
fillArcGBRITEM( &dummyGbrItem, 0, 0, fillArcGBRITEM( &dummyGbrItem, 0, 0,
aStart, aEnd, rel_center, wxSize(0, 0), aStart, aEnd, rel_center, wxSize(0, 0),
clockwise, multiquadrant, aLayerNegative ); aClockwise, aMultiquadrant, aLayerNegative );
wxPoint center; wxPoint center;
center = dummyGbrItem.m_ArcCentre; center = dummyGbrItem.m_ArcCentre;
...@@ -370,7 +371,7 @@ static void fillArcPOLY( BOARD* aPcb, GERBER_DRAW_ITEM* aGbrItem, ...@@ -370,7 +371,7 @@ static void fillArcPOLY( BOARD* aPcb, GERBER_DRAW_ITEM* aGbrItem,
{ {
int rot; int rot;
wxPoint end_arc = start; wxPoint end_arc = start;
if( clockwise ) if( aClockwise )
rot = ii * increment_angle; // rot is in 0.1 deg rot = ii * increment_angle; // rot is in 0.1 deg
else else
rot = (count - ii) * increment_angle; // rot is in 0.1 deg rot = (count - ii) * increment_angle; // rot is in 0.1 deg
...@@ -378,7 +379,7 @@ static void fillArcPOLY( BOARD* aPcb, GERBER_DRAW_ITEM* aGbrItem, ...@@ -378,7 +379,7 @@ static void fillArcPOLY( BOARD* aPcb, GERBER_DRAW_ITEM* aGbrItem,
if( ii < count ) if( ii < count )
RotatePoint( &end_arc, -rot ); RotatePoint( &end_arc, -rot );
else // last point else // last point
end_arc = clockwise ? end : start; end_arc = aClockwise ? end : start;
aGbrItem->m_PolyCorners.push_back( end_arc + center ); aGbrItem->m_PolyCorners.push_back( end_arc + center );
......
...@@ -769,7 +769,7 @@ bool GetEndOfBlock( char buff[GERBER_BUFZ], char*& text, FILE* gerber_file ) ...@@ -769,7 +769,7 @@ bool GetEndOfBlock( char buff[GERBER_BUFZ], char*& text, FILE* gerber_file )
* test for an end of line * test for an end of line
* if an end of line is found: * if an end of line is found:
* read a new line * read a new line
* @param aBuff[GERBER_BUFZ] = buffer to fill with a new line * @param aBuff = buffer (size = GERBER_BUFZ) to fill with a new line
* @param aText = pointer to the last useful char in aBuff * @param aText = pointer to the last useful char in aBuff
* on return: points the beginning of the next line. * on return: points the beginning of the next line.
* @param aFile = the opened GERBER file to read * @param aFile = the opened GERBER file to read
......
...@@ -3,7 +3,6 @@ ...@@ -3,7 +3,6 @@
/*************************************/ /*************************************/
#include "fctsys.h" #include "fctsys.h"
#include "wx/wupdlock.h"
//#include "appl_wxstruct.h" //#include "appl_wxstruct.h"
#include "common.h" #include "common.h"
...@@ -14,6 +13,7 @@ ...@@ -14,6 +13,7 @@
#include "hotkeys.h" #include "hotkeys.h"
#include "class_GERBER.h" #include "class_GERBER.h"
#include "class_layerchoicebox.h" #include "class_layerchoicebox.h"
#include "class_DCodeSelectionbox.h"
#include "dialog_helpers.h" #include "dialog_helpers.h"
void WinEDA_GerberFrame::ReCreateHToolbar( void ) void WinEDA_GerberFrame::ReCreateHToolbar( void )
...@@ -27,10 +27,6 @@ void WinEDA_GerberFrame::ReCreateHToolbar( void ) ...@@ -27,10 +27,6 @@ void WinEDA_GerberFrame::ReCreateHToolbar( void )
if( m_HToolBar != NULL ) if( m_HToolBar != NULL )
return; return;
// we create m_SelLayerTool that have a lot of items,
// so create a wxWindowUpdateLocker is a good idea
wxWindowUpdateLocker dummy(this);
if( GetScreen() ) if( GetScreen() )
{ {
layer = GetScreen()->m_Active_Layer; layer = GetScreen()->m_Active_Layer;
...@@ -89,7 +85,6 @@ void WinEDA_GerberFrame::ReCreateHToolbar( void ) ...@@ -89,7 +85,6 @@ void WinEDA_GerberFrame::ReCreateHToolbar( void )
msg = _( "Layer " ); msg << ii + 1; msg = _( "Layer " ); msg << ii + 1;
choices.Add( msg ); choices.Add( msg );
} }
m_SelLayerBox = new WinEDALayerChoiceBox( m_HToolBar, m_SelLayerBox = new WinEDALayerChoiceBox( m_HToolBar,
ID_TOOLBARH_GERBVIEW_SELECT_LAYER, ID_TOOLBARH_GERBVIEW_SELECT_LAYER,
wxDefaultPosition, wxSize( 150, -1 ), wxDefaultPosition, wxSize( 150, -1 ),
...@@ -97,22 +92,23 @@ void WinEDA_GerberFrame::ReCreateHToolbar( void ) ...@@ -97,22 +92,23 @@ void WinEDA_GerberFrame::ReCreateHToolbar( void )
m_HToolBar->AddControl( m_SelLayerBox ); m_HToolBar->AddControl( m_SelLayerBox );
m_HToolBar->AddSeparator(); m_HToolBar->AddSeparator();
choices.Clear();
choices.Alloc(TOOLS_MAX_COUNT+1); m_DCodesList.Alloc(TOOLS_MAX_COUNT+1);
choices.Add( _( "No tool" ) ); m_DCodesList.Add( _( "No tool" ) );
for( ii = 0; ii < TOOLS_MAX_COUNT; ii++ ) msg = _( "Tool " );
wxString text;
for( ii = FIRST_DCODE; ii < TOOLS_MAX_COUNT; ii++ )
{ {
wxString msg; text = msg;
msg = _( "Tool " ); msg << ii + FIRST_DCODE; text << ii;
choices.Add( msg ); m_DCodesList.Add( text );
} }
m_SelLayerTool = new WinEDAChoiceBox( m_HToolBar, m_DCodeSelector = new DCODE_SELECTION_BOX( m_HToolBar,
ID_TOOLBARH_GERBER_SELECT_TOOL, ID_TOOLBARH_GERBER_SELECT_TOOL,
wxDefaultPosition, wxSize( 150, -1 ), wxDefaultPosition, wxSize( 150, -1 ),
choices ); m_DCodesList );
m_HToolBar->AddControl( m_SelLayerTool ); m_HToolBar->AddControl( m_DCodeSelector );
m_TextInfo = new wxTextCtrl(m_HToolBar, wxID_ANY, wxEmptyString, m_TextInfo = new wxTextCtrl(m_HToolBar, wxID_ANY, wxEmptyString,
wxDefaultPosition, wxSize(150,-1), wxDefaultPosition, wxSize(150,-1),
...@@ -133,8 +129,6 @@ void WinEDA_GerberFrame::ReCreateVToolbar( void ) ...@@ -133,8 +129,6 @@ void WinEDA_GerberFrame::ReCreateVToolbar( void )
if( m_VToolBar ) if( m_VToolBar )
return; return;
wxWindowUpdateLocker dummy(this);
m_VToolBar = new WinEDA_Toolbar( TOOLBAR_TOOL, this, ID_V_TOOLBAR, FALSE ); m_VToolBar = new WinEDA_Toolbar( TOOLBAR_TOOL, this, ID_V_TOOLBAR, FALSE );
// Set up toolbar // Set up toolbar
...@@ -157,8 +151,6 @@ void WinEDA_GerberFrame::ReCreateOptToolbar( void ) ...@@ -157,8 +151,6 @@ void WinEDA_GerberFrame::ReCreateOptToolbar( void )
if( m_OptionsToolBar ) if( m_OptionsToolBar )
return; return;
wxWindowUpdateLocker dummy(this);
// creation of tool bar options // creation of tool bar options
m_OptionsToolBar = new WinEDA_Toolbar( TOOLBAR_OPTION, this, ID_OPT_TOOLBAR, FALSE ); m_OptionsToolBar = new WinEDA_Toolbar( TOOLBAR_OPTION, this, ID_OPT_TOOLBAR, FALSE );
...@@ -249,26 +241,21 @@ void WinEDA_GerberFrame::SetToolbars() ...@@ -249,26 +241,21 @@ void WinEDA_GerberFrame::SetToolbars()
m_SelLayerBox->SetSelection( screen->m_Active_Layer ); m_SelLayerBox->SetSelection( screen->m_Active_Layer );
} }
if( m_SelLayerTool ) if( m_DCodeSelector )
{ {
if( gerber ) if( gerber )
{ {
int sel_index; int dcodeSelected;
m_SelLayerTool->Enable( true ); m_DCodeSelector->Enable( true );
if( gerber->m_Selected_Tool < FIRST_DCODE ) // No tool selected dcodeSelected = gerber->m_Selected_Tool;
sel_index = 0;
else if( dcodeSelected != m_DCodeSelector->GetSelectedDCodeId() )
sel_index = gerber->m_Selected_Tool - FIRST_DCODE + 1; m_DCodeSelector->SetDCodeSelection( dcodeSelected );
if( sel_index != m_SelLayerTool->GetSelection() )
{
m_SelLayerTool->SetSelection( sel_index );
}
} }
else else
{ {
m_SelLayerTool->SetSelection( 0 ); m_DCodeSelector->SetDCodeSelection( 0 );
m_SelLayerTool->Enable( false ); m_DCodeSelector->Enable( false );
} }
} }
......
...@@ -17,8 +17,7 @@ ...@@ -17,8 +17,7 @@
* global id.h file. This will prevent the entire project from being rebuilt * global id.h file. This will prevent the entire project from being rebuilt
* when adding new command to the gerber file viewer. * when adding new command to the gerber file viewer.
*/ */
enum id_gerbview_frm enum id_gerbview_frm {
{
// A MenuItem ID of Zero does not work under Mac,first id = 1 // A MenuItem ID of Zero does not work under Mac,first id = 1
ID_GERBVIEW_SHOW_LIST_DCODES = 1, ID_GERBVIEW_SHOW_LIST_DCODES = 1,
ID_GERBVIEW_LOAD_DRILL_FILE, ID_GERBVIEW_LOAD_DRILL_FILE,
...@@ -32,8 +31,10 @@ enum id_gerbview_frm ...@@ -32,8 +31,10 @@ enum id_gerbview_frm
}; };
class DCODE_SELECTION_BOX;
/****************************************************************** /******************************************************************
class WinEDA_GerberFrame: this is the main window used in gerbview * class WinEDA_GerberFrame: this is the main window used in gerbview
******************************************************************/ ******************************************************************/
class WinEDA_GerberFrame : public WinEDA_BasePcbFrame class WinEDA_GerberFrame : public WinEDA_BasePcbFrame
...@@ -41,36 +42,36 @@ class WinEDA_GerberFrame : public WinEDA_BasePcbFrame ...@@ -41,36 +42,36 @@ class WinEDA_GerberFrame : public WinEDA_BasePcbFrame
friend class PCB_LAYER_WIDGET; friend class PCB_LAYER_WIDGET;
protected: protected:
GERBER_LAYER_WIDGET* m_LayersManager; GERBER_LAYER_WIDGET* m_LayersManager;
public: public:
WinEDALayerChoiceBox* m_SelLayerBox; WinEDALayerChoiceBox* m_SelLayerBox;
WinEDAChoiceBox* m_SelLayerTool; DCODE_SELECTION_BOX* m_DCodeSelector; // a list box to select the dcode Id to hightlight.
wxTextCtrl* m_TextInfo; // a wxTextCtrl used to display some info about wxTextCtrl* m_TextInfo; // a wxTextCtrl used to display some info about
// gerber data (format..) // gerber data (format..)
wxArrayString m_DCodesList; // an array string containint all decodes Id (10 to 999)
private: private:
int m_displayMode; // Gerber images ("layers" in Gerbview) can be drawn: int m_displayMode; // Gerber images ("layers" in Gerbview) can be drawn:
// - in fast mode (write mode) but if there are negative items // - in fast mode (write mode) but if there are negative items
// only the last image is correctly drawn // only the last image is correctly drawn
// (no problem to see only one image or when no negative items) // (no problem to see only one image or when no negative items)
// - in "exact" mode (but slower) in write mode: // - in "exact" mode (but slower) in write mode:
// last image covers previous images // last image covers previous images
// - in "exact" mode (also slower) in OR mode // - in "exact" mode (also slower) in OR mode
// (transparency mode) // (transparency mode)
// m_displayMode = 0, 1 or 2 // m_displayMode = 0, 1 or 2
bool m_show_layer_manager_tools; bool m_show_layer_manager_tools;
wxArrayString m_Messages; // An array sting to store warning messages when reaging a gerber file wxArrayString m_Messages; // An array sting to store warning messages when reaging a gerber file
public: public: WinEDA_GerberFrame( wxWindow* father, const wxString& title,
WinEDA_GerberFrame( wxWindow* father, const wxString& title, const wxPoint& pos, const wxSize& size,
const wxPoint& pos, const wxSize& size, long style = KICAD_DEFAULT_DRAWFRAME_STYLE );
long style = KICAD_DEFAULT_DRAWFRAME_STYLE );
~WinEDA_GerberFrame(); ~WinEDA_GerberFrame();
void Update_config(); void Update_config();
void OnCloseWindow( wxCloseEvent& Event ); void OnCloseWindow( wxCloseEvent& Event );
/** /**
* Function ReportMessage * Function ReportMessage
...@@ -78,27 +79,30 @@ public: ...@@ -78,27 +79,30 @@ public:
* for instance when reading a Gerber file * for instance when reading a Gerber file
* @param aMessage = the straing to add in list * @param aMessage = the straing to add in list
*/ */
void ReportMessage(const wxString aMessage ) void ReportMessage( const wxString aMessage )
{ {
m_Messages.Add( aMessage ); m_Messages.Add( aMessage );
} }
/** /**
* Function ClearMessageList * Function ClearMessageList
* Clear the message list * Clear the message list
* Call it before reading a Gerber file * Call it before reading a Gerber file
*/ */
void ClearMessageList( ) void ClearMessageList()
{ {
m_Messages.Clear( ); m_Messages.Clear();
} }
/** /**
* Function GetDisplayMode * Function GetDisplayMode
* @return 0 for fast mode (not fully compatible with negative objects) * @return 0 for fast mode (not fully compatible with negative objects)
* 1 for exact mode, write mode * 1 for exact mode, write mode
* 2 for exact mode, OR mode (transparency mode) * 2 for exact mode, OR mode (transparency mode)
*/ */
int GetDisplayMode() { return m_displayMode;} int GetDisplayMode() { return m_displayMode; }
/** /**
* Function SetDisplayMode * Function SetDisplayMode
...@@ -106,13 +110,13 @@ public: ...@@ -106,13 +110,13 @@ public:
* 1 for exact mode, write mode * 1 for exact mode, write mode
* 2 for exact mode, OR mode (transparency mode) * 2 for exact mode, OR mode (transparency mode)
*/ */
void SetDisplayMode( int aMode ) { m_displayMode = aMode;} void SetDisplayMode( int aMode ) { m_displayMode = aMode; }
/** /**
* Function IsGridVisible() , virtual * Function IsGridVisible() , virtual
* @return true if the grid must be shown * @return true if the grid must be shown
*/ */
virtual bool IsGridVisible(); virtual bool IsGridVisible();
/** /**
* Function SetGridVisibility() , virtual * Function SetGridVisibility() , virtual
...@@ -120,19 +124,19 @@ public: ...@@ -120,19 +124,19 @@ public:
* if you want to store/retrieve the grid visiblity in configuration. * if you want to store/retrieve the grid visiblity in configuration.
* @param aVisible = true if the grid must be shown * @param aVisible = true if the grid must be shown
*/ */
virtual void SetGridVisibility(bool aVisible); virtual void SetGridVisibility( bool aVisible );
/** /**
* Function GetGridColor() , virtual * Function GetGridColor() , virtual
* @return the color of the grid * @return the color of the grid
*/ */
virtual int GetGridColor(); virtual int GetGridColor();
/** /**
* Function SetGridColor() , virtual * Function SetGridColor() , virtual
* @param aColor = the new color of the grid * @param aColor = the new color of the grid
*/ */
virtual void SetGridColor(int aColor); virtual void SetGridColor( int aColor );
/** /**
* Function IsElementVisible * Function IsElementVisible
...@@ -147,6 +151,7 @@ public: ...@@ -147,6 +151,7 @@ public:
return GetBoard()->IsElementVisible( aGERBER_VISIBLE ); return GetBoard()->IsElementVisible( aGERBER_VISIBLE );
} }
/** /**
* Function SetElementVisibility * Function SetElementVisibility
* changes the visibility of an element category * changes the visibility of an element category
...@@ -160,14 +165,14 @@ public: ...@@ -160,14 +165,14 @@ public:
* Function SetVisibleAlls * Function SetVisibleAlls
* Set the status of all visible element categories and layers to VISIBLE * Set the status of all visible element categories and layers to VISIBLE
*/ */
void SetVisibleAlls( ); void SetVisibleAlls();
/** /**
* Function ReFillLayerWidget * Function ReFillLayerWidget
* changes out all the layers in m_Layers and may be called upon * changes out all the layers in m_Layers and may be called upon
* loading a new BOARD. * loading a new BOARD.
*/ */
void ReFillLayerWidget(); void ReFillLayerWidget();
/** /**
* Function setActiveLayer * Function setActiveLayer
...@@ -182,6 +187,7 @@ public: ...@@ -182,6 +187,7 @@ public:
syncLayerWidget(); syncLayerWidget();
} }
/** /**
* Function getActiveLayer * Function getActiveLayer
* returns the active layer * returns the active layer
...@@ -191,6 +197,7 @@ public: ...@@ -191,6 +197,7 @@ public:
return ( (PCB_SCREEN*) GetScreen() )->m_Active_Layer; return ( (PCB_SCREEN*) GetScreen() )->m_Active_Layer;
} }
/** /**
* Function syncLayerWidget * Function syncLayerWidget
* updates the currently "selected" layer within the PCB_LAYER_WIDGET. * updates the currently "selected" layer within the PCB_LAYER_WIDGET.
...@@ -199,7 +206,7 @@ public: ...@@ -199,7 +206,7 @@ public:
* This function cannot be inline without including layer_widget.h in * This function cannot be inline without including layer_widget.h in
* here and we do not want to do that. * here and we do not want to do that.
*/ */
void syncLayerWidget( ); void syncLayerWidget();
/** /**
* Function syncLayerBox * Function syncLayerBox
...@@ -207,7 +214,7 @@ public: ...@@ -207,7 +214,7 @@ public:
* The currently active layer, as defined by the return value of * The currently active layer, as defined by the return value of
* getActiveLayer(). And updates the colored icon in the toolbar. * getActiveLayer(). And updates the colored icon in the toolbar.
*/ */
void syncLayerBox(); void syncLayerBox();
/** /**
* Function UpdateTitleAndInfo * Function UpdateTitleAndInfo
...@@ -218,7 +225,7 @@ public: ...@@ -218,7 +225,7 @@ public:
* Name of the Image (found in the gerber file: IN &ltname&gt command) in the status bar * Name of the Image (found in the gerber file: IN &ltname&gt command) in the status bar
* and other data in toolbar * and other data in toolbar
*/ */
void UpdateTitleAndInfo(); void UpdateTitleAndInfo();
/** /**
* Load applications settings specific to the PCBNew. * Load applications settings specific to the PCBNew.
...@@ -229,7 +236,7 @@ public: ...@@ -229,7 +236,7 @@ public:
* drawing frames. Please put your application settings for PCBNew here * drawing frames. Please put your application settings for PCBNew here
* to avoid having application settings loaded all over the place. * to avoid having application settings loaded all over the place.
*/ */
virtual void LoadSettings(); virtual void LoadSettings();
/** /**
* Save applications settings common to PCB draw frame objects. * Save applications settings common to PCB draw frame objects.
...@@ -240,51 +247,53 @@ public: ...@@ -240,51 +247,53 @@ public:
* drawing frames. Please put your application settings for PCBNew here * drawing frames. Please put your application settings for PCBNew here
* to avoid having application settings saved all over the place. * to avoid having application settings saved all over the place.
*/ */
virtual void SaveSettings(); virtual void SaveSettings();
/** /**
* Function SetLanguage * Function SetLanguage
* called on a language menu selection * called on a language menu selection
*/ */
virtual void SetLanguage( wxCommandEvent& event ); virtual void SetLanguage( wxCommandEvent& event );
void Process_Special_Functions( wxCommandEvent& event ); void Process_Special_Functions( wxCommandEvent& event );
void RedrawActiveWindow( wxDC* DC, bool EraseBg ); void RedrawActiveWindow( wxDC* DC, bool EraseBg );
void ReCreateHToolbar(); void ReCreateHToolbar();
void ReCreateVToolbar(); void ReCreateVToolbar();
void ReCreateOptToolbar(); void ReCreateOptToolbar();
void ReCreateMenuBar(); void ReCreateMenuBar();
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 );
bool OnRightClick( const wxPoint& MousePos, wxMenu* PopMenu ); bool OnRightClick( const wxPoint& MousePos, wxMenu* PopMenu );
int BestZoom(); int BestZoom();
void OnSelectOptionToolbar( wxCommandEvent& event ); void OnSelectOptionToolbar( wxCommandEvent& event );
/** /**
* Function OnSelectDisplayMode * Function OnSelectDisplayMode
* called on a display mode selection * called on a display mode selection
* Mode selection can be fast display, * Mode selection can be fast display,
* or exact mode with stacked images or with transparency * or exact mode with stacked images or with transparency
*/ */
void OnSelectDisplayMode( wxCommandEvent& event ); void OnSelectDisplayMode( wxCommandEvent& event );
void OnHotKey( wxDC* DC, int hotkey, EDA_ITEM* DrawStruct ); void OnHotKey( wxDC* DC, int hotkey, EDA_ITEM* DrawStruct );
GERBER_DRAW_ITEM* GerberGeneralLocateAndDisplay(); GERBER_DRAW_ITEM* GerberGeneralLocateAndDisplay();
GERBER_DRAW_ITEM* Locate( int typeloc ); GERBER_DRAW_ITEM* Locate( int typeloc );
void SetToolbars(); void SetToolbars();
void Process_Settings( wxCommandEvent& event ); void Process_Settings( wxCommandEvent& event );
void Process_Config( wxCommandEvent& event ); void Process_Config( wxCommandEvent& event );
void InstallConfigFrame( const wxPoint& pos ); void InstallConfigFrame( const wxPoint& pos );
void InstallGerberOptionsDialog( wxCommandEvent& event ); void InstallGerberOptionsDialog( wxCommandEvent& event );
void InstallPcbGlobalDeleteFrame( const wxPoint& pos ); void InstallPcbGlobalDeleteFrame( const wxPoint& pos );
/* handlers for block commands */ /* handlers for block commands */
virtual int ReturnBlockCommand( int key ); virtual int ReturnBlockCommand( int key );
virtual void HandleBlockPlace( wxDC* DC ); virtual void HandleBlockPlace( wxDC* DC );
virtual bool HandleBlockEnd( wxDC* DC ); virtual bool HandleBlockEnd( wxDC* DC );
/* Block operations: */ /* Block operations: */
/** /**
* Function Block_Delete * Function Block_Delete
* deletes all tracks and segments within the selected block. * deletes all tracks and segments within the selected block.
...@@ -292,7 +301,7 @@ public: ...@@ -292,7 +301,7 @@ public:
* *
* @param DC A device context to draw on. * @param DC A device context to draw on.
*/ */
void Block_Delete( wxDC* DC ); void Block_Delete( wxDC* DC );
/** /**
* Function Block_Move * Function Block_Move
...@@ -303,7 +312,7 @@ public: ...@@ -303,7 +312,7 @@ public:
* *
* @param DC A device context to draw on. * @param DC A device context to draw on.
*/ */
void Block_Move( wxDC* DC ); void Block_Move( wxDC* DC );
/** /**
* Function Block_Duplicate * Function Block_Duplicate
...@@ -314,39 +323,39 @@ public: ...@@ -314,39 +323,39 @@ public:
* *
* @param DC A device context to draw on. * @param DC A device context to draw on.
*/ */
void Block_Duplicate( wxDC* DC ); void Block_Duplicate( wxDC* DC );
void ToPostProcess( wxCommandEvent& event ); void ToPostProcess( wxCommandEvent& event );
/** /**
* Function ToPlotter * Function ToPlotter
* Open a dialog frame to create plot and drill files * Open a dialog frame to create plot and drill files
* relative to the current board * relative to the current board
*/ */
void ToPlotter( wxCommandEvent& event ); void ToPlotter( wxCommandEvent& event );
/** /**
* Function ToPrinter * Function ToPrinter
* Open a dialog frame to print layers * Open a dialog frame to print layers
*/ */
void ToPrinter( wxCommandEvent& event ); void ToPrinter( wxCommandEvent& event );
void Genere_HPGL( const wxString& FullFileName, int Layers ); void Genere_HPGL( const wxString& FullFileName, int Layers );
void Genere_GERBER( const wxString& FullFileName, int Layers ); void Genere_GERBER( const wxString& FullFileName, int Layers );
void Genere_PS( const wxString& FullFileName, int Layers ); void Genere_PS( const wxString& FullFileName, int Layers );
void Plot_Layer_HPGL( FILE* File, int masque_layer, void Plot_Layer_HPGL( FILE* File, int masque_layer,
int garde, bool trace_via, int garde, bool trace_via,
GRTraceMode trace_mode ); GRTraceMode trace_mode );
void Plot_Layer_GERBER( FILE* File, int masque_layer, void Plot_Layer_GERBER( FILE* File, int masque_layer,
int garde, bool trace_via, int garde, bool trace_via,
GRTraceMode trace_mode ); GRTraceMode trace_mode );
int Gen_D_CODE_File( const wxString& Name_File ); int Gen_D_CODE_File( const wxString& Name_File );
void Plot_Layer_PS( FILE* File, int masque_layer, void Plot_Layer_PS( FILE* File, int masque_layer,
int garde, bool trace_via, int garde, bool trace_via,
GRTraceMode trace_mode ); GRTraceMode trace_mode );
void Files_io( wxCommandEvent& event ); void Files_io( wxCommandEvent& event );
void OnFileHistory( wxCommandEvent& event ); void OnFileHistory( wxCommandEvent& event );
/** /**
* function LoadGerberFiles * function LoadGerberFiles
...@@ -356,12 +365,12 @@ public: ...@@ -356,12 +365,12 @@ public:
* if void string: user will be prompted for filename(s) * if void string: user will be prompted for filename(s)
* @return true if file was opened successfully. * @return true if file was opened successfully.
*/ */
bool LoadGerberFiles( const wxString& aFileName ); bool LoadGerberFiles( const wxString& aFileName );
int ReadGerberFile( FILE* File, bool Append ); int ReadGerberFile( FILE* File, bool Append );
bool Read_GERBER_File( const wxString& GERBER_FullFileName, bool Read_GERBER_File( const wxString& GERBER_FullFileName,
const wxString& D_Code_FullFileName ); const wxString& D_Code_FullFileName );
void GeneralControle( wxDC* DC, wxPoint Mouse ); void GeneralControle( wxDC* DC, wxPoint Mouse );
/** /**
...@@ -378,7 +387,7 @@ public: ...@@ -378,7 +387,7 @@ public:
* example: 0.012, 0.012, L , D10<br> * example: 0.012, 0.012, L , D10<br>
* *
* Categorize all found dcodes into a table of D_CODE instantiations. * Categorize all found dcodes into a table of D_CODE instantiations.
* @param D_CodeFullFileName The name of the file to read from. * @param D_Code_FullFileName The name of the file to read from.
* @return int - <br> * @return int - <br>
* -1 = file not found<br> * -1 = file not found<br>
* -2 = parsing problem<br> * -2 = parsing problem<br>
...@@ -387,17 +396,17 @@ public: ...@@ -387,17 +396,17 @@ public:
* g_GERBER_List[]<br> * g_GERBER_List[]<br>
* 1 = read OK<br> * 1 = read OK<br>
*/ */
int Read_D_Code_File( const wxString& D_Code_FullFileName ); int Read_D_Code_File( const wxString& D_Code_FullFileName );
void CopyDCodesSizeToItems(); void CopyDCodesSizeToItems();
void Liste_D_Codes( ); void Liste_D_Codes();
// PCB handling // PCB handling
bool Clear_Pcb( bool query ); bool Clear_Pcb( bool query );
void Erase_Current_Layer( bool query ); void Erase_Current_Layer( bool query );
void Delete_DCode_Items( wxDC* DC, int dcode_value, int layer_number ); void Delete_DCode_Items( wxDC* DC, int dcode_value, int layer_number );
// Conversion function // Conversion function
void ExportDataInPcbnewFormat( wxCommandEvent& event ); void ExportDataInPcbnewFormat( wxCommandEvent& event );
/* SaveCopyInUndoList() virtual /* SaveCopyInUndoList() virtual
* currently: do nothing in gerbview. * currently: do nothing in gerbview.
...@@ -406,7 +415,7 @@ public: ...@@ -406,7 +415,7 @@ public:
virtual void SaveCopyInUndoList( virtual void SaveCopyInUndoList(
BOARD_ITEM* aItemToCopy, BOARD_ITEM* aItemToCopy,
UndoRedoOpType aTypeCommand = UR_UNSPECIFIED, UndoRedoOpType aTypeCommand = UR_UNSPECIFIED,
const wxPoint& aTransformPoint = wxPoint(0,0) ) { } const wxPoint& aTransformPoint = wxPoint( 0, 0 ) ) { }
/** /**
* Function SaveCopyInUndoList (overloaded). * Function SaveCopyInUndoList (overloaded).
...@@ -420,11 +429,12 @@ public: ...@@ -420,11 +429,12 @@ public:
virtual void SaveCopyInUndoList( virtual void SaveCopyInUndoList(
PICKED_ITEMS_LIST& aItemsList, PICKED_ITEMS_LIST& aItemsList,
UndoRedoOpType aTypeCommand, UndoRedoOpType aTypeCommand,
const wxPoint& aTransformPoint = wxPoint(0,0) ) const wxPoint& aTransformPoint = wxPoint( 0, 0 ) )
{ {
// currently: do nothing in gerbview. // currently: do nothing in gerbview.
} }
/** Virtual function PrintPage /** Virtual function PrintPage
* used to print a page * used to print a page
* @param aDC = wxDC given by the calling print function * @param aDC = wxDC given by the calling print function
...@@ -434,8 +444,8 @@ public: ...@@ -434,8 +444,8 @@ public:
* @param aData = a pointer on an auxiliary data (not always used, NULL if not used) * @param aData = a pointer on an auxiliary data (not always used, NULL if not used)
*/ */
virtual void PrintPage( wxDC* aDC, bool aPrint_Sheet_Ref, virtual void PrintPage( wxDC* aDC, bool aPrint_Sheet_Ref,
int aPrintMasklayer, bool aPrintMirrorMode, int aPrintMasklayer, bool aPrintMirrorMode,
void * aData = NULL); void* aData = NULL );
/** /**
* Function InstallDialogLayerPairChoice * Function InstallDialogLayerPairChoice
...@@ -443,7 +453,7 @@ public: ...@@ -443,7 +453,7 @@ public:
* between gerber layers and pcbnew layers * between gerber layers and pcbnew layers
* @return the "lookup table" if ok, or NULL * @return the "lookup table" if ok, or NULL
*/ */
int* InstallDialogLayerPairChoice( ); int* InstallDialogLayerPairChoice();
/** /**
* Function DrawItemsDCodeID * Function DrawItemsDCodeID
...@@ -452,7 +462,7 @@ public: ...@@ -452,7 +462,7 @@ public:
* @param aDC = the current device contect * @param aDC = the current device contect
* @param aDrawMode = GR_COPY, GR_OR ... * @param aDrawMode = GR_COPY, GR_OR ...
*/ */
void DrawItemsDCodeID( wxDC* aDC, int aDrawMode ); void DrawItemsDCodeID( wxDC* aDC, int aDrawMode );
DECLARE_EVENT_TABLE() DECLARE_EVENT_TABLE()
}; };
......
// (C) Copyright Artyom Beilis 2010.
// Use, modification and distribution are subject to the
// Boost Software License, Version 1.0. (See accompanying file
// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
#ifndef BOOST_CONFIG_PLATFORM_VMS_HPP
#define BOOST_CONFIG_PLATFORM_VMS_HPP
#define BOOST_PLATFORM "OpenVMS"
#undef BOOST_HAS_STDINT_H
#define BOOST_HAS_UNISTD_H
#define BOOST_HAS_NL_TYPES_H
#define BOOST_HAS_GETTIMEOFDAY
#define BOOST_HAS_DIRENT_H
#define BOOST_HAS_PTHREADS
#define BOOST_HAS_NANOSLEEP
#define BOOST_HAS_CLOCK_GETTIME
#define BOOST_HAS_PTHREAD_MUTEXATTR_SETTYPE
#define BOOST_HAS_LOG1P
#define BOOST_HAS_EXPM1
#define BOOST_HAS_THREADS
#undef BOOST_HAS_SCHED_YIELD
#endif
// Copyright 2010 John Maddock
// Distributed under the Boost Software License, Version 1.0.
// See http://www.boost.org/LICENSE_1_0.txt
#ifndef BOOST_TYPE_TRAITS_EXT_ADD_LVALUE_REFERENCE__HPP
#define BOOST_TYPE_TRAITS_EXT_ADD_LVALUE_REFERENCE__HPP
#include <boost/type_traits/add_reference.hpp>
// should be the last #include
#include <boost/type_traits/detail/type_trait_def.hpp>
namespace boost{
BOOST_TT_AUX_TYPE_TRAIT_DEF1(add_lvalue_reference,T,typename boost::add_reference<T>::type)
#ifndef BOOST_NO_RVALUE_REFERENCES
BOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_1(typename T,add_lvalue_reference,T&&,T&)
#endif
}
#include <boost/type_traits/detail/type_trait_undef.hpp>
#endif // BOOST_TYPE_TRAITS_EXT_ADD_LVALUE_REFERENCE__HPP
// add_rvalue_reference.hpp ---------------------------------------------------------//
// Copyright 2010 Vicente J. Botet Escriba
// Distributed under the Boost Software License, Version 1.0.
// See http://www.boost.org/LICENSE_1_0.txt
#ifndef BOOST_TYPE_TRAITS_EXT_ADD_RVALUE_REFERENCE__HPP
#define BOOST_TYPE_TRAITS_EXT_ADD_RVALUE_REFERENCE__HPP
#include <boost/config.hpp>
//----------------------------------------------------------------------------//
#include <boost/type_traits/is_void.hpp>
#include <boost/type_traits/is_reference.hpp>
// should be the last #include
#include <boost/type_traits/detail/type_trait_def.hpp>
//----------------------------------------------------------------------------//
// //
// C++03 implementation of //
// 20.7.6.2 Reference modifications [meta.trans.ref] //
// Written by Vicente J. Botet Escriba //
// //
// If T names an object or function type then the member typedef type
// shall name T&&; otherwise, type shall name T. [ Note: This rule reflects
// the semantics of reference collapsing. For example, when a type T names
// a type T1&, the type add_rvalue_reference<T>::type is not an rvalue
// reference. end note ]
//----------------------------------------------------------------------------//
namespace boost {
namespace type_traits_detail {
template <typename T, bool b>
struct add_rvalue_reference_helper
{ typedef T type; };
template <typename T>
struct add_rvalue_reference_helper<T, true>
{
#if !defined(BOOST_NO_RVALUE_REFERENCES)
typedef T&& type;
#else
typedef T type;
#endif
};
template <typename T>
struct add_rvalue_reference_imp
{
typedef typename boost::type_traits_detail::add_rvalue_reference_helper
<T, (!is_void<T>::value && !is_reference<T>::value) >::type type;
};
}
BOOST_TT_AUX_TYPE_TRAIT_DEF1(add_rvalue_reference,T,typename boost::type_traits_detail::add_rvalue_reference_imp<T>::type)
} // namespace boost
#include <boost/type_traits/detail/type_trait_undef.hpp>
#endif // BOOST_TYPE_TRAITS_EXT_ADD_RVALUE_REFERENCE__HPP
// common_type.hpp ---------------------------------------------------------//
// Copyright 2008 Howard Hinnant
// Copyright 2008 Beman Dawes
// Distributed under the Boost Software License, Version 1.0.
// See http://www.boost.org/LICENSE_1_0.txt
#ifndef BOOST_TYPE_TRAITS_COMMON_TYPE_HPP
#define BOOST_TYPE_TRAITS_COMMON_TYPE_HPP
#include <boost/config.hpp>
#ifdef __SUNPRO_CC
# define BOOST_COMMON_TYPE_DONT_USE_TYPEOF
#endif
#ifdef __IBMCPP__
# define BOOST_COMMON_TYPE_DONT_USE_TYPEOF
#endif
//----------------------------------------------------------------------------//
#if defined(BOOST_NO_VARIADIC_TEMPLATES)
#define BOOST_COMMON_TYPE_ARITY 3
#endif
//----------------------------------------------------------------------------//
#if defined(BOOST_NO_DECLTYPE) && !defined(BOOST_COMMON_TYPE_DONT_USE_TYPEOF)
#define BOOST_TYPEOF_SILENT
#include <boost/typeof/typeof.hpp> // boost wonders never cease!
#endif
//----------------------------------------------------------------------------//
#ifndef BOOST_NO_STATIC_ASSERT
#define BOOST_COMMON_TYPE_STATIC_ASSERT(CND, MSG, TYPES) static_assert(CND,MSG)
#elif defined(BOOST_COMMON_TYPE_USES_MPL_ASSERT)
#include <boost/mpl/assert.hpp>
#include <boost/mpl/bool.hpp>
#define BOOST_COMMON_TYPE_STATIC_ASSERT(CND, MSG, TYPES) \
BOOST_MPL_ASSERT_MSG(boost::mpl::bool_< (CND) >::type::value, MSG, TYPES)
#else
#include <boost/static_assert.hpp>
#define BOOST_COMMON_TYPE_STATIC_ASSERT(CND, MSG, TYPES) BOOST_STATIC_ASSERT(CND)
#endif
#if !defined(BOOST_NO_STATIC_ASSERT) || !defined(BOOST_COMMON_TYPE_USES_MPL_ASSERT)
#define BOOST_COMMON_TYPE_MUST_BE_A_COMPLE_TYPE "must be complete type"
#endif
#if defined(BOOST_NO_DECLTYPE) && defined(BOOST_COMMON_TYPE_DONT_USE_TYPEOF)
#include <boost/type_traits/detail/common_type_imp.hpp>
#include <boost/type_traits/remove_cv.hpp>
#endif
#include <boost/mpl/if.hpp>
#include <boost/utility/declval.hpp>
#include <boost/type_traits/add_rvalue_reference.hpp>
//----------------------------------------------------------------------------//
// //
// C++03 implementation of //
// 20.6.7 Other transformations [meta.trans.other] //
// Written by Howard Hinnant //
// Adapted for Boost by Beman Dawes, Vicente Botet and Jeffrey Hellrung //
// //
//----------------------------------------------------------------------------//
namespace boost {
// prototype
#if !defined(BOOST_NO_VARIADIC_TEMPLATES)
template<typename... T>
struct common_type;
#else // or no specialization
template <class T, class U = void, class V = void>
struct common_type
{
public:
typedef typename common_type<typename common_type<T, U>::type, V>::type type;
};
#endif
// 1 arg
template<typename T>
#if !defined(BOOST_NO_VARIADIC_TEMPLATES)
struct common_type<T>
#else
struct common_type<T, void, void>
#endif
{
BOOST_COMMON_TYPE_STATIC_ASSERT(sizeof(T) > 0, BOOST_COMMON_TYPE_MUST_BE_A_COMPLE_TYPE, (T));
public:
typedef T type;
};
// 2 args
namespace type_traits_detail {
template <class T, class U>
struct common_type_2
{
private:
BOOST_COMMON_TYPE_STATIC_ASSERT(sizeof(T) > 0, BOOST_COMMON_TYPE_MUST_BE_A_COMPLE_TYPE, (T));
BOOST_COMMON_TYPE_STATIC_ASSERT(sizeof(U) > 0, BOOST_COMMON_TYPE_MUST_BE_A_COMPLE_TYPE, (U));
static bool declval_bool(); // workaround gcc bug; not required by std
static typename add_rvalue_reference<T>::type declval_T(); // workaround gcc bug; not required by std
static typename add_rvalue_reference<U>::type declval_U(); // workaround gcc bug; not required by std
static typename add_rvalue_reference<bool>::type declval_b();
#if !defined(BOOST_NO_DECLTYPE)
public:
typedef decltype(declval<bool>() ? declval<T>() : declval<U>()) type;
#elif defined(BOOST_COMMON_TYPE_DONT_USE_TYPEOF)
public:
typedef typename detail_type_traits_common_type::common_type_impl<
typename remove_cv<T>::type,
typename remove_cv<U>::type
>::type type;
#else
public:
typedef BOOST_TYPEOF_TPL(declval_b() ? declval_T() : declval_U()) type;
#endif
};
template <class T>
struct common_type_2<T, T>
{
typedef T type;
};
}
#if !defined(BOOST_NO_VARIADIC_TEMPLATES)
template <class T, class U>
struct common_type<T, U>
#else
template <class T, class U>
struct common_type<T, U, void>
#endif
: type_traits_detail::common_type_2<T,U>
{ };
// 3 or more args
#if !defined(BOOST_NO_VARIADIC_TEMPLATES)
template<typename T, typename U, typename... V>
struct common_type<T, U, V...> {
public:
typedef typename common_type<typename common_type<T, U>::type, V...>::type type;
};
#endif
} // namespace boost
#endif // BOOST_TYPE_TRAITS_COMMON_TYPE_HPP
// (C) Copyright John Maddock 2010.
// Use, modification and distribution are subject to the Boost Software License,
// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt).
//
// See http://www.boost.org/libs/type_traits for most recent version including documentation.
#ifndef BOOST_TT_CONDITIONAL_HPP_INCLUDED
#define BOOST_TT_CONDITIONAL_HPP_INCLUDED
#include <boost/mpl/if.hpp>
namespace boost {
template <bool b, class T, class U>
struct conditional : public mpl::if_c<b, T, U>
{
};
} // namespace boost
#endif // BOOST_TT_CONDITIONAL_HPP_INCLUDED
/*******************************************************************************
* boost/type_traits/detail/common_type_imp.hpp
*
* Copyright 2010, Jeffrey Hellrung.
* Distributed under the Boost Software License, Version 1.0. (See accompanying
* file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
*
* struct boost::common_type<T,U>
*
* common_type<T,U>::type is the type of the expression
* b() ? x() : y()
* where b() returns a bool, x() has return type T, and y() has return type U.
* See
* http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2661.htm#common_type
*
* Note that this evaluates to void if one or both of T and U is void.
******************************************************************************/
#ifndef BOOST_TYPE_TRAITS_DETAIL_COMMON_TYPE_IMP_HPP
#define BOOST_TYPE_TRAITS_DETAIL_COMMON_TYPE_IMP_HPP
#include <cstddef>
#include <boost/mpl/assert.hpp>
#include <boost/mpl/at.hpp>
#include <boost/mpl/begin_end.hpp>
#include <boost/mpl/contains.hpp>
#include <boost/mpl/copy.hpp>
#include <boost/mpl/deref.hpp>
#include <boost/mpl/eval_if.hpp>
#include <boost/mpl/if.hpp>
#include <boost/mpl/inserter.hpp>
#include <boost/mpl/next.hpp>
#include <boost/mpl/or.hpp>
#include <boost/mpl/placeholders.hpp>
#include <boost/mpl/push_back.hpp>
#include <boost/mpl/size.hpp>
#include <boost/mpl/vector/vector0.hpp>
#include <boost/mpl/vector/vector10.hpp>
#include <boost/type_traits/integral_constant.hpp>
#include <boost/type_traits/is_enum.hpp>
#include <boost/type_traits/is_integral.hpp>
#include <boost/type_traits/make_signed.hpp>
#include <boost/type_traits/make_unsigned.hpp>
#include <boost/type_traits/remove_cv.hpp>
#include <boost/type_traits/remove_reference.hpp>
#include <boost/utility/declval.hpp>
namespace boost
{
namespace detail_type_traits_common_type
{
/*******************************************************************************
* struct propagate_cv< From, To >
*
* This metafunction propagates cv-qualifiers on type From to type To.
******************************************************************************/
template< class From, class To >
struct propagate_cv
{ typedef To type; };
template< class From, class To >
struct propagate_cv< const From, To >
{ typedef To const type; };
template< class From, class To >
struct propagate_cv< volatile From, To >
{ typedef To volatile type; };
template< class From, class To >
struct propagate_cv< const volatile From, To >
{ typedef To const volatile type; };
/*******************************************************************************
* struct is_signable_integral<T>
*
* This metafunction determines if T is an integral type which can be made
* signed or unsigned.
******************************************************************************/
template< class T >
struct is_signable_integral
: mpl::or_< is_integral<T>, is_enum<T> >
{ };
template<>
struct is_signable_integral< bool >
: false_type
{ };
/*******************************************************************************
* struct sizeof_t<N>
* typedef ... yes_type
* typedef ... no_type
*
* These types are integral players in the use of the "sizeof trick", i.e., we
* can distinguish overload selection by inspecting the size of the return type
* of the overload.
******************************************************************************/
template< std::size_t N > struct sizeof_t { char _dummy[N]; };
typedef sizeof_t<1> yes_type;
typedef sizeof_t<2> no_type;
BOOST_MPL_ASSERT_RELATION( sizeof( yes_type ), ==, 1 );
BOOST_MPL_ASSERT_RELATION( sizeof( no_type ), ==, 2 );
/*******************************************************************************
* rvalue_test(T&) -> no_type
* rvalue_test(...) -> yes_type
*
* These overloads are used to determine the rvalue-ness of an expression.
******************************************************************************/
template< class T > no_type rvalue_test(T&);
yes_type rvalue_test(...);
/*******************************************************************************
* struct conversion_test_overloads< Sequence >
*
* This struct has multiple overloads of the static member function apply, each
* one taking a single parameter of a type within the Boost.MPL sequence
* Sequence. Each such apply overload has a return type with sizeof equal to
* one plus the index of the parameter type within Sequence. Thus, we can
* deduce the type T of an expression as long as we can generate a finite set of
* candidate types containing T via these apply overloads and the "sizeof
* trick".
******************************************************************************/
template< class First, class Last, std::size_t Index >
struct conversion_test_overloads_iterate
: conversion_test_overloads_iterate<
typename mpl::next< First >::type, Last, Index + 1
>
{
using conversion_test_overloads_iterate<
typename mpl::next< First >::type, Last, Index + 1
>::apply;
static sizeof_t< Index + 1 >
apply(typename mpl::deref< First >::type);
};
template< class Last, std::size_t Index >
struct conversion_test_overloads_iterate< Last, Last, Index >
{ static sizeof_t< Index + 1 > apply(...); };
template< class Sequence >
struct conversion_test_overloads
: conversion_test_overloads_iterate<
typename mpl::begin< Sequence >::type,
typename mpl::end< Sequence >::type,
0
>
{ };
/*******************************************************************************
* struct select< Sequence, Index >
*
* select is synonymous with mpl::at_c unless Index equals the size of the
* Boost.MPL Sequence, in which case this evaluates to void.
******************************************************************************/
template<
class Sequence, int Index,
int N = mpl::size< Sequence >::value
>
struct select
: mpl::at_c< Sequence, Index >
{ };
template< class Sequence, int N >
struct select< Sequence, N, N >
{ typedef void type; };
/*******************************************************************************
* class deduce_common_type< T, U, NominalCandidates >
* struct nominal_candidates<T,U>
* struct common_type_dispatch_on_rvalueness<T,U>
* struct common_type_impl<T,U>
*
* These classes and structs implement the logic behind common_type, which goes
* roughly as follows. Let C be the type of the conditional expression
* declval< bool >() ? declval<T>() : declval<U>()
* if C is an rvalue, then:
* let T' and U' be T and U stripped of reference- and cv-qualifiers
* if T' and U' are pointer types, say, T' = V* and U' = W*, then:
* define the set of NominalCandidates to be
* { V*, W*, V'*, W'* }
* where V' is V with whatever cv-qualifiers are on W, and W' is W
* with whatever cv-qualifiers are on V
* else T' and U' are both "signable integral types" (integral and enum
* types excepting bool), then:
* define the set of NominalCandidates to be
* { unsigned(T'), unsigned(U'), signed(T'), signed(U') }
* where unsigned(X) is make_unsigned<X>::type and signed(X) is
* make_signed<X>::type
* else
* define the set of NominalCandidates to be
* { T', U' }
* else
* let V and W be T and U stripped of reference-qualifiers
* define the set of NominalCandidates to be
* { V&, W&, V'&, W'& }
* where V' is V with whatever cv-qualifiers are on W, and W' is W with
* whatever cv-qualifiers are on V
* define the set of Candidates to be equal to the set of NominalCandidates with
* duplicates removed, and use this set of Candidates to determine C using the
* conversion_test_overloads struct
******************************************************************************/
template< class T, class U, class NominalCandidates >
class deduce_common_type
{
typedef typename mpl::copy<
NominalCandidates,
mpl::inserter<
mpl::vector0<>,
mpl::if_<
mpl::contains< mpl::_1, mpl::_2 >,
mpl::_1,
mpl::push_back< mpl::_1, mpl::_2 >
>
>
>::type candidate_types;
static const int best_candidate_index =
sizeof( conversion_test_overloads< candidate_types >::apply(
declval< bool >() ? declval<T>() : declval<U>()
) ) - 1;
public:
typedef typename select< candidate_types, best_candidate_index >::type type;
};
template<
class T, class U,
class V = typename remove_cv< typename remove_reference<T>::type >::type,
class W = typename remove_cv< typename remove_reference<U>::type >::type,
bool = is_signable_integral<V>::value && is_signable_integral<W>::value
>
struct nominal_candidates;
template< class T, class U, class V, class W >
struct nominal_candidates< T, U, V, W, false >
{ typedef mpl::vector2<V,W> type; };
template< class T, class U, class V, class W >
struct nominal_candidates< T, U, V, W, true >
{
typedef mpl::vector4<
typename make_unsigned<V>::type,
typename make_unsigned<W>::type,
typename make_signed<V>::type,
typename make_signed<W>::type
> type;
};
template< class T, class U, class V, class W >
struct nominal_candidates< T, U, V*, W*, false >
{
typedef mpl::vector4<
V*, W*,
typename propagate_cv<W,V>::type *,
typename propagate_cv<V,W>::type *
> type;
};
template<class T, class U, bool b>
struct common_type_dispatch_on_rvalueness
: deduce_common_type< T, U, typename nominal_candidates<T,U>::type >
{ };
template< class T, class U >
struct common_type_dispatch_on_rvalueness< T, U, false >
{
private:
typedef typename remove_reference<T>::type unrefed_T_type;
typedef typename remove_reference<U>::type unrefed_U_type;
public:
typedef typename deduce_common_type<
T, U,
mpl::vector4<
unrefed_T_type &,
unrefed_U_type &,
typename propagate_cv< unrefed_U_type, unrefed_T_type >::type &,
typename propagate_cv< unrefed_T_type, unrefed_U_type >::type &
>
>::type type;
};
template< class T, class U >
struct common_type_impl
: common_type_dispatch_on_rvalueness<T,U, sizeof( ::boost::detail_type_traits_common_type::rvalue_test(
declval< bool >() ? declval<T>() : declval<U>() ) ) == sizeof( yes_type ) >
{ };
template< class T > struct common_type_impl< T, void > { typedef void type; };
template< class T > struct common_type_impl< void, T > { typedef void type; };
template<> struct common_type_impl< void, void > { typedef void type; };
} // namespace detail_type_traits_common_type
} // namespace boost
#endif // BOOST_TYPE_TRAITS_DETAIL_COMMON_TYPE_HPP
// Copyright (C) 2010 Peder Holt
// Use, modification and distribution is subject to the Boost Software
// License, Version 1.0. (http://www.boost.org/LICENSE_1_0.txt)
#ifndef BOOST_TYPEOF_UNSUPPORTED_HPP_INCLUDED
#define BOOST_TYPEOF_UNSUPPORTED_HPP_INCLUDED
namespace boost { namespace type_of {
struct typeof_emulation_is_unsupported_on_this_compiler {};
}}
#define BOOST_TYPEOF(expr) boost::type_of::typeof_emulation_is_unsupported_on_this_compiler
#define BOOST_TYPEOF_TPL BOOST_TYPEOF
#define BOOST_TYPEOF_NESTED_TYPEDEF_TPL(name,expr) \
struct name {\
typedef BOOST_TYPEOF_TPL(expr) type;\
};
#define BOOST_TYPEOF_NESTED_TYPEDEF(name,expr) \
struct name {\
typedef BOOST_TYPEOF(expr) type;\
};
#define BOOST_TYPEOF_REGISTER_TYPE(x)
#define BOOST_TYPEOF_REGISTER_TEMPLATE(x, params)
#endif
\ No newline at end of file
// common_type.hpp ---------------------------------------------------------//
// Copyright 2010 Vicente J. Botet Escriba
// Distributed under the Boost Software License, Version 1.0.
// See http://www.boost.org/LICENSE_1_0.txt
#ifndef BOOST_TYPE_TRAITS_EXT_DECLVAL__HPP
#define BOOST_TYPE_TRAITS_EXT_DECLVAL__HPP
#include <boost/config.hpp>
//----------------------------------------------------------------------------//
#include <boost/type_traits/add_rvalue_reference.hpp>
//----------------------------------------------------------------------------//
// //
// C++03 implementation of //
// Written by Vicente J. Botet Escriba //
//~ 20.3.4 Function template declval [declval]
//~ 1 The library provides the function template declval to simplify the definition of expressions which occur as
//~ unevaluated operands.
//~ 2 Remarks: If this function is used, the program is ill-formed.
//~ 3 Remarks: The template parameter T of declval may be an incomplete type.
//~ [ Example:
//~ template <class To, class From>
//~ decltype(static_cast<To>(declval<From>())) convert(From&&);
//~ declares a function template convert which only participats in overloading if the type From can be
//~ explicitly converted to type To. For another example see class template common_type (20.7.6.6). —end
//~ example ]
// //
//----------------------------------------------------------------------------//
namespace boost {
template <typename T>
typename add_rvalue_reference<T>::type declval(); //noexcept; // as unevaluated operand
} // namespace boost
#endif // BOOST_TYPE_TRAITS_EXT_DECLVAL__HPP
...@@ -35,6 +35,9 @@ public: ...@@ -35,6 +35,9 @@ public:
bool m_AbortEnable; // TRUE if abort button or menu to bool m_AbortEnable; // TRUE if abort button or menu to
// be displayed // be displayed
bool m_DisableEraseBG; // if true: do not allow background erasure
// (used to reduce flicker in Gerbview )
bool m_AutoPAN_Enable; // TRUE to allow auto pan bool m_AutoPAN_Enable; // TRUE to allow auto pan
bool m_AutoPAN_Request; // TRUE to request an auto pan bool m_AutoPAN_Request; // TRUE to request an auto pan
......
...@@ -62,8 +62,6 @@ void WinEDA_App::MacOpenFile(const wxString &fileName) { ...@@ -62,8 +62,6 @@ void WinEDA_App::MacOpenFile(const wxString &fileName) {
frame->SetTitle( GetTitle() + wxT( " " ) + GetBuildVersion() + frame->SetTitle( GetTitle() + wxT( " " ) + GetBuildVersion() +
wxT( " " ) + frame->m_ProjectFileName.GetFullPath() ); wxT( " " ) + frame->m_ProjectFileName.GetFullPath() );
frame->ReCreateMenuBar();
frame->RecreateBaseHToolbar();
frame->m_LeftWin->ReCreateTreePrj(); frame->m_LeftWin->ReCreateTreePrj();
......
...@@ -73,20 +73,21 @@ void WinEDA_MainFrame::ReCreateMenuBar() ...@@ -73,20 +73,21 @@ void WinEDA_MainFrame::ReCreateMenuBar()
wxMenuItem *item; wxMenuItem *item;
wxMenuBar *menuBar = GetMenuBar(); wxMenuBar *menuBar = GetMenuBar();
/** if( ! menuBar )
* Destroy the existing menu bar so it can be rebuilt. This allows menuBar = new wxMenuBar();
* language changes of the menu text on the fly.
*/ // Delete all existing menus so they can be rebuilt.
if( menuBar ) // This allows language changes of the menu text on the fly.
SetMenuBar( NULL ); menuBar->Freeze();
menuBar = new wxMenuBar(); while( menuBar->GetMenuCount() )
delete menuBar->Remove(0);
/**
* Files menu // Recreate all menus:
*/
// Files menu
wxMenu* filesMenu = new wxMenu; wxMenu* filesMenu = new wxMenu;
/* Open */ // Open
item = new wxMenuItem( filesMenu, ID_LOAD_PROJECT, _( "&Open\tCtrl+O" ), item = new wxMenuItem( filesMenu, ID_LOAD_PROJECT, _( "&Open\tCtrl+O" ),
_( "Open an existing project" ) ); _( "Open an existing project" ) );
...@@ -96,7 +97,7 @@ void WinEDA_MainFrame::ReCreateMenuBar() ...@@ -96,7 +97,7 @@ void WinEDA_MainFrame::ReCreateMenuBar()
filesMenu->Append( item ); filesMenu->Append( item );
/* Open Recent submenu */ // Open Recent submenu
wxMenu* openRecentMenu = new wxMenu(); wxMenu* openRecentMenu = new wxMenu();
wxGetApp().m_fileHistory.AddFilesToMenu( openRecentMenu ); wxGetApp().m_fileHistory.AddFilesToMenu( openRecentMenu );
ADD_MENUITEM_WITH_HELP_AND_SUBMENU( filesMenu, openRecentMenu, ADD_MENUITEM_WITH_HELP_AND_SUBMENU( filesMenu, openRecentMenu,
...@@ -104,7 +105,7 @@ void WinEDA_MainFrame::ReCreateMenuBar() ...@@ -104,7 +105,7 @@ void WinEDA_MainFrame::ReCreateMenuBar()
_("Open a recent opened schematic project" ), _("Open a recent opened schematic project" ),
open_project_xpm ); open_project_xpm );
/* New */ // New
item = new wxMenuItem( filesMenu, ID_NEW_PROJECT, _( "&New\tCtrl+N" ), item = new wxMenuItem( filesMenu, ID_NEW_PROJECT, _( "&New\tCtrl+N" ),
_( "Start a new project" ) ); _( "Start a new project" ) );
...@@ -124,10 +125,8 @@ void WinEDA_MainFrame::ReCreateMenuBar() ...@@ -124,10 +125,8 @@ void WinEDA_MainFrame::ReCreateMenuBar()
filesMenu->Append( item ); filesMenu->Append( item );
/* Separator */ // Archive
filesMenu->AppendSeparator(); filesMenu->AppendSeparator();
/* Archive */
item = new wxMenuItem( filesMenu, ID_SAVE_AND_ZIP_FILES, _( "&Archive" ), item = new wxMenuItem( filesMenu, ID_SAVE_AND_ZIP_FILES, _( "&Archive" ),
_( "Archive project files in zip archive" ) ); _( "Archive project files in zip archive" ) );
...@@ -137,7 +136,7 @@ void WinEDA_MainFrame::ReCreateMenuBar() ...@@ -137,7 +136,7 @@ void WinEDA_MainFrame::ReCreateMenuBar()
filesMenu->Append( item ); filesMenu->Append( item );
/* Unarchive */ // Unarchive
item = new wxMenuItem( filesMenu, ID_READ_ZIP_ARCHIVE, _( "&Unarchive" ), item = new wxMenuItem( filesMenu, ID_READ_ZIP_ARCHIVE, _( "&Unarchive" ),
_( "Unarchive project files from zip file" ) ); _( "Unarchive project files from zip file" ) );
...@@ -160,12 +159,10 @@ void WinEDA_MainFrame::ReCreateMenuBar() ...@@ -160,12 +159,10 @@ void WinEDA_MainFrame::ReCreateMenuBar()
/** // Browse menu
* Browse menu
*/
wxMenu* browseMenu = new wxMenu(); wxMenu* browseMenu = new wxMenu();
/* Text editor */ // Text editor
item = new wxMenuItem( browseMenu, ID_TO_EDITOR, _( "Text E&ditor" ), item = new wxMenuItem( browseMenu, ID_TO_EDITOR, _( "Text E&ditor" ),
_( "Open preferred text editor" ) ); _( "Open preferred text editor" ) );
#if !defined( __WXMAC__ ) #if !defined( __WXMAC__ )
...@@ -186,12 +183,10 @@ void WinEDA_MainFrame::ReCreateMenuBar() ...@@ -186,12 +183,10 @@ void WinEDA_MainFrame::ReCreateMenuBar()
/** // Preferences menu
* Preferences menu
*/
wxMenu* PreferencesMenu = new wxMenu; wxMenu* PreferencesMenu = new wxMenu;
/* Text editor */ // Text editor
item = new wxMenuItem( PreferencesMenu, ID_SELECT_PREFERED_EDITOR, item = new wxMenuItem( PreferencesMenu, ID_SELECT_PREFERED_EDITOR,
_( "&Text Editor" ), _( "&Text Editor" ),
_( "Select your preferred text editor" ) ); _( "Select your preferred text editor" ) );
...@@ -201,13 +196,10 @@ void WinEDA_MainFrame::ReCreateMenuBar() ...@@ -201,13 +196,10 @@ void WinEDA_MainFrame::ReCreateMenuBar()
PreferencesMenu->Append( item ); PreferencesMenu->Append( item );
/** // PDF Viewer submenu:System browser or user defined checkbox
* PDF Viewer submenu
* System browser or user defined checkbox
*/
wxMenu* SubMenuPdfBrowserChoice = new wxMenu; wxMenu* SubMenuPdfBrowserChoice = new wxMenu;
/* Default */ // Default
item = new wxMenuItem( SubMenuPdfBrowserChoice, item = new wxMenuItem( SubMenuPdfBrowserChoice,
ID_SELECT_DEFAULT_PDF_BROWSER, ID_SELECT_DEFAULT_PDF_BROWSER,
_( "Default" ), _( "Default" ),
...@@ -222,7 +214,7 @@ void WinEDA_MainFrame::ReCreateMenuBar() ...@@ -222,7 +214,7 @@ void WinEDA_MainFrame::ReCreateMenuBar()
SubMenuPdfBrowserChoice->Check( ID_SELECT_DEFAULT_PDF_BROWSER, SubMenuPdfBrowserChoice->Check( ID_SELECT_DEFAULT_PDF_BROWSER,
wxGetApp().m_PdfBrowserIsDefault ); wxGetApp().m_PdfBrowserIsDefault );
/* Favourite */ // Favourite viewer
item = new wxMenuItem( SubMenuPdfBrowserChoice, item = new wxMenuItem( SubMenuPdfBrowserChoice,
ID_SELECT_PREFERED_PDF_BROWSER, ID_SELECT_PREFERED_PDF_BROWSER,
_( "Favourite" ), _( "Favourite" ),
...@@ -237,7 +229,7 @@ void WinEDA_MainFrame::ReCreateMenuBar() ...@@ -237,7 +229,7 @@ void WinEDA_MainFrame::ReCreateMenuBar()
SubMenuPdfBrowserChoice->Check( ID_SELECT_PREFERED_PDF_BROWSER, SubMenuPdfBrowserChoice->Check( ID_SELECT_PREFERED_PDF_BROWSER,
!wxGetApp().m_PdfBrowserIsDefault ); !wxGetApp().m_PdfBrowserIsDefault );
/* Append PDF Viewer submenu to preferences */ // Append PDF Viewer submenu to preferences
item = new wxMenuItem( SubMenuPdfBrowserChoice, item = new wxMenuItem( SubMenuPdfBrowserChoice,
ID_SELECT_PREFERED_PDF_BROWSER_NAME, ID_SELECT_PREFERED_PDF_BROWSER_NAME,
_( "PDF Viewer" ), _( "PDF Viewer" ),
...@@ -254,14 +246,11 @@ void WinEDA_MainFrame::ReCreateMenuBar() ...@@ -254,14 +246,11 @@ void WinEDA_MainFrame::ReCreateMenuBar()
_( "PDF viewer preferences" ), _( "PDF viewer preferences" ),
datasheet_xpm ); datasheet_xpm );
// Add languages list:
PreferencesMenu->AppendSeparator(); PreferencesMenu->AppendSeparator();
wxGetApp().AddMenuLanguageList( PreferencesMenu ); wxGetApp().AddMenuLanguageList( PreferencesMenu );
// Help menu
/**
* Help menu
*/
wxMenu* helpMenu = new wxMenu; wxMenu* helpMenu = new wxMenu;
AddHelpVersionInfoMenuEntry( helpMenu ); AddHelpVersionInfoMenuEntry( helpMenu );
...@@ -276,27 +265,26 @@ void WinEDA_MainFrame::ReCreateMenuBar() ...@@ -276,27 +265,26 @@ void WinEDA_MainFrame::ReCreateMenuBar()
helpMenu->Append( item ); helpMenu->Append( item );
/* About on all platforms except WXMAC */ // About
#if !defined( __WXMAC__ )
helpMenu->AppendSeparator(); helpMenu->AppendSeparator();
item = new wxMenuItem( helpMenu, ID_KICAD_ABOUT, _( "&About" ), item = new wxMenuItem( helpMenu, ID_KICAD_ABOUT, _( "&About" ),
_( "About kicad project manager" ) ); _( "About kicad project manager" ) );
item->SetBitmap( info_xpm ); item->SetBitmap( info_xpm );
helpMenu->Append( item ); helpMenu->Append( item );
#endif /* !defined( __WXMAC__ ) */ // Create the menubar and append all submenus
/**
* Create the menubar and append all submenus
*/
menuBar->Append( filesMenu, _( "&File" ) ); menuBar->Append( filesMenu, _( "&File" ) );
menuBar->Append( browseMenu, _( "&Browse" ) ); menuBar->Append( browseMenu, _( "&Browse" ) );
menuBar->Append( PreferencesMenu, _( "&Preferences" ) ); menuBar->Append( PreferencesMenu, _( "&Preferences" ) );
menuBar->Append( helpMenu, _( "&Help" ) ); menuBar->Append( helpMenu, _( "&Help" ) );
/* Associate the menu bar with the frame */ menuBar->Thaw();
SetMenuBar( menuBar );
// Associate the menu bar with the frame, if no previous menubar
if( GetMenuBar() == NULL )
SetMenuBar( menuBar );
else
menuBar->Refresh();
} }
......
...@@ -98,11 +98,5 @@ void WinEDA_MainFrame::OnSelectPreferredEditor( wxCommandEvent& event ) ...@@ -98,11 +98,5 @@ void WinEDA_MainFrame::OnSelectPreferredEditor( wxCommandEvent& event )
void WinEDA_MainFrame::SetLanguage( wxCommandEvent& event ) void WinEDA_MainFrame::SetLanguage( wxCommandEvent& event )
{ {
wxGetApp().SetLanguageIdentifier( event.GetId() ); WinEDA_BasicFrame::SetLanguage( event );
if ( wxGetApp().SetLanguage() )
{
wxLogDebug( wxT( "Recreating menu bar due to language change." ) );
ReCreateMenuBar();
Refresh();
}
} }
...@@ -17,7 +17,7 @@ ...@@ -17,7 +17,7 @@
; General Product Description Definitions ; General Product Description Definitions
!define PRODUCT_NAME "KiCad" !define PRODUCT_NAME "KiCad"
!define PRODUCT_VERSION "2010.12.06" !define PRODUCT_VERSION "2010.12.18"
!define PRODUCT_WEB_SITE "http://iut-tice.ujf-grenoble.fr/kicad/" !define PRODUCT_WEB_SITE "http://iut-tice.ujf-grenoble.fr/kicad/"
!define SOURCEFORGE_WEB_SITE "http://kicad.sourceforge.net/" !define SOURCEFORGE_WEB_SITE "http://kicad.sourceforge.net/"
!define COMPANY_NAME "" !define COMPANY_NAME ""
......
...@@ -19,10 +19,16 @@ void WinEDA_ModuleEditFrame::ReCreateMenuBar() ...@@ -19,10 +19,16 @@ void WinEDA_ModuleEditFrame::ReCreateMenuBar()
wxMenuBar* menuBar = GetMenuBar(); wxMenuBar* menuBar = GetMenuBar();
wxMenuItem* item; wxMenuItem* item;
if( menuBar ) if( ! menuBar )
return; menuBar = new wxMenuBar();
menuBar = new wxMenuBar(); // Delete all existing menus so they can be rebuilt.
// This allows language changes of the menu text on the fly.
menuBar->Freeze();
while( menuBar->GetMenuCount() )
delete menuBar->Remove(0);
// Recreate all menus:
/* File menu */ /* File menu */
wxMenu* fileMenu = new wxMenu; wxMenu* fileMenu = new wxMenu;
...@@ -310,6 +316,11 @@ void WinEDA_ModuleEditFrame::ReCreateMenuBar() ...@@ -310,6 +316,11 @@ void WinEDA_ModuleEditFrame::ReCreateMenuBar()
menuBar->Append( placeMenu, _( "&Place" ) ); menuBar->Append( placeMenu, _( "&Place" ) );
menuBar->Append( helpMenu, _( "&Help" ) ); menuBar->Append( helpMenu, _( "&Help" ) );
/* Associate the menu bar with the frame */ menuBar->Thaw();
SetMenuBar( menuBar );
// Associate the menu bar with the frame, if no previous menubar
if( GetMenuBar() == NULL )
SetMenuBar( menuBar );
else
menuBar->Refresh();
} }
...@@ -23,16 +23,18 @@ void WinEDA_PcbFrame::ReCreateMenuBar() ...@@ -23,16 +23,18 @@ void WinEDA_PcbFrame::ReCreateMenuBar()
wxMenuItem* item; wxMenuItem* item;
wxMenuBar* menuBar = GetMenuBar(); wxMenuBar* menuBar = GetMenuBar();
/** if( ! menuBar )
* Destroy the existing menu bar so it can be rebuilt. This allows menuBar = new wxMenuBar();
* language changes of the menu text on the fly.
*/
if( menuBar )
SetMenuBar( NULL );
menuBar = new wxMenuBar();
// Delete all existing menus so they can be rebuilt.
// This allows language changes of the menu text on the fly.
menuBar->Freeze();
while( menuBar->GetMenuCount() )
delete menuBar->Remove(0);
/** Create File Menu */ // Recreate all menus:
// Create File Menu
wxMenu* filesMenu = new wxMenu; wxMenu* filesMenu = new wxMenu;
// New // New
...@@ -606,6 +608,11 @@ void WinEDA_PcbFrame::ReCreateMenuBar() ...@@ -606,6 +608,11 @@ void WinEDA_PcbFrame::ReCreateMenuBar()
menuBar->Append( designRulesMenu, _( "&Design Rules" ) ); menuBar->Append( designRulesMenu, _( "&Design Rules" ) );
menuBar->Append( helpMenu, _( "&Help" ) ); menuBar->Append( helpMenu, _( "&Help" ) );
/* Associate the menu bar with the frame */ menuBar->Thaw();
SetMenuBar( menuBar );
// Associate the menu bar with the frame, if no previous menubar
if( GetMenuBar() == NULL )
SetMenuBar( menuBar );
else
menuBar->Refresh();
} }
...@@ -163,9 +163,8 @@ void BOARD_PRINTOUT_CONTROLER::DrawPage() ...@@ -163,9 +163,8 @@ void BOARD_PRINTOUT_CONTROLER::DrawPage()
if( (m_PrintParams.m_PrintScale > 1.0) // scale > 1 -> Recadrage if( (m_PrintParams.m_PrintScale > 1.0) // scale > 1 -> Recadrage
|| (m_PrintParams.m_PrintScale == 0) ) // fit in page || (m_PrintParams.m_PrintScale == 0) ) // fit in page
{ {
DrawOffset.x += pcbframe->GetBoard()->m_BoundaryBox.Centre().x; DrawOffset += pcbframe->GetBoard()->m_BoundaryBox.Centre();
DrawOffset.y += pcbframe->GetBoard()->m_BoundaryBox.Centre().y; }
}
if( m_PrintParams.m_PageSetupData ) if( m_PrintParams.m_PageSetupData )
{ {
...@@ -258,6 +257,11 @@ void BOARD_PRINTOUT_CONTROLER::DrawPage() ...@@ -258,6 +257,11 @@ void BOARD_PRINTOUT_CONTROLER::DrawPage()
* the old draw area in the new draw area, because the draw origin has not moved * the old draw area in the new draw area, because the draw origin has not moved
* (this is the upper left corner) but the Y axis is reversed, therefore the plotting area * (this is the upper left corner) but the Y axis is reversed, therefore the plotting area
* is the y coordinate values from - PlotAreaSize.y to 0 */ * is the y coordinate values from - PlotAreaSize.y to 0 */
#ifdef USE_WX_ZOOM
int y_dc_offset = PlotAreaSizeInPixels.y;
y_dc_offset = (int) y_dc_offset * userscale;
dc->SetDeviceOrigin( 0, y_dc_offset );
#endif
int ysize = (int) ( PlotAreaSizeInPixels.y / sy ); int ysize = (int) ( PlotAreaSizeInPixels.y / sy );
DrawOffset.y += ysize; DrawOffset.y += ysize;
...@@ -271,7 +275,11 @@ void BOARD_PRINTOUT_CONTROLER::DrawPage() ...@@ -271,7 +275,11 @@ void BOARD_PRINTOUT_CONTROLER::DrawPage()
wxPoint pcb_centre = pcbframe->GetBoard()->m_BoundaryBox.Centre(); wxPoint pcb_centre = pcbframe->GetBoard()->m_BoundaryBox.Centre();
if( userscale <= 1.0 ) if( userscale <= 1.0 )
DrawOffset.y += pcb_centre.y - (ysize / 2); DrawOffset.y += pcb_centre.y - (ysize / 2);
#ifdef USE_WX_ZOOM
dc->SetLogicalOrigin( ActiveScreen->m_DrawOrg.x, ActiveScreen->m_DrawOrg.y );
#else
ActiveScreen->m_DrawOrg = DrawOffset; ActiveScreen->m_DrawOrg = DrawOffset;
#endif
panel->m_ClipBox.SetOrigin( wxPoint( -0x7FFFFF, -0x7FFFFF ) ); panel->m_ClipBox.SetOrigin( wxPoint( -0x7FFFFF, -0x7FFFFF ) );
} }
......
release version: release version:
2010 dec 10 (BZR testing 26xx) 2010 dec 18 (BZR testing 26xx)
files (.zip,.tgz): files (.zip,.tgz):
kicad-2010-12-10-testing kicad-2010-12-18-testing
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment