#include <Xm/PanedW.h>
#include <Xm/Form.h>
#include <Xm/PushB.h>
#include <Xm/Separator.h>
#include "DiveSetupWindow.h"
#include "tiburon.h"

#define TIBURON_DIVENUMBER_DM "TIBURON.DIVE_NUMBER"
#define TIBURON_DIVENUMBER_LEN 25


DiveSetupWindow::DiveSetupWindow(const char *name)
  : FriendlyWindow(name)
{
  Widget mgr = XtVaCreateWidget(name, xmPanedWindowWidgetClass, 
				mainWindowWidget(), NULL);
  
  _diveNo = new DmStringText("diveNo", mgr, TIBURON_DIVENUMBER_DM,
			     TIBURON_DIVENUMBER_LEN, Aperiodic);

  _diveNo->show();
  
  XtCreateManagedWidget("separator", xmSeparatorWidgetClass, mgr, 
			NULL, 0);
  
  Widget actionMgr = XtVaCreateWidget("actionForm", xmFormWidgetClass, 
				      mgr, XmNfractionBase, 5, 
				      NULL);
  
  Widget ok = 
    XtVaCreateManagedWidget("ok", xmPushButtonWidgetClass, actionMgr,
			    XmNtopAttachment, XmATTACH_FORM,
			    XmNbottomAttachment, XmATTACH_FORM,
			    XmNleftAttachment, XmATTACH_POSITION,
			    XmNleftPosition, 1,
			    XmNrightAttachment, XmATTACH_POSITION,
			    XmNrightPosition, 2,
			    XmNshowAsDefault, True,
			    NULL);

  XtAddCallback(ok, XmNactivateCallback, &DiveSetupWindow::okCallback,
		(XtPointer )this);
  
  Widget cancel = 
    XtVaCreateManagedWidget("dismiss", xmPushButtonWidgetClass,
			    actionMgr,
			    XmNtopAttachment, XmATTACH_FORM,
			    XmNbottomAttachment, XmATTACH_FORM,
			    XmNleftAttachment, XmATTACH_POSITION,
			    XmNleftPosition, 3,
			    XmNrightAttachment, XmATTACH_POSITION,
			    XmNrightPosition, 4,
			    XmNshowAsDefault, True,
			    NULL);

  XtAddCallback(cancel, XmNactivateCallback, &DiveSetupWindow::cancelCallback,
		(XtPointer )this);

  XtManageChild(actionMgr);
  XtManageChild(mgr);
  addView(mgr);
}


void DiveSetupWindow::okCallback(Widget w, XtPointer clientData, 
				 XtPointer callData)
{
  DiveSetupWindow *obj = (DiveSetupWindow *)clientData;
  obj->_diveNo->writeValue();
}


void DiveSetupWindow::cancelCallback(Widget w, XtPointer clientData, 
				     XtPointer callData)
{
  DiveSetupWindow *obj = (DiveSetupWindow *)clientData;
  
  obj->hide();

  obj->_diveNo->updateGui();
}
