dialog_print_using_printer.cpp 15.8 KB
Newer Older
1 2 3
/****************************************/
/* File: dialog_print_using_printer.cpp */
/****************************************/
plyatov's avatar
plyatov committed
4 5

// Set this to 1 if you want to test PostScript printing under MSW.
6
//#define wxTEST_POSTSCRIPT_IN_MSW 1
plyatov's avatar
plyatov committed
7

8 9 10 11 12
#include <fctsys.h>
#include <appl_wxstruct.h>
#include <class_drawpanel.h>
#include <confirm.h>
#include <wxPcbStruct.h>
13
#include <base_units.h>
plyatov's avatar
plyatov committed
14

15 16 17
#include <printout_controler.h>
#include <pcbnew.h>
#include <pcbplot.h>
18

19
#include <class_board.h>
20

21
#include <dialog_print_using_printer_base.h>
22

charras's avatar
charras committed
23

24 25
#define PEN_WIDTH_MAX_VALUE ( KiROUND( 5 * IU_PER_MM ) )
#define PEN_WIDTH_MIN_VALUE ( KiROUND( 0.005 * IU_PER_MM ) )
plyatov's avatar
plyatov committed
26

27 28 29 30

extern int g_DrawDefaultLineThickness;

// Local variables
31
static LAYER_MSK s_SelectedLayers;
charras's avatar
charras committed
32 33 34
static double s_ScaleList[] =
{ 0, 0.5, 0.7, 0.999, 1.0, 1.4, 2.0, 3.0, 4.0 };

35 36 37
// Define min et max reasonnable values for print scale
#define MIN_SCALE 0.01
#define MAX_SCALE 100.0
charras's avatar
charras committed
38

plyatov's avatar
plyatov committed
39
// static print data and page setup data, to remember settings during the session
40 41
static wxPrintData* s_PrintData;
static wxPageSetupDialogData* s_pageSetupData = (wxPageSetupDialogData*) NULL;
plyatov's avatar
plyatov committed
42

43
static PRINT_PARAMETERS  s_Parameters;
plyatov's avatar
plyatov committed
44

45

46 47
/**
 * Dialog to print schematic. Class derived from DIALOG_PRINT_USING_PRINTER_base
48 49 50 51 52
 *  created by wxFormBuilder
 */
class DIALOG_PRINT_USING_PRINTER : public DIALOG_PRINT_USING_PRINTER_base
{
public:
53
    DIALOG_PRINT_USING_PRINTER( PCB_EDIT_FRAME* parent );
54 55 56 57 58 59

    bool IsMirrored() { return m_Print_Mirror->IsChecked(); }
    bool ExcludeEdges() { return m_Exclude_Edges_Pcb->IsChecked(); }
    bool PrintUsingSinglePage() { return m_PagesOption->GetSelection(); }
    int SetLayerMaskFromListSelection();

60 61

private:
62 63 64 65 66 67

    PCB_EDIT_FRAME* m_parent;
    wxConfig*       m_config;
    wxCheckBox*     m_BoxSelectLayer[32];
    static bool     m_ExcludeEdgeLayer;

68
    void OnCloseWindow( wxCloseEvent& event );
69
    void OnPageSetup( wxCommandEvent& event );
70 71
    void OnPrintPreview( wxCommandEvent& event );
    void OnPrintButtonClick( wxCommandEvent& event );
72
    void OnScaleSelectionClick( wxCommandEvent& event );
73 74

    void OnButtonCancelClick( wxCommandEvent& event ) { Close(); }
75
    void SetPrintParameters( );
76
    void SetPenWidth();
77
    void InitValues( );
78
};
plyatov's avatar
plyatov committed
79

dickelbeck's avatar
dickelbeck committed
80

81
bool DIALOG_PRINT_USING_PRINTER::m_ExcludeEdgeLayer;
charras's avatar
charras committed
82

plyatov's avatar
plyatov committed
83

84
void PCB_EDIT_FRAME::ToPrinter( wxCommandEvent& event )
plyatov's avatar
plyatov committed
85
{
86 87
    const PAGE_INFO& pageInfo = GetPageSettings();

88
    if( s_PrintData == NULL )  // First print
dickelbeck's avatar
dickelbeck committed
89
    {
90
        s_PrintData = new wxPrintData();
dickelbeck's avatar
dickelbeck committed
91

92
        if( !s_PrintData->Ok() )
dickelbeck's avatar
dickelbeck committed
93 94 95
        {
            DisplayError( this, _( "Error Init Printer info" ) );
        }
96 97 98 99 100 101 102
        s_PrintData->SetQuality( wxPRINT_QUALITY_HIGH );      // Default resolution = HIGH;
    }

    if( s_pageSetupData == NULL )
        s_pageSetupData = new wxPageSetupDialogData( *s_PrintData );

    s_pageSetupData->SetPaperId( pageInfo.GetPaperId() );
103
    s_pageSetupData->GetPrintData().SetOrientation( pageInfo.GetWxOrientation() );
104 105 106 107 108 109 110 111 112

    if( pageInfo.IsCustom() )
    {
        if( pageInfo.IsPortrait() )
            s_pageSetupData->SetPaperSize( wxSize( Mils2mm( pageInfo.GetWidthMils() ),
                                                   Mils2mm( pageInfo.GetHeightMils() ) ) );
        else
            s_pageSetupData->SetPaperSize( wxSize( Mils2mm( pageInfo.GetHeightMils() ),
                                                   Mils2mm( pageInfo.GetWidthMils() ) ) );
dickelbeck's avatar
dickelbeck committed
113
    }
plyatov's avatar
plyatov committed
114

115
    *s_PrintData = s_pageSetupData->GetPrintData();
116

117
    DIALOG_PRINT_USING_PRINTER dlg( this );
dickelbeck's avatar
dickelbeck committed
118

119
    dlg.ShowModal();
plyatov's avatar
plyatov committed
120 121 122
}


123
DIALOG_PRINT_USING_PRINTER::DIALOG_PRINT_USING_PRINTER( PCB_EDIT_FRAME* parent ) :
124
    DIALOG_PRINT_USING_PRINTER_base( parent )
125
{
126 127
    m_parent = parent;
    m_config = wxGetApp().GetSettings();
128

129 130 131 132 133 134
    InitValues( );

    if( GetSizer() )
    {
        GetSizer()->SetSizeHints( this );
    }
135

136
    Center();
137 138 139 140 141
#ifdef __WXMAC__
    /* Problems with modal on wx-2.9 - Anyway preview is standard for OSX */
   m_buttonPreview->Hide();
#endif

142
}
plyatov's avatar
plyatov committed
143

144

145
void DIALOG_PRINT_USING_PRINTER::InitValues( )
146 147
{
    wxString msg;
148
    BOARD*   board = m_parent->GetBoard();
149

150
    s_Parameters.m_PageSetupData = s_pageSetupData;
151 152

     // Create layer list.
153
    LAYER_NUM layer;
154
    wxString layerKey;
155
    for( layer = FIRST_LAYER; layer < NB_PCB_LAYERS; ++layer )
156
    {
157
        if( !board->IsLayerEnabled( layer ) )
158 159 160 161 162
            m_BoxSelectLayer[layer] = NULL;
        else
        m_BoxSelectLayer[layer] =
            new wxCheckBox( this, -1, board->GetLayerName( layer ) );
    }
163

164 165 166 167
    // Add wxCheckBoxes in layers lists dialog
    //  List layers in same order than in setup layers dialog
    // (Front or Top to Back or Bottom)
    DECLARE_LAYERS_ORDER_LIST(layersOrder);
168
    for( LAYER_NUM layer_idx = FIRST_LAYER; layer_idx < NB_PCB_LAYERS; ++layer_idx )
dickelbeck's avatar
dickelbeck committed
169
    {
170 171
        layer = layersOrder[layer_idx];

172
        wxASSERT(layer < NB_PCB_LAYERS);
173 174 175 176

        if( m_BoxSelectLayer[layer] == NULL )
            continue;

177
        if( layer <= LAST_COPPER_LAYER )
178 179 180 181 182 183 184 185 186
            m_CopperLayersBoxSizer->Add( m_BoxSelectLayer[layer],
                                     0, wxGROW | wxALL, 1 );
        else
            m_TechnicalLayersBoxSizer->Add( m_BoxSelectLayer[layer],
                                     0, wxGROW | wxALL, 1 );


        layerKey.Printf( OPTKEY_LAYERBASE, layer );
        bool option;
187
        if( m_config->Read( layerKey, &option ) )
188
            m_BoxSelectLayer[layer]->SetValue( option );
dickelbeck's avatar
dickelbeck committed
189
        else
190
        {
191
            LAYER_MSK mask = GetLayerMask( layer );
192 193 194
            if( mask & s_SelectedLayers )
                m_BoxSelectLayer[layer]->SetValue( true );
        }
dickelbeck's avatar
dickelbeck committed
195 196
    }

197 198 199
    // Option for excluding contents of "Edges Pcb" layer
    m_Exclude_Edges_Pcb->Show( true );

dickelbeck's avatar
dickelbeck committed
200
    // Read the scale adjust option
201 202
    int scale_idx = 4; // default selected scale = ScaleList[4] = 1.000

203
    if( m_config )
dickelbeck's avatar
dickelbeck committed
204
    {
205 206 207 208 209
        m_config->Read( OPTKEY_PRINT_X_FINESCALE_ADJ, &s_Parameters.m_XScaleAdjust );
        m_config->Read( OPTKEY_PRINT_Y_FINESCALE_ADJ, &s_Parameters.m_YScaleAdjust );
        m_config->Read( OPTKEY_PRINT_SCALE, &scale_idx );
        m_config->Read( OPTKEY_PRINT_PAGE_FRAME, &s_Parameters.m_Print_Sheet_Ref, 1);
        m_config->Read( OPTKEY_PRINT_MONOCHROME_MODE, &s_Parameters.m_Print_Black_and_White, 1);
210
        m_config->Read( OPTKEY_PRINT_PAGE_PER_LAYER, &s_Parameters.m_OptionPrintPage, 0);
211
        int tmp;
212
        m_config->Read( OPTKEY_PRINT_PADS_DRILL,  &tmp, PRINT_PARAMETERS::SMALL_DRILL_SHAPE );
213
        s_Parameters.m_DrillShapeOpt = (PRINT_PARAMETERS::DrillShapeOptT) tmp;
charras's avatar
charras committed
214

215
        // Test for a reasonnable scale value. Set to 1 if problem
216 217 218 219 220
        if( s_Parameters.m_XScaleAdjust < MIN_SCALE ||
            s_Parameters.m_YScaleAdjust < MIN_SCALE ||
            s_Parameters.m_XScaleAdjust > MAX_SCALE ||
            s_Parameters.m_YScaleAdjust > MAX_SCALE )
            s_Parameters.m_XScaleAdjust = s_Parameters.m_YScaleAdjust = 1.0;
221

222 223
        s_SelectedLayers = NO_LAYERS;
        for( LAYER_NUM layer = FIRST_LAYER; layer< NB_PCB_LAYERS; ++layer )
charras's avatar
charras committed
224
        {
225 226 227
            if( m_BoxSelectLayer[layer] == NULL )
                continue;

charras's avatar
charras committed
228 229 230 231 232 233
            wxString layerKey;
            bool     option;

            layerKey.Printf( OPTKEY_LAYERBASE, layer );

            option = false;
234
            if( m_config->Read( layerKey, &option ) )
charras's avatar
charras committed
235
            {
236
                m_BoxSelectLayer[layer]->SetValue( option );
charras's avatar
charras committed
237
                if( option )
238
                    s_SelectedLayers |= GetLayerMask( layer );
charras's avatar
charras committed
239 240
            }
        }
dickelbeck's avatar
dickelbeck committed
241 242
    }

243
    m_ScaleOption->SetSelection( scale_idx );
244 245
    scale_idx = m_ScaleOption->GetSelection();
    s_Parameters.m_PrintScale =  s_ScaleList[scale_idx];
246 247 248
    m_Print_Mirror->SetValue(s_Parameters.m_PrintMirror);
    m_Exclude_Edges_Pcb->SetValue(m_ExcludeEdgeLayer);
    m_Print_Sheet_Ref->SetValue( s_Parameters.m_Print_Sheet_Ref );
dickelbeck's avatar
dickelbeck committed
249

250 251
    // Options to plot pads and vias holes
    m_Drill_Shape_Opt->SetSelection( s_Parameters.m_DrillShapeOpt );
252 253

    if( s_Parameters.m_Print_Black_and_White )
254
        m_ModeColorOption->SetSelection( 1 );
255 256
    else
        m_ModeColorOption->SetSelection( 0 );
257

258
    m_PagesOption->SetSelection(s_Parameters.m_OptionPrintPage);
259
    s_Parameters.m_PenDefaultSize = g_DrawDefaultLineThickness;
260
    AddUnitSymbol( *m_TextPenWidth, g_UserUnit );
261
    m_DialogPenWidth->SetValue(
262
        ReturnStringFromValue( g_UserUnit, s_Parameters.m_PenDefaultSize ) );
263

dickelbeck's avatar
dickelbeck committed
264
    // Create scale adjust option
265
    msg.Printf( wxT( "%f" ), s_Parameters.m_XScaleAdjust );
dickelbeck's avatar
dickelbeck committed
266
    m_FineAdjustXscaleOpt->SetValue( msg );
267

268
    msg.Printf( wxT( "%f" ), s_Parameters.m_YScaleAdjust );
dickelbeck's avatar
dickelbeck committed
269
    m_FineAdjustYscaleOpt->SetValue( msg );
270 271 272 273 274 275

    bool enable = (s_Parameters.m_PrintScale == 1.0);
    if( m_FineAdjustXscaleOpt )
        m_FineAdjustXscaleOpt->Enable(enable);
    if( m_FineAdjustYscaleOpt )
        m_FineAdjustYscaleOpt->Enable(enable);
plyatov's avatar
plyatov committed
276 277
}

dickelbeck's avatar
dickelbeck committed
278

279
int DIALOG_PRINT_USING_PRINTER::SetLayerMaskFromListSelection()
plyatov's avatar
plyatov committed
280
{
dickelbeck's avatar
dickelbeck committed
281
    int page_count;
282

283
    s_Parameters.m_PrintMaskLayer = NO_LAYERS;
284 285
    LAYER_NUM ii;
    for( ii = FIRST_LAYER, page_count = 0; ii < NB_PCB_LAYERS; ++ii )
dickelbeck's avatar
dickelbeck committed
286
    {
287 288
        if( m_BoxSelectLayer[ii] == NULL )
            continue;
289
        if( m_BoxSelectLayer[ii]->IsChecked() )
dickelbeck's avatar
dickelbeck committed
290 291
        {
            page_count++;
292
            s_Parameters.m_PrintMaskLayer |= GetLayerMask( ii );
dickelbeck's avatar
dickelbeck committed
293 294
        }
    }
295

296
    // In Pcbnew force the EDGE layer to be printed or not with the other layers
297 298 299 300 301 302 303
    m_ExcludeEdgeLayer = m_Exclude_Edges_Pcb->IsChecked();
    if( m_ExcludeEdgeLayer )
        s_Parameters.m_Flags = 0;
    else
        s_Parameters.m_Flags = 1;

    s_Parameters.m_PageCount = page_count;
dickelbeck's avatar
dickelbeck committed
304 305

    return page_count;
plyatov's avatar
plyatov committed
306 307
}

dickelbeck's avatar
dickelbeck committed
308

309
void DIALOG_PRINT_USING_PRINTER::OnCloseWindow( wxCloseEvent& event )
plyatov's avatar
plyatov committed
310
{
311
    SetPrintParameters();
312

313
    if( m_config )
dickelbeck's avatar
dickelbeck committed
314
    {
315 316 317 318
        ConfigBaseWriteDouble( m_config, OPTKEY_PRINT_X_FINESCALE_ADJ,
                               s_Parameters.m_XScaleAdjust );
        ConfigBaseWriteDouble( m_config, OPTKEY_PRINT_Y_FINESCALE_ADJ,
                               s_Parameters.m_YScaleAdjust );
319 320 321
        m_config->Write( OPTKEY_PRINT_SCALE, m_ScaleOption->GetSelection() );
        m_config->Write( OPTKEY_PRINT_PAGE_FRAME, s_Parameters.m_Print_Sheet_Ref);
        m_config->Write( OPTKEY_PRINT_MONOCHROME_MODE, s_Parameters.m_Print_Black_and_White);
322
        m_config->Write( OPTKEY_PRINT_PAGE_PER_LAYER, s_Parameters.m_OptionPrintPage );
323
        m_config->Write( OPTKEY_PRINT_PADS_DRILL, (long) s_Parameters.m_DrillShapeOpt );
charras's avatar
charras committed
324
        wxString layerKey;
325
        for( LAYER_NUM layer = FIRST_LAYER; layer < NB_PCB_LAYERS;  ++layer )
charras's avatar
charras committed
326
        {
327 328
            if( m_BoxSelectLayer[layer] == NULL )
                continue;
charras's avatar
charras committed
329
            layerKey.Printf( OPTKEY_LAYERBASE, layer );
330
            m_config->Write( layerKey, m_BoxSelectLayer[layer]->IsChecked() );
charras's avatar
charras committed
331
        }
dickelbeck's avatar
dickelbeck committed
332 333
    }
    EndModal( 0 );
plyatov's avatar
plyatov committed
334 335 336
}


337
void DIALOG_PRINT_USING_PRINTER::SetPrintParameters( )
plyatov's avatar
plyatov committed
338
{
339 340
    PCB_PLOT_PARAMS plot_opts = m_parent->GetPlotSettings();

341 342
    s_Parameters.m_PrintMirror = m_Print_Mirror->GetValue();
    s_Parameters.m_Print_Sheet_Ref = m_Print_Sheet_Ref->GetValue();
343
    s_Parameters.m_Print_Black_and_White =
344 345
        m_ModeColorOption->GetSelection() != 0;

346 347 348
    s_Parameters.m_DrillShapeOpt =
        (PRINT_PARAMETERS::DrillShapeOptT) m_Drill_Shape_Opt->GetSelection();

349 350
    if( m_PagesOption )
        s_Parameters.m_OptionPrintPage = m_PagesOption->GetSelection() != 0;
351

352 353 354 355
    SetLayerMaskFromListSelection();

    int idx = m_ScaleOption->GetSelection();
    s_Parameters.m_PrintScale =  s_ScaleList[idx];
356
    plot_opts.SetScale( s_Parameters.m_PrintScale );
357

dickelbeck's avatar
dickelbeck committed
358
    if( m_FineAdjustXscaleOpt )
359 360 361 362 363 364
    {
        if( s_Parameters.m_XScaleAdjust > MAX_SCALE ||
            s_Parameters.m_YScaleAdjust > MAX_SCALE )
            DisplayInfoMessage( NULL, _( "Warning: Scale option set to a very large value" ) );
        m_FineAdjustXscaleOpt->GetValue().ToDouble( &s_Parameters.m_XScaleAdjust );
    }
dickelbeck's avatar
dickelbeck committed
365
    if( m_FineAdjustYscaleOpt )
366 367 368 369 370 371 372
    {
        // Test for a reasonnable scale value
        if( s_Parameters.m_XScaleAdjust < MIN_SCALE ||
            s_Parameters.m_YScaleAdjust < MIN_SCALE )
            DisplayInfoMessage( NULL, _( "Warning: Scale option set to a very small value" ) );
        m_FineAdjustYscaleOpt->GetValue().ToDouble( &s_Parameters.m_YScaleAdjust );
    }
373

374 375
    plot_opts.SetFineScaleAdjustX( s_Parameters.m_XScaleAdjust );
    plot_opts.SetFineScaleAdjustY( s_Parameters.m_YScaleAdjust );
376 377 378

    m_parent->SetPlotSettings( plot_opts );

379
    SetPenWidth();
plyatov's avatar
plyatov committed
380 381
}

dickelbeck's avatar
dickelbeck committed
382

383
void DIALOG_PRINT_USING_PRINTER::SetPenWidth()
plyatov's avatar
plyatov committed
384
{
385 386 387
    // Get the new pen width value, and verify min et max value
    // NOTE: s_Parameters.m_PenDefaultSize is in internal units

388
    s_Parameters.m_PenDefaultSize = ReturnValueFromTextCtrl( *m_DialogPenWidth );
389

390
    if( s_Parameters.m_PenDefaultSize > PEN_WIDTH_MAX_VALUE )
dickelbeck's avatar
dickelbeck committed
391
    {
392
        s_Parameters.m_PenDefaultSize = PEN_WIDTH_MAX_VALUE;
dickelbeck's avatar
dickelbeck committed
393
    }
394

395
    if( s_Parameters.m_PenDefaultSize < PEN_WIDTH_MIN_VALUE )
dickelbeck's avatar
dickelbeck committed
396
    {
397
        s_Parameters.m_PenDefaultSize = PEN_WIDTH_MIN_VALUE;
dickelbeck's avatar
dickelbeck committed
398
    }
399

400 401
    g_DrawDefaultLineThickness = s_Parameters.m_PenDefaultSize;

402
    m_DialogPenWidth->SetValue(
403
        ReturnStringFromValue( g_UserUnit, s_Parameters.m_PenDefaultSize ) );
plyatov's avatar
plyatov committed
404 405
}

406 407 408 409
void DIALOG_PRINT_USING_PRINTER::OnScaleSelectionClick( wxCommandEvent& event )
{
    double scale = s_ScaleList[m_ScaleOption->GetSelection()];
    bool enable = (scale == 1.0);
410

411 412 413 414 415 416
    if( m_FineAdjustXscaleOpt )
        m_FineAdjustXscaleOpt->Enable(enable);
    if( m_FineAdjustYscaleOpt )
        m_FineAdjustYscaleOpt->Enable(enable);
}

plyatov's avatar
plyatov committed
417

418
void DIALOG_PRINT_USING_PRINTER::OnPageSetup( wxCommandEvent& event )
plyatov's avatar
plyatov committed
419
{
420
    wxPageSetupDialog pageSetupDialog( this, s_pageSetupData );
421
    pageSetupDialog.ShowModal();
dickelbeck's avatar
dickelbeck committed
422

423 424
    (*s_PrintData) = pageSetupDialog.GetPageSetupDialogData().GetPrintData();
    (*s_pageSetupData) = pageSetupDialog.GetPageSetupDialogData();
plyatov's avatar
plyatov committed
425 426 427
}


428
void DIALOG_PRINT_USING_PRINTER::OnPrintPreview( wxCommandEvent& event )
plyatov's avatar
plyatov committed
429
{
430
    SetPrintParameters( );
dickelbeck's avatar
dickelbeck committed
431

432 433 434 435 436 437 438 439
    // If no layer selected, we have no plot. prompt user if it happens
    // because he could think there is a bug in Pcbnew:
    if( s_Parameters.m_PrintMaskLayer == 0 )
    {
        DisplayError( this, _( "No layer selected" ) );
        return;
    }

dickelbeck's avatar
dickelbeck committed
440
    // Pass two printout objects: for preview, and possible printing.
441
    wxString        title   = _( "Print Preview" );
dickelbeck's avatar
dickelbeck committed
442
    wxPrintPreview* preview =
443 444
        new wxPrintPreview( new BOARD_PRINTOUT_CONTROLLER( s_Parameters, m_parent, title ),
                            new BOARD_PRINTOUT_CONTROLLER( s_Parameters, m_parent, title ),
445
                            s_PrintData );
dickelbeck's avatar
dickelbeck committed
446 447 448

    if( preview == NULL )
    {
449
        DisplayError( this, wxT( "OnPrintPreview() problem" ) );
dickelbeck's avatar
dickelbeck committed
450 451
        return;
    }
452

453
    // Uses the parent position and size.
454 455
    wxPoint         WPos  = m_parent->GetPosition();
    wxSize          WSize = m_parent->GetSize();
plyatov's avatar
plyatov committed
456

457 458
    preview->SetZoom( 100 );

459
    wxPreviewFrame* frame = new wxPreviewFrame( preview, this, title, WPos, WSize );
dickelbeck's avatar
dickelbeck committed
460 461

    frame->Initialize();
462
    frame->Show( true );
plyatov's avatar
plyatov committed
463 464 465
}


466
void DIALOG_PRINT_USING_PRINTER::OnPrintButtonClick( wxCommandEvent& event )
plyatov's avatar
plyatov committed
467
{
468
    SetPrintParameters( );
469 470

    // If no layer selected, we have no plot. prompt user if it happens
471
    // because he could think there is a bug in Pcbnew:
472
    if( s_Parameters.m_PrintMaskLayer == 0 )
473 474 475 476 477
    {
        DisplayError( this, _( "No layer selected" ) );
        return;
    }

478
    wxPrintDialogData printDialogData( *s_PrintData );
plyatov's avatar
plyatov committed
479

charras's avatar
charras committed
480
    wxPrinter         printer( &printDialogData );
plyatov's avatar
plyatov committed
481

482
    wxString          title = _( "Print" );
483
    BOARD_PRINTOUT_CONTROLLER      printout( s_Parameters, m_parent, title );
plyatov's avatar
plyatov committed
484

485 486
    // Alexander's patch had this removed altogether, waiting for testing.
#if 0 && !defined(__WINDOWS__) && !wxCHECK_VERSION(2,9,0)
charras's avatar
charras committed
487
    wxDC*             dc = printout.GetDC();
dickelbeck's avatar
dickelbeck committed
488
    ( (wxPostScriptDC*) dc )->SetResolution( 600 );  // Postscript DC resolution is 600 ppi
plyatov's avatar
plyatov committed
489 490
#endif

491
    if( !printer.Print( this, &printout, true ) )
dickelbeck's avatar
dickelbeck committed
492 493 494
    {
        if( wxPrinter::GetLastError() == wxPRINTER_ERROR )
            DisplayError( this, _( "There was a problem printing" ) );
plyatov's avatar
plyatov committed
495
        return;
dickelbeck's avatar
dickelbeck committed
496 497 498
    }
    else
    {
499
        *s_PrintData = printer.GetPrintDialogData().GetPrintData();
dickelbeck's avatar
dickelbeck committed
500
    }
plyatov's avatar
plyatov committed
501 502
}