Fix for Bug#71628 - MfcEmbed needs to persist the url list

r=chak
This commit is contained in:
chak%netscape.com 2001-03-11 19:03:40 +00:00
parent 09e1aa7370
commit c3066b11d3
6 changed files with 204 additions and 2 deletions

View File

@ -148,6 +148,9 @@ int CBrowserFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
TRACE0("Failed to create URL Bar\n");
return -1; // fail to create
}
// Load the Most Recently Used(MRU) Urls into the UrlBar
m_wndUrlBar.LoadMRUList();
// Create the toolbar with Back, Fwd, Stop, etc. buttons..
if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP

View File

@ -34,6 +34,7 @@
#include "BrowserView.h"
#include "IBrowserFrameGlue.h"
#include "MostRecentUrls.h"
// A simple UrlBar class...
class CUrlBar : public CComboBoxEx
@ -48,12 +49,25 @@ public:
inline SetCurrentURL(LPCTSTR pUrl) {
SetWindowText(pUrl);
}
inline AddURLToList(CString& url) {
inline AddURLToList(CString& url, bool bAddToMRUList = true) {
COMBOBOXEXITEM ci;
ci.mask = CBEIF_TEXT; ci.iItem = -1;
ci.mask = CBEIF_TEXT; ci.iItem = -1;
ci.pszText = (LPTSTR)(LPCTSTR)url;
InsertItem(&ci);
if(bAddToMRUList)
m_MRUList.AddURL((LPTSTR)(LPCTSTR)url);
}
inline LoadMRUList() {
for (int i=0;i<m_MRUList.GetNumURLs();i++)
{
CString urlStr(_T(m_MRUList.GetURL(i)));
AddURLToList(urlStr, false);
}
}
protected:
CMostRecentUrls m_MRUList;
};
class CBrowserFrame : public CFrameWnd

View File

@ -0,0 +1,135 @@
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
*
* The contents of this file are subject to the Netscape Public
* License Version 1.1 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.mozilla.org/NPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is mozilla.org code.
*
* The Initial Developer of the Original Code is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1998 Netscape Communications Corporation. All
* Rights Reserved.
*
* Contributor(s):
* Rod Spears <rods@netscape.com>
*/
//
// CMostRecentUrls object is responsible for keeping track of the
// 16 most recently used URLs. It stores this list in a file named
// "urls.txt" on a per profile basis in the user's profile directory
//
// The constructor loads the URL list
// The destructor saves the URL list
//
#include "StdAfx.h"
#include "nsIFile.h"
#include "nsILocalFile.h"
#include "nsAppDirectoryServiceDefs.h"
#include "MostRecentUrls.h"
//--------------------------------------------------------
//-- CMostRecentUrls
//--------------------------------------------------------
CMostRecentUrls::CMostRecentUrls() :
mNumURLs(0)
{
for (int i=0;i<MAX_URLS;i++) {
mURLs[i] = NULL;
}
FILE * fd = GetFD("r");
if (fd) {
char line[512];
while (fgets(line, 512, fd)) {
if (strlen(line) > 1) {
line[strlen(line)-1] = 0;
mURLs[mNumURLs++] = _strdup(line);
}
}
fclose(fd);
}
}
FILE * CMostRecentUrls::GetFD(const char * aMode)
{
FILE * fd = nsnull;
nsCOMPtr<nsIFile> file;
nsresult rv = NS_GetSpecialDirectory(NS_APP_USER_PROFILE_50_DIR, getter_AddRefs(file));
if (NS_SUCCEEDED(rv)) {
nsCOMPtr<nsILocalFile> local_file(do_QueryInterface(file));
local_file->Append("urls.txt");
local_file->OpenANSIFileDesc(aMode, &fd);
}
return fd;
}
CMostRecentUrls::~CMostRecentUrls()
{
FILE * fd = GetFD("w");
if (fd) {
for (int i=0;i<MAX_URLS;i++) {
if(mURLs[i])
fprintf(fd, "%s\n", mURLs[i]);
}
fclose(fd);
}
for (int i=0;i<MAX_URLS;i++) {
if(mURLs[i])
free(mURLs[i]);
}
}
char * CMostRecentUrls::GetURL(int aInx)
{
if (aInx < mNumURLs) {
return mURLs[aInx];
}
return NULL;
}
void CMostRecentUrls::AddURL(const char * aURL)
{
TCHAR szTemp[512];
strcpy(szTemp, aURL);
// check to see if an existing url matches the one passed in
for (int i=0; i<MAX_URLS-1; i++)
{
if(mURLs[i])
{
if(strcmpi(mURLs[i], szTemp) == 0)
break;
}
}
// if there was a match "i" will point to matching url entry
// if not i will be MAX_URLS-1
// move all url entries before this one down
for (; i>0; i--)
{
if(mURLs[i])
free(mURLs[i]);
if(mURLs[i-1])
mURLs[i] = _strdup(mURLs[i-1]);
}
// place this url at the top
if(mURLs[0])
free(mURLs[0]);
mURLs[0] = _strdup(szTemp);
}

View File

@ -0,0 +1,41 @@
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
*
* The contents of this file are subject to the Netscape Public
* License Version 1.1 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.mozilla.org/NPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is mozilla.org code.
*
* The Initial Developer of the Original Code is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1998 Netscape Communications Corporation. All
* Rights Reserved.
*
* Contributor(s):
* Rod Spears <rods@netscape.com>
*/
class CMostRecentUrls {
public:
enum _maxUrls {
MAX_URLS = 16
};
CMostRecentUrls();
virtual ~CMostRecentUrls();
char * GetURL(int aInx);
void AddURL(const char * aURL);
inline int GetNumURLs() { return mNumURLs; }
FILE * CMostRecentUrls::GetFD(const char * aMode);
protected:
char * mURLs[MAX_URLS];
int mNumURLs;
};

View File

@ -40,6 +40,7 @@ OBJS = \
.\$(OBJDIR)\ProfileMgr.obj \
.\$(OBJDIR)\ProfilesDlg.obj \
.\$(OBJDIR)\winEmbedFileLocProvider.obj \
.\$(OBJDIR)\MostRecentUrls.obj \
.\$(OBJDIR)\StdAfx.obj \
$(NULL)

View File

@ -126,6 +126,10 @@ SOURCE=.\MfcEmbed.rc
# End Source File
# Begin Source File
SOURCE=.\MostRecentUrls.cpp
# End Source File
# Begin Source File
SOURCE=.\ProfileMgr.cpp
# End Source File
# Begin Source File
@ -170,6 +174,10 @@ SOURCE=.\MfcEmbed.h
# End Source File
# Begin Source File
SOURCE=.\MostRecentUrls.h
# End Source File
# Begin Source File
SOURCE=.\ProfileMgr.h
# End Source File
# Begin Source File