///////////////////////////////////////////////////////////////////////////// // Name: dialog_track_options.cpp // Purpose: // Author: jean-pierre Charras // Modified by: // Created: 24/02/2006 20:58:54 // RCS-ID: // Copyright: License GNU // Licence: ///////////////////////////////////////////////////////////////////////////// // Generated by DialogBlocks (unregistered), 24/02/2006 20:58:54 #if defined(__GNUG__) && !defined(NO_GCC_PRAGMA) #pragma implementation "dialog_track_options.h" #endif // For compilers that support precompilation, includes "wx/wx.h". #include "wx/wxprec.h" #ifdef __BORLANDC__ #pragma hdrstop #endif #ifndef WX_PRECOMP #include "wx/wx.h" #endif ////@begin includes ////@end includes #include "dialog_track_options.h" ////@begin XPM images ////@end XPM images /*! * WinEDA_PcbTracksDialog type definition */ IMPLEMENT_DYNAMIC_CLASS( WinEDA_PcbTracksDialog, wxDialog ) /*! * WinEDA_PcbTracksDialog event table definition */ BEGIN_EVENT_TABLE( WinEDA_PcbTracksDialog, wxDialog ) ////@begin WinEDA_PcbTracksDialog event table entries EVT_INIT_DIALOG( WinEDA_PcbTracksDialog::OnInitDialog ) EVT_CHECKBOX( ID_CHECKBOX_ALLOWS_MICROVIA, WinEDA_PcbTracksDialog::OnCheckboxAllowsMicroviaClick ) EVT_BUTTON( wxID_OK, WinEDA_PcbTracksDialog::OnOkClick ) EVT_BUTTON( wxID_CANCEL, WinEDA_PcbTracksDialog::OnCancelClick ) ////@end WinEDA_PcbTracksDialog event table entries END_EVENT_TABLE() /*! * WinEDA_PcbTracksDialog constructors */ WinEDA_PcbTracksDialog::WinEDA_PcbTracksDialog( ) { } WinEDA_PcbTracksDialog::WinEDA_PcbTracksDialog( WinEDA_PcbFrame* parent, wxWindowID id, const wxString& caption, const wxPoint& pos, const wxSize& size, long style ) { m_Parent = parent; Create(parent, id, caption, pos, size, style); } /*! * WinEDA_PcbTracksDialog creator */ bool WinEDA_PcbTracksDialog::Create( wxWindow* parent, wxWindowID id, const wxString& caption, const wxPoint& pos, const wxSize& size, long style ) { ////@begin WinEDA_PcbTracksDialog member initialisation m_ViaSizeTitle = NULL; m_OptViaSize = NULL; m_ViaDefaultDrillValueTitle = NULL; m_OptViaDrill = NULL; m_ViaAltDrillValueTitle = NULL; m_OptCustomViaDrill = NULL; m_OptViaType = NULL; m_MicroViaSizeTitle = NULL; m_MicroViaSizeCtrl = NULL; m_MicroViaDrillTitle = NULL; m_MicroViaDrillCtrl = NULL; m_AllowMicroViaCtrl = NULL; m_TrackWidthTitle = NULL; m_OptTrackWidth = NULL; m_TrackClearanceTitle = NULL; m_OptTrackClearance = NULL; m_MaskClearanceTitle = NULL; m_OptMaskMargin = NULL; ////@end WinEDA_PcbTracksDialog member initialisation ////@begin WinEDA_PcbTracksDialog creation SetExtraStyle(wxWS_EX_BLOCK_EVENTS); wxDialog::Create( parent, id, caption, pos, size, style ); CreateControls(); if (GetSizer()) { GetSizer()->SetSizeHints(this); } Centre(); ////@end WinEDA_PcbTracksDialog creation return true; } /*! * Control creation for WinEDA_PcbTracksDialog */ void WinEDA_PcbTracksDialog::CreateControls() { SetFont(*g_DialogFont); ////@begin WinEDA_PcbTracksDialog content construction // Generated by DialogBlocks, 11/01/2008 21:51:48 (unregistered) WinEDA_PcbTracksDialog* itemDialog1 = this; wxBoxSizer* itemBoxSizer2 = new wxBoxSizer(wxHORIZONTAL); itemDialog1->SetSizer(itemBoxSizer2); wxStaticBox* itemStaticBoxSizer3Static = new wxStaticBox(itemDialog1, wxID_ANY, _("Vias:")); wxStaticBoxSizer* itemStaticBoxSizer3 = new wxStaticBoxSizer(itemStaticBoxSizer3Static, wxVERTICAL); itemBoxSizer2->Add(itemStaticBoxSizer3, 0, wxGROW|wxALL, 5); m_ViaSizeTitle = new wxStaticText( itemDialog1, wxID_STATIC, _("Via Size"), wxDefaultPosition, wxDefaultSize, 0 ); itemStaticBoxSizer3->Add(m_ViaSizeTitle, 0, wxALIGN_LEFT|wxLEFT|wxRIGHT|wxTOP|wxADJUST_MINSIZE, 5); m_OptViaSize = new wxTextCtrl( itemDialog1, ID_TEXTCTRL, _T(""), wxDefaultPosition, wxDefaultSize, 0 ); itemStaticBoxSizer3->Add(m_OptViaSize, 0, wxGROW|wxLEFT|wxRIGHT|wxBOTTOM, 5); m_ViaDefaultDrillValueTitle = new wxStaticText( itemDialog1, wxID_STATIC, _("Default Via Drill"), wxDefaultPosition, wxDefaultSize, 0 ); itemStaticBoxSizer3->Add(m_ViaDefaultDrillValueTitle, 0, wxALIGN_LEFT|wxLEFT|wxRIGHT|wxTOP|wxADJUST_MINSIZE, 5); m_OptViaDrill = new wxTextCtrl( itemDialog1, ID_TEXTCTRL1, _T(""), wxDefaultPosition, wxDefaultSize, 0 ); itemStaticBoxSizer3->Add(m_OptViaDrill, 0, wxGROW|wxLEFT|wxRIGHT|wxBOTTOM, 5); m_ViaAltDrillValueTitle = new wxStaticText( itemDialog1, wxID_STATIC, _("Alternate Via Drill"), wxDefaultPosition, wxDefaultSize, 0 ); itemStaticBoxSizer3->Add(m_ViaAltDrillValueTitle, 0, wxALIGN_LEFT|wxLEFT|wxRIGHT|wxTOP|wxADJUST_MINSIZE, 5); m_OptCustomViaDrill = new wxTextCtrl( itemDialog1, ID_TEXTCTRL2, _T(""), wxDefaultPosition, wxDefaultSize, 0 ); itemStaticBoxSizer3->Add(m_OptCustomViaDrill, 0, wxGROW|wxLEFT|wxRIGHT|wxBOTTOM, 5); wxArrayString m_OptViaTypeStrings; m_OptViaTypeStrings.Add(_("Through Via")); m_OptViaTypeStrings.Add(_("Blind or Buried Via ")); m_OptViaType = new wxRadioBox( itemDialog1, ID_VIA_TYPE_SELECTION, _("Default Via Type"), wxDefaultPosition, wxDefaultSize, m_OptViaTypeStrings, 1, wxRA_SPECIFY_COLS ); m_OptViaType->SetSelection(0); itemStaticBoxSizer3->Add(m_OptViaType, 0, wxGROW|wxALL, 5); wxStaticBox* itemStaticBoxSizer11Static = new wxStaticBox(itemDialog1, wxID_ANY, _("Micro Vias:")); wxStaticBoxSizer* itemStaticBoxSizer11 = new wxStaticBoxSizer(itemStaticBoxSizer11Static, wxVERTICAL); itemBoxSizer2->Add(itemStaticBoxSizer11, 0, wxGROW|wxALL, 5); m_MicroViaSizeTitle = new wxStaticText( itemDialog1, wxID_STATIC, _("Micro Via Size"), wxDefaultPosition, wxDefaultSize, 0 ); itemStaticBoxSizer11->Add(m_MicroViaSizeTitle, 0, wxGROW|wxLEFT|wxRIGHT|wxTOP, 5); m_MicroViaSizeCtrl = new wxTextCtrl( itemDialog1, ID_TEXTCTRL7, _T(""), wxDefaultPosition, wxDefaultSize, 0 ); itemStaticBoxSizer11->Add(m_MicroViaSizeCtrl, 0, wxGROW|wxLEFT|wxRIGHT|wxBOTTOM, 5); m_MicroViaDrillTitle = new wxStaticText( itemDialog1, wxID_STATIC, _("Micro Via Drill"), wxDefaultPosition, wxDefaultSize, 0 ); itemStaticBoxSizer11->Add(m_MicroViaDrillTitle, 0, wxGROW|wxLEFT|wxRIGHT|wxTOP, 5); m_MicroViaDrillCtrl = new wxTextCtrl( itemDialog1, ID_TEXTCTRL6, _T(""), wxDefaultPosition, wxDefaultSize, 0 ); itemStaticBoxSizer11->Add(m_MicroViaDrillCtrl, 0, wxGROW|wxLEFT|wxRIGHT|wxBOTTOM, 5); itemStaticBoxSizer11->Add(5, 5, 0, wxGROW|wxALL, 5); m_AllowMicroViaCtrl = new wxCheckBox( itemDialog1, ID_CHECKBOX_ALLOWS_MICROVIA, _("Allows Micro Vias"), wxDefaultPosition, wxDefaultSize, 0 ); m_AllowMicroViaCtrl->SetValue(false); m_AllowMicroViaCtrl->SetHelpText(_("Allows use of micro vias\nThey are very small vias only from an external copper layer to its near neightbour\n")); if (WinEDA_PcbTracksDialog::ShowToolTips()) m_AllowMicroViaCtrl->SetToolTip(_("Allows use of micro vias\nThey are very small vias only from an external copper layer to its near neightbour\n")); itemStaticBoxSizer11->Add(m_AllowMicroViaCtrl, 0, wxGROW|wxALL, 5); wxBoxSizer* itemBoxSizer18 = new wxBoxSizer(wxVERTICAL); itemBoxSizer2->Add(itemBoxSizer18, 0, wxGROW|wxALL, 5); m_TrackWidthTitle = new wxStaticText( itemDialog1, wxID_STATIC, _("Track Width"), wxDefaultPosition, wxDefaultSize, 0 ); itemBoxSizer18->Add(m_TrackWidthTitle, 0, wxALIGN_LEFT|wxLEFT|wxRIGHT|wxTOP|wxADJUST_MINSIZE, 5); m_OptTrackWidth = new wxTextCtrl( itemDialog1, ID_TEXTCTRL3, _T(""), wxDefaultPosition, wxDefaultSize, 0 ); itemBoxSizer18->Add(m_OptTrackWidth, 0, wxGROW|wxLEFT|wxRIGHT|wxBOTTOM, 5); m_TrackClearanceTitle = new wxStaticText( itemDialog1, wxID_STATIC, _("Clearance"), wxDefaultPosition, wxDefaultSize, 0 ); itemBoxSizer18->Add(m_TrackClearanceTitle, 0, wxALIGN_LEFT|wxLEFT|wxRIGHT|wxTOP|wxADJUST_MINSIZE, 5); m_OptTrackClearance = new wxTextCtrl( itemDialog1, ID_TEXTCTRL4, _T(""), wxDefaultPosition, wxDefaultSize, 0 ); itemBoxSizer18->Add(m_OptTrackClearance, 0, wxGROW|wxLEFT|wxRIGHT|wxBOTTOM, 5); m_MaskClearanceTitle = new wxStaticText( itemDialog1, wxID_STATIC, _("Mask clearance"), wxDefaultPosition, wxDefaultSize, 0 ); itemBoxSizer18->Add(m_MaskClearanceTitle, 0, wxALIGN_LEFT|wxLEFT|wxRIGHT|wxTOP|wxADJUST_MINSIZE, 5); m_OptMaskMargin = new wxTextCtrl( itemDialog1, ID_TEXTCTRL5, _T(""), wxDefaultPosition, wxDefaultSize, 0 ); itemBoxSizer18->Add(m_OptMaskMargin, 0, wxGROW|wxLEFT|wxRIGHT|wxBOTTOM, 5); wxBoxSizer* itemBoxSizer25 = new wxBoxSizer(wxVERTICAL); itemBoxSizer2->Add(itemBoxSizer25, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5); wxButton* itemButton26 = new wxButton( itemDialog1, wxID_OK, _("&OK"), wxDefaultPosition, wxDefaultSize, 0 ); itemButton26->SetForegroundColour(wxColour(210, 0, 0)); itemBoxSizer25->Add(itemButton26, 0, wxGROW|wxALL, 5); wxButton* itemButton27 = new wxButton( itemDialog1, wxID_CANCEL, _("&Cancel"), wxDefaultPosition, wxDefaultSize, wxBU_LEFT ); itemButton27->SetForegroundColour(wxColour(0, 0, 255)); itemBoxSizer25->Add(itemButton27, 0, wxGROW|wxALL, 5); // Set validators m_AllowMicroViaCtrl->SetValidator( wxGenericValidator(& g_DesignSettings.m_MicroViasAllowed) ); ////@end WinEDA_PcbTracksDialog content construction SetDisplayValue(); } /*! * Should we show tooltips? */ bool WinEDA_PcbTracksDialog::ShowToolTips() { return true; } /*! * Get bitmap resources */ wxBitmap WinEDA_PcbTracksDialog::GetBitmapResource( const wxString& name ) { // Bitmap retrieval ////@begin WinEDA_PcbTracksDialog bitmap retrieval wxUnusedVar(name); return wxNullBitmap; ////@end WinEDA_PcbTracksDialog bitmap retrieval } /*! * Get icon resources */ wxIcon WinEDA_PcbTracksDialog::GetIconResource( const wxString& name ) { // Icon retrieval ////@begin WinEDA_PcbTracksDialog icon retrieval wxUnusedVar(name); return wxNullIcon; ////@end WinEDA_PcbTracksDialog icon retrieval } /*************************************************/ void WinEDA_PcbTracksDialog::SetDisplayValue() /*************************************************/ { AddUnitSymbol(*m_ViaSizeTitle); AddUnitSymbol(*m_MicroViaSizeTitle); AddUnitSymbol(*m_ViaDefaultDrillValueTitle); AddUnitSymbol(*m_MicroViaDrillTitle); AddUnitSymbol(*m_ViaAltDrillValueTitle); AddUnitSymbol(*m_TrackWidthTitle); AddUnitSymbol(*m_TrackClearanceTitle); AddUnitSymbol(*m_MaskClearanceTitle); int Internal_Unit = m_Parent->m_InternalUnits; PutValueInLocalUnits(*m_OptViaSize, g_DesignSettings.m_CurrentViaSize, Internal_Unit); PutValueInLocalUnits(*m_MicroViaSizeCtrl, g_DesignSettings.m_CurrentMicroViaSize, Internal_Unit); PutValueInLocalUnits(*m_OptViaDrill, g_DesignSettings.m_ViaDrill, Internal_Unit); PutValueInLocalUnits(*m_MicroViaDrillCtrl, g_DesignSettings.m_MicroViaDrill, Internal_Unit); PutValueInLocalUnits(*m_OptCustomViaDrill, g_ViaHoleLastValue, Internal_Unit); PutValueInLocalUnits(*m_OptTrackWidth, g_DesignSettings.m_CurrentTrackWidth, Internal_Unit); PutValueInLocalUnits(*m_OptTrackClearance, g_DesignSettings.m_TrackClearence, Internal_Unit); PutValueInLocalUnits(*m_OptMaskMargin, g_DesignSettings.m_MaskMargin, Internal_Unit); if ( g_DesignSettings.m_CurrentViaType != VIA_THROUGH ) m_OptViaType->SetSelection(1); m_MicroViaSizeTitle->Enable(g_DesignSettings.m_MicroViasAllowed); m_MicroViaSizeCtrl->Enable(g_DesignSettings.m_MicroViasAllowed); m_MicroViaDrillTitle->Enable(g_DesignSettings.m_MicroViasAllowed); m_MicroViaDrillCtrl->Enable(g_DesignSettings.m_MicroViasAllowed); } /*******************************************************************/ void WinEDA_PcbTracksDialog::AcceptPcbOptions(wxCommandEvent& event) /*******************************************************************/ { g_DesignSettings.m_CurrentViaType = VIA_THROUGH; if ( m_OptViaType->GetSelection() > 0 ) g_DesignSettings.m_CurrentViaType = VIA_BLIND_BURIED; if ( g_DesignSettings.m_CurrentViaType != VIA_THROUGH ) { if( ! IsOK(this, _("You have selected VIA Blind and Buried\nWARNING: this feature is EXPERIMENTAL!!! Accept ?") ) ) g_DesignSettings.m_CurrentViaType = VIA_THROUGH; } g_DesignSettings.m_CurrentViaSize = ReturnValueFromTextCtrl(*m_OptViaSize, m_Parent->m_InternalUnits); g_DesignSettings.m_CurrentMicroViaSize = ReturnValueFromTextCtrl(*m_MicroViaSizeCtrl, m_Parent->m_InternalUnits); g_DesignSettings.m_MicroViaDrill = ReturnValueFromTextCtrl(*m_MicroViaDrillCtrl, m_Parent->m_InternalUnits); g_DesignSettings.m_ViaDrill = ReturnValueFromTextCtrl(*m_OptViaDrill, m_Parent->m_InternalUnits); g_ViaHoleLastValue = ReturnValueFromTextCtrl(*m_OptCustomViaDrill, m_Parent->m_InternalUnits); g_DesignSettings.m_MicroViasAllowed = m_AllowMicroViaCtrl->IsChecked(); g_DesignSettings.m_CurrentTrackWidth = ReturnValueFromTextCtrl(*m_OptTrackWidth, m_Parent->m_InternalUnits); g_DesignSettings.m_TrackClearence = ReturnValueFromTextCtrl(*m_OptTrackClearance, m_Parent->m_InternalUnits); g_DesignSettings.m_MaskMargin = ReturnValueFromTextCtrl(*m_OptMaskMargin, m_Parent->m_InternalUnits); m_Parent->DisplayTrackSettings(); m_Parent->AddHistory(g_DesignSettings.m_CurrentViaSize, TYPEVIA); m_Parent->AddHistory(g_DesignSettings.m_CurrentTrackWidth, TYPETRACK); EndModal(1); } /*********************************************************************/ void WinEDA_BasePcbFrame::AddHistory(int value, KICAD_T type) /**********************************************************************/ // Mise a jour des listes des dernieres epaisseurs de via et track utilisées { bool addhistory = TRUE; int ii; switch ( type ) { case TYPETRACK: for ( ii = 0; ii < HIST0RY_NUMBER; ii++) { if ( g_DesignSettings.m_TrackWidhtHistory[ii] == value ) { addhistory = FALSE; break; } } if ( ! addhistory ) break; for ( ii = HIST0RY_NUMBER -1; ii > 0 ; ii--) { g_DesignSettings.m_TrackWidhtHistory[ii] = g_DesignSettings.m_TrackWidhtHistory[ii-1]; } g_DesignSettings.m_TrackWidhtHistory[0] = value; // Reclassement par valeur croissante for ( ii = 0; ii < HIST0RY_NUMBER -1; ii++) { if ( g_DesignSettings.m_TrackWidhtHistory[ii+1] == 0 ) break; // Fin de liste if ( g_DesignSettings.m_TrackWidhtHistory[ii] > g_DesignSettings.m_TrackWidhtHistory[ii+1] ) { EXCHG(g_DesignSettings.m_TrackWidhtHistory[ii], g_DesignSettings.m_TrackWidhtHistory[ii+1]); } } break; case TYPEVIA: for ( ii = 0; ii < HIST0RY_NUMBER; ii++) { if (g_DesignSettings.m_ViaSizeHistory[ii] == value) { addhistory = FALSE; break; } } if ( ! addhistory ) break; for ( ii = HIST0RY_NUMBER -1; ii > 0 ; ii--) { g_DesignSettings.m_ViaSizeHistory[ii] = g_DesignSettings.m_ViaSizeHistory[ii-1]; } g_DesignSettings.m_ViaSizeHistory[0] = value; // Reclassement par valeur croissante for ( ii = 0; ii < HIST0RY_NUMBER -1; ii++) { if ( g_DesignSettings.m_ViaSizeHistory[ii+1] == 0 ) break; // Fin de liste if ( g_DesignSettings.m_ViaSizeHistory[ii] > g_DesignSettings.m_ViaSizeHistory[ii+1] ) { EXCHG(g_DesignSettings.m_ViaSizeHistory[ii], g_DesignSettings.m_ViaSizeHistory[ii+1]); } } break; default: break; } } /*! * wxEVT_COMMAND_BUTTON_CLICKED event handler for wxID_OK */ void WinEDA_PcbTracksDialog::OnOkClick( wxCommandEvent& event ) { AcceptPcbOptions(event); } /*! * wxEVT_COMMAND_BUTTON_CLICKED event handler for wxID_CANCEL */ void WinEDA_PcbTracksDialog::OnCancelClick( wxCommandEvent& event ) { ////@begin wxEVT_COMMAND_BUTTON_CLICKED event handler for wxID_CANCEL in WinEDA_PcbTracksDialog. // Before editing this code, remove the block markers. event.Skip(); ////@end wxEVT_COMMAND_BUTTON_CLICKED event handler for wxID_CANCEL in WinEDA_PcbTracksDialog. } /*! * wxEVT_INIT_DIALOG event handler for ID_DIALOG */ void WinEDA_PcbTracksDialog::OnInitDialog( wxInitDialogEvent& event ) { m_OptViaSize->SetFocus(); // deselect the existing text, seems SetFocus() wants to emulate Microsoft, which is not desireable here. m_OptViaSize->SetSelection(0,0); event.Skip(); } /*! * wxEVT_COMMAND_CHECKBOX_CLICKED event handler for ID_CHECKBOX_ALLOWS_MICROVIA */ void WinEDA_PcbTracksDialog::OnCheckboxAllowsMicroviaClick( wxCommandEvent& event ) { bool state = m_AllowMicroViaCtrl->IsChecked(); m_MicroViaSizeTitle->Enable(state); m_MicroViaSizeCtrl->Enable(state); m_MicroViaDrillTitle->Enable(state); m_MicroViaDrillCtrl->Enable(state); }