windows-nt/Source/XPSP1/NT/enduser/netmeeting/ui/conf/rtoolbar.h
2020-09-26 16:20:57 +08:00

328 lines
9.2 KiB
C++

/****************************************************************************
*
* FILE: RToolbar.h
*
* CREATED: Chris Pirich (ChrisPi) 7-27-95
*
****************************************************************************/
#ifndef _RTOOLBAR_H_
#define _RTOOLBAR_H_
#include "GenContainers.h"
#include "GenControls.h"
#include "ConfRoom.h"
#include "imsconf3.h"
#include "ProgressBar.h"
#include "VidView.h"
// Forward declarations
class CVideoWindow;
class CRoomListView;
class CProgressTrackbar;
class CAudioControl;
class CButton;
class CRosterParent;
class CCallingBar;
// The NetMeeting main ui window
class DECLSPEC_UUID("{00FF7C0C-D831-11d2-9CAE-00C04FB17782}")
CMainUI : public CToolbar,
public IConferenceChangeHandler,
public IScrollChange,
public IVideoChange,
public IButtonChange
{
public:
// NMAPP depends on the order of these
enum CreateViewMode
{
CreateFull = 0,
CreateDataOnly,
CreatePreviewOnly,
CreateRemoteOnly,
CreatePreviewNoPause,
CreateRemoteNoPause,
CreateTelephone,
} ;
// Methods:
CMainUI();
BOOL Create(
HWND hwndParent, // The parent window for this one
CConfRoom *pConfRoom, // The main conference room class for
// implementing some features
CreateViewMode eMode = CreateFull,
BOOL bEmbedded = FALSE
);
// Leaving these for now in case I need them later
VOID UpdateButtons() {}
VOID ForwardSysChangeMsg(UINT uMsg, WPARAM wParam, LPARAM lParam);
VOID SaveSettings();
HRESULT STDMETHODCALLTYPE QueryInterface(REFGUID riid, LPVOID *ppv)
{
if (__uuidof(CMainUI) == riid)
{
*ppv = this;
AddRef();
return(S_OK);
}
return(CToolbar::QueryInterface(riid, ppv));
}
ULONG STDMETHODCALLTYPE AddRef()
{ return(CToolbar::AddRef()); }
ULONG STDMETHODCALLTYPE Release()
{ return(CToolbar::Release()); }
// IGenWindow stuff
virtual HBRUSH GetBackgroundBrush();
virtual HPALETTE GetPalette();
// IConferenceChangeHandler stuff
virtual void OnCallStarted();
virtual void OnCallEnded();
virtual void OnAudioLevelChange(BOOL fSpeaker, DWORD dwVolume);
virtual void OnAudioMuteChange(BOOL fSpeaker, BOOL fMute);
virtual void OnChangeParticipant(CParticipant *pPart, NM_MEMBER_NOTIFY uNotify);
virtual void OnChangePermissions();
virtual void OnVideoChannelChanged(NM_CHANNEL_NOTIFY uNotify, INmChannel *pChannel);
virtual void StateChange(CVideoWindow *pVideo, NM_VIDEO_STATE uState);
// Change to/from compact view
void SetCompact(
BOOL bCompact // TRUE if going to compact view
);
// Returns TRUE if we are currently in compact view
BOOL IsCompact() { return(m_eViewMode == ViewCompact); }
// Change to/from data-only view
void SetDataOnly(
BOOL bDataOnly // TRUE if going to data-only view
);
// Returns TRUE if we are currently in compact view
BOOL IsDataOnly() { return(m_eViewMode == ViewDataOnly); }
// Change to/from dialing view
void SetDialing(
BOOL bDialing // TRUE if going to dialing view
);
// Returns TRUE if we are currently in dialing view
BOOL IsDialing() { return(m_bDialing != FALSE); }
// Returns TRUE if you can change dialing mode
BOOL IsDialingAllowed() { return(m_eViewMode != ViewDataOnly); }
// Change to/from Picture-in-picture view
void SetPicInPic(
BOOL bPicInPic // TRUE if going to Picture-in-picture view
);
// Returns TRUE if we are currently in Picture-in-picture view
BOOL IsPicInPic() { return(m_bPicInPic != FALSE); }
// Returns TRUE if you can change Picture-in-picture mode
BOOL IsPicInPicAllowed();
// Change to/from compact view
void SetAudioTuning(
BOOL bTuning // TRUE if going to audio tuning view
);
// Returns TRUE if we are currently in audio tuning view
BOOL IsAudioTuning() { return(m_bAudioTuning != FALSE); }
// Accessor for the local video window
CVideoWindow* GetLocalVideo() { return(m_pLocalVideo); }
// Accessor for the remote video window
CVideoWindow* GetRemoteVideo() { return(m_pRemoteVideo); }
// Get the roster window
CRoomListView *GetRoster() const;
// Init menu items
void OnInitMenu(HMENU hMenu);
// Public function for sending commands to this window
void OnCommand(int id) { OnCommand(GetWindow(), id, NULL, 0); }
// IScrollChange
virtual void OnScroll(CProgressTrackbar *pTrackbar, UINT code, int pos);
// IButtonChange
virtual void OnClick(CButton *pButton);
BOOL OnQueryEndSession();
void OnClose();
// Get the ConfRoom for this object
CConfRoom *GetConfRoom() { return(m_pConfRoom); }
static BOOL NewVideoWindow(CConfRoom *pConfRoom);
static void CleanUpVideoWindow();
protected:
virtual ~CMainUI();
virtual LRESULT ProcessMessage(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam);
private:
enum TempViewMode
{
ViewNormal = 0,
ViewCompact,
ViewDataOnly,
} ;
static CFrame *s_pVideoFrame;
// Implements some features
CConfRoom *m_pConfRoom;
// The background brush
HBRUSH m_hbBack;
// Local video window
CVideoWindow *m_pLocalVideo;
// Remote video window
CVideoWindow *m_pRemoteVideo;
// Audio output (microphone) level
CProgressTrackbar * m_pAudioMic;
// Audio input (speaker) level
CProgressTrackbar * m_pAudioSpeaker;
// The roster window
CRosterParent *m_pRoster;
// The roster window
CCallingBar *m_pCalling;
// The accelerator table for this window
CTranslateAccelTable *m_pAccel;
// The current view mode
TempViewMode m_eViewMode : 4;
// Whether we are currently in dialing mode
BOOL m_bDialing : 1;
// Whether we are currently in audio tuning mode
BOOL m_bAudioTuning : 1;
// Whether we are previewing the local video
BOOL m_bPreviewing : 1;
// Whether we are showing the PiP window
BOOL m_bPicInPic : 1;
// Whether we are currently showing the AV toolbar
BOOL m_bShowAVTB : 1;
// Whether anybody changed the view state
BOOL m_bStateChanged : 1;
// Creates the calling toolbar
void CreateDialTB(
CGenWindow *pParent // The parent window
);
// Creates the "band" with the video window and "data" buttons
void CreateVideoAndAppsTB(
CGenWindow *pParent, // The parent window
CreateViewMode eMode, // The view mode
BOOL bEmbedded
);
// Creates the A/V toolbar
void CreateAVTB(
CGenWindow *pParent, // The parent window
CreateViewMode eMode // The view mode
);
// Creates the answering toolbar
void CreateCallsTB(
CGenWindow *pParent // The parent window
);
// Creates the "data" toolbar
void CreateAppsTB(
CGenWindow *pParent // The parent window
);
// Creates the video and showAV button
void CreateVideoAndShowAVTB(
CGenWindow *pParent // The parent window
);
// Creates the dialing window
void CreateDialingWindow(
CGenWindow *pParent // The parent window
);
// Creates the audio-tuning window
void CreateAudioTuningWindow(
CGenWindow *pParent // The parent window
);
void CreateRosterArea(
CGenWindow *pParent, // The parent window
CreateViewMode eMode // The view mode
);
// Update the visible state of all the windows
void UpdateViewState();
public:
// Change to/from compact view
void SetShowAVTB(
BOOL bShow // TRUE if showing the AV toolbar
);
// Returns TRUE if we are currently showing the AV toolbar in compact mode
BOOL IsShowAVTB() { return(m_bShowAVTB != FALSE); }
BOOL IsStateChanged() { return(m_bStateChanged != FALSE); }
private:
// Get the associated audio control object
CAudioControl *GetAudioControl();
// Handles some commands and forwards the rest to the parent
void OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify);
// Timer message for audio levels
void OnTimer(HWND hwnd, UINT id);
// Unadvise the IConferenceChangeHandler
void OnDestroy(HWND hwnd);
// Roster context menu
void OnContextMenu(HWND hwnd, HWND hwndContext, UINT xPos, UINT yPos);
// Toggle the mic/speaker mute mode
void ToggleMute(BOOL bSpeaker);
// Update the control state to reflect the mute state
void UpdateMuteState(BOOL bSpeaker, CButton *pButton);
// Update the state of the Play/Pause button
BOOL GetPlayPauseState();
// Update the state of the Play/Pause button
void UpdatePlayPauseState();
// Toggle the pause state of all I/O devices
void TogglePlayPause();
// Change the audio level by the given percent (up or down)
void BumpAudio(BOOL bSpeaker, int pct);
// Set a property on the audio channel
void SetAudioProperty(BOOL bSpeaker, NM_AUDPROP uID, ULONG uValue);
// Get the video HWND
HWND GetVideoWindow(BOOL bLocal);
// Returns TRUE if you can preview
BOOL CanPreview();
// Are we currently in preview mode?
BOOL IsPreviewing() { return((m_bPreviewing || NULL == GetVideoWindow(FALSE)) && CanPreview()); }
};
// Private structure for defining a button
struct Buttons
{
int idbStates; // Bitmap ID for the states
UINT nInputStates; // Number of input states in the bitmap
UINT nCustomStates; // Number of custom states in the bitmap
int idCommand; // Command ID for WM_COMMAND messages
UINT idTooltip; // String ID for the tooltip
} ;
// Helper function for adding a bunch of buttons to a parent window
void AddButtons(
CGenWindow *pParent, // The parent window
const Buttons buttons[], // Array of structures describing the buttons
int nButtons, // Number of buttons to create
BOOL bTranslateColors = TRUE, // Use system background colors
CGenWindow *pCreated[] = NULL, // Created CGenWindow's will be put here
IButtonChange *pNotify=NULL // Notification of clicks
);
#endif // _RTOOLBAR_H_