⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 webcorebridge.cpp

📁 手机浏览器源码程序,功能强大
💻 CPP
📖 第 1 页 / 共 5 页
字号:

// ### 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 + -