home *** CD-ROM | disk | FTP | other *** search
/ Virtual Reality Zone / VRZONE.ISO / mac / PC / PCGLOVE / GLOVE / OBJGLV.ZIP / SRC / WINGLOVE.CPP < prev   
C/C++ Source or Header  |  1993-05-12  |  8KB  |  303 lines

  1. //
  2. // WinGlove.cpp:
  3. //    Implementation of classes TDemoWindow and TGloveApp.
  4. //    Example use of Object Glove.
  5. //
  6. // Purpose:
  7. //    Sets up the Windows glove application.
  8. //
  9. // Compatibility:
  10. //    Windows only!
  11. //
  12. // Copyright 1993   Mark Thomas Pflaging
  13. //
  14. // Date:    3/22/93 (Release 3.0)     
  15. //
  16. #include "winglove.hpp"
  17. #include "winactor.hpp"
  18. #include "gestsys.hpp"
  19.  
  20. TDemoWindow::TDemoWindow(PTWindowsObject AParent, LPSTR ATitle)
  21.   : TWindow(AParent, ATitle)
  22. {
  23. /****
  24.     HDC DC = GetDC(HWindow);
  25.     COLORREF bkcolor = GetBkColor(DC);
  26.     ReleaseDC(HWindow, DC);
  27. ****/
  28.     //  ButtonDown = FALSE;
  29.     BrushData.lbStyle = BS_SOLID;
  30.     BrushData.lbColor = 0;        // Ignored
  31.     // BrushData.lbHatch = HS_CROSS;    // Ignored
  32. //    ClearBrush = CreateBrushIndirect(& BrushData);
  33.  
  34.     BrushData.lbStyle = BS_HOLLOW; // BS_HATCHED;
  35.     BrushData.lbColor = 0;
  36.     // BrushData.lbHatch = HS_CROSS;
  37.     PenSize = 1;
  38.     ThePen = CreatePen(PS_SOLID, PenSize, 0);
  39. //    ClearPen = CreatePen(PS_NULL, PenSize, 0);
  40.     TheBrush = CreateBrushIndirect(& BrushData);
  41.  
  42.     hGloveIcon = NULL;
  43. //    Attr.Style = WS_MINIMIZE;
  44. }
  45.  
  46. void TDemoWindow::GetWindowClass(WNDCLASS & AWndClass)
  47. {
  48.     TWindow::GetWindowClass( AWndClass );
  49.     AWndClass.hIcon = hGloveIcon = LoadIcon(GetApplication()->hInstance, MAKEINTRESOURCE(GLOVE_ICON));
  50. }
  51.  
  52. void TDemoWindow::SetupWindow()
  53. {
  54.     ((PTGloveApp)GetApplication())->Setup();
  55.     TWindow::SetupWindow();
  56. }
  57.  
  58. TDemoWindow::~TDemoWindow()
  59. {
  60.     DeleteObject(ThePen);
  61. //    DeleteObject(ClearPen);
  62.     DeleteObject(TheBrush);
  63. //    DeleteObject(ClearBrush);
  64.     if (hGloveIcon) DestroyIcon(hGloveIcon);
  65. }
  66.  
  67. BOOL TDemoWindow::CanClose()
  68. {
  69.     return TRUE;
  70. }
  71.  
  72. #include <strstream.h>
  73.  
  74. void TDemoWindow::SetPenSize(int NewSize)
  75. {
  76.     DeleteObject(ThePen);
  77.     ThePen = CreatePen(PS_SOLID, NewSize, 0);
  78.     PenSize = NewSize;
  79. }
  80.  
  81. void TDemoWindow::SetPenColor(COLORREF NewColor)
  82. {
  83.     DeleteObject(ThePen);
  84.     ThePen = CreatePen(PS_SOLID, PenSize, NewColor);
  85.     PenColor = NewColor;
  86. }
  87.  
  88. HGDIOBJ TDemoWindow::oldPen;
  89. HGDIOBJ TDemoWindow::oldBrush;
  90.  
  91. void TDemoWindow::setupHDC(HDC DC, int currentColor)
  92. {
  93.     SetPenColor(currentColor);
  94.     oldPen = SelectObject(DC, ThePen);
  95.     oldBrush = SelectObject(DC, TheBrush);
  96. }
  97.  
  98. void TDemoWindow::releaseHDC(HDC DC)
  99. {
  100.     SelectObject(DC, oldPen);
  101.     SelectObject(DC, oldBrush);
  102. }
  103.  
  104. void TDemoWindow::Paint(HDC DC, PAINTSTRUCT&)
  105. {
  106.     winGraphicsActor * graph = (((PTGloveApp)GetApplication())->getGlvGrph());
  107.     if (graph) graph->Paint(DC);
  108.     graph = (((PTGloveApp)GetApplication())->getGlvGrph2());
  109.     if (graph) graph->Paint(DC);
  110. }
  111.  
  112. TGloveApp::~TGloveApp() {
  113.     if (GLOVE2) delete GLOVE2;
  114.     if (GLOVE1) delete GLOVE1;
  115.     if (gloveGraph1) delete gloveGraph1;
  116.     if (gloveGraph2) {
  117.             gloveGraph2->killAssociatedGestures();
  118.         delete gloveGraph2;
  119.         }
  120. //    if (gloveSound1) delete gloveSound1;
  121.     if (gloveGesture1) {
  122.         gloveGesture1->killAssociatedGestures();
  123.         delete gloveGesture1;
  124.         }
  125.     if (gloveGesture2) {
  126.         gloveGesture2->killAssociatedGestures();
  127.         delete gloveGesture2;
  128.         }
  129.     if (gestSys) delete gestSys;
  130.     if (gestSys2) delete gestSys2;
  131. }
  132.  
  133. void TGloveApp::Setup()
  134. {
  135.         if (GLOVE1) {
  136.         gloveGraph1->Setup();
  137.         if (gloveGesture1) gloveGesture1->Setup();
  138.         if (gloveGesture2) gloveGesture2->Setup();
  139.     }
  140.  
  141.     if (GLOVE2) {
  142.         gloveGraph2->Setup();
  143.         }
  144. }
  145.  
  146. void TGloveApp::IdleAction()
  147. {
  148.     if (GLOVE1) rawGlove::winRun();
  149.     else {
  150.             PostMessage(MainWindow->HWindow, WM_CLOSE, 0, 0L);
  151.     }
  152. }
  153.  
  154. void TGloveApp::InitMainWindow()
  155. {
  156.     MainWindow = new TDemoWindow(NULL, Name);
  157.     if (GLOVE1) {
  158.         gloveGraph1 = new winGraphicsActor(*gloveIni, *((TDemoWindow *)MainWindow), *gloveGesture1);
  159.         (*gestSys) + gloveGraph1;
  160.         gestSys->turnOn();
  161.         if (GLOVE2) {
  162.             gloveGraph2 = new winGraphicsActor(*gloveIni, *((TDemoWindow *)MainWindow), *gloveGraph1, *gloveGesture2);
  163.             gloveGraph2->turnOn();
  164.             (*gestSys2) + gloveGraph2;
  165.             gestSys2->turnOn();
  166.         }
  167.         gloveGraph1->turnOn();
  168. //        gloveSound1 = new soundActor(0 /*MIDI_MAPPER*/);
  169.         if (gloveGesture1) gloveGesture1->setWindow(*((TDemoWindow *)MainWindow));
  170.         if (gloveGesture2) gloveGesture2->setWindow(*((TDemoWindow *)MainWindow));
  171.         gloveIni->write();
  172.         delete gloveIni;
  173.         }
  174. }
  175.  
  176. void TGloveApp::InitInstance()
  177. {
  178.     TApplication::InitInstance();
  179.     // Only allow one instance of this App.  (for now.)
  180. /****
  181.     if (hPrevInstance || !GLOVE1) {
  182.         Status = EM_INVALIDMAINWINDOW;
  183.         return;
  184.     }
  185. ****/
  186. }
  187.  
  188. void TGloveApp::graphicsOutput(gloveDriver & gd, void * app)
  189. {
  190.     TGloveApp & here = *((TGloveApp *)app);
  191. //    TDemoWindow & where = *((TDemoWindow *)(here.MainWindow));
  192.         gd.checkGestures();
  193.     (here.gloveGraph1)->Process(gd);
  194. //    (here.gloveSound1)->test(gd);
  195. }
  196.  
  197. void TGloveApp::graphicsOutput2(gloveDriver & gd, void * app)
  198. {
  199.     TGloveApp & here = *((TGloveApp *)app);
  200. //    TDemoWindow & where = *((TDemoWindow *)(here.MainWindow));
  201.     gd.checkGestures();
  202.     (here.gloveGraph2)->Process(gd);
  203. //    (here.gloveSound2)->test(gd);
  204. }
  205.  
  206. Boolean quit_func()
  207. {
  208.     return False;    // look forever...
  209. }
  210.  
  211. void TGloveApp::InitApplication()
  212. {
  213.     gloveIni = new InitFile("glove.ini");
  214.     if (gloveIni->getStatus() == Key::FileDidNotExist)
  215.          MessageBox(NULL,
  216.             "Cannot open \"glove.ini\".  Using defaults and "
  217.             "creating new \"glove.ini\".",
  218.             "Warning",
  219.                         MB_ICONEXCLAMATION | MB_OK);
  220.     if (gloveIni->getStatus() == Key::ErrorReadingFile)
  221.          MessageBox(NULL,
  222.             "Error in \"glove.ini\".  Using defaults and "
  223.             "perhaps modifying \"glove.ini\".",
  224.             "Warning",
  225.             MB_ICONEXCLAMATION | MB_OK);
  226.     gestSys = new GestureSystem;
  227.     gloveGesture1 = new winGestureActor(*gloveIni, "1.Gestures", "Sounds");
  228.     gloveGesture1->turnOn();
  229.     (*gestSys) + gloveGesture1;
  230.     // gloveIni->dump(cout);
  231.     if (!strcmp(gloveIni->find("1.Smoothing", "smoothingEnabled", "True"),
  232.          "True"))
  233.         GLOVE1 = new smoothGlove(*gloveIni, gestSys, quit_func);
  234.     else
  235.         GLOVE1 = new rawGlove(*gloveIni, gestSys, quit_func);
  236.     GLOVE1->test();
  237.  
  238.     if ((GLOVE1->driverStatus() == gloveDriver::EverythingOK) && (howMany > 1)) {
  239.         gestSys2 = new GestureSystem;
  240.         gloveGesture2 = new winGestureActor(*gloveIni, "2.Gestures", "Sounds");
  241.         gloveGesture2->turnOn();
  242.         (*gestSys2) + gloveGesture2;
  243.         if (!strcmp(gloveIni->find("2.Smoothing", "smoothingEnabled", "True"),
  244.              "True"))
  245.             GLOVE2 = new smoothGlove(*gloveIni, gestSys2, quit_func);
  246.         else
  247.             GLOVE2 = new rawGlove(*gloveIni, gestSys2, quit_func);
  248.  
  249.          if (GLOVE2->driverStatus() == gloveDriver::EverythingOK) {
  250.             GLOVE2->initFunction(graphicsOutput2, this);
  251.         }
  252.         else {
  253.             delete GLOVE2;
  254.                     delete gestSys2;
  255.             GLOVE2 = NULL;
  256.             gestSys2 = NULL;
  257.         }
  258.         GLOVE1->initFunction(graphicsOutput, this);
  259.         GLOVE1->Start(strcmp(gloveIni->find(
  260.                 gloveDriver::getTitle(),
  261.                 "PolledOperation", "False"),
  262.                 "True") ? True : False);
  263.     }
  264.     else {
  265.         if (GLOVE1->driverStatus() != gloveDriver::EverythingOK) {
  266.             MessageBox(NULL,
  267.                 "Delay values are not specified in \"glove.ini\"."
  268.                 "  Please EXIT WINDOWS and run \"INITGLOV.EXE\""
  269.                 " while you are in the same directory as GLOVE.INI.",
  270.                 "Warning",
  271.                 MB_ICONEXCLAMATION | MB_OK);
  272.             gloveIni->write();
  273.             delete gloveIni;
  274.             delete GLOVE1;
  275.                     delete gestSys;
  276.                     GLOVE1 = NULL;
  277.             gestSys = NULL;
  278.         }
  279.         else {
  280.             GLOVE1->initFunction(graphicsOutput, this);
  281.             GLOVE1->Start(strcmp(gloveIni->find(
  282.                     gloveDriver::getTitle(),
  283.                     "PolledOperation", "False"),
  284.                     "True") ? True : False);
  285.                 }
  286.         }
  287. }
  288.  
  289. BOOL TGloveApp::CanClose()
  290. {
  291.     if (GLOVE1) ExecDialog(new TDialog(MainWindow, GLOVEDEMO_INFO));
  292.     return (MainWindow->CanClose());
  293. }
  294.  
  295. int PASCAL WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
  296.     LPSTR lpCmdLine, int nCmdShow)
  297. {
  298.     TGloveApp MyApp("WinGlove", hInstance, hPrevInstance,
  299.         lpCmdLine, nCmdShow);
  300.     MyApp.Run();
  301.     return MyApp.Status;
  302. }
  303.