Commit 4451dd3a authored by Marco Mattila's avatar Marco Mattila Committed by Dick Hollenbeck
Browse files

This patch adds an output directory field into the plot dialog in

pcbnew and directs gerber/hpgl etc. output into that directory.
There's a browse button that opens a dialog for browsing. If the
directory does not exist, it is created. Tested in linux, not in
windows. Wxwidgets methods are used for file (name) manipulations, so
things are probably ok in windows, too.

marco
parent f6c80664
Loading
Loading
Loading
Loading
+256 −254
Original line number Diff line number Diff line
///////////////////////////////////////////////////////////////////////////
// C++ code generated with wxFormBuilder (version Apr 16 2008)
// C++ code generated with wxFormBuilder (version Dec 21 2009)
// http://www.wxformbuilder.org/
//
// PLEASE DO "NOT" EDIT THIS FILE!
@@ -36,43 +36,35 @@ DIALOG_PLOT_BASE::DIALOG_PLOT_BASE( wxWindow* parent, wxWindowID id, const wxStr
	bLeftSizer->Add( sbLayersSizer, 1, wxEXPAND, 5 );
	
	m_Use_Gerber_Extensions = new wxCheckBox( this, ID_USE_GERBER_EXTENSIONS, _("Use Proper Gerber Extensions"), wxDefaultPosition, wxDefaultSize, 0 );
	
	m_Use_Gerber_Extensions->SetToolTip( _("Use Proper Gerber Extensions - .GBL, .GTL, etc...") );
	
	bLeftSizer->Add( m_Use_Gerber_Extensions, 0, wxTOP|wxRIGHT|wxLEFT, 5 );
	
	m_Exclude_Edges_Pcb = new wxCheckBox( this, wxID_ANY, _("Exclude pcb edge layer"), wxDefaultPosition, wxDefaultSize, 0 );
	
	m_Exclude_Edges_Pcb->SetToolTip( _("Exclude contents of the pcb edge layer from all other layers") );
	
	bLeftSizer->Add( m_Exclude_Edges_Pcb, 0, wxTOP|wxRIGHT|wxLEFT, 5 );
	
	m_Plot_Sheet_Ref = new wxCheckBox( this, wxID_ANY, _("Print sheet reference"), wxDefaultPosition, wxDefaultSize, 0 );
	
	bLeftSizer->Add( m_Plot_Sheet_Ref, 0, wxTOP|wxRIGHT|wxLEFT, 5 );
	
	m_Plot_Pads_on_Silkscreen = new wxCheckBox( this, ID_ALLOW_PRINT_PAD_ON_SILKSCREEN, _("Print pads on silkscreen"), wxDefaultPosition, wxDefaultSize, 0 );
	
	m_Plot_Pads_on_Silkscreen->SetToolTip( _("Enable/disable print/plot pads on silkscreen layers\nWhen disable, pads are never potted on silkscreen layers\nWhen enable, pads are potted only if they appear on silkscreen layers") );
	
	bLeftSizer->Add( m_Plot_Pads_on_Silkscreen, 0, wxTOP|wxRIGHT|wxLEFT, 5 );
	
	m_Plot_Text_Value = new wxCheckBox( this, ID_PRINT_VALUE, _("Print module value"), wxDefaultPosition, wxDefaultSize, 0 );
	
	bLeftSizer->Add( m_Plot_Text_Value, 0, wxTOP|wxRIGHT|wxLEFT, 5 );
	
	m_Plot_Text_Ref = new wxCheckBox( this, ID_PRINT_REF, _("Print module reference"), wxDefaultPosition, wxDefaultSize, 0 );
	
	bLeftSizer->Add( m_Plot_Text_Ref, 0, wxTOP|wxRIGHT|wxLEFT, 5 );
	
	m_Plot_Text_Div = new wxCheckBox( this, ID_PRINT_MODULE_TEXTS, _("Print other module texts"), wxDefaultPosition, wxDefaultSize, 0 );
	
	m_Plot_Text_Div->SetToolTip( _("Enable/disable print/plot module field texts on silkscreen layers") );
	
	bLeftSizer->Add( m_Plot_Text_Div, 0, wxTOP|wxRIGHT|wxLEFT, 5 );
	
	m_Plot_Invisible_Text = new wxCheckBox( this, ID_FORCE_PRINT_INVISIBLE_TEXT, _("Force print invisible texts"), wxDefaultPosition, wxDefaultSize, 0 );
	
	m_Plot_Invisible_Text->SetToolTip( _("Force print/plot module invisible texts on silkscreen layers") );
	
	bLeftSizer->Add( m_Plot_Invisible_Text, 0, wxALL, 5 );
@@ -151,22 +143,30 @@ DIALOG_PLOT_BASE::DIALOG_PLOT_BASE( wxWindow* parent, wxWindowID id, const wxStr
	sbSizerPSOpt = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("PS Options:") ), wxVERTICAL );
	
	m_Plot_PS_Negative = new wxCheckBox( this, wxID_ANY, _("Plot negative"), wxDefaultPosition, wxDefaultSize, 0 );
	
	sbSizerPSOpt->Add( m_Plot_PS_Negative, 0, wxALL, 5 );
	
	bSizerFmtPlot->Add( sbSizerPSOpt, 0, wxEXPAND, 5 );
	
	wxStaticBoxSizer* sbSizerOutputDir;
	sbSizerOutputDir = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Output Directory:") ), wxVERTICAL );
	
	m_OutputDirectory = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
	sbSizerOutputDir->Add( m_OutputDirectory, 0, wxALIGN_LEFT|wxEXPAND, 5 );
	
	m_BrowseButton = new wxButton( this, ID_BROWSE_OUTPUT_DIRECTORY, _("Browse..."), wxDefaultPosition, wxDefaultSize, 0 );
	sbSizerOutputDir->Add( m_BrowseButton, 0, wxALL, 5 );
	
	bSizerFmtPlot->Add( sbSizerOutputDir, 0, wxEXPAND, 5 );
	
	bUpperSizer->Add( bSizerFmtPlot, 1, wxEXPAND, 5 );
	
	wxBoxSizer* bButtonsSizer;
	bButtonsSizer = new wxBoxSizer( wxVERTICAL );
	
	m_PlotMirorOpt = new wxCheckBox( this, ID_MIROR_OPT, _("Plot mirror"), wxDefaultPosition, wxDefaultSize, 0 );
	
	bButtonsSizer->Add( m_PlotMirorOpt, 0, wxTOP|wxRIGHT|wxLEFT, 5 );
	
	m_PlotNoViaOnMaskOpt = new wxCheckBox( this, ID_MASKVIA_OPT, _("Vias on mask"), wxDefaultPosition, wxDefaultSize, 0 );
	
	m_PlotNoViaOnMaskOpt->SetToolTip( _("Print/plot vias on mask layers. They are in this case not protected") );
	
	bButtonsSizer->Add( m_PlotNoViaOnMaskOpt, 0, wxALL, 5 );
@@ -235,6 +235,7 @@ DIALOG_PLOT_BASE::DIALOG_PLOT_BASE( wxWindow* parent, wxWindowID id, const wxStr
	this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( DIALOG_PLOT_BASE::OnCloseWindow ) );
	this->Connect( wxEVT_INIT_DIALOG, wxInitDialogEventHandler( DIALOG_PLOT_BASE::OnInitDialog ) );
	m_PlotFormatOpt->Connect( wxEVT_COMMAND_RADIOBOX_SELECTED, wxCommandEventHandler( DIALOG_PLOT_BASE::SetPlotFormat ), NULL, this );
	m_BrowseButton->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_PLOT_BASE::OnOutputDirectoryBrowseClicked ), NULL, this );
	m_PlotButton->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_PLOT_BASE::Plot ), NULL, this );
	m_buttonSaveOpt->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_PLOT_BASE::SaveOptPlot ), NULL, this );
	m_buttonDrill->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_PLOT_BASE::CreateDrillFile ), NULL, this );
@@ -247,6 +248,7 @@ DIALOG_PLOT_BASE::~DIALOG_PLOT_BASE()
	this->Disconnect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( DIALOG_PLOT_BASE::OnCloseWindow ) );
	this->Disconnect( wxEVT_INIT_DIALOG, wxInitDialogEventHandler( DIALOG_PLOT_BASE::OnInitDialog ) );
	m_PlotFormatOpt->Disconnect( wxEVT_COMMAND_RADIOBOX_SELECTED, wxCommandEventHandler( DIALOG_PLOT_BASE::SetPlotFormat ), NULL, this );
	m_BrowseButton->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_PLOT_BASE::OnOutputDirectoryBrowseClicked ), NULL, this );
	m_PlotButton->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_PLOT_BASE::Plot ), NULL, this );
	m_buttonSaveOpt->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_PLOT_BASE::SaveOptPlot ), NULL, this );
	m_buttonDrill->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_PLOT_BASE::CreateDrillFile ), NULL, this );
+2288 −2018

File changed.

Preview size limit exceeded, changes collapsed.

+113 −108
Original line number Diff line number Diff line
///////////////////////////////////////////////////////////////////////////
// C++ code generated with wxFormBuilder (version Apr 16 2008)
// C++ code generated with wxFormBuilder (version Dec 21 2009)
// http://www.wxformbuilder.org/
//
// PLEASE DO "NOT" EDIT THIS FILE!
@@ -43,6 +43,7 @@ class DIALOG_PLOT_BASE : public wxDialog
			ID_PRINT_MODULE_TEXTS,
			ID_FORCE_PRINT_INVISIBLE_TEXT,
			ID_DRILL_SHAPE_OPT,
			ID_BROWSE_OUTPUT_DIRECTORY,
			ID_MIROR_OPT,
			ID_MASKVIA_OPT,
			ID_EXEC_PLOT,
@@ -72,6 +73,8 @@ class DIALOG_PLOT_BASE : public wxDialog
		wxStaticText* m_textPenOvr;
		wxTextCtrl* m_HPGLPenOverlayOpt;
		wxCheckBox* m_Plot_PS_Negative;
		wxTextCtrl* m_OutputDirectory;
		wxButton* m_BrowseButton;
		wxCheckBox* m_PlotMirorOpt;
		wxCheckBox* m_PlotNoViaOnMaskOpt;
		wxStaticText* m_staticText6;
@@ -93,6 +96,7 @@ class DIALOG_PLOT_BASE : public wxDialog
		virtual void OnCloseWindow( wxCloseEvent& event ) { event.Skip(); }
		virtual void OnInitDialog( wxInitDialogEvent& event ) { event.Skip(); }
		virtual void SetPlotFormat( wxCommandEvent& event ) { event.Skip(); }
		virtual void OnOutputDirectoryBrowseClicked( wxCommandEvent& event ) { event.Skip(); }
		virtual void Plot( wxCommandEvent& event ) { event.Skip(); }
		virtual void SaveOptPlot( wxCommandEvent& event ) { event.Skip(); }
		virtual void CreateDrillFile( wxCommandEvent& event ) { event.Skip(); }
@@ -100,6 +104,7 @@ class DIALOG_PLOT_BASE : public wxDialog
		
	
	public:
		
		DIALOG_PLOT_BASE( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Plot"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 575,590 ), long style = wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER );
		~DIALOG_PLOT_BASE();
	
+42 −0
Original line number Diff line number Diff line
@@ -44,6 +44,7 @@ PCB_Plot_Options::PCB_Plot_Options()
    ScaleAdjX    = 1.0;
    ScaleAdjY    = 1.0;
    PlotScaleOpt = 1;
    outputDirectory = wxT( "" );
}


@@ -111,6 +112,7 @@ private:
    void Plot( wxCommandEvent& event );
    void OnQuit( wxCommandEvent& event );
    void OnClose( wxCloseEvent& event );
    void OnOutputDirectoryBrowseClicked( wxCommandEvent& event );
    void SetPlotFormat( wxCommandEvent& event );
    void OnSetScaleOpt( wxCommandEvent& event );
    void SaveOptPlot( wxCommandEvent& event );
@@ -138,6 +140,7 @@ DIALOG_PLOT::DIALOG_PLOT( WinEDA_PcbFrame* parent ) :
void DIALOG_PLOT::Init_Dialog()
{
    wxString msg;
    wxFileName fileName;

    BOARD*   board = m_Parent->GetBoard();

@@ -283,6 +286,17 @@ void DIALOG_PLOT::Init_Dialog()
    // Put vias on mask layer
    m_PlotNoViaOnMaskOpt->SetValue( g_pcb_plot_options.DrawViaOnMaskLayer );

    // Output directory
    if( g_pcb_plot_options.GetOutputDirectory().IsEmpty() )
    {
        fileName = m_Parent->GetScreen()->m_FileName;
        m_OutputDirectory->SetValue( fileName.GetPath() );
    }
    else
    {
        m_OutputDirectory->SetValue( g_pcb_plot_options.GetOutputDirectory() );
    }

    // Update options values:
    wxCommandEvent cmd_event;
    SetPlotFormat( cmd_event );
@@ -322,6 +336,15 @@ void DIALOG_PLOT::OnSetScaleOpt( wxCommandEvent& event )
        m_Plot_Sheet_Ref->SetValue( false );
}

void DIALOG_PLOT::OnOutputDirectoryBrowseClicked( wxCommandEvent& event )
{
    wxString currentDir;
    currentDir = m_OutputDirectory->GetValue();
    wxDirDialog dirDialog( this, _( "Select Output Directory" ), currentDir );
    if( dirDialog.ShowModal() == wxID_CANCEL )
        return;
    m_OutputDirectory->SetValue( dirDialog.GetPath() );
}

void DIALOG_PLOT::SetPlotFormat( wxCommandEvent& event )
{
@@ -487,6 +510,8 @@ void DIALOG_PLOT::SaveOptPlot( wxCommandEvent& event )
    }

    g_pcb_plot_options.Plot_PS_Negative = m_Plot_PS_Negative->GetValue();

    g_pcb_plot_options.SetOutputDirectory( m_OutputDirectory->GetValue() );
}


@@ -500,6 +525,22 @@ void DIALOG_PLOT::Plot( wxCommandEvent& event )

    SaveOptPlot( event );

    // Create output directory if it does not exist
    if( !wxFileName::DirExists( m_OutputDirectory->GetValue() ) )
    {
        if( wxMkdir( m_OutputDirectory->GetValue() ) )
        {
            wxString msg;
            msg.Printf( _( "Directory %s created.\n" ), GetChars( m_OutputDirectory->GetValue() ) );
            m_MessagesBox->AppendText( msg );
        }
        else
        {
            wxMessageBox( _( "Cannot create output directory!" ), _( "Plot" ), wxICON_INFORMATION );
            return;
        }
    }

    switch( g_pcb_plot_options.PlotScaleOpt )
    {
    default:
@@ -574,6 +615,7 @@ void DIALOG_PLOT::Plot( wxCommandEvent& event )
            s_SelectedLayers |= mask;

            fn = m_Parent->GetScreen()->m_FileName;
            fn.SetPath( m_OutputDirectory->GetValue() );

            // Create file name.
            wxString layername = board->GetLayerName( layer );
+4 −0
Original line number Diff line number Diff line
@@ -64,8 +64,12 @@ public:
    double         ScaleAdjX;
    double         ScaleAdjY;

    wxString       outputDirectory;

public:
    PCB_Plot_Options();
    void SetOutputDirectory( wxString aDir ) { outputDirectory = aDir; };
    wxString GetOutputDirectory() { return outputDirectory; };
};

extern PCB_Plot_Options g_pcb_plot_options;