You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							240 lines
						
					
					
						
							8.1 KiB
						
					
					
				
			
		
		
		
			
			
			
		
		
	
	
							240 lines
						
					
					
						
							8.1 KiB
						
					
					
				
								/*
							 | 
						|
								 * This program source code file is part of KiCad, a free EDA CAD application.
							 | 
						|
								 *
							 | 
						|
								 * Copyright (C) 2007-2013 SoftPLC Corporation, Dick Hollenbeck <dick@softplc.com>
							 | 
						|
								 * Copyright (C) 2008-2013 Wayne Stambaugh <stambaughw@verizon.net>
							 | 
						|
								 * Copyright (C) 1992-2013 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 page_info.h
							 | 
						|
								 */
							 | 
						|
								
							 | 
						|
								#ifndef PAGE_INFO_H
							 | 
						|
								#define PAGE_INFO_H
							 | 
						|
								
							 | 
						|
								#include <wx/wx.h>
							 | 
						|
								
							 | 
						|
								#include <richio.h>         // for OUTPUTFORMATTER and IO_ERROR
							 | 
						|
								#include <base_units.h>     // for IU_PER_MILS
							 | 
						|
								
							 | 
						|
								/// Min and max page sizes for clamping, in mils.
							 | 
						|
								#define MIN_PAGE_SIZE_MILS          4000
							 | 
						|
								#define MAX_PAGE_SIZE_PCBNEW_MILS  48000
							 | 
						|
								#define MAX_PAGE_SIZE_MILS        120000
							 | 
						|
								
							 | 
						|
								
							 | 
						|
								/**
							 | 
						|
								 * PAGE_INFO
							 | 
						|
								 * describes the page size and margins of a paper page on which to
							 | 
						|
								 * eventually print or plot.  Paper sizes are often described in inches.
							 | 
						|
								 * Here paper is described in 1/1000th of an inch (mils).  For convenience
							 | 
						|
								 * there are some read only accessors for internal units (IU), which is a compile
							 | 
						|
								 * time calculation, not runtime.
							 | 
						|
								 *
							 | 
						|
								 * @author Dick Hollenbeck
							 | 
						|
								 */
							 | 
						|
								class PAGE_INFO
							 | 
						|
								{
							 | 
						|
								public:
							 | 
						|
								
							 | 
						|
								    PAGE_INFO( const wxString& aType = PAGE_INFO::A3, bool IsPortrait = false );
							 | 
						|
								
							 | 
						|
								    // paper size names which are part of the public API, pass to SetType() or
							 | 
						|
								    // above constructor.
							 | 
						|
								
							 | 
						|
								    // these were once wxStrings, but it caused static construction sequence problems:
							 | 
						|
								    static const wxChar A5[];
							 | 
						|
								    static const wxChar A4[];
							 | 
						|
								    static const wxChar A3[];
							 | 
						|
								    static const wxChar A2[];
							 | 
						|
								    static const wxChar A1[];
							 | 
						|
								    static const wxChar A0[];
							 | 
						|
								    static const wxChar A[];
							 | 
						|
								    static const wxChar B[];
							 | 
						|
								    static const wxChar C[];
							 | 
						|
								    static const wxChar D[];
							 | 
						|
								    static const wxChar E[];
							 | 
						|
								    static const wxChar GERBER[];
							 | 
						|
								    static const wxChar USLetter[];
							 | 
						|
								    static const wxChar USLegal[];
							 | 
						|
								    static const wxChar USLedger[];
							 | 
						|
								    static const wxChar Custom[];     ///< "User" defined page type
							 | 
						|
								
							 | 
						|
								
							 | 
						|
								    /**
							 | 
						|
								     * Function SetType
							 | 
						|
								     * sets the name of the page type and also the sizes and margins
							 | 
						|
								     * commonly associated with that type name.
							 | 
						|
								     *
							 | 
						|
								     * @param aStandardPageDescriptionName is a wxString constant giving one of:
							 | 
						|
								     * "A5" "A4" "A3" "A2" "A1" "A0" "A" "B" "C" "D" "E" "GERBER", "USLetter", "USLegal",
							 | 
						|
								     * "USLedger", or "User".  If "User" then the width and height are custom,
							 | 
						|
								     * and will be set according to <b>previous</b> calls to
							 | 
						|
								     * static PAGE_INFO::SetUserWidthMils() and
							 | 
						|
								     * static PAGE_INFO::SetUserHeightMils();
							 | 
						|
								     * @param aIsPortrait Set to true to set page orientation to portrait mode.
							 | 
						|
								     *
							 | 
						|
								     * @return bool - true if @a aStandarePageDescription was a recognized type.
							 | 
						|
								     */
							 | 
						|
								    bool SetType( const wxString& aStandardPageDescriptionName, bool aIsPortrait = false );
							 | 
						|
								    const wxString& GetType() const { return m_type; }
							 | 
						|
								
							 | 
						|
								    /**
							 | 
						|
								     * Function IsDefault
							 | 
						|
								     * @return True if the object has the default page settings which are A3, landscape.
							 | 
						|
								     */
							 | 
						|
								    bool IsDefault() const { return m_type == PAGE_INFO::A3 && !m_portrait; }
							 | 
						|
								
							 | 
						|
								    /**
							 | 
						|
								     * Function IsCustom
							 | 
						|
								     * returns true if the type is Custom
							 | 
						|
								     */
							 | 
						|
								    bool IsCustom() const;
							 | 
						|
								
							 | 
						|
								    /**
							 | 
						|
								     * Function SetPortrait
							 | 
						|
								     * will rotate the paper page 90 degrees.  This PAGE_INFO may either be in
							 | 
						|
								     * portrait or landscape mode.  Use this function to change from one to the
							 | 
						|
								     * other mode.
							 | 
						|
								     * @param aIsPortrait if true and not already in portrait mode, will change
							 | 
						|
								     *  this PAGE_INFO to portrait mode.  Or if false and not already in landscape mode,
							 | 
						|
								     *  will change this PAGE_INFO to landscape mode.
							 | 
						|
								     */
							 | 
						|
								    void SetPortrait( bool aIsPortrait );
							 | 
						|
								    bool IsPortrait() const { return m_portrait; }
							 | 
						|
								
							 | 
						|
								    /**
							 | 
						|
								     * Function GetWxOrientation.
							 | 
						|
								     * @return ws' style printing orientation (wxPORTRAIT or wxLANDSCAPE).
							 | 
						|
								     */
							 | 
						|
								    wxPrintOrientation  GetWxOrientation() const { return IsPortrait() ? wxPORTRAIT : wxLANDSCAPE; }
							 | 
						|
								
							 | 
						|
								    /**
							 | 
						|
								     * Function GetPaperId
							 | 
						|
								     * @return wxPaperSize - wxPrintData's style paper id associated with
							 | 
						|
								     * page type name.
							 | 
						|
								     */
							 | 
						|
								    wxPaperSize GetPaperId() const { return m_paper_id; }
							 | 
						|
								
							 | 
						|
								    void SetWidthMils(  int aWidthInMils );
							 | 
						|
								    int GetWidthMils() const { return m_size.x; }
							 | 
						|
								
							 | 
						|
								    void SetHeightMils( int aHeightInMils );
							 | 
						|
								    int GetHeightMils() const { return m_size.y; }
							 | 
						|
								
							 | 
						|
								    const wxSize& GetSizeMils() const { return m_size; }
							 | 
						|
								
							 | 
						|
								    // Accessors returning "Internal Units (IU)".  IUs are mils in EESCHEMA,
							 | 
						|
								    // and either deci-mils or nanometers in PCBNew.
							 | 
						|
								#if defined(PCBNEW) || defined(EESCHEMA) || defined(GERBVIEW) || defined(PL_EDITOR)
							 | 
						|
								    int GetWidthIU() const  { return IU_PER_MILS * GetWidthMils();  }
							 | 
						|
								    int GetHeightIU() const { return IU_PER_MILS * GetHeightMils(); }
							 | 
						|
								    const wxSize GetSizeIU() const  { return wxSize( GetWidthIU(), GetHeightIU() ); }
							 | 
						|
								#endif
							 | 
						|
								
							 | 
						|
								    /**
							 | 
						|
								     * Function SetCustomWidthMils
							 | 
						|
								     * sets the width of Custom page in mils, for any custom page
							 | 
						|
								     * constructed or made via SetType() after making this call.
							 | 
						|
								     */
							 | 
						|
								    static void SetCustomWidthMils( int aWidthInMils );
							 | 
						|
								
							 | 
						|
								    /**
							 | 
						|
								     * Function SetCustomHeightMils
							 | 
						|
								     * sets the height of Custom page in mils, for any custom page
							 | 
						|
								     * constructed or made via SetType() after making this call.
							 | 
						|
								     */
							 | 
						|
								    static void SetCustomHeightMils( int aHeightInMils );
							 | 
						|
								
							 | 
						|
								    /**
							 | 
						|
								     * Function GetCustomWidthMils.
							 | 
						|
								     * @return int - custom paper width in mils.
							 | 
						|
								     */
							 | 
						|
								    static int GetCustomWidthMils() { return s_user_width; }
							 | 
						|
								
							 | 
						|
								    /**
							 | 
						|
								     * Function GetCustomHeightMils.
							 | 
						|
								     * @return int - custom paper height in mils.
							 | 
						|
								     */
							 | 
						|
								    static int GetCustomHeightMils() { return s_user_height; }
							 | 
						|
								
							 | 
						|
								    /**
							 | 
						|
								     * Function GetStandardSizes
							 | 
						|
								     * returns the standard page types, such as "A4", "A3", etc.
							 | 
						|
								    static wxArrayString GetStandardSizes();
							 | 
						|
								     */
							 | 
						|
								
							 | 
						|
								    /**
							 | 
						|
								     * Function Format
							 | 
						|
								     * outputs the page class to \a aFormatter in s-expression form.
							 | 
						|
								     *
							 | 
						|
								     * @param aFormatter The #OUTPUTFORMATTER object to write to.
							 | 
						|
								     * @param aNestLevel The indentation next level.
							 | 
						|
								     * @param aControlBits The control bit definition for object specific formatting.
							 | 
						|
								     * @throw IO_ERROR on write error.
							 | 
						|
								     */
							 | 
						|
								    void Format( OUTPUTFORMATTER* aFormatter, int aNestLevel, int aControlBits ) const;
							 | 
						|
								
							 | 
						|
								protected:
							 | 
						|
								    // only the class implementation(s) may use this constructor
							 | 
						|
								    PAGE_INFO( const wxSize& aSizeMils, const wxString& aName, wxPaperSize aPaperId );
							 | 
						|
								
							 | 
						|
								
							 | 
						|
								private:
							 | 
						|
								
							 | 
						|
								    // standard pre-defined sizes
							 | 
						|
								    static const PAGE_INFO pageA5;
							 | 
						|
								    static const PAGE_INFO pageA4;
							 | 
						|
								    static const PAGE_INFO pageA3;
							 | 
						|
								    static const PAGE_INFO pageA2;
							 | 
						|
								    static const PAGE_INFO pageA1;
							 | 
						|
								    static const PAGE_INFO pageA0;
							 | 
						|
								    static const PAGE_INFO pageA;
							 | 
						|
								    static const PAGE_INFO pageB;
							 | 
						|
								    static const PAGE_INFO pageC;
							 | 
						|
								    static const PAGE_INFO pageD;
							 | 
						|
								    static const PAGE_INFO pageE;
							 | 
						|
								    static const PAGE_INFO pageGERBER;
							 | 
						|
								
							 | 
						|
								    static const PAGE_INFO pageUSLetter;
							 | 
						|
								    static const PAGE_INFO pageUSLegal;
							 | 
						|
								    static const PAGE_INFO pageUSLedger;
							 | 
						|
								
							 | 
						|
								    static const PAGE_INFO pageUser;
							 | 
						|
								
							 | 
						|
								    // all dimensions here are in mils
							 | 
						|
								
							 | 
						|
								    wxString    m_type;             ///< paper type: A4, A3, etc.
							 | 
						|
								    wxSize      m_size;             ///< mils
							 | 
						|
								
							 | 
						|
								    bool        m_portrait;         ///< true if portrait, false if landscape
							 | 
						|
								
							 | 
						|
								    wxPaperSize m_paper_id;         ///< wx' style paper id.
							 | 
						|
								
							 | 
						|
								    static int s_user_height;
							 | 
						|
								    static int s_user_width;
							 | 
						|
								
							 | 
						|
								    void    updatePortrait();
							 | 
						|
								
							 | 
						|
								    void    setMargins();
							 | 
						|
								};
							 | 
						|
								
							 | 
						|
								#endif  // PAGE_INFO_H
							 |