|
|
/////////////////////////////////////////////////////////////////////////////////////////
//
// Copyright (c) 1997 Active Voice Corporation. All Rights Reserved.
//
// Active Agent(r) and Unified Communications(tm) are trademarks of Active Voice Corporation.
//
// Other brand and product names used herein are trademarks of their respective owners.
//
// The entire program and user interface including the structure, sequence, selection,
// and arrangement of the dialog, the exclusively "yes" and "no" choices represented
// by "1" and "2," and each dialog message are protected by copyrights registered in
// the United States and by international treaties.
//
// Protected by one or more of the following United States patents: 5,070,526, 5,488,650,
// 5,434,906, 5,581,604, 5,533,102, 5,568,540, 5,625,676, 5,651,054.
//
// Active Voice Corporation
// Seattle, Washington
// USA
//
/////////////////////////////////////////////////////////////////////////////////////////
// DlgConfRoomTalker.cpp : Implementation of CDlgConfRoomTalker
#include "stdafx.h"
#include "TapiDialer.h"
#include "ConfRoom.h"
#define TOOLTIP_ID 1
/////////////////////////////////////////////////////////////////////////////
// CDlgConfRoomTalker
CDlgConfRoomTalker::CDlgConfRoomTalker() { m_callState = CS_DISCONNECTED;
m_bstrCallerID = NULL; m_bstrConfName = NULL; m_bstrCallerInfo = NULL;
m_pszDetails = NULL;
m_hWndTips = NULL; m_pConfRoomTalkerWnd = NULL; }
CDlgConfRoomTalker::~CDlgConfRoomTalker() { if ( m_pszDetails ) delete m_pszDetails; SysFreeString( m_bstrCallerID ); SysFreeString( m_bstrConfName ); SysFreeString( m_bstrCallerInfo ); }
LRESULT CDlgConfRoomTalker::OnInitDialog(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled) { // Tool tips for conference room
if ( !m_hWndTips ) { m_hWndTips = CreateWindow( TOOLTIPS_CLASS, NULL, WS_POPUP | WS_EX_TOOLWINDOW | TTS_ALWAYSTIP, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, m_hWnd, (HMENU) NULL, _Module.GetResourceInstance(), NULL ); }
UpdateData( false );
return 1; // Let the system set the focus
}
void CDlgConfRoomTalker::UpdateData( bool bSaveAndValidate ) { USES_CONVERSION; TCHAR szText[255] = _T("");
if ( bSaveAndValidate ) { _ASSERT( false ); // not implemented
} else { // Caller ID -- use default text if none available
if ( (!m_bstrCallerID || (SysStringLen(m_bstrCallerID) == 0)) && (!m_bstrCallerInfo || (SysStringLen(m_bstrCallerInfo) == 0)) ) { if ( m_callState == CS_CONNECTED ) LoadString( _Module.GetResourceInstance(), IDS_CONFROOM_NO_CALLERID, szText, ARRAYSIZE(szText) );
SetDlgItemText( IDC_LBL_CALLERID, szText ); } else { CComBSTR bstrTemp( m_bstrCallerID ); if ( m_bstrCallerInfo && (SysStringLen(m_bstrCallerInfo) > 0) ) { if ( bstrTemp.Length() > 0 ) bstrTemp.Append( L"\n" );
bstrTemp.Append( m_bstrCallerInfo ); }
SetDlgItemText( IDC_LBL_CALLERID, OLE2CT(bstrTemp) ); }
// Status (combine conference name and status)
TCHAR szText[255], szState[100]; UINT nIDS = IDS_CONFROOM_CONF_DISCONNECTED; switch ( m_callState ) { case AV_CS_DIALING: nIDS = IDS_CONFROOM_CONF_DIALING; break; case CS_INPROGRESS: nIDS = IDS_CONFROOM_CONF_INPROGRESS; break; case CS_CONNECTED: nIDS = IDS_CONFROOM_CONF_CONNECTED; break; case AV_CS_DISCONNECTING: nIDS = IDS_CONFROOM_CONF_DISCONNECTING; break; case AV_CS_ABORT: nIDS = IDS_CONFROOM_CONF_ABORT; break; }
LoadString( _Module.GetResourceInstance(), nIDS, szState, ARRAYSIZE(szState) );
// Default to null
if ( !m_bstrConfName ) m_bstrConfName = SysAllocString( T2COLE(_T("")) ); _sntprintf( szText, ARRAYSIZE(szText), _T("%s\n%s"), OLE2CT(m_bstrConfName), szState ); SetDlgItemText( IDC_LBL_STATUS, szText );
// Update Status bitmaps
UpdateStatusBitmaps();
if ( m_hWndTips ) { RECT rc; ::GetWindowRect( GetDlgItem(IDC_LBL_STATUS), &rc ); ScreenToClient( &rc ); AddToolTip( m_hWndTips, rc ); } } }
void CDlgConfRoomTalker::UpdateStatusBitmaps() { HWND hWndAnimate = GetDlgItem(IDC_ANIMATE); UINT nIDA; switch ( m_callState ) { case AV_CS_ABORT: case AV_CS_DIALING: nIDA = IDA_CONNECTING; break;
case CS_INPROGRESS: nIDA = IDA_RINGING; break;
case CS_CONNECTED: case AV_CS_DISCONNECTING: nIDA = IDA_CONNECTED; break;
default: // Stop animation and show disconnected bitmap
Animate_Stop( hWndAnimate ); ::ShowWindow( hWndAnimate, SW_HIDE ); RECT rc; ::GetWindowRect( hWndAnimate, &rc ); ScreenToClient( &rc ); RedrawWindow( &rc ); return; }
// Play the animation that corresponds to the current call state
Animate_OpenEx( hWndAnimate, GetModuleHandle(NULL), MAKEINTRESOURCE(nIDA) ); Animate_Play( hWndAnimate, 0, -1, -1 ); ::ShowWindow( hWndAnimate, SW_SHOW ); }
////////////////////////////////////////////////////////////////////////
// Message handlers
//
LRESULT CDlgConfRoomTalker::OnContextMenu(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled) { bHandled = true; return ::SendMessage( ::GetParent( GetParent() ), uMsg, wParam, lParam ); }
LRESULT CDlgConfRoomTalker::OnDestroy(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled) { Animate_Close( GetDlgItem(IDC_ANIMATE) ); return 0; }
LRESULT CDlgConfRoomTalker::OnPaint(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled) { PAINTSTRUCT ps; HDC hDC = BeginPaint( &ps ); if ( !hDC ) return 0;
// Draw stock bitmap
switch ( m_callState ) { case CS_DISCONNECTED: case AV_CS_DISCONNECTING: case AV_CS_ABORT: { HBITMAP hBmp = LoadBitmap( _Module.GetResourceInstance(), MAKEINTRESOURCE(IDB_DISCONNECTED) ); if ( hBmp ) { RECT rc; ::GetWindowRect( GetDlgItem(IDC_ANIMATE), &rc ); ScreenToClient( &rc ); DrawTrans( hDC, hBmp, rc.left, rc.top ); } } break; }
EndPaint( &ps ); bHandled = true; return 0; }
void CDlgConfRoomTalker::AddToolTip( HWND hWndToolTip, const RECT& rc ) { TOOLINFO ti;
ti.cbSize = sizeof(TOOLINFO); ti.uFlags = 0; ti.hwnd = m_hWnd; ti.hinst = _Module.GetResourceInstance(); ti.uId = TOOLTIP_ID; ti.lpszText = NULL; ti.rect = rc;
// Make sure the tool doesn't already exist
::SendMessage( hWndToolTip, TTM_DELTOOL, 0, (LPARAM) &ti );
// Add the tool to the list
if ( m_pConfRoomTalkerWnd && m_pConfRoomTalkerWnd->m_pConfRoomWnd && m_pConfRoomTalkerWnd->m_pConfRoomWnd->m_pConfRoom ) { USES_CONVERSION; BSTR bstrText = NULL; m_pConfRoomTalkerWnd->m_pConfRoomWnd->m_pConfRoom->get_bstrConfDetails( &bstrText );
// delete previous value
if ( m_pszDetails ) { delete m_pszDetails; m_pszDetails = NULL; }
// Allocate for new tool tip
int nLen = SysStringLen(bstrText); if ( nLen > 0 ) { m_pszDetails = new TCHAR[nLen + 1]; if ( m_pszDetails ) { _tcscpy( m_pszDetails, OLE2CT(bstrText) ); ti.lpszText = m_pszDetails;
::SendMessage( hWndToolTip, TTM_ADDTOOL, 0, (LPARAM) &ti ); } }
SysFreeString( bstrText ); } }
LRESULT CDlgConfRoomTalker::OnMouse(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled) { // Forward message on to tool tip
if ( m_hWndTips ) { MSG msg; msg.hwnd = m_hWnd; msg.message = nMsg; msg.wParam = wParam; msg.lParam = lParam;
bHandled = false; ::SendMessage( m_hWndTips, TTM_RELAYEVENT, 0, (LPARAM) &msg ); }
return 0; }
|