📄 webcorebridge.cpp
字号:
- (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 + -