📄 webkit.mm
字号:
/////////////////////////////////////////////////////////////////////////////// Name: webkit.mm// Purpose: wxWebKitCtrl - embeddable web kit control// Author: Jethro Grassie / Kevin Ollivier// Modified by:// Created: 2004-4-16// RCS-ID: $Id: webkit.mm,v 1.24.2.1 2006/09/03 01:05:41 KO Exp $// Copyright: (c) Jethro Grassie / Kevin Ollivier// Licence: wxWindows licence/////////////////////////////////////////////////////////////////////////////#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA) #pragma implementation "webkit.h"#endif// For compilers that support precompilation, includes "wx.h".#include "wx/wxprec.h"#include "wx/splitter.h"#ifndef WX_PRECOMP #include "wx/wx.h"#endif#if wxUSE_WEBKIT#ifdef __WXCOCOA__#include "wx/cocoa/autorelease.h"#else#include "wx/mac/uma.h"#include <Carbon/Carbon.h>#include <WebKit/WebKit.h>#include <WebKit/HIWebView.h>#include <WebKit/CarbonUtils.h>#endif#include "wx/html/webkit.h"#include "wx/notebook.h"// ----------------------------------------------------------------------------// macros// ----------------------------------------------------------------------------IMPLEMENT_DYNAMIC_CLASS(wxWebKitCtrl, wxControl)BEGIN_EVENT_TABLE(wxWebKitCtrl, wxControl) EVT_SIZE(wxWebKitCtrl::OnSize)END_EVENT_TABLE()// ----------------------------------------------------------------------------// wxWebKit Events// ----------------------------------------------------------------------------IMPLEMENT_DYNAMIC_CLASS( wxWebKitStateChangedEvent, wxCommandEvent )DEFINE_EVENT_TYPE( wxEVT_WEBKIT_STATE_CHANGED )wxWebKitStateChangedEvent::wxWebKitStateChangedEvent( wxWindow* win ){ SetEventType( wxEVT_WEBKIT_STATE_CHANGED); SetEventObject( win ); SetId(win->GetId());}//---------------------------------------------------------// helper functions for NSString<->wxString conversion//---------------------------------------------------------inline wxString wxStringWithNSString(NSString *nsstring){#if wxUSE_UNICODE return wxString([nsstring UTF8String], wxConvUTF8);#else return wxString([nsstring lossyCString]);#endif // wxUSE_UNICODE}inline NSString* wxNSStringWithWxString(const wxString &wxstring){#if wxUSE_UNICODE return [NSString stringWithUTF8String: wxstring.mb_str(wxConvUTF8)];#else return [NSString stringWithCString: wxstring.c_str() length:wxstring.Len()];#endif // wxUSE_UNICODE}@interface MyFrameLoadMonitor : NSObject{ wxWindow* webKitWindow;}- initWithWxWindow: (wxWindow*)inWindow;@end// ----------------------------------------------------------------------------// creation/destruction// ----------------------------------------------------------------------------bool wxWebKitCtrl::Create(wxWindow *parent, wxWindowID winID, const wxString& strURL, const wxPoint& pos, const wxSize& size, long style, const wxValidator& validator, const wxString& name){ m_currentURL = strURL; //m_pageTitle = _("Untitled Page"); //still needed for wxCocoa??/* int width, height; wxSize sizeInstance; if (size.x == wxDefaultCoord || size.y == wxDefaultCoord) { m_parent->GetClientSize(&width, &height); sizeInstance.x = width; sizeInstance.y = height; } else { sizeInstance.x = size.x; sizeInstance.y = size.y; }*/ // now create and attach WebKit view...#ifdef __WXCOCOA__ wxControl::Create(parent, m_windowID, pos, sizeInstance, style , validator , name); SetSize(pos.x, pos.y, sizeInstance.x, sizeInstance.y); wxTopLevelWindowCocoa *topWin = wxDynamicCast(this, wxTopLevelWindowCocoa); NSWindow* nsWin = topWin->GetNSWindow(); NSRect rect; rect.origin.x = pos.x; rect.origin.y = pos.y; rect.size.width = sizeInstance.x; rect.size.height = sizeInstance.y; m_webView = (WebView*)[[WebView alloc] initWithFrame:rect frameName:@"webkitFrame" groupName:@"webkitGroup"]; SetNSView(m_webView); [m_cocoaNSView release]; if(m_parent) m_parent->CocoaAddChild(this); SetInitialFrameRect(pos,sizeInstance);#else m_macIsUserPane = false; wxControl::Create(parent, winID, pos, size, style , validator , name); m_peer = new wxMacControl(this); WebInitForCarbon(); HIWebViewCreate( m_peer->GetControlRefAddr() ); m_webView = (WebView*) HIWebViewGetWebView( m_peer->GetControlRef() ); MacPostControlCreate(pos, size); HIViewSetVisible( m_peer->GetControlRef(), true ); [m_webView setHidden:false];#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_3 if ( UMAGetSystemVersion() >= 0x1030 ) HIViewChangeFeatures( m_peer->GetControlRef() , kHIViewIsOpaque , 0 ) ;#endif#endif // Register event listener interfaces MyFrameLoadMonitor* myFrameLoadMonitor = [[MyFrameLoadMonitor alloc] initWithWxWindow: (wxWindow*)this]; [m_webView setFrameLoadDelegate:myFrameLoadMonitor]; LoadURL(m_currentURL); return true;}wxWebKitCtrl::~wxWebKitCtrl(){}// ----------------------------------------------------------------------------// public methods// ----------------------------------------------------------------------------void wxWebKitCtrl::LoadURL(const wxString &url){ if( !m_webView ) return; [[m_webView mainFrame] loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:wxNSStringWithWxString(url)]]]; m_currentURL = url;}bool wxWebKitCtrl::CanGoBack(){ if ( !m_webView ) return false; return [m_webView canGoBack];}bool wxWebKitCtrl::CanGoForward(){ if ( !m_webView ) return false; return [m_webView canGoForward];}bool wxWebKitCtrl::GoBack(){ if ( !m_webView ) return false; bool result = [(WebView*)m_webView goBack]; return result;}bool wxWebKitCtrl::GoForward(){ if ( !m_webView ) return false; bool result = [(WebView*)m_webView goForward]; return result;}void wxWebKitCtrl::Reload(){ if ( !m_webView ) return; [[m_webView mainFrame] reload];}void wxWebKitCtrl::Stop(){ if ( !m_webView ) return; [[m_webView mainFrame] stopLoading];}bool wxWebKitCtrl::CanGetPageSource(){ if ( !m_webView ) return false; WebDataSource* dataSource = [[m_webView mainFrame] dataSource]; return ( [[dataSource representation] canProvideDocumentSource] );}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -