diff --git a/gerbview/CMakeLists.txt b/gerbview/CMakeLists.txt index dc8442eb26..686129201c 100644 --- a/gerbview/CMakeLists.txt +++ b/gerbview/CMakeLists.txt @@ -33,7 +33,7 @@ set(GERBVIEW_SRCS dcode.cpp dummy_functions.cpp draw_gerber_screen.cpp - edit.cpp + events_called_functions.cpp export_to_pcbnew.cpp files.cpp gerbview.cpp @@ -43,6 +43,7 @@ set(GERBVIEW_SRCS initpcb.cpp locate.cpp menubar.cpp + onleftclick.cpp onrightclick.cpp options.cpp pcbplot.cpp diff --git a/gerbview/dcode.cpp b/gerbview/dcode.cpp index da329df607..c99b4fd26e 100644 --- a/gerbview/dcode.cpp +++ b/gerbview/dcode.cpp @@ -158,7 +158,7 @@ int GERBVIEW_FRAME::ReadDCodeDefinitionFile( const wxString& D_Code_FullFileName wxString msg; D_CODE* dcode; FILE* dest; - int layer = GetScreen()->m_Active_Layer; + int layer = getActiveLayer(); int type_outil; if( g_GERBER_List[layer] == NULL ) diff --git a/gerbview/draw_gerber_screen.cpp b/gerbview/draw_gerber_screen.cpp index 2910348719..18e06e930a 100644 --- a/gerbview/draw_gerber_screen.cpp +++ b/gerbview/draw_gerber_screen.cpp @@ -222,7 +222,7 @@ void BOARD::Draw( EDA_DRAW_PANEL* aPanel, wxDC* aDC, int aDrawMode, const wxPoin int dcode_highlight = 0; - if( layer == m_PcbFrame->GetScreen()->m_Active_Layer ) + if( layer == ((GERBVIEW_FRAME*)m_PcbFrame)->getActiveLayer() ) dcode_highlight = gerber->m_Selected_Tool; int layerdrawMode = GR_COPY; diff --git a/gerbview/edit.cpp b/gerbview/edit.cpp deleted file mode 100644 index 0cc0105af0..0000000000 --- a/gerbview/edit.cpp +++ /dev/null @@ -1,212 +0,0 @@ -/***************************************/ -/* edit.cpp: Gerbview events functions */ -/***************************************/ - -#include "fctsys.h" -#include "class_drawpanel.h" -#include "confirm.h" -#include "common.h" -#include "gestfich.h" -#include "appl_wxstruct.h" - -#include "gerbview.h" -#include "pcbplot.h" -#include "kicad_device_context.h" -#include "gerbview_id.h" -#include "class_GERBER.h" -#include "dialog_helpers.h" -#include "class_DCodeSelectionbox.h" - -/* Process the command triggered by the left button of the mouse when a tool - * is already selected. - */ -void GERBVIEW_FRAME::OnLeftClick( wxDC* DC, const wxPoint& aPosition ) -{ - BOARD_ITEM* DrawStruct = GetScreen()->GetCurItem(); - wxString msg; - - if( GetToolId() == ID_NO_TOOL_SELECTED ) - { - if( DrawStruct && DrawStruct->m_Flags ) - { - msg.Printf( wxT( "GERBVIEW_FRAME::ProcessCommand err: Struct %d, m_Flags = %X" ), - (unsigned) DrawStruct->Type(), - (unsigned) DrawStruct->m_Flags ); - DisplayError( this, msg ); - } - else - { - DrawStruct = Locate( aPosition, CURSEUR_OFF_GRILLE ); - GetScreen()->SetCurItem( DrawStruct ); - if( DrawStruct == NULL ) - { - GERBER_IMAGE* gerber = g_GERBER_List[getActiveLayer() ]; - if( gerber ) - gerber->DisplayImageInfo( ); - } - } - } - - switch( GetToolId() ) - { - case ID_NO_TOOL_SELECTED: - break; - - if( DrawStruct == NULL ) - break; - /* TODO: - Delete_Item( DC, (GERBER_DRAW_ITEM*) DrawStruct ); - GetScreen()->SetCurItem( NULL ); - GetScreen()->SetModify(); - */ - break; - - default: - DisplayError( this, wxT( "GERBVIEW_FRAME::ProcessCommand error" ) ); - break; - } -} - - -/* Handles the selection of tools, menu, and popup menu commands. - */ -void GERBVIEW_FRAME::Process_Special_Functions( wxCommandEvent& event ) -{ - int id = event.GetId(); - int layer = GetScreen()->m_Active_Layer; - GERBER_IMAGE* gerber_layer = g_GERBER_List[layer]; - wxPoint pos; - - wxGetMousePosition( &pos.x, &pos.y ); - - pos.y += 20; - - switch( id ) - { - case wxID_CUT: - case wxID_COPY: - case ID_POPUP_DELETE_BLOCK: - case ID_POPUP_PLACE_BLOCK: - case ID_POPUP_ZOOM_BLOCK: - break; - - case ID_POPUP_CANCEL_CURRENT_COMMAND: - DrawPanel->EndMouseCapture( ); - - /* Should not be executed, except bug */ - if( GetScreen()->m_BlockLocate.m_Command != BLOCK_IDLE ) - { - GetScreen()->m_BlockLocate.m_Command = BLOCK_IDLE; - GetScreen()->m_BlockLocate.m_State = STATE_NO_BLOCK; - GetScreen()->m_BlockLocate.ClearItemsList(); - } - - if( GetToolId() == ID_NO_TOOL_SELECTED ) - SetToolID( ID_NO_TOOL_SELECTED, DrawPanel->GetDefaultCursor(), wxEmptyString ); - else - DrawPanel->SetCursor( DrawPanel->GetDefaultCursor() ); - - break; - - default: - DrawPanel->EndMouseCapture( ); - break; - } - - INSTALL_UNBUFFERED_DC( dc, DrawPanel ); - - switch( id ) - { - case ID_EXIT: - Close( true ); - break; - - case ID_GERBVIEW_GLOBAL_DELETE: - Erase_Current_Layer( true ); - ClearMsgPanel(); - break; - - case ID_NO_TOOL_SELECTED: - SetToolID( ID_NO_TOOL_SELECTED, DrawPanel->GetDefaultCursor(), wxEmptyString ); - break; - - case ID_POPUP_CLOSE_CURRENT_TOOL: - SetToolID( ID_NO_TOOL_SELECTED, DrawPanel->GetDefaultCursor(), wxEmptyString ); - break; - - case ID_POPUP_CANCEL_CURRENT_COMMAND: - break; - - case ID_TOOLBARH_GERBVIEW_SELECT_LAYER: - { - int layer = getActiveLayer( ); - setActiveLayer(event.GetSelection()); - if( layer != getActiveLayer( ) ) - DrawPanel->ReDraw( &dc, false ); - } - break; - - case ID_TOOLBARH_GERBER_SELECT_TOOL: - if( gerber_layer ) - { - int tool = m_DCodeSelector->GetSelectedDCodeId(); - if( tool != gerber_layer->m_Selected_Tool ) - { - gerber_layer->m_Selected_Tool = tool; - DrawPanel->ReDraw( &dc, false ); - } - } - break; - - case ID_GERBVIEW_SHOW_LIST_DCODES: - Liste_D_Codes( ); - break; - - case ID_GERBVIEW_SHOW_SOURCE: - if( gerber_layer ) - { - wxString editorname = wxGetApp().GetEditorName(); - if( !editorname.IsEmpty() ) - { - wxFileName fn( gerber_layer->m_FileName ); - ExecuteFile( this, editorname, QuoteFullPath( fn ) ); - } - else - { - wxMessageBox(_("No editor defined. Please select one") ); - } - } - break; - - case ID_POPUP_PLACE_BLOCK: - GetScreen()->m_BlockLocate.m_Command = BLOCK_MOVE; - DrawPanel->m_AutoPAN_Request = FALSE; - HandleBlockPlace( &dc ); - break; - - case ID_POPUP_ZOOM_BLOCK: - GetScreen()->m_BlockLocate.m_Command = BLOCK_ZOOM; - GetScreen()->m_BlockLocate.SetMessageBlock( this ); - GetScreen()->m_BlockLocate.SetMessageBlock( this ); - HandleBlockEnd( &dc ); - break; - - case ID_POPUP_DELETE_BLOCK: - GetScreen()->m_BlockLocate.m_Command = BLOCK_DELETE; - GetScreen()->m_BlockLocate.SetMessageBlock( this ); - HandleBlockEnd( &dc ); - break; - - default: - wxMessageBox( wxT( "GERBVIEW_FRAME::Process_Special_Functions error" ) ); - break; - } -} - - -/* Called on a double click of left mouse button. - */ -void GERBVIEW_FRAME::OnLeftDClick( wxDC* DC, const wxPoint& aPosition ) -{ - // Currently: no nothing -} diff --git a/gerbview/events_called_functions.cpp b/gerbview/events_called_functions.cpp new file mode 100644 index 0000000000..f5eb6883dc --- /dev/null +++ b/gerbview/events_called_functions.cpp @@ -0,0 +1,294 @@ +/**********************************************************/ +/* events_called_functions.cpp: Gerbview events functions */ +/**********************************************************/ + +#include "fctsys.h" +#include "class_drawpanel.h" +#include "confirm.h" +#include "common.h" +#include "gestfich.h" +#include "appl_wxstruct.h" + +#include "gerbview.h" +#include "kicad_device_context.h" +#include "gerbview_id.h" +#include "class_GERBER.h" +#include "dialog_helpers.h" +#include "class_DCodeSelectionbox.h" + +// Event table: + +BEGIN_EVENT_TABLE( GERBVIEW_FRAME, PCB_BASE_FRAME ) +EVT_CLOSE( GERBVIEW_FRAME::OnCloseWindow ) +EVT_SIZE( GERBVIEW_FRAME::OnSize ) + +EVT_TOOL( wxID_FILE, GERBVIEW_FRAME::Files_io ) +EVT_TOOL( ID_INC_LAYER_AND_APPEND_FILE, GERBVIEW_FRAME::Files_io ) +EVT_TOOL( ID_GERBVIEW_LOAD_DRILL_FILE, GERBVIEW_FRAME::Files_io ) +EVT_TOOL( ID_GERBVIEW_LOAD_DCODE_FILE, GERBVIEW_FRAME::Files_io ) +EVT_TOOL( ID_NEW_BOARD, GERBVIEW_FRAME::Files_io ) + +// Menu Files: +EVT_MENU( wxID_FILE, GERBVIEW_FRAME::Files_io ) +EVT_MENU( ID_MENU_INC_LAYER_AND_APPEND_FILE, GERBVIEW_FRAME::Files_io ) +EVT_MENU( ID_NEW_BOARD, GERBVIEW_FRAME::Files_io ) +EVT_MENU( ID_GEN_PLOT, GERBVIEW_FRAME::ToPlotter ) +EVT_MENU( ID_GERBVIEW_EXPORT_TO_PCBNEW, GERBVIEW_FRAME::ExportDataInPcbnewFormat ) + +EVT_MENU_RANGE( wxID_FILE1, wxID_FILE9, GERBVIEW_FRAME::OnFileHistory ) + +EVT_MENU( ID_EXIT, GERBVIEW_FRAME::Process_Special_Functions ) + +// menu Preferences +EVT_MENU_RANGE( ID_PREFERENCES_HOTKEY_START, ID_PREFERENCES_HOTKEY_END, + GERBVIEW_FRAME::Process_Config ) + +EVT_MENU( ID_MENU_GERBVIEW_SHOW_HIDE_LAYERS_MANAGER_DIALOG, + GERBVIEW_FRAME::OnSelectOptionToolbar ) +EVT_MENU( ID_GERBVIEW_OPTIONS_SETUP, GERBVIEW_FRAME::InstallGerberOptionsDialog ) + +EVT_MENU_RANGE( ID_LANGUAGE_CHOICE, ID_LANGUAGE_CHOICE_END, EDA_DRAW_FRAME::SetLanguage ) + +// menu Postprocess +EVT_MENU( ID_GERBVIEW_SHOW_LIST_DCODES, GERBVIEW_FRAME::Process_Special_Functions ) +EVT_MENU( ID_GERBVIEW_SHOW_SOURCE, GERBVIEW_FRAME::OnShowGerberSourceFile ) +EVT_MENU( ID_MENU_GERBVIEW_SELECT_PREFERED_EDITOR, + EDA_BASE_FRAME::OnSelectPreferredEditor ) + +// menu Miscellaneous +EVT_MENU( ID_GERBVIEW_GLOBAL_DELETE, GERBVIEW_FRAME::Process_Special_Functions ) + +// Menu Help +EVT_MENU( ID_GENERAL_HELP, EDA_DRAW_FRAME::GetKicadHelp ) +EVT_MENU( ID_KICAD_ABOUT, EDA_DRAW_FRAME::GetKicadAbout ) + +EVT_TOOL( wxID_CUT, GERBVIEW_FRAME::Process_Special_Functions ) +EVT_TOOL( wxID_COPY, GERBVIEW_FRAME::Process_Special_Functions ) +EVT_TOOL( wxID_PASTE, GERBVIEW_FRAME::Process_Special_Functions ) +EVT_TOOL( wxID_UNDO, GERBVIEW_FRAME::Process_Special_Functions ) +EVT_TOOL( wxID_PRINT, GERBVIEW_FRAME::ToPrinter ) +EVT_TOOL( ID_FIND_ITEMS, GERBVIEW_FRAME::Process_Special_Functions ) +EVT_KICAD_CHOICEBOX( ID_TOOLBARH_GERBVIEW_SELECT_ACTIVE_LAYER, + GERBVIEW_FRAME::OnSelectActiveLayer ) + +EVT_SELECT_DCODE( ID_TOOLBARH_GERBER_SELECT_TOOL, + GERBVIEW_FRAME::Process_Special_Functions ) + +// Vertical toolbar: +EVT_TOOL( ID_NO_TOOL_SELECTED, GERBVIEW_FRAME::Process_Special_Functions ) + +EVT_MENU_RANGE( ID_POPUP_GENERAL_START_RANGE, ID_POPUP_GENERAL_END_RANGE, + GERBVIEW_FRAME::Process_Special_Functions ) + +// Option toolbar +EVT_TOOL( ID_TB_OPTIONS_SHOW_POLYGONS_SKETCH, + GERBVIEW_FRAME::OnSelectOptionToolbar ) +EVT_TOOL( ID_TB_OPTIONS_SHOW_FLASHED_ITEMS_SKETCH, GERBVIEW_FRAME::OnSelectOptionToolbar ) +EVT_TOOL( ID_TB_OPTIONS_SHOW_LINES_SKETCH, GERBVIEW_FRAME::OnSelectOptionToolbar ) +EVT_TOOL( ID_TB_OPTIONS_SHOW_LAYERS_MANAGER_VERTICAL_TOOLBAR, + GERBVIEW_FRAME::OnSelectOptionToolbar ) +EVT_TOOL( ID_TB_OPTIONS_SHOW_DCODES, GERBVIEW_FRAME::OnSelectOptionToolbar ) +EVT_TOOL_RANGE( ID_TB_OPTIONS_SHOW_GBR_MODE_0, ID_TB_OPTIONS_SHOW_GBR_MODE_2, + GERBVIEW_FRAME::OnSelectDisplayMode ) + +EVT_UPDATE_UI( ID_TB_OPTIONS_SHOW_FLASHED_ITEMS_SKETCH, + GERBVIEW_FRAME::OnUpdateFlashedItemsDrawMode ) +EVT_UPDATE_UI( ID_TB_OPTIONS_SHOW_LINES_SKETCH, GERBVIEW_FRAME::OnUpdateLinesDrawMode ) +EVT_UPDATE_UI( ID_TB_OPTIONS_SHOW_POLYGONS_SKETCH, + GERBVIEW_FRAME::OnUpdatePolygonsDrawMode ) +EVT_UPDATE_UI( ID_TB_OPTIONS_SHOW_DCODES, GERBVIEW_FRAME::OnUpdateShowDCodes ) +EVT_UPDATE_UI( ID_TB_OPTIONS_SHOW_LAYERS_MANAGER_VERTICAL_TOOLBAR, + GERBVIEW_FRAME::OnUpdateShowLayerManager ) + +EVT_UPDATE_UI( ID_TOOLBARH_GERBER_SELECT_TOOL, GERBVIEW_FRAME::OnUpdateSelectDCode ) +EVT_UPDATE_UI( ID_TOOLBARH_GERBVIEW_SELECT_ACTIVE_LAYER, GERBVIEW_FRAME::OnUpdateLayerSelectBox ) +EVT_UPDATE_UI_RANGE( ID_TB_OPTIONS_SHOW_GBR_MODE_0, ID_TB_OPTIONS_SHOW_GBR_MODE_2, + GERBVIEW_FRAME::OnUpdateDrawMode ) + +END_EVENT_TABLE() + +/* Handles the selection of tools, menu, and popup menu commands. + */ +void GERBVIEW_FRAME::Process_Special_Functions( wxCommandEvent& event ) +{ + int id = event.GetId(); + GERBER_IMAGE* gerber_layer = g_GERBER_List[getActiveLayer()]; + + switch( id ) + { + case wxID_CUT: + case wxID_COPY: + case ID_POPUP_DELETE_BLOCK: + case ID_POPUP_PLACE_BLOCK: + case ID_POPUP_ZOOM_BLOCK: + break; + + case ID_POPUP_CANCEL_CURRENT_COMMAND: + DrawPanel->EndMouseCapture(); + + /* Should not be executed, except bug */ + if( GetScreen()->m_BlockLocate.m_Command != BLOCK_IDLE ) + { + GetScreen()->m_BlockLocate.m_Command = BLOCK_IDLE; + GetScreen()->m_BlockLocate.m_State = STATE_NO_BLOCK; + GetScreen()->m_BlockLocate.ClearItemsList(); + } + + if( GetToolId() == ID_NO_TOOL_SELECTED ) + SetToolID( ID_NO_TOOL_SELECTED, DrawPanel->GetDefaultCursor(), wxEmptyString ); + else + DrawPanel->SetCursor( DrawPanel->GetDefaultCursor() ); + + break; + + default: + DrawPanel->EndMouseCapture(); + break; + } + + INSTALL_UNBUFFERED_DC( dc, DrawPanel ); + + switch( id ) + { + case ID_EXIT: + Close( true ); + break; + + case ID_GERBVIEW_GLOBAL_DELETE: + Erase_Current_Layer( true ); + ClearMsgPanel(); + break; + + case ID_NO_TOOL_SELECTED: + SetToolID( ID_NO_TOOL_SELECTED, DrawPanel->GetDefaultCursor(), wxEmptyString ); + break; + + case ID_POPUP_CLOSE_CURRENT_TOOL: + SetToolID( ID_NO_TOOL_SELECTED, DrawPanel->GetDefaultCursor(), wxEmptyString ); + break; + + case ID_POPUP_CANCEL_CURRENT_COMMAND: + break; + + case ID_TOOLBARH_GERBER_SELECT_TOOL: + if( gerber_layer ) + { + int tool = m_DCodeSelector->GetSelectedDCodeId(); + if( tool != gerber_layer->m_Selected_Tool ) + { + gerber_layer->m_Selected_Tool = tool; + DrawPanel->ReDraw( &dc, false ); + } + } + break; + + case ID_GERBVIEW_SHOW_LIST_DCODES: + Liste_D_Codes(); + break; + + case ID_POPUP_PLACE_BLOCK: + GetScreen()->m_BlockLocate.m_Command = BLOCK_MOVE; + DrawPanel->m_AutoPAN_Request = FALSE; + HandleBlockPlace( &dc ); + break; + + case ID_POPUP_ZOOM_BLOCK: + GetScreen()->m_BlockLocate.m_Command = BLOCK_ZOOM; + GetScreen()->m_BlockLocate.SetMessageBlock( this ); + GetScreen()->m_BlockLocate.SetMessageBlock( this ); + HandleBlockEnd( &dc ); + break; + + case ID_POPUP_DELETE_BLOCK: + GetScreen()->m_BlockLocate.m_Command = BLOCK_DELETE; + GetScreen()->m_BlockLocate.SetMessageBlock( this ); + HandleBlockEnd( &dc ); + break; + + default: + wxFAIL_MSG( wxT( "GERBVIEW_FRAME::Process_Special_Functions error" ) ); + break; + } +} + + +/* Selects the active layer: + * - if a file is loaded, it is loaded in this layer + * _ this layer is displayed on top of other layers + */ +void GERBVIEW_FRAME::OnSelectActiveLayer( wxCommandEvent& event ) +{ + int layer = getActiveLayer(); + + setActiveLayer( event.GetSelection() ); + if( layer != getActiveLayer() ) + DrawPanel->Refresh(); +} + + +/* Call preferred editor to show (and edit) the gerber source file + * loaded in the active layer + */ +void GERBVIEW_FRAME::OnShowGerberSourceFile( wxCommandEvent& event ) +{ + int layer = getActiveLayer(); + GERBER_IMAGE* gerber_layer = g_GERBER_List[layer]; + + if( gerber_layer ) + { + wxString editorname = wxGetApp().GetEditorName(); + if( !editorname.IsEmpty() ) + { + wxFileName fn( gerber_layer->m_FileName ); + ExecuteFile( this, editorname, QuoteFullPath( fn ) ); + } + else + { + wxMessageBox( _( "No editor defined. Please select one" ) ); + } + } +} + + +/* Function OnSelectDisplayMode: called to select display mode + * (fast display, or exact mode with stacked images or with transparency + */ +void GERBVIEW_FRAME::OnSelectDisplayMode( wxCommandEvent& event ) +{ + int oldMode = GetDisplayMode(); + + switch( event.GetId() ) + { + case ID_TB_OPTIONS_SHOW_GBR_MODE_0: + SetDisplayMode( 0 ); + break; + + case ID_TB_OPTIONS_SHOW_GBR_MODE_1: + SetDisplayMode( 1 ); + break; + + case ID_TB_OPTIONS_SHOW_GBR_MODE_2: + SetDisplayMode( 2 ); + break; + } + + if( GetDisplayMode() != oldMode ) + DrawPanel->Refresh(); +} + + +/** + * Function SetLanguage + * called on a language menu selection + * Update Layer manager title and tabs texts + */ +void GERBVIEW_FRAME::SetLanguage( wxCommandEvent& event ) +{ + EDA_DRAW_FRAME::SetLanguage( event ); + m_LayersManager->SetLayersManagerTabsText(); + wxAuiPaneInfo& pane_info = m_auimgr.GetPane( m_LayersManager ); + pane_info.Caption( _( "Visibles" ) ); + m_auimgr.Update(); + + ReFillLayerWidget(); +} diff --git a/gerbview/files.cpp b/gerbview/files.cpp index 01db40d633..20004ff8b8 100644 --- a/gerbview/files.cpp +++ b/gerbview/files.cpp @@ -9,6 +9,7 @@ #include "gestfich.h" #include "gerbview.h" +#include "gerbview_id.h" /* Load a Gerber file selected from history list on current layer diff --git a/gerbview/gerbview.cpp b/gerbview/gerbview.cpp index 99f2107cd1..4625284df1 100644 --- a/gerbview/gerbview.cpp +++ b/gerbview/gerbview.cpp @@ -119,13 +119,14 @@ bool WinEDA_App::OnInit() wxSetWorkingDirectory( fn.GetPath() ); // Load all files specified on the command line. + int jj = 0; for( int ii = 1; ii < argc && ii <= LAYER_COUNT; ++ii ) { fn = wxFileName( argv[ii] ); if( fn.FileExists() ) { - ( (PCB_SCREEN*) frame->GetScreen() )->m_Active_Layer = ii - 1; + frame->setActiveLayer( jj++ ); frame->LoadGerberFiles( fn.GetFullPath() ); } } diff --git a/gerbview/gerbview_config.cpp b/gerbview/gerbview_config.cpp index d593164354..5e1566d237 100644 --- a/gerbview/gerbview_config.cpp +++ b/gerbview/gerbview_config.cpp @@ -89,7 +89,7 @@ PARAM_CFG_ARRAY& GERBVIEW_FRAME::GetConfigurationSettings( void ) WHITE ) ); m_configSettings.push_back( new PARAM_CFG_BOOL( true, - wxT( "DisplayPolairCoordinates" ), + wxT( "DisplayPolarCoordinates" ), &DisplayOpt.DisplayPolarCood, false ) ); @@ -108,7 +108,7 @@ PARAM_CFG_ARRAY& GERBVIEW_FRAME::GetConfigurationSettings( void ) // List of keywords used as identifiers in config // they *must* be static const and not temporary created, - // because the parameter list that used these keywords does not store them, + // because the parameter list that use these keywords does not store them, // just points on them static const wxChar * keys[32] = { diff --git a/gerbview/gerbview_frame.cpp b/gerbview/gerbview_frame.cpp index 696d9de91c..67edf94f20 100644 --- a/gerbview/gerbview_frame.cpp +++ b/gerbview/gerbview_frame.cpp @@ -29,99 +29,6 @@ const wxString GerbviewShowDCodes( wxT( "ShowDCodesOpt" ) ); /* class GERBVIEW_FRAME for GerbView*/ /****************************************/ -BEGIN_EVENT_TABLE( GERBVIEW_FRAME, PCB_BASE_FRAME ) - EVT_CLOSE( GERBVIEW_FRAME::OnCloseWindow ) - EVT_SIZE( GERBVIEW_FRAME::OnSize ) - - EVT_TOOL( wxID_FILE, GERBVIEW_FRAME::Files_io ) - EVT_TOOL( ID_INC_LAYER_AND_APPEND_FILE, GERBVIEW_FRAME::Files_io ) - EVT_TOOL( ID_GERBVIEW_LOAD_DRILL_FILE, GERBVIEW_FRAME::Files_io ) - EVT_TOOL( ID_GERBVIEW_LOAD_DCODE_FILE, GERBVIEW_FRAME::Files_io ) - EVT_TOOL( ID_NEW_BOARD, GERBVIEW_FRAME::Files_io ) - - // Menu Files: - EVT_MENU( wxID_FILE, GERBVIEW_FRAME::Files_io ) - EVT_MENU( ID_MENU_INC_LAYER_AND_APPEND_FILE, GERBVIEW_FRAME::Files_io ) - EVT_MENU( ID_NEW_BOARD, GERBVIEW_FRAME::Files_io ) - EVT_MENU( ID_GEN_PLOT, GERBVIEW_FRAME::ToPlotter ) - EVT_MENU( ID_GERBVIEW_EXPORT_TO_PCBNEW, GERBVIEW_FRAME::ExportDataInPcbnewFormat ) - - EVT_MENU_RANGE( wxID_FILE1, wxID_FILE9, GERBVIEW_FRAME::OnFileHistory ) - - EVT_MENU( ID_EXIT, GERBVIEW_FRAME::Process_Special_Functions ) - - // menu Preferences - EVT_MENU_RANGE( ID_PREFERENCES_HOTKEY_START, ID_PREFERENCES_HOTKEY_END, - GERBVIEW_FRAME::Process_Config ) - - EVT_MENU( ID_MENU_GERBVIEW_SHOW_HIDE_LAYERS_MANAGER_DIALOG, - GERBVIEW_FRAME::OnSelectOptionToolbar ) - EVT_MENU( ID_GERBVIEW_OPTIONS_SETUP, GERBVIEW_FRAME::InstallGerberOptionsDialog ) - - EVT_MENU_RANGE( ID_LANGUAGE_CHOICE, ID_LANGUAGE_CHOICE_END, EDA_DRAW_FRAME::SetLanguage ) - - // menu Postprocess - EVT_MENU( ID_GERBVIEW_SHOW_LIST_DCODES, GERBVIEW_FRAME::Process_Special_Functions ) - EVT_MENU( ID_GERBVIEW_POPUP_DELETE_DCODE_ITEMS, GERBVIEW_FRAME::Process_Special_Functions ) - EVT_MENU( ID_GERBVIEW_SHOW_SOURCE, GERBVIEW_FRAME::Process_Special_Functions ) - EVT_MENU( ID_MENU_GERBVIEW_SELECT_PREFERED_EDITOR, - EDA_BASE_FRAME::OnSelectPreferredEditor ) - - // menu Miscellaneous - EVT_MENU( ID_GERBVIEW_GLOBAL_DELETE, GERBVIEW_FRAME::Process_Special_Functions ) - - // Menu Help - EVT_MENU( ID_GENERAL_HELP, EDA_DRAW_FRAME::GetKicadHelp ) - EVT_MENU( ID_KICAD_ABOUT, EDA_DRAW_FRAME::GetKicadAbout ) - - EVT_TOOL( wxID_CUT, GERBVIEW_FRAME::Process_Special_Functions ) - EVT_TOOL( wxID_COPY, GERBVIEW_FRAME::Process_Special_Functions ) - EVT_TOOL( wxID_PASTE, GERBVIEW_FRAME::Process_Special_Functions ) - EVT_TOOL( wxID_UNDO, GERBVIEW_FRAME::Process_Special_Functions ) - EVT_TOOL( wxID_PRINT, GERBVIEW_FRAME::ToPrinter ) - EVT_TOOL( ID_FIND_ITEMS, GERBVIEW_FRAME::Process_Special_Functions ) - EVT_KICAD_CHOICEBOX( ID_TOOLBARH_GERBVIEW_SELECT_LAYER, - GERBVIEW_FRAME::Process_Special_Functions ) - - EVT_SELECT_DCODE( ID_TOOLBARH_GERBER_SELECT_TOOL, - GERBVIEW_FRAME::Process_Special_Functions ) - - // Vertical toolbar: - EVT_TOOL( ID_NO_TOOL_SELECTED, GERBVIEW_FRAME::Process_Special_Functions ) - - EVT_MENU_RANGE( ID_POPUP_GENERAL_START_RANGE, ID_POPUP_GENERAL_END_RANGE, - GERBVIEW_FRAME::Process_Special_Functions ) - - // Pop up menu - EVT_MENU( ID_GERBVIEW_POPUP_DELETE_DCODE_ITEMS, GERBVIEW_FRAME::Process_Special_Functions ) - - // Option toolbar - EVT_TOOL( ID_TB_OPTIONS_SHOW_POLYGONS_SKETCH, - GERBVIEW_FRAME::OnSelectOptionToolbar ) - EVT_TOOL( ID_TB_OPTIONS_SHOW_FLASHED_ITEMS_SKETCH, GERBVIEW_FRAME::OnSelectOptionToolbar ) - EVT_TOOL( ID_TB_OPTIONS_SHOW_LINES_SKETCH, GERBVIEW_FRAME::OnSelectOptionToolbar ) - EVT_TOOL( ID_TB_OPTIONS_SHOW_LAYERS_MANAGER_VERTICAL_TOOLBAR, - GERBVIEW_FRAME::OnSelectOptionToolbar ) - EVT_TOOL( ID_TB_OPTIONS_SHOW_DCODES, GERBVIEW_FRAME::OnSelectOptionToolbar ) - EVT_TOOL_RANGE( ID_TB_OPTIONS_SHOW_GBR_MODE_0, ID_TB_OPTIONS_SHOW_GBR_MODE_2, - GERBVIEW_FRAME::OnSelectDisplayMode ) - - EVT_UPDATE_UI( ID_TB_OPTIONS_SHOW_FLASHED_ITEMS_SKETCH, - GERBVIEW_FRAME::OnUpdateFlashedItemsDrawMode ) - EVT_UPDATE_UI( ID_TB_OPTIONS_SHOW_LINES_SKETCH, GERBVIEW_FRAME::OnUpdateLinesDrawMode ) - EVT_UPDATE_UI( ID_TB_OPTIONS_SHOW_POLYGONS_SKETCH, - GERBVIEW_FRAME::OnUpdatePolygonsDrawMode ) - EVT_UPDATE_UI( ID_TB_OPTIONS_SHOW_DCODES, GERBVIEW_FRAME::OnUpdateShowDCodes ) - EVT_UPDATE_UI( ID_TB_OPTIONS_SHOW_LAYERS_MANAGER_VERTICAL_TOOLBAR, - GERBVIEW_FRAME::OnUpdateShowLayerManager ) - - EVT_UPDATE_UI( ID_TOOLBARH_GERBER_SELECT_TOOL, GERBVIEW_FRAME::OnUpdateSelectDCode ) - EVT_UPDATE_UI( ID_TOOLBARH_GERBVIEW_SELECT_LAYER, GERBVIEW_FRAME::OnUpdateLayerSelectBox ) - EVT_UPDATE_UI_RANGE( ID_TB_OPTIONS_SHOW_GBR_MODE_0, ID_TB_OPTIONS_SHOW_GBR_MODE_2, - GERBVIEW_FRAME::OnUpdateDrawMode ) - -END_EVENT_TABLE() - GERBVIEW_FRAME::GERBVIEW_FRAME( wxWindow* father, const wxString& title, @@ -463,23 +370,6 @@ void GERBVIEW_FRAME::syncLayerBox() } -/** - * Function SetLanguage - * called on a language menu selection - * Update Layer manager title and tabs texts - */ -void GERBVIEW_FRAME::SetLanguage( wxCommandEvent& event ) -{ - EDA_DRAW_FRAME::SetLanguage( event ); - m_LayersManager->SetLayersManagerTabsText(); - wxAuiPaneInfo& pane_info = m_auimgr.GetPane( m_LayersManager ); - pane_info.Caption( _( "Visibles" ) ); - m_auimgr.Update(); - - ReFillLayerWidget(); -} - - void GERBVIEW_FRAME::Liste_D_Codes() { int ii, jj; @@ -487,7 +377,7 @@ void GERBVIEW_FRAME::Liste_D_Codes() wxString Line; WinEDA_TextFrame* List; int scale = 10000; - int curr_layer = GetScreen()->m_Active_Layer; + int curr_layer = getActiveLayer(); List = new WinEDA_TextFrame( this, _( "List D codes" ) ); @@ -556,7 +446,7 @@ void GERBVIEW_FRAME::Liste_D_Codes() */ void GERBVIEW_FRAME::UpdateTitleAndInfo() { - GERBER_IMAGE* gerber = g_GERBER_List[ GetScreen()->m_Active_Layer ]; + GERBER_IMAGE* gerber = g_GERBER_List[ getActiveLayer() ]; wxString text; // Display the gerber filename @@ -565,7 +455,7 @@ void GERBVIEW_FRAME::UpdateTitleAndInfo() text = wxGetApp().GetAppName() + wxT( " " ) + GetBuildVersion(); SetTitle( text ); SetStatusText( wxEmptyString, 0 ); - text.Printf( _( "Layer %d not in use" ), GetScreen()->m_Active_Layer + 1 ); + text.Printf( _( "Layer %d not in use" ), getActiveLayer() + 1 ); m_TextInfo->SetValue( text ); ClearMsgPanel(); return; @@ -593,29 +483,3 @@ void GERBVIEW_FRAME::UpdateTitleAndInfo() m_TextInfo->SetValue( text ); } - -/* Function OnSelectDisplayMode: called to select display mode - * (fast display, or exact mode with stacked images or with transparency - */ -void GERBVIEW_FRAME::OnSelectDisplayMode( wxCommandEvent& event ) -{ - int oldMode = GetDisplayMode(); - - switch( event.GetId() ) - { - case ID_TB_OPTIONS_SHOW_GBR_MODE_0: - SetDisplayMode( 0 ); - break; - - case ID_TB_OPTIONS_SHOW_GBR_MODE_1: - SetDisplayMode( 1 ); - break; - - case ID_TB_OPTIONS_SHOW_GBR_MODE_2: - SetDisplayMode( 2 ); - break; - } - - if( GetDisplayMode() != oldMode ) - DrawPanel->Refresh(); -} diff --git a/gerbview/gerbview_frame.h b/gerbview/gerbview_frame.h index 6ac2b7bb4c..d2e1f3c156 100644 --- a/gerbview/gerbview_frame.h +++ b/gerbview/gerbview_frame.h @@ -16,27 +16,6 @@ #define NO_AVAILABLE_LAYERS -1 -/** - * Command IDs for the gerber file viewer. - * - * Please add IDs that are unique to the gerber file viewer here and not in the - * global id.h file. This will prevent the entire project from being rebuilt - * when adding new command to the gerber file viewer. - */ -enum id_gerbview_frm { - // A MenuItem ID of Zero does not work under Mac,first id = 1 - ID_GERBVIEW_SHOW_LIST_DCODES = 1, - ID_GERBVIEW_LOAD_DRILL_FILE, - ID_GERBVIEW_LOAD_DCODE_FILE, - ID_TOOLBARH_GERBER_SELECT_TOOL, - ID_MENU_INC_LAYER_AND_APPEND_FILE, - ID_INC_LAYER_AND_APPEND_FILE, - ID_GERBVIEW_SHOW_SOURCE, - ID_GERBVIEW_EXPORT_TO_PCBNEW, - ID_GERBVIEW_POPUP_DELETE_DCODE_ITEMS -}; - - class DCODE_SELECTION_BOX; @@ -81,6 +60,17 @@ public: GERBVIEW_FRAME( wxWindow* father, const wxString& title, void OnCloseWindow( wxCloseEvent& Event ); + // Virtual basic functions: + void RedrawActiveWindow( wxDC* DC, bool EraseBg ); + void ReCreateHToolbar(); + void ReCreateVToolbar(); + void ReCreateOptToolbar(); + void ReCreateMenuBar(); + void OnLeftClick( wxDC* DC, const wxPoint& MousePos ); + void OnLeftDClick( wxDC* DC, const wxPoint& MousePos ); + bool OnRightClick( const wxPoint& MousePos, wxMenu* PopMenu ); + int BestZoom(); + /** * Function ReportMessage * Add a message (a string) in message list @@ -287,17 +277,23 @@ public: GERBVIEW_FRAME( wxWindow* father, const wxString& title, virtual void SetLanguage( wxCommandEvent& event ); void Process_Special_Functions( wxCommandEvent& event ); - void RedrawActiveWindow( wxDC* DC, bool EraseBg ); - void ReCreateHToolbar(); - void ReCreateVToolbar(); - void ReCreateOptToolbar(); - void ReCreateMenuBar(); - void OnLeftClick( wxDC* DC, const wxPoint& MousePos ); - void OnLeftDClick( wxDC* DC, const wxPoint& MousePos ); - bool OnRightClick( const wxPoint& MousePos, wxMenu* PopMenu ); - int BestZoom(); void OnSelectOptionToolbar( wxCommandEvent& event ); + /** + * Function OnSelectActiveLayer + * Selects the active layer: + * - if a file is loaded, it is loaded in this layer + * _ this layer is displayed on top of other layers + */ + void OnSelectActiveLayer( wxCommandEvent& event ); + + /** + * Function OnShowGerberSourceFile + * Call the preferred editor to show (and edit) the gerber source file + * loaded in the active layer + */ + void OnShowGerberSourceFile( wxCommandEvent& event ); + /** * Function OnSelectDisplayMode * called on a display mode selection @@ -305,6 +301,7 @@ public: GERBVIEW_FRAME( wxWindow* father, const wxString& title, * or exact mode with stacked images or with transparency */ void OnSelectDisplayMode( wxCommandEvent& event ); + void OnHotKey( wxDC* DC, int hotkey, EDA_ITEM* DrawStruct ); GERBER_DRAW_ITEM* GerberGeneralLocateAndDisplay(); diff --git a/gerbview/gerbview_id.h b/gerbview/gerbview_id.h index 0fc7fe2eba..0d84250b7a 100644 --- a/gerbview/gerbview_id.h +++ b/gerbview/gerbview_id.h @@ -15,10 +15,19 @@ enum gerbview_ids { ID_MAIN_MENUBAR = ID_END_LIST, + ID_GERBVIEW_SHOW_LIST_DCODES = 1, + ID_GERBVIEW_LOAD_DRILL_FILE, + ID_GERBVIEW_LOAD_DCODE_FILE, + ID_TOOLBARH_GERBER_SELECT_TOOL, + ID_MENU_INC_LAYER_AND_APPEND_FILE, + ID_INC_LAYER_AND_APPEND_FILE, + ID_GERBVIEW_SHOW_SOURCE, + ID_GERBVIEW_EXPORT_TO_PCBNEW, + ID_MENU_GERBVIEW_SHOW_HIDE_LAYERS_MANAGER_DIALOG, ID_MENU_GERBVIEW_SELECT_PREFERED_EDITOR, - ID_TOOLBARH_GERBVIEW_SELECT_LAYER, + ID_TOOLBARH_GERBVIEW_SELECT_ACTIVE_LAYER, ID_GERBVIEW_GLOBAL_DELETE, ID_GERBVIEW_OPTIONS_SETUP, ID_TB_OPTIONS_SHOW_LAYERS_MANAGER_VERTICAL_TOOLBAR, diff --git a/gerbview/hotkeys.cpp b/gerbview/hotkeys.cpp index 8eae4a7bb0..b3d4f74928 100644 --- a/gerbview/hotkeys.cpp +++ b/gerbview/hotkeys.cpp @@ -4,10 +4,11 @@ #include "fctsys.h" #include "common.h" -#include "hotkeys.h" +#include "kicad_device_context.h" #include "gerbview.h" #include "class_drawpanel.h" +#include "hotkeys.h" /* How to add a new hotkey: * add a new id in the enum hotkey_id_commnand like MY_NEW_ID_FUNCTION. @@ -139,13 +140,19 @@ void GERBVIEW_FRAME::OnHotKey( wxDC* DC, int hotkey, EDA_ITEM* DrawStruct ) break; case HK_SWITCH_LAYER_TO_PREVIOUS: - if( ((PCB_SCREEN*)GetScreen())->m_Active_Layer > 0 ) - ((PCB_SCREEN*)GetScreen())->m_Active_Layer--; + if( getActiveLayer() > 0 ) + { + setActiveLayer( getActiveLayer() - 1 ); + DrawPanel->Refresh(); + } break; case HK_SWITCH_LAYER_TO_NEXT: - if( ((PCB_SCREEN*)GetScreen())->m_Active_Layer < 31 ) - ((PCB_SCREEN*)GetScreen())->m_Active_Layer++; + if( getActiveLayer() < 31 ) + { + setActiveLayer( getActiveLayer() + 1 ); + DrawPanel->Refresh(); + } break; } } diff --git a/gerbview/locate.cpp b/gerbview/locate.cpp index 56628805cd..d81deec9ce 100644 --- a/gerbview/locate.cpp +++ b/gerbview/locate.cpp @@ -19,7 +19,7 @@ GERBER_DRAW_ITEM* GERBVIEW_FRAME::Locate( const wxPoint& aPosition, int aTypeloc if( aTypeloc == CURSEUR_ON_GRILLE ) ref = GetScreen()->GetNearestGridPosition( ref ); - int layer = GetScreen()->m_Active_Layer; + int layer = getActiveLayer(); // Search first on active layer BOARD_ITEM* item = GetBoard()->m_Drawings; diff --git a/gerbview/onleftclick.cpp b/gerbview/onleftclick.cpp new file mode 100644 index 0000000000..9c11ee2b55 --- /dev/null +++ b/gerbview/onleftclick.cpp @@ -0,0 +1,69 @@ +/******************************************************************/ +/* onleftclick.cpp: functions called on left or double left click */ +/******************************************************************/ + +#include "fctsys.h" +#include "class_drawpanel.h" +#include "common.h" +//#include "gestfich.h" +//#include "appl_wxstruct.h" + +#include "gerbview.h" +//#include "pcbplot.h" +//#include "kicad_device_context.h" +#include "gerbview_id.h" +#include "class_GERBER.h" +#include "dialog_helpers.h" +#include "class_DCodeSelectionbox.h" + +/* Process the command triggered by the left button of the mouse when a tool + * is already selected. + */ +void GERBVIEW_FRAME::OnLeftClick( wxDC* DC, const wxPoint& aPosition ) +{ + BOARD_ITEM* DrawStruct = GetScreen()->GetCurItem(); + wxString msg; + + if( GetToolId() == ID_NO_TOOL_SELECTED ) + { + if( DrawStruct && DrawStruct->m_Flags ) + { + msg.Printf( wxT( "GERBVIEW_FRAME::OnLeftClick err: Struct %d, m_Flags = %X" ), + (unsigned) DrawStruct->Type(), + (unsigned) DrawStruct->m_Flags ); + wxFAIL_MSG( msg ); + } + else + { + DrawStruct = Locate( aPosition, CURSEUR_OFF_GRILLE ); + GetScreen()->SetCurItem( DrawStruct ); + if( DrawStruct == NULL ) + { + GERBER_IMAGE* gerber = g_GERBER_List[getActiveLayer() ]; + if( gerber ) + gerber->DisplayImageInfo( ); + } + } + } + + switch( GetToolId() ) + { + case ID_NO_TOOL_SELECTED: + break; + + if( DrawStruct == NULL ) + break; + + default: + wxFAIL_MSG( wxT( "GERBVIEW_FRAME::ProcessCommand error" ) ); + break; + } +} + + +/* Called on a double click of left mouse button. + */ +void GERBVIEW_FRAME::OnLeftDClick( wxDC* DC, const wxPoint& aPosition ) +{ + // Currently: no nothing +} diff --git a/gerbview/readgerb.cpp b/gerbview/readgerb.cpp index 2d65b78502..62be9d0216 100644 --- a/gerbview/readgerb.cpp +++ b/gerbview/readgerb.cpp @@ -26,7 +26,7 @@ bool GERBVIEW_FRAME::Read_GERBER_File( const wxString& GERBER_FullFileName, char* text; int layer; /* current layer used in gerbview */ - layer = GetScreen()->m_Active_Layer; + layer = getActiveLayer(); if( g_GERBER_List[layer] == NULL ) { diff --git a/gerbview/rs274d.cpp b/gerbview/rs274d.cpp index 8dad4727f6..fd447f35f0 100644 --- a/gerbview/rs274d.cpp +++ b/gerbview/rs274d.cpp @@ -570,7 +570,7 @@ bool GERBER_IMAGE::Execute_DCODE_Command( char*& text, int D_commande ) GERBER_DRAW_ITEM* gbritem; BOARD* pcb = m_Parent->GetBoard(); - int activeLayer = m_Parent->GetScreen()->m_Active_Layer; + int activeLayer = m_Parent->getActiveLayer(); int dcode = 0; D_CODE* tool = NULL; diff --git a/gerbview/toolbars_gerber.cpp b/gerbview/toolbars_gerber.cpp index 0438fadaa4..45682c492c 100644 --- a/gerbview/toolbars_gerber.cpp +++ b/gerbview/toolbars_gerber.cpp @@ -28,7 +28,7 @@ void GERBVIEW_FRAME::ReCreateHToolbar( void ) if( GetScreen() ) { - layer = GetScreen()->m_Active_Layer; + layer = getActiveLayer(); gerber = g_GERBER_List[layer]; } @@ -70,7 +70,7 @@ void GERBVIEW_FRAME::ReCreateHToolbar( void ) choices.Add( msg ); } - m_SelLayerBox = new WinEDALayerChoiceBox( m_HToolBar, ID_TOOLBARH_GERBVIEW_SELECT_LAYER, + m_SelLayerBox = new WinEDALayerChoiceBox( m_HToolBar, ID_TOOLBARH_GERBVIEW_SELECT_ACTIVE_LAYER, wxDefaultPosition, wxSize( 150, -1 ), choices ); m_HToolBar->AddControl( m_SelLayerBox ); @@ -260,7 +260,7 @@ void GERBVIEW_FRAME::OnUpdateShowLayerManager( wxUpdateUIEvent& aEvent ) void GERBVIEW_FRAME::OnUpdateSelectDCode( wxUpdateUIEvent& aEvent ) { - int layer = GetScreen()->m_Active_Layer; + int layer = getActiveLayer(); GERBER_IMAGE* gerber = g_GERBER_List[layer]; int selected = ( gerber ) ? gerber->m_Selected_Tool : 0; @@ -273,8 +273,8 @@ void GERBVIEW_FRAME::OnUpdateSelectDCode( wxUpdateUIEvent& aEvent ) void GERBVIEW_FRAME::OnUpdateLayerSelectBox( wxUpdateUIEvent& aEvent ) { - if( m_SelLayerBox && (m_SelLayerBox->GetSelection() != GetScreen()->m_Active_Layer) ) + if( m_SelLayerBox && (m_SelLayerBox->GetSelection() != getActiveLayer()) ) { - m_SelLayerBox->SetSelection( GetScreen()->m_Active_Layer ); + m_SelLayerBox->SetSelection( getActiveLayer() ); } }