/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- * * The contents of this file are subject to the Netscape Public License * Version 1.0 (the "NPL"); you may not use this file except in * compliance with the NPL. You may obtain a copy of the NPL at * http://www.mozilla.org/NPL/ * * Software distributed under the NPL is distributed on an "AS IS" basis, * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL * for the specific language governing rights and limitations under the * NPL. * * The Initial Developer of this code under the NPL is Netscape * Communications Corporation. Portions created by Netscape are * Copyright (C) 1998 Netscape Communications Corporation. All Rights * Reserved. */ // Shortcut dialog implementation. // 06/22/95 (jre) #include "stdafx.h" #include "shcut.h" #include "shcutdlg.h" #ifdef XP_WIN32 #include #include #endif BEGIN_MESSAGE_MAP(CShortcutDialog, CDialog) END_MESSAGE_MAP() // Internet shortcut class. If a title is specified and it has no invalid // long filename characters, create "Shortcut to xxxx", where xxxx is the // specified title. CShortcutDialog::CShortcutDialog ( CWnd * pParentWnd, char * pszTitle, // shortcut name char * pszURL ) : // url to create shortcut to CDialog ( IDD_INTERNETSHORTCUT, pParentWnd ) { // invalid long filename characters static char * invalidChars = ",\\/:*?<>|\"~"; if ( pszURL ) { unsigned pos; char szNewURL[ _MAX_PATH ]; // scan the title string to look for invalid long filename characters for ( pos = 0; pos < strlen ( invalidChars ); pos++ ) if ( strchr ( pszTitle, invalidChars[ pos ] ) ) { int i, j; for ( i = j = 0; i < CASTINT(strlen ( pszTitle )); i++ ) if ( !strchr ( invalidChars, pszTitle[ i ] ) ) szNewURL[ j++ ] = pszTitle[ i ]; szNewURL[ j ] = '\0'; break; } // if no invalid long filename characters where found, use the // title that was specified if ( pos == strlen ( invalidChars ) ) strcpy ( szNewURL, pszTitle ); // create and move the shortcut name and url into the data transfer // block for the MFC dialog VERIFY(m_ShortcutName.LoadString(IDS_SHORTCUT_TO)); m_ShortcutName += ' '; m_ShortcutName += szNewURL; m_URL = CString(pszURL); } else m_URL = _T(""); m_Description = _T(""); } // returns the shortcut name after the user has potentially edited it const char * CShortcutDialog::GetDescription ( ) { const char * ptr = (const char*)m_Description; return ptr; } // returns the URL const char * CShortcutDialog::GetURL ( ) { const char * ptr = (const char *)m_URL; return ptr; } // transfers data from the dialog into our local class void CShortcutDialog::DoDataExchange ( CDataExchange * pDX ) { CDialog::DoDataExchange(pDX); DDX_Text(pDX, IDC_INTERNETSHORTCUTLINK, m_URL); DDX_Text(pDX, IDC_INTERNETSHORTCUTDESCRIPTION, m_ShortcutName); } // initializes the dialog to contain the data which is initially specified // in our dialog class BOOL CShortcutDialog::OnInitDialog () { CDialog::OnInitDialog(); CEdit * pShortcut = (CEdit *) GetDlgItem(IDC_INTERNETSHORTCUTLINK); if(pShortcut) pShortcut->SetWindowText((const char *)m_URL); CEdit * pDescription = (CEdit *)GetDlgItem(IDC_INTERNETSHORTCUTDESCRIPTION); if ( pDescription ) { // sets shortcut name as the initial field with focus pDescription->SetWindowText((const char *)m_ShortcutName); pDescription->SetFocus(); pDescription->SetSel(0, -1); return (0); } return(1); } // when user selects the ok button, transfer the data from the controls into // our local class and create a valid shortcut long filename. void CShortcutDialog::OnOK ( ) { #if defined(XP_WIN32) char szFilename[_MAX_PATH]; DWORD cbData; HKEY hKey; UpdateData ( ); // transfer data from fields to class members // if user has chosen the "place on desktop" flag, create a .URL file // name on the desktop. Note that we should use the registry to find // the path if (RegOpenKeyEx(HKEY_CURRENT_USER, REGSTR_PATH_SPECIAL_FOLDERS, NULL, KEY_QUERY_VALUE, &hKey) != ERROR_SUCCESS) return; // not much we can do in this case cbData = sizeof(szFilename); RegQueryValueEx(hKey, "Desktop", NULL, NULL, (LPBYTE)szFilename, &cbData); RegCloseKey(hKey); // Make sure the path ends with a '\' CString strPath = szFilename; if (strPath.GetLength() == 0) return; // nothing we can do with this path if (strPath[strPath.GetLength() - 1] != '\\') strPath += '\\'; // Add the shortcut title and append the .URL extension strPath += m_ShortcutName + ".URL"; // assign the new description to the internal data member m_Description = strPath; #endif /* XP_WIN32 */ CDialog::OnOK ( ); }