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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: field_assoc.hpp,v $
  4.  * PRODUCTION Revision 1000.1  2004/06/01 19:47:45  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.9
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. #ifndef GUI_CORE_VIEW_TEXT___FIELD_ASSOC__HPP
  10. #define GUI_CORE_VIEW_TEXT___FIELD_ASSOC__HPP
  11. /*
  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:  Lou Friedman
  37.  *
  38.  * File Description:
  39.  *    Header file for classes that manitains the drop down menu choices and 
  40.  *      values used by the table entry form class CEntryFormTable.
  41.  */
  42. #include <corelib/ncbistd.hpp>
  43. #include <gui/gui.hpp>
  44. #include <FL/Fl_Menu_.H>
  45. #include <FL/Fl_Menu_Item.H>
  46. #include <vector>
  47. BEGIN_NCBI_SCOPE
  48. //class CObjectEntryFormView;
  49. // struct SMenuEntryInfo holds information about a single menu entry, and is
  50. // designed for specific cases of static or automatic initialization
  51. struct NCBI_GUIDIALOGS_EXPORT SMenuEntryInfo
  52. {
  53.     const char* m_Label;
  54.     int m_Value;
  55.     Fl_Callback* m_Cb;
  56.     void * m_UserData;
  57. };
  58. //
  59. // class CEntryFormMenu manages a drop-down list in entry forms
  60. //
  61. class NCBI_GUIDIALOGS_EXPORT CEntryFormMenu
  62. {
  63. public:
  64.     CEntryFormMenu();
  65.     CEntryFormMenu(SMenuEntryInfo* info);
  66.     // add an item to the menu
  67.     void AddItem(const string& label, int value,
  68.                  Fl_Callback* cb = NULL, void* user_data = NULL);
  69.     // access our menu items.  This may trigger creation of a menu item array.
  70.     const Fl_Menu_Item* GetMenuItems(void) const;
  71.     // find an entry whose value corresponds to a known value
  72.     int FindEntry(int value) const;
  73. private:
  74.     // we hold an AutoPtr<> for (optional) internal memory management
  75.     mutable AutoPtr<Fl_Menu_Item, ArrayDeleter<Fl_Menu_Item> > m_MenuItems;
  76.     // flag: is our internal data 'stale'?
  77.     mutable bool m_DataChanged;
  78.     // internal class to manage data present in a dynamic menu
  79.     // This class has the responsibility of holding on to things such as
  80.     // strings for labels, because FLTK doesn't copy these internally :(.
  81.     class CMenuData
  82.     {
  83.     public:
  84.         CMenuData()
  85.             : m_Value(0),
  86.               m_Cb(NULL),
  87.               m_UserData(NULL) {}
  88.         string m_Label;
  89.         int m_Value;
  90.         Fl_Callback* m_Cb;
  91.         void* m_UserData;
  92.     };
  93.     list<CMenuData> m_MenuData;
  94.     // copying prohibited
  95.     CEntryFormMenu(const CEntryFormMenu&);
  96.     CEntryFormMenu& operator= (const CEntryFormMenu&);
  97. };
  98. END_NCBI_SCOPE
  99. #endif