⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cursesm.h

📁 ncurses 库 可能有用酒用 没用就算了 我觉得还可以用
💻 H
📖 第 1 页 / 共 2 页
字号:
// * This makes emacs happy -*-Mode: C++;-*-/**************************************************************************** * Copyright (c) 1998-2003,2005 Free Software Foundation, Inc.              * *                                                                          * * Permission is hereby granted, free of charge, to any person obtaining a  * * copy of this software and associated documentation files (the            * * "Software"), to deal in the Software without restriction, including      * * without limitation the rights to use, copy, modify, merge, publish,      * * distribute, distribute with modifications, sublicense, and/or sell       * * copies of the Software, and to permit persons to whom the Software is    * * furnished to do so, subject to the following conditions:                 * *                                                                          * * The above copyright notice and this permission notice shall be included  * * in all copies or substantial portions of the Software.                   * *                                                                          * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS  * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF               * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.   * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,   * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR    * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR    * * THE USE OR OTHER DEALINGS IN THE SOFTWARE.                               * *                                                                          * * Except as contained in this notice, the name(s) of the above copyright   * * holders shall not be used in advertising or otherwise to promote the     * * sale, use or other dealings in this Software without prior written       * * authorization.                                                           * ****************************************************************************//**************************************************************************** *   Author: Juergen Pfeifer, 1997                                          * ****************************************************************************/// $Id: cursesm.h,v 1.25 2005/08/13 18:10:36 tom Exp $#ifndef NCURSES_CURSESM_H_incl#define NCURSES_CURSESM_H_incl 1#include <cursesp.h>extern "C" {#  include <menu.h>}//// -------------------------------------------------------------------------// This wraps the ITEM type of <menu.h>// -------------------------------------------------------------------------//class NCURSES_IMPEXP NCursesMenuItem{  friend class NCursesMenu;protected:  ITEM *item;  inline void OnError (int err) const THROWS(NCursesMenuException) {    if (err != E_OK)      THROW(new NCursesMenuException (err));  }public:  NCursesMenuItem (const char* p_name     = NULL,		   const char* p_descript = NULL)    : item(0)  {    item = p_name ? ::new_item (p_name, p_descript) : STATIC_CAST(ITEM*)(0);    if (p_name && !item)      OnError (E_SYSTEM_ERROR);  }  // Create an item. If you pass both parameters as NULL, a delimiting  // item is constructed which can be used to terminate a list of  // NCursesMenu objects.  NCursesMenuItem& operator=(const NCursesMenuItem& rhs)  {    if (this != &rhs) {      *this = rhs;    }    return *this;  }  NCursesMenuItem(const NCursesMenuItem& rhs)    : item(0)  {  }  virtual ~NCursesMenuItem ();  // Release the items memory  inline const char* name () const {    return ::item_name (item);  }  // Name of the item  inline const char* description () const {    return ::item_description (item);  }  // Description of the item  inline int (index) (void) const {    return ::item_index (item);  }  // Index of the item in an item array (or -1)  inline void options_on (Item_Options opts) {    OnError (::item_opts_on (item, opts));  }  // Switch on the items options  inline void options_off (Item_Options opts) {    OnError (::item_opts_off (item, opts));  }  // Switch off the item's option  inline Item_Options options () const {    return ::item_opts (item);  }  // Retrieve the items options  inline void set_options (Item_Options opts) {    OnError (::set_item_opts (item, opts));  }  // Set the items options  inline void set_value (bool f) {    OnError (::set_item_value (item,f));  }  // Set/Reset the items selection state  inline bool value () const {    return ::item_value (item);  }  // Retrieve the items selection state  inline bool visible () const {    return ::item_visible (item);  }  // Retrieve visibility of the item  virtual bool action();  // Perform an action associated with this item; you may use this in an  // user supplied driver for a menu; you may derive from this class and  // overload action() to supply items with different actions.  // If an action returns true, the menu will be exited. The default action  // is to do nothing.};// Prototype for an items callback function.typedef bool ITEMCALLBACK(NCursesMenuItem&);// If you don't like to create a child class for individual items to// overload action(), you may use this class and provide a callback// function pointer for items.class NCURSES_IMPEXP NCursesMenuCallbackItem : public NCursesMenuItem{private:  ITEMCALLBACK* p_fct;public:  NCursesMenuCallbackItem(ITEMCALLBACK* fct       = NULL,			  const char* p_name      = NULL,			  const char* p_descript  = NULL )    : NCursesMenuItem (p_name, p_descript),      p_fct (fct) {  }  NCursesMenuCallbackItem& operator=(const NCursesMenuCallbackItem& rhs)  {    if (this != &rhs) {      *this = rhs;    }    return *this;  }  NCursesMenuCallbackItem(const NCursesMenuCallbackItem& rhs)    : NCursesMenuItem(rhs),      p_fct(0)  {  }  virtual ~NCursesMenuCallbackItem();  bool action();};  // This are the built-in hook functions in this C++ binding. In C++ we use  // virtual member functions (see below On_..._Init and On_..._Termination)  // to provide this functionality in an object oriented manner.extern "C" {  void _nc_xx_mnu_init(MENU *);  void _nc_xx_mnu_term(MENU *);  void _nc_xx_itm_init(MENU *);  void _nc_xx_itm_term(MENU *);}//// -------------------------------------------------------------------------// This wraps the MENU type of <menu.h>// -------------------------------------------------------------------------//class NCURSES_IMPEXP NCursesMenu : public NCursesPanel{protected:  MENU *menu;private:  NCursesWindow* sub;   // the subwindow object  bool b_sub_owner;     // is this our own subwindow?  bool b_framed;        // has the menu a border?  bool b_autoDelete;    // Delete items when deleting menu?  NCursesMenuItem** my_items; // The array of items for this menu  // This structure is used for the menu's user data field to link the  // MENU* to the C++ object and to provide extra space for a user pointer.  typedef struct {    void*              m_user;      // the pointer for the user's data    const NCursesMenu* m_back;      // backward pointer to C++ object    const MENU*        m_owner;  } UserHook;  // Get the backward pointer to the C++ object from a MENU  static inline NCursesMenu* getHook(const MENU *m) {    UserHook* hook = STATIC_CAST(UserHook*)(::menu_userptr(m));    assert(hook != 0 && hook->m_owner==m);    return const_cast<NCursesMenu*>(hook->m_back);  }  friend void _nc_xx_mnu_init(MENU *);  friend void _nc_xx_mnu_term(MENU *);  friend void _nc_xx_itm_init(MENU *);  friend void _nc_xx_itm_term(MENU *);  // Calculate ITEM* array for the menu  ITEM** mapItems(NCursesMenuItem* nitems[]);protected:  // internal routines  inline void set_user(void *user) {    UserHook* uptr = STATIC_CAST(UserHook*)(::menu_userptr (menu));    assert (uptr != 0 && uptr->m_back==this && uptr->m_owner==menu);    uptr->m_user = user;  }  inline void *get_user() {    UserHook* uptr = STATIC_CAST(UserHook*)(::menu_userptr (menu));    assert (uptr != 0 && uptr->m_back==this && uptr->m_owner==menu);    return uptr->m_user;  }  void InitMenu (NCursesMenuItem* menu[],		 bool with_frame,		 bool autoDeleteItems);  inline void OnError (int err) const THROWS(NCursesMenuException) {    if (err != E_OK)      THROW(new NCursesMenuException (this, err));  }  // this wraps the menu_driver call.  virtual int driver (int c) ;  // 'Internal' constructor to create a menu without association to  // an array of items.  NCursesMenu( int  nlines,	       int  ncols,	       int  begin_y = 0,	       int  begin_x = 0)    : NCursesPanel(nlines,ncols,begin_y,begin_x),      menu (STATIC_CAST(MENU*)(0)),      sub(0),      b_sub_owner(0),      b_framed(0),      b_autoDelete(0),      my_items(0)  {  }public:  // Make a full window size menu  NCursesMenu (NCursesMenuItem* Items[],	       bool with_frame=FALSE,        // Reserve space for a frame?	       bool autoDelete_Items=FALSE)  // Autocleanup of Items?    : NCursesPanel(),      menu(0),      sub(0),      b_sub_owner(0),      b_framed(0),      b_autoDelete(0),      my_items(0)  {      InitMenu(Items, with_frame, autoDelete_Items);  }  // Make a menu with a window of this size.  NCursesMenu (NCursesMenuItem* Items[],	       int  nlines,	       int  ncols,	       int  begin_y = 0,	       int  begin_x = 0,	       bool with_frame=FALSE,        // Reserve space for a frame?	       bool autoDelete_Items=FALSE)  // Autocleanup of Items?    : NCursesPanel(nlines, ncols, begin_y, begin_x),      menu(0),      sub(0),      b_sub_owner(0),      b_framed(0),      b_autoDelete(0),      my_items(0)  {      InitMenu(Items, with_frame, autoDelete_Items);  }  NCursesMenu& operator=(const NCursesMenu& rhs)  {    if (this != &rhs) {      *this = rhs;      NCursesPanel::operator=(rhs);    }    return *this;  }  NCursesMenu(const NCursesMenu& rhs)    : NCursesPanel(rhs),      menu(rhs.menu),      sub(rhs.sub),      b_sub_owner(rhs.b_sub_owner),      b_framed(rhs.b_framed),      b_autoDelete(rhs.b_autoDelete),      my_items(rhs.my_items)  {  }  virtual ~NCursesMenu ();  // Retrieve the menus subwindow  inline NCursesWindow& subWindow() const {

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -