static char DmWindow_id[] = "$Header: /usr/tiburon/unix/gui/tmacs/RCS/DmWindow.cc,v 1.2 1996/07/22 10:41:58 oreilly Exp $";


/*
$Log: DmWindow.cc,v $
Revision 1.2  1996/07/22 10:41:58  oreilly
First external release

*/
#include <Xm/RowColumn.h>
#include <Xm/Separator.h>
#include <Xm/Form.h>
#include <Xm/PushB.h>
#include <ctype.h>
#include <Vk/VkErrorDialog.h>
#include <Vk/VkInfoDialog.h>
#include <stdio.h>
#include "DmWindow.h"
#include "stringUtils.h"


DmWindow::DmWindow(const char *name) : 
  VkSimpleWindow(name)
{
  Widget mgr = XtCreateWidget("mgr", xmRowColumnWidgetClass, 
			      mainWindowWidget(), NULL, 0);

  Widget form = XtVaCreateWidget("form", xmFormWidgetClass, mgr, NULL);
  

  _selectedItem = new LabeledText(form, "itemName", XmHORIZONTAL,
				  "itemName"); 

  Widget properties = 
    XtVaCreateManagedWidget("itemProperties",
                            xmPushButtonWidgetClass, form,
                            XmNtopAttachment, XmATTACH_FORM,
                            XmNleftAttachment, XmATTACH_WIDGET,
                            XmNleftWidget, _selectedItem->baseWidget(),
                            NULL);

  XtAddCallback(properties, XmNactivateCallback,
                &DmWindow::propertiesButtonCallback,
                (XtPointer )this);
			    
  XtManageChild(form);

  Widget sep = XtCreateManagedWidget("separator", xmSeparatorWidgetClass,
				     mgr, NULL, 0);
  
  _readWrite = new TextDmGui("values", mgr);
  XtManageChild(_readWrite->baseWidget());

  addView(mgr);

  _propWin = new DmPropertiesWindow("Dm Properties");
  _propWin->hide();

}


DmWindow::~DmWindow()
{
}


void DmWindow::propertiesButtonCallback(Widget w, XtPointer clientData,
					XtPointer callData)
{
  DmWindow *obj = (DmWindow *)clientData;
  char *newName = obj->_selectedItem->get();
  trim(newName);
  
  if (allBlanks((const char *)newName))
  {
    theErrorDialog->postAndWait("Must supply DM item name");
    return;
  }

  char errorBuf[errorMsgSize];
  char buf[512];
  DmObject *dmObj = obj->_readWrite->getDmObject(); 
  
  if (dmObj == NULL || strcmp(newName, dmObj->getName()))
  {
    if (obj->_readWrite->createDmObject(newName, errorBuf) != 0)
    {
      theErrorDialog->postAndWait(errorBuf);
      return;
    }
  }

  obj->_propWin->properties->setTextDmGui(obj->_readWrite);

  /* Update properties window */
  obj->_propWin->properties->updateGui();
  obj->showProperties();
}


DmPropertiesWindow::DmPropertiesWindow(const char *name) : 
   VkSimpleWindow(name)
{
  Widget mgr = XtCreateWidget("mgr", xmRowColumnWidgetClass, 
			      mainWindowWidget(), NULL, 0);
  
  properties = new TextDmGuiProperties("properties", mgr);
  
  XtManageChild(properties->baseWidget());

  Widget sep = XtCreateManagedWidget("commandSep", xmSeparatorWidgetClass,
				     mgr, NULL, 0);

  Widget actionForm = XtVaCreateWidget("actionForm", xmFormWidgetClass,
				       mgr, XmNfractionBase, 5,
				       NULL);

  _ok = XtVaCreateManagedWidget("ok", xmPushButtonWidgetClass,
				actionForm,
				XmNtopAttachment, XmATTACH_FORM,
				XmNbottomAttachment, XmATTACH_FORM,
				XmNleftAttachment, XmATTACH_POSITION,
				XmNleftPosition, 1,
				XmNrightAttachment, XmATTACH_POSITION,
				XmNrightPosition, 2,
				XmNshowAsDefault, True,
				NULL);

  _cancel = XtVaCreateManagedWidget("cancel", xmPushButtonWidgetClass,
				    actionForm,
				    XmNtopAttachment, XmATTACH_FORM,
				    XmNbottomAttachment, XmATTACH_FORM,
				    XmNleftAttachment, XmATTACH_POSITION,
				    XmNleftPosition, 3,
				    XmNrightAttachment, XmATTACH_POSITION,
				    XmNrightPosition, 4,
				    XmNshowAsDefault, True,
				    NULL);

  XtAddCallback(_ok, XmNactivateCallback, 
		&DmPropertiesWindow::actionCallback, (XtPointer )this);

  XtAddCallback(_cancel, XmNactivateCallback, 
		&DmPropertiesWindow::actionCallback, (XtPointer )this);

  XtManageChild(actionForm);
  
  addView(mgr);
}


DmPropertiesWindow::~DmPropertiesWindow()
{
  // Empty
}


void DmPropertiesWindow::actionCallback(Widget w, 
					XtPointer clientData,
					XtPointer callData)
{
  DmPropertiesWindow *obj = (DmPropertiesWindow *)clientData;
  if (w == obj->_cancel)
  {
    obj->hide();
    return;
  }

  /* Update DM item properties from user input */
  obj->properties->updateTextDmGui();

  obj->properties->updateGui();
}






