#ifndef _IVIEWDEVICEGRABBER_H
#define _IVIEWDEVICEGRABBER_H
#include "Iview.h"
#include "unistd.h"

class IviewMonitor;
class IviewControl;


class IviewDeviceGrabber
{
  public:

  enum State
  {
    Unknown, Unused, Used, ExternallyUsed
  };
  
  IviewDeviceGrabber(IviewDevice device, 
		     IviewControl *iviewControl, 
		     IviewMonitor *monitor,
		     pid_t ownerPid = 0);

  ~IviewDeviceGrabber();
  
  /* Determine current state and update user-interface. This function could be 
     called periodically (e.g., via an X-timer) */
  void getIviewDeviceState();
  
  // Return current state
  State iviewDeviceState()
  {
    return _state;
  }
  
  IviewDevice iviewDevice()
  {
    return _device;
  }
  
  protected:

  // Set user-interface appearance based on specified state. 
  // Return 0 on success, -1 on error
  virtual int displayIviewDeviceState(State state) = 0;

  // Current state
  State _state;

  // Pid of IviewControl owner
  pid_t _ownerPid;
  
  IviewDevice _device;

  IviewControl *_control;
  IviewMonitor *_monitor;
};


#endif




