ROOT logo
// $Id: Spiritio.cxx 2348 2010-01-30 21:50:21Z matevz $

// Copyright (C) 1999-2008, Matevz Tadel. All rights reserved.
// This file is part of GLED, released under GNU General Public License version 2.
// For the licensing terms see $GLEDSYS/LICENSE or http://www.gnu.org/.

#include "Spiritio.h"
#include <Glasses/Camera.h>
#include <Glasses/TSPupilInfo.h>
#include "Spiritio.c7"

#include <Glasses/ZQueen.h>

// Spiritio

//______________________________________________________________________________
//
//

ClassImp(Spiritio);

//==============================================================================

UInt_t Spiritio::sDoubleClickTime = 300;

void Spiritio::_init()
{
  mEatNonBoundKeyEvents = false;
}

Spiritio::Spiritio(const Text_t* n, const Text_t* t) :
  ZNode(n, t)
{
  _init();
}

Spiritio::~Spiritio()
{
  for (vpKeyInfo_i i = mKeys.begin(); i != mKeys.end(); ++i)
    delete *i;
}

//==============================================================================

KeyHandling::KeyInfo&
Spiritio::RegisterKey(const TString& tag, const TString& desc,
		      KeyHandling::AKeyCallback* foo, Int_t uid)
{
  using namespace KeyHandling;

  KeyInfo* ki = new KeyInfo(tag, desc, foo, uid);
  ki->fIndex = mKeys.size();
  mKeys.push_back(ki);
  return *ki;
}

Int_t Spiritio::FindKey(const TString& tag)
{
  for (vpKeyInfo_i i = mKeys.begin(); i != mKeys.end(); ++i)
  {
    if ((*i)->fKeyTag == tag)
      return (*i)->fIndex;
  }
  return -1;
}

//==============================================================================

void Spiritio::Activate()
{
  bActive = true;
  Stamp(FID());
}

void Spiritio::Deactivate()
{
  // Releases all keys by looping over key-infos and calling the key-up
  // callback the necessary number of times.
  // PRQN_release_keys ray is emitted to also notify the GL renderers.

  if (!bActive)
    return;

  bActive = false;
  Stamp(FID());

  ReleaseAllKeys();
}

//==============================================================================

void Spiritio::HandleKey(Int_t key_idx, Bool_t downp, UInt_t time_elapsed)
{
  if (bActive)
  {
    mKeys[key_idx]->fCallback->Invoke(this, key_idx, downp, time_elapsed);
  }
}

//==============================================================================

void Spiritio::ReleaseAllKeys()
{
  for (vpKeyInfo_i i = mKeys.begin(); i != mKeys.end(); ++i)
  {
    while ((*i)->fDownCount)
    {
      (*i)->fCallback->Invoke(this, (*i)->fIndex, false, 0);
    }
  }

  if (mQueen && mSaturn->AcceptsRays())
  {
    auto_ptr<Ray> ray
      (Ray::PtrCtor(this, PRQN_release_keys, mTimeStamp, FID()));
    mQueen->EmitRay(ray);
  }
}
 Spiritio.cxx:1
 Spiritio.cxx:2
 Spiritio.cxx:3
 Spiritio.cxx:4
 Spiritio.cxx:5
 Spiritio.cxx:6
 Spiritio.cxx:7
 Spiritio.cxx:8
 Spiritio.cxx:9
 Spiritio.cxx:10
 Spiritio.cxx:11
 Spiritio.cxx:12
 Spiritio.cxx:13
 Spiritio.cxx:14
 Spiritio.cxx:15
 Spiritio.cxx:16
 Spiritio.cxx:17
 Spiritio.cxx:18
 Spiritio.cxx:19
 Spiritio.cxx:20
 Spiritio.cxx:21
 Spiritio.cxx:22
 Spiritio.cxx:23
 Spiritio.cxx:24
 Spiritio.cxx:25
 Spiritio.cxx:26
 Spiritio.cxx:27
 Spiritio.cxx:28
 Spiritio.cxx:29
 Spiritio.cxx:30
 Spiritio.cxx:31
 Spiritio.cxx:32
 Spiritio.cxx:33
 Spiritio.cxx:34
 Spiritio.cxx:35
 Spiritio.cxx:36
 Spiritio.cxx:37
 Spiritio.cxx:38
 Spiritio.cxx:39
 Spiritio.cxx:40
 Spiritio.cxx:41
 Spiritio.cxx:42
 Spiritio.cxx:43
 Spiritio.cxx:44
 Spiritio.cxx:45
 Spiritio.cxx:46
 Spiritio.cxx:47
 Spiritio.cxx:48
 Spiritio.cxx:49
 Spiritio.cxx:50
 Spiritio.cxx:51
 Spiritio.cxx:52
 Spiritio.cxx:53
 Spiritio.cxx:54
 Spiritio.cxx:55
 Spiritio.cxx:56
 Spiritio.cxx:57
 Spiritio.cxx:58
 Spiritio.cxx:59
 Spiritio.cxx:60
 Spiritio.cxx:61
 Spiritio.cxx:62
 Spiritio.cxx:63
 Spiritio.cxx:64
 Spiritio.cxx:65
 Spiritio.cxx:66
 Spiritio.cxx:67
 Spiritio.cxx:68
 Spiritio.cxx:69
 Spiritio.cxx:70
 Spiritio.cxx:71
 Spiritio.cxx:72
 Spiritio.cxx:73
 Spiritio.cxx:74
 Spiritio.cxx:75
 Spiritio.cxx:76
 Spiritio.cxx:77
 Spiritio.cxx:78
 Spiritio.cxx:79
 Spiritio.cxx:80
 Spiritio.cxx:81
 Spiritio.cxx:82
 Spiritio.cxx:83
 Spiritio.cxx:84
 Spiritio.cxx:85
 Spiritio.cxx:86
 Spiritio.cxx:87
 Spiritio.cxx:88
 Spiritio.cxx:89
 Spiritio.cxx:90
 Spiritio.cxx:91
 Spiritio.cxx:92
 Spiritio.cxx:93
 Spiritio.cxx:94
 Spiritio.cxx:95
 Spiritio.cxx:96
 Spiritio.cxx:97
 Spiritio.cxx:98
 Spiritio.cxx:99
 Spiritio.cxx:100
 Spiritio.cxx:101
 Spiritio.cxx:102
 Spiritio.cxx:103
 Spiritio.cxx:104
 Spiritio.cxx:105
 Spiritio.cxx:106
 Spiritio.cxx:107
 Spiritio.cxx:108
 Spiritio.cxx:109
 Spiritio.cxx:110
 Spiritio.cxx:111
 Spiritio.cxx:112
 Spiritio.cxx:113
 Spiritio.cxx:114
 Spiritio.cxx:115
 Spiritio.cxx:116
 Spiritio.cxx:117
 Spiritio.cxx:118