/*
 * Copyright 1990 by Baylor College of Medicine ALL RIGHTS RESERVED. 
 *
 * This program is subject to a license agreement between 
 * Baylor College of Medicine and MIT. Any use inconsistent with
 * said license and any use by persons other than the faculty, 
 * students and staff at MIT or any use on a computer not operated 
 * as part of the Athena Computing Environment (ACE) is expressly 
 * prohibited.
 */
#include <Xm/Xm.h>
#include <Xm/PushB.h>
#include <Xm/ScrolledW.h>
#include <Xm/ToggleB.h>
#include <X11/StringDefs.h>
#include <VList.h>
#include <SelRaster.h>

#include "VnsP.h"
#include "props.h"

static
void
modify_image(prop,obj)
	VnsProp prop;
	VnsObject *obj;
{
	Widget cm = XtNameToWidget(prop->vp,"*ImageViewport*Colormap");
	Widget lr = XtNameToWidget(prop->vp,"*ImageViewport*LowRes");
	Boolean create_cmap;
	Boolean low_res_sw;
	Colormap cmap;
	XImage *image;

	/* obtain the object information */
	XtVaGetValues(cm,
		XmNset,&create_cmap,
		NULL);
	XtVaGetValues(lr,
		XmNset,&low_res_sw,
		NULL);

	/* modify the object property structure */
	obj->info.data.i_info.create_cmap = create_cmap;
	obj->info.data.i_info.low_res_sw = low_res_sw;

	/* modify the database */
	srv_modify_object(ObjectToSrv(obj),obj->parent->parent->nid,obj->parent->pid,obj->oid,&obj->info);

	/* modify displayed image object */
	XtVaGetValues(obj->auxil.img.wd,
		XtNimage,&image,
		NULL);
	XDestroyImage(image);
	get_image_cmap(obj,&obj->auxil.img.img,&image,&cmap);
	XtVaSetValues(obj->auxil.img.wd,
		XtNimage,image,
		XtNcolormap,cmap,
		NULL);
	set_page_colormaps(obj->parent);
}

static
void
update_image(prop,obj)
	VnsProp prop;
	VnsObject *obj;
{
	Widget cm = XtNameToWidget(prop->vp,"*ImageViewport*Colormap");
	Widget lr = XtNameToWidget(prop->vp,"*ImageViewport*LowRes");

	XtVaSetValues(cm,
		XmNset,obj->info.data.i_info.create_cmap,
		NULL);
	XtVaSetValues(lr,
		XmNset,obj->info.data.i_info.low_res_sw,
		NULL);
}

static
void
add_image_vp(prop)
	VnsProp prop;
{
	XmString xm_str;
	Widget vp = prop->vp;
	Widget sw = XtVaCreateWidget("ImageViewport",xmScrolledWindowWidgetClass,vp,
		XmNscrollingPolicy,XmAUTOMATIC,
		XmNvisualPolicy,XmVARIABLE,
		XtNstretchHoriz,True,
		XtNstretchVert,True,
		NULL);
	Widget frm2 = XtVaCreateManagedWidget("PropertiesBox",vListWidgetClass,sw,
		XtNnumColumns,1,
		XtNnumRows,2,
		XtNborderWidth,0,
		XtNhSpacing,2,
		NULL);

	xm_str = XmStringCreateLtoR("Create Colormap",XmSTRING_DEFAULT_CHARSET);
	XtVaCreateManagedWidget("Colormap",xmToggleButtonWidgetClass,frm2,
		XmNlabelString,xm_str,
		NULL);
	XmStringFree(xm_str);

	xm_str = XmStringCreateLtoR("Low Res Switch",XmSTRING_DEFAULT_CHARSET);
	XtVaCreateManagedWidget("LowRes",xmToggleButtonWidgetClass,frm2,
		XmNlabelString,xm_str,
		NULL);
	XmStringFree(xm_str);
}

static
void
sel_image_props(w,prop)
	Widget w;
	VnsProp prop;
{
	Widget vp = XtNameToWidget(prop->vp,"*ImageViewport");

	VnsPropDisplay(vp);
}

static
void
add_image_button(prop)
	VnsProp prop;
{
	Widget buttons = prop->buttons;

	Widget params = XtVaCreateManagedWidget("Image Properties",xmPushButtonWidgetClass,buttons,
		NULL);
	XtAddCallback(params,XmNactivateCallback,sel_image_props,(XtPointer)prop);
}

init_image_props(vns)
	VnsContext *vns;
{
	VnsProp prop;

	prop = VnsPropCreate(vns,"Image Object",VNS_OBJECT,OT_IMAGE);
	add_image_button(prop);
	add_image_vp(prop);
	VnsPropAddUpdate(prop,update_image);
	VnsPropAddModify(prop,modify_image);
}
