#ifndef _MAINCAMERADIALOG_H
#define _MAINCAMERADIALOG_H

#include <Vk/VkApp.h>
#include <Vk/VkSimpleWindow.h>
#include <Vk/VkRadioBox.h>
#include <Vk/VkOptionMenu.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/VkGenericDialog.h>
#include "DmGuiObject.h"

class MainCamera;

class MainCameraSetup : public DmGuiObject
{
  public:

  typedef enum
  {
    HighAutoGain, LowAutoGain, ManualGain

  } GainMode;
  
  MainCameraSetup(const char *name, Widget parent, MainCamera *mainCamera);
  ~MainCameraSetup();
  
  virtual const char *className()
  {
    return "MainCameraSetup";
  }
  
  virtual void updateGui(DM_Item handle = 0);
  void writeValues();
  
  static const int LowGain;
  static const int MedGain;
  static const int HighGain;
  static const int AutoIris;
  static const int ManualIris;
  static const int ColorBarsOn;
  static const int ColorBarsOff;
  
  protected:
  Widget _autoIris;
  Widget _colorBars;
  Widget _manualGainMode;
  Widget _manualBalanceMgr;
  Widget _autoBalanceMgr;
  Widget _redGain;
  Widget _blueGain;
  Widget _redPedestal;
  Widget _bluePedestal;
  Widget _totalPedestal;
  Widget _autoWhite;
  Widget _autoBlack;
  Widget _holdAuto;
  Widget _manualBalanceMode;
  
  VkRadioBox *_gainMode;
  VkRadioBox *_gain;
  VkRadioBox *_sharpness;
  VkRadioBox *_balanceMode;

  MainCamera *_mainCamera;
  DmInt16Object *_dmIrisMode;
  DmInt16Object *_dmGain;
  DmInt16Object *_dmGainMode;
  DmBooleanObject *_dmColorBars;

  Boolean _externalChange;
  
  void notImplemented();
  
  VkOptionMenu *_shutter;
  VkOptionMenu *_scene;
  
  static VkMenuDesc _shutterMenuDesc[];
  static VkMenuDesc _sceneMenuDesc[];

  private:

  static void gainModeCallback(Widget w, 
			       void *clientData, void *callData);

  static void gainSelectCallback(Widget w, 
				 void *clientData, void *callData);
  
  static void valueChangedCallback(Widget w, 
				   XtPointer clientData, 
				   XtPointer callData);

  static void sharpSelectCallback(Widget w, 
				  void *clientData, void *callData);

  static void balanceModeSelectCallback(Widget w, 
					void *clientData, void *callData);


  static void autoCallback(Widget w, 
			   void *clientData, void *callData);

  static void balanceAdjustCallback(Widget w, 
				    void *clientData, void *callData);

  static void shutterCallback(Widget w, 
			      void *clientData, void *callData);

  static void sceneCallback(Widget w, 
			      void *clientData, void *callData);
};


class MainCameraDialog : public VkGenericDialog
{
  public:
  MainCameraDialog(const char *name, MainCamera *mainCamera)
    : VkGenericDialog(name)
  {
    _mainCamera = mainCamera;
    _allowMultipleDialogs = False;
  }
  
  MainCameraSetup *setup;

  protected:
  virtual Widget createDialog(Widget parent);
  MainCamera *_mainCamera;
};


#endif
