#include <stdlib.h>
#include <Xm/Form.h>
#include <Xm/RowColumn.h>
#include <Vk/VkApp.h>
#include "DmViewer.h"
#include "DmStatus.h"

/* Have to undef OK (which is #define'd by VxWorks stuff), since
VkGenericDialog.h has an enum symbol called "OK" */
#undef OK

#include <Vk/VkErrorDialog.h>


#define DMVIEWER_ENV_NAME "DMVIEWER_DIR"

Widget CreatedmForm(Widget);

// C function prototypes
extern "C" 
{
  void initDm(void);
  void initRov(void);
};

extern Widget toplevel;
extern Widget topFormW;
extern Widget dmFormW;
extern XtAppContext appcontext;

DmViewer::DmViewer(const char *name, Widget parent)
  : VkComponent(name)
{
  _baseWidget = XtVaCreateWidget(name, xmRowColumnWidgetClass, parent, 
				 XmNorientation, XmVERTICAL,
				 NULL);

  installDestroyHandler();

  _baseForm = XtVaCreateWidget(name, xmFormWidgetClass, _baseWidget, NULL);

  _dmForm = CreatedmForm(_baseForm);

  toplevel = theApplication->baseWidget();

  // Set some "globals" needed by old C code
  topFormW = _baseForm;
  dmFormW = _dmForm;
  appcontext = theApplication->appContext();

  initRov();
  initDm();

  XtManageChild(_dmForm);
  XtManageChild(_baseForm);

  // Get name of configuration directory from environment
  char *envDir;
  if ((envDir = getenv(DMVIEWER_ENV_NAME)) == 0) {
    char errorBuf[512];
    sprintf(errorBuf, "Configuration directory variable %s not set; using ./",
	    DMVIEWER_ENV_NAME);

    theErrorDialog->postAndWait(errorBuf);
    envDir = "./";
  }

  DmStatus *dmStatus = 
    new DmStatus("dmStatus", 
		 _baseWidget,
		 envDir,
		 "/usr/tiburon/logs"); 

  XtVaSetValues(dmStatus->baseWidget(),
		NULL);


  dmStatus->show();
}


DmViewer::~DmViewer()
{
}

DmViewerWindow::DmViewerWindow(const char *name)
  : VkSimpleWindow(name)
{
  DmViewer *dmViewer = new DmViewer("dmViewer", mainWindowWidget());
  dmViewer->show();
  addView(dmViewer);

}


DmViewerWindow::~DmViewerWindow()
{
}
