/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*
* Web Browser Extended version by McCM (HTTP v1.3)
* http://mcdcplusplus.myftp.org/
*
*
* Supports:
* Standard browsing functions: Home, goBack, goForward, refresh, stop, go
* Theme support, print dialog.
*
*
* License:
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*
*/
#include "stdafx.h"
#include "../client/DCPlusPlus.h"
#include "Resource.h"
#include "BrowserFrame.h"
#include "WinUtil.h"
#include "../client/File.h"
#include "mainfrm.h"
#include "things.h"
#include "docobj.h"
BrowserFrame::BrowserFrame()
: addressContainer( WC_COMBOBOX , this , ADDRESS_MAP ),
addressEditContainer( WC_EDIT , this , ADDRESS_MAP ),
closed(false)
{
largeImages.CreateFromImage(Images::ToolbarIE().c_str(), 20, 20, CLR_DEFAULT, IMAGE_BITMAP, LR_CREATEDIBSECTION | LR_SHARED| LR_LOADFROMFILE);
largeImagesHot.CreateFromImage(Images::ToolbarIEhi().c_str(), 20, 20, CLR_DEFAULT, IMAGE_BITMAP, LR_CREATEDIBSECTION | LR_SHARED| LR_LOADFROMFILE);
}
BrowserFrame::~BrowserFrame() {
largeImages.Destroy();
largeImagesHot.Destroy();
web->Release();
}
void BrowserFrame::openWindow(const tstring& url/* = _T("")*/) {
BrowserFrame* pChild = new BrowserFrame();
pChild->CreateEx(WinUtil::mdiClient, frame->rcDefault, CTSTRING(BROWSER_HOME));
if(url != _T("")) {
pChild->go(url);
}
}
LRESULT BrowserFrame::OnCreate(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& bHandled) {
CreateSimpleReBar( ATL_SIMPLE_REBAR_NOBORDER_STYLE );
HWND hWndBrowser = createToolbar();
AddSimpleReBarBand( hWndBrowser , NULL, TRUE ,780,TRUE);
browser.Create(m_hWnd, rcDefault, Text::toT(SETTING(HOME_LINK)).c_str() , WS_CHILD | WS_VISIBLE | WS_BORDER, 0, 1);
browser.QueryControl(IID_IWebBrowser2,(void**)&web);
load();
WinUtil::SetIcon(m_hWnd, _T("browser.ico"));
bHandled = FALSE;
return 1;
}
LRESULT BrowserFrame::OnClose(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& bHandled) {
if(!closed) {
closed = true;
PostMessage(WM_CLOSE);
} else {
bHandled = FALSE;
}
return 0;
}
void BrowserFrame::UpdateLayout(BOOL bResizeBars /* = TRUE */) {
CRect rc;
GetClientRect(rc);
UpdateBarsPosition(rc, bResizeBars);
browser.MoveWindow(rc);
}
HWND BrowserFrame::createToolbar() {
int adressitem;
ctrlToolbar.Create(m_hWnd, NULL, NULL, ATL_SIMPLE_CMDBAR_PANE_STYLE | TBSTYLE_FLAT | TBSTYLE_TOOLTIPS, 0, ATL_IDW_TOOLBAR);
ctrlToolbar.SetImageList(largeImages);
ctrlToolbar.SetHotImageList(largeImagesHot);
const int numButtons = 8;
TBBUTTON tb[numButtons];
memset(tb, 0, sizeof(tb));
int n = 0, bitmap = 0;
tb[n].iBitmap = bitmap++;
tb[n].idCommand = IDC_GOHOME;
tb[n].fsState = TBSTATE_ENABLED ;
tb[n].fsStyle = TBSTYLE_BUTTON | TBSTYLE_AUTOSIZE;
n++;
tb[n].iBitmap = bitmap++;
tb[n].idCommand = IDC_GOBACK;
tb[n].fsState = TBSTATE_ENABLED;
tb[n].fsStyle = TBSTYLE_BUTTON | TBSTYLE_AUTOSIZE;
n++;
tb[n].iBitmap = bitmap++;
tb[n].idCommand = IDC_GOFORWARD;
tb[n].fsState = TBSTATE_ENABLED;
tb[n].fsStyle = TBSTYLE_BUTTON | TBSTYLE_AUTOSIZE;
n++;
tb[n].iBitmap = bitmap++;
tb[n].idCommand = IDC_REFRESH;
tb[n].fsState = TBSTATE_ENABLED;
tb[n].fsStyle = TBSTYLE_BUTTON | TBSTYLE_AUTOSIZE;
n++;
tb[n].iBitmap = bitmap++;
tb[n].idCommand = IDC_STOP;
tb[n].fsState = TBSTATE_ENABLED;
tb[n].fsStyle = TBSTYLE_BUTTON | TBSTYLE_AUTOSIZE;
n++;
adressitem = n;
tb[n].iBitmap = 200;
tb[n].fsStyle = TBSTYLE_SEP;
n++;
tb[n].iBitmap = bitmap++;
tb[n].idCommand = IDC_GOADDRESS;
tb[n].fsState = TBSTATE_ENABLED;
tb[n].fsStyle = TBSTYLE_BUTTON | TBSTYLE_AUTOSIZE;
n++;
tb[n].iBitmap = bitmap++;
tb[n].idCommand = IDC_PRINT;
tb[n].fsState = TBSTATE_ENABLED;
tb[n].fsStyle = TBSTYLE_BUTTON | TBSTYLE_AUTOSIZE;
ctrlToolbar.SetButtonStructSize();
ctrlToolbar.AddButtons(numButtons, tb);
ctrlToolbar.AutoSize();
CRect rect;
ctrlToolbar.GetItemRect( adressitem,&rect);
rect.bottom += 100;
address.Create(ctrlToolbar.m_hWnd, rect , NULL, WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN |
WS_VSCROLL | CBS_DROPDOWN | CBS_AUTOHSCROLL , 0);
address.SetExtendedUI();
addressContainer.SubclassWindow(address);
POINT pt;
pt.x = 10;
pt.y = 10;
HWND hWnd = address.ChildWindowFromPoint(pt);
if(hWnd != NULL ) {
addressEditContainer.SubclassWindow(hWnd);
}
return ctrlToolbar.m_hWnd;
}
LRESULT BrowserFrame::onAddressChar(UINT /*uMsg*/, WPARAM wParam, LPARAM /*lParam*/, BOOL& bHandled){
if(wParam == VK_RETURN) {
goAddress();
} else {
bHandled = FALSE;
}
return 0;
}
void BrowserFrame::goAddress(){
if(!(address.GetWindowTextLength() > 0)) {
return;
}
tstring s(address.GetWindowTextLength() + 1, _T('\0'));
address.GetWindowText(&s[0], s.size());
if(find(lastAddresses.begin(), lastAddresses.end(), s) == lastAddresses.end()) {
address.InsertString(0, s.c_str());
lastAddresses.push_back(s);
}
web->Navigate(BSTR(s.c_str()), NULL, NULL, NULL, NULL);
}
void BrowserFrame::load() {
for(TStringIter i = lastAddresses.begin(); i != lastAddresses.end(); ++i) {
address.InsertString(0, i->c_str());
}
}
LRESULT BrowserFrame::onAppCommand(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM lParam, BOOL& bHandled) {
bHandled = TRUE;
switch(GET_APPCOMMAND_LPARAM(lParam)) {
case APPCOMMAND_BROWSER_FORWARD: PostMessage(WM_COMMAND, IDC_GOFORWARD, 0); break;
case APPCOMMAND_BROWSER_BACKWARD: PostMessage(WM_COMMAND, IDC_GOBACK, 0); break;
case APPCOMMAND_CLOSE: PostMessage(WM_CLOSE); break;
default: bHandled = FALSE; break;
}
return bHandled;
}
/**
* @file
* $Id: BrowserFrame.cpp 1.3 2006-10-26 22:55:18 mccm $
*/