m_item_opt.c revision 262629
1251876Speter/****************************************************************************
2251876Speter * Copyright (c) 1998-2004,2010 Free Software Foundation, Inc.              *
3251876Speter *                                                                          *
4251876Speter * Permission is hereby granted, free of charge, to any person obtaining a  *
5251876Speter * copy of this software and associated documentation files (the            *
6251876Speter * "Software"), to deal in the Software without restriction, including      *
7251876Speter * without limitation the rights to use, copy, modify, merge, publish,      *
8251876Speter * distribute, distribute with modifications, sublicense, and/or sell       *
9251876Speter * copies of the Software, and to permit persons to whom the Software is    *
10251876Speter * furnished to do so, subject to the following conditions:                 *
11251876Speter *                                                                          *
12251876Speter * The above copyright notice and this permission notice shall be included  *
13251876Speter * in all copies or substantial portions of the Software.                   *
14251876Speter *                                                                          *
15251876Speter * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS  *
16251876Speter * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF               *
17251876Speter * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.   *
18251876Speter * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,   *
19251876Speter * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR    *
20251876Speter * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR    *
21251876Speter * THE USE OR OTHER DEALINGS IN THE SOFTWARE.                               *
22251876Speter *                                                                          *
23251876Speter * Except as contained in this notice, the name(s) of the above copyright   *
24251876Speter * holders shall not be used in advertising or otherwise to promote the     *
25251876Speter * sale, use or other dealings in this Software without prior written       *
26251876Speter * authorization.                                                           *
27251876Speter ****************************************************************************/
28251876Speter
29251876Speter/****************************************************************************
30251876Speter *   Author:  Juergen Pfeifer, 1995,1997                                    *
31251876Speter ****************************************************************************/
32251876Speter
33251876Speter/***************************************************************************
34251876Speter* Module m_item_opt                                                        *
35251876Speter* Menus item option routines                                               *
36251876Speter***************************************************************************/
37251876Speter
38251876Speter#include "menu.priv.h"
39251876Speter
40251876SpeterMODULE_ID("$Id: m_item_opt.c,v 1.18 2010/01/23 21:20:10 tom Exp $")
41251876Speter
42251876Speter/*---------------------------------------------------------------------------
43251876Speter|   Facility      :  libnmenu
44251876Speter|   Function      :  int set_item_opts(ITEM *item, Item_Options opts)
45251876Speter|
46251876Speter|   Description   :  Set the options of the item. If there are relevant
47251876Speter|                    changes, the item is connected and the menu is posted,
48251876Speter|                    the menu will be redisplayed.
49251876Speter|
50251876Speter|   Return Values :  E_OK            - success
51251876Speter|                    E_BAD_ARGUMENT  - invalid item options
52251876Speter+--------------------------------------------------------------------------*/
53251876SpeterNCURSES_EXPORT(int)
54251876Speterset_item_opts(ITEM * item, Item_Options opts)
55251876Speter{
56251876Speter  T((T_CALLED("set_menu_opts(%p,%d)"), (void *)item, opts));
57251876Speter
58251876Speter  opts &= ALL_ITEM_OPTS;
59251876Speter
60251876Speter  if (opts & ~ALL_ITEM_OPTS)
61251876Speter    RETURN(E_BAD_ARGUMENT);
62251876Speter
63251876Speter  if (item)
64251876Speter    {
65251876Speter      if (item->opt != opts)
66251876Speter	{
67251876Speter	  MENU *menu = item->imenu;
68251876Speter
69251876Speter	  item->opt = opts;
70251876Speter
71251876Speter	  if ((!(opts & O_SELECTABLE)) && item->value)
72251876Speter	    item->value = FALSE;
73251876Speter
74251876Speter	  if (menu && (menu->status & _POSTED))
75251876Speter	    {
76251876Speter	      Move_And_Post_Item(menu, item);
77251876Speter	      _nc_Show_Menu(menu);
78251876Speter	    }
79251876Speter	}
80251876Speter    }
81251876Speter  else
82251876Speter    _nc_Default_Item.opt = opts;
83251876Speter
84251876Speter  RETURN(E_OK);
85251876Speter}
86251876Speter
87251876Speter/*---------------------------------------------------------------------------
88251876Speter|   Facility      :  libnmenu
89251876Speter|   Function      :  int item_opts_off(ITEM *item, Item_Options opts)
90251876Speter|
91251876Speter|   Description   :  Switch of the options for this item.
92251876Speter|
93251876Speter|   Return Values :  E_OK            - success
94251876Speter|                    E_BAD_ARGUMENT  - invalid options
95251876Speter+--------------------------------------------------------------------------*/
96251876SpeterNCURSES_EXPORT(int)
97251876Speteritem_opts_off(ITEM * item, Item_Options opts)
98251876Speter{
99251876Speter  ITEM *citem = item;		/* use a copy because set_item_opts must detect
100251876Speter
101251876Speter				   NULL item itself to adjust its behavior */
102251876Speter
103251876Speter  T((T_CALLED("item_opts_off(%p,%d)"), (void *)item, opts));
104251876Speter
105251876Speter  if (opts & ~ALL_ITEM_OPTS)
106251876Speter    RETURN(E_BAD_ARGUMENT);
107251876Speter  else
108251876Speter    {
109251876Speter      Normalize_Item(citem);
110251876Speter      opts = citem->opt & ~(opts & ALL_ITEM_OPTS);
111251876Speter      returnCode(set_item_opts(item, opts));
112251876Speter    }
113251876Speter}
114251876Speter
115251876Speter/*---------------------------------------------------------------------------
116251876Speter|   Facility      :  libnmenu
117251876Speter|   Function      :  int item_opts_on(ITEM *item, Item_Options opts)
118251876Speter|
119251876Speter|   Description   :  Switch on the options for this item.
120251876Speter|
121251876Speter|   Return Values :  E_OK            - success
122251876Speter|                    E_BAD_ARGUMENT  - invalid options
123251876Speter+--------------------------------------------------------------------------*/
124251876SpeterNCURSES_EXPORT(int)
125251876Speteritem_opts_on(ITEM * item, Item_Options opts)
126251876Speter{
127251876Speter  ITEM *citem = item;		/* use a copy because set_item_opts must detect
128251876Speter
129251876Speter				   NULL item itself to adjust its behavior */
130251876Speter
131251876Speter  T((T_CALLED("item_opts_on(%p,%d)"), (void *)item, opts));
132251876Speter
133251876Speter  opts &= ALL_ITEM_OPTS;
134251876Speter  if (opts & ~ALL_ITEM_OPTS)
135251876Speter    RETURN(E_BAD_ARGUMENT);
136251876Speter  else
137251876Speter    {
138251876Speter      Normalize_Item(citem);
139251876Speter      opts = citem->opt | opts;
140251876Speter      returnCode(set_item_opts(item, opts));
141251876Speter    }
142251876Speter}
143251876Speter
144251876Speter/*---------------------------------------------------------------------------
145251876Speter|   Facility      :  libnmenu
146251876Speter|   Function      :  Item_Options item_opts(const ITEM *item)
147251876Speter|
148251876Speter|   Description   :  Switch of the options for this item.
149251876Speter|
150251876Speter|   Return Values :  Items options
151251876Speter+--------------------------------------------------------------------------*/
152251876SpeterNCURSES_EXPORT(Item_Options)
153251876Speteritem_opts(const ITEM * item)
154251876Speter{
155251876Speter  T((T_CALLED("item_opts(%p)"), (const void *)item));
156251876Speter  returnItemOpts(ALL_ITEM_OPTS & Normalize_Item(item)->opt);
157251876Speter}
158251876Speter
159251876Speter/* m_item_opt.c ends here */
160251876Speter