2008-01-12 20:31:56 +00:00
|
|
|
|
/**********************************************/
|
2009-08-08 10:08:37 +00:00
|
|
|
|
/* vi_edit.cpp: some editing function for vias */
|
2008-01-12 20:31:56 +00:00
|
|
|
|
/**********************************************/
|
2007-05-06 16:03:28 +00:00
|
|
|
|
|
|
|
|
|
#include "fctsys.h"
|
|
|
|
|
#include "common.h"
|
2009-02-04 15:25:03 +00:00
|
|
|
|
#include "class_drawpanel.h"
|
|
|
|
|
#include "confirm.h"
|
2007-05-06 16:03:28 +00:00
|
|
|
|
#include "pcbnew.h"
|
2009-07-30 11:04:07 +00:00
|
|
|
|
#include "wxPcbStruct.h"
|
2007-05-06 16:03:28 +00:00
|
|
|
|
#include "id.h"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**********************************************************************************/
|
2009-08-08 10:08:37 +00:00
|
|
|
|
void WinEDA_PcbFrame::Via_Edit_Control( wxCommandEvent& event )
|
2007-05-06 16:03:28 +00:00
|
|
|
|
/**********************************************************************************/
|
2008-01-12 20:31:56 +00:00
|
|
|
|
|
2007-05-06 16:03:28 +00:00
|
|
|
|
/*
|
2008-01-12 20:31:56 +00:00
|
|
|
|
* Execute edit commands relative to vias
|
|
|
|
|
*/
|
2007-05-06 16:03:28 +00:00
|
|
|
|
{
|
2008-01-12 20:31:56 +00:00
|
|
|
|
int ii;
|
|
|
|
|
TRACK* via_struct;
|
2009-08-08 10:08:37 +00:00
|
|
|
|
SEGVIA* via = (SEGVIA*) GetCurItem();
|
|
|
|
|
wxClientDC dc( DrawPanel );
|
|
|
|
|
DrawPanel->CursorOff( &dc );
|
|
|
|
|
DrawPanel->PrepareGraphicContext( &dc );
|
2008-01-12 20:31:56 +00:00
|
|
|
|
|
2009-08-08 10:08:37 +00:00
|
|
|
|
wxASSERT( via->Type() == TYPE_VIA);
|
|
|
|
|
|
|
|
|
|
PICKED_ITEMS_LIST itemsListPicker;
|
|
|
|
|
ITEM_PICKER picker( NULL, UR_CHANGED );
|
|
|
|
|
|
|
|
|
|
switch( event.GetId() )
|
2008-01-12 20:31:56 +00:00
|
|
|
|
{
|
|
|
|
|
case ID_POPUP_PCB_SELECT_VIASIZE1:
|
|
|
|
|
case ID_POPUP_PCB_SELECT_VIASIZE2:
|
|
|
|
|
case ID_POPUP_PCB_SELECT_VIASIZE3:
|
|
|
|
|
case ID_POPUP_PCB_SELECT_VIASIZE4:
|
|
|
|
|
case ID_POPUP_PCB_SELECT_VIASIZE5:
|
|
|
|
|
case ID_POPUP_PCB_SELECT_VIASIZE6:
|
|
|
|
|
case ID_POPUP_PCB_SELECT_VIASIZE7:
|
|
|
|
|
case ID_POPUP_PCB_SELECT_VIASIZE8: // selec the new current value for via size (via diameter)
|
|
|
|
|
DrawPanel->MouseToCursorSchema();
|
2009-08-08 10:08:37 +00:00
|
|
|
|
ii = event.GetId() - ID_POPUP_PCB_SELECT_VIASIZE1;
|
2008-01-12 20:31:56 +00:00
|
|
|
|
g_DesignSettings.m_CurrentViaSize = g_DesignSettings.m_ViaSizeHistory[ii];
|
|
|
|
|
DisplayTrackSettings();
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case ID_POPUP_PCB_VIA_HOLE_ENTER_VALUE: // Enter a new alternate value for drill via
|
2009-08-08 10:08:37 +00:00
|
|
|
|
InstallPcbOptionsFrame( wxDefaultPosition, &dc, ID_PCB_TRACK_SIZE_SETUP );
|
2008-01-12 20:31:56 +00:00
|
|
|
|
DrawPanel->MouseToCursorSchema();
|
|
|
|
|
|
|
|
|
|
case ID_POPUP_PCB_VIA_HOLE_TO_VALUE: // Set the drill via to custom
|
2008-01-28 18:44:14 +00:00
|
|
|
|
if( (g_DesignSettings.m_ViaDrillCustomValue > 0) && (g_DesignSettings.m_ViaDrillCustomValue < via->m_Width) )
|
2008-01-12 20:31:56 +00:00
|
|
|
|
{
|
2009-08-08 10:08:37 +00:00
|
|
|
|
SaveCopyInUndoList(via, UR_CHANGED);
|
|
|
|
|
via->Draw( DrawPanel, &dc, GR_XOR );
|
2008-01-28 18:44:14 +00:00
|
|
|
|
via->SetDrillValue( g_DesignSettings.m_ViaDrillCustomValue );
|
2009-08-08 10:08:37 +00:00
|
|
|
|
via->Draw( DrawPanel, &dc, GR_OR );
|
2008-01-12 20:31:56 +00:00
|
|
|
|
GetScreen()->SetModify();
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
DisplayError( this, _( "Incorrect value for Via drill. No via drill change" ) );
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
case ID_POPUP_PCB_VIA_HOLE_EXPORT: // Export the current drill value as the new custom value
|
|
|
|
|
if( via->GetDrillValue() > 0 )
|
2008-01-28 18:44:14 +00:00
|
|
|
|
g_DesignSettings.m_ViaDrillCustomValue = via->GetDrillValue();
|
2008-01-12 20:31:56 +00:00
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case ID_POPUP_PCB_VIA_HOLE_EXPORT_TO_OTHERS: // Export the current drill value to via which h<>ave the same size
|
|
|
|
|
if( via->GetDrillValue() > 0 )
|
2008-01-28 18:44:14 +00:00
|
|
|
|
g_DesignSettings.m_ViaDrillCustomValue = via->GetDrillValue();
|
2009-01-05 05:21:35 +00:00
|
|
|
|
via_struct = GetBoard()->m_Track;
|
2008-11-24 06:53:43 +00:00
|
|
|
|
for( ; via_struct != NULL; via_struct = via_struct->Next() )
|
2008-01-12 20:31:56 +00:00
|
|
|
|
{
|
2008-12-04 04:28:11 +00:00
|
|
|
|
if( via_struct->Type() == TYPE_VIA ) /* mise a jour du diametre de la via */
|
2008-01-12 20:31:56 +00:00
|
|
|
|
{
|
|
|
|
|
if( via_struct->m_Width != via->m_Width )
|
|
|
|
|
continue;
|
2009-08-08 10:08:37 +00:00
|
|
|
|
picker.m_PickedItem = via_struct;
|
|
|
|
|
picker.m_Link = via_struct->Copy();
|
|
|
|
|
itemsListPicker.PushItem(picker);
|
|
|
|
|
via_struct->Draw( DrawPanel, &dc, GR_XOR );
|
2008-01-12 20:31:56 +00:00
|
|
|
|
via_struct->SetDrillValue( via->GetDrillValue() );
|
2009-08-08 10:08:37 +00:00
|
|
|
|
via_struct->Draw( DrawPanel, &dc, GR_OR );
|
2008-01-12 20:31:56 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
2009-08-08 10:08:37 +00:00
|
|
|
|
SaveCopyInUndoList(itemsListPicker, UR_CHANGED);
|
2008-01-12 20:31:56 +00:00
|
|
|
|
|
|
|
|
|
GetScreen()->SetModify();
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case ID_POPUP_PCB_VIA_HOLE_TO_DEFAULT:
|
2009-08-08 10:08:37 +00:00
|
|
|
|
SaveCopyInUndoList(via, UR_CHANGED);
|
|
|
|
|
via->Draw( DrawPanel, &dc, GR_XOR );
|
2008-01-12 20:31:56 +00:00
|
|
|
|
via->SetDrillDefault();
|
2009-08-08 10:08:37 +00:00
|
|
|
|
via->Draw( DrawPanel, &dc, GR_OR );
|
2008-01-12 20:31:56 +00:00
|
|
|
|
GetScreen()->SetModify();
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case ID_POPUP_PCB_VIA_HOLE_RESET_TO_DEFAULT: // Reset all via hole to default value
|
2009-01-05 05:21:35 +00:00
|
|
|
|
via_struct = GetBoard()->m_Track;
|
2008-08-29 12:14:45 +00:00
|
|
|
|
for( ; via_struct != NULL; via_struct = via_struct->Next() )
|
2008-01-12 20:31:56 +00:00
|
|
|
|
{
|
2008-12-04 04:28:11 +00:00
|
|
|
|
if( via_struct->Type() == TYPE_VIA ) /* mise a jour du diametre de la via */
|
2008-01-12 20:31:56 +00:00
|
|
|
|
{
|
2008-08-29 12:14:45 +00:00
|
|
|
|
if( ! via_struct->IsDrillDefault() )
|
2008-01-12 20:31:56 +00:00
|
|
|
|
{
|
2009-08-08 10:08:37 +00:00
|
|
|
|
picker.m_PickedItem = via_struct;
|
|
|
|
|
picker.m_Link = via_struct->Copy();
|
|
|
|
|
itemsListPicker.PushItem(picker);
|
|
|
|
|
via_struct->Draw( DrawPanel, &dc, GR_XOR );
|
2008-01-12 20:31:56 +00:00
|
|
|
|
via_struct->SetDrillDefault();
|
2009-08-08 10:08:37 +00:00
|
|
|
|
via_struct->Draw( DrawPanel, &dc, GR_OR );
|
2008-01-12 20:31:56 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
2009-08-08 10:08:37 +00:00
|
|
|
|
SaveCopyInUndoList(itemsListPicker, UR_CHANGED);
|
2008-01-12 20:31:56 +00:00
|
|
|
|
|
|
|
|
|
GetScreen()->SetModify();
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
default:
|
2009-07-30 11:04:07 +00:00
|
|
|
|
wxMessageBox( wxT( "WinEDA_PcbFrame::Via_Edition() error: unknown command" ) );
|
2008-01-12 20:31:56 +00:00
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
|
2009-08-08 10:08:37 +00:00
|
|
|
|
DrawPanel->CursorOn( &dc );
|
2008-01-12 20:31:56 +00:00
|
|
|
|
DrawPanel->MouseToCursorSchema();
|
2007-05-06 16:03:28 +00:00
|
|
|
|
}
|