home *** CD-ROM | disk | FTP | other *** search
Text File | 1997-07-20 | 2.9 KB | 114 lines | [TEXT/CWIE] |
- //Copyright (c) 1997 Aidan Cully
- //All rights reserved
-
- #include "CLBaseWindow.h"
- #include "CLFloatLayer.h"
- #include "CLApplication.h"
- #include "CLMouseHandler.h"
-
- void TFloatingWindowLayer::MakeActive( bool active )
- {
- if( active != mActive ) {
- mActive= active;
- TBaseWindow *win;
- TBaseWindow *above= FindLastWindowAbove();
- if( !mhWindows.MoveFirst() )
- return;
- do {
- mhWindows.GetData( win );
- if( !mActive ) {
- //::HideWindow( win->GetWindow() );
- win->MakeActive( false );
- } else {
- /*if( above ) {
- ::SendBehind( win->GetWindow(), above->GetWindow() );
- ::ShowWindow( win->GetWindow() );
- } else {
- ::ShowWindow( win->GetWindow() );
- ::BringToFront( win->GetWindow() );
- }
- above= win;*/
- win->MakeActive( true );
- }
- } while( mhWindows.MoveNext() );
- TMouseHandler::SGetMouse()->CalcMouseMoveRgn();
- }
- }
-
- void TFloatingWindowLayer::AddWindow( TBaseWindow *win )
- {
- if( !mhWindows.MoveFirst() )
- TApplication::SCurApp()->AddBackgrounder( this );
- mhWindows.AddPrev( win );
- if( IsActive() ) {
- TBaseWindow *above= FindLastWindowAbove();
- if( above ) {
- ::SendBehind( win->GetWindow(), above->GetWindow() );
- ::ShowWindow( win->GetWindow() );
- } else {
- ::ShowWindow( win->GetWindow() );
- ::BringToFront( win->GetWindow() );
- }
- win->MakeActive( true );
- }
- }
-
- void TFloatingWindowLayer::RemoveWindow( TBaseWindow *win )
- {
- if( !mhWindows.GoToElem( mhWindows.FindIndex( win ) ) )
- return;
- mhWindows.Remove();
- ::HideWindow( win->GetWindow() );
- if( !mhWindows.MoveFirst() )
- TApplication::SCurApp()->RemoveBackgrounder( this );
- if( IsActive() )
- TMouseHandler::SGetMouse()->CalcMouseMoveRgn();
- }
-
- void TFloatingWindowLayer::SelectWindow( TBaseWindow *win )
- {
- RgnHandle oRgn= ::NewRgn(), nRgn= ::NewRgn();
- if( !mhWindows.GoToElem( mhWindows.FindIndex( win ) ) )
- return;
- TBaseWindow *above= FindLastWindowAbove();
- ::CopyRgn( win->GetWindow()->visRgn, oRgn );
- if( above )
- ::SendBehind( win->GetWindow(), above->GetWindow() );
- else
- ::BringToFront( win->GetWindow() );
- ::CopyRgn( win->GetWindow()->visRgn, nRgn );;
- mhWindows.Remove();
- mhWindows.MoveFirst();
- mhWindows.AddPrev( win );
- ::DiffRgn( nRgn, oRgn, nRgn );
- if( !::EmptyRgn( nRgn ) )
- win->Draw();
- ::ValidRgn( nRgn );
- ::DisposeRgn( oRgn );
- ::DisposeRgn( nRgn );
- TMouseHandler::SGetMouse()->CalcMouseMoveRgn();
- }
-
- void TFloatingWindowLayer::HandleBackground( const TBackgroundEvent *ev )
- {
- TBaseWindow *win;
- TBaseWindow *above= FindLastWindowAbove();
- if( !mhWindows.MoveFirst() )
- return;
- do {
- mhWindows.GetData( win );
- if( ev->background ) {
- ::HideWindow( win->GetWindow() );
- } else {
- if( above ) {
- ::SendBehind( win->GetWindow(), above->GetWindow() );
- ::ShowWindow( win->GetWindow() );
- } else {
- ::ShowWindow( win->GetWindow() );
- ::BringToFront( win->GetWindow() );
- }
- above= win;
- ::HiliteWindow( win->GetWindow(), mActive );
- }
- } while( mhWindows.MoveNext() );
- }