home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 7 / Apprentice-Release7.iso / Source Code / Libraries / Aidan's Class Libraries / Source / Window & Dialog Classes / ModalWindow.cpp < prev    next >
Encoding:
Text File  |  1997-07-20  |  1.5 KB  |  77 lines  |  [TEXT/CWIE]

  1. //Copyright (c) 1997 Aidan Cully
  2. //All rights reserved
  3.  
  4. #include "CLModalWindow.h"
  5. #include "CLModalLayer.h"
  6. #include "CLMouseHandler.h"
  7.  
  8. TModalWindow::TModalWindow( short resID, TLayoutLeaf *content ):
  9.     TBaseWindow( resID, gModalWindowLayer, content )
  10. {
  11. }
  12.  
  13. BOOLEAN TModalWindow::RunSelf()
  14. {
  15.     return( true );
  16. }
  17.  
  18. BOOLEAN TModalWindow::Run()
  19. {
  20.     if( RunSelf() ) {
  21.         TBaseWindow::Init();
  22.         if( TBaseWindow::DoShowWindow()==kWindowSuccess )
  23.             return( true );
  24.         QuitSelf();
  25.     }
  26.     return( false );
  27. }
  28.  
  29. SInt8 TModalWindow::DoHideWindow()
  30. {
  31.     if( AttemptQuit() )
  32.         return( kWindowSuccess );
  33.     return( 1 );
  34. }
  35.  
  36. void TModalWindow::Quit()
  37. {
  38.     mOpen= 0;
  39.     mLayer->RemoveWindow( this );
  40.     MEventDispatcher::Quit();
  41.     TMouseHandler::SGetMouse()->SetListener(0);
  42. }
  43.  
  44. void TModalWindow::CalcMouseMove( const Point &pt, RgnHandle rgn ) {
  45.     RgnHandle strucRgn, above;
  46.  
  47.     strucRgn= ::NewRgn();
  48.     above= ::NewRgn();
  49.     ClipAbove( above );
  50.     ::GetWindowStructureRgn( mWindow, strucRgn );
  51.     ::SectRgn( strucRgn, above, strucRgn );
  52.     ::DiffRgn( above, strucRgn, above );
  53.     Boolean ret= ::PtInRgn( pt, strucRgn );
  54.     if( ret ) {
  55.         ::DisposeRgn( above );
  56.         ::DisposeRgn( strucRgn );
  57.         TBaseWindow::CalcMouseMove( pt, rgn );
  58.     } else {
  59.         ::CopyRgn( above, rgn );
  60.         TMouseHandler::SGetMouse()->SetListener( this );
  61.         ::DisposeRgn( above );
  62.         ::DisposeRgn( strucRgn );
  63.     }
  64. }
  65.  
  66. void TModalWindow::HandleMouse( TMouseButtonEvent *ev )
  67. {
  68.     WindowRef window;
  69.     short partCode;
  70.  
  71.     partCode= FindWindow( ev->where, &window );
  72.     if( window!=mWindow ) {
  73.         if( ev->button )
  74.             ::SysBeep(0);
  75.     } else
  76.         DoMouseDown( partCode, ev );
  77. }