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

  1. //Copyright (c) 1997 Aidan Cully
  2. //All rights reserved
  3.  
  4. #include "CLBaseWindow.h"
  5. #include "CLFloatLayer.h"
  6. #include "CLApplication.h"
  7. #include "CLMouseHandler.h"
  8.  
  9. void TFloatingWindowLayer::MakeActive( bool active )
  10. {
  11.     if( active != mActive ) {
  12.         mActive= active;
  13.         TBaseWindow *win;
  14.         TBaseWindow *above= FindLastWindowAbove();
  15.         if( !mhWindows.MoveFirst() )
  16.             return;
  17.         do {
  18.             mhWindows.GetData( win );
  19.             if( !mActive ) {
  20.                 //::HideWindow( win->GetWindow() );
  21.                 win->MakeActive( false );
  22.             } else {
  23.                 /*if( above ) {
  24.                     ::SendBehind( win->GetWindow(), above->GetWindow() );
  25.                     ::ShowWindow( win->GetWindow() );
  26.                 } else {
  27.                     ::ShowWindow( win->GetWindow() );
  28.                     ::BringToFront( win->GetWindow() );
  29.                 }
  30.                 above= win;*/
  31.                 win->MakeActive( true );
  32.             }
  33.         } while( mhWindows.MoveNext() );
  34.         TMouseHandler::SGetMouse()->CalcMouseMoveRgn();
  35.     }
  36. }
  37.  
  38. void TFloatingWindowLayer::AddWindow( TBaseWindow *win )
  39. {
  40.     if( !mhWindows.MoveFirst() )
  41.         TApplication::SCurApp()->AddBackgrounder( this );
  42.     mhWindows.AddPrev( win );
  43.     if( IsActive() ) {
  44.         TBaseWindow *above= FindLastWindowAbove();
  45.         if( above ) {
  46.             ::SendBehind( win->GetWindow(), above->GetWindow() );
  47.             ::ShowWindow( win->GetWindow() );
  48.         } else {
  49.             ::ShowWindow( win->GetWindow() );
  50.             ::BringToFront( win->GetWindow() );
  51.         }
  52.         win->MakeActive( true );
  53.     }
  54. }
  55.  
  56. void TFloatingWindowLayer::RemoveWindow( TBaseWindow *win )
  57. {
  58.     if( !mhWindows.GoToElem( mhWindows.FindIndex( win ) ) )
  59.         return;
  60.     mhWindows.Remove();
  61.     ::HideWindow( win->GetWindow() );
  62.     if( !mhWindows.MoveFirst() )
  63.         TApplication::SCurApp()->RemoveBackgrounder( this );
  64.     if( IsActive() )
  65.         TMouseHandler::SGetMouse()->CalcMouseMoveRgn();
  66. }
  67.  
  68. void TFloatingWindowLayer::SelectWindow( TBaseWindow *win )
  69. {
  70.     RgnHandle oRgn= ::NewRgn(), nRgn= ::NewRgn();
  71.     if( !mhWindows.GoToElem( mhWindows.FindIndex( win ) ) )
  72.         return;
  73.     TBaseWindow *above= FindLastWindowAbove();
  74.     ::CopyRgn( win->GetWindow()->visRgn, oRgn );
  75.     if( above )
  76.         ::SendBehind( win->GetWindow(), above->GetWindow() );
  77.     else
  78.         ::BringToFront( win->GetWindow() );
  79.     ::CopyRgn( win->GetWindow()->visRgn, nRgn );;
  80.     mhWindows.Remove();
  81.     mhWindows.MoveFirst();
  82.     mhWindows.AddPrev( win );
  83.     ::DiffRgn( nRgn, oRgn, nRgn );
  84.     if( !::EmptyRgn( nRgn ) )
  85.         win->Draw();
  86.     ::ValidRgn( nRgn );
  87.     ::DisposeRgn( oRgn );
  88.     ::DisposeRgn( nRgn );
  89.     TMouseHandler::SGetMouse()->CalcMouseMoveRgn();
  90. }
  91.  
  92. void TFloatingWindowLayer::HandleBackground( const TBackgroundEvent *ev )
  93. {
  94.     TBaseWindow *win;
  95.     TBaseWindow *above= FindLastWindowAbove();
  96.     if( !mhWindows.MoveFirst() )
  97.         return;
  98.     do {
  99.         mhWindows.GetData( win );
  100.         if( ev->background ) {
  101.             ::HideWindow( win->GetWindow() );
  102.         } else {
  103.             if( above ) {
  104.                 ::SendBehind( win->GetWindow(), above->GetWindow() );
  105.                 ::ShowWindow( win->GetWindow() );
  106.             } else {
  107.                 ::ShowWindow( win->GetWindow() );
  108.                 ::BringToFront( win->GetWindow() );
  109.             }
  110.             above= win;
  111.             ::HiliteWindow( win->GetWindow(), mActive );
  112.         }
  113.     } while( mhWindows.MoveNext() );
  114. }