gecko-dev/cmd/winfe/shcutdlg.cpp

178 строки
4.8 KiB
C++

/* -*- 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 <regstr.h>
#include <shlobj.h>
#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 ( );
}