blob: 411f7950cc2dfd119b472b29fc10502fdd540a88 [file] [log] [blame]
/*
* Copyright (C) 2007 Kevin Ollivier <kevino@theolliviers.com>
*
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "config.h"
#include "ChromeClientWx.h"
#include "FileChooser.h"
#include "FloatRect.h"
#include "FrameLoadRequest.h"
#include "NotImplemented.h"
#include "PlatformString.h"
#include <stdio.h>
#include <wx/wxprec.h>
#ifndef WX_PRECOMP
#include <wx/wx.h>
#endif
#include <wx/textdlg.h>
#include <wx/tooltip.h>
#include "WebBrowserShell.h"
#include "WebView.h"
#include "WebViewPrivate.h"
namespace WebCore {
ChromeClientWx::ChromeClientWx(wxWebView* webView)
{
m_webView = webView;
}
ChromeClientWx::~ChromeClientWx()
{
}
void ChromeClientWx::chromeDestroyed()
{
notImplemented();
}
void ChromeClientWx::setWindowRect(const FloatRect&)
{
notImplemented();
}
FloatRect ChromeClientWx::windowRect()
{
notImplemented();
return FloatRect();
}
FloatRect ChromeClientWx::pageRect()
{
notImplemented();
return FloatRect();
}
float ChromeClientWx::scaleFactor()
{
notImplemented();
return 0.0;
}
void ChromeClientWx::focus()
{
notImplemented();
}
void ChromeClientWx::unfocus()
{
notImplemented();
}
bool ChromeClientWx::canTakeFocus(FocusDirection)
{
notImplemented();
return false;
}
void ChromeClientWx::takeFocus(FocusDirection)
{
notImplemented();
}
Page* ChromeClientWx::createWindow(Frame*, const FrameLoadRequest& request, const WindowFeatures&)
{
// FIXME: Create a EVT_WEBKIT_NEW_WINDOW event, and only run this code
// when that event is not handled.
Page* myPage = 0;
wxWebBrowserShell* newFrame = new wxWebBrowserShell(wxTheApp->GetAppName());
if (newFrame->webview) {
newFrame->webview->LoadURL(request.resourceRequest().url().string());
newFrame->Show(true);
WebViewPrivate* impl = newFrame->webview->m_impl;
if (impl)
myPage = impl->page;
}
return myPage;
}
Page* ChromeClientWx::createModalDialog(Frame*, const FrameLoadRequest&)
{
notImplemented();
return 0;
}
void ChromeClientWx::show()
{
notImplemented();
}
bool ChromeClientWx::canRunModal()
{
notImplemented();
return false;
}
void ChromeClientWx::runModal()
{
notImplemented();
}
void ChromeClientWx::setToolbarsVisible(bool)
{
notImplemented();
}
bool ChromeClientWx::toolbarsVisible()
{
notImplemented();
return false;
}
void ChromeClientWx::setStatusbarVisible(bool)
{
notImplemented();
}
bool ChromeClientWx::statusbarVisible()
{
notImplemented();
return false;
}
void ChromeClientWx::setScrollbarsVisible(bool)
{
notImplemented();
}
bool ChromeClientWx::scrollbarsVisible()
{
notImplemented();
return false;
}
void ChromeClientWx::setMenubarVisible(bool)
{
notImplemented();
}
bool ChromeClientWx::menubarVisible()
{
notImplemented();
return false;
}
void ChromeClientWx::setResizable(bool)
{
notImplemented();
}
void ChromeClientWx::addMessageToConsole(const String& message,
unsigned int lineNumber,
const String& sourceID)
{
if (m_webView) {
wxWebViewConsoleMessageEvent wkEvent(m_webView);
wkEvent.SetMessage(message);
wkEvent.SetLineNumber(lineNumber);
wkEvent.SetSourceID(sourceID);
m_webView->GetEventHandler()->ProcessEvent(wkEvent);
}
}
bool ChromeClientWx::canRunBeforeUnloadConfirmPanel()
{
notImplemented();
return true;
}
bool ChromeClientWx::runBeforeUnloadConfirmPanel(const String& string,
Frame* frame)
{
wxMessageDialog dialog(NULL, string, wxT("Confirm Action?"), wxYES_NO);
return dialog.ShowModal() == wxYES;
}
void ChromeClientWx::closeWindowSoon()
{
notImplemented();
}
/*
Sites for testing prompts:
Alert - just type in a bad web address or http://www.htmlite.com/JS002.php
Prompt - http://www.htmlite.com/JS007.php
Confirm - http://www.htmlite.com/JS006.php
*/
void ChromeClientWx::runJavaScriptAlert(Frame* frame, const String& string)
{
wxMessageBox(string, wxT("JavaScript Alert"), wxOK);
}
bool ChromeClientWx::runJavaScriptConfirm(Frame* frame, const String& string)
{
wxMessageDialog dialog(NULL, string, wxT("JavaScript Confirm"), wxYES_NO);
dialog.Centre();
return (dialog.ShowModal() == wxID_YES);
}
bool ChromeClientWx::runJavaScriptPrompt(Frame* frame, const String& message, const String& defaultValue, String& result)
{
wxTextEntryDialog dialog(NULL, message, wxT("JavaScript Prompt"), wxEmptyString, wxOK | wxCANCEL);
dialog.Centre();
if (dialog.ShowModal() == wxID_OK) {
result = dialog.GetValue();
return true;
}
return false;
}
void ChromeClientWx::setStatusbarText(const String&)
{
notImplemented();
}
bool ChromeClientWx::shouldInterruptJavaScript()
{
notImplemented();
return false;
}
bool ChromeClientWx::tabsToLinks() const
{
notImplemented();
return false;
}
IntRect ChromeClientWx::windowResizerRect() const
{
notImplemented();
return IntRect();
}
void ChromeClientWx::repaint(const IntRect& rect, bool contentChanged, bool immediate, bool repaintContentOnly)
{
if (!m_webView)
return;
if (contentChanged)
m_webView->RefreshRect(rect);
if (immediate) {
m_webView->Update();
}
}
IntRect ChromeClientWx::windowToScreen(const IntRect& rect) const
{
notImplemented();
return rect;
}
IntPoint ChromeClientWx::screenToWindow(const IntPoint& point) const
{
notImplemented();
return point;
}
PlatformWidget ChromeClientWx::platformWindow() const
{
return 0;
}
void ChromeClientWx::contentsSizeChanged(Frame*, const IntSize&) const
{
notImplemented();
}
void ChromeClientWx::scrollBackingStore(int dx, int dy,
const IntRect& scrollViewRect,
const IntRect& clipRect)
{
notImplemented();
}
void ChromeClientWx::updateBackingStore()
{
notImplemented();
}
void ChromeClientWx::mouseDidMoveOverElement(const HitTestResult&, unsigned modifierFlags)
{
notImplemented();
}
void ChromeClientWx::setToolTip(const String& tip)
{
wxToolTip* tooltip = m_webView->GetToolTip();
if (!tooltip || tooltip->GetTip() != wxString(tip))
m_webView->SetToolTip(tip);
}
void ChromeClientWx::print(Frame*)
{
notImplemented();
}
#if ENABLE(DATABASE)
void ChromeClientWx::exceededDatabaseQuota(Frame*, const String&)
{
notImplemented();
}
#endif
#if ENABLE(OFFLINE_WEB_APPLICATIONS)
void ChromeClientWx::reachedMaxAppCacheSize(int64_t spaceNeeded)
{
notImplemented();
}
#endif
void ChromeClientWx::scroll(const IntSize&, const IntRect&, const IntRect&)
{
notImplemented();
}
void ChromeClientWx::runOpenPanel(Frame*, PassRefPtr<FileChooser>)
{
notImplemented();
}
}