bug fixes

This commit is contained in:
dickelbeck 2008-04-29 03:18:02 +00:00
parent 3237ea1352
commit c25e5c31e1
9 changed files with 443 additions and 275 deletions

View File

@ -5,6 +5,23 @@ Started 2007-June-11
Please add newer entries at the top, list the date and your name with Please add newer entries at the top, list the date and your name with
email address. email address.
2008-Apr-28 UPDATE Dick Hollenbeck <dick@softplc.com>
================================================================================
+pcbnew
* Layer names were not being set into the htoolbar listbox properly if the
BOARD was loaded via the command line as happens when kicad chain loads
pcbnew. Also, layer names were not being set if a second board was loaded
that had the same number of layers as the previous board. The solution was
to comment out the listbox rebuild test in WinEDAChoiceBox*
WinEDA_PcbFrame::ReCreateLayerBox( WinEDA_Toolbar* parent )
* files.cpp: added Clear_Pcb( false ) to LoadOnePcbFile() and call it if
not appending. This way a user can get into the file selection dialog and
still abort (change his mind) without losing the current board. Removed calls to
Clear_Pcb() where LoadOnePcbFile() would now do that.
* edtxtmod.cpp: fixed the drawing relics when moving and rotating module texts.
2008-Apr-21 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr> 2008-Apr-21 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
================================================================================ ================================================================================
+pcbnew +pcbnew

View File

@ -522,6 +522,7 @@ void WinEDA_BasePcbFrame::GeneralControle( wxDC* DC, wxPoint Mouse )
if( delta.x <= 0 ) if( delta.x <= 0 )
delta.x = 1; delta.x = 1;
if( delta.y <= 0 ) if( delta.y <= 0 )
delta.y = 1; delta.y = 1;

View File

@ -38,7 +38,7 @@
#include "dialog_edit_mod_text.h" #include "dialog_edit_mod_text.h"
extern wxPoint MoveVector; // Move vector for move edge, imported from dialog_edit mod_text.cpp extern wxPoint MoveVector; // Move vector for move edge, imported from edtxtmod.cpp
////@begin XPM images ////@begin XPM images
////@end XPM images ////@end XPM images

View File

@ -1,4 +1,5 @@
///////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////
// Name: dialog_general_options.cpp // Name: dialog_general_options.cpp
// Purpose: // Purpose:
// Author: jean-pierre Charras // Author: jean-pierre Charras
@ -11,7 +12,7 @@
// Generated by DialogBlocks (unregistered), 21/01/2006 18:28:47 // Generated by DialogBlocks (unregistered), 21/01/2006 18:28:47
#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA) #if defined (__GNUG__) && !defined (NO_GCC_PRAGMA)
#pragma implementation "dialog_general_options.h" #pragma implementation "dialog_general_options.h"
#endif #endif
@ -40,44 +41,46 @@
////@end XPM images ////@end XPM images
/*****************************************************************/
void WinEDA_PcbFrame::OnSelectOptionToolbar( wxCommandEvent& event )
/*****************************************************************/
/*****************************************************************/
void WinEDA_PcbFrame::OnSelectOptionToolbar(wxCommandEvent& event)
/*****************************************************************/
/* Mises a jour de differentes variables de gestion d'options apres action sur /* Mises a jour de differentes variables de gestion d'options apres action sur
le toolbar d'options * le toolbar d'options
*/ */
{ {
int id = event.GetId(); int id = event.GetId();
wxClientDC dc(DrawPanel);
DrawPanel->CursorOff(&dc); wxClientDC dc( DrawPanel );
DrawPanel->PrepareGraphicContext(&dc);
switch ( id ) DrawPanel->CursorOff( &dc );
DrawPanel->PrepareGraphicContext( &dc );
switch( id )
{ {
case ID_TB_OPTIONS_DRC_OFF: case ID_TB_OPTIONS_DRC_OFF:
Drc_On = m_OptionsToolBar->GetToolState(id) ? FALSE : TRUE; Drc_On = m_OptionsToolBar->GetToolState( id ) ? FALSE : TRUE;
break; break;
case ID_TB_OPTIONS_SHOW_GRID: case ID_TB_OPTIONS_SHOW_GRID:
m_Draw_Grid = g_ShowGrid = m_OptionsToolBar->GetToolState(id); m_Draw_Grid = g_ShowGrid = m_OptionsToolBar->GetToolState( id );
DrawPanel->ReDraw(&dc, TRUE); DrawPanel->ReDraw( &dc, TRUE );
break; break;
case ID_TB_OPTIONS_SHOW_RATSNEST: case ID_TB_OPTIONS_SHOW_RATSNEST:
g_Show_Ratsnest = m_OptionsToolBar->GetToolState(id); g_Show_Ratsnest = m_OptionsToolBar->GetToolState( id );
Ratsnest_On_Off(&dc); Ratsnest_On_Off( &dc );
break; break;
case ID_TB_OPTIONS_SHOW_MODULE_RATSNEST: case ID_TB_OPTIONS_SHOW_MODULE_RATSNEST:
g_Show_Module_Ratsnest = m_OptionsToolBar->GetToolState(id); g_Show_Module_Ratsnest = m_OptionsToolBar->GetToolState( id );
break; break;
case ID_TB_OPTIONS_SELECT_UNIT_MM: case ID_TB_OPTIONS_SELECT_UNIT_MM:
g_UnitMetric = MILLIMETRE; g_UnitMetric = MILLIMETRE;
case ID_TB_OPTIONS_SELECT_UNIT_INCH: case ID_TB_OPTIONS_SELECT_UNIT_INCH:
if ( id == ID_TB_OPTIONS_SELECT_UNIT_INCH ) if( id == ID_TB_OPTIONS_SELECT_UNIT_INCH )
g_UnitMetric = INCHES; g_UnitMetric = INCHES;
m_SelTrackWidthBox_Changed = TRUE; m_SelTrackWidthBox_Changed = TRUE;
Affiche_Status_Box(); /* Reaffichage des coord curseur */ Affiche_Status_Box(); /* Reaffichage des coord curseur */
@ -86,44 +89,44 @@ wxClientDC dc(DrawPanel);
break; break;
case ID_TB_OPTIONS_SHOW_POLAR_COORD: case ID_TB_OPTIONS_SHOW_POLAR_COORD:
Affiche_Message(wxEmptyString); Affiche_Message( wxEmptyString );
DisplayOpt.DisplayPolarCood = m_OptionsToolBar->GetToolState(id); DisplayOpt.DisplayPolarCood = m_OptionsToolBar->GetToolState( id );
Affiche_Status_Box(); /* Reaffichage des coord curseur */ Affiche_Status_Box(); /* Reaffichage des coord curseur */
break; break;
case ID_TB_OPTIONS_SELECT_CURSOR: case ID_TB_OPTIONS_SELECT_CURSOR:
g_CursorShape = m_OptionsToolBar->GetToolState(id); g_CursorShape = m_OptionsToolBar->GetToolState( id );
break; break;
case ID_TB_OPTIONS_AUTO_DEL_TRACK: case ID_TB_OPTIONS_AUTO_DEL_TRACK:
g_AutoDeleteOldTrack = m_OptionsToolBar->GetToolState(id); g_AutoDeleteOldTrack = m_OptionsToolBar->GetToolState( id );
break; break;
case ID_TB_OPTIONS_SHOW_ZONES: case ID_TB_OPTIONS_SHOW_ZONES:
DisplayOpt.DisplayZones = m_OptionsToolBar->GetToolState(id); DisplayOpt.DisplayZones = m_OptionsToolBar->GetToolState( id );
DrawPanel->ReDraw(&dc, TRUE); DrawPanel->ReDraw( &dc, TRUE );
break; break;
case ID_TB_OPTIONS_SHOW_PADS_SKETCH: case ID_TB_OPTIONS_SHOW_PADS_SKETCH:
m_DisplayPadFill = DisplayOpt.DisplayPadFill = m_DisplayPadFill = DisplayOpt.DisplayPadFill =
! m_OptionsToolBar->GetToolState(id); !m_OptionsToolBar->GetToolState( id );
DrawPanel->ReDraw(&dc, TRUE); DrawPanel->ReDraw( &dc, TRUE );
break; break;
case ID_TB_OPTIONS_SHOW_TRACKS_SKETCH: case ID_TB_OPTIONS_SHOW_TRACKS_SKETCH:
m_DisplayPcbTrackFill = DisplayOpt.DisplayPcbTrackFill = m_DisplayPcbTrackFill = DisplayOpt.DisplayPcbTrackFill =
! m_OptionsToolBar->GetToolState(id); !m_OptionsToolBar->GetToolState( id );
DrawPanel->ReDraw(&dc, TRUE); DrawPanel->ReDraw( &dc, TRUE );
break; break;
case ID_TB_OPTIONS_SHOW_HIGHT_CONTRAST_MODE: case ID_TB_OPTIONS_SHOW_HIGHT_CONTRAST_MODE:
DisplayOpt.ContrastModeDisplay = DisplayOpt.ContrastModeDisplay =
m_OptionsToolBar->GetToolState(id); m_OptionsToolBar->GetToolState( id );
DrawPanel->ReDraw(&dc, TRUE); DrawPanel->ReDraw( &dc, TRUE );
break; break;
case ID_TB_OPTIONS_SHOW_EXTRA_VERTICAL_TOOLBAR1: case ID_TB_OPTIONS_SHOW_EXTRA_VERTICAL_TOOLBAR1:
if ( m_OptionsToolBar->GetToolState(id) ) // show aux V toolbar (Microwave tool) if( m_OptionsToolBar->GetToolState( id ) ) // show aux V toolbar (Microwave tool)
ReCreateAuxVToolbar(); ReCreateAuxVToolbar();
else else
{ {
@ -131,18 +134,20 @@ wxClientDC dc(DrawPanel);
m_AuxVToolBar = NULL; m_AuxVToolBar = NULL;
} }
{ {
wxSizeEvent SizeEv(GetSize()); wxSizeEvent SizeEv( GetSize() );
OnSize(SizeEv);
OnSize( SizeEv );
} }
break; break;
default: default:
DisplayError(this, wxT("WinEDA_PcbFrame::OnSelectOptionToolbar error \n (event not handled!)")); DisplayError( this,
wxT( "WinEDA_PcbFrame::OnSelectOptionToolbar error \n (event not handled!)" ) );
break; break;
} }
SetToolbars(); SetToolbars();
DrawPanel->CursorOn(&dc); DrawPanel->CursorOn( &dc );
} }
@ -159,9 +164,9 @@ IMPLEMENT_DYNAMIC_CLASS( WinEDA_PcbGeneralOptionsFrame, wxDialog )
BEGIN_EVENT_TABLE( WinEDA_PcbGeneralOptionsFrame, wxDialog ) BEGIN_EVENT_TABLE( WinEDA_PcbGeneralOptionsFrame, wxDialog )
////@begin WinEDA_PcbGeneralOptionsFrame event table entries ////@begin WinEDA_PcbGeneralOptionsFrame event table entries
EVT_BUTTON( wxID_OK, WinEDA_PcbGeneralOptionsFrame::OnOkClick ) EVT_BUTTON( wxID_OK, WinEDA_PcbGeneralOptionsFrame::OnOkClick )
EVT_BUTTON( wxID_CANCEL, WinEDA_PcbGeneralOptionsFrame::OnCancelClick ) EVT_BUTTON( wxID_CANCEL, WinEDA_PcbGeneralOptionsFrame::OnCancelClick )
////@end WinEDA_PcbGeneralOptionsFrame event table entries ////@end WinEDA_PcbGeneralOptionsFrame event table entries
@ -171,45 +176,57 @@ END_EVENT_TABLE()
* WinEDA_PcbGeneralOptionsFrame constructors * WinEDA_PcbGeneralOptionsFrame constructors
*/ */
WinEDA_PcbGeneralOptionsFrame::WinEDA_PcbGeneralOptionsFrame( ) WinEDA_PcbGeneralOptionsFrame::WinEDA_PcbGeneralOptionsFrame()
{ {
} }
WinEDA_PcbGeneralOptionsFrame::WinEDA_PcbGeneralOptionsFrame( WinEDA_PcbFrame* parent, wxDC * DC,
wxWindowID id, const wxString& caption, const wxPoint& pos, const wxSize& size, long style ) WinEDA_PcbGeneralOptionsFrame::WinEDA_PcbGeneralOptionsFrame( WinEDA_PcbFrame* parent,
wxDC* DC,
wxWindowID id,
const wxString& caption,
const wxPoint& pos,
const wxSize& size,
long style )
{ {
m_Parent = parent; m_Parent = parent;
m_DC = DC; m_DC = DC;
Create(parent, id, caption, pos, size, style); Create( parent, id, caption, pos, size, style );
/* Set display options */ /* Set display options */
m_PolarDisplay->SetSelection(DisplayOpt.DisplayPolarCood ? 1 : 0); m_PolarDisplay->SetSelection( DisplayOpt.DisplayPolarCood ? 1 : 0 );
m_BoxUnits->SetSelection( g_UnitMetric ? 1 : 0); m_BoxUnits->SetSelection( g_UnitMetric ? 1 : 0 );
m_CursorShape->SetSelection( g_CursorShape ? 1 : 0); m_CursorShape->SetSelection( g_CursorShape ? 1 : 0 );
wxString timevalue; wxString timevalue;
timevalue << g_TimeOut / 60; timevalue << g_TimeOut / 60;
m_SaveTime->SetValue(timevalue); m_SaveTime->SetValue( timevalue );
m_LayerNumber->SetValue(g_DesignSettings.m_CopperLayerCount); m_LayerNumber->SetValue( g_DesignSettings.m_CopperLayerCount );
m_MaxShowLinks->SetValue(g_MaxLinksShowed); m_MaxShowLinks->SetValue( g_MaxLinksShowed );
m_DrcOn->SetValue(Drc_On ); m_DrcOn->SetValue( Drc_On );
m_ShowModuleRatsnest->SetValue(g_Show_Module_Ratsnest); m_ShowModuleRatsnest->SetValue( g_Show_Module_Ratsnest );
m_ShowGlobalRatsnest->SetValue(g_Show_Ratsnest); m_ShowGlobalRatsnest->SetValue( g_Show_Ratsnest );
m_TrackAutodel->SetValue(g_AutoDeleteOldTrack); m_TrackAutodel->SetValue( g_AutoDeleteOldTrack );
m_Track_45_Only_Ctrl->SetValue(Track_45_Only); m_Track_45_Only_Ctrl->SetValue( Track_45_Only );
m_Segments_45_Only_Ctrl->SetValue(Segments_45_Only); m_Segments_45_Only_Ctrl->SetValue( Segments_45_Only );
m_AutoPANOpt->SetValue(m_Parent->DrawPanel-> m_AutoPAN_Enable); m_AutoPANOpt->SetValue( m_Parent->DrawPanel->m_AutoPAN_Enable );
m_Segments_45_Only_Ctrl->SetValue(Segments_45_Only); m_Segments_45_Only_Ctrl->SetValue( Segments_45_Only );
m_Track_DoubleSegm_Ctrl->SetValue(g_TwoSegmentTrackBuild); m_Track_DoubleSegm_Ctrl->SetValue( g_TwoSegmentTrackBuild );
} }
/*! /*!
* WinEDA_PcbGeneralOptionsFrame creator * WinEDA_PcbGeneralOptionsFrame creator
*/ */
bool WinEDA_PcbGeneralOptionsFrame::Create( wxWindow* parent, wxWindowID id, const wxString& caption, const wxPoint& pos, const wxSize& size, long style ) bool WinEDA_PcbGeneralOptionsFrame::Create( wxWindow* parent,
wxWindowID id,
const wxString& caption,
const wxPoint& pos,
const wxSize& size,
long style )
{ {
////@begin WinEDA_PcbGeneralOptionsFrame member initialisation ////@begin WinEDA_PcbGeneralOptionsFrame member initialisation
m_PolarDisplay = NULL; m_PolarDisplay = NULL;
@ -228,23 +245,26 @@ bool WinEDA_PcbGeneralOptionsFrame::Create( wxWindow* parent, wxWindowID id, con
m_Track_DoubleSegm_Ctrl = NULL; m_Track_DoubleSegm_Ctrl = NULL;
m_MagneticPadOptCtrl = NULL; m_MagneticPadOptCtrl = NULL;
m_MagneticTrackOptCtrl = NULL; m_MagneticTrackOptCtrl = NULL;
////@end WinEDA_PcbGeneralOptionsFrame member initialisation ////@end WinEDA_PcbGeneralOptionsFrame member initialisation
////@begin WinEDA_PcbGeneralOptionsFrame creation ////@begin WinEDA_PcbGeneralOptionsFrame creation
SetExtraStyle(wxWS_EX_BLOCK_EVENTS); SetExtraStyle( wxWS_EX_BLOCK_EVENTS );
wxDialog::Create( parent, id, caption, pos, size, style ); wxDialog::Create( parent, id, caption, pos, size, style );
CreateControls(); CreateControls();
if (GetSizer()) if( GetSizer() )
{ {
GetSizer()->SetSizeHints(this); GetSizer()->SetSizeHints( this );
} }
Centre(); Centre();
////@end WinEDA_PcbGeneralOptionsFrame creation ////@end WinEDA_PcbGeneralOptionsFrame creation
SetFont(*g_DialogFont); SetFont( *g_DialogFont );
return true; return true;
} }
/*! /*!
* Control creation for WinEDA_PcbGeneralOptionsFrame * Control creation for WinEDA_PcbGeneralOptionsFrame
*/ */
@ -256,136 +276,225 @@ void WinEDA_PcbGeneralOptionsFrame::CreateControls()
WinEDA_PcbGeneralOptionsFrame* itemDialog1 = this; WinEDA_PcbGeneralOptionsFrame* itemDialog1 = this;
wxBoxSizer* itemBoxSizer2 = new wxBoxSizer(wxHORIZONTAL); wxBoxSizer* itemBoxSizer2 = new wxBoxSizer( wxHORIZONTAL );
itemDialog1->SetSizer(itemBoxSizer2);
wxBoxSizer* itemBoxSizer3 = new wxBoxSizer(wxVERTICAL); itemDialog1->SetSizer( itemBoxSizer2 );
itemBoxSizer2->Add(itemBoxSizer3, 0, wxGROW|wxALL, 5);
wxBoxSizer* itemBoxSizer3 = new wxBoxSizer( wxVERTICAL );
itemBoxSizer2->Add( itemBoxSizer3, 0, wxGROW | wxALL, 5 );
wxArrayString m_PolarDisplayStrings; wxArrayString m_PolarDisplayStrings;
m_PolarDisplayStrings.Add(_("No Display")); m_PolarDisplayStrings.Add( _( "No Display" ) );
m_PolarDisplayStrings.Add(_("Display")); m_PolarDisplayStrings.Add( _( "Display" ) );
m_PolarDisplay = new wxRadioBox( itemDialog1, ID_RADIOBOX, _("Display Polar Coord"), wxDefaultPosition, wxDefaultSize, m_PolarDisplayStrings, 1, wxRA_SPECIFY_COLS ); m_PolarDisplay = new wxRadioBox( itemDialog1, ID_RADIOBOX, _(
m_PolarDisplay->SetSelection(0); "Display Polar Coord" ), wxDefaultPosition, wxDefaultSize,
itemBoxSizer3->Add(m_PolarDisplay, 0, wxALIGN_LEFT|wxALL, 5); m_PolarDisplayStrings, 1,
wxRA_SPECIFY_COLS );
m_PolarDisplay->SetSelection( 0 );
itemBoxSizer3->Add( m_PolarDisplay, 0, wxALIGN_LEFT | wxALL, 5 );
wxArrayString m_BoxUnitsStrings; wxArrayString m_BoxUnitsStrings;
m_BoxUnitsStrings.Add(_("Inches")); m_BoxUnitsStrings.Add( _( "Inches" ) );
m_BoxUnitsStrings.Add(_("millimeters")); m_BoxUnitsStrings.Add( _( "millimeters" ) );
m_BoxUnits = new wxRadioBox( itemDialog1, ID_RADIOBOX1, _("Units"), wxDefaultPosition, wxDefaultSize, m_BoxUnitsStrings, 1, wxRA_SPECIFY_COLS ); m_BoxUnits = new wxRadioBox( itemDialog1, ID_RADIOBOX1, _(
m_BoxUnits->SetSelection(0); "Units" ), wxDefaultPosition, wxDefaultSize,
itemBoxSizer3->Add(m_BoxUnits, 0, wxALIGN_LEFT|wxALL, 5); m_BoxUnitsStrings, 1, wxRA_SPECIFY_COLS );
m_BoxUnits->SetSelection( 0 );
itemBoxSizer3->Add( m_BoxUnits, 0, wxALIGN_LEFT | wxALL, 5 );
wxArrayString m_CursorShapeStrings; wxArrayString m_CursorShapeStrings;
m_CursorShapeStrings.Add(_("Small")); m_CursorShapeStrings.Add( _( "Small" ) );
m_CursorShapeStrings.Add(_("Big")); m_CursorShapeStrings.Add( _( "Big" ) );
m_CursorShape = new wxRadioBox( itemDialog1, ID_RADIOBOX2, _("Cursor"), wxDefaultPosition, wxDefaultSize, m_CursorShapeStrings, 1, wxRA_SPECIFY_COLS ); m_CursorShape = new wxRadioBox( itemDialog1, ID_RADIOBOX2, _(
m_CursorShape->SetSelection(0); "Cursor" ),
itemBoxSizer3->Add(m_CursorShape, 0, wxALIGN_LEFT|wxALL, 5); wxDefaultPosition,
wxDefaultSize, m_CursorShapeStrings, 1, wxRA_SPECIFY_COLS );
wxBoxSizer* itemBoxSizer7 = new wxBoxSizer(wxVERTICAL); m_CursorShape->SetSelection( 0 );
itemBoxSizer2->Add(itemBoxSizer7, 0, wxGROW|wxALL, 5); itemBoxSizer3->Add( m_CursorShape, 0, wxALIGN_LEFT | wxALL, 5 );
wxStaticBox* itemStaticBoxSizer8Static = new wxStaticBox(itemDialog1, wxID_ANY, _("Number of Layers:")); wxBoxSizer* itemBoxSizer7 = new wxBoxSizer( wxVERTICAL );
wxStaticBoxSizer* itemStaticBoxSizer8 = new wxStaticBoxSizer(itemStaticBoxSizer8Static, wxVERTICAL);
itemBoxSizer7->Add(itemStaticBoxSizer8, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 5);
m_LayerNumber = new wxSpinCtrl( itemDialog1, ID_SPINCTRL1, _T("1"), wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS, 1, 16, 1 ); itemBoxSizer2->Add( itemBoxSizer7, 0, wxGROW | wxALL, 5 );
itemStaticBoxSizer8->Add(m_LayerNumber, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 5);
wxStaticBox* itemStaticBoxSizer10Static = new wxStaticBox(itemDialog1, wxID_ANY, _("Max Links:")); wxStaticBox* itemStaticBoxSizer8Static = new wxStaticBox( itemDialog1, wxID_ANY, _(
wxStaticBoxSizer* itemStaticBoxSizer10 = new wxStaticBoxSizer(itemStaticBoxSizer10Static, wxVERTICAL); "Number of Layers:" ) );
itemBoxSizer7->Add(itemStaticBoxSizer10, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 5);
m_MaxShowLinks = new wxSpinCtrl( itemDialog1, ID_SPINCTRL2, _T("1"), wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS, 1, 5, 1 ); wxStaticBoxSizer* itemStaticBoxSizer8 = new wxStaticBoxSizer(
itemStaticBoxSizer10->Add(m_MaxShowLinks, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 5); itemStaticBoxSizer8Static,
wxVERTICAL );
wxStaticBox* itemStaticBoxSizer12Static = new wxStaticBox(itemDialog1, wxID_ANY, _("Auto Save (minuts):")); itemBoxSizer7->Add( itemStaticBoxSizer8, 0, wxALIGN_CENTER_HORIZONTAL | wxALL, 5 );
wxStaticBoxSizer* itemStaticBoxSizer12 = new wxStaticBoxSizer(itemStaticBoxSizer12Static, wxVERTICAL);
itemBoxSizer7->Add(itemStaticBoxSizer12, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 5);
m_SaveTime = new wxSpinCtrl( itemDialog1, ID_SPINCTRL3, _T("0"), wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS, 0, 60, 0 ); m_LayerNumber = new wxSpinCtrl( itemDialog1, ID_SPINCTRL1, _T(
itemStaticBoxSizer12->Add(m_SaveTime, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 5); "1" ), wxDefaultPosition,
wxDefaultSize, wxSP_ARROW_KEYS,
1, 16, 1 );
wxBoxSizer* itemBoxSizer14 = new wxBoxSizer(wxVERTICAL); itemStaticBoxSizer8->Add( m_LayerNumber, 0, wxALIGN_CENTER_HORIZONTAL | wxALL, 5 );
itemBoxSizer2->Add(itemBoxSizer14, 0, wxGROW|wxALL, 5);
wxStaticBox* itemStaticBoxSizer15Static = new wxStaticBox(itemDialog1, wxID_ANY, _("Options:")); wxStaticBox* itemStaticBoxSizer10Static = new wxStaticBox( itemDialog1, wxID_ANY, _(
wxStaticBoxSizer* itemStaticBoxSizer15 = new wxStaticBoxSizer(itemStaticBoxSizer15Static, wxVERTICAL); "Max Links:" ) );
itemBoxSizer14->Add(itemStaticBoxSizer15, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 5);
m_DrcOn = new wxCheckBox( itemDialog1, ID_CHECKBOX, _("Drc ON"), wxDefaultPosition, wxDefaultSize, wxCHK_2STATE ); wxStaticBoxSizer* itemStaticBoxSizer10 = new wxStaticBoxSizer(
m_DrcOn->SetValue(false); itemStaticBoxSizer10Static,
m_DrcOn->SetForegroundColour(wxColour(198, 0, 0)); wxVERTICAL );
itemStaticBoxSizer15->Add(m_DrcOn, 0, wxALIGN_LEFT|wxALL, 5);
m_ShowGlobalRatsnest = new wxCheckBox( itemDialog1, ID_CHECKBOX1, _("Show Ratsnest"), wxDefaultPosition, wxDefaultSize, wxCHK_2STATE ); itemBoxSizer7->Add( itemStaticBoxSizer10, 0, wxALIGN_CENTER_HORIZONTAL | wxALL, 5 );
m_ShowGlobalRatsnest->SetValue(false);
itemStaticBoxSizer15->Add(m_ShowGlobalRatsnest, 0, wxALIGN_LEFT|wxALL, 5);
m_ShowModuleRatsnest = new wxCheckBox( itemDialog1, ID_CHECKBOX2, _("Show Mod Ratsnest"), wxDefaultPosition, wxDefaultSize, wxCHK_2STATE ); m_MaxShowLinks = new wxSpinCtrl( itemDialog1, ID_SPINCTRL2, _T(
m_ShowModuleRatsnest->SetValue(false); "1" ), wxDefaultPosition,
itemStaticBoxSizer15->Add(m_ShowModuleRatsnest, 0, wxALIGN_LEFT|wxALL, 5); wxDefaultSize, wxSP_ARROW_KEYS,
1, 5, 1 );
m_TrackAutodel = new wxCheckBox( itemDialog1, ID_CHECKBOX3, _("Tracks Auto Del"), wxDefaultPosition, wxDefaultSize, wxCHK_2STATE ); itemStaticBoxSizer10->Add( m_MaxShowLinks, 0, wxALIGN_CENTER_HORIZONTAL | wxALL, 5 );
m_TrackAutodel->SetValue(false);
itemStaticBoxSizer15->Add(m_TrackAutodel, 0, wxALIGN_LEFT|wxALL, 5);
m_Track_45_Only_Ctrl = new wxCheckBox( itemDialog1, ID_CHECKBOX4, _("Track 45 Only"), wxDefaultPosition, wxDefaultSize, wxCHK_2STATE ); wxStaticBox* itemStaticBoxSizer12Static = new wxStaticBox( itemDialog1, wxID_ANY, _(
m_Track_45_Only_Ctrl->SetValue(false); "Auto Save (minuts):" ) );
itemStaticBoxSizer15->Add(m_Track_45_Only_Ctrl, 0, wxALIGN_LEFT|wxALL, 5);
m_Segments_45_Only_Ctrl = new wxCheckBox( itemDialog1, ID_CHECKBOX5, _("Segments 45 Only"), wxDefaultPosition, wxDefaultSize, wxCHK_2STATE ); wxStaticBoxSizer* itemStaticBoxSizer12 = new wxStaticBoxSizer(
m_Segments_45_Only_Ctrl->SetValue(false); itemStaticBoxSizer12Static,
itemStaticBoxSizer15->Add(m_Segments_45_Only_Ctrl, 0, wxALIGN_LEFT|wxALL, 5); wxVERTICAL );
m_AutoPANOpt = new wxCheckBox( itemDialog1, ID_CHECKBOX6, _("Auto PAN"), wxDefaultPosition, wxDefaultSize, wxCHK_2STATE ); itemBoxSizer7->Add( itemStaticBoxSizer12, 0, wxALIGN_CENTER_HORIZONTAL | wxALL, 5 );
m_AutoPANOpt->SetValue(false);
m_AutoPANOpt->SetForegroundColour(wxColour(0, 0, 255));
itemStaticBoxSizer15->Add(m_AutoPANOpt, 0, wxALIGN_LEFT|wxALL, 5);
m_Track_DoubleSegm_Ctrl = new wxCheckBox( itemDialog1, ID_CHECKBOX7, _("Double Segm Track"), wxDefaultPosition, wxDefaultSize, wxCHK_2STATE ); m_SaveTime = new wxSpinCtrl( itemDialog1, ID_SPINCTRL3, _T(
m_Track_DoubleSegm_Ctrl->SetValue(false); "0" ), wxDefaultPosition,
m_Track_DoubleSegm_Ctrl->SetForegroundColour(wxColour(0, 144, 0)); wxDefaultSize, wxSP_ARROW_KEYS,
itemStaticBoxSizer15->Add(m_Track_DoubleSegm_Ctrl, 0, wxALIGN_LEFT|wxALL, 5); 0, 60, 0 );
wxBoxSizer* itemBoxSizer24 = new wxBoxSizer(wxVERTICAL); itemStaticBoxSizer12->Add( m_SaveTime, 0, wxALIGN_CENTER_HORIZONTAL | wxALL, 5 );
itemBoxSizer2->Add(itemBoxSizer24, 0, wxALIGN_TOP|wxALL, 5);
wxBoxSizer* itemBoxSizer14 = new wxBoxSizer( wxVERTICAL );
itemBoxSizer2->Add( itemBoxSizer14, 0, wxGROW | wxALL, 5 );
wxStaticBox* itemStaticBoxSizer15Static = new wxStaticBox( itemDialog1, wxID_ANY, _(
"Options:" ) );
wxStaticBoxSizer* itemStaticBoxSizer15 = new wxStaticBoxSizer(
itemStaticBoxSizer15Static,
wxVERTICAL );
itemBoxSizer14->Add( itemStaticBoxSizer15, 0, wxALIGN_CENTER_HORIZONTAL | wxALL, 5 );
m_DrcOn = new wxCheckBox( itemDialog1, ID_CHECKBOX, _(
"Drc ON" ),
wxDefaultPosition,
wxDefaultSize, wxCHK_2STATE );
m_DrcOn->SetValue( false );
m_DrcOn->SetForegroundColour( wxColour( 198, 0, 0 ) );
itemStaticBoxSizer15->Add( m_DrcOn, 0, wxALIGN_LEFT | wxALL, 5 );
m_ShowGlobalRatsnest = new wxCheckBox( itemDialog1, ID_CHECKBOX1, _(
"Show Ratsnest" ), wxDefaultPosition,
wxDefaultSize, wxCHK_2STATE );
m_ShowGlobalRatsnest->SetValue( false );
itemStaticBoxSizer15->Add( m_ShowGlobalRatsnest, 0, wxALIGN_LEFT | wxALL, 5 );
m_ShowModuleRatsnest = new wxCheckBox( itemDialog1, ID_CHECKBOX2, _(
"Show Mod Ratsnest" ), wxDefaultPosition,
wxDefaultSize, wxCHK_2STATE );
m_ShowModuleRatsnest->SetValue( false );
itemStaticBoxSizer15->Add( m_ShowModuleRatsnest, 0, wxALIGN_LEFT | wxALL, 5 );
m_TrackAutodel = new wxCheckBox( itemDialog1, ID_CHECKBOX3, _(
"Tracks Auto Del" ), wxDefaultPosition,
wxDefaultSize, wxCHK_2STATE );
m_TrackAutodel->SetValue( false );
itemStaticBoxSizer15->Add( m_TrackAutodel, 0, wxALIGN_LEFT | wxALL, 5 );
m_Track_45_Only_Ctrl = new wxCheckBox( itemDialog1, ID_CHECKBOX4, _(
"Track 45 Only" ), wxDefaultPosition,
wxDefaultSize, wxCHK_2STATE );
m_Track_45_Only_Ctrl->SetValue( false );
itemStaticBoxSizer15->Add( m_Track_45_Only_Ctrl, 0, wxALIGN_LEFT | wxALL, 5 );
m_Segments_45_Only_Ctrl = new wxCheckBox( itemDialog1, ID_CHECKBOX5, _(
"Segments 45 Only" ), wxDefaultPosition,
wxDefaultSize, wxCHK_2STATE );
m_Segments_45_Only_Ctrl->SetValue( false );
itemStaticBoxSizer15->Add( m_Segments_45_Only_Ctrl, 0, wxALIGN_LEFT | wxALL, 5 );
m_AutoPANOpt = new wxCheckBox( itemDialog1, ID_CHECKBOX6, _(
"Auto PAN" ), wxDefaultPosition, wxDefaultSize,
wxCHK_2STATE );
m_AutoPANOpt->SetValue( false );
m_AutoPANOpt->SetForegroundColour( wxColour( 0, 0, 255 ) );
itemStaticBoxSizer15->Add( m_AutoPANOpt, 0, wxALIGN_LEFT | wxALL, 5 );
m_Track_DoubleSegm_Ctrl = new wxCheckBox( itemDialog1, ID_CHECKBOX7, _(
"Double Segm Track" ), wxDefaultPosition,
wxDefaultSize, wxCHK_2STATE );
m_Track_DoubleSegm_Ctrl->SetValue( false );
m_Track_DoubleSegm_Ctrl->SetForegroundColour( wxColour( 0, 144, 0 ) );
itemStaticBoxSizer15->Add( m_Track_DoubleSegm_Ctrl, 0, wxALIGN_LEFT | wxALL, 5 );
wxBoxSizer* itemBoxSizer24 = new wxBoxSizer( wxVERTICAL );
itemBoxSizer2->Add( itemBoxSizer24, 0, wxALIGN_TOP | wxALL, 5 );
wxArrayString m_MagneticPadOptCtrlStrings; wxArrayString m_MagneticPadOptCtrlStrings;
m_MagneticPadOptCtrlStrings.Add(_("Never")); m_MagneticPadOptCtrlStrings.Add( _( "Never" ) );
m_MagneticPadOptCtrlStrings.Add(_("When creating tracks")); m_MagneticPadOptCtrlStrings.Add( _( "When creating tracks" ) );
m_MagneticPadOptCtrlStrings.Add(_("Always")); m_MagneticPadOptCtrlStrings.Add( _( "Always" ) );
m_MagneticPadOptCtrl = new wxRadioBox( itemDialog1, ID_RADIOBOX4, _("Magnetic Pads"), wxDefaultPosition, wxDefaultSize, m_MagneticPadOptCtrlStrings, 1, wxRA_SPECIFY_COLS ); m_MagneticPadOptCtrl = new wxRadioBox( itemDialog1, ID_RADIOBOX4, _(
m_MagneticPadOptCtrl->SetSelection(0); "Magnetic Pads" ), wxDefaultPosition, wxDefaultSize,
if (WinEDA_PcbGeneralOptionsFrame::ShowToolTips()) m_MagneticPadOptCtrlStrings, 1,
m_MagneticPadOptCtrl->SetToolTip(_("control the capture of the pcb cursor when the mouse cursor enters a pad area")); wxRA_SPECIFY_COLS );
itemBoxSizer24->Add(m_MagneticPadOptCtrl, 0, wxGROW|wxALL, 5);
m_MagneticPadOptCtrl->SetSelection( 0 );
if( WinEDA_PcbGeneralOptionsFrame::ShowToolTips() )
m_MagneticPadOptCtrl->SetToolTip( _(
"control the capture of the pcb cursor when the mouse cursor enters a pad area" ) );
itemBoxSizer24->Add( m_MagneticPadOptCtrl, 0, wxGROW | wxALL, 5 );
wxArrayString m_MagneticTrackOptCtrlStrings; wxArrayString m_MagneticTrackOptCtrlStrings;
m_MagneticTrackOptCtrlStrings.Add(_("Never")); m_MagneticTrackOptCtrlStrings.Add( _( "Never" ) );
m_MagneticTrackOptCtrlStrings.Add(_("When creating tracks")); m_MagneticTrackOptCtrlStrings.Add( _( "When creating tracks" ) );
m_MagneticTrackOptCtrlStrings.Add(_("Always")); m_MagneticTrackOptCtrlStrings.Add( _( "Always" ) );
m_MagneticTrackOptCtrl = new wxRadioBox( itemDialog1, ID_RADIOBOX3, _("Magnetic Tracks"), wxDefaultPosition, wxDefaultSize, m_MagneticTrackOptCtrlStrings, 1, wxRA_SPECIFY_COLS ); m_MagneticTrackOptCtrl = new wxRadioBox( itemDialog1, ID_RADIOBOX3, _(
m_MagneticTrackOptCtrl->SetSelection(0); "Magnetic Tracks" ), wxDefaultPosition,
if (WinEDA_PcbGeneralOptionsFrame::ShowToolTips()) wxDefaultSize, m_MagneticTrackOptCtrlStrings, 1,
m_MagneticTrackOptCtrl->SetToolTip(_("control the capture of the pcb cursor when the mouse cursor enters a track")); wxRA_SPECIFY_COLS );
itemBoxSizer24->Add(m_MagneticTrackOptCtrl, 0, wxGROW|wxALL, 5);
wxButton* itemButton27 = new wxButton( itemDialog1, wxID_OK, _("&OK"), wxDefaultPosition, wxDefaultSize, 0 ); m_MagneticTrackOptCtrl->SetSelection( 0 );
itemButton27->SetForegroundColour(wxColour(221, 0, 0)); if( WinEDA_PcbGeneralOptionsFrame::ShowToolTips() )
itemBoxSizer24->Add(itemButton27, 0, wxGROW|wxALL, 5); m_MagneticTrackOptCtrl->SetToolTip( _(
"control the capture of the pcb cursor when the mouse cursor enters a track" ) );
itemBoxSizer24->Add( m_MagneticTrackOptCtrl, 0, wxGROW | wxALL, 5 );
wxButton* itemButton28 = new wxButton( itemDialog1, wxID_CANCEL, _("&Cancel"), wxDefaultPosition, wxDefaultSize, 0 ); wxButton* itemButton27 = new wxButton( itemDialog1, wxID_OK, _(
itemButton28->SetForegroundColour(wxColour(0, 0, 255)); "&OK" ), wxDefaultPosition, wxDefaultSize, 0 );
itemBoxSizer24->Add(itemButton28, 0, wxGROW|wxALL, 5);
itemButton27->SetForegroundColour( wxColour( 221, 0, 0 ) );
itemBoxSizer24->Add( itemButton27, 0, wxGROW | wxALL, 5 );
wxButton* itemButton28 = new wxButton( itemDialog1, wxID_CANCEL, _(
"&Cancel" ), wxDefaultPosition, wxDefaultSize, 0 );
itemButton28->SetForegroundColour( wxColour( 0, 0, 255 ) );
itemBoxSizer24->Add( itemButton28, 0, wxGROW | wxALL, 5 );
// Set validators // Set validators
m_MagneticPadOptCtrl->SetValidator( wxGenericValidator(& g_MagneticPadOption) ); m_MagneticPadOptCtrl->SetValidator( wxGenericValidator( &g_MagneticPadOption ) );
m_MagneticTrackOptCtrl->SetValidator( wxGenericValidator(& g_MagneticTrackOption) ); m_MagneticTrackOptCtrl->SetValidator( wxGenericValidator( &g_MagneticTrackOption ) );
////@end WinEDA_PcbGeneralOptionsFrame content construction ////@end WinEDA_PcbGeneralOptionsFrame content construction
} }
/*! /*!
* Should we show tooltips? * Should we show tooltips?
*/ */
@ -395,6 +504,7 @@ bool WinEDA_PcbGeneralOptionsFrame::ShowToolTips()
return true; return true;
} }
/*! /*!
* Get bitmap resources * Get bitmap resources
*/ */
@ -403,11 +513,13 @@ wxBitmap WinEDA_PcbGeneralOptionsFrame::GetBitmapResource( const wxString& name
{ {
// Bitmap retrieval // Bitmap retrieval
////@begin WinEDA_PcbGeneralOptionsFrame bitmap retrieval ////@begin WinEDA_PcbGeneralOptionsFrame bitmap retrieval
wxUnusedVar(name); wxUnusedVar( name );
return wxNullBitmap; return wxNullBitmap;
////@end WinEDA_PcbGeneralOptionsFrame bitmap retrieval ////@end WinEDA_PcbGeneralOptionsFrame bitmap retrieval
} }
/*! /*!
* Get icon resources * Get icon resources
*/ */
@ -416,11 +528,13 @@ wxIcon WinEDA_PcbGeneralOptionsFrame::GetIconResource( const wxString& name )
{ {
// Icon retrieval // Icon retrieval
////@begin WinEDA_PcbGeneralOptionsFrame icon retrieval ////@begin WinEDA_PcbGeneralOptionsFrame icon retrieval
wxUnusedVar(name); wxUnusedVar( name );
return wxNullIcon; return wxNullIcon;
////@end WinEDA_PcbGeneralOptionsFrame icon retrieval ////@end WinEDA_PcbGeneralOptionsFrame icon retrieval
} }
/*! /*!
* wxEVT_COMMAND_BUTTON_CLICKED event handler for wxID_CANCEL * wxEVT_COMMAND_BUTTON_CLICKED event handler for wxID_CANCEL
*/ */
@ -430,48 +544,53 @@ void WinEDA_PcbGeneralOptionsFrame::OnCancelClick( wxCommandEvent& event )
////@begin wxEVT_COMMAND_BUTTON_CLICKED event handler for wxID_OK in WinEDA_PcbGeneralOptionsFrame. ////@begin wxEVT_COMMAND_BUTTON_CLICKED event handler for wxID_OK in WinEDA_PcbGeneralOptionsFrame.
// Before editing this code, remove the block markers. // Before editing this code, remove the block markers.
event.Skip(); event.Skip();
////@end wxEVT_COMMAND_BUTTON_CLICKED event handler for wxID_OK in WinEDA_PcbGeneralOptionsFrame. ////@end wxEVT_COMMAND_BUTTON_CLICKED event handler for wxID_OK in WinEDA_PcbGeneralOptionsFrame.
} }
/*! /*!
* wxEVT_COMMAND_BUTTON_CLICKED event handler for wxID_OK * wxEVT_COMMAND_BUTTON_CLICKED event handler for wxID_OK
*/ */
void WinEDA_PcbGeneralOptionsFrame::OnOkClick( wxCommandEvent& event ) void WinEDA_PcbGeneralOptionsFrame::OnOkClick( wxCommandEvent& event )
{ {
AcceptPcbOptions(event); AcceptPcbOptions( event );
////@begin wxEVT_COMMAND_BUTTON_CLICKED event handler for wxID_OK in WinEDA_PcbGeneralOptionsFrame. ////@begin wxEVT_COMMAND_BUTTON_CLICKED event handler for wxID_OK in WinEDA_PcbGeneralOptionsFrame.
// Before editing this code, remove the block markers. // Before editing this code, remove the block markers.
event.Skip(); event.Skip();
////@end wxEVT_COMMAND_BUTTON_CLICKED event handler for wxID_OK in WinEDA_PcbGeneralOptionsFrame. ////@end wxEVT_COMMAND_BUTTON_CLICKED event handler for wxID_OK in WinEDA_PcbGeneralOptionsFrame.
} }
/**************************************************************************/ /**************************************************************************/
void WinEDA_PcbGeneralOptionsFrame::AcceptPcbOptions(wxCommandEvent& event) void WinEDA_PcbGeneralOptionsFrame::AcceptPcbOptions( wxCommandEvent& event )
/**************************************************************************/ /**************************************************************************/
{ {
int ii; int ii;
DisplayOpt.DisplayPolarCood = DisplayOpt.DisplayPolarCood =
(m_PolarDisplay->GetSelection() == 0) ? FALSE : TRUE; (m_PolarDisplay->GetSelection() == 0) ? FALSE : TRUE;
ii = g_UnitMetric; ii = g_UnitMetric;
g_UnitMetric = (m_BoxUnits->GetSelection() == 0) ? 0 : 1; g_UnitMetric = (m_BoxUnits->GetSelection() == 0) ? 0 : 1;
if ( ii != g_UnitMetric ) m_Parent->ReCreateAuxiliaryToolbar(); if( ii != g_UnitMetric )
m_Parent->ReCreateAuxiliaryToolbar();
g_CursorShape = m_CursorShape->GetSelection(); g_CursorShape = m_CursorShape->GetSelection();
g_TimeOut = 60 * m_SaveTime->GetValue(); g_TimeOut = 60 * m_SaveTime->GetValue();
/* Mise a jour de la combobox d'affichage de la couche active */ /* Mise a jour de la combobox d'affichage de la couche active */
g_DesignSettings.m_CopperLayerCount = m_LayerNumber->GetValue(); g_DesignSettings.m_CopperLayerCount = m_LayerNumber->GetValue();
m_Parent->ReCreateLayerBox(NULL); m_Parent->ReCreateLayerBox( NULL );
g_MaxLinksShowed = m_MaxShowLinks->GetValue(); g_MaxLinksShowed = m_MaxShowLinks->GetValue();
Drc_On = m_DrcOn->GetValue(); Drc_On = m_DrcOn->GetValue();
if ( g_Show_Ratsnest != m_ShowGlobalRatsnest->GetValue() ) if( g_Show_Ratsnest != m_ShowGlobalRatsnest->GetValue() )
{ {
g_Show_Ratsnest = m_ShowGlobalRatsnest->GetValue(); g_Show_Ratsnest = m_ShowGlobalRatsnest->GetValue();
m_Parent->Ratsnest_On_Off(m_DC); m_Parent->Ratsnest_On_Off( m_DC );
} }
g_Show_Module_Ratsnest = m_ShowModuleRatsnest->GetValue(); g_Show_Module_Ratsnest = m_ShowModuleRatsnest->GetValue();
g_AutoDeleteOldTrack = m_TrackAutodel->GetValue(); g_AutoDeleteOldTrack = m_TrackAutodel->GetValue();
@ -480,12 +599,11 @@ int ii;
m_Parent->DrawPanel->m_AutoPAN_Enable = m_AutoPANOpt->GetValue(); m_Parent->DrawPanel->m_AutoPAN_Enable = m_AutoPANOpt->GetValue();
g_TwoSegmentTrackBuild = m_Track_DoubleSegm_Ctrl->GetValue(); g_TwoSegmentTrackBuild = m_Track_DoubleSegm_Ctrl->GetValue();
EndModal(1); EndModal( 1 );
} }
enum id_optpcb enum id_optpcb {
{
ID_ACCEPT_OPT = 1000, ID_ACCEPT_OPT = 1000,
ID_CANCEL_OPT ID_CANCEL_OPT
}; };
@ -495,42 +613,49 @@ enum id_optpcb
#include "dialog_graphic_items_options.cpp" #include "dialog_graphic_items_options.cpp"
/*****************************************************************/ /*****************************************************************/
void WinEDA_PcbFrame::InstallPcbOptionsFrame(const wxPoint & pos, void WinEDA_PcbFrame::InstallPcbOptionsFrame( const wxPoint& pos,
wxDC * DC, int id) wxDC* DC, int id )
/*****************************************************************/ /*****************************************************************/
{ {
switch( id )
switch ( id )
{ {
case ID_PCB_TRACK_SIZE_SETUP: case ID_PCB_TRACK_SIZE_SETUP:
{ {
WinEDA_PcbTracksDialog * OptionsFrame = WinEDA_PcbTracksDialog* OptionsFrame =
new WinEDA_PcbTracksDialog(this); new WinEDA_PcbTracksDialog( this );
OptionsFrame->ShowModal(); OptionsFrame->Destroy();
OptionsFrame->ShowModal();
OptionsFrame->Destroy();
} }
break; break;
case ID_PCB_DRAWINGS_WIDTHS_SETUP: case ID_PCB_DRAWINGS_WIDTHS_SETUP:
{ {
WinEDA_GraphicItemsOptionsDialog * OptionsFrame = WinEDA_GraphicItemsOptionsDialog* OptionsFrame =
new WinEDA_GraphicItemsOptionsDialog(this); new WinEDA_GraphicItemsOptionsDialog( this );
OptionsFrame->ShowModal(); OptionsFrame->Destroy();
OptionsFrame->ShowModal();
OptionsFrame->Destroy();
} }
break; break;
case ID_PCB_LOOK_SETUP: case ID_PCB_LOOK_SETUP:
{ {
WinEDA_DisplayOptionsDialog * OptionsFrame = WinEDA_DisplayOptionsDialog* OptionsFrame =
new WinEDA_DisplayOptionsDialog(this); new WinEDA_DisplayOptionsDialog( this );
OptionsFrame->ShowModal(); OptionsFrame->Destroy();
OptionsFrame->ShowModal();
OptionsFrame->Destroy();
} }
break; break;
case ID_OPTIONS_SETUP: case ID_OPTIONS_SETUP:
{ {
WinEDA_PcbGeneralOptionsFrame * OptionsFrame = WinEDA_PcbGeneralOptionsFrame* OptionsFrame =
new WinEDA_PcbGeneralOptionsFrame(this, DC); new WinEDA_PcbGeneralOptionsFrame( this, DC );
OptionsFrame->ShowModal(); OptionsFrame->Destroy();
OptionsFrame->ShowModal();
OptionsFrame->Destroy();
} }
break; break;
} }
@ -538,10 +663,10 @@ void WinEDA_PcbFrame::InstallPcbOptionsFrame(const wxPoint & pos,
/*******************************************************************/ /*******************************************************************/
void WinEDA_ModuleEditFrame::InstallOptionsFrame(const wxPoint & pos) void WinEDA_ModuleEditFrame::InstallOptionsFrame( const wxPoint& pos )
/*******************************************************************/ /*******************************************************************/
{ {
WinEDA_GraphicItemsOptionsDialog OptionsFrame (this); WinEDA_GraphicItemsOptionsDialog OptionsFrame( this );
OptionsFrame.ShowModal(); OptionsFrame.ShowModal();
} }

View File

@ -74,14 +74,15 @@ void WinEDA_BasePcbFrame::RotateTextModule( TEXTE_MODULE* Text, wxDC* DC )
MODULE* module = (MODULE*) Text->m_Parent; MODULE* module = (MODULE*) Text->m_Parent;
Text->Draw( DrawPanel, DC, GR_XOR ); // we expect MoveVector to be (0,0) if there is no move in progress
Text->Draw( DrawPanel, DC, GR_XOR, MoveVector );
Text->m_Orient += 900; Text->m_Orient += 900;
while( Text->m_Orient >= 1800 ) while( Text->m_Orient >= 1800 )
Text->m_Orient -= 1800; Text->m_Orient -= 1800;
/* Redessin du Texte */ /* Redessin du Texte */
Text->Draw( DrawPanel, DC, GR_XOR ); Text->Draw( DrawPanel, DC, GR_XOR, MoveVector );
Text->Display_Infos( this ); Text->Display_Infos( this );
@ -107,10 +108,11 @@ void WinEDA_BasePcbFrame::DeleteTextModule( TEXTE_MODULE* Text, wxDC* DC )
if( Text->m_Type == TEXT_is_DIVERS ) if( Text->m_Type == TEXT_is_DIVERS )
{ {
Text->Draw( DrawPanel, DC, GR_XOR ); // Text->Draw( DrawPanel, DC, GR_XOR );
DrawPanel->PostDirtyRect( Text->GetBoundingBox() );
/* liberation de la memoire : */ /* liberation de la memoire : */
Text ->DeleteStructure(); Text->DeleteStructure();
GetScreen()->SetModify(); GetScreen()->SetModify();
Module->m_LastEdit_Time = time( NULL ); Module->m_LastEdit_Time = time( NULL );
} }
@ -137,10 +139,15 @@ static void ExitTextModule( WinEDA_DrawPanel* Panel, wxDC* DC )
return; return;
Module = (MODULE*) Text->m_Parent; Module = (MODULE*) Text->m_Parent;
Text->Draw( Panel, DC, GR_XOR, MoveVector ); Text->Draw( Panel, DC, GR_XOR, MoveVector );
/* Redessin du Texte */ /* Redessin du Texte */
Text->Draw( Panel, DC, GR_OR ); // Text->Draw( Panel, DC, GR_OR );
Panel->PostDirtyRect( Text->GetBoundingBox() );
// leave it at (0,0) so we can use it Rotate when not moving.
MoveVector.x = MoveVector.y = 0;
Text->m_Flags = 0; Text->m_Flags = 0;
Module->m_Flags = 0; Module->m_Flags = 0;
@ -167,6 +174,7 @@ void WinEDA_BasePcbFrame::StartMoveTexteModule( TEXTE_MODULE* Text, wxDC* DC )
Module->m_Flags |= IN_EDIT; Module->m_Flags |= IN_EDIT;
MoveVector.x = MoveVector.y = 0; MoveVector.x = MoveVector.y = 0;
CursorInitialPosition = Text->m_Pos; CursorInitialPosition = Text->m_Pos;
Text->Display_Infos( this ); Text->Display_Infos( this );
@ -189,6 +197,8 @@ void WinEDA_BasePcbFrame::PlaceTexteModule( TEXTE_MODULE* Text, wxDC* DC )
{ {
if( Text != NULL ) if( Text != NULL )
{ {
DrawPanel->PostDirtyRect( Text->GetBoundingBox() );
Text->m_Pos = GetScreen()->m_Curseur; Text->m_Pos = GetScreen()->m_Curseur;
/* mise a jour des coordonnées relatives a l'ancre */ /* mise a jour des coordonnées relatives a l'ancre */
MODULE* Module = (MODULE*) Text->m_Parent; MODULE* Module = (MODULE*) Text->m_Parent;
@ -205,10 +215,14 @@ void WinEDA_BasePcbFrame::PlaceTexteModule( TEXTE_MODULE* Text, wxDC* DC )
GetScreen()->SetModify(); GetScreen()->SetModify();
/* Redessin du Texte */ /* Redessin du Texte */
Text->Draw( DrawPanel, DC, GR_OR ); //Text->Draw( DrawPanel, DC, GR_OR );
DrawPanel->PostDirtyRect( Text->GetBoundingBox() );
} }
} }
// leave it at (0,0) so we can use it Rotate when not moving.
MoveVector.x = MoveVector.y = 0;
DrawPanel->ManageCurseur = NULL; DrawPanel->ManageCurseur = NULL;
DrawPanel->ForceCloseManageCurseur = NULL; DrawPanel->ForceCloseManageCurseur = NULL;
} }

View File

@ -34,8 +34,7 @@ void WinEDA_PcbFrame::Files_io( wxCommandEvent& event )
{ {
case ID_MENU_LOAD_FILE: case ID_MENU_LOAD_FILE:
case ID_LOAD_FILE: case ID_LOAD_FILE:
Clear_Pcb(TRUE ); LoadOnePcbFile( wxEmptyString, false );
LoadOnePcbFile( wxEmptyString,FALSE );
ReCreateAuxiliaryToolbar(); ReCreateAuxiliaryToolbar();
break; break;
@ -64,8 +63,7 @@ void WinEDA_PcbFrame::Files_io( wxCommandEvent& event )
if( !IsOK( this, msg ) ) if( !IsOK( this, msg ) )
break; break;
} }
Clear_Pcb( TRUE ); LoadOnePcbFile( filename, false );
LoadOnePcbFile( filename, FALSE );
GetScreen()->m_FileName = oldfilename; GetScreen()->m_FileName = oldfilename;
SetTitle( GetScreen()->m_FileName ); SetTitle( GetScreen()->m_FileName );
ReCreateAuxiliaryToolbar(); ReCreateAuxiliaryToolbar();
@ -95,7 +93,6 @@ void WinEDA_PcbFrame::Files_io( wxCommandEvent& event )
case ID_LOAD_FILE_8: case ID_LOAD_FILE_8:
case ID_LOAD_FILE_9: case ID_LOAD_FILE_9:
case ID_LOAD_FILE_10: case ID_LOAD_FILE_10:
Clear_Pcb(TRUE );
wxSetWorkingDirectory( wxPathOnly( GetLastProject( id - ID_LOAD_FILE_1 ) ) ); wxSetWorkingDirectory( wxPathOnly( GetLastProject( id - ID_LOAD_FILE_1 ) ) );
LoadOnePcbFile( GetLastProject( id - ID_LOAD_FILE_1 ).GetData(), LoadOnePcbFile( GetLastProject( id - ID_LOAD_FILE_1 ).GetData(),
false ); false );
@ -153,10 +150,12 @@ int WinEDA_PcbFrame::LoadOnePcbFile( const wxString& FullFileName, bool Append )
m_Pcb->m_Status_Pcb = 0; m_Pcb->m_Status_Pcb = 0;
} }
wxString fileName;
if( FullFileName == wxEmptyString ) if( FullFileName == wxEmptyString )
{ {
msg = wxT( "*" ) + PcbExtBuffer; msg = wxT( "*" ) + PcbExtBuffer;
wxString FileName = fileName =
EDA_FileSelector( _( "Load board files:" ), EDA_FileSelector( _( "Load board files:" ),
wxEmptyString, /* Chemin par defaut */ wxEmptyString, /* Chemin par defaut */
GetScreen()->m_FileName, /* nom fichier par defaut */ GetScreen()->m_FileName, /* nom fichier par defaut */
@ -166,12 +165,17 @@ int WinEDA_PcbFrame::LoadOnePcbFile( const wxString& FullFileName, bool Append )
wxFD_OPEN, wxFD_OPEN,
FALSE FALSE
); );
if( FileName == wxEmptyString )
if( fileName == wxEmptyString )
return FALSE; return FALSE;
GetScreen()->m_FileName = FileName;
} }
else else
GetScreen()->m_FileName = FullFileName; fileName = FullFileName;
if( !Append )
Clear_Pcb( false ); // pass false since we prompted above for a modified board
GetScreen()->m_FileName = fileName;
/* Start read PCB file /* Start read PCB file
*/ */
@ -202,7 +206,7 @@ int WinEDA_PcbFrame::LoadOnePcbFile( const wxString& FullFileName, bool Append )
} }
else if ( ver < g_CurrentVersionPCB ) else if ( ver < g_CurrentVersionPCB )
{ {
DisplayInfo( this, _( "This file was created by an older version of EESchema. It will be stored in the new file format when you save this file again.")); DisplayInfo( this, _( "This file was created by an older version of PCBnew. It will be stored in the new file format when you save this file again."));
} }
SetTitle( GetScreen()->m_FileName ); SetTitle( GetScreen()->m_FileName );

View File

@ -139,6 +139,7 @@ bool WinEDA_BasePcbFrame::Clear_Pcb( bool query )
/* init pointeurs et variables */ /* init pointeurs et variables */
GetScreen()->m_FileName.Empty(); GetScreen()->m_FileName.Empty();
memset( buf_work, 0, BUFMEMSIZE ); memset( buf_work, 0, BUFMEMSIZE );
adr_lowmem = adr_max = buf_work; adr_lowmem = adr_max = buf_work;

View File

@ -369,7 +369,6 @@ bool WinEDA_PcbFrame::OnRightClick( const wxPoint& aMousePos, wxMenu* aPopMenu )
switch( m_ID_current_state ) switch( m_ID_current_state )
{ {
case ID_PCB_ZONES_BUTT: case ID_PCB_ZONES_BUTT:
{
if( m_Pcb->m_ZoneDescriptorList.size() > 0 ) if( m_Pcb->m_ZoneDescriptorList.size() > 0 )
{ {
ADD_MENUITEM( aPopMenu, ID_POPUP_PCB_FILL_ALL_ZONES, ADD_MENUITEM( aPopMenu, ID_POPUP_PCB_FILL_ALL_ZONES,
@ -380,11 +379,9 @@ bool WinEDA_PcbFrame::OnRightClick( const wxPoint& aMousePos, wxMenu* aPopMenu )
ADD_MENUITEM( aPopMenu, ID_POPUP_PCB_SELECT_LAYER, ADD_MENUITEM( aPopMenu, ID_POPUP_PCB_SELECT_LAYER,
_( "Select Working Layer" ), Select_W_Layer_xpm ); _( "Select Working Layer" ), Select_W_Layer_xpm );
aPopMenu->AppendSeparator(); aPopMenu->AppendSeparator();
}
break; break;
case ID_TRACK_BUTT: case ID_TRACK_BUTT:
{
ADD_MENUITEM_WITH_SUBMENU( aPopMenu, Append_Track_Width_List(), ADD_MENUITEM_WITH_SUBMENU( aPopMenu, Append_Track_Width_List(),
ID_POPUP_PCB_SELECT_WIDTH, ID_POPUP_PCB_SELECT_WIDTH,
_( "Select Track Width" ), width_track_xpm ); _( "Select Track Width" ), width_track_xpm );
@ -393,7 +390,6 @@ bool WinEDA_PcbFrame::OnRightClick( const wxPoint& aMousePos, wxMenu* aPopMenu )
ADD_MENUITEM( aPopMenu, ID_POPUP_PCB_SELECT_LAYER_PAIR, ADD_MENUITEM( aPopMenu, ID_POPUP_PCB_SELECT_LAYER_PAIR,
_( "Select layer pair for vias" ), select_layer_pair_xpm ); _( "Select layer pair for vias" ), select_layer_pair_xpm );
aPopMenu->AppendSeparator(); aPopMenu->AppendSeparator();
}
break; break;
case ID_PCB_CIRCLE_BUTT: case ID_PCB_CIRCLE_BUTT:

View File

@ -205,7 +205,8 @@ void WinEDA_PcbFrame::ReCreateHToolbar()
wxString msg; wxString msg;
if( m_HToolBar != NULL ) if( m_HToolBar != NULL )
{ // simple mise a jour de la liste des fichiers anciens {
// simple mise a jour de la liste des fichiers anciens
wxMenuItem* item; wxMenuItem* item;
for( ii = 9; ii >=0; ii-- ) for( ii = 9; ii >=0; ii-- )
{ {
@ -630,10 +631,7 @@ WinEDAChoiceBox* WinEDA_PcbFrame::ReCreateLayerBox( WinEDA_Toolbar* parent )
/**************************************************************************/ /**************************************************************************/
{ {
int ii, jj, ll; int ii, jj, ll;
unsigned lenght = 0; unsigned length = 0;
bool rebuild = FALSE;
long current_mask_layer;
if( m_SelLayerBox == NULL ) if( m_SelLayerBox == NULL )
{ {
if( parent == NULL ) if( parent == NULL )
@ -655,27 +653,39 @@ WinEDAChoiceBox* WinEDA_PcbFrame::ReCreateLayerBox( WinEDA_Toolbar* parent )
parent->AddControl( m_SelLayerBox ); parent->AddControl( m_SelLayerBox );
} }
// Test si reconstruction de la liste necessaire
current_mask_layer = 0; int layer_mask = g_TabAllCopperLayerMask[g_DesignSettings.m_CopperLayerCount - 1];
int Masque_Layer = g_TabAllCopperLayerMask[g_DesignSettings.m_CopperLayerCount - 1];
Masque_Layer |= ALL_NO_CU_LAYERS; layer_mask |= ALL_NO_CU_LAYERS;
// This is commented out because testing the number of layer is no longer
// sufficient since the layer names may also have changed. And the time
// required to test layer names is probably longer than the time required
// to simply reconstruct the list.
#if 0
// Test if reconstruction of the list is necessary
int current_layer_mask = 0;
for( ii = 0; ii < (int) m_SelLayerBox->GetCount(); ii++ ) for( ii = 0; ii < (int) m_SelLayerBox->GetCount(); ii++ )
{ {
jj = (int) ( (size_t) m_SelLayerBox->GetClientData( ii ) ); jj = (int) ( (size_t) m_SelLayerBox->GetClientData( ii ) );
current_mask_layer |= g_TabOneLayerMask[jj]; current_mask_layer |= g_TabOneLayerMask[jj];
} }
if( current_mask_layer != Masque_Layer ) bool rebuild = FALSE;
if( current_layer_mask != layer_mask )
rebuild = TRUE; rebuild = TRUE;
// Construction de la liste // Construction de la liste
if( rebuild ) if( rebuild )
#endif
{ {
m_SelLayerBox->Clear(); m_SelLayerBox->Clear();
for( ii = 0, jj = 0; ii <= EDGE_N; ii++ ) for( ii = 0, jj = 0; ii <= EDGE_N; ii++ )
{ {
// List to append hotkeys in layer box selection // List to append hotkeys in layer box selection
static int HK_SwitchLayer[EDGE_N + 1] = { static const int HK_SwitchLayer[EDGE_N + 1] = {
HK_SWITCH_LAYER_TO_COPPER, HK_SWITCH_LAYER_TO_COPPER,
HK_SWITCH_LAYER_TO_INNER1, HK_SWITCH_LAYER_TO_INNER1,
HK_SWITCH_LAYER_TO_INNER2, HK_SWITCH_LAYER_TO_INNER2,
@ -694,20 +704,20 @@ WinEDAChoiceBox* WinEDA_PcbFrame::ReCreateLayerBox( WinEDA_Toolbar* parent )
HK_SWITCH_LAYER_TO_COMPONENT HK_SWITCH_LAYER_TO_COMPONENT
}; };
if( (g_TabOneLayerMask[ii] & Masque_Layer) ) if( (g_TabOneLayerMask[ii] & layer_mask) )
{ {
wxString msg = m_Pcb->GetLayerName( ii ); wxString msg = m_Pcb->GetLayerName( ii );
msg = AddHotkeyName( msg, s_Board_Editor_Hokeys_Descr, HK_SwitchLayer[ii] ); msg = AddHotkeyName( msg, s_Board_Editor_Hokeys_Descr, HK_SwitchLayer[ii] );
m_SelLayerBox->Append( msg ); m_SelLayerBox->Append( msg );
m_SelLayerBox->SetClientData( jj, (void*) ii ); m_SelLayerBox->SetClientData( jj, (void*) ii );
lenght = max( lenght, msg.Len() ); length = MAX( length, msg.Len() );
jj++; jj++;
} }
} }
// Test me: // Test me:
// int lchar = m_SelLayerBox->GetFont().GetPointSize(); // int lchar = m_SelLayerBox->GetFont().GetPointSize();
// m_SelLayerBox->SetSize(wxSize(lenght * lchar,-1)); // m_SelLayerBox->SetSize(wxSize(length * lchar,-1));
m_SelLayerBox->SetToolTip( _( "+/- to switch" ) ); m_SelLayerBox->SetToolTip( _( "+/- to switch" ) );
} }