373 lines
8.7 KiB
C++
373 lines
8.7 KiB
C++
|
// File: cmd.cpp
|
|||
|
//
|
|||
|
// General UI-type commands
|
|||
|
|
|||
|
#include "precomp.h"
|
|||
|
|
|||
|
#include "cmd.h"
|
|||
|
|
|||
|
#include "ConfPolicies.h"
|
|||
|
#include <version.h>
|
|||
|
|
|||
|
#include "conf.h"
|
|||
|
#include "confwnd.h"
|
|||
|
#include "dshowdlg.h"
|
|||
|
#include "dlghost.h"
|
|||
|
#include "confroom.h"
|
|||
|
|
|||
|
#include "taskbar.h" // for RefreshTaskbarIcon()
|
|||
|
|
|||
|
#include "getip.h"
|
|||
|
|
|||
|
// static strings
|
|||
|
static const TCHAR g_cszRelNotesFileName[] = TEXT("netmeet.htm");
|
|||
|
|
|||
|
static BOOL g_fDoNotDisturb = 0;
|
|||
|
|
|||
|
|
|||
|
BOOL FLaunchPsz(LPCTSTR pszPath)
|
|||
|
{
|
|||
|
HINSTANCE hInst = ::ShellExecute(::GetMainWindow(),
|
|||
|
NULL, pszPath, NULL, NULL, SW_SHOWNORMAL);
|
|||
|
|
|||
|
if ((INT_PTR)hInst <= 32)
|
|||
|
{
|
|||
|
ERROR_OUT(("ShellExecute() failed, rc=%d", (int)((INT_PTR) hInst)));
|
|||
|
return FALSE;
|
|||
|
}
|
|||
|
|
|||
|
return TRUE;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
static VOID LaunchWebPage(LPCTSTR pcszPage)
|
|||
|
{
|
|||
|
FLaunchPsz(pcszPage);
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
BOOL IsIEClientInstalled(LPCTSTR pszClient)
|
|||
|
{
|
|||
|
RegEntry re(pszClient, HKEY_LOCAL_MACHINE);
|
|||
|
LPTSTR pszDefault = re.GetString(NULL);
|
|||
|
|
|||
|
return !FEmptySz(pszDefault);
|
|||
|
}
|
|||
|
|
|||
|
BOOL FEnableCmdGoNews(void)
|
|||
|
{
|
|||
|
return IsIEClientInstalled(REGVAL_IE_CLIENTS_NEWS);
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
|
|||
|
/* F D O N O T D I S T U R B */
|
|||
|
/*-------------------------------------------------------------------------
|
|||
|
%%Function: FDoNotDisturb
|
|||
|
|
|||
|
-------------------------------------------------------------------------*/
|
|||
|
BOOL FDoNotDisturb(void)
|
|||
|
{
|
|||
|
return g_fDoNotDisturb;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
/* S E T D O N O T D I S T U R B */
|
|||
|
/*-------------------------------------------------------------------------
|
|||
|
%%Function: SetDoNotDisturb
|
|||
|
|
|||
|
-------------------------------------------------------------------------*/
|
|||
|
VOID SetDoNotDisturb(BOOL fSet)
|
|||
|
{
|
|||
|
g_fDoNotDisturb = fSet;
|
|||
|
}
|
|||
|
|
|||
|
/* C M D D O N O T D I S T U R B */
|
|||
|
/*-------------------------------------------------------------------------
|
|||
|
%%Function: CmdDoNotDisturb
|
|||
|
|
|||
|
-------------------------------------------------------------------------*/
|
|||
|
VOID CmdDoNotDisturb(HWND hwnd)
|
|||
|
{
|
|||
|
// Retrieve the "do not disturb" state:
|
|||
|
BOOL fCallsBlocked = FDoNotDisturb();
|
|||
|
|
|||
|
CDontShowDlg dlgDNDWarn(IDS_DO_NOT_DISTURB_WARNING,
|
|||
|
REGVAL_DS_DO_NOT_DISTURB_WARNING, MB_OKCANCEL);
|
|||
|
|
|||
|
if ((TRUE == fCallsBlocked) || (IDOK == dlgDNDWarn.DoModal(hwnd)))
|
|||
|
{
|
|||
|
// Toggle the DoNotDisturb state and refresh the UI
|
|||
|
SetDoNotDisturb(!fCallsBlocked);
|
|||
|
RefreshTaskbarIcon(::GetHiddenWindow());
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
/* C M D H O S T C O N F E R E N C E */
|
|||
|
/*-------------------------------------------------------------------------
|
|||
|
%%Function: CmdHostConference
|
|||
|
|
|||
|
-------------------------------------------------------------------------*/
|
|||
|
VOID CmdHostConference(HWND hwnd)
|
|||
|
{
|
|||
|
|
|||
|
CDlgHost dlgHost;
|
|||
|
if (IDOK != dlgHost.DoModal(hwnd))
|
|||
|
return;
|
|||
|
|
|||
|
HRESULT hr = ::GetConfRoom()->HostConference(dlgHost.PszName(), dlgHost.PszPassword(), dlgHost.IsSecure(),
|
|||
|
dlgHost.AttendeePermissions(), dlgHost.MaxParticipants());
|
|||
|
if (FAILED(hr))
|
|||
|
{
|
|||
|
DisplayErrMsg(IDS_ERRMSG_HOST);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
void FormatURL(LPTSTR szURL)
|
|||
|
{
|
|||
|
LPTSTR pszFormat = new TCHAR[lstrlen(szURL)+1];
|
|||
|
if (NULL != pszFormat)
|
|||
|
{
|
|||
|
lstrcpy(pszFormat, szURL);
|
|||
|
|
|||
|
wsprintf(szURL, pszFormat,
|
|||
|
::GetVersionInfo()->dwMajorVersion,
|
|||
|
::GetVersionInfo()->dwMinorVersion,
|
|||
|
::GetSystemDefaultLCID(),
|
|||
|
::GetUserDefaultLCID());
|
|||
|
|
|||
|
delete[] pszFormat;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
/* L A U N C H R E D I R W E B P A G E */
|
|||
|
/*-------------------------------------------------------------------------
|
|||
|
%%Function: LaunchRedirWebPage
|
|||
|
|
|||
|
Launch a redirector web page. Used by CmdLaunchWebHelp.
|
|||
|
|
|||
|
Note: pcszPage can be a resource ID that is associated with a
|
|||
|
format string that contains the URL and fields for 4 local ID's.
|
|||
|
|
|||
|
-------------------------------------------------------------------------*/
|
|||
|
VOID LaunchRedirWebPage(LPCTSTR pcszPage, bool bForceFormat)
|
|||
|
{
|
|||
|
TCHAR szWebPageFormat[1024]; // BUGBUG: MAX_URL??
|
|||
|
|
|||
|
ASSERT(NULL != pcszPage);
|
|||
|
|
|||
|
if (((UINT_PTR)pcszPage >> 16) == 0)
|
|||
|
{
|
|||
|
// pcszPage is a resource ID
|
|||
|
if (0 == ::LoadString(::GetInstanceHandle(), (UINT)((UINT_PTR) pcszPage),
|
|||
|
szWebPageFormat, CCHMAX(szWebPageFormat)))
|
|||
|
{
|
|||
|
ERROR_OUT(("LaunchRedirWebPage: Unable to find IDS=%08X", (UINT)((UINT_PTR)pcszPage)));
|
|||
|
return;
|
|||
|
}
|
|||
|
|
|||
|
pcszPage = szWebPageFormat;
|
|||
|
bForceFormat = true;
|
|||
|
}
|
|||
|
|
|||
|
if (bForceFormat)
|
|||
|
{
|
|||
|
lstrcpy(szWebPageFormat, pcszPage);
|
|||
|
FormatURL(szWebPageFormat);
|
|||
|
|
|||
|
ASSERT(lstrlen(szWebPageFormat) < CCHMAX(szWebPageFormat));
|
|||
|
pcszPage = szWebPageFormat;
|
|||
|
}
|
|||
|
|
|||
|
LaunchWebPage(pcszPage);
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
/* C M D L A U N C H W E B P A G E */
|
|||
|
/*-------------------------------------------------------------------------
|
|||
|
%%Function: CmdLaunchWebPage
|
|||
|
|
|||
|
Display a web page, based on the command id.
|
|||
|
-------------------------------------------------------------------------*/
|
|||
|
VOID CmdLaunchWebPage(WPARAM wCmd)
|
|||
|
{
|
|||
|
LPTSTR psz;
|
|||
|
|
|||
|
switch (wCmd)
|
|||
|
{
|
|||
|
default:
|
|||
|
{
|
|||
|
ERROR_OUT(("CmdLaunchWebHelp: Unknown command id=%08X", wCmd));
|
|||
|
// fall through
|
|||
|
}
|
|||
|
case ID_HELP_WEB_FREE:
|
|||
|
case ID_HELP_WEB_FAQ:
|
|||
|
case ID_HELP_WEB_FEEDBACK:
|
|||
|
case ID_HELP_WEB_MSHOME:
|
|||
|
{
|
|||
|
// NOTE: this requires that the format strings are in the same order
|
|||
|
// as the menu command ID's
|
|||
|
LaunchRedirWebPage((LPCTSTR) wCmd - (ID_HELP_WEB_FREE - IDS_WEB_PAGE_FORMAT_FREE));
|
|||
|
break;
|
|||
|
}
|
|||
|
case ID_HELP_WEB_SUPPORT:
|
|||
|
{
|
|||
|
TCHAR sz[ MAX_PATH ];
|
|||
|
bool bForcePrintf = ConfPolicies::GetIntranetSupportURL(sz, CCHMAX(sz));
|
|||
|
LaunchRedirWebPage( sz, bForcePrintf );
|
|||
|
|
|||
|
break;
|
|||
|
}
|
|||
|
case ID_HELP_WEB_NEWS:
|
|||
|
{
|
|||
|
RegEntry re(CONFERENCING_KEY, HKEY_CURRENT_USER);
|
|||
|
psz = re.GetString(REGVAL_HOME_PAGE);
|
|||
|
if (FEmptySz(psz))
|
|||
|
{
|
|||
|
psz = (LPTSTR) IDS_WEB_PAGE_FORMAT_NEWS;
|
|||
|
}
|
|||
|
LaunchRedirWebPage(psz);
|
|||
|
break;
|
|||
|
}
|
|||
|
|
|||
|
case IDM_VIDEO_GETACAMERA:
|
|||
|
{
|
|||
|
LaunchRedirWebPage(MAKEINTRESOURCE(IDS_WEB_PAGE_FORMAT_GETCAMERA));
|
|||
|
break;
|
|||
|
}
|
|||
|
|
|||
|
} /* switch (wCommand) */
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
/* C M D S H O W R E L E A S E N O T E S */
|
|||
|
/*-------------------------------------------------------------------------
|
|||
|
%%Function: CmdShowReleaseNotes
|
|||
|
|
|||
|
-------------------------------------------------------------------------*/
|
|||
|
VOID CmdShowReleaseNotes(void)
|
|||
|
{
|
|||
|
if (!FLaunchPsz(g_cszRelNotesFileName))
|
|||
|
{
|
|||
|
::PostConfMsgBox(IDS_RELEASE_NOTES_MISSING);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
/* A B O U T B O X D L G P R O C */
|
|||
|
/*-------------------------------------------------------------------------
|
|||
|
%%Function: AboutBoxDlgProc
|
|||
|
|
|||
|
-------------------------------------------------------------------------*/
|
|||
|
LRESULT APIENTRY AboutBoxDlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
|
|||
|
{
|
|||
|
switch (uMsg)
|
|||
|
{
|
|||
|
case WM_INITDIALOG:
|
|||
|
{
|
|||
|
TCHAR sz[700]; // really large for copyright message
|
|||
|
TCHAR *szIPList[] = {sz, sz+20, sz+40, sz+80};
|
|||
|
TCHAR *szIPDisplay = sz+200;
|
|||
|
int nListSize = sizeof(szIPList)/sizeof(TCHAR*);
|
|||
|
int nCount, nIndex;
|
|||
|
|
|||
|
if (0 != ::GetDlgItemText(hDlg, IDC_ABOUT_VERSION_STATIC, sz, CCHMAX(sz)))
|
|||
|
{
|
|||
|
// Retrieved the format buffer from the dialog:
|
|||
|
TCHAR szVisibleText[MAX_PATH];
|
|||
|
wsprintf(szVisibleText, sz, VER_PRODUCTVERSION_STR);
|
|||
|
// Replace the text with text that contains the version number:
|
|||
|
::SetDlgItemText(hDlg, IDC_ABOUT_VERSION_STATIC, szVisibleText);
|
|||
|
}
|
|||
|
|
|||
|
// The about box copyright is > 255 characters.
|
|||
|
if (FLoadString(IDS_ABOUT_COPYRIGHT, sz, CCHMAX(sz)))
|
|||
|
{
|
|||
|
::SetDlgItemText(hDlg, IDC_ABOUT_COPYRIGHT, sz);
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
// go fetch our IP address and display it to the user
|
|||
|
// we can only display up to 4
|
|||
|
nCount = GetIPAddresses(szIPList, nListSize);
|
|||
|
if (nCount >= 1)
|
|||
|
{
|
|||
|
lstrcpy(szIPDisplay, szIPList[0]);
|
|||
|
for (nIndex = 1; nIndex < nCount; nIndex++)
|
|||
|
{
|
|||
|
lstrcat(szIPDisplay, ", ");
|
|||
|
lstrcat(szIPDisplay, szIPList[nIndex]);
|
|||
|
}
|
|||
|
::SetDlgItemText(hDlg, IDC_IP_ADDRESS, szIPDisplay);
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
// on error, don't show anything about IP addresses
|
|||
|
ShowWindow(GetDlgItem(hDlg, IDC_IP_ADDRESS), SW_HIDE);
|
|||
|
ShowWindow(GetDlgItem(hDlg, IDC_IPADDR_STATIC), SW_HIDE);
|
|||
|
}
|
|||
|
|
|||
|
break;
|
|||
|
}
|
|||
|
|
|||
|
case WM_COMMAND:
|
|||
|
{
|
|||
|
::EndDialog(hDlg, LOWORD(wParam));
|
|||
|
break;
|
|||
|
}
|
|||
|
|
|||
|
default:
|
|||
|
{
|
|||
|
return FALSE;
|
|||
|
}
|
|||
|
} /* switch (uMsg) */
|
|||
|
|
|||
|
return TRUE;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
/* C M D S H O W A B O U T */
|
|||
|
/*-------------------------------------------------------------------------
|
|||
|
%%Function: CmdShowAbout
|
|||
|
|
|||
|
-------------------------------------------------------------------------*/
|
|||
|
VOID CmdShowAbout(HWND hwnd)
|
|||
|
{
|
|||
|
::DialogBox(::GetInstanceHandle(), MAKEINTRESOURCE(IDD_ABOUT_BOX),
|
|||
|
hwnd, (DLGPROC) AboutBoxDlgProc);
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
|
|||
|
/* F E N A B L E A U D I O W I Z A R D */
|
|||
|
/*-------------------------------------------------------------------------
|
|||
|
%%Function: FEnableAudioWizard
|
|||
|
|
|||
|
-------------------------------------------------------------------------*/
|
|||
|
BOOL FEnableAudioWizard(void)
|
|||
|
{
|
|||
|
return FIsAudioAllowed() && (NULL == GetActiveConference());
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
///////////////////////////////////////////////////////////////////////////
|
|||
|
// Application Sharing commands
|
|||
|
|
|||
|
BOOL FEnableCmdShare(void)
|
|||
|
{
|
|||
|
CConfRoom * pcr = ::GetConfRoom();
|
|||
|
if (NULL == pcr)
|
|||
|
return FALSE;
|
|||
|
return pcr->FCanShare();
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
|
|||
|
///////////////////////////////////////////////////////////////////////////
|
|||
|
|
|||
|
BOOL FEnableCmdHangup(void)
|
|||
|
{
|
|||
|
return ::FIsConferenceActive();
|
|||
|
}
|
|||
|
|