mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-10 03:45:46 +00:00
Fix for Bug#71628 - MfcEmbed needs to persist the url list
r=chak
This commit is contained in:
parent
09e1aa7370
commit
c3066b11d3
@ -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
|
||||
|
@ -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
|
||||
|
135
embedding/tests/mfcembed/MostRecentUrls.cpp
Normal file
135
embedding/tests/mfcembed/MostRecentUrls.cpp
Normal 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);
|
||||
}
|
41
embedding/tests/mfcembed/MostRecentUrls.h
Normal file
41
embedding/tests/mfcembed/MostRecentUrls.h
Normal 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;
|
||||
};
|
@ -40,6 +40,7 @@ OBJS = \
|
||||
.\$(OBJDIR)\ProfileMgr.obj \
|
||||
.\$(OBJDIR)\ProfilesDlg.obj \
|
||||
.\$(OBJDIR)\winEmbedFileLocProvider.obj \
|
||||
.\$(OBJDIR)\MostRecentUrls.obj \
|
||||
.\$(OBJDIR)\StdAfx.obj \
|
||||
$(NULL)
|
||||
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user