page_handler.hpp
上传用户:yhdzpy8989
上传日期:2007-06-13
资源大小:13604k
文件大小:6k
源码类别:

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: page_handler.hpp,v $
  4.  * PRODUCTION Revision 1000.0  2003/10/31 22:05:36  gouriano
  5.  * PRODUCTION PRODUCTION: IMPORTED [ORIGINAL] Dev-tree R1.8
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. #ifndef GUI_UTILS__PAGE_HANDLER_HPP
  10. #define GUI_UTILS__PAGE_HANDLER_HPP
  11. /*  $Id: page_handler.hpp,v 1000.0 2003/10/31 22:05:36 gouriano Exp $
  12.  * ===========================================================================
  13.  *
  14.  *                            PUBLIC DOMAIN NOTICE
  15.  *               National Center for Biotechnology Information
  16.  *
  17.  *  This software/database is a "United States Government Work" under the
  18.  *  terms of the United States Copyright Act.  It was written as part of
  19.  *  the author's official duties as a United States Government employee and
  20.  *  thus cannot be copyrighted.  This software/database is freely available
  21.  *  to the public for use. The National Library of Medicine and the U.S.
  22.  *  Government have not placed any restriction on its use or reproduction.
  23.  *
  24.  *  Although all reasonable efforts have been taken to ensure the accuracy
  25.  *  and reliability of the software and data, the NLM and the U.S.
  26.  *  Government do not and cannot warrant the performance or results that
  27.  *  may be obtained by using this software or data. The NLM and the U.S.
  28.  *  Government disclaim all warranties, express or implied, including
  29.  *  warranties of performance, merchantability or fitness for any particular
  30.  *  purpose.
  31.  *
  32.  *  Please cite the author in any work or product based on this material.
  33.  *
  34.  * ===========================================================================
  35.  *
  36.  * Authors:  Peter Meric
  37.  *
  38.  * File Description:
  39.  *   CPageHandler - manage pages in a PDF document
  40.  */
  41. #include <corelib/ncbiobj.hpp>
  42. #include <gui/print/print_utils.hpp>
  43. #include "page_buffers.hpp"
  44. #include "panel.hpp"
  45. BEGIN_NCBI_SCOPE
  46. class CPdfObject;
  47. class CPrintOptions;
  48. class CPdfObjectWriter;
  49. class CPdfArray;
  50. class CIdGenerator;
  51. class CPageGrid;
  52. class CPanelGrid;
  53. class CPageHandler
  54. {
  55. private:
  56.     typedef CRef<CPdfObject> TPdfObjectRef;
  57.     typedef CUnit::TPdfUnit TPdfUnit;
  58.     typedef pair<TPdfUnit, TPdfUnit> TSize;
  59.     typedef pair<TPdfUnit, TPdfUnit> TOffset;
  60.     typedef CPrintOptions::TAlignment TAlignment;
  61.     enum Side
  62.     {
  63.         eTop,
  64.         eBottom,
  65.         eLeft,
  66.         eRight
  67.     };
  68. public:
  69.     CPageHandler(const CPageBuffers& buffers,
  70.                  CPdfObjectWriter& obj_writer,
  71.                  CIdGenerator& objid_gen
  72.                 );
  73.     virtual ~CPageHandler();
  74.     TPdfObjectRef GetObject(void) const;
  75.     void SetOptions(const CPrintOptions& options);
  76.     void SetContent(const TPdfObjectRef& content);
  77.     unsigned int WritePages(void);
  78.     void WritePageTree(const CRef<CPdfDictionary>& pagedict);
  79. protected:
  80.     void x_Update(const CRef<CPdfDictionary>& pagedict);
  81.     const TSize x_GetScaledPageSize(void) const;
  82.     void x_UpdatePageTreeRoot(const CRef<CPdfDictionary>& pagedict);
  83.     TPdfObjectRef x_CreateHeaderFooter(void);
  84.     TPdfObjectRef x_CreatePrintersMarks(const CRef<CPanel>& panel);
  85.     TPdfObjectRef x_CreatePageClipObject(void);
  86.     TPdfObjectRef x_CreateContentXForm(void);
  87.     TPdfObjectRef x_CreatePageXForm(const CRef<CPanel>& panel);
  88.     void x_CreatePage(TPdfObjectRef page, CRef<CPdfArray>& contents);
  89.     pair<float, float> x_GetPageScaling(TPdfUnit w,
  90.                                         TPdfUnit h,
  91.                                         bool keepAspect = true
  92.                                        ) const;
  93.     TOffset x_GetPanelOffset(const CRef<CPanel>& panel) const;
  94.     void x_DrawCornerCropMarks(CPdfObject& obj, TPdfUnit margin) const;
  95.     CRef<CPdfArray> x_DrawPanelLink(CPdfObject& obj,
  96.                                     unsigned int panel_num,
  97.                                     TPdfUnit x,
  98.                                     TPdfUnit y, 
  99.                                     enum Side side = eTop
  100.                                    ) const;
  101.     void x_DrawTriangle(CPdfObject& obj,
  102.                         TPdfUnit x,
  103.                         TPdfUnit y,
  104.                         TPdfUnit width,
  105.                         TPdfUnit height
  106.                        ) const;
  107. private:
  108.     CPdfObjectWriter* m_ObjWriter;
  109.     CIdGenerator* m_ObjIdGenerator;
  110.     bool m_Finalized;
  111.     const CPrintOptions* m_Options;
  112.     vector<TPdfObjectRef> m_Pages;
  113.     vector<TPdfObjectRef> m_StdContents;
  114.     TPdfObjectRef m_PageTreeRootObj;
  115.     TPdfObjectRef m_ContentPagesXForm;
  116.     //TPdfObjectRef m_IndexPageXForm;
  117.     TPdfObjectRef m_Clip;
  118.     TPdfObjectRef m_Content;
  119.     const CPageBuffers* m_PageBuffers;
  120.     CRef<CPanelGrid> m_PanelGrid;
  121. };
  122. END_NCBI_SCOPE
  123. #endif // GUI_UTILS__PAGE_HANDLER_HPP
  124. /*
  125.  * ===========================================================================
  126.  * $Log: page_handler.hpp,v $
  127.  * Revision 1000.0  2003/10/31 22:05:36  gouriano
  128.  * PRODUCTION: IMPORTED [ORIGINAL] Dev-tree R1.8
  129.  *
  130.  * Revision 1.8  2003/08/15 17:02:15  meric
  131.  * Updates include paths for print-related files from gui/utils to gui/print
  132.  *
  133.  * Revision 1.7  2003/06/25 18:02:51  meric
  134.  * Source rearrangement: move "private" headers into the src/ tree
  135.  *
  136.  * Revision 1.6  2003/06/24 17:26:38  meric
  137.  * Use CUnit::TPdfUnit
  138.  *
  139.  * Revision 1.5  2003/06/24 15:45:54  meric
  140.  * Added x_GetPageScaling() and x_GetPanelOffset(), from CPrintOptions
  141.  * Added x_GetPanelOffset(), x_DrawPanelLink() and misc functions
  142.  *
  143.  * Revision 1.4  2003/06/18 17:25:27  meric
  144.  * Final phase of print reorg: remove dependence on gui/opengl and OpenGL
  145.  *
  146.  * Revision 1.3  2003/06/16 21:17:28  meric
  147.  * Added multi-page support
  148.  *
  149.  * Revision 1.2  2003/06/16 12:46:21  dicuccio
  150.  * Clean-up after initial commit
  151.  *
  152.  * Revision 1.1  2003/06/13 19:00:30  meric
  153.  * Initial version
  154.  *
  155.  *
  156.  * ===========================================================================
  157.  */