summaryrefslogtreecommitdiff
path: root/include/class_page_info.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/class_page_info.h')
-rw-r--r--include/class_page_info.h238
1 files changed, 238 insertions, 0 deletions
diff --git a/include/class_page_info.h b/include/class_page_info.h
new file mode 100644
index 0000000..a9896f6
--- /dev/null
+++ b/include/class_page_info.h
@@ -0,0 +1,238 @@
+/*
+ * 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 class_page_info.h
+ */
+
+#ifndef CLASS_PAGE_INFO_H_
+#define CLASS_PAGE_INFO_H_
+
+#include <wx/wx.h>
+
+#include <richio.h> // for OUTPUTFORMATTER and IO_ERROR
+#include <base_units.h> // for IU_PER_MILS
+
+
+/**
+ * Class 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 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:
+ * "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 IsPortrait 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 IsPortrait = 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 isPortrait 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 isPortrait );
+ 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
+ throw( IO_ERROR );
+
+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 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
+
+/// Min and max page sizes for clamping.
+#define MIN_PAGE_SIZE 4000
+#define MAX_PAGE_SIZE 48000
+
+ 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 // CLASS_PAGE_INFO_H_