mirror of
https://github.com/openmoh/openmohaa.git
synced 2025-04-29 06:07:57 +03:00
Hard reset
This commit is contained in:
commit
09bed43f97
1594 changed files with 892326 additions and 0 deletions
240
code/client/usignal.cpp
Normal file
240
code/client/usignal.cpp
Normal file
|
@ -0,0 +1,240 @@
|
|||
/*
|
||||
===========================================================================
|
||||
Copyright (C) 1999-2005 Id Software, Inc.
|
||||
|
||||
This file is part of Quake III Arena source code.
|
||||
|
||||
Quake III Arena source code is free software; you can redistribute it
|
||||
and/or modify it under the terms of the GNU General Public License as
|
||||
published by the Free Software Foundation; either version 2 of the License,
|
||||
or (at your option) any later version.
|
||||
|
||||
Quake III Arena source code is distributed in the hope that it will be
|
||||
useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with Quake III Arena source code; if not, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
===========================================================================
|
||||
*/
|
||||
|
||||
#include "ui_local.h"
|
||||
|
||||
bool UConnection::TypeIs
|
||||
(
|
||||
Event& ev
|
||||
)
|
||||
|
||||
{
|
||||
return ev.eventnum == m_inevent.eventnum;
|
||||
}
|
||||
|
||||
bool UConnection::AddListener
|
||||
(
|
||||
Listener *object,
|
||||
Event& ev
|
||||
)
|
||||
|
||||
{
|
||||
Event *e;
|
||||
SafePtr< Listener > ptr;
|
||||
|
||||
if( !object )
|
||||
return false;
|
||||
|
||||
ptr = object;
|
||||
|
||||
// don't add the same listener
|
||||
if( m_listeners.ObjectInList( ptr ) )
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
m_listeners.AddUniqueObject( ptr );
|
||||
|
||||
e = new Event( ev );
|
||||
m_events.AddObject( e );
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool UConnection::RemoveListener
|
||||
(
|
||||
Listener *object
|
||||
)
|
||||
|
||||
{
|
||||
int i;
|
||||
ListenerPtr ptr;
|
||||
|
||||
if( !object )
|
||||
return false;
|
||||
|
||||
ptr = object;
|
||||
|
||||
if( !m_listeners.ObjectInList( ptr ) )
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
i = m_listeners.IndexOfObject( ptr );
|
||||
delete m_events.ObjectAt( i );
|
||||
m_events.RemoveObjectAt( i );
|
||||
m_listeners.RemoveObjectAt( i );
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool UConnection::SendEvent
|
||||
(
|
||||
Listener *object,
|
||||
Event& ev
|
||||
)
|
||||
|
||||
{
|
||||
int n;
|
||||
int i;
|
||||
int j;
|
||||
bool sent;
|
||||
Listener *ptr;
|
||||
int numargs;
|
||||
|
||||
sent = false;
|
||||
n = m_listeners.NumObjects();
|
||||
numargs = ev.NumArgs();
|
||||
|
||||
for( i = n; i > 0; i-- )
|
||||
{
|
||||
ptr = m_listeners.ObjectAt( i );
|
||||
if( ptr )
|
||||
{
|
||||
Event *e = new Event( m_events.ObjectAt( i ) );
|
||||
|
||||
for( j = 1; j < numargs; j++ )
|
||||
{
|
||||
e->AddToken( ev.GetToken( j ) );
|
||||
}
|
||||
|
||||
ptr->ProcessEvent( e );
|
||||
sent = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
Event *e = m_events.ObjectAt( i );
|
||||
delete e;
|
||||
|
||||
m_listeners.RemoveObjectAt( i );
|
||||
m_events.RemoveObjectAt( i );
|
||||
}
|
||||
}
|
||||
|
||||
return sent;
|
||||
}
|
||||
|
||||
CLASS_DECLARATION( Listener, USignal, NULL )
|
||||
{
|
||||
{ NULL, NULL }
|
||||
};
|
||||
|
||||
bool USignal::SendSignal
|
||||
(
|
||||
Event& ev
|
||||
)
|
||||
|
||||
{
|
||||
int i;
|
||||
int n;
|
||||
UConnection *c;
|
||||
|
||||
n = m_connections.NumObjects();
|
||||
for( i = 1; i <= n; i++ )
|
||||
{
|
||||
c = m_connections.ObjectAt( i );
|
||||
if( c->TypeIs( ev ) )
|
||||
{
|
||||
return c->SendEvent( this, ev );
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
bool USignal::Connect
|
||||
(
|
||||
Listener *object,
|
||||
Event& inevent,
|
||||
Event& outevent
|
||||
)
|
||||
|
||||
{
|
||||
int i;
|
||||
int n;
|
||||
UConnection *c;
|
||||
|
||||
n = m_connections.NumObjects();
|
||||
for( i = 1; i <= n; i++ )
|
||||
{
|
||||
c = m_connections.ObjectAt( i );
|
||||
if( c->TypeIs( inevent ) )
|
||||
{
|
||||
return c->AddListener( object, outevent );
|
||||
}
|
||||
}
|
||||
|
||||
c = new UConnection;
|
||||
m_connections.AddObject( c );
|
||||
|
||||
return c->AddListener( object, outevent );
|
||||
}
|
||||
|
||||
bool USignal::Disconnect
|
||||
(
|
||||
Listener *object,
|
||||
Event& ev
|
||||
)
|
||||
|
||||
{
|
||||
int i;
|
||||
int n;
|
||||
UConnection *c;
|
||||
|
||||
n = m_connections.NumObjects();
|
||||
for( i = 1; i <= n; i++ )
|
||||
{
|
||||
c = m_connections.ObjectAt( i );
|
||||
if( c->TypeIs( ev ) )
|
||||
{
|
||||
return c->RemoveListener( object );
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
bool USignal::Disconnect
|
||||
(
|
||||
Listener *object
|
||||
)
|
||||
|
||||
{
|
||||
int i;
|
||||
int n;
|
||||
bool result;
|
||||
UConnection *c;
|
||||
|
||||
result = false;
|
||||
|
||||
n = m_connections.NumObjects();
|
||||
for( i = 1; i <= n; i++ )
|
||||
{
|
||||
c = m_connections.ObjectAt( i );
|
||||
if( c->RemoveListener( object ) )
|
||||
{
|
||||
result = true;
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue