Push a couple of layers of indirection out of grid settings.

This commit is contained in:
Jeff Young 2020-06-12 11:58:56 +01:00
parent 60915fbc76
commit f84406009b
66 changed files with 646 additions and 1978 deletions

View File

@ -92,7 +92,7 @@ PANEL_PREV_3D::PANEL_PREV_3D( wxWindow* aParent, PCB_BASE_FRAME* aFrame, MODULE*
// Create the manager
m_toolManager = new TOOL_MANAGER;
m_toolManager->SetEnvironment( m_dummyBoard, nullptr, nullptr, this );
m_toolManager->SetEnvironment( m_dummyBoard, nullptr, nullptr, nullptr, this );
m_actions = new EDA_3D_ACTIONS();
m_toolDispatcher = new TOOL_DISPATCHER( m_toolManager, m_actions );

View File

@ -121,7 +121,7 @@ EDA_3D_VIEWER::EDA_3D_VIEWER( KIWAY *aKiway, PCB_BASE_FRAME *aParent, const wxSt
// Create the manager
m_toolManager = new TOOL_MANAGER;
m_toolManager->SetEnvironment( GetBoard(), nullptr, nullptr, this );
m_toolManager->SetEnvironment( GetBoard(), nullptr, nullptr, config, this );
m_actions = new EDA_3D_ACTIONS();
m_toolDispatcher = new TOOL_DISPATCHER( m_toolManager, m_actions );

View File

@ -4,7 +4,7 @@
* Copyright (C) 2012 Jean-Pierre Charras, jean-pierre.charras@ujf-grenoble.fr
* Copyright (C) 2012 SoftPLC Corporation, Dick Hollenbeck <dick@softplc.com>
* Copyright (C) 2012 Wayne Stambaugh <stambaughw@gmail.com>
* Copyright (C) 1992-2018 KiCad Developers, see AUTHORS.txt for contributors.
* Copyright (C) 1992-2020 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
@ -24,20 +24,10 @@
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
*/
/**
* @file base_screen.cpp
* @brief BASE_SCREEN object implementation.
*/
#include <base_screen.h>
#include <base_struct.h>
#include <base_units.h>
#include <common.h>
#include <fctsys.h>
#include <id.h>
#include <math/util.h> // for KiROUND
#include <macros.h>
#include <trace_helpers.h>
@ -52,10 +42,7 @@ BASE_SCREEN::BASE_SCREEN( EDA_ITEM* aParent, KICAD_T aType ) :
m_ScreenNumber = 1;
m_NumberOfScreens = 1; // Hierarchy: Root: ScreenNumber = 1
m_Zoom = 32.0;
m_Grid.m_Size = wxRealPoint( 50, 50 ); // Default grid size
m_Grid.m_CmdId = ID_POPUP_GRID_LEVEL_50;
m_Center = true;
m_IsPrinting = false;
m_FlagModified = false; // Set when any change is made on board.
m_FlagSave = false; // Used in auto save set when an auto save is required.
@ -104,180 +91,6 @@ bool BASE_SCREEN::SetZoom( double iu_per_du )
}
int BASE_SCREEN::BuildGridsChoiceList( wxArrayString& aGridsList, bool aMmFirst) const
{
wxString msg;
wxRealPoint curr_grid_size = GetGridSize();
int idx = -1;
int idx_usergrid = -1;
for( size_t i = 0; i < GetGridCount(); i++ )
{
const GRID_TYPE& grid = m_grids[i];
double gridValueMils = To_User_Unit( EDA_UNITS::INCHES, grid.m_Size.x ) * 1000;
double gridValue_mm = To_User_Unit( EDA_UNITS::MILLIMETRES, grid.m_Size.x );
if( grid.m_CmdId == ID_POPUP_GRID_USER )
{
if( aMmFirst )
msg.Printf( _( "User grid: %.4f mm (%.2f mils)" ),
gridValue_mm, gridValueMils );
else
msg.Printf( _( "User grid: %.2f mils (%.4f mm)" ),
gridValueMils, gridValue_mm );
idx_usergrid = i;
}
else
{
if( aMmFirst )
msg.Printf( _( "Grid: %.4f mm (%.2f mils)" ),
gridValue_mm, gridValueMils );
else
msg.Printf( _( "Grid: %.2f mils (%.4f mm)" ),
gridValueMils, gridValue_mm );
}
aGridsList.Add( msg );
if( curr_grid_size == grid.m_Size )
idx = i;
}
if( idx < 0 )
idx = idx_usergrid;
return idx;
}
int BASE_SCREEN::SetGrid( const wxRealPoint& size )
{
wxASSERT( !m_grids.empty() );
GRID_TYPE nearest_grid = m_grids[0];
int gridIdx = 0;
for( GRID_TYPE& grid : m_grids )
{
if( grid.m_Size == size )
{
m_Grid = grid;
return grid.m_CmdId - ID_POPUP_GRID_LEVEL_1000;
}
// keep track of the nearest larger grid size, if the exact size is not found
if ( size.x < grid.m_Size.x )
{
gridIdx = grid.m_CmdId - ID_POPUP_GRID_LEVEL_1000;
nearest_grid = grid;
}
}
m_Grid = nearest_grid;
return gridIdx;
}
int BASE_SCREEN::SetGrid( int aCommandId )
{
wxASSERT( !m_grids.empty() );
for( GRID_TYPE& grid : m_grids )
{
if( grid.m_CmdId == aCommandId )
{
m_Grid = grid;
return grid.m_CmdId - ID_POPUP_GRID_LEVEL_1000;
}
}
m_Grid = m_grids[0];
return m_grids[0].m_CmdId - ID_POPUP_GRID_LEVEL_1000;
}
void BASE_SCREEN::AddGrid( const GRID_TYPE& aGrid )
{
for( GRID_TYPE& existing : m_grids )
{
if( existing.m_Size == aGrid.m_Size && aGrid.m_CmdId != ID_POPUP_GRID_USER )
{
wxLogTrace( traceScreen, "Discarding duplicate grid size( %g, %g ).",
aGrid.m_Size.x, aGrid.m_Size.y );
return;
}
if( existing.m_CmdId == aGrid.m_CmdId )
{
wxLogTrace( traceScreen, wxT( "Changing grid ID %d from size( %g, %g ) to " ) \
wxT( "size( %g, %g )." ),
aGrid.m_CmdId, existing.m_Size.x,
existing.m_Size.y, aGrid.m_Size.x, aGrid.m_Size.y );
existing.m_Size = aGrid.m_Size;
return;
}
}
m_grids.push_back( aGrid );
}
void BASE_SCREEN::AddGrid( const wxRealPoint& size, EDA_UNITS aUnit, int id )
{
wxRealPoint new_size;
GRID_TYPE new_grid;
new_size.x = From_User_Unit( aUnit, size.x );
new_size.y = From_User_Unit( aUnit, size.y );
new_grid.m_CmdId = id;
new_grid.m_Size = new_size;
AddGrid( new_grid );
}
GRID_TYPE& BASE_SCREEN::GetGrid( size_t aIndex )
{
wxCHECK_MSG( !m_grids.empty() && aIndex < m_grids.size(), m_Grid,
wxT( "Cannot get grid object outside the bounds of the grid list." ) );
return m_grids[ aIndex ];
}
bool BASE_SCREEN::GridExists( int aCommandId )
{
// tests for grid command ID (not an index in grid list, but a wxID) exists in grid list.
for( GRID_TYPE& grid : m_grids)
{
if( grid.m_CmdId == aCommandId )
return true;
}
return false;
}
wxPoint BASE_SCREEN::getNearestGridPosition( const wxPoint& aPosition,
const wxPoint& aGridOrigin ) const
{
wxPoint pt;
wxRealPoint gridSize = GetGridSize();
double offset = fmod( aGridOrigin.x, gridSize.x );
int x = KiROUND( (aPosition.x - offset) / gridSize.x );
pt.x = KiROUND( x * gridSize.x + offset );
offset = fmod( aGridOrigin.y, gridSize.y );
int y = KiROUND( (aPosition.y - offset) / gridSize.y );
pt.y = KiROUND ( y * gridSize.y + offset );
return pt;
}
void BASE_SCREEN::ClearUndoRedoList()
{
ClearUndoORRedoList( m_UndoList );
@ -334,13 +147,6 @@ void BASE_SCREEN::Show( int nestLevel, std::ostream& os ) const
// for now, make it look like XML, expand on this later.
NestedSpace( nestLevel, os ) << '<' << GetClass().Lower().mb_str() << ">\n";
/* this class will eventually go away, but here's a place holder until then.
for( EDA_ITEM* item = m_drawList; item; item = item->Next() )
{
item->Show( nestLevel+1, os );
}
*/
NestedSpace( nestLevel, os ) << "</" << GetClass().Lower().mb_str() << ">\n";
}

View File

@ -367,7 +367,9 @@ bool EDA_DRAW_PANEL_GAL::SwitchBackend( GAL_TYPE aGalType )
if( aGalType == m_backend && m_gal != NULL )
return true;
bool result = true; // assume everything will be fine
VECTOR2D grid_size = m_gal ? m_gal->GetGridSize() : VECTOR2D();
bool grid_visibility = m_gal ? m_gal->GetGridVisibility() : true;
bool result = true; // assume everything will be fine
// Prevent refreshing canvas during backend switch
StopDrawing();
@ -437,6 +439,11 @@ bool EDA_DRAW_PANEL_GAL::SwitchBackend( GAL_TYPE aGalType )
clientSize.y = std::max( 10, clientSize.y );
m_gal->ResizeScreen( clientSize.GetX(), clientSize.GetY() );
if( grid_size.x > 0 && grid_size.y > 0 )
m_gal->SetGridSize( grid_size );
m_gal->SetGridVisibility( grid_visibility );
if( m_painter )
m_painter->SetGAL( m_gal );

View File

@ -3,7 +3,7 @@
*
* Copyright (C) 2004-2017 Jean-Pierre Charras, jp.charras at wanadoo.fr
* Copyright (C) 2008 Wayne Stambaugh <stambaughw@gmail.com>
* Copyright (C) 2004-2019 KiCad Developers, see AUTHORS.txt for contributors.
* Copyright (C) 2004-2020 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
@ -26,7 +26,6 @@
#include <base_screen.h>
#include <bitmaps.h>
#include <confirm.h>
#include <dialog_helpers.h>
#include <dialog_shim.h>
#include <eda_draw_frame.h>
#include <fctsys.h>
@ -82,8 +81,6 @@ EDA_DRAW_FRAME::EDA_DRAW_FRAME( KIWAY* aKiway, wxWindow* aParent, FRAME_T aFrame
m_messagePanel = NULL;
m_currentScreen = NULL;
m_showBorderAndTitleBlock = false; // true to display reference sheet.
m_LastGridSizeId = 0;
m_drawGrid = true; // hide/Show grid. default = show
m_gridColor = COLOR4D( DARKGRAY ); // Default grid color
m_showPageLimits = false;
m_drawBgColor = COLOR4D( BLACK ); // the background color of the draw canvas:
@ -242,19 +239,10 @@ void EDA_DRAW_FRAME::OnUpdateSelectGrid( wxUpdateUIEvent& aEvent )
if( m_gridSelectBox == NULL )
return;
int select = wxNOT_FOUND;
int idx = config()->m_Window.grid.last_size_idx;
for( size_t i = 0; i < GetScreen()->GetGridCount(); i++ )
{
if( GetScreen()->GetGridCmdId() == GetScreen()->GetGrid( i ).m_CmdId )
{
select = (int) i;
break;
}
}
if( select != m_gridSelectBox->GetSelection() )
m_gridSelectBox->SetSelection( select );
if( idx >= 0 && idx < m_gridSelectBox->GetCount() && idx != m_gridSelectBox->GetSelection() )
m_gridSelectBox->SetSelection( idx );
}
@ -271,28 +259,28 @@ void EDA_DRAW_FRAME::OnSelectGrid( wxCommandEvent& event )
{
wxCHECK_RET( m_gridSelectBox, "m_gridSelectBox uninitialized" );
int id = m_gridSelectBox->GetCurrentSelection() + ID_POPUP_GRID_FIRST;
int idx = m_gridSelectBox->GetCurrentSelection();
if( id == ID_POPUP_GRID_SEPARATOR )
if( idx == m_gridSelectBox->GetCount() - 2 )
{
// wxWidgets will check the separator, which we don't want.
// Re-check the current grid.
wxUpdateUIEvent dummy;
OnUpdateSelectGrid( dummy );
}
else if( id == ID_POPUP_GRID_SETTINGS )
else if( idx == m_gridSelectBox->GetCount() - 1 )
{
// wxWidgets will check the Grid Settings... entry, which we don't want.
// R-check the current grid.
// Re-check the current grid.
wxUpdateUIEvent dummy;
OnUpdateSelectGrid( dummy );
// Now run the Grid Settings... dialog
wxCommandEvent dummy2;
OnGridSettings( dummy2 );
}
else if( id >= ID_POPUP_GRID_FIRST && id < ID_POPUP_GRID_SEPARATOR )
else
{
m_toolManager->RunAction( ACTIONS::gridPreset, true, id - ID_POPUP_GRID_FIRST );
m_toolManager->RunAction( ACTIONS::gridPreset, true, idx );
}
UpdateStatusBar();
@ -300,6 +288,32 @@ void EDA_DRAW_FRAME::OnSelectGrid( wxCommandEvent& event )
}
bool EDA_DRAW_FRAME::IsGridVisible() const
{
return config()->m_Window.grid.show;
}
void EDA_DRAW_FRAME::SetGridVisibility( bool aVisible )
{
config()->m_Window.grid.show = aVisible;
// Update the display with the new grid
if( GetCanvas() )
{
// Check to ensure these exist, since this function could be called before
// the GAL and View have been created
if( GetCanvas()->GetGAL() )
GetCanvas()->GetGAL()->SetGridVisibility( aVisible );
if( GetCanvas()->GetView() )
GetCanvas()->GetView()->MarkTargetDirty( KIGFX::TARGET_NONCACHED );
GetCanvas()->Refresh();
}
}
void EDA_DRAW_FRAME::InitExitKey()
{
wxAcceleratorEntry entries[1];
@ -392,21 +406,12 @@ void EDA_DRAW_FRAME::DisplayGridMsg()
switch( m_userUnits )
{
case EDA_UNITS::INCHES:
gridformatter = "grid %.3f";
break;
case EDA_UNITS::MILLIMETRES:
gridformatter = "grid %.4f";
break;
default:
gridformatter = "grid %f";
break;
case EDA_UNITS::INCHES: gridformatter = "grid %.3f"; break;
case EDA_UNITS::MILLIMETRES: gridformatter = "grid %.4f"; break;
default: gridformatter = "grid %f"; break;
}
wxRealPoint curr_grid_size = GetScreen()->GetGridSize();
double grid = To_User_Unit( m_userUnits, curr_grid_size.x );
double grid = To_User_Unit( m_userUnits, GetCanvas()->GetGAL()->GetGridSize().x );
line.Printf( gridformatter, grid );
SetStatusText( line, 4 );
@ -419,13 +424,9 @@ void EDA_DRAW_FRAME::DisplayUnitsMsg()
switch( m_userUnits )
{
case EDA_UNITS::INCHES:
msg = _( "Inches" );
break;
case EDA_UNITS::MILLIMETRES:
msg = _( "mm" );
break;
default: msg = _( "Units" ); break;
case EDA_UNITS::INCHES: msg = _( "Inches" ); break;
case EDA_UNITS::MILLIMETRES: msg = _( "mm" ); break;
default: msg = _( "Units" ); break;
}
SetStatusText( msg, 5 );
@ -470,15 +471,6 @@ void EDA_DRAW_FRAME::LoadSettings( APP_SETTINGS_BASE* aCfg )
// Read units used in dialogs and toolbars
SetUserUnits( static_cast<EDA_UNITS>( aCfg->m_System.units ) );
// Read show/hide grid entry
SetGridVisibility( window->grid.show );
m_LastGridSizeId = window->grid.last_size;
// m_LastGridSizeId is an offset, expected to be >= 0
if( m_LastGridSizeId < 0 )
m_LastGridSizeId = 0;
m_UndoRedoCountMax = aCfg->m_System.max_undo_items;
m_firstRunDialogSetting = aCfg->m_System.first_run_shown;
@ -505,9 +497,6 @@ void EDA_DRAW_FRAME::SaveSettings( APP_SETTINGS_BASE* aCfg )
aCfg->m_System.units = static_cast<int>( m_userUnits );
aCfg->m_System.first_run_shown = m_firstRunDialogSetting;
window->grid.show = IsGridVisible();
window->grid.last_size = m_LastGridSizeId;
if( GetScreen() )
aCfg->m_System.max_undo_items = GetScreen()->GetMaxUndoItems();
@ -660,14 +649,20 @@ bool EDA_DRAW_FRAME::saveCanvasTypeSetting( EDA_DRAW_PANEL_GAL::GAL_TYPE aCanvas
return false;
}
//-----< BASE_SCREEN API moved here >--------------------------------------------
wxPoint EDA_DRAW_FRAME::GetNearestGridPosition( const wxPoint& aPosition ) const
{
return GetScreen()->getNearestGridPosition( aPosition, GetGridOrigin() );
const wxPoint& gridOrigin = GetGridOrigin();
VECTOR2D gridSize = GetCanvas()->GetGAL()->GetGridSize();
double xOffset = fmod( gridOrigin.x, gridSize.x );
int x = KiROUND( (aPosition.x - xOffset) / gridSize.x );
double yOffset = fmod( gridOrigin.y, gridSize.y );
int y = KiROUND( (aPosition.y - yOffset) / gridSize.y );
return wxPoint( KiROUND( x * gridSize.x + xOffset ), KiROUND( y * gridSize.y + yOffset ) );
}
//-----</BASE_SCREEN API moved here >--------------------------------------------
const BOX2I EDA_DRAW_FRAME::GetDocumentExtents() const
{

View File

@ -26,13 +26,12 @@
#include <settings/common_settings.h>
#include <settings/parameters.h>
///! Update the schema version whenever a migration is required
const int appSettingsSchemaVersion = 0;
APP_SETTINGS_BASE::APP_SETTINGS_BASE( std::string aFilename, int aSchemaVersion ) :
JSON_SETTINGS( std::move( aFilename ), SETTINGS_LOC::USER, aSchemaVersion ),
APP_SETTINGS_BASE::APP_SETTINGS_BASE( const std::string& aFilename, int aSchemaVersion ) :
JSON_SETTINGS( aFilename, SETTINGS_LOC::USER, aSchemaVersion ),
m_Printing(), m_System(), m_Window(), m_appSettingsSchemaVersion( aSchemaVersion )
{
// Make Coverity happy:
@ -211,6 +210,19 @@ bool APP_SETTINGS_BASE::migrateWindowConfig( wxConfigBase* aCfg, const std::stri
ret &= fromLegacy<int>( aCfg,
aFrame + "_LastGridSize", aJsonPath + ".grid.last_size" );
#if defined( PCBNEW )
double x, y;
if( aCfg->Read( aFrame + "PcbUserGrid_X", &x ) && aCfg->Read( aFrame + "PcbUserGrid_Y", &y ) )
{
EDA_UNITS u = (EDA_UNITS)aCfg->Read( aFrame + "PcbUserGrid_Unit", (int)EDA_UNITS::INCHES );
( *this )[PointerFromString( ".grid.user_grid_x" )] = StringFromValue( u, x, true, true );
( *this )[PointerFromString( ".grid.user_grid_y" )] = StringFromValue( u, y, true, true );
}
#endif
ret &= fromLegacy<bool>( aCfg,
aFrame + gd + "GridAxesEnabled", aJsonPath + ".grid.axes_enabled" );
ret &= fromLegacy<double>( aCfg,
@ -227,17 +239,18 @@ bool APP_SETTINGS_BASE::migrateWindowConfig( wxConfigBase* aCfg, const std::stri
void APP_SETTINGS_BASE::addParamsForWindow( WINDOW_SETTINGS* aWindow, const std::string& aJsonPath )
{
m_params.emplace_back(
new PARAM<bool>( aJsonPath + ".maximized", &aWindow->maximized, false ) );
m_params.emplace_back( new PARAM<bool>( aJsonPath + ".maximized",
&aWindow->maximized, false ) );
m_params.emplace_back( new PARAM<wxString>( aJsonPath + ".mru_path", &aWindow->mru_path, "" ) );
m_params.emplace_back( new PARAM<wxString>( aJsonPath + ".mru_path",
&aWindow->mru_path, "" ) );
m_params.emplace_back( new PARAM<int>( aJsonPath + ".size_x", &aWindow->size_x, 0 ) );
m_params.emplace_back( new PARAM<int>( aJsonPath + ".size_y", &aWindow->size_y, 0 ) );
m_params.emplace_back(
new PARAM<wxString>( aJsonPath + ".perspective", &aWindow->perspective, "" ) );
m_params.emplace_back( new PARAM<wxString>( aJsonPath + ".perspective",
&aWindow->perspective, "" ) );
m_params.emplace_back( new PARAM<int>( aJsonPath + ".pos_x", &aWindow->pos_x, 0 ) );
@ -246,18 +259,28 @@ void APP_SETTINGS_BASE::addParamsForWindow( WINDOW_SETTINGS* aWindow, const std:
m_params.emplace_back( new PARAM<bool>( aJsonPath + ".grid.axes_enabled",
&aWindow->grid.axes_enabled, false ) );
m_params.emplace_back(
new PARAM<int>( aJsonPath + ".grid.last_size", &aWindow->grid.last_size, 0 ) );
m_params.emplace_back( new PARAM<int>( aJsonPath + ".grid.last_size",
&aWindow->grid.last_size_idx, 0 ) );
m_params.emplace_back(
new PARAM<double>( aJsonPath + ".grid.line_width", &aWindow->grid.line_width, 1.0 ) );
m_params.emplace_back( new PARAM_LIST<wxString>( aJsonPath + ".grid.sizes",
&aWindow->grid.sizes, {} ) );
m_params.emplace_back(
new PARAM<double>( aJsonPath + ".grid.min_spacing", &aWindow->grid.min_spacing, 10 ) );
m_params.emplace_back( new PARAM<wxString>( aJsonPath + ".grid.user_grid_x",
&aWindow->grid.user_grid_x, "12.5 mil" ) );
m_params.emplace_back( new PARAM<wxString>( aJsonPath + ".grid.user_grid_x",
&aWindow->grid.user_grid_x, "12.5 mil" ) );
m_params.emplace_back( new PARAM<bool>( aJsonPath + ".grid.show", &aWindow->grid.show, true ) );
m_params.emplace_back( new PARAM<double>( aJsonPath + ".grid.line_width",
&aWindow->grid.line_width, 1.0 ) );
m_params.emplace_back( new PARAM<int>( aJsonPath + ".grid.style", &aWindow->grid.style, 0 ) );
m_params.emplace_back( new PARAM<double>( aJsonPath + ".grid.min_spacing",
&aWindow->grid.min_spacing, 10 ) );
m_params.emplace_back( new PARAM<bool>( aJsonPath + ".grid.show",
&aWindow->grid.show, true ) );
m_params.emplace_back( new PARAM<int>( aJsonPath + ".grid.style",
&aWindow->grid.style, 0 ) );
m_params.emplace_back( new PARAM<bool>( aJsonPath + ".cursor.always_show_cursor",
&aWindow->cursor.always_show_cursor, true ) );

View File

@ -30,16 +30,30 @@
#include <view/view.h>
#include <view/view_controls.h>
#include <gal/graphics_abstraction_layer.h>
#include <settings/app_settings.h>
#include <base_screen.h>
#include <tool/common_tools.h>
#include <id.h>
#include <project.h>
#include <kiface_i.h>
#include <dialog_configure_paths.h>
#include <base_units.h>
void COMMON_TOOLS::Reset( RESET_REASON aReason )
{
m_frame = getEditFrame<EDA_DRAW_FRAME>();
m_grids.clear();
for( const wxString& gridDef : m_toolMgr->GetSettings()->m_Window.grid.sizes )
{
int gridSize = (int) ValueFromString( EDA_UNITS::MILLIMETRES, gridDef, true );
m_grids.emplace_back( gridSize, gridSize );
}
if( aReason == GAL_SWITCH )
OnGridChanged();
}
@ -62,7 +76,7 @@ int COMMON_TOOLS::CursorControl( const TOOL_EVENT& aEvent )
bool mirroredX = getView()->IsMirroredX();
VECTOR2D cursor = getViewControls()->GetRawCursorPosition( false );
VECTOR2I gridSize = VECTOR2D( m_frame->GetScreen()->GetGridSize() );
VECTOR2D gridSize = getView()->GetGAL()->GetGridSize();
if( fastMove )
gridSize = gridSize * 10;
@ -125,7 +139,7 @@ int COMMON_TOOLS::PanControl( const TOOL_EVENT& aEvent )
long type = aEvent.Parameter<intptr_t>();
KIGFX::VIEW* view = getView();
VECTOR2D center = view->GetCenter();
VECTOR2I gridSize = VECTOR2D( m_frame->GetScreen()->GetGridSize() ) * 10;
VECTOR2D gridSize = getView()->GetGAL()->GetGridSize() * 10;
bool mirroredX = view->IsMirroredX();
switch( type )
@ -336,56 +350,26 @@ int COMMON_TOOLS::doZoomToPreset( int idx, bool aCenterOnCursor )
}
/**
* Advance a BASE_SCREEN's grid forwards or backwards by the given offset and
* return the cmd ID of that grid (doesn't change the grid).
*
* This works even if the base screen's grid do not have consecutive command IDs.
*
* @param aScreen the base screen to use
* @param aOffset how many grids to advance by (negative to go backwards)
* @return the cmd ID of the requested grid, or empty if it can't be found
*/
static OPT<int> getNextPreviousGrid( const BASE_SCREEN& aScreen, int aOffset )
{
const GRIDS& grids = aScreen.GetGrids();
const GRID_TYPE& currGrid = aScreen.GetGrid();
auto iter = std::find_if( grids.begin(), grids.end(),
[&]( const GRID_TYPE& aCandidate ) { return aCandidate.m_CmdId == currGrid.m_CmdId; } );
wxCHECK_MSG( iter != grids.end(), {}, "Grid not found in screen's grid list" );
int index = std::distance( grids.begin(), iter ) + aOffset;
// If we go off the end, return invalid, but we could also wrap around if wanted.
if( index < 0 || static_cast<size_t>( index ) >= grids.size() )
return {};
return grids[index].m_CmdId;
}
// Grid control
int COMMON_TOOLS::GridNext( const TOOL_EVENT& aEvent )
{
const OPT<int> next_grid_id = getNextPreviousGrid( *m_frame->GetScreen(), 1 );
int& currentGrid = m_toolMgr->GetSettings()->m_Window.grid.last_size_idx;
if( next_grid_id )
return GridPreset( *next_grid_id - ID_POPUP_GRID_LEVEL_1000 );
if( currentGrid + 1 < m_grids.size() )
currentGrid++;
return 1;
return OnGridChanged();
}
int COMMON_TOOLS::GridPrev( const TOOL_EVENT& aEvent )
{
const OPT<int> next_grid_id = getNextPreviousGrid( *m_frame->GetScreen(), -1 );
int& currentGrid = m_toolMgr->GetSettings()->m_Window.grid.last_size_idx;
if( next_grid_id )
return GridPreset( *next_grid_id - ID_POPUP_GRID_LEVEL_1000 );
if( currentGrid > 0 )
currentGrid--;
return 1;
return OnGridChanged();
}
@ -397,27 +381,31 @@ int COMMON_TOOLS::GridPreset( const TOOL_EVENT& aEvent )
int COMMON_TOOLS::GridPreset( int idx )
{
BASE_SCREEN* screen = m_frame->GetScreen();
int& currentGrid = m_toolMgr->GetSettings()->m_Window.grid.last_size_idx;
if( !screen->GridExists( idx + ID_POPUP_GRID_LEVEL_1000 ) )
idx = 0;
currentGrid = std::max( 0, std::min( idx, (int) m_grids.size() - 1 ) );
screen->SetGrid( idx + ID_POPUP_GRID_LEVEL_1000 );
return OnGridChanged();
}
// Be sure m_LastGridSizeId is up to date.
m_frame->SetLastGridSizeId( idx );
int COMMON_TOOLS::OnGridChanged()
{
int& currentGrid = m_toolMgr->GetSettings()->m_Window.grid.last_size_idx;
// Update the combobox (if any)
wxUpdateUIEvent dummy;
m_frame->OnUpdateSelectGrid( dummy );
// Update GAL canvas from screen
getView()->GetGAL()->SetGridSize( VECTOR2D( screen->GetGridSize() ) );
getView()->GetGAL()->SetGridSize( m_grids[ currentGrid ] );
getView()->GetGAL()->SetGridVisibility( m_toolMgr->GetSettings()->m_Window.grid.show );
getView()->MarkTargetDirty( KIGFX::TARGET_NONCACHED );
// Put cursor on new grid
VECTOR2D gridCursor = getViewControls()->GetCursorPosition( true );
getViewControls()->SetCrossHairCursorPosition( gridCursor, false );
return 0;
}
@ -426,10 +414,6 @@ int COMMON_TOOLS::ToggleGrid( const TOOL_EVENT& aEvent )
{
m_frame->SetGridVisibility( !m_frame->IsGridVisible() );
m_frame->GetCanvas()->GetGAL()->SetGridVisibility( m_frame->IsGridVisible() );
getView()->MarkTargetDirty( KIGFX::TARGET_NONCACHED );
m_frame->GetCanvas()->Refresh();
return 0;
}

View File

@ -3,7 +3,7 @@
*
* Copyright (C) 2015 CERN
* @author Maciej Suminski <maciej.suminski@cern.ch>
* Copyright (C) 2015-2018 KiCad Developers, see AUTHORS.txt for contributors.
* Copyright (C) 2015-2020 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
@ -27,57 +27,89 @@
#include <id.h>
#include <eda_draw_frame.h>
#include <base_screen.h>
#include <settings/app_settings.h>
#include <tool/actions.h>
#include <bitmaps.h>
#include <base_units.h>
#include <functional>
using namespace std::placeholders;
GRID_MENU::GRID_MENU( EDA_DRAW_FRAME* aParent ) :
ACTION_MENU( true ),
m_parent( aParent )
{
BASE_SCREEN* screen = m_parent->GetScreen();
SetTitle( _( "Grid" ) );
SetIcon( grid_select_xpm );
wxArrayString gridsList;
screen->BuildGridsChoiceList( gridsList, m_parent->GetUserUnits() != EDA_UNITS::INCHES );
APP_SETTINGS_BASE* settings = m_parent->config();
wxArrayString gridsList;
int i = 0;
for( unsigned int i = 0; i < gridsList.GetCount(); ++i )
{
GRID_TYPE& grid = screen->GetGrid( i );
Append( grid.m_CmdId, gridsList[i], wxEmptyString, wxITEM_CHECK );
}
BuildChoiceList( &gridsList, settings, m_parent->GetUserUnits() != EDA_UNITS::INCHES );
for( const wxString& grid : gridsList )
Append( i++, grid, wxEmptyString, wxITEM_CHECK );
}
OPT_TOOL_EVENT GRID_MENU::eventHandler( const wxMenuEvent& aEvent )
{
OPT_TOOL_EVENT event( ACTIONS::gridPreset.MakeEvent() );
intptr_t idx = aEvent.GetId() - ID_POPUP_GRID_SELECT - 1;
event->SetParameter( idx );
event->SetParameter( (intptr_t) aEvent.GetId() );
return event;
}
void GRID_MENU::update()
{
BASE_SCREEN* screen = m_parent->GetScreen();
int currentId = screen->GetGridCmdId();
wxArrayString gridsList;
APP_SETTINGS_BASE* settings = m_parent->config();
int current = settings->m_Window.grid.last_size_idx;
wxArrayString gridsList;
screen->BuildGridsChoiceList( gridsList, m_parent->GetUserUnits() != EDA_UNITS::INCHES );
BuildChoiceList( &gridsList, settings, m_parent->GetUserUnits() != EDA_UNITS::INCHES );
for( unsigned int i = 0; i < GetMenuItemCount(); ++i )
{
GRID_TYPE& grid = screen->GetGrid( i );
wxMenuItem* menuItem = FindItemByPosition( i );
menuItem->SetId( grid.m_CmdId );
menuItem->SetItemLabel( gridsList[ i ] ); // Refresh label in case units have changed
menuItem->Check( grid.m_CmdId == currentId ); // Refresh checkmark
menuItem->SetItemLabel( gridsList[ i ] ); // Refresh label in case units have changed
menuItem->Check( i == current ); // Refresh checkmark
}
}
void GRID_MENU::BuildChoiceList( wxArrayString* aGridsList, APP_SETTINGS_BASE* aCfg, bool mmFirst )
{
wxString msg;
for( const wxString& gridSize : aCfg->m_Window.grid.sizes )
{
int val = (int) ValueFromString( EDA_UNITS::MILLIMETRES, gridSize, true );
double gridValueMils = To_User_Unit( EDA_UNITS::INCHES, val ) * 1000;
double gridValue_mm = To_User_Unit( EDA_UNITS::MILLIMETRES, val );
if( mmFirst )
msg.Printf( _( "Grid: %.4f mm (%.2f mils)" ), gridValue_mm, gridValueMils );
else
msg.Printf( _( "Grid: %.2f mils (%.4f mm)" ), gridValueMils, gridValue_mm );
aGridsList->Add( msg );
}
if( !aCfg->m_Window.grid.user_grid_x.empty() )
{
int val = (int) ValueFromString( EDA_UNITS::INCHES, aCfg->m_Window.grid.user_grid_x, true );
double gridValueMils = To_User_Unit( EDA_UNITS::INCHES, val ) * 1000;
double gridValue_mm = To_User_Unit( EDA_UNITS::MILLIMETRES, val );
if( mmFirst )
msg.Printf( _( "User grid: %.4f mm (%.2f mils)" ), gridValue_mm, gridValueMils );
else
msg.Printf( _( "User grid: %.2f mils (%.4f mm)" ), gridValueMils, gridValue_mm );
aGridsList->Add( msg );
}
}

View File

@ -1013,12 +1013,14 @@ TOOL_ID TOOL_MANAGER::MakeToolId( const std::string& aToolName )
void TOOL_MANAGER::SetEnvironment( EDA_ITEM* aModel, KIGFX::VIEW* aView,
KIGFX::VIEW_CONTROLS* aViewControls, TOOLS_HOLDER* aFrame )
KIGFX::VIEW_CONTROLS* aViewControls,
APP_SETTINGS_BASE* aSettings, TOOLS_HOLDER* aFrame )
{
m_model = aModel;
m_view = aView;
m_viewControls = aViewControls;
m_frame = aFrame;
m_settings = aSettings;
}

View File

@ -190,7 +190,7 @@ void CVPCB_MAINFRAME::setupTools()
// Create the manager
m_actions = new CVPCB_ACTIONS();
m_toolManager = new TOOL_MANAGER;
m_toolManager->SetEnvironment( nullptr, nullptr, nullptr, this );
m_toolManager->SetEnvironment( nullptr, nullptr, nullptr, config(), this );
m_toolDispatcher = new TOOL_DISPATCHER( m_toolManager, m_actions );
// Register tools

View File

@ -92,12 +92,6 @@ DISPLAY_FOOTPRINTS_FRAME::DISPLAY_FOOTPRINTS_FRAME( KIWAY* aKiway, wxWindow* aPa
LoadSettings( config() );
// Initialize grid id to a default value if not found in config or incorrect:
if( !( GetScreen()->GridExists( m_LastGridSizeId + ID_POPUP_GRID_LEVEL_1000 ) ) )
m_LastGridSizeId = ID_POPUP_GRID_LEVEL_500 - ID_POPUP_GRID_LEVEL_1000;
GetScreen()->SetGrid( m_LastGridSizeId + ID_POPUP_GRID_LEVEL_1000 );
// Initialize some display options
auto displ_opts = GetDisplayOptions();
displ_opts.m_DisplayPadIsol = false; // Pad clearance has no meaning here
@ -109,7 +103,7 @@ DISPLAY_FOOTPRINTS_FRAME::DISPLAY_FOOTPRINTS_FRAME( KIWAY* aKiway, wxWindow* aPa
// Create the manager and dispatcher & route draw panel events to the dispatcher
m_toolManager = new TOOL_MANAGER;
m_toolManager->SetEnvironment( GetBoard(), gal_drawPanel->GetView(),
gal_drawPanel->GetViewControls(), this );
gal_drawPanel->GetViewControls(), config(), this );
m_actions = new CVPCB_ACTIONS();
m_toolDispatcher = new TOOL_DISPATCHER( m_toolManager, m_actions );
gal_drawPanel->SetEventDispatcher( m_toolDispatcher );
@ -135,16 +129,11 @@ DISPLAY_FOOTPRINTS_FRAME::DISPLAY_FOOTPRINTS_FRAME( KIWAY* aKiway, wxWindow* aPa
m_auimgr.SetManagedWindow( this );
m_auimgr.AddPane( m_mainToolBar,
EDA_PANE().HToolbar().Name( "MainToolbar" ).Top().Layer(6) );
m_auimgr.AddPane( m_optionsToolBar,
EDA_PANE().VToolbar().Name( "OptToolbar" ).Left().Layer(3) );
m_auimgr.AddPane( m_infoBar,
EDA_PANE().InfoBar().Name( "InfoBar" ).Top().Layer(1) );
m_auimgr.AddPane( GetCanvas(),
EDA_PANE().Canvas().Name( "DrawFrame" ).Center() );
m_auimgr.AddPane( m_messagePanel,
EDA_PANE().Messages().Name( "MsgPanel" ).Bottom().Layer(6) );
m_auimgr.AddPane( m_mainToolBar, EDA_PANE().HToolbar().Name( "MainToolbar" ).Top().Layer(6) );
m_auimgr.AddPane( m_optionsToolBar, EDA_PANE().VToolbar().Name( "OptToolbar" ).Left().Layer(3) );
m_auimgr.AddPane( m_infoBar, EDA_PANE().InfoBar().Name( "InfoBar" ).Top().Layer(1) );
m_auimgr.AddPane( GetCanvas(), EDA_PANE().Canvas().Name( "DrawFrame" ).Center() );
m_auimgr.AddPane( m_messagePanel, EDA_PANE().Messages().Name( "MsgPanel" ).Bottom().Layer(6) );
// Call Update() to fix all pane default sizes, especially the "InfoBar" pane before
// hidding it.
@ -199,7 +188,6 @@ void DISPLAY_FOOTPRINTS_FRAME::OnCloseWindow( wxCloseEvent& event )
void DISPLAY_FOOTPRINTS_FRAME::ReCreateVToolbar()
{
// Currently, no vertical right toolbar.
// So do nothing
}
@ -280,7 +268,7 @@ void DISPLAY_FOOTPRINTS_FRAME::LoadSettings( APP_SETTINGS_BASE* aCfg )
// We don't allow people to change this right now, so make sure it's on
GetWindowSettings( cfg )->cursor.always_show_cursor = true;
EDA_DRAW_FRAME::LoadSettings( cfg );
PCB_BASE_FRAME::LoadSettings( cfg );
SetDisplayOptions( cfg->m_FootprintViewerDisplayOptions );
}
@ -291,7 +279,7 @@ void DISPLAY_FOOTPRINTS_FRAME::SaveSettings( APP_SETTINGS_BASE* aCfg )
auto cfg = dynamic_cast<CVPCB_SETTINGS*>( aCfg );
wxCHECK( cfg, /* void */ );
EDA_DRAW_FRAME::SaveSettings( cfg );
PCB_BASE_FRAME::SaveSettings( cfg );
cfg->m_FootprintViewerDisplayOptions = GetDisplayOptions();
@ -315,17 +303,6 @@ MAGNETIC_SETTINGS* DISPLAY_FOOTPRINTS_FRAME::GetMagneticItemsSettings()
}
void DISPLAY_FOOTPRINTS_FRAME::ApplyDisplaySettingsToGAL()
{
auto painter = static_cast<KIGFX::PCB_PAINTER*>( GetCanvas()->GetView()->GetPainter() );
painter->GetSettings()->LoadDisplayOptions( GetDisplayOptions(), false );
GetCanvas()->GetView()->UpdateAllItems( KIGFX::ALL );
GetCanvas()->Refresh();
}
/**
* Virtual function needed by the PCB_SCREEN class derived from BASE_SCREEN
* this is a virtual pure function in BASE_SCREEN

View File

@ -76,9 +76,6 @@ public:
MAGNETIC_SETTINGS* GetMagneticItemsSettings() override;
/// Updates the GAL with display settings changes
void ApplyDisplaySettingsToGAL();
///> @copydoc EDA_DRAW_FRAME::UpdateMsgPanel()
void UpdateMsgPanel() override;

View File

@ -486,8 +486,6 @@ void SCH_PRINTOUT::PrintPage( SCH_SCREEN* aScreen )
dc->SetLogicalFunction( wxCOPY );
GRResetPenAndBrush( dc );
aScreen->m_IsPrinting = true;
COLOR4D savedBgColor = m_parent->GetDrawBgColor();
COLOR4D bgColor = m_parent->GetColorSettings()->GetColor( LAYER_SCHEMATIC_BACKGROUND );
@ -529,7 +527,6 @@ void SCH_PRINTOUT::PrintPage( SCH_SCREEN* aScreen )
aScreen->Print( &renderSettings );
m_parent->SetDrawBgColor( savedBgColor );
aScreen->m_IsPrinting = false;
GRForceBlackPen( false );

View File

@ -23,11 +23,10 @@
#include <dialog_set_grid_base.h>
#include <common.h>
#include <tool/tool_manager.h>
#include <settings/app_settings.h>
#include <sch_base_frame.h>
#include <class_draw_panel_gal.h>
#include <sch_view.h>
#include <gal/graphics_abstraction_layer.h>
#include <tool/grid_menu.h>
class DIALOG_SET_GRID : public DIALOG_SET_GRID_BASE
{
@ -53,16 +52,16 @@ DIALOG_SET_GRID::DIALOG_SET_GRID( SCH_BASE_FRAME* aParent ):
bool DIALOG_SET_GRID::TransferDataToWindow()
{
const GRIDS& gridSizes = m_frame->GetScreen()->GetGrids();
int idx = m_frame->config()->m_Window.grid.last_size_idx;
wxArrayString grids;
for( size_t i = 0; i < gridSizes.size(); i++ )
{
m_choiceGridSize->Append( wxString::Format( "%0.1f",
static_cast<float>( Iu2Mils( gridSizes[i].m_Size.x ) ) ) );
GRID_MENU::BuildChoiceList( &grids, m_frame->config(), GetUserUnits() != EDA_UNITS::INCHES );
if( gridSizes[i].m_CmdId == m_frame->GetScreen()->GetGridCmdId() )
m_choiceGridSize->SetSelection( (int) i );
}
for( const wxString& grid : grids )
m_choiceGridSize->Append( grid );
if( idx >= 0 && idx < m_choiceGridSize->GetCount() )
m_choiceGridSize->SetSelection( idx );
return true;
}
@ -70,12 +69,9 @@ bool DIALOG_SET_GRID::TransferDataToWindow()
bool DIALOG_SET_GRID::TransferDataFromWindow()
{
const GRIDS& gridSizes = m_frame->GetScreen()->GetGrids();
wxRealPoint gridSize = gridSizes[ (size_t) m_choiceGridSize->GetSelection() ].m_Size;
m_frame->SetLastGridSizeId( m_frame->GetScreen()->SetGrid( gridSize ) );
int idx = m_choiceGridSize->GetSelection();
m_frame->GetCanvas()->GetView()->GetGAL()->SetGridSize( VECTOR2D( gridSize ) );
m_frame->GetCanvas()->GetView()->MarkTargetDirty( KIGFX::TARGET_NONCACHED );
m_frame->GetToolManager()->RunAction( "common.Control.gridPreset", true, idx );
return true;
}

View File

@ -416,23 +416,44 @@ void SCH_BASE_FRAME::LoadSettings( APP_SETTINGS_BASE* aCfg )
EDA_DRAW_FRAME::LoadSettings( aCfg );
if( eeconfig() )
EESCHEMA_SETTINGS* cfg = dynamic_cast<EESCHEMA_SETTINGS*>( aCfg );
wxCHECK( cfg, /*void*/ );
if( cfg->m_Window.grid.sizes.empty() )
{
wxString templateFieldNames = eeconfig()->m_Drawing.field_names;
/*
* Do NOT add others values (mainly grid values in mm), because they can break the
* schematic: Because wires and pins are considered as connected when the are to the
* same coordinate we cannot mix coordinates in mils (internal units) and mm (that
* cannot exactly converted in mils in many cases). In fact schematic must only use
* 50 and 25 mils to place labels, wires and components others values are useful only
* for graphic items (mainly in library editor) so use integer values in mils only.
* The 100 mil grid is added to help conform to the KiCad Library Convention which
* states: "Using a 100mil grid, pin ends and origin must lie on grid nodes IEC-60617"
*/
cfg->m_Window.grid.sizes = { "100 mil",
"50 mil",
"25 mil",
"10 mil",
"5 mil",
"2 mil",
"1 mil" };
}
if( !templateFieldNames.IsEmpty() )
wxString templateFieldNames = cfg->m_Drawing.field_names;
if( !templateFieldNames.IsEmpty() )
{
TEMPLATE_FIELDNAMES_LEXER lexer( TO_UTF8( templateFieldNames ) );
try
{
TEMPLATE_FIELDNAMES_LEXER lexer( TO_UTF8( templateFieldNames ) );
try
{
m_templateFieldNames.Parse( &lexer, true );
}
catch( const IO_ERROR& DBG( e ) )
{
// @todo show error msg
DBG( printf( "templatefieldnames parsing error: '%s'\n", TO_UTF8( e.What() ) ); )
}
m_templateFieldNames.Parse( &lexer, true );
}
catch( const IO_ERROR& DBG( e ) )
{
// @todo show error msg
DBG( printf( "templatefieldnames parsing error: '%s'\n", TO_UTF8( e.What() ) ); )
}
}
}

View File

@ -481,7 +481,6 @@ bool SCH_EDIT_FRAME::OpenProjectFiles( const std::vector<wxString>& aFileSet, in
GetScreen()->m_Initialized = true;
}
GetScreen()->SetGrid( ID_POPUP_GRID_LEVEL_1000 + m_LastGridSizeId );
m_toolManager->RunAction( ACTIONS::zoomFitScreen, true );
SetSheetNumberAndCount();
@ -538,7 +537,6 @@ bool SCH_EDIT_FRAME::AppendSchematic()
SCH_SCREENS screens( GetCurrentSheet().Last() );
screens.TestDanglingEnds();
GetScreen()->SetGrid( ID_POPUP_GRID_LEVEL_1000 + m_LastGridSizeId );
m_toolManager->RunAction( ACTIONS::zoomFitScreen, true );
SetSheetNumberAndCount();
@ -844,7 +842,6 @@ bool SCH_EDIT_FRAME::importFile( const wxString& aFileName, int aFileType )
GetScreen()->ClearUndoORRedoList( GetScreen()->m_UndoList, 1 );
GetScreen()->SetGrid( ID_POPUP_GRID_LEVEL_1000 + m_LastGridSizeId );
m_toolManager->RunAction( ACTIONS::zoomFitScreen, true );
SetSheetNumberAndCount();
SyncView();

View File

@ -235,10 +235,7 @@ void SCH_EDIT_FRAME::DisplayCurrentSheet()
wxASSERT( screen );
// Switch to current sheet,
// and update the grid size, because it can be modified in latest screen
SetScreen( screen );
GetScreen()->SetGrid( m_LastGridSizeId + ID_POPUP_GRID_LEVEL_1000 );
// update the References
GetCurrentSheet().UpdateAllScreenReferences();

View File

@ -126,9 +126,6 @@ LIB_VIEW_FRAME::LIB_VIEW_FRAME( KIWAY* aKiway, wxWindow* aParent, FRAME_T aFrame
m_cmpListWidth = 300;
m_listPowerCmpOnly = false;
// Initialize grid id to the default value (50 mils):
m_LastGridSizeId = ID_POPUP_GRID_LEVEL_50 - ID_POPUP_GRID_LEVEL_1000;
SetScreen( new SCH_SCREEN );
GetScreen()->m_Center = true; // Axis origin centered on screen.
LoadSettings( config() );
@ -137,7 +134,6 @@ LIB_VIEW_FRAME::LIB_VIEW_FRAME( KIWAY* aKiway, wxWindow* aParent, FRAME_T aFrame
KIGFX::GAL_DISPLAY_OPTIONS& gal_opts = GetGalDisplayOptions();
gal_opts.m_axesEnabled = true;
GetCanvas()->GetGAL()->SetAxesEnabled( true );
GetCanvas()->GetGAL()->SetGridVisibility( IsGridVisible() );
GetRenderSettings()->m_ShowHiddenText = true;
GetRenderSettings()->m_ShowHiddenPins = true;
@ -188,8 +184,6 @@ LIB_VIEW_FRAME::LIB_VIEW_FRAME( KIWAY* aKiway, wxWindow* aParent, FRAME_T aFrame
m_auimgr.Update();
GetToolManager()->RunAction( ACTIONS::gridPreset, true, m_LastGridSizeId );
if( !IsModal() ) // For modal mode, calling ShowModal() will show this frame
{
Raise();
@ -228,7 +222,7 @@ void LIB_VIEW_FRAME::setupTools()
// Create the manager and dispatcher & route draw panel events to the dispatcher
m_toolManager = new TOOL_MANAGER;
m_toolManager->SetEnvironment( GetScreen(), GetCanvas()->GetView(),
GetCanvas()->GetViewControls(), this );
GetCanvas()->GetViewControls(), config(), this );
m_actions = new EE_ACTIONS();
m_toolDispatcher = new TOOL_DISPATCHER( m_toolManager, m_actions );
@ -618,7 +612,7 @@ void LIB_VIEW_FRAME::LoadSettings( APP_SETTINGS_BASE* aCfg )
{
auto cfg = Pgm().GetSettingsManager().GetAppSettings<EESCHEMA_SETTINGS>();
EDA_DRAW_FRAME::LoadSettings( cfg );
SCH_BASE_FRAME::LoadSettings( cfg );
// Grid shape, etc.
GetGalDisplayOptions().ReadWindowSettings( cfg->m_LibViewPanel.window );
@ -641,7 +635,7 @@ void LIB_VIEW_FRAME::SaveSettings( APP_SETTINGS_BASE* aCfg)
{
EESCHEMA_SETTINGS* cfg = Pgm().GetSettingsManager().GetAppSettings<EESCHEMA_SETTINGS>();
EDA_DRAW_FRAME::SaveSettings( cfg );
SCH_BASE_FRAME::SaveSettings( cfg );
if( m_libListWidth && m_libList )
m_libListWidth = m_libList->GetSize().x;

View File

@ -103,9 +103,6 @@ LIB_EDIT_FRAME::LIB_EDIT_FRAME( KIWAY* aKiway, wxWindow* aParent ) :
m_convert = 1;
m_AboutTitle = "LibEdit";
// Initialize grid id to the default value 50 mils:
m_LastGridSizeId = ID_POPUP_GRID_LEVEL_50 - ID_POPUP_GRID_LEVEL_1000;
wxIcon icon;
icon.CopyFromBitmap( KiBitmap( icon_libedit_xpm ) );
SetIcon( icon );
@ -168,15 +165,12 @@ LIB_EDIT_FRAME::LIB_EDIT_FRAME( KIWAY* aKiway, wxWindow* aParent ) :
m_auimgr.GetPane( "InfoBar" ).Hide();
m_auimgr.Update();
GetToolManager()->RunAction( "common.Control.gridPreset", true, m_LastGridSizeId );
Raise();
Show( true );
SyncView();
GetCanvas()->GetViewControls()->SetSnapping( true );
GetCanvas()->GetView()->UseDrawPriority( true );
GetCanvas()->GetGAL()->SetGridVisibility( IsGridVisible() );
GetCanvas()->GetGAL()->SetAxesEnabled( true );
// Set the working/draw area size to display a symbol to a reasonable value:
@ -255,7 +249,7 @@ void LIB_EDIT_FRAME::setupTools()
// Create the manager and dispatcher & route draw panel events to the dispatcher
m_toolManager = new TOOL_MANAGER;
m_toolManager->SetEnvironment( GetScreen(), GetCanvas()->GetView(),
GetCanvas()->GetViewControls(), this );
GetCanvas()->GetViewControls(), config(), this );
m_actions = new EE_ACTIONS();
m_toolDispatcher = new TOOL_DISPATCHER( m_toolManager, m_actions );

View File

@ -34,15 +34,11 @@
#include <class_library.h>
#include <template_fieldnames.h>
#include <wildcards_and_files_ext.h>
#include <sch_edit_frame.h>
#include <symbol_lib_table.h>
#include <lib_manager.h>
#include <symbol_tree_pane.h>
#include <widgets/lib_tree.h>
#include <sch_legacy_plugin.h>
#include <dialog_choose_component.h>
#include <symbol_tree_model_adapter.h>
#include <tool/tool_manager.h>
#include <dialogs/dialog_lib_new_component.h>
#include <dialog_helpers.h>
#include <wx/clipbrd.h>
@ -200,23 +196,6 @@ bool LIB_EDIT_FRAME::LoadComponentFromCurrentLib( const wxString& aAliasName, in
return true;
}
/**
* Synchronize screen settings from a current screen into another screen.
*
* This can be used, for example, when loading a new screen into a frame,
* but you want the new screen to inherit some settings (e.g. grids) from the
* frame's current screen.
*
* @param aCurrentScreen the existing frame screen
* @param aIncomingScreen a screen that is intended to replace the current screen
*/
static void synchronizeLibEditScreenSettings( const SCH_SCREEN& aCurrentScreen,
SCH_SCREEN& aIncomingScreen )
{
aIncomingScreen.SetGrid( aCurrentScreen.GetGridSize() );
}
bool LIB_EDIT_FRAME::LoadOneLibraryPartAux( LIB_PART* aEntry, const wxString& aLibrary,
int aUnit, int aConvert )
{
@ -240,14 +219,6 @@ bool LIB_EDIT_FRAME::LoadOneLibraryPartAux( LIB_PART* aEntry, const wxString& aL
// The buffered screen for the part
SCH_SCREEN* part_screen = m_libMgr->GetScreen( lib_part->GetName(), aLibrary );
const SCH_SCREEN* curr_screen = GetScreen();
// Before we set the frame screen, transfer any settings from the current
// screen that we want to keep to the incoming (buffered) part's screen
// which could be out of date relative to the current screen.
if( curr_screen )
synchronizeLibEditScreenSettings( *curr_screen, *part_screen );
SetScreen( part_screen );
SetCurPart( new LIB_PART( *lib_part ) );
SetCurLib( aLibrary );

View File

@ -442,8 +442,6 @@ void SCH_BASE_FRAME::RemoveFromScreen( EDA_ITEM* aItem, SCH_SCREEN* aScreen )
void SCH_BASE_FRAME::SyncView()
{
auto gs = GetScreen()->GetGridSize();
GetCanvas()->GetGAL()->SetGridSize( VECTOR2D( gs.x, gs.y ));
GetCanvas()->GetView()->UpdateAllItems( KIGFX::ALL );
}

View File

@ -137,18 +137,10 @@ void SCH_DRAW_PANEL::setDefaultLayerOrder()
bool SCH_DRAW_PANEL::SwitchBackend( GAL_TYPE aGalType )
{
VECTOR2D grid_size = m_gal->GetGridSize();
bool rv = EDA_DRAW_PANEL_GAL::SwitchBackend( aGalType );
setDefaultLayerDeps();
m_gal->SetWorldUnitLength( SCH_WORLD_UNIT );
// Keep grid size and grid visibility:
m_gal->SetGridSize( grid_size );
SCH_BASE_FRAME* frame = dynamic_cast<SCH_BASE_FRAME*>( GetParentEDAFrame() );
if( frame )
m_gal->SetGridVisibility( frame->IsGridVisible() );
Refresh();
return rv;

View File

@ -226,9 +226,6 @@ SCH_EDIT_FRAME::SCH_EDIT_FRAME( KIWAY* aKiway, wxWindow* aParent ):
icon.CopyFromBitmap( KiBitmap( icon_eeschema_xpm ) );
SetIcon( icon );
// Initialize grid id to the default value (50 mils):
m_LastGridSizeId = ID_POPUP_GRID_LEVEL_50 - ID_POPUP_GRID_LEVEL_1000;
LoadSettings( eeconfig() );
CreateScreens();
@ -273,12 +270,8 @@ SCH_EDIT_FRAME::SCH_EDIT_FRAME( KIWAY* aKiway, wxWindow* aParent ):
GetToolManager()->RunAction( ACTIONS::zoomFitScreen, true );
// Init grid size and visibility
GetToolManager()->RunAction( ACTIONS::gridPreset, true, m_LastGridSizeId );
if( GetCanvas() )
{
GetCanvas()->GetGAL()->SetGridVisibility( IsGridVisible() );
GetCanvas()->GetGAL()->SetAxesEnabled( false );
if( auto p = dynamic_cast<KIGFX::SCH_PAINTER*>( GetCanvas()->GetView()->GetPainter() ) )
@ -319,7 +312,7 @@ void SCH_EDIT_FRAME::setupTools()
// Create the manager and dispatcher & route draw panel events to the dispatcher
m_toolManager = new TOOL_MANAGER;
m_toolManager->SetEnvironment( &Schematic(), GetCanvas()->GetView(),
GetCanvas()->GetViewControls(), this );
GetCanvas()->GetViewControls(), config(), this );
m_actions = new EE_ACTIONS();
m_toolDispatcher = new TOOL_DISPATCHER( m_toolManager, m_actions );

View File

@ -66,7 +66,6 @@
// TODO(JE) Debugging only
#include <profile.h>
#define EESCHEMA_FILE_STAMP "EESchema"
#define ZOOM_FACTOR( x ) ( x * IU_PER_MILS )
@ -97,29 +96,6 @@ static double SchematicZoomList[] =
};
/* Default grid sizes for the schematic editor.
* Do NOT add others values (mainly grid values in mm), because they
* can break the schematic: Because wires and pins are considered as
* connected when the are to the same coordinate we cannot mix
* coordinates in mils (internal units) and mm (that cannot exactly
* converted in mils in many cases). In fact schematic must only use
* 50 and 25 mils to place labels, wires and components others values
* are useful only for graphic items (mainly in library editor) so use
* integer values in mils only. The 100 mil grid is added to help
* conform to the KiCad Library Convention. Which states: "Using a
* 100mil grid, pin ends and origin must lie on grid nodes IEC-60617"
*/
static GRID_TYPE SchematicGridList[] = {
{ ID_POPUP_GRID_LEVEL_100, wxRealPoint( Mils2iu( 100 ), Mils2iu( 100 ) ) },
{ ID_POPUP_GRID_LEVEL_50, wxRealPoint( Mils2iu( 50 ), Mils2iu( 50 ) ) },
{ ID_POPUP_GRID_LEVEL_25, wxRealPoint( Mils2iu( 25 ), Mils2iu( 25 ) ) },
{ ID_POPUP_GRID_LEVEL_10, wxRealPoint( Mils2iu( 10 ), Mils2iu( 10 ) ) },
{ ID_POPUP_GRID_LEVEL_5, wxRealPoint( Mils2iu( 5 ), Mils2iu( 5 ) ) },
{ ID_POPUP_GRID_LEVEL_2, wxRealPoint( Mils2iu( 2 ), Mils2iu( 2 ) ) },
{ ID_POPUP_GRID_LEVEL_1, wxRealPoint( Mils2iu( 1 ), Mils2iu( 1 ) ) },
};
SCH_SCREEN::SCH_SCREEN( EDA_ITEM* aParent ) :
BASE_SCREEN( aParent, SCH_SCREEN_T ),
m_paper( wxT( "A4" ) )
@ -131,12 +107,6 @@ SCH_SCREEN::SCH_SCREEN( EDA_ITEM* aParent ) :
for( unsigned zoom : SchematicZoomList )
m_ZoomList.push_back( zoom );
for( GRID_TYPE grid : SchematicGridList )
AddGrid( grid );
// Set the default grid size, now that the grid list is populated
SetGrid( wxRealPoint( Mils2iu( 50 ), Mils2iu( 50 ) ) );
m_refCount = 0;
// Suitable for schematic only. For libedit and viewlib, must be set to true

View File

@ -115,7 +115,7 @@ private:
/// Origin of the auxiliary axis, which is used in exports mostly, but not yet in EESCHEMA
wxPoint m_aux_origin;
EE_RTREE m_rtree;
EE_RTREE m_rtree;
int m_modification_sync; ///< inequality with PART_LIBS::GetModificationHash()
///< will trigger ResolveAll().
@ -159,15 +159,8 @@ public:
SCHEMATIC* Schematic() const;
EE_RTREE& Items()
{
return m_rtree;
}
const EE_RTREE& Items() const
{
return m_rtree;
}
EE_RTREE& Items() { return m_rtree; }
const EE_RTREE& Items() const { return m_rtree; }
bool IsEmpty()
{
@ -203,9 +196,7 @@ public:
void SetTitleBlock( const TITLE_BLOCK& aTitleBlock ) { m_titles = aTitleBlock; }
void DecRefCount();
void IncRefCount();
int GetRefCount() const { return m_refCount; }
/**
@ -254,8 +245,8 @@ public:
* @param aType The type of item to find.
* @return The item found that meets the search criteria or NULL if none found.
*/
SCH_ITEM* GetItem(
const wxPoint& aPosition, int aAccuracy = 0, KICAD_T aType = SCH_LOCATE_ANY_T );
SCH_ITEM* GetItem( const wxPoint& aPosition, int aAccuracy = 0,
KICAD_T aType = SCH_LOCATE_ANY_T );
void Place( SCH_EDIT_FRAME* frame, wxDC* DC ) { };
@ -405,7 +396,7 @@ public:
* @return The pin item if found, otherwise NULL.
*/
LIB_PIN* GetPin( const wxPoint& aPosition, SCH_COMPONENT** aComponent = NULL,
bool aEndPointOnly = false );
bool aEndPointOnly = false );
/**
* Test the screen if \a aPosition is a sheet label object.

View File

@ -598,7 +598,6 @@ void SCH_EDIT_FRAME::DrawCurrentSheetToClipboard()
GRResetPenAndBrush( &dc );
GRForceBlackPen( false );
screen->m_IsPrinting = true;
dc.SetUserScale( scale, scale );
dc.Clear();
@ -606,8 +605,6 @@ void SCH_EDIT_FRAME::DrawCurrentSheetToClipboard()
PrintPage( GetRenderSettings() );
screen->m_IsPrinting = false;
if( wxTheClipboard->Open() )
{
// This data objects are held by the clipboard, so do not delete them in the app.

View File

@ -116,9 +116,8 @@ void EE_INSPECTION_TOOL::checkPart( LIB_PART* aPart )
return;
wxString msg;
wxRealPoint curr_grid_size = m_frame->GetScreen()->GetGridSize();
const int min_grid_size = 25;
const int grid_size = KiROUND( curr_grid_size.x );
const int grid_size = KiROUND( getView()->GetGAL()->GetGridSize().x );
const int clamped_grid_size = ( grid_size < min_grid_size ) ? min_grid_size : grid_size;
LIB_PINS pinList;

View File

@ -434,7 +434,7 @@ void SCH_LINE_WIRE_BUS_TOOL::computeBreakPoint( const std::pair<SCH_LINE*, SCH_L
if( aPosition.x == connectedPin->GetPosition().x ) // push outside sheet boundary
{
int direction = ( force == SHEET_LEFT_SIDE ) ? -1 : 1;
aPosition.x += int( m_frame->GetScreen()->GetGridSize().x * direction );
aPosition.x += KiROUND( getView()->GetGAL()->GetGridSize().x * direction );
}
midPoint.x = aPosition.x;

View File

@ -2,7 +2,7 @@
* This program source code file is part of KiCad, a free EDA CAD application.
*
* Copyright (C) 2012-2014 Jean-Pierre Charras jp.charras at wanadoo.fr
* Copyright (C) 1992-2014 KiCad Developers, see change_log.txt for contributors.
* Copyright (C) 1992-2020 KiCad Developers, see change_log.txt for contributors.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
@ -22,19 +22,9 @@
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
*/
/**
* @file gbr_screen.cpp
*/
#include <fctsys.h>
#include <common.h>
#include <macros.h>
#include <gbr_screen.h>
#include <gerbview_id.h>
#define MIL_GRID( x ) wxRealPoint( x * IU_PER_MILS, x * IU_PER_MILS)
#define MM_GRID( x ) wxRealPoint( x * IU_PER_MM, x * IU_PER_MM )
/**
@ -67,67 +57,15 @@ static const double gbrZoomList[] =
};
// Default grid sizes for PCB editor screens.
static GRID_TYPE gbrGridList[] =
{
// predefined grid list in mils
{ ID_POPUP_GRID_LEVEL_1000, MIL_GRID( 100 ) },
{ ID_POPUP_GRID_LEVEL_500, MIL_GRID( 50 ) },
{ ID_POPUP_GRID_LEVEL_250, MIL_GRID( 25 ) },
{ ID_POPUP_GRID_LEVEL_200, MIL_GRID( 20 ) },
{ ID_POPUP_GRID_LEVEL_100, MIL_GRID( 10 ) },
{ ID_POPUP_GRID_LEVEL_50, MIL_GRID( 5 ) },
{ ID_POPUP_GRID_LEVEL_25, MIL_GRID( 2.5 ) },
{ ID_POPUP_GRID_LEVEL_20, MIL_GRID( 2 ) },
{ ID_POPUP_GRID_LEVEL_10, MIL_GRID( 1 ) },
{ ID_POPUP_GRID_LEVEL_5, MIL_GRID( 0.5 ) },
{ ID_POPUP_GRID_LEVEL_2, MIL_GRID( 0.2 ) },
{ ID_POPUP_GRID_LEVEL_1, MIL_GRID( 0.1 ) },
// predefined grid list in mm
{ ID_POPUP_GRID_LEVEL_5MM, MM_GRID( 5.0 ) },
{ ID_POPUP_GRID_LEVEL_2_5MM, MM_GRID( 2.5 ) },
{ ID_POPUP_GRID_LEVEL_1MM, MM_GRID( 1.0 ) },
{ ID_POPUP_GRID_LEVEL_0_5MM, MM_GRID( 0.5 ) },
{ ID_POPUP_GRID_LEVEL_0_25MM, MM_GRID( 0.25 ) },
{ ID_POPUP_GRID_LEVEL_0_2MM, MM_GRID( 0.2 ) },
{ ID_POPUP_GRID_LEVEL_0_1MM, MM_GRID( 0.1 ) },
{ ID_POPUP_GRID_LEVEL_0_0_5MM, MM_GRID( 0.05 ) },
{ ID_POPUP_GRID_LEVEL_0_0_25MM, MM_GRID( 0.025 ) },
{ ID_POPUP_GRID_LEVEL_0_0_1MM, MM_GRID( 0.01 ) }
};
GBR_SCREEN::GBR_SCREEN( const wxSize& aPageSizeIU ) :
BASE_SCREEN( SCREEN_T )
{
for( unsigned i = 0; i < arrayDim( gbrZoomList ); ++i )
m_ZoomList.push_back( gbrZoomList[i] );
for( unsigned i = 0; i < arrayDim( gbrGridList ); ++i )
AddGrid( gbrGridList[i] );
// Set the working grid size to a reasonable value
SetGrid( MIL_GRID( 50 ) );
SetZoom( ZOOM_FACTOR( 350 ) ); // a default value for zoom
m_Active_Layer = 0; // default active layer = first graphic layer
InitDataPoints( aPageSizeIU );
}
GBR_SCREEN::~GBR_SCREEN()
{
ClearUndoRedoList();
}
/* Virtual function needed by classes derived from BASE_SCREEN
* this is a virtual pure function in BASE_SCREEN
* do nothing in GerbView
* could be removed later
*/
void GBR_SCREEN::ClearUndoORRedoList( UNDO_REDO_CONTAINER&, int )
{
}

View File

@ -22,17 +22,11 @@
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
*/
/**
* @file gbr_screen.h
*/
#ifndef GBR_SCREEN_H
#define GBR_SCREEN_H
#include <base_units.h>
#include <base_screen.h>
#include <layers_id_colors_and_visibility.h>
#define ZOOM_FACTOR( x ) ( x * IU_PER_MILS )
@ -46,13 +40,13 @@ public:
* @param aPageSizeIU is the size of the initial paper page in internal units.
*/
GBR_SCREEN( const wxSize& aPageSizeIU );
~GBR_SCREEN();
/**
* Function ClearUndoORRedoList
* virtual pure in BASE_SCREEN, so it must be defined here
*/
void ClearUndoORRedoList( UNDO_REDO_CONTAINER& aList, int aItemCount = -1 ) override;
void ClearUndoORRedoList( UNDO_REDO_CONTAINER& aList, int aItemCount = -1 ) override
{ }
};

View File

@ -2,7 +2,7 @@
* This program source code file is part of KiCad, a free EDA CAD application.
*
* Copyright (C) 2018 Jean-Pierre Charras, jp.charras at wanadoo.fr
* Copyright (C) 1992-2019 KiCad Developers, see AUTHORS.txt for contributors.
* Copyright (C) 1992-2020 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
@ -57,6 +57,7 @@
#include <dialogs/panel_gerbview_display_options.h>
#include <panel_hotkeys_editor.h>
#include <wx/wupdlock.h>
#include <tool/grid_menu.h>
GERBVIEW_FRAME::GERBVIEW_FRAME( KIWAY* aKiway, wxWindow* aParent )
: EDA_DRAW_FRAME( aKiway, aParent, FRAME_GERBER, wxT( "GerbView" ), wxDefaultPosition,
@ -123,12 +124,6 @@ GERBVIEW_FRAME::GERBVIEW_FRAME( KIWAY* aKiway, wxWindow* aParent )
// initialize parameters in m_LayersManager
LoadSettings( config() );
if( m_LastGridSizeId < 0 )
m_LastGridSizeId = 0;
if( m_LastGridSizeId > ID_POPUP_GRID_LEVEL_0_0_1MM-ID_POPUP_GRID_LEVEL_1000 )
m_LastGridSizeId = ID_POPUP_GRID_LEVEL_0_0_1MM-ID_POPUP_GRID_LEVEL_1000;
setupTools();
ReCreateMenuBar();
ReCreateHToolbar();
@ -206,10 +201,6 @@ GERBVIEW_FRAME::GERBVIEW_FRAME( KIWAY* aKiway, wxWindow* aParent )
m_LayersManager->ReFillRender(); // Update colors in Render after the config is read
GetToolManager()->RunAction( ACTIONS::zoomFitScreen, true );
GetToolManager()->RunAction( ACTIONS::gridPreset, true, m_LastGridSizeId );
if( GetCanvas() )
GetCanvas()->GetGAL()->SetGridVisibility( IsGridVisible() );
// Update the checked state of tools
SyncToolbars();
@ -312,6 +303,32 @@ void GERBVIEW_FRAME::LoadSettings( APP_SETTINGS_BASE* aCfg )
GERBVIEW_SETTINGS* cfg = dynamic_cast<GERBVIEW_SETTINGS*>( aCfg );
wxCHECK( cfg, /*void*/ );
if( cfg->m_Window.grid.sizes.empty() )
{
cfg->m_Window.grid.sizes = { "100 mil",
"50 mil",
"25 mil",
"20 mil",
"10 mil",
"5 mil",
"2.5 mil",
"2 mil",
"1 mil",
"0.5 mil",
"0.2 mil",
"0.1 mil",
"5.0 mm",
"2.5 mm",
"1.0 mm",
"0.5 mm",
"0.25 mm",
"0.2 mm",
"0.1 mm",
"0.05 mm",
"0.025 mm",
"0.01 mm" };
}
SetElementVisibility( LAYER_WORKSHEET, cfg->m_Appearance.show_border_and_titleblock );
PAGE_INFO pageInfo( wxT( "GERBER" ) );
@ -953,26 +970,13 @@ void GERBVIEW_FRAME::DisplayGridMsg()
switch( m_userUnits )
{
case EDA_UNITS::INCHES:
gridformatter = "grid X %.6f Y %.6f";
break;
case EDA_UNITS::MILLIMETRES:
gridformatter = "grid X %.6f Y %.6f";
break;
default:
gridformatter = "grid X %f Y %f";
break;
case EDA_UNITS::INCHES: gridformatter = "grid X %.6f Y %.6f"; break;
case EDA_UNITS::MILLIMETRES: gridformatter = "grid X %.6f Y %.6f"; break;
default: gridformatter = "grid X %f Y %f"; break;
}
BASE_SCREEN* screen = GetScreen();
wxArrayString gridsList;
int icurr = screen->BuildGridsChoiceList( gridsList, m_userUnits != EDA_UNITS::INCHES );
GRID_TYPE& grid = screen->GetGrid( icurr );
double grid_x = To_User_Unit( m_userUnits, grid.m_Size.x );
double grid_y = To_User_Unit( m_userUnits, grid.m_Size.y );
double grid_x = To_User_Unit( m_userUnits, GetCanvas()->GetGAL()->GetGridSize().x );
double grid_y = To_User_Unit( m_userUnits, GetCanvas()->GetGAL()->GetGridSize().y );
line.Printf( gridformatter, grid_x, grid_y );
SetStatusText( line, 4 );
@ -1001,16 +1005,10 @@ void GERBVIEW_FRAME::UpdateStatusBar()
switch( GetUserUnits() )
{
case EDA_UNITS::INCHES:
formatter = wxT( "r %.6f theta %.1f" );
break;
case EDA_UNITS::MILLIMETRES:
formatter = wxT( "r %.5f theta %.1f" );
break;
case EDA_UNITS::UNSCALED:
formatter = wxT( "r %f theta %f" );
break;
default: wxASSERT( false ); break;
case EDA_UNITS::INCHES: formatter = wxT( "r %.6f theta %.1f" ); break;
case EDA_UNITS::MILLIMETRES: formatter = wxT( "r %.5f theta %.1f" ); break;
case EDA_UNITS::UNSCALED: formatter = wxT( "r %f theta %f" ); break;
default: wxASSERT( false ); break;
}
line.Printf( formatter, To_User_Unit( GetUserUnits(), ro ), theta );
@ -1101,7 +1099,7 @@ void GERBVIEW_FRAME::ActivateGalCanvas()
if( m_toolManager )
{
m_toolManager->SetEnvironment( m_gerberLayout, GetCanvas()->GetView(),
GetCanvas()->GetViewControls(), this );
GetCanvas()->GetViewControls(), config(), this );
m_toolManager->ResetTools( TOOL_BASE::GAL_SWITCH );
}
@ -1143,7 +1141,7 @@ void GERBVIEW_FRAME::setupTools()
// Create the manager and dispatcher & route draw panel events to the dispatcher
m_toolManager = new TOOL_MANAGER;
m_toolManager->SetEnvironment( m_gerberLayout, GetCanvas()->GetView(),
GetCanvas()->GetViewControls(), this );
GetCanvas()->GetViewControls(), config(), this );
m_actions = new GERBVIEW_ACTIONS();
m_toolDispatcher = new TOOL_DISPATCHER( m_toolManager, m_actions );
@ -1171,15 +1169,13 @@ void GERBVIEW_FRAME::updateGridSelectBox()
// Update grid values with the current units setting.
m_gridSelectBox->Clear();
wxArrayString gridsList;
int icurr = GetScreen()->BuildGridsChoiceList( gridsList, GetUserUnits() != EDA_UNITS::INCHES );
for( size_t i = 0; i < GetScreen()->GetGridCount(); i++ )
{
GRID_TYPE& grid = GetScreen()->GetGrid( i );
m_gridSelectBox->Append( gridsList[i], (void*) &grid.m_CmdId );
}
GRID_MENU::BuildChoiceList( &gridsList, config(), GetUserUnits() != EDA_UNITS::INCHES );
m_gridSelectBox->SetSelection( icurr );
for( const wxString& grid : gridsList )
m_gridSelectBox->Append( grid );
m_gridSelectBox->SetSelection( config()->m_Window.grid.last_size_idx );
}
@ -1210,30 +1206,6 @@ void GERBVIEW_FRAME::updateZoomSelectBox()
}
void GERBVIEW_FRAME::OnUpdateSelectZoom( wxUpdateUIEvent& aEvent )
{
if( m_zoomSelectBox == NULL || m_auxiliaryToolBar == NULL )
return;
int current = 0; // display Auto if no match found
// check for a match within 1%
double zoom = GetCanvas()->GetLegacyZoom();
for( unsigned i = 0; i < GetScreen()->m_ZoomList.size(); i++ )
{
if( std::fabs( zoom - GetScreen()->m_ZoomList[i] ) < ( zoom / 100.0 ) )
{
current = i + 1;
break;
}
}
if( current != m_zoomSelectBox->GetSelection() )
m_zoomSelectBox->SetSelection( current );
}
void GERBVIEW_FRAME::CommonSettingsChanged( bool aEnvVarsChanged )
{
EDA_DRAW_FRAME::CommonSettingsChanged( aEnvVarsChanged );

View File

@ -60,20 +60,8 @@ class GERBVIEW_FRAME : public EDA_DRAW_FRAME // PCB_BASE_FRAME
GBR_DISPLAY_OPTIONS m_DisplayOptions;
public:
/**
* Function GetDisplayOptions
* returns the display options current in use
*/
const GBR_DISPLAY_OPTIONS& GetDisplayOptions() const
{
return m_DisplayOptions;
}
void SetDisplayOptions( const GBR_DISPLAY_OPTIONS& aOptions )
{
m_DisplayOptions = aOptions;
}
const GBR_DISPLAY_OPTIONS& GetDisplayOptions() const { return m_DisplayOptions; }
void SetDisplayOptions( const GBR_DISPLAY_OPTIONS& aOptions ) { m_DisplayOptions = aOptions; }
/**
* Function SetLayout
@ -164,8 +152,6 @@ public:
// gerber data (format..)
private:
std::vector<PARAM_CFG*> m_configSettings;
int m_displayMode; // Gerber images ("layers" in Gerbview) can be drawn:
// - in fast mode (write mode) but if there are negative
// items only the last image is correctly drawn (no
@ -224,18 +210,15 @@ public:
/**
* Function ReCreateVToolbar
* creates or updates the right vertical toolbar.
*
* @note This is currently not used.
*/
void ReCreateVToolbar() override;
/**
* Create or update the left vertical toolbar (option toolbar
* Create or update the left vertical toolbar (option toolbar)
*/
void ReCreateOptToolbar() override;
void ReCreateMenuBar() override;
void OnUpdateSelectZoom( wxUpdateUIEvent& aEvent );
void UpdateStatusBar() override;
/**
@ -317,37 +300,26 @@ public:
void SetVisibleElementColor( int aLayerID, COLOR4D aColor );
/**
* Function GetLayerColor
* gets a layer color for any valid layer.
*/
COLOR4D GetLayerColor( int aLayer ) const;
/**
* Function SetLayerColor
* changes a layer color for any valid layer.
*/
void SetLayerColor( int aLayer, COLOR4D aColor );
/**
* Function GetNegativeItemsColor
* @return the color of negative items.
* This is usually the background color, but can be another color
* in order to see negative objects
* This is usually the background color, but can be another color in order to see
* negative objects
*/
COLOR4D GetNegativeItemsColor();
/**
* Function ReFillLayerWidget
* changes out all the layers in m_Layers and may be called upon
* loading new gerber files.
* changes out all the layers in m_Layers; called upon loading new gerber files.
*/
void ReFillLayerWidget();
/**
* Function SetActiveLayer
* will change the currently active layer to \a aLayer and also
* update the GERBER_LAYER_WIDGET.
* will change the currently active layer to \a aLayer and update the GERBER_LAYER_WIDGET.
*/
void SetActiveLayer( int aLayer, bool doLayerWidgetUpdate = true );
@ -366,26 +338,20 @@ public:
*/
int getNextAvailableLayer( int aLayer = 0 ) const;
bool hasAvailableLayers() const
{
return getNextAvailableLayer() != NO_AVAILABLE_LAYERS;
}
/**
* Function syncLayerWidget
* updates the currently "selected" layer within the GERBER_LAYER_WIDGET.
* The currently active layer is defined by the return value of GetActiveLayer().
* <p>
* This function cannot be inline without including layer_widget.h in
* here and we do not want to do that.
* This function cannot be inline without including layer_widget.h in here and we do not
* want to do that.
*/
void syncLayerWidget();
/**
* Function syncLayerBox
* updates the currently "selected" layer within m_SelLayerBox
* The currently active layer, as defined by the return value of
* GetActiveLayer().
* The currently active layer, as defined by the return value of GetActiveLayer().
* @param aRebuildLayerBox = true to rebuild the layer box
* false to just updates the selection.
*/
@ -393,9 +359,8 @@ public:
/**
* Function UpdateTitleAndInfo
* displays the short filename (if exists) of the selected layer
* on the caption of the main GerbView window
* and some other parameters
* displays the short filename (if exists) of the selected layer on the caption of the main
* GerbView window and some other parameters
* Name of the layer (found in the gerber file: LN &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
@ -407,7 +372,7 @@ public:
*
* Display the current grid pane on the status bar.
*/
void DisplayGridMsg();
void DisplayGridMsg() override;
void LoadSettings( APP_SETTINGS_BASE* aCfg ) override;

View File

@ -3,7 +3,7 @@
*
* Copyright (C) 2015 Jean-Pierre Charras, jaen-pierre.charras@gipsa-lab.inpg.com
* Copyright (C) 2011 Wayne Stambaugh <stambaughw@verizon.net>
* Copyright (C) 1992-2015 KiCad Developers, see AUTHORS.txt for contributors.
* Copyright (C) 1992-2020 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
@ -36,36 +36,6 @@
#include <undo_redo_container.h>
#include <common.h>
/**
* GRID_TYPE
* is for grid arrays.
*/
class GRID_TYPE
{
public:
int m_CmdId; // The command id of this grid ( first id is ID_POPUP_GRID_LEVEL_1000 )
wxRealPoint m_Size; // the size in internal unit of the grid (can differ for X and Y axis)
GRID_TYPE& operator=( const GRID_TYPE& item )
{
if( this != &item )
{
m_CmdId = item.m_CmdId;
m_Size = item.m_Size;
}
return *this;
}
const bool operator==( const GRID_TYPE& item ) const
{
return m_Size == item.m_Size && m_CmdId == item.m_CmdId;
}
};
typedef std::vector<GRID_TYPE> GRIDS;
/**
* BASE_SCREEN
@ -85,26 +55,8 @@ private:
*/
wxPoint m_crossHairPosition;
GRIDS m_grids; ///< List of valid grid sizes.
GRID_TYPE m_Grid; ///< Current grid selection.
double m_Zoom; ///< Current zoom coefficient.
//----< Old public API now is private, and migratory>------------------------
// called only from EDA_DRAW_FRAME
friend class EDA_DRAW_FRAME;
/**
* Function getNearestGridPosition
* returns the nearest \a aGridSize location to \a aPosition.
* @param aPosition The position to check.
* @param aGridOrigin The origin point of the snap grid.
* @return The nearst grid position.
*/
wxPoint getNearestGridPosition( const wxPoint& aPosition, const wxPoint& aGridOrigin ) const;
//----</Old public API now is private, and migratory>------------------------
public:
static wxString m_PageLayoutDescrFileName; ///< the name of the page layout descr file,
///< or emty to used the default pagelayout
@ -136,7 +88,6 @@ public:
int m_NumberOfScreens;
std::vector<double> m_ZoomList; ///< standard zoom (i.e. scale) coefficients.
bool m_IsPrinting;
public:
BASE_SCREEN( EDA_ITEM* aParent, KICAD_T aType = SCREEN_T );
@ -267,97 +218,6 @@ public:
*/
double GetMinAllowedZoom() const { return m_ZoomList.size() ? *m_ZoomList.begin() : 1.0; }
//----<grid stuff>----------------------------------------------------------
/**
* Return the command ID of the currently selected grid.
*
* @return int - Currently selected grid command ID.
*/
int GetGridCmdId() const { return m_Grid.m_CmdId; }
/**
* Return the grid size of the currently selected grid.
*
* @return wxRealPoint - The currently selected grid size.
*/
const wxRealPoint& GetGridSize() const { return m_Grid.m_Size; }
/**
* Return the grid object of the currently selected grid.
*
* @return GRID_TYPE - The currently selected grid.
*/
const GRID_TYPE& GetGrid() const { return m_Grid; }
/**
* set the current grid size m_Grid.
* The size must be existing in grid list (in m_grids)
* If not, the near existing grid size is used
* @param size = the size of the new grid
* @return the grid id offset (id from ID_POPUP_GRID_LEVEL_1000 )
* of the currently selected grid.
*/
int SetGrid( const wxRealPoint& size );
/**
* Function SetGrid
* sets the grid size from command ID (not an index in grid list, but a wxID).
* @param aCommandId = the wxWidgets command ID
* @return the grid id offset (id from ID_POPUP_GRID_LEVEL_1000 )
* of the currently selected grid.
*/
int SetGrid( int aCommandId );
void AddGrid( const GRID_TYPE& aGrid );
void AddGrid( const wxRealPoint& size, EDA_UNITS aUnit, int id );
/**
* Function GridExists
* tests for grid command ID (not an index in grid list, but a wxID) exists in grid list.
* @param aCommandId = the wxWidgets command ID
* @return true if the grid exists in grid list.
*/
bool GridExists( int aCommandId );
/**
* Function GetGridCount().
* Return the size of the grid list.
*
* @returns - The size of the grid list.
*/
size_t GetGridCount() const { return m_grids.size(); }
/**
* Function GetGrid()
* Returns the grid object at \a aIndex.
*
* @param aIndex - The grid list index.
* @return - The grid object at \a aIndex or the current grid if the grid list is empty.
*/
GRID_TYPE& GetGrid( size_t aIndex );
/**
* Function GetGrids().
* Returns the current list of grids.
*/
const GRIDS& GetGrids() const
{
return m_grids;
}
/**
* Function BuildGridsChoiceList().
* Build the human readable list of grid list, for menus or combo boxes
* the list shows the grid size both in mils or mm.
* @param aGridsList = a wxArrayString to populate
* @param aMmFirst = true to have mm first and mils after
* false to have mils first and mm after
* @return the index of the curr grid in list, if found or -1
*/
int BuildGridsChoiceList( wxArrayString& aGridsList, bool aMmFirst) const;
/**
* Function GetClass
* returns the class name.

View File

@ -40,7 +40,6 @@ class ACTION_TOOLBAR;
class COLOR_SETTINGS;
class TOOL_MENU;
class APP_SETTINGS_BASE;
class EDA_INFOBAR_PANEL;
namespace KIGFX
{
@ -81,10 +80,6 @@ protected:
std::unique_ptr<wxSingleInstanceChecker> m_file_checker; ///< prevents opening same file multiple times.
int m_LastGridSizeId; // The command id offset (>= 0) of the last selected
// grid 0 is for the grid corresponding to a
// wxCommand ID = ID_POPUP_GRID_LEVEL_1000.
bool m_drawGrid; // Hide/Show grid
bool m_showPageLimits; // True to display the page limits
COLOR4D m_gridColor; // Grid color
COLOR4D m_drawBgColor; // The background color of the draw canvas; BLACK for
@ -207,9 +202,6 @@ public:
virtual const wxPoint& GetGridOrigin() const = 0;
virtual void SetGridOrigin( const wxPoint& aPosition ) = 0;
int GetLastGridSizeId() const { return m_LastGridSizeId; }
void SetLastGridSizeId( int aId ) { m_LastGridSizeId = aId; }
/**
* Return the nearest \a aGridSize location to \a aPosition.
*
@ -223,14 +215,7 @@ public:
// the background color of the draw canvas:
// Virtual because some frames can have a specific way to get/set the bg color
/**
* @return the COLOR4D for the canvas background
*/
virtual COLOR4D GetDrawBgColor() const { return m_drawBgColor; }
/**
* @param aColor: the COLOR4D for the canvas background
*/
virtual void SetDrawBgColor( COLOR4D aColor) { m_drawBgColor= aColor ; }
/// Returns a pointer to the active color theme settings
@ -242,9 +227,8 @@ public:
virtual wxString GetScreenDesc() const;
/**
* Return a pointer to a BASE_SCREEN or one of its
* derivatives. It is overloaded by derived classes to return
* SCH_SCREEN or PCB_SCREEN.
* Return a pointer to a BASE_SCREEN or one of its derivatives. It is overloaded by
* derived classes to return SCH_SCREEN or PCB_SCREEN.
*/
virtual BASE_SCREEN* GetScreen() const { return m_currentScreen; }
@ -260,8 +244,7 @@ public:
virtual void ExecuteRemoteCommand( const char* cmdline ){}
/**
* Return a human readable value which can be displayed as zoom
* level indicator in dialogs.
* Return a human readable value for display in dialogs.
* this can be a percentage or other indicator.
* it is virtual because it could be different for pcbnew, gerbview or eeschema
* (different internal units and different purposes)
@ -286,8 +269,8 @@ public:
* These 4 functions provide a basic way to show/hide grid and /get/set grid color.
* These parameters are saved in KiCad config for each main frame.
*/
virtual bool IsGridVisible() const { return m_drawGrid; }
virtual void SetGridVisibility( bool aVisible ) { m_drawGrid = aVisible; }
bool IsGridVisible() const;
virtual void SetGridVisibility( bool aVisible );
virtual COLOR4D GetGridColor() { return m_gridColor; }
virtual void SetGridColor( COLOR4D aColor ) { m_gridColor = aColor; }
@ -345,9 +328,6 @@ public:
*/
void FocusOnLocation( const wxPoint& aPos );
/**
* @return The current zoom level.
*/
double GetZoom();
/**
@ -388,14 +368,14 @@ public:
void UpdateStatusBar() override;
/**
* Display current unit pane on the status bar.
* Display current unit pane in the status bar.
*/
void DisplayUnitsMsg();
/**
* Display current grid pane on the status bar.
* Display current grid size in the status bar.
*/
void DisplayGridMsg();
virtual void DisplayGridMsg();
/* interprocess communication */
void CreateServer( int service, bool local = true );

View File

@ -847,10 +847,9 @@ public:
*
* @param aVisibility is the new visibility setting of the grid.
*/
inline void SetGridVisibility( bool aVisibility )
{
gridVisibility = aVisibility;
}
void SetGridVisibility( bool aVisibility ) { gridVisibility = aVisibility; }
bool GetGridVisibility() const { return gridVisibility; }
/**
* @brief Set the origin point for the grid.
@ -868,6 +867,11 @@ public:
(long) gridOrigin.y % (long) gridSize.y );
}
inline const VECTOR2D& GetGridOrigin() const
{
return gridOrigin;
}
/**
* @brief Set the grid size.
*

View File

@ -72,12 +72,6 @@ wxDECLARE_EVENT( BOARD_CHANGED, wxCommandEvent );
*/
class PCB_BASE_FRAME : public EDA_DRAW_FRAME
{
public:
wxPoint m_UserGridSize;
int m_FastGrid1; // 1st fast grid setting (index in EDA_DRAW_FRAME::m_gridSelectBox)
int m_FastGrid2; // 2nd fast grid setting (index in EDA_DRAW_FRAME::m_gridSelectBox)
protected:
BOARD* m_Pcb;
@ -181,19 +175,11 @@ public:
/**
* Function GetDisplayOptions
* returns the display options current in use
* Display options are relative to the way tracks, vias, outlines
* and other things are shown (for instance solid or sketch mode)
* Display options control the way tracks, vias, outlines and other things are shown
* (for instance solid or sketch mode)
*/
const PCB_DISPLAY_OPTIONS& GetDisplayOptions() const
{
return m_DisplayOptions;
}
void SetDisplayOptions( const PCB_DISPLAY_OPTIONS& aOptions )
{
m_DisplayOptions = aOptions;
}
const PCB_DISPLAY_OPTIONS& GetDisplayOptions() const { return m_DisplayOptions; }
void SetDisplayOptions( const PCB_DISPLAY_OPTIONS& aOptions ) { m_DisplayOptions = aOptions; }
const ZONE_SETTINGS& GetZoneSettings() const;
void SetZoneSettings( const ZONE_SETTINGS& aSettings );
@ -243,9 +229,7 @@ public:
/**
* Function GetZoomLevelIndicator
* returns a human readable value which can be displayed as zoom
* level indicator in dialogs.
* Virtual from the base class
* returns a human readable value for display in dialogs.
*/
const wxString GetZoomLevelIndicator() const override;
@ -258,8 +242,7 @@ public:
/**
* Function GetCollectorsGuide
* @return GENERAL_COLLECTORS_GUIDE - that considers the global
*configuration options.
* @return GENERAL_COLLECTORS_GUIDE - that considers the global configuration options.
*/
GENERAL_COLLECTORS_GUIDE GetCollectorsGuide();
@ -274,20 +257,18 @@ public:
/**
* Function GetFootprintFromBoardByReference
* @return a reference to the footprint found by its refence
* on the curent board. the reference is entered by the user from
* a dialog (by awxTextCtlr, or a list of available references)
* @return a reference to the footprint found by its refence on the curent board. The
* reference is entered by the user from a dialog (by awxTextCtlr, or a list of
* available references)
*/
MODULE* GetFootprintFromBoardByReference();
/**
* Function OnModify
* Virtual
* Must be called after a change
* in order to set the "modify" flag of the current screen
* and update the date in frame reference
* do not forget to call this basic OnModify function to update info
* in derived OnModify functions
* Must be called after a change in order to set the "modify" flag of the current screen
* and update the date in frame reference.
* Do not forget to call this basic OnModify function to update info in derived OnModify
* functions.
*/
virtual void OnModify();
@ -306,8 +287,6 @@ public:
*/
MODULE* CreateNewModule( const wxString& aModuleName );
void Edit_Module( MODULE* module, wxDC* DC );
/**
* Function PlaceModule
* places \a aModule at the current cursor position and updates module coordinates
@ -343,7 +322,6 @@ public:
*/
wxString SelectFootprintFromLibBrowser();
// ratsnest functions
/**
* Function Compile_Ratsnest
* Create the entire board ratsnest.
@ -365,8 +343,7 @@ public:
* @param aTransformPoint = the reference point of the transformation, for
* commands like move
*/
virtual void SaveCopyInUndoList( BOARD_ITEM* aItemToCopy,
UNDO_REDO_T aTypeCommand,
virtual void SaveCopyInUndoList( BOARD_ITEM* aItemToCopy, UNDO_REDO_T aTypeCommand,
const wxPoint& aTransformPoint = wxPoint( 0, 0 ) ) = 0;
/**
@ -378,8 +355,7 @@ public:
* @param aTransformPoint = the reference point of the transformation,
* for commands like move
*/
virtual void SaveCopyInUndoList( const PICKED_ITEMS_LIST& aItemsList,
UNDO_REDO_T aTypeCommand,
virtual void SaveCopyInUndoList( const PICKED_ITEMS_LIST& aItemsList, UNDO_REDO_T aTypeCommand,
const wxPoint& aTransformPoint = wxPoint( 0, 0 ) ) = 0;
@ -390,9 +366,8 @@ public:
* @param aDlgPosition = position of dialog ( defualt = centered)
* @return the selected layer id
*/
PCB_LAYER_ID SelectLayer( PCB_LAYER_ID aDefaultLayer,
LSET aNotAllowedLayersMask = LSET(),
wxPoint aDlgPosition = wxDefaultPosition );
PCB_LAYER_ID SelectLayer( PCB_LAYER_ID aDefaultLayer, LSET aNotAllowedLayersMask = LSET(),
wxPoint aDlgPosition = wxDefaultPosition );
virtual void SwitchLayer( wxDC* DC, PCB_LAYER_ID layer );
@ -430,43 +405,12 @@ public:
virtual void OnUpdateLayerAlpha( wxUpdateUIEvent& aEvent ) {}
/**
* Function SetFastGrid1()
*
* Switches grid settings to the 1st "fast" setting predefined by user.
*/
void SetFastGrid1();
/**
* Function SetFastGrid2()
*
* Switches grid settings to the 1st "fast" setting predefined by user.
*/
void SetFastGrid2();
/**
* Function IsGridVisible()
*
* @return true if the grid is shown
*/
virtual bool IsGridVisible() const override;
/**
* Function SetGridVisibility()
* Turn the display of the canvas grid on/off
*
* Note: After calling, the view must be refreshed to update the grid display
*
* @param aVisible = true if the grid is shown
*/
virtual void SetGridVisibility( bool aVisible ) override;
/**
* Function DisplayGridMsg()
*
* Display the current grid pane on the status bar.
*/
void DisplayGridMsg();
void DisplayGridMsg() override;
PCB_DRAW_PANEL_GAL* GetCanvas() const override;
@ -474,14 +418,12 @@ public:
virtual void ActivateGalCanvas() override;
/**
* Doesn't do anything. Should be overrided in child classes if they
* support an auto zoom setting.
* Does nothing. Should be overriden in derived classes which support autozoom.
*/
virtual void SetAutoZoom( bool aAutoZoom ) {}
/**
* Always returns false. Should be overriden in child classes if they
* support an autozoom setting.
* Always returns false. Should be overriden in derived classes which support autozoom.
*/
virtual bool GetAutoZoom() { return false; }

View File

@ -39,13 +39,17 @@ struct CURSOR_SETTINGS
struct GRID_SETTINGS
{
bool axes_enabled;
int last_size;
std::vector<wxString> sizes;
wxString user_grid_x;
wxString user_grid_y;
int last_size_idx;
double line_width;
double min_spacing;
bool show;
int style;
};
/**
* Stores the common settings that are saved and loaded for each window / frame
*/
@ -113,7 +117,7 @@ public:
int units;
};
APP_SETTINGS_BASE( std::string aFilename, int aSchemaVersion );
APP_SETTINGS_BASE( const std::string& aFilename, int aSchemaVersion );
virtual ~APP_SETTINGS_BASE() {}

View File

@ -81,6 +81,7 @@ public:
int ToggleGrid( const TOOL_EVENT& aEvent );
int GridProperties( const TOOL_EVENT& aEvent );
int GridPreset( int idx );
int OnGridChanged();
int SwitchCanvas( const TOOL_EVENT& aEvent );
@ -95,6 +96,8 @@ private:
///> Note: idx == 0 is Auto; idx == 1 is first entry in zoomList
int doZoomToPreset( int idx, bool aCenterOnCursor );
std::vector<VECTOR2I> m_grids; // grids from APP_SETTINGS converted to internal units
};
#endif

View File

@ -28,12 +28,15 @@
#include <tool/action_menu.h>
class EDA_DRAW_FRAME;
class APP_SETTINGS_BASE;
class GRID_MENU : public ACTION_MENU
{
public:
GRID_MENU( EDA_DRAW_FRAME* aParent );
static void BuildChoiceList( wxArrayString* aGridsList, APP_SETTINGS_BASE* aCfg, bool mmFirst );
private:
ACTION_MENU* create() const override
{

View File

@ -38,6 +38,7 @@ class TOOLS_HOLDER;
class TOOL_BASE;
class ACTION_MANAGER;
class ACTION_MENU;
class APP_SETTINGS_BASE;
/**
@ -274,28 +275,24 @@ public:
* These are made available to the tool. Called by the parent frame when it is set up.
*/
void SetEnvironment( EDA_ITEM* aModel, KIGFX::VIEW* aView,
KIGFX::VIEW_CONTROLS* aViewControls, TOOLS_HOLDER* aFrame );
KIGFX::VIEW_CONTROLS* aViewControls, APP_SETTINGS_BASE* aSettings,
TOOLS_HOLDER* aFrame );
/* Accessors for the environment objects (view, model, etc.) */
KIGFX::VIEW* GetView() const
{
return m_view;
}
/*
* Accessors for the environment objects (view, model, etc.)
* */
KIGFX::VIEW* GetView() const { return m_view; }
inline KIGFX::VIEW_CONTROLS* GetViewControls() const
{
return m_viewControls;
}
KIGFX::VIEW_CONTROLS* GetViewControls() const { return m_viewControls; }
VECTOR2D GetMousePosition();
VECTOR2D GetCursorPosition();
inline EDA_ITEM* GetModel() const
{
return m_model;
}
EDA_ITEM* GetModel() const { return m_model; }
inline TOOLS_HOLDER* GetToolHolder() const { return m_frame; }
APP_SETTINGS_BASE* GetSettings() const { return m_settings; }
TOOLS_HOLDER* GetToolHolder() const { return m_frame; }
/**
* Returns id of the tool that is on the top of the active tools stack
@ -545,6 +542,7 @@ private:
KIGFX::VIEW* m_view;
KIGFX::VIEW_CONTROLS* m_viewControls;
TOOLS_HOLDER* m_frame;
APP_SETTINGS_BASE* m_settings;
/// Queue that stores events to be processed at the end of the event processing cycle.
std::list<TOOL_EVENT> m_eventQueue;

View File

@ -127,7 +127,7 @@ KICAD_MANAGER_FRAME::KICAD_MANAGER_FRAME( wxWindow* parent, const wxString& titl
// Create the manager
m_toolManager = new TOOL_MANAGER;
m_toolManager->SetEnvironment( nullptr, nullptr, nullptr, this );
m_toolManager->SetEnvironment( nullptr, nullptr, nullptr, config(), this );
m_actions = new KICAD_MANAGER_ACTIONS();
// Register tools

View File

@ -173,7 +173,6 @@ void PLEDITOR_PRINTOUT::PrintPage( int aPageNum )
GRResetPenAndBrush( dc );
GRForceBlackPen( true );
screen->m_IsPrinting = true;
COLOR4D bg_color = m_parent->GetDrawBgColor();
m_parent->SetDrawBgColor( MakeColour( WHITE ) );
@ -201,7 +200,6 @@ void PLEDITOR_PRINTOUT::PrintPage( int aPageNum )
m_parent->PrintWorkSheet( &renderSettings, screen, IU_PER_MILS, wxEmptyString );
m_parent->SetDrawBgColor( bg_color );
screen->m_IsPrinting = false;
GRForceBlackPen( false );

View File

@ -197,11 +197,6 @@ PL_EDITOR_FRAME::PL_EDITOR_FRAME( KIWAY* aKiway, wxWindow* aParent ) :
wxPoint originCoord = ReturnCoordOriginCorner();
SetGridOrigin( originCoord );
if( !GetScreen()->GridExists( m_LastGridSizeId + ID_POPUP_GRID_LEVEL_1000 ) )
m_LastGridSizeId = ID_POPUP_GRID_LEVEL_1MM - ID_POPUP_GRID_LEVEL_1000;
GetToolManager()->RunAction( "common.Control.gridPreset", true, m_LastGridSizeId );
// Initialize the current page layout
WS_DATA_MODEL& pglayout = WS_DATA_MODEL::GetTheInstance();
#if 0 //start with empty layout
@ -229,7 +224,7 @@ void PL_EDITOR_FRAME::setupTools()
// Create the manager and dispatcher & route draw panel events to the dispatcher
m_toolManager = new TOOL_MANAGER;
m_toolManager->SetEnvironment( nullptr, GetCanvas()->GetView(),
GetCanvas()->GetViewControls(), this );
GetCanvas()->GetViewControls(), config(), this );
m_actions = new PL_ACTIONS();
m_toolDispatcher = new TOOL_DISPATCHER( m_toolManager, m_actions );
@ -428,7 +423,17 @@ void PL_EDITOR_FRAME::LoadSettings( APP_SETTINGS_BASE* aCfg )
{
EDA_DRAW_FRAME::LoadSettings( aCfg );
auto cfg = static_cast<PL_EDITOR_SETTINGS*>( aCfg );
PL_EDITOR_SETTINGS* cfg = dynamic_cast<PL_EDITOR_SETTINGS*>( aCfg );
wxCHECK( cfg, /*void*/ );
if( cfg->m_Window.grid.sizes.empty() )
{
cfg->m_Window.grid.sizes = { "1.0 mm",
"0.50 mm",
"0.25 mm",
"0.20 mm",
"0.10 mm" };
}
m_propertiesFrameWidth = cfg->m_PropertiesFrameWidth;
m_originSelectChoice = cfg->m_CornerOrigin;
@ -571,17 +576,12 @@ void PL_EDITOR_FRAME::DisplayGridMsg()
switch( m_userUnits )
{
case EDA_UNITS::INCHES:
gridformatter = "grid %.3f";
break;
case EDA_UNITS::MILLIMETRES:
gridformatter = "grid %.4f";
break;
default: gridformatter = "grid %f"; break;
case EDA_UNITS::INCHES: gridformatter = "grid %.3f"; break;
case EDA_UNITS::MILLIMETRES: gridformatter = "grid %.4f"; break;
default: gridformatter = "grid %f"; break;
}
wxRealPoint curr_grid_size = GetScreen()->GetGridSize();
double grid = To_User_Unit( m_userUnits, curr_grid_size.x );
double grid = To_User_Unit( m_userUnits, GetCanvas()->GetGAL()->GetGridSize().x );
line.Printf( gridformatter, grid );
SetStatusText( line, 4 );

View File

@ -57,13 +57,8 @@ class PL_EDITOR_FRAME : public EDA_DRAW_FRAME
protected:
/// The last filename chosen to be proposed to the user
wxString m_lastFileName;
PROPERTIES_FRAME* m_propertiesPagelayout;
private:
// list of PARAM_CFG_xxx to read/write parameters saved in config
std::vector<PARAM_CFG*> m_configSettings;
public:
PL_EDITOR_FRAME( KIWAY* aKiway, wxWindow* aParent );
~PL_EDITOR_FRAME();
@ -147,15 +142,8 @@ public:
}
void SetAuxOrigin( const wxPoint& aPosition ) override {}
const wxPoint& GetGridOrigin() const override
{
return m_grid_origin;
}
void SetGridOrigin( const wxPoint& aPoint ) override
{
m_grid_origin = aPoint;
}
const wxPoint& GetGridOrigin() const override { return m_grid_origin; }
void SetGridOrigin( const wxPoint& aPoint ) override { m_grid_origin = aPoint; }
/**
* calculate the position (in page, in iu) of the corner used as coordinate origin
@ -166,7 +154,7 @@ public:
const TITLE_BLOCK& GetTitleBlock() const override;
void SetTitleBlock( const TITLE_BLOCK& aTitleBlock ) override;
void DisplayGridMsg();
void DisplayGridMsg() override;
void UpdateStatusBar() override;

View File

@ -24,14 +24,10 @@
*/
#include <fctsys.h>
#include <common.h>
#include <macros.h>
#include <pl_editor_screen.h>
#include <base_units.h>
#include <pl_editor_id.h>
#define MM_GRID( x ) wxRealPoint( x * IU_PER_MM, x * IU_PER_MM )
#define ZOOM_FACTOR( x ) ( x * IU_PER_MM / 1000 )
@ -62,33 +58,15 @@ static const double pl_editorZoomList[] =
};
// Default grid sizes for page layout editor screens.
static GRID_TYPE pl_editorGridList[] =
{
// predefined grid list in mm
{ ID_POPUP_GRID_LEVEL_1MM, MM_GRID( 1.0 ) },
{ ID_POPUP_GRID_LEVEL_0_5MM, MM_GRID( 0.5 ) },
{ ID_POPUP_GRID_LEVEL_0_25MM, MM_GRID( 0.25 ) },
{ ID_POPUP_GRID_LEVEL_0_2MM, MM_GRID( 0.2 ) },
{ ID_POPUP_GRID_LEVEL_0_1MM, MM_GRID( 0.1 ) },
};
PL_EDITOR_SCREEN::PL_EDITOR_SCREEN( const wxSize& aPageSizeIU ) :
BASE_SCREEN( SCREEN_T )
{
for( double zoom : pl_editorZoomList )
m_ZoomList.push_back( zoom );
for( GRID_TYPE grid : pl_editorGridList )
AddGrid( grid );
// pl_editor uses the same frame position as schematic and board editors
m_Center = false;
// Set the working grid size to a reasonable value
SetGrid( MM_GRID( 1.0 ) );
InitDataPoints( aPageSizeIU );
m_NumberOfScreens = 2;
}

View File

@ -1,7 +1,3 @@
/**
* @file pl_editor_screen.h
*/
/*
* This program source code file is part of KiCad, a free EDA CAD application.
*
@ -30,13 +26,11 @@
#define CLASS_PL_EDITOR_SCREEN_H_
#include <base_units.h>
#include <base_screen.h>
class WS_DATA_ITEM;
/* Handle info to display a board */
class PL_EDITOR_SCREEN : public BASE_SCREEN
{
public:

View File

@ -24,6 +24,8 @@
#include <dialog_set_grid_base.h>
#include <base_units.h>
#include <common.h>
#include <settings/app_settings.h>
#include <pcbnew_settings.h>
#include <widgets/unit_binder.h>
#include <pcb_base_edit_frame.h>
#include <tools/pcb_actions.h>
@ -31,6 +33,7 @@
#include <id.h>
#include <tool/common_tools.h>
#include <math/util.h> // for KiROUND
#include <tool/grid_menu.h>
// Max values for grid size
static const int MAX_GRID_SIZE = KiROUND( 1000.0 * IU_PER_MM );
@ -40,11 +43,10 @@ static const int MIN_GRID_SIZE = KiROUND( 0.001 * IU_PER_MM );
class DIALOG_SET_GRID : public DIALOG_SET_GRID_BASE
{
PCB_BASE_FRAME* m_parent;
wxArrayString m_fast_grid_opts;
public:
/// This has no dependencies on calling wxFrame derivative, such as PCB_BASE_FRAME.
DIALOG_SET_GRID( PCB_BASE_FRAME* aParent, const wxArrayString& aGridChoices );
DIALOG_SET_GRID( PCB_BASE_FRAME* aParent );
bool TransferDataFromWindow() override;
bool TransferDataToWindow() override;
@ -59,17 +61,18 @@ private:
};
DIALOG_SET_GRID::DIALOG_SET_GRID( PCB_BASE_FRAME* aParent, const wxArrayString& aGridChoices ):
DIALOG_SET_GRID::DIALOG_SET_GRID( PCB_BASE_FRAME* aParent ):
DIALOG_SET_GRID_BASE( aParent ),
m_parent( aParent ),
m_fast_grid_opts( aGridChoices ),
m_gridOriginX( aParent, m_staticTextGridPosX, m_GridOriginXCtrl, m_TextPosXUnits ),
m_gridOriginY( aParent, m_staticTextGridPosY, m_GridOriginYCtrl, m_TextPosYUnits ),
m_userGridX( aParent, m_staticTextSizeX, m_OptGridSizeX, m_TextSizeXUnits ),
m_userGridY( aParent, m_staticTextSizeY, m_OptGridSizeY, m_TextSizeYUnits )
m_userGridX( aParent, m_staticTextSizeX, m_OptGridSizeX, m_TextSizeXUnits, true ),
m_userGridY( aParent, m_staticTextSizeY, m_OptGridSizeY, m_TextSizeYUnits, true )
{
m_grid1Ctrl->Append( m_fast_grid_opts );
m_grid2Ctrl->Append( m_fast_grid_opts );
wxArrayString grids;
GRID_MENU::BuildChoiceList( &grids, m_parent->config(), GetUserUnits() != EDA_UNITS::INCHES );
m_grid1Ctrl->Append( grids );
m_grid2Ctrl->Append( grids );
m_sdbSizerOK->SetDefault(); // set OK button as default response to 'Enter' key
SetInitialFocus( m_GridOriginXCtrl );
@ -91,26 +94,19 @@ bool DIALOG_SET_GRID::TransferDataFromWindow()
return false;
// Apply the new settings
GRID_SETTINGS& gridCfg = m_parent->config()->m_Window.grid;
// Because grid origin is saved in board, show as modified
m_parent->OnModify();
m_parent->SetGridOrigin( wxPoint( m_gridOriginX.GetValue(), m_gridOriginY.GetValue() ) );
m_parent->m_UserGridSize = wxPoint( m_userGridX.GetValue(), m_userGridY.GetValue() );
m_parent->m_FastGrid1 = m_grid1Ctrl->GetSelection();
m_parent->m_FastGrid2 = m_grid2Ctrl->GetSelection();
// User grid
BASE_SCREEN* screen = m_parent->GetScreen();
screen->AddGrid( m_parent->m_UserGridSize, EDA_UNITS::UNSCALED, ID_POPUP_GRID_USER );
// If the user grid is the current option, recall SetGrid()
// to force new values put in list as current grid value
if( screen->GetGridCmdId() == ID_POPUP_GRID_USER )
screen->SetGrid( ID_POPUP_GRID_USER );
gridCfg.user_grid_x = StringFromValue( GetUserUnits(), m_userGridX.GetValue(), true, true );
gridCfg.user_grid_y = StringFromValue( GetUserUnits(), m_userGridY.GetValue(), true, true );
m_parent->Settings().m_FastGrid1 = m_grid1Ctrl->GetSelection();
m_parent->Settings().m_FastGrid2 = m_grid2Ctrl->GetSelection();
// Notify GAL
TOOL_MANAGER* mgr = m_parent->GetToolManager();
mgr->GetTool<COMMON_TOOLS>()->GridPreset( screen->GetGridCmdId() - ID_POPUP_GRID_LEVEL_1000 );
mgr->RunAction( ACTIONS::gridPreset, true, gridCfg.last_size_idx );
mgr->RunAction( ACTIONS::gridSetOrigin, true, new VECTOR2D( m_parent->GetGridOrigin() ) );
m_parent->UpdateGridSelectBox();
@ -121,14 +117,16 @@ bool DIALOG_SET_GRID::TransferDataFromWindow()
bool DIALOG_SET_GRID::TransferDataToWindow()
{
m_userGridX.SetValue( m_parent->m_UserGridSize.x );
m_userGridY.SetValue( m_parent->m_UserGridSize.y );
GRID_SETTINGS& settings = m_parent->config()->m_Window.grid;
m_userGridX.SetValue( ValueFromString( GetUserUnits(), settings.user_grid_x, true ) );
m_userGridY.SetValue( ValueFromString( GetUserUnits(), settings.user_grid_y, true ) );
m_gridOriginX.SetValue( m_parent->GetGridOrigin().x );
m_gridOriginY.SetValue( m_parent->GetGridOrigin().y );
m_grid1Ctrl->SetSelection( m_parent->m_FastGrid1 );
m_grid2Ctrl->SetSelection( m_parent->m_FastGrid2 );
m_grid1Ctrl->SetSelection( m_parent->Settings().m_FastGrid1 );
m_grid2Ctrl->SetSelection( m_parent->Settings().m_FastGrid2 );
int hk1 = ACTIONS::gridFast1.GetHotKey();
int hk2 = ACTIONS::gridFast2.GetHotKey();
@ -148,7 +146,7 @@ void DIALOG_SET_GRID::OnResetGridOrgClick( wxCommandEvent& event )
void PCB_BASE_EDIT_FRAME::OnGridSettings( wxCommandEvent& event )
{
DIALOG_SET_GRID dlg( this, m_gridSelectBox->GetStrings() );
DIALOG_SET_GRID dlg( this );
dlg.ShowModal();

View File

@ -1,5 +1,5 @@
///////////////////////////////////////////////////////////////////////////
// C++ code generated with wxFormBuilder (version Dec 30 2017)
// C++ code generated with wxFormBuilder (version Oct 26 2018)
// http://www.wxformbuilder.org/
//
// PLEASE DO *NOT* EDIT THIS FILE!
@ -12,164 +12,164 @@
DIALOG_SET_GRID_BASE::DIALOG_SET_GRID_BASE( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style ) : DIALOG_SHIM( parent, id, title, pos, size, style )
{
this->SetSizeHints( wxDefaultSize, wxDefaultSize );
wxBoxSizer* bSizerMain;
bSizerMain = new wxBoxSizer( wxVERTICAL );
wxBoxSizer* bUpperSizer;
bUpperSizer = new wxBoxSizer( wxHORIZONTAL );
wxStaticBoxSizer* sbLeftSizer;
sbLeftSizer = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Grid Origin") ), wxVERTICAL );
wxFlexGridSizer* fgSizerGridOrigin;
fgSizerGridOrigin = new wxFlexGridSizer( 2, 3, 0, 0 );
fgSizerGridOrigin->AddGrowableCol( 1 );
fgSizerGridOrigin->SetFlexibleDirection( wxBOTH );
fgSizerGridOrigin->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
m_staticTextGridPosX = new wxStaticText( sbLeftSizer->GetStaticBox(), wxID_ANY, _("X:"), wxDefaultPosition, wxDefaultSize, 0 );
m_staticTextGridPosX->Wrap( -1 );
fgSizerGridOrigin->Add( m_staticTextGridPosX, 0, wxALIGN_CENTER_VERTICAL, 5 );
m_GridOriginXCtrl = new wxTextCtrl( sbLeftSizer->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
fgSizerGridOrigin->Add( m_GridOriginXCtrl, 0, wxEXPAND|wxLEFT, 5 );
m_TextPosXUnits = new wxStaticText( sbLeftSizer->GetStaticBox(), wxID_ANY, _("mm"), wxDefaultPosition, wxDefaultSize, 0 );
m_TextPosXUnits->Wrap( -1 );
fgSizerGridOrigin->Add( m_TextPosXUnits, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_LEFT, 5 );
fgSizerGridOrigin->Add( m_TextPosXUnits, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_LEFT|wxLEFT, 5 );
m_staticTextGridPosY = new wxStaticText( sbLeftSizer->GetStaticBox(), wxID_ANY, _("Y:"), wxDefaultPosition, wxDefaultSize, 0 );
m_staticTextGridPosY->Wrap( -1 );
fgSizerGridOrigin->Add( m_staticTextGridPosY, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM, 5 );
m_GridOriginYCtrl = new wxTextCtrl( sbLeftSizer->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
fgSizerGridOrigin->Add( m_GridOriginYCtrl, 0, wxEXPAND|wxTOP|wxBOTTOM|wxLEFT, 5 );
m_TextPosYUnits = new wxStaticText( sbLeftSizer->GetStaticBox(), wxID_ANY, _("mm"), wxDefaultPosition, wxDefaultSize, 0 );
m_TextPosYUnits->Wrap( -1 );
fgSizerGridOrigin->Add( m_TextPosYUnits, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_LEFT, 5 );
fgSizerGridOrigin->Add( m_TextPosYUnits, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_LEFT|wxLEFT, 5 );
sbLeftSizer->Add( fgSizerGridOrigin, 0, wxEXPAND|wxALL, 5 );
bUpperSizer->Add( sbLeftSizer, 1, wxEXPAND|wxALL, 5 );
wxStaticBoxSizer* sbUserGridSizer;
sbUserGridSizer = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("User Defined Grid") ), wxVERTICAL );
wxFlexGridSizer* fgSizer31;
fgSizer31 = new wxFlexGridSizer( 2, 3, 0, 0 );
fgSizer31->AddGrowableCol( 1 );
fgSizer31->SetFlexibleDirection( wxBOTH );
fgSizer31->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
m_staticTextSizeX = new wxStaticText( sbUserGridSizer->GetStaticBox(), wxID_ANY, _("Size X:"), wxDefaultPosition, wxDefaultSize, 0 );
m_staticTextSizeX->Wrap( -1 );
fgSizer31->Add( m_staticTextSizeX, 0, wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxRIGHT, 5 );
m_OptGridSizeX = new wxTextCtrl( sbUserGridSizer->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
fgSizer31->Add( m_OptGridSizeX, 0, wxEXPAND|wxBOTTOM|wxLEFT, 5 );
m_TextSizeXUnits = new wxStaticText( sbUserGridSizer->GetStaticBox(), wxID_ANY, _("mm"), wxDefaultPosition, wxDefaultSize, 0 );
m_TextSizeXUnits->Wrap( -1 );
fgSizer31->Add( m_TextSizeXUnits, 0, wxALIGN_CENTER_VERTICAL|wxBOTTOM, 5 );
fgSizer31->Add( m_TextSizeXUnits, 0, wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxLEFT, 5 );
m_staticTextSizeY = new wxStaticText( sbUserGridSizer->GetStaticBox(), wxID_ANY, _("Size Y:"), wxDefaultPosition, wxDefaultSize, 0 );
m_staticTextSizeY->Wrap( -1 );
fgSizer31->Add( m_staticTextSizeY, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 );
m_OptGridSizeY = new wxTextCtrl( sbUserGridSizer->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
fgSizer31->Add( m_OptGridSizeY, 0, wxEXPAND|wxLEFT, 5 );
m_TextSizeYUnits = new wxStaticText( sbUserGridSizer->GetStaticBox(), wxID_ANY, _("mm"), wxDefaultPosition, wxDefaultSize, 0 );
m_TextSizeYUnits->Wrap( -1 );
fgSizer31->Add( m_TextSizeYUnits, 0, wxALIGN_CENTER_VERTICAL, 5 );
fgSizer31->Add( m_TextSizeYUnits, 0, wxALIGN_CENTER_VERTICAL|wxLEFT, 5 );
sbUserGridSizer->Add( fgSizer31, 0, wxEXPAND|wxALL, 5 );
bUpperSizer->Add( sbUserGridSizer, 1, wxEXPAND|wxTOP|wxBOTTOM|wxLEFT, 5 );
bSizerMain->Add( bUpperSizer, 0, wxEXPAND|wxTOP|wxRIGHT|wxLEFT, 5 );
wxStaticBoxSizer* sbFastSwitchSizer;
sbFastSwitchSizer = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Fast Switching") ), wxVERTICAL );
wxFlexGridSizer* fgSizer3;
fgSizer3 = new wxFlexGridSizer( 2, 3, 0, 5 );
fgSizer3->AddGrowableCol( 1 );
fgSizer3->SetFlexibleDirection( wxBOTH );
fgSizer3->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
m_staticTextGrid1 = new wxStaticText( sbFastSwitchSizer->GetStaticBox(), wxID_ANY, _("Grid 1:"), wxDefaultPosition, wxDefaultSize, 0 );
m_staticTextGrid1->Wrap( -1 );
fgSizer3->Add( m_staticTextGrid1, 0, wxALIGN_CENTER_VERTICAL, 5 );
wxArrayString m_grid1CtrlChoices;
m_grid1Ctrl = new wxChoice( sbFastSwitchSizer->GetStaticBox(), wxID_ANY, wxDefaultPosition, wxDefaultSize, m_grid1CtrlChoices, 0 );
m_grid1Ctrl->SetSelection( 0 );
m_grid1Ctrl->SetMinSize( wxSize( 240,-1 ) );
fgSizer3->Add( m_grid1Ctrl, 1, wxALL, 5 );
m_grid1HotKey = new wxStaticText( sbFastSwitchSizer->GetStaticBox(), wxID_ANY, _("(hotkey)"), wxDefaultPosition, wxDefaultSize, 0 );
m_grid1HotKey->Wrap( -1 );
fgSizer3->Add( m_grid1HotKey, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
m_staticTextGrid2 = new wxStaticText( sbFastSwitchSizer->GetStaticBox(), wxID_ANY, _("Grid 2:"), wxDefaultPosition, wxDefaultSize, 0 );
m_staticTextGrid2->Wrap( -1 );
fgSizer3->Add( m_staticTextGrid2, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT, 5 );
wxArrayString m_grid2CtrlChoices;
m_grid2Ctrl = new wxChoice( sbFastSwitchSizer->GetStaticBox(), wxID_ANY, wxDefaultPosition, wxDefaultSize, m_grid2CtrlChoices, 0 );
m_grid2Ctrl->SetSelection( 0 );
m_grid2Ctrl->SetMinSize( wxSize( 240,-1 ) );
fgSizer3->Add( m_grid2Ctrl, 1, wxALL, 5 );
m_grid2HotKey = new wxStaticText( sbFastSwitchSizer->GetStaticBox(), wxID_ANY, _("(hotkey)"), wxDefaultPosition, wxDefaultSize, 0 );
m_grid2HotKey->Wrap( -1 );
fgSizer3->Add( m_grid2HotKey, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
sbFastSwitchSizer->Add( fgSizer3, 0, wxEXPAND|wxTOP|wxBOTTOM|wxLEFT, 5 );
bSizerMain->Add( sbFastSwitchSizer, 0, wxEXPAND|wxALL, 10 );
m_staticline1 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL );
bSizerMain->Add( m_staticline1, 0, wxEXPAND|wxRIGHT|wxLEFT, 5 );
wxBoxSizer* bButtonSizer;
bButtonSizer = new wxBoxSizer( wxHORIZONTAL );
m_buttonReset = new wxButton( this, wxID_ANY, _("Reset Grid Origin"), wxDefaultPosition, wxDefaultSize, 0 );
bButtonSizer->Add( m_buttonReset, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 );
bButtonSizer->Add( 0, 0, 1, wxEXPAND, 5 );
m_sdbSizer = new wxStdDialogButtonSizer();
m_sdbSizerOK = new wxButton( this, wxID_OK );
m_sdbSizer->AddButton( m_sdbSizerOK );
m_sdbSizerCancel = new wxButton( this, wxID_CANCEL );
m_sdbSizer->AddButton( m_sdbSizerCancel );
m_sdbSizer->Realize();
bButtonSizer->Add( m_sdbSizer, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
bSizerMain->Add( bButtonSizer, 0, wxEXPAND|wxLEFT, 10 );
this->SetSizer( bSizerMain );
this->Layout();
bSizerMain->Fit( this );
// Connect Events
this->Connect( wxEVT_INIT_DIALOG, wxInitDialogEventHandler( DIALOG_SET_GRID_BASE::OnInitDlg ) );
m_buttonReset->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_SET_GRID_BASE::OnResetGridOrgClick ), NULL, this );
@ -184,5 +184,5 @@ DIALOG_SET_GRID_BASE::~DIALOG_SET_GRID_BASE()
m_buttonReset->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_SET_GRID_BASE::OnResetGridOrgClick ), NULL, this );
m_sdbSizerCancel->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_SET_GRID_BASE::OnCancelClick ), NULL, this );
m_sdbSizerOK->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_SET_GRID_BASE::OnOkClick ), NULL, this );
}

View File

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<wxFormBuilder_Project>
<FileVersion major="1" minor="13" />
<FileVersion major="1" minor="15" />
<object class="Project" expanded="1">
<property name="class_decoration"></property>
<property name="code_generation">C++</property>
@ -14,6 +14,7 @@
<property name="file">dialog_set_grid_base</property>
<property name="first_id">1000</property>
<property name="help_provider">none</property>
<property name="indent_with_spaces"></property>
<property name="internationalize">1</property>
<property name="name">dialog_set_grid</property>
<property name="namespace"></property>
@ -52,42 +53,7 @@
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></property>
<event name="OnActivate"></event>
<event name="OnActivateApp"></event>
<event name="OnAuiFindManager"></event>
<event name="OnAuiPaneButton"></event>
<event name="OnAuiPaneClose"></event>
<event name="OnAuiPaneMaximize"></event>
<event name="OnAuiPaneRestore"></event>
<event name="OnAuiRender"></event>
<event name="OnChar"></event>
<event name="OnClose"></event>
<event name="OnEnterWindow"></event>
<event name="OnEraseBackground"></event>
<event name="OnHibernate"></event>
<event name="OnIconize"></event>
<event name="OnIdle"></event>
<event name="OnInitDialog">OnInitDlg</event>
<event name="OnKeyDown"></event>
<event name="OnKeyUp"></event>
<event name="OnKillFocus"></event>
<event name="OnLeaveWindow"></event>
<event name="OnLeftDClick"></event>
<event name="OnLeftDown"></event>
<event name="OnLeftUp"></event>
<event name="OnMiddleDClick"></event>
<event name="OnMiddleDown"></event>
<event name="OnMiddleUp"></event>
<event name="OnMotion"></event>
<event name="OnMouseEvents"></event>
<event name="OnMouseWheel"></event>
<event name="OnPaint"></event>
<event name="OnRightDClick"></event>
<event name="OnRightDown"></event>
<event name="OnRightUp"></event>
<event name="OnSetFocus"></event>
<event name="OnSize"></event>
<event name="OnUpdateUI"></event>
<object class="wxBoxSizer" expanded="1">
<property name="minimum_size"></property>
<property name="name">bSizerMain</property>
@ -114,7 +80,6 @@
<property name="orient">wxVERTICAL</property>
<property name="parent">1</property>
<property name="permission">none</property>
<event name="OnUpdateUI"></event>
<object class="sizeritem" expanded="0">
<property name="border">5</property>
<property name="flag">wxEXPAND|wxALL</property>
@ -164,6 +129,7 @@
<property name="hidden">0</property>
<property name="id">wxID_ANY</property>
<property name="label">X:</property>
<property name="markup">0</property>
<property name="max_size"></property>
<property name="maximize_button">0</property>
<property name="maximum_size"></property>
@ -189,29 +155,6 @@
<property name="window_name"></property>
<property name="window_style"></property>
<property name="wrap">-1</property>
<event name="OnChar"></event>
<event name="OnEnterWindow"></event>
<event name="OnEraseBackground"></event>
<event name="OnKeyDown"></event>
<event name="OnKeyUp"></event>
<event name="OnKillFocus"></event>
<event name="OnLeaveWindow"></event>
<event name="OnLeftDClick"></event>
<event name="OnLeftDown"></event>
<event name="OnLeftUp"></event>
<event name="OnMiddleDClick"></event>
<event name="OnMiddleDown"></event>
<event name="OnMiddleUp"></event>
<event name="OnMotion"></event>
<event name="OnMouseEvents"></event>
<event name="OnMouseWheel"></event>
<event name="OnPaint"></event>
<event name="OnRightDClick"></event>
<event name="OnRightDown"></event>
<event name="OnRightUp"></event>
<event name="OnSetFocus"></event>
<event name="OnSize"></event>
<event name="OnUpdateUI"></event>
</object>
</object>
<object class="sizeritem" expanded="0">
@ -276,38 +219,11 @@
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></property>
<event name="OnChar"></event>
<event name="OnEnterWindow"></event>
<event name="OnEraseBackground"></event>
<event name="OnKeyDown"></event>
<event name="OnKeyUp"></event>
<event name="OnKillFocus"></event>
<event name="OnLeaveWindow"></event>
<event name="OnLeftDClick"></event>
<event name="OnLeftDown"></event>
<event name="OnLeftUp"></event>
<event name="OnMiddleDClick"></event>
<event name="OnMiddleDown"></event>
<event name="OnMiddleUp"></event>
<event name="OnMotion"></event>
<event name="OnMouseEvents"></event>
<event name="OnMouseWheel"></event>
<event name="OnPaint"></event>
<event name="OnRightDClick"></event>
<event name="OnRightDown"></event>
<event name="OnRightUp"></event>
<event name="OnSetFocus"></event>
<event name="OnSize"></event>
<event name="OnText"></event>
<event name="OnTextEnter"></event>
<event name="OnTextMaxLen"></event>
<event name="OnTextURL"></event>
<event name="OnUpdateUI"></event>
</object>
</object>
<object class="sizeritem" expanded="0">
<property name="border">5</property>
<property name="flag">wxALIGN_CENTER_VERTICAL|wxALIGN_LEFT</property>
<property name="flag">wxALIGN_CENTER_VERTICAL|wxALIGN_LEFT|wxLEFT</property>
<property name="proportion">0</property>
<object class="wxStaticText" expanded="0">
<property name="BottomDockable">1</property>
@ -338,6 +254,7 @@
<property name="hidden">0</property>
<property name="id">wxID_ANY</property>
<property name="label">mm</property>
<property name="markup">0</property>
<property name="max_size"></property>
<property name="maximize_button">0</property>
<property name="maximum_size"></property>
@ -363,29 +280,6 @@
<property name="window_name"></property>
<property name="window_style"></property>
<property name="wrap">-1</property>
<event name="OnChar"></event>
<event name="OnEnterWindow"></event>
<event name="OnEraseBackground"></event>
<event name="OnKeyDown"></event>
<event name="OnKeyUp"></event>
<event name="OnKillFocus"></event>
<event name="OnLeaveWindow"></event>
<event name="OnLeftDClick"></event>
<event name="OnLeftDown"></event>
<event name="OnLeftUp"></event>
<event name="OnMiddleDClick"></event>
<event name="OnMiddleDown"></event>
<event name="OnMiddleUp"></event>
<event name="OnMotion"></event>
<event name="OnMouseEvents"></event>
<event name="OnMouseWheel"></event>
<event name="OnPaint"></event>
<event name="OnRightDClick"></event>
<event name="OnRightDown"></event>
<event name="OnRightUp"></event>
<event name="OnSetFocus"></event>
<event name="OnSize"></event>
<event name="OnUpdateUI"></event>
</object>
</object>
<object class="sizeritem" expanded="0">
@ -421,6 +315,7 @@
<property name="hidden">0</property>
<property name="id">wxID_ANY</property>
<property name="label">Y:</property>
<property name="markup">0</property>
<property name="max_size"></property>
<property name="maximize_button">0</property>
<property name="maximum_size"></property>
@ -446,29 +341,6 @@
<property name="window_name"></property>
<property name="window_style"></property>
<property name="wrap">-1</property>
<event name="OnChar"></event>
<event name="OnEnterWindow"></event>
<event name="OnEraseBackground"></event>
<event name="OnKeyDown"></event>
<event name="OnKeyUp"></event>
<event name="OnKillFocus"></event>
<event name="OnLeaveWindow"></event>
<event name="OnLeftDClick"></event>
<event name="OnLeftDown"></event>
<event name="OnLeftUp"></event>
<event name="OnMiddleDClick"></event>
<event name="OnMiddleDown"></event>
<event name="OnMiddleUp"></event>
<event name="OnMotion"></event>
<event name="OnMouseEvents"></event>
<event name="OnMouseWheel"></event>
<event name="OnPaint"></event>
<event name="OnRightDClick"></event>
<event name="OnRightDown"></event>
<event name="OnRightUp"></event>
<event name="OnSetFocus"></event>
<event name="OnSize"></event>
<event name="OnUpdateUI"></event>
</object>
</object>
<object class="sizeritem" expanded="0">
@ -533,38 +405,11 @@
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></property>
<event name="OnChar"></event>
<event name="OnEnterWindow"></event>
<event name="OnEraseBackground"></event>
<event name="OnKeyDown"></event>
<event name="OnKeyUp"></event>
<event name="OnKillFocus"></event>
<event name="OnLeaveWindow"></event>
<event name="OnLeftDClick"></event>
<event name="OnLeftDown"></event>
<event name="OnLeftUp"></event>
<event name="OnMiddleDClick"></event>
<event name="OnMiddleDown"></event>
<event name="OnMiddleUp"></event>
<event name="OnMotion"></event>
<event name="OnMouseEvents"></event>
<event name="OnMouseWheel"></event>
<event name="OnPaint"></event>
<event name="OnRightDClick"></event>
<event name="OnRightDown"></event>
<event name="OnRightUp"></event>
<event name="OnSetFocus"></event>
<event name="OnSize"></event>
<event name="OnText"></event>
<event name="OnTextEnter"></event>
<event name="OnTextMaxLen"></event>
<event name="OnTextURL"></event>
<event name="OnUpdateUI"></event>
</object>
</object>
<object class="sizeritem" expanded="0">
<property name="border">5</property>
<property name="flag">wxALIGN_CENTER_VERTICAL|wxALIGN_LEFT</property>
<property name="flag">wxALIGN_CENTER_VERTICAL|wxALIGN_LEFT|wxLEFT</property>
<property name="proportion">0</property>
<object class="wxStaticText" expanded="0">
<property name="BottomDockable">1</property>
@ -595,6 +440,7 @@
<property name="hidden">0</property>
<property name="id">wxID_ANY</property>
<property name="label">mm</property>
<property name="markup">0</property>
<property name="max_size"></property>
<property name="maximize_button">0</property>
<property name="maximum_size"></property>
@ -620,29 +466,6 @@
<property name="window_name"></property>
<property name="window_style"></property>
<property name="wrap">-1</property>
<event name="OnChar"></event>
<event name="OnEnterWindow"></event>
<event name="OnEraseBackground"></event>
<event name="OnKeyDown"></event>
<event name="OnKeyUp"></event>
<event name="OnKillFocus"></event>
<event name="OnLeaveWindow"></event>
<event name="OnLeftDClick"></event>
<event name="OnLeftDown"></event>
<event name="OnLeftUp"></event>
<event name="OnMiddleDClick"></event>
<event name="OnMiddleDown"></event>
<event name="OnMiddleUp"></event>
<event name="OnMotion"></event>
<event name="OnMouseEvents"></event>
<event name="OnMouseWheel"></event>
<event name="OnPaint"></event>
<event name="OnRightDClick"></event>
<event name="OnRightDown"></event>
<event name="OnRightUp"></event>
<event name="OnSetFocus"></event>
<event name="OnSize"></event>
<event name="OnUpdateUI"></event>
</object>
</object>
</object>
@ -661,7 +484,6 @@
<property name="orient">wxVERTICAL</property>
<property name="parent">1</property>
<property name="permission">none</property>
<event name="OnUpdateUI"></event>
<object class="sizeritem" expanded="0">
<property name="border">5</property>
<property name="flag">wxEXPAND|wxALL</property>
@ -711,6 +533,7 @@
<property name="hidden">0</property>
<property name="id">wxID_ANY</property>
<property name="label">Size X:</property>
<property name="markup">0</property>
<property name="max_size"></property>
<property name="maximize_button">0</property>
<property name="maximum_size"></property>
@ -736,29 +559,6 @@
<property name="window_name"></property>
<property name="window_style"></property>
<property name="wrap">-1</property>
<event name="OnChar"></event>
<event name="OnEnterWindow"></event>
<event name="OnEraseBackground"></event>
<event name="OnKeyDown"></event>
<event name="OnKeyUp"></event>
<event name="OnKillFocus"></event>
<event name="OnLeaveWindow"></event>
<event name="OnLeftDClick"></event>
<event name="OnLeftDown"></event>
<event name="OnLeftUp"></event>
<event name="OnMiddleDClick"></event>
<event name="OnMiddleDown"></event>
<event name="OnMiddleUp"></event>
<event name="OnMotion"></event>
<event name="OnMouseEvents"></event>
<event name="OnMouseWheel"></event>
<event name="OnPaint"></event>
<event name="OnRightDClick"></event>
<event name="OnRightDown"></event>
<event name="OnRightUp"></event>
<event name="OnSetFocus"></event>
<event name="OnSize"></event>
<event name="OnUpdateUI"></event>
</object>
</object>
<object class="sizeritem" expanded="0">
@ -823,38 +623,11 @@
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></property>
<event name="OnChar"></event>
<event name="OnEnterWindow"></event>
<event name="OnEraseBackground"></event>
<event name="OnKeyDown"></event>
<event name="OnKeyUp"></event>
<event name="OnKillFocus"></event>
<event name="OnLeaveWindow"></event>
<event name="OnLeftDClick"></event>
<event name="OnLeftDown"></event>
<event name="OnLeftUp"></event>
<event name="OnMiddleDClick"></event>
<event name="OnMiddleDown"></event>
<event name="OnMiddleUp"></event>
<event name="OnMotion"></event>
<event name="OnMouseEvents"></event>
<event name="OnMouseWheel"></event>
<event name="OnPaint"></event>
<event name="OnRightDClick"></event>
<event name="OnRightDown"></event>
<event name="OnRightUp"></event>
<event name="OnSetFocus"></event>
<event name="OnSize"></event>
<event name="OnText"></event>
<event name="OnTextEnter"></event>
<event name="OnTextMaxLen"></event>
<event name="OnTextURL"></event>
<event name="OnUpdateUI"></event>
</object>
</object>
<object class="sizeritem" expanded="0">
<property name="border">5</property>
<property name="flag">wxALIGN_CENTER_VERTICAL|wxBOTTOM</property>
<property name="flag">wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxLEFT</property>
<property name="proportion">0</property>
<object class="wxStaticText" expanded="0">
<property name="BottomDockable">1</property>
@ -885,6 +658,7 @@
<property name="hidden">0</property>
<property name="id">wxID_ANY</property>
<property name="label">mm</property>
<property name="markup">0</property>
<property name="max_size"></property>
<property name="maximize_button">0</property>
<property name="maximum_size"></property>
@ -910,29 +684,6 @@
<property name="window_name"></property>
<property name="window_style"></property>
<property name="wrap">-1</property>
<event name="OnChar"></event>
<event name="OnEnterWindow"></event>
<event name="OnEraseBackground"></event>
<event name="OnKeyDown"></event>
<event name="OnKeyUp"></event>
<event name="OnKillFocus"></event>
<event name="OnLeaveWindow"></event>
<event name="OnLeftDClick"></event>
<event name="OnLeftDown"></event>
<event name="OnLeftUp"></event>
<event name="OnMiddleDClick"></event>
<event name="OnMiddleDown"></event>
<event name="OnMiddleUp"></event>
<event name="OnMotion"></event>
<event name="OnMouseEvents"></event>
<event name="OnMouseWheel"></event>
<event name="OnPaint"></event>
<event name="OnRightDClick"></event>
<event name="OnRightDown"></event>
<event name="OnRightUp"></event>
<event name="OnSetFocus"></event>
<event name="OnSize"></event>
<event name="OnUpdateUI"></event>
</object>
</object>
<object class="sizeritem" expanded="0">
@ -968,6 +719,7 @@
<property name="hidden">0</property>
<property name="id">wxID_ANY</property>
<property name="label">Size Y:</property>
<property name="markup">0</property>
<property name="max_size"></property>
<property name="maximize_button">0</property>
<property name="maximum_size"></property>
@ -993,29 +745,6 @@
<property name="window_name"></property>
<property name="window_style"></property>
<property name="wrap">-1</property>
<event name="OnChar"></event>
<event name="OnEnterWindow"></event>
<event name="OnEraseBackground"></event>
<event name="OnKeyDown"></event>
<event name="OnKeyUp"></event>
<event name="OnKillFocus"></event>
<event name="OnLeaveWindow"></event>
<event name="OnLeftDClick"></event>
<event name="OnLeftDown"></event>
<event name="OnLeftUp"></event>
<event name="OnMiddleDClick"></event>
<event name="OnMiddleDown"></event>
<event name="OnMiddleUp"></event>
<event name="OnMotion"></event>
<event name="OnMouseEvents"></event>
<event name="OnMouseWheel"></event>
<event name="OnPaint"></event>
<event name="OnRightDClick"></event>
<event name="OnRightDown"></event>
<event name="OnRightUp"></event>
<event name="OnSetFocus"></event>
<event name="OnSize"></event>
<event name="OnUpdateUI"></event>
</object>
</object>
<object class="sizeritem" expanded="0">
@ -1080,38 +809,11 @@
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></property>
<event name="OnChar"></event>
<event name="OnEnterWindow"></event>
<event name="OnEraseBackground"></event>
<event name="OnKeyDown"></event>
<event name="OnKeyUp"></event>
<event name="OnKillFocus"></event>
<event name="OnLeaveWindow"></event>
<event name="OnLeftDClick"></event>
<event name="OnLeftDown"></event>
<event name="OnLeftUp"></event>
<event name="OnMiddleDClick"></event>
<event name="OnMiddleDown"></event>
<event name="OnMiddleUp"></event>
<event name="OnMotion"></event>
<event name="OnMouseEvents"></event>
<event name="OnMouseWheel"></event>
<event name="OnPaint"></event>
<event name="OnRightDClick"></event>
<event name="OnRightDown"></event>
<event name="OnRightUp"></event>
<event name="OnSetFocus"></event>
<event name="OnSize"></event>
<event name="OnText"></event>
<event name="OnTextEnter"></event>
<event name="OnTextMaxLen"></event>
<event name="OnTextURL"></event>
<event name="OnUpdateUI"></event>
</object>
</object>
<object class="sizeritem" expanded="0">
<property name="border">5</property>
<property name="flag">wxALIGN_CENTER_VERTICAL</property>
<property name="flag">wxALIGN_CENTER_VERTICAL|wxLEFT</property>
<property name="proportion">0</property>
<object class="wxStaticText" expanded="0">
<property name="BottomDockable">1</property>
@ -1142,6 +844,7 @@
<property name="hidden">0</property>
<property name="id">wxID_ANY</property>
<property name="label">mm</property>
<property name="markup">0</property>
<property name="max_size"></property>
<property name="maximize_button">0</property>
<property name="maximum_size"></property>
@ -1167,29 +870,6 @@
<property name="window_name"></property>
<property name="window_style"></property>
<property name="wrap">-1</property>
<event name="OnChar"></event>
<event name="OnEnterWindow"></event>
<event name="OnEraseBackground"></event>
<event name="OnKeyDown"></event>
<event name="OnKeyUp"></event>
<event name="OnKillFocus"></event>
<event name="OnLeaveWindow"></event>
<event name="OnLeftDClick"></event>
<event name="OnLeftDown"></event>
<event name="OnLeftUp"></event>
<event name="OnMiddleDClick"></event>
<event name="OnMiddleDown"></event>
<event name="OnMiddleUp"></event>
<event name="OnMotion"></event>
<event name="OnMouseEvents"></event>
<event name="OnMouseWheel"></event>
<event name="OnPaint"></event>
<event name="OnRightDClick"></event>
<event name="OnRightDown"></event>
<event name="OnRightUp"></event>
<event name="OnSetFocus"></event>
<event name="OnSize"></event>
<event name="OnUpdateUI"></event>
</object>
</object>
</object>
@ -1210,7 +890,6 @@
<property name="orient">wxVERTICAL</property>
<property name="parent">1</property>
<property name="permission">none</property>
<event name="OnUpdateUI"></event>
<object class="sizeritem" expanded="1">
<property name="border">5</property>
<property name="flag">wxEXPAND|wxTOP|wxBOTTOM|wxLEFT</property>
@ -1260,6 +939,7 @@
<property name="hidden">0</property>
<property name="id">wxID_ANY</property>
<property name="label">Grid 1:</property>
<property name="markup">0</property>
<property name="max_size"></property>
<property name="maximize_button">0</property>
<property name="maximum_size"></property>
@ -1285,29 +965,6 @@
<property name="window_name"></property>
<property name="window_style"></property>
<property name="wrap">-1</property>
<event name="OnChar"></event>
<event name="OnEnterWindow"></event>
<event name="OnEraseBackground"></event>
<event name="OnKeyDown"></event>
<event name="OnKeyUp"></event>
<event name="OnKillFocus"></event>
<event name="OnLeaveWindow"></event>
<event name="OnLeftDClick"></event>
<event name="OnLeftDown"></event>
<event name="OnLeftUp"></event>
<event name="OnMiddleDClick"></event>
<event name="OnMiddleDown"></event>
<event name="OnMiddleUp"></event>
<event name="OnMotion"></event>
<event name="OnMouseEvents"></event>
<event name="OnMouseWheel"></event>
<event name="OnPaint"></event>
<event name="OnRightDClick"></event>
<event name="OnRightDown"></event>
<event name="OnRightUp"></event>
<event name="OnSetFocus"></event>
<event name="OnSize"></event>
<event name="OnUpdateUI"></event>
</object>
</object>
<object class="sizeritem" expanded="1">
@ -1372,30 +1029,6 @@
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></property>
<event name="OnChar"></event>
<event name="OnChoice"></event>
<event name="OnEnterWindow"></event>
<event name="OnEraseBackground"></event>
<event name="OnKeyDown"></event>
<event name="OnKeyUp"></event>
<event name="OnKillFocus"></event>
<event name="OnLeaveWindow"></event>
<event name="OnLeftDClick"></event>
<event name="OnLeftDown"></event>
<event name="OnLeftUp"></event>
<event name="OnMiddleDClick"></event>
<event name="OnMiddleDown"></event>
<event name="OnMiddleUp"></event>
<event name="OnMotion"></event>
<event name="OnMouseEvents"></event>
<event name="OnMouseWheel"></event>
<event name="OnPaint"></event>
<event name="OnRightDClick"></event>
<event name="OnRightDown"></event>
<event name="OnRightUp"></event>
<event name="OnSetFocus"></event>
<event name="OnSize"></event>
<event name="OnUpdateUI"></event>
</object>
</object>
<object class="sizeritem" expanded="1">
@ -1431,6 +1064,7 @@
<property name="hidden">0</property>
<property name="id">wxID_ANY</property>
<property name="label">(hotkey)</property>
<property name="markup">0</property>
<property name="max_size"></property>
<property name="maximize_button">0</property>
<property name="maximum_size"></property>
@ -1456,29 +1090,6 @@
<property name="window_name"></property>
<property name="window_style"></property>
<property name="wrap">-1</property>
<event name="OnChar"></event>
<event name="OnEnterWindow"></event>
<event name="OnEraseBackground"></event>
<event name="OnKeyDown"></event>
<event name="OnKeyUp"></event>
<event name="OnKillFocus"></event>
<event name="OnLeaveWindow"></event>
<event name="OnLeftDClick"></event>
<event name="OnLeftDown"></event>
<event name="OnLeftUp"></event>
<event name="OnMiddleDClick"></event>
<event name="OnMiddleDown"></event>
<event name="OnMiddleUp"></event>
<event name="OnMotion"></event>
<event name="OnMouseEvents"></event>
<event name="OnMouseWheel"></event>
<event name="OnPaint"></event>
<event name="OnRightDClick"></event>
<event name="OnRightDown"></event>
<event name="OnRightUp"></event>
<event name="OnSetFocus"></event>
<event name="OnSize"></event>
<event name="OnUpdateUI"></event>
</object>
</object>
<object class="sizeritem" expanded="0">
@ -1514,6 +1125,7 @@
<property name="hidden">0</property>
<property name="id">wxID_ANY</property>
<property name="label">Grid 2:</property>
<property name="markup">0</property>
<property name="max_size"></property>
<property name="maximize_button">0</property>
<property name="maximum_size"></property>
@ -1539,29 +1151,6 @@
<property name="window_name"></property>
<property name="window_style"></property>
<property name="wrap">-1</property>
<event name="OnChar"></event>
<event name="OnEnterWindow"></event>
<event name="OnEraseBackground"></event>
<event name="OnKeyDown"></event>
<event name="OnKeyUp"></event>
<event name="OnKillFocus"></event>
<event name="OnLeaveWindow"></event>
<event name="OnLeftDClick"></event>
<event name="OnLeftDown"></event>
<event name="OnLeftUp"></event>
<event name="OnMiddleDClick"></event>
<event name="OnMiddleDown"></event>
<event name="OnMiddleUp"></event>
<event name="OnMotion"></event>
<event name="OnMouseEvents"></event>
<event name="OnMouseWheel"></event>
<event name="OnPaint"></event>
<event name="OnRightDClick"></event>
<event name="OnRightDown"></event>
<event name="OnRightUp"></event>
<event name="OnSetFocus"></event>
<event name="OnSize"></event>
<event name="OnUpdateUI"></event>
</object>
</object>
<object class="sizeritem" expanded="1">
@ -1626,30 +1215,6 @@
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></property>
<event name="OnChar"></event>
<event name="OnChoice"></event>
<event name="OnEnterWindow"></event>
<event name="OnEraseBackground"></event>
<event name="OnKeyDown"></event>
<event name="OnKeyUp"></event>
<event name="OnKillFocus"></event>
<event name="OnLeaveWindow"></event>
<event name="OnLeftDClick"></event>
<event name="OnLeftDown"></event>
<event name="OnLeftUp"></event>
<event name="OnMiddleDClick"></event>
<event name="OnMiddleDown"></event>
<event name="OnMiddleUp"></event>
<event name="OnMotion"></event>
<event name="OnMouseEvents"></event>
<event name="OnMouseWheel"></event>
<event name="OnPaint"></event>
<event name="OnRightDClick"></event>
<event name="OnRightDown"></event>
<event name="OnRightUp"></event>
<event name="OnSetFocus"></event>
<event name="OnSize"></event>
<event name="OnUpdateUI"></event>
</object>
</object>
<object class="sizeritem" expanded="1">
@ -1685,6 +1250,7 @@
<property name="hidden">0</property>
<property name="id">wxID_ANY</property>
<property name="label">(hotkey)</property>
<property name="markup">0</property>
<property name="max_size"></property>
<property name="maximize_button">0</property>
<property name="maximum_size"></property>
@ -1710,29 +1276,6 @@
<property name="window_name"></property>
<property name="window_style"></property>
<property name="wrap">-1</property>
<event name="OnChar"></event>
<event name="OnEnterWindow"></event>
<event name="OnEraseBackground"></event>
<event name="OnKeyDown"></event>
<event name="OnKeyUp"></event>
<event name="OnKillFocus"></event>
<event name="OnLeaveWindow"></event>
<event name="OnLeftDClick"></event>
<event name="OnLeftDown"></event>
<event name="OnLeftUp"></event>
<event name="OnMiddleDClick"></event>
<event name="OnMiddleDown"></event>
<event name="OnMiddleUp"></event>
<event name="OnMotion"></event>
<event name="OnMouseEvents"></event>
<event name="OnMouseWheel"></event>
<event name="OnPaint"></event>
<event name="OnRightDClick"></event>
<event name="OnRightDown"></event>
<event name="OnRightUp"></event>
<event name="OnSetFocus"></event>
<event name="OnSize"></event>
<event name="OnUpdateUI"></event>
</object>
</object>
</object>
@ -1795,29 +1338,6 @@
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></property>
<event name="OnChar"></event>
<event name="OnEnterWindow"></event>
<event name="OnEraseBackground"></event>
<event name="OnKeyDown"></event>
<event name="OnKeyUp"></event>
<event name="OnKillFocus"></event>
<event name="OnLeaveWindow"></event>
<event name="OnLeftDClick"></event>
<event name="OnLeftDown"></event>
<event name="OnLeftUp"></event>
<event name="OnMiddleDClick"></event>
<event name="OnMiddleDown"></event>
<event name="OnMiddleUp"></event>
<event name="OnMotion"></event>
<event name="OnMouseEvents"></event>
<event name="OnMouseWheel"></event>
<event name="OnPaint"></event>
<event name="OnRightDClick"></event>
<event name="OnRightDown"></event>
<event name="OnRightUp"></event>
<event name="OnSetFocus"></event>
<event name="OnSize"></event>
<event name="OnUpdateUI"></event>
</object>
</object>
<object class="sizeritem" expanded="1">
@ -1844,25 +1364,31 @@
<property name="aui_row"></property>
<property name="best_size"></property>
<property name="bg"></property>
<property name="bitmap"></property>
<property name="caption"></property>
<property name="caption_visible">1</property>
<property name="center_pane">0</property>
<property name="close_button">1</property>
<property name="context_help"></property>
<property name="context_menu">1</property>
<property name="current"></property>
<property name="default">0</property>
<property name="default_pane">0</property>
<property name="disabled"></property>
<property name="dock">Dock</property>
<property name="dock_fixed">0</property>
<property name="docking">Left</property>
<property name="enabled">1</property>
<property name="fg"></property>
<property name="floatable">1</property>
<property name="focus"></property>
<property name="font"></property>
<property name="gripper">0</property>
<property name="hidden">0</property>
<property name="id">wxID_ANY</property>
<property name="label">Reset Grid Origin</property>
<property name="margins"></property>
<property name="markup">0</property>
<property name="max_size"></property>
<property name="maximize_button">0</property>
<property name="maximum_size"></property>
@ -1877,6 +1403,8 @@
<property name="permission">protected</property>
<property name="pin_button">1</property>
<property name="pos"></property>
<property name="position"></property>
<property name="pressed"></property>
<property name="resize">Resizable</property>
<property name="show">1</property>
<property name="size"></property>
@ -1892,29 +1420,6 @@
<property name="window_name"></property>
<property name="window_style"></property>
<event name="OnButtonClick">OnResetGridOrgClick</event>
<event name="OnChar"></event>
<event name="OnEnterWindow"></event>
<event name="OnEraseBackground"></event>
<event name="OnKeyDown"></event>
<event name="OnKeyUp"></event>
<event name="OnKillFocus"></event>
<event name="OnLeaveWindow"></event>
<event name="OnLeftDClick"></event>
<event name="OnLeftDown"></event>
<event name="OnLeftUp"></event>
<event name="OnMiddleDClick"></event>
<event name="OnMiddleDown"></event>
<event name="OnMiddleUp"></event>
<event name="OnMotion"></event>
<event name="OnMouseEvents"></event>
<event name="OnMouseWheel"></event>
<event name="OnPaint"></event>
<event name="OnRightDClick"></event>
<event name="OnRightDown"></event>
<event name="OnRightUp"></event>
<event name="OnSetFocus"></event>
<event name="OnSize"></event>
<event name="OnUpdateUI"></event>
</object>
</object>
<object class="sizeritem" expanded="1">
@ -1943,14 +1448,8 @@
<property name="minimum_size"></property>
<property name="name">m_sdbSizer</property>
<property name="permission">protected</property>
<event name="OnApplyButtonClick"></event>
<event name="OnCancelButtonClick">OnCancelClick</event>
<event name="OnContextHelpButtonClick"></event>
<event name="OnHelpButtonClick"></event>
<event name="OnNoButtonClick"></event>
<event name="OnOKButtonClick">OnOkClick</event>
<event name="OnSaveButtonClick"></event>
<event name="OnYesButtonClick"></event>
</object>
</object>
</object>

View File

@ -1,12 +1,11 @@
///////////////////////////////////////////////////////////////////////////
// C++ code generated with wxFormBuilder (version Dec 30 2017)
// C++ code generated with wxFormBuilder (version Oct 26 2018)
// http://www.wxformbuilder.org/
//
// PLEASE DO *NOT* EDIT THIS FILE!
///////////////////////////////////////////////////////////////////////////
#ifndef __DIALOG_SET_GRID_BASE_H__
#define __DIALOG_SET_GRID_BASE_H__
#pragma once
#include <wx/artprov.h>
#include <wx/xrc/xmlres.h>
@ -23,6 +22,9 @@
#include <wx/statbox.h>
#include <wx/choice.h>
#include <wx/statline.h>
#include <wx/bitmap.h>
#include <wx/image.h>
#include <wx/icon.h>
#include <wx/button.h>
#include <wx/dialog.h>
@ -35,7 +37,7 @@
class DIALOG_SET_GRID_BASE : public DIALOG_SHIM
{
private:
protected:
wxStaticText* m_staticTextGridPosX;
wxTextCtrl* m_GridOriginXCtrl;
@ -60,19 +62,18 @@ class DIALOG_SET_GRID_BASE : public DIALOG_SHIM
wxStdDialogButtonSizer* m_sdbSizer;
wxButton* m_sdbSizerOK;
wxButton* m_sdbSizerCancel;
// Virtual event handlers, overide them in your derived class
virtual void OnInitDlg( wxInitDialogEvent& event ) { event.Skip(); }
virtual void OnResetGridOrgClick( wxCommandEvent& event ) { event.Skip(); }
virtual void OnCancelClick( wxCommandEvent& event ) { event.Skip(); }
virtual void OnOkClick( wxCommandEvent& event ) { event.Skip(); }
public:
DIALOG_SET_GRID_BASE( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Grid Settings"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( -1,-1 ), long style = wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER );
DIALOG_SET_GRID_BASE( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Grid Settings"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( -1,-1 ), long style = wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER );
~DIALOG_SET_GRID_BASE();
};
#endif //__DIALOG_SET_GRID_BASE_H__

View File

@ -174,9 +174,6 @@ FOOTPRINT_EDIT_FRAME::FOOTPRINT_EDIT_FRAME( KIWAY* aKiway, wxWindow* aParent,
SetScreen( new PCB_SCREEN( GetPageSettings().GetSizeIU() ) );
GetScreen()->SetMaxUndoItems( m_UndoRedoCountMax );
GetScreen()->AddGrid( m_UserGridSize, EDA_UNITS::UNSCALED, ID_POPUP_GRID_USER );
GetScreen()->SetGrid( ID_POPUP_GRID_LEVEL_1000 + m_LastGridSizeId );
// In modedit, set the default paper size to A4 for plot/print
SetPageSettings( PAGE_INFO( PAGE_INFO::A4 ) );
@ -233,7 +230,6 @@ FOOTPRINT_EDIT_FRAME::FOOTPRINT_EDIT_FRAME( KIWAY* aKiway, wxWindow* aParent,
m_auimgr.GetPane( "InfoBar" ).Hide();
m_auimgr.Update();
GetToolManager()->RunAction( ACTIONS::gridPreset, true, m_LastGridSizeId );
GetToolManager()->RunAction( ACTIONS::zoomFitScreen, false );
updateTitle();
InitExitKey();
@ -272,7 +268,6 @@ void FOOTPRINT_EDIT_FRAME::SwitchCanvas( EDA_DRAW_PANEL_GAL::GAL_TYPE aCanvasTyp
PCB_BASE_FRAME::SwitchCanvas( aCanvasType );
GetCanvas()->GetGAL()->SetAxesEnabled( true );
GetCanvas()->GetGAL()->SetGridSize( VECTOR2D( GetScreen()->GetGridSize() ) );
// The base class method *does not reinit* the layers manager. We must upate the layer
// widget to match board visibility states, both layers and render columns, and and some
@ -448,7 +443,7 @@ void FOOTPRINT_EDIT_FRAME::LoadSettings( APP_SETTINGS_BASE* aCfg )
// aCfg will be the PCBNEW_SETTINGS
FOOTPRINT_EDITOR_SETTINGS* cfg = GetSettings();
EDA_DRAW_FRAME::LoadSettings( cfg );
PCB_BASE_FRAME::LoadSettings( cfg );
GetDesignSettings() = cfg->m_DesignSettings;
@ -462,7 +457,7 @@ void FOOTPRINT_EDIT_FRAME::SaveSettings( APP_SETTINGS_BASE* aCfg )
// aCfg will be the PCBNEW_SETTINGS
auto cfg = GetSettings();
EDA_DRAW_FRAME::SaveSettings( cfg );
PCB_BASE_FRAME::SaveSettings( cfg );
cfg->m_DesignSettings = GetDesignSettings();
cfg->m_Display = m_DisplayOptions;
@ -859,7 +854,7 @@ void FOOTPRINT_EDIT_FRAME::setupTools()
// Create the manager and dispatcher & route draw panel events to the dispatcher
m_toolManager = new TOOL_MANAGER;
m_toolManager->SetEnvironment( GetBoard(), GetCanvas()->GetView(),
GetCanvas()->GetViewControls(), this );
GetCanvas()->GetViewControls(), config(), this );
m_actions = new PCB_ACTIONS();
m_toolDispatcher = new TOOL_DISPATCHER( m_toolManager, m_actions );

View File

@ -31,7 +31,6 @@
#include <fp_lib_table.h>
#include <id.h>
#include <io_mgr.h>
#include <kiface_i.h>
#include <kiway.h>
#include <math/box2.h>
#include <painter.h>
@ -419,23 +418,17 @@ FOOTPRINT_PREVIEW_PANEL* FOOTPRINT_PREVIEW_PANEL::New( KIWAY* aKiway, wxWindow*
auto panel = new FOOTPRINT_PREVIEW_PANEL( aKiway, aParent, std::move( gal_opts ), canvasType );
if( pcbnew )
{
panel->GetGAL()->SetGridVisibility( pcbnew->IsGridVisible() );
panel->GetGAL()->SetGridSize( VECTOR2D( pcbnew->GetScreen()->GetGridSize() ) );
panel->GetView()->GetPainter()->GetSettings()->LoadColors( pcbnew->GetColorSettings() );
}
else
{
panel->GetGAL()->SetGridVisibility( cfg->m_Window.grid.show );
// Read grid size:
std::unique_ptr<PCB_SCREEN> temp_screen = std::make_unique<PCB_SCREEN>( wxSize() );
temp_screen->SetGrid( ID_POPUP_GRID_LEVEL_1000 + cfg->m_Window.grid.last_size );
panel->GetGAL()->SetGridSize( VECTOR2D( temp_screen->GetGridSize() ) );
panel->UpdateColors();
}
const GRID_SETTINGS& gridCfg = cfg->m_Window.grid;
panel->GetGAL()->SetGridVisibility( gridCfg.show );
int gridIdx = std::max( 0, std::min( gridCfg.last_size_idx, (int) gridCfg.sizes.size() ) );
int gridSize = (int) ValueFromString( EDA_UNITS::INCHES, gridCfg.sizes[ gridIdx ], true );
panel->GetGAL()->SetGridSize( VECTOR2D( gridSize, gridSize ) );
return panel;
}

View File

@ -195,8 +195,6 @@ FOOTPRINT_VIEWER_FRAME::FOOTPRINT_VIEWER_FRAME( KIWAY* aKiway, wxWindow* aParent
LoadSettings( config() );
GetGalDisplayOptions().m_axesEnabled = true;
GetScreen()->SetGrid( ID_POPUP_GRID_LEVEL_1000 + m_LastGridSizeId );
// Create GAL canvas
m_canvasType = LoadCanvasTypeSetting();
auto drawPanel = new PCB_DRAW_PANEL_GAL( this, -1, wxPoint( 0, 0 ), m_FrameSize,
@ -206,7 +204,7 @@ FOOTPRINT_VIEWER_FRAME::FOOTPRINT_VIEWER_FRAME( KIWAY* aKiway, wxWindow* aParent
// Create the manager and dispatcher & route draw panel events to the dispatcher
m_toolManager = new TOOL_MANAGER;
m_toolManager->SetEnvironment( GetBoard(), drawPanel->GetView(),
drawPanel->GetViewControls(), this );
drawPanel->GetViewControls(), config(), this );
m_actions = new PCB_ACTIONS();
m_toolDispatcher = new TOOL_DISPATCHER( m_toolManager, m_actions );
drawPanel->SetEventDispatcher( m_toolDispatcher );
@ -730,8 +728,6 @@ void FOOTPRINT_VIEWER_FRAME::LoadSettings( APP_SETTINGS_BASE* aCfg )
// Fetch grid settings from Footprint Editor
auto fpedit = Pgm().GetSettingsManager().GetAppSettings<FOOTPRINT_EDITOR_SETTINGS>();
SetGridVisibility( fpedit->m_Window.grid.show );
GetGalDisplayOptions().ReadWindowSettings( fpedit->m_Window );
}
@ -742,7 +738,7 @@ void FOOTPRINT_VIEWER_FRAME::SaveSettings( APP_SETTINGS_BASE* aCfg )
wxCHECK( cfg, /*void*/ );
// We don't want to store anything other than the window settings
EDA_BASE_FRAME::SaveSettings( cfg );
PCB_BASE_FRAME::SaveSettings( cfg );
cfg->m_FootprintViewerZoom = GetCanvas()->GetView()->GetScale();
}
@ -1009,17 +1005,6 @@ void FOOTPRINT_VIEWER_FRAME::SelectAndViewFootprint( int aMode )
}
void FOOTPRINT_VIEWER_FRAME::ApplyDisplaySettingsToGAL()
{
auto painter = static_cast<KIGFX::PCB_PAINTER*>( GetCanvas()->GetView()->GetPainter() );
KIGFX::PCB_RENDER_SETTINGS* settings = painter->GetSettings();
settings->LoadDisplayOptions( m_DisplayOptions, false );
GetCanvas()->GetView()->UpdateAllItems( KIGFX::ALL );
GetCanvas()->Refresh();
}
void FOOTPRINT_VIEWER_FRAME::updateView()
{
GetCanvas()->UpdateColors();

View File

@ -56,9 +56,6 @@ public:
///> @copydoc PCB_BASE_FRAME::GetModel()
BOARD_ITEM_CONTAINER* GetModel() const override;
/// Updates the GAL with display settings changes
void ApplyDisplaySettingsToGAL();
virtual COLOR4D GetGridColor() override;
bool GetAutoZoom() override;

View File

@ -132,8 +132,6 @@ FOOTPRINT_WIZARD_FRAME::FOOTPRINT_WIZARD_FRAME( KIWAY* aKiway, wxWindow* aParent
GetBoard()->SetElementVisibility( LAYER_NO_CONNECTS, false );
GetScreen()->SetGrid( ID_POPUP_GRID_LEVEL_1000 + m_LastGridSizeId );
// Create GAL canvas
#ifdef __WXMAC__
// Cairo renderer doesn't handle Retina displays
@ -148,7 +146,7 @@ FOOTPRINT_WIZARD_FRAME::FOOTPRINT_WIZARD_FRAME( KIWAY* aKiway, wxWindow* aParent
// Create the manager and dispatcher & route draw panel events to the dispatcher
m_toolManager = new TOOL_MANAGER;
m_toolManager->SetEnvironment( GetBoard(), gal_drawPanel->GetView(),
gal_drawPanel->GetViewControls(), this );
gal_drawPanel->GetViewControls(), config(), this );
m_actions = new PCB_ACTIONS();
m_toolDispatcher = new TOOL_DISPATCHER( m_toolManager, m_actions );
gal_drawPanel->SetEventDispatcher( m_toolDispatcher );
@ -520,29 +518,23 @@ void FOOTPRINT_WIZARD_FRAME::ClickOnPageList( wxCommandEvent& event )
void FOOTPRINT_WIZARD_FRAME::LoadSettings( APP_SETTINGS_BASE* aCfg )
{
auto cfg = dynamic_cast<PCBNEW_SETTINGS*>( aCfg );
wxASSERT( cfg );
PCBNEW_SETTINGS* cfg = dynamic_cast<PCBNEW_SETTINGS*>( aCfg );
wxCHECK( cfg, /*void*/ );
if( cfg )
{
EDA_DRAW_FRAME::LoadSettings( cfg );
PCB_BASE_FRAME::LoadSettings( cfg );
m_auiPerspective = cfg->m_FootprintViewer.perspective;
}
m_auiPerspective = cfg->m_FootprintViewer.perspective;
}
void FOOTPRINT_WIZARD_FRAME::SaveSettings( APP_SETTINGS_BASE* aCfg )
{
auto cfg = dynamic_cast<PCBNEW_SETTINGS*>( aCfg );
wxASSERT( cfg );
PCBNEW_SETTINGS* cfg = dynamic_cast<PCBNEW_SETTINGS*>( aCfg );
wxCHECK( cfg, /*void*/ );
if( cfg )
{
EDA_DRAW_FRAME::SaveSettings( cfg );
PCB_BASE_FRAME::SaveSettings( cfg );
cfg->m_FootprintViewer.perspective = m_auimgr.SavePerspective().ToStdString();
}
cfg->m_FootprintViewer.perspective = m_auimgr.SavePerspective().ToStdString();
}

View File

@ -104,7 +104,7 @@ void PCB_BASE_EDIT_FRAME::SetBoard( BOARD* aBoard )
GetCanvas()->UpdateColors();
m_toolManager->SetEnvironment( aBoard, GetCanvas()->GetView(),
GetCanvas()->GetViewControls(), this );
GetCanvas()->GetViewControls(), config(), this );
if( new_board )
m_toolManager->ResetTools( TOOL_BASE::MODEL_RELOAD );

View File

@ -55,6 +55,7 @@
#include <tool/tool_dispatcher.h>
#include <tools/pcb_actions.h>
#include <pcbnew_settings.h>
#include <tool/grid_menu.h>
wxDEFINE_EVENT( BOARD_CHANGED, wxCommandEvent );
@ -70,11 +71,6 @@ PCB_BASE_FRAME::PCB_BASE_FRAME( KIWAY* aKiway, wxWindow* aParent, FRAME_T aFrame
EDA_DRAW_FRAME( aKiway, aParent, aFrameType, aTitle, aPos, aSize, aStyle, aFrameName ),
m_Pcb( nullptr )
{
m_UserGridSize = wxPoint( (int) 10 * IU_PER_MILS, (int) 10 * IU_PER_MILS );
m_FastGrid1 = 0;
m_FastGrid2 = 0;
m_zoomLevelCoeff = 11.0 * IU_PER_MILS; // Adjusted to roughly displays zoom level = 1
// when the screen shows a 1:1 image
// obviously depends on the monitor,
@ -522,26 +518,13 @@ void PCB_BASE_FRAME::DisplayGridMsg()
switch( m_userUnits )
{
case EDA_UNITS::INCHES:
gridformatter = "grid X %.6f Y %.6f";
break;
case EDA_UNITS::MILLIMETRES:
gridformatter = "grid X %.6f Y %.6f";
break;
default:
gridformatter = "grid X %f Y %f";
break;
case EDA_UNITS::INCHES: gridformatter = "grid X %.6f Y %.6f"; break;
case EDA_UNITS::MILLIMETRES: gridformatter = "grid X %.6f Y %.6f"; break;
default: gridformatter = "grid X %f Y %f"; break;
}
BASE_SCREEN* screen = GetScreen();
wxArrayString gridsList;
int icurr = screen->BuildGridsChoiceList( gridsList, m_userUnits != EDA_UNITS::INCHES );
GRID_TYPE& grid = screen->GetGrid( icurr );
double grid_x = To_User_Unit( m_userUnits, grid.m_Size.x );
double grid_y = To_User_Unit( m_userUnits, grid.m_Size.y );
double grid_x = To_User_Unit( m_userUnits, GetCanvas()->GetGAL()->GetGridSize().x );
double grid_y = To_User_Unit( m_userUnits, GetCanvas()->GetGAL()->GetGridSize().y );
line.Printf( gridformatter, grid_x, grid_y );
SetStatusText( line, 4 );
@ -654,23 +637,40 @@ void PCB_BASE_FRAME::LoadSettings( APP_SETTINGS_BASE* aCfg )
{
EDA_DRAW_FRAME::LoadSettings( aCfg );
auto cfg = dynamic_cast<PCBNEW_SETTINGS*>( aCfg );
wxCHECK( cfg, /*void*/ );
if( aCfg->m_Window.grid.sizes.empty() )
{
aCfg->m_Window.grid.sizes = { "1000 mil",
"500 mil",
"250 mil",
"200 mil",
"100 mil",
"50 mil",
"25 mil",
"20 mil",
"10 mil",
"5 mil",
"2 mil",
"1 mil",
"5.0 mm",
"2.5 mm",
"1.0 mm",
"0.5 mm",
"0.25 mm",
"0.2 mm",
"0.1 mm",
"0.05 mm",
"0.025 mm",
"0.01 mm" };
}
// Ensure grid id is an existent grid id:
if( (m_LastGridSizeId <= 0) ||
(m_LastGridSizeId > (ID_POPUP_GRID_USER - ID_POPUP_GRID_LEVEL_1000)) )
m_LastGridSizeId = ID_POPUP_GRID_LEVEL_500 - ID_POPUP_GRID_LEVEL_1000;
// Some, but not all derived classes have a PCBNEW_SETTINGS.
PCBNEW_SETTINGS* cfg = dynamic_cast<PCBNEW_SETTINGS*>( aCfg );
EDA_UNITS userGridUnits = static_cast<EDA_UNITS>( cfg->m_UserGrid.units );
m_UserGridSize.x = (int) From_User_Unit( userGridUnits, cfg->m_UserGrid.size_x );
m_UserGridSize.y = (int) From_User_Unit( userGridUnits, cfg->m_UserGrid.size_y );
m_DisplayOptions = cfg->m_Display;
m_PolarCoords = cfg->m_PolarCoords;
m_FastGrid1 = cfg->m_FastGrid1;
m_FastGrid2 = cfg->m_FastGrid2;
if( cfg )
{
m_DisplayOptions = cfg->m_Display;
m_PolarCoords = cfg->m_PolarCoords;
}
}
@ -678,18 +678,14 @@ void PCB_BASE_FRAME::SaveSettings( APP_SETTINGS_BASE* aCfg )
{
EDA_DRAW_FRAME::SaveSettings( aCfg );
auto cfg = dynamic_cast<PCBNEW_SETTINGS*>( aCfg );
wxCHECK( cfg, /*void*/ );
// Some, but not all derived classes have a PCBNEW_SETTINGS.
PCBNEW_SETTINGS* cfg = dynamic_cast<PCBNEW_SETTINGS*>( aCfg );
cfg->m_UserGrid.size_x = To_User_Unit( m_userUnits, m_UserGridSize.x );
cfg->m_UserGrid.size_y = To_User_Unit( m_userUnits, m_UserGridSize.y );
cfg->m_UserGrid.units = static_cast<int>( m_userUnits );
cfg->m_Display = m_DisplayOptions;
cfg->m_PolarCoords = m_PolarCoords;
cfg->m_FastGrid1 = m_FastGrid1;
cfg->m_FastGrid2 = m_FastGrid2;
if( cfg )
{
cfg->m_Display = m_DisplayOptions;
cfg->m_PolarCoords = m_PolarCoords;
}
}
@ -752,18 +748,16 @@ void PCB_BASE_FRAME::UpdateGridSelectBox()
// Update grid values with the current units setting.
m_gridSelectBox->Clear();
wxArrayString gridsList;
int icurr = GetScreen()->BuildGridsChoiceList( gridsList, GetUserUnits() != EDA_UNITS::INCHES );
for( size_t i = 0; i < GetScreen()->GetGridCount(); i++ )
{
GRID_TYPE& grid = GetScreen()->GetGrid( i );
m_gridSelectBox->Append( gridsList[i], (void*) &grid.m_CmdId );
}
GRID_MENU::BuildChoiceList( &gridsList, config(), GetUserUnits() != EDA_UNITS::INCHES );
for( const wxString& grid : gridsList )
m_gridSelectBox->Append( grid );
m_gridSelectBox->Append( wxT( "---" ) );
m_gridSelectBox->Append( _( "Edit User Grid..." ) );
m_gridSelectBox->SetSelection( icurr );
m_gridSelectBox->SetSelection( config()->m_Window.grid.last_size_idx );
}
@ -794,52 +788,6 @@ void PCB_BASE_FRAME::updateZoomSelectBox()
}
void PCB_BASE_FRAME::SetFastGrid1()
{
if( m_FastGrid1 >= (int)GetScreen()->GetGridCount() )
return;
int cmdId = GetScreen()->GetGrids()[m_FastGrid1].m_CmdId - ID_POPUP_GRID_LEVEL_1000;
GetToolManager()->RunAction( "common.Control.gridPreset", true, cmdId );
}
void PCB_BASE_FRAME::SetFastGrid2()
{
if( m_FastGrid2 >= (int)GetScreen()->GetGridCount() )
return;
int cmdId = GetScreen()->GetGrids()[m_FastGrid2].m_CmdId - ID_POPUP_GRID_LEVEL_1000;
GetToolManager()->RunAction( "common.Control.gridPreset", true, cmdId );
}
bool PCB_BASE_FRAME::IsGridVisible() const
{
return m_drawGrid;
}
void PCB_BASE_FRAME::SetGridVisibility( bool aVisible )
{
m_drawGrid = aVisible;
// Update the display with the new grid
if( GetCanvas() )
{
// Check to ensure these exist, since this function could be called before
// the GAL and View have been created
if( GetCanvas()->GetGAL() )
GetCanvas()->GetGAL()->SetGridVisibility( aVisible );
if( GetCanvas()->GetView() )
GetCanvas()->GetView()->MarkTargetDirty( KIGFX::TARGET_NONCACHED );
GetCanvas()->Refresh();
}
}
PCB_DRAW_PANEL_GAL* PCB_BASE_FRAME::GetCanvas() const
{
return static_cast<PCB_DRAW_PANEL_GAL*>( EDA_DRAW_FRAME::GetCanvas() );
@ -855,7 +803,7 @@ void PCB_BASE_FRAME::ActivateGalCanvas()
if( m_toolManager )
{
m_toolManager->SetEnvironment( m_Pcb, GetCanvas()->GetView(),
GetCanvas()->GetViewControls(), this );
GetCanvas()->GetViewControls(), config(), this );
}
SetBoard( m_Pcb );
@ -873,9 +821,5 @@ void PCB_BASE_FRAME::ActivateGalCanvas()
canvas->GetView()->RecacheAllItems();
canvas->SetEventDispatcher( m_toolDispatcher );
canvas->StartDrawing();
// Initialize the grid settings
GetCanvas()->GetGAL()->SetGridSize( VECTOR2D( GetScreen()->GetGridSize() ) );
GetCanvas()->GetGAL()->SetGridVisibility( IsGridVisible() );
}

View File

@ -44,7 +44,6 @@
#include <view/view_controls.h>
#include <pcb_painter.h>
#include <invoke_pcb_dialog.h>
#include <class_track.h>
#include <class_board.h>
#include <class_module.h>
#include <ws_proxy_view_item.h>
@ -67,7 +66,6 @@
#include <tools/edit_tool.h>
#include <tools/global_edit_tool.h>
#include <tools/drawing_tool.h>
#include <tools/point_editor.h>
#include <tools/pcbnew_control.h>
#include <tools/pcb_editor_control.h>
#include <tools/pcb_inspection_tool.h>
@ -213,9 +211,6 @@ PCB_EDIT_FRAME::PCB_EDIT_FRAME( KIWAY* aKiway, wxWindow* aParent ) :
// PCB drawings start in the upper left corner.
GetScreen()->m_Center = false;
GetScreen()->AddGrid( m_UserGridSize, EDA_UNITS::UNSCALED, ID_POPUP_GRID_USER );
GetScreen()->SetGrid( ID_POPUP_GRID_LEVEL_1000 + m_LastGridSizeId );
setupTools();
ReCreateMenuBar();
ReCreateHToolbar();
@ -270,7 +265,6 @@ PCB_EDIT_FRAME::PCB_EDIT_FRAME( KIWAY* aKiway, wxWindow* aParent ) :
m_auimgr.GetPane( "InfoBar" ).Hide();
m_auimgr.Update();
GetToolManager()->RunAction( ACTIONS::gridPreset, true, m_LastGridSizeId );
GetToolManager()->RunAction( ACTIONS::zoomFitScreen, false );
m_canvasType = LoadCanvasTypeSetting();
@ -430,7 +424,7 @@ void PCB_EDIT_FRAME::setupTools()
// Create the manager and dispatcher & route draw panel events to the dispatcher
m_toolManager = new TOOL_MANAGER;
m_toolManager->SetEnvironment( m_Pcb, GetCanvas()->GetView(),
GetCanvas()->GetViewControls(), this );
GetCanvas()->GetViewControls(), config(), this );
m_actions = new PCB_ACTIONS();
m_toolDispatcher = new TOOL_DISPATCHER( m_toolManager, m_actions );
@ -961,9 +955,7 @@ void PCB_EDIT_FRAME::SwitchCanvas( EDA_DRAW_PANEL_GAL::GAL_TYPE aCanvasType )
// switches currently used canvas (Cairo / OpenGL).
PCB_BASE_FRAME::SwitchCanvas( aCanvasType );
GetCanvas()->GetGAL()->SetGridSize( VECTOR2D( GetScreen()->GetGridSize() ) );
// The base class method *does not reinit* the layers manager. We must upate the
// The base class method *does not* reinitialize the layers manager. We must upate the
// layer widget to match board visibility states, both layers and render columns.
syncLayerVisibilities();
syncLayerWidgetLayer();

View File

@ -25,24 +25,12 @@
*/
#include <fctsys.h>
#include <common.h>
#include <macros.h>
#include <trigo.h>
#include <pcb_screen.h>
#include <eda_text.h> // FILLED
#include <base_units.h>
#include <pcbnew.h>
#include <board_design_settings.h>
#include <layers_id_colors_and_visibility.h>
#include <id.h>
#define ZOOM_FACTOR( x ) ( x * IU_PER_MILS / 10 )
#define DMIL_GRID( x ) wxRealPoint( x * IU_PER_MILS / 10, x * IU_PER_MILS / 10 )
#define MM_GRID( x ) wxRealPoint( x * IU_PER_MM, x * IU_PER_MM )
/**
Default Pcbnew zoom values.
@ -122,49 +110,12 @@ static const double pcbZoomList[] =
};
// Default grid sizes for PCB editor screens.
static GRID_TYPE pcbGridList[] =
{
// predefined grid list in 0.0001 inches
{ ID_POPUP_GRID_LEVEL_1000, DMIL_GRID( 1000 ) },
{ ID_POPUP_GRID_LEVEL_500, DMIL_GRID( 500 ) },
{ ID_POPUP_GRID_LEVEL_250, DMIL_GRID( 250 ) },
{ ID_POPUP_GRID_LEVEL_200, DMIL_GRID( 200 ) },
{ ID_POPUP_GRID_LEVEL_100, DMIL_GRID( 100 ) },
{ ID_POPUP_GRID_LEVEL_50, DMIL_GRID( 50 ) },
{ ID_POPUP_GRID_LEVEL_25, DMIL_GRID( 25 ) },
{ ID_POPUP_GRID_LEVEL_20, DMIL_GRID( 20 ) },
{ ID_POPUP_GRID_LEVEL_10, DMIL_GRID( 10 ) },
{ ID_POPUP_GRID_LEVEL_5, DMIL_GRID( 5 ) },
{ ID_POPUP_GRID_LEVEL_2, DMIL_GRID( 2 ) },
{ ID_POPUP_GRID_LEVEL_1, DMIL_GRID( 1 ) },
// predefined grid list in mm
{ ID_POPUP_GRID_LEVEL_5MM, MM_GRID( 5.0 ) },
{ ID_POPUP_GRID_LEVEL_2_5MM, MM_GRID( 2.5 ) },
{ ID_POPUP_GRID_LEVEL_1MM, MM_GRID( 1.0 ) },
{ ID_POPUP_GRID_LEVEL_0_5MM, MM_GRID( 0.5 ) },
{ ID_POPUP_GRID_LEVEL_0_25MM, MM_GRID( 0.25 ) },
{ ID_POPUP_GRID_LEVEL_0_2MM, MM_GRID( 0.2 ) },
{ ID_POPUP_GRID_LEVEL_0_1MM, MM_GRID( 0.1 ) },
{ ID_POPUP_GRID_LEVEL_0_0_5MM, MM_GRID( 0.05 ) },
{ ID_POPUP_GRID_LEVEL_0_0_25MM, MM_GRID( 0.025 ) },
{ ID_POPUP_GRID_LEVEL_0_0_1MM, MM_GRID( 0.01 ) }
};
PCB_SCREEN::PCB_SCREEN( const wxSize& aPageSizeIU ) :
BASE_SCREEN( SCREEN_T )
{
for( double zoom : pcbZoomList )
m_ZoomList.push_back( zoom );
for( GRID_TYPE grid : pcbGridList )
AddGrid( grid );
// Set the working grid size to a reasonable value (in 1/10000 inch)
SetGrid( DMIL_GRID( 500 ) );
m_Active_Layer = F_Cu; // default active layer = front layer
m_Route_Layer_TOP = F_Cu; // default layers pair for vias (bottom to top)
m_Route_Layer_BOTTOM = B_Cu;

View File

@ -59,7 +59,6 @@ PCBNEW_SETTINGS::PCBNEW_SETTINGS()
m_PlaceFile(),
m_Plot(),
m_FootprintChooser(),
m_UserGrid(),
m_Zones(),
m_FootprintViewer(),
m_FootprintWizard(),
@ -120,13 +119,6 @@ PCBNEW_SETTINGS::PCBNEW_SETTINGS()
m_params.emplace_back( new PARAM<bool>( "editing.use_45_degree_graphic_segments",
&m_Use45DegreeGraphicSegments, false ) );
m_params.emplace_back( new PARAM<int>( "grid.user.units",
&m_UserGrid.units, static_cast<int>( EDA_UNITS::INCHES ) ) );
m_params.emplace_back( new PARAM<double>( "grid.user.size_x", &m_UserGrid.size_x, 0.01 ) );
m_params.emplace_back( new PARAM<double>( "grid.user.size_y", &m_UserGrid.size_y, 0.01 ) );
m_params.emplace_back( new PARAM<bool>(
"pcb_display.graphic_items_fill", &m_Display.m_DisplayGraphicsFill, true ) );
@ -460,10 +452,6 @@ bool PCBNEW_SETTINGS::MigrateFromLegacy( wxConfigBase* aCfg )
ret &= fromLegacy<bool>( aCfg, "Use45DegreeGraphicSegments",
"editing.use_45_degree_graphic_segments" );
ret &= fromLegacy<int>( aCfg, f + "PcbUserGrid_X", "grid.user.size_x" );
ret &= fromLegacy<int>( aCfg, f + "PcbUserGrid_Y", "grid.user.size_y" );
ret &= fromLegacy<int>( aCfg, f + "PcbUserGrid_Unit", "grid.user.units" );
ret &= fromLegacy<bool>( aCfg, "PcbAffT", "pcb_display.graphic_items_fill" );
ret &= fromLegacy<int>( aCfg, "MaxLnkS", "pcb_display.max_links_shown" );
ret &= fromLegacy<bool>( aCfg, "ModAffC", "pcb_display.footprint_edge_fill" );

View File

@ -187,13 +187,6 @@ public:
int sash_v;
};
struct USER_GRID
{
double size_x;
double size_y;
int units;
};
struct ZONES
{
int hatching_style;
@ -239,8 +232,6 @@ public:
FOOTPRINT_CHOOSER m_FootprintChooser;
USER_GRID m_UserGrid;
ZONES m_Zones;
WINDOW_SETTINGS m_FootprintViewer;

View File

@ -27,16 +27,13 @@
using namespace std::placeholders;
#include <pcb_edit_frame.h>
#include <class_board.h>
#include <class_dimension.h>
#include <class_draw_panel_gal.h>
#include <class_edge_mod.h>
#include <class_module.h>
#include <class_track.h>
#include <class_zone.h>
#include <gal/graphics_abstraction_layer.h>
#include <tool/tool_manager.h>
#include <geometry/shape_line_chain.h>
#include <macros.h>
#include <math/util.h> // for KiROUND
@ -50,14 +47,15 @@ using namespace std::placeholders;
GRID_HELPER::GRID_HELPER( PCB_BASE_FRAME* aFrame ) :
m_frame( aFrame )
m_frame( aFrame ),
m_toolMgr( aFrame->GetToolManager() )
{
m_enableSnap = true;
m_enableGrid = true;
m_enableSnapLine = true;
m_snapSize = 100;
m_snapItem = nullptr;
KIGFX::VIEW* view = m_frame->GetCanvas()->GetView();
KIGFX::VIEW* view = m_toolMgr->GetView();
m_viewAxis.SetSize( 20000 );
m_viewAxis.SetStyle( KIGFX::ORIGIN_VIEWITEM::CROSS );
@ -87,9 +85,7 @@ GRID_HELPER::~GRID_HELPER()
VECTOR2I GRID_HELPER::GetGrid() const
{
PCB_SCREEN* screen = m_frame->GetScreen();
const wxRealPoint& size = screen->GetGridSize();
VECTOR2D size = m_toolMgr->GetView()->GetGAL()->GetGridSize();
return VECTOR2I( KiROUND( size.x ), KiROUND( size.y ) );
}
@ -97,7 +93,9 @@ VECTOR2I GRID_HELPER::GetGrid() const
VECTOR2I GRID_HELPER::GetOrigin() const
{
return VECTOR2I( m_frame->GetGridOrigin() );
VECTOR2D origin = m_toolMgr->GetView()->GetGAL()->GetGridOrigin();
return VECTOR2I( origin );
}
@ -107,12 +105,12 @@ void GRID_HELPER::SetAuxAxes( bool aEnable, const VECTOR2I& aOrigin )
{
m_auxAxis = aOrigin;
m_viewAxis.SetPosition( aOrigin );
m_frame->GetCanvas()->GetView()->SetVisible( &m_viewAxis, true );
m_toolMgr->GetView()->SetVisible( &m_viewAxis, true );
}
else
{
m_auxAxis = OPT<VECTOR2I>();
m_frame->GetCanvas()->GetView()->SetVisible( &m_viewAxis, false );
m_toolMgr->GetView()->SetVisible( &m_viewAxis, false );
}
}
@ -219,7 +217,7 @@ VECTOR2I GRID_HELPER::BestDragOrigin( const VECTOR2I &aMousePos, std::vector<BOA
for( auto item : aItems )
computeAnchors( item, aMousePos, true );
double worldScale = m_frame->GetCanvas()->GetGAL()->GetWorldScale();
double worldScale = m_toolMgr->GetView()->GetGAL()->GetWorldScale();
double lineSnapMinCornerDistance = 50.0 / worldScale;
ANCHOR* nearestOutline = nearestAnchor( aMousePos, OUTLINE, LSET::AllLayersMask() );
@ -263,9 +261,11 @@ std::set<BOARD_ITEM*> GRID_HELPER::queryVisible( const BOX2I& aArea,
std::set<BOARD_ITEM*> items;
std::vector<KIGFX::VIEW::LAYER_ITEM_PAIR> selectedItems;
auto view = m_frame->GetCanvas()->GetView();
auto activeLayers = view->GetPainter()->GetSettings()->GetActiveLayers();
bool isHighContrast = view->GetPainter()->GetSettings()->GetHighContrast();
KIGFX::VIEW* view = m_toolMgr->GetView();
RENDER_SETTINGS* settings = view->GetPainter()->GetSettings();
const std::set<unsigned int>& activeLayers = settings->GetActiveLayers();
bool isHighContrast = settings->GetHighContrast();
view->Query( aArea, selectedItems );
for( auto it : selectedItems )
@ -273,9 +273,12 @@ std::set<BOARD_ITEM*> GRID_HELPER::queryVisible( const BOX2I& aArea,
BOARD_ITEM* item = static_cast<BOARD_ITEM*>( it.first );
// The item must be visible and on an active layer
if( view->IsVisible( item ) && ( !isHighContrast || activeLayers.count( it.second ) )
if( view->IsVisible( item )
&& ( !isHighContrast || activeLayers.count( it.second ) )
&& item->ViewGetLOD( it.second, view ) < view->GetScale() )
{
items.insert ( item );
}
}
@ -306,7 +309,7 @@ VECTOR2I GRID_HELPER::BestSnapAnchor( const VECTOR2I& aOrigin, BOARD_ITEM* aDrag
VECTOR2I GRID_HELPER::BestSnapAnchor( const VECTOR2I& aOrigin, const LSET& aLayers,
const std::vector<BOARD_ITEM*>& aSkip )
{
double worldScale = m_frame->GetCanvas()->GetGAL()->GetWorldScale();
double worldScale = m_toolMgr->GetView()->GetGAL()->GetWorldScale();
int snapRange = (int) ( m_snapSize / worldScale );
BOX2I bb( VECTOR2I( aOrigin.x - snapRange / 2, aOrigin.y - snapRange / 2 ), VECTOR2I( snapRange, snapRange ) );
@ -328,12 +331,12 @@ VECTOR2I GRID_HELPER::BestSnapAnchor( const VECTOR2I& aOrigin, const LSET& aLaye
{
m_viewSnapPoint.SetPosition( nearest->pos );
m_viewSnapLine.SetPosition( nearest->pos );
m_frame->GetCanvas()->GetView()->SetVisible( &m_viewSnapLine, false );
m_toolMgr->GetView()->SetVisible( &m_viewSnapLine, false );
if( m_frame->GetCanvas()->GetView()->IsVisible( &m_viewSnapPoint ) )
m_frame->GetCanvas()->GetView()->Update( &m_viewSnapPoint, KIGFX::GEOMETRY);
if( m_toolMgr->GetView()->IsVisible( &m_viewSnapPoint ) )
m_toolMgr->GetView()->Update( &m_viewSnapPoint, KIGFX::GEOMETRY);
else
m_frame->GetCanvas()->GetView()->SetVisible( &m_viewSnapPoint, true );
m_toolMgr->GetView()->SetVisible( &m_viewSnapPoint, true );
m_snapItem = nearest;
return nearest->pos;
@ -359,20 +362,20 @@ VECTOR2I GRID_HELPER::BestSnapAnchor( const VECTOR2I& aOrigin, const LSET& aLaye
if( snapLine && m_skipPoint != VECTOR2I( m_viewSnapLine.GetPosition() ) )
{
m_viewSnapLine.SetEndPosition( nearestGrid );
m_frame->GetCanvas()->GetView()->SetVisible( &m_viewSnapPoint, false );
m_toolMgr->GetView()->SetVisible( &m_viewSnapPoint, false );
if( m_frame->GetCanvas()->GetView()->IsVisible( &m_viewSnapLine ) )
m_frame->GetCanvas()->GetView()->Update( &m_viewSnapLine, KIGFX::GEOMETRY );
if( m_toolMgr->GetView()->IsVisible( &m_viewSnapLine ) )
m_toolMgr->GetView()->Update( &m_viewSnapLine, KIGFX::GEOMETRY );
else
m_frame->GetCanvas()->GetView()->SetVisible( &m_viewSnapLine, true );
m_toolMgr->GetView()->SetVisible( &m_viewSnapLine, true );
return nearestGrid;
}
}
m_snapItem = nullptr;
m_frame->GetCanvas()->GetView()->SetVisible( &m_viewSnapPoint, false );
m_frame->GetCanvas()->GetView()->SetVisible( &m_viewSnapLine, false );
m_toolMgr->GetView()->SetVisible( &m_viewSnapPoint, false );
m_toolMgr->GetView()->SetVisible( &m_viewSnapLine, false );
return nearestGrid;
}
@ -389,9 +392,10 @@ BOARD_ITEM* GRID_HELPER::GetSnapped( void ) const
void GRID_HELPER::computeAnchors( BOARD_ITEM* aItem, const VECTOR2I& aRefPos, bool aFrom )
{
VECTOR2I origin;
auto view = m_frame->GetCanvas()->GetView();
auto activeLayers = view->GetPainter()->GetSettings()->GetActiveLayers();
bool isHighContrast = view->GetPainter()->GetSettings()->GetHighContrast();
KIGFX::VIEW* view = m_toolMgr->GetView();
RENDER_SETTINGS* settings = view->GetPainter()->GetSettings();
const std::set<unsigned int>& activeLayers = settings->GetActiveLayers();
bool isHighContrast = settings->GetHighContrast();
switch( aItem->Type() )
{
@ -399,7 +403,7 @@ void GRID_HELPER::computeAnchors( BOARD_ITEM* aItem, const VECTOR2I& aRefPos, bo
{
MODULE* mod = static_cast<MODULE*>( aItem );
for( auto pad : mod->Pads() )
for( D_PAD* pad : mod->Pads() )
{
// Getting pads from the module requires re-checking that the pad is shown
if( ( aFrom ||

View File

@ -150,6 +150,7 @@ private:
}
PCB_BASE_FRAME* m_frame;
TOOL_MANAGER* m_toolMgr;
OPT<VECTOR2I> m_auxAxis;
bool m_enableSnap; ///< If true, allow snapping to other items on the layers

View File

@ -42,13 +42,11 @@
#include <gal/graphics_abstraction_layer.h>
#include <io_mgr.h>
#include <kicad_clipboard.h>
#include <kicad_plugin.h>
#include <kiway.h>
#include <origin_viewitem.h>
#include <pcb_edit_frame.h>
#include <pcb_painter.h>
#include <pcb_screen.h>
#include <pcbnew_settings.h>
#include <properties.h>
#include <settings/color_settings.h>
#include <tool/tool_manager.h>
@ -121,6 +119,7 @@ template<class T> void Flip( T& aValue )
aValue = !aValue;
}
int PCBNEW_CONTROL::TrackDisplayMode( const TOOL_EVENT& aEvent )
{
auto opts = displayOptions();
@ -368,16 +367,14 @@ int PCBNEW_CONTROL::LayerAlphaDec( const TOOL_EVENT& aEvent )
// Grid control
int PCBNEW_CONTROL::GridFast1( const TOOL_EVENT& aEvent )
{
m_frame->SetFastGrid1();
updateGrid();
m_toolMgr->RunAction( "common.Control.gridPreset", true, m_frame->Settings().m_FastGrid1 );
return 0;
}
int PCBNEW_CONTROL::GridFast2( const TOOL_EVENT& aEvent )
{
m_frame->SetFastGrid2();
updateGrid();
m_toolMgr->RunAction( "common.Control.gridPreset", true, m_frame->Settings().m_FastGrid2 );
return 0;
}
@ -961,14 +958,6 @@ int PCBNEW_CONTROL::Redo( const TOOL_EVENT& aEvent )
}
void PCBNEW_CONTROL::updateGrid()
{
BASE_SCREEN* screen = m_frame->GetScreen();
getView()->GetGAL()->SetGridSize( VECTOR2D( screen->GetGridSize() ) );
getView()->MarkTargetDirty( KIGFX::TARGET_NONCACHED );
}
int PCBNEW_CONTROL::UpdateMessagePanel( const TOOL_EVENT& aEvent )
{
SELECTION_TOOL* selTool = m_toolMgr->GetTool<SELECTION_TOOL>();

View File

@ -112,9 +112,6 @@ private:
std::unique_ptr<KIGFX::ORIGIN_VIEWITEM> m_gridOrigin;
BOARD_ITEM* m_pickerItem;
///> Applies the legacy canvas grid settings for GAL.
void updateGrid();
};
#endif

View File

@ -128,7 +128,7 @@ void PCB_TEST_FRAME::SetBoard( BOARD* b )
m_galPanel->DisplayBoard( m_board.get() );
#ifdef USE_TOOL_MANAGER
m_toolManager->SetEnvironment( m_board.get(), m_galPanel->GetView(),
m_galPanel->GetViewControls(), nullptr );
m_galPanel->GetViewControls(), nullptr, nullptr );
m_toolManager->ResetTools( TOOL_BASE::MODEL_RELOAD );
#endif
@ -204,7 +204,7 @@ PCB_TEST_FRAME::PCB_TEST_FRAME( wxFrame* frame, const wxString& title, const wxP
#ifdef USE_TOOL_MANAGER
m_toolManager = std::make_unique<TOOL_MANAGER>( );
m_toolManager->SetEnvironment( m_board.get(), m_galPanel->GetView(),
m_galPanel->GetViewControls(), nullptr );
m_galPanel->GetViewControls(), nullptr, nullptr );
m_pcbActions = std::make_unique<TEST_ACTIONS>( );
m_toolDispatcher = std::make_unique<TOOL_DISPATCHER>( m_toolManager.get(), m_pcbActions.get() );