cdesktopenv/cde/programs/dtappbuilder/src/libABobj/obj_fields.c

4311 lines
81 KiB
C

/*
* CDE - Common Desktop Environment
*
* Copyright (c) 1993-2012, The Open Group. All rights reserved.
*
* These libraries and programs are free software; you can
* redistribute them and/or modify them under the terms of the GNU
* Lesser General Public License as published by the Free Software
* Foundation; either version 2 of the License, or (at your option)
* any later version.
*
* These libraries and programs are distributed in the hope that
* they will be useful, but WITHOUT ANY WARRANTY; without even the
* implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
* PURPOSE. See the GNU Lesser General Public License for more
* details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with these librararies and programs; if not, write
* to the Free Software Foundation, Inc., 51 Franklin Street, Fifth
* Floor, Boston, MA 02110-1301 USA
*/
/*
* $XConsortium: obj_fields.c /main/4 1996/10/29 15:20:22 mustafa $
*
* @(#)obj_fields.c 3.72 15 Feb 1994 cde_app_builder/src/libABobj
*
* RESTRICTED CONFIDENTIAL INFORMATION:
*
* The information in this document is subject to special restrictions in a
* confidential disclosure agreement between HP, IBM, Sun, USL, SCO and
* Univel. Do not distribute this document outside HP, IBM, Sun, USL, SCO,
* or Univel without Sun's specific written approval. This document and all
* copies and derivative works thereof must be returned or destroyed at Sun's
* request.
*
* Copyright 1993 Sun Microsystems, Inc. All rights reserved.
*
*/
/*
* fields.c - set and get fields of the gobj structure
*/
#include <stdio.h>
#include <string.h>
#include "objP.h"
#include "obj_notifyP.h"
#include "obj_names_listP.h"
#include <ab_private/util.h>
/*
* This function verifies the integrity of the object, and is called at the
* beginning of each field access, when debugging
*/
static int verify_for_write(ABObj obj);
static int verify_for_read(ABObj obj);
/*
* If a bad field (member) access is attempted, use member_error() to report
* the error. E.g.: member_error(obj, "bg_color"). It's automatically removed
* from non-debugging builds.
*/
static int member_error(ABObj obj, STRING member_name);
/*
* Define our local debugging routines
*/
#ifdef DEBUG
static int
member_error_impl(
ABObj obj, STRING member_name, STRING file, int line);
#define member_error(obj, member_name) \
(member_error_impl(obj, member_name, __FILE__, __LINE__))
#else
#define member_error(obj, member_name) /* ignore this! */
#endif
#ifdef DEBUG
static int verify_for_read_impl(ABObj obj, STRING file, int line);
static int verify_for_write_impl(ABObj obj, STRING file, int line);
#define verify_for_read(obj) (verify_for_read_impl(obj, __FILE__, __LINE__))
#define verify_for_write(obj) (verify_for_write_impl(obj, __FILE__, __LINE__))
#else
#define verify_for_read(obj) /* ignore this! */
#define verify_for_write(obj) /* ignore this! */
#endif
int
obj_set_file(ABObj obj, STRING file)
{
int iRet = 0;
ISTRING *old_name = NULL;
verify_for_write(obj);
switch (obj->type)
{
case AB_TYPE_FILE:
iRet = obj_set_name(obj, file); /* use name field */
break;
case AB_TYPE_MODULE:
old_name = &(obj->info.module.file);
break;
case AB_TYPE_PROJECT:
old_name = &(obj->info.project.file);
break;
default:
member_error(obj, "file");
iRet = -1;
break;
}
if (old_name != NULL)
{
istr_destroy(*old_name);
*old_name = istr_create(file);
}
return iRet;
}
/*
* Note - obj_get_file is more complex and is in utils.c
*/
int
obj_set_has_border(ABObj obj, BOOL has_border)
{
verify_for_write(obj);
switch (obj->type)
{
case AB_TYPE_CONTAINER:
obj->info.container.has_border = has_border;
return 0;
case AB_TYPE_TEXT_FIELD:
case AB_TYPE_TEXT_PANE:
obj->info.text.has_border = TRUE;
return 0;
default:
member_error(obj, "has_border");
}
return -1;
}
int
obj_set_hscrollbar_policy(ABObj obj, AB_SCROLLBAR_POLICY hscrollbar)
{
verify_for_write(obj);
switch (obj->type)
{
case AB_TYPE_DRAWING_AREA:
obj->info.drawing_area.hscrollbar = hscrollbar;
break;
case AB_TYPE_TEXT_PANE:
obj->info.text.hscrollbar = hscrollbar;
break;
}
return 0;
}
BOOL
obj_has_border(ABObj obj)
{
verify_for_read(obj);
switch (obj->type)
{
case AB_TYPE_CONTAINER:
return obj->info.container.has_border;
case AB_TYPE_TEXT_FIELD:
return obj->info.text.has_border;
}
return FALSE;
}
int
obj_get_increment(ABObj obj)
{
verify_for_read(obj);
if (obj_is_spin_box(obj))
return(obj->info.spin_box.increment);
else if (obj_is_scale(obj))
return(obj->info.scale.increment);
return -1;
}
int
obj_set_increment(ABObj obj, int incr)
{
verify_for_write(obj);
if (obj_is_spin_box(obj))
{
obj->info.spin_box.increment = incr;
return 0;
}
else if (obj_is_scale(obj))
{
obj->info.scale.increment = incr;
return 0;
}
member_error(obj, "increment");
return -1;
}
int
obj_set_is_default(ABObj obj, BOOL is_default)
{
verify_for_write(obj);
if (obj->type == AB_TYPE_PROJECT)
{
obj->info.project.is_default = is_default;
return 0;
}
member_error(obj, "is_default");
return -1;
}
BOOL
obj_is_default(ABObj obj)
{
verify_for_read(obj);
if (obj->type == AB_TYPE_PROJECT)
{
return obj->info.project.is_default;
}
return FALSE;
}
int
obj_set_is_defined(ABObj obj, BOOL is_defined)
{
verify_for_write(obj);
if (is_defined)
{
obj_set_impl_flags(obj, ObjFlagIsDefined);
}
else
{
obj_clear_impl_flags(obj, ObjFlagIsDefined);
}
return 0;
}
BOOL
obj_is_defined(ABObj obj)
{
verify_for_read(obj);
return obj_has_impl_flags(obj, ObjFlagIsDefined);
}
int
obj_set_is_help_item(
ABObj obj,
BOOL is_help_item
)
{
verify_for_write(obj);
if (obj_is_item(obj))
{
/* Only Settable for Cascade Items */
if (obj->info.item.type == AB_ITEM_FOR_MENUBAR)
obj->info.item.is_help_item = is_help_item;
return 0;
}
member_error(obj, "is_help_item");
return -1;
}
BOOL
obj_is_help_item(
ABObj obj
)
{
verify_for_read(obj);
if (obj_is_item(obj))
{
return obj->info.item.is_help_item;
}
return FALSE;
}
int
obj_set_accelerator(ABObj obj, STRING accel)
{
verify_for_write(obj);
if (!obj_is_item(obj))
{
member_error(obj, "accelerator");
return -1;
}
istr_destroy(obj->info.item.accelerator);
obj->info.item.accelerator = istr_create(accel);
return 0;
}
int
obj_set_bg_color(ABObj obj, STRING bg_color)
{
verify_for_write(obj);
istr_destroy(obj->bg_color);
obj->bg_color = istr_create(bg_color);
return 0;
}
int
obj_set_fg_color(ABObj obj, STRING fg_color)
{
verify_for_write(obj);
istr_destroy(obj->fg_color);
obj->fg_color = istr_create(fg_color);
return 0;
}
int
obj_set_filter_pattern(ABObj obj, STRING filter_pattern)
{
verify_for_write(obj);
if (!obj_is_file_chooser(obj))
{
member_error(obj, "filter_pattern");
return -1;
}
istr_destroy(obj->info.file_chooser.filter_pattern);
obj->info.file_chooser.filter_pattern = istr_create(filter_pattern);
return 0;
}
STRING
obj_get_filter_pattern( ABObj obj)
{
STRING pattern = NULL;
verify_for_read(obj);
pattern = istr_string(obj->info.file_chooser.filter_pattern);
return (pattern);
}
int
obj_set_icon(ABObj obj, STRING icon)
{
verify_for_write(obj);
if (obj_is_window(obj) && !obj_is_file_chooser(obj))
{
istr_destroy(obj->info.window.icon);
obj->info.window.icon = istr_create(icon);
return 0;
}
member_error(obj, "icon");
return -1;
}
STRING
obj_get_icon(ABObj obj)
{
verify_for_read(obj);
if (obj_is_window(obj) && !obj_is_file_chooser(obj))
return istr_string(obj->info.window.icon);
return NULL;
}
int
obj_set_icon_label(ABObj obj, STRING icon_label)
{
verify_for_write(obj);
if (obj_is_window(obj) && !obj_is_file_chooser(obj))
{
istr_destroy(obj->info.window.icon_label);
obj->info.window.icon_label = istr_create(icon_label);
return 0;
}
member_error(obj, "icon_label");
return -1;
}
STRING
obj_get_icon_label(ABObj obj)
{
verify_for_read(obj);
if (obj_is_window(obj) && !obj_is_file_chooser(obj))
return istr_string(obj->info.window.icon_label);
return NULL;
}
int
obj_set_icon_mask(ABObj obj, STRING icon_mask)
{
verify_for_write(obj);
if (obj_is_window(obj) && !obj_is_file_chooser(obj))
{
istr_destroy(obj->info.window.icon_mask);
obj->info.window.icon_mask = istr_create(icon_mask);
return 0;
}
member_error(obj, "icon_mask");
return -1;
}
STRING
obj_get_icon_mask(ABObj obj)
{
verify_for_read(obj);
if (obj_is_window(obj) && !obj_is_file_chooser(obj))
return istr_string(obj->info.window.icon_mask);
return NULL;
}
int
obj_set_initial_value_string(ABObj obj, STRING val)
{
verify_for_write(obj);
if (obj_is_text(obj))
{
istr_destroy(obj->info.text.initial_value_string);
obj->info.text.initial_value_string = istr_create(val);
return 0;
}
member_error(obj, "initial_value_string");
return -1;
}
STRING
obj_get_initial_value_string(ABObj obj)
{
verify_for_read(obj);
if (obj_is_text(obj))
{
return (istr_string(obj->info.text.initial_value_string));
}
return NULL;
}
/*
* REMIND: FIND AND CHANGE ALL BY-NAME REFERENCES TO THIS OBJECT!!!
*
* NOTE: don't verify at the top of the function - the indexes may be
* out-of-sync until we update them (i.e., the object is temporarily
* invalid).
*/
int
obj_set_name_istr(ABObj obj, ISTRING new_name)
{
ISTRING old_name = NULL;
StringList names = NULL;
ABObj oldNameObj = NULL;
if (istr_equal(new_name, obj->name))
{
/* no change! */
return 0;
}
if ((names = objP_get_names_scope(obj)) != NULL)
{
oldNameObj = (ABObj)strlist_get_istr_data(names, new_name);
if (oldNameObj != NULL)
{
if (oldNameObj == obj)
{
strlist_remove_istr(names, new_name);
}
else
{
/* it's not unique! */
#ifdef DEBUG
util_dprintf(1, "ERROR: duplicate name rejected: %s\n",
istr_string_safe(new_name));
#endif /* DEBUG */
return ERR_DUPLICATE_KEY;
}
}
}
old_name = istr_dup(obj->name);
istr_destroy(obj->name);
obj->name = istr_dup(new_name);
#ifdef DEBUG
obj->debug_name = istr_string(obj->name);
#endif
/*
* Update the names list
*/
if ((names = objP_get_names_scope(obj)) != NULL)
{
if (strlist_get_istr_data(names, old_name) == ((void*)obj))
{
/* this was probably called during a reparent, so the */
/* old_name is actuall from a different names list */
strlist_remove_istr(names, old_name);
}
strlist_add_istr(names, new_name, (void *)obj);
}
/*
* The indexes are up-to-date - verify everything
*/
verify_for_write(obj);
objP_notify_send_name_change(obj, old_name);
istr_destroy(old_name);
return 0;
}
int
obj_set_name(ABObj obj, STRING strName)
{
int return_value = 0;
ISTRING name = istr_create(strName);
return_value = obj_set_name_istr(obj, name);
istr_destroy(name);
return return_value;
}
#ifndef obj_get_name
STRING
obj_get_name(ABObj obj)
{
verify_for_read(obj);
return istr_string(obj->name);
}
#endif /* !obj_get_name */
#ifndef obj_get_name_istr
ISTRING
obj_get_name_istr(ABObj obj)
{
verify_for_read(obj);
return obj->name;
}
#endif /* !obj_get_name_istr */
int
obj_set_num_columns(ABObj obj, int num_columns)
{
int old_num_cols;
int iRet = -1;
verify_for_write(obj);
switch (obj->type)
{
case AB_TYPE_CONTAINER:
old_num_cols = obj->info.container.num_columns;
obj->info.container.num_columns = num_columns;
iRet = 0;
break;
case AB_TYPE_CHOICE:
old_num_cols = obj->info.choice.num_columns;
obj->info.choice.num_columns = num_columns;
iRet = 0;
break;
case AB_TYPE_TERM_PANE:
old_num_cols = obj->info.term.num_columns;
obj->info.term.num_columns = num_columns;
iRet = 0;
}
if (obj_is_text(obj))
{
old_num_cols = obj->info.text.num_columns;
obj->info.text.num_columns = num_columns;
iRet = 0;
}
if (iRet == -1)
member_error(obj, "num_columns");
else if (old_num_cols != num_columns)
iRet= objP_notify_send_rc_geometry_change(obj);
return iRet;
}
int
obj_get_num_columns(ABObj obj)
{
verify_for_read(obj);
switch (obj->type)
{
case AB_TYPE_CONTAINER:
return obj->info.container.num_columns;
case AB_TYPE_CHOICE:
return obj->info.choice.num_columns;
case AB_TYPE_TERM_PANE:
return obj->info.term.num_columns;
}
if (obj_is_text(obj))
{
return obj->info.text.num_columns;
}
return 0;
}
int
obj_set_num_rows(ABObj obj, int num_rows)
{
int old_num_rows;
int iRet = -1;
verify_for_write(obj);
switch (obj->type)
{
case AB_TYPE_CONTAINER:
old_num_rows = obj->info.container.num_rows;
obj->info.container.num_rows = num_rows;
iRet = 0;
break;
case AB_TYPE_LIST:
old_num_rows = obj->info.list.num_rows;
obj->info.list.num_rows = num_rows;
iRet = 0;
break;
case AB_TYPE_TERM_PANE:
old_num_rows = obj->info.term.num_rows;
obj->info.term.num_rows = num_rows;
iRet = 0;
break;
}
if (obj_is_text(obj))
{
old_num_rows = obj->info.text.num_rows;
obj->info.text.num_rows = num_rows;
iRet = 0;
}
if (iRet == -1)
member_error(obj, "num_rows");
else if (old_num_rows != num_rows)
iRet= objP_notify_send_rc_geometry_change(obj);
return iRet;
}
int
obj_get_num_rows(ABObj obj)
{
verify_for_read(obj);
switch (obj->type)
{
case AB_TYPE_CONTAINER:
return obj->info.container.num_rows;
case AB_TYPE_LIST:
return obj->info.list.num_rows;
case AB_TYPE_TERM_PANE:
return obj->info.term.num_rows;
}
if (obj_is_text(obj))
{
return obj->info.text.num_rows;
}
return 0;
}
int
obj_set_orientation(ABObj obj, AB_ORIENTATION orientation)
{
verify_for_write(obj);
switch (obj->type)
{
case AB_TYPE_SEPARATOR:
obj->info.separator.orientation = orientation;
return 0;
case AB_TYPE_SCALE:
obj->info.scale.orientation = orientation;
return 0;
case AB_TYPE_CHOICE:
obj->info.choice.orientation = orientation;
return 0;
}
member_error(obj, "orientation");
return -1;
}
AB_ORIENTATION
obj_get_orientation(ABObj obj)
{
verify_for_read(obj);
switch (obj->type)
{
case AB_TYPE_SEPARATOR:
return obj->info.separator.orientation;
case AB_TYPE_SCALE:
return obj->info.scale.orientation;
case AB_TYPE_CHOICE:
return obj->info.choice.orientation;
}
return AB_ORIENT_HORIZONTAL;
}
int
obj_set_label(ABObj obj, STRING label)
{
verify_for_write(obj);
istr_destroy(obj->label);
obj->label = istr_create(label);
return 0;
}
#ifndef obj_get_label
STRING
obj_get_label(ABObj obj)
{
verify_for_read(obj);
return istr_string(obj->label);
}
#endif /* !obj_get_label */
int
obj_set_label_type(ABObj obj, AB_LABEL_TYPE label_type)
{
verify_for_write(obj);
obj->label_type = label_type;
return 0;
}
#ifndef obj_get_label_type
AB_LABEL_TYPE
obj_get_label_type(ABObj obj)
{
verify_for_read(obj);
return obj->label_type;
}
#endif /* !obj_get_label_typ */
int
obj_set_label_alignment(ABObj obj, AB_ALIGNMENT type)
{
verify_for_write(obj);
switch (obj->type)
{
case AB_TYPE_BUTTON:
obj->info.button.label_alignment = type;
return 0;
case AB_TYPE_LABEL:
obj->info.label.label_alignment = type;
return 0;
}
member_error(obj, "label_alignment");
return -1;
}
AB_ALIGNMENT
obj_get_label_alignment(ABObj obj)
{
verify_for_read(obj);
switch (obj->type)
{
case AB_TYPE_BUTTON:
return (obj->info.button.label_alignment);
case AB_TYPE_LABEL:
return (obj->info.label.label_alignment);
}
return (AB_ALIGNMENT) - 1;
}
int
obj_set_label_position(ABObj obj, AB_COMPASS_POINT pos)
{
verify_for_write(obj);
switch (obj->type)
{
case AB_TYPE_TEXT_FIELD:
obj->info.text.label_position = pos;
return 0;
case AB_TYPE_CHOICE:
obj->info.choice.label_position = pos;
return 0;
case AB_TYPE_COMBO_BOX:
obj->info.combo_box.label_position = pos;
return 0;
case AB_TYPE_LIST:
obj->info.list.label_position = pos;
return 0;
case AB_TYPE_SCALE:
obj->info.scale.label_position = pos;
return 0;
case AB_TYPE_SPIN_BOX:
obj->info.spin_box.label_position = pos;
return 0;
}
member_error(obj, "label_position");
return -1;
}
AB_COMPASS_POINT
obj_get_label_position(ABObj obj)
{
verify_for_read(obj);
switch (obj->type)
{
case AB_TYPE_TEXT_PANE:
case AB_TYPE_TEXT_FIELD:
return (obj->info.text.label_position);
case AB_TYPE_CHOICE:
return (obj->info.choice.label_position);
case AB_TYPE_COMBO_BOX:
return (obj->info.combo_box.label_position);
case AB_TYPE_LIST:
return (obj->info.list.label_position);
case AB_TYPE_SCALE:
return (obj->info.scale.label_position);
case AB_TYPE_SPIN_BOX:
return (obj->info.spin_box.label_position);
}
return (AB_COMPASS_POINT) - 1;
}
STRING
obj_get_bg_color(ABObj obj)
{
verify_for_read(obj);
return istr_string(obj->bg_color);
}
STRING
obj_get_fg_color(ABObj obj)
{
verify_for_read(obj);
return istr_string(obj->fg_color);
}
int
obj_set_menu_name(ABObj obj, STRING menu_name)
{
verify_for_write(obj);
istr_destroy(obj->menu_name);
obj->menu_name = istr_create(menu_name);
return 0;
}
STRING
obj_get_menu_name(ABObj obj)
{
verify_for_read(obj);
return istr_string(obj->menu_name);
}
int
obj_set_menu_title(ABObj obj, STRING menu_title)
{
verify_for_write(obj);
switch(obj->type)
{
case AB_TYPE_CONTAINER:
istr_destroy(obj->info.container.menu_title);
obj->info.container.menu_title = istr_create(menu_title);
break;
case AB_TYPE_DRAWING_AREA:
istr_destroy(obj->info.drawing_area.menu_title);
obj->info.drawing_area.menu_title = istr_create(menu_title);
break;
case AB_TYPE_LIST:
istr_destroy(obj->info.list.menu_title);
obj->info.list.menu_title = istr_create(menu_title);
break;
case AB_TYPE_TEXT_FIELD:
case AB_TYPE_TEXT_PANE:
istr_destroy(obj->info.text.menu_title);
obj->info.text.menu_title = istr_create(menu_title);
break;
case AB_TYPE_TERM_PANE:
istr_destroy(obj->info.term.menu_title);
obj->info.term.menu_title = istr_create(menu_title);
break;
default:
return -1;
}
return 0;
}
STRING
obj_get_menu_title(ABObj obj)
{
verify_for_read(obj);
switch(obj->type)
{
case AB_TYPE_CONTAINER:
return(istr_string(obj->info.container.menu_title));
case AB_TYPE_DRAWING_AREA:
return(istr_string(obj->info.drawing_area.menu_title));
case AB_TYPE_LIST:
return(istr_string(obj->info.list.menu_title));
case AB_TYPE_TEXT_FIELD:
case AB_TYPE_TEXT_PANE:
return(istr_string(obj->info.text.menu_title));
case AB_TYPE_TERM_PANE:
return(istr_string(obj->info.term.menu_title));
default:
return NULL;
}
}
STRING
obj_get_mnemonic(ABObj obj)
{
verify_for_read(obj);
if (obj_is_item(obj) && (obj->info.item.mnemonic))
{
return (istr_string(obj->info.item.mnemonic));
}
return ((STRING) NULL);
}
int
obj_set_mnemonic(ABObj obj, STRING mnem)
{
verify_for_write(obj);
if (!obj_is_item(obj))
{
member_error(obj, "mnemonic");
return -1;
}
istr_destroy(obj->info.item.mnemonic);
obj->info.item.mnemonic = istr_create(mnem);
return 0;
}
/*
* Make this object actually refer to another object
*/
int
obj_cvt_to_ref(
ABObj obj,
ABObj ref_obj
)
{
if (obj == NULL)
{
return (ref_obj == NULL? 0:-1); /* NULL can only ref NULL */
}
verify_for_write(obj);
/*
* The types must match!
*/
if (ref_obj != NULL)
{
obj_set_type(obj, obj_get_type(ref_obj));
}
obj->ref_to= ref_obj;
return 0;
}
ABObj
obj_get_actual_obj(
ABObj obj
)
{
if (obj == NULL)
{
return NULL;
}
verify_for_read(obj);
return (obj->ref_to == NULL? obj:obj->ref_to);
}
int
obj_set_min_value(ABObj obj, int minval)
{
int iRet = 0;
verify_for_write(obj);
switch (obj->type)
{
case AB_TYPE_SCALE:
obj->info.scale.min_value = minval;
break;
case AB_TYPE_SPIN_BOX:
obj->info.spin_box.min_value = minval;
break;
default:
iRet = -1;
member_error(obj, "min_value");
break;
}
return iRet;
}
int
obj_get_min_value(ABObj obj)
{
int iValue = 0;
verify_for_read(obj);
switch (obj->type)
{
case AB_TYPE_SCALE:
iValue = obj->info.scale.min_value;
break;
case AB_TYPE_SPIN_BOX:
iValue = obj->info.spin_box.min_value;
break;
default:
iValue = -1;
break;
}
return iValue;
}
int
obj_set_max_value(ABObj obj, int maxval)
{
int iRet = 0;
verify_for_write(obj);
switch (obj->type)
{
case AB_TYPE_SCALE:
obj->info.scale.max_value = maxval;
break;
case AB_TYPE_SPIN_BOX:
obj->info.spin_box.max_value = maxval;
break;
default:
iRet = -1;
member_error(obj, "max_value");
break;
}
return iRet;
}
int
obj_get_max_value(ABObj obj)
{
int iValue = 0;
verify_for_read(obj);
switch (obj->type)
{
case AB_TYPE_SCALE:
iValue = obj->info.scale.max_value;
break;
case AB_TYPE_SPIN_BOX:
iValue = obj->info.spin_box.max_value;
break;
default:
iValue = -1;
break;
}
return iValue;
}
int
obj_set_res_file_arg_classes(ABObj obj, AB_ARG_CLASS_FLAGS argClasses)
{
if (obj->type == AB_TYPE_PROJECT)
{
obj->info.project.res_file_arg_classes = argClasses;
return 0;
}
return ERR_NOT_FOUND;
}
AB_ARG_CLASS_FLAGS
obj_get_res_file_arg_classes(ABObj obj)
{
if (obj->type == AB_TYPE_PROJECT)
{
return obj->info.project.res_file_arg_classes;
}
return AB_ARG_CLASS_FLAGS_NONE;
}
int
obj_set_resizable(ABObj obj, BOOL resizable)
{
verify_for_write(obj);
switch (obj->type)
{
case AB_TYPE_BASE_WINDOW:
case AB_TYPE_DIALOG:
obj->info.window.resizable = resizable;
return 0;
}
member_error(obj, "resizeable");
return -1;
}
BOOL
obj_get_resizable(ABObj obj)
{
verify_for_read(obj);
switch (obj->type)
{
case AB_TYPE_BASE_WINDOW:
case AB_TYPE_DIALOG:
return obj->info.window.resizable;
}
return TRUE;
}
AB_SELECT_TYPE
obj_get_selection_mode(ABObj obj)
{
verify_for_read(obj);
if (obj->type == AB_TYPE_LIST)
return obj->info.list.selection_mode;
return AB_SELECT_UNDEF;
}
int
obj_set_selection_mode(ABObj obj, AB_SELECT_TYPE sel)
{
int iRet = 0;
verify_for_write(obj);
if (obj->type == AB_TYPE_LIST)
obj->info.list.selection_mode = sel;
return iRet;
}
int
obj_set_selection_required(ABObj obj, BOOL selreq)
{
int iRet = 0;
verify_for_write(obj);
switch (obj->type)
{
case AB_TYPE_LIST:
obj->info.list.selection_required = selreq;
break;
case AB_TYPE_CHOICE:
obj->info.choice.selection_required = selreq;
break;
default:
iRet = -1;
member_error(obj, "selection_required");
break;
}
return iRet;
}
BOOL
obj_get_selection_required(ABObj obj)
{
BOOL bRet = FALSE;
verify_for_read(obj);
switch (obj->type)
{
case AB_TYPE_CHOICE:
bRet = obj->info.choice.selection_required;
break;
case AB_TYPE_LIST:
bRet = obj->info.list.selection_required;
break;
}
return bRet;
}
int
obj_set_type(ABObj obj, AB_OBJECT_TYPE new_type)
{
verify_for_write(obj);
if (obj_get_type(obj) != new_type)
{
/* only clear out the data if the type has changed */
obj_destruct_type_specific_info(obj);
obj->type = new_type;
obj_construct_type_specific_info(obj);
}
return 0;
}
int
obj_set_subtype(ABObj obj, int subtype)
{
verify_for_write(obj);
if (obj_is_choice(obj))
obj->info.choice.type = (AB_CHOICE_TYPE) subtype;
else if (obj_is_message(obj))
obj->info.message.type = (AB_MESSAGE_TYPE)subtype;
else if (obj_is_container(obj))
obj->info.container.type = (AB_CONTAINER_TYPE) subtype;
else if (obj_is_item(obj))
obj->info.item.type = (AB_ITEM_TYPE) subtype;
else if (obj_is_button(obj))
obj->info.button.type = (AB_BUTTON_TYPE) subtype;
else if (obj_is_menu(obj))
obj->info.menu.type = (AB_MENU_TYPE) subtype;
/*
* else if (obj_is_dialog(obj)) obj->info.dialog.type =
* (AB_DIALOG_TYPE)subtype;
*/
return 0;
}
#ifndef obj_get_type
AB_OBJECT_TYPE
obj_get_type(ABObj obj)
{
verify_for_read(obj);
return obj->type;
}
#endif /* !obj_get_type */
int
obj_get_subtype(ABObj obj)
{
verify_for_read(obj);
if (obj_is_choice(obj))
return ((int) obj->info.choice.type);
else if (obj_is_message(obj))
return((int)obj->info.message.type);
else if (obj_is_button(obj))
return ((int) obj->info.button.type);
else if (obj_is_container(obj))
return ((int) obj->info.container.type);
else if (obj_is_item(obj))
return ((int) obj->info.item.type);
else if (obj_is_menu(obj))
return ((int) obj->info.menu.type);
return (AB_NO_SUBTYPE);
}
STRING
obj_get_process_string(
ABObj obj
)
{
verify_for_read(obj);
if (obj->type == AB_TYPE_TERM_PANE)
return (istr_string(obj->info.term.process_string));
return NULL;
}
int
obj_set_process_string(
ABObj obj,
STRING subproc
)
{
verify_for_write(obj);
if (obj->type == AB_TYPE_TERM_PANE)
{
istr_destroy(obj->info.term.process_string);
obj->info.term.process_string = istr_create(subproc);
}
return 0;
}
int
obj_set_was_written(ABObj obj, BOOL was_written)
{
verify_for_write(obj);
if (was_written)
obj_set_impl_flags(obj, ObjFlagWasWritten);
else
obj_clear_impl_flags(obj, ObjFlagWasWritten);
return 0;
}
BOOL
obj_was_written(ABObj obj)
{
verify_for_read(obj);
return obj_has_impl_flags(obj, ObjFlagWasWritten);
}
int
obj_set_win_parent(
ABObj obj,
ABObj wparent
)
{
AB_OBJECT_TYPE type = AB_TYPE_UNDEF;
if (!obj_is_window(obj))
return -1;
verify_for_write(obj);
type = obj_get_type(obj);
switch (type)
{
case AB_TYPE_BASE_WINDOW:
case AB_TYPE_DIALOG:
obj->info.window.win_parent = wparent;
break;
case AB_TYPE_FILE_CHOOSER:
obj->info.file_chooser.win_parent = wparent;
break;
default:
break;
}
return 0;
}
ABObj
obj_get_win_parent(
ABObj obj
)
{
ABObj wparent = NULL;
AB_OBJECT_TYPE type = AB_TYPE_UNDEF;
if (!obj_is_window(obj))
return NULL;
verify_for_read(obj);
type = obj_get_type(obj);
switch (type)
{
case AB_TYPE_BASE_WINDOW:
case AB_TYPE_DIALOG:
wparent = obj->info.window.win_parent;
break;
case AB_TYPE_FILE_CHOOSER:
wparent = obj->info.file_chooser.win_parent;
break;
default:
break;
}
return (wparent);
}
int
obj_set_write_me(ABObj obj, BOOL write_me)
{
verify_for_write(obj);
if (write_me)
{
obj_set_impl_flags(obj, ObjFlagWriteMe);
}
else
{
obj_clear_impl_flags(obj, ObjFlagWriteMe);
}
return 0;
}
BOOL
obj_get_write_me(ABObj obj)
{
verify_for_read(obj);
return obj_has_impl_flags(obj, ObjFlagWriteMe);
}
int
obj_set_value_x(ABObj obj, int valx)
{
int iRet = 0;
verify_for_write(obj);
switch (obj->type)
{
case AB_TYPE_CHOICE:
obj->info.choice.value_x = valx;
break;
default:
iRet = -1;
member_error(obj, "value_x");
break;
}
return iRet;
}
int
obj_get_value_x(ABObj obj)
{
int iRet = 0;
verify_for_read(obj);
switch (obj->type)
{
case AB_TYPE_CHOICE:
iRet = obj->info.choice.value_x;
break;
default:
iRet = -1;
break;
}
return iRet;
}
int
obj_set_value_y(ABObj obj, int valy)
{
int iRet = 0;
verify_for_write(obj);
switch (obj->type)
{
case AB_TYPE_CHOICE:
obj->info.choice.value_y = valy;
break;
default:
iRet = -1;
member_error(obj, "value_y");
break;
}
return iRet;
}
int
obj_get_value_y(ABObj obj)
{
int iRet = 0;
verify_for_read(obj);
switch (obj->type)
{
case AB_TYPE_CHOICE:
iRet = obj->info.choice.value_y;
break;
default:
iRet = -1;
break;
}
return iRet;
}
int
obj_set_vscrollbar_policy(ABObj obj, AB_SCROLLBAR_POLICY vscrollbar)
{
verify_for_write(obj);
switch (obj->type)
{
case AB_TYPE_DRAWING_AREA:
obj->info.drawing_area.vscrollbar = vscrollbar;
break;
case AB_TYPE_TEXT_PANE:
obj->info.text.vscrollbar = vscrollbar;
break;
case AB_TYPE_TERM_PANE:
obj->info.term.vscrollbar = vscrollbar;
break;
}
return 0;
}
int
obj_set_tearoff(ABObj obj, BOOL tearoff)
{
verify_for_write(obj);
switch (obj->type)
{
case AB_TYPE_MENU:
obj->info.menu.tear_off = tearoff;
return 0;
}
member_error(obj, "tear_off");
return -1;
}
int
obj_set_vendor(ABObj obj, STRING vendor)
{
verify_for_write(obj);
if (!obj_is_project(obj))
{
member_error(obj, "vendor");
return -1;
}
istr_destroy(obj->info.project.vendor);
obj->info.project.vendor = istr_create(vendor);
return 0;
}
STRING
obj_get_vendor(ABObj obj)
{
verify_for_read(obj);
if (!obj_is_project(obj))
{
member_error(obj, "vendor");
return NULL;
}
return (istr_string(obj->info.project.vendor));
}
int
obj_set_version(ABObj obj, STRING version)
{
verify_for_write(obj);
if (!obj_is_project(obj))
{
member_error(obj, "version");
return -1;
}
istr_destroy(obj->info.project.version);
obj->info.project.version = istr_create(version);
return 0;
}
STRING
obj_get_version(ABObj obj)
{
verify_for_read(obj);
if (!obj_is_project(obj))
{
member_error(obj, "version");
return NULL;
}
return (istr_string(obj->info.project.version));
}
int
obj_set_root_window(ABObj obj, ABObj root_window)
{
verify_for_write(obj);
if (!obj_is_project(obj))
{
member_error(obj, "root_window");
return -1;
}
obj->info.project.root_window = root_window;
return 0;
}
ABObj
obj_get_root_window(ABObj obj)
{
verify_for_read(obj);
if (!obj_is_project(obj))
{
member_error(obj, "root_window");
return NULL;
}
return (obj->info.project.root_window);
}
int
obj_set_height_is_resizable(ABObj obj, BOOL resizable)
{
verify_for_write(obj);
if (resizable)
obj_set_impl_flags(obj, ObjFlagHeightIsResizable);
else
obj_clear_impl_flags(obj, ObjFlagHeightIsResizable);
return 0;
}
BOOL
obj_get_height_is_resizable(ABObj obj)
{
verify_for_read(obj);
return obj_has_impl_flags(obj, ObjFlagHeightIsResizable);
}
int
obj_set_hoffset(ABObj obj, int hoffset)
{
verify_for_write(obj);
if (obj_is_container(obj))
{
return (obj->info.container.hoffset = hoffset);
}
return ERR_BAD_PARAM1;
}
int
obj_get_hoffset(ABObj obj)
{
verify_for_read(obj);
if (obj_is_container(obj))
{
return (obj->info.container.hoffset);
}
return ERR_BAD_PARAM1;
}
int
obj_set_voffset(ABObj obj, int voffset)
{
verify_for_write(obj);
if (obj_is_container(obj))
{
return (obj->info.container.voffset = voffset);
}
return ERR_BAD_PARAM1;
}
int
obj_get_voffset(ABObj obj)
{
verify_for_read(obj);
if (obj_is_container(obj))
{
return (obj->info.container.voffset);
}
else
{
/*
* REMIND: Not sure what to return when an ABObj is not a container
* type.
*/
return (0);
}
}
int
obj_set_hspacing(ABObj obj, int hspacing)
{
verify_for_write(obj);
if (obj_is_container(obj))
{
return (obj->info.container.hspacing = hspacing);
}
return ERR_BAD_PARAM1;
}
int
obj_get_hspacing(ABObj obj)
{
verify_for_read(obj);
if (obj_is_container(obj))
{
return (obj->info.container.hspacing);
}
else
{
/*
* REMIND: Not sure what to return when an ABObj is not a container
* type.
*/
return (0);
}
}
int
obj_set_vspacing(ABObj obj, int vspacing)
{
verify_for_write(obj);
if (obj_is_container(obj))
{
return (obj->info.container.vspacing = vspacing);
}
return ERR_BAD_PARAM1;
}
int
obj_get_vspacing(ABObj obj)
{
verify_for_read(obj);
if (obj_is_container(obj))
{
return (obj->info.container.vspacing);
}
else
{
/*
* REMIND: Not sure what to return when an ABObj is not a container
* type.
*/
return (0);
}
}
int
obj_set_ref_point(ABObj obj, AB_COMPASS_POINT ref_point)
{
verify_for_write(obj);
if (obj_is_container(obj))
{
return (obj->info.container.ref_point = ref_point);
}
return ERR_BAD_PARAM1;
}
AB_COMPASS_POINT
obj_get_ref_point(ABObj obj)
{
verify_for_read(obj);
if (obj_is_container(obj))
{
return obj->info.container.ref_point;
}
else
{
/*
* REMIND: Not sure if I should use obj_get_label_position() or if I
* should do my own switch statement.
*/
return (obj_get_label_position(obj));
}
}
int
obj_set_hattach_type(ABObj obj, AB_ATTACH_TYPE hattach_type)
{
verify_for_write(obj);
if (obj_is_container(obj))
{
return (obj->info.container.hattach_type = hattach_type);
}
return ERR_BAD_PARAM1;
}
AB_ATTACH_TYPE
obj_get_hattach_type(ABObj obj)
{
AB_ATTACH_TYPE attach_type = AB_ATTACH_UNDEF;
verify_for_read(obj);
if (obj_is_container(obj))
{
attach_type = (obj->info.container.hattach_type);
}
return attach_type;
}
int
obj_set_vattach_type(ABObj obj, AB_ATTACH_TYPE vattach_type)
{
verify_for_write(obj);
if (obj_is_container(obj))
{
return (obj->info.container.vattach_type = vattach_type);
}
return ERR_BAD_PARAM1;
}
AB_ATTACH_TYPE
obj_get_vattach_type(ABObj obj)
{
AB_ATTACH_TYPE attach_type = AB_ATTACH_UNDEF;
verify_for_read(obj);
if (obj_is_container(obj))
{
attach_type = (obj->info.container.vattach_type);
}
return attach_type;
}
AB_BUTTON_TYPE
obj_get_button_type(ABObj obj)
{
verify_for_read(obj);
if (obj_is_button(obj))
{
return (obj->info.button.type);
}
return (AB_BUT_UNDEF);
}
int
obj_set_item_type(ABObj obj, AB_ITEM_TYPE item_type)
{
verify_for_write(obj);
if (obj_is_item(obj))
{
return (obj->info.item.type = item_type);
}
return ERR_BAD_PARAM1;
}
AB_ITEM_TYPE
obj_get_item_type(ABObj obj)
{
verify_for_read(obj);
if (obj_is_item(obj))
{
return (obj->info.item.type);
}
return (AB_ITEM_FOR_UNDEF);
}
int
obj_set_group_type(ABObj obj, AB_GROUP_TYPE group_type)
{
verify_for_write(obj);
if (obj_is_container(obj))
{
return (obj->info.container.group_type = group_type);
}
return ERR_BAD_PARAM1;
}
AB_GROUP_TYPE
obj_get_group_type(ABObj obj)
{
verify_for_read(obj);
if ((obj != NULL) && obj_is_container(obj))
{
return (obj->info.container.group_type);
}
return (AB_GROUP_UNDEF);
}
int
obj_set_row_align(ABObj obj, AB_ALIGNMENT row_align)
{
verify_for_write(obj);
if (obj_is_container(obj))
{
return (obj->info.container.row_align = row_align);
}
return ERR_BAD_PARAM1;
}
AB_ALIGNMENT
obj_get_row_align(ABObj obj)
{
verify_for_read(obj);
if (obj_is_container(obj))
{
return (obj->info.container.row_align);
}
return (AB_ALIGN_UNDEF);
}
int
obj_set_class_name(ABObj obj, STRING cname)
{
verify_for_write(obj);
istr_destroy(obj->class_name);
obj->class_name = istr_create(cname);
return 0;
}
STRING
obj_get_class_name(ABObj obj)
{
verify_for_read(obj);
return istr_string(obj->class_name);
}
int
obj_set_col_align(ABObj obj, AB_ALIGNMENT col_align)
{
verify_for_write(obj);
if (obj_is_container(obj))
{
return (obj->info.container.col_align = col_align);
}
return ERR_BAD_PARAM1;
}
AB_ALIGNMENT
obj_get_col_align(ABObj obj)
{
verify_for_read(obj);
if (obj_is_container(obj))
{
return (obj->info.container.col_align);
}
return (AB_ALIGN_UNDEF);
}
int
obj_set_container_type(ABObj obj, AB_CONTAINER_TYPE cont_type)
{
verify_for_write(obj);
if (obj_is_container(obj))
{
return (obj->info.container.type = cont_type);
}
return ERR_BAD_PARAM1;
}
AB_CONTAINER_TYPE
obj_get_container_type(ABObj obj)
{
verify_for_read(obj);
if (obj_is_container(obj))
{
return obj->info.container.type;
}
return AB_CONT_UNDEF;
}
int
obj_get_decimal_points(ABObj obj)
{
verify_for_read(obj);
if (obj_is_spin_box(obj))
return(obj->info.spin_box.decimal_points);
else if (obj_is_scale(obj))
return(obj->info.scale.decimal_points);
return -1;
}
int
obj_set_decimal_points(ABObj obj, int dec_points)
{
verify_for_write(obj);
if (obj_is_spin_box(obj))
{
obj->info.spin_box.decimal_points = dec_points;
return 0;
}
else if (obj_is_scale(obj))
{
obj->info.scale.decimal_points = dec_points;
return 0;
}
member_error(obj, "decimal_points");
return -1;
}
int
obj_set_default_act_button(
ABObj obj,
ABObj defaultb
)
{
if (!obj_is_window(obj))
return -1;
verify_for_write(obj);
obj->info.window.default_act_button= defaultb;
return 0;
}
ABObj
obj_get_default_act_button(
ABObj obj
)
{
ABObj defaultb = NULL;
if (!obj_is_window(obj))
return NULL;
verify_for_read(obj);
return(obj->info.window.default_act_button);
}
AB_DIRECTION
obj_get_direction(ABObj obj)
{
verify_for_read(obj);
if (obj_is_scale(obj))
return(obj->info.scale.direction);
return AB_DIR_UNDEF;
}
int
obj_set_direction(ABObj obj, AB_DIRECTION dir)
{
verify_for_write(obj);
if (obj_is_scale(obj))
{
obj->info.scale.direction= dir;
return 0;
}
member_error(obj, "direction");
return -1;
}
int
obj_set_drawarea_width(
ABObj obj,
int width
)
{
verify_for_write(obj);
if (obj_is_drawing_area(obj))
{
obj->info.drawing_area.drawarea_width = width;
return 0;
}
member_error(obj, "drawarea_width");
return -1;
}
int
obj_set_drawarea_height(
ABObj obj,
int height
)
{
verify_for_write(obj);
if (obj_is_drawing_area(obj))
{
obj->info.drawing_area.drawarea_height = height;
return 0;
}
member_error(obj, "drawarea_height");
return -1;
}
int
obj_get_drawarea_width(
ABObj obj
)
{
verify_for_read(obj);
if (obj_is_drawing_area(obj))
return (obj->info.drawing_area.drawarea_width);
return -1;
}
int
obj_get_drawarea_height(
ABObj obj
)
{
verify_for_read(obj);
if (obj_is_drawing_area(obj))
return (obj->info.drawing_area.drawarea_height);
return -1;
}
int
obj_set_textpane_width(ABObj obj,
int width)
{
if (obj_is_text_pane(obj))
{
obj->info.text.textpane_width = width;
return 0;
}
return -1;
}
int
obj_set_textpane_height(ABObj obj,
int height)
{
if (obj_is_text_pane(obj))
{
obj->info.text.textpane_height = height;
return 0;
}
return -1;
}
int
obj_get_textpane_width(ABObj obj)
{
if (obj_is_text_pane(obj))
return (obj->info.text.textpane_width);
else
return -1;
}
int
obj_get_textpane_height(ABObj obj)
{
if (obj_is_text_pane(obj))
return (obj->info.text.textpane_height);
else
return -1;
}
AB_SCROLLBAR_POLICY
obj_get_hscrollbar_policy(ABObj obj)
{
verify_for_read(obj);
switch (obj->type)
{
case AB_TYPE_LIST:
return (obj->info.list.hscrollbar);
case AB_TYPE_DRAWING_AREA:
return (obj->info.drawing_area.hscrollbar);
case AB_TYPE_TEXT_PANE:
return (obj->info.text.hscrollbar);
}
return AB_SCROLLBAR_UNDEF;
}
AB_SCROLLBAR_POLICY
obj_get_vscrollbar_policy(ABObj obj)
{
verify_for_read(obj);
switch (obj->type)
{
case AB_TYPE_LIST:
return (obj->info.list.vscrollbar);
case AB_TYPE_DRAWING_AREA:
return (obj->info.drawing_area.vscrollbar);
case AB_TYPE_TEXT_PANE:
return (obj->info.text.vscrollbar);
case AB_TYPE_TERM_PANE:
return (obj->info.term.vscrollbar);
}
return AB_SCROLLBAR_UNDEF;
}
STRING
obj_get_accelerator(ABObj obj)
{
verify_for_read(obj);
if (obj_is_item(obj) && (obj->info.item.accelerator))
{
return (istr_string(obj->info.item.accelerator));
}
return ((STRING) NULL);
}
int
obj_get_max_length(ABObj obj)
{
verify_for_read(obj);
if (obj_is_text(obj))
{
return (obj->info.text.max_length);
}
return (0);
}
int
obj_set_max_length(ABObj obj, int max_len)
{
verify_for_write(obj);
if (obj_is_text(obj))
{
obj->info.text.max_length = max_len;
return 0;
}
member_error(obj, "max_length");
return -1;
}
int
obj_set_initial_value_int(ABObj obj, int ival)
{
verify_for_write(obj);
switch (obj->type)
{
case AB_TYPE_SCALE:
obj->info.scale.initial_value = ival;
break;
case AB_TYPE_SPIN_BOX:
obj->info.spin_box.initial_value = ival;
break;
case AB_TYPE_TEXT_FIELD:
case AB_TYPE_TEXT_PANE:
obj->info.text.initial_value_int = ival;
break;
}
return (0);
}
int
obj_get_initial_value_int(ABObj obj)
{
verify_for_read(obj);
switch (obj->type)
{
case AB_TYPE_SCALE:
return (obj->info.scale.initial_value);
case AB_TYPE_SPIN_BOX:
return (obj->info.spin_box.initial_value);
case AB_TYPE_TEXT_FIELD:
case AB_TYPE_TEXT_PANE:
return (obj->info.text.initial_value_int);
}
return (0);
}
AB_TEXT_TYPE
obj_get_text_type(ABObj obj)
{
verify_for_read(obj);
if (obj_is_text(obj))
return (obj->info.text.type);
if (obj_is_spin_box(obj))
return (obj->info.spin_box.type);
return (AB_TEXT_UNDEF);
}
int
obj_set_text_type(ABObj obj, AB_TEXT_TYPE type)
{
verify_for_write(obj);
if (obj_is_text(obj))
obj->info.text.type = type;
else if (obj_is_spin_box(obj))
obj->info.spin_box.type = type;
else
{
member_error(obj, "text_type");
return ERR;
}
return 0;
}
AB_MENU_TYPE
obj_get_menu_type(ABObj obj)
{
verify_for_read(obj);
if (obj_is_menu(obj))
{
return (obj->info.menu.type);
}
return (AB_MENU_UNDEF);
}
AB_PACKING
obj_get_packing(ABObj obj)
{
verify_for_read(obj);
if (obj_is_container(obj))
{
return (obj->info.container.packing);
}
return (AB_PACK_UNDEF);
}
AB_CHOICE_TYPE
obj_get_choice_type(ABObj obj)
{
verify_for_read(obj);
if (obj_is_choice(obj))
{
return (obj->info.choice.type);
}
return (AB_CHOICE_UNDEF);
}
int
obj_set_is_initially_active(ABObj obj, BOOL active)
{
verify_for_write(obj);
if (active)
obj_set_impl_flags(obj, ObjFlagIsInitiallyActive);
else
obj_clear_impl_flags(obj, ObjFlagIsInitiallyActive);
return 0;
}
BOOL
obj_is_initially_active(ABObj obj)
{
verify_for_read(obj);
return obj_has_impl_flags(obj, ObjFlagIsInitiallyActive);
}
int
obj_set_is_initially_iconic(ABObj obj, BOOL iconic)
{
int return_value = 0;
verify_for_write(obj);
if (obj_is_window(obj) && !obj_is_file_chooser(obj))
{
obj->info.window.is_initially_iconic = iconic;
}
else
{
member_error(obj, "is_initially_iconic");
return_value = ERR;
}
return return_value;
}
BOOL
obj_is_initially_iconic(ABObj obj)
{
verify_for_read(obj);
if (obj_is_window(obj) && !obj_is_file_chooser(obj))
{
return (obj->info.window.is_initially_iconic);
}
return FALSE;
}
int
obj_set_is_initially_selected(ABObj obj, BOOL selected)
{
int return_value = 0;
verify_for_write(obj);
if (obj_is_item(obj))
{
obj->info.item.is_initially_selected = selected;
}
else
{
member_error(obj, "is_initially_selected");
return_value = ERR;
}
return return_value;
}
BOOL
obj_is_initially_selected(ABObj obj)
{
verify_for_read(obj);
if (obj_is_item(obj))
{
return (obj->info.item.is_initially_selected);
}
return FALSE;
}
int
obj_set_is_initially_visible(ABObj obj, BOOL visible)
{
verify_for_write(obj);
if (visible)
obj_set_impl_flags(obj, ObjFlagIsInitiallyVisible);
else
obj_clear_impl_flags(obj, ObjFlagIsInitiallyVisible);
return 0;
}
BOOL
obj_is_initially_visible(ABObj obj)
{
verify_for_read(obj);
return obj_has_impl_flags(obj, ObjFlagIsInitiallyVisible);
}
BOOL
obj_get_tearoff(ABObj obj)
{
verify_for_read(obj);
if (obj_is_menu(obj))
{
return (obj->info.menu.tear_off);
}
return (0);
}
BOOL
obj_get_exclusive(ABObj obj)
{
verify_for_read(obj);
if (obj_is_menu(obj))
{
return (obj->info.menu.exclusive);
}
return (0);
}
int
obj_set_to(ABObj obj, ABObj to)
{
verify_for_write(obj);
if (!obj_is_action(obj))
{
member_error(obj, "to");
return NULL;
}
obj->info.action.to = to;
return 0;
}
ABObj
obj_get_to(ABObj obj)
{
verify_for_read(obj);
if (!obj_is_action(obj))
{
member_error(obj, "to");
return NULL;
}
return obj->info.action.to;
}
int
obj_set_from(ABObj obj, ABObj from)
{
verify_for_write(obj);
if (!obj_is_action(obj))
{
member_error(obj, "from");
return NULL;
}
obj->info.action.from = from;
return 0;
}
ABObj
obj_get_from(ABObj obj)
{
verify_for_read(obj);
if (!obj_is_action(obj))
{
member_error(obj, "from");
return NULL;
}
return obj->info.action.from;
}
int
obj_set_func_type(ABObj obj, AB_FUNC_TYPE new_func_type)
{
verify_for_write(obj);
if (!obj_is_action(obj))
{
member_error(obj, "func_type");
return -1;
}
if (obj->info.action.func_type == new_func_type)
{
return 0;
}
/*
* Free the old type's data
*/
switch (obj->info.action.func_type)
{
case AB_FUNC_CODE_FRAG:
istr_destroy(obj->info.action.func_value.code_frag);
break;
case AB_FUNC_USER_DEF:
istr_destroy(obj->info.action.func_value.func_name);
break;
case AB_FUNC_ON_ITEM_HELP:
break;
case AB_FUNC_HELP_VOLUME:
istr_destroy(obj->info.action.volume_id);
istr_destroy(obj->info.action.location);
break;
default:
break;
}
/*
* Set default value for new type
*/
obj->info.action.func_type = new_func_type;
switch (obj->info.action.func_type)
{
case AB_FUNC_UNDEF:
break;
case AB_FUNC_CODE_FRAG:
obj->info.action.func_value.code_frag = NULL;
break;
case AB_FUNC_USER_DEF:
obj->info.action.func_value.func_name = NULL;
break;
case AB_FUNC_HELP_VOLUME:
obj->info.action.volume_id = NULL;
obj->info.action.location = NULL;
break;
default:
break;
}
return 0;
}
AB_FUNC_TYPE
obj_get_func_type(ABObj obj)
{
verify_for_read(obj);
if (obj_is_action(obj))
{
return (obj->info.action.func_type);
}
return (AB_FUNC_UNDEF);
}
int
obj_set_func_name(ABObj obj, STRING func_name)
{
verify_for_write(obj);
if (!(obj_is_action(obj)
&& (obj->info.action.func_type == AB_FUNC_USER_DEF)))
{
member_error(obj, "func_name");
return -1;
}
istr_destroy(obj->info.action.func_value.func_name);
obj->info.action.func_value.func_name = istr_create(func_name);
return 0;
}
STRING
obj_get_func_name(ABObj obj)
{
verify_for_read(obj);
if (!(obj_is_action(obj)
&& (obj->info.action.func_type == AB_FUNC_USER_DEF)))
{
return NULL;
}
return (istr_string(obj->info.action.func_value.func_name));
}
int
obj_set_func_name_suffix(ABObj obj, STRING suffix)
{
verify_for_write(obj);
if (!obj_is_action(obj))
{
member_error(obj, "func_name_suffix");
return -1;
}
istr_destroy(obj->info.action.func_name_suffix);
obj->info.action.func_name_suffix = istr_create(suffix);
return 0;
}
STRING
obj_get_func_name_suffix(ABObj obj)
{
verify_for_read(obj);
if (!obj_is_action(obj))
{
member_error(obj, "func_name_suffix");
return NULL;
}
return istr_string(obj->info.action.func_name_suffix);
}
int
obj_set_func_code(ABObj obj, STRING code)
{
verify_for_write(obj);
if (!(obj_is_action(obj)
&& (obj->info.action.func_type == AB_FUNC_CODE_FRAG)))
{
member_error(obj, "func_code");
return -1;
}
istr_destroy(obj->info.action.func_value.code_frag);
obj->info.action.func_value.code_frag = istr_create(code);
return 0;
}
STRING
obj_get_func_code(ABObj obj)
{
verify_for_read(obj);
if (obj_is_action(obj))
{
return (istr_string(obj->info.action.func_value.code_frag));
}
member_error(obj, "func_code");
return ("nil");
}
AB_BUILTIN_ACTION
obj_get_func_builtin(ABObj obj)
{
verify_for_read(obj);
if (!(obj_is_action(obj) && (obj_get_func_type(obj) == AB_FUNC_BUILTIN)))
{
return AB_STDACT_UNDEF;
}
return (obj->info.action.func_value.builtin);
}
int
obj_set_func_builtin(ABObj obj, AB_BUILTIN_ACTION act)
{
verify_for_write(obj);
if (obj_is_action(obj) && (obj_get_func_type(obj) == AB_FUNC_BUILTIN))
{
obj->info.action.func_value.builtin = act;
return 0;
}
return -1;
}
AB_WHEN
obj_get_when(ABObj obj)
{
verify_for_read(obj);
if (obj_is_action(obj))
{
return (obj->info.action.when);
}
return AB_WHEN_UNDEF;
}
int
obj_set_when(ABObj obj, AB_WHEN when)
{
verify_for_write(obj);
if (obj->type != AB_TYPE_ACTION)
{
member_error(obj, "when");
return NULL;
}
obj->info.action.when = when;
return 0;
}
int
obj_set_width_is_resizable(ABObj obj, BOOL resizable)
{
verify_for_write(obj);
if (resizable)
obj_set_impl_flags(obj, ObjFlagWidthIsResizable);
else
obj_clear_impl_flags(obj, ObjFlagWidthIsResizable);
return 0;
}
BOOL
obj_get_width_is_resizable(ABObj obj)
{
verify_for_read(obj);
return obj_has_impl_flags(obj, ObjFlagWidthIsResizable);
}
int
obj_set_arg_type(ABObj obj, AB_ARG_TYPE arg_type)
{
verify_for_write(obj);
if (!obj_is_action(obj))
{
member_error(obj, "arg_type");
return -1;
}
if (arg_type == obj->info.action.arg_type)
{
return 0;
}
/*
* Free old data type
*/
if (obj->info.action.arg_type == AB_ARG_STRING)
{
istr_destroy(obj->info.action.arg_value.sval);
}
/*
* Set initial value for new data type
*/
obj->info.action.arg_type = arg_type;
switch (obj->info.action.arg_type)
{
case AB_ARG_UNDEF:
case AB_ARG_VOID_PTR:
break;
case AB_ARG_FLOAT:
obj->info.action.arg_value.fval = 0.0;
break;
case AB_ARG_INT:
obj->info.action.arg_value.fval = 0;
break;
case AB_ARG_STRING:
obj->info.action.arg_value.sval = NULL;
break;
}
return 0;
}
AB_ARG_TYPE
obj_get_arg_type(ABObj obj)
{
verify_for_read(obj);
if (obj_is_action(obj))
{
return (obj->info.action.arg_type);
}
return AB_ARG_UNDEF;
}
#ifdef BOGUS
AB_ARG_VALUE
obj_get_arg_value(ABObj obj)
{
verify_for_read(obj);
AB_ARG_VALUE value;
value.ival = 0;
if (obj_is_action(obj))
{
return (obj->info.action.arg_value);
}
return value;
}
#endif /* BOGUS */
int
obj_set_arg_float(ABObj obj, double float_val)
{
verify_for_write(obj);
if (!(obj_is_action(obj) && (obj_get_arg_type(obj) == AB_ARG_FLOAT)))
{
member_error(obj, "arg_float");
return -1;
}
obj->info.action.arg_value.fval = float_val;
return 0;
}
double
obj_get_arg_float(ABObj obj)
{
verify_for_read(obj);
if (!(obj_is_action(obj) && (obj_get_arg_type(obj) == AB_ARG_FLOAT)))
{
member_error(obj, "arg_float");
return 0.0;
}
return (obj->info.action.arg_value.fval);
}
int
obj_set_arg_int(ABObj obj, int int_value)
{
verify_for_write(obj);
if (!(obj_is_action(obj) && (obj->info.action.arg_type == AB_ARG_INT)))
{
member_error(obj, "arg_int");
return -1;
}
obj->info.action.arg_value.ival = int_value;
return 0;
}
int
obj_get_arg_int(ABObj obj)
{
verify_for_read(obj);
if (!(obj_is_action(obj) && (obj->info.action.arg_type == AB_ARG_INT)))
{
member_error(obj, "arg_int");
return 0;
}
return (obj->info.action.arg_value.ival);
}
int
obj_set_arg_string(ABObj obj, STRING argString)
{
verify_for_write(obj);
if (!(obj_is_action(obj) && (obj->info.action.arg_type == AB_ARG_STRING)))
{
member_error(obj, "arg_string");
return -1;
}
istr_destroy(obj->info.action.arg_value.sval);
obj->info.action.arg_value.sval = istr_create(argString);
return 0;
}
STRING
obj_get_arg_string(ABObj obj)
{
verify_for_read(obj);
if (obj_is_action(obj))
{
return (istr_string(obj->info.action.arg_value.sval));
}
return NULL;
}
ABAttachment *
obj_get_attachment(
ABObj obj,
AB_COMPASS_POINT dir
)
{
ABAttachment *attach = NULL;
verify_for_read(obj);
if (obj->attachments == NULL)
{
goto epilogue;
}
switch (dir)
{
case AB_CP_NORTH:
attach = (&(obj->attachments->north));
break;
case AB_CP_SOUTH:
attach = (&(obj->attachments->south));
break;
case AB_CP_EAST:
attach = (&(obj->attachments->east));
break;
case AB_CP_WEST:
attach = (&(obj->attachments->west));
break;
default:
if (util_get_verbosity() >= 3)
fprintf(stderr, "obj_get_attachment: invalid direction\n");
attach = NULL;
break;
}
epilogue:
return attach;
}
AB_ATTACH_TYPE
obj_get_attach_type(
ABObj obj,
AB_COMPASS_POINT dir
)
{
verify_for_read(obj);
if (obj->attachments == NULL)
return AB_ATTACH_UNDEF;
switch (dir)
{
case AB_CP_NORTH:
return (obj->attachments->north.type);
case AB_CP_SOUTH:
return (obj->attachments->south.type);
case AB_CP_EAST:
return (obj->attachments->east.type);
case AB_CP_WEST:
return (obj->attachments->west.type);
default:
if (util_get_verbosity() > 0)
fprintf(stderr, "obj_get_attach_type: invalid direction\n");
return AB_ATTACH_UNDEF;
}
}
void *
obj_get_attach_value(
ABObj obj,
AB_COMPASS_POINT dir
)
{
verify_for_read(obj);
if (obj->attachments == NULL)
return NULL;
switch (dir)
{
case AB_CP_NORTH:
return (obj->attachments->north.value);
case AB_CP_SOUTH:
return (obj->attachments->south.value);
case AB_CP_EAST:
return (obj->attachments->east.value);
case AB_CP_WEST:
return (obj->attachments->west.value);
default:
if (util_get_verbosity() > 0)
fprintf(stderr, "obj_get_attach_value: invalid direction\n");
return NULL;
}
}
int
obj_get_attach_offset(
ABObj obj,
AB_COMPASS_POINT dir
)
{
verify_for_read(obj);
if (obj->attachments == NULL)
return 0;
switch (dir)
{
case AB_CP_NORTH:
return (obj->attachments->north.offset);
case AB_CP_SOUTH:
return (obj->attachments->south.offset);
case AB_CP_EAST:
return (obj->attachments->east.offset);
case AB_CP_WEST:
return (obj->attachments->west.offset);
default:
if (util_get_verbosity() > 0)
fprintf(stderr, "obj_get_attach_offset: invalid direction\n");
return NULL;
}
}
int
obj_set_attachment(
ABObj obj,
AB_COMPASS_POINT dir,
AB_ATTACH_TYPE type,
void *value,
int offset
)
{
ABAttachment *attachment;
verify_for_write(obj);
if (obj->attachments == NULL)
obj_init_attachments(obj);
switch (dir)
{
case AB_CP_NORTH:
attachment = &(obj->attachments->north);
break;
case AB_CP_WEST:
attachment = &(obj->attachments->west);
break;
case AB_CP_SOUTH:
attachment = &(obj->attachments->south);
break;
case AB_CP_EAST:
attachment = &(obj->attachments->east);
break;
}
attachment->type = type;
attachment->value = value;
attachment->offset = offset;
return 0;
}
int
obj_set_attach_type(
ABObj obj,
AB_COMPASS_POINT dir,
AB_ATTACH_TYPE type
)
{
verify_for_write(obj);
if (obj->attachments == NULL)
obj_init_attachments(obj);
switch (dir)
{
case AB_CP_NORTH:
obj->attachments->north.type = type;
break;
case AB_CP_WEST:
obj->attachments->west.type = type;
break;
case AB_CP_SOUTH:
obj->attachments->south.type = type;
break;
case AB_CP_EAST:
obj->attachments->east.type = type;
break;
}
return 0;
}
int
obj_set_attach_value(
ABObj obj,
AB_COMPASS_POINT dir,
void *value
)
{
verify_for_write(obj);
if (obj->attachments == NULL)
obj_init_attachments(obj);
switch (dir)
{
case AB_CP_NORTH:
obj->attachments->north.value = value;
break;
case AB_CP_WEST:
obj->attachments->west.value = value;
break;
case AB_CP_SOUTH:
obj->attachments->south.value = value;
break;
case AB_CP_EAST:
obj->attachments->east.value = value;
break;
}
return 0;
}
int
obj_set_attach_offset(
ABObj obj,
AB_COMPASS_POINT dir,
int offset
)
{
verify_for_write(obj);
if (obj->attachments == NULL)
obj_init_attachments(obj);
switch (dir)
{
case AB_CP_NORTH:
obj->attachments->north.offset = offset;
break;
case AB_CP_WEST:
obj->attachments->west.offset = offset;
break;
case AB_CP_SOUTH:
obj->attachments->south.offset = offset;
break;
case AB_CP_EAST:
obj->attachments->east.offset = offset;
break;
}
return 0;
}
int
obj_set_button_type(ABObj obj, AB_BUTTON_TYPE type)
{
verify_for_write(obj);
if (!obj_is_button(obj))
return -1;
obj->info.button.type = type;
return 0;
}
int
obj_set_help_act_button(
ABObj obj,
ABObj helpb
)
{
if (!obj_is_window(obj))
return -1;
verify_for_write(obj);
obj->info.window.help_act_button= helpb;
return 0;
}
ABObj
obj_get_help_act_button(
ABObj obj
)
{
ABObj defaultb = NULL;
if (!obj_is_window(obj))
return NULL;
verify_for_read(obj);
return(obj->info.window.help_act_button);
}
/*
** Indicate whether a particular object has help data set. This is used
** by the front end to set-up help in Test Mode and by the code generator
** to decide whether to generate help support code.
*/
BOOL
obj_has_help_data(ABObj obj)
{
STRING help_text = istr_string(obj->help_text);
if( (help_text != 0) && (*help_text != 0) ) {
return TRUE;
}
return FALSE;
}
int
obj_set_help_data(ABObj obj,
STRING help_volume,
STRING help_location,
STRING help_text
)
{
verify_for_write(obj);
istr_destroy(obj->help_volume);
istr_destroy(obj->help_location);
istr_destroy(obj->help_text);
obj->help_volume = istr_create(help_volume);
obj->help_location = istr_create(help_location);
obj->help_text = istr_create(help_text);
return 0;
}
int
obj_set_help_volume(ABObj obj,
STRING help_volume
)
{
verify_for_write(obj);
istr_destroy(obj->help_volume);
obj->help_volume = istr_create(help_volume);
return 0;
}
int
obj_set_help_location(ABObj obj,
STRING help_location
)
{
verify_for_write(obj);
istr_destroy(obj->help_location);
obj->help_location = istr_create(help_location);
return 0;
}
int
obj_set_help_text(ABObj obj,
STRING help_text
)
{
verify_for_write(obj);
istr_destroy(obj->help_text);
obj->help_text = istr_create(help_text);
return 0;
}
int
obj_get_help_data(ABObj obj,
STRING * help_volume,
STRING * help_location,
STRING * help_text
)
{
verify_for_read(obj);
*help_volume = istr_string(obj->help_volume);
*help_location = istr_string(obj->help_location);
*help_text = istr_string(obj->help_text);
return 0;
}
STRING
obj_get_help_volume(
ABObj obj
)
{
STRING help_volume = NULL;
verify_for_read(obj);
help_volume = istr_string(obj->help_volume);
return (help_volume);
}
STRING
obj_get_help_location(
ABObj obj
)
{
STRING help_location = NULL;
verify_for_read(obj);
help_location = istr_string(obj->help_location);
return (help_location);
}
STRING
obj_get_help_text(
ABObj obj
)
{
STRING help_text = NULL;
verify_for_read(obj);
help_text = istr_string(obj->help_text);
return (help_text);
}
int
obj_set_word_wrap(ABObj obj, BOOL word_wrap)
{
verify_for_write(obj);
if (obj_is_text_pane(obj))
{
obj->info.text.word_wrap = word_wrap;
return 0;
}
member_error(obj, "word_wrap");
return -1;
}
BOOL
obj_get_word_wrap(ABObj obj)
{
verify_for_read(obj);
return (obj->info.text.word_wrap);
}
int
obj_set_line_style(ABObj obj, AB_LINE_TYPE line_style)
{
verify_for_write(obj);
switch (obj->type)
{
case AB_TYPE_SEPARATOR:
obj->info.separator.line_style = line_style;
return 0;
case AB_TYPE_ITEM:
obj->info.item.line_style = line_style;
return 0;
}
member_error(obj, "line_style");
return -1;
}
AB_LINE_TYPE
obj_get_line_style(
ABObj obj
)
{
verify_for_read(obj);
switch(obj->type)
{
case AB_TYPE_SEPARATOR:
return (obj->info.separator.line_style);
case AB_TYPE_ITEM:
return (obj->info.item.line_style);
default:
return (AB_LINE_UNDEF);
}
}
int
obj_set_arrow_style(ABObj obj, AB_ARROW_STYLE arrow_style)
{
verify_for_write(obj);
switch (obj->type)
{
case AB_TYPE_SPIN_BOX:
obj->info.spin_box.arrow_style = arrow_style;
return 0;
}
member_error(obj, "arrow_style");
return -1;
}
AB_ARROW_STYLE
obj_get_arrow_style(
ABObj obj
)
{
verify_for_read(obj);
if (!obj || !obj_is_spin_box(obj))
return (AB_ARROW_UNDEF);
return (obj->info.spin_box.arrow_style);
}
int
obj_set_show_value(
ABObj obj,
BOOL val
)
{
verify_for_write(obj);
if (!obj_is_scale(obj))
{
member_error(obj, "scale_show_value");
return -1;
}
obj->info.scale.show_value = val;
return 0;
}
BOOL
obj_get_show_value(
ABObj obj
)
{
verify_for_read(obj);
if (!obj_is_scale(obj))
{
member_error(obj, "show_value");
return FALSE;
}
return (obj->info.scale.show_value);
}
int
obj_set_user_data(ABObj obj, STRING user_data)
{
verify_for_write(obj);
istr_destroy(obj->user_data);
obj->user_data = istr_create(user_data);
return 0;
}
STRING
obj_get_user_data(ABObj obj)
{
verify_for_read(obj);
return istr_string(obj->user_data);
}
#ifdef DEBUG
static int
verify(ABObj obj, int min_debug, STRING file, int line)
{
int rc = 0;
if (debug_level() < min_debug)
{
return 0;
}
rc = objP_update_verify(obj);
if (rc < 0)
{
util_dprintf(0, "Corrupted object detected (%s:%d).\n",
file, line);
if (debug_level() >= 5)
{
abort();
}
return -1;
}
return 0;
}
/* don't normally check obj integrity on every read (debug level 3) */
static int
verify_for_read_impl(ABObj obj, STRING file, int line)
{
return verify(obj, 1, file, line);
}
static int
verify_for_write_impl(ABObj obj, STRING file, int line)
{
return verify(obj, 1, file, line);
}
#endif /* DEBUG */
#ifdef DEBUG
/*
* Report an attempt to set an unsupported attribute on an object.
*/
static int
member_error_impl(ABObj obj, STRING member_name, STRING file, int line)
{
char obj_name[256];
/*
* We "use" fields that are illegal for objects regularly, and just
* ignore the objects that return errors.
*/
return 0;
/*
if (!debugging())
{
return 0;
}
*obj_name = 0;
obj_get_safe_name(obj, obj_name, 256);
util_dprintf(0,
"ERROR(%s:%d): Bad attribute access '%s' in object '%s'.\n",
file, line, member_name, obj_name);
return 0;
*/
}
#endif /* DEBUG */
BOOL
obj_has_hscrollbar(ABObj obj)
{
AB_OBJECT_TYPE type = AB_TYPE_UNDEF;
AB_SCROLLBAR_POLICY sb_policy = AB_SCROLLBAR_UNDEF;
BOOL has_hscrollbar = FALSE;
type = obj_get_type(obj);
if (type == AB_TYPE_DRAWING_AREA || type == AB_TYPE_LIST ||
type == AB_TYPE_TERM_PANE || type == AB_TYPE_TEXT_PANE )
{
sb_policy = obj_get_hscrollbar_policy(obj);
if (sb_policy == AB_SCROLLBAR_ALWAYS ||
sb_policy == AB_SCROLLBAR_WHEN_NEEDED)
{
has_hscrollbar = TRUE;
}
}
return (has_hscrollbar);
}
BOOL
obj_has_vscrollbar(ABObj obj)
{
AB_OBJECT_TYPE type = AB_TYPE_UNDEF;
AB_SCROLLBAR_POLICY sb_policy = AB_SCROLLBAR_UNDEF;
BOOL has_vscrollbar = FALSE;
type = obj_get_type(obj);
if (type == AB_TYPE_DRAWING_AREA || type == AB_TYPE_LIST ||
type == AB_TYPE_TERM_PANE || type == AB_TYPE_TEXT_PANE )
{
sb_policy = obj_get_vscrollbar_policy(obj);
if (sb_policy == AB_SCROLLBAR_ALWAYS ||
sb_policy == AB_SCROLLBAR_WHEN_NEEDED)
{
has_vscrollbar = TRUE;
}
}
return (has_vscrollbar);
}
int
obj_set_ok_label(ABObj obj, STRING label)
{
verify_for_write(obj);
if (!obj_is_file_chooser(obj))
{
member_error(obj, "ok_label");
return -1;
}
istr_destroy(obj->info.file_chooser.ok_label);
obj->info.file_chooser.ok_label = istr_create(label);
return 0;
}
STRING
obj_get_ok_label( ABObj obj)
{
STRING label = NULL;
verify_for_read(obj);
if (!obj_is_file_chooser(obj))
{
member_error(obj, "ok_label");
return NULL;
}
label = istr_string(obj->info.file_chooser.ok_label);
return (label);
}
int
obj_set_action1_label(ABObj obj, STRING label)
{
verify_for_write(obj);
if (!obj_is_message(obj))
{
member_error(obj, "action1_label");
return -1;
}
istr_destroy(obj->info.message.action1_label);
obj->info.message.action1_label = istr_create(label);
return 0;
}
STRING
obj_get_action1_label( ABObj obj)
{
STRING label = NULL;
verify_for_read(obj);
if (!obj_is_message(obj))
{
member_error(obj, "action1_label");
return NULL;
}
label = istr_string(obj->info.message.action1_label);
return (label);
}
int
obj_set_action2_label(ABObj obj, STRING label)
{
verify_for_write(obj);
if (!obj_is_message(obj))
{
member_error(obj, "action2_label");
return -1;
}
istr_destroy(obj->info.message.action2_label);
obj->info.message.action2_label = istr_create(label);
return 0;
}
STRING
obj_get_action2_label( ABObj obj)
{
STRING label = NULL;
verify_for_read(obj);
if (!obj_is_message(obj))
{
member_error(obj, "action2_label");
return NULL;
}
label = istr_string(obj->info.message.action2_label);
return (label);
}
int
obj_set_action3_label(ABObj obj, STRING label)
{
verify_for_write(obj);
if (!obj_is_message(obj))
{
member_error(obj, "action3_label");
return -1;
}
istr_destroy(obj->info.message.action3_label);
obj->info.message.action3_label = istr_create(label);
return 0;
}
STRING
obj_get_action3_label( ABObj obj)
{
STRING label = NULL;
verify_for_read(obj);
if (!obj_is_message(obj))
{
member_error(obj, "action3_label");
return NULL;
}
label = istr_string(obj->info.message.action3_label);
return (label);
}
int
obj_set_directory(ABObj obj, STRING dir)
{
verify_for_write(obj);
if (!obj_is_file_chooser(obj))
{
member_error(obj, "directory");
return -1;
}
istr_destroy(obj->info.file_chooser.directory);
obj->info.file_chooser.directory = istr_create(dir);
return 0;
}
STRING
obj_get_directory( ABObj obj)
{
STRING dir = NULL;
verify_for_read(obj);
if (!obj_is_file_chooser(obj))
{
member_error(obj, "directory");
return NULL;
}
dir = istr_string(obj->info.file_chooser.directory);
return (dir);
}
int
obj_set_auto_dismiss(ABObj obj, BOOL dismiss)
{
verify_for_write(obj);
if (!obj_is_file_chooser(obj))
{
member_error(obj, "auto_dismiss");
return -1;
}
obj->info.file_chooser.auto_dismiss = dismiss;
return 0;
}
BOOL
obj_get_auto_dismiss( ABObj obj)
{
verify_for_read(obj);
if (!obj_is_file_chooser(obj))
{
member_error(obj, "auto_dismiss");
return FALSE;
}
return (obj->info.file_chooser.auto_dismiss);
}
int
obj_set_file_type_mask(ABObj obj, AB_FILE_TYPE_MASK ftm)
{
verify_for_write(obj);
if (!obj_is_file_chooser(obj))
{
member_error(obj, "file_type_mask");
return -1;
}
obj->info.file_chooser.file_type_mask = ftm;
return 0;
}
AB_FILE_TYPE_MASK
obj_get_file_type_mask( ABObj obj)
{
verify_for_read(obj);
if (!obj_is_file_chooser(obj))
{
member_error(obj, "file_type_mask");
return (AB_FILE_TYPE_MASK)0;
}
return (obj->info.file_chooser.file_type_mask);
}
int
obj_set_msg_string(ABObj obj, STRING msg)
{
verify_for_write(obj);
if (!obj_is_message(obj))
{
member_error(obj, "message");
return -1;
}
istr_destroy(obj->info.message.msg_string);
obj->info.message.msg_string = istr_create(msg);
return 0;
}
STRING
obj_get_msg_string( ABObj obj)
{
STRING msg = NULL;
verify_for_read(obj);
if (!obj_is_message(obj))
{
member_error(obj, "message");
return NULL;
}
msg = istr_string(obj->info.message.msg_string);
return (msg);
}
int
obj_set_msg_type(ABObj obj, AB_MESSAGE_TYPE msg_type)
{
verify_for_write(obj);
if (obj_is_message(obj))
{
return (obj->info.message.type = msg_type);
}
return ERR_BAD_PARAM1;
}
AB_MESSAGE_TYPE
obj_get_msg_type( ABObj obj)
{
verify_for_read(obj);
if (obj_is_message(obj))
{
return (obj->info.message.type);
}
return AB_MSG_UNDEF;
}
int
obj_set_default_btn(ABObj obj, AB_DEFAULT_BUTTON button)
{
verify_for_write(obj);
if (obj_is_message(obj))
{
return (obj->info.message.default_btn = button);
}
return ERR_BAD_PARAM1;
}
AB_DEFAULT_BUTTON
obj_get_default_btn( ABObj obj)
{
verify_for_read(obj);
if (obj_is_message(obj))
{
return (obj->info.message.default_btn);
}
return AB_DEFAULT_BTN_UNDEF;
}
BOOL
obj_has_action1_button(ABObj obj)
{
verify_for_read(obj);
if (obj_is_message(obj))
return (!util_strempty(obj_get_action1_label(obj)));
else
return FALSE;
}
BOOL
obj_has_action2_button(ABObj obj)
{
verify_for_read(obj);
if (obj_is_message(obj))
return (!util_strempty(obj_get_action2_label(obj)));
else
return FALSE;
}
BOOL
obj_has_action3_button(ABObj obj)
{
verify_for_read(obj);
if (obj_is_message(obj))
return (!util_strempty(obj_get_action3_label(obj)));
else
return FALSE;
}
BOOL
obj_has_cancel_button(ABObj obj)
{
verify_for_read(obj);
if (obj_is_message(obj))
return (obj->info.message.cancel_button != 0);
else
return FALSE;
}
BOOL
obj_has_help_button(ABObj obj)
{
verify_for_read(obj);
if (obj_is_message(obj))
return (obj->info.message.help_button != 0);
else
return FALSE;
}
int
obj_set_sessioning_method(ABObj obj, AB_SESSIONING_METHOD sessioning_method)
{
verify_for_write(obj);
if (obj_is_project(obj))
{
return (obj->info.project.session_mgmt.sessioning_method = sessioning_method);
}
return ERR_BAD_PARAM1;
}
AB_SESSIONING_METHOD
obj_get_sessioning_method( ABObj obj)
{
verify_for_read(obj);
if (obj_is_project(obj))
{
return (obj->info.project.session_mgmt.sessioning_method);
}
return AB_SESSIONING_UNDEF;
}
int
obj_set_cancel_button(ABObj obj, BOOL has_button)
{
verify_for_write(obj);
if (!obj_is_message(obj))
return -1;
obj->info.message.cancel_button = has_button;
return 0;
}
int
obj_set_help_button(ABObj obj, BOOL has_button)
{
verify_for_write(obj);
if (!obj_is_message(obj))
return -1;
obj->info.message.help_button = has_button;
return 0;
}
obj_set_tooltalk_level(ABObj obj, AB_TOOLTALK_LEVEL tt_level)
{
verify_for_write(obj);
if (obj_is_project(obj))
{
return (obj->info.project.tooltalk.level = tt_level);
}
return ERR_BAD_PARAM1;
}
AB_TOOLTALK_LEVEL
obj_get_tooltalk_level( ABObj obj)
{
verify_for_read(obj);
if (obj_is_project(obj))
{
return (obj->info.project.tooltalk.level);
}
return AB_TOOLTALK_UNDEF;
}
int
obj_set_pane_min( ABObj obj, int val)
{
verify_for_write(obj);
if (!obj_is_pane(obj) && !obj_is_layers(obj))
return -1;
if (obj_is_text_pane(obj))
obj->info.text.pane_min = val;
if (obj_is_term_pane(obj))
obj->info.term.pane_min = val;
if (obj_is_drawing_area(obj))
obj->info.drawing_area.pane_min = val;
if (obj_is_container(obj))
obj->info.container.pane_min = val;
if (obj_is_layers(obj))
obj->info.layer.pane_min = val;
return 0;
}
int
obj_get_pane_min( ABObj obj)
{
verify_for_read(obj);
if (!obj_is_pane(obj) && !obj_is_layers(obj))
return -1;
if (obj_is_text_pane(obj))
return (obj->info.text.pane_min);
if (obj_is_term_pane(obj))
return (obj->info.term.pane_min);
if (obj_is_drawing_area(obj))
return (obj->info.drawing_area.pane_min);
if (obj_is_container(obj))
return (obj->info.container.pane_min);
if (obj_is_layers(obj))
return (obj->info.layer.pane_min);
}
int
obj_set_pane_max( ABObj obj, int val)
{
verify_for_write(obj);
if (!obj_is_pane(obj) && !obj_is_layers(obj))
return -1;
if (obj_is_text_pane(obj))
obj->info.text.pane_max = val;
if (obj_is_term_pane(obj))
obj->info.term.pane_max = val;
if (obj_is_drawing_area(obj))
obj->info.drawing_area.pane_max = val;
if (obj_is_container(obj))
obj->info.container.pane_max = val;
if (obj_is_layers(obj))
obj->info.layer.pane_max = val;
return 0;
}
int
obj_get_pane_max( ABObj obj)
{
verify_for_read(obj);
if (!obj_is_pane(obj) && !obj_is_layers(obj))
return -1;
if (obj_is_text_pane(obj))
return (obj->info.text.pane_max);
if (obj_is_term_pane(obj))
return (obj->info.term.pane_max);
if (obj_is_drawing_area(obj))
return (obj->info.drawing_area.pane_max);
if (obj_is_container(obj))
return (obj->info.container.pane_max);
if (obj_is_layers(obj))
return (obj->info.layer.pane_max);
}
int
obj_set_i18n_enabled(ABObj obj, BOOL i18n_enabled)
{
verify_for_write(obj);
if (obj_is_project(obj))
{
obj->info.project.i18n.enabled = i18n_enabled;
return 0;
}
return ERR_BAD_PARAM1;
}
BOOL
obj_get_i18n_enabled( ABObj obj)
{
verify_for_read(obj);
if (obj_is_project(obj))
{
return(obj->info.project.i18n.enabled);
}
return FALSE;
}
int
obj_get_num_win_children( ABObj obj)
{
ABObj refObj = NULL;
AB_OBJ_REF_TYPE refType = AB_REF_UNDEF;
ABObjList refs = NULL;
void *voidRefType = NULL;
int numRefs = 0, i = 0;
int numWinChildren = 0;
verify_for_read(obj);
if (!obj_is_base_win(obj))
return ERR;
if ((refs = obj_get_refs_to(obj)) != NULL)
{
numRefs = objlist_get_num_objs(refs);
for (i = 0; i < numRefs; i++)
{
refObj = objlist_get_obj(refs, i, &voidRefType);
refType = (AB_OBJ_REF_TYPE)voidRefType;
if (refType == AB_REF_WIN_PARENT)
{
numWinChildren++;
}
}
objlist_destroy(refs);
}
return (numWinChildren);
}
int
obj_set_read_only(ABObj obj, BOOL is_read_only)
{
verify_for_write(obj);
if (is_read_only)
{
obj_set_impl_flags(obj, ObjFlagIsReadOnly);
}
else
{
obj_clear_impl_flags(obj, ObjFlagIsReadOnly);
}
return 0;
}
BOOL
obj_get_read_only(ABObj obj)
{
verify_for_read(obj);
return obj_has_impl_flags(obj, ObjFlagIsReadOnly);
}
STRING
obj_get_func_help_location(ABObj obj)
{
verify_for_read(obj);
if (obj_is_action(obj))
{
return (istr_string(obj->info.action.location));
}
member_error(obj, "func_help_location");
return NULL;
}
int
obj_set_func_help_location(ABObj obj, STRING location)
{
verify_for_write(obj);
if (!(obj_is_action(obj) &&
(obj->info.action.func_type == AB_FUNC_HELP_VOLUME)))
{
member_error(obj, "func_help_location");
return -1;
}
istr_destroy(obj->info.action.location);
obj->info.action.location = istr_create(location);
return 0;
}
STRING
obj_get_func_help_volume(ABObj obj)
{
verify_for_read(obj);
if (obj_is_action(obj))
{
return (istr_string(obj->info.action.volume_id));
}
member_error(obj, "func_help_volume");
return NULL;
}
int
obj_set_func_help_volume(ABObj obj, STRING volume)
{
verify_for_write(obj);
if (!(obj_is_action(obj) &&
(obj->info.action.func_type == AB_FUNC_HELP_VOLUME)))
{
member_error(obj, "func_help_volume");
return -1;
}
istr_destroy(obj->info.action.volume_id);
obj->info.action.volume_id = istr_create(volume);
return 0;
}
/**************************************************************************
**************************************************************************
*** ***
*** ***
*** Drag and Drop ***
*** ***
*** dnd flags: ***
*** bit 0 -> drag enabled ***
*** bit 1 -> drag to root allowed ***
*** bits 2-4 -> drag ops ***
*** bits 5-8 -> drag types ***
*** bit 9 -> drop enabled ***
*** bits 10-12 -> drop ops ***
*** bits 13-16 -> drop types ***
*** ***
**************************************************************************
**************************************************************************/
#define ObjDndFlagDragEnabled (((unsigned)0x0001))
#define ObjDndFlagDragToRootOK (((unsigned)0x0001)<<1)
#define ObjDndFlagDragOpsFBIT (2) /* first bit */
#define ObjDndFlagDragOpsNBITS (3) /* num bits */
#define ObjDndFlagDragTypesFBIT (5) /* first bit */
#define ObjDndFlagDragTypesNBITS (4) /* num bits */
#define ObjDndFlagDropEnabled (((unsigned)0x0001)<<9)
#define ObjDndFlagDropOpsFBIT (10) /* first bit */
#define ObjDndFlagDropOpsNBITS (3) /* num bits */
#define ObjDndFlagDropTypesFBIT (13) /* first bit */
#define ObjDndFlagDropTypesNBITS (4) /* num bits */
#define ObjDndFlagDropOnChildOK (((unsigned)0x0001)<<17)
int
obj_set_drag_cursor(ABObj obj, STRING filename)
{
verify_for_write(obj);
istr_destroy(obj->drag_cursor);
obj->drag_cursor = istr_create(filename);
return 0;
}
STRING
obj_get_drag_cursor(ABObj obj)
{
verify_for_read(obj);
return istr_string(obj->drag_cursor);
}
int
obj_set_drag_cursor_mask(ABObj obj, STRING filename)
{
verify_for_write(obj);
istr_destroy(obj->drag_cursor_mask);
obj->drag_cursor_mask = istr_create(filename);
return 0;
}
STRING
obj_get_drag_cursor_mask(ABObj obj)
{
verify_for_read(obj);
return istr_string(obj->drag_cursor_mask);
}
int
obj_set_drag_initially_enabled(ABObj obj, BOOL enabled)
{
obj->impl_dnd_flags &= ~ObjDndFlagDragEnabled;
if (enabled)
{
obj->impl_dnd_flags |= ObjDndFlagDragEnabled;
}
return 0;
}
BOOL
obj_get_drag_initially_enabled(ABObj obj)
{
return ((obj->impl_dnd_flags & ObjDndFlagDragEnabled) != 0);
}
int
obj_set_drag_to_root_allowed(ABObj obj, BOOL allowed)
{
obj->impl_dnd_flags &= ~ObjDndFlagDragToRootOK;
if (allowed)
{
obj->impl_dnd_flags |= ObjDndFlagDragToRootOK;
}
return 0;
}
BOOL
obj_get_drag_to_root_allowed(ABObj obj)
{
return ((obj->impl_dnd_flags & ObjDndFlagDragToRootOK) != 0);
}
int
obj_set_drag_ops(ABObj obj, BYTE dragOps)
{
obj->impl_dnd_flags &= ~(0x07U<<ObjDndFlagDragOpsFBIT);
obj->impl_dnd_flags |= ((dragOps & 0x07)<<ObjDndFlagDragOpsFBIT);
return 0;
}
BYTE
obj_get_drag_ops(ABObj obj)
{
return (BYTE)((obj->impl_dnd_flags >> ObjDndFlagDragOpsFBIT) & 0x07);
}
int
obj_set_drag_types(ABObj obj, BYTE dragTypes)
{
obj->impl_dnd_flags &= ~(0x0fU<<ObjDndFlagDragTypesFBIT);
obj->impl_dnd_flags |= ((dragTypes & 0x0f) << ObjDndFlagDragTypesFBIT);
return 0;
}
BYTE
obj_get_drag_types(ABObj obj)
{
return (BYTE)((obj->impl_dnd_flags >> ObjDndFlagDragTypesFBIT) & 0x0f);
}
int
obj_set_drop_initially_enabled(ABObj obj, BOOL enabled)
{
obj->impl_dnd_flags &= ~ObjDndFlagDropEnabled;
if (enabled)
{
obj->impl_dnd_flags |= ObjDndFlagDropEnabled;
}
return 0;
}
BOOL
obj_get_drop_initially_enabled(ABObj obj)
{
return ((obj->impl_dnd_flags & ObjDndFlagDropEnabled) != 0);
}
int
obj_set_drop_ops(ABObj obj, BYTE dropOps)
{
obj->impl_dnd_flags &= ~(0x07U<<ObjDndFlagDropOpsFBIT);
obj->impl_dnd_flags |= ((dropOps & 0x07)<<ObjDndFlagDropOpsFBIT);
return 0;
}
BYTE
obj_get_drop_ops(ABObj obj)
{
return (BYTE)((obj->impl_dnd_flags >> ObjDndFlagDropOpsFBIT) & 0x07);
}
int
obj_set_drop_types(ABObj obj, BYTE dropTypes)
{
obj->impl_dnd_flags &= ~(0x0fU<<ObjDndFlagDropTypesFBIT);
obj->impl_dnd_flags |= ((dropTypes & 0x0f) << ObjDndFlagDropTypesFBIT);
return 0;
}
BYTE
obj_get_drop_types(ABObj obj)
{
return (BYTE)((obj->impl_dnd_flags >> ObjDndFlagDropTypesFBIT) & 0x0f);
}
int
obj_set_drop_on_children_is_allowed(ABObj obj, BOOL allowed)
{
obj->impl_dnd_flags &= ~ObjDndFlagDropOnChildOK;
if (allowed)
{
obj->impl_dnd_flags |= ObjDndFlagDropOnChildOK;
}
return 0;
}
BOOL
obj_drop_on_children_is_allowed(ABObj obj)
{
return ((obj->impl_dnd_flags & ObjDndFlagDropOnChildOK) != 0);
}