aboutsummaryrefslogtreecommitdiffstats
path: root/src/modules/objects
diff options
context:
space:
mode:
Diffstat (limited to 'src/modules/objects')
-rw-r--r--src/modules/objects/KvsObject_webView.cpp71
-rw-r--r--src/modules/objects/KvsObject_webView.h12
-rw-r--r--src/modules/objects/KvsObject_widget.cpp19
3 files changed, 56 insertions, 46 deletions
diff --git a/src/modules/objects/KvsObject_webView.cpp b/src/modules/objects/KvsObject_webView.cpp
index a3e472d09..2a679455b 100644
--- a/src/modules/objects/KvsObject_webView.cpp
+++ b/src/modules/objects/KvsObject_webView.cpp
@@ -84,22 +84,21 @@ KVSO_BEGIN_REGISTERCLASS(KvsObject_webView,"webview","widget")
KVSO_REGISTER_HANDLER_BY_NAME(KvsObject_webView,firstChild)
KVSO_REGISTER_HANDLER_BY_NAME(KvsObject_webView,findAll)
KVSO_REGISTER_HANDLER_BY_NAME(KvsObject_webView,findFirst)
- KVSO_REGISTER_HANDLER_BY_NAME(KvsObject_webView,pushCurrentToStack)
- KVSO_REGISTER_HANDLER_BY_NAME(KvsObject_webView,popCurrentFromStack)
- KVSO_REGISTER_HANDLER_BY_NAME(KvsObject_webView,clearElementStack)
KVSO_REGISTER_HANDLER_BY_NAME(KvsObject_webView,parentElement)
KVSO_REGISTER_HANDLER_BY_NAME(KvsObject_webView,nextSibling)
KVSO_REGISTER_HANDLER_BY_NAME(KvsObject_webView,currentElementTagName)
KVSO_REGISTER_HANDLER_BY_NAME(KvsObject_webView,moveToQueryResultsAt)
- KVSO_REGISTER_HANDLER_BY_NAME(KvsObject_webView,elementStackCount)
KVSO_REGISTER_HANDLER_BY_NAME(KvsObject_webView,queryResultsCount)
KVSO_REGISTER_HANDLER_BY_NAME(KvsObject_webView,getDocumentElement)
KVSO_REGISTER_HANDLER_BY_NAME(KvsObject_webView,attributeNames)
KVSO_REGISTER_HANDLER_BY_NAME(KvsObject_webView,attribute)
KVSO_REGISTER_HANDLER_BY_NAME(KvsObject_webView,makePreview)
+ KVSO_REGISTER_HANDLER_BY_NAME(KvsObject_webView,rememberCurrent)
+ KVSO_REGISTER_HANDLER_BY_NAME(KvsObject_webView,moveTo)
KVSO_REGISTER_HANDLER_BY_NAME(KvsObject_webView,toPlainText)
KVSO_REGISTER_HANDLER_BY_NAME(KvsObject_webView,setAttribute)
KVSO_REGISTER_HANDLER_BY_NAME(KvsObject_webView,setWebSetting)
+ KVSO_REGISTER_HANDLER_BY_NAME(KvsObject_webView,removeFromDocument)
KVSO_REGISTER_HANDLER_BY_NAME(KvsObject_webView,loadFinishedEvent)
KVSO_REGISTER_HANDLER_BY_NAME(KvsObject_webView,loadProgressEvent)
KVSO_REGISTER_HANDLER_BY_NAME(KvsObject_webView,loadStartedEvent)
@@ -111,7 +110,7 @@ KVSO_END_CONSTRUCTOR(KvsObject_webView)
KVSO_BEGIN_DESTRUCTOR(KvsObject_webView)
-lStack.clear();
+qDeleteAll(m_dictCache);
KVSO_END_CONSTRUCTOR(KvsObject_webView)
bool KvsObject_webView::init(KviKvsRunTimeContext * ,KviKvsVariantList *)
@@ -154,28 +153,24 @@ KVSO_CLASS_FUNCTION(webView,makePreview)
{
CHECK_INTERNAL_POINTER(widget())
QSize size=((QWebView *)widget())->page()->mainFrame()->contentsSize();
- qDebug("contents size %d - %d",size.width(),size.height());
QImage image(212,142, QImage::Format_RGB32);
QWebFrame *pFrame=((QWebView *)widget())->page()->mainFrame();
QPainter painter(&image);
painter.setRenderHint(QPainter::Antialiasing, true);
painter.setRenderHint(QPainter::TextAntialiasing, true);
painter.setRenderHint(QPainter::SmoothPixmapTransform, true);
- //painter.setClipRect(0,0,size.width(),size.height());
- //painter.scale(0.20,0.34);
double dWScale = size.width() > 0 ? (212.0 / (double)(size.width())) : 0;
double dHScale = dWScale;
if((size.height() * dWScale) < 142)
{
- // solution 1 is to fill the missing bacgkround
- painter.fillRect(0,0,212,142,QColor(255,255,255));
- // solution 2 is to stretch the contents, but this doesn't work well because
- // the frame reports a size that doesn't exactly match the document
- //dHScale = 142.0 / (double)(size.height());
+ // solution 1 is to fill the missing bacgkround
+ painter.fillRect(0,0,212,142,QColor(255,255,255));
+ // solution 2 is to stretch the contents, but this doesn't work well because
+ // the frame reports a size that doesn't exactly match the document
+ //dHScale = 142.0 / (double)(size.height());
}
painter.scale(dWScale,dHScale);
pFrame->documentElement().render(&painter);
- //pFrame->render(&painter);
painter.end();
QPixmap *pPixmap=new QPixmap();
*pPixmap=pPixmap->fromImage(image);
@@ -196,6 +191,27 @@ KVSO_CLASS_FUNCTION(webView,findAll)
m_webElementCollection=m_currentElement.findAll(szQuery);
return true;
}
+KVSO_CLASS_FUNCTION(webView,rememberCurrent)
+{
+ QString adr=QString::number((long)&m_currentElement,16).toUpper();
+ QWebElement *pElement=new QWebElement(m_currentElement);
+ m_dictCache.insert(adr,pElement);
+ c->returnValue()->setString(adr);
+ return true;
+}
+
+KVSO_CLASS_FUNCTION(webView,moveTo)
+{
+ QString szId;
+ KVSO_PARAMETERS_BEGIN(c)
+ KVSO_PARAMETER("id",KVS_PT_STRING,0,szId)
+ KVSO_PARAMETERS_END(c)
+ if(m_dictCache.value(szId))
+ m_currentElement=*m_dictCache.value(szId);
+ return true;
+}
+
+
KVSO_CLASS_FUNCTION(webView,findFirst)
{
QString szQuery;
@@ -222,16 +238,10 @@ KVSO_CLASS_FUNCTION(webView,moveToQueryResultsAt)
m_currentElement=m_webElementCollection.at(iIdx);
return true;
}
-KVSO_CLASS_FUNCTION(webView,elementStackCount)
-{
- CHECK_INTERNAL_POINTER(widget())
- c->returnValue()->setInteger((kvs_int_t) lStack.count());
- return true;
-}
-KVSO_CLASS_FUNCTION(webView,clearElementStack)
+KVSO_CLASS_FUNCTION(webView,removeFromDocument)
{
Q_UNUSED(c);
- lStack.clear();
+ m_currentElement.removeFromDocument();
return true;
}
@@ -241,24 +251,14 @@ KVSO_CLASS_FUNCTION(webView,queryResultsCount)
c->returnValue()->setInteger((kvs_int_t) m_webElementCollection.count());
return true;
}
-KVSO_CLASS_FUNCTION(webView,pushCurrentToStack)
-{
- Q_UNUSED(c);
- lStack.append(m_currentElement);
- return true;
-}
-KVSO_CLASS_FUNCTION(webView,popCurrentFromStack)
-{
- if(!lStack.isEmpty())
- m_currentElement = lStack.takeLast();
- else c->warning(__tr2qs_ctx("Stack is empty","objects"));
- return true;
-}
+
KVSO_CLASS_FUNCTION(webView,frames)
{
CHECK_INTERNAL_POINTER(widget())
m_dictFrames.clear();
QWebFrame *pFrame=((QWebView *)widget())->page()->mainFrame();
+
+// dd.toAscii().toHex()
KviKvsArray *pArray=new KviKvsArray();
kvs_uint_t uIdx=0;
getFrames(pFrame,pArray,uIdx);
@@ -423,7 +423,6 @@ KVSO_CLASS_FUNCTION(webView,getDocumentElement)
}
}
m_currentElement=pFrame->documentElement();
- // m_documentElement=m_currentElement;
return true;
}
diff --git a/src/modules/objects/KvsObject_webView.h b/src/modules/objects/KvsObject_webView.h
index 8b2d36f1b..2f7d4da71 100644
--- a/src/modules/objects/KvsObject_webView.h
+++ b/src/modules/objects/KvsObject_webView.h
@@ -41,19 +41,21 @@ public:
protected:
QWebPage * m_pWebPage;
QHash<QString,QWebFrame *> m_dictFrames;
+ QHash<QString,QWebElement *> m_dictCache;
+
QList<QWebElement> lStack;
QWebElementCollection m_webElementCollection;
QWebElement m_currentElement;
void getFrames(QWebFrame *pFrame,KviKvsArray *n, kvs_uint_t & uIdx);
virtual bool init(KviKvsRunTimeContext * pContext,KviKvsVariantList *pParams);
- bool pushCurrentToStack(KviKvsObjectFunctionCall *c);
- bool popCurrentFromStack(KviKvsObjectFunctionCall *c);
- bool elementStackCount(KviKvsObjectFunctionCall *c);
- bool clearElementStack(KviKvsObjectFunctionCall *c);
-
+ bool removeFromDocument(KviKvsObjectFunctionCall *c);
bool makePreview(KviKvsObjectFunctionCall *c);
+ bool rememberCurrent(KviKvsObjectFunctionCall *c);
+ bool moveTo(KviKvsObjectFunctionCall *c);
+
+
bool firstChild(KviKvsObjectFunctionCall *c);
bool parentElement(KviKvsObjectFunctionCall *c);
bool nextSibling(KviKvsObjectFunctionCall *c);
diff --git a/src/modules/objects/KvsObject_widget.cpp b/src/modules/objects/KvsObject_widget.cpp
index 5c8333665..73babf97a 100644
--- a/src/modules/objects/KvsObject_widget.cpp
+++ b/src/modules/objects/KvsObject_widget.cpp
@@ -896,7 +896,7 @@ bool KvsObject_widget::eventFilter(QObject *o,QEvent *e)
lParams.append(new KviKvsVariant((kvs_int_t)aparam));
lParams.append(new KviKvsVariant((kvs_int_t)((QMouseEvent *)e)->pos().x()));
lParams.append(new KviKvsVariant((kvs_int_t)((QMouseEvent *)e)->pos().y()));
- if (!callFunction(this,"mousePressEvent",0,&lParams)) brokenhandler = true; // ignore results of a broken event handler
+ if (!callFunction(this,"mousePressEvent",&oReturnBuffer,&lParams)) brokenhandler = true; // ignore results of a broken event handler
}
break;
case QEvent::MouseButtonRelease:
@@ -910,7 +910,7 @@ bool KvsObject_widget::eventFilter(QObject *o,QEvent *e)
lParams.append(new KviKvsVariant((kvs_int_t)aparam));
lParams.append(new KviKvsVariant((kvs_int_t)((QMouseEvent *)e)->pos().x()));
lParams.append(new KviKvsVariant((kvs_int_t)((QMouseEvent *)e)->pos().y()));
- if (!callFunction(this,"mouseReleaseEvent",0,&lParams)) brokenhandler = true; // ignore results of a broken event handler
+ if (!callFunction(this,"mouseReleaseEvent",&oReturnBuffer,&lParams)) brokenhandler = true; // ignore results of a broken event handler
}
break;
case QEvent::MouseButtonDblClick:
@@ -979,13 +979,22 @@ bool KvsObject_widget::eventFilter(QObject *o,QEvent *e)
break;
}
- if (!brokenhandler)
+ if (!brokenhandler){
ret = oReturnBuffer.asBoolean();
+ //qDebug ("Propagation %i",ret);
return ret;
+ }
+ }
+ /*if(o->parent())
+ {
+ qDebug("Propagation to parent");
+ return KviKvsObject::eventFilter(o->parent(),e);
}
-
- return KviKvsObject::eventFilter(o,e);
+ else{
+ qDebug("Propagation to object");*/
+ return KviKvsObject::eventFilter(o,e);
+ // }
}