/usr/include
NameSizeModeActions
arpa/-0755rm
asm/-0755rm
asm-generic/-0755rm
bind9/-0755rm
bits/-0755rm
blkid/-0755rm
brotli/-0755rm
c++/-0755rm
drm/-0755rm
e2p/-0755rm
et/-0755rm
event2/-0755rm
ext2fs/-0755rm
finclude/-0755rm
fontconfig/-0755rm
freetype2/-0755rm
fstrm/-0755rm
fwctl/-0755rm
gdbm/-0755rm
gio-unix-2.0/-0755rm
GL/-0755rm
glib-2.0/-0755rm
gnu/-0755rm
google/-0755rm
graphite2/-0755rm
gssapi/-0755rm
gssrpc/-0755rm
harfbuzz/-0755rm
json-c/-0755rm
kadm5/-0755rm
krb5/-0755rm
libexslt/-0755rm
libltdl/-0755rm
libmount/-0755rm
libpng16/-0755rm
libxml2/-0755rm
libxslt/-0755rm
linux/-0755rm
lzma/-0755rm
misc/-0755rm
mtd/-0755rm
mysql/-0755rm
ncurses/-0755rm
ncursesw/-0755rm
net/-0755rm
netash/-0755rm
netatalk/-0755rm
netax25/-0755rm
neteconet/-0755rm
netinet/-0755rm
netipx/-0755rm
netiucv/-0755rm
netpacket/-0755rm
netrom/-0755rm
netrose/-0755rm
nfs/-0755rm
openssl/-0755rm
pcp/-0755rm
protobuf-c/-0755rm
protocols/-0755rm
python3.9/-0755rm
rdma/-0755rm
rpc/-0755rm
scsi/-0755rm
security/-0755rm
selinux/-0755rm
sepol/-0755rm
sound/-0755rm
sys/-0755rm
sysprof-4/-0755rm
unicode/-0755rm
video/-0755rm
webp/-0755rm
X11/-0755rm
xcb/-0755rm
xen/-0755rm
a.out.h43510644editdlrm
aio.h77380644editdlrm
aliases.h20280644editdlrm
alloca.h12030644editdlrm
ar.h17310644editdlrm
argp.h255480644editdlrm
argz.h60510644editdlrm
assert.h45620644editdlrm
autosprintf.h24210644editdlrm
byteswap.h14490644editdlrm
bzlib.h62400644editdlrm
complex.h81400644editdlrm
com_err.h21180644editdlrm
cpio.h22680644editdlrm
cpuidle.h9310644editdlrm
crypt.h111600644editdlrm
ctype.h109690644editdlrm
curses.h991470644editdlrm
cursesapp.h72300644editdlrm
cursesf.h280290644editdlrm
cursesm.h199080644editdlrm
cursesp.h87510644editdlrm
cursesw.h503060644editdlrm
cursslk.h73210644editdlrm
dbm.h14030644editdlrm
dirent.h126170644editdlrm
dlfcn.h88020644editdlrm
elf.h1825420644editdlrm
endian.h22990644editdlrm
entities.h49300644editdlrm
envz.h28670644editdlrm
err.h23410644editdlrm
errno.h16790644editdlrm
error.h24160644editdlrm
eti.h29690644editdlrm
etip.h98360644editdlrm
evdns.h20190644editdlrm
event.h27440644editdlrm
evhttp.h20350644editdlrm
evrpc.h20150644editdlrm
evutil.h17820644editdlrm
execinfo.h15230644editdlrm
expat.h442730644editdlrm
expat_config.h39100644editdlrm
expat_external.h60290644editdlrm
fcntl.h114420644editdlrm
features-time64.h14040644editdlrm
features.h181160644editdlrm
fenv.h57880644editdlrm
ffi-x86_64.h142090644editdlrm
ffi.h5560644editdlrm
ffitarget-x86_64.h47410644editdlrm
ffitarget.h6160644editdlrm
FlexLexer.h68930644editdlrm
fmtmsg.h32400644editdlrm
fnmatch.h22960644editdlrm
form.h189000644editdlrm
fpu_control.h35840644editdlrm
fstab.h31110644editdlrm
fstrm.h130170644editdlrm
fts.h95790644editdlrm
ftw.h63430644editdlrm
gconv.h42110644editdlrm
gd.h596430644editdlrm
gdbm.h121810644editdlrm
gdcache.h29940644editdlrm
gdfontg.h5530644editdlrm
gdfontl.h5510644editdlrm
gdfontmb.h5190644editdlrm
gdfonts.h5150644editdlrm
gdfontt.h5460644editdlrm
gdfx.h4960644editdlrm
gdpp.h519470644editdlrm
gd_color_map.h4780644editdlrm
gd_errors.h15030644editdlrm
gd_io.h30020644editdlrm
getopt.h14690644editdlrm
gettext-po.h155480644editdlrm
glob.h72990644editdlrm
gnu-versions.h23430644editdlrm
gnumake.h29120644editdlrm
gpg-error.h736510644editdlrm
gpgrt.h736510644editdlrm
grp.h66870644editdlrm
gshadow.h45290644editdlrm
gssapi.h1810644editdlrm
iconv.h18580644editdlrm
idn-free.h26180644editdlrm
idn-int.h200644editdlrm
idna.h39810644editdlrm
ieee754.h49160644editdlrm
ifaddrs.h28410644editdlrm
inttypes.h83370644editdlrm
jconfig-64.h20290644editdlrm
jconfig.h2460644editdlrm
jerror.h157150644editdlrm
jmorecfg.h143170644editdlrm
jpegint.h156190644editdlrm
jpeglib.h502810644editdlrm
kdb.h643330644editdlrm
keyutils.h117960644editdlrm
krad.h89330644editdlrm
krb5.h4020644editdlrm
langinfo.h178490644editdlrm
lastlog.h1260644editdlrm
libaio.h89650644editdlrm
libgen.h13860644editdlrm
libintl.h45800644editdlrm
limits.h57060644editdlrm
link.h78010644editdlrm
lmdb.h740140644editdlrm
locale.h76750644editdlrm
ltdl.h57090644editdlrm
lzma.h98660644editdlrm
malloc.h59120644editdlrm
math.h487730644editdlrm
maxminddb.h85430644editdlrm
maxminddb_config-64.h5040644editdlrm
maxminddb_config.h1780644editdlrm
mcheck.h24350644editdlrm
memory.h9560644editdlrm
menu.h118750644editdlrm
mntent.h33590644editdlrm
monetary.h19660644editdlrm
mqueue.h46030644editdlrm
ncurses.h991470644editdlrm
ncurses_dll.h40430644editdlrm
nc_tparm.h47770644editdlrm
ndbm.h24430644editdlrm
netdb.h284610644editdlrm
nl_types.h17530644editdlrm
nss.h144080644editdlrm
obstack.h213070644editdlrm
panel.h45120644editdlrm
paths.h29770644editdlrm
pcre.h317180644editdlrm
pcre2.h472570644editdlrm
pcre2posix.h66770644editdlrm
pcrecpp.h265290644editdlrm
pcrecpparg.h67830644editdlrm
pcreposix.h58810644editdlrm
pcre_scanner.h66000644editdlrm
pcre_stringpiece.h63120644editdlrm
png.h1428600644editdlrm
pngconf.h228460644editdlrm
pnglibconf.h76050644editdlrm
poll.h220644editdlrm
powercap.h16600644editdlrm
pr29.h22420644editdlrm
printf.h68750644editdlrm
proc_service.h34770644editdlrm
profile.h121540644editdlrm
pthread.h485240644editdlrm
pty.h15700644editdlrm
punycode.h95230644editdlrm
pwd.h63170644editdlrm
regex.h259040644editdlrm
regexp.h14480644editdlrm
resolv.h123870644editdlrm
re_comp.h9630644editdlrm
sched.h50380644editdlrm
search.h54500644editdlrm
semaphore.h34640644editdlrm
setjmp.h31900644editdlrm
sgtty.h13440644editdlrm
shadow.h54720644editdlrm
signal.h130400644editdlrm
spawn.h82970644editdlrm
stab.h2640644editdlrm
stdc-predef.h22900644editdlrm
stdint.h84740644editdlrm
stdio.h314110644editdlrm
stdio_ext.h28000644editdlrm
stdlib.h363160644editdlrm
string.h194590644editdlrm
stringprep.h97580644editdlrm
strings.h47530644editdlrm
syscall.h250644editdlrm
sysexits.h52320644editdlrm
syslog.h240644editdlrm
tar.h37860644editdlrm
term.h419340644editdlrm
termcap.h34740644editdlrm
termio.h2140644editdlrm
termios.h35990644editdlrm
term_entry.h91100644editdlrm
tgmath.h401800644editdlrm
threads.h76860644editdlrm
thread_db.h160240644editdlrm
tic.h148300644editdlrm
tiff.h474440644editdlrm
tiffconf-64.h32660644editdlrm
tiffconf.h2500644editdlrm
tiffio.h247070644editdlrm
tiffio.hxx16580644editdlrm
tiffvers.h4100644editdlrm
time.h148480644editdlrm
tld.h49630644editdlrm
ttyent.h24940644editdlrm
uchar.h20020644editdlrm
ucontext.h20370644editdlrm
ulimit.h15840644editdlrm
unctrl.h31770644editdlrm
unistd.h444890644editdlrm
utime.h19050644editdlrm
utmp.h32230644editdlrm
utmpx.h41000644editdlrm
values.h19560644editdlrm
verto-module.h66400644editdlrm
verto.h194370644editdlrm
wait.h220644editdlrm
wchar.h321420644editdlrm
wctype.h55490644editdlrm
wordexp.h25020644editdlrm
zconf.h162620644editdlrm
zlib.h962610644editdlrm
Edit: /usr/include/cursesm.h (19908B)
// * This makes emacs happy -*-Mode: C++;-*- /**************************************************************************** * Copyright 2019,2020 Thomas E. Dickey * * Copyright 1998-2012,2014 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.34 2020/05/24 01:40:20 anonymous.maarten Exp $ #ifndef NCURSES_CURSESM_H_incl #define NCURSES_CURSESM_H_incl 1 #include extern "C" { # include } // // ------------------------------------------------------------------------- // This wraps the ITEM type of // ------------------------------------------------------------------------- // class NCURSES_CXX_IMPEXP NCursesMenuItem { friend class NCursesMenu; protected: ITEM *item; inline void OnError (int err) const THROW2(NCursesException const, 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) { (void) rhs; } virtual ~NCursesMenuItem () THROWS(NCursesException); // 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_CXX_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() THROWS(NCursesException); 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 // ------------------------------------------------------------------------- // class NCURSES_CXX_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(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 THROW2(NCursesException const, 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 () THROWS(NCursesException); // Retrieve the menus subwindow inline NCursesWindow& subWindow() const { assert(sub!=NULL); return *sub; } // Set the menus subwindow void setSubWindow(NCursesWindow& sub); // Set these items for the menu inline void setItems(NCursesMenuItem* Items[]) { OnError(::set_menu_items(menu,mapItems(Items))); } // Remove the menu from the screen inline void unpost (void) { OnError (::unpost_menu (menu)); } // Post the menu to the screen if flag is true, unpost it otherwise inline void post(bool flag = TRUE) { flag ? OnError (::post_menu(menu)) : OnError (::unpost_menu (menu)); } // Get the number of rows and columns for this menu inline void scale (int& mrows, int& mcols) const { OnError (::scale_menu (menu, &mrows, &mcols)); } // Set the format of this menu inline void set_format(int mrows, int mcols) { OnError (::set_menu_format(menu, mrows, mcols)); } // Get the format of this menu inline void menu_format(int& rows,int& ncols) { ::menu_format(menu,&rows,&ncols); } // Items of the menu inline NCursesMenuItem* items() const { return *my_items; } // Get the number of items in this menu inline int count() const { return ::item_count(menu); } // Get the current item (i.e. the one the cursor is located) inline NCursesMenuItem* current_item() const { return my_items[::item_index(::current_item(menu))]; } // Get the marker string inline const char* mark() const { return ::menu_mark(menu); } // Set the marker string inline void set_mark(const char *marker) { OnError (::set_menu_mark (menu, marker)); } // Get the name of the request code c inline static const char* request_name(int c) { return ::menu_request_name(c); } // Get the current pattern inline char* pattern() const { return ::menu_pattern(menu); } // true if there is a pattern match, false otherwise. bool set_pattern (const char *pat); // set the default attributes for the menu // i.e. set fore, back and grey attribute virtual void setDefaultAttributes(); // Get the menus background attributes inline chtype back() const { return ::menu_back(menu); } // Get the menus foreground attributes inline chtype fore() const { return ::menu_fore(menu); } // Get the menus grey attributes (used for unselectable items) inline chtype grey() const { return ::menu_grey(menu); } // Set the menus background attributes inline chtype set_background(chtype a) { return ::set_menu_back(menu,a); } // Set the menus foreground attributes inline chtype set_foreground(chtype a) { return ::set_menu_fore(menu,a); } // Set the menus grey attributes (used for unselectable items) inline chtype set_grey(chtype a) { return ::set_menu_grey(menu,a); } inline void options_on (Menu_Options opts) { OnError (::menu_opts_on (menu,opts)); } inline void options_off(Menu_Options opts) { OnError (::menu_opts_off(menu,opts)); } inline Menu_Options options() const { return ::menu_opts(menu); } inline void set_options (Menu_Options opts) { OnError (::set_menu_opts (menu,opts)); } inline int pad() const { return ::menu_pad(menu); } inline void set_pad (int padch) { OnError (::set_menu_pad (menu, padch)); } // Position the cursor to the current item inline void position_cursor () const { OnError (::pos_menu_cursor (menu)); } // Set the current item inline void set_current(NCursesMenuItem& I) { OnError (::set_current_item(menu, I.item)); } // Get the current top row of the menu inline int top_row (void) const { return ::top_row (menu); } // Set the current top row of the menu inline void set_top_row (int row) { OnError (::set_top_row (menu, row)); } // spacing control // Set the spacing for the menu inline void setSpacing(int spc_description, int spc_rows, int spc_columns) { OnError(::set_menu_spacing(menu, spc_description, spc_rows, spc_columns)); } // Get the spacing info for the menu inline void Spacing(int& spc_description, int& spc_rows, int& spc_columns) const { OnError(::menu_spacing(menu, &spc_description, &spc_rows, &spc_columns)); } // Decorations inline void frame(const char *title=NULL, const char* btitle=NULL) { if (b_framed) NCursesPanel::frame(title,btitle); else OnError(E_SYSTEM_ERROR); } inline void boldframe(const char *title=NULL, const char* btitle=NULL) { if (b_framed) NCursesPanel::boldframe(title,btitle); else OnError(E_SYSTEM_ERROR); } inline void label(const char *topLabel, const char *bottomLabel) { if (b_framed) NCursesPanel::label(topLabel,bottomLabel); else OnError(E_SYSTEM_ERROR); } // ----- // Hooks // ----- // Called after the menu gets repositioned in its window. // This is especially true if the menu is posted. virtual void On_Menu_Init(); // Called before the menu gets repositioned in its window. // This is especially true if the menu is unposted. virtual void On_Menu_Termination(); // Called after the item became the current item virtual void On_Item_Init(NCursesMenuItem& item); // Called before this item is left as current item. virtual void On_Item_Termination(NCursesMenuItem& item); // Provide a default key virtualization. Translate the keyboard // code c into a menu request code. // The default implementation provides a hopefully straightforward // mapping for the most common keystrokes and menu requests. virtual int virtualize(int c); // Operators inline NCursesMenuItem* operator[](int i) const { if ( (i < 0) || (i >= ::item_count (menu)) ) OnError (E_BAD_ARGUMENT); return (my_items[i]); } // Perform the menu's operation // Return the item where you left the selection mark for a single // selection menu, or NULL for a multivalued menu. virtual NCursesMenuItem* operator()(void); // -------------------- // Exception handlers // Called by operator() // -------------------- // Called if the request is denied virtual void On_Request_Denied(int c) const; // Called if the item is not selectable virtual void On_Not_Selectable(int c) const; // Called if pattern doesn't match virtual void On_No_Match(int c) const; // Called if the command is unknown virtual void On_Unknown_Command(int c) const; }; // // ------------------------------------------------------------------------- // This is the typical C++ typesafe way to allow to attach // user data to an item of a menu. Its assumed that the user // data belongs to some class T. Use T as template argument // to create a UserItem. // ------------------------------------------------------------------------- // template class NCURSES_CXX_IMPEXP NCursesUserItem : public NCursesMenuItem { public: NCursesUserItem (const char* p_name, const char* p_descript = NULL, const T* p_UserData = STATIC_CAST(T*)(0)) : NCursesMenuItem (p_name, p_descript) { if (item) OnError (::set_item_userptr (item, const_cast(reinterpret_cast(p_UserData)))); } virtual ~NCursesUserItem() THROWS(NCursesException) {} inline const T* UserData (void) const { return reinterpret_cast(::item_userptr (item)); }; inline virtual void setUserData(const T* p_UserData) { if (item) OnError (::set_item_userptr (item, const_cast(reinterpret_cast(p_UserData)))); } }; // // ------------------------------------------------------------------------- // The same mechanism is used to attach user data to a menu // ------------------------------------------------------------------------- // template class NCURSES_CXX_IMPEXP NCursesUserMenu : public NCursesMenu { protected: NCursesUserMenu( int nlines, int ncols, int begin_y = 0, int begin_x = 0, const T* p_UserData = STATIC_CAST(T*)(0)) : NCursesMenu(nlines,ncols,begin_y,begin_x) { if (menu) set_user (const_cast(reinterpret_cast(p_UserData))); } public: NCursesUserMenu (NCursesMenuItem* Items[], const T* p_UserData = STATIC_CAST(T*)(0), bool with_frame=FALSE, bool autoDelete_Items=FALSE) : NCursesMenu (Items, with_frame, autoDelete_Items) { if (menu) set_user (const_cast(reinterpret_cast(p_UserData))); }; NCursesUserMenu (NCursesMenuItem* Items[], int nlines, int ncols, int begin_y = 0, int begin_x = 0, const T* p_UserData = STATIC_CAST(T*)(0), bool with_frame=FALSE) : NCursesMenu (Items, nlines, ncols, begin_y, begin_x, with_frame) { if (menu) set_user (const_cast(reinterpret_cast(p_UserData))); }; virtual ~NCursesUserMenu() THROWS(NCursesException) { }; inline T* UserData (void) { return reinterpret_cast(get_user ()); }; inline virtual void setUserData (const T* p_UserData) { if (menu) set_user (const_cast(reinterpret_cast(p_UserData))); } }; #endif /* NCURSES_CURSESM_H_incl */