📄 webcorebridge.cpp
字号:
// ### NOT IMPLEMENTED events
/*
- (void)mouseDown:(NSEvent *)event
{
iPart->mouseDown(event);
}
- (void)mouseDragged:(NSEvent *)event
{
iPart->mouseDragged(event);
}
- (void)mouseUp:(NSEvent *)event
{
iPart->mouseUp(event);
}
- (void)mouseMoved:(NSEvent *)event
{
iPart->mouseMoved(event);
}
- (BOOL)sendContextMenuEvent:(NSEvent *)event
{
return iPart->sendContextMenuEvent(event);
}
*/
// ### NOT IMPLEMENTED dom interface
/*
- (DOMElement *)elementForView:(NSView *)view
{
// FIXME: implemented currently for only a subset of the KWQ widgets
if ([view conformsToProtocol:@protocol(KWQWidgetHolder)]) {
NSView <KWQWidgetHolder> *widgetHolder = view;
QWidget *widget = [widgetHolder widget];
if (widget != nil) {
NodeImpl *node = static_cast<const RenderWidget *>(widget->eventFilterObject())->element();
return [DOMElement _elementWithImpl:static_cast<ElementImpl *>(node)];
}
}
return nil;
}
static NSView *viewForElement(ElementImpl *elementImpl)
{
RenderObject *renderer = elementImpl->renderer();
if (renderer && renderer->isWidget()) {
QWidget *widget = static_cast<const RenderWidget *>(renderer)->widget();
if (widget) {
widget->populate();
return widget->getView();
}
}
return nil;
}
static HTMLInputElementImpl *inputElementFromDOMElement(DOMElement *element)
{
NodeImpl *node = [element _nodeImpl];
if (node && idFromNode(node) == ID_INPUT) {
return static_cast<HTMLInputElementImpl *>(node);
}
return nil;
}
static HTMLFormElementImpl *formElementFromDOMElement(DOMElement *element)
{
NodeImpl *node = [element _nodeImpl];
if (node && idFromNode(node) == ID_FORM) {
return static_cast<HTMLFormElementImpl *>(node);
}
return nil;
}
- (DOMElement *)elementWithName:(NSString *)name inForm:(DOMElement *)form
{
HTMLFormElementImpl *formElement = formElementFromDOMElement(form);
if (formElement) {
QPtrList<HTMLGenericFormElementImpl> elements = formElement->formElements;
QString targetName = QString::fromNSString(name);
for (unsigned int i = 0; i < elements.count(); i++) {
HTMLGenericFormElementImpl *elt = elements.at(i);
// Skip option elements, other duds
if (elt->name() == targetName) {
return [DOMElement _elementWithImpl:elt];
}
}
}
return nil;
}
- (BOOL)elementDoesAutoComplete:(DOMElement *)element
{
HTMLInputElementImpl *inputElement = inputElementFromDOMElement(element);
return inputElement != nil
&& inputElement->inputType() == HTMLInputElementImpl::TEXT
&& inputElement->autoComplete();
}
- (BOOL)elementIsPassword:(DOMElement *)element
{
HTMLInputElementImpl *inputElement = inputElementFromDOMElement(element);
return inputElement != nil
&& inputElement->inputType() == HTMLInputElementImpl::PASSWORD;
}
- (DOMElement *)formForElement:(DOMElement *)element;
{
HTMLInputElementImpl *inputElement = inputElementFromDOMElement(element);
if (inputElement) {
HTMLFormElementImpl *formElement = inputElement->form();
if (formElement) {
return [DOMElement _elementWithImpl:formElement];
}
}
return nil;
}
- (DOMElement *)currentForm
{
HTMLFormElementImpl *formElement = iPart->currentForm();
return formElement ? [DOMElement _elementWithImpl:formElement] : nil;
}
- (NSArray *)controlsInForm:(DOMElement *)form
{
NSMutableArray *results = nil;
HTMLFormElementImpl *formElement = formElementFromDOMElement(form);
if (formElement) {
QPtrList<HTMLGenericFormElementImpl> elements = formElement->formElements;
for (unsigned int i = 0; i < elements.count(); i++) {
if (elements.at(i)->isEnumeratable()) { // Skip option elements, other duds
NSView *view = viewForElement(elements.at(i));
if (view) {
if (!results) {
results = [NSMutableArray arrayWithObject:view];
} else {
[results addObject:view];
}
}
}
}
}
return results;
}
- (NSString *)searchForLabels:(NSArray *)labels beforeElement:(DOMElement *)element
{
return iPart->searchForLabelsBeforeElement(labels, [element _elementImpl]);
}
- (NSString *)matchLabels:(NSArray *)labels againstElement:(DOMElement *)element
{
return iPart->matchLabelsAgainstElement(labels, [element _elementImpl]);
}
- (NSDictionary *)elementAtPoint:(NSPoint)point
{
RenderObject *renderer = iPart->renderer();
if (!renderer) {
return nil;
}
RenderObject::NodeInfo nodeInfo(true, true);
renderer->layer()->nodeAtPoint(nodeInfo, (int)point.x, (int)point.y);
NSMutableDictionary *element = [NSMutableDictionary dictionary];
[element setObject:[NSNumber numberWithBool:iPart->isPointInsideSelection((int)point.x, (int)point.y)]
forKey:WebCoreElementIsSelectedKey];
// Find the title in the nearest enclosing DOM node.
// For <area> tags in image maps, walk the tree for the <area>, not the <img> using it.
for (NodeImpl *titleNode = nodeInfo.innerNode(); titleNode; titleNode = titleNode->parentNode()) {
if (titleNode->isElementNode()) {
const AtomicString& title = static_cast<ElementImpl *>(titleNode)->getAttribute(ATTR_TITLE);
if (!title.isNull()) {
// We found a node with a title.
QString titleText = title.string();
titleText.replace('\\', iPart->backslashAsCurrencySymbol());
[element setObject:titleText.getNSString() forKey:WebCoreElementTitleKey];
break;
}
}
}
NodeImpl *URLNode = nodeInfo.URLElement();
if (URLNode) {
ElementImpl *e = static_cast<ElementImpl *>(URLNode);
const AtomicString& title = e->getAttribute(ATTR_TITLE);
if (!title.isEmpty()) {
QString titleText = title.string();
titleText.replace('\\', iPart->backslashAsCurrencySymbol());
[element setObject:titleText.getNSString() forKey:WebCoreElementLinkTitleKey];
}
const AtomicString& link = e->getAttribute(ATTR_HREF);
if (!link.isNull()) {
if (e->firstChild()) {
Range r(iPart->document());
r.setStartBefore(e->firstChild());
r.setEndAfter(e->lastChild());
QString t = iPart->text(r);
if (!t.isEmpty()) {
[element setObject:t.getNSString() forKey:WebCoreElementLinkLabelKey];
}
}
QString URLString = parseURL(link).string();
[element setObject:iPart->xmlDocImpl()->completeURL(URLString).getNSString() forKey:WebCoreElementLinkURLKey];
}
DOMString target = e->getAttribute(ATTR_TARGET);
if (target.isEmpty() && iPart->xmlDocImpl()) {
target = iPart->xmlDocImpl()->baseTarget();
}
if (!target.isEmpty()) {
[element setObject:target.string().getNSString() forKey:WebCoreElementLinkTargetFrameKey];
}
}
NodeImpl *node = nodeInfo.innerNonSharedNode();
if (node) {
[element setObject:[DOMNode _nodeWithImpl:node] forKey:WebCoreElementDOMNodeKey];
if (node->renderer() && node->renderer()->isImage()) {
RenderImage *r = static_cast<RenderImage *>(node->renderer());
NSImage *image = r->pixmap().image();
// Only return image information if there is an image.
if (image && !r->isDisplayingError()) {
[element setObject:r->pixmap().image() forKey:WebCoreElementImageKey];
int x, y;
if (r->absolutePosition(x, y)) {
NSValue *rect = [NSValue valueWithRect:NSMakeRect(x, y, r->contentWidth(), r->contentHeight())];
[element setObject:rect forKey:WebCoreElementImageRectKey];
}
ElementImpl *i = static_cast<ElementImpl*>(node);
// FIXME: Code copied from RenderImage::updateFromElement; should share.
DOMString attr;
if (idFromNode(i) == ID_OBJECT) {
attr = i->getAttribute(ATTR_DATA);
} else {
attr = i->getAttribute(ATTR_SRC);
}
if (!attr.isEmpty()) {
QString URLString = parseURL(attr).string();
[element setObject:iPart->xmlDocImpl()->completeURL(URLString).getNSString() forKey:WebCoreElementImageURLKey];
}
// FIXME: Code copied from RenderImage::updateFromElement; should share.
DOMString alt;
if (idFromNode(i) == ID_INPUT)
alt = static_cast<HTMLInputElementImpl *>(i)->altText();
else if (idFromNode(i) == ID_IMG)
alt = static_cast<HTMLImageElementImpl *>(i)->altText();
if (!alt.isNull()) {
QString altText = alt.string();
altText.replace('\\', iPart->backslashAsCurrencySymbol());
[element setObject:altText.getNSString() forKey:WebCoreElementImageAltStringKey];
}
}
}
}
return element;
}
*/
EXPORT_C
HBufC* CWebCoreBridge::URLWithRelativeString(const TDesC& aString)
{
DocumentImpl *doc = iPart->xmlDocImpl();
if (!doc) {
return 0;
}
QString rel = parseURL(QString::FromDes(aString)).string();
return rel.Des().Alloc();
}
EXPORT_C
TInt CWebCoreBridge::SearchAgain(const TDesC& aString, TBool aForward, TBool aCaseSensitive, TBool aWrap)
{
return iPart->FindStringAgain(aString, aForward, aCaseSensitive, aWrap);
}
EXPORT_C
TInt CWebCoreBridge::SearchFor(const TDesC& aString, TBool aForward, TBool aCaseSensitive, TBool aWrap)
{
return iPart->FindString(aString, aForward, aCaseSensitive, aWrap);
}
EXPORT_C
void CWebCoreBridge::ClearFind()
{
iPart->ClearFind();
}
EXPORT_C
void CWebCoreBridge::JumpToSelection()
{
iPart->jumpToSelection();
}
EXPORT_C
void CWebCoreBridge::SetTextSizeMultiplier(TReal aAmultiplier)
{
int newZoomFactor = (int)(aAmultiplier * 100);
if (iPart->zoomFactor() == newZoomFactor) {
return;
}
iPart->setZoomFactor(newZoomFactor);
}
EXPORT_C
TUint CWebCoreBridge::TextEncoding() const
{
// ### NOT IMPLEMENTED text encoding
//return KWQCFStringEncodingFromIANACharsetName(iPart->encoding().latin1());
return 0;
}
// ### NOT IMPLEMENTED nextkey etc
/*
- (NSView *)nextKeyView
{
DocumentImpl *doc = iPart->xmlDocImpl();
if (!doc) {
return nil;
}
return iPart->nextKeyView(doc->focusNode(), KWQSelectingNext);
}
- (NSView *)previousKeyView
{
DocumentImpl *doc = iPart->xmlDocImpl();
if (!doc) {
return nil;
}
return iPart->nextKeyView(doc->focusNode(), KWQSelectingPrevious);
}
- (NSView *)nextKeyViewInsideWebFrameViews
{
return iPart->nextKeyViewInFrameHierarchy(0, KWQSelectingNext);
}
- (NSView *)previousKeyViewInsideWebFrameViews
{
return iPart->nextKeyViewInFrameHierarchy(0, KWQSelectingPrevious);
}
*/
// ### NOT IMPLEMENTED javascript
/*
- (NSString *)stringByEvaluatingJavaScriptFromString:(NSString *)string
{
iPart->createEmptyDocument();
return iPart->executeScript(QString::fromNSString(string), true).asString().getNSString();
}
- (WebScriptObject *)windowScriptObject
{
return iPart->windowScriptObject();
}
*/
// ### NOT IMPLEMENTED dom interface & selections
/*
- (DOMDocument *)DOMDocument
{
return [DOMDocument _documentWithImpl:iPart->xmlDocImpl()];
}
- (DOMHTMLElement *)frameElement
{
return (DOMHTMLElement *)[[self DOMDocument] _ownerElement];
}
- (void)setSelectionFrom:(DOMNode *)start startOffset:(int)startOffset to:(DOMNode *)end endOffset:(int) endOffset
{
Position s([start _nodeImpl], startOffset);
Position e([end _nodeImpl], endOffset);
iPart->setSelection(Selection(s, e));
}
- (NSAttributedString *)selectedAttributedString
{
return iPart->attributedString(iPart->selectionStart(), iPart->selectionStartOffset(), iPart->selectionEnd(), iPart->selectionEndOffset());
}
- (NSAttributedString *)attributedStringFrom:(DOMNode *)start startOffset:(int)startOffset to:(DOMNode *)end endOffset:(int)endOffset
{
DOMNode *startNode = start;
DOMNode *endNode = end;
return iPart->attributedString([startNode _nodeImpl], startOffset, [endNode _nodeImpl], endOffset);
}
- (NSFont *)renderedFontForNode:(DOMNode *)node
{
RenderObject *renderer = [node _nodeImpl]->renderer();
if (renderer) {
return renderer->style()->font().getNSFont();
}
return nil;
}
- (DOMNode *)selectionStart
{
return [DOMNode _nodeWithImpl:iPart->selectionStart()];
}
- (int)selectionStartOffset
{
return iPart->selectionStartOffset();
}
- (DOMNode *)selectionEnd
{
return [DOMNode _nodeWithImpl:iPart->selectionEnd()];
}
- (int)selectionEndOffset
{
return iPart->selectionEndOffset();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -