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

📄 webcorebridge.cpp

📁 最新Nokia手机浏览器全套源代码完美版。
💻 CPP
📖 第 1 页 / 共 5 页
字号:
- (int)selectionStartOffset
{
    return iPart->selectionStartOffset();
}

- (DOMNode *)selectionEnd
{
    return [DOMNode _nodeWithImpl:iPart->selectionEnd()];
}

- (int)selectionEndOffset
{
    return iPart->selectionEndOffset();
}

- (NSRect)selectionRect
{
    return iPart->selectionRect();
}

- (NSRect)visibleSelectionRect
{
    return iPart->visibleSelectionRect();
}

- (NSImage *)selectionImage
{
    return iPart->selectionImage();
}

*/
EXPORT_C
void CWebCoreBridge::SetName(const TDesC& aName)
{
    iPart->KHTMLPart::setName(QString::FromDes(aName));
}

EXPORT_C
TPtrC CWebCoreBridge::Name() const
{
    return iPart->name().Des();
}

EXPORT_C
TPtrC CWebCoreBridge::URL() const
{
    return iPart->url().Des();
}


EXPORT_C
TPtrC CWebCoreBridge::Domain() const
{
    DocumentImpl *doc = iPart->xmlDocImpl();
    if (doc && doc->isHTMLDocument()) {
        return doc->domain().string().Des();
    }
    return KNullDesC();
}

EXPORT_C
HBufC* CWebCoreBridge::GetTextContentL()
{

  if((!iPart) ||(!iPart->xmlDocImpl())) {
        return NULL;
    }

   // __UHEAP_MARK;

  QStringList array;
  int textLength = 0;
  DOMString textString;
    HBufC* findText = NULL;
  _LIT(KBr,"\n");

  RenderObject* robject = iPart->xmlDocImpl()->renderer();
  while (robject)
    {
      if(robject->isText())
      {
        RenderText* textRenderer = static_cast<RenderText *>(robject);
        textString = textRenderer->string();
        textLength += textString.length();
        array.append(textString.string());
      }
      else if (robject->isTextArea())
      {
        RenderTextArea* textareaRenderer = static_cast<RenderTextArea *>(robject);
        textString = textareaRenderer->text();
        textLength += textString.length();
        array.append(textString.string());
      }
      else if (robject->isImage())
      {
        textString = static_cast<HTMLImageElementImpl*>(robject->element())->altText();
        textLength += textString.length();
        array.append(textString.string());
      }
      else if(robject->element())
      {
        if(robject->element()->id()==ID_A)
        {
        textString = static_cast<HTMLElementImpl*>(robject->element())->getAttribute(ATTR_HREF);
        textLength += textString.length();
        array.append(textString.string());
        }
        else if(robject->element()->id()==ID_INPUT)
        {
        textString = static_cast<HTMLInputElementImpl*>(robject->element())->value();
        textLength += textString.length();
        array.append(textString.string());
        }
      }
      robject = robject->nextRenderer();
    }

  int count = array.count();
  findText = HBufC::NewL(textLength + count*sizeof(KBr));
  for( QStringList::Iterator it = array.begin(); it != array.end(); ++it )
  {
    findText->Des().Append((*it).Des());
    findText->Des().Append(KBr());
  }

  return findText;
}

EXPORT_C
TPtrC CWebCoreBridge::GetNextRenderTextForSmartLinksL(TBool& aContinue)
{

    if((!iPart) || (!iPart->xmlDocImpl())) 
        {
        aContinue = EFalse;
        return TPtrC();
        }
  
    if (iSmartLinkNode == NULL)
        {
        iSmartLinkNode = iPart->xmlDocImpl();
        if(iSmartLinkNode)
            {
            iSmartLinkNode->ref();
            }
        //add ref
        }
    else 
        {   
        DOM::NodeImpl* nodeTemp = iSmartLinkNode;
        iSmartLinkNode = iSmartLinkNode->traverseNextNode();  
        if(iSmartLinkNode)
            {
            iSmartLinkNode->ref();
            }
        nodeTemp->deref();
        }

    while (iSmartLinkNode)
    {

    if (iSmartLinkNode->renderer())
        {
        if(iSmartLinkNode->renderer()->isText())
            {
            aContinue = ETrue;
            RenderText* textRenderer = static_cast<RenderText *>(iSmartLinkNode->renderer());           
            delete iSmartTextBuffer;
            iSmartTextBuffer = NULL;
            iSmartTextBuffer = textRenderer->data().string().Des().AllocL();                
            return iSmartTextBuffer->Ptr();
            }
        }

    DOM::NodeImpl* nodeTemp = iSmartLinkNode;
    iSmartLinkNode = iSmartLinkNode->traverseNextNode();   
    if(iSmartLinkNode)
        {
        iSmartLinkNode->ref();
        }

    nodeTemp->deref();
    }

    aContinue = EFalse;
    return TPtrC();    
}

EXPORT_C
void CWebCoreBridge::GetRenderTextArea(const TDesC& aText, RArray<TRect>& aRect)
{
  iPart->getRenderTextRectArray(aText, Node(iSmartLinkNode), aRect);   
}


EXPORT_C
TPtrC CWebCoreBridge::Referrer() const
{
    return iPart->referrer().Des();
}

// ### NOT IMPLEMENTED text encoding
/*
+ (NSString *)stringWithData:(NSData *)data textEncoding:(CFStringEncoding)textEncoding
{
    if (textEncoding == kCFStringEncodingInvalidId || textEncoding == kCFStringEncodingISOLatin1) {
        textEncoding = kCFStringEncodingWindowsLatin1;
    }
    return QTextCodec(textEncoding).toUnicode((const char*)[data bytes], [data length]).getNSString();
}

+ (NSString *)stringWithData:(NSData *)data textEncodingName:(NSString *)textEncodingName
{
    CFStringEncoding textEncoding = KWQCFStringEncodingFromIANACharsetName([textEncodingName lossyCString]);
    return [WebCoreBridge stringWithData:data textEncoding:textEncoding];
}
*/

EXPORT_C
void CWebCoreBridge::UpdateAllViews()
{
    for (QPtrListIterator<KWQKHTMLPart> it(KWQKHTMLPart::instances()); it.current(); ++it) {
        KWQKHTMLPart *part = it.current();
        part->bridge()->Client().SetNeedsReapplyStyles();
    }
}

EXPORT_C
HBufC* CWebCoreBridge::GetUrlOfNodeInFocusL(TPoint& aPoint) const
{
  DocumentImpl* docImpl = iPart->xmlDocImpl();
  HBufC* newUrl = NULL;
  if(docImpl)
    {
      // get the current focus node
    RenderObject::NodeInfo renderInfo(true, false);
    iPart->renderer()->layer()->hitTest(renderInfo, aPoint.iX, aPoint.iY);

    NodeImpl *focusNode  = renderInfo.innerNode();
    for (; focusNode ; focusNode = focusNode->parentNode()) {
      if (focusNode->isElementNode() && focusNode->isFocusable()) {
            break;
        }
      }
      // is element node
      if(focusNode && (focusNode->id() == ID_A))
      {
        ElementImpl *e = static_cast<ElementImpl *>(focusNode);
        QString url = e->getAttribute(ATTR_HREF).string();
        KURL absUrl = iPart->completeURL(url);
        newUrl = HBufC::NewL(absUrl.url().length());
        newUrl->Des().Copy(absUrl.url().Des());
      }
    }
  return newUrl;
}

EXPORT_C
TBool CWebCoreBridge::NeedsLayout() const
{
    RenderObject *renderer = iPart->renderer();
    return renderer ? renderer->needsLayout() : false;
}

EXPORT_C
void CWebCoreBridge::SetNeedsLayout()
{
    RenderObject *renderer = iPart->renderer();
    if (renderer)
        renderer->setNeedsLayout(true);
}

EXPORT_C
TBool CWebCoreBridge::KeyEvent(TKeyEvent aEvent, TBool aUpEvent)
{
    return iPart->KeyEvent(aEvent, aUpEvent);
}

EXPORT_C
void CWebCoreBridge::ActivateEvent(TPoint &aPoint)
{
    if(Client().IsTabbedNavigationEnabled()) {
     if(iPart && iPart->xmlDocImpl()) {
      NodeImpl *focusNode = iPart->xmlDocImpl()->focusNode();
      if(focusNode) {
       iPart->activateEvent();
      }
     }
     return;
  }

    iPart->activateNodeAtPoint(QPoint(aPoint.iX,aPoint.iY));
}

EXPORT_C
void CWebCoreBridge::DeActivateEvent(TBool aAcceptChanges)
{
  iPart->deActivateEvent(aAcceptChanges);
  iPart->xmlDocImpl()->setFocusNode( 0 );
}


EXPORT_C
void CWebCoreBridge::RemoveFileName( TPoint& aPoint )
{
    RenderObject::NodeInfo renderInfo(true, false);
    iPart->renderer()->layer()->hitTest(renderInfo, aPoint.iX, aPoint.iY);

    NodeImpl *node = renderInfo.innerNode();

    // is element node
    if( node && node->isElementNode() && idFromNode(node) ==  ID_INPUT)
    {
        // the is a file
        HTMLInputElementImpl* inputElement = static_cast<HTMLInputElementImpl *>(node);

        if(inputElement->inputType() == HTMLInputElementImpl::FILE &&
            inputElement->value().length())
        {

            //Check if the render object is valid and is a widget
            if (node->renderer() && node->renderer()->isWidget())
            {
                QWidget *widget = static_cast<RenderWidget *>(node->renderer())->widget();
                if(widget )
                {
                    static_cast<KWQFileButton*>(widget)->setFilename("");
                }
            }
        }
    }
}

EXPORT_C
void CWebCoreBridge::ActivateAccessKeys(TKeyEvent aKeyEvent)
{
  NodeImpl* oldFocusNode = NULL;
  NodeImpl* newFocusNode = NULL;

  DocumentImpl* docImpl = iPart->xmlDocImpl();
  if (docImpl)
    oldFocusNode = docImpl->focusNode();

    // We expect Left-Control modifier set to handle accesskey support
    TKeyEvent accessKeyEvent( aKeyEvent );
    accessKeyEvent.iModifiers = EModifierLeftCtrl;
    iPart->KeyEvent(accessKeyEvent, false);

  if (docImpl)
        newFocusNode = docImpl->focusNode();

    if ( newFocusNode && oldFocusNode != newFocusNode ) {
        iPart->scrollTo(newFocusNode->getRect());
        // viewp after scroll
      TPoint viewp( iPart->view()->contentsX(), iPart->view()->contentsY() );
        TPoint nodep( newFocusNode->getRect().Rect().Center() );
        // hover
        PointerEvent( TPointerEvent::EMove, nodep );
        // move cursor
        TPoint newp( nodep.iX - viewp.iX, nodep.iY - viewp.iY );
        Client().SetCursorPosition( newp, NodeTypeB( newFocusNode ) );
    }
}

EXPORT_C
void CWebCoreBridge::PointerEvent(TPointerEvent aEvent)
{
    switch (aEvent.iType)
    {
        case TPointerEvent::EButton1Down:
        case TPointerEvent::EButton2Down:
        case TPointerEvent::EButton3Down:
            iPart->MouseDown(aEvent);
            break;
        case TPointerEvent::EButton1Up:
        case TPointerEvent::EButton2Up:
        case TPointerEvent::EButton3Up:
            iPart->MouseUp(aEvent);
            break;
        case TPointerEvent::EMove:
            iPart->MouseMoved(aEvent);
            break;
         case TPointerEvent::EDrag:
            iPart->MouseDragged(aEvent);
            break;
        default: ;
    }
}

EXPORT_C
void CWebCoreBridge::PointerEvent(TPointerEvent::TType aEventType, const TPoint &aPosition)
{
   TPointerEvent pointerEvent;
   pointerEvent.iType = TPointerEvent::EMove;
   pointerEvent.iPosition = aPosition;
   pointerEvent.iModifiers = 0;
   PointerEvent(pointerEvent);
}

// ### NOT IMPLEMENTED events
/*
- (BOOL)interceptKeyEvent:(NSEvent *)event toView:(NSView *)view
{
    return iPart->keyEvent(event);
}
*/

// ### NOT IMPLEMENTED debug
/*
- (NSString *)renderTreeAsExternalRepresentation
{
    return externalRepresentation(iPart->renderer()).getNSString();
}
*/


/*EXPORT_C
void CWebCoreBridge::SetUsesInactiveTextBackgroundColor(TBool aUses)
{
    iPart->setUsesInactiveTextBackgroundColor(aUses);
}

EXPORT_C
TBool CWebCoreBridge::UsesInactiveTextBackgroundColor()
{
    return iPart->usesInactiveTextBackgroundColor();
}*/

// ### NOT IMPLEMENTED ??
/*
- (void)setShowsFirstResponder:(BOOL)flag
{

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -