mirror of https://github.com/roytam1/kmeleon.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
1207 lines
31 KiB
1207 lines
31 KiB
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ |
|
/* ***** BEGIN LICENSE BLOCK ***** |
|
* Version: Mozilla-sample-code 1.0 |
|
* |
|
* Copyright (c) 2002 Netscape Communications Corporation and |
|
* other contributors |
|
* |
|
* Permission is hereby granted, free of charge, to any person obtaining a |
|
* copy of this Mozilla sample software and associated documentation files |
|
* (the "Software"), to deal in the Software without restriction, including |
|
* without limitation the rights to use, copy, modify, merge, publish, |
|
* distribute, sublicense, and/or sell copies of the Software, and to permit |
|
* persons to whom the Software is furnished to do so, subject to the |
|
* following conditions: |
|
* |
|
* The above copyright notice and this permission notice shall be included |
|
* in all copies or substantial portions of the Software. |
|
* |
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS |
|
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL |
|
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING |
|
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER |
|
* DEALINGS IN THE SOFTWARE. |
|
* |
|
* Contributor(s): |
|
* Chak Nanga <chak@netscape.com> |
|
* Rod Spears <rods@netscape.com> |
|
* |
|
* ***** END LICENSE BLOCK ***** */ |
|
|
|
// File Overview.... |
|
// |
|
// When the CBrowserFrm creates this View: |
|
// - CreateBrowser() is called in OnCreate() to create the |
|
// mozilla embeddable browser |
|
// |
|
// OnSize() method handles the window resizes and calls the approriate |
|
// interface method to resize the embedded browser properly |
|
// |
|
// Command handlers to handle browser navigation - OnNavBack(), |
|
// OnNavForward() etc |
|
// |
|
// DestroyBrowser() called for cleaning up during object destruction |
|
// |
|
// Some important coding notes.... |
|
// |
|
// 1. Make sure we do not have the CS_HREDRAW|CS_VREDRAW in the call |
|
// to AfxRegisterWndClass() inside of PreCreateWindow() below |
|
// If these flags are present then you'll see screen flicker when |
|
// you resize the frame window |
|
// |
|
// Next suggested file to look at : BrowserImpl.cpp |
|
// |
|
|
|
#include "stdafx.h" |
|
#include "MfcEmbed.h" |
|
#include "BrowserView.h" |
|
#include "BrowserFrm.h" |
|
#include "BrowserWindow.h" |
|
#include "MozUtils.h" |
|
#include "Permissions.h" |
|
#include "Utils.h" |
|
|
|
#ifdef _DEBUG |
|
#define new DEBUG_NEW |
|
#undef THIS_FILE |
|
static char THIS_FILE[] = __FILE__; |
|
#endif |
|
|
|
static const TCHAR* KMELEON_HOMEPAGE_URL = _T("http://kmeleon.sourceforge.net/"); |
|
static const TCHAR* KMELEON_FORUM_URL = _T("http://kmeleon.sourceforge.net/forum/"); |
|
static const TCHAR* KMELEON_FAQ_URL = _T("http://kmeleon.sourceforge.net/docs/faq.php"); |
|
static const TCHAR* KMELEON_MANUAL_URL = _T("http://kmeleon.sourceforge.net/manual/"); |
|
static const TCHAR* ABOUT_PLUGINS_URL = _T("about:plugins"); |
|
static const TCHAR* ABOUT_KMELEON = _T("about:"); |
|
|
|
IMPLEMENT_DYNAMIC(CBrowserView, CWnd) |
|
|
|
BEGIN_MESSAGE_MAP(CBrowserView, CWnd) |
|
//{{AFX_MSG_MAP(CBrowserView) |
|
ON_WM_CREATE() |
|
ON_WM_DESTROY() |
|
ON_WM_SIZE() |
|
ON_WM_TIMER() |
|
ON_WM_MOUSEACTIVATE() |
|
ON_WM_ACTIVATE() |
|
|
|
ON_COMMAND(ID_FILE_OPEN, OnFileOpen) |
|
ON_COMMAND(ID_FILE_SAVE_AS, OnFileSaveAs) |
|
ON_COMMAND(ID_FILE_CLOSE, OnFileClose) |
|
ON_COMMAND(ID_VIEW_SOURCE, OnViewSource) |
|
ON_COMMAND(ID_VIEW_INFO, OnViewInfo) |
|
ON_COMMAND(ID_NAV_BACK, OnNavBack) |
|
ON_COMMAND(ID_NAV_FORWARD, OnNavForward) |
|
ON_COMMAND(ID_NAV_SEARCH, OnNavSearch) |
|
ON_COMMAND(ID_NAV_HOME, OnNavHome) |
|
ON_COMMAND(ID_NAV_RELOAD, OnNavReload) |
|
ON_COMMAND(ID_NAV_FORCE_RELOAD, OnNavForceReload) |
|
ON_COMMAND(ID_FILE_SAVE_FRAME_AS, OnFileSaveFrameAs) |
|
ON_COMMAND(ID_NAV_STOP, OnNavStop) |
|
ON_COMMAND(ID_NAV_GO, OnNewUrlEnteredInUrlBar) |
|
ON_COMMAND(ID_EDIT_CUT, OnCut) |
|
ON_COMMAND(ID_EDIT_COPY, OnCopy) |
|
ON_COMMAND(ID_EDIT_PASTE, OnPaste) |
|
ON_COMMAND(ID_EDIT_UNDO, OnUndo) |
|
ON_COMMAND(ID_EDIT_REDO, OnRedo) |
|
ON_COMMAND(ID_EDIT_CLEAR, OnDelete) |
|
ON_COMMAND(ID_PAGE_ENABLE_JS, OnEnableJS) |
|
ON_COMMAND(ID_PAGE_DISABLE_JS, OnDisableJS) |
|
ON_COMMAND(ID_PAGE_TOGGLE_JS, OnToggleJS) |
|
|
|
ON_UPDATE_COMMAND_UI(ID_PAGE_TOGGLE_JS, OnUpdateToggleJS) |
|
ON_UPDATE_COMMAND_UI(ID_EDIT_CUT, OnUpdateCut) |
|
ON_UPDATE_COMMAND_UI(ID_EDIT_COPY, OnUpdateCopy) |
|
ON_UPDATE_COMMAND_UI(ID_EDIT_PASTE, OnUpdatePaste) |
|
ON_UPDATE_COMMAND_UI(ID_EDIT_UNDO, OnUpdateUndo) |
|
ON_UPDATE_COMMAND_UI(ID_EDIT_REDO, OnUpdateRedo) |
|
ON_UPDATE_COMMAND_UI(ID_EDIT_CLEAR, OnUpdateDelete) |
|
ON_COMMAND(ID_EDIT_SELECT_ALL, OnSelectAll) |
|
ON_COMMAND(ID_EDIT_SELECT_NONE, OnSelectNone) |
|
ON_COMMAND(ID_OPEN_LINK_IN_NEW_WINDOW, OnOpenLinkInNewWindow) |
|
ON_COMMAND(ID_OPEN_LINK_IN_BACKGROUND, OnOpenLinkInBackground) |
|
ON_COMMAND(ID_VIEW_IMAGE, OnViewImageInNewWindow) |
|
ON_COMMAND(ID_COPY_LINK_LOCATION, OnCopyLinkLocation) |
|
ON_COMMAND(ID_COPY_LINK_TEXT, OnCopyLinkText) |
|
ON_COMMAND(ID_COPY_IMAGE_LOCATION, OnCopyImageLocation) |
|
ON_COMMAND(ID_COPY_IMAGE_CONTENT, OnCopyImageContent) |
|
ON_COMMAND(ID_OPEN_LINK, OnOpenLink) |
|
ON_COMMAND(ID_SAVE_LINK_AS, OnSaveLinkAs) |
|
ON_COMMAND(ID_SAVE_IMAGE_AS, OnSaveImageAs) |
|
//ON_COMMAND(ID_EDIT_FIND, OnShowFindDlg) |
|
ON_COMMAND(ID_FILE_PRINT, OnFilePrint) |
|
ON_COMMAND(ID_FILE_PRINTPREVIEW, OnFilePrintPreview) |
|
ON_COMMAND(ID_FILE_PRINTSETUP, OnFilePrintSetup) |
|
ON_COMMAND(ID_VIEW_FRAME_SOURCE, OnViewFrameSource) |
|
ON_COMMAND(ID_VIEW_PAGE_INFO, OnViewPageInfo) |
|
ON_COMMAND(ID_VIEW_FRAME_INFO, OnViewFrameInfo) |
|
ON_COMMAND(ID_OPEN_FRAME, OnOpenFrame) |
|
ON_COMMAND(ID_OPEN_FRAME_IN_NEW_WINDOW, OnOpenFrameInNewWindow) |
|
ON_COMMAND(ID_OPEN_FRAME_IN_BACKGROUND, OnOpenFrameInBackground) |
|
//ON_REGISTERED_MESSAGE(WM_FINDMSG, OnFindMsg) |
|
ON_COMMAND(ID_LINK_KMELEON_HOME, OnKmeleonHome) |
|
ON_COMMAND(ID_LINK_KMELEON_FORUM, OnKmeleonForum) |
|
ON_UPDATE_COMMAND_UI(ID_NAV_BACK, OnUpdateNavBack) |
|
ON_UPDATE_COMMAND_UI(ID_NAV_FORWARD, OnUpdateNavForward) |
|
ON_UPDATE_COMMAND_UI(ID_NAV_STOP, OnUpdateNavStop) |
|
ON_UPDATE_COMMAND_UI(ID_FILE_PRINT, OnUpdateFilePrint) |
|
ON_UPDATE_COMMAND_UI(ID_FILE_SAVE_AS, OnUpdateFileSave) |
|
// ON_UPDATE_COMMAND_UI(ID_FILE_PRINTSETUP, OnUpdatePrintSetup) |
|
ON_UPDATE_COMMAND_UI(ID_FILE_PRINTPREVIEW, OnUpdateFilePrintPreview) |
|
ON_UPDATE_COMMAND_UI(ID_VIEW_IMAGE, OnUpdateViewImage) |
|
|
|
ON_COMMAND_RANGE(SHISTORYB_START_ID, SHISTORYB_END_ID, OnSHistoryBack) |
|
ON_COMMAND_RANGE(SHISTORYF_START_ID, SHISTORYF_END_ID, OnSHistoryForward) |
|
ON_UPDATE_COMMAND_UI_RANGE(SHISTORYB_START_ID, SHISTORYF_END_ID, OnUpdateSHistory) |
|
|
|
ON_COMMAND(ID_FONT_INCREASE, OnIncreaseFont) |
|
ON_COMMAND(ID_FONT_DECREASE, OnDecreaseFont) |
|
|
|
ON_COMMAND(ID_FULLZOOM_INCREASE, OnIncreaseFullZoom) |
|
ON_COMMAND(ID_FULLZOOM_DECREASE, OnDecreaseFullZoom) |
|
|
|
ON_COMMAND(ID_LINK_KMELEON_FAQ, OnKmeleonFAQ) |
|
ON_COMMAND(ID_LINK_KMELEON_MANUAL, OnKmeleonManual) |
|
ON_COMMAND(ID_LINK_ABOUT_PLUGINS, OnAboutPlugins) |
|
//ON_COMMAND(ID_MOUSE_ACTION, OnMouseAction) |
|
ON_COMMAND(ID_SECURITY_STATE_ICON, OnSecurityStateIcon) |
|
ON_COMMAND(ID_POPUP_BLOCKED_ICON, OnPopupBlockedIcon) |
|
|
|
|
|
//ON_MESSAGE(UWM_REFRESHTOOLBARITEM, RefreshToolBarItem) |
|
ON_NOTIFY(CBEN_DRAGBEGIN, ID_URL_BAR, OnDragURL) |
|
ON_NOTIFY(CBEN_BEGINEDIT, ID_URL_BAR, OnBeginEditURL) |
|
ON_COMMAND(IDOK, OnNewUrlEnteredInUrlBar) |
|
ON_CBN_CLOSEUP(ID_URL_BAR, OnUrlSelectedInUrlBar) |
|
|
|
//}}AFX_MSG_MAP |
|
END_MESSAGE_MAP() |
|
|
|
|
|
CBrowserView::CBrowserView() |
|
{ |
|
m_pWindow = NULL; |
|
m_pBrowserFrameGlue = NULL; |
|
m_pBrowserGlue = NULL; |
|
|
|
// m_pFindDlg = NULL; |
|
// m_pPrintProgressDlg = NULL; |
|
m_bCurrentlyPrinting = FALSE; |
|
|
|
m_InPrintPreview = FALSE; |
|
|
|
m_tempFileCount = 0; |
|
|
|
m_contextNode = NULL; |
|
|
|
// m_refreshBackButton = FALSE; |
|
// m_refreshForwardButton = FALSE; |
|
|
|
m_panning = FALSE; |
|
maccel_pan = FALSE; |
|
} |
|
|
|
CBrowserView::~CBrowserView() |
|
{ |
|
if (m_pBrowserGlue) delete m_pBrowserGlue; |
|
ASSERT(m_pWindow == NULL); |
|
} |
|
|
|
//* This is a good place to create the embeddable browser |
|
// instance |
|
// |
|
|
|
int CBrowserView::OnCreate(LPCREATESTRUCT lpCreateStruct) |
|
{ |
|
m_pWindow = new CBrowserWrapper(); |
|
if (!m_pWindow->CreateBrowser(this, mpBrowserFrame->m_chromeMask)) //XXX |
|
return -1; |
|
|
|
//m_pWindow->SetBrowserFrameGlue(m_pBrowserFrameGlue); |
|
m_pWindow->SetBrowserGlue(m_pBrowserGlue); |
|
|
|
return 0; |
|
} |
|
|
|
void CBrowserView::OnDestroy() |
|
{ |
|
DeleteTempFiles(); |
|
m_pWindow->SetBrowserGlue(NULL); |
|
m_pWindow->DestroyBrowser(); |
|
delete m_pWindow; |
|
m_pWindow = NULL; |
|
if (m_pBrowserGlue) { |
|
delete (CBrowserGlue*)m_pBrowserGlue; |
|
m_pBrowserGlue = NULL; |
|
} |
|
} |
|
|
|
BOOL CBrowserView::PreCreateWindow(CREATESTRUCT& cs) |
|
{ |
|
if (!CWnd::PreCreateWindow(cs)) |
|
return FALSE; |
|
|
|
if (theApp.preferences.GetBool("kmeleon.display.clientEdge", false)) |
|
cs.dwExStyle |= WS_EX_CLIENTEDGE; |
|
cs.style &= ~WS_BORDER; |
|
cs.style |= WS_CLIPCHILDREN|WS_CLIPSIBLINGS; |
|
cs.lpszClass = AfxRegisterWndClass(CS_DBLCLKS, |
|
::LoadCursor(NULL, IDC_ARROW), HBRUSH(COLOR_WINDOW+1), NULL); |
|
|
|
return TRUE; |
|
} |
|
|
|
// Adjust the size of the embedded browser |
|
// in response to any container size changes |
|
// |
|
void CBrowserView::OnSize( UINT nType, int cx, int cy) |
|
{ |
|
m_pWindow->SetPositionAndSize(0, 0, cx, cy); |
|
} |
|
|
|
// Called by this object's creator i.e. the CBrowserFrame object |
|
// to pass its pointer to us |
|
// |
|
void CBrowserView::SetBrowserFrame(CBrowserFrame* pBrowserFrame) |
|
{ |
|
mpBrowserFrame = pBrowserFrame; |
|
} |
|
|
|
void CBrowserView::SetBrowserGlue(PBROWSERGLUE pBrowserGlue) |
|
{ |
|
if (m_pBrowserGlue) delete m_pBrowserGlue; |
|
m_pBrowserGlue = pBrowserGlue; |
|
if (m_pWindow) m_pWindow->SetBrowserGlue(m_pBrowserGlue); |
|
} |
|
|
|
void CBrowserView::SetBrowserFrameGlue(PBROWSERFRAMEGLUE pBrowserFrameGlue) |
|
{ |
|
m_pBrowserFrameGlue = pBrowserFrameGlue; |
|
if (m_pWindow) m_pWindow->SetBrowserFrameGlue(m_pBrowserFrameGlue); |
|
} |
|
|
|
void CBrowserView::OnBeginEditURL( NMHDR * pNotifyStruct, LRESULT * result ) |
|
{ |
|
// Send when the url bar get the focus. Deactivate gecko so that it |
|
// can't steal the focus. |
|
m_pWindow->SetActive(FALSE); |
|
*result = 0; |
|
} |
|
|
|
void CBrowserView::OnEndEditURL( NMHDR * pNotifyStruct, LRESULT * result ) |
|
{ |
|
//mpBrowserFrame->m_wndUrlBar.EditChanged(FALSE); |
|
*result = 0; |
|
} |
|
|
|
// A new URL was entered in the URL bar |
|
// Get the URL's text from the Urlbar's (ComboBox's) EditControl |
|
// and navigate to that URL |
|
// |
|
void CBrowserView::OnNewUrlEnteredInUrlBar() |
|
{ |
|
m_pWindow->SetActive(TRUE); |
|
|
|
#ifdef INTERNAL_SITEICONS |
|
GetBrowserGlue()->mIconURI = NULL; |
|
#endif |
|
|
|
// Ugly hack: needed because I can get an OnCbnEditchange |
|
// and no OnCbenEndedit |
|
TRACE0("EditChanged FALSE in CBrowserView::OnNewUrlEnteredInUrlBar\n"); |
|
mpBrowserFrame->m_wndUrlBar.EditChanged(FALSE); |
|
|
|
//mpBrowserFrame->m_wndUrlBar.EditChanged(FALSE); |
|
|
|
// Get the currently entered URL |
|
CString strUrl = mpBrowserFrame->m_wndUrlBar.GetEnteredURL(); |
|
|
|
|
|
// Add what was just entered into the MRI list |
|
if (theApp.preferences.MRUbehavior == 2) |
|
theApp.m_MRUList->AddURL(strUrl); |
|
|
|
//if(IsViewSourceUrl(strUrl)) |
|
// OpenViewSourceWindow(strUrl.GetBuffer(0)); |
|
//else { |
|
CString urls = NicknameLookup(strUrl); |
|
OpenMultiURL(urls.GetBuffer(0), TRUE); |
|
//} |
|
} |
|
|
|
// A URL has been selected from the UrlBar's dropdown list |
|
void CBrowserView::OnUrlSelectedInUrlBar() |
|
{ |
|
CString strUrl; |
|
|
|
//mpBrowserFrame->m_wndUrlBar.EditChanged(FALSE); |
|
if (!mpBrowserFrame->m_wndUrlBar.GetSelectedURL(strUrl)) |
|
return; |
|
|
|
//m_pWindow->SetActive(TRUE); |
|
|
|
// if(IsViewSourceUrl(strUrl)) |
|
// OpenViewSourceWindow(strUrl.GetBuffer(0)); |
|
// else { |
|
CString urls = NicknameLookup(strUrl); |
|
OpenMultiURL(urls.GetBuffer(0), TRUE); |
|
// } |
|
} |
|
|
|
void CBrowserView::OnViewSource() |
|
{ |
|
OpenViewSourceWindow(); |
|
} |
|
|
|
void CBrowserView::OnViewFrameSource() |
|
{ |
|
USES_CONVERSION; |
|
OpenViewSourceWindow(TRUE); |
|
} |
|
|
|
void CBrowserView::OnViewInfo() |
|
{ |
|
ShowSecurityInfo(); |
|
} |
|
|
|
void CBrowserView::OnNavBack() |
|
{ |
|
m_pWindow->GoBack(); |
|
} |
|
|
|
void CBrowserView::OnUpdateNavBack(CCmdUI* pCmdUI) |
|
{ |
|
pCmdUI->Enable(m_pWindow->CanGoBack()); |
|
/* |
|
PRBool canGoBack = PR_FALSE; |
|
|
|
// Buttons get "stuck" down after selecting |
|
// a menu item, this fixes them |
|
if (m_refreshBackButton) { |
|
pCmdUI->Enable(FALSE); |
|
pCmdUI->Enable(TRUE); |
|
m_refreshBackButton = FALSE; |
|
} |
|
|
|
if (mWebNav) |
|
mWebNav->GetCanGoBack(&canGoBack); |
|
|
|
pCmdUI->Enable(canGoBack);*/ |
|
} |
|
|
|
void CBrowserView::OnNavForward() |
|
{ |
|
m_pWindow->GoForward(); |
|
} |
|
|
|
void CBrowserView::OnUpdateNavForward(CCmdUI* pCmdUI) |
|
{ |
|
pCmdUI->Enable(m_pWindow->CanGoForward()); |
|
} |
|
|
|
void CBrowserView::OnNavHome() |
|
{ |
|
CString homePage = theApp.preferences.GetString("browser.startup.homepage", _T("")); |
|
if (!homePage.IsEmpty()) |
|
OpenURL(homePage); |
|
else |
|
OpenURL(_T("about:blank")); |
|
} |
|
|
|
void CBrowserView::_OnNavReload(BOOL force) |
|
{ |
|
if (GetBrowserGlue()->mHIndex>=0) { |
|
GetBrowserWrapper()->GotoHistoryIndex(GetBrowserGlue()->mHIndex); |
|
GetBrowserGlue()->mHIndex = -1; |
|
return; |
|
} |
|
|
|
// If there is no URI to reload, load the address in the url bar |
|
CString url = m_pWindow->GetURI(); |
|
if (url.IsEmpty() || url.Compare(_T("about:blank")) == 0) |
|
{ |
|
CString url = mpBrowserFrame->m_wndUrlBar.GetEnteredURL(); |
|
if (!url.IsEmpty()) |
|
OpenURL(url); |
|
} |
|
else |
|
m_pWindow->Reload(force); |
|
} |
|
|
|
void CBrowserView::OnNavReload() |
|
{ |
|
|
|
_OnNavReload(FALSE); |
|
} |
|
|
|
void CBrowserView::OnNavForceReload() |
|
{ |
|
#ifdef INTERNAL_SITEICONS |
|
if (GetBrowserGlue()->mIconURI) { |
|
theApp.favicons.RefreshIcon(GetBrowserGlue()->mIconURI); |
|
GetBrowserGlue()->mIconURI = NULL; |
|
} |
|
#endif |
|
_OnNavReload(TRUE); |
|
} |
|
|
|
void CBrowserView::OnNavStop() |
|
{ |
|
m_pWindow->Stop(); |
|
} |
|
|
|
void CBrowserView::OnUpdateNavStop(CCmdUI* pCmdUI) |
|
{ |
|
pCmdUI->Enable(m_pWindow->IsBusy());//m_bDocumentLoading); |
|
} |
|
|
|
void CBrowserView::OnUpdateFileSave(CCmdUI* pCmdUI) |
|
{ |
|
pCmdUI->Enable(m_pWindow->CanSave()); |
|
} |
|
|
|
void CBrowserView::OnCut() |
|
{ |
|
CWnd* focus = GetFocus(); |
|
if (focus && focus->IsKindOf(RUNTIME_CLASS(CEdit))) { |
|
((CEdit*)focus)->Cut(); |
|
return; |
|
} |
|
|
|
if (::IsChild(m_hWnd, ::GetFocus())) |
|
m_pWindow->Cut(); |
|
} |
|
|
|
void CBrowserView::OnUpdateCut(CCmdUI* pCmdUI) |
|
{ |
|
CWnd* focus = GetFocus(); |
|
if (focus && focus->IsKindOf(RUNTIME_CLASS(CEdit))) { |
|
DWORD sel = ((CEdit*)focus)->GetSel(); |
|
pCmdUI->Enable(HIWORD(sel)!=LOWORD(sel)); |
|
return; |
|
} |
|
|
|
if (::IsChild(m_hWnd, ::GetFocus())) |
|
pCmdUI->Enable(m_pWindow->CanCut()); |
|
} |
|
|
|
void CBrowserView::OnCopy() |
|
{ |
|
CWnd* focus = GetFocus(); |
|
if (focus && focus->IsKindOf(RUNTIME_CLASS(CEdit))) { |
|
((CEdit*)focus)->Copy(); |
|
return; |
|
} |
|
|
|
if (::IsChild(m_hWnd, ::GetFocus())) |
|
m_pWindow->Copy(); |
|
} |
|
|
|
void CBrowserView::OnUpdateCopy(CCmdUI* pCmdUI) |
|
{ |
|
CWnd* focus = GetFocus(); |
|
if (focus && focus->IsKindOf(RUNTIME_CLASS(CEdit))) { |
|
DWORD sel = ((CEdit*)focus)->GetSel(); |
|
pCmdUI->Enable(HIWORD(sel)!=LOWORD(sel)); |
|
return; |
|
} |
|
|
|
if (::IsChild(m_hWnd, ::GetFocus())) |
|
pCmdUI->Enable(m_pWindow->CanCopy()); |
|
} |
|
|
|
void CBrowserView::OnPaste() |
|
{ |
|
CWnd* focus = GetFocus(); |
|
if (focus && focus->IsKindOf(RUNTIME_CLASS(CEdit))) { |
|
((CEdit*)focus)->Paste(); |
|
return; |
|
} |
|
|
|
if (::IsChild(m_hWnd, ::GetFocus())) |
|
m_pWindow->Paste(); |
|
} |
|
|
|
void CBrowserView::OnUpdatePaste(CCmdUI* pCmdUI) |
|
{ |
|
CWnd* focus = GetFocus(); |
|
if (focus && focus->IsKindOf(RUNTIME_CLASS(CEdit))) { |
|
pCmdUI->Enable(!(((CEdit*)focus)->GetStyle() & ES_READONLY)); |
|
return; |
|
} |
|
|
|
if (::IsChild(m_hWnd, ::GetFocus())) |
|
pCmdUI->Enable(m_pWindow->CanPaste()); |
|
} |
|
|
|
void CBrowserView::OnUndo() |
|
{ |
|
CWnd* focus = GetFocus(); |
|
if (focus && focus->IsKindOf(RUNTIME_CLASS(CEdit))) { |
|
((CEdit*)focus)->Undo(); |
|
return; |
|
} |
|
|
|
if (::IsChild(m_hWnd, ::GetFocus())) |
|
m_pWindow->Undo(); |
|
} |
|
|
|
void CBrowserView::OnUpdateUndo(CCmdUI* pCmdUI) |
|
{ |
|
CWnd* focus = GetFocus(); |
|
if (focus && focus->IsKindOf(RUNTIME_CLASS(CEdit))) { |
|
pCmdUI->Enable(((CEdit*)focus)->CanUndo()); |
|
return; |
|
} |
|
|
|
pCmdUI->Enable(m_pWindow->CanUndo()); |
|
} |
|
|
|
void CBrowserView::OnDelete() |
|
{ |
|
CWnd* focus = GetFocus(); |
|
if (focus && focus->IsKindOf(RUNTIME_CLASS(CEdit))) { |
|
((CEdit*)focus)->ReplaceSel(_T(""), TRUE); |
|
return; |
|
} |
|
|
|
if (::IsChild(m_hWnd, ::GetFocus())) |
|
m_pWindow->Delete(); |
|
} |
|
|
|
void CBrowserView::OnUpdateDelete(CCmdUI* pCmdUI) |
|
{ |
|
CWnd* focus = GetFocus(); |
|
if (focus && focus->IsKindOf(RUNTIME_CLASS(CEdit))) { |
|
DWORD sel = ((CEdit*)focus)->GetSel(); |
|
pCmdUI->Enable(HIWORD(sel)!=LOWORD(sel) && !(((CEdit*)focus)->GetStyle() & ES_READONLY)); |
|
return; |
|
} |
|
|
|
pCmdUI->Enable(m_pWindow->CanDelete()); |
|
} |
|
|
|
void CBrowserView::OnRedo() |
|
{ |
|
if (::IsChild(m_hWnd, ::GetFocus())) |
|
m_pWindow->Redo(); |
|
} |
|
|
|
void CBrowserView::OnUpdateRedo(CCmdUI* pCmdUI) |
|
{ |
|
pCmdUI->Enable(m_pWindow->CanRedo()); |
|
} |
|
|
|
void CBrowserView::OnSelectAll() |
|
{ |
|
m_pWindow->SelectAll(); |
|
} |
|
|
|
void CBrowserView::OnSelectNone() |
|
{ |
|
m_pWindow->SelectNone(); |
|
} |
|
|
|
void CBrowserView::OnFileOpen() |
|
{ |
|
TCHAR lpszFilter[] = |
|
_T("HTML Files Only (*.htm;*.html)|*.htm;*.html|") |
|
_T("All Files (*.*)|*.*||"); |
|
|
|
CFileDialog fileDlg (TRUE, NULL, NULL, 0, lpszFilter, this); |
|
if (fileDlg.DoModal() == IDOK) |
|
{ |
|
CString pathName = fileDlg.GetPathName(); |
|
FILE *test = _tfopen(pathName, _T("r")); |
|
if (!test) { |
|
// if the file doesn't exist, they probably typed a url... |
|
// so chop off the path (for some reason GetFileName doesn't work for us... |
|
pathName = pathName.Mid(pathName.ReverseFind('\\')+1); |
|
pathName = NicknameLookup(pathName); |
|
} else { |
|
fclose(test); |
|
} |
|
OpenMultiURL(pathName); |
|
} |
|
} |
|
|
|
void CBrowserView::OnFileSaveAs() |
|
{ |
|
// Prevent the incomplete save of an html document |
|
if (!m_pWindow->CanSave() |
|
&& !theApp.preferences.GetBool("kmeleon.download.allowIncompleteSave", FALSE)) |
|
{ |
|
AfxMessageBox(IDS_NOT_FINISHED_LOADING, MB_OK|MB_ICONERROR); |
|
} |
|
|
|
if (!m_pWindow->SaveDocument(FALSE)) |
|
AfxMessageBox(IDS_SAVE_FAILED, MB_OK|MB_ICONERROR); |
|
} |
|
|
|
void SetClipboardTextData(HWND hwnd, CString& str) |
|
{ |
|
if (!OpenClipboard(hwnd)) |
|
return; |
|
|
|
size_t l = (str.GetLength() + 1) * sizeof(TCHAR); |
|
HGLOBAL hClipData = ::GlobalAlloc(GMEM_MOVEABLE | GMEM_DDESHARE, l); |
|
|
|
if (hClipData) { |
|
TCHAR *pszClipData = (TCHAR*)::GlobalLock(hClipData); |
|
if (pszClipData) { |
|
USES_CONVERSION; |
|
memcpy(pszClipData, str.GetBuffer(0), l); |
|
::GlobalUnlock(hClipData); |
|
::EmptyClipboard(); |
|
::SetClipboardData(CF_UNICODETEXT, hClipData); |
|
} |
|
} |
|
CloseClipboard(); |
|
} |
|
|
|
void CBrowserView::OnCopyLinkLocation() |
|
{ |
|
CString href, title; |
|
if (!::GetLinkTitleAndHref(m_contextNode, href, title)) |
|
return; |
|
|
|
if (!OpenClipboard()) |
|
return; |
|
|
|
SetClipboardTextData(m_hWnd, href); |
|
} |
|
|
|
void CBrowserView::OnCopyLinkText() |
|
{ |
|
CString href, title; |
|
if (!::GetLinkTitleAndHref(m_contextNode, href, title)) |
|
return; |
|
|
|
if (!OpenClipboard()) |
|
return; |
|
title.TrimLeft(L"\t "); |
|
while (title.Replace(L" ", L" ")); |
|
SetClipboardTextData(m_hWnd, title); |
|
} |
|
|
|
void CBrowserView::OnOpenLink() |
|
{ |
|
CString url, title; |
|
if (!GetLinkTitleAndHref(m_contextNode, url, title)) |
|
return; |
|
|
|
OpenURL(url, GetCurrentURI()); |
|
/* |
|
if (m_ctxData.linkUrl.IsEmpty()) |
|
return; |
|
|
|
OpenURL(m_ctxData.linkUrl, TRUE);*/ |
|
} |
|
|
|
void CBrowserView::OnOpenLinkInNewWindow() |
|
{ |
|
CString url, title; |
|
if (!GetLinkTitleAndHref(m_contextNode, url, title)) |
|
return; |
|
|
|
OpenURLInNewWindow(url, m_pWindow->GetDocURL(m_contextNode), FALSE); |
|
} |
|
|
|
void CBrowserView::OnOpenLinkInBackground() |
|
{ |
|
CString url, title; |
|
if (!::GetLinkTitleAndHref(m_contextNode, url, title)) |
|
return; |
|
|
|
OpenURLInNewWindow(url, m_pWindow->GetDocURL(m_contextNode), TRUE); |
|
} |
|
|
|
void CBrowserView::OnViewImageInNewWindow() |
|
{ |
|
CString imgSrc; |
|
if (!::GetImageSrc(m_contextNode, imgSrc)) |
|
if (!::GetBackgroundImageSrc(m_contextNode, imgSrc)) |
|
return; |
|
|
|
OpenURLInNewWindow(imgSrc, m_pWindow->GetDocURL(m_contextNode), FALSE); |
|
} |
|
|
|
void CBrowserView::OnUpdateViewImage(CCmdUI *pCmdUI) |
|
{ |
|
CString imgSrc; |
|
if (!::GetImageSrc(m_contextNode, imgSrc)) |
|
::GetBackgroundImageSrc(m_contextNode, imgSrc); |
|
|
|
pCmdUI->Enable(!imgSrc.IsEmpty()); |
|
} |
|
|
|
BOOL CBrowserView::SaveLink(LPCTSTR url) |
|
{ |
|
ASSERT(url); |
|
if (!url || !*url) |
|
return FALSE; |
|
|
|
if (!m_pWindow->SaveURL(url)) { |
|
AfxMessageBox(IDS_SAVE_FAILED, MB_OK|MB_ICONERROR); |
|
return FALSE; |
|
} |
|
|
|
return TRUE; |
|
} |
|
|
|
void CBrowserView::OnSaveLinkAs() |
|
{ |
|
CString url, title; |
|
if (!GetLinkTitleAndHref(m_contextNode, url, title)) |
|
return; |
|
SaveLink(url); |
|
} |
|
|
|
void CBrowserView::OnSaveImageAs() |
|
{ |
|
CString imgUrl; |
|
if (!GetImageSrc(m_contextNode, imgUrl)) |
|
if (!GetBackgroundImageSrc(m_contextNode, imgUrl)) |
|
return; |
|
|
|
SaveLink(imgUrl); |
|
|
|
/* |
|
nsresult rv; |
|
nsCOMPtr<nsIURI> imageURI; |
|
rv = NewURI(getter_AddRefs(imageURI), mCtxMenuImgSrc); |
|
NS_ENSURE_SUCCESS(rv, ); |
|
|
|
nsCOMPtr<nsIURI> referrer; |
|
mWebNav->GetCurrentURI(getter_AddRefs(referrer)); |
|
|
|
CSaveAsHandler* handler = new CSaveAsHandler(nullptr, nullptr, imageURI, nullptr, nullptr, referrer, mpBrowserFrame); |
|
rv = handler->Save(mCtxImgType.get(), mCtxImgDisposition.get()); |
|
if (NS_FAILED(rv) && rv != NS_ERROR_ABORT) |
|
AfxMessageBox(IDS_SAVE_FAILED, MB_OK|MB_ICONERROR);*/ |
|
} |
|
|
|
void CBrowserView::OnOpenFrame() |
|
{ |
|
CString url = m_pWindow->GetFrameURL(m_contextNode); |
|
if (url.IsEmpty()) return; |
|
OpenURL(url, GetCurrentURI()); |
|
} |
|
|
|
void CBrowserView::OnOpenFrameInNewWindow() |
|
{ |
|
CString url = m_pWindow->GetFrameURL(m_contextNode); |
|
if (url.IsEmpty()) return; |
|
OpenURLInNewWindow(url, GetCurrentURI(), FALSE); |
|
} |
|
|
|
void CBrowserView::OnOpenFrameInBackground() |
|
{ |
|
CString url = m_pWindow->GetFrameURL(m_contextNode); |
|
if (url.IsEmpty()) return; |
|
OpenURLInNewWindow(url, GetCurrentURI(), TRUE); |
|
} |
|
|
|
/* ** */ |
|
|
|
#if 0 |
|
void CBrowserView::OnDropFiles( HDROP drop ) |
|
{ |
|
UINT size = DragQueryFile(drop, 0, NULL, 0) + 1; |
|
char *filename = new char[size]; |
|
DragQueryFile(drop, 0, filename, size); |
|
|
|
if (stricmp(filename + (size-5), _T(".url")) == 0){ |
|
char tempUrl[1024]; |
|
::GetPrivateProfileString(_T("InternetShortcut"), _T("Url"), filename, tempUrl, 1023, filename); |
|
OpenURL(tempUrl); |
|
}else{ |
|
OpenURL(filename); |
|
} |
|
|
|
delete filename; |
|
DragFinish(drop); |
|
} |
|
#endif |
|
|
|
void CBrowserView::AddURLAndPerformDrag(COleDataSource& datasource) |
|
{ |
|
USES_CONVERSION; |
|
|
|
CString currentURI = GetCurrentURI(); |
|
DWORD currentURISize = currentURI.GetLength()+1; |
|
const DWORD extraFileSize = 26; // size of [InternetShortcut]\r\nURL=...\r\n |
|
|
|
HGLOBAL hURL = GlobalAlloc(GHND, currentURISize); |
|
char *url = (char *)GlobalLock(hURL); |
|
strcpy(url, T2CA(currentURI)); |
|
GlobalUnlock(hURL); |
|
|
|
HGLOBAL hFileDescriptor = GlobalAlloc(GHND, sizeof(FILEGROUPDESCRIPTOR)); |
|
FILEGROUPDESCRIPTOR *fgd = (FILEGROUPDESCRIPTOR *)GlobalLock(hFileDescriptor); |
|
fgd->cItems = 1; |
|
fgd->fgd[0].dwFlags = FD_FILESIZE | FD_LINKUI; |
|
fgd->fgd[0].nFileSizeLow = currentURISize+extraFileSize; |
|
|
|
CString title = GetPageTitle(); |
|
_tcsncpy(fgd->fgd[0].cFileName, title, 250); |
|
_tcscat(fgd->fgd[0].cFileName, _T(".url")); |
|
MakeFilename(fgd->fgd[0].cFileName); |
|
GlobalUnlock(hFileDescriptor); |
|
|
|
HGLOBAL hFileContents = GlobalAlloc(GHND, currentURISize+extraFileSize); |
|
char *contents = (char *)GlobalLock(hFileContents); |
|
strcpy(contents, "[InternetShortcut]\r\nURL="); |
|
strcat(contents, url); |
|
strcat(contents, "\r\n"); |
|
GlobalUnlock(hFileContents); |
|
|
|
UINT cfFileDescriptor = ::RegisterClipboardFormat(CFSTR_FILEDESCRIPTOR); |
|
UINT cfFileContents = ::RegisterClipboardFormat(CFSTR_FILECONTENTS); |
|
UINT cfShellURL = ::RegisterClipboardFormat(CFSTR_SHELLURL); |
|
|
|
FORMATETC fmetc = { cfFileContents, NULL, DVASPECT_CONTENT, 0, TYMED_FILE }; |
|
|
|
// Note: order is important here! |
|
datasource.CacheGlobalData(cfFileContents, hFileContents, &fmetc); |
|
datasource.CacheGlobalData(cfFileDescriptor, hFileDescriptor); |
|
datasource.CacheGlobalData(cfShellURL, hURL); |
|
datasource.CacheGlobalData(CF_TEXT, hURL); |
|
datasource.DoDragDrop(); |
|
|
|
GlobalFree(hURL); |
|
GlobalFree(hFileDescriptor); |
|
GlobalFree(hFileContents); |
|
} |
|
|
|
void CBrowserView::OnDragURL( NMHDR * pNotifyStruct, LRESULT * result ) |
|
{ |
|
USES_CONVERSION; |
|
*result = 0; |
|
|
|
COleDataSource datasource; |
|
AddURLAndPerformDrag(datasource); |
|
} |
|
|
|
// this should probably go in BrowserViewUtils.cpp, but I don't want to add a function prototype :) |
|
BOOL CALLBACK SearchProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) |
|
{ |
|
static CString *search = NULL; |
|
|
|
if (uMsg == WM_INITDIALOG) { |
|
if (search) { |
|
EndDialog(hwndDlg, false); |
|
return TRUE; |
|
} |
|
search = (CString *)lParam; |
|
::SetFocus(::GetDlgItem(hwndDlg, IDC_SEARCH_QUERY)); |
|
return false; |
|
} |
|
|
|
else if (uMsg == WM_COMMAND) { |
|
if (LOWORD(wParam) == IDOK){ |
|
TCHAR buffer[256]; |
|
::GetDlgItemText(hwndDlg, IDC_SEARCH_QUERY, buffer, 255); |
|
*search = buffer; |
|
search = NULL; |
|
EndDialog(hwndDlg, true); |
|
} |
|
else if (LOWORD(wParam) == IDCANCEL) { |
|
search = NULL; |
|
EndDialog(hwndDlg, false); |
|
} |
|
return true; |
|
} |
|
|
|
return false; |
|
} |
|
|
|
void CBrowserView::OnNavSearch() |
|
{ |
|
CString search; |
|
if (DialogBoxParam(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDD_SEARCH_DIALOG), m_hWnd, SearchProc, (LPARAM)&search)) { |
|
search.Replace(_T("+"), _T("%2b")); |
|
search = GetSearchURL(search); |
|
if (search.IsEmpty()) |
|
search = theApp.preferences.GetString("kmeleon.general.searchEngine", _T("http://www.google.com/search?q=")) + search; |
|
OpenURL(search); |
|
} |
|
} |
|
|
|
void CBrowserView::OnFileClose() |
|
{ |
|
mpBrowserFrame->PostMessage(WM_CLOSE); |
|
} |
|
|
|
void CBrowserView::OnFileSaveFrameAs() |
|
{ |
|
if (!m_pWindow->SaveDocument(TRUE)) |
|
AfxMessageBox(IDS_SAVE_FAILED, MB_OK|MB_ICONERROR); |
|
//SaveLink(m_ctxData.frameUrl); |
|
} |
|
|
|
void CBrowserView::OnViewPageInfo() |
|
{ |
|
CString uri = m_pWindow->GetURI(); |
|
|
|
// Build the page info url |
|
/*if (uri.Find(_T("https://")) == -1) |
|
uri.Insert(0, _T("about:cache-entry?storage=disk&context=&eid=&uri=")); |
|
else*/ |
|
uri.Insert(0, _T("about:cache-entry?storage=disk&context=&eid=&uri=")); |
|
|
|
OpenURLInNewWindow(uri); |
|
} |
|
|
|
void CBrowserView::OnViewFrameInfo() |
|
{ |
|
CString viewFrameInfoUrl = m_pWindow->GetFrameURL(m_contextNode); |
|
if (viewFrameInfoUrl.IsEmpty()) return; |
|
|
|
|
|
/*if (viewFrameInfoUrl.Find(_T("https://")) == -1) |
|
viewFrameInfoUrl = _T("about:cache-entry?storage=disk&context=&eid=&uri=") + viewFrameInfoUrl; |
|
else*/ |
|
viewFrameInfoUrl = _T("about:cache-entry?storage=disk&context=&eid=&uri=") + viewFrameInfoUrl; |
|
|
|
OpenURLInNewWindow(viewFrameInfoUrl); |
|
} |
|
|
|
void CBrowserView::OnCopyImageLocation() |
|
{ |
|
CString imgSrc; |
|
if (!::GetImageSrc(m_contextNode, imgSrc)) |
|
if (!::GetBackgroundImageSrc(m_contextNode, imgSrc)) |
|
return; |
|
|
|
if (! OpenClipboard()) |
|
return; |
|
|
|
SetClipboardTextData(m_hWnd, imgSrc); |
|
} |
|
|
|
void CBrowserView::OnCopyImageContent() |
|
{ |
|
m_pWindow->CopyImage(); |
|
} |
|
|
|
|
|
void CBrowserView::OnUpdateFilePrintPreview(CCmdUI* pCmdUI) |
|
{ |
|
pCmdUI->SetCheck(m_InPrintPreview); |
|
} |
|
|
|
void CBrowserView::OnKmeleonHome() |
|
{ |
|
OpenURL(KMELEON_HOMEPAGE_URL); |
|
} |
|
|
|
void CBrowserView::OnKmeleonForum() |
|
{ |
|
OpenURL(KMELEON_FORUM_URL); |
|
} |
|
|
|
void CBrowserView::OnKmeleonFAQ() |
|
{ |
|
OpenURL(KMELEON_FAQ_URL); |
|
} |
|
|
|
void CBrowserView::OnKmeleonManual() |
|
{ |
|
OpenURL(KMELEON_MANUAL_URL); |
|
} |
|
|
|
void CBrowserView::OnAboutPlugins() |
|
{ |
|
OpenURLInNewWindow(ABOUT_PLUGINS_URL); |
|
} |
|
|
|
void CBrowserView::OnMouseAction() |
|
{/* |
|
if (m_pWindow->GetURI().IsEmpty()) |
|
return; |
|
|
|
POINT pt; |
|
::GetCursorPos(&pt); |
|
|
|
HWND hWnd; |
|
hWnd = ::GetFocus(); |
|
|
|
if (hWnd && ::IsChild(m_hWnd, hWnd)) { |
|
|
|
::SendMessage(hWnd, WM_CONTEXTMENU, (WPARAM) hWnd, MAKELONG(pt.x, pt.y)); |
|
if ( (maccel_key!=WM_MBUTTONDOWN && mCtxMenuImgSrc.Length()>0) || mCtxMenuLinkUrl.Length() > 0) |
|
::PostMessage(mpBrowserFrame->m_hWnd, WM_COMMAND, (WPARAM)maccel_cmd, (LPARAM)0); |
|
else if (!m_panning && maccel_key==WM_MBUTTONDOWN) { |
|
maccel_pan=1; |
|
StartPanning(TRUE); |
|
} |
|
} |
|
|
|
maccel_cmd = 0; |
|
*/ |
|
} |
|
|
|
void CBrowserView::OnIncreaseFullZoom() |
|
{ |
|
m_pWindow->ChangeFullZoom(1); |
|
} |
|
|
|
void CBrowserView::OnDecreaseFullZoom() |
|
{ |
|
m_pWindow->ChangeFullZoom(-1); |
|
} |
|
|
|
void CBrowserView::OnIncreaseFont() |
|
{ |
|
m_pWindow->ChangeTextSize(1); |
|
} |
|
|
|
void CBrowserView::OnDecreaseFont() |
|
{ |
|
m_pWindow->ChangeTextSize(-1); |
|
} |
|
|
|
void CBrowserView::OnSecurityStateIcon() |
|
{ |
|
ShowSecurityInfo(); |
|
} |
|
|
|
void CBrowserView::OnPopupBlockedIcon() |
|
{ |
|
CString msg; |
|
int x; |
|
// XXXX |
|
msg.Format(IDS_ALLOW_POPUP, ((CBrowserGlue*)m_pBrowserGlue)->mPopupBlockedHost); |
|
if ( (x = MessageBox(msg, 0, MB_YESNO|MB_ICONQUESTION)) == IDYES) |
|
{ |
|
USES_CONVERSION; |
|
CPermissions permissions("popup"); |
|
permissions.set(T2CA(((CBrowserGlue*)m_pBrowserGlue)->mPopupBlockedHost), 1); |
|
} |
|
} |
|
|
|
|
|
void CBrowserView::OnFilePrint() |
|
{ |
|
theApp.preferences.SetBool("print.use_native_print_dialog", TRUE); |
|
theApp.preferences.SetBool("print.show_print_progress", FALSE); |
|
m_bCurrentlyPrinting = TRUE; |
|
m_pWindow->Print(); |
|
m_bCurrentlyPrinting = FALSE; |
|
} |
|
|
|
void CBrowserView::OnFilePrintPreview() |
|
{ |
|
if (m_pWindow->PrintPreview()) |
|
;//m_InPrintPreview = ! m_InPrintPreview; |
|
} |
|
|
|
void CBrowserView::OnFilePrintSetup() |
|
{ |
|
m_pWindow->PrintSetup(); |
|
} |
|
|
|
void CBrowserView::OnUpdateFilePrint(CCmdUI* pCmdUI) |
|
{ |
|
pCmdUI->Enable(!m_bCurrentlyPrinting); |
|
} |
|
|
|
void CBrowserView::Activate(BOOL bActive) |
|
{ |
|
m_pWindow->SetActive(bActive); |
|
} |
|
|
|
void CBrowserView::Highlight(const wchar_t* string, BOOL matchCase) |
|
{ |
|
CString str; |
|
str.LoadString(IDS_HIGHLIGHTING); |
|
mpBrowserFrame->UpdateStatus(str); |
|
|
|
//ASSERT(string || m_lastHighlightWord.Length()); |
|
|
|
if (string && string[0]) |
|
{ |
|
m_pWindow->Highlight(L"Yellow", string, matchCase); |
|
m_lastHighlightWord = string; |
|
} |
|
else |
|
{ |
|
m_pWindow->Highlight(NULL, m_lastHighlightWord.get(), matchCase); |
|
m_lastHighlightWord.SetLength(0); |
|
} |
|
|
|
str.LoadString(AFX_IDS_IDLEMESSAGE); |
|
mpBrowserFrame->UpdateStatus(str); |
|
} |
|
|
|
int CBrowserView::GetSiteIcon() |
|
{ |
|
return theApp.favicons.GetIcon(GetBrowserGlue()->mIconURI); |
|
} |
|
|
|
void CBrowserView::OnSHistoryBack(UINT nID) |
|
{ |
|
int index = 0, count; |
|
m_pWindow->GetSHistoryState(index, count); |
|
m_pWindow->GotoHistoryIndex(nID - SHISTORYB_START_ID + (index>MAX_SHMENU_NUMBER/2?index-MAX_SHMENU_NUMBER/2:0)); |
|
} |
|
|
|
void CBrowserView::OnSHistoryForward(UINT nID) |
|
{ |
|
int index = 0, count; |
|
m_pWindow->GetSHistoryState(index, count); |
|
m_pWindow->GotoHistoryIndex(nID - SHISTORYF_START_ID + index + 1); |
|
} |
|
|
|
void CBrowserView::OnUpdateSHistory(CCmdUI* pCmdUI) |
|
{ |
|
pCmdUI->Enable(); |
|
} |
|
|
|
bool CBrowserView::OnMenuSelect(UINT nItemID, UINT nFlags, HMENU hSysMenu) |
|
{ |
|
CString title, url; |
|
if (nItemID >= SHISTORYF_START_ID && nItemID <= SHISTORYF_END_ID) { |
|
int index,count; |
|
m_pWindow->GetSHistoryState(index, count); |
|
m_pWindow->GetSHistoryInfoAt(nItemID - SHISTORYF_START_ID + index + 1, title, url); |
|
mpBrowserFrame->UpdateStatus(url); |
|
return true; |
|
} else if (nItemID >= SHISTORYB_START_ID && nItemID <= SHISTORYB_END_ID) { |
|
m_pWindow->GetSHistoryInfoAt(nItemID - SHISTORYB_START_ID, title, url); |
|
mpBrowserFrame->UpdateStatus(url); |
|
return true; |
|
} |
|
|
|
KmCommand* cmd = theApp.commands.GetCommand(nItemID); |
|
if (cmd && cmd->GetDesc().GetLength()>0) { |
|
mpBrowserFrame->UpdateStatus(theApp.lang.Translate(cmd->GetDesc())); |
|
return true; |
|
} |
|
|
|
return false; |
|
} |
|
|
|
void CBrowserView::OnToggleJS() |
|
{ |
|
m_pWindow->AllowJS(!m_pWindow->IsJSAllowed()); |
|
} |
|
|
|
void CBrowserView::OnUpdateToggleJS(CCmdUI* pCmdUI) |
|
{ |
|
pCmdUI->Enable(); |
|
pCmdUI->SetCheck(!m_pWindow->IsJSAllowed()); |
|
} |
|
|
|
void CBrowserView::OnEnableJS() |
|
{ |
|
m_pWindow->AllowJS(TRUE); |
|
} |
|
|
|
void CBrowserView::OnDisableJS() |
|
{ |
|
m_pWindow->AllowJS(FALSE); |
|
}
|
|
|