// File: cmd.cpp // // General UI-type commands #include "precomp.h" #include "cmd.h" #include "ConfPolicies.h" #include #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(); }