From 6ba9a512b6f4f7da039dd67e3fded0fa01e26236 Mon Sep 17 00:00:00 2001 From: John Beard Date: Tue, 7 Feb 2017 13:22:17 +0800 Subject: [PATCH] Factor DIALOG_BLOCK_OPTIONS into separate compilation unit This means the dialog can be accessed from both GAL and legacy modes. This also removes the use of static bools for passing the selection states and instead used a struct of values passed in by the calling code. --- pcbnew/CMakeLists.txt | 1 + pcbnew/block.cpp | 116 ++++-------------------- pcbnew/dialogs/dialog_block_options.cpp | 80 ++++++++++++++++ pcbnew/dialogs/dialog_block_options.h | 73 +++++++++++++++ 4 files changed, 170 insertions(+), 100 deletions(-) create mode 100644 pcbnew/dialogs/dialog_block_options.cpp create mode 100644 pcbnew/dialogs/dialog_block_options.h diff --git a/pcbnew/CMakeLists.txt b/pcbnew/CMakeLists.txt index 2b58842167..475e999a8f 100644 --- a/pcbnew/CMakeLists.txt +++ b/pcbnew/CMakeLists.txt @@ -51,6 +51,7 @@ include_directories( set( PCBNEW_DIALOGS dialogs/dialog_block_options_base.cpp + dialogs/dialog_block_options.cpp dialogs/dialog_cleaning_options_base.cpp dialogs/dialog_cleaning_options.cpp dialogs/dialog_copper_zones.cpp diff --git a/pcbnew/block.cpp b/pcbnew/block.cpp index 1ef9e819f8..adc74643a8 100644 --- a/pcbnew/block.cpp +++ b/pcbnew/block.cpp @@ -45,7 +45,7 @@ #include #include -#include +#include #include #include @@ -73,48 +73,7 @@ static void drawMovingBlock( EDA_DRAW_PANEL* aPanel, wxDC* aDC, const wxPoint& a bool aErase ); -static bool blockIncludeModules = true; -static bool blockIncludeLockedModules = true; -static bool blockIncludeTracks = true; -static bool blockIncludeZones = true; -static bool blockIncludeItemsOnTechLayers = true; -static bool blockIncludeBoardOutlineLayer = true; -static bool blockIncludePcbTexts = true; -static bool blockDrawItems = true; -static bool blockIncludeItemsOnInvisibleLayers = false; - - -/************************************/ -/* class DIALOG_BLOCK_OPTIONS */ -/************************************/ - -class DIALOG_BLOCK_OPTIONS : public DIALOG_BLOCK_OPTIONS_BASE -{ -private: - PCB_BASE_FRAME* m_Parent; - -public: - - DIALOG_BLOCK_OPTIONS( PCB_BASE_FRAME* parent, const wxString& title ); - ~DIALOG_BLOCK_OPTIONS() - { - } - - -private: - void ExecuteCommand( wxCommandEvent& event ) override; - void OnCancel( wxCommandEvent& event ) override - { - EndModal( wxID_CANCEL ); - } - void checkBoxClicked( wxCommandEvent& aEvent ) override - { - if( m_Include_Modules->GetValue() ) - m_IncludeLockedModules->Enable(); - else - m_IncludeLockedModules->Disable(); - } -}; +static DIALOG_BLOCK_OPTIONS::OPTIONS blockOpts; static bool InstallBlockCmdFrame( PCB_BASE_FRAME* parent, const wxString& title ) @@ -122,7 +81,7 @@ static bool InstallBlockCmdFrame( PCB_BASE_FRAME* parent, const wxString& title wxPoint oldpos = parent->GetCrossHairPosition(); parent->GetCanvas()->SetIgnoreMouseEvents( true ); - DIALOG_BLOCK_OPTIONS * dlg = new DIALOG_BLOCK_OPTIONS( parent, title ); + DIALOG_BLOCK_OPTIONS * dlg = new DIALOG_BLOCK_OPTIONS( parent, blockOpts, title ); int cmd = dlg->ShowModal(); dlg->Destroy(); @@ -135,49 +94,6 @@ static bool InstallBlockCmdFrame( PCB_BASE_FRAME* parent, const wxString& title } -DIALOG_BLOCK_OPTIONS::DIALOG_BLOCK_OPTIONS( PCB_BASE_FRAME* aParent, const wxString& aTitle ) : - DIALOG_BLOCK_OPTIONS_BASE( aParent, -1, aTitle ) -{ - m_Parent = aParent; - - m_Include_Modules->SetValue( blockIncludeModules ); - m_IncludeLockedModules->SetValue( blockIncludeLockedModules ); - - if( m_Include_Modules->GetValue() ) - m_IncludeLockedModules->Enable(); - else - m_IncludeLockedModules->Disable(); - - m_Include_Tracks->SetValue( blockIncludeTracks ); - m_Include_Zones->SetValue( blockIncludeZones ); - m_Include_Draw_Items->SetValue( blockIncludeItemsOnTechLayers ); - m_Include_Edges_Items->SetValue( blockIncludeBoardOutlineLayer ); - m_Include_PcbTextes->SetValue( blockIncludePcbTexts ); - m_DrawBlockItems->SetValue( blockDrawItems ); - m_checkBoxIncludeInvisible->SetValue( blockIncludeItemsOnInvisibleLayers ); - m_sdbSizer1OK->SetDefault(); - SetFocus(); - GetSizer()->SetSizeHints( this ); - Centre(); -} - - -void DIALOG_BLOCK_OPTIONS::ExecuteCommand( wxCommandEvent& event ) -{ - blockIncludeModules = m_Include_Modules->GetValue(); - blockIncludeLockedModules = m_IncludeLockedModules->GetValue(); - blockIncludeTracks = m_Include_Tracks->GetValue(); - blockIncludeZones = m_Include_Zones->GetValue(); - blockIncludeItemsOnTechLayers = m_Include_Draw_Items->GetValue(); - blockIncludeBoardOutlineLayer = m_Include_Edges_Items->GetValue(); - blockIncludePcbTexts = m_Include_PcbTextes->GetValue(); - blockDrawItems = m_DrawBlockItems->GetValue(); - blockIncludeItemsOnInvisibleLayers = m_checkBoxIncludeInvisible->GetValue(); - - EndModal( wxID_OK ); -} - - int PCB_EDIT_FRAME::BlockCommand( EDA_KEY aKey ) { int cmd = 0; @@ -397,16 +313,16 @@ void PCB_EDIT_FRAME::Block_SelectItems() ITEM_PICKER picker( NULL, UR_UNSPECIFIED ); // Add modules - if( blockIncludeModules ) + if( blockOpts.includeModules ) { for( MODULE* module = m_Pcb->m_Modules; module; module = module->Next() ) { LAYER_ID layer = module->GetLayer(); if( module->HitTest( GetScreen()->m_BlockLocate, selectOnlyComplete ) - && ( !module->IsLocked() || blockIncludeLockedModules ) ) + && ( !module->IsLocked() || blockOpts.includeLockedModules ) ) { - if( blockIncludeItemsOnInvisibleLayers || m_Pcb->IsModuleLayerVisible( layer ) ) + if( blockOpts.includeItemsOnInvisibleLayers || m_Pcb->IsModuleLayerVisible( layer ) ) { picker.SetItem ( module ); itemsList->PushItem( picker ); @@ -416,13 +332,13 @@ void PCB_EDIT_FRAME::Block_SelectItems() } // Add tracks and vias - if( blockIncludeTracks ) + if( blockOpts.includeTracks ) { for( TRACK* track = m_Pcb->m_Track; track != NULL; track = track->Next() ) { if( track->HitTest( GetScreen()->m_BlockLocate, selectOnlyComplete ) ) { - if( blockIncludeItemsOnInvisibleLayers + if( blockOpts.includeItemsOnInvisibleLayers || m_Pcb->IsLayerVisible( track->GetLayer() ) ) { picker.SetItem( track ); @@ -435,15 +351,15 @@ void PCB_EDIT_FRAME::Block_SelectItems() // Add graphic items layerMask = LSET( Edge_Cuts ); - if( blockIncludeItemsOnTechLayers ) + if( blockOpts.includeItemsOnTechLayers ) layerMask.set(); - if( !blockIncludeBoardOutlineLayer ) + if( !blockOpts.includeBoardOutlineLayer ) layerMask.set( Edge_Cuts, false ); for( BOARD_ITEM* PtStruct = m_Pcb->m_Drawings; PtStruct != NULL; PtStruct = PtStruct->Next() ) { - if( !m_Pcb->IsLayerVisible( PtStruct->GetLayer() ) && ! blockIncludeItemsOnInvisibleLayers) + if( !m_Pcb->IsLayerVisible( PtStruct->GetLayer() ) && ! blockOpts.includeItemsOnInvisibleLayers) continue; bool select_me = false; @@ -461,7 +377,7 @@ void PCB_EDIT_FRAME::Block_SelectItems() break; case PCB_TEXT_T: - if( !blockIncludePcbTexts ) + if( !blockOpts.includePcbTexts ) break; if( !PtStruct->HitTest( GetScreen()->m_BlockLocate, selectOnlyComplete ) ) @@ -502,7 +418,7 @@ void PCB_EDIT_FRAME::Block_SelectItems() } // Add zones - if( blockIncludeZones ) + if( blockOpts.includeZones ) { for( int ii = 0; ii < m_Pcb->GetAreaCount(); ii++ ) { @@ -510,7 +426,7 @@ void PCB_EDIT_FRAME::Block_SelectItems() if( area->HitTest( GetScreen()->m_BlockLocate, selectOnlyComplete ) ) { - if( blockIncludeItemsOnInvisibleLayers + if( blockOpts.includeItemsOnInvisibleLayers || m_Pcb->IsLayerVisible( area->GetLayer() ) ) { BOARD_ITEM* zone_c = (BOARD_ITEM*) area; @@ -582,7 +498,7 @@ static void drawMovingBlock( EDA_DRAW_PANEL* aPanel, wxDC* aDC, const wxPoint& a screen->m_BlockLocate.Draw( aPanel, aDC, screen->m_BlockLocate.GetMoveVector(), GR_XOR, BLOCK_OUTLINE_COLOR ); - if( blockDrawItems ) + if( blockOpts.drawItems ) drawPickedItems( aPanel, aDC, screen->m_BlockLocate.GetMoveVector() ); } } @@ -599,7 +515,7 @@ static void drawMovingBlock( EDA_DRAW_PANEL* aPanel, wxDC* aDC, const wxPoint& a screen->m_BlockLocate.Draw( aPanel, aDC, screen->m_BlockLocate.GetMoveVector(), GR_XOR, BLOCK_OUTLINE_COLOR ); - if( blockDrawItems ) + if( blockOpts.drawItems ) drawPickedItems( aPanel, aDC, screen->m_BlockLocate.GetMoveVector() ); } diff --git a/pcbnew/dialogs/dialog_block_options.cpp b/pcbnew/dialogs/dialog_block_options.cpp new file mode 100644 index 0000000000..594751d085 --- /dev/null +++ b/pcbnew/dialogs/dialog_block_options.cpp @@ -0,0 +1,80 @@ +/* + * This program source code file is part of KiCad, a free EDA CAD application. + * + * Copyright (C) 2017 KiCad Developers, see AUTHORS.txt for contributors. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, you may find one here: + * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html + * or you may search the http://www.gnu.org website for the version 2 license, + * or you may write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + */ + + +#include + +#include + + +DIALOG_BLOCK_OPTIONS::DIALOG_BLOCK_OPTIONS( PCB_BASE_FRAME* aParent, + OPTIONS& aOptions, const wxString& aTitle ) : + DIALOG_BLOCK_OPTIONS_BASE( aParent, -1, aTitle ), + m_options( aOptions ) +{ + m_Include_Modules->SetValue( m_options.includeModules ); + m_IncludeLockedModules->SetValue( m_options.includeLockedModules ); + + if( m_Include_Modules->GetValue() ) + m_IncludeLockedModules->Enable(); + else + m_IncludeLockedModules->Disable(); + + m_Include_Tracks->SetValue( m_options.includeTracks ); + m_Include_Zones->SetValue( m_options.includeZones ); + m_Include_Draw_Items->SetValue( m_options.includeItemsOnTechLayers ); + m_Include_Edges_Items->SetValue( m_options.includeBoardOutlineLayer ); + m_Include_PcbTextes->SetValue( m_options.includePcbTexts ); + m_DrawBlockItems->SetValue( m_options.drawItems ); + m_checkBoxIncludeInvisible->SetValue( m_options.includeItemsOnInvisibleLayers ); + + m_sdbSizer1OK->SetDefault(); + SetFocus(); + GetSizer()->SetSizeHints( this ); + Centre(); +} + + +void DIALOG_BLOCK_OPTIONS::checkBoxClicked( wxCommandEvent& aEvent ) +{ + if( m_Include_Modules->GetValue() ) + m_IncludeLockedModules->Enable(); + else + m_IncludeLockedModules->Disable(); +} + + +void DIALOG_BLOCK_OPTIONS::ExecuteCommand( wxCommandEvent& event ) +{ + m_options.includeModules = m_Include_Modules->GetValue(); + m_options.includeLockedModules = m_IncludeLockedModules->GetValue(); + m_options.includeTracks = m_Include_Tracks->GetValue(); + m_options.includeZones = m_Include_Zones->GetValue(); + m_options.includeItemsOnTechLayers = m_Include_Draw_Items->GetValue(); + m_options.includeBoardOutlineLayer = m_Include_Edges_Items->GetValue(); + m_options.includePcbTexts = m_Include_PcbTextes->GetValue(); + m_options.drawItems = m_DrawBlockItems->GetValue(); + m_options.includeItemsOnInvisibleLayers = m_checkBoxIncludeInvisible->GetValue(); + + EndModal( wxID_OK ); +} diff --git a/pcbnew/dialogs/dialog_block_options.h b/pcbnew/dialogs/dialog_block_options.h new file mode 100644 index 0000000000..0bc2276c66 --- /dev/null +++ b/pcbnew/dialogs/dialog_block_options.h @@ -0,0 +1,73 @@ +/* + * This program source code file is part of KiCad, a free EDA CAD application. + * + * Copyright (C) 1992-2017 KiCad Developers, see AUTHORS.txt for contributors. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, you may find one here: + * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html + * or you may search the http://www.gnu.org website for the version 2 license, + * or you may write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#ifndef DIALOG_BLOCK_OPTIONS_H_ +#define DIALOG_BLOCK_OPTIONS_H_ + +#include + +class PCB_BASE_FRAME; + +class DIALOG_BLOCK_OPTIONS : public DIALOG_BLOCK_OPTIONS_BASE +{ +public: + + /** + * Struct that will be set with the result of the user choices + * in the dialog + */ + struct OPTIONS + { + bool includeModules = true; + bool includeLockedModules = true; + bool includeTracks = true; + bool includeZones = true; + bool includeItemsOnTechLayers = true; + bool includeBoardOutlineLayer = true; + bool includePcbTexts = true; + bool drawItems = true; + bool includeItemsOnInvisibleLayers = false; + }; + + DIALOG_BLOCK_OPTIONS( PCB_BASE_FRAME* aParent, OPTIONS& aOptions, + const wxString& aTitle ); + + ~DIALOG_BLOCK_OPTIONS() + { + } + +private: + void ExecuteCommand( wxCommandEvent& event ) override; + + void OnCancel( wxCommandEvent& event ) override + { + EndModal( wxID_CANCEL ); + } + + void checkBoxClicked( wxCommandEvent& aEvent ) override; + + ///< Reference to the options struct to fill + OPTIONS& m_options; +}; + +#endif // DIALOG_EXCHANGE_MODULES_H_