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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: pager.hpp,v $
  4.  * PRODUCTION Revision 1000.2  2003/11/18 15:46:40  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [ORIGINAL] Dev-tree R1.14
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. #ifndef HTML___PAGER__HPP
  10. #define HTML___PAGER__HPP
  11. /*  $Id: pager.hpp,v 1000.2 2003/11/18 15:46:40 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.  * Author:  Eugene Vasilchenko, Anton Golikov
  37.  *
  38.  */
  39. /// @file page.hpp 
  40. /// Common pager with 2 views.
  41. #include <corelib/ncbistd.hpp>
  42. #include <html/html.hpp>
  43. /** @addtogroup PagerClass
  44.  *
  45.  * @{
  46.  */
  47. BEGIN_NCBI_SCOPE
  48. class CCgiRequest;
  49. // Make a set of pagination links
  50. class NCBI_XHTML_EXPORT CPager : public CNCBINode
  51. {
  52.     // Parent class
  53.     typedef CHTML_table CParent;
  54. public:
  55.     enum EPagerView {
  56.     eImage,
  57.     eButtons
  58.     };
  59.     CPager(const CCgiRequest& request,
  60.            int                pageBlockSize   = 10,
  61.            int                defaultPageSize = 10,
  62.            EPagerView         view = eImage);
  63.     static bool IsPagerCommand(const CCgiRequest& request);
  64.     int GetItemCount(void) const
  65.     {
  66.         return m_ItemCount;
  67.     }
  68.     bool PageChanged(void) const
  69.     {
  70.         return m_PageChanged;
  71.     }
  72.     void SetItemCount(int count);
  73.     pair<int, int> GetRange(void) const;
  74.     CNCBINode* GetPagerView(const string& imgDir,
  75.                             const int imgX = 0, const int imgY = 0,
  76.                             const string& js_suffix = kEmptyStr) const;
  77.     CNCBINode* GetPageInfo(void) const;
  78.     CNCBINode* GetItemInfo(void) const;
  79.     virtual void CreateSubNodes(void);
  80.     // Retrieve page size and current page
  81.     static int GetPageSize(const CCgiRequest& request, int defaultPageSize = 10);
  82.     // Get page number previously displayed
  83.     static int GetDisplayedPage(const CCgiRequest& request);
  84.     // Get current page number
  85.     int GetDisplayPage(void)
  86.         { return m_DisplayPage; }
  87.     int GetDisplayPage(void) const
  88.         { return m_DisplayPage; }
  89.     // Name of hidden value holding selected page size
  90.     static const string KParam_PageSize;
  91.     // Name of hidden value holding shown page size
  92.     static const string KParam_ShownPageSize;
  93.     // Name of hidden value holding current page number
  94.     static const string KParam_DisplayPage;
  95.     // Name of image button for previous block of pages
  96.     static const string KParam_PreviousPages;
  97.     // Name of image button for next block of pages
  98.     static const string KParam_NextPages;
  99.     // Beginning of names of image buttons for specific page
  100.     static const string KParam_Page;
  101.     // Page number inputed by user in text field (for 2nd view)
  102.     static const string KParam_InputPage;
  103. private:
  104.     // Pager parameters
  105.     int m_PageSize;
  106.     int m_PageBlockSize;
  107.     int m_PageBlockStart;
  108.     // Current output page
  109.     int m_DisplayPage;
  110.     // Total amount of items
  111.     int m_ItemCount;
  112.     // True if some of page buttons was pressed
  113.     bool m_PageChanged;
  114.     // View selector
  115.     EPagerView m_view;
  116.     friend class CPagerView;
  117.     friend class CPagerViewButtons;
  118. };
  119. class NCBI_XHTML_EXPORT CPagerView : public CHTML_table
  120. {
  121. public:
  122.     CPagerView(const CPager& pager, const string& imgDir,
  123.                const int imgX, const int imgY);
  124.     virtual void CreateSubNodes(void);
  125. private:
  126.     // Source of images and it's sizes
  127.     string m_ImagesDir;
  128.     int    m_ImgSizeX;
  129.     int    m_ImgSizeY;
  130.     const CPager& m_Pager;
  131.     void AddInactiveImageString(CNCBINode* node, int number,
  132.                      const string& imageStart, const string& imageEnd);
  133.     void AddImageString(CNCBINode* node, int number,
  134.                      const string& imageStart, const string& imageEnd);
  135. };
  136. // Second view for CPager with buttons:
  137. // Previous (link) Current (input) Page (button) Next (link)
  138. class NCBI_XHTML_EXPORT CPagerViewButtons : public CHTML_table
  139. {
  140. public:
  141.     CPagerViewButtons(const CPager& pager, const string& js_suffix);
  142.     virtual void CreateSubNodes(void);
  143. private:
  144.     const CPager& m_Pager;
  145.     string        m_jssuffix;
  146. };
  147. END_NCBI_SCOPE
  148. /* @} */
  149. /*
  150.  * ===========================================================================
  151.  * $Log: pager.hpp,v $
  152.  * Revision 1000.2  2003/11/18 15:46:40  gouriano
  153.  * PRODUCTION: UPGRADED [ORIGINAL] Dev-tree R1.14
  154.  *
  155.  * Revision 1.14  2003/11/05 18:41:06  dicuccio
  156.  * Added export specifiers
  157.  *
  158.  * Revision 1.13  2003/11/03 17:02:53  ivanov
  159.  * Some formal code rearrangement. Move log to end.
  160.  *
  161.  * ===========================================================================
  162.  */
  163. #endif  /* HTML___PAGER__HPP */