home *** CD-ROM | disk | FTP | other *** search
/ Virtual Reality Zone / VRZONE.ISO / mac / PC / PCGLOVE / GLOVE / OBJGLV.ZIP / SRC / WINGEST.CPP < prev    next >
C/C++ Source or Header  |  1993-05-11  |  3KB  |  130 lines

  1. //
  2. // WinGest.cpp:
  3. //    Implementation of classes TGestureDialog and winGestureActor.
  4. //    Example use of Object Glove and Court Jesture.
  5. //
  6. // Purpose:
  7. //    Outputs the names of Gestures into a Windows window (actually
  8. //    a dialog box).
  9. //
  10. // Compatibility:
  11. //    Windows only!
  12. //
  13. // Copyright 1993   Mark Thomas Pflaging
  14. //
  15. // Date:    3/22/93 (Release 3.0)
  16. //
  17. #include "wingest.hpp"
  18. #include "winglove.hpp"
  19. #include <mmsystem.h>
  20. #include <strng.h>
  21. #include <assoc.h>
  22.  
  23. size_t InstanceCounter<NamedGestSet>::total = 0;
  24. HashTable * winNameGest::table;
  25.  
  26. TGestureDialog::TGestureDialog(PTWindowsObject AParent, int ResourceID, PTModule AModule, winGestureActor * where_arg) :
  27.         where(where_arg), TDialog(AParent, ID_GLOVE_GEST_1 + ResourceID * 100, AModule)
  28. {
  29.     for (int i = 0; i < NUM_GEST_SPOTS; i ++) {
  30.         Spots[i] = new TStatic(this, ID_GS_1 + (ResourceID * 100) + i, 25);
  31.     }
  32. }
  33.  
  34. TGestureDialog::~TGestureDialog()
  35. {
  36.     for (int i = 0; i < NUM_GEST_SPOTS; i ++) delete Spots[i];
  37. }
  38.  
  39.  
  40. void TGestureDialog::draw(char ** strings)
  41. {
  42.     for (int i = 0; i < NUM_GEST_SPOTS; i ++) {
  43.         (Spots[i])->SetText(strings[i]);
  44.     }
  45. }
  46.  
  47. void TGestureDialog::infoDisplay(char * name, Boolean onOrOff)
  48. {
  49.     char **strings = where->infoDisplay(name, onOrOff);
  50.         draw(strings);
  51. }
  52.  
  53. char ** winGestureActor::infoDisplay(char * name, Boolean onOrOff)
  54. {
  55.     // Make a kind of scrolling display
  56.     char * temp = new char[80], * temp2;
  57.     strcpy(temp, name);
  58.     strcat(temp, (onOrOff ? "   On" : "  Off"));
  59.     temp2 = strings[0];
  60.     for (int i = 1; (i < NUM_GEST_SPOTS); i ++) {
  61.         if (i != 0) strings[i-1] = strings[i];
  62.     }
  63.     if (strlen(temp2)) {
  64.         delete temp2;
  65.     }
  66.     strings[NUM_GEST_SPOTS - 1] = temp;
  67.         return strings;
  68. }
  69.  
  70. void winNameGest::Register(Boolean onOrOff)
  71. {
  72.     if (onOrOff) {
  73.         Association key(
  74.             *(new String(getName())),
  75.             *(new String(getName()))
  76.             );
  77.         Association & found = (Association &)(table->findMember(key));
  78.         if (found != NOOBJECT) {
  79.             sndPlaySound((const char *)((String &)(found.value())), SND_ASYNC);
  80.         }
  81.     }
  82. }
  83.  
  84. Boolean winGestureActor::addSound(Key & which, void * gset)
  85. {
  86.     winGestureActor & set = *((winGestureActor *)gset);
  87.     set.HashTable::add(*(new Association(
  88.             *(new String(which.getName())),
  89.             *(new String(which.valueOf()))
  90.     )));
  91.     return True;
  92. }
  93.  
  94. void winGestureActor::InitTable(InitFile & ini, char * gest_section, char * sound_section)
  95. {
  96.     Section * sndlist = ini.find(sound_section);
  97.     if (sndlist) {
  98.         sndlist->doAll(addSound, this);
  99.     }
  100.     CntNamedGestAct::Init(ini, gest_section);
  101. }
  102.  
  103. void winGestureActor::displayDataBox()
  104. {
  105.     if (DataPlace1) return;
  106.     DataPlace1 = new TGestureDialog(where, getInstance(), where->GetModule(), this);
  107.     (where->GetModule())->MakeWindow(DataPlace1);
  108.     DataPlace1->draw(strings);
  109. }
  110.  
  111. void winGestureActor::closeDataBox()
  112. {
  113.     DataPlace1->CloseWindow();
  114.     DataPlace1 = NULL;
  115. }
  116.  
  117. winGestureActor::winGestureActor(InitFile & ini, char * gest_section, char * sound_section, TDemoWindow & arg) :
  118.     HashTable(MAX_NUM_SOUNDS), where(&arg), DataPlace1(NULL)
  119. {
  120.     InitTable(ini, gest_section, sound_section);
  121.     for (int i = 0; i < NUM_GEST_SPOTS; i ++) strings[i] = "";
  122. }
  123.  
  124. winGestureActor::winGestureActor(InitFile & ini, char * gest_section, char * sound_section) :
  125.         HashTable(MAX_NUM_SOUNDS), DataPlace1(NULL)
  126. {
  127.     InitTable(ini, gest_section, sound_section);
  128.     for (int i = 0; i < NUM_GEST_SPOTS; i ++) strings[i] = "";
  129. }
  130.