150276Speter/****************************************************************************
2262629Sdelphij * Copyright (c) 1998-2004,2010 Free Software Foundation, Inc.              *
350276Speter *                                                                          *
450276Speter * Permission is hereby granted, free of charge, to any person obtaining a  *
550276Speter * copy of this software and associated documentation files (the            *
650276Speter * "Software"), to deal in the Software without restriction, including      *
750276Speter * without limitation the rights to use, copy, modify, merge, publish,      *
850276Speter * distribute, distribute with modifications, sublicense, and/or sell       *
950276Speter * copies of the Software, and to permit persons to whom the Software is    *
1050276Speter * furnished to do so, subject to the following conditions:                 *
1150276Speter *                                                                          *
1250276Speter * The above copyright notice and this permission notice shall be included  *
1350276Speter * in all copies or substantial portions of the Software.                   *
1450276Speter *                                                                          *
1550276Speter * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS  *
1650276Speter * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF               *
1750276Speter * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.   *
1850276Speter * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,   *
1950276Speter * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR    *
2050276Speter * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR    *
2150276Speter * THE USE OR OTHER DEALINGS IN THE SOFTWARE.                               *
2250276Speter *                                                                          *
2350276Speter * Except as contained in this notice, the name(s) of the above copyright   *
2450276Speter * holders shall not be used in advertising or otherwise to promote the     *
2550276Speter * sale, use or other dealings in this Software without prior written       *
2650276Speter * authorization.                                                           *
2750276Speter ****************************************************************************/
2850276Speter
2950276Speter/****************************************************************************
30166124Srafan *   Author:  Juergen Pfeifer, 1995,1997                                    *
3150276Speter ****************************************************************************/
3250276Speter
3350276Speter/***************************************************************************
3450276Speter* Module m_item_opt                                                        *
3550276Speter* Menus item option routines                                               *
3650276Speter***************************************************************************/
3750276Speter
3850276Speter#include "menu.priv.h"
3950276Speter
40262629SdelphijMODULE_ID("$Id: m_item_opt.c,v 1.18 2010/01/23 21:20:10 tom Exp $")
4150276Speter
4250276Speter/*---------------------------------------------------------------------------
4350276Speter|   Facility      :  libnmenu
4450276Speter|   Function      :  int set_item_opts(ITEM *item, Item_Options opts)
4550276Speter|
4650276Speter|   Description   :  Set the options of the item. If there are relevant
4750276Speter|                    changes, the item is connected and the menu is posted,
4850276Speter|                    the menu will be redisplayed.
4950276Speter|
5050276Speter|   Return Values :  E_OK            - success
5150276Speter|                    E_BAD_ARGUMENT  - invalid item options
5250276Speter+--------------------------------------------------------------------------*/
5376726SpeterNCURSES_EXPORT(int)
54166124Srafanset_item_opts(ITEM * item, Item_Options opts)
55166124Srafan{
56262629Sdelphij  T((T_CALLED("set_menu_opts(%p,%d)"), (void *)item, opts));
57166124Srafan
5850276Speter  opts &= ALL_ITEM_OPTS;
5950276Speter
6050276Speter  if (opts & ~ALL_ITEM_OPTS)
6150276Speter    RETURN(E_BAD_ARGUMENT);
62166124Srafan
6350276Speter  if (item)
6450276Speter    {
6550276Speter      if (item->opt != opts)
66166124Srafan	{
6750276Speter	  MENU *menu = item->imenu;
68166124Srafan
6950276Speter	  item->opt = opts;
70166124Srafan
7150276Speter	  if ((!(opts & O_SELECTABLE)) && item->value)
7250276Speter	    item->value = FALSE;
73166124Srafan
7450276Speter	  if (menu && (menu->status & _POSTED))
7550276Speter	    {
76166124Srafan	      Move_And_Post_Item(menu, item);
7750276Speter	      _nc_Show_Menu(menu);
7850276Speter	    }
7950276Speter	}
8050276Speter    }
8150276Speter  else
8250276Speter    _nc_Default_Item.opt = opts;
83166124Srafan
8450276Speter  RETURN(E_OK);
8550276Speter}
8650276Speter
8750276Speter/*---------------------------------------------------------------------------
8850276Speter|   Facility      :  libnmenu
8950276Speter|   Function      :  int item_opts_off(ITEM *item, Item_Options opts)
9050276Speter|
9150276Speter|   Description   :  Switch of the options for this item.
9250276Speter|
9350276Speter|   Return Values :  E_OK            - success
9450276Speter|                    E_BAD_ARGUMENT  - invalid options
9550276Speter+--------------------------------------------------------------------------*/
9676726SpeterNCURSES_EXPORT(int)
97166124Srafanitem_opts_off(ITEM * item, Item_Options opts)
98166124Srafan{
99166124Srafan  ITEM *citem = item;		/* use a copy because set_item_opts must detect
10050276Speter
101166124Srafan				   NULL item itself to adjust its behavior */
102166124Srafan
103262629Sdelphij  T((T_CALLED("item_opts_off(%p,%d)"), (void *)item, opts));
104166124Srafan
10550276Speter  if (opts & ~ALL_ITEM_OPTS)
10650276Speter    RETURN(E_BAD_ARGUMENT);
10750276Speter  else
10850276Speter    {
109166124Srafan      Normalize_Item(citem);
11050276Speter      opts = citem->opt & ~(opts & ALL_ITEM_OPTS);
111166124Srafan      returnCode(set_item_opts(item, opts));
11250276Speter    }
11350276Speter}
11450276Speter
11550276Speter/*---------------------------------------------------------------------------
11650276Speter|   Facility      :  libnmenu
11750276Speter|   Function      :  int item_opts_on(ITEM *item, Item_Options opts)
11850276Speter|
11950276Speter|   Description   :  Switch on the options for this item.
12050276Speter|
12150276Speter|   Return Values :  E_OK            - success
12250276Speter|                    E_BAD_ARGUMENT  - invalid options
12350276Speter+--------------------------------------------------------------------------*/
12476726SpeterNCURSES_EXPORT(int)
125166124Srafanitem_opts_on(ITEM * item, Item_Options opts)
12650276Speter{
127166124Srafan  ITEM *citem = item;		/* use a copy because set_item_opts must detect
128166124Srafan
129166124Srafan				   NULL item itself to adjust its behavior */
130166124Srafan
131262629Sdelphij  T((T_CALLED("item_opts_on(%p,%d)"), (void *)item, opts));
132166124Srafan
13350276Speter  opts &= ALL_ITEM_OPTS;
13450276Speter  if (opts & ~ALL_ITEM_OPTS)
13550276Speter    RETURN(E_BAD_ARGUMENT);
13650276Speter  else
13750276Speter    {
13850276Speter      Normalize_Item(citem);
13950276Speter      opts = citem->opt | opts;
140166124Srafan      returnCode(set_item_opts(item, opts));
14150276Speter    }
14250276Speter}
14350276Speter
14450276Speter/*---------------------------------------------------------------------------
14550276Speter|   Facility      :  libnmenu
14650276Speter|   Function      :  Item_Options item_opts(const ITEM *item)
14750276Speter|
14850276Speter|   Description   :  Switch of the options for this item.
14950276Speter|
15050276Speter|   Return Values :  Items options
15150276Speter+--------------------------------------------------------------------------*/
15276726SpeterNCURSES_EXPORT(Item_Options)
153166124Srafanitem_opts(const ITEM * item)
15450276Speter{
155262629Sdelphij  T((T_CALLED("item_opts(%p)"), (const void *)item));
156166124Srafan  returnItemOpts(ALL_ITEM_OPTS & Normalize_Item(item)->opt);
15750276Speter}
15850276Speter
15950276Speter/* m_item_opt.c ends here */
160