
static char PowerPage_id[] = "$Header: PowerPage.cc,v 1.4 97/10/03 09:32:08 oreilly Exp $";

/*
$Log:	PowerPage.cc,v $
Revision 1.4  97/10/03  09:32:08  09:32:08  oreilly (Thomas C. O'Reilly)
*** empty log message ***

Revision 1.3  97/08/12  14:51:28  14:51:28  oreilly (Thomas C. O'Reilly)
Added Regen screen

Revision 1.2  97/03/20  12:30:33  12:30:33  oreilly (Thomas C. O'Reilly)
..

Revision 1.1  96/10/28  09:12:37  09:12:37  oreilly (Thomas C. O'Reilly)
Initial revision

*/
#include <Xm/Form.h>
#include <Xm/PushB.h>
#include <Xm/Separator.h>
#include "PowerPage.h"
#include "TiburonApp.h"
#include "ViewButtons.h"
#include "AcPdu.h"
#include "Regen.h"

XtResource PowerPage::_resources[] = 
{
  {
    "powerButtonHeight",
    "PowerButtonHeight",
    XmRInt,
    sizeof(int),
    XtOffset(PowerPage *, _powerButtonHeight),
    XmRString, 
    "50"
  },

  {
    "powerButtonWidth",
    "PowerButtonWidth",
    XmRInt,
    sizeof(int),
    XtOffset(PowerPage *, _powerButtonWidth),
    XmRString, 
    "150"
  },

  {
    "feedThickness",
    "FeedThickness",
    XmRInt,
    sizeof(int),
    XtOffset(PowerPage *, _feedThickness),
    XmRString, 
    "12"
  }
};


PowerPage::PowerPage(const char *name, Widget parent)
  : VkComponent(name)
{
  _baseWidget = XtVaCreateWidget(name, xmFormWidgetClass, parent, NULL);
  installDestroyHandler();
  getResources(_resources, XtNumber(_resources));

  VehicleComponent *vehicleBase = 
    ((TiburonApp *)theApplication)->vehicleConfig->vehicleBase;
  
  // Find buses (should be child of base)
  VehicleComponent **child;
  SListIter<VehicleComponent *> children(vehicleBase->childList);
  
  children.reset();
  int nBus = 0;
  
  ViewButtons *viewButtons = new ViewButtons("views", _baseWidget);
  XtVaSetValues(viewButtons->baseWidget(),
		XmNorientation, XmHORIZONTAL,
		XmNtopAttachment, XmATTACH_FORM,
		XmNleftAttachment, XmATTACH_FORM,
		XmNrightAttachment, XmATTACH_FORM,
		NULL);
  
  Layout *layout = new Layout();
  Widget viewButton;
  View *view;
  
  while (child = children.next())
  {
    if ((*child)->type() == VehicleComponent::BusType)
    {
      char viewName[100];
      sprintf(viewName, "%sView", (*child)->name());
      view = new View(viewName, _baseWidget);
      XtVaSetValues(view->baseWidget(),
		    XmNtopAttachment, XmATTACH_WIDGET,
		    XmNtopWidget, viewButtons->baseWidget(),
		    XmNbottomAttachment, XmATTACH_FORM,
		    XmNleftAttachment, XmATTACH_FORM,
		    XmNrightAttachment, XmATTACH_FORM,
		    NULL);
      
      viewButton = viewButtons->addView(view);
      
      XmString xmstr = XmStringCreateSimple((char *)(*child)->name());
      XtVaSetValues(viewButton, XmNlabelString, xmstr, NULL);
      XmStringFree(xmstr);

      nBus++;
      
      char busName[100];
      sprintf(busName, "bus%02d", nBus);
      PowerBus *bus = new PowerBus(busName, view->baseWidget(), 
				   (Bus *)(*child),
				   _powerButtonWidth, _powerButtonHeight);
      
      layout->reset();
      layout->attachToEdge(Top);
      layout->attachToEdge(Bottom);
      layout->attachToEdge(Left);
      layout->attachToEdge(Right);
      view->add(bus->baseWidget(), layout);
      bus->show();
      _buses.add(&bus);
    }
  }

  view = new View("acPduView", _baseWidget);
  XtVaSetValues(view->baseWidget(),
		XmNtopAttachment, XmATTACH_WIDGET,
		XmNtopWidget, viewButtons->baseWidget(),
		XmNbottomAttachment, XmATTACH_FORM,
		XmNleftAttachment, XmATTACH_FORM,
		XmNrightAttachment, XmATTACH_FORM,
		NULL);
      
  AcPdu *acPdu = new AcPdu("acPdu", view->baseWidget());

  layout->reset();
  layout->attachToEdge(Top);
  layout->attachToEdge(Bottom);
  layout->attachToEdge(Left);
  layout->attachToEdge(Right);
  view->add(acPdu->baseWidget(), layout);
  acPdu->show();
  
  viewButton = viewButtons->addView(view);

  view = new View("regenView", _baseWidget);
  XtVaSetValues(view->baseWidget(),
		XmNtopAttachment, XmATTACH_WIDGET,
		XmNtopWidget, viewButtons->baseWidget(),
		XmNbottomAttachment, XmATTACH_FORM,
		XmNleftAttachment, XmATTACH_FORM,
		XmNrightAttachment, XmATTACH_FORM,
		NULL);
      
  RegenPage *regenPage = new RegenPage("regenPage", view->baseWidget());

  layout->reset();
  layout->attachToEdge(Top);
  layout->attachToEdge(Bottom);
  layout->attachToEdge(Left);
  view->add(regenPage->baseWidget(), layout);
  regenPage->show();
  
  viewButton = viewButtons->addView(view);

  viewButtons->setValue(0, True);
  viewButtons->show();
}



PowerPage::~PowerPage()
{
  PowerBus *bus;
  for (int i = 0; i < _buses.size(); i++)
  {
    _buses.get(i, &bus);
    delete bus;
  }
}
