Compare commits
123 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| fa85cb3a8b | |||
| 853984120c | |||
| be62a1ade6 | |||
| 3b4cdd96ab | |||
| f776b7c3fb | |||
| 9d233b4cdb | |||
| 19c54933c1 | |||
| 7aca6174d6 | |||
| 5f98fc0591 | |||
| bcdcaa724d | |||
| 32f24289bd | |||
| 021320be1b | |||
| e309ca10d1 | |||
| a65b7963d1 | |||
| 26c5485be9 | |||
| 48d2ac15d5 | |||
| 2ab90d6d20 | |||
| 81cc0b4c42 | |||
| 95b84f4a8d | |||
| 6c25b29e9f | |||
| 1f6789e692 | |||
| e4307a86cc | |||
| ce181e6e0a | |||
| 4212d99c3d | |||
| 535f3ae006 | |||
| 90ed0183c8 | |||
| 2bb695b767 | |||
| c980e6999a | |||
| 1e7ba6c644 | |||
| 53f6bf29c7 | |||
| 8e4098f3f1 | |||
| 7179a71cdc | |||
| 606978297d | |||
| 648b7d53b5 | |||
| 93c5e5e4aa | |||
| 7940f0773c | |||
| 226d56433c | |||
| 5cf68726d6 | |||
| 3c233ae08e | |||
| 9810236314 | |||
| 7dbf84a9bd | |||
| b73a71c696 | |||
| e4e635d3b5 | |||
| 2ffdc0d03d | |||
| 91f34a9478 | |||
| 67ab1be495 | |||
| fdc4d2a8a9 | |||
| 72f19ded75 | |||
| 3c8bed9c92 | |||
| 6a33549b68 | |||
| ab99c58ead | |||
| c8daccbe0e | |||
| b6dedd9f5b | |||
| fd054f566e | |||
| 4a665f492e | |||
| a0d41f75ff | |||
| 5f72cca19a | |||
| 8191327fc2 | |||
| a19a52398a | |||
| f3d173fe64 | |||
| 3076e98b29 | |||
| 1d55823fef | |||
| 62475d0464 | |||
| 1060d4ac6e | |||
| 44038c47c6 | |||
| fef0759155 | |||
| 16dbe11868 | |||
| 68725bc20c | |||
| 963b4d5ed6 | |||
| 6657981553 | |||
| 286f6a426b | |||
| cc058033cc | |||
| 18f07d8efb | |||
| 6d3e1b9391 | |||
| 79fe4a0acb | |||
| 5c4fbbec43 | |||
| 7d0299f153 | |||
| e9570fddd6 | |||
| 34217c0199 | |||
| ab0e3d0ce2 | |||
| c8b2971d1c | |||
| 9b0bd7ca1f | |||
| fd009f924a | |||
| 48e2addd69 | |||
| a773ecc735 | |||
| dcd81e23f4 | |||
| bff0068065 | |||
| d0932944fc | |||
| 5c3a56bdcc | |||
| e9bfcc28c3 | |||
| 3cdac44ac2 | |||
| 2cebaa2d79 | |||
| 609b996abe | |||
| ea0c187e09 | |||
| bf6cd8445a | |||
| c50763bd5b | |||
| 1aa6932b12 | |||
| 342ec2be0e | |||
| d451800d0a | |||
| 48435c5cb3 | |||
| 8999ae9fb2 | |||
| 8184ba1cf3 | |||
| 228ed4ea41 | |||
| 3031a3f5cf | |||
| 42aa93e34b | |||
| eb8b407717 | |||
| eaea15fbef | |||
| 72a69f9428 | |||
| c66656c5d4 | |||
| 14363262c2 | |||
| 509e71fdb3 | |||
| 6c5e2f3900 | |||
| f46272bed9 | |||
| 2f7b3ab56e | |||
| b526227529 | |||
| e93c815e02 | |||
| 5c8f7c7a3a | |||
| 7fb6698e29 | |||
| f11b426151 | |||
| 827dad3197 | |||
| 593c974063 | |||
| a68b3cb486 | |||
| ce81524b83 |
+29
-20
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* This program source code file is part of KiCad, a free EDA CAD application.
|
||||
*
|
||||
* Copyright (C) 1992-2014 KiCad Developers, see AUTHORS.txt for contributors.
|
||||
* Copyright (C) 1992-2016 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
|
||||
@@ -53,6 +53,9 @@
|
||||
#include <textures/text_pcb.h>
|
||||
|
||||
|
||||
static const double DELTA_MOVE_STEP = 0.7;
|
||||
|
||||
|
||||
/*
|
||||
* EDA_3D_CANVAS implementation
|
||||
*/
|
||||
@@ -86,7 +89,7 @@ EDA_3D_CANVAS::EDA_3D_CANVAS( EDA_3D_FRAME* parent, int* attribList ) :
|
||||
m_init = false;
|
||||
m_reportWarnings = true;
|
||||
m_shadow_init = false;
|
||||
// set an invalide value to not yet initialized indexes managing
|
||||
// set an invalid value to not yet initialized indexes managing
|
||||
// textures created to enhance 3D rendering
|
||||
m_text_pcb = m_text_silk = INVALID_INDEX;
|
||||
m_text_fake_shadow_front = INVALID_INDEX;
|
||||
@@ -144,8 +147,7 @@ void EDA_3D_CANVAS::ClearLists( int aGlList )
|
||||
m_glLists[ii] = 0;
|
||||
}
|
||||
|
||||
// When m_text_fake_shadow_??? is set to INVALID_INDEX, textures are no yet
|
||||
// created.
|
||||
// When m_text_fake_shadow_??? is set to INVALID_INDEX, textures are not yet created.
|
||||
if( m_text_fake_shadow_front != INVALID_INDEX )
|
||||
glDeleteTextures( 1, &m_text_fake_shadow_front );
|
||||
|
||||
@@ -169,7 +171,7 @@ void EDA_3D_CANVAS::OnChar( wxKeyEvent& event )
|
||||
void EDA_3D_CANVAS::SetView3D( int keycode )
|
||||
{
|
||||
int ii;
|
||||
double delta_move = 0.7 * GetPrm3DVisu().m_Zoom;
|
||||
double delta_move = DELTA_MOVE_STEP * GetPrm3DVisu().m_Zoom;
|
||||
|
||||
switch( keycode )
|
||||
{
|
||||
@@ -284,19 +286,27 @@ void EDA_3D_CANVAS::SetView3D( int keycode )
|
||||
|
||||
void EDA_3D_CANVAS::OnMouseWheel( wxMouseEvent& event )
|
||||
{
|
||||
if( event.ShiftDown() )
|
||||
double delta = DELTA_MOVE_STEP * GetPrm3DVisu().m_Zoom;
|
||||
if ( GetPrm3DVisu().GetFlag( FL_MOUSEWHEEL_PANNING ) )
|
||||
delta *= 0.05 * event.GetWheelRotation();
|
||||
else
|
||||
if ( event.GetWheelRotation() < 0 )
|
||||
delta = -delta;
|
||||
|
||||
if( GetPrm3DVisu().GetFlag( FL_MOUSEWHEEL_PANNING ) )
|
||||
{
|
||||
if( event.GetWheelRotation() < 0 )
|
||||
SetView3D( WXK_UP ); // move up
|
||||
if( event.GetWheelAxis() == wxMOUSE_WHEEL_HORIZONTAL )
|
||||
m_draw3dOffset.x -= delta;
|
||||
else
|
||||
SetView3D( WXK_DOWN ); // move down
|
||||
m_draw3dOffset.y -= delta;
|
||||
}
|
||||
else if( event.ShiftDown() )
|
||||
{
|
||||
m_draw3dOffset.y -= delta;
|
||||
}
|
||||
else if( event.ControlDown() )
|
||||
{
|
||||
if( event.GetWheelRotation() > 0 )
|
||||
SetView3D( WXK_RIGHT ); // move right
|
||||
else
|
||||
SetView3D( WXK_LEFT ); // move left
|
||||
m_draw3dOffset.x += delta;
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -310,10 +320,10 @@ void EDA_3D_CANVAS::OnMouseWheel( wxMouseEvent& event )
|
||||
else
|
||||
GetPrm3DVisu().m_Zoom *= 1.4;
|
||||
|
||||
DisplayStatus();
|
||||
Refresh( false );
|
||||
}
|
||||
|
||||
DisplayStatus();
|
||||
Refresh( false );
|
||||
GetPrm3DVisu().m_Beginx = event.GetX();
|
||||
GetPrm3DVisu().m_Beginy = event.GetY();
|
||||
}
|
||||
@@ -327,7 +337,9 @@ void EDA_3D_CANVAS::OnMagnify( wxMouseEvent& event )
|
||||
GetPrm3DVisu().m_Zoom /= magnification;
|
||||
|
||||
if( GetPrm3DVisu().m_Zoom <= 0.01 )
|
||||
{
|
||||
GetPrm3DVisu().m_Zoom = 0.01;
|
||||
}
|
||||
|
||||
DisplayStatus();
|
||||
Refresh( false );
|
||||
@@ -376,8 +388,6 @@ void EDA_3D_CANVAS::OnMouseMove( wxMouseEvent& event )
|
||||
}
|
||||
|
||||
|
||||
/* Construct and display a popup menu when the right button is clicked.
|
||||
*/
|
||||
void EDA_3D_CANVAS::OnRightClick( wxMouseEvent& event )
|
||||
{
|
||||
wxPoint pos;
|
||||
@@ -563,7 +573,7 @@ GLuint load_and_generate_texture( tsImage *image )
|
||||
return texture;
|
||||
}
|
||||
|
||||
/* Initialize broad parameters for OpenGL */
|
||||
|
||||
void EDA_3D_CANVAS::InitGL()
|
||||
{
|
||||
if( !m_init )
|
||||
@@ -579,7 +589,7 @@ void EDA_3D_CANVAS::InitGL()
|
||||
m_ZTop = 10.0;
|
||||
|
||||
glDisable( GL_CULL_FACE ); // show back faces
|
||||
glEnable( GL_DEPTH_TEST ); // Enable z-buferring
|
||||
glEnable( GL_DEPTH_TEST ); // Enable z-buffering
|
||||
glEnable( GL_ALPHA_TEST );
|
||||
glEnable( GL_LINE_SMOOTH );
|
||||
// glEnable(GL_POLYGON_SMOOTH); // creates issues with some graphic cards
|
||||
@@ -600,7 +610,6 @@ void EDA_3D_CANVAS::InitGL()
|
||||
}
|
||||
|
||||
|
||||
/* Initialize OpenGL light sources. */
|
||||
void EDA_3D_CANVAS::SetLights()
|
||||
{
|
||||
// activate light. the source is above the xy plane, at source_pos
|
||||
|
||||
@@ -572,7 +572,10 @@ void EDA_3D_CANVAS::buildTechLayers3DView( REPORTER* aErrorMessages, REPORTER* a
|
||||
|
||||
// bufferPolys contains polygons to merge. Many overlaps .
|
||||
// Calculate merged polygons and remove pads and vias holes
|
||||
if( bufferPolys.IsEmpty() )
|
||||
if( layer != B_Mask && layer != F_Mask && bufferPolys.IsEmpty() )
|
||||
// if a layer has no iten to draw, skip it
|
||||
// However solder mask layers are negative layers, so no item
|
||||
// means only a full layer mask
|
||||
continue;
|
||||
|
||||
// Solder mask layers are "negative" layers.
|
||||
|
||||
+15
-14
@@ -5,7 +5,7 @@
|
||||
/*
|
||||
* This program source code file is part of KiCad, a free EDA CAD application.
|
||||
*
|
||||
* Copyright (C) 1992-2015 KiCad Developers, see AUTHORS.txt for contributors.
|
||||
* Copyright (C) 1992-2016 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
|
||||
@@ -70,6 +70,8 @@ static const wxChar keyBoardBodyColor_Red[] = wxT( "BoardBodyColor_Red" );
|
||||
static const wxChar keyBoardBodyColor_Green[] = wxT( "BoardBodyColor_Green" );
|
||||
static const wxChar keyBoardBodyColor_Blue[]= wxT( "BoardBodyColor_Blue" );
|
||||
|
||||
static const wxChar keyMousewheelPanning[] = wxT( "MousewheelPAN3D" );
|
||||
|
||||
static const wxChar keyShowRealisticMode[] = wxT( "ShowRealisticMode" );
|
||||
static const wxChar keyRenderShadows[] = wxT( "Render_Shadows" );
|
||||
static const wxChar keyRenderRemoveHoles[] = wxT( "Render_RemoveHoles" );
|
||||
@@ -282,6 +284,9 @@ void EDA_3D_FRAME::LoadSettings( wxConfigBase* aCfg )
|
||||
aCfg->Read( keyBoardBodyColor_Blue, &GetPrm3DVisu().m_BoardBodyColor.m_Blue, 22.0 /255.0 );
|
||||
|
||||
bool tmp;
|
||||
aCfg->Read( keyMousewheelPanning, &tmp, false );
|
||||
prms.SetFlag( FL_MOUSEWHEEL_PANNING, tmp );
|
||||
|
||||
aCfg->Read( keyShowRealisticMode, &tmp, false );
|
||||
prms.SetFlag( FL_USE_REALISTIC_MODE, tmp );
|
||||
|
||||
@@ -380,6 +385,8 @@ void EDA_3D_FRAME::SaveSettings( wxConfigBase* aCfg )
|
||||
aCfg->Write( keyBoardBodyColor_Green, GetPrm3DVisu().m_BoardBodyColor.m_Green );
|
||||
aCfg->Write( keyBoardBodyColor_Blue, GetPrm3DVisu().m_BoardBodyColor.m_Blue );
|
||||
|
||||
aCfg->Write( keyMousewheelPanning, prms.GetFlag( FL_MOUSEWHEEL_PANNING ) );
|
||||
|
||||
aCfg->Write( keyShowRealisticMode, prms.GetFlag( FL_USE_REALISTIC_MODE ) );
|
||||
|
||||
aCfg->Write( keyRenderShadows, prms.GetFlag( FL_RENDER_SHADOWS ) );
|
||||
@@ -565,6 +572,10 @@ void EDA_3D_FRAME::Process_Special_Functions( wxCommandEvent& event )
|
||||
Set3DBoardBodyColorFromUser();
|
||||
break;
|
||||
|
||||
case ID_MENU3D_MOUSEWHEEL_PANNING:
|
||||
GetPrm3DVisu().SetFlag( FL_MOUSEWHEEL_PANNING, isChecked );
|
||||
return;
|
||||
|
||||
case ID_MENU3D_REALISTIC_MODE:
|
||||
GetPrm3DVisu().SetFlag( FL_USE_REALISTIC_MODE, isChecked );
|
||||
GetMenuBar()->FindItem( ID_MENU3D_COMMENTS_ONOFF )->Enable( !isChecked );
|
||||
@@ -747,8 +758,6 @@ void EDA_3D_FRAME::OnActivate( wxActivateEvent& event )
|
||||
}
|
||||
|
||||
|
||||
/* called to set the background color of the 3D scene
|
||||
*/
|
||||
bool EDA_3D_FRAME::Set3DColorFromUser( S3D_COLOR &aColor, const wxString& aTitle,
|
||||
wxColourData* aPredefinedColors )
|
||||
{
|
||||
@@ -780,13 +789,12 @@ bool EDA_3D_FRAME::Set3DColorFromUser( S3D_COLOR &aColor, const wxString& aTitle
|
||||
return true;
|
||||
}
|
||||
|
||||
/* called to set the silkscreen color. Sets up a number of default colors
|
||||
*/
|
||||
|
||||
bool EDA_3D_FRAME::Set3DSilkScreenColorFromUser()
|
||||
{
|
||||
wxColourData definedColors;
|
||||
|
||||
definedColors.SetCustomColour(0, wxColour( 241, 241, 241 ) ); // White
|
||||
definedColors.SetCustomColour(0, wxColour( 241, 241, 241 ) ); // White
|
||||
definedColors.SetCustomColour(1, wxColour( 180, 180, 180 ) ); // Gray
|
||||
|
||||
bool change = Set3DColorFromUser( GetPrm3DVisu().m_SilkScreenColor,
|
||||
@@ -800,8 +808,6 @@ bool EDA_3D_FRAME::Set3DSilkScreenColorFromUser()
|
||||
}
|
||||
|
||||
|
||||
/* called to set the soldermask color. Sets up a number of default colors
|
||||
*/
|
||||
bool EDA_3D_FRAME::Set3DSolderMaskColorFromUser()
|
||||
{
|
||||
wxColourData definedColors;
|
||||
@@ -824,8 +830,6 @@ bool EDA_3D_FRAME::Set3DSolderMaskColorFromUser()
|
||||
}
|
||||
|
||||
|
||||
/* called to set the copper surface color. Sets up a number of default colors
|
||||
*/
|
||||
bool EDA_3D_FRAME::Set3DCopperColorFromUser()
|
||||
{
|
||||
wxColourData definedColors;
|
||||
@@ -847,8 +851,6 @@ bool EDA_3D_FRAME::Set3DCopperColorFromUser()
|
||||
}
|
||||
|
||||
|
||||
/* called to set the board body color. Sets up a number of default colors
|
||||
*/
|
||||
bool EDA_3D_FRAME::Set3DBoardBodyColorFromUser()
|
||||
{
|
||||
wxColourData definedColors;
|
||||
@@ -873,8 +875,6 @@ bool EDA_3D_FRAME::Set3DBoardBodyColorFromUser()
|
||||
}
|
||||
|
||||
|
||||
/* called to set the solder paste layer color. Sets up a number of default colors
|
||||
*/
|
||||
bool EDA_3D_FRAME::Set3DSolderPasteColorFromUser()
|
||||
{
|
||||
wxColourData definedColors;
|
||||
@@ -907,6 +907,7 @@ INFO3D_VISU& EDA_3D_FRAME::GetPrm3DVisu() const
|
||||
return g_Parm_3D_Visu;
|
||||
}
|
||||
|
||||
|
||||
bool EDA_3D_FRAME::IsEnabled( DISPLAY3D_FLG aItem ) const
|
||||
{
|
||||
// return true if aItem must be displayed
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Copyright (C) 2015 Jean-Pierre Charras, jp.charras at wanadoo.fr
|
||||
* Copyright (C) 2013 Wayne Stambaugh <stambaughw@verizon.net>
|
||||
* Copyright (C) 1992-2015 KiCad Developers, see AUTHORS.txt for contributors.
|
||||
* Copyright (C) 1992-2016 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
|
||||
@@ -135,10 +135,10 @@ void EDA_3D_FRAME::CreateMenuBar()
|
||||
menuBar->Append( fileMenu, _( "&File" ) );
|
||||
|
||||
AddMenuItem( fileMenu, ID_MENU_SCREENCOPY_PNG,
|
||||
_( "Create Image (png format)" ),
|
||||
_( "Create Image (PNG format)" ),
|
||||
KiBitmap( export_xpm ) );
|
||||
AddMenuItem( fileMenu, ID_MENU_SCREENCOPY_JPEG,
|
||||
_( "Create Image (jpeg format)" ),
|
||||
_( "Create Image (JPEG format)" ),
|
||||
KiBitmap( export_xpm ) );
|
||||
|
||||
fileMenu->AppendSeparator();
|
||||
@@ -153,6 +153,12 @@ void EDA_3D_FRAME::CreateMenuBar()
|
||||
|
||||
menuBar->Append( prefsMenu, _( "&Preferences" ) );
|
||||
|
||||
AddMenuItem( prefsMenu, ID_MENU3D_MOUSEWHEEL_PANNING,
|
||||
_( "Use Touchpad to Pan" ),
|
||||
KiBitmap( tools_xpm ), wxITEM_CHECK );
|
||||
|
||||
prefsMenu->AppendSeparator();
|
||||
|
||||
AddMenuItem( prefsMenu, ID_MENU3D_REALISTIC_MODE,
|
||||
_( "Realistic Mode" ),
|
||||
KiBitmap( use_3D_copper_thickness_xpm ), wxITEM_CHECK );
|
||||
@@ -292,6 +298,7 @@ void EDA_3D_FRAME::CreateMenuBar()
|
||||
SetMenuBarOptionsState();
|
||||
}
|
||||
|
||||
|
||||
void EDA_3D_FRAME::SetMenuBarOptionsState()
|
||||
{
|
||||
wxMenuBar* menuBar = GetMenuBar();
|
||||
@@ -301,6 +308,9 @@ void EDA_3D_FRAME::SetMenuBarOptionsState()
|
||||
|
||||
wxMenuItem* item;
|
||||
// Set the state of toggle menus according to the current display options
|
||||
item = menuBar->FindItem( ID_MENU3D_MOUSEWHEEL_PANNING );
|
||||
item->Check( GetPrm3DVisu().GetFlag( FL_MOUSEWHEEL_PANNING ) );
|
||||
|
||||
item = menuBar->FindItem( ID_MENU3D_REALISTIC_MODE );
|
||||
item->Check( GetPrm3DVisu().IsRealisticMode() );
|
||||
item = menuBar->FindItem( ID_MENU3D_COMMENTS_ONOFF );
|
||||
@@ -366,6 +376,7 @@ void EDA_3D_FRAME::SetMenuBarOptionsState()
|
||||
item->Check( GetPrm3DVisu().GetFlag( FL_ECO ));
|
||||
}
|
||||
|
||||
|
||||
void EDA_3D_FRAME::SetToolbars()
|
||||
{
|
||||
}
|
||||
|
||||
@@ -51,6 +51,7 @@ enum id_3dview_frm
|
||||
ID_MENU3D_COMMENTS_ONOFF,
|
||||
ID_MENU3D_ECO_ONOFF,
|
||||
ID_MENU3D_SHOW_BOARD_BODY,
|
||||
ID_MENU3D_MOUSEWHEEL_PANNING,
|
||||
ID_MENU3D_REALISTIC_MODE,
|
||||
ID_MENU3D_FL_RENDER_SHADOWS,
|
||||
ID_MENU3D_FL_RENDER_SHOW_HOLES_IN_ZONES,
|
||||
|
||||
@@ -71,6 +71,7 @@ enum DISPLAY3D_FLG {
|
||||
FL_GRID,
|
||||
FL_USE_COPPER_THICKNESS,
|
||||
FL_SHOW_BOARD_BODY,
|
||||
FL_MOUSEWHEEL_PANNING,
|
||||
FL_USE_REALISTIC_MODE,
|
||||
FL_RENDER_SHADOWS,
|
||||
FL_RENDER_SHOW_HOLES_IN_ZONES,
|
||||
|
||||
+1
-1
@@ -299,7 +299,7 @@ if( KICAD_SCRIPTING_WXPYTHON )
|
||||
add_definitions( -DKICAD_SCRIPTING_WXPYTHON )
|
||||
endif()
|
||||
|
||||
if( USE_WX_GRAPHICS_CONTEXT )
|
||||
if( USE_WX_GRAPHICS_CONTEXT OR APPLE )
|
||||
add_definitions( -DUSE_WX_GRAPHICS_CONTEXT )
|
||||
endif()
|
||||
|
||||
|
||||
@@ -21,6 +21,13 @@ set_source_files_properties( bitmap2cmp_gui.cpp PROPERTIES
|
||||
COMPILE_DEFINITIONS "COMPILING_DLL"
|
||||
)
|
||||
|
||||
if( MINGW )
|
||||
# BITMAP2COMPONENT_RESOURCES variable is set by the macro.
|
||||
mingw_resource_compiler( bitmap2component )
|
||||
else()
|
||||
set( BITMAP2COMPONENT_RESOURCES bitmap2component.rc )
|
||||
endif()
|
||||
|
||||
if( APPLE )
|
||||
# setup bundle
|
||||
set( BITMAP2COMPONENT_RESOURCES bitmap2component.icns )
|
||||
@@ -81,11 +88,3 @@ if( false ) # linker map with cross reference
|
||||
LINK_FLAGS "${TO_LINKER},-cref ${TO_LINKER},-Map=bitmap2component.map"
|
||||
)
|
||||
endif()
|
||||
|
||||
|
||||
if( MINGW )
|
||||
# BITMAP2COMPONENT_RESOURCES variable is set by the macro.
|
||||
mingw_resource_compiler( bitmap2component )
|
||||
else()
|
||||
set( BITMAP2COMPONENT_RESOURCES bitmap2component.rc )
|
||||
endif()
|
||||
|
||||
+25
-18
@@ -49,6 +49,7 @@
|
||||
|
||||
#include <boost/version.hpp>
|
||||
#include <typeinfo>
|
||||
#include <wx/display.h>
|
||||
|
||||
/// The default auto save interval is 10 minutes.
|
||||
#define DEFAULT_AUTO_SAVE_INTERVAL 600
|
||||
@@ -253,6 +254,20 @@ void EDA_BASE_FRAME::LoadSettings( wxConfigBase* aCfg )
|
||||
aCfg->Read( text, &m_autoSaveInterval, DEFAULT_AUTO_SAVE_INTERVAL );
|
||||
}
|
||||
|
||||
// Ensure the window is on a connected display, and is visible.
|
||||
// (at least a corner of the frame must be visible on screen)
|
||||
// Sometimes, if a window was moved on an auxiliary display, and when this
|
||||
// display is no more available, it is not the case.
|
||||
wxRect rect( m_FramePos, m_FrameSize );
|
||||
|
||||
if( wxDisplay::GetFromPoint( rect.GetTopLeft() ) == wxNOT_FOUND &&
|
||||
wxDisplay::GetFromPoint( rect.GetTopRight() ) == wxNOT_FOUND &&
|
||||
wxDisplay::GetFromPoint( rect.GetBottomLeft() ) == wxNOT_FOUND &&
|
||||
wxDisplay::GetFromPoint( rect.GetBottomRight() ) == wxNOT_FOUND )
|
||||
{
|
||||
m_FramePos = wxDefaultPosition;
|
||||
}
|
||||
|
||||
// Ensure Window title bar is visible
|
||||
#if defined( __WXMAC__ )
|
||||
// for macOSX, the window must be below system (macOSX) toolbar
|
||||
@@ -455,26 +470,18 @@ void EDA_BASE_FRAME::GetKicadHelp( wxCommandEvent& event )
|
||||
|
||||
void EDA_BASE_FRAME::OnSelectPreferredEditor( wxCommandEvent& event )
|
||||
{
|
||||
wxFileName fn = Pgm().GetEditorName();
|
||||
wxString wildcard( wxT( "*" ) );
|
||||
// Ask for the current editor and instruct GetEditorName() to not show
|
||||
// unless we pass false as argument.
|
||||
wxString editorname = Pgm().GetEditorName( false );
|
||||
|
||||
#ifdef __WINDOWS__
|
||||
wildcard += wxT( ".exe" );
|
||||
#endif
|
||||
// Ask the user to select a new editor, but suggest the current one as the default.
|
||||
editorname = Pgm().AskUserForPreferredEditor( editorname );
|
||||
|
||||
wildcard.Printf( _( "Executable file (%s)|%s" ),
|
||||
GetChars( wildcard ), GetChars( wildcard ) );
|
||||
|
||||
wxFileDialog dlg( this, _( "Select Preferred Editor" ), fn.GetPath(),
|
||||
fn.GetFullName(), wildcard,
|
||||
wxFD_OPEN | wxFD_FILE_MUST_EXIST );
|
||||
|
||||
if( dlg.ShowModal() == wxID_CANCEL )
|
||||
return;
|
||||
|
||||
wxString editor = dlg.GetPath();
|
||||
|
||||
Pgm().SetEditorName( editor );
|
||||
// If we have a new editor name request it to be copied to m_editor_name and saved
|
||||
// to the preferences file. If the user cancelled the dialog then the previous
|
||||
// value will be retained.
|
||||
if( !editorname.IsEmpty() )
|
||||
Pgm().SetEditorName( editorname );
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
* This program source code file is part of KiCad, a free EDA CAD application.
|
||||
*
|
||||
* Copyright (C) 2011 jean-pierre.charras
|
||||
* Copyright (C) 2011 KiCad Developers, see change_log.txt for contributors.
|
||||
* Copyright (C) 2011-2016 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
|
||||
@@ -108,14 +108,17 @@ bool BITMAP_BASE::SaveData( FILE* aFile ) const
|
||||
wxStreamBuffer* buffer = stream.GetOutputStreamBuffer();
|
||||
char* begin = (char*) buffer->GetBufferStart();
|
||||
int ii;
|
||||
|
||||
for( ii = 0; begin <= buffer->GetBufferEnd(); begin++, ii++ )
|
||||
{
|
||||
if( ii >= 32 )
|
||||
{
|
||||
ii = 0;
|
||||
|
||||
if( fprintf( aFile, "\n" ) == EOF )
|
||||
return false;
|
||||
}
|
||||
|
||||
if( fprintf( aFile, "%2.2X ", *begin & 0xFF ) == EOF )
|
||||
return false;
|
||||
}
|
||||
@@ -124,6 +127,7 @@ bool BITMAP_BASE::SaveData( FILE* aFile ) const
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
void BITMAP_BASE::SaveData( wxArrayString& aPngStrings ) const
|
||||
{
|
||||
if( m_image )
|
||||
@@ -134,7 +138,8 @@ void BITMAP_BASE::SaveData( wxArrayString& aPngStrings ) const
|
||||
// Write binary data in hexadecimal form (ASCII)
|
||||
wxStreamBuffer* buffer = stream.GetOutputStreamBuffer();
|
||||
char* begin = (char*) buffer->GetBufferStart();
|
||||
wxString line;
|
||||
wxString line;
|
||||
|
||||
for( int ii = 0; begin <= buffer->GetBufferEnd(); begin++, ii++ )
|
||||
{
|
||||
if( ii >= 32 )
|
||||
@@ -144,7 +149,7 @@ void BITMAP_BASE::SaveData( wxArrayString& aPngStrings ) const
|
||||
line.Empty();
|
||||
}
|
||||
|
||||
line << wxString::Format( wxT("%2.2X "), *begin & 0xFF );
|
||||
line << wxString::Format( wxT( "%2.2X " ), *begin & 0xFF );
|
||||
}
|
||||
|
||||
// Add last line:
|
||||
@@ -218,6 +223,11 @@ void BITMAP_BASE::DrawBitmap( EDA_DRAW_PANEL* aPanel, wxDC* aDC, const wxPoint&
|
||||
wxPoint pos = aPos;
|
||||
wxSize size = GetSize();
|
||||
|
||||
// This fixes a bug in OSX that should be fixed in the 3.0.3 version or later.
|
||||
// See: http://trac.wxwidgets.org/ticket/16329 for more information.
|
||||
if( ( size.x == 0 ) || ( size.y == 0 ) )
|
||||
return;
|
||||
|
||||
// To draw the bitmap, pos is the upper left corner position
|
||||
pos.x -= size.x / 2;
|
||||
pos.y -= size.y / 2;
|
||||
@@ -228,7 +238,7 @@ void BITMAP_BASE::DrawBitmap( EDA_DRAW_PANEL* aPanel, wxDC* aDC, const wxPoint&
|
||||
aDC->GetLogicalOrigin( &logicalOriginX, &logicalOriginY );
|
||||
aDC->SetUserScale( scale * GetScalingFactor(), scale * GetScalingFactor() );
|
||||
aDC->SetLogicalOrigin( logicalOriginX / GetScalingFactor(),
|
||||
logicalOriginY / GetScalingFactor() );
|
||||
logicalOriginY / GetScalingFactor() );
|
||||
aDC->DrawBitmap( *m_bitmap,
|
||||
KiROUND( pos.x / GetScalingFactor() ),
|
||||
KiROUND( pos.y / GetScalingFactor() ),
|
||||
@@ -238,9 +248,6 @@ void BITMAP_BASE::DrawBitmap( EDA_DRAW_PANEL* aPanel, wxDC* aDC, const wxPoint&
|
||||
}
|
||||
|
||||
|
||||
/* Function GetSize
|
||||
* returns the actual size (in user units, not in pixels) of the image
|
||||
*/
|
||||
wxSize BITMAP_BASE::GetSize() const
|
||||
{
|
||||
wxSize size;
|
||||
@@ -258,12 +265,6 @@ wxSize BITMAP_BASE::GetSize() const
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Mirror image vertically (i.e. relative to its horizontal X axis )
|
||||
* or horizontally (i.e relative to its vertical Y axis)
|
||||
* param aVertically = false to mirror horizontally
|
||||
* or true to mirror vertically
|
||||
*/
|
||||
void BITMAP_BASE::Mirror( bool aVertically )
|
||||
{
|
||||
if( m_image )
|
||||
@@ -292,10 +293,9 @@ void BITMAP_BASE::PlotImage( PLOTTER* aPlotter,
|
||||
if( m_image == NULL )
|
||||
return;
|
||||
|
||||
// These 2 lines are useful only fot plotters that cannot plot a bitmap
|
||||
// These 2 lines are useful only for plotters that cannot plot a bitmap
|
||||
// and plot a rectangle instead of.
|
||||
aPlotter->SetColor( aDefaultColor );
|
||||
aPlotter->SetCurrentLineWidth( aDefaultPensize );
|
||||
|
||||
aPlotter->PlotImage( *m_image, aPos, GetScalingFactor() );
|
||||
}
|
||||
|
||||
@@ -89,36 +89,6 @@ const PAGE_INFO PAGE_INFO::pageUSLedger( wxSize( 17000, 11000 ), wxT( "USLedge
|
||||
int PAGE_INFO::s_user_width = 17000;
|
||||
int PAGE_INFO::s_user_height = 11000;
|
||||
|
||||
/*
|
||||
wxArrayString PAGE_INFO::GetStandardSizes()
|
||||
{
|
||||
wxArrayString ret;
|
||||
|
||||
static const PAGE_INFO* stdPageSizes[] = {
|
||||
&pageA4,
|
||||
&pageA3,
|
||||
&pageA2,
|
||||
&pageA1,
|
||||
&pageA0,
|
||||
&pageA,
|
||||
&pageB,
|
||||
&pageC,
|
||||
&pageD,
|
||||
&pageE,
|
||||
// &pageGERBER, // standard?
|
||||
&pageUSLetter,
|
||||
&pageUSLegal,
|
||||
&pageUSLedger,
|
||||
&pageUser,
|
||||
};
|
||||
|
||||
for( unsigned i=0; i < DIM( stdPageSizes ); ++i )
|
||||
ret.Add( stdPageSizes[i]->GetType() );
|
||||
|
||||
return ret;
|
||||
}
|
||||
*/
|
||||
|
||||
|
||||
inline void PAGE_INFO::updatePortrait()
|
||||
{
|
||||
|
||||
+33
-31
@@ -23,6 +23,7 @@
|
||||
*/
|
||||
|
||||
#include <colors.h>
|
||||
#include <i18n_utility.h>
|
||||
|
||||
|
||||
/**
|
||||
@@ -32,38 +33,39 @@
|
||||
* when displaying superimposed objects
|
||||
* This list must have exactly NBCOLORS items
|
||||
*/
|
||||
|
||||
const StructColors g_ColorRefs[NBCOLORS] =
|
||||
{
|
||||
{ 0, 0, 0, BLACK, wxT( "Black" ), DARKDARKGRAY },
|
||||
{ 72, 72, 72, DARKDARKGRAY, wxT( "Gray 1" ), DARKGRAY },
|
||||
{ 132, 132, 132, DARKGRAY, wxT( "Gray 2" ), LIGHTGRAY },
|
||||
{ 194, 194, 194, LIGHTGRAY, wxT( "Gray 3" ), WHITE },
|
||||
{ 255, 255, 255, WHITE, wxT( "White" ), WHITE },
|
||||
{ 194, 255, 255, LIGHTYELLOW, wxT( "L.Yellow" ), WHITE },
|
||||
{ 72, 0, 0, DARKBLUE, wxT( "Blue 1" ), BLUE },
|
||||
{ 0, 72, 0, DARKGREEN, wxT( "Green 1" ), GREEN },
|
||||
{ 72, 72, 0, DARKCYAN, wxT( "Cyan 1" ), CYAN },
|
||||
{ 0, 0, 72, DARKRED, wxT( "Red 1" ), RED },
|
||||
{ 72, 0, 72, DARKMAGENTA, wxT( "Magenta 1" ), MAGENTA },
|
||||
{ 0, 72, 72, DARKBROWN, wxT( "Brown 1" ), BROWN },
|
||||
{ 132, 0, 0, BLUE, wxT( "Blue 2" ), LIGHTBLUE },
|
||||
{ 0, 132, 0, GREEN, wxT( "Green 2" ), LIGHTGREEN },
|
||||
{ 132, 132, 0, CYAN, wxT( "Cyan 2" ), LIGHTCYAN },
|
||||
{ 0, 0, 132, RED, wxT( "Red 2" ), LIGHTRED },
|
||||
{ 132, 0, 132, MAGENTA, wxT( "Magenta 2" ), LIGHTMAGENTA },
|
||||
{ 0, 132, 132, BROWN, wxT( "Brown 2" ), YELLOW },
|
||||
{ 194, 0, 0, LIGHTBLUE, wxT( "Blue 3" ), PUREBLUE, },
|
||||
{ 0, 194, 0, LIGHTGREEN, wxT( "Green 3" ), PUREGREEN },
|
||||
{ 194, 194, 0, LIGHTCYAN, wxT( "Cyan 3" ), PURECYAN },
|
||||
{ 0, 0, 194, LIGHTRED, wxT( "Red 3" ), PURERED },
|
||||
{ 194, 0, 194, LIGHTMAGENTA, wxT( "Magenta 3" ), PUREMAGENTA },
|
||||
{ 0, 194, 194, YELLOW, wxT( "Yellow 3" ), PUREYELLOW },
|
||||
{ 255, 0, 0, PUREBLUE, wxT( "Blue 4" ), WHITE },
|
||||
{ 0, 255, 0, PUREGREEN, wxT( "Green 4" ), WHITE },
|
||||
{ 255, 255, 0, PURECYAN, wxT( "Cyan 4" ), WHITE },
|
||||
{ 0, 0, 255, PURERED, wxT( "Red 4" ), WHITE },
|
||||
{ 255, 0, 255, PUREMAGENTA, wxT( "Magenta 4" ), WHITE },
|
||||
{ 0, 255, 255, PUREYELLOW, wxT( "Yellow 4" ), WHITE },
|
||||
{ 0, 0, 0, BLACK, _HKI( "Black" ), DARKDARKGRAY },
|
||||
{ 72, 72, 72, DARKDARKGRAY, _HKI( "Gray 1" ), DARKGRAY },
|
||||
{ 132, 132, 132, DARKGRAY, _HKI( "Gray 2" ), LIGHTGRAY },
|
||||
{ 194, 194, 194, LIGHTGRAY, _HKI( "Gray 3" ), WHITE },
|
||||
{ 255, 255, 255, WHITE, _HKI( "White" ), WHITE },
|
||||
{ 194, 255, 255, LIGHTYELLOW, _HKI( "L.Yellow" ), WHITE },
|
||||
{ 72, 0, 0, DARKBLUE, _HKI( "Blue 1" ), BLUE },
|
||||
{ 0, 72, 0, DARKGREEN, _HKI( "Green 1" ), GREEN },
|
||||
{ 72, 72, 0, DARKCYAN, _HKI( "Cyan 1" ), CYAN },
|
||||
{ 0, 0, 72, DARKRED, _HKI( "Red 1" ), RED },
|
||||
{ 72, 0, 72, DARKMAGENTA, _HKI( "Magenta 1" ), MAGENTA },
|
||||
{ 0, 72, 72, DARKBROWN, _HKI( "Brown 1" ), BROWN },
|
||||
{ 132, 0, 0, BLUE, _HKI( "Blue 2" ), LIGHTBLUE },
|
||||
{ 0, 132, 0, GREEN, _HKI( "Green 2" ), LIGHTGREEN },
|
||||
{ 132, 132, 0, CYAN, _HKI( "Cyan 2" ), LIGHTCYAN },
|
||||
{ 0, 0, 132, RED, _HKI( "Red 2" ), LIGHTRED },
|
||||
{ 132, 0, 132, MAGENTA, _HKI( "Magenta 2" ), LIGHTMAGENTA },
|
||||
{ 0, 132, 132, BROWN, _HKI( "Brown 2" ), YELLOW },
|
||||
{ 194, 0, 0, LIGHTBLUE, _HKI( "Blue 3" ), PUREBLUE, },
|
||||
{ 0, 194, 0, LIGHTGREEN, _HKI( "Green 3" ), PUREGREEN },
|
||||
{ 194, 194, 0, LIGHTCYAN, _HKI( "Cyan 3" ), PURECYAN },
|
||||
{ 0, 0, 194, LIGHTRED, _HKI( "Red 3" ), PURERED },
|
||||
{ 194, 0, 194, LIGHTMAGENTA, _HKI( "Magenta 3" ), PUREMAGENTA },
|
||||
{ 0, 194, 194, YELLOW, _HKI( "Yellow 3" ), PUREYELLOW },
|
||||
{ 255, 0, 0, PUREBLUE, _HKI( "Blue 4" ), WHITE },
|
||||
{ 0, 255, 0, PUREGREEN, _HKI( "Green 4" ), WHITE },
|
||||
{ 255, 255, 0, PURECYAN, _HKI( "Cyan 4" ), WHITE },
|
||||
{ 0, 0, 255, PURERED, _HKI( "Red 4" ), WHITE },
|
||||
{ 255, 0, 255, PUREMAGENTA, _HKI( "Magenta 4" ), WHITE },
|
||||
{ 0, 255, 255, PUREYELLOW, _HKI( "Yellow 4" ), WHITE },
|
||||
};
|
||||
|
||||
|
||||
@@ -72,7 +74,7 @@ EDA_COLOR_T ColorByName( const wxString& aName )
|
||||
// look for a match in the palette itself
|
||||
for( EDA_COLOR_T trying = BLACK; trying < NBCOLORS; trying = NextColor(trying) )
|
||||
{
|
||||
if( 0 == aName.CmpNoCase( g_ColorRefs[trying].m_Name ) )
|
||||
if( 0 == aName.CmpNoCase( ColorGetName( trying ) ) )
|
||||
return trying;
|
||||
}
|
||||
|
||||
|
||||
+30
-18
@@ -44,6 +44,8 @@
|
||||
#include <wx/utils.h>
|
||||
#include <wx/stdpaths.h>
|
||||
|
||||
#include <pgm_base.h>
|
||||
|
||||
|
||||
/**
|
||||
* Global variables definitions.
|
||||
@@ -58,30 +60,40 @@ EDA_UNITS_T g_UserUnit;
|
||||
EDA_COLOR_T g_GhostColor;
|
||||
|
||||
|
||||
/**
|
||||
* Function to use local notation or C standard notation for floating point numbers
|
||||
* some countries use 1,5 and others (and C) 1.5
|
||||
* so we switch from local to C and C to local when reading or writing files
|
||||
* And other problem is a bug when cross compiling under linux:
|
||||
* a printf print 1,5 and the read functions expects 1.5
|
||||
* (depending on version print = 1.5 and read = 1,5
|
||||
* Very annoying and we detect this and use a stupid but necessary workaround
|
||||
*/
|
||||
bool g_DisableFloatingPointLocalNotation = false;
|
||||
/* Class LOCALE_IO
|
||||
* is a class that can be instantiated within a scope in which you are expecting
|
||||
* exceptions to be thrown. Its constructor sets a "C" locale, to read/print files
|
||||
* with fp numbers.
|
||||
* Its destructor insures that the default locale is restored if an exception
|
||||
* is thrown, or not.
|
||||
*/
|
||||
|
||||
int LOCALE_IO::m_c_count = 0;
|
||||
|
||||
int LOCALE_IO::C_count;
|
||||
|
||||
|
||||
void SetLocaleTo_C_standard()
|
||||
LOCALE_IO::LOCALE_IO()
|
||||
{
|
||||
setlocale( LC_NUMERIC, "C" ); // Switch the locale to standard C
|
||||
wxASSERT_MSG( m_c_count >= 0, wxT( "LOCALE_IO::m_c_count mismanaged." ) );
|
||||
|
||||
// use thread safe, atomic operation
|
||||
if( __sync_fetch_and_add( &m_c_count, 1 ) == 0 )
|
||||
{
|
||||
// Store the user locale name, to restore this locale later, in dtor
|
||||
m_user_locale = setlocale( LC_ALL, 0 );
|
||||
// Switch the locale to C locale, to read/write files with fp numbers
|
||||
setlocale( LC_ALL, "C" );
|
||||
}
|
||||
}
|
||||
|
||||
void SetLocaleTo_Default()
|
||||
LOCALE_IO::~LOCALE_IO()
|
||||
{
|
||||
if( !g_DisableFloatingPointLocalNotation )
|
||||
setlocale( LC_NUMERIC, "" ); // revert to the current locale
|
||||
// use thread safe, atomic operation
|
||||
if( __sync_sub_and_fetch( &m_c_count, 1 ) == 0 )
|
||||
{
|
||||
// revert to the user locale
|
||||
setlocale( LC_ALL, m_user_locale.c_str() );
|
||||
}
|
||||
|
||||
wxASSERT_MSG( m_c_count >= 0, wxT( "LOCALE_IO::m_c_count mismanaged." ) );
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -147,8 +147,12 @@ bool GERBER_PLOTTER::StartPlot()
|
||||
else
|
||||
fputs( "%MOMM*%\n", outputFile );
|
||||
|
||||
/* Specify linear interpol (G01) */
|
||||
// Be sure the usual dark polarity is selected:
|
||||
fputs( "%LPD*%\n", outputFile );
|
||||
|
||||
// Specify linear interpol (G01):
|
||||
fputs( "G01*\n", outputFile );
|
||||
|
||||
fputs( "G04 APERTURE LIST*\n", outputFile );
|
||||
/* Select the default aperture */
|
||||
SetCurrentLineWidth( -1 );
|
||||
|
||||
@@ -223,8 +223,6 @@ void HPGL_PLOTTER::SetViewport( const wxPoint& aOffset, double aIusPerDecimil,
|
||||
paperSize.y *= 10.0 * aIusPerDecimil;
|
||||
SetDefaultLineWidth( 0 ); // HPGL has pen sizes instead
|
||||
m_plotMirror = aMirror;
|
||||
penOverlap = 0;
|
||||
penDiameter = 0;
|
||||
}
|
||||
|
||||
|
||||
@@ -685,7 +683,12 @@ void HPGL_PLOTTER::FlashPadTrapez( const wxPoint& aPadPos, const wxPoint* aCorne
|
||||
}
|
||||
|
||||
// Calculation of dd = number of segments was traced to fill.
|
||||
jj = jj / (int) ( penDiameter - penOverlap );
|
||||
int delta = (int) ( penDiameter - penOverlap );
|
||||
|
||||
if( delta )
|
||||
jj = jj / delta;
|
||||
else
|
||||
jj = 0;
|
||||
|
||||
// Trace the outline.
|
||||
for( ; jj > 0; jj-- )
|
||||
|
||||
+89
-2
@@ -1,9 +1,8 @@
|
||||
|
||||
/*
|
||||
* This program source code file is part of KiCad, a free EDA CAD application.
|
||||
*
|
||||
* Copyright (C) 2012 SoftPLC Corporation, Dick Hollenbeck <dick@softplc.com>
|
||||
* Copyright (C) 2012 KiCad Developers, see CHANGELOG.TXT for contributors.
|
||||
* Copyright (C) 2012-2016 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
|
||||
@@ -70,6 +69,9 @@ DIALOG_SHIM::DIALOG_SHIM( wxWindow* aParent, wxWindowID id, const wxString& titl
|
||||
if( h )
|
||||
SetKiway( this, &h->Kiway() );
|
||||
|
||||
Bind( wxEVT_CLOSE_WINDOW, &DIALOG_SHIM::OnCloseWindow, this );
|
||||
Bind( wxEVT_BUTTON, &DIALOG_SHIM::OnButton, this );
|
||||
|
||||
#ifdef __WINDOWS__
|
||||
// On Windows, the app top windows can be brought to the foreground
|
||||
// (at least temporary) in certain circumstances,
|
||||
@@ -97,6 +99,33 @@ DIALOG_SHIM::~DIALOG_SHIM()
|
||||
delete m_qmodal_parent_disabler; // usually NULL by now
|
||||
}
|
||||
|
||||
void DIALOG_SHIM::FinishDialogSettings()
|
||||
{
|
||||
// must be called from the constructor of derived classes,
|
||||
// when all widgets are initialized, and therefore their size fixed
|
||||
|
||||
// SetSizeHints fixes the minimal size of sizers in the dialog
|
||||
// (SetSizeHints calls Fit(), so no need to call it)
|
||||
GetSizer()->SetSizeHints( this );
|
||||
|
||||
// the default position, when calling the first time the dlg
|
||||
Center();
|
||||
}
|
||||
|
||||
void DIALOG_SHIM::FixOSXCancelButtonIssue()
|
||||
{
|
||||
#ifdef __WXMAC__
|
||||
// A ugly hack to fix an issue on OSX: ctrl+c closes the dialog instead of
|
||||
// copying a text if a button with wxID_CANCEL is used in a wxStdDialogButtonSizer
|
||||
// created by wxFormBuilder: the label is &Cancel, and this accelerator key has priority
|
||||
// to copy text standard accelerator, and the dlg is closed when trying to copy text
|
||||
wxButton* button = dynamic_cast< wxButton* > ( wxWindow::FindWindowById( wxID_CANCEL, this ) );
|
||||
|
||||
if( button )
|
||||
button->SetLabel( _( "Cancel" ) );
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
// our hashtable is an implementation secret, don't need or want it in a header file
|
||||
#include <hashtables.h>
|
||||
@@ -505,6 +534,11 @@ int DIALOG_SHIM::ShowQuasiModal()
|
||||
|
||||
void DIALOG_SHIM::EndQuasiModal( int retCode )
|
||||
{
|
||||
// Hook up validator and transfer data from controls handling so quasi-modal dialogs
|
||||
// handle validation in the same way as other dialogs.
|
||||
if( ( retCode == wxID_OK ) && ( !Validate() || !TransferDataFromWindow() ) )
|
||||
return;
|
||||
|
||||
SetReturnCode( retCode );
|
||||
|
||||
if( !IsQuasiModal() )
|
||||
@@ -530,3 +564,56 @@ void DIALOG_SHIM::EndQuasiModal( int retCode )
|
||||
|
||||
Show( false );
|
||||
}
|
||||
|
||||
|
||||
void DIALOG_SHIM::OnCloseWindow( wxCloseEvent& aEvent )
|
||||
{
|
||||
if( IsQuasiModal() )
|
||||
{
|
||||
EndQuasiModal( wxID_CANCEL );
|
||||
return;
|
||||
}
|
||||
|
||||
// This is mandatory to allow wxDialogBase::OnCloseWindow() to be called.
|
||||
aEvent.Skip();
|
||||
}
|
||||
|
||||
|
||||
void DIALOG_SHIM::OnButton( wxCommandEvent& aEvent )
|
||||
{
|
||||
if( IsQuasiModal() )
|
||||
{
|
||||
const int id = aEvent.GetId();
|
||||
|
||||
if( id == GetAffirmativeId() )
|
||||
{
|
||||
EndQuasiModal( id );
|
||||
}
|
||||
else if( id == wxID_APPLY )
|
||||
{
|
||||
// Dialogs that provide Apply buttons should make sure data is valid before
|
||||
// allowing a transfer, as there is no other way to indicate failure
|
||||
// (i.e. the dialog can't refuse to close as it might with OK, because it
|
||||
// isn't closing anyway)
|
||||
if( Validate() )
|
||||
{
|
||||
bool success = TransferDataFromWindow();
|
||||
(void) success;
|
||||
}
|
||||
}
|
||||
else if( id == GetEscapeId() ||
|
||||
(id == wxID_CANCEL && GetEscapeId() == wxID_ANY) )
|
||||
{
|
||||
EndQuasiModal( wxID_CANCEL );
|
||||
}
|
||||
else // not a standard button
|
||||
{
|
||||
aEvent.Skip();
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
// This is mandatory to allow wxDialogBase::OnButton() to be called.
|
||||
aEvent.Skip();
|
||||
}
|
||||
|
||||
@@ -62,7 +62,7 @@ DIALOG_ENV_VAR_CONFIG_BASE::DIALOG_ENV_VAR_CONFIG_BASE( wxWindow* parent, wxWind
|
||||
brightSizer->Add( m_buttonAdd, 0, wxALL|wxEXPAND, 5 );
|
||||
|
||||
m_buttonDelete = new wxButton( this, wxID_ANY, _("Delete"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_buttonDelete->SetToolTip( _("Remove the selectect entry from the table.") );
|
||||
m_buttonDelete->SetToolTip( _("Remove the selected entry from the table.") );
|
||||
|
||||
brightSizer->Add( m_buttonDelete, 0, wxBOTTOM|wxLEFT|wxRIGHT|wxEXPAND, 5 );
|
||||
|
||||
|
||||
@@ -407,7 +407,7 @@
|
||||
<property name="style"></property>
|
||||
<property name="subclass"></property>
|
||||
<property name="toolbar_pane">0</property>
|
||||
<property name="tooltip">Remove the selectect entry from the table.</property>
|
||||
<property name="tooltip">Remove the selected entry from the table.</property>
|
||||
<property name="validator_data_type"></property>
|
||||
<property name="validator_style">wxFILTER_NONE</property>
|
||||
<property name="validator_type">wxDefaultValidator</property>
|
||||
|
||||
@@ -52,26 +52,29 @@
|
||||
|
||||
|
||||
// List of page formats.
|
||||
// should be statically initialized, because we need both
|
||||
// the translated and the not translated version.
|
||||
// they are prefixed by "_HKI" (already in use for hotkeys) instead of "_",
|
||||
// because we need both the translated and the not translated version.
|
||||
// when displayed in dialog we should explicitely call wxGetTranslation()
|
||||
// to show the translated version.
|
||||
// See hotkeys_basic.h for more info
|
||||
#define _HKI( x ) wxT( x )
|
||||
static const wxString pageFmts[] =
|
||||
{
|
||||
_("A4 210x297mm"),
|
||||
_("A3 297x420mm"),
|
||||
_("A2 420x594mm"),
|
||||
_("A1 594x841mm"),
|
||||
_("A0 841x1189mm"),
|
||||
_("A 8.5x11in"),
|
||||
_("B 11x17in"),
|
||||
_("C 17x22in"),
|
||||
_("D 22x34in"),
|
||||
_("E 34x44in"),
|
||||
_("USLetter 8.5x11in"), // USLetter without space is correct
|
||||
_("USLegal 8.5x14in"), // USLegal without space is correct
|
||||
_("USLedger 11x17in"), // USLedger without space is correct
|
||||
_("User (Custom)"),
|
||||
_HKI("A4 210x297mm"),
|
||||
_HKI("A3 297x420mm"),
|
||||
_HKI("A2 420x594mm"),
|
||||
_HKI("A1 594x841mm"),
|
||||
_HKI("A0 841x1189mm"),
|
||||
_HKI("A 8.5x11in"),
|
||||
_HKI("B 11x17in"),
|
||||
_HKI("C 17x22in"),
|
||||
_HKI("D 22x34in"),
|
||||
_HKI("E 34x44in"),
|
||||
_HKI("USLetter 8.5x11in"), // USLetter without space is correct
|
||||
_HKI("USLegal 8.5x14in"), // USLegal without space is correct
|
||||
_HKI("USLedger 11x17in"), // USLedger without space is correct
|
||||
_HKI("User (Custom)"), // size defined by user. The string must contain "Custom"
|
||||
// to be reconized in code
|
||||
};
|
||||
|
||||
void EDA_DRAW_FRAME::Process_PageSettings( wxCommandEvent& event )
|
||||
|
||||
@@ -45,6 +45,13 @@ WX_HTML_REPORT_PANEL::~WX_HTML_REPORT_PANEL()
|
||||
}
|
||||
|
||||
|
||||
void WX_HTML_REPORT_PANEL::MsgPanelSetMinSize( const wxSize& aMinSize )
|
||||
{
|
||||
m_htmlView->SetMinSize( aMinSize );
|
||||
GetSizer()->SetSizeHints( this );
|
||||
}
|
||||
|
||||
|
||||
REPORTER& WX_HTML_REPORT_PANEL::Reporter()
|
||||
{
|
||||
return m_reporter;
|
||||
|
||||
@@ -46,6 +46,9 @@ public:
|
||||
const wxSize& size = wxSize( 500,300 ), long style = wxTAB_TRAVERSAL );
|
||||
~WX_HTML_REPORT_PANEL();
|
||||
|
||||
///> Set the min size of the area which displays html messages:
|
||||
void MsgPanelSetMinSize( const wxSize& aMinSize );
|
||||
|
||||
///> returns the reporter object that reports to this panel
|
||||
REPORTER& Reporter();
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Copyright (C) 2004-2015 Jean-Pierre Charras, jean-pierre.charras@gipsa-lab.inpg.fr
|
||||
* Copyright (C) 2008-2015 Wayne Stambaugh <stambaughw@verizon.net>
|
||||
* Copyright (C) 2004-2015 KiCad Developers, see change_log.txt for contributors.
|
||||
* Copyright (C) 2004-2016 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
|
||||
@@ -1076,6 +1076,7 @@ void EDA_DRAW_FRAME::UseGalCanvas( bool aEnable )
|
||||
|
||||
// Transfer EDA_DRAW_PANEL settings
|
||||
GetGalCanvas()->GetViewControls()->EnableCursorWarping( !m_canvas->GetEnableZoomNoCenter() );
|
||||
GetGalCanvas()->GetViewControls()->EnableMousewheelPan( m_canvas->GetEnableMousewheelPan() );
|
||||
GetToolManager()->RunAction( "pcbnew.Control.switchCursor" );
|
||||
}
|
||||
else if( m_galCanvasActive )
|
||||
|
||||
+90
-28
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Copyright (C) 2009 Jean-Pierre Charras, jean-pierre.charras@gipsa-lab.inpg.fr
|
||||
* Copyright (C) 2007-2011 Wayne Stambaugh <stambaughw@verizon.net>
|
||||
* Copyright (C) 1992-2015 KiCad Developers, see AUTHORS.txt for contributors.
|
||||
* Copyright (C) 1992-2016 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
|
||||
@@ -48,6 +48,7 @@ static const int CURSOR_SIZE = 12; ///< Cursor size in pixels
|
||||
|
||||
// keys to store options in config:
|
||||
#define ENBL_ZOOM_NO_CENTER_KEY wxT( "ZoomNoCenter" )
|
||||
#define ENBL_MOUSEWHEEL_PAN_KEY wxT( "MousewheelPAN" )
|
||||
#define ENBL_MIDDLE_BUTT_PAN_KEY wxT( "MiddleButtonPAN" )
|
||||
#define MIDDLE_BUTT_PAN_LIMITED_KEY wxT( "MiddleBtnPANLimited" )
|
||||
#define ENBL_AUTO_PAN_KEY wxT( "AutoPAN" )
|
||||
@@ -96,16 +97,14 @@ EDA_DRAW_PANEL::EDA_DRAW_PANEL( EDA_DRAW_FRAME* parent, int id,
|
||||
{
|
||||
wxASSERT( parent );
|
||||
|
||||
#ifndef USE_OSX_MAGNIFY_EVENT
|
||||
ShowScrollbars( wxSHOW_SB_ALWAYS, wxSHOW_SB_ALWAYS );
|
||||
#else
|
||||
ShowScrollbars( wxSHOW_SB_NEVER, wxSHOW_SB_NEVER );
|
||||
#endif
|
||||
DisableKeyboardScrolling();
|
||||
|
||||
m_scrollIncrementX = std::min( size.x / 8, 10 );
|
||||
m_scrollIncrementY = std::min( size.y / 8, 10 );
|
||||
|
||||
SetLayoutDirection( wxLayout_LeftToRight );
|
||||
|
||||
SetBackgroundColour( MakeColour( parent->GetDrawBgColor() ) );
|
||||
|
||||
#if KICAD_USE_BUFFERED_DC || KICAD_USE_BUFFERED_PAINTDC
|
||||
@@ -117,12 +116,16 @@ EDA_DRAW_PANEL::EDA_DRAW_PANEL( EDA_DRAW_FRAME* parent, int id,
|
||||
m_ClipBox.SetY( 0 );
|
||||
m_canStartBlock = -1; // Command block can start if >= 0
|
||||
m_abortRequest = false;
|
||||
m_enableMousewheelPan = false;
|
||||
m_enableMiddleButtonPan = true;
|
||||
m_enableZoomNoCenter = false;
|
||||
m_panScrollbarLimits = false;
|
||||
m_enableAutoPan = true;
|
||||
m_ignoreMouseEvents = false;
|
||||
m_ignoreNextLeftButtonRelease = false;
|
||||
// Be sure a mouse release button event will be ignored when creating the canvas
|
||||
// if the mouse click was not made inside the canvas (can happen sometimes, when
|
||||
// launching an editor from a double click made in an other frame)
|
||||
m_ignoreNextLeftButtonRelease = true;
|
||||
|
||||
m_mouseCaptureCallback = NULL;
|
||||
m_endMouseCaptureCallback = NULL;
|
||||
@@ -131,6 +134,7 @@ EDA_DRAW_PANEL::EDA_DRAW_PANEL( EDA_DRAW_FRAME* parent, int id,
|
||||
|
||||
if( cfg )
|
||||
{
|
||||
cfg->Read( ENBL_MOUSEWHEEL_PAN_KEY, &m_enableMousewheelPan, false );
|
||||
cfg->Read( ENBL_MIDDLE_BUTT_PAN_KEY, &m_enableMiddleButtonPan, true );
|
||||
cfg->Read( ENBL_ZOOM_NO_CENTER_KEY, &m_enableZoomNoCenter, false );
|
||||
cfg->Read( MIDDLE_BUTT_PAN_LIMITED_KEY, &m_panScrollbarLimits, false );
|
||||
@@ -160,6 +164,7 @@ EDA_DRAW_PANEL::~EDA_DRAW_PANEL()
|
||||
|
||||
if( cfg )
|
||||
{
|
||||
cfg->Write( ENBL_MOUSEWHEEL_PAN_KEY, m_enableMousewheelPan );
|
||||
cfg->Write( ENBL_MIDDLE_BUTT_PAN_KEY, m_enableMiddleButtonPan );
|
||||
cfg->Write( ENBL_ZOOM_NO_CENTER_KEY, m_enableZoomNoCenter );
|
||||
cfg->Write( MIDDLE_BUTT_PAN_LIMITED_KEY, m_panScrollbarLimits );
|
||||
@@ -432,7 +437,7 @@ void EDA_DRAW_PANEL::OnScroll( wxScrollWinEvent& event )
|
||||
// so we skip these events.
|
||||
// Note they are here just in case, because they are not actually used
|
||||
// in Kicad
|
||||
#if wxCHECK_VERSION( 3, 1, 0 ) || !wxCHECK_VERSION( 2, 9, 5 ) || !defined (__WINDOWS__)
|
||||
#if wxCHECK_VERSION( 3, 1, 0 ) || !wxCHECK_VERSION( 2, 9, 5 ) || ( !defined (__WINDOWS__) && !defined (__WXMAC__) )
|
||||
int maxX = unitsX - csizeX;
|
||||
int maxY = unitsY - csizeY;
|
||||
|
||||
@@ -643,6 +648,15 @@ void EDA_DRAW_PANEL::ReDraw( wxDC* DC, bool erasebg )
|
||||
}
|
||||
|
||||
|
||||
void EDA_DRAW_PANEL::SetEnableMousewheelPan( bool aEnable )
|
||||
{
|
||||
m_enableMousewheelPan = aEnable;
|
||||
|
||||
if( GetParent()->IsGalCanvasActive() )
|
||||
GetParent()->GetGalCanvas()->GetViewControls()->EnableMousewheelPan( aEnable );
|
||||
}
|
||||
|
||||
|
||||
void EDA_DRAW_PANEL::SetEnableZoomNoCenter( bool aEnable )
|
||||
{
|
||||
m_enableZoomNoCenter = aEnable;
|
||||
@@ -731,20 +745,54 @@ void EDA_DRAW_PANEL::DrawGrid( wxDC* aDC )
|
||||
GRSetColorPen( aDC, GetParent()->GetGridColor() );
|
||||
#else
|
||||
// On mac (Cocoa), a point isn't a pixel and being of size 1 don't survive to antialiasing
|
||||
GRSetColorPen( aDC, GetParent()->GetGridColor(), aDC->DeviceToLogicalXRel(2) );
|
||||
GRSetColorPen( aDC, GetParent()->GetGridColor(), aDC->DeviceToLogicalXRel( 2 ) );
|
||||
#endif
|
||||
|
||||
int xpos;
|
||||
double right = ( double ) m_ClipBox.GetRight();
|
||||
double bottom = ( double ) m_ClipBox.GetBottom();
|
||||
|
||||
for( double x = (double) org.x; x <= right; x += gridSize.x )
|
||||
#if defined( __WXMAC__ ) && defined( USE_WX_GRAPHICS_CONTEXT )
|
||||
wxGCDC *gcdc = wxDynamicCast( aDC, wxGCDC );
|
||||
if( gcdc )
|
||||
{
|
||||
xpos = KiROUND( x );
|
||||
wxGraphicsContext *gc = gcdc->GetGraphicsContext();
|
||||
|
||||
for( double y = (double) org.y; y <= bottom; y += gridSize.y )
|
||||
// Grid point size
|
||||
const int gsz = 1;
|
||||
const double w = aDC->DeviceToLogicalXRel( gsz );
|
||||
const double h = aDC->DeviceToLogicalYRel( gsz );
|
||||
|
||||
// Use our own pen
|
||||
wxPen pen( MakeColour( GetParent()->GetGridColor() ), h );
|
||||
pen.SetCap( wxCAP_BUTT );
|
||||
gc->SetPen( pen );
|
||||
|
||||
// draw grid
|
||||
wxGraphicsPath path = gc->CreatePath();
|
||||
for( double x = (double) org.x - w/2.0; x <= right - w/2.0; x += gridSize.x )
|
||||
{
|
||||
aDC->DrawPoint( xpos, KiROUND( y ) );
|
||||
for( double y = (double) org.y; y <= bottom; y += gridSize.y )
|
||||
{
|
||||
path.MoveToPoint( x, y );
|
||||
path.AddLineToPoint( x+w, y );
|
||||
}
|
||||
}
|
||||
gc->StrokePath( path );
|
||||
}
|
||||
else
|
||||
#endif
|
||||
{
|
||||
GRSetColorPen( aDC, GetParent()->GetGridColor() );
|
||||
|
||||
for( double x = (double) org.x; x <= right; x += gridSize.x )
|
||||
{
|
||||
xpos = KiROUND( x );
|
||||
|
||||
for( double y = (double) org.y; y <= bottom; y += gridSize.y )
|
||||
{
|
||||
aDC->DrawPoint( xpos, KiROUND( y ) );
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -845,6 +893,17 @@ bool EDA_DRAW_PANEL::OnRightClick( wxMouseEvent& event )
|
||||
pos = event.GetPosition();
|
||||
m_ignoreMouseEvents = true;
|
||||
PopupMenu( &MasterMenu, pos );
|
||||
// here, we are waiting for popup menu closing.
|
||||
// Among different ways, it can be closed by clicking on the left mouse button.
|
||||
// The expected behavior is to move the mouse cursor to its initial
|
||||
// location, where the right click was made.
|
||||
// However there is a case where the move cursor does not work as expected:
|
||||
// when the user left clicks on the caption frame: the entire window is moved.
|
||||
// Calling wxSafeYield avoid this behavior because it allows the left click
|
||||
// to be proceeded before moving the mouse
|
||||
wxSafeYield();
|
||||
|
||||
// Move the mouse cursor to its initial position:
|
||||
MoveCursorToCrossHair();
|
||||
m_ignoreMouseEvents = false;
|
||||
|
||||
@@ -926,17 +985,24 @@ void EDA_DRAW_PANEL::OnMouseWheel( wxMouseEvent& event )
|
||||
offCenterReq = offCenterReq || m_enableZoomNoCenter;
|
||||
|
||||
int axis = event.GetWheelAxis();
|
||||
int wheelRotation = event.GetWheelRotation();
|
||||
|
||||
// This is a zoom in or out command
|
||||
if( event.GetWheelRotation() > 0 )
|
||||
if( m_enableMousewheelPan )
|
||||
{
|
||||
wxPoint newStart = GetViewStart();
|
||||
if( axis == wxMOUSE_WHEEL_HORIZONTAL )
|
||||
newStart.x += wheelRotation;
|
||||
else
|
||||
newStart.y -= wheelRotation;
|
||||
|
||||
wxPoint center = GetScreenCenterLogicalPosition();
|
||||
GetParent()->SetScrollCenterPosition( center );
|
||||
Scroll( newStart );
|
||||
}
|
||||
else if( wheelRotation > 0 )
|
||||
{
|
||||
if( event.ShiftDown() && !event.ControlDown() )
|
||||
{
|
||||
if( axis == 0 )
|
||||
cmd.SetId( ID_PAN_UP );
|
||||
else
|
||||
cmd.SetId( ID_PAN_RIGHT );
|
||||
}
|
||||
cmd.SetId( ID_PAN_UP );
|
||||
else if( event.ControlDown() && !event.ShiftDown() )
|
||||
cmd.SetId( ID_PAN_LEFT );
|
||||
else if( offCenterReq )
|
||||
@@ -944,15 +1010,10 @@ void EDA_DRAW_PANEL::OnMouseWheel( wxMouseEvent& event )
|
||||
else
|
||||
cmd.SetId( ID_POPUP_ZOOM_IN );
|
||||
}
|
||||
else if( event.GetWheelRotation() < 0 )
|
||||
else if( wheelRotation < 0 )
|
||||
{
|
||||
if( event.ShiftDown() && !event.ControlDown() )
|
||||
{
|
||||
if( axis == 0 )
|
||||
cmd.SetId( ID_PAN_DOWN );
|
||||
else
|
||||
cmd.SetId( ID_PAN_LEFT );
|
||||
}
|
||||
cmd.SetId( ID_PAN_DOWN );
|
||||
else if( event.ControlDown() && !event.ShiftDown() )
|
||||
cmd.SetId( ID_PAN_RIGHT );
|
||||
else if( offCenterReq )
|
||||
@@ -961,7 +1022,8 @@ void EDA_DRAW_PANEL::OnMouseWheel( wxMouseEvent& event )
|
||||
cmd.SetId( ID_POPUP_ZOOM_OUT );
|
||||
}
|
||||
|
||||
GetEventHandler()->ProcessEvent( cmd );
|
||||
if( cmd.GetId() )
|
||||
GetEventHandler()->ProcessEvent( cmd );
|
||||
event.Skip();
|
||||
}
|
||||
|
||||
|
||||
@@ -62,9 +62,17 @@ EDA_DRAW_PANEL_GAL::EDA_DRAW_PANEL_GAL( wxWindow* aParentWindow, wxWindowID aWin
|
||||
m_eventDispatcher = NULL;
|
||||
m_lostFocus = false;
|
||||
|
||||
SetLayoutDirection( wxLayout_LeftToRight );
|
||||
|
||||
SwitchBackend( aGalType );
|
||||
SetBackgroundStyle( wxBG_STYLE_CUSTOM );
|
||||
|
||||
// Scrollbars broken in GAL on OSX
|
||||
#ifdef __WXMAC__
|
||||
ShowScrollbars( wxSHOW_SB_NEVER, wxSHOW_SB_NEVER );
|
||||
#else
|
||||
ShowScrollbars( wxSHOW_SB_ALWAYS, wxSHOW_SB_ALWAYS );
|
||||
#endif
|
||||
EnableScrolling( false, false ); // otherwise Zoom Auto disables GAL canvas
|
||||
|
||||
m_painter = new KIGFX::PCB_PAINTER( m_gal );
|
||||
@@ -142,11 +150,18 @@ void EDA_DRAW_PANEL_GAL::onPaint( wxPaintEvent& WXUNUSED( aEvent ) )
|
||||
|
||||
m_drawing = true;
|
||||
|
||||
// Scrollbars broken in GAL on OSX
|
||||
#ifndef __WXMAC__
|
||||
m_viewControls->UpdateScrollbars();
|
||||
#endif
|
||||
|
||||
m_view->UpdateItems();
|
||||
m_gal->BeginDrawing();
|
||||
m_gal->ClearScreen( m_painter->GetSettings()->GetBackgroundColor() );
|
||||
|
||||
KIGFX::COLOR4D gridColor = static_cast<KIGFX::PCB_RENDER_SETTINGS*> (m_painter->GetSettings())->GetLayerColor( ITEM_GAL_LAYER ( GRID_VISIBLE ) );
|
||||
m_gal->SetGridColor ( gridColor );
|
||||
|
||||
if( m_view->IsDirty() )
|
||||
{
|
||||
m_view->ClearTargets();
|
||||
@@ -179,20 +194,27 @@ void EDA_DRAW_PANEL_GAL::Refresh( bool aEraseBackground, const wxRect* aRect )
|
||||
if( m_pendingRefresh )
|
||||
return;
|
||||
|
||||
m_pendingRefresh = true;
|
||||
|
||||
#ifdef __WXMAC__
|
||||
// Timers on OS X may have a high latency (seen up to 500ms and more) which
|
||||
// makes repaints jerky. No negative impact seen without throttling, so just
|
||||
// do an unconditional refresh for OS X.
|
||||
ForceRefresh();
|
||||
#else
|
||||
wxLongLong t = wxGetLocalTimeMillis();
|
||||
wxLongLong delta = t - m_lastRefresh;
|
||||
|
||||
if( delta >= MinRefreshPeriod )
|
||||
{
|
||||
ForceRefresh();
|
||||
m_pendingRefresh = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
// One shot timer
|
||||
m_refreshTimer.Start( ( MinRefreshPeriod - delta ).ToLong(), true );
|
||||
m_pendingRefresh = true;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
|
||||
+23
-17
@@ -39,24 +39,29 @@
|
||||
#include <class_drawpanel.h>
|
||||
#include <class_base_screen.h>
|
||||
|
||||
#include <gal/stroke_font.h>
|
||||
|
||||
|
||||
#include <newstroke_font.h>
|
||||
#include <plot_common.h>
|
||||
|
||||
/* factor used to calculate actual size of shapes from hershey fonts
|
||||
* (could be adjusted depending on the font name)
|
||||
* Its value is choosen in order to have letters like M, P .. vertical size
|
||||
* equal to the vertical char size parameter
|
||||
* Of course some shapes can be bigger or smaller than the vertical char size
|
||||
* parameter
|
||||
*/
|
||||
#define HERSHEY_SCALE_FACTOR 1 / 21.0
|
||||
double s_HersheyScaleFactor = HERSHEY_SCALE_FACTOR;
|
||||
using namespace KIGFX;
|
||||
|
||||
|
||||
// A ugly hack to avoid UTF8::uni_iter method not found at link stage
|
||||
// in gerbview and pl_editor.
|
||||
// Hoping I (JPC) can remove that soon.
|
||||
void dummy()
|
||||
{
|
||||
UTF8 text = "x";
|
||||
for( UTF8::uni_iter it = text.ubegin(), end = text.uend(); it < end; ++it )
|
||||
;
|
||||
}
|
||||
|
||||
|
||||
int OverbarPositionY( int size_v )
|
||||
{
|
||||
return KiROUND( size_v * 1.22 );
|
||||
return KiROUND( size_v * STROKE_FONT::OVERBAR_HEIGHT );
|
||||
}
|
||||
|
||||
|
||||
@@ -184,13 +189,13 @@ int GraphicTextWidth( const wxString& aText, int aXSize, bool aItalic, bool aWid
|
||||
// Get metrics
|
||||
int xsta = *shape_ptr++ - 'R';
|
||||
int xsto = *shape_ptr++ - 'R';
|
||||
tally += KiROUND( aXSize * (xsto - xsta) * s_HersheyScaleFactor );
|
||||
tally += KiROUND( aXSize * (xsto - xsta) * STROKE_FONT::STROKE_FONT_SCALE );
|
||||
}
|
||||
|
||||
// For italic correction, add 1/8 size
|
||||
if( aItalic )
|
||||
{
|
||||
tally += KiROUND( aXSize * 0.125 );
|
||||
tally += KiROUND( aXSize * STROKE_FONT::ITALIC_TILT );
|
||||
}
|
||||
|
||||
return tally;
|
||||
@@ -415,7 +420,7 @@ void DrawGraphicText( EDA_RECT* aClipBox,
|
||||
|
||||
if( aItalic )
|
||||
{
|
||||
overbar_italic_comp = OverbarPositionY( size_v ) / 8;
|
||||
overbar_italic_comp = KiROUND( OverbarPositionY( size_v ) * STROKE_FONT::ITALIC_TILT );
|
||||
|
||||
if( italic_reverse )
|
||||
{
|
||||
@@ -519,13 +524,14 @@ void DrawGraphicText( EDA_RECT* aClipBox,
|
||||
{
|
||||
wxPoint currpoint;
|
||||
hc1 -= xsta; hc2 -= 10; // Align the midpoint
|
||||
hc1 = KiROUND( hc1 * size_h * s_HersheyScaleFactor );
|
||||
hc2 = KiROUND( hc2 * size_v * s_HersheyScaleFactor );
|
||||
hc1 = KiROUND( hc1 * size_h * STROKE_FONT::STROKE_FONT_SCALE );
|
||||
hc2 = KiROUND( hc2 * size_v * STROKE_FONT::STROKE_FONT_SCALE );
|
||||
|
||||
// To simulate an italic font,
|
||||
// add a x offset depending on the y offset
|
||||
if( aItalic )
|
||||
hc1 -= KiROUND( italic_reverse ? -hc2 / 8.0 : hc2 / 8.0 );
|
||||
hc1 -= KiROUND( italic_reverse ? -hc2 * STROKE_FONT::ITALIC_TILT
|
||||
: hc2 * STROKE_FONT::ITALIC_TILT );
|
||||
|
||||
currpoint.x = hc1 + current_char_pos.x;
|
||||
currpoint.y = hc2 + current_char_pos.y;
|
||||
@@ -541,7 +547,7 @@ void DrawGraphicText( EDA_RECT* aClipBox,
|
||||
ptr++;
|
||||
|
||||
// Apply the advance width
|
||||
current_char_pos.x += KiROUND( size_h * (xsto - xsta) * s_HersheyScaleFactor );
|
||||
current_char_pos.x += KiROUND( size_h * (xsto - xsta) * STROKE_FONT::STROKE_FONT_SCALE );
|
||||
}
|
||||
|
||||
if( overbars % 2 )
|
||||
|
||||
+18
-12
@@ -1,8 +1,8 @@
|
||||
/*
|
||||
* This program source code file is part of KiCad, a free EDA CAD application.
|
||||
*
|
||||
* Copyright (C) 2004 Jean-Pierre Charras, jean-pierre.charras@gipsa-lab.inpg.com
|
||||
* Copyright (C) 2004-2011 KiCad Developers, see change_log.txt for contributors.
|
||||
* Copyright (C) 2016 Jean-Pierre Charras, jp.charras at wanadoo.fr
|
||||
* Copyright (C) 2004-2016 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
|
||||
@@ -46,6 +46,8 @@
|
||||
#error "Cannot resolve units formatting due to no definition of EESCHEMA or PCBNEW."
|
||||
#endif
|
||||
|
||||
#include <gal/stroke_font.h>
|
||||
|
||||
#include <convert_to_biu.h>
|
||||
|
||||
EDA_TEXT::EDA_TEXT( const wxString& text )
|
||||
@@ -106,15 +108,16 @@ wxString EDA_TEXT::ShortenedShownText() const
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Function GetInterline
|
||||
* return the distance between 2 text lines
|
||||
* has meaning only for multiline texts
|
||||
/*
|
||||
* calculate the distance (pitch) between 2 text lines
|
||||
* the distance includes the interline + room for chars like j { and [
|
||||
* Is used for multiline texts, but also for single line texts, to calculate
|
||||
* the text bounding box
|
||||
*/
|
||||
int EDA_TEXT::GetInterline( int aTextThickness ) const
|
||||
{
|
||||
int thickness = aTextThickness <= 0 ? m_Thickness : aTextThickness;
|
||||
return (( m_Size.y * 14 ) / 10) + thickness;
|
||||
return KiROUND( m_Size.y * KIGFX::STROKE_FONT::INTERLINE_PITCH_RATIO ) + thickness;
|
||||
}
|
||||
|
||||
EDA_RECT EDA_TEXT::GetTextBox( int aLine, int aThickness, bool aInvertY ) const
|
||||
@@ -130,7 +133,7 @@ EDA_RECT EDA_TEXT::GetTextBox( int aLine, int aThickness, bool aInvertY ) const
|
||||
{
|
||||
wxStringSplit( text, strings, '\n' );
|
||||
|
||||
if ( strings.GetCount() ) // GetCount() == 0 for void strings
|
||||
if( strings.GetCount() ) // GetCount() == 0 for void strings
|
||||
{
|
||||
if( aLine >= 0 && (aLine < (int)strings.GetCount()) )
|
||||
text = strings.Item( aLine );
|
||||
@@ -153,11 +156,15 @@ EDA_RECT EDA_TEXT::GetTextBox( int aLine, int aThickness, bool aInvertY ) const
|
||||
else
|
||||
rect.SetOrigin( m_Pos );
|
||||
|
||||
// extra dy interval for letters like j and y and ]
|
||||
int extra_dy = dy - m_Size.y;
|
||||
rect.Move( wxPoint( 0, -extra_dy / 2 ) ); // move origin by the half extra interval
|
||||
// The bbox vertical size returned by GetInterline( aThickness )
|
||||
// includes letters like j and y and ] + interval between lines.
|
||||
// The interval below the last line is not usefull, and we can use its half value
|
||||
// as vertical margin above the text
|
||||
// the full interval is roughly m_Size.y * 0.4 - aThickness/2
|
||||
rect.Move( wxPoint( 0, aThickness/4 - KiROUND( m_Size.y * 0.2 ) ) );
|
||||
|
||||
// for multiline texts and aLine < 0, merge all rectangles
|
||||
// ( if aLine < 0, we want the full text bounding box )
|
||||
if( m_MultilineAllowed && aLine < 0 )
|
||||
{
|
||||
for( unsigned ii = 1; ii < strings.GetCount(); ii++ )
|
||||
@@ -232,7 +239,6 @@ EDA_RECT EDA_TEXT::GetTextBox( int aLine, int aThickness, bool aInvertY ) const
|
||||
}
|
||||
}
|
||||
|
||||
rect.Inflate( thickness / 2 );
|
||||
rect.Normalize(); // Make h and v sizes always >= 0
|
||||
|
||||
return rect;
|
||||
|
||||
+10
-43
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Copyright (C) 2011 Jean-Pierre Charras, <jp.charras@wanadoo.fr>
|
||||
* Copyright (C) 2013 SoftPLC Corporation, Dick Hollenbeck <dick@softplc.com>
|
||||
* Copyright (C) 1992-2013 KiCad Developers, see AUTHORS.txt for contributors.
|
||||
* Copyright (C) 1992-2016 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
|
||||
@@ -46,6 +46,7 @@
|
||||
#include <fpid.h>
|
||||
#include <class_module.h>
|
||||
#include <boost/thread.hpp>
|
||||
#include <html_messagebox.h>
|
||||
|
||||
|
||||
/*
|
||||
@@ -126,19 +127,10 @@ void FOOTPRINT_INFO::load()
|
||||
// were caused by latencies alone.
|
||||
// (If https://github.com does not mind.)
|
||||
|
||||
#define NTOLERABLE_ERRORS 4 // max errors before aborting, although threads
|
||||
// in progress will still pile on for a bit. e.g. if 9 threads
|
||||
// expect 9 greater than this.
|
||||
|
||||
void FOOTPRINT_LIST::loader_job( const wxString* aNicknameList, int aJobZ )
|
||||
{
|
||||
//DBG(printf( "%s: first:'%s' count:%d\n", __func__, (char*) TO_UTF8( *aNicknameList ), aJobZ );)
|
||||
|
||||
for( int i=0; i<aJobZ; ++i )
|
||||
{
|
||||
if( m_error_count >= NTOLERABLE_ERRORS )
|
||||
break;
|
||||
|
||||
const wxString& nickname = aNicknameList[i];
|
||||
|
||||
try
|
||||
@@ -233,16 +225,9 @@ bool FOOTPRINT_LIST::ReadFootprintFiles( FP_LIB_TABLE* aTable, const wxString* a
|
||||
// size() is small, I'll do myself.
|
||||
for( unsigned i=0; i<nicknames.size(); )
|
||||
{
|
||||
if( m_error_count >= NTOLERABLE_ERRORS )
|
||||
{
|
||||
// abort the remaining nicknames.
|
||||
retv = false;
|
||||
break;
|
||||
}
|
||||
|
||||
int jobz = JOBZ;
|
||||
|
||||
if( i + jobz >= nicknames.size() )
|
||||
if( i + jobz >= nicknames.size() ) // on the last iteration of this for(;;)
|
||||
{
|
||||
jobz = nicknames.size() - i;
|
||||
|
||||
@@ -312,29 +297,8 @@ bool FOOTPRINT_INFO::InLibrary( const wxString& aLibrary ) const
|
||||
}
|
||||
|
||||
|
||||
#include <confirm.h> // until scaffolding goes.
|
||||
|
||||
void FOOTPRINT_LIST::DisplayErrors( wxTopLevelWindow* aWindow )
|
||||
{
|
||||
#if 1
|
||||
// scaffolding until a better one is written, hopefully below.
|
||||
|
||||
DBG(printf( "m_error_count:%d\n", m_error_count );)
|
||||
|
||||
wxString msg = _( "Errors were encountered loading footprints" );
|
||||
|
||||
msg += wxT( '\n' );
|
||||
|
||||
for( unsigned i = 0; i<m_errors.size(); ++i )
|
||||
{
|
||||
msg += m_errors[i].errorText;
|
||||
msg += wxT( '\n' );
|
||||
}
|
||||
|
||||
DisplayError( aWindow, msg );
|
||||
|
||||
#else // real evolving deal:
|
||||
|
||||
// @todo: go to a more HTML !<table>! ? centric output, possibly with
|
||||
// recommendations for remedy of errors. Add numeric error codes
|
||||
// to PARSE_ERROR, and switch on them for remedies, etc. Full
|
||||
@@ -342,13 +306,16 @@ void FOOTPRINT_LIST::DisplayErrors( wxTopLevelWindow* aWindow )
|
||||
|
||||
HTML_MESSAGE_BOX dlg( aWindow, _( "Load Error" ) );
|
||||
|
||||
dlg.MessageSet( _( "Errors were encountered loading footprints" ) );
|
||||
dlg.MessageSet( _( "Errors were encountered loading footprints:" ) );
|
||||
|
||||
wxString msg = my html wizardry.
|
||||
wxString msg;
|
||||
|
||||
for( unsigned i = 0; i<m_errors.size(); ++i )
|
||||
{
|
||||
msg += wxT( "<p>" ) + m_errors[i].errorText + wxT( "</p>" );
|
||||
}
|
||||
|
||||
dlg.AddHTML_Text( msg );
|
||||
|
||||
dlg.ShowModal();
|
||||
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -257,38 +257,6 @@ void CAIRO_GAL::DrawRectangle( const VECTOR2D& aStartPoint, const VECTOR2D& aEnd
|
||||
}
|
||||
|
||||
|
||||
void CAIRO_GAL::DrawPolyline( std::deque<VECTOR2D>& aPointList )
|
||||
{
|
||||
// Iterate over the point list and draw the segments
|
||||
std::deque<VECTOR2D>::const_iterator it = aPointList.begin();
|
||||
|
||||
cairo_move_to( currentContext, it->x, it->y );
|
||||
|
||||
for( ++it; it != aPointList.end(); ++it )
|
||||
{
|
||||
cairo_line_to( currentContext, it->x, it->y );
|
||||
}
|
||||
|
||||
isElementAdded = true;
|
||||
}
|
||||
|
||||
|
||||
void CAIRO_GAL::DrawPolygon( const std::deque<VECTOR2D>& aPointList )
|
||||
{
|
||||
// Iterate over the point list and draw the polygon
|
||||
std::deque<VECTOR2D>::const_iterator it = aPointList.begin();
|
||||
|
||||
cairo_move_to( currentContext, it->x, it->y );
|
||||
|
||||
for( ++it; it != aPointList.end(); ++it )
|
||||
{
|
||||
cairo_line_to( currentContext, it->x, it->y );
|
||||
}
|
||||
|
||||
isElementAdded = true;
|
||||
}
|
||||
|
||||
|
||||
void CAIRO_GAL::DrawCurve( const VECTOR2D& aStartPoint, const VECTOR2D& aControlPointA,
|
||||
const VECTOR2D& aControlPointB, const VECTOR2D& aEndPoint )
|
||||
{
|
||||
@@ -1059,6 +1027,39 @@ void CAIRO_GAL::setCompositor()
|
||||
}
|
||||
|
||||
|
||||
void CAIRO_GAL::drawPoly( const std::deque<VECTOR2D>& aPointList )
|
||||
{
|
||||
// Iterate over the point list and draw the segments
|
||||
std::deque<VECTOR2D>::const_iterator it = aPointList.begin();
|
||||
|
||||
cairo_move_to( currentContext, it->x, it->y );
|
||||
|
||||
for( ++it; it != aPointList.end(); ++it )
|
||||
{
|
||||
cairo_line_to( currentContext, it->x, it->y );
|
||||
}
|
||||
|
||||
isElementAdded = true;
|
||||
}
|
||||
|
||||
|
||||
void CAIRO_GAL::drawPoly( const VECTOR2D aPointList[], int aListSize )
|
||||
{
|
||||
// Iterate over the point list and draw the segments
|
||||
const VECTOR2D* ptr = aPointList;
|
||||
|
||||
cairo_move_to( currentContext, ptr->x, ptr->y );
|
||||
|
||||
for( int i = 0; i < aListSize; ++i )
|
||||
{
|
||||
++ptr;
|
||||
cairo_line_to( currentContext, ptr->x, ptr->y );
|
||||
}
|
||||
|
||||
isElementAdded = true;
|
||||
}
|
||||
|
||||
|
||||
unsigned int CAIRO_GAL::getNewGroupNumber()
|
||||
{
|
||||
wxASSERT_MSG( groups.size() < std::numeric_limits<unsigned int>::max(),
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Copyright (C) 2012 Torsten Hueter, torstenhtr <at> gmx.de
|
||||
* Copyright (C) 2012 Kicad Developers, see change_log.txt for contributors.
|
||||
* Copyright (C) 2013-2015 CERN
|
||||
* Copyright (C) 2013-2016 CERN
|
||||
* @author Maciej Suminski <maciej.suminski@cern.ch>
|
||||
*
|
||||
* Graphics Abstraction Layer (GAL) for OpenGL
|
||||
@@ -358,7 +358,7 @@ void OPENGL_GAL::DrawArc( const VECTOR2D& aCenterPoint, double aRadius, double a
|
||||
SWAP( aStartAngle, >, aEndAngle );
|
||||
|
||||
Save();
|
||||
currentManager->Translate( aCenterPoint.x, aCenterPoint.y, layerDepth );
|
||||
currentManager->Translate( aCenterPoint.x, aCenterPoint.y, 0.0 );
|
||||
|
||||
if( isStrokeEnabled )
|
||||
{
|
||||
@@ -448,7 +448,7 @@ void OPENGL_GAL::DrawRectangle( const VECTOR2D& aStartPoint, const VECTOR2D& aEn
|
||||
}
|
||||
|
||||
|
||||
void OPENGL_GAL::DrawPolyline( std::deque<VECTOR2D>& aPointList )
|
||||
void OPENGL_GAL::DrawPolyline( const std::deque<VECTOR2D>& aPointList )
|
||||
{
|
||||
if( aPointList.empty() )
|
||||
return;
|
||||
@@ -476,19 +476,43 @@ void OPENGL_GAL::DrawPolyline( std::deque<VECTOR2D>& aPointList )
|
||||
}
|
||||
|
||||
|
||||
void OPENGL_GAL::DrawPolyline( const VECTOR2D aPointList[], int aListSize )
|
||||
{
|
||||
currentManager->Color( strokeColor.r, strokeColor.g, strokeColor.b, strokeColor.a );
|
||||
|
||||
// Start from the second point
|
||||
for( int i = 1; i < aListSize; ++i )
|
||||
{
|
||||
const VECTOR2D startEndVector = ( aPointList[i] - aPointList[i - 1] );
|
||||
double lineAngle = startEndVector.Angle();
|
||||
|
||||
drawLineQuad( aPointList[i - 1], aPointList[i] );
|
||||
|
||||
// There is no need to draw line caps on both ends of polyline's segments
|
||||
drawFilledSemiCircle( aPointList[i - 1], lineWidth / 2, lineAngle + M_PI / 2 );
|
||||
}
|
||||
|
||||
// ..and now - draw the ending cap
|
||||
const VECTOR2D startEndVector = ( aPointList[aListSize - 1] - aPointList[aListSize - 2] );
|
||||
double lineAngle = startEndVector.Angle();
|
||||
drawFilledSemiCircle( aPointList[aListSize - 1], lineWidth / 2, lineAngle - M_PI / 2 );
|
||||
}
|
||||
|
||||
|
||||
void OPENGL_GAL::DrawPolygon( const std::deque<VECTOR2D>& aPointList )
|
||||
{
|
||||
// Any non convex polygon needs to be tesselated
|
||||
// for this purpose the GLU standard functions are used
|
||||
currentManager->Shader( SHADER_NONE );
|
||||
currentManager->Color( fillColor.r, fillColor.g, fillColor.b, fillColor.a );
|
||||
|
||||
// Any non convex polygon needs to be tesselated
|
||||
// for this purpose the GLU standard functions are used
|
||||
TessParams params = { currentManager, tessIntersects };
|
||||
gluTessBeginPolygon( tesselator, ¶ms );
|
||||
gluTessBeginContour( tesselator );
|
||||
|
||||
boost::shared_array<GLdouble> points( new GLdouble[3 * aPointList.size()] );
|
||||
int v = 0;
|
||||
|
||||
for( std::deque<VECTOR2D>::const_iterator it = aPointList.begin(); it != aPointList.end(); ++it )
|
||||
{
|
||||
points[v] = it->x;
|
||||
@@ -508,6 +532,41 @@ void OPENGL_GAL::DrawPolygon( const std::deque<VECTOR2D>& aPointList )
|
||||
}
|
||||
|
||||
|
||||
void OPENGL_GAL::DrawPolygon( const VECTOR2D aPointList[], int aListSize )
|
||||
{
|
||||
currentManager->Shader( SHADER_NONE );
|
||||
currentManager->Color( fillColor.r, fillColor.g, fillColor.b, fillColor.a );
|
||||
|
||||
// Any non convex polygon needs to be tesselated
|
||||
// for this purpose the GLU standard functions are used
|
||||
TessParams params = { currentManager, tessIntersects };
|
||||
gluTessBeginPolygon( tesselator, ¶ms );
|
||||
gluTessBeginContour( tesselator );
|
||||
|
||||
boost::shared_array<GLdouble> points( new GLdouble[3 * aListSize] );
|
||||
int v = 0;
|
||||
const VECTOR2D* ptr = aPointList;
|
||||
|
||||
for( int i = 0; i < aListSize; ++i )
|
||||
{
|
||||
points[v] = ptr->x;
|
||||
points[v + 1] = ptr->y;
|
||||
points[v + 2] = layerDepth;
|
||||
gluTessVertex( tesselator, &points[v], &points[v] );
|
||||
++ptr;
|
||||
v += 3;
|
||||
}
|
||||
|
||||
gluTessEndContour( tesselator );
|
||||
gluTessEndPolygon( tesselator );
|
||||
|
||||
// Free allocated intersecting points
|
||||
tessIntersects.clear();
|
||||
|
||||
// vertexList destroyed here
|
||||
}
|
||||
|
||||
|
||||
void OPENGL_GAL::DrawCurve( const VECTOR2D& aStartPoint, const VECTOR2D& aControlPointA,
|
||||
const VECTOR2D& aControlPointB, const VECTOR2D& aEndPoint )
|
||||
{
|
||||
|
||||
@@ -32,9 +32,11 @@
|
||||
|
||||
using namespace KIGFX;
|
||||
|
||||
const double STROKE_FONT::INTERLINE_PITCH_RATIO = 1.5;
|
||||
const double STROKE_FONT::OVERBAR_HEIGHT = 1.22;
|
||||
const double STROKE_FONT::BOLD_FACTOR = 1.3;
|
||||
const double STROKE_FONT::HERSHEY_SCALE = 1.0 / 21.0;
|
||||
const double STROKE_FONT::STROKE_FONT_SCALE = 1.0 / 21.0;
|
||||
const double STROKE_FONT::ITALIC_TILT = 1.0 / 8;
|
||||
|
||||
STROKE_FONT::STROKE_FONT( GAL* aGal ) :
|
||||
m_gal( aGal ),
|
||||
@@ -81,8 +83,8 @@ bool STROKE_FONT::LoadNewStrokeFont( const char* const aNewStrokeFont[], int aNe
|
||||
if( i < 2 )
|
||||
{
|
||||
// The first two values contain the width of the char
|
||||
glyphStartX = ( coordinate[0] - 'R' ) * HERSHEY_SCALE;
|
||||
glyphEndX = ( coordinate[1] - 'R' ) * HERSHEY_SCALE;
|
||||
glyphStartX = ( coordinate[0] - 'R' ) * STROKE_FONT_SCALE;
|
||||
glyphEndX = ( coordinate[1] - 'R' ) * STROKE_FONT_SCALE;
|
||||
glyphBoundingX = VECTOR2D( 0, glyphEndX - glyphStartX );
|
||||
}
|
||||
else if( ( coordinate[0] == ' ' ) && ( coordinate[1] == 'R' ) )
|
||||
@@ -97,9 +99,9 @@ bool STROKE_FONT::LoadNewStrokeFont( const char* const aNewStrokeFont[], int aNe
|
||||
{
|
||||
// Every coordinate description of the Hershey format has an offset,
|
||||
// it has to be subtracted
|
||||
point.x = (double) ( coordinate[0] - 'R' ) * HERSHEY_SCALE - glyphStartX;
|
||||
point.x = (double) ( coordinate[0] - 'R' ) * STROKE_FONT_SCALE - glyphStartX;
|
||||
// -10 is here to keep GAL rendering consistent with the legacy gfx stuff
|
||||
point.y = (double) ( coordinate[1] - 'R' - 10) * HERSHEY_SCALE;
|
||||
point.y = (double) ( coordinate[1] - 'R' - 10) * STROKE_FONT_SCALE;
|
||||
pointList.push_back( point );
|
||||
}
|
||||
|
||||
@@ -121,7 +123,7 @@ bool STROKE_FONT::LoadNewStrokeFont( const char* const aNewStrokeFont[], int aNe
|
||||
|
||||
int STROKE_FONT::getInterline() const
|
||||
{
|
||||
return ( m_glyphSize.y * 14 ) / 10 + m_gal->GetLineWidth();
|
||||
return KiROUND( m_glyphSize.y * INTERLINE_PITCH_RATIO ) + m_gal->GetLineWidth();
|
||||
}
|
||||
|
||||
|
||||
@@ -307,11 +309,11 @@ void STROKE_FONT::drawSingleLineText( const UTF8& aText )
|
||||
{
|
||||
if( m_mirrored )
|
||||
{
|
||||
overbar_italic_comp = (-m_glyphSize.y * OVERBAR_HEIGHT) / 8;
|
||||
overbar_italic_comp = (-m_glyphSize.y * OVERBAR_HEIGHT) / ITALIC_TILT;
|
||||
}
|
||||
else
|
||||
{
|
||||
overbar_italic_comp = (m_glyphSize.y * OVERBAR_HEIGHT) / 8;
|
||||
overbar_italic_comp = (m_glyphSize.y * OVERBAR_HEIGHT) / ITALIC_TILT;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -121,14 +121,26 @@ static inline bool Collide( const SHAPE_RECT& aA, const SHAPE_CIRCLE& aB, int aC
|
||||
|
||||
static VECTOR2I pushoutForce( const SHAPE_CIRCLE& aA, const SEG& aB, int aClearance )
|
||||
{
|
||||
VECTOR2I nearest = aB.NearestPoint( aA.GetCenter() );
|
||||
VECTOR2I f (0, 0);
|
||||
VECTOR2I f( 0, 0 );
|
||||
|
||||
int dist = ( nearest - aA.GetCenter() ).EuclideanNorm();
|
||||
int min_dist = aClearance + aA.GetRadius();
|
||||
const VECTOR2I c = aA.GetCenter();
|
||||
const VECTOR2I nearest = aB.NearestPoint( c );
|
||||
|
||||
const int r = aA.GetRadius();
|
||||
|
||||
int dist = ( nearest - c ).EuclideanNorm();
|
||||
int min_dist = aClearance + r;
|
||||
|
||||
if( dist < min_dist )
|
||||
f = ( aA.GetCenter() - nearest ).Resize ( min_dist - dist + 10 );
|
||||
{
|
||||
for( int corr = 0; corr < 5; corr++ )
|
||||
{
|
||||
f = ( aA.GetCenter() - nearest ).Resize( min_dist - dist + corr );
|
||||
|
||||
if( aB.Distance( c + f ) >= min_dist )
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return f;
|
||||
}
|
||||
|
||||
+22
-80
@@ -28,33 +28,26 @@
|
||||
* @brief Functions for file management
|
||||
*/
|
||||
|
||||
// For compilers that support precompilation, includes "wx.h".
|
||||
#include <fctsys.h>
|
||||
#include <pgm_base.h>
|
||||
#include <confirm.h>
|
||||
|
||||
#include <common.h>
|
||||
#include <macros.h>
|
||||
#include <gestfich.h>
|
||||
|
||||
#include <wx/mimetype.h>
|
||||
#include <wx/filename.h>
|
||||
#include <wx/dir.h>
|
||||
|
||||
// For compilers that support precompilation, includes "wx.h".
|
||||
#include <fctsys.h>
|
||||
#include <pgm_base.h>
|
||||
#include <confirm.h>
|
||||
#include <common.h>
|
||||
#include <macros.h>
|
||||
|
||||
#include <gestfich.h>
|
||||
|
||||
void AddDelimiterString( wxString& string )
|
||||
{
|
||||
wxString text;
|
||||
|
||||
if( !string.StartsWith( wxT( "\"" ) ) )
|
||||
text = wxT( "\"" );
|
||||
|
||||
text += string;
|
||||
|
||||
if( (text.Last() != '"' ) || (text.length() <= 1) )
|
||||
text += wxT( "\"" );
|
||||
|
||||
string = text;
|
||||
{
|
||||
string.Prepend ( wxT( "\"" ) );
|
||||
string.Append ( wxT( "\"" ) );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -227,6 +220,8 @@ int ExecuteFile( wxWindow* frame, const wxString& ExecFile, const wxString& para
|
||||
#ifdef __WXMAC__
|
||||
else
|
||||
{
|
||||
AddDelimiterString( fullFileName );
|
||||
|
||||
if( !param.IsEmpty() )
|
||||
fullFileName += wxT( " " ) + param;
|
||||
|
||||
@@ -351,8 +346,6 @@ bool OpenPDF( const wxString& file )
|
||||
{
|
||||
wxString command;
|
||||
wxString filename = file;
|
||||
wxString type;
|
||||
bool success = false;
|
||||
|
||||
Pgm().ReadPdfBrowserInfos();
|
||||
|
||||
@@ -363,71 +356,21 @@ bool OpenPDF( const wxString& file )
|
||||
}
|
||||
else
|
||||
{
|
||||
wxFileType* filetype = NULL;
|
||||
wxFileType::MessageParameters params( filename, type );
|
||||
filetype = wxTheMimeTypesManager->GetFileTypeFromExtension( wxT( "pdf" ) );
|
||||
wxFileType* filetype = wxTheMimeTypesManager->GetFileTypeFromExtension( wxT( "pdf" ) );
|
||||
|
||||
if( filetype )
|
||||
success = filetype->GetOpenCommand( &command, params );
|
||||
command = filetype->GetOpenCommand( filename );
|
||||
|
||||
delete filetype;
|
||||
|
||||
#ifndef __WINDOWS__
|
||||
|
||||
// Bug ? under linux wxWidgets returns acroread as PDF viewer, even if
|
||||
// it does not exist.
|
||||
if( command.StartsWith( wxT( "acroread" ) ) ) // Workaround
|
||||
success = false;
|
||||
#endif
|
||||
|
||||
if( success && !command.IsEmpty() )
|
||||
{
|
||||
success = ProcessExecute( command );
|
||||
|
||||
if( success )
|
||||
return success;
|
||||
}
|
||||
|
||||
success = false;
|
||||
command.clear();
|
||||
|
||||
if( !success )
|
||||
{
|
||||
#if !defined(__WINDOWS__)
|
||||
AddDelimiterString( filename );
|
||||
|
||||
// here is a list of PDF viewers candidates
|
||||
static const wxChar* tries[] =
|
||||
{
|
||||
wxT( "/usr/bin/evince" ),
|
||||
wxT( "/usr/bin/okular" ),
|
||||
wxT( "/usr/bin/gpdf" ),
|
||||
wxT( "/usr/bin/konqueror" ),
|
||||
wxT( "/usr/bin/kpdf" ),
|
||||
wxT( "/usr/bin/xpdf" ),
|
||||
wxT( "/usr/bin/open" ), // BSD and OSX file & dir opener
|
||||
wxT( "/usr/bin/xdg-open" ), // Freedesktop file & dir opener
|
||||
};
|
||||
|
||||
for( unsigned ii = 0; ii<DIM(tries); ii++ )
|
||||
{
|
||||
if( wxFileExists( tries[ii] ) )
|
||||
{
|
||||
command = tries[ii];
|
||||
command += wxT( ' ' );
|
||||
command += filename;
|
||||
break;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
if( !command.IsEmpty() )
|
||||
{
|
||||
success = ProcessExecute( command );
|
||||
|
||||
if( !success )
|
||||
if( ProcessExecute( command ) )
|
||||
{
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
wxString msg;
|
||||
msg.Printf( _( "Problem while running the PDF viewer\nCommand is '%s'" ),
|
||||
@@ -440,10 +383,9 @@ bool OpenPDF( const wxString& file )
|
||||
wxString msg;
|
||||
msg.Printf( _( "Unable to find a PDF viewer for <%s>" ), GetChars( filename ) );
|
||||
DisplayError( NULL, msg );
|
||||
success = false;
|
||||
}
|
||||
|
||||
return success;
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
|
||||
+106
-21
@@ -13,6 +13,9 @@
|
||||
#include <bezier_curves.h>
|
||||
#include <math_for_graphics.h>
|
||||
#include <wx/graphics.h>
|
||||
#if defined(__WXMAC__) && defined(USE_WX_GRAPHICS_CONTEXT)
|
||||
#include <wx/dcgraph.h>
|
||||
#endif
|
||||
|
||||
static const bool FILLED = true;
|
||||
static const bool NOT_FILLED = false;
|
||||
@@ -429,17 +432,45 @@ void GRLineArray( EDA_RECT* aClipBox, wxDC* aDC, std::vector<wxPoint>& aLines,
|
||||
|
||||
if( aClipBox )
|
||||
aClipBox->Inflate(aWidth/2);
|
||||
for( unsigned i = 0; i < aLines.size(); i += 2)
|
||||
|
||||
#if defined( __WXMAC__ ) && defined( USE_WX_GRAPHICS_CONTEXT )
|
||||
wxGCDC *gcdc = wxDynamicCast( aDC, wxGCDC );
|
||||
if( gcdc )
|
||||
{
|
||||
int x1 = aLines[i].x;
|
||||
int y1 = aLines[i].y;
|
||||
int x2 = aLines[i+1].x;
|
||||
int y2 = aLines[i+1].y;
|
||||
GRLastMoveToX = x2;
|
||||
GRLastMoveToY = y2;
|
||||
if( ( aClipBox == NULL ) || !clipLine( aClipBox, x1, y1, x2, y2 ) )
|
||||
aDC->DrawLine( x1, y1, x2, y2 );
|
||||
wxGraphicsContext *gc = gcdc->GetGraphicsContext();
|
||||
|
||||
// create path
|
||||
wxGraphicsPath path = gc->CreatePath();
|
||||
for( unsigned i = 0; i < aLines.size(); i += 2 )
|
||||
{
|
||||
int x1 = aLines[i].x;
|
||||
int y1 = aLines[i].y;
|
||||
int x2 = aLines[i+1].x;
|
||||
int y2 = aLines[i+1].y;
|
||||
if( ( aClipBox == NULL ) || !clipLine( aClipBox, x1, y1, x2, y2 ) )
|
||||
{
|
||||
path.MoveToPoint( x1, y1 );
|
||||
path.AddLineToPoint( x2, y2 );
|
||||
}
|
||||
}
|
||||
// draw path
|
||||
gc->StrokePath( path );
|
||||
}
|
||||
else
|
||||
#endif
|
||||
{
|
||||
for( unsigned i = 0; i < aLines.size(); i += 2 )
|
||||
{
|
||||
int x1 = aLines[i].x;
|
||||
int y1 = aLines[i].y;
|
||||
int x2 = aLines[i+1].x;
|
||||
int y2 = aLines[i+1].y;
|
||||
if( ( aClipBox == NULL ) || !clipLine( aClipBox, x1, y1, x2, y2 ) )
|
||||
aDC->DrawLine( x1, y1, x2, y2 );
|
||||
}
|
||||
}
|
||||
GRMoveTo( aLines[aLines.size() - 1].x, aLines[aLines.size() - 1].y );
|
||||
|
||||
if( aClipBox )
|
||||
aClipBox->Inflate(-aWidth/2);
|
||||
}
|
||||
@@ -626,10 +657,36 @@ static void GRSPoly( EDA_RECT* ClipBox, wxDC* DC, int n, wxPoint Points[],
|
||||
}
|
||||
else
|
||||
{
|
||||
GRMoveTo( Points[0].x, Points[0].y );
|
||||
for( int i = 1; i < n; ++i )
|
||||
#if defined( __WXMAC__ ) && defined( USE_WX_GRAPHICS_CONTEXT )
|
||||
wxGCDC *gcdc = wxDynamicCast( DC, wxGCDC );
|
||||
if( gcdc )
|
||||
{
|
||||
GRLineTo( ClipBox, DC, Points[i].x, Points[i].y, width, Color );
|
||||
wxGraphicsContext *gc = gcdc->GetGraphicsContext();
|
||||
|
||||
// set pen
|
||||
GRSetColorPen( DC, Color, width );
|
||||
|
||||
// create path
|
||||
wxGraphicsPath path = gc->CreatePath();
|
||||
path.MoveToPoint( Points[0].x, Points[0].y );
|
||||
for( int i = 1; i < n; ++i )
|
||||
{
|
||||
path.AddLineToPoint( Points[i].x, Points[i].y );
|
||||
}
|
||||
// draw path
|
||||
gc->StrokePath( path );
|
||||
|
||||
// correctly update last position
|
||||
GRMoveTo( Points[n - 1].x, Points[n - 1].y );
|
||||
}
|
||||
else
|
||||
#endif
|
||||
{
|
||||
GRMoveTo( Points[0].x, Points[0].y );
|
||||
for( int i = 1; i < n; ++i )
|
||||
{
|
||||
GRLineTo( ClipBox, DC, Points[i].x, Points[i].y, width, Color );
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -657,18 +714,46 @@ static void GRSClosedPoly( EDA_RECT* aClipBox, wxDC* aDC,
|
||||
}
|
||||
else
|
||||
{
|
||||
GRMoveTo( aPoints[0].x, aPoints[0].y );
|
||||
for( int i = 1; i < aPointCount; ++i )
|
||||
#if defined( __WXMAC__ ) && defined( USE_WX_GRAPHICS_CONTEXT )
|
||||
wxGCDC *gcdc = wxDynamicCast( aDC, wxGCDC );
|
||||
if( gcdc )
|
||||
{
|
||||
GRLineTo( aClipBox, aDC, aPoints[i].x, aPoints[i].y, aWidth, aColor );
|
||||
wxGraphicsContext *gc = gcdc->GetGraphicsContext();
|
||||
|
||||
// set pen
|
||||
GRSetColorPen( aDC, aColor, aWidth );
|
||||
|
||||
// create path
|
||||
wxGraphicsPath path = gc->CreatePath();
|
||||
path.MoveToPoint( aPoints[0].x, aPoints[0].y );
|
||||
for( int i = 1; i < aPointCount; ++i )
|
||||
{
|
||||
path.AddLineToPoint( aPoints[i].x, aPoints[i].y );
|
||||
}
|
||||
if( aPoints[aPointCount - 1] != aPoints[0] )
|
||||
path.AddLineToPoint( aPoints[0].x, aPoints[0].y );
|
||||
// draw path
|
||||
gc->StrokePath( path );
|
||||
|
||||
// correctly update last position
|
||||
GRMoveTo( aPoints[aPointCount - 1].x, aPoints[aPointCount - 1].y );
|
||||
}
|
||||
|
||||
int lastpt = aPointCount - 1;
|
||||
|
||||
// Close the polygon
|
||||
if( aPoints[lastpt] != aPoints[0] )
|
||||
else
|
||||
#endif
|
||||
{
|
||||
GRLineTo( aClipBox, aDC, aPoints[0].x, aPoints[0].y, aWidth, aColor );
|
||||
GRMoveTo( aPoints[0].x, aPoints[0].y );
|
||||
for( int i = 1; i < aPointCount; ++i )
|
||||
{
|
||||
GRLineTo( aClipBox, aDC, aPoints[i].x, aPoints[i].y, aWidth, aColor );
|
||||
}
|
||||
|
||||
int lastpt = aPointCount - 1;
|
||||
|
||||
// Close the polygon
|
||||
if( aPoints[lastpt] != aPoints[0] )
|
||||
{
|
||||
GRLineTo( aClipBox, aDC, aPoints[0].x, aPoints[0].y, aWidth, aColor );
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -32,6 +32,7 @@ HTML_MESSAGE_BOX::HTML_MESSAGE_BOX( wxWindow* parent, const wxString& aTitle,
|
||||
wxPoint aPos, wxSize aSize) :
|
||||
DIALOG_DISPLAY_HTML_TEXT_BASE( parent, wxID_ANY, aTitle, aPos, aSize )
|
||||
{
|
||||
m_htmlWindow->SetLayoutDirection( wxLayout_LeftToRight );
|
||||
ListClear();
|
||||
Center();
|
||||
}
|
||||
|
||||
+1
-1
@@ -212,7 +212,7 @@ KIFACE* KIWAY::KiFACE( FACE_T aFaceId, bool doLoad )
|
||||
if( ! wxFileExists( dname ) )
|
||||
msg << wxT( "It is missing.\n" );
|
||||
else
|
||||
msg << wxT( "Perhaps a wxWidgets shared (.dll or .so) file is missing.\n" );
|
||||
msg << wxT( "Perhaps a shared library (.dll or .so) file is missing.\n" );
|
||||
|
||||
msg << wxT( "From command line: argv[0]:\n'" );
|
||||
msg << wxStandardPaths::Get().GetExecutablePath() << wxT( "'\n" );
|
||||
|
||||
@@ -101,14 +101,14 @@ bool KIWAY_PLAYER::ShowModal( wxString* aResult, wxWindow* aResultantFocusWindow
|
||||
m_modal_resultant_parent = aResultantFocusWindow;
|
||||
|
||||
Show( true );
|
||||
Raise(); // Needed on sole Window managers to always display the frame
|
||||
Raise(); // Needed on some Window managers to always display the frame
|
||||
|
||||
SetFocus();
|
||||
|
||||
{
|
||||
// We have to disable all frames but the the modal one.
|
||||
// wxWindowDisabler does that, but remember it disables all top level windows
|
||||
// We do not want to disable top level windows which are child off the modal one,
|
||||
// wxWindowDisabler does that, but it also disables all top level windows
|
||||
// We do not want to disable top level windows which are child of the modal one,
|
||||
// if they are enabled.
|
||||
// An example is an aui toolbar which was moved
|
||||
// or a dialog or an other frame or miniframe opened by the modal one.
|
||||
@@ -119,19 +119,18 @@ bool KIWAY_PLAYER::ShowModal( wxString* aResult, wxWindow* aResultantFocusWindow
|
||||
if( wlist[ii]->IsTopLevel() && wlist[ii]->IsEnabled() )
|
||||
enabledTopLevelWindows.push_back( wlist[ii] );
|
||||
|
||||
|
||||
// exception safe way to disable all top level windows except the modal one,
|
||||
// re-enables only those that were disabled on exit
|
||||
wxWindowDisabler toggle( this );
|
||||
wxWindowDisabler toggle( this );
|
||||
|
||||
for( unsigned ii = 0; ii < enabledTopLevelWindows.size(); ii++ )
|
||||
enabledTopLevelWindows[ii]->Enable( true );
|
||||
enabledTopLevelWindows[ii]->Enable( true );
|
||||
|
||||
WX_EVENT_LOOP event_loop;
|
||||
m_modal_loop = &event_loop;
|
||||
event_loop.Run();
|
||||
|
||||
} // End of scop for some variables.
|
||||
} // End of scope for some variables.
|
||||
// End nesting before setting focus below.
|
||||
|
||||
if( aResult )
|
||||
|
||||
+37
-4
@@ -441,7 +441,7 @@ LSEQ LSET::SeqStackupBottom2Top() const
|
||||
}
|
||||
|
||||
|
||||
LAYER_ID FlipLayer( LAYER_ID aLayerId )
|
||||
LAYER_ID FlipLayer( LAYER_ID aLayerId, int aCopperLayersCount )
|
||||
{
|
||||
switch( aLayerId )
|
||||
{
|
||||
@@ -466,14 +466,28 @@ LAYER_ID FlipLayer( LAYER_ID aLayerId )
|
||||
case B_Fab: return F_Fab;
|
||||
case F_Fab: return B_Fab;
|
||||
|
||||
// No change for the other layers
|
||||
default:
|
||||
default: // change internal layer if aCopperLayersCount is >= 4
|
||||
if( IsCopperLayer( aLayerId ) && aCopperLayersCount >= 4 )
|
||||
{
|
||||
// internal copper layers count is aCopperLayersCount-2
|
||||
LAYER_ID fliplayer = LAYER_ID(aCopperLayersCount - 2 - ( aLayerId - In1_Cu ) );
|
||||
// Ensure fliplayer has a value which does not crash pcbnew:
|
||||
if( fliplayer < F_Cu )
|
||||
fliplayer = F_Cu;
|
||||
|
||||
if( fliplayer > B_Cu )
|
||||
fliplayer = B_Cu;
|
||||
|
||||
return fliplayer;
|
||||
}
|
||||
|
||||
// No change for the other layers
|
||||
return aLayerId;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
LSET FlipLayerMask( LSET aMask )
|
||||
LSET FlipLayerMask( LSET aMask, int aCopperLayersCount )
|
||||
{
|
||||
// layers on physical outside of a board:
|
||||
const static LSET and_mask( 16, // !! update count
|
||||
@@ -537,6 +551,25 @@ LSET FlipLayerMask( LSET aMask )
|
||||
if( aMask[F_Fab] )
|
||||
newMask.set( B_Fab );
|
||||
|
||||
if( aCopperLayersCount >= 4 ) // Internal layers exist
|
||||
{
|
||||
LSET internalMask = aMask & ~LSET::InternalCuMask();
|
||||
|
||||
if( internalMask != LSET::InternalCuMask() )
|
||||
{ // the mask does not include all internal layers. Therefore
|
||||
// the flipped mask for internal copper layers must be built
|
||||
int innerLayerCnt = aCopperLayersCount -2;
|
||||
|
||||
for( int ii = 0; ii < innerLayerCnt; ii++ )
|
||||
{
|
||||
if( internalMask[innerLayerCnt - ii + In1_Cu] )
|
||||
newMask.set( ii + In1_Cu );
|
||||
else
|
||||
newMask.reset( ii + In1_Cu );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return newMask;
|
||||
}
|
||||
|
||||
|
||||
@@ -142,23 +142,23 @@ const char defaultPageLayout[] = "( page_layout\n"
|
||||
"(line (start 0 50 rtcorner) (end 2 50 rtcorner) (repeat 30) (incry 50) )\n"
|
||||
"(tbtext \"A\" (pos 1 25 rtcorner) (font (size 1.3 1.3)) (justify center) (repeat 100) (incry 50) )\n"
|
||||
"(tbtext \"Date: %D\" (pos 87 6.9) )\n"
|
||||
"(line (start 110 5.5) end 2 5.5) )\n"
|
||||
"(line (start 110 5.5) (end 2 5.5) )\n"
|
||||
"(tbtext \"%K\" (pos 109 4.1) (comment \"Kicad version\" ) )\n"
|
||||
"(line (start 110 8.5) end 2 8.5) )\n"
|
||||
"(line (start 110 8.5) (end 2 8.5) )\n"
|
||||
"(tbtext \"Rev: %R\" (pos 24 6.9)(font bold)(justify left) )\n"
|
||||
"(tbtext \"Size: %Z\" (comment \"Paper format name\")(pos 109 6.9) )\n"
|
||||
"(tbtext \"Id: %S/%N\" (comment \"Sheet id\")(pos 24 4.1) )\n"
|
||||
"(line (start 110 12.5) end 2 12.5) )\n"
|
||||
"(line (start 110 12.5) (end 2 12.5) )\n"
|
||||
"(tbtext \"Title: %T\" (pos 109 10.7)(font bold italic (size 2 2)) )\n"
|
||||
"(tbtext \"File: %F\" (pos 109 14.3) )\n"
|
||||
"(line (start 110 18.5) end 2 18.5) )\n"
|
||||
"(line (start 110 18.5) (end 2 18.5) )\n"
|
||||
"(tbtext \"Sheet: %P\" (pos 109 17) )\n"
|
||||
"(tbtext \"%Y\" (comment \"Company name\") (pos 109 20)(font bold) )\n"
|
||||
"(tbtext \"%C0\" (comment \"Comment 0\") (pos 109 23) )\n"
|
||||
"(tbtext \"%C1\" (comment \"Comment 1\") (pos 109 26) )\n"
|
||||
"(tbtext \"%C2\" (comment \"Comment 2\") (pos 109 29) )\n"
|
||||
"(tbtext \"%C3\" (comment \"Comment 3\") (pos 109 32) )\n"
|
||||
"(line (start 90 8.5) end 90 5.5) )\n"
|
||||
"(line (start 26 8.5) end 26 2) )\n"
|
||||
"(line (start 90 8.5) (end 90 5.5) )\n"
|
||||
"(line (start 26 8.5) (end 26 2) )\n"
|
||||
")\n"
|
||||
;
|
||||
|
||||
@@ -70,14 +70,37 @@ private:
|
||||
double parseDouble();
|
||||
|
||||
void parseSetup( WORKSHEET_LAYOUT* aLayout ) throw( IO_ERROR, PARSE_ERROR );
|
||||
|
||||
/**
|
||||
* parse a graphic item starting by "(line" or "(rect" and read parameters.
|
||||
*/
|
||||
void parseGraphic( WORKSHEET_DATAITEM * aItem ) throw( IO_ERROR, PARSE_ERROR );
|
||||
|
||||
/**
|
||||
* parse a text item starting by "(tbtext" and read parameters.
|
||||
*/
|
||||
void parseText( WORKSHEET_DATAITEM_TEXT * aItem ) throw( IO_ERROR, PARSE_ERROR );
|
||||
|
||||
/**
|
||||
* parse a polygon item starting by "( polygon" and read parameters.
|
||||
* the list of corners included in this description is read by parsePolyOutline
|
||||
*/
|
||||
void parsePolygon( WORKSHEET_DATAITEM_POLYPOLYGON * aItem )
|
||||
throw( IO_ERROR, PARSE_ERROR );
|
||||
|
||||
/**
|
||||
* parse a list of corners starting by "( pts" and read coordinates.
|
||||
*/
|
||||
void parsePolyOutline( WORKSHEET_DATAITEM_POLYPOLYGON * aItem )
|
||||
throw( IO_ERROR, PARSE_ERROR );
|
||||
|
||||
|
||||
/**
|
||||
* parse a bitmap item starting by "( bitmap" and read parameters.
|
||||
*/
|
||||
void parseBitmap( WORKSHEET_DATAITEM_BITMAP * aItem )
|
||||
throw( IO_ERROR, PARSE_ERROR );
|
||||
|
||||
void parseCoordinate( POINT_COORD& aCoord) throw( IO_ERROR, PARSE_ERROR );
|
||||
void readOption( WORKSHEET_DATAITEM * aItem ) throw( IO_ERROR, PARSE_ERROR );
|
||||
void readPngdata( WORKSHEET_DATAITEM_BITMAP * aItem ) throw( IO_ERROR, PARSE_ERROR );
|
||||
@@ -463,12 +486,21 @@ void PAGE_LAYOUT_READER_PARSER::parseGraphic( WORKSHEET_DATAITEM * aItem )
|
||||
|
||||
if( token == T_LEFT )
|
||||
token = NextTok();
|
||||
else
|
||||
{
|
||||
// If an other token than T_LEFT is read here, this is an error
|
||||
// however, due to a old bug in kicad, the token T_end can be found
|
||||
// without T_LEFT in a very few .wks files (perhaps only one in a demo).
|
||||
// So this ugly hack disables the error detection.
|
||||
if( token != T_end )
|
||||
Unexpected( CurText() );
|
||||
}
|
||||
|
||||
switch( token )
|
||||
{
|
||||
case T_comment:
|
||||
NeedSYMBOLorNUMBER();
|
||||
aItem->m_Info = FromUTF8();
|
||||
aItem->m_Info = FromUTF8();
|
||||
NeedRIGHT();
|
||||
break;
|
||||
|
||||
|
||||
+105
-57
@@ -308,14 +308,13 @@ void PGM_BASE::SetEditorName( const wxString& aFileName )
|
||||
}
|
||||
|
||||
|
||||
const wxString& PGM_BASE::GetEditorName()
|
||||
const wxString& PGM_BASE::GetEditorName( bool aCanShowFileChooser )
|
||||
{
|
||||
wxString editorname = m_editor_name;
|
||||
|
||||
if( !editorname )
|
||||
{
|
||||
// Get the preferred editor name from environment variable first.
|
||||
if(!wxGetEnv( wxT( "EDITOR" ), &editorname ))
|
||||
if( !wxGetEnv( wxT( "EDITOR" ), &editorname ) )
|
||||
{
|
||||
// If there is no EDITOR variable set, try the desktop default
|
||||
#ifdef __WXMAC__
|
||||
@@ -326,31 +325,49 @@ const wxString& PGM_BASE::GetEditorName()
|
||||
}
|
||||
}
|
||||
|
||||
if( !editorname ) // We must get a preferred editor name
|
||||
// If we still don't have an editor name show a dialog asking the user to select one
|
||||
if( !editorname && aCanShowFileChooser )
|
||||
{
|
||||
DisplayInfoMessage( NULL,
|
||||
_( "No default editor found, you must choose it" ) );
|
||||
|
||||
wxString mask( wxT( "*" ) );
|
||||
|
||||
#ifdef __WINDOWS__
|
||||
mask += wxT( ".exe" );
|
||||
#endif
|
||||
editorname = EDA_FILE_SELECTOR( _( "Preferred Editor:" ), wxEmptyString,
|
||||
wxEmptyString, wxEmptyString, mask,
|
||||
NULL, wxFD_OPEN, true );
|
||||
editorname = AskUserForPreferredEditor();
|
||||
}
|
||||
|
||||
// If we finally have a new editor name request it to be copied to m_editor_name and
|
||||
// saved to the preferences file.
|
||||
if( !editorname.IsEmpty() )
|
||||
{
|
||||
m_editor_name = editorname;
|
||||
m_common_settings->Write( wxT( "Editor" ), m_editor_name );
|
||||
}
|
||||
SetEditorName( editorname );
|
||||
|
||||
// m_editor_name already has the same value that editorname, or empty if no editor was
|
||||
// found/chosen.
|
||||
return m_editor_name;
|
||||
}
|
||||
|
||||
|
||||
const wxString PGM_BASE::AskUserForPreferredEditor( const wxString& aDefaultEditor )
|
||||
{
|
||||
// Create a mask representing the executable files in the current platform
|
||||
#ifdef __WINDOWS__
|
||||
wxString mask( _( "Executable file (*.exe)|*.exe" ) );
|
||||
#else
|
||||
wxString mask( _( "Executable file (*)|*" ) );
|
||||
#endif
|
||||
|
||||
// Extract the path, name and extension from the default editor (even if the editor's
|
||||
// name was empty, this method will succeed and return empty strings).
|
||||
wxString path, name, ext;
|
||||
wxFileName::SplitPath( aDefaultEditor, &path, &name, &ext );
|
||||
|
||||
// Show the modal editor and return the file chosen (may be empty if the user cancels
|
||||
// the dialog).
|
||||
return EDA_FILE_SELECTOR( _( "Select Preferred Editor" ), path,
|
||||
name, ext, mask,
|
||||
NULL, wxFD_OPEN | wxFD_FILE_MUST_EXIST,
|
||||
true );
|
||||
}
|
||||
|
||||
|
||||
bool PGM_BASE::initPgm()
|
||||
{
|
||||
wxFileName pgm_name( App().argv[0] );
|
||||
@@ -416,6 +433,8 @@ bool PGM_BASE::initPgm()
|
||||
{
|
||||
wxString envVarName = wxT( "KIGITHUB" );
|
||||
ENV_VAR_ITEM envVarItem;
|
||||
wxString envValue;
|
||||
wxFileName tmpFileName;
|
||||
|
||||
envVarItem.SetValue( wxString( wxT( "https://github.com/KiCad" ) ) );
|
||||
envVarItem.SetDefinedExternally( wxGetEnv( envVarName, NULL ) );
|
||||
@@ -429,35 +448,62 @@ bool PGM_BASE::initPgm()
|
||||
baseSharePath.AppendDir( wxT( "kicad" ) );
|
||||
#endif
|
||||
|
||||
wxFileName tmpFileName = baseSharePath;
|
||||
tmpFileName.AppendDir( wxT( "modules" ) );
|
||||
// KISYSMOD
|
||||
envVarName = wxT( "KISYSMOD" );
|
||||
envVarItem.SetValue( tmpFileName.GetPath() );
|
||||
envVarItem.SetDefinedExternally( wxGetEnv( envVarName, NULL ) );
|
||||
if( wxGetEnv( envVarName, &envValue ) == true && !envValue.IsEmpty() )
|
||||
{
|
||||
tmpFileName.AssignDir( envValue );
|
||||
envVarItem.SetDefinedExternally( true );
|
||||
}
|
||||
else
|
||||
{
|
||||
tmpFileName = baseSharePath;
|
||||
tmpFileName.AppendDir( wxT( "modules" ) );
|
||||
envVarItem.SetDefinedExternally( false );
|
||||
}
|
||||
envVarItem.SetValue( tmpFileName.GetFullPath() );
|
||||
m_local_env_vars[ envVarName ] = envVarItem;
|
||||
|
||||
// KISYS3DMOD
|
||||
envVarName = wxT( "KISYS3DMOD" );
|
||||
tmpFileName.AppendDir( wxT( "packages3d" ) );
|
||||
envVarItem.SetValue( tmpFileName.GetPath() );
|
||||
envVarItem.SetDefinedExternally( wxGetEnv( envVarName, NULL ) );
|
||||
if( wxGetEnv( envVarName, &envValue ) == true && !envValue.IsEmpty() )
|
||||
{
|
||||
tmpFileName.AssignDir( envValue );
|
||||
envVarItem.SetDefinedExternally( true );
|
||||
}
|
||||
else
|
||||
{
|
||||
tmpFileName.AppendDir( wxT( "packages3d" ) );
|
||||
envVarItem.SetDefinedExternally( false );
|
||||
}
|
||||
envVarItem.SetValue( tmpFileName.GetFullPath() );
|
||||
m_local_env_vars[ envVarName ] = envVarItem;
|
||||
|
||||
// KICAD_PTEMPLATES
|
||||
envVarName = wxT( "KICAD_PTEMPLATES" );
|
||||
tmpFileName = baseSharePath;
|
||||
tmpFileName.AppendDir( wxT( "template" ) );
|
||||
envVarItem.SetValue( tmpFileName.GetPath() );
|
||||
envVarItem.SetDefinedExternally( wxGetEnv( envVarName, NULL ) );
|
||||
if( wxGetEnv( envVarName, &envValue ) == true && !envValue.IsEmpty() )
|
||||
{
|
||||
tmpFileName.AssignDir( envValue );
|
||||
envVarItem.SetDefinedExternally( true );
|
||||
}
|
||||
else
|
||||
{
|
||||
tmpFileName = baseSharePath;
|
||||
tmpFileName.AppendDir( wxT( "template" ) );
|
||||
envVarItem.SetDefinedExternally( false );
|
||||
}
|
||||
envVarItem.SetValue( tmpFileName.GetFullPath() );
|
||||
m_local_env_vars[ envVarName ] = envVarItem;
|
||||
}
|
||||
|
||||
ReadPdfBrowserInfos(); // needs m_common_settings
|
||||
|
||||
loadCommonSettings();
|
||||
|
||||
// Init user language *before* calling loadCommonSettings, because
|
||||
// env vars could be incorrectly initialized on Linux
|
||||
// (if the value contains some non ASCII7 chars, the env var is not initialized)
|
||||
SetLanguage( true );
|
||||
|
||||
// Set locale option for separator used in float numbers
|
||||
SetLocaleTo_Default();
|
||||
loadCommonSettings();
|
||||
|
||||
#ifdef __WXMAC__
|
||||
// Always show filters on Open dialog to be able to choose plugin
|
||||
@@ -517,23 +563,8 @@ void PGM_BASE::loadCommonSettings()
|
||||
m_help_size.x = 500;
|
||||
m_help_size.y = 400;
|
||||
|
||||
wxString languageSel;
|
||||
|
||||
m_common_settings->Read( languageCfgKey, &languageSel );
|
||||
setLanguageId( wxLANGUAGE_DEFAULT );
|
||||
|
||||
m_common_settings->Read( showEnvVarWarningDialog, &m_show_env_var_dialog );
|
||||
|
||||
// Search for the current selection
|
||||
for( unsigned ii = 0; ii < DIM( s_Languages ); ii++ )
|
||||
{
|
||||
if( s_Languages[ii].m_Lang_Label == languageSel )
|
||||
{
|
||||
setLanguageId( s_Languages[ii].m_WX_Lang_Identifier );
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
m_editor_name = m_common_settings->Read( wxT( "Editor" ) );
|
||||
|
||||
wxString entry, oldPath;
|
||||
@@ -579,7 +610,7 @@ void PGM_BASE::saveCommonSettings()
|
||||
|
||||
for( ENV_VAR_MAP_ITER it = m_local_env_vars.begin(); it != m_local_env_vars.end(); ++it )
|
||||
{
|
||||
wxLogTrace( traceEnvVars, wxT( "Saving environment varaiable config entry %s as %s" ),
|
||||
wxLogTrace( traceEnvVars, wxT( "Saving environment variable config entry %s as %s" ),
|
||||
GetChars( it->first ), GetChars( it->second.GetValue() ) );
|
||||
m_common_settings->Write( it->first, it->second.GetValue() );
|
||||
}
|
||||
@@ -593,6 +624,26 @@ bool PGM_BASE::SetLanguage( bool first_time )
|
||||
{
|
||||
bool retv = true;
|
||||
|
||||
if( first_time )
|
||||
{
|
||||
setLanguageId( wxLANGUAGE_DEFAULT );
|
||||
// First time SetLanguage is called, the user selected language id is set
|
||||
// from commun user config settings
|
||||
wxString languageSel;
|
||||
|
||||
m_common_settings->Read( languageCfgKey, &languageSel );
|
||||
|
||||
// Search for the current selection
|
||||
for( unsigned ii = 0; ii < DIM( s_Languages ); ii++ )
|
||||
{
|
||||
if( s_Languages[ii].m_Lang_Label == languageSel )
|
||||
{
|
||||
setLanguageId( s_Languages[ii].m_WX_Lang_Identifier );
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// dictionary file name without extend (full name is kicad.mo)
|
||||
wxString dictionaryName( wxT( "kicad" ) );
|
||||
|
||||
@@ -616,9 +667,12 @@ bool PGM_BASE::SetLanguage( bool first_time )
|
||||
GetChars( dictionaryName ), GetChars( m_locale->GetName() ) );
|
||||
}
|
||||
|
||||
// how about a meaningful comment here.
|
||||
if( !first_time )
|
||||
{
|
||||
// If we are here, the user has selected an other language.
|
||||
// Therefore the new prefered language name is stored in common config.
|
||||
// Do NOT store the wxWidgets language Id, it can change between wxWidgets
|
||||
// versions, for a given language
|
||||
wxString languageSel;
|
||||
|
||||
// Search for the current selection
|
||||
@@ -639,20 +693,14 @@ bool PGM_BASE::SetLanguage( bool first_time )
|
||||
double dtst = 0.5;
|
||||
wxString msg;
|
||||
|
||||
extern bool g_DisableFloatingPointLocalNotation; // See common.cpp
|
||||
|
||||
g_DisableFloatingPointLocalNotation = false;
|
||||
|
||||
msg << dtst;
|
||||
double result;
|
||||
msg.ToDouble( &result );
|
||||
|
||||
if( result != dtst ) // string to double encode/decode does not work! Bug detected
|
||||
{
|
||||
if( result != dtst )
|
||||
// string to double encode/decode does not work! Bug detected:
|
||||
// Disable floating point localization:
|
||||
g_DisableFloatingPointLocalNotation = true;
|
||||
SetLocaleTo_C_standard( );
|
||||
}
|
||||
setlocale( LC_ALL, "C" );
|
||||
|
||||
if( !m_locale->IsLoaded( dictionaryName ) )
|
||||
m_locale->AddCatalog( dictionaryName );
|
||||
|
||||
+1
-7
@@ -1,9 +1,8 @@
|
||||
|
||||
/*
|
||||
* This program source code file is part of KiCad, a free EDA CAD application.
|
||||
*
|
||||
* Copyright (C) 2007-2011 SoftPLC Corporation, Dick Hollenbeck <dick@softplc.com>
|
||||
* Copyright (C) 2015 KiCad Developers, see change_log.txt for contributors.
|
||||
* Copyright (C) 2016 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
|
||||
@@ -35,11 +34,6 @@
|
||||
#endif
|
||||
|
||||
|
||||
// This file defines 3 classes and some functions useful for working with text files
|
||||
// and is named "richio" after its author, Richard Hollenbeck, aka Dick Hollenbeck.
|
||||
|
||||
|
||||
|
||||
static int vprint( std::string* result, const char* format, va_list ap )
|
||||
{
|
||||
char msg[512];
|
||||
|
||||
+4
-4
@@ -144,7 +144,6 @@ void WinEDA_SelColorFrame::Init_Dialog( int aOldColor )
|
||||
wxBoxSizer* MainBoxSizer = NULL;
|
||||
wxFlexGridSizer* FlexColumnBoxSizer = NULL;
|
||||
wxBitmapButton* BitmapButton = NULL;
|
||||
wxStaticText* Label = NULL;
|
||||
wxStaticLine* Line = NULL;
|
||||
wxStdDialogButtonSizer* StdDialogButtonSizer = NULL;
|
||||
wxButton* Button = NULL;
|
||||
@@ -215,9 +214,10 @@ void WinEDA_SelColorFrame::Init_Dialog( int aOldColor )
|
||||
BitmapButton->SetFocus();
|
||||
}
|
||||
|
||||
Label = new wxStaticText( this, -1, ColorGetName( buttcolor ),
|
||||
wxDefaultPosition, wxDefaultSize, 0 );
|
||||
FlexColumnBoxSizer->Add( Label, 1,
|
||||
wxStaticText* label = new wxStaticText( this, -1,
|
||||
wxGetTranslation( ColorGetName( buttcolor ) ),
|
||||
wxDefaultPosition, wxDefaultSize, 0 );
|
||||
FlexColumnBoxSizer->Add( label, 1,
|
||||
wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL |
|
||||
wxLEFT | wxRIGHT | wxBOTTOM, 5 );
|
||||
}
|
||||
|
||||
@@ -47,42 +47,6 @@
|
||||
#include <confirm.h>
|
||||
|
||||
|
||||
// The functions we use will cause the program launcher to pull stuff in
|
||||
// during linkage, keep the map file in mind to see what's going into it.
|
||||
|
||||
/// Extend LIB_ENV_VAR list with the directory from which I came, prepending it.
|
||||
static void set_lib_env_var( const wxString& aAbsoluteArgv0 )
|
||||
{
|
||||
// POLICY CHOICE 2: Keep same path, so that installer MAY put the
|
||||
// "subsidiary DSOs" in the same directory as the kiway top process modules.
|
||||
// A subsidiary shared library is one that is not a top level DSO, but rather
|
||||
// some shared library that a top level DSO needs to even be loaded. It is
|
||||
// a static link to a shared object from a top level DSO.
|
||||
|
||||
// This directory POLICY CHOICE 2 is not the only dir in play, since LIB_ENV_VAR
|
||||
// has numerous path options in it, as does DSO searching on linux, windows, and OSX.
|
||||
// See "man ldconfig" on linux. What's being done here is for quick installs
|
||||
// into a non-standard place, and especially for Windows users who may not
|
||||
// know what the PATH environment variable is or how to set it.
|
||||
|
||||
wxFileName fn( aAbsoluteArgv0 );
|
||||
|
||||
wxString ld_path( LIB_ENV_VAR );
|
||||
wxString my_path = fn.GetPath();
|
||||
wxString new_paths = PrePendPath( ld_path, my_path );
|
||||
|
||||
wxSetEnv( ld_path, new_paths );
|
||||
|
||||
#if defined(DEBUG)
|
||||
{
|
||||
wxString test;
|
||||
wxGetEnv( ld_path, &test );
|
||||
printf( "LIB_ENV_VAR:'%s'\n", TO_UTF8( test ) );
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
// Only a single KIWAY is supported in this single_top top level component,
|
||||
// which is dedicated to loading only a single DSO.
|
||||
KIWAY Kiway( &Pgm(), KFCTL_STANDALONE );
|
||||
@@ -223,10 +187,6 @@ bool PGM_SINGLE_TOP::OnPgmInit( wxApp* aWxApp )
|
||||
return false;
|
||||
}
|
||||
|
||||
// Set LIB_ENV_VAR *before* loading the DSO, in case the top-level DSO holding the
|
||||
// KIFACE has hard dependencies on subsidiary DSOs below it.
|
||||
set_lib_env_var( absoluteArgv0 );
|
||||
|
||||
if( !initPgm() )
|
||||
return false;
|
||||
|
||||
|
||||
@@ -323,7 +323,18 @@ void TOOL_DISPATCHER::DispatchWxEvent( wxEvent& aEvent )
|
||||
m_toolMgr->ProcessEvent( *evt );
|
||||
|
||||
// pass the event to the GUI, it might still be interested in it
|
||||
#ifdef __APPLE__
|
||||
// On OS X, key events are always meant to be caught. An uncaught key event is assumed
|
||||
// to be a user input error by OS X (as they are pressing keys in a context where nothing
|
||||
// is there to catch the event). This annoyingly makes OS X beep and/or flash the screen
|
||||
// in pcbnew and the footprint editor any time a hotkey is used. The correct procedure is
|
||||
// to NOT pass key events to the GUI under OS X.
|
||||
|
||||
if( type != wxEVT_CHAR )
|
||||
aEvent.Skip();
|
||||
#else
|
||||
aEvent.Skip();
|
||||
#endif
|
||||
|
||||
updateUI();
|
||||
}
|
||||
|
||||
@@ -66,6 +66,8 @@ void TOOL_INTERACTIVE::goInternal( TOOL_STATE_FUNC& aState, const TOOL_EVENT_LIS
|
||||
|
||||
void TOOL_INTERACTIVE::SetContextMenu( CONTEXT_MENU* aMenu, CONTEXT_MENU_TRIGGER aTrigger )
|
||||
{
|
||||
aMenu->SetTool( this );
|
||||
if( aMenu )
|
||||
aMenu->SetTool( this );
|
||||
|
||||
m_toolMgr->ScheduleContextMenu( this, aMenu, aTrigger );
|
||||
}
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
*/
|
||||
|
||||
#include <map>
|
||||
#include <deque>
|
||||
#include <list>
|
||||
#include <stack>
|
||||
#include <algorithm>
|
||||
|
||||
@@ -428,11 +428,15 @@ TOOL_BASE* TOOL_MANAGER::FindTool( const std::string& aName ) const
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
void TOOL_MANAGER::ResetTools( TOOL_BASE::RESET_REASON aReason )
|
||||
void TOOL_MANAGER::DeactivateTool()
|
||||
{
|
||||
TOOL_EVENT evt( TC_COMMAND, TA_ACTIVATE, "" ); // deactivate the active tool
|
||||
ProcessEvent( evt );
|
||||
}
|
||||
|
||||
void TOOL_MANAGER::ResetTools( TOOL_BASE::RESET_REASON aReason )
|
||||
{
|
||||
DeactivateTool();
|
||||
|
||||
BOOST_FOREACH( TOOL_BASE* tool, m_toolState | boost::adaptors::map_keys )
|
||||
{
|
||||
@@ -446,7 +450,7 @@ int TOOL_MANAGER::GetPriority( int aToolId ) const
|
||||
{
|
||||
int priority = 0;
|
||||
|
||||
for( std::deque<int>::const_iterator it = m_activeTools.begin(),
|
||||
for( std::list<TOOL_ID>::const_iterator it = m_activeTools.begin(),
|
||||
itEnd = m_activeTools.end(); it != itEnd; ++it )
|
||||
{
|
||||
if( *it == aToolId )
|
||||
@@ -490,9 +494,12 @@ optional<TOOL_EVENT> TOOL_MANAGER::ScheduleWait( TOOL_BASE* aTool,
|
||||
void TOOL_MANAGER::dispatchInternal( const TOOL_EVENT& aEvent )
|
||||
{
|
||||
// iterate over all registered tools
|
||||
BOOST_FOREACH( TOOL_ID toolId, m_activeTools )
|
||||
for( std::list<TOOL_ID>::iterator it = m_activeTools.begin();
|
||||
it != m_activeTools.end(); /* iteration is done inside */)
|
||||
{
|
||||
TOOL_STATE* st = m_toolIdIndex[toolId];
|
||||
std::list<TOOL_ID>::iterator curIt = it;
|
||||
TOOL_STATE* st = m_toolIdIndex[*it];
|
||||
++it; // it might be overwritten, if the tool is removed the m_activeTools list
|
||||
|
||||
// the tool state handler is waiting for events (i.e. called Wait() method)
|
||||
if( st->pendingWait )
|
||||
@@ -508,7 +515,10 @@ void TOOL_MANAGER::dispatchInternal( const TOOL_EVENT& aEvent )
|
||||
st->waitEvents.clear();
|
||||
|
||||
if( st->cofunc && !st->cofunc->Resume() )
|
||||
finishTool( st ); // The couroutine has finished
|
||||
{
|
||||
if( finishTool( st, false ) ) // The couroutine has finished
|
||||
it = m_activeTools.erase( curIt );
|
||||
}
|
||||
|
||||
// If the tool did not request to propagate
|
||||
// the event to other tools, we should stop it now
|
||||
@@ -636,8 +646,10 @@ void TOOL_MANAGER::dispatchContextMenu( const TOOL_EVENT& aEvent )
|
||||
}
|
||||
|
||||
|
||||
void TOOL_MANAGER::finishTool( TOOL_STATE* aState )
|
||||
bool TOOL_MANAGER::finishTool( TOOL_STATE* aState, bool aDeactivate )
|
||||
{
|
||||
bool shouldDeactivate = false;
|
||||
|
||||
// Reset VIEW_CONTROLS only if the most recent tool is finished
|
||||
if( m_activeTools.empty() || m_activeTools.front() == aState->theTool->GetId() )
|
||||
m_viewControls->Reset();
|
||||
@@ -645,14 +657,21 @@ void TOOL_MANAGER::finishTool( TOOL_STATE* aState )
|
||||
if( !aState->Pop() ) // if there are no other contexts saved on the stack
|
||||
{
|
||||
// find the tool and deactivate it
|
||||
std::deque<TOOL_ID>::iterator tool = std::find( m_activeTools.begin(), m_activeTools.end(),
|
||||
std::list<TOOL_ID>::iterator tool = std::find( m_activeTools.begin(), m_activeTools.end(),
|
||||
aState->theTool->GetId() );
|
||||
|
||||
if( tool != m_activeTools.end() )
|
||||
m_activeTools.erase( tool );
|
||||
{
|
||||
shouldDeactivate = true;
|
||||
|
||||
if( aDeactivate )
|
||||
m_activeTools.erase( tool );
|
||||
}
|
||||
}
|
||||
|
||||
aState->theTool->SetTransitions();
|
||||
|
||||
return shouldDeactivate;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -3,6 +3,8 @@
|
||||
*
|
||||
* Copyright (C) 2012 Torsten Hueter, torstenhtr <at> gmx.de
|
||||
* Copyright (C) 2013-2015 CERN
|
||||
* Copyright (C) 2012-2016 KiCad Developers, see AUTHORS.txt for contributors.
|
||||
*
|
||||
* @author Tomasz Wlostowski <tomasz.wlostowski@cern.ch>
|
||||
* @author Maciej Suminski <maciej.suminski@cern.ch>
|
||||
*
|
||||
@@ -96,20 +98,31 @@ void WX_VIEW_CONTROLS::onWheel( wxMouseEvent& aEvent )
|
||||
{
|
||||
const double wheelPanSpeed = 0.001;
|
||||
|
||||
if( aEvent.ControlDown() || aEvent.ShiftDown() )
|
||||
if( aEvent.ControlDown() || aEvent.ShiftDown() || m_enableMousewheelPan )
|
||||
{
|
||||
// Scrolling
|
||||
VECTOR2D scrollVec = m_view->ToWorld( m_view->GetScreenPixelSize(), false ) *
|
||||
( (double) aEvent.GetWheelRotation() * wheelPanSpeed );
|
||||
double scrollSpeed;
|
||||
int axis = aEvent.GetWheelAxis();
|
||||
double scrollX = 0.0;
|
||||
double scrollY = 0.0;
|
||||
|
||||
if( std::abs( scrollVec.x ) > std::abs( scrollVec.y ) )
|
||||
scrollSpeed = scrollVec.x;
|
||||
if ( m_enableMousewheelPan )
|
||||
{
|
||||
if ( axis == wxMOUSE_WHEEL_HORIZONTAL )
|
||||
scrollX = scrollVec.x;
|
||||
else
|
||||
scrollY = -scrollVec.y;
|
||||
}
|
||||
else
|
||||
scrollSpeed = scrollVec.y;
|
||||
{
|
||||
if ( aEvent.ControlDown() )
|
||||
scrollX = -scrollVec.x;
|
||||
else
|
||||
scrollY = -scrollVec.y;
|
||||
}
|
||||
|
||||
VECTOR2D delta( aEvent.ControlDown() ? -scrollSpeed : 0.0,
|
||||
aEvent.ShiftDown() ? -scrollSpeed : 0.0 );
|
||||
VECTOR2D delta( scrollX, scrollY );
|
||||
|
||||
m_view->SetCenter( m_view->GetCenter() + delta );
|
||||
}
|
||||
@@ -121,7 +134,7 @@ void WX_VIEW_CONTROLS::onWheel( wxMouseEvent& aEvent )
|
||||
int rotation = aEvent.GetWheelRotation();
|
||||
double zoomScale;
|
||||
|
||||
#ifdef __APPLE__
|
||||
#ifdef __WXMAC__
|
||||
// The following is to support Apple pointer devices (MagicMouse &
|
||||
// Macbook touchpad), which send events more frequently, but with smaller
|
||||
// wheel rotation.
|
||||
|
||||
@@ -56,6 +56,8 @@ set( CVPCB_SRCS
|
||||
if( MINGW )
|
||||
# CVPCB_RESOURCES variable is set by the macro.
|
||||
mingw_resource_compiler( cvpcb )
|
||||
else()
|
||||
set( CVPCB_RESOURCES cvpcb.rc )
|
||||
endif()
|
||||
|
||||
|
||||
|
||||
@@ -199,11 +199,20 @@ void FOOTPRINTS_LISTBOX::OnLeftClick( wxListEvent& event )
|
||||
if( m_footprintList.IsEmpty() )
|
||||
return;
|
||||
|
||||
// On some plateforms (OSX) the focus is lost when the viewers (fp and 3D viewers)
|
||||
// are opened and refreshed when a new footprint is selected.
|
||||
// If the listbox has the focus before selecting a new footprint, it will be forced
|
||||
// after selection.
|
||||
bool hasFocus = HasFocus();
|
||||
|
||||
// If the footprint view window is displayed, update the footprint.
|
||||
if( GetParent()->GetFpViewerFrame() )
|
||||
GetParent()->CreateScreenCmp();
|
||||
|
||||
GetParent()->DisplayStatus();
|
||||
|
||||
if( hasFocus )
|
||||
SetFocus();
|
||||
}
|
||||
|
||||
|
||||
|
||||
+6
-1
@@ -2,7 +2,7 @@
|
||||
* This program source code file is part of KiCad, a free EDA CAD application.
|
||||
*
|
||||
* Copyright (C) 2015 Jean-Pierre Charras, jean-pierre.charras
|
||||
* Copyright (C) 2011 Wayne Stambaugh <stambaughw@verizon.net>
|
||||
* Copyright (C) 2011-2016 Wayne Stambaugh <stambaughw@verizon.net>
|
||||
* Copyright (C) 1992-2011 KiCad Developers, see AUTHORS.txt for contributors.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
@@ -480,6 +480,7 @@ void CVPCB_MAINFRAME::OnEditFootprintLibraryTable( wxCommandEvent& aEvent )
|
||||
|
||||
if( tableChanged )
|
||||
{
|
||||
wxBusyCursor dummy;
|
||||
BuildLIBRARY_LISTBOX();
|
||||
m_footprints.ReadFootprintFiles( Prj().PcbFootprintLibs() );
|
||||
}
|
||||
@@ -689,7 +690,11 @@ bool CVPCB_MAINFRAME::LoadFootprintFiles()
|
||||
return false;
|
||||
}
|
||||
|
||||
{
|
||||
wxBusyCursor dummy; // Let the user know something is happening.
|
||||
|
||||
m_footprints.ReadFootprintFiles( fptbl );
|
||||
}
|
||||
|
||||
if( m_footprints.GetErrorCount() )
|
||||
{
|
||||
|
||||
@@ -40,7 +40,7 @@ DIALOG_FOOTPRINTS_DISPLAY_OPTIONS_BASE::DIALOG_FOOTPRINTS_DISPLAY_OPTIONS_BASE(
|
||||
wxStaticBoxSizer* sbSizerViewOpt;
|
||||
sbSizerViewOpt = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Pan and Zoom") ), wxVERTICAL );
|
||||
|
||||
m_IsZoomNoCenter = new wxCheckBox( this, wxID_ANY, _("Do not center and warp cusor on zoom"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_IsZoomNoCenter = new wxCheckBox( this, wxID_ANY, _("Do not center and warp cursor on zoom"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_IsZoomNoCenter->SetToolTip( _("Keep the cursor at its current location when zooming") );
|
||||
|
||||
sbSizerViewOpt->Add( m_IsZoomNoCenter, 0, wxEXPAND|wxALL, 5 );
|
||||
|
||||
@@ -513,7 +513,7 @@
|
||||
<property name="gripper">0</property>
|
||||
<property name="hidden">0</property>
|
||||
<property name="id">wxID_ANY</property>
|
||||
<property name="label">Do not center and warp cusor on zoom</property>
|
||||
<property name="label">Do not center and warp cursor on zoom</property>
|
||||
<property name="max_size"></property>
|
||||
<property name="maximize_button">0</property>
|
||||
<property name="maximum_size"></property>
|
||||
|
||||
@@ -1,191 +1,141 @@
|
||||
( page_layout
|
||||
( setup (textsize 1.5 1.5) (linewidth 0.15) (textlinewidth 0.15) )
|
||||
( rect (comment "rect around the title block") (linewidth 0.15) (start 110 34) (end 2 2) )
|
||||
( rect (start 0 0 ltcorner) (end 0 0 rbcorner) (repeat 2) (incrx 2) (incry 2) )
|
||||
( line (start 50 2 ltcorner) (end 50 0 ltcorner) (repeat 30) (incrx 50) )
|
||||
( tbtext "1" (pos 25 1 ltcorner) (font (size 1.3 1.3))(repeat 100) (incrx 50) )
|
||||
( line (start 50 2 lbcorner) (end 50 0 lbcorner) (repeat 30) (incrx 50) )
|
||||
( tbtext "1" (pos 25 1 lbcorner) (font (size 1.3 1.3)) (repeat 100) (incrx 50) )
|
||||
( line (start 0 50 ltcorner) (end 2 50 ltcorner) (repeat 30) (incry 50) )
|
||||
( tbtext "A" (pos 1 25 ltcorner) (font (size 1.3 1.3))
|
||||
(justify center)(repeat 100) (incry 50) )
|
||||
( line (start 0 50 rtcorner) (end 2 50 rtcorner) (repeat 30) (incry 50) )
|
||||
( tbtext "A" (pos 1 25 rtcorner) (font (size 1.3 1.3))
|
||||
(justify center) (repeat 100) (incry 50) )
|
||||
( tbtext "Date: %D" (pos 87 6.9) )
|
||||
( line (start 110 5.5) end 2 5.5) )
|
||||
( tbtext "%K" (pos 109 4.1) (comment "Kicad version" ) )
|
||||
( line (start 110 8.5) end 2 8.5) )
|
||||
( tbtext "Rev: %R" (pos 24 6.9)(font bold)(justify left) )
|
||||
( tbtext "Size: %Z" (comment "Paper format name")(pos 109 6.9) )
|
||||
( tbtext "Id: %S/%N" (comment "Sheet id")(pos 24 4.1) )
|
||||
( line (start 110 12.5) end 2 12.5) )
|
||||
( tbtext "Title: %T" (pos 109 10.7)(font bold (size 2 2)) )
|
||||
( tbtext "File: %F" (pos 109 14.3) )
|
||||
( line (start 110 18.5) end 2 18.5) )
|
||||
( tbtext "Sheet: %P" (pos 109 17) )
|
||||
( tbtext "%Y" (comment "Company name") (pos 109 20)(font bold) )
|
||||
( tbtext "%C0" (comment "Comment 0") (pos 109 23) )
|
||||
( tbtext "%C1" (comment "Comment 1") (pos 109 26) )
|
||||
( tbtext "%C2" (comment "Comment 2") (pos 109 29) )
|
||||
( tbtext "%C3" (comment "Comment 3") (pos 109 32) )
|
||||
( line (start 90 8.5) (end 90 5.5) )
|
||||
( line (start 26 8.5) (end 26 2) )
|
||||
|
||||
( rect (comment "rect around the logo") (linewidth 0.15) (start 157 34) (end 110 2) )
|
||||
(polygon (pos 134 18 rbcorner) (rotate 20) (linewidth 0.00254)
|
||||
(pts (xy 20.574 8.382) (xy 19.9009 8.382) (xy 19.9009 6.26364) (xy 19.7485 5.98932)
|
||||
(xy 19.71802 5.92328) (xy 19.69262 5.83946) (xy 19.66976 5.72262) (xy 19.65198 5.56006)
|
||||
(xy 19.63674 5.33908) (xy 19.6215 5.04952) (xy 19.61134 4.67614) (xy 19.60372 4.20624)
|
||||
(xy 19.5961 3.62712) (xy 19.58848 2.92862) (xy 19.5834 2.09296) (xy 19.57832 1.11252)
|
||||
(xy 19.57578 0.27432) (xy 19.55038 -5.16636) (xy 18.15592 -5.16636) (xy 17.69364 -5.16382)
|
||||
(xy 17.29232 -5.15874) (xy 16.98752 -5.15112) (xy 16.80464 -5.14096) (xy 16.764 -5.13334)
|
||||
(xy 16.79194 -5.0419) (xy 16.8656 -4.85648) (xy 16.891 -4.79806) (xy 16.93672 -4.64312)
|
||||
(xy 16.97228 -4.42468) (xy 16.99514 -4.11734) (xy 17.01038 -3.69824) (xy 17.01546 -3.14198)
|
||||
(xy 17.018 -2.82702) (xy 17.01546 -2.25806) (xy 17.01292 -1.83896) (xy 17.0053 -1.5494)
|
||||
(xy 16.99006 -1.36652) (xy 16.9672 -1.27508) (xy 16.93164 -1.25222) (xy 16.88592 -1.28016)
|
||||
(xy 16.8656 -1.29794) (xy 16.47444 -1.5494) (xy 15.96644 -1.71704) (xy 15.3797 -1.7907)
|
||||
(xy 15.2527 -1.79324) (xy 14.53134 -1.71958) (xy 13.89634 -1.50622) (xy 13.35278 -1.14808)
|
||||
(xy 12.9032 -0.65024) (xy 12.5476 -0.0127) (xy 12.28598 0.762) (xy 12.22756 1.016)
|
||||
(xy 12.1539 1.50368) (xy 12.11326 2.07264) (xy 12.10564 2.667) (xy 12.13104 3.23342)
|
||||
(xy 12.18692 3.71348) (xy 12.2301 3.91668) (xy 12.49934 4.66344) (xy 12.88288 5.2959)
|
||||
(xy 13.36802 5.8039) (xy 13.94968 6.17982) (xy 14.39164 6.35508) (xy 14.76248 6.41858)
|
||||
(xy 15.21968 6.4262) (xy 15.69466 6.38302) (xy 16.11376 6.29158) (xy 16.20266 6.2611)
|
||||
(xy 16.49984 6.1341) (xy 16.76146 5.99694) (xy 16.87576 5.92074) (xy 17.06118 5.7912)
|
||||
(xy 17.15262 5.78104) (xy 17.1831 5.9055) (xy 17.18564 6.00964) (xy 17.18564 6.26364)
|
||||
(xy 18.542 6.26364) (xy 19.9009 6.26364) (xy 19.9009 8.382) (xy 11.51636 8.382)
|
||||
(xy 11.51636 6.26364) (xy 11.3665 6.03504) (xy 11.32586 5.9563) (xy 11.2903 5.84962)
|
||||
(xy 11.26236 5.69468) (xy 11.24204 5.4737) (xy 11.22172 5.17144) (xy 11.20648 4.76504)
|
||||
(xy 11.19124 4.2418) (xy 11.17854 3.57886) (xy 11.16838 3.00736) (xy 11.1506 2.16408)
|
||||
(xy 11.13282 1.47066) (xy 11.10996 0.90932) (xy 11.07694 0.45974) (xy 11.03122 0.10414)
|
||||
(xy 10.97026 -0.1778) (xy 10.89152 -0.40386) (xy 10.78738 -0.59436) (xy 10.6553 -0.76962)
|
||||
(xy 10.49274 -0.94234) (xy 10.40892 -1.0287) (xy 9.93394 -1.38684) (xy 9.34212 -1.63576)
|
||||
(xy 8.64616 -1.77546) (xy 7.85622 -1.80086) (xy 6.99262 -1.7145) (xy 6.31952 -1.57988)
|
||||
(xy 5.92836 -1.48844) (xy 5.58038 -1.41478) (xy 5.31622 -1.36906) (xy 5.19938 -1.35636)
|
||||
(xy 5.0419 -1.32588) (xy 4.99364 -1.27254) (xy 5.02666 -1.1557) (xy 5.10794 -0.92964)
|
||||
(xy 5.22224 -0.635) (xy 5.35432 -0.31496) (xy 5.48132 -0.01524) (xy 5.588 0.22098)
|
||||
(xy 5.65658 0.35052) (xy 5.6642 0.36068) (xy 5.76834 0.36322) (xy 5.98424 0.31496)
|
||||
(xy 6.26872 0.22098) (xy 6.3119 0.2032) (xy 6.83768 0.04572) (xy 7.3406 -0.03048)
|
||||
(xy 7.79018 -0.0254) (xy 8.14324 0.0635) (xy 8.2677 0.13462) (xy 8.49376 0.40132)
|
||||
(xy 8.60044 0.68326) (xy 8.69188 1.05664) (xy 7.66826 1.10744) (xy 6.97738 1.16078)
|
||||
(xy 6.41096 1.24968) (xy 5.92836 1.3843) (xy 5.49148 1.5748) (xy 5.24764 1.70942)
|
||||
(xy 4.77012 2.08534) (xy 4.4196 2.54762) (xy 4.19608 3.0734) (xy 4.09448 3.63474)
|
||||
(xy 4.11988 4.20878) (xy 4.26974 4.76758) (xy 4.54406 5.28828) (xy 4.9403 5.74294)
|
||||
(xy 5.31876 6.02742) (xy 5.85978 6.2738) (xy 6.47954 6.40588) (xy 7.12724 6.42112)
|
||||
(xy 7.74954 6.30936) (xy 7.75208 6.30936) (xy 8.06958 6.18744) (xy 8.37438 6.02742)
|
||||
(xy 8.46582 5.96646) (xy 8.763 5.74802) (xy 8.7884 6.00456) (xy 8.8138 6.26364)
|
||||
(xy 10.16508 6.26364) (xy 11.51636 6.26364) (xy 11.51636 8.382) (xy 4.13766 8.382)
|
||||
(xy 4.13766 5.44068) (xy 4.10972 5.36702) (xy 4.0132 5.1816) (xy 3.86334 4.91744)
|
||||
(xy 3.68046 4.6101) (xy 3.48742 4.29006) (xy 3.29946 3.99034) (xy 3.1369 3.74142)
|
||||
(xy 3.10896 3.70078) (xy 2.9464 3.46456) (xy 2.65684 3.7211) (xy 2.20726 4.05892)
|
||||
(xy 1.76276 4.26212) (xy 1.27254 4.34848) (xy 1.05664 4.3561) (xy 0.70104 4.34594)
|
||||
(xy 0.43942 4.29768) (xy 0.19558 4.19862) (xy 0.05842 4.11988) (xy -0.38862 3.76682)
|
||||
(xy -0.75946 3.28168) (xy -1.03378 2.7051) (xy -1.07188 2.58572) (xy -1.143 2.30378)
|
||||
(xy -1.19126 1.98374) (xy -1.21666 1.58496) (xy -1.22936 1.0668) (xy -1.22936 0.889)
|
||||
(xy -1.22428 0.381) (xy -1.21158 0) (xy -1.17856 -0.30226) (xy -1.12776 -0.56896)
|
||||
(xy -1.04902 -0.84328) (xy -1.02108 -0.92964) (xy -0.75438 -1.53416) (xy -0.3937 -2.01676)
|
||||
(xy 0.04318 -2.36474) (xy 0.54864 -2.57048) (xy 0.99822 -2.62636) (xy 1.54686 -2.55524)
|
||||
(xy 2.05486 -2.35712) (xy 2.35712 -2.15138) (xy 2.5527 -1.98882) (xy 2.68986 -1.88468)
|
||||
(xy 2.7305 -1.86436) (xy 2.794 -1.9304) (xy 2.92608 -2.10312) (xy 3.10388 -2.35458)
|
||||
(xy 3.30962 -2.65176) (xy 3.51536 -2.96164) (xy 3.70586 -3.25374) (xy 3.85318 -3.4925)
|
||||
(xy 3.94208 -3.64998) (xy 3.95732 -3.69316) (xy 3.86588 -3.74396) (xy 3.66268 -3.85064)
|
||||
(xy 3.3782 -3.99288) (xy 3.22326 -4.06654) (xy 2.54508 -4.36118) (xy 1.92532 -4.5466)
|
||||
(xy 1.31318 -4.64058) (xy 0.87122 -4.65836) (xy 0.02286 -4.59232) (xy -0.7493 -4.38912)
|
||||
(xy -1.46558 -4.0386) (xy -2.15392 -3.5306) (xy -2.38252 -3.32232) (xy -2.9464 -2.70764)
|
||||
(xy -3.37312 -2.04978) (xy -3.6957 -1.30302) (xy -3.82524 -0.87376) (xy -3.94208 -0.26924)
|
||||
(xy -4.00304 0.43434) (xy -4.00812 1.17348) (xy -3.95986 1.88976) (xy -3.85572 2.52222)
|
||||
(xy -3.82524 2.64922) (xy -3.51028 3.53314) (xy -3.07848 4.32562) (xy -2.53746 5.0165)
|
||||
(xy -1.905 5.588) (xy -1.19126 6.02488) (xy -0.44958 6.30682) (xy 0.01016 6.39064)
|
||||
(xy 0.57404 6.4262) (xy 1.17856 6.41604) (xy 1.76276 6.3627) (xy 2.26822 6.26364)
|
||||
(xy 2.286 6.25856) (xy 2.72288 6.11124) (xy 3.23088 5.90296) (xy 3.73888 5.66166)
|
||||
(xy 4.13766 5.44068) (xy 4.13766 8.382) (xy 0 8.382) (xy -4.74218 8.382)
|
||||
(xy -4.74218 1.7653) (xy -4.74218 0.71882) (xy -4.74218 -0.55118) (xy -4.74218 -1.66116)
|
||||
(xy -4.74218 -2.62382) (xy -4.74472 -3.44678) (xy -4.7498 -4.14528) (xy -4.75742 -4.7244)
|
||||
(xy -4.77012 -5.19938) (xy -4.79044 -5.57784) (xy -4.81584 -5.87248) (xy -4.84886 -6.09346)
|
||||
(xy -4.8895 -6.2484) (xy -4.94284 -6.35254) (xy -5.0038 -6.4135) (xy -5.07746 -6.44144)
|
||||
(xy -5.16382 -6.44906) (xy -5.26542 -6.44398) (xy -5.37972 -6.4389) (xy -5.40512 -6.4389)
|
||||
(xy -5.6515 -6.4516) (xy -5.79374 -6.51002) (xy -5.90042 -6.65734) (xy -5.969 -6.79958)
|
||||
(xy -6.23062 -7.1755) (xy -6.57606 -7.4295) (xy -6.97738 -7.56158) (xy -7.40156 -7.57682)
|
||||
(xy -7.81558 -7.47014) (xy -8.1915 -7.24662) (xy -8.49376 -6.90626) (xy -8.58774 -6.73354)
|
||||
(xy -8.72998 -6.43636) (xy -14.05382 -6.43636) (xy -15.14602 -6.43636) (xy -16.08074 -6.43382)
|
||||
(xy -16.87068 -6.43128) (xy -17.52854 -6.42874) (xy -18.06702 -6.42112) (xy -18.49628 -6.4135)
|
||||
(xy -18.83156 -6.40334) (xy -19.08302 -6.39064) (xy -19.2659 -6.3754) (xy -19.38782 -6.35508)
|
||||
(xy -19.46402 -6.33222) (xy -19.50974 -6.30428) (xy -19.50974 -6.30174) (xy -19.53514 -6.26618)
|
||||
(xy -19.55546 -6.1976) (xy -19.57324 -6.08838) (xy -19.59102 -5.92582) (xy -19.60372 -5.69976)
|
||||
(xy -19.61388 -5.40004) (xy -19.6215 -5.0165) (xy -19.62912 -4.53644) (xy -19.6342 -3.95224)
|
||||
(xy -19.63928 -3.24866) (xy -19.64182 -2.41808) (xy -19.64182 -1.4478) (xy -19.64436 -0.32766)
|
||||
(xy -19.64436 0.71882) (xy -19.64436 1.9685) (xy -19.64182 3.06324) (xy -19.64182 4.00812)
|
||||
(xy -19.63928 4.81584) (xy -19.6342 5.49656) (xy -19.62912 6.06552) (xy -19.6215 6.52526)
|
||||
(xy -19.61134 6.8961) (xy -19.60118 7.18058) (xy -19.58848 7.39394) (xy -19.5707 7.54634)
|
||||
(xy -19.55292 7.64794) (xy -19.53006 7.71144) (xy -19.50974 7.73938) (xy -19.47418 7.76224)
|
||||
(xy -19.4056 7.7851) (xy -19.29892 7.80288) (xy -19.1389 7.81812) (xy -18.91538 7.83082)
|
||||
(xy -18.62074 7.84098) (xy -18.24228 7.85114) (xy -17.76984 7.85622) (xy -17.1958 7.86384)
|
||||
(xy -16.50238 7.86638) (xy -15.68704 7.86892) (xy -14.732 7.87146) (xy -13.63218 7.87146)
|
||||
(xy -12.37488 7.87146) (xy -12.192 7.874) (xy -10.91438 7.87146) (xy -9.79424 7.87146)
|
||||
(xy -8.82142 7.86892) (xy -7.98576 7.86638) (xy -7.2771 7.86384) (xy -6.68782 7.85876)
|
||||
(xy -6.20014 7.85114) (xy -5.81152 7.84352) (xy -5.50672 7.83336) (xy -5.27304 7.81812)
|
||||
(xy -5.1054 7.80542) (xy -4.9911 7.78764) (xy -4.91998 7.76732) (xy -4.87934 7.74192)
|
||||
(xy -4.8768 7.73938) (xy -4.8514 7.70128) (xy -4.83108 7.6327) (xy -4.8133 7.52348)
|
||||
(xy -4.79552 7.36092) (xy -4.78282 7.1374) (xy -4.77266 6.83768) (xy -4.76504 6.45414)
|
||||
(xy -4.75742 5.97408) (xy -4.75234 5.38734) (xy -4.74726 4.6863) (xy -4.74472 3.85318)
|
||||
(xy -4.74472 2.88544) (xy -4.74218 1.7653) (xy -4.74218 8.382) (xy -20.574 8.382)
|
||||
(xy -20.574 0) (xy -20.574 -8.382) (xy 0 -8.382) (xy 20.574 -8.382)
|
||||
(xy 20.574 0) (xy 20.574 8.382) (xy 20.574 8.382))
|
||||
(pts (xy -9.4742 6.26364) (xy -11.25728 6.26364) (xy -13.04036 6.26364) (xy -13.04036 6.0071)
|
||||
(xy -13.07846 5.76072) (xy -13.17752 5.48386) (xy -13.20038 5.4356) (xy -13.28674 5.29336)
|
||||
(xy -13.45692 5.0419) (xy -13.68806 4.70662) (xy -13.96746 4.31292) (xy -14.27226 3.88112)
|
||||
(xy -14.58976 3.4417) (xy -14.8971 3.02006) (xy -15.1765 2.63652) (xy -15.41526 2.31902)
|
||||
(xy -15.58798 2.09296) (xy -15.67942 1.98882) (xy -15.7099 2.03454) (xy -15.73022 2.24282)
|
||||
(xy -15.74038 2.61874) (xy -15.74292 3.15976) (xy -15.7353 3.76682) (xy -15.72514 4.37896)
|
||||
(xy -15.71244 4.84886) (xy -15.69974 5.19684) (xy -15.67688 5.45084) (xy -15.64894 5.63372)
|
||||
(xy -15.6083 5.76834) (xy -15.55496 5.88518) (xy -15.5194 5.94614) (xy -15.33144 6.26364)
|
||||
(xy -16.96974 6.26364) (xy -18.61058 6.26364) (xy -18.45056 5.94868) (xy -18.415 5.87502)
|
||||
(xy -18.38706 5.78612) (xy -18.36166 5.67182) (xy -18.34134 5.51688) (xy -18.3261 5.30606)
|
||||
(xy -18.3134 5.02666) (xy -18.30324 4.66598) (xy -18.29816 4.20624) (xy -18.29308 3.63728)
|
||||
(xy -18.29054 2.94386) (xy -18.29054 2.11328) (xy -18.29054 1.12776) (xy -18.288 0.889)
|
||||
(xy -18.29054 -0.13208) (xy -18.29054 -0.99568) (xy -18.29308 -1.71958) (xy -18.29562 -2.31394)
|
||||
(xy -18.30324 -2.79654) (xy -18.31086 -3.18008) (xy -18.32356 -3.47472) (xy -18.3388 -3.70078)
|
||||
(xy -18.35658 -3.86588) (xy -18.37944 -3.9878) (xy -18.40738 -4.08178) (xy -18.4404 -4.15798)
|
||||
(xy -18.45056 -4.17322) (xy -18.61058 -4.48818) (xy -17.01038 -4.48818) (xy -16.51 -4.48564)
|
||||
(xy -16.07566 -4.48056) (xy -15.73022 -4.4704) (xy -15.49908 -4.4577) (xy -15.41018 -4.44246)
|
||||
(xy -15.44574 -4.3434) (xy -15.53464 -4.16052) (xy -15.55496 -4.12496) (xy -15.61084 -3.9878)
|
||||
(xy -15.65402 -3.7973) (xy -15.6845 -3.52806) (xy -15.70736 -3.15468) (xy -15.72514 -2.64922)
|
||||
(xy -15.73276 -2.37236) (xy -15.75054 -1.70434) (xy -15.75816 -1.20396) (xy -15.748 -0.86106)
|
||||
(xy -15.70228 -0.6731) (xy -15.61084 -0.63754) (xy -15.46098 -0.74422) (xy -15.24 -0.99314)
|
||||
(xy -14.93266 -1.37668) (xy -14.5288 -1.8923) (xy -14.51102 -1.91516) (xy -14.04112 -2.51714)
|
||||
(xy -13.67028 -3.00482) (xy -13.39088 -3.39344) (xy -13.18768 -3.70078) (xy -13.0556 -3.94208)
|
||||
(xy -12.9794 -4.13004) (xy -12.95654 -4.28244) (xy -12.954 -4.29768) (xy -12.954 -4.48818)
|
||||
(xy -11.23696 -4.48818) (xy -9.51992 -4.48818) (xy -10.07364 -3.91668) (xy -10.25398 -3.7211)
|
||||
(xy -10.50544 -3.43154) (xy -10.81278 -3.06832) (xy -11.1633 -2.64922) (xy -11.54176 -2.19202)
|
||||
(xy -11.93038 -1.71704) (xy -12.319 -1.23952) (xy -12.68476 -0.78232) (xy -13.02004 -0.36068)
|
||||
(xy -13.30452 0.00254) (xy -13.5255 0.2921) (xy -13.66774 0.49022) (xy -13.716 0.57404)
|
||||
(xy -13.66774 0.66294) (xy -13.53058 0.86868) (xy -13.31976 1.17348) (xy -13.04798 1.55702)
|
||||
(xy -12.7254 2.00406) (xy -12.3698 2.49428) (xy -11.99388 3.00736) (xy -11.61034 3.5306)
|
||||
(xy -11.23442 4.0386) (xy -10.87628 4.51866) (xy -10.55116 4.95046) (xy -10.27176 5.31622)
|
||||
(xy -10.05332 5.59562) (xy -9.91108 5.76834) (xy -9.4742 6.26364) (xy -9.4742 6.26364))
|
||||
(pts (xy -5.75818 6.23316) (xy -5.83946 6.24332) (xy -6.06044 6.25094) (xy -6.39826 6.25856)
|
||||
(xy -6.82498 6.26364) (xy -7.239 6.26364) (xy -7.71906 6.2611) (xy -8.13562 6.25856)
|
||||
(xy -8.4582 6.25094) (xy -8.6614 6.24078) (xy -8.72236 6.23316) (xy -8.69188 6.14172)
|
||||
(xy -8.61822 5.95376) (xy -8.59536 5.89534) (xy -8.5598 5.72262) (xy -8.52932 5.40512)
|
||||
(xy -8.50392 4.9657) (xy -8.4836 4.42468) (xy -8.46836 3.81) (xy -8.4582 3.14198)
|
||||
(xy -8.45566 2.44602) (xy -8.45566 1.74498) (xy -8.46074 1.06172) (xy -8.47344 0.42164)
|
||||
(xy -8.49122 -0.15494) (xy -8.51408 -0.64262) (xy -8.54202 -1.01854) (xy -8.57504 -1.25984)
|
||||
(xy -8.59028 -1.31572) (xy -8.7122 -1.61036) (xy -7.36346 -1.61036) (xy -6.01218 -1.61036)
|
||||
(xy -6.01218 1.99136) (xy -6.01218 2.8956) (xy -6.00964 3.6449) (xy -6.00456 4.2545)
|
||||
(xy -5.9944 4.74472) (xy -5.98424 5.12572) (xy -5.96646 5.41274) (xy -5.94614 5.6261)
|
||||
(xy -5.92074 5.77596) (xy -5.89026 5.88264) (xy -5.88518 5.89534) (xy -5.8039 6.09854)
|
||||
(xy -5.76072 6.22046) (xy -5.75818 6.23316) (xy -5.75818 6.23316))
|
||||
(pts (xy 8.636 3.4544) (xy 8.62838 3.80238) (xy 8.60298 4.0259) (xy 8.54964 4.17322)
|
||||
(xy 8.45312 4.28752) (xy 8.4455 4.29514) (xy 8.08736 4.52628) (xy 7.66826 4.64058)
|
||||
(xy 7.24408 4.62788) (xy 7.05866 4.572) (xy 6.77672 4.37388) (xy 6.5913 4.07924)
|
||||
(xy 6.5405 3.74142) (xy 6.54558 3.70078) (xy 6.60146 3.45186) (xy 6.68782 3.25882)
|
||||
(xy 6.70052 3.24104) (xy 6.96468 3.03784) (xy 7.35076 2.88798) (xy 7.81812 2.8067)
|
||||
(xy 8.0645 2.794) (xy 8.636 2.794) (xy 8.636 3.4544) (xy 8.636 3.4544))
|
||||
(pts (xy 17.018 4.04876) (xy 16.7259 4.2291) (xy 16.34744 4.3942) (xy 15.94358 4.46024)
|
||||
(xy 15.56766 4.4196) (xy 15.35938 4.3307) (xy 15.13332 4.15544) (xy 14.9733 3.93192)
|
||||
(xy 14.86408 3.6322) (xy 14.80058 3.23342) (xy 14.77518 2.70764) (xy 14.77264 2.45364)
|
||||
(xy 14.79296 1.77546) (xy 14.859 1.23952) (xy 14.97076 0.82296) (xy 15.1384 0.508)
|
||||
(xy 15.33652 0.29718) (xy 15.66418 0.127) (xy 16.06042 0.08382) (xy 16.48714 0.17018)
|
||||
(xy 16.68018 0.254) (xy 17.018 0.42672) (xy 17.018 2.23774) (xy 17.018 4.04876)
|
||||
(xy 17.018 4.04876)) )
|
||||
(page_layout
|
||||
(setup (textsize 1.5 1.5)(linewidth 0.15)(textlinewidth 0.15)
|
||||
(left_margin 10)(right_margin 10)(top_margin 10)(bottom_margin 10))
|
||||
(rect (name rect1:Rect) (start 110 34) (end 2 2))
|
||||
(rect (name rect2:Rect) (start 0 0 ltcorner) (end 0 0) (repeat 2) (incrx 2) (incry 2))
|
||||
(line (name segm1:Line) (start 50 2 ltcorner) (end 50 0 ltcorner) (repeat 30) (incrx 50))
|
||||
(tbtext 1 (name text1:Text) (pos 25 1 ltcorner) (font (size 1.3 1.3)) (repeat 100) (incrx 50))
|
||||
(line (name segm2:Line) (start 50 2 lbcorner) (end 50 0 lbcorner) (repeat 30) (incrx 50))
|
||||
(tbtext 1 (name text2:Text) (pos 25 1 lbcorner) (font (size 1.3 1.3)) (repeat 100) (incrx 50))
|
||||
(line (name segm3:Line) (start 0 50 ltcorner) (end 2 50 ltcorner) (repeat 30) (incry 50))
|
||||
(tbtext A (name text3:Text) (pos 1 25 ltcorner) (font (size 1.3 1.3)) (justify center) (repeat 100) (incry 50))
|
||||
(line (name segm4:Line) (start 0 50 rtcorner) (end 2 50 rtcorner) (repeat 30) (incry 50))
|
||||
(tbtext A (name text4:Text) (pos 1 25 rtcorner) (font (size 1.3 1.3)) (justify center) (repeat 100) (incry 50))
|
||||
(tbtext "Date: %D" (name text5:Text) (pos 87 6.9))
|
||||
(line (name segm5:Line) (start 110 5.5) (end 2 5.5))
|
||||
(tbtext %K (name text6:Text) (pos 109 4.1))
|
||||
(line (name segm6:Line) (start 110 8.5) (end 2 8.5))
|
||||
(tbtext "Rev: %R" (name text7:Text) (pos 24 6.9) (font bold))
|
||||
(tbtext "Size: %Z" (name text8:Text) (pos 109 6.9))
|
||||
(tbtext "Id: %S/%N" (name text9:Text) (pos 24 4.1))
|
||||
(line (name segm7:Line) (start 110 12.5) (end 2 12.5))
|
||||
(tbtext "Title: %T" (name text10:Text) (pos 109 10.7) (font (size 2 2) bold))
|
||||
(tbtext "File: %F" (name text11:Text) (pos 109 14.3))
|
||||
(line (name segm8:Line) (start 110 18.5) (end 2 18.5))
|
||||
(tbtext "Sheet: %P" (name text12:Text) (pos 109 17))
|
||||
(tbtext %Y (name text13:Text) (pos 109 20) (font bold))
|
||||
(tbtext %C0 (name text14:Text) (pos 109 23))
|
||||
(tbtext %C1 (name text15:Text) (pos 109 26))
|
||||
(tbtext %C2 (name text16:Text) (pos 109 29))
|
||||
(tbtext %C3 (name text17:Text) (pos 109 32))
|
||||
(line (name segm9:Line) (start 90 8.5) (end 90 5.5))
|
||||
(line (name segm10:Line) (start 26 8.5) (end 26 2))
|
||||
(rect (name rect3:Rect) (start 157 34) (end 110 2))
|
||||
(polygon (name poly1:Poly) (pos 134 18) (rotate 20) (linewidth 0.00254)
|
||||
(pts (xy 20.574 8.382) (xy 19.9009 8.382) (xy 19.9009 6.26364) (xy 19.7485 5.98932) (xy 19.71802 5.92328)
|
||||
(xy 19.69262 5.83946) (xy 19.66976 5.72262) (xy 19.65198 5.56006) (xy 19.63674 5.33908) (xy 19.6215 5.04952) (xy 19.61134 4.67614)
|
||||
(xy 19.60372 4.20624) (xy 19.5961 3.62712) (xy 19.58848 2.92862) (xy 19.5834 2.09296) (xy 19.57832 1.11252) (xy 19.57578 0.27432)
|
||||
(xy 19.55038 -5.16636) (xy 18.15592 -5.16636) (xy 17.69364 -5.16382) (xy 17.29232 -5.15874) (xy 16.98752 -5.15112) (xy 16.80464 -5.14096)
|
||||
(xy 16.764 -5.13334) (xy 16.79194 -5.0419) (xy 16.8656 -4.85648) (xy 16.891 -4.79806) (xy 16.93672 -4.64312) (xy 16.97228 -4.42468)
|
||||
(xy 16.99514 -4.11734) (xy 17.01038 -3.69824) (xy 17.01546 -3.14198) (xy 17.018 -2.82702) (xy 17.01546 -2.25806) (xy 17.01292 -1.83896)
|
||||
(xy 17.0053 -1.5494) (xy 16.99006 -1.36652) (xy 16.9672 -1.27508) (xy 16.93164 -1.25222) (xy 16.88592 -1.28016) (xy 16.8656 -1.29794)
|
||||
(xy 16.47444 -1.5494) (xy 15.96644 -1.71704) (xy 15.3797 -1.7907) (xy 15.2527 -1.79324) (xy 14.53134 -1.71958) (xy 13.89634 -1.50622)
|
||||
(xy 13.35278 -1.14808) (xy 12.9032 -0.65024) (xy 12.5476 -0.0127) (xy 12.28598 0.762) (xy 12.22756 1.016) (xy 12.1539 1.50368)
|
||||
(xy 12.11326 2.07264) (xy 12.10564 2.667) (xy 12.13104 3.23342) (xy 12.18692 3.71348) (xy 12.2301 3.91668) (xy 12.49934 4.66344)
|
||||
(xy 12.88288 5.2959) (xy 13.36802 5.8039) (xy 13.94968 6.17982) (xy 14.39164 6.35508) (xy 14.76248 6.41858) (xy 15.21968 6.4262)
|
||||
(xy 15.69466 6.38302) (xy 16.11376 6.29158) (xy 16.20266 6.2611) (xy 16.49984 6.1341) (xy 16.76146 5.99694) (xy 16.87576 5.92074)
|
||||
(xy 17.06118 5.7912) (xy 17.15262 5.78104) (xy 17.1831 5.9055) (xy 17.18564 6.00964) (xy 17.18564 6.26364) (xy 18.542 6.26364)
|
||||
(xy 19.9009 6.26364) (xy 19.9009 8.382) (xy 11.51636 8.382) (xy 11.51636 6.26364) (xy 11.3665 6.03504) (xy 11.32586 5.9563)
|
||||
(xy 11.2903 5.84962) (xy 11.26236 5.69468) (xy 11.24204 5.4737) (xy 11.22172 5.17144) (xy 11.20648 4.76504) (xy 11.19124 4.2418)
|
||||
(xy 11.17854 3.57886) (xy 11.16838 3.00736) (xy 11.1506 2.16408) (xy 11.13282 1.47066) (xy 11.10996 0.90932) (xy 11.07694 0.45974)
|
||||
(xy 11.03122 0.10414) (xy 10.97026 -0.1778) (xy 10.89152 -0.40386) (xy 10.78738 -0.59436) (xy 10.6553 -0.76962) (xy 10.49274 -0.94234)
|
||||
(xy 10.40892 -1.0287) (xy 9.93394 -1.38684) (xy 9.34212 -1.63576) (xy 8.64616 -1.77546) (xy 7.85622 -1.80086) (xy 6.99262 -1.7145)
|
||||
(xy 6.31952 -1.57988) (xy 5.92836 -1.48844) (xy 5.58038 -1.41478) (xy 5.31622 -1.36906) (xy 5.19938 -1.35636) (xy 5.0419 -1.32588)
|
||||
(xy 4.99364 -1.27254) (xy 5.02666 -1.1557) (xy 5.10794 -0.92964) (xy 5.22224 -0.635) (xy 5.35432 -0.31496) (xy 5.48132 -0.01524)
|
||||
(xy 5.588 0.22098) (xy 5.65658 0.35052) (xy 5.6642 0.36068) (xy 5.76834 0.36322) (xy 5.98424 0.31496) (xy 6.26872 0.22098)
|
||||
(xy 6.3119 0.2032) (xy 6.83768 0.04572) (xy 7.3406 -0.03048) (xy 7.79018 -0.0254) (xy 8.14324 0.0635) (xy 8.2677 0.13462)
|
||||
(xy 8.49376 0.40132) (xy 8.600440000000001 0.68326) (xy 8.691879999999999 1.05664) (xy 7.66826 1.10744) (xy 6.97738 1.16078) (xy 6.41096 1.24968)
|
||||
(xy 5.92836 1.3843) (xy 5.49148 1.5748) (xy 5.24764 1.70942) (xy 4.77012 2.08534) (xy 4.4196 2.54762) (xy 4.19608 3.0734)
|
||||
(xy 4.09448 3.63474) (xy 4.11988 4.20878) (xy 4.26974 4.76758) (xy 4.54406 5.28828) (xy 4.9403 5.74294) (xy 5.31876 6.02742)
|
||||
(xy 5.85978 6.2738) (xy 6.47954 6.40588) (xy 7.12724 6.42112) (xy 7.74954 6.30936) (xy 7.75208 6.30936) (xy 8.06958 6.18744)
|
||||
(xy 8.37438 6.02742) (xy 8.465820000000001 5.96646) (xy 8.763 5.74802) (xy 8.788399999999999 6.00456) (xy 8.813800000000001 6.26364) (xy 10.16508 6.26364)
|
||||
(xy 11.51636 6.26364) (xy 11.51636 8.382) (xy 4.13766 8.382) (xy 4.13766 5.44068) (xy 4.10972 5.36702) (xy 4.0132 5.1816)
|
||||
(xy 3.86334 4.91744) (xy 3.68046 4.6101) (xy 3.48742 4.29006) (xy 3.29946 3.99034) (xy 3.1369 3.74142) (xy 3.10896 3.70078)
|
||||
(xy 2.9464 3.46456) (xy 2.65684 3.7211) (xy 2.20726 4.05892) (xy 1.76276 4.26212) (xy 1.27254 4.34848) (xy 1.05664 4.3561)
|
||||
(xy 0.70104 4.34594) (xy 0.43942 4.29768) (xy 0.19558 4.19862) (xy 0.05842 4.11988) (xy -0.38862 3.76682) (xy -0.75946 3.28168)
|
||||
(xy -1.03378 2.7051) (xy -1.07188 2.58572) (xy -1.143 2.30378) (xy -1.19126 1.98374) (xy -1.21666 1.58496) (xy -1.22936 1.0668)
|
||||
(xy -1.22936 0.889) (xy -1.22428 0.381) (xy -1.21158 0) (xy -1.17856 -0.30226) (xy -1.12776 -0.56896) (xy -1.04902 -0.84328)
|
||||
(xy -1.02108 -0.92964) (xy -0.7543800000000001 -1.53416) (xy -0.3937 -2.01676) (xy 0.04318 -2.36474) (xy 0.54864 -2.57048) (xy 0.99822 -2.62636)
|
||||
(xy 1.54686 -2.55524) (xy 2.05486 -2.35712) (xy 2.35712 -2.15138) (xy 2.5527 -1.98882) (xy 2.68986 -1.88468) (xy 2.7305 -1.86436)
|
||||
(xy 2.794 -1.9304) (xy 2.92608 -2.10312) (xy 3.10388 -2.35458) (xy 3.30962 -2.65176) (xy 3.51536 -2.96164) (xy 3.70586 -3.25374)
|
||||
(xy 3.85318 -3.4925) (xy 3.94208 -3.64998) (xy 3.95732 -3.69316) (xy 3.86588 -3.74396) (xy 3.66268 -3.85064) (xy 3.3782 -3.99288)
|
||||
(xy 3.22326 -4.06654) (xy 2.54508 -4.36118) (xy 1.92532 -4.5466) (xy 1.31318 -4.64058) (xy 0.87122 -4.65836) (xy 0.02286 -4.59232)
|
||||
(xy -0.7493 -4.38912) (xy -1.46558 -4.0386) (xy -2.15392 -3.5306) (xy -2.38252 -3.32232) (xy -2.9464 -2.70764) (xy -3.37312 -2.04978)
|
||||
(xy -3.6957 -1.30302) (xy -3.82524 -0.87376) (xy -3.94208 -0.26924) (xy -4.00304 0.43434) (xy -4.00812 1.17348) (xy -3.95986 1.88976)
|
||||
(xy -3.85572 2.52222) (xy -3.82524 2.64922) (xy -3.51028 3.53314) (xy -3.07848 4.32562) (xy -2.53746 5.0165) (xy -1.905 5.588)
|
||||
(xy -1.19126 6.02488) (xy -0.44958 6.30682) (xy 0.01016 6.39064) (xy 0.57404 6.4262) (xy 1.17856 6.41604) (xy 1.76276 6.3627)
|
||||
(xy 2.26822 6.26364) (xy 2.286 6.25856) (xy 2.72288 6.11124) (xy 3.23088 5.90296) (xy 3.73888 5.66166) (xy 4.13766 5.44068)
|
||||
(xy 4.13766 8.382) (xy 0 8.382) (xy -4.74218 8.382) (xy -4.74218 1.7653) (xy -4.74218 0.71882) (xy -4.74218 -0.55118)
|
||||
(xy -4.74218 -1.66116) (xy -4.74218 -2.62382) (xy -4.74472 -3.44678) (xy -4.7498 -4.14528) (xy -4.75742 -4.7244) (xy -4.77012 -5.19938)
|
||||
(xy -4.79044 -5.57784) (xy -4.81584 -5.87248) (xy -4.84886 -6.09346) (xy -4.8895 -6.2484) (xy -4.94284 -6.35254) (xy -5.0038 -6.4135)
|
||||
(xy -5.07746 -6.44144) (xy -5.16382 -6.44906) (xy -5.26542 -6.44398) (xy -5.37972 -6.4389) (xy -5.40512 -6.4389) (xy -5.6515 -6.4516)
|
||||
(xy -5.79374 -6.51002) (xy -5.90042 -6.65734) (xy -5.969 -6.79958) (xy -6.23062 -7.1755) (xy -6.57606 -7.4295) (xy -6.97738 -7.56158)
|
||||
(xy -7.40156 -7.57682) (xy -7.81558 -7.47014) (xy -8.1915 -7.24662) (xy -8.49376 -6.90626) (xy -8.58774 -6.73354) (xy -8.729979999999999 -6.43636)
|
||||
(xy -14.05382 -6.43636) (xy -15.14602 -6.43636) (xy -16.08074 -6.43382) (xy -16.87068 -6.43128) (xy -17.52854 -6.42874) (xy -18.06702 -6.42112)
|
||||
(xy -18.49628 -6.4135) (xy -18.83156 -6.40334) (xy -19.08302 -6.39064) (xy -19.2659 -6.3754) (xy -19.38782 -6.35508) (xy -19.46402 -6.33222)
|
||||
(xy -19.50974 -6.30428) (xy -19.50974 -6.30174) (xy -19.53514 -6.26618) (xy -19.55546 -6.1976) (xy -19.57324 -6.08838) (xy -19.59102 -5.92582)
|
||||
(xy -19.60372 -5.69976) (xy -19.61388 -5.40004) (xy -19.6215 -5.0165) (xy -19.62912 -4.53644) (xy -19.6342 -3.95224) (xy -19.63928 -3.24866)
|
||||
(xy -19.64182 -2.41808) (xy -19.64182 -1.4478) (xy -19.64436 -0.32766) (xy -19.64436 0.71882) (xy -19.64436 1.9685) (xy -19.64182 3.06324)
|
||||
(xy -19.64182 4.00812) (xy -19.63928 4.81584) (xy -19.6342 5.49656) (xy -19.62912 6.06552) (xy -19.6215 6.52526) (xy -19.61134 6.8961)
|
||||
(xy -19.60118 7.18058) (xy -19.58848 7.39394) (xy -19.5707 7.54634) (xy -19.55292 7.64794) (xy -19.53006 7.71144) (xy -19.50974 7.73938)
|
||||
(xy -19.47418 7.76224) (xy -19.4056 7.7851) (xy -19.29892 7.80288) (xy -19.1389 7.81812) (xy -18.91538 7.83082) (xy -18.62074 7.84098)
|
||||
(xy -18.24228 7.85114) (xy -17.76984 7.85622) (xy -17.1958 7.86384) (xy -16.50238 7.86638) (xy -15.68704 7.86892) (xy -14.732 7.87146)
|
||||
(xy -13.63218 7.87146) (xy -12.37488 7.87146) (xy -12.192 7.874) (xy -10.91438 7.87146) (xy -9.79424 7.87146) (xy -8.82142 7.86892)
|
||||
(xy -7.98576 7.86638) (xy -7.2771 7.86384) (xy -6.68782 7.85876) (xy -6.20014 7.85114) (xy -5.81152 7.84352) (xy -5.50672 7.83336)
|
||||
(xy -5.27304 7.81812) (xy -5.1054 7.80542) (xy -4.9911 7.78764) (xy -4.91998 7.76732) (xy -4.87934 7.74192) (xy -4.8768 7.73938)
|
||||
(xy -4.8514 7.70128) (xy -4.83108 7.6327) (xy -4.8133 7.52348) (xy -4.79552 7.36092) (xy -4.78282 7.1374) (xy -4.77266 6.83768)
|
||||
(xy -4.76504 6.45414) (xy -4.75742 5.97408) (xy -4.75234 5.38734) (xy -4.74726 4.6863) (xy -4.74472 3.85318) (xy -4.74472 2.88544)
|
||||
(xy -4.74218 1.7653) (xy -4.74218 8.382) (xy -20.574 8.382) (xy -20.574 0) (xy -20.574 -8.382) (xy 0 -8.382)
|
||||
(xy 20.574 -8.382) (xy 20.574 0) (xy 20.574 8.382) (xy 20.574 8.382))
|
||||
(pts (xy -9.4742 6.26364) (xy -11.25728 6.26364) (xy -13.04036 6.26364) (xy -13.04036 6.0071) (xy -13.07846 5.76072)
|
||||
(xy -13.17752 5.48386) (xy -13.20038 5.4356) (xy -13.28674 5.29336) (xy -13.45692 5.0419) (xy -13.68806 4.70662) (xy -13.96746 4.31292)
|
||||
(xy -14.27226 3.88112) (xy -14.58976 3.4417) (xy -14.8971 3.02006) (xy -15.1765 2.63652) (xy -15.41526 2.31902) (xy -15.58798 2.09296)
|
||||
(xy -15.67942 1.98882) (xy -15.7099 2.03454) (xy -15.73022 2.24282) (xy -15.74038 2.61874) (xy -15.74292 3.15976) (xy -15.7353 3.76682)
|
||||
(xy -15.72514 4.37896) (xy -15.71244 4.84886) (xy -15.69974 5.19684) (xy -15.67688 5.45084) (xy -15.64894 5.63372) (xy -15.6083 5.76834)
|
||||
(xy -15.55496 5.88518) (xy -15.5194 5.94614) (xy -15.33144 6.26364) (xy -16.96974 6.26364) (xy -18.61058 6.26364) (xy -18.45056 5.94868)
|
||||
(xy -18.415 5.87502) (xy -18.38706 5.78612) (xy -18.36166 5.67182) (xy -18.34134 5.51688) (xy -18.3261 5.30606) (xy -18.3134 5.02666)
|
||||
(xy -18.30324 4.66598) (xy -18.29816 4.20624) (xy -18.29308 3.63728) (xy -18.29054 2.94386) (xy -18.29054 2.11328) (xy -18.29054 1.12776)
|
||||
(xy -18.288 0.889) (xy -18.29054 -0.13208) (xy -18.29054 -0.99568) (xy -18.29308 -1.71958) (xy -18.29562 -2.31394) (xy -18.30324 -2.79654)
|
||||
(xy -18.31086 -3.18008) (xy -18.32356 -3.47472) (xy -18.3388 -3.70078) (xy -18.35658 -3.86588) (xy -18.37944 -3.9878) (xy -18.40738 -4.08178)
|
||||
(xy -18.4404 -4.15798) (xy -18.45056 -4.17322) (xy -18.61058 -4.48818) (xy -17.01038 -4.48818) (xy -16.51 -4.48564) (xy -16.07566 -4.48056)
|
||||
(xy -15.73022 -4.4704) (xy -15.49908 -4.4577) (xy -15.41018 -4.44246) (xy -15.44574 -4.3434) (xy -15.53464 -4.16052) (xy -15.55496 -4.12496)
|
||||
(xy -15.61084 -3.9878) (xy -15.65402 -3.7973) (xy -15.6845 -3.52806) (xy -15.70736 -3.15468) (xy -15.72514 -2.64922) (xy -15.73276 -2.37236)
|
||||
(xy -15.75054 -1.70434) (xy -15.75816 -1.20396) (xy -15.748 -0.86106) (xy -15.70228 -0.6731) (xy -15.61084 -0.63754) (xy -15.46098 -0.74422)
|
||||
(xy -15.24 -0.99314) (xy -14.93266 -1.37668) (xy -14.5288 -1.8923) (xy -14.51102 -1.91516) (xy -14.04112 -2.51714) (xy -13.67028 -3.00482)
|
||||
(xy -13.39088 -3.39344) (xy -13.18768 -3.70078) (xy -13.0556 -3.94208) (xy -12.9794 -4.13004) (xy -12.95654 -4.28244) (xy -12.954 -4.29768)
|
||||
(xy -12.954 -4.48818) (xy -11.23696 -4.48818) (xy -9.519920000000001 -4.48818) (xy -10.07364 -3.91668) (xy -10.25398 -3.7211) (xy -10.50544 -3.43154)
|
||||
(xy -10.81278 -3.06832) (xy -11.1633 -2.64922) (xy -11.54176 -2.19202) (xy -11.93038 -1.71704) (xy -12.319 -1.23952) (xy -12.68476 -0.78232)
|
||||
(xy -13.02004 -0.36068) (xy -13.30452 0.00254) (xy -13.5255 0.2921) (xy -13.66774 0.49022) (xy -13.716 0.57404) (xy -13.66774 0.66294)
|
||||
(xy -13.53058 0.86868) (xy -13.31976 1.17348) (xy -13.04798 1.55702) (xy -12.7254 2.00406) (xy -12.3698 2.49428) (xy -11.99388 3.00736)
|
||||
(xy -11.61034 3.5306) (xy -11.23442 4.0386) (xy -10.87628 4.51866) (xy -10.55116 4.95046) (xy -10.27176 5.31622) (xy -10.05332 5.59562)
|
||||
(xy -9.91108 5.76834) (xy -9.4742 6.26364) (xy -9.4742 6.26364))
|
||||
(pts (xy -5.75818 6.23316) (xy -5.83946 6.24332) (xy -6.06044 6.25094) (xy -6.39826 6.25856) (xy -6.82498 6.26364)
|
||||
(xy -7.239 6.26364) (xy -7.71906 6.2611) (xy -8.135619999999999 6.25856) (xy -8.4582 6.25094) (xy -8.6614 6.24078) (xy -8.72236 6.23316)
|
||||
(xy -8.691879999999999 6.14172) (xy -8.618220000000001 5.95376) (xy -8.595359999999999 5.89534) (xy -8.559799999999999 5.72262) (xy -8.52932 5.40512) (xy -8.503920000000001 4.9657)
|
||||
(xy -8.483599999999999 4.42468) (xy -8.468360000000001 3.81) (xy -8.4582 3.14198) (xy -8.45566 2.44602) (xy -8.45566 1.74498) (xy -8.460739999999999 1.06172)
|
||||
(xy -8.47344 0.42164) (xy -8.49122 -0.15494) (xy -8.51408 -0.64262) (xy -8.542020000000001 -1.01854) (xy -8.57504 -1.25984) (xy -8.59028 -1.31572)
|
||||
(xy -8.712199999999999 -1.61036) (xy -7.36346 -1.61036) (xy -6.01218 -1.61036) (xy -6.01218 1.99136) (xy -6.01218 2.8956) (xy -6.00964 3.6449)
|
||||
(xy -6.00456 4.2545) (xy -5.9944 4.74472) (xy -5.98424 5.12572) (xy -5.96646 5.41274) (xy -5.94614 5.6261) (xy -5.92074 5.77596)
|
||||
(xy -5.89026 5.88264) (xy -5.88518 5.89534) (xy -5.8039 6.09854) (xy -5.76072 6.22046) (xy -5.75818 6.23316) (xy -5.75818 6.23316))
|
||||
(pts (xy 8.635999999999999 3.4544) (xy 8.62838 3.80238) (xy 8.602980000000001 4.0259) (xy 8.54964 4.17322) (xy 8.45312 4.28752)
|
||||
(xy 8.445499999999999 4.29514) (xy 8.08736 4.52628) (xy 7.66826 4.64058) (xy 7.24408 4.62788) (xy 7.05866 4.572) (xy 6.77672 4.37388)
|
||||
(xy 6.5913 4.07924) (xy 6.5405 3.74142) (xy 6.54558 3.70078) (xy 6.60146 3.45186) (xy 6.68782 3.25882) (xy 6.70052 3.24104)
|
||||
(xy 6.96468 3.03784) (xy 7.35076 2.88798) (xy 7.81812 2.8067) (xy 8.064500000000001 2.794) (xy 8.635999999999999 2.794) (xy 8.635999999999999 3.4544)
|
||||
(xy 8.635999999999999 3.4544))
|
||||
(pts (xy 17.018 4.04876) (xy 16.7259 4.2291) (xy 16.34744 4.3942) (xy 15.94358 4.46024) (xy 15.56766 4.4196)
|
||||
(xy 15.35938 4.3307) (xy 15.13332 4.15544) (xy 14.9733 3.93192) (xy 14.86408 3.6322) (xy 14.80058 3.23342) (xy 14.77518 2.70764)
|
||||
(xy 14.77264 2.45364) (xy 14.79296 1.77546) (xy 14.859 1.23952) (xy 14.97076 0.82296) (xy 15.1384 0.508) (xy 15.33652 0.29718)
|
||||
(xy 15.66418 0.127) (xy 16.06042 0.08382000000000001) (xy 16.48714 0.17018) (xy 16.68018 0.254) (xy 17.018 0.42672) (xy 17.018 2.23774)
|
||||
(xy 17.018 4.04876) (xy 17.018 4.04876))
|
||||
)
|
||||
)
|
||||
|
||||
@@ -153,6 +153,7 @@ set( EESCHEMA_SRCS
|
||||
sch_sheet_path.cpp
|
||||
sch_sheet_pin.cpp
|
||||
sch_text.cpp
|
||||
sch_validators.cpp
|
||||
schedit.cpp
|
||||
schematic_undo_redo.cpp
|
||||
schframe.cpp
|
||||
@@ -191,6 +192,8 @@ set( EESCHEMA_COMMON_SRCS
|
||||
if( MINGW )
|
||||
# EESCHEMA_RESOURCES variable is set by the macro.
|
||||
mingw_resource_compiler( eeschema )
|
||||
else()
|
||||
set( EESCHEMA_RESOURCES eeschema.rc )
|
||||
endif()
|
||||
|
||||
# Create a C++ compilable string initializer containing html text into a *.h file:
|
||||
@@ -250,6 +253,7 @@ target_link_libraries( eeschema_kiface
|
||||
common
|
||||
bitmaps
|
||||
polygon
|
||||
gal
|
||||
${wxWidgets_LIBRARIES}
|
||||
${GDI_PLUS_LIBRARIES}
|
||||
)
|
||||
|
||||
@@ -886,7 +886,7 @@ bool LIB_PART::Load( LINE_READER& aLineReader, wxString& aErrorMsg )
|
||||
{
|
||||
p = strtok( line, " \t\n" );
|
||||
|
||||
if( stricmp( p, "ENDDEF" ) == 0 )
|
||||
if( p && stricmp( p, "ENDDEF" ) == 0 )
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -948,6 +948,9 @@ bool LIB_PART::Load( LINE_READER& aLineReader, wxString& aErrorMsg )
|
||||
if( *line == '#' ) // a comment
|
||||
continue;
|
||||
|
||||
if( p == NULL ) // empty line
|
||||
continue;
|
||||
|
||||
if( line[0] == 'T' && line[1] == 'i' )
|
||||
result = LoadDateAndTime( aLineReader );
|
||||
else if( *line == 'F' )
|
||||
@@ -1036,7 +1039,12 @@ bool LIB_PART::LoadDrawEntries( LINE_READER& aLineReader, wxString& aErrorMsg )
|
||||
break;
|
||||
|
||||
case '#': // Comment
|
||||
continue;
|
||||
continue;
|
||||
|
||||
case '\n':
|
||||
case '\r':
|
||||
case 0: // empty line
|
||||
continue;
|
||||
|
||||
default:
|
||||
aErrorMsg.Printf( wxT( "undefined DRAW command %c" ), line[0] );
|
||||
@@ -1664,6 +1672,8 @@ void LIB_PART::SetConversion( bool aSetConvert )
|
||||
// Duplicate items to create the converted shape
|
||||
if( aSetConvert )
|
||||
{
|
||||
std::vector< LIB_ITEM* > tmp; // Temporarily store the duplicated pins here.
|
||||
|
||||
BOOST_FOREACH( LIB_ITEM& item, drawings )
|
||||
{
|
||||
// Only pins are duplicated.
|
||||
@@ -1674,9 +1684,13 @@ void LIB_PART::SetConversion( bool aSetConvert )
|
||||
{
|
||||
LIB_ITEM* newItem = (LIB_ITEM*) item.Clone();
|
||||
newItem->m_Convert = 2;
|
||||
drawings.push_back( newItem );
|
||||
tmp.push_back( newItem );
|
||||
}
|
||||
}
|
||||
|
||||
// Transfer the new pins to the LIB_PART.
|
||||
for( unsigned i = 0; i < tmp.size(); i++ )
|
||||
drawings.push_back( tmp[i] );
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -1746,16 +1760,16 @@ void LIB_PART::SetAliases( const wxArrayString& aAliasList )
|
||||
}
|
||||
|
||||
// Remove names in the current component that are not in the new alias list.
|
||||
LIB_ALIASES::iterator it;
|
||||
LIB_ALIASES::iterator it = m_aliases.begin();
|
||||
|
||||
for( it = m_aliases.begin(); it < m_aliases.end(); it++ )
|
||||
while( it != m_aliases.end() )
|
||||
{
|
||||
int index = aAliasList.Index( (*it)->GetName(), false );
|
||||
|
||||
if( index != wxNOT_FOUND || (*it)->IsRoot() )
|
||||
continue;
|
||||
|
||||
it = m_aliases.erase( it );
|
||||
++it;
|
||||
else
|
||||
it = m_aliases.erase( it );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -351,14 +351,14 @@ public:
|
||||
bool LoadAliases( char* aLine, wxString& aErrorMsg );
|
||||
bool LoadFootprints( LINE_READER& aReader, wxString& aErrorMsg );
|
||||
|
||||
bool IsPower() { return m_options == ENTRY_POWER; }
|
||||
bool IsNormal() { return m_options == ENTRY_NORMAL; }
|
||||
bool IsPower() const { return m_options == ENTRY_POWER; }
|
||||
bool IsNormal() const { return m_options == ENTRY_NORMAL; }
|
||||
|
||||
void SetPower() { m_options = ENTRY_POWER; }
|
||||
void SetNormal() { m_options = ENTRY_NORMAL; }
|
||||
|
||||
void LockUnits( bool aLockUnits ) { m_unitsLocked = aLockUnits; }
|
||||
bool UnitsLocked() { return m_unitsLocked; }
|
||||
bool UnitsLocked() const { return m_unitsLocked; }
|
||||
|
||||
/**
|
||||
* Function SetFields
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
/*
|
||||
* This program source code file is part of KiCad, a free EDA CAD application.
|
||||
*
|
||||
* Copyright (C) 2013 Jean-Pierre Charras, jp.charras at wanadoo.fr
|
||||
* Copyright (C) 2016 Jean-Pierre Charras, jp.charras at wanadoo.fr
|
||||
* Copyright (C) 2013 Wayne Stambaugh <stambaughw@verizon.net>
|
||||
* Copyright (C) 1992-2013 KiCad Developers, see AUTHORS.txt for contributors.
|
||||
* Copyright (C) 1992-2016 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
|
||||
@@ -315,6 +315,32 @@ void NETLIST_OBJECT::ConvertBusToNetListItems( NETLIST_OBJECT_LIST& aNetListItem
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
bool NETLIST_OBJECT::IsLabelGlobal() const
|
||||
{
|
||||
// return true if the object is a global label
|
||||
// * a actual global label
|
||||
// * a pin label coming from a invisible power pin
|
||||
return ( m_Type == NET_PINLABEL ) ||
|
||||
( m_Type == NET_GLOBLABEL ) ||
|
||||
( m_Type == NET_GLOBBUSLABELMEMBER );
|
||||
}
|
||||
|
||||
|
||||
bool NETLIST_OBJECT::IsLabelBusMemberType() const
|
||||
{
|
||||
// return true if the object is a bus label member build from a
|
||||
// schematic bus label (like label[xx..yy)
|
||||
// They are labels with very specific properties, especially for connection
|
||||
// between them: 2 bus label members can be connected only
|
||||
// if they have the same member value.
|
||||
return ( m_Type == NET_SHEETBUSLABELMEMBER ) ||
|
||||
( m_Type == NET_BUSLABELMEMBER ) ||
|
||||
( m_Type == NET_HIERBUSLABELMEMBER ) ||
|
||||
( m_Type == NET_GLOBBUSLABELMEMBER );
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* return the net name of the item
|
||||
*/
|
||||
@@ -373,7 +399,7 @@ wxString NETLIST_OBJECT::GetShortNetName() const
|
||||
* Set m_netNameCandidate to a connected item which will
|
||||
* be used to calcule the net name of the item
|
||||
* Obviously the candidate can be only a label
|
||||
* when there is no label on the net a pad which will
|
||||
* If there is no label on the net, a pad name will be
|
||||
* used to build a net name (something like Cmp<REF>_Pad<PAD_NAME>
|
||||
* @param aCandidate = the connected item candidate
|
||||
*/
|
||||
@@ -385,6 +411,8 @@ void NETLIST_OBJECT::SetNetNameCandidate( NETLIST_OBJECT* aCandidate )
|
||||
case NET_LABEL:
|
||||
case NET_PINLABEL:
|
||||
case NET_GLOBLABEL:
|
||||
case NET_GLOBBUSLABELMEMBER:
|
||||
case NET_SHEETBUSLABELMEMBER:
|
||||
case NET_PIN:
|
||||
m_netNameCandidate = aCandidate;
|
||||
break;
|
||||
|
||||
@@ -59,6 +59,8 @@ enum NETLIST_ITEM_T
|
||||
* the bus label (like DATA[0..7] is
|
||||
* converted to n single labels like
|
||||
* DATA0, DATA1 ...
|
||||
* These objects are living only in the current
|
||||
* NETLIST_OBJECT_LIST, not in shematic.
|
||||
*/
|
||||
NET_GLOBBUSLABELMEMBER, // see NET_BUSLABELMEMBER, used when a
|
||||
// global bus label is found
|
||||
@@ -217,10 +219,19 @@ public:
|
||||
* (i.e. an real global label or a pin label coming
|
||||
* from a power pin invisible
|
||||
*/
|
||||
bool IsLabelGlobal() const
|
||||
{
|
||||
return ( m_Type == NET_PINLABEL ) || ( m_Type == NET_GLOBLABEL );
|
||||
}
|
||||
bool IsLabelGlobal() const;
|
||||
|
||||
/**
|
||||
* Function IsLabelBusMemberType
|
||||
* @return true if the object is a bus label member build from a
|
||||
* schematic bus label (like label[xx..yy], xx and yy are the first and last
|
||||
* bus member id)
|
||||
* bus label members have specific properties:
|
||||
* they do not live in schematic
|
||||
* they have specific properties in connections:
|
||||
* 2 bus label members can be connected connected only if they have the same member value.
|
||||
*/
|
||||
bool IsLabelBusMemberType() const;
|
||||
|
||||
/**
|
||||
* Function IsLabelType
|
||||
@@ -410,7 +421,7 @@ private:
|
||||
return Objet1->m_SheetPath.Cmp( Objet2->m_SheetPath ) < 0;
|
||||
}
|
||||
|
||||
/*
|
||||
/**
|
||||
* Propagate net codes from a parent sheet to an include sheet,
|
||||
* from a pin sheet connection
|
||||
*/
|
||||
@@ -418,8 +429,8 @@ private:
|
||||
|
||||
void pointToPointConnect( NETLIST_OBJECT* aRef, bool aIsBus, int start );
|
||||
|
||||
/*
|
||||
* Search connections betweena junction and segments
|
||||
/**
|
||||
* Search connections between a junction and segments
|
||||
* Propagate the junction net code to objects connected by this junction.
|
||||
* The junction must have a valid net code
|
||||
* The list of objects is expected sorted by sheets.
|
||||
@@ -427,9 +438,16 @@ private:
|
||||
*/
|
||||
void segmentToPointConnect( NETLIST_OBJECT* aJonction, bool aIsBus, int aIdxStart );
|
||||
|
||||
|
||||
/**
|
||||
* Function connectBusLabels
|
||||
* Propagate the net code (and create it, if not yet existing) between
|
||||
* all bus label member objects connected by they name.
|
||||
* Search is done in the entire list
|
||||
*/
|
||||
void connectBusLabels();
|
||||
|
||||
/*
|
||||
/**
|
||||
* Set the m_FlagOfConnection member of items in list
|
||||
* depending on the connection type:
|
||||
* UNCONNECTED, PAD_CONNECT or NOCONNECT_SYMBOL_PRESENT
|
||||
|
||||
@@ -218,8 +218,10 @@ DIALOG_BOM::DIALOG_BOM( SCH_EDIT_FRAME* parent ) :
|
||||
m_config = Kiface().KifaceSettings();
|
||||
installPluginsList();
|
||||
|
||||
GetSizer()->Fit( this );
|
||||
Centre();
|
||||
FixOSXCancelButtonIssue();
|
||||
|
||||
// Now all widgets have the size fixed, call FinishDialogSettings
|
||||
FinishDialogSettings();
|
||||
}
|
||||
|
||||
DIALOG_BOM::~DIALOG_BOM()
|
||||
|
||||
@@ -46,6 +46,7 @@ DIALOG_CHOOSE_COMPONENT::DIALOG_CHOOSE_COMPONENT( SCH_BASE_FRAME* aParent, const
|
||||
m_search_container->SetTree( m_libraryComponentTree );
|
||||
m_searchBox->SetFocus();
|
||||
m_componentDetails->SetEditable( false );
|
||||
m_componentView->SetLayoutDirection( wxLayout_LeftToRight );
|
||||
|
||||
m_libraryComponentTree->ScrollTo( m_libraryComponentTree->GetFocusedItem() );
|
||||
|
||||
|
||||
@@ -49,8 +49,10 @@ DIALOG_EDIT_COMPONENT_IN_LIBRARY::DIALOG_EDIT_COMPONENT_IN_LIBRARY( LIB_EDIT_FRA
|
||||
|
||||
initDlg();
|
||||
|
||||
GetSizer()->SetSizeHints( this );
|
||||
Center();
|
||||
FixOSXCancelButtonIssue();
|
||||
|
||||
// Now all widgets have the size fixed, call FinishDialogSettings
|
||||
FinishDialogSettings();
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* This program source code file is part of KiCad, a free EDA CAD application.
|
||||
*
|
||||
* Copyright (C) 2004-2015 KiCad Developers, see change_log.txt for contributors.
|
||||
* Copyright (C) 2004-2016 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
|
||||
@@ -43,6 +43,8 @@
|
||||
#include <class_library.h>
|
||||
#include <sch_component.h>
|
||||
#include <dialog_helpers.h>
|
||||
#include <sch_validators.h>
|
||||
|
||||
#include <dialog_edit_component_in_schematic_fbp.h>
|
||||
|
||||
|
||||
@@ -104,7 +106,12 @@ private:
|
||||
|
||||
void copyPanelToOptions();
|
||||
|
||||
void setRowItem( int aFieldNdx, const SCH_FIELD& aField );
|
||||
void setRowItem( int aFieldNdx, const wxString& aName, const wxString& aValue );
|
||||
|
||||
void setRowItem( int aFieldNdx, const SCH_FIELD& aField )
|
||||
{
|
||||
setRowItem( aFieldNdx, aField.GetName( false ), aField.GetText() );
|
||||
}
|
||||
|
||||
// event handlers
|
||||
void OnCloseDialog( wxCloseEvent& event );
|
||||
@@ -119,6 +126,13 @@ private:
|
||||
void showButtonHandler( wxCommandEvent& event );
|
||||
void OnTestChipName( wxCommandEvent& event );
|
||||
void OnSelectChipName( wxCommandEvent& event );
|
||||
void OnInitDlg( wxInitDialogEvent& event )
|
||||
{
|
||||
TransferDataToWindow();
|
||||
|
||||
// Now all widgets have the size fixed, call FinishDialogSettings
|
||||
FinishDialogSettings();
|
||||
}
|
||||
|
||||
SCH_FIELD* findField( const wxString& aFieldName );
|
||||
|
||||
@@ -191,11 +205,11 @@ DIALOG_EDIT_COMPONENT_IN_SCHEMATIC::DIALOG_EDIT_COMPONENT_IN_SCHEMATIC( wxWindow
|
||||
m_staticTextUnitPosY->SetLabel( GetAbbreviatedUnitsLabel( g_UserUnit ) );
|
||||
|
||||
wxToolTip::Enable( true );
|
||||
|
||||
GetSizer()->SetSizeHints( this );
|
||||
Center();
|
||||
|
||||
stdDialogButtonSizerOK->SetDefault();
|
||||
|
||||
FixOSXCancelButtonIssue();
|
||||
|
||||
Fit();
|
||||
}
|
||||
|
||||
|
||||
@@ -535,6 +549,8 @@ void DIALOG_EDIT_COMPONENT_IN_SCHEMATIC::showButtonHandler( wxCommandEvent& even
|
||||
{
|
||||
// DBG( printf( "%s: %s\n", __func__, TO_UTF8( fpid ) ); )
|
||||
fieldValueTextCtrl->SetValue( fpid );
|
||||
|
||||
setRowItem( fieldNdx, m_FieldsBuf[fieldNdx].GetName( false ), fpid );
|
||||
}
|
||||
|
||||
frame->Destroy();
|
||||
@@ -760,7 +776,7 @@ void DIALOG_EDIT_COMPONENT_IN_SCHEMATIC::InitBuffers( SCH_COMPONENT* aComponent
|
||||
}
|
||||
|
||||
|
||||
void DIALOG_EDIT_COMPONENT_IN_SCHEMATIC::setRowItem( int aFieldNdx, const SCH_FIELD& aField )
|
||||
void DIALOG_EDIT_COMPONENT_IN_SCHEMATIC::setRowItem( int aFieldNdx, const wxString& aName, const wxString& aValue )
|
||||
{
|
||||
wxASSERT( aFieldNdx >= 0 );
|
||||
|
||||
@@ -774,8 +790,8 @@ void DIALOG_EDIT_COMPONENT_IN_SCHEMATIC::setRowItem( int aFieldNdx, const SCH_FI
|
||||
fieldListCtrl->SetItem( ndx, 1, wxEmptyString );
|
||||
}
|
||||
|
||||
fieldListCtrl->SetItem( aFieldNdx, 0, aField.GetName( false ) );
|
||||
fieldListCtrl->SetItem( aFieldNdx, 1, aField.GetText() );
|
||||
fieldListCtrl->SetItem( aFieldNdx, 0, aName );
|
||||
fieldListCtrl->SetItem( aFieldNdx, 1, aValue );
|
||||
|
||||
// recompute the column widths here, after setting texts
|
||||
fieldListCtrl->SetColumnWidth( 0, wxLIST_AUTOSIZE );
|
||||
@@ -837,6 +853,7 @@ void DIALOG_EDIT_COMPONENT_IN_SCHEMATIC::copySelectedFieldToPanel()
|
||||
// may only delete user defined fields
|
||||
deleteFieldButton->Enable( fieldNdx >= MANDATORY_FIELDS );
|
||||
|
||||
fieldValueTextCtrl->SetValidator( SCH_FIELD_VALIDATOR( false, field.GetId() ) );
|
||||
fieldValueTextCtrl->SetValue( field.GetText() );
|
||||
|
||||
m_show_datasheet_button->Enable( fieldNdx == DATASHEET || fieldNdx == FOOTPRINT );
|
||||
@@ -894,6 +911,11 @@ bool DIALOG_EDIT_COMPONENT_IN_SCHEMATIC::copyPanelToSelectedField()
|
||||
if( fieldNdx >= m_FieldsBuf.size() ) // traps the -1 case too
|
||||
return true;
|
||||
|
||||
// Check for illegal field text.
|
||||
if( fieldValueTextCtrl->GetValidator()
|
||||
&& !fieldValueTextCtrl->GetValidator()->Validate( this ) )
|
||||
return false;
|
||||
|
||||
SCH_FIELD& field = m_FieldsBuf[fieldNdx];
|
||||
|
||||
field.SetVisible( showCheckBox->GetValue() );
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
// C++ code generated with wxFormBuilder (version Jun 17 2015)
|
||||
// C++ code generated with wxFormBuilder (version May 21 2016)
|
||||
// http://www.wxformbuilder.org/
|
||||
//
|
||||
// PLEASE DO "NOT" EDIT THIS FILE!
|
||||
@@ -182,7 +182,7 @@ DIALOG_EDIT_COMPONENT_IN_SCHEMATIC_FBP::DIALOG_EDIT_COMPONENT_IN_SCHEMATIC_FBP(
|
||||
int m_StyleRadioBoxNChoices = sizeof( m_StyleRadioBoxChoices ) / sizeof( wxString );
|
||||
m_StyleRadioBox = new wxRadioBox( fieldsSizer->GetStaticBox(), wxID_ANY, _("Style:"), wxDefaultPosition, wxDefaultSize, m_StyleRadioBoxNChoices, m_StyleRadioBoxChoices, 1, wxRA_SPECIFY_COLS );
|
||||
m_StyleRadioBox->SetSelection( 3 );
|
||||
m_StyleRadioBox->SetToolTip( _("The style of the currently selected field's text in the schemati") );
|
||||
m_StyleRadioBox->SetToolTip( _("The style of the currently selected field's text in the schematic") );
|
||||
|
||||
bSizerStyle->Add( m_StyleRadioBox, 1, wxEXPAND|wxALL, 5 );
|
||||
|
||||
@@ -290,6 +290,7 @@ DIALOG_EDIT_COMPONENT_IN_SCHEMATIC_FBP::DIALOG_EDIT_COMPONENT_IN_SCHEMATIC_FBP(
|
||||
|
||||
// Connect Events
|
||||
this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( DIALOG_EDIT_COMPONENT_IN_SCHEMATIC_FBP::OnCloseDialog ) );
|
||||
this->Connect( wxEVT_INIT_DIALOG, wxInitDialogEventHandler( DIALOG_EDIT_COMPONENT_IN_SCHEMATIC_FBP::OnInitDlg ) );
|
||||
m_buttonTestChipName->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_EDIT_COMPONENT_IN_SCHEMATIC_FBP::OnTestChipName ), NULL, this );
|
||||
m_buttonSelectChipName->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_EDIT_COMPONENT_IN_SCHEMATIC_FBP::OnSelectChipName ), NULL, this );
|
||||
defaultsButton->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_EDIT_COMPONENT_IN_SCHEMATIC_FBP::SetInitCmp ), NULL, this );
|
||||
@@ -307,6 +308,7 @@ DIALOG_EDIT_COMPONENT_IN_SCHEMATIC_FBP::~DIALOG_EDIT_COMPONENT_IN_SCHEMATIC_FBP(
|
||||
{
|
||||
// Disconnect Events
|
||||
this->Disconnect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( DIALOG_EDIT_COMPONENT_IN_SCHEMATIC_FBP::OnCloseDialog ) );
|
||||
this->Disconnect( wxEVT_INIT_DIALOG, wxInitDialogEventHandler( DIALOG_EDIT_COMPONENT_IN_SCHEMATIC_FBP::OnInitDlg ) );
|
||||
m_buttonTestChipName->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_EDIT_COMPONENT_IN_SCHEMATIC_FBP::OnTestChipName ), NULL, this );
|
||||
m_buttonSelectChipName->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_EDIT_COMPONENT_IN_SCHEMATIC_FBP::OnSelectChipName ), NULL, this );
|
||||
defaultsButton->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_EDIT_COMPONENT_IN_SCHEMATIC_FBP::SetInitCmp ), NULL, this );
|
||||
|
||||
@@ -67,7 +67,7 @@
|
||||
<event name="OnHibernate"></event>
|
||||
<event name="OnIconize"></event>
|
||||
<event name="OnIdle"></event>
|
||||
<event name="OnInitDialog"></event>
|
||||
<event name="OnInitDialog">OnInitDlg</event>
|
||||
<event name="OnKeyDown"></event>
|
||||
<event name="OnKeyUp"></event>
|
||||
<event name="OnKillFocus"></event>
|
||||
@@ -112,6 +112,7 @@
|
||||
<property name="minimum_size"></property>
|
||||
<property name="name">optionsSizer</property>
|
||||
<property name="orient">wxVERTICAL</property>
|
||||
<property name="parent">1</property>
|
||||
<property name="permission">none</property>
|
||||
<event name="OnUpdateUI"></event>
|
||||
<object class="sizeritem" expanded="0">
|
||||
@@ -740,6 +741,7 @@
|
||||
<property name="minimum_size"></property>
|
||||
<property name="name">sbSizerChipName</property>
|
||||
<property name="orient">wxVERTICAL</property>
|
||||
<property name="parent">1</property>
|
||||
<property name="permission">none</property>
|
||||
<event name="OnUpdateUI"></event>
|
||||
<object class="sizeritem" expanded="0">
|
||||
@@ -777,7 +779,7 @@
|
||||
<property name="max_size"></property>
|
||||
<property name="maximize_button">0</property>
|
||||
<property name="maximum_size"></property>
|
||||
<property name="maxlength"></property>
|
||||
<property name="maxlength">0</property>
|
||||
<property name="min_size"></property>
|
||||
<property name="minimize_button">0</property>
|
||||
<property name="minimum_size"></property>
|
||||
@@ -1140,7 +1142,7 @@
|
||||
<property name="max_size"></property>
|
||||
<property name="maximize_button">0</property>
|
||||
<property name="maximum_size"></property>
|
||||
<property name="maxlength"></property>
|
||||
<property name="maxlength">0</property>
|
||||
<property name="min_size"></property>
|
||||
<property name="minimize_button">0</property>
|
||||
<property name="minimum_size"></property>
|
||||
@@ -1377,6 +1379,7 @@
|
||||
<property name="minimum_size"></property>
|
||||
<property name="name">fieldsSizer</property>
|
||||
<property name="orient">wxHORIZONTAL</property>
|
||||
<property name="parent">1</property>
|
||||
<property name="permission">none</property>
|
||||
<event name="OnUpdateUI"></event>
|
||||
<object class="sizeritem" expanded="1">
|
||||
@@ -1389,6 +1392,7 @@
|
||||
<property name="minimum_size"></property>
|
||||
<property name="name">gridStaticBoxSizer</property>
|
||||
<property name="orient">wxVERTICAL</property>
|
||||
<property name="parent">1</property>
|
||||
<property name="permission">none</property>
|
||||
<event name="OnUpdateUI"></event>
|
||||
<object class="sizeritem" expanded="0">
|
||||
@@ -1981,6 +1985,7 @@
|
||||
<property name="minimum_size"></property>
|
||||
<property name="name">visibilitySizer</property>
|
||||
<property name="orient">wxVERTICAL</property>
|
||||
<property name="parent">1</property>
|
||||
<property name="permission">none</property>
|
||||
<event name="OnUpdateUI"></event>
|
||||
<object class="sizeritem" expanded="0">
|
||||
@@ -2217,7 +2222,7 @@
|
||||
<property name="style">wxRA_SPECIFY_COLS</property>
|
||||
<property name="subclass"></property>
|
||||
<property name="toolbar_pane">0</property>
|
||||
<property name="tooltip">The style of the currently selected field's text in the schemati</property>
|
||||
<property name="tooltip">The style of the currently selected field's text in the schematic</property>
|
||||
<property name="validator_data_type"></property>
|
||||
<property name="validator_style">wxFILTER_NONE</property>
|
||||
<property name="validator_type">wxDefaultValidator</property>
|
||||
@@ -2380,7 +2385,7 @@
|
||||
<property name="max_size"></property>
|
||||
<property name="maximize_button">0</property>
|
||||
<property name="maximum_size"></property>
|
||||
<property name="maxlength"></property>
|
||||
<property name="maxlength">0</property>
|
||||
<property name="min_size"></property>
|
||||
<property name="minimize_button">0</property>
|
||||
<property name="minimum_size"></property>
|
||||
@@ -2554,7 +2559,7 @@
|
||||
<property name="max_size"></property>
|
||||
<property name="maximize_button">0</property>
|
||||
<property name="maximum_size"></property>
|
||||
<property name="maxlength"></property>
|
||||
<property name="maxlength">0</property>
|
||||
<property name="min_size"></property>
|
||||
<property name="minimize_button">0</property>
|
||||
<property name="minimum_size"></property>
|
||||
@@ -2834,7 +2839,7 @@
|
||||
<property name="max_size"></property>
|
||||
<property name="maximize_button">0</property>
|
||||
<property name="maximum_size"></property>
|
||||
<property name="maxlength"></property>
|
||||
<property name="maxlength">0</property>
|
||||
<property name="min_size"></property>
|
||||
<property name="minimize_button">0</property>
|
||||
<property name="minimum_size"></property>
|
||||
@@ -3091,7 +3096,7 @@
|
||||
<property name="max_size"></property>
|
||||
<property name="maximize_button">0</property>
|
||||
<property name="maximum_size"></property>
|
||||
<property name="maxlength"></property>
|
||||
<property name="maxlength">0</property>
|
||||
<property name="min_size"></property>
|
||||
<property name="minimize_button">0</property>
|
||||
<property name="minimum_size"></property>
|
||||
@@ -3348,7 +3353,7 @@
|
||||
<property name="max_size"></property>
|
||||
<property name="maximize_button">0</property>
|
||||
<property name="maximum_size"></property>
|
||||
<property name="maxlength"></property>
|
||||
<property name="maxlength">0</property>
|
||||
<property name="min_size"></property>
|
||||
<property name="minimize_button">0</property>
|
||||
<property name="minimum_size"></property>
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
// C++ code generated with wxFormBuilder (version Jun 17 2015)
|
||||
// C++ code generated with wxFormBuilder (version May 21 2016)
|
||||
// http://www.wxformbuilder.org/
|
||||
//
|
||||
// PLEASE DO "NOT" EDIT THIS FILE!
|
||||
@@ -85,6 +85,7 @@ class DIALOG_EDIT_COMPONENT_IN_SCHEMATIC_FBP : public DIALOG_SHIM
|
||||
|
||||
// Virtual event handlers, overide them in your derived class
|
||||
virtual void OnCloseDialog( wxCloseEvent& event ) { event.Skip(); }
|
||||
virtual void OnInitDlg( wxInitDialogEvent& event ) { event.Skip(); }
|
||||
virtual void OnTestChipName( wxCommandEvent& event ) { event.Skip(); }
|
||||
virtual void OnSelectChipName( wxCommandEvent& event ) { event.Skip(); }
|
||||
virtual void SetInitCmp( wxCommandEvent& event ) { event.Skip(); }
|
||||
|
||||
@@ -110,12 +110,10 @@ DIALOG_LABEL_EDITOR::DIALOG_LABEL_EDITOR( SCH_EDIT_FRAME* aParent, SCH_TEXT* aTe
|
||||
m_CurrentText = aTextItem;
|
||||
InitDialog();
|
||||
|
||||
GetSizer()->SetSizeHints( this );
|
||||
Layout();
|
||||
Fit();
|
||||
SetMinSize( GetBestSize() );
|
||||
FixOSXCancelButtonIssue();
|
||||
|
||||
Centre();
|
||||
// Now all widgets have the size fixed, call FinishDialogSettings
|
||||
FinishDialogSettings();
|
||||
}
|
||||
|
||||
|
||||
@@ -165,9 +163,6 @@ void DIALOG_LABEL_EDITOR::InitDialog()
|
||||
|
||||
default:
|
||||
SetTitle( _( "Text Properties" ) );
|
||||
m_textLabel->Disconnect( wxEVT_COMMAND_TEXT_ENTER,
|
||||
wxCommandEventHandler ( DIALOG_LABEL_EDITOR::OnEnterKey ),
|
||||
NULL, this );
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -301,6 +296,7 @@ void DIALOG_LABEL_EDITOR::TextPropertiesAccept( wxCommandEvent& aEvent )
|
||||
m_CurrentText->SetSize( wxSize( value, value ) );
|
||||
|
||||
if( m_TextShape )
|
||||
/// @todo move cast to widget
|
||||
m_CurrentText->SetShape( m_TextShape->GetSelection() );
|
||||
|
||||
int style = m_TextStyle->GetSelection();
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
// C++ code generated with wxFormBuilder (version Mar 9 2015)
|
||||
// C++ code generated with wxFormBuilder (version Feb 26 2016)
|
||||
// http://www.wxformbuilder.org/
|
||||
//
|
||||
// PLEASE DO "NOT" EDIT THIS FILE!
|
||||
@@ -36,7 +36,7 @@ DIALOG_LABEL_EDITOR_BASE::DIALOG_LABEL_EDITOR_BASE( wxWindow* parent, wxWindowID
|
||||
|
||||
bSizeText->Add( m_textLabelSingleLine, 0, wxEXPAND|wxLEFT, 3 );
|
||||
|
||||
m_textLabelMultiLine = new wxTextCtrl( this, wxID_VALUEMULTI, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_MULTILINE|wxTE_PROCESS_ENTER );
|
||||
m_textLabelMultiLine = new wxTextCtrl( this, wxID_VALUEMULTI, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_MULTILINE );
|
||||
m_textLabelMultiLine->SetMinSize( wxSize( -1,60 ) );
|
||||
|
||||
bSizeText->Add( m_textLabelMultiLine, 1, wxEXPAND|wxLEFT, 3 );
|
||||
@@ -104,7 +104,6 @@ DIALOG_LABEL_EDITOR_BASE::DIALOG_LABEL_EDITOR_BASE( wxWindow* parent, wxWindowID
|
||||
|
||||
// Connect Events
|
||||
m_textLabelSingleLine->Connect( wxEVT_COMMAND_TEXT_ENTER, wxCommandEventHandler( DIALOG_LABEL_EDITOR_BASE::OnEnterKey ), NULL, this );
|
||||
m_textLabelMultiLine->Connect( wxEVT_COMMAND_TEXT_ENTER, wxCommandEventHandler( DIALOG_LABEL_EDITOR_BASE::OnEnterKey ), NULL, this );
|
||||
m_sdbSizer1Cancel->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_LABEL_EDITOR_BASE::OnCancelClick ), NULL, this );
|
||||
m_sdbSizer1OK->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_LABEL_EDITOR_BASE::OnOkClick ), NULL, this );
|
||||
}
|
||||
@@ -113,7 +112,6 @@ DIALOG_LABEL_EDITOR_BASE::~DIALOG_LABEL_EDITOR_BASE()
|
||||
{
|
||||
// Disconnect Events
|
||||
m_textLabelSingleLine->Disconnect( wxEVT_COMMAND_TEXT_ENTER, wxCommandEventHandler( DIALOG_LABEL_EDITOR_BASE::OnEnterKey ), NULL, this );
|
||||
m_textLabelMultiLine->Disconnect( wxEVT_COMMAND_TEXT_ENTER, wxCommandEventHandler( DIALOG_LABEL_EDITOR_BASE::OnEnterKey ), NULL, this );
|
||||
m_sdbSizer1Cancel->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_LABEL_EDITOR_BASE::OnCancelClick ), NULL, this );
|
||||
m_sdbSizer1OK->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_LABEL_EDITOR_BASE::OnOkClick ), NULL, this );
|
||||
|
||||
|
||||
@@ -342,7 +342,7 @@
|
||||
<property name="resize">Resizable</property>
|
||||
<property name="show">1</property>
|
||||
<property name="size"></property>
|
||||
<property name="style">wxTE_MULTILINE|wxTE_PROCESS_ENTER</property>
|
||||
<property name="style">wxTE_MULTILINE</property>
|
||||
<property name="subclass"></property>
|
||||
<property name="toolbar_pane">0</property>
|
||||
<property name="tooltip"></property>
|
||||
@@ -377,7 +377,7 @@
|
||||
<event name="OnSetFocus"></event>
|
||||
<event name="OnSize"></event>
|
||||
<event name="OnText"></event>
|
||||
<event name="OnTextEnter">OnEnterKey</event>
|
||||
<event name="OnTextEnter"></event>
|
||||
<event name="OnTextMaxLen"></event>
|
||||
<event name="OnTextURL"></event>
|
||||
<event name="OnUpdateUI"></event>
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
// C++ code generated with wxFormBuilder (version Mar 9 2015)
|
||||
// C++ code generated with wxFormBuilder (version Feb 26 2016)
|
||||
// http://www.wxformbuilder.org/
|
||||
//
|
||||
// PLEASE DO "NOT" EDIT THIS FILE!
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
* This program source code file is part of KiCad, a free EDA CAD application.
|
||||
*
|
||||
* Copyright (C) 2011-2013 SoftPLC Corporation, Dick Hollenbeck <dick@softplc.com>
|
||||
* Copyright (C) 2007 KiCad Developers, see change_log.txt for contributors.
|
||||
* Copyright (C) 2007-2016 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
|
||||
@@ -42,6 +42,7 @@
|
||||
#include <sch_field.h>
|
||||
#include <template_fieldnames.h>
|
||||
#include <dialog_helpers.h>
|
||||
#include <sch_validators.h>
|
||||
|
||||
#include <dialog_edit_libentry_fields_in_lib_base.h>
|
||||
|
||||
@@ -112,7 +113,12 @@ private:
|
||||
* bad data into a field, and this value can be used to deny a row change.
|
||||
*/
|
||||
bool copyPanelToSelectedField();
|
||||
void setRowItem( int aFieldNdx, const LIB_FIELD& aField );
|
||||
|
||||
void setRowItem( int aFieldNdx, const wxString& aName, const wxString& aValue );
|
||||
void setRowItem( int aFieldNdx, const LIB_FIELD& aField )
|
||||
{
|
||||
setRowItem( aFieldNdx, aField.GetName(), aField.GetText() );
|
||||
}
|
||||
|
||||
/**
|
||||
* Function updateDisplay
|
||||
@@ -165,9 +171,6 @@ DIALOG_EDIT_LIBENTRY_FIELDS_IN_LIB::DIALOG_EDIT_LIBENTRY_FIELDS_IN_LIB(
|
||||
m_parent = aParent;
|
||||
m_libEntry = aLibEntry;
|
||||
m_skipCopyFromPanel = false;
|
||||
|
||||
GetSizer()->SetSizeHints( this );
|
||||
Centre();
|
||||
}
|
||||
|
||||
|
||||
@@ -192,6 +195,11 @@ void DIALOG_EDIT_LIBENTRY_FIELDS_IN_LIB::OnInitDialog( wxInitDialogEvent& event
|
||||
copySelectedFieldToPanel();
|
||||
|
||||
stdDialogButtonSizerOK->SetDefault();
|
||||
|
||||
FixOSXCancelButtonIssue();
|
||||
|
||||
// Now all widgets have the size fixed, call FinishDialogSettings
|
||||
FinishDialogSettings();
|
||||
}
|
||||
|
||||
|
||||
@@ -240,7 +248,7 @@ void DIALOG_EDIT_LIBENTRY_FIELDS_IN_LIB::OnOKButtonClick( wxCommandEvent& event
|
||||
// test if reference prefix is acceptable
|
||||
if( !SCH_COMPONENT::IsReferenceStringValid( m_FieldsBuf[REFERENCE].GetText() ) )
|
||||
{
|
||||
DisplayError( NULL, _( "Illegal reference prefix. A reference must start by a letter" ) );
|
||||
DisplayError( NULL, _( "Illegal reference. References must start with a letter." ) );
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -282,15 +290,6 @@ void DIALOG_EDIT_LIBENTRY_FIELDS_IN_LIB::OnOKButtonClick( wxCommandEvent& event
|
||||
++i;
|
||||
}
|
||||
|
||||
#if defined(DEBUG)
|
||||
for( unsigned i = 0; i<m_FieldsBuf.size(); ++i )
|
||||
{
|
||||
printf( "save[%u].name:'%s' value:'%s'\n", i,
|
||||
TO_UTF8( m_FieldsBuf[i].GetName() ),
|
||||
TO_UTF8( m_FieldsBuf[i].GetText() ) );
|
||||
}
|
||||
#endif
|
||||
|
||||
// copy all the fields back, fully replacing any previous fields
|
||||
m_libEntry->SetFields( m_FieldsBuf );
|
||||
|
||||
@@ -415,8 +414,8 @@ void DIALOG_EDIT_LIBENTRY_FIELDS_IN_LIB::showButtonHandler( wxCommandEvent& even
|
||||
|
||||
if( frame->ShowModal( &fpid, this ) )
|
||||
{
|
||||
// DBG( printf( "%s: %s\n", __func__, TO_UTF8( fpid ) ); )
|
||||
fieldValueTextCtrl->SetValue( fpid );
|
||||
setRowItem( fieldNdx, m_FieldsBuf[fieldNdx].GetName( false ), fpid );
|
||||
}
|
||||
|
||||
frame->Destroy();
|
||||
@@ -486,13 +485,6 @@ void DIALOG_EDIT_LIBENTRY_FIELDS_IN_LIB::initBuffers()
|
||||
|
||||
m_libEntry->GetFields( cmpFields );
|
||||
|
||||
#if defined(DEBUG)
|
||||
for( unsigned i=0; i<cmpFields.size(); ++i )
|
||||
{
|
||||
printf( "cmpFields[%u].name:%s\n", i, TO_UTF8( cmpFields[i].GetName() ) );
|
||||
}
|
||||
#endif
|
||||
|
||||
/* We have 3 component related field lists to be aware of: 1) UI
|
||||
presentation (m_FieldsBuf), 2) fields in component ram copy, and 3)
|
||||
fields recorded with component on disk. m_FieldsBuf is the list of UI
|
||||
@@ -517,7 +509,6 @@ void DIALOG_EDIT_LIBENTRY_FIELDS_IN_LIB::initBuffers()
|
||||
// fixed fields:
|
||||
for( int i=0; i<MANDATORY_FIELDS; ++i )
|
||||
{
|
||||
DBG( printf( "add fixed:%s\n", TO_UTF8( cmpFields[i].GetName() ) ); )
|
||||
m_FieldsBuf.push_back( cmpFields[i] );
|
||||
}
|
||||
|
||||
@@ -543,8 +534,6 @@ void DIALOG_EDIT_LIBENTRY_FIELDS_IN_LIB::initBuffers()
|
||||
// values from the component will be set.
|
||||
if( !libField )
|
||||
{
|
||||
DBG( printf( "add template:%s\n", TO_UTF8( it->m_Name ) ); )
|
||||
|
||||
fld.SetName( it->m_Name );
|
||||
fld.SetText( it->m_Value ); // empty? ok too.
|
||||
|
||||
@@ -555,7 +544,6 @@ void DIALOG_EDIT_LIBENTRY_FIELDS_IN_LIB::initBuffers()
|
||||
}
|
||||
else
|
||||
{
|
||||
DBG( printf( "match template:%s\n", TO_UTF8( libField->GetName() ) ); )
|
||||
fld = *libField; // copy values from component, m_Name too
|
||||
}
|
||||
|
||||
@@ -571,7 +559,6 @@ void DIALOG_EDIT_LIBENTRY_FIELDS_IN_LIB::initBuffers()
|
||||
|
||||
if( !buf )
|
||||
{
|
||||
DBG( printf( "add cmp:%s\n", TO_UTF8( cmp->GetName() ) ); )
|
||||
m_FieldsBuf.push_back( *cmp );
|
||||
}
|
||||
}
|
||||
@@ -597,7 +584,7 @@ void DIALOG_EDIT_LIBENTRY_FIELDS_IN_LIB::initBuffers()
|
||||
}
|
||||
|
||||
|
||||
void DIALOG_EDIT_LIBENTRY_FIELDS_IN_LIB::setRowItem( int aFieldNdx, const LIB_FIELD& aField )
|
||||
void DIALOG_EDIT_LIBENTRY_FIELDS_IN_LIB::setRowItem( int aFieldNdx, const wxString& aName, const wxString& aValue )
|
||||
{
|
||||
wxASSERT( aFieldNdx >= 0 );
|
||||
|
||||
@@ -611,8 +598,8 @@ void DIALOG_EDIT_LIBENTRY_FIELDS_IN_LIB::setRowItem( int aFieldNdx, const LIB_FI
|
||||
fieldListCtrl->SetItem( ndx, COLUMN_TEXT, wxEmptyString );
|
||||
}
|
||||
|
||||
fieldListCtrl->SetItem( aFieldNdx, COLUMN_FIELD_NAME, aField.GetName() );
|
||||
fieldListCtrl->SetItem( aFieldNdx, COLUMN_TEXT, aField.GetText() );
|
||||
fieldListCtrl->SetItem( aFieldNdx, COLUMN_FIELD_NAME, aName );
|
||||
fieldListCtrl->SetItem( aFieldNdx, COLUMN_TEXT, aValue );
|
||||
|
||||
// recompute the column widths here, after setting texts
|
||||
fieldListCtrl->SetColumnWidth( COLUMN_FIELD_NAME, wxLIST_AUTOSIZE );
|
||||
@@ -687,6 +674,7 @@ void DIALOG_EDIT_LIBENTRY_FIELDS_IN_LIB::copySelectedFieldToPanel()
|
||||
// if fieldNdx == REFERENCE, VALUE, then disable delete button
|
||||
deleteFieldButton->Enable( fieldNdx >= MANDATORY_FIELDS );
|
||||
|
||||
fieldValueTextCtrl->SetValidator( SCH_FIELD_VALIDATOR( true, field.GetId() ) );
|
||||
fieldValueTextCtrl->SetValue( field.GetText() );
|
||||
|
||||
textSizeTextCtrl->SetValue( EDA_GRAPHIC_TEXT_CTRL::FormatSize( g_UserUnit, field.GetSize().x ) );
|
||||
@@ -739,6 +727,11 @@ bool DIALOG_EDIT_LIBENTRY_FIELDS_IN_LIB::copyPanelToSelectedField()
|
||||
if( fieldNdx >= m_FieldsBuf.size() ) // traps the -1 case too
|
||||
return true;
|
||||
|
||||
// Check for illegal field text.
|
||||
if( fieldValueTextCtrl->GetValidator()
|
||||
&& !fieldValueTextCtrl->GetValidator()->Validate( this ) )
|
||||
return false;
|
||||
|
||||
LIB_FIELD& field = m_FieldsBuf[fieldNdx];
|
||||
|
||||
if( showCheckBox->GetValue() )
|
||||
@@ -776,12 +769,9 @@ bool DIALOG_EDIT_LIBENTRY_FIELDS_IN_LIB::copyPanelToSelectedField()
|
||||
if( field.GetId() >= MANDATORY_FIELDS )
|
||||
{
|
||||
wxString name = fieldNameTextCtrl->GetValue();
|
||||
DBG( printf("name:%s\n", TO_UTF8( name ) ); )
|
||||
field.SetName( name );
|
||||
}
|
||||
|
||||
DBG( printf("setname:%s\n", TO_UTF8( field.GetName() ) ); )
|
||||
|
||||
setRowItem( fieldNdx, field ); // update fieldListCtrl
|
||||
|
||||
int tmp = EDA_GRAPHIC_TEXT_CTRL::ParseSize( textSizeTextCtrl->GetValue(), g_UserUnit );
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
// C++ code generated with wxFormBuilder (version Mar 9 2015)
|
||||
// C++ code generated with wxFormBuilder (version Jun 5 2014)
|
||||
// http://www.wxformbuilder.org/
|
||||
//
|
||||
// PLEASE DO "NOT" EDIT THIS FILE!
|
||||
@@ -23,9 +23,7 @@ DIALOG_EDIT_LIBENTRY_FIELDS_IN_LIB_BASE::DIALOG_EDIT_LIBENTRY_FIELDS_IN_LIB_BASE
|
||||
bSizerFiledsList = new wxBoxSizer( wxVERTICAL );
|
||||
|
||||
fieldListCtrl = new wxListCtrl( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLC_HRULES|wxLC_REPORT|wxLC_SINGLE_SEL|wxLC_VRULES );
|
||||
fieldListCtrl->SetMinSize( wxSize( 220,-1 ) );
|
||||
|
||||
bSizerFiledsList->Add( fieldListCtrl, 1, wxEXPAND|wxTOP|wxRIGHT|wxLEFT, 8 );
|
||||
bSizerFiledsList->Add( fieldListCtrl, 1, wxEXPAND|wxTOP|wxRIGHT|wxLEFT, 6 );
|
||||
|
||||
addFieldButton = new wxButton( this, wxID_ANY, _("Add Field"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
addFieldButton->SetToolTip( _("Add a new custom field") );
|
||||
@@ -68,7 +66,7 @@ DIALOG_EDIT_LIBENTRY_FIELDS_IN_LIB_BASE::DIALOG_EDIT_LIBENTRY_FIELDS_IN_LIB_BASE
|
||||
bSizerJustify->Add( m_FieldVJustifyCtrl, 1, wxEXPAND|wxALL, 5 );
|
||||
|
||||
|
||||
fieldEditBoxSizer->Add( bSizerJustify, 1, wxEXPAND|wxBOTTOM, 5 );
|
||||
fieldEditBoxSizer->Add( bSizerJustify, 1, wxALL|wxEXPAND, 5 );
|
||||
|
||||
wxBoxSizer* bSizerAspect;
|
||||
bSizerAspect = new wxBoxSizer( wxHORIZONTAL );
|
||||
@@ -96,7 +94,7 @@ DIALOG_EDIT_LIBENTRY_FIELDS_IN_LIB_BASE::DIALOG_EDIT_LIBENTRY_FIELDS_IN_LIB_BASE
|
||||
bSizerAspect->Add( m_StyleRadioBox, 1, wxBOTTOM|wxRIGHT|wxLEFT|wxEXPAND, 5 );
|
||||
|
||||
|
||||
fieldEditBoxSizer->Add( bSizerAspect, 1, wxEXPAND|wxTOP|wxBOTTOM, 5 );
|
||||
fieldEditBoxSizer->Add( bSizerAspect, 1, wxALL|wxEXPAND|wxTOP, 5 );
|
||||
|
||||
wxBoxSizer* fieldNameBoxSizer;
|
||||
fieldNameBoxSizer = new wxBoxSizer( wxVERTICAL );
|
||||
@@ -124,13 +122,13 @@ DIALOG_EDIT_LIBENTRY_FIELDS_IN_LIB_BASE::DIALOG_EDIT_LIBENTRY_FIELDS_IN_LIB_BASE
|
||||
m_show_datasheet_button = new wxButton( this, wxID_ANY, _("Show in Browser"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_show_datasheet_button->SetToolTip( _("If your datasheet is given as an http:// link, then pressing this button should bring it up in your webbrowser.") );
|
||||
|
||||
fieldNameBoxSizer->Add( m_show_datasheet_button, 0, wxBOTTOM|wxEXPAND, 5 );
|
||||
fieldNameBoxSizer->Add( m_show_datasheet_button, 0, wxBOTTOM|wxEXPAND|wxTOP, 5 );
|
||||
|
||||
|
||||
fieldEditBoxSizer->Add( fieldNameBoxSizer, 0, wxALL|wxEXPAND, 5 );
|
||||
|
||||
wxFlexGridSizer* fgSizerPosSize;
|
||||
fgSizerPosSize = new wxFlexGridSizer( 3, 3, 0, 0 );
|
||||
fgSizerPosSize = new wxFlexGridSizer( 3, 3, 5, 5 );
|
||||
fgSizerPosSize->AddGrowableCol( 1 );
|
||||
fgSizerPosSize->SetFlexibleDirection( wxBOTH );
|
||||
fgSizerPosSize->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
|
||||
@@ -143,25 +141,25 @@ DIALOG_EDIT_LIBENTRY_FIELDS_IN_LIB_BASE::DIALOG_EDIT_LIBENTRY_FIELDS_IN_LIB_BASE
|
||||
textSizeTextCtrl->SetMaxLength( 0 );
|
||||
textSizeTextCtrl->SetToolTip( _("The vertical height of the currently selected field's text in the schematic") );
|
||||
|
||||
fgSizerPosSize->Add( textSizeTextCtrl, 0, wxEXPAND|wxBOTTOM, 5 );
|
||||
fgSizerPosSize->Add( textSizeTextCtrl, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
|
||||
|
||||
m_staticTextUnitSize = new wxStaticText( this, wxID_ANY, _("unit"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_staticTextUnitSize->Wrap( -1 );
|
||||
fgSizerPosSize->Add( m_staticTextUnitSize, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
|
||||
fgSizerPosSize->Add( m_staticTextUnitSize, 0, wxALIGN_CENTER_VERTICAL, 5 );
|
||||
|
||||
posXLabel = new wxStaticText( this, wxID_ANY, _("PosX"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
posXLabel = new wxStaticText( this, wxID_ANY, _("X Position"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
posXLabel->Wrap( -1 );
|
||||
fgSizerPosSize->Add( posXLabel, 0, wxALIGN_CENTER_VERTICAL, 5 );
|
||||
|
||||
posXTextCtrl = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
|
||||
posXTextCtrl->SetMaxLength( 0 );
|
||||
fgSizerPosSize->Add( posXTextCtrl, 0, wxEXPAND|wxTOP, 5 );
|
||||
fgSizerPosSize->Add( posXTextCtrl, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
|
||||
|
||||
m_staticTextUnitPosX = new wxStaticText( this, wxID_ANY, _("unit"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_staticTextUnitPosX->Wrap( -1 );
|
||||
fgSizerPosSize->Add( m_staticTextUnitPosX, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
|
||||
fgSizerPosSize->Add( m_staticTextUnitPosX, 0, wxALIGN_CENTER_VERTICAL, 5 );
|
||||
|
||||
posYLabel = new wxStaticText( this, wxID_ANY, _("PosY"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
posYLabel = new wxStaticText( this, wxID_ANY, _("Y Position"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
posYLabel->Wrap( -1 );
|
||||
fgSizerPosSize->Add( posYLabel, 0, wxALIGN_CENTER_VERTICAL, 5 );
|
||||
|
||||
@@ -169,14 +167,14 @@ DIALOG_EDIT_LIBENTRY_FIELDS_IN_LIB_BASE::DIALOG_EDIT_LIBENTRY_FIELDS_IN_LIB_BASE
|
||||
posYTextCtrl->SetMaxLength( 0 );
|
||||
posYTextCtrl->SetToolTip( _("The Y coordinate of the text relative to the component") );
|
||||
|
||||
fgSizerPosSize->Add( posYTextCtrl, 0, wxEXPAND, 5 );
|
||||
fgSizerPosSize->Add( posYTextCtrl, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
|
||||
|
||||
m_staticTextUnitPosY = new wxStaticText( this, wxID_ANY, _("unit"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_staticTextUnitPosY->Wrap( -1 );
|
||||
fgSizerPosSize->Add( m_staticTextUnitPosY, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
|
||||
fgSizerPosSize->Add( m_staticTextUnitPosY, 0, wxALIGN_CENTER_VERTICAL, 5 );
|
||||
|
||||
|
||||
fieldEditBoxSizer->Add( fgSizerPosSize, 1, wxEXPAND|wxTOP|wxBOTTOM|wxLEFT, 5 );
|
||||
fieldEditBoxSizer->Add( fgSizerPosSize, 1, wxALL|wxEXPAND, 5 );
|
||||
|
||||
|
||||
bSizerFieldsSetup->Add( fieldEditBoxSizer, 2, wxEXPAND, 5 );
|
||||
@@ -194,11 +192,12 @@ DIALOG_EDIT_LIBENTRY_FIELDS_IN_LIB_BASE::DIALOG_EDIT_LIBENTRY_FIELDS_IN_LIB_BASE
|
||||
stdDialogButtonSizer->AddButton( stdDialogButtonSizerCancel );
|
||||
stdDialogButtonSizer->Realize();
|
||||
|
||||
mainSizer->Add( stdDialogButtonSizer, 0, wxALL|wxEXPAND, 8 );
|
||||
mainSizer->Add( stdDialogButtonSizer, 0, wxALL|wxEXPAND, 6 );
|
||||
|
||||
|
||||
this->SetSizer( mainSizer );
|
||||
this->Layout();
|
||||
mainSizer->Fit( this );
|
||||
|
||||
// Connect Events
|
||||
this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( DIALOG_EDIT_LIBENTRY_FIELDS_IN_LIB_BASE::OnCloseDialog ) );
|
||||
|
||||
@@ -44,7 +44,7 @@
|
||||
<property name="minimum_size"></property>
|
||||
<property name="name">DIALOG_EDIT_LIBENTRY_FIELDS_IN_LIB_BASE</property>
|
||||
<property name="pos"></property>
|
||||
<property name="size">542,529</property>
|
||||
<property name="size">-1,-1</property>
|
||||
<property name="style">wxCAPTION|wxCLOSE_BOX|wxDEFAULT_DIALOG_STYLE|wxMAXIMIZE_BOX|wxMINIMIZE_BOX|wxRESIZE_BORDER|wxSYSTEM_MENU</property>
|
||||
<property name="subclass">DIALOG_SHIM; dialog_shim.h</property>
|
||||
<property name="title">Field Properties</property>
|
||||
@@ -106,13 +106,13 @@
|
||||
<property name="border">5</property>
|
||||
<property name="flag">wxEXPAND</property>
|
||||
<property name="proportion">3</property>
|
||||
<object class="wxBoxSizer" expanded="0">
|
||||
<object class="wxBoxSizer" expanded="1">
|
||||
<property name="minimum_size"></property>
|
||||
<property name="name">bSizerFiledsList</property>
|
||||
<property name="orient">wxVERTICAL</property>
|
||||
<property name="permission">none</property>
|
||||
<object class="sizeritem" expanded="0">
|
||||
<property name="border">8</property>
|
||||
<property name="border">6</property>
|
||||
<property name="flag">wxEXPAND|wxTOP|wxRIGHT|wxLEFT</property>
|
||||
<property name="proportion">1</property>
|
||||
<object class="wxListCtrl" expanded="0">
|
||||
@@ -148,7 +148,7 @@
|
||||
<property name="maximum_size"></property>
|
||||
<property name="min_size"></property>
|
||||
<property name="minimize_button">0</property>
|
||||
<property name="minimum_size">220,-1</property>
|
||||
<property name="minimum_size">-1,-1</property>
|
||||
<property name="moveable">1</property>
|
||||
<property name="name">fieldListCtrl</property>
|
||||
<property name="pane_border">1</property>
|
||||
@@ -493,7 +493,7 @@
|
||||
<property name="permission">none</property>
|
||||
<object class="sizeritem" expanded="1">
|
||||
<property name="border">5</property>
|
||||
<property name="flag">wxEXPAND|wxBOTTOM</property>
|
||||
<property name="flag">wxALL|wxEXPAND</property>
|
||||
<property name="proportion">1</property>
|
||||
<object class="wxBoxSizer" expanded="1">
|
||||
<property name="minimum_size"></property>
|
||||
@@ -684,7 +684,7 @@
|
||||
</object>
|
||||
<object class="sizeritem" expanded="1">
|
||||
<property name="border">5</property>
|
||||
<property name="flag">wxEXPAND|wxTOP|wxBOTTOM</property>
|
||||
<property name="flag">wxALL|wxEXPAND|wxTOP</property>
|
||||
<property name="proportion">1</property>
|
||||
<object class="wxBoxSizer" expanded="1">
|
||||
<property name="minimum_size"></property>
|
||||
@@ -1332,7 +1332,7 @@
|
||||
</object>
|
||||
<object class="sizeritem" expanded="1">
|
||||
<property name="border">5</property>
|
||||
<property name="flag">wxBOTTOM|wxEXPAND</property>
|
||||
<property name="flag">wxBOTTOM|wxEXPAND|wxTOP</property>
|
||||
<property name="proportion">0</property>
|
||||
<object class="wxButton" expanded="1">
|
||||
<property name="BottomDockable">1</property>
|
||||
@@ -1422,20 +1422,20 @@
|
||||
</object>
|
||||
<object class="sizeritem" expanded="1">
|
||||
<property name="border">5</property>
|
||||
<property name="flag">wxEXPAND|wxTOP|wxBOTTOM|wxLEFT</property>
|
||||
<property name="flag">wxALL|wxEXPAND</property>
|
||||
<property name="proportion">1</property>
|
||||
<object class="wxFlexGridSizer" expanded="1">
|
||||
<property name="cols">3</property>
|
||||
<property name="flexible_direction">wxBOTH</property>
|
||||
<property name="growablecols">1</property>
|
||||
<property name="growablerows"></property>
|
||||
<property name="hgap">0</property>
|
||||
<property name="hgap">5</property>
|
||||
<property name="minimum_size"></property>
|
||||
<property name="name">fgSizerPosSize</property>
|
||||
<property name="non_flexible_grow_mode">wxFLEX_GROWMODE_SPECIFIED</property>
|
||||
<property name="permission">none</property>
|
||||
<property name="rows">3</property>
|
||||
<property name="vgap">0</property>
|
||||
<property name="vgap">5</property>
|
||||
<object class="sizeritem" expanded="1">
|
||||
<property name="border">5</property>
|
||||
<property name="flag">wxALIGN_CENTER_VERTICAL</property>
|
||||
@@ -1521,7 +1521,7 @@
|
||||
</object>
|
||||
<object class="sizeritem" expanded="1">
|
||||
<property name="border">5</property>
|
||||
<property name="flag">wxEXPAND|wxBOTTOM</property>
|
||||
<property name="flag">wxALIGN_CENTER_VERTICAL|wxEXPAND</property>
|
||||
<property name="proportion">0</property>
|
||||
<object class="wxTextCtrl" expanded="1">
|
||||
<property name="BottomDockable">1</property>
|
||||
@@ -1612,7 +1612,7 @@
|
||||
</object>
|
||||
<object class="sizeritem" expanded="1">
|
||||
<property name="border">5</property>
|
||||
<property name="flag">wxALL|wxALIGN_CENTER_VERTICAL</property>
|
||||
<property name="flag">wxALIGN_CENTER_VERTICAL</property>
|
||||
<property name="proportion">0</property>
|
||||
<object class="wxStaticText" expanded="1">
|
||||
<property name="BottomDockable">1</property>
|
||||
@@ -1725,7 +1725,7 @@
|
||||
<property name="gripper">0</property>
|
||||
<property name="hidden">0</property>
|
||||
<property name="id">wxID_ANY</property>
|
||||
<property name="label">PosX</property>
|
||||
<property name="label">X Position</property>
|
||||
<property name="max_size"></property>
|
||||
<property name="maximize_button">0</property>
|
||||
<property name="maximum_size"></property>
|
||||
@@ -1778,7 +1778,7 @@
|
||||
</object>
|
||||
<object class="sizeritem" expanded="1">
|
||||
<property name="border">5</property>
|
||||
<property name="flag">wxEXPAND|wxTOP</property>
|
||||
<property name="flag">wxALIGN_CENTER_VERTICAL|wxEXPAND</property>
|
||||
<property name="proportion">0</property>
|
||||
<object class="wxTextCtrl" expanded="1">
|
||||
<property name="BottomDockable">1</property>
|
||||
@@ -1869,7 +1869,7 @@
|
||||
</object>
|
||||
<object class="sizeritem" expanded="1">
|
||||
<property name="border">5</property>
|
||||
<property name="flag">wxALL|wxALIGN_CENTER_VERTICAL</property>
|
||||
<property name="flag">wxALIGN_CENTER_VERTICAL</property>
|
||||
<property name="proportion">0</property>
|
||||
<object class="wxStaticText" expanded="1">
|
||||
<property name="BottomDockable">1</property>
|
||||
@@ -1982,7 +1982,7 @@
|
||||
<property name="gripper">0</property>
|
||||
<property name="hidden">0</property>
|
||||
<property name="id">wxID_ANY</property>
|
||||
<property name="label">PosY</property>
|
||||
<property name="label">Y Position</property>
|
||||
<property name="max_size"></property>
|
||||
<property name="maximize_button">0</property>
|
||||
<property name="maximum_size"></property>
|
||||
@@ -2035,7 +2035,7 @@
|
||||
</object>
|
||||
<object class="sizeritem" expanded="1">
|
||||
<property name="border">5</property>
|
||||
<property name="flag">wxEXPAND</property>
|
||||
<property name="flag">wxALIGN_CENTER_VERTICAL|wxEXPAND</property>
|
||||
<property name="proportion">0</property>
|
||||
<object class="wxTextCtrl" expanded="1">
|
||||
<property name="BottomDockable">1</property>
|
||||
@@ -2126,7 +2126,7 @@
|
||||
</object>
|
||||
<object class="sizeritem" expanded="1">
|
||||
<property name="border">5</property>
|
||||
<property name="flag">wxALL|wxALIGN_CENTER_VERTICAL</property>
|
||||
<property name="flag">wxALIGN_CENTER_VERTICAL</property>
|
||||
<property name="proportion">0</property>
|
||||
<object class="wxStaticText" expanded="1">
|
||||
<property name="BottomDockable">1</property>
|
||||
@@ -2295,7 +2295,7 @@
|
||||
</object>
|
||||
</object>
|
||||
<object class="sizeritem" expanded="1">
|
||||
<property name="border">8</property>
|
||||
<property name="border">6</property>
|
||||
<property name="flag">wxALL|wxEXPAND</property>
|
||||
<property name="proportion">0</property>
|
||||
<object class="wxStdDialogButtonSizer" expanded="1">
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
// C++ code generated with wxFormBuilder (version Mar 9 2015)
|
||||
// C++ code generated with wxFormBuilder (version Jun 5 2014)
|
||||
// http://www.wxformbuilder.org/
|
||||
//
|
||||
// PLEASE DO "NOT" EDIT THIS FILE!
|
||||
@@ -84,7 +84,7 @@ class DIALOG_EDIT_LIBENTRY_FIELDS_IN_LIB_BASE : public DIALOG_SHIM
|
||||
|
||||
public:
|
||||
|
||||
DIALOG_EDIT_LIBENTRY_FIELDS_IN_LIB_BASE( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Field Properties"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 542,529 ), long style = wxCAPTION|wxCLOSE_BOX|wxDEFAULT_DIALOG_STYLE|wxMAXIMIZE_BOX|wxMINIMIZE_BOX|wxRESIZE_BORDER|wxSYSTEM_MENU );
|
||||
DIALOG_EDIT_LIBENTRY_FIELDS_IN_LIB_BASE( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Field Properties"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( -1,-1 ), long style = wxCAPTION|wxCLOSE_BOX|wxDEFAULT_DIALOG_STYLE|wxMAXIMIZE_BOX|wxMINIMIZE_BOX|wxRESIZE_BORDER|wxSYSTEM_MENU );
|
||||
~DIALOG_EDIT_LIBENTRY_FIELDS_IN_LIB_BASE();
|
||||
|
||||
};
|
||||
|
||||
@@ -7,7 +7,8 @@
|
||||
* This program source code file is part of KiCad, a free EDA CAD application.
|
||||
*
|
||||
* Copyright (C) 2012 Jean-Pierre Charras, jean-pierre.charras@gipsa-lab.inpg.com
|
||||
* Copyright (C) 2004-2012 KiCad Developers, see change_log.txt for contributors.
|
||||
* Copyright (C) 2016 Wayne Stambaugh, stambaughw@gmail.com
|
||||
* Copyright (C) 2004-2016 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
|
||||
@@ -31,82 +32,122 @@
|
||||
#include <common.h>
|
||||
#include <base_units.h>
|
||||
#include <kiway.h>
|
||||
#include <confirm.h>
|
||||
|
||||
#include <general.h>
|
||||
#include <sch_base_frame.h>
|
||||
#include <sch_component.h>
|
||||
#include <template_fieldnames.h>
|
||||
#include <class_libentry.h>
|
||||
#include <lib_field.h>
|
||||
#include <sch_component.h>
|
||||
#include <template_fieldnames.h>
|
||||
#include <class_library.h>
|
||||
#include <sch_validators.h>
|
||||
|
||||
#include <dialog_edit_one_field.h>
|
||||
|
||||
|
||||
void DIALOG_EDIT_ONE_FIELD::initDlg_base()
|
||||
// These should probably moved into some other file as helpers.
|
||||
EDA_TEXT_HJUSTIFY_T IntToEdaTextHorizJustify( int aHorizJustify )
|
||||
{
|
||||
wxASSERT( aHorizJustify >= GR_TEXT_HJUSTIFY_LEFT && aHorizJustify <= GR_TEXT_HJUSTIFY_RIGHT );
|
||||
|
||||
if( aHorizJustify > GR_TEXT_HJUSTIFY_RIGHT )
|
||||
return GR_TEXT_HJUSTIFY_RIGHT;
|
||||
|
||||
if( aHorizJustify < GR_TEXT_HJUSTIFY_LEFT )
|
||||
return GR_TEXT_HJUSTIFY_LEFT;
|
||||
|
||||
return (EDA_TEXT_HJUSTIFY_T) aHorizJustify;
|
||||
}
|
||||
|
||||
|
||||
EDA_TEXT_VJUSTIFY_T IntToEdaTextVertJustify( int aVertJustify )
|
||||
{
|
||||
wxASSERT( aVertJustify >= GR_TEXT_VJUSTIFY_TOP && aVertJustify <= GR_TEXT_VJUSTIFY_BOTTOM );
|
||||
|
||||
if( aVertJustify > GR_TEXT_VJUSTIFY_BOTTOM )
|
||||
return GR_TEXT_VJUSTIFY_BOTTOM;
|
||||
|
||||
if( aVertJustify < GR_TEXT_VJUSTIFY_TOP )
|
||||
return GR_TEXT_VJUSTIFY_TOP;
|
||||
|
||||
return (EDA_TEXT_VJUSTIFY_T) aVertJustify;
|
||||
}
|
||||
|
||||
|
||||
DIALOG_EDIT_ONE_FIELD::DIALOG_EDIT_ONE_FIELD( SCH_BASE_FRAME* aParent, const wxString& aTitle,
|
||||
const EDA_TEXT* aTextItem ) :
|
||||
DIALOG_LIB_EDIT_TEXT_BASE( aParent )
|
||||
{
|
||||
SetTitle( aTitle );
|
||||
|
||||
// The field ID and power status are Initialized in the derived object's ctor.
|
||||
m_fieldId = VALUE;
|
||||
m_isPower = false;
|
||||
|
||||
m_text = aTextItem->GetText();
|
||||
m_style = aTextItem->IsItalic() ? 1 : 0;
|
||||
m_style += aTextItem->IsBold() ? 2 : 0;
|
||||
m_size = aTextItem->GetSize().x;
|
||||
m_orientation = ( aTextItem->GetOrientation() == TEXT_ORIENT_VERT );
|
||||
m_verticalJustification = aTextItem->GetVertJustify() + 1;
|
||||
m_horizontalJustification = aTextItem->GetHorizJustify() + 1;
|
||||
m_isVisible = aTextItem->IsVisible();
|
||||
}
|
||||
|
||||
|
||||
void DIALOG_EDIT_ONE_FIELD::init()
|
||||
{
|
||||
wxString msg;
|
||||
|
||||
m_TextValue->SetFocus();
|
||||
SCH_BASE_FRAME* parent = static_cast<SCH_BASE_FRAME*>( GetParent() );
|
||||
m_TextValue->SetValidator( SCH_FIELD_VALIDATOR(
|
||||
parent->IsType( FRAME_SCH_LIB_EDITOR ),
|
||||
m_fieldId, &m_text ) );
|
||||
|
||||
// Disable options for graphic text edition, not existing in fields
|
||||
// Disable options for graphic text editing which are not needed for fields.
|
||||
m_CommonConvert->Show( false );
|
||||
m_CommonUnit->Show( false );
|
||||
|
||||
msg = StringFromValue( g_UserUnit, m_textsize );
|
||||
m_TextSize->SetValue( msg );
|
||||
|
||||
if( m_textorient == TEXT_ORIENT_VERT )
|
||||
m_Orient->SetValue( true );
|
||||
|
||||
m_Invisible->SetValue( m_text_invisible );
|
||||
m_TextShapeOpt->SetSelection( m_textshape );
|
||||
SetPowerWarning( false );
|
||||
|
||||
switch ( m_textHjustify )
|
||||
// Show the footprint selection dialog if this is the footprint field.
|
||||
if( m_fieldId == FOOTPRINT )
|
||||
{
|
||||
case GR_TEXT_HJUSTIFY_LEFT:
|
||||
m_TextHJustificationOpt->SetSelection( 0 );
|
||||
break;
|
||||
|
||||
case GR_TEXT_HJUSTIFY_CENTER:
|
||||
m_TextHJustificationOpt->SetSelection( 1 );
|
||||
break;
|
||||
|
||||
case GR_TEXT_HJUSTIFY_RIGHT:
|
||||
m_TextHJustificationOpt->SetSelection( 2 );
|
||||
break;
|
||||
m_TextValueSelectButton->Show();
|
||||
m_TextValueSelectButton->Enable();
|
||||
}
|
||||
|
||||
switch ( m_textVjustify )
|
||||
else
|
||||
{
|
||||
case GR_TEXT_VJUSTIFY_BOTTOM:
|
||||
m_TextVJustificationOpt->SetSelection( 0 );
|
||||
break;
|
||||
|
||||
case GR_TEXT_VJUSTIFY_CENTER:
|
||||
m_TextVJustificationOpt->SetSelection( 1 );
|
||||
break;
|
||||
|
||||
case GR_TEXT_VJUSTIFY_TOP:
|
||||
m_TextVJustificationOpt->SetSelection( 2 );
|
||||
break;
|
||||
m_TextValueSelectButton->Hide();
|
||||
m_TextValueSelectButton->Disable();
|
||||
}
|
||||
|
||||
msg = m_TextSizeText->GetLabel() + ReturnUnitSymbol();
|
||||
m_TextSizeText->SetLabel( msg );
|
||||
|
||||
|
||||
// Value fields of power components cannot be modified. This will grey out
|
||||
// the text box and display an explanation.
|
||||
if( m_fieldId == VALUE && m_isPower )
|
||||
{
|
||||
m_PowerComponentValues->Show( true );
|
||||
m_TextValue->Enable( false );
|
||||
}
|
||||
else
|
||||
{
|
||||
m_PowerComponentValues->Show( false );
|
||||
m_TextValue->Enable( true );
|
||||
}
|
||||
|
||||
m_sdbSizerButtonsOK->SetDefault();
|
||||
|
||||
FixOSXCancelButtonIssue();
|
||||
|
||||
// Now all widgets have the size fixed, call FinishDialogSettings
|
||||
FinishDialogSettings();
|
||||
}
|
||||
|
||||
void DIALOG_EDIT_ONE_FIELD::SetPowerWarning( bool aWarn )
|
||||
{
|
||||
m_PowerComponentValues->Show( aWarn );
|
||||
m_TextValue->Enable( ! aWarn );
|
||||
Fit();
|
||||
}
|
||||
|
||||
void DIALOG_EDIT_ONE_FIELD::OnTextValueSelectButtonClick( wxCommandEvent& aEvent )
|
||||
{
|
||||
@@ -117,7 +158,6 @@ void DIALOG_EDIT_ONE_FIELD::OnTextValueSelectButtonClick( wxCommandEvent& aEvent
|
||||
|
||||
if( frame->ShowModal( &fpid, this ) )
|
||||
{
|
||||
// DBG( printf( "%s: %s\n", __func__, TO_UTF8( fpid ) ); )
|
||||
m_TextValue->SetValue( fpid );
|
||||
}
|
||||
|
||||
@@ -125,179 +165,114 @@ void DIALOG_EDIT_ONE_FIELD::OnTextValueSelectButtonClick( wxCommandEvent& aEvent
|
||||
}
|
||||
|
||||
|
||||
void DIALOG_LIB_EDIT_ONE_FIELD::initDlg()
|
||||
bool DIALOG_EDIT_ONE_FIELD::TransferDataToWindow()
|
||||
{
|
||||
m_textsize = m_field->GetSize().x;
|
||||
m_TextValue->SetValue( m_field->GetText() );
|
||||
m_textorient = m_field->GetOrientation();
|
||||
m_text_invisible = m_field->IsVisible() ? false : true;
|
||||
wxLogDebug( "In DIALOG_EDIT_ONE_FIELD::TransferDataToWindow()" );
|
||||
|
||||
m_textshape = 0;
|
||||
m_TextValue->SetValue( m_text );
|
||||
m_Orient->SetValue( m_orientation );
|
||||
m_TextSize->SetValue( StringFromValue( g_UserUnit, m_size ) );
|
||||
m_TextHJustificationOpt->SetSelection( m_horizontalJustification );
|
||||
m_TextVJustificationOpt->SetSelection( m_verticalJustification );
|
||||
m_Invisible->SetValue( !m_isVisible );
|
||||
m_TextShapeOpt->SetSelection( m_style );
|
||||
|
||||
if( m_field->IsItalic() )
|
||||
m_textshape = 1;
|
||||
|
||||
if( m_field->IsBold() )
|
||||
m_textshape |= 2;
|
||||
|
||||
m_textHjustify = m_field->GetHorizJustify();
|
||||
m_textVjustify = m_field->GetVertJustify();
|
||||
|
||||
if( m_field->GetId() == FOOTPRINT )
|
||||
{
|
||||
m_TextValueSelectButton->Show();
|
||||
m_TextValueSelectButton->Enable();
|
||||
}
|
||||
else
|
||||
{
|
||||
m_TextValueSelectButton->Hide();
|
||||
m_TextValueSelectButton->Disable();
|
||||
}
|
||||
|
||||
initDlg_base();
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
wxString DIALOG_LIB_EDIT_ONE_FIELD::GetTextField()
|
||||
bool DIALOG_EDIT_ONE_FIELD::TransferDataFromWindow()
|
||||
{
|
||||
wxString line = m_TextValue->GetValue();
|
||||
wxLogDebug( "In DIALOG_EDIT_ONE_FIELD::TransferDataFromWindow()" );
|
||||
|
||||
// Spaces are not allowed in reference or value
|
||||
if( m_field->GetId() == REFERENCE || m_field->GetId() == VALUE )
|
||||
m_text = m_TextValue->GetValue();
|
||||
|
||||
// There are lots of specific tests required to validate field text.
|
||||
if( m_fieldId == REFERENCE )
|
||||
{
|
||||
if( line.Replace( wxT( " " ), wxT( "_" ) ) )
|
||||
// Test if the reference string is valid:
|
||||
if( !SCH_COMPONENT::IsReferenceStringValid( m_text ) )
|
||||
{
|
||||
wxString msg;
|
||||
msg.Printf( _(
|
||||
"Whitespace is not permitted inside references or values (symbol names in lib).\n"
|
||||
"The text you entered has been converted to use underscores: %s" ),
|
||||
line
|
||||
);
|
||||
wxMessageDialog dlg( this, msg );
|
||||
dlg.ShowModal();
|
||||
DisplayError( this, _( "Illegal reference field value!" ) );
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
// Prevent the message from appearing twice by restuffing the text box.
|
||||
m_TextValue->SetValue( line );
|
||||
m_orientation = m_Orient->GetValue();
|
||||
m_size = ValueFromString( g_UserUnit, m_TextSize->GetValue() );
|
||||
m_horizontalJustification = m_TextHJustificationOpt->GetSelection();
|
||||
m_verticalJustification = m_TextVJustificationOpt->GetSelection();
|
||||
m_isVisible = !m_Invisible->GetValue();
|
||||
m_style = m_TextShapeOpt->GetSelection();
|
||||
|
||||
return line;
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
void DIALOG_EDIT_ONE_FIELD::TransfertDataToField( bool aIncludeText )
|
||||
void DIALOG_EDIT_ONE_FIELD::updateText( EDA_TEXT* aText )
|
||||
{
|
||||
// This method doesn't transfer text anyway.
|
||||
(void) aIncludeText;
|
||||
aText->SetSize( wxSize( m_size, m_size ) );
|
||||
aText->SetVisible( m_isVisible );
|
||||
aText->SetOrientation( m_orientation ? TEXT_ORIENT_VERT : TEXT_ORIENT_HORIZ );
|
||||
aText->SetItalic( (m_style & 1) != 0 );
|
||||
aText->SetBold( (m_style & 2) != 0 );
|
||||
aText->SetHorizJustify( IntToEdaTextHorizJustify( m_horizontalJustification - 1 ) );
|
||||
aText->SetVertJustify( IntToEdaTextVertJustify( m_verticalJustification - 1 ) );
|
||||
}
|
||||
|
||||
m_textorient = m_Orient->GetValue() ? TEXT_ORIENT_VERT : TEXT_ORIENT_HORIZ;
|
||||
wxString msg = m_TextSize->GetValue();
|
||||
m_textsize = ValueFromString( g_UserUnit, msg );
|
||||
|
||||
switch( m_TextHJustificationOpt->GetSelection() )
|
||||
DIALOG_LIB_EDIT_ONE_FIELD::DIALOG_LIB_EDIT_ONE_FIELD( SCH_BASE_FRAME* aParent,
|
||||
const wxString& aTitle,
|
||||
const LIB_FIELD* aField ) :
|
||||
DIALOG_EDIT_ONE_FIELD( aParent, aTitle, dynamic_cast< const EDA_TEXT* >( aField ) )
|
||||
{
|
||||
m_fieldId = aField->GetId();
|
||||
|
||||
// When in the library editor, power components can be renamed.
|
||||
m_isPower = false;
|
||||
init();
|
||||
}
|
||||
|
||||
|
||||
DIALOG_SCH_EDIT_ONE_FIELD::DIALOG_SCH_EDIT_ONE_FIELD( SCH_BASE_FRAME* aParent,
|
||||
const wxString& aTitle,
|
||||
const SCH_FIELD* aField ) :
|
||||
DIALOG_EDIT_ONE_FIELD( aParent, aTitle, dynamic_cast< const EDA_TEXT* >( aField ) )
|
||||
{
|
||||
m_fieldId = aField->GetId();
|
||||
|
||||
const SCH_COMPONENT* component = (SCH_COMPONENT*) aField->GetParent();
|
||||
|
||||
wxASSERT_MSG( component != NULL && component->Type() == SCH_COMPONENT_T,
|
||||
wxT( "Invalid schematic field parent item." ) );
|
||||
|
||||
const LIB_PART* part = GetParent()->Prj().SchLibs()->FindLibPart( component->GetPartName() );
|
||||
|
||||
wxASSERT_MSG( part, wxT( "Library part for component <" ) +
|
||||
component->GetPartName() + wxT( "> could not be found." ) );
|
||||
|
||||
m_isPower = part->IsPower();
|
||||
|
||||
init();
|
||||
}
|
||||
|
||||
|
||||
void DIALOG_SCH_EDIT_ONE_FIELD::UpdateField( SCH_FIELD* aField, SCH_SHEET_PATH* aSheetPath )
|
||||
{
|
||||
wxASSERT( aField != NULL || aField->Type() != SCH_FIELD_T );
|
||||
|
||||
if( aField->GetId() == REFERENCE )
|
||||
{
|
||||
case 0:
|
||||
m_textHjustify = GR_TEXT_HJUSTIFY_LEFT;
|
||||
break;
|
||||
wxASSERT( aSheetPath != NULL );
|
||||
|
||||
case 1:
|
||||
m_textHjustify = GR_TEXT_HJUSTIFY_CENTER;
|
||||
break;
|
||||
SCH_COMPONENT* component = dynamic_cast< SCH_COMPONENT* >( aField->GetParent() );
|
||||
|
||||
case 2:
|
||||
m_textHjustify = GR_TEXT_HJUSTIFY_RIGHT;
|
||||
break;
|
||||
wxASSERT( component != NULL );
|
||||
|
||||
if( component != NULL )
|
||||
component->SetRef( aSheetPath, m_text );
|
||||
}
|
||||
|
||||
switch( m_TextVJustificationOpt->GetSelection() )
|
||||
{
|
||||
case 0:
|
||||
m_textVjustify = GR_TEXT_VJUSTIFY_BOTTOM;
|
||||
break;
|
||||
|
||||
case 1:
|
||||
m_textVjustify = GR_TEXT_VJUSTIFY_CENTER;
|
||||
break;
|
||||
|
||||
case 2:
|
||||
m_textVjustify = GR_TEXT_VJUSTIFY_TOP;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void DIALOG_LIB_EDIT_ONE_FIELD::TransfertDataToField( bool aIncludeText )
|
||||
{
|
||||
DIALOG_EDIT_ONE_FIELD::TransfertDataToField( aIncludeText );
|
||||
|
||||
if( aIncludeText )
|
||||
m_field->SetText( GetTextField() );
|
||||
|
||||
m_field->SetSize( wxSize( m_textsize, m_textsize ) );
|
||||
m_field->SetOrientation( m_textorient );
|
||||
m_field->SetVisible( !m_Invisible->GetValue() );
|
||||
m_field->SetItalic( ( m_TextShapeOpt->GetSelection() & 1 ) != 0 );
|
||||
m_field->SetBold( ( m_TextShapeOpt->GetSelection() & 2 ) != 0 );
|
||||
m_field->SetHorizJustify( m_textHjustify );
|
||||
m_field->SetVertJustify( m_textVjustify );
|
||||
}
|
||||
|
||||
|
||||
void DIALOG_SCH_EDIT_ONE_FIELD::initDlg()
|
||||
{
|
||||
m_textsize = m_field->GetSize().x;
|
||||
m_TextValue->SetValue( m_field->GetText() );
|
||||
m_textorient = m_field->GetOrientation();
|
||||
m_text_invisible = m_field->IsVisible() ? false : true;
|
||||
|
||||
m_textshape = 0;
|
||||
|
||||
if( m_field->IsItalic() )
|
||||
m_textshape = 1;
|
||||
|
||||
if( m_field->IsBold() )
|
||||
m_textshape |= 2;
|
||||
|
||||
m_textHjustify = m_field->GetHorizJustify();
|
||||
m_textVjustify = m_field->GetVertJustify();
|
||||
|
||||
if( m_field->GetId() == FOOTPRINT )
|
||||
{
|
||||
m_TextValueSelectButton->Show();
|
||||
m_TextValueSelectButton->Enable();
|
||||
}
|
||||
else
|
||||
{
|
||||
m_TextValueSelectButton->Hide();
|
||||
m_TextValueSelectButton->Disable();
|
||||
}
|
||||
|
||||
initDlg_base();
|
||||
}
|
||||
|
||||
|
||||
wxString DIALOG_SCH_EDIT_ONE_FIELD::GetTextField()
|
||||
{
|
||||
wxString line = m_TextValue->GetValue();
|
||||
line.Trim( true );
|
||||
line.Trim( false );
|
||||
return line;
|
||||
};
|
||||
|
||||
|
||||
void DIALOG_SCH_EDIT_ONE_FIELD::TransfertDataToField( bool aIncludeText )
|
||||
{
|
||||
DIALOG_EDIT_ONE_FIELD::TransfertDataToField( aIncludeText );
|
||||
|
||||
if( aIncludeText )
|
||||
m_field->SetText( GetTextField() );
|
||||
|
||||
m_field->SetSize( wxSize( m_textsize, m_textsize ) );
|
||||
m_field->SetOrientation( m_textorient );
|
||||
m_field->SetVisible( !m_Invisible->GetValue() );
|
||||
|
||||
m_field->SetItalic( ( m_TextShapeOpt->GetSelection() & 1 ) != 0 );
|
||||
m_field->SetBold( ( m_TextShapeOpt->GetSelection() & 2 ) != 0 );
|
||||
m_field->SetHorizJustify( m_textHjustify );
|
||||
m_field->SetVertJustify( m_textVjustify );
|
||||
aField->SetText( m_text );
|
||||
updateText( aField );
|
||||
}
|
||||
|
||||
@@ -6,7 +6,8 @@
|
||||
* This program source code file is part of KiCad, a free EDA CAD application.
|
||||
*
|
||||
* Copyright (C) 2012 Jean-Pierre Charras, jean-pierre.charras@gipsa-lab.inpg.com
|
||||
* Copyright (C) 2004-2012 KiCad Developers, see change_log.txt for contributors.
|
||||
* Copyright (C) 2016 Wayne Stambaugh, stambaughw@gmail.com
|
||||
* Copyright (C) 2004-2016 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
|
||||
@@ -28,80 +29,42 @@
|
||||
|
||||
#include <dialog_lib_edit_text_base.h>
|
||||
|
||||
|
||||
class SCH_BASE_FRAME;
|
||||
class LIB_FIELD;
|
||||
class SCH_FIELD;
|
||||
class EDA_TEXT;
|
||||
|
||||
|
||||
/**
|
||||
* Class DIALOG_EDIT_ONE_FIELD
|
||||
* is a basic class to edit a field: a schematic or a lib component field
|
||||
* is a base class to edit schematic and component library fields.
|
||||
* <p>
|
||||
* This class is setup in expectation of its children
|
||||
* possibly using Kiway player so ShowQuasiModal is required when calling
|
||||
* any subclasses.
|
||||
*</p>
|
||||
*/
|
||||
class DIALOG_EDIT_ONE_FIELD : public DIALOG_LIB_EDIT_TEXT_BASE
|
||||
{
|
||||
protected:
|
||||
SCH_BASE_FRAME* m_parent;
|
||||
int m_textshape;
|
||||
int m_textsize;
|
||||
int m_textorient;
|
||||
EDA_TEXT_HJUSTIFY_T m_textHjustify;
|
||||
EDA_TEXT_VJUSTIFY_T m_textVjustify;
|
||||
bool m_text_invisible;
|
||||
|
||||
public:
|
||||
DIALOG_EDIT_ONE_FIELD( SCH_BASE_FRAME* aParent, const wxString& aTitle ):
|
||||
DIALOG_LIB_EDIT_TEXT_BASE( aParent )
|
||||
{
|
||||
m_parent = aParent;
|
||||
SetTitle( aTitle );
|
||||
DIALOG_EDIT_ONE_FIELD( SCH_BASE_FRAME* aParent, const wxString& aTitle,
|
||||
const EDA_TEXT* aTextItem );
|
||||
|
||||
// Avoid not initialized members:
|
||||
m_textshape = 0;
|
||||
m_textsize = 0;
|
||||
m_textorient = 0;
|
||||
m_textHjustify = GR_TEXT_HJUSTIFY_CENTER;
|
||||
m_textVjustify = GR_TEXT_VJUSTIFY_CENTER;
|
||||
m_text_invisible = false;
|
||||
}
|
||||
~DIALOG_EDIT_ONE_FIELD() {}
|
||||
|
||||
// ~DIALOG_EDIT_ONE_FIELD() {};
|
||||
virtual bool TransferDataToWindow();
|
||||
|
||||
/**
|
||||
* Function TransfertDataToField
|
||||
* Converts fields from dialog window to variables to be used by child classes
|
||||
*
|
||||
* @param aIncludeText Whether the valies transferred should include the actual
|
||||
* item text. If this is false, formatting will be transferred, but text will
|
||||
* not.
|
||||
*/
|
||||
virtual void TransfertDataToField( bool aIncludeText = true );
|
||||
virtual bool TransferDataFromWindow();
|
||||
|
||||
void SetTextField( const wxString& aText )
|
||||
{
|
||||
m_TextValue->SetValue( aText );
|
||||
}
|
||||
SCH_BASE_FRAME* GetParent() { return dynamic_cast< SCH_BASE_FRAME* >( wxDialog::GetParent() ); }
|
||||
|
||||
/**
|
||||
* Function SetPowerWarning
|
||||
* Disables the Text field and displays the "Power component values cannot
|
||||
* be modified!" warning, if aWarn is true. Performs the inverse if aWarn
|
||||
* is false (this, however, is the default).
|
||||
*
|
||||
* @param aWarn whether or not to produce the warning
|
||||
*/
|
||||
void SetPowerWarning( bool aWarn );
|
||||
const wxString& GetText() const { return m_text; }
|
||||
|
||||
protected:
|
||||
/**
|
||||
* Function initDlg_base
|
||||
* Common dialog option initialization for the subclasses to call
|
||||
*/
|
||||
void initDlg_base();
|
||||
|
||||
void init();
|
||||
|
||||
void updateText( EDA_TEXT* aText );
|
||||
|
||||
/**
|
||||
* Function OnTextValueSelectButtonClick
|
||||
@@ -114,106 +77,83 @@ protected:
|
||||
*/
|
||||
void OnTextValueSelectButtonClick( wxCommandEvent& aEvent );
|
||||
|
||||
/// @todo Update DIALOG_SHIM to handle this transparently so no matter what mode the
|
||||
/// dialogs is shown, everything is handled without this ugliness.
|
||||
void OnOkClick( wxCommandEvent& aEvent )
|
||||
{
|
||||
EndQuasiModal( wxID_OK );
|
||||
if( IsQuasiModal() )
|
||||
EndQuasiModal( wxID_OK );
|
||||
else
|
||||
EndDialog( wxID_OK );
|
||||
}
|
||||
|
||||
void OnCancelClick( wxCommandEvent& event )
|
||||
{
|
||||
EndQuasiModal( wxID_CANCEL );
|
||||
if( IsQuasiModal() )
|
||||
EndQuasiModal( wxID_CANCEL );
|
||||
else
|
||||
EndDialog( wxID_CANCEL );
|
||||
}
|
||||
|
||||
void OnCloseDialog( wxCloseEvent& aEvent )
|
||||
{
|
||||
EndQuasiModal( wxID_CANCEL );
|
||||
if( IsQuasiModal() )
|
||||
EndQuasiModal( wxID_CANCEL );
|
||||
else
|
||||
EndDialog( wxID_CANCEL );
|
||||
}
|
||||
|
||||
int m_fieldId;
|
||||
bool m_isPower;
|
||||
wxString m_text;
|
||||
int m_style;
|
||||
int m_size;
|
||||
bool m_orientation;
|
||||
int m_verticalJustification;
|
||||
int m_horizontalJustification;
|
||||
bool m_isVisible;
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* Class DIALOG_LIB_EDIT_ONE_FIELD
|
||||
* is a the class to handle editing a single component field
|
||||
* in the library editor.
|
||||
* is a the class to handle editing a single component field in the library editor.
|
||||
* <p>
|
||||
* Note: Use ShowQuasiModal when calling this class!
|
||||
* @note Use ShowQuasiModal when calling this class!
|
||||
* </p>
|
||||
*/
|
||||
class DIALOG_LIB_EDIT_ONE_FIELD : public DIALOG_EDIT_ONE_FIELD
|
||||
{
|
||||
private:
|
||||
LIB_FIELD* m_field;
|
||||
|
||||
public:
|
||||
DIALOG_LIB_EDIT_ONE_FIELD( SCH_BASE_FRAME* aParent, const wxString& aTitle,
|
||||
LIB_FIELD* aField ):
|
||||
DIALOG_EDIT_ONE_FIELD( aParent, aTitle )
|
||||
const LIB_FIELD* aField );
|
||||
|
||||
~DIALOG_LIB_EDIT_ONE_FIELD() {}
|
||||
|
||||
void UpdateField( LIB_FIELD* aField )
|
||||
{
|
||||
m_field = aField;
|
||||
initDlg();
|
||||
GetSizer()->SetSizeHints( this );
|
||||
Centre();
|
||||
aField->SetText( m_text );
|
||||
updateText( aField );
|
||||
}
|
||||
|
||||
~DIALOG_LIB_EDIT_ONE_FIELD() {};
|
||||
|
||||
void TransfertDataToField( bool aIncludeText = true );
|
||||
|
||||
/**
|
||||
* Function GetTextField
|
||||
* Returns the dialog's text field value with spaces filtered to underscores
|
||||
*/
|
||||
wxString GetTextField();
|
||||
|
||||
private:
|
||||
/**
|
||||
* Function initDlg
|
||||
* Initializes dialog data using the LIB_FIELD container of data, this function is
|
||||
* otherwise identical to DIALOG_SCH_EDIT_ONE_FIELD::initDlg()
|
||||
*/
|
||||
void initDlg( );
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* Class DIALOG_SCH_EDIT_ONE_FIELD
|
||||
* is a the class to handle editing a single component field
|
||||
* in the schematic editor.
|
||||
* is a the class to handle editing a single component field in the schematic editor.
|
||||
* <p>
|
||||
* Note: Use ShowQuasiModal when calling this class!
|
||||
* @note Use ShowQuasiModal when calling this class!
|
||||
* </p>
|
||||
*/
|
||||
class DIALOG_SCH_EDIT_ONE_FIELD : public DIALOG_EDIT_ONE_FIELD
|
||||
{
|
||||
private:
|
||||
SCH_FIELD* m_field;
|
||||
|
||||
public:
|
||||
DIALOG_SCH_EDIT_ONE_FIELD( SCH_BASE_FRAME* aParent,
|
||||
const wxString& aTitle, SCH_FIELD* aField ):
|
||||
DIALOG_EDIT_ONE_FIELD( aParent, aTitle )
|
||||
{
|
||||
m_field = aField;
|
||||
initDlg();
|
||||
GetSizer()->SetSizeHints( this );
|
||||
Centre();
|
||||
}
|
||||
DIALOG_SCH_EDIT_ONE_FIELD( SCH_BASE_FRAME* aParent, const wxString& aTitle,
|
||||
const SCH_FIELD* aField );
|
||||
|
||||
// ~DIALOG_SCH_EDIT_ONE_FIELD() {};
|
||||
~DIALOG_SCH_EDIT_ONE_FIELD() {}
|
||||
|
||||
void TransfertDataToField( bool aIncludeText = true );
|
||||
|
||||
/**
|
||||
* Function GetTextField
|
||||
* Retrieves text field value from dialog with whitespaced on both sides trimmed
|
||||
*/
|
||||
wxString GetTextField();
|
||||
|
||||
private:
|
||||
/**
|
||||
* Function initDlg
|
||||
* Initializes dialog data using the SCH_FIELD container of data, this function is
|
||||
* otherwise identical to DIALOG_LIB_EDIT_ONE_FIELD::initDlg()
|
||||
*/
|
||||
void initDlg( );
|
||||
void UpdateField( SCH_FIELD* aField, SCH_SHEET_PATH* aSheetPath );
|
||||
};
|
||||
|
||||
#endif // DIALOG_EDIT_ONE_FIELD_H_
|
||||
|
||||
@@ -39,9 +39,6 @@ DIALOG_EESCHEMA_OPTIONS::DIALOG_EESCHEMA_OPTIONS( wxWindow* parent ) :
|
||||
m_choiceUnits->SetFocus();
|
||||
m_sdbSizerOK->SetDefault();
|
||||
|
||||
// Dialog should not shrink beyond it's minimal size.
|
||||
GetSizer()->SetSizeHints( this );
|
||||
|
||||
wxListItem col0;
|
||||
col0.SetId( 0 );
|
||||
col0.SetText( _( "Field Name" ) );
|
||||
@@ -76,6 +73,11 @@ DIALOG_EESCHEMA_OPTIONS::DIALOG_EESCHEMA_OPTIONS( wxWindow* parent ) :
|
||||
|
||||
fieldDefaultValueTextCtrl->Connect( wxEVT_KILL_FOCUS,
|
||||
wxFocusEventHandler( DIALOG_EESCHEMA_OPTIONS::OnEditControlKillFocus ), NULL, this );
|
||||
|
||||
FixOSXCancelButtonIssue();
|
||||
|
||||
// Now all widgets have the size fixed, call FinishDialogSettings
|
||||
FinishDialogSettings();
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -400,6 +400,20 @@ public:
|
||||
return m_checkMiddleButtonPanLimited->GetValue();
|
||||
}
|
||||
|
||||
/**
|
||||
* Function SetEnableMousewheelPan
|
||||
* Sets the MousewheelPan setting in the dialog
|
||||
*
|
||||
* @param enable The boolean value to set the AutoPan value in the dialog
|
||||
*/
|
||||
void SetEnableMousewheelPan( bool enable ) { m_checkEnableMousewheelPan->SetValue( enable ); }
|
||||
|
||||
/**
|
||||
* Function GetEnableMousewheelPan
|
||||
* Return the MousewheelPan setting from the dialog
|
||||
*/
|
||||
bool GetEnableMousewheelPan( void ) { return m_checkEnableMousewheelPan->GetValue(); }
|
||||
|
||||
/**
|
||||
* Function SetEnableAutoPan
|
||||
* Sets the AutoPan setting in the dialog
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
// C++ code generated with wxFormBuilder (version Mar 13 2015)
|
||||
// C++ code generated with wxFormBuilder (version May 21 2016)
|
||||
// http://www.wxformbuilder.org/
|
||||
//
|
||||
// PLEASE DO "NOT" EDIT THIS FILE!
|
||||
@@ -205,6 +205,11 @@ DIALOG_EESCHEMA_OPTIONS_BASE::DIALOG_EESCHEMA_OPTIONS_BASE( wxWindow* parent, wx
|
||||
|
||||
bSizer2->Add( m_checkMiddleButtonPanLimited, 0, wxTOP|wxRIGHT|wxLEFT, 3 );
|
||||
|
||||
m_checkEnableMousewheelPan = new wxCheckBox( m_panel1, xwID_ANY, _("Use touchpa&d to pan"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_checkEnableMousewheelPan->SetToolTip( _("Use touchpad to pan canvas") );
|
||||
|
||||
bSizer2->Add( m_checkEnableMousewheelPan, 0, wxLEFT|wxRIGHT|wxTOP, 3 );
|
||||
|
||||
m_checkAutoPan = new wxCheckBox( m_panel1, wxID_ANY, _("Pan while moving ob&ject"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
bSizer2->Add( m_checkAutoPan, 0, wxEXPAND|wxTOP|wxRIGHT|wxLEFT, 3 );
|
||||
|
||||
@@ -224,7 +229,7 @@ DIALOG_EESCHEMA_OPTIONS_BASE::DIALOG_EESCHEMA_OPTIONS_BASE( wxWindow* parent, wx
|
||||
m_panel1->SetSizer( p1mainSizer );
|
||||
m_panel1->Layout();
|
||||
p1mainSizer->Fit( m_panel1 );
|
||||
m_notebook->AddPage( m_panel1, _("General Options"), false );
|
||||
m_notebook->AddPage( m_panel1, _("General Options"), true );
|
||||
m_panel2 = new wxPanel( m_notebook, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
|
||||
m_panel2->SetToolTip( _("User defined field names for schematic components. ") );
|
||||
|
||||
@@ -239,21 +244,21 @@ DIALOG_EESCHEMA_OPTIONS_BASE::DIALOG_EESCHEMA_OPTIONS_BASE( wxWindow* parent, wx
|
||||
wxStaticBoxSizer* fieldSizer;
|
||||
fieldSizer = new wxStaticBoxSizer( new wxStaticBox( m_panel2, wxID_ANY, _("Field Settings") ), wxVERTICAL );
|
||||
|
||||
fieldNameLabel = new wxStaticText( m_panel2, wxID_ANY, _("&Name"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
fieldNameLabel = new wxStaticText( fieldSizer->GetStaticBox(), wxID_ANY, _("&Name"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
fieldNameLabel->Wrap( -1 );
|
||||
fieldSizer->Add( fieldNameLabel, 0, wxLEFT|wxRIGHT|wxTOP, 5 );
|
||||
|
||||
fieldNameTextCtrl = new wxTextCtrl( m_panel2, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_PROCESS_ENTER );
|
||||
fieldNameTextCtrl = new wxTextCtrl( fieldSizer->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_PROCESS_ENTER );
|
||||
fieldSizer->Add( fieldNameTextCtrl, 0, wxBOTTOM|wxEXPAND|wxLEFT|wxRIGHT, 5 );
|
||||
|
||||
fieldDefaultValueLabel = new wxStaticText( m_panel2, wxID_ANY, _("D&efault Value"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
fieldDefaultValueLabel = new wxStaticText( fieldSizer->GetStaticBox(), wxID_ANY, _("D&efault Value"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
fieldDefaultValueLabel->Wrap( -1 );
|
||||
fieldSizer->Add( fieldDefaultValueLabel, 0, wxLEFT|wxRIGHT|wxTOP, 5 );
|
||||
|
||||
fieldDefaultValueTextCtrl = new wxTextCtrl( m_panel2, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_PROCESS_ENTER );
|
||||
fieldDefaultValueTextCtrl = new wxTextCtrl( fieldSizer->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_PROCESS_ENTER );
|
||||
fieldSizer->Add( fieldDefaultValueTextCtrl, 0, wxBOTTOM|wxEXPAND|wxLEFT|wxRIGHT, 5 );
|
||||
|
||||
fieldVisibleCheckbox = new wxCheckBox( m_panel2, wxID_ANY, _("&Visible"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
fieldVisibleCheckbox = new wxCheckBox( fieldSizer->GetStaticBox(), wxID_ANY, _("&Visible"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
fieldSizer->Add( fieldVisibleCheckbox, 0, wxALL, 5 );
|
||||
|
||||
|
||||
@@ -269,7 +274,7 @@ DIALOG_EESCHEMA_OPTIONS_BASE::DIALOG_EESCHEMA_OPTIONS_BASE( wxWindow* parent, wx
|
||||
m_panel2->SetSizer( bSizer6 );
|
||||
m_panel2->Layout();
|
||||
bSizer6->Fit( m_panel2 );
|
||||
m_notebook->AddPage( m_panel2, _("Template Field Names"), true );
|
||||
m_notebook->AddPage( m_panel2, _("Template Field Names"), false );
|
||||
|
||||
bOptionsSizer->Add( m_notebook, 1, wxALL|wxEXPAND, 5 );
|
||||
|
||||
|
||||
@@ -45,7 +45,7 @@
|
||||
<property name="name">DIALOG_EESCHEMA_OPTIONS_BASE</property>
|
||||
<property name="pos"></property>
|
||||
<property name="size">-1,-1</property>
|
||||
<property name="style">wxDEFAULT_DIALOG_STYLE</property>
|
||||
<property name="style">wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER</property>
|
||||
<property name="subclass">DIALOG_SHIM; dialog_shim.h</property>
|
||||
<property name="title">Schematic Editor Options</property>
|
||||
<property name="tooltip"></property>
|
||||
@@ -187,7 +187,7 @@
|
||||
<object class="notebookpage" expanded="1">
|
||||
<property name="bitmap"></property>
|
||||
<property name="label">General Options</property>
|
||||
<property name="select">0</property>
|
||||
<property name="select">1</property>
|
||||
<object class="wxPanel" expanded="1">
|
||||
<property name="BottomDockable">1</property>
|
||||
<property name="LeftDockable">1</property>
|
||||
@@ -3399,6 +3399,94 @@
|
||||
<event name="OnUpdateUI"></event>
|
||||
</object>
|
||||
</object>
|
||||
<object class="sizeritem" expanded="0">
|
||||
<property name="border">3</property>
|
||||
<property name="flag">wxLEFT|wxRIGHT|wxTOP</property>
|
||||
<property name="proportion">0</property>
|
||||
<object class="wxCheckBox" expanded="0">
|
||||
<property name="BottomDockable">1</property>
|
||||
<property name="LeftDockable">1</property>
|
||||
<property name="RightDockable">1</property>
|
||||
<property name="TopDockable">1</property>
|
||||
<property name="aui_layer"></property>
|
||||
<property name="aui_name"></property>
|
||||
<property name="aui_position"></property>
|
||||
<property name="aui_row"></property>
|
||||
<property name="best_size"></property>
|
||||
<property name="bg"></property>
|
||||
<property name="caption"></property>
|
||||
<property name="caption_visible">1</property>
|
||||
<property name="center_pane">0</property>
|
||||
<property name="checked">0</property>
|
||||
<property name="close_button">1</property>
|
||||
<property name="context_help"></property>
|
||||
<property name="context_menu">1</property>
|
||||
<property name="default_pane">0</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="font"></property>
|
||||
<property name="gripper">0</property>
|
||||
<property name="hidden">0</property>
|
||||
<property name="id">xwID_ANY</property>
|
||||
<property name="label">Use touchpa&d to pan</property>
|
||||
<property name="max_size"></property>
|
||||
<property name="maximize_button">0</property>
|
||||
<property name="maximum_size"></property>
|
||||
<property name="min_size"></property>
|
||||
<property name="minimize_button">0</property>
|
||||
<property name="minimum_size"></property>
|
||||
<property name="moveable">1</property>
|
||||
<property name="name">m_checkEnableMousewheelPan</property>
|
||||
<property name="pane_border">1</property>
|
||||
<property name="pane_position"></property>
|
||||
<property name="pane_size"></property>
|
||||
<property name="permission">protected</property>
|
||||
<property name="pin_button">1</property>
|
||||
<property name="pos"></property>
|
||||
<property name="resize">Resizable</property>
|
||||
<property name="show">1</property>
|
||||
<property name="size"></property>
|
||||
<property name="style"></property>
|
||||
<property name="subclass"></property>
|
||||
<property name="toolbar_pane">0</property>
|
||||
<property name="tooltip">Use touchpad to pan canvas</property>
|
||||
<property name="validator_data_type"></property>
|
||||
<property name="validator_style">wxFILTER_NONE</property>
|
||||
<property name="validator_type">wxDefaultValidator</property>
|
||||
<property name="validator_variable"></property>
|
||||
<property name="window_extra_style"></property>
|
||||
<property name="window_name"></property>
|
||||
<property name="window_style"></property>
|
||||
<event name="OnChar"></event>
|
||||
<event name="OnCheckBox"></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">
|
||||
<property name="border">3</property>
|
||||
<property name="flag">wxEXPAND|wxTOP|wxRIGHT|wxLEFT</property>
|
||||
@@ -3673,7 +3761,7 @@
|
||||
<object class="notebookpage" expanded="1">
|
||||
<property name="bitmap"></property>
|
||||
<property name="label">Template Field Names</property>
|
||||
<property name="select">1</property>
|
||||
<property name="select">0</property>
|
||||
<object class="wxPanel" expanded="1">
|
||||
<property name="BottomDockable">1</property>
|
||||
<property name="LeftDockable">1</property>
|
||||
@@ -3868,6 +3956,7 @@
|
||||
<property name="minimum_size"></property>
|
||||
<property name="name">fieldSizer</property>
|
||||
<property name="orient">wxVERTICAL</property>
|
||||
<property name="parent">1</property>
|
||||
<property name="permission">none</property>
|
||||
<event name="OnUpdateUI"></event>
|
||||
<object class="sizeritem" expanded="1">
|
||||
@@ -3988,7 +4077,7 @@
|
||||
<property name="max_size"></property>
|
||||
<property name="maximize_button">0</property>
|
||||
<property name="maximum_size"></property>
|
||||
<property name="maxlength"></property>
|
||||
<property name="maxlength">0</property>
|
||||
<property name="min_size"></property>
|
||||
<property name="minimize_button">0</property>
|
||||
<property name="minimum_size"></property>
|
||||
@@ -4162,7 +4251,7 @@
|
||||
<property name="max_size"></property>
|
||||
<property name="maximize_button">0</property>
|
||||
<property name="maximum_size"></property>
|
||||
<property name="maxlength"></property>
|
||||
<property name="maxlength">0</property>
|
||||
<property name="min_size"></property>
|
||||
<property name="minimize_button">0</property>
|
||||
<property name="minimum_size"></property>
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
// C++ code generated with wxFormBuilder (version Mar 13 2015)
|
||||
// C++ code generated with wxFormBuilder (version May 21 2016)
|
||||
// http://www.wxformbuilder.org/
|
||||
//
|
||||
// PLEASE DO "NOT" EDIT THIS FILE!
|
||||
@@ -106,6 +106,7 @@ class DIALOG_EESCHEMA_OPTIONS_BASE : public DIALOG_SHIM
|
||||
wxCheckBox* m_checkEnableZoomCenter;
|
||||
wxCheckBox* m_checkEnableMiddleButtonPan;
|
||||
wxCheckBox* m_checkMiddleButtonPanLimited;
|
||||
wxCheckBox* m_checkEnableMousewheelPan;
|
||||
wxCheckBox* m_checkAutoPan;
|
||||
wxCheckBox* m_checkHVOrientation;
|
||||
wxCheckBox* m_checkPageLimits;
|
||||
@@ -136,7 +137,7 @@ class DIALOG_EESCHEMA_OPTIONS_BASE : public DIALOG_SHIM
|
||||
|
||||
public:
|
||||
|
||||
DIALOG_EESCHEMA_OPTIONS_BASE( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Schematic Editor Options"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( -1,-1 ), long style = wxDEFAULT_DIALOG_STYLE );
|
||||
DIALOG_EESCHEMA_OPTIONS_BASE( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Schematic Editor Options"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( -1,-1 ), long style = wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER );
|
||||
~DIALOG_EESCHEMA_OPTIONS_BASE();
|
||||
|
||||
};
|
||||
|
||||
@@ -66,8 +66,10 @@ DIALOG_ERC::DIALOG_ERC( SCH_EDIT_FRAME* parent ) :
|
||||
m_lastMarkerFound = NULL;
|
||||
Init();
|
||||
|
||||
GetSizer()->SetSizeHints( this );
|
||||
Centre();
|
||||
FixOSXCancelButtonIssue();
|
||||
|
||||
// Now all widgets have the size fixed, call FinishDialogSettings
|
||||
FinishDialogSettings();
|
||||
}
|
||||
|
||||
DIALOG_ERC::~DIALOG_ERC()
|
||||
|
||||
@@ -37,6 +37,11 @@ DIALOG_LIB_EDIT_DRAW_ITEM::DIALOG_LIB_EDIT_DRAW_ITEM( wxWindow* parent,
|
||||
// Required under wxGTK if we want to dismiss the dialog with the ESC key
|
||||
SetFocus();
|
||||
m_sdbSizer1OK->SetDefault();
|
||||
|
||||
FixOSXCancelButtonIssue();
|
||||
|
||||
// Now all widgets have the size fixed, call FinishDialogSettings
|
||||
FinishDialogSettings();
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
// C++ code generated with wxFormBuilder (version Oct 8 2012)
|
||||
// C++ code generated with wxFormBuilder (version May 21 2016)
|
||||
// http://www.wxformbuilder.org/
|
||||
//
|
||||
// PLEASE DO "NOT" EDIT THIS FILE!
|
||||
@@ -9,7 +9,7 @@
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
|
||||
DIALOG_LIB_EDIT_DRAW_ITEM_BASE::DIALOG_LIB_EDIT_DRAW_ITEM_BASE( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style ) : wxDialog( parent, id, title, pos, size, style )
|
||||
DIALOG_LIB_EDIT_DRAW_ITEM_BASE::DIALOG_LIB_EDIT_DRAW_ITEM_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 );
|
||||
|
||||
@@ -21,7 +21,7 @@ DIALOG_LIB_EDIT_DRAW_ITEM_BASE::DIALOG_LIB_EDIT_DRAW_ITEM_BASE( wxWindow* parent
|
||||
|
||||
m_staticText1 = new wxStaticText( this, wxID_ANY, _("General"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_staticText1->Wrap( -1 );
|
||||
m_staticText1->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) );
|
||||
m_staticText1->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD, false, wxEmptyString ) );
|
||||
|
||||
dlgBorderSizer->Add( m_staticText1, 0, wxALIGN_LEFT, 3 );
|
||||
|
||||
@@ -39,7 +39,6 @@ DIALOG_LIB_EDIT_DRAW_ITEM_BASE::DIALOG_LIB_EDIT_DRAW_ITEM_BASE( wxWindow* parent
|
||||
bSizer3->Add( 0, 0, 1, wxEXPAND, 3 );
|
||||
|
||||
m_textWidth = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_textWidth->SetMaxLength( 0 );
|
||||
bSizer3->Add( m_textWidth, 0, wxALIGN_CENTER_VERTICAL|wxALL, 3 );
|
||||
|
||||
m_staticWidthUnits = new wxStaticText( this, wxID_ANY, _("mm"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
@@ -51,7 +50,7 @@ DIALOG_LIB_EDIT_DRAW_ITEM_BASE::DIALOG_LIB_EDIT_DRAW_ITEM_BASE( wxWindow* parent
|
||||
|
||||
m_staticTextSharing = new wxStaticText( this, ID_M_STATICTEXTSHARING, _("Sharing"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_staticTextSharing->Wrap( -1 );
|
||||
m_staticTextSharing->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) );
|
||||
m_staticTextSharing->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD, false, wxEmptyString ) );
|
||||
|
||||
dlgBorderSizer->Add( m_staticTextSharing, 0, wxTOP|wxBOTTOM, 5 );
|
||||
|
||||
@@ -84,7 +83,7 @@ DIALOG_LIB_EDIT_DRAW_ITEM_BASE::DIALOG_LIB_EDIT_DRAW_ITEM_BASE( wxWindow* parent
|
||||
|
||||
m_staticText4 = new wxStaticText( this, wxID_ANY, _("Fill Style"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_staticText4->Wrap( -1 );
|
||||
m_staticText4->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) );
|
||||
m_staticText4->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD, false, wxEmptyString ) );
|
||||
|
||||
dlgBorderSizer->Add( m_staticText4, 0, wxALIGN_LEFT|wxBOTTOM, 3 );
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
// C++ code generated with wxFormBuilder (version Oct 8 2012)
|
||||
// C++ code generated with wxFormBuilder (version May 21 2016)
|
||||
// http://www.wxformbuilder.org/
|
||||
//
|
||||
// PLEASE DO "NOT" EDIT THIS FILE!
|
||||
@@ -11,6 +11,9 @@
|
||||
#include <wx/artprov.h>
|
||||
#include <wx/xrc/xmlres.h>
|
||||
#include <wx/intl.h>
|
||||
class DIALOG_SHIM;
|
||||
|
||||
#include "dialog_shim.h"
|
||||
#include <wx/string.h>
|
||||
#include <wx/stattext.h>
|
||||
#include <wx/gdicmn.h>
|
||||
@@ -29,7 +32,7 @@
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
/// Class DIALOG_LIB_EDIT_DRAW_ITEM_BASE
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
class DIALOG_LIB_EDIT_DRAW_ITEM_BASE : public wxDialog
|
||||
class DIALOG_LIB_EDIT_DRAW_ITEM_BASE : public DIALOG_SHIM
|
||||
{
|
||||
private:
|
||||
|
||||
|
||||
@@ -67,6 +67,11 @@ DIALOG_LIB_EDIT_PIN::~DIALOG_LIB_EDIT_PIN()
|
||||
void DIALOG_LIB_EDIT_PIN::OnInitDialog( wxInitDialogEvent& event )
|
||||
{
|
||||
m_textPinName->SetFocus();
|
||||
|
||||
FixOSXCancelButtonIssue();
|
||||
|
||||
// Now all widgets have the size fixed, call FinishDialogSettings
|
||||
FinishDialogSettings();
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
@@ -48,8 +48,10 @@ DIALOG_LIB_EDIT_TEXT::DIALOG_LIB_EDIT_TEXT( LIB_EDIT_FRAME* aParent, LIB_TEXT* a
|
||||
m_graphicText = aText;
|
||||
initDlg();
|
||||
|
||||
GetSizer()->SetSizeHints(this);
|
||||
Centre();
|
||||
FixOSXCancelButtonIssue();
|
||||
|
||||
// Now all widgets have the size fixed, call FinishDialogSettings
|
||||
FinishDialogSettings();
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
// C++ code generated with wxFormBuilder (version Mar 9 2015)
|
||||
// C++ code generated with wxFormBuilder (version Jun 5 2014)
|
||||
// http://www.wxformbuilder.org/
|
||||
//
|
||||
// PLEASE DO "NOT" EDIT THIS FILE!
|
||||
@@ -36,10 +36,10 @@ DIALOG_LIB_EDIT_TEXT_BASE::DIALOG_LIB_EDIT_TEXT_BASE( wxWindow* parent, wxWindow
|
||||
m_TextValue->SetMaxLength( 0 );
|
||||
m_TextValue->SetMinSize( wxSize( 200,-1 ) );
|
||||
|
||||
bTextValueOptsSizer->Add( m_TextValue, 1, wxBOTTOM|wxEXPAND|wxLEFT|wxRIGHT, 5 );
|
||||
bTextValueOptsSizer->Add( m_TextValue, 1, wxALIGN_CENTER_HORIZONTAL|wxALL|wxEXPAND, 5 );
|
||||
|
||||
m_TextValueSelectButton = new wxButton( this, wxID_ANY, _("Select"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
bTextValueOptsSizer->Add( m_TextValueSelectButton, 0, wxALIGN_CENTER_VERTICAL|wxBOTTOM, 5 );
|
||||
bTextValueOptsSizer->Add( m_TextValueSelectButton, 0, wxALIGN_CENTER_VERTICAL, 5 );
|
||||
|
||||
|
||||
bTextValueBoxSizer->Add( bTextValueOptsSizer, 1, wxEXPAND, 5 );
|
||||
@@ -56,10 +56,10 @@ DIALOG_LIB_EDIT_TEXT_BASE::DIALOG_LIB_EDIT_TEXT_BASE( wxWindow* parent, wxWindow
|
||||
|
||||
m_TextSize = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_TextSize->SetMaxLength( 0 );
|
||||
bTextSizeSizer->Add( m_TextSize, 0, wxBOTTOM|wxRIGHT|wxLEFT, 5 );
|
||||
bTextSizeSizer->Add( m_TextSize, 0, wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxLEFT|wxRIGHT|wxTOP, 5 );
|
||||
|
||||
|
||||
bUpperBoxSizer->Add( bTextSizeSizer, 0, 0, 5 );
|
||||
bUpperBoxSizer->Add( bTextSizeSizer, 0, wxEXPAND, 5 );
|
||||
|
||||
|
||||
bPropertiesSizer->Add( bUpperBoxSizer, 0, wxEXPAND, 5 );
|
||||
@@ -115,14 +115,8 @@ DIALOG_LIB_EDIT_TEXT_BASE::DIALOG_LIB_EDIT_TEXT_BASE( wxWindow* parent, wxWindow
|
||||
|
||||
bPropertiesSizer->Add( bBottomtBoxSizer, 1, wxEXPAND, 5 );
|
||||
|
||||
wxBoxSizer* bRightSizer;
|
||||
bRightSizer = new wxBoxSizer( wxVERTICAL );
|
||||
|
||||
|
||||
bPropertiesSizer->Add( bRightSizer, 0, wxEXPAND, 5 );
|
||||
|
||||
|
||||
bMainSizer->Add( bPropertiesSizer, 1, wxEXPAND|wxLEFT|wxRIGHT|wxTOP, 6 );
|
||||
bMainSizer->Add( bPropertiesSizer, 1, wxEXPAND, 6 );
|
||||
|
||||
m_sdbSizerButtons = new wxStdDialogButtonSizer();
|
||||
m_sdbSizerButtonsOK = new wxButton( this, wxID_OK );
|
||||
@@ -131,11 +125,12 @@ DIALOG_LIB_EDIT_TEXT_BASE::DIALOG_LIB_EDIT_TEXT_BASE( wxWindow* parent, wxWindow
|
||||
m_sdbSizerButtons->AddButton( m_sdbSizerButtonsCancel );
|
||||
m_sdbSizerButtons->Realize();
|
||||
|
||||
bMainSizer->Add( m_sdbSizerButtons, 0, wxALL|wxEXPAND, 12 );
|
||||
bMainSizer->Add( m_sdbSizerButtons, 0, wxBOTTOM|wxEXPAND|wxTOP, 5 );
|
||||
|
||||
|
||||
this->SetSizer( bMainSizer );
|
||||
this->Layout();
|
||||
bMainSizer->Fit( this );
|
||||
|
||||
// Connect Events
|
||||
this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( DIALOG_LIB_EDIT_TEXT_BASE::OnCloseDialog ) );
|
||||
|
||||
@@ -44,7 +44,7 @@
|
||||
<property name="minimum_size"></property>
|
||||
<property name="name">DIALOG_LIB_EDIT_TEXT_BASE</property>
|
||||
<property name="pos"></property>
|
||||
<property name="size">615,343</property>
|
||||
<property name="size">-1,-1</property>
|
||||
<property name="style">wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER</property>
|
||||
<property name="subclass">DIALOG_SHIM; dialog_shim.h</property>
|
||||
<property name="title">Library Text Properties</property>
|
||||
@@ -95,7 +95,7 @@
|
||||
<property name="permission">none</property>
|
||||
<object class="sizeritem" expanded="1">
|
||||
<property name="border">6</property>
|
||||
<property name="flag">wxEXPAND|wxLEFT|wxRIGHT|wxTOP</property>
|
||||
<property name="flag">wxEXPAND</property>
|
||||
<property name="proportion">1</property>
|
||||
<object class="wxBoxSizer" expanded="1">
|
||||
<property name="minimum_size"></property>
|
||||
@@ -214,7 +214,7 @@
|
||||
<property name="permission">none</property>
|
||||
<object class="sizeritem" expanded="0">
|
||||
<property name="border">5</property>
|
||||
<property name="flag">wxBOTTOM|wxEXPAND|wxLEFT|wxRIGHT</property>
|
||||
<property name="flag">wxALIGN_CENTER_HORIZONTAL|wxALL|wxEXPAND</property>
|
||||
<property name="proportion">1</property>
|
||||
<object class="wxTextCtrl" expanded="0">
|
||||
<property name="BottomDockable">1</property>
|
||||
@@ -305,7 +305,7 @@
|
||||
</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</property>
|
||||
<property name="proportion">0</property>
|
||||
<object class="wxButton" expanded="0">
|
||||
<property name="BottomDockable">1</property>
|
||||
@@ -397,7 +397,7 @@
|
||||
</object>
|
||||
<object class="sizeritem" expanded="1">
|
||||
<property name="border">5</property>
|
||||
<property name="flag"></property>
|
||||
<property name="flag">wxEXPAND</property>
|
||||
<property name="proportion">0</property>
|
||||
<object class="wxBoxSizer" expanded="1">
|
||||
<property name="minimum_size"></property>
|
||||
@@ -489,7 +489,7 @@
|
||||
</object>
|
||||
<object class="sizeritem" expanded="0">
|
||||
<property name="border">5</property>
|
||||
<property name="flag">wxBOTTOM|wxRIGHT|wxLEFT</property>
|
||||
<property name="flag">wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxLEFT|wxRIGHT|wxTOP</property>
|
||||
<property name="proportion">0</property>
|
||||
<object class="wxTextCtrl" expanded="0">
|
||||
<property name="BottomDockable">1</property>
|
||||
@@ -1393,22 +1393,11 @@
|
||||
</object>
|
||||
</object>
|
||||
</object>
|
||||
<object class="sizeritem" expanded="0">
|
||||
<property name="border">5</property>
|
||||
<property name="flag">wxEXPAND</property>
|
||||
<property name="proportion">0</property>
|
||||
<object class="wxBoxSizer" expanded="0">
|
||||
<property name="minimum_size"></property>
|
||||
<property name="name">bRightSizer</property>
|
||||
<property name="orient">wxVERTICAL</property>
|
||||
<property name="permission">none</property>
|
||||
</object>
|
||||
</object>
|
||||
</object>
|
||||
</object>
|
||||
<object class="sizeritem" expanded="0">
|
||||
<property name="border">12</property>
|
||||
<property name="flag">wxALL|wxEXPAND</property>
|
||||
<property name="border">5</property>
|
||||
<property name="flag">wxBOTTOM|wxEXPAND|wxTOP</property>
|
||||
<property name="proportion">0</property>
|
||||
<object class="wxStdDialogButtonSizer" expanded="0">
|
||||
<property name="Apply">0</property>
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
// C++ code generated with wxFormBuilder (version Mar 9 2015)
|
||||
// C++ code generated with wxFormBuilder (version Jun 5 2014)
|
||||
// http://www.wxformbuilder.org/
|
||||
//
|
||||
// PLEASE DO "NOT" EDIT THIS FILE!
|
||||
@@ -66,7 +66,7 @@ class DIALOG_LIB_EDIT_TEXT_BASE : public DIALOG_SHIM
|
||||
|
||||
public:
|
||||
|
||||
DIALOG_LIB_EDIT_TEXT_BASE( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Library Text Properties"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 615,343 ), long style = wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER );
|
||||
DIALOG_LIB_EDIT_TEXT_BASE( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Library Text Properties"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( -1,-1 ), long style = wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER );
|
||||
~DIALOG_LIB_EDIT_TEXT_BASE();
|
||||
|
||||
};
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
* This program source code file is part of KiCad, a free EDA CAD application.
|
||||
*
|
||||
* Copyright (C) 2009 Wayne Stambaugh <stambaughw@verizon.net>
|
||||
* Copyright (C) 2014 KiCad Developers, see CHANGELOG.TXT for contributors.
|
||||
* Copyright (C) 2016 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
|
||||
@@ -23,13 +23,23 @@
|
||||
*/
|
||||
|
||||
#include <dialog_lib_new_component.h>
|
||||
#include <sch_validators.h>
|
||||
#include <template_fieldnames.h>
|
||||
|
||||
DIALOG_LIB_NEW_COMPONENT::DIALOG_LIB_NEW_COMPONENT( wxWindow* parent ) :
|
||||
DIALOG_LIB_NEW_COMPONENT_BASE( parent )
|
||||
{
|
||||
m_textName->SetValidator( SCH_FIELD_VALIDATOR( true, VALUE ) );
|
||||
m_textReference->SetValidator( SCH_FIELD_VALIDATOR( true, REFERENCE ) );
|
||||
|
||||
// initial focus should be on first editable field.
|
||||
m_textName->SetFocus();
|
||||
|
||||
// What happens when user presses "Enter"? OK button! OK?
|
||||
m_sdbSizerOK->SetDefault();
|
||||
|
||||
FixOSXCancelButtonIssue();
|
||||
|
||||
// Now all widgets have the size fixed, call FinishDialogSettings
|
||||
FinishDialogSettings();
|
||||
}
|
||||
|
||||
@@ -42,6 +42,11 @@ DIALOG_LIBEDIT_OPTIONS::DIALOG_LIBEDIT_OPTIONS( LIB_EDIT_FRAME* parent ) :
|
||||
SetRepeatLabelInc( Parent()->GetRepeatDeltaLabel() );
|
||||
SetItemRepeatStep( Parent()->GetRepeatStep() );
|
||||
SetPinRepeatStep( Parent()->GetRepeatPinStep() );
|
||||
|
||||
FixOSXCancelButtonIssue();
|
||||
|
||||
// Now all widgets have the size fixed, call FinishDialogSettings
|
||||
FinishDialogSettings();
|
||||
}
|
||||
|
||||
void DIALOG_LIBEDIT_OPTIONS::SetGridSizes( const GRIDS& grid_sizes, int grid_id )
|
||||
|
||||
@@ -343,9 +343,11 @@ NETLIST_DIALOG::NETLIST_DIALOG( SCH_EDIT_FRAME* parent ) :
|
||||
InstallCustomPages();
|
||||
|
||||
SetDefaultItem( m_buttonNetlist );
|
||||
GetSizer()->SetSizeHints( this );
|
||||
|
||||
Centre();
|
||||
FixOSXCancelButtonIssue();
|
||||
|
||||
// Now all widgets have the size fixed, call FinishDialogSettings
|
||||
FinishDialogSettings();
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -75,9 +75,10 @@ DIALOG_PLOT_SCHEMATIC::DIALOG_PLOT_SCHEMATIC( SCH_EDIT_FRAME* parent ) :
|
||||
|
||||
initDlg();
|
||||
|
||||
GetSizer()->SetSizeHints( this );
|
||||
FixOSXCancelButtonIssue();
|
||||
|
||||
Centre();
|
||||
// Now all widgets have the size fixed, call FinishDialogSettings
|
||||
FinishDialogSettings();
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -88,6 +88,9 @@ DIALOG_RESCUE_EACH::DIALOG_RESCUE_EACH( SCH_EDIT_FRAME* aParent, RESCUER& aRescu
|
||||
"\n"
|
||||
"The following changes are recommended to update the project." );
|
||||
m_lblInfo->SetLabel( info_message );
|
||||
|
||||
m_componentViewOld->SetLayoutDirection( wxLayout_LeftToRight );
|
||||
m_componentViewNew->SetLayoutDirection( wxLayout_LeftToRight );
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -48,6 +48,11 @@ DIALOG_SCH_EDIT_SHEET_PIN::DIALOG_SCH_EDIT_SHEET_PIN( wxWindow* parent ) :
|
||||
m_textName->SetFocus();
|
||||
m_sdbSizerOK->SetDefault();
|
||||
|
||||
FixOSXCancelButtonIssue();
|
||||
|
||||
// Now all widgets have the size fixed, call FinishDialogSettings
|
||||
FinishDialogSettings();
|
||||
|
||||
// On some windows manager (Unity, XFCE), this dialog is
|
||||
// not always raised, depending on this dialog is run.
|
||||
// Force it to be raised
|
||||
|
||||
@@ -34,7 +34,10 @@ DIALOG_SCH_SHEET_PROPS::DIALOG_SCH_SHEET_PROPS( wxWindow* parent ) :
|
||||
m_textFileName->SetFocus();
|
||||
m_sdbSizer1OK->SetDefault();
|
||||
|
||||
GetSizer()->Fit( this );
|
||||
FixOSXCancelButtonIssue();
|
||||
|
||||
// Now all widgets have the size fixed, call FinishDialogSettings
|
||||
FinishDialogSettings();
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
* This program source code file is part of KiCad, a free EDA CAD application.
|
||||
*
|
||||
* Copyright (C) 2013 Jean-Pierre Charras, jp.charras at wanadoo.fr
|
||||
* Copyright (C) 2008-2013 Wayne Stambaugh <stambaughw@verizon.net>
|
||||
* Copyright (C) 2008-2016 Wayne Stambaugh <stambaughw@verizon.net>
|
||||
* Copyright (C) 2004-2013 KiCad Developers, see change_log.txt for contributors.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
@@ -47,7 +47,6 @@ void SCH_EDIT_FRAME::EditComponentFieldText( SCH_FIELD* aField )
|
||||
wxCHECK_RET( aField != NULL && aField->Type() == SCH_FIELD_T,
|
||||
wxT( "Cannot edit invalid schematic field." ) );
|
||||
|
||||
int fieldNdx;
|
||||
SCH_COMPONENT* component = (SCH_COMPONENT*) aField->GetParent();
|
||||
|
||||
wxCHECK_RET( component != NULL && component->Type() == SCH_COMPONENT_T,
|
||||
@@ -58,9 +57,6 @@ void SCH_EDIT_FRAME::EditComponentFieldText( SCH_FIELD* aField )
|
||||
wxCHECK_RET( part, wxT( "Library part for component <" ) +
|
||||
component->GetPartName() + wxT( "> could not be found." ) );
|
||||
|
||||
fieldNdx = aField->GetId();
|
||||
|
||||
|
||||
// Save old component in undo list if not already in edit, or moving.
|
||||
if( aField->GetFlags() == 0 )
|
||||
SaveCopyInUndoList( component, UR_CHANGED );
|
||||
@@ -74,71 +70,21 @@ void SCH_EDIT_FRAME::EditComponentFieldText( SCH_FIELD* aField )
|
||||
|
||||
DIALOG_SCH_EDIT_ONE_FIELD dlg( this, title, aField );
|
||||
|
||||
// Value fields of power components cannot be modified. This will grey out
|
||||
// the text box and display an explanation.
|
||||
if( fieldNdx == VALUE && part->IsPower() )
|
||||
// The dialog may invoke a kiway player for footprint fields
|
||||
// so we must use a quasimodal
|
||||
if( dlg.ShowQuasiModal() != wxID_OK )
|
||||
{
|
||||
dlg.SetPowerWarning( true );
|
||||
m_canvas->MoveCursorToCrossHair();
|
||||
m_canvas->SetIgnoreMouseEvents( false );
|
||||
return;
|
||||
}
|
||||
|
||||
//The diag may invoke a kiway player for footprint fields
|
||||
//so we must use a quasimodal
|
||||
int response = dlg.ShowQuasiModal();
|
||||
|
||||
dlg.UpdateField( aField, m_CurrentSheet );
|
||||
m_canvas->MoveCursorToCrossHair();
|
||||
m_canvas->SetIgnoreMouseEvents( false );
|
||||
wxString newtext = dlg.GetTextField( );
|
||||
OnModify();
|
||||
|
||||
if ( response != wxID_OK )
|
||||
return; // canceled by user
|
||||
|
||||
// make some tests
|
||||
bool can_update = true;
|
||||
if( !newtext.IsEmpty() )
|
||||
{
|
||||
if( fieldNdx == REFERENCE )
|
||||
{
|
||||
// Test if the reference string is valid:
|
||||
if( SCH_COMPONENT::IsReferenceStringValid( newtext ) )
|
||||
{
|
||||
component->SetRef( m_CurrentSheet, newtext );
|
||||
}
|
||||
else
|
||||
{
|
||||
DisplayError( this, _( "Illegal reference string! No change" ) );
|
||||
can_update = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if( fieldNdx == REFERENCE )
|
||||
{
|
||||
DisplayError( this, _( "The reference field cannot be empty! No change" ) );
|
||||
can_update = false;
|
||||
}
|
||||
else if( fieldNdx == VALUE && ! part->IsPower() )
|
||||
{
|
||||
// Note that power components also should not have empty value fields - but
|
||||
// since the user is forbidden from changing the value field here, if it
|
||||
// were to happen somehow, it'd be awfully confusing if an error were to
|
||||
// be displayed!
|
||||
|
||||
DisplayError( this, _( "The value field cannot be empty! No change" ) );
|
||||
can_update = false;
|
||||
}
|
||||
else if ( !( fieldNdx == VALUE && part->IsPower() ) )
|
||||
{
|
||||
dlg.SetTextField( wxT( "~" ) );
|
||||
}
|
||||
}
|
||||
|
||||
if( can_update )
|
||||
{
|
||||
dlg.TransfertDataToField( /* aIncludeText = */ !( fieldNdx == VALUE && part->IsPower() ) );
|
||||
OnModify();
|
||||
m_canvas->Refresh();
|
||||
}
|
||||
m_canvas->Refresh();
|
||||
|
||||
MSG_PANEL_ITEMS items;
|
||||
component->SetCurrentSheetPath( &GetCurrentSheet() );
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
/*
|
||||
* This program source code file is part of KiCad, a free EDA CAD application.
|
||||
*
|
||||
* Copyright (C) 2014 KiCad Developers, see CHANGELOG.TXT for contributors.
|
||||
* Copyright (C) 2014-2016 KiCad Developers, see CHANGELOG.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
|
||||
@@ -330,6 +330,7 @@ void SCH_EDIT_FRAME::OnPreferencesOptions( wxCommandEvent& event )
|
||||
dlg.SetShowGrid( IsGridVisible() );
|
||||
dlg.SetShowHiddenPins( m_showAllPins );
|
||||
dlg.SetEnableMiddleButtonPan( m_canvas->GetEnableMiddleButtonPan() );
|
||||
dlg.SetEnableMousewheelPan( m_canvas->GetEnableMousewheelPan() );
|
||||
dlg.SetEnableZoomNoCenter( m_canvas->GetEnableZoomNoCenter() );
|
||||
dlg.SetMiddleButtonPanLimited( m_canvas->GetMiddleButtonPanLimited() );
|
||||
dlg.SetEnableAutoPan( m_canvas->GetEnableAutoPan() );
|
||||
@@ -378,6 +379,7 @@ void SCH_EDIT_FRAME::OnPreferencesOptions( wxCommandEvent& event )
|
||||
SetGridVisibility( dlg.GetShowGrid() );
|
||||
m_showAllPins = dlg.GetShowHiddenPins();
|
||||
m_canvas->SetEnableMiddleButtonPan( dlg.GetEnableMiddleButtonPan() );
|
||||
m_canvas->SetEnableMousewheelPan( dlg.GetEnableMousewheelPan() );
|
||||
m_canvas->SetEnableZoomNoCenter( dlg.GetEnableZoomNoCenter() );
|
||||
m_canvas->SetMiddleButtonPanLimited( dlg.GetMiddleButtonPanLimited() );
|
||||
m_canvas->SetEnableAutoPan( dlg.GetEnableAutoPan() );
|
||||
@@ -740,11 +742,6 @@ void LIB_EDIT_FRAME::LoadSettings( wxConfigBase* aCfg )
|
||||
SetGridColor( GetLayerColor( LAYER_GRID ) );
|
||||
SetDrawBgColor( GetLayerColor( LAYER_BACKGROUND ) );
|
||||
|
||||
wxString pro_dir = Prj().GetProjectFullName();
|
||||
|
||||
m_lastLibExportPath = aCfg->Read( lastLibExportPathEntry, pro_dir );
|
||||
m_lastLibImportPath = aCfg->Read( lastLibImportPathEntry, pro_dir );
|
||||
|
||||
SetDefaultLineThickness( aCfg->Read( DefaultDrawLineWidthEntry, DEFAULTDRAWLINETHICKNESS ) );
|
||||
SetDefaultPinLength( aCfg->Read( DefaultPinLengthEntry, DEFAULTPINLENGTH ) );
|
||||
m_textPinNumDefaultSize = aCfg->Read( defaultPinNumSizeEntry, DEFAULTPINNUMSIZE );
|
||||
@@ -762,8 +759,6 @@ void LIB_EDIT_FRAME::SaveSettings( wxConfigBase* aCfg )
|
||||
{
|
||||
EDA_DRAW_FRAME::SaveSettings( aCfg );
|
||||
|
||||
aCfg->Write( lastLibExportPathEntry, m_lastLibExportPath );
|
||||
aCfg->Write( lastLibImportPathEntry, m_lastLibImportPath );
|
||||
aCfg->Write( DefaultPinLengthEntry, (long) GetDefaultPinLength() );
|
||||
aCfg->Write( defaultPinNumSizeEntry, (long) GetPinNumDefaultSize() );
|
||||
aCfg->Write( defaultPinNameSizeEntry, (long) GetPinNameDefaultSize() );
|
||||
|
||||
@@ -447,6 +447,8 @@ bool SCH_EDIT_FRAME::AppendOneEEProject()
|
||||
bs = nextbs;
|
||||
}
|
||||
}
|
||||
|
||||
OnModify();
|
||||
|
||||
// redraw base screen (ROOT) if necessary
|
||||
GetScreen()->SetGrid( ID_POPUP_GRID_LEVEL_1000 + m_LastGridSizeId );
|
||||
|
||||
+2
-2
@@ -251,11 +251,11 @@ SCH_ITEM* SCH_EDIT_FRAME::FindComponentAndItem( const wxString& aReference,
|
||||
break;
|
||||
|
||||
case FIND_VALUE: // find value
|
||||
msg_item.Printf( _( "value" ), GetChars( aSearchText ) );
|
||||
msg_item.Printf( _( "value %s" ), GetChars( aSearchText ) );
|
||||
break;
|
||||
|
||||
case FIND_FIELD: // find field. todo
|
||||
msg_item.Printf( _( "field" ), GetChars( aSearchText ) );
|
||||
msg_item.Printf( _( "field %s" ), GetChars( aSearchText ) );
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user