|
|
// 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
-------------------------------------------------------------------------*/ INT_PTR CALLBACK 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, 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(); }
|