dialog_general_options.cpp 8.67 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
/*
 * This program source code file is part of KiCad, a free EDA CAD application.
 *
 * Copyright (C) 2009 Jean-Pierre Charras, jaen-pierre.charras@gipsa-lab.inpg.com
 * Copyright (C) 1992-2011 KiCad Developers, see AUTHORS.txt for contributors.
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License
 * as published by the Free Software Foundation; either version 2
 * of the License, or (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, you may find one here:
 * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
 * or you may search the http://www.gnu.org website for the version 2 license,
 * or you may write to the Free Software Foundation, Inc.,
 * 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA
 */

/**
 * @file dialog_general_options.cpp
 */
28

29
/* functions relatives to the dialogs opened from the main menu :
30 31 32
 *   Preferences/general
 *   Preferences/display
 */
33 34 35 36 37 38 39 40 41 42 43 44
#include <fctsys.h>
#include <class_drawpanel.h>
#include <confirm.h>
#include <pcbnew.h>
#include <wxPcbStruct.h>
#include <class_board_design_settings.h>
#include <pcbcommon.h>

#include <pcbnew_id.h>
#include <class_board.h>

#include <dialog_general_options.h>
45 46 47 48 49
#ifdef KICAD_GAL
#include <class_drawpanel_gal.h>
#include <view/view.h>
#include <pcb_painter.h>
#endif /* KICAD_GAL */
50

51 52
DIALOG_GENERALOPTIONS::DIALOG_GENERALOPTIONS( PCB_EDIT_FRAME* parent ) :
    DIALOG_GENERALOPTIONS_BOARDEDITOR_BASE( parent )
53
{
54
    init();
charras's avatar
charras committed
55 56 57

    GetSizer()->SetSizeHints( this );
    Center();
58
}
plyatov's avatar
plyatov committed
59

60

61
void DIALOG_GENERALOPTIONS::init()
plyatov's avatar
plyatov committed
62
{
63
    SetFocus();
64
    m_sdbSizerOK->SetDefault();
dickelbeck's avatar
dickelbeck committed
65

66
    m_Board = GetParent()->GetBoard();
67

dickelbeck's avatar
dickelbeck committed
68
    /* Set display options */
dickelbeck's avatar
dickelbeck committed
69
    m_PolarDisplay->SetSelection( DisplayOpt.DisplayPolarCood ? 1 : 0 );
70
    m_UnitsSelection->SetSelection( g_UserUnit ? 1 : 0 );
71
    m_CursorShape->SetSelection( GetParent()->GetCursorShape() ? 1 : 0 );
dickelbeck's avatar
dickelbeck committed
72

Andrey Fedorushkov's avatar
Andrey Fedorushkov committed
73 74 75 76 77 78

    switch( g_RotationAngle )
    {
    case 450:
        m_RotationAngle->SetSelection( 0 );
        break;
79

Andrey Fedorushkov's avatar
Andrey Fedorushkov committed
80 81 82 83
    default:
        m_RotationAngle->SetSelection( 1 );
    }

dickelbeck's avatar
dickelbeck committed
84
    wxString timevalue;
85
    timevalue << GetParent()->GetAutoSaveInterval() / 60;
dickelbeck's avatar
dickelbeck committed
86 87 88
    m_SaveTime->SetValue( timevalue );
    m_MaxShowLinks->SetValue( g_MaxLinksShowed );

89
    m_DrcOn->SetValue( g_Drc_On );
dickelbeck's avatar
dickelbeck committed
90
    m_ShowModuleRatsnest->SetValue( g_Show_Module_Ratsnest );
91
    m_ShowGlobalRatsnest->SetValue( m_Board->IsElementVisible( RATSNEST_VISIBLE ) );
dickelbeck's avatar
dickelbeck committed
92
    m_TrackAutodel->SetValue( g_AutoDeleteOldTrack );
93
    m_Track_45_Only_Ctrl->SetValue( g_Track_45_Only_Allowed );
94
    m_Segments_45_Only_Ctrl->SetValue( g_Segments_45_Only );
95
    m_ZoomNoCenterOpt->SetValue( GetParent()->GetCanvas()->GetEnableZoomNoCenter() );
96 97 98
    m_MiddleButtonPANOpt->SetValue( GetParent()->GetCanvas()->GetEnableMiddleButtonPan() );
    m_OptMiddleButtonPanLimited->SetValue( GetParent()->GetCanvas()->GetMiddleButtonPanLimited() );
    m_OptMiddleButtonPanLimited->Enable( m_MiddleButtonPANOpt->GetValue() );
99
    m_AutoPANOpt->SetValue( GetParent()->GetCanvas()->GetEnableAutoPan() );
dickelbeck's avatar
dickelbeck committed
100
    m_Track_DoubleSegm_Ctrl->SetValue( g_TwoSegmentTrackBuild );
plyatov's avatar
plyatov committed
101

102 103
    m_MagneticPadOptCtrl->SetSelection( g_MagneticPadOption );
    m_MagneticTrackOptCtrl->SetSelection( g_MagneticTrackOption );
plyatov's avatar
plyatov committed
104 105
}

dickelbeck's avatar
dickelbeck committed
106

107
void DIALOG_GENERALOPTIONS::OnCancelClick( wxCommandEvent& event )
plyatov's avatar
plyatov committed
108
{
109
    event.Skip();
plyatov's avatar
plyatov committed
110
}
dickelbeck's avatar
dickelbeck committed
111 112


113
void DIALOG_GENERALOPTIONS::OnOkClick( wxCommandEvent& event )
plyatov's avatar
plyatov committed
114
{
115
    EDA_UNITS_T ii;
plyatov's avatar
plyatov committed
116

117
    DisplayOpt.DisplayPolarCood = ( m_PolarDisplay->GetSelection() == 0 ) ? false : true;
118 119
    ii = g_UserUnit;
    g_UserUnit = ( m_UnitsSelection->GetSelection() == 0 )  ? INCHES : MILLIMETRES;
120

121
    if( ii != g_UserUnit )
122
        GetParent()->ReCreateAuxiliaryToolbar();
plyatov's avatar
plyatov committed
123

124
    GetParent()->SetCursorShape( m_CursorShape->GetSelection() );
125
    GetParent()->SetAutoSaveInterval( m_SaveTime->GetValue() * 60 );
Andrey Fedorushkov's avatar
Andrey Fedorushkov committed
126 127 128

    g_RotationAngle = 10 * wxAtoi( m_RotationAngle->GetStringSelection() );

129
    /* Updating the combobox to display the active layer. */
dickelbeck's avatar
dickelbeck committed
130
    g_MaxLinksShowed = m_MaxShowLinks->GetValue();
131
    g_Drc_On = m_DrcOn->GetValue();
132

133
    if( m_Board->IsElementVisible(RATSNEST_VISIBLE) != m_ShowGlobalRatsnest->GetValue() )
dickelbeck's avatar
dickelbeck committed
134
    {
135
        GetParent()->SetElementVisibility(RATSNEST_VISIBLE, m_ShowGlobalRatsnest->GetValue() );
136
        GetParent()->GetCanvas()->Refresh( );
dickelbeck's avatar
dickelbeck committed
137
    }
138

dickelbeck's avatar
dickelbeck committed
139
    g_Show_Module_Ratsnest = m_ShowModuleRatsnest->GetValue();
dickelbeck's avatar
dickelbeck committed
140
    g_AutoDeleteOldTrack   = m_TrackAutodel->GetValue();
141
    g_Segments_45_Only = m_Segments_45_Only_Ctrl->GetValue();
142
    g_Track_45_Only_Allowed    = m_Track_45_Only_Ctrl->GetValue();
143

144
    GetParent()->GetCanvas()->SetEnableZoomNoCenter( m_ZoomNoCenterOpt->GetValue() );
145 146 147
    GetParent()->GetCanvas()->SetEnableMiddleButtonPan( m_MiddleButtonPANOpt->GetValue() );
    GetParent()->GetCanvas()->SetMiddleButtonPanLimited( m_OptMiddleButtonPanLimited->GetValue() );

148
    GetParent()->GetCanvas()->SetEnableAutoPan( m_AutoPANOpt->GetValue() );
plyatov's avatar
plyatov committed
149
    g_TwoSegmentTrackBuild = m_Track_DoubleSegm_Ctrl->GetValue();
150
    g_MagneticPadOption   = m_MagneticPadOptCtrl->GetSelection();
151 152
    g_MagneticTrackOption = m_MagneticTrackOptCtrl->GetSelection();

153
    EndModal( wxID_OK );
plyatov's avatar
plyatov committed
154 155 156
}


157
/* Must be called on a click on the left toolbar (options toolbar
158
 * Update variables according to tools states
159
 */
160
void PCB_EDIT_FRAME::OnSelectOptionToolbar( wxCommandEvent& event )
161 162
{
    int id = event.GetId();
163
    bool state = event.IsChecked();
164 165 166 167

    switch( id )
    {
    case ID_TB_OPTIONS_DRC_OFF:
168
        g_Drc_On = !state;
169

170 171
        if( GetToolId() == ID_TRACK_BUTT )
        {
172
            if( g_Drc_On )
173
                m_canvas->SetCursor( wxCURSOR_PENCIL );
174
            else
175
                m_canvas->SetCursor( wxCURSOR_QUESTION_ARROW );
176
        }
177 178 179
        break;

    case ID_TB_OPTIONS_SHOW_RATSNEST:
180
        SetElementVisibility( RATSNEST_VISIBLE, state );
181

182 183
        if( state && (GetBoard()->m_Status_Pcb & LISTE_RATSNEST_ITEM_OK) == 0 )
            Compile_Ratsnest( NULL, true );
184

185
        m_canvas->Refresh();
186 187 188
        break;

    case ID_TB_OPTIONS_SHOW_MODULE_RATSNEST:
189
        g_Show_Module_Ratsnest = state; // TODO: use the visibility list
190 191 192
        break;

    case ID_TB_OPTIONS_AUTO_DEL_TRACK:
193
        g_AutoDeleteOldTrack = state;
194 195 196 197
        break;

    case ID_TB_OPTIONS_SHOW_ZONES:
        DisplayOpt.DisplayZonesMode = 0;
198
        m_canvas->Refresh();
199 200 201 202
        break;

    case ID_TB_OPTIONS_SHOW_ZONES_DISABLE:
        DisplayOpt.DisplayZonesMode = 1;
203
        m_canvas->Refresh();
204 205 206 207
        break;

    case ID_TB_OPTIONS_SHOW_ZONES_OUTLINES_ONLY:
        DisplayOpt.DisplayZonesMode = 2;
208
        m_canvas->Refresh();
209 210
        break;

dickelbeck's avatar
dickelbeck committed
211
    case ID_TB_OPTIONS_SHOW_VIAS_SKETCH:
212
        m_DisplayViaFill = DisplayOpt.DisplayViaFill = !state;
213
        m_canvas->Refresh();
dickelbeck's avatar
dickelbeck committed
214 215
        break;

216
    case ID_TB_OPTIONS_SHOW_TRACKS_SKETCH:
217
        m_DisplayPcbTrackFill = DisplayOpt.DisplayPcbTrackFill = !state;
218
        m_canvas->Refresh();
219 220
        break;

221
    case ID_TB_OPTIONS_SHOW_HIGH_CONTRAST_MODE:
222
        DisplayOpt.ContrastModeDisplay = state;
223 224 225
#ifdef KICAD_GAL
        m_galCanvas->GetView()->EnableTopLayer( state );
#endif /* KICAD_GAL */
226
        m_canvas->Refresh();
227
        break;
228

229
    case ID_TB_OPTIONS_SHOW_EXTRA_VERTICAL_TOOLBAR_MICROWAVE:
230
        m_show_microwave_tools = state;
231
        m_auimgr.GetPane( wxT( "m_microWaveToolBar" ) ).Show( m_show_microwave_tools );
232 233 234
        m_auimgr.Update();
        break;

charras's avatar
charras committed
235
    case ID_TB_OPTIONS_SHOW_MANAGE_LAYERS_VERTICAL_TOOLBAR:
236
        // show auxiliary Vertical layers and visibility manager toolbar
237
        m_show_layer_manager_tools = state;
238
        m_auimgr.GetPane( wxT( "m_LayersManagerToolBar" ) ).Show( m_show_layer_manager_tools );
239
        m_auimgr.Update();
240

241 242
        GetMenuBar()->SetLabel( ID_MENU_PCB_SHOW_HIDE_LAYERS_MANAGER_DIALOG,
                                m_show_layer_manager_tools ?
243
                                _( "Hide &Layers Manager" ) : _( "Show &Layers Manager" ) );
244 245 246 247
        break;

    default:
        DisplayError( this,
248
                      wxT( "PCB_EDIT_FRAME::OnSelectOptionToolbar error \n (event not handled!)" ) );
249 250
        break;
    }
251 252 253 254 255 256 257 258 259 260 261 262 263 264

#ifdef KICAD_GAL
    // Apply new display options to the GAL canvas
    KiGfx::PCB_PAINTER* painter =
            static_cast<KiGfx::PCB_PAINTER*> ( m_galCanvas->GetView()->GetPainter() );
    KiGfx::PCB_RENDER_SETTINGS* settings =
            static_cast<KiGfx::PCB_RENDER_SETTINGS*> ( painter->GetSettings() );
    settings->LoadDisplayOptions( DisplayOpt );

    if( IsGalCanvasActive() )
    {
        m_galCanvas->Refresh();
    }
#endif
265
}