aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/modules/objects/KvsObject_memoryBuffer.cpp26
-rw-r--r--src/modules/objects/KvsObject_memoryBuffer.h3
-rw-r--r--src/modules/objects/KvsObject_painter.cpp296
-rw-r--r--src/modules/objects/KvsObject_painter.h4
-rw-r--r--src/modules/objects/KvsObject_pixmap.cpp166
-rw-r--r--src/modules/objects/KvsObject_pixmap.h5
-rw-r--r--src/modules/objects/KvsObject_sql.cpp4
-rw-r--r--src/modules/objects/KvsObject_tableWidget.cpp2
-rw-r--r--src/modules/objects/KvsObject_widget.cpp23
-rw-r--r--src/modules/objects/KvsObject_widget.h1
10 files changed, 373 insertions, 157 deletions
diff --git a/src/modules/objects/KvsObject_memoryBuffer.cpp b/src/modules/objects/KvsObject_memoryBuffer.cpp
index 9f7e594a7..5bde1fd13 100644
--- a/src/modules/objects/KvsObject_memoryBuffer.cpp
+++ b/src/modules/objects/KvsObject_memoryBuffer.cpp
@@ -63,11 +63,14 @@ KVSO_BEGIN_REGISTERCLASS(KvsObject_memoryBuffer,"memorybuffer","object")
KVSO_REGISTER_HANDLER_BY_NAME(KvsObject_memoryBuffer,loadFromFile);
KVSO_REGISTER_HANDLER_BY_NAME(KvsObject_memoryBuffer,clear);
KVSO_REGISTER_HANDLER_BY_NAME(KvsObject_memoryBuffer,saveToFile);
+ KVSO_REGISTER_HANDLER_BY_NAME(KvsObject_memoryBuffer,size);
+ KVSO_REGISTER_HANDLER_BY_NAME(KvsObject_memoryBuffer,readByteAt);
KVSO_END_REGISTERCLASS(KvsObject_memoryBuffer)
KVSO_BEGIN_CONSTRUCTOR(KvsObject_memoryBuffer,KviKvsObject)
+ mIdx=0;
m_pBuffer = new QByteArray();
KVSO_END_CONSTRUCTOR(KvsObject_memoryBuffer)
@@ -109,6 +112,29 @@ KVSO_CLASS_FUNCTION(memoryBuffer,loadFromFile)
else c->warning(__tr2qs_ctx("The file '%Q' does not exist","objects"),&szFileName);
return true;
}
+KVSO_CLASS_FUNCTION(memoryBuffer,size)
+{
+ CHECK_INTERNAL_POINTER(m_pBuffer)
+ c->returnValue()->setInteger((kvs_int_t)m_pBuffer->size());
+ return true;
+}
+
+KVSO_CLASS_FUNCTION(memoryBuffer,readByteAt)
+{
+ CHECK_INTERNAL_POINTER(m_pBuffer)
+ kvs_int_t iIdx;
+ KVSO_PARAMETERS_BEGIN(c)
+ KVSO_PARAMETER("index",KVS_PT_INT,0,iIdx)
+ KVSO_PARAMETERS_END(c)
+ if(iIdx>m_pBuffer->size())
+ {
+ c->warning(__tr2qs_ctx("Index '%I' out of the buffer size","objects"),&iIdx);
+ return true;
+ }
+ unsigned char ch = m_pBuffer->at(iIdx);
+ c->returnValue()->setInteger( ch);
+ return true;
+}
KVSO_CLASS_FUNCTION(memoryBuffer,saveToFile)
{
CHECK_INTERNAL_POINTER(m_pBuffer)
diff --git a/src/modules/objects/KvsObject_memoryBuffer.h b/src/modules/objects/KvsObject_memoryBuffer.h
index 3707696a2..2ed1f956d 100644
--- a/src/modules/objects/KvsObject_memoryBuffer.h
+++ b/src/modules/objects/KvsObject_memoryBuffer.h
@@ -37,6 +37,7 @@ public:
KVSO_DECLARE_OBJECT(KvsObject_memoryBuffer)
protected:
QByteArray * m_pBuffer;
+ int mIdx;
public:
QByteArray dataBuffer()
{
@@ -48,6 +49,8 @@ public:
};
bool loadFromFile(KviKvsObjectFunctionCall *c);
bool clear(KviKvsObjectFunctionCall *c);
+ bool size(KviKvsObjectFunctionCall *c);
+ bool readByteAt(KviKvsObjectFunctionCall *c);
bool saveToFile(KviKvsObjectFunctionCall *c);
};
diff --git a/src/modules/objects/KvsObject_painter.cpp b/src/modules/objects/KvsObject_painter.cpp
index bd1ada9cf..284eb87f8 100644
--- a/src/modules/objects/KvsObject_painter.cpp
+++ b/src/modules/objects/KvsObject_painter.cpp
@@ -75,6 +75,36 @@ const char * const penstyles_tbl[] = {
"dashDotLine",
"dashDotDotLine"
};
+const int align_cod[] = {
+ Qt::AlignLeft,
+ Qt::AlignRight,
+ Qt::AlignHCenter,
+ Qt::AlignTop,
+ Qt::AlignBottom,
+ Qt::AlignVCenter,
+ Qt::AlignCenter,
+ Qt::TextSingleLine,
+ Qt::TextExpandTabs,
+ Qt::TextShowMnemonic,
+ Qt::TextWordWrap,
+ Qt::TextIncludeTrailingSpaces
+};
+const char * const align_tbl[] = {
+ "Left",
+ "Right",
+ "HCenter",
+ "Top",
+ "Bottom",
+ "VCenter",
+ "Center",
+ "TextSingleLine",
+ "TextExpandTabs",
+ "TextShowMnemonic",
+ "TextWordWrap",
+ "TextIncludeTrailingSpaces"
+};
+#define align_num (sizeof(align_tbl) / sizeof(align_tbl[0]))
+
const QPainter::CompositionMode composition_cod[] = {
QPainter::CompositionMode_SourceOver,
@@ -506,6 +536,8 @@ KVSO_BEGIN_REGISTERCLASS(KvsObject_painter,"painter","object")
// Text & Pixmap & Icons
KVSO_REGISTER_HANDLER_BY_NAME(KvsObject_painter,drawText)
KVSO_REGISTER_HANDLER_BY_NAME(KvsObject_painter,drawPixmap)
+ KVSO_REGISTER_HANDLER_BY_NAME(KvsObject_painter,drawPixmapMirrored)
+ KVSO_REGISTER_HANDLER_BY_NAME(KvsObject_painter,drawPixmapWithColorEffect)
KVSO_REGISTER_HANDLER_BY_NAME(KvsObject_painter,drawIcon)
KVSO_REGISTER_HANDLER_BY_NAME(KvsObject_painter,drawHtmlText)
KVSO_REGISTER_HANDLER_BY_NAME(KvsObject_painter,htmlTextSize)
@@ -542,6 +574,7 @@ KVSO_BEGIN_REGISTERCLASS(KvsObject_painter,"painter","object")
KVSO_REGISTER_HANDLER_BY_NAME(KvsObject_painter,setPenWidth)
KVSO_REGISTER_HANDLER_BY_NAME(KvsObject_painter,setPenStyle)
KVSO_REGISTER_HANDLER_BY_NAME(KvsObject_painter,setPen)
+ KVSO_REGISTER_HANDLER_BY_NAME(KvsObject_painter,pen)
KVSO_REGISTER_HANDLER_BY_NAME(KvsObject_painter,colorNames)
@@ -569,7 +602,7 @@ KVSO_BEGIN_REGISTERCLASS(KvsObject_painter,"painter","object")
// extra
KVSO_REGISTER_HANDLER_BY_NAME(KvsObject_painter,beginPdf)
- KVSO_REGISTER_HANDLER_BY_NAME(KvsObject_painter,drawPixmapWithEffect);
+
KVSO_END_REGISTERCLASS(KvsObject_painter)
@@ -945,7 +978,35 @@ KVSO_CLASS_FUNCTION(painter,setBrush)
}
return true;
}
-
+KVSO_CLASS_FUNCTION(painter,pen)
+{
+ CHECK_INTERNAL_POINTER(m_pPainter)
+ QString szFlags;
+ KVSO_PARAMETERS_BEGIN(c)
+ KVSO_PARAMETER("flags",KVS_PT_STRING,KVS_PF_OPTIONAL,szFlags)
+ KVSO_PARAMETERS_END(c)
+ if(szFlags.isEmpty()){
+ c->returnValue()->setString(m_pPainter->pen().color().name());
+ return true;
+ }
+ QColor col=m_pPainter->pen().color();
+ KviKvsVariant *pRed = new KviKvsVariant((kvs_int_t)col.red());
+ KviKvsVariant *pGreen = new KviKvsVariant((kvs_int_t)col.green());
+ KviKvsVariant *pBlue = new KviKvsVariant((kvs_int_t)col.blue());
+ if (szFlags.indexOf('a',0,Qt::CaseInsensitive) != -1){
+ KviKvsArray *pArray = new KviKvsArray();
+ pArray->set(0,pRed);
+ pArray->set(1,pGreen);
+ pArray->set(2,pBlue);
+ c->returnValue()->setArray(pArray);
+ } else if (szFlags.indexOf('h',0,Qt::CaseInsensitive) != -1){
+ KviKvsHash *pHash = new KviKvsHash();
+ pHash->set("red",pRed);
+ pHash->set("green",pGreen);
+ pHash->set("blue",pBlue);
+ }
+ return true;
+}
KVSO_CLASS_FUNCTION(painter,setPen)
{
CHECK_INTERNAL_POINTER(m_pPainter)
@@ -1156,7 +1217,6 @@ void KvsObject_painter::attachDevice(KviKvsObject * o,QPaintDevice * p)
// KvsObject_pixmap and KvsObject_widget object have this signal
// it is emitted BEFORE the real QPaintDevice is deleted, so we can eventually
// call m_pPainter->end() in time
- qDebug("Begin painter");
QObject::connect(m_pDeviceObject,SIGNAL(aboutToDie()),this,SLOT(detachDevice()));
m_pPainter->begin(p);
}
@@ -1208,7 +1268,8 @@ KVSO_CLASS_FUNCTION(painter,beginPdf)
KVSO_CLASS_FUNCTION(painter,drawText)
{
CHECK_INTERNAL_POINTER(m_pPainter)
- QString szText,szMode;
+ QString szText;
+ QStringList szAlignList;
kvs_int_t iX,iY,iW,iH; //,iN=-1;
KVSO_PARAMETERS_BEGIN(c)
KVSO_PARAMETER("x",KVS_PT_INT,0,iX)
@@ -1216,36 +1277,44 @@ KVSO_CLASS_FUNCTION(painter,drawText)
KVSO_PARAMETER("w",KVS_PT_INT,0,iW)
KVSO_PARAMETER("h",KVS_PT_INT,0,iH)
KVSO_PARAMETER("text",KVS_PT_STRING,0,szText)
-
+ KVSO_PARAMETER("align",KVS_PT_STRINGLIST,KVS_PF_OPTIONAL,szAlignList)
KVSO_PARAMETERS_END(c)
- if (!szMode.isEmpty() && !KviQString::equalCI(szMode,"Auto"))
+ int align,sum=0;
+ if(szAlignList.count())
{
- if(KviQString::equalCI(szMode,"RTL"))
- m_pPainter->setLayoutDirection(Qt::RightToLeft);
- else if(KviQString::equalCI(szMode,"LTR"))
- m_pPainter->setLayoutDirection(Qt::LeftToRight);
- else
+ for ( QStringList::Iterator it = szAlignList.begin(); it != szAlignList.end(); ++it )
{
- c->warning(__tr2qs_ctx("Invalid mode '%Q'","objects"),&szMode);
- return true;
+ align = 0;
+ for(unsigned int j = 0; j < align_num; j++)
+ {
+ if(KviQString::equalCI((*it), align_tbl[j]))
+ {
+ align=align_cod[j];
+ break;
+ }
+ }
+ if(align)
+ sum = sum | align;
+ else
+ c->warning(__tr2qs_ctx("Unknown alignment '%Q'","objects"),&(*it));
}
}
- //if(!iN) iN = szText.length();
QRect rect;
rect.setX(iX);
rect.setY(iY);
rect.setWidth(iW);
rect.setHeight(iH);
-
- m_pPainter->drawText(rect,szText);
+ if(szAlignList.count()){
+ m_pPainter->drawText(rect,sum,szText);
+ }
+ else m_pPainter->drawText(rect,szText);
return true;
}
KVSO_CLASS_FUNCTION(painter,drawPixmap)
{
CHECK_INTERNAL_POINTER(m_pPainter)
- kvs_real_t iX,iY;
- kvs_int_t iStartx,iStarty,iEndx,iEndy;
+ kvs_real_t iX,iY,iWidth,iHeight,iStartx,iStarty;
bool bTiled;
KviKvsObject *obj;
kvs_hobject_t hObject;
@@ -1253,10 +1322,10 @@ KVSO_CLASS_FUNCTION(painter,drawPixmap)
KVSO_PARAMETER("x",KVS_PT_REAL,0,iX)
KVSO_PARAMETER("y",KVS_PT_REAL,0,iY)
KVSO_PARAMETER("pixmap",KVS_PT_HOBJECT,0,hObject)
- KVSO_PARAMETER("start_x",KVS_PT_INT,0,iStartx)
- KVSO_PARAMETER("start_y",KVS_PT_INT,0,iStarty)
- KVSO_PARAMETER("end_x",KVS_PT_INT,0,iEndx)
- KVSO_PARAMETER("end_y",KVS_PT_INT,0,iEndy)
+ KVSO_PARAMETER("start_x",KVS_PT_REAL,0,iStartx)
+ KVSO_PARAMETER("start_y",KVS_PT_REAL,0,iStarty)
+ KVSO_PARAMETER("end_x",KVS_PT_REAL,0,iWidth)
+ KVSO_PARAMETER("end_y",KVS_PT_REAL,0,iHeight)
KVSO_PARAMETER("b_Tiled",KVS_PT_BOOLEAN,KVS_PF_OPTIONAL,bTiled)
KVSO_PARAMETERS_END(c)
obj=KviKvsKernel::instance()->objectController()->lookupObject(hObject);
@@ -1270,27 +1339,45 @@ KVSO_CLASS_FUNCTION(painter,drawPixmap)
c->warning(__tr2qs_ctx("Pixmap object required","objects"));
return true;
}
- QImage *pImage=((KvsObject_pixmap *)obj)->getImage();
- qDebug("image ");
- m_pPainter->drawImage(QPointF(iX,iY),*pImage,QRect(iStartx,iStarty,iEndx,iEndy));
+ if(bTiled){
+ QPixmap *pPixmap=((KvsObject_pixmap *)obj)->getPixmap();
+ //QPoint point(iX,iY);
+
+ //QRectF rectf(QPointF(iStartx,iStarty),QSizeF(iWidth,iHeight));
+ //m_pPainter->drawTiledPixmap(rectf,*pPixmap,pointf);
+ //m_pPainter->drawTiledPixmap((int)iX,(int)iY,(int)iWidth,(int)iHeight,*pPixmap,(int)iStartx,(int)iStarty);
+ qDebug("drawing at x %i - y %i - w %i - h %i - startpx %i - startpy %i casted",(int)iX,(int)iY,(int)iWidth,(int)iHeight,(int)iStartx,(int)iStarty);
+ m_pPainter->drawTiledPixmap(iX,iY,iWidth,iHeight,*pPixmap,iStartx,iStarty);
+ }
+ else{
+ QImage *pImage=((KvsObject_pixmap *)obj)->getImage();
+ QPoint pointf(iX,iY);
+ QRectF rectf(QPointF(iStartx,iStarty),QSizeF(iWidth,iHeight));
+ m_pPainter->drawImage(pointf,*pImage,rectf);
+ }
return true;
}
-KVSO_CLASS_FUNCTION(painter,drawPixmapWithEffect)
+
+KVSO_CLASS_FUNCTION(painter,drawPixmapWithColorEffect)
{
CHECK_INTERNAL_POINTER(m_pPainter)
QString szEffect;
- kvs_real_t iX,iY; //,factor;
- kvs_int_t r,g,b;
+ kvs_real_t rX,rY;
+ kvs_int_t r,g,b,iX,iY,iW,iH;
KviKvsObject *obj;
kvs_hobject_t hObject;
KVSO_PARAMETERS_BEGIN(c)
KVSO_PARAMETER("string_effect",KVS_PT_STRING,0,szEffect)
- KVSO_PARAMETER("x",KVS_PT_REAL,0,iX)
- KVSO_PARAMETER("y",KVS_PT_REAL,0,iY)
+ KVSO_PARAMETER("x",KVS_PT_REAL,0,rX)
+ KVSO_PARAMETER("y",KVS_PT_REAL,0,rY)
KVSO_PARAMETER("pixmap",KVS_PT_HOBJECT,0,hObject)
- KVSO_PARAMETER("red",KVS_PT_INTEGER,0,r)
- KVSO_PARAMETER("green",KVS_PT_INTEGER,0,g)
- KVSO_PARAMETER("blue",KVS_PT_INTEGER,0,b)
+ KVSO_PARAMETER("red",KVS_PT_INT,KVS_PF_OPTIONAL,r)
+ KVSO_PARAMETER("green",KVS_PT_INT,KVS_PF_OPTIONAL,g)
+ KVSO_PARAMETER("blue",KVS_PT_INT,KVS_PF_OPTIONAL,b)
+ KVSO_PARAMETER("start_x",KVS_PT_INT,KVS_PF_OPTIONAL,iX)
+ KVSO_PARAMETER("start_y",KVS_PT_INT,KVS_PF_OPTIONAL,iY)
+ KVSO_PARAMETER("width",KVS_PT_INT,KVS_PF_OPTIONAL,iW)
+ KVSO_PARAMETER("height",KVS_PT_INT,KVS_PF_OPTIONAL,iH)
KVSO_PARAMETERS_END(c)
obj=KviKvsKernel::instance()->objectController()->lookupObject(hObject);
if (!obj)
@@ -1304,56 +1391,129 @@ KVSO_CLASS_FUNCTION(painter,drawPixmapWithEffect)
return true;
}
QImage *pImage=((KvsObject_pixmap *)obj)->getImage();
- QImage pDest(pImage->width(),pImage->height(),QImage::Format_ARGB32);
+ //QImage pDest(pImage->width(),pImage->height(),QImage::Format_ARGB32);
QRgb col ;
QRgb *dataSource;
QRgb *dataDest;
int w=pImage->width();
int h=pImage->height();
+ if(!iW) iW=w;
+ if(!iH) iH=h;
+ QImage pDest(iW,iH,QImage::Format_ARGB32);
- if(KviQString::equalCI(szEffect,"add"))
+ int iXend=iX+iW;
+ int iYend=iY+iH;
+
+ if(KviQString::equalCI(szEffect,"addrgb"))
{
- int sumR, sumG, sumB;
- for(int y=0; y<h; y++)
- {
- dataSource = (QRgb *) pImage->scanLine(y);
- dataDest = (QRgb *) pDest.scanLine(y);
- for (int x=0; x<w; x++)
- {
- col = *dataSource;
- sumR=qRed(col)+r;
- sumG=qGreen(col)+g;
- sumB=qBlue(col)+b;
- *dataDest++ = qRgba(sumR<255 ?sumR : 255,
- sumG<255 ?sumG : 255,
- sumB<255 ?sumB : 255,
- qAlpha(col));
- dataSource++;
- }
- }
+ int sumR, sumG, sumB,idx=0;
+ for(int y=iY; y<iYend; y++)
+ {
+ dataSource = (QRgb *) pImage->scanLine(y)+iX;
+ dataDest = (QRgb *) pDest.scanLine(idx);
+ idx++;
+ for (int x=iX; x<iXend; x++)
+ {
+ col = *dataSource;
+ sumR=qRed(col)+r;
+ sumG=qGreen(col)+g;
+ sumB=qBlue(col)+b;
+ *dataDest++ = qRgba(sumR<255 ?sumR : 255,
+ sumG<255 ?sumG : 255,
+ sumB<255 ?sumB : 255,
+ qAlpha(col));
+ dataSource++;
+ }
+ }
}
- else if(KviQString::equalCI(szEffect,"sub"))
+ else if(KviQString::equalCI(szEffect,"subrgb"))
{
- int subR, subG, subB;
- for(int y=0; y<h; y++)
+ int subR, subG, subB,idx=0;
+ for(int y=iY; y<iYend; y++)
+ {
+ dataSource = (QRgb *) pImage->scanLine(y)+iX;
+ dataDest = (QRgb *) pDest.scanLine(idx);
+ idx++;
+ for (int x=iX; x<iXend; x++)
+ {
+ col = *dataSource;
+ subR=qRed(col)-r;
+ subG=qGreen(col)-g;
+ subB=qBlue(col)-b;
+ *dataDest++ = qRgba(subR>0 ? subR : 0,
+ subG>0 ? subG : 0,
+ subB>0 ? subB : 0,
+ qAlpha(col));
+ dataSource++;
+ }
+ }
+ }
+ else if(KviQString::equalCI(szEffect,"grayscale"))
+ {
+ QRgb col;
+ int res,idx=0;
+ for(int y=iY; y<iYend; y++)
{
- dataSource = (QRgb *) pImage->scanLine(y);
- dataDest = (QRgb *) pDest.scanLine(y);
- for (int x=0; x<w; x++)
+ dataSource = (QRgb *) pImage->scanLine(y)+iX;
+ dataDest = (QRgb *) pDest.scanLine(idx);
+ for (int x=iX; x<iXend; x++)
{
col = *dataSource;
- subR=qRed(col)-r;
- subG=qGreen(col)-g;
- subB=qBlue(col)-b;
- *dataDest++ = qRgba(subR>0 ? subR : 0,
- subG>0 ? subG : 0,
- subB>0 ? subB : 0,
- qAlpha(col));
+ res = (qRed(col)+qGreen(col)+qBlue(col))/3;
+ *dataDest++ = qRgba(res, res, res,qAlpha(col));
dataSource++;
}
+ idx++;
}
}
- m_pPainter->drawImage(QPointF(iX,iY),pDest);
+ m_pPainter->drawImage(QPointF(rX,rY),pDest);
+ return true;
+}
+KVSO_CLASS_FUNCTION(painter,drawPixmapMirrored)
+{
+ CHECK_INTERNAL_POINTER(m_pPainter)
+ bool bHorizontal,bVertical;
+ kvs_int_t iX,iY,iW,iH;
+ KviKvsObject *obj;
+ kvs_hobject_t hObject;
+ kvs_real_t rX,rY;
+ KVSO_PARAMETERS_BEGIN(c)
+ KVSO_PARAMETER("x",KVS_PT_REAL,0,rX)
+ KVSO_PARAMETER("y",KVS_PT_REAL,0,rY)
+ KVSO_PARAMETER("pixmap",KVS_PT_HOBJECT,0,hObject)
+ KVSO_PARAMETER("bHorizontal",KVS_PT_BOOLEAN,0,bHorizontal)
+ KVSO_PARAMETER("bvertical",KVS_PT_BOOLEAN,0,bVertical)
+ KVSO_PARAMETER("start_x",KVS_PT_INT,KVS_PF_OPTIONAL,iX)
+ KVSO_PARAMETER("start_y",KVS_PT_INT,KVS_PF_OPTIONAL,iY)
+ KVSO_PARAMETER("width",KVS_PT_INT,KVS_PF_OPTIONAL,iW)
+ KVSO_PARAMETER("height",KVS_PT_INT,KVS_PF_OPTIONAL,iH)
+ KVSO_PARAMETERS_END(c)
+ obj=KviKvsKernel::instance()->objectController()->lookupObject(hObject);
+ if (!obj)
+ {
+ c->warning(__tr2qs_ctx("Pixmap parameter is not an object","objects"));
+ return true;
+ }
+ if (!obj->inheritsClass("pixmap"))
+ {
+ c->warning(__tr2qs_ctx("Pixmap object required","objects"));
+ return true;
+ }
+ QImage *pImage=((KvsObject_pixmap *)obj)->getImage();
+ QPoint sourceXY(0,0);
+ if(c->parameterCount()>=5)
+ {
+ sourceXY.setX(iX);
+ sourceXY.setY(iY);
+ }
+ QSize sourceWH(pImage->width(),pImage->height());
+ if(c->parameterCount()>=5)
+ {
+ sourceWH.setWidth(iW);
+ sourceWH.setHeight(iH);
+ }
+ QImage mirrored = pImage->mirrored(bHorizontal,bVertical);
+ m_pPainter->drawImage(rX,rY,mirrored, sourceXY.x(), sourceXY.y(),sourceWH.width(),sourceWH.height());
return true;
}
KVSO_CLASS_FUNCTION(painter,rotate)
@@ -1807,7 +1967,7 @@ KVSO_CLASS_FUNCTION(painter,fillRect)
else
col.setRgb(iCol1,iCol2,iCol3,iOpacity);
}
- m_pPainter->fillRect(iX,iY,iW,iH,col);
+ m_pPainter->fillRect(iX,iY,iW,iH,QBrush(col));
return true;
}
diff --git a/src/modules/objects/KvsObject_painter.h b/src/modules/objects/KvsObject_painter.h
index f1bfd971d..d6e28e3dc 100644
--- a/src/modules/objects/KvsObject_painter.h
+++ b/src/modules/objects/KvsObject_painter.h
@@ -57,6 +57,7 @@ public:
bool fontMetricsHeight(KviKvsObjectFunctionCall *c);
bool setBrush(KviKvsObjectFunctionCall *c);
bool setPen(KviKvsObjectFunctionCall *c);
+ bool pen(KviKvsObjectFunctionCall *c);
bool setBackGroundMode(KviKvsObjectFunctionCall *c);
bool drawRect(KviKvsObjectFunctionCall *c);
@@ -114,7 +115,8 @@ public:
bool resetPath(KviKvsObjectFunctionCall *c);
bool beginPdf(KviKvsObjectFunctionCall *c);
- bool drawPixmapWithEffect(KviKvsObjectFunctionCall *c);
+ bool drawPixmapWithColorEffect(KviKvsObjectFunctionCall *c);
+ bool drawPixmapMirrored(KviKvsObjectFunctionCall *c);
bool painterDeviceWidth(KviKvsObjectFunctionCall *c);
bool painterDeviceHeight(KviKvsObjectFunctionCall *c);
diff --git a/src/modules/objects/KvsObject_pixmap.cpp b/src/modules/objects/KvsObject_pixmap.cpp
index b471f80fc..65f091c50 100644
--- a/src/modules/objects/KvsObject_pixmap.cpp
+++ b/src/modules/objects/KvsObject_pixmap.cpp
@@ -100,10 +100,11 @@ KVSO_BEGIN_REGISTERCLASS(KvsObject_pixmap,"pixmap","object")
KVSO_REGISTER_HANDLER_BY_NAME(KvsObject_pixmap,rotate)
KVSO_REGISTER_HANDLER_BY_NAME(KvsObject_pixmap,mirrored)
KVSO_REGISTER_HANDLER_BY_NAME(KvsObject_pixmap,setPixel)
- KVSO_REGISTER_HANDLER_BY_NAME(KvsObject_pixmap,toGrayScale)
+ KVSO_REGISTER_HANDLER_BY_NAME(KvsObject_pixmap,pixel)
KVSO_REGISTER_HANDLER_BY_NAME(KvsObject_pixmap,grabWidget)
KVSO_REGISTER_HANDLER_BY_NAME(KvsObject_pixmap,frameChangedEvent)
+
KVSO_END_REGISTERCLASS(KvsObject_pixmap)
@@ -296,6 +297,57 @@ KVSO_CLASS_FUNCTION(pixmap,setPixel)
return true;
}
+KVSO_CLASS_FUNCTION(pixmap,pixel)
+{
+ kvs_int_t iX,iY;
+ QString szFlags;
+ KVSO_PARAMETERS_BEGIN(c)
+ KVSO_PARAMETER("x",KVS_PT_INTEGER,0,iX)
+ KVSO_PARAMETER("y",KVS_PT_INTEGER,0,iY)
+ KVSO_PARAMETER("b",KVS_PT_STRING,KVS_PF_OPTIONAL,szFlags)
+ KVSO_PARAMETERS_END(c)
+
+ if(m_currentType==AnimatedPixmap)
+ {
+ c->warning(__tr2qs_ctx("AnimatedPixmap not supported","objects"));
+ return true;
+ } else if((m_currentType==Image && !m_pImage) || (m_currentType==Pixmap && !m_pPixmap)) {
+ c->error(__tr2qs_ctx("The pixmap is null","objects"));
+ return false;
+ } else if(m_currentType==Pixmap) {
+ qDebug("mpimage %i",m_pImage);
+ qDebug("pixmap %i %i",m_pPixmap->width(),m_pPixmap->height());
+ if(m_pImage)
+ delete m_pImage;
+ else m_pImage = new QImage();
+ *m_pImage = m_pPixmap->toImage();
+ delete m_pPixmap;
+ m_pPixmap = 0;
+ }
+ m_currentType = Image;
+ QRgb rgb= m_pImage->pixel(iX,iY);
+ QColor col(rgb);
+ if(szFlags.isEmpty()){
+ c->returnValue()->setString(col.name());
+ return true;
+ }
+ KviKvsVariant *pRed = new KviKvsVariant((kvs_int_t)col.red());
+ KviKvsVariant *pGreen = new KviKvsVariant((kvs_int_t)col.green());
+ KviKvsVariant *pBlue = new KviKvsVariant((kvs_int_t)col.blue());
+ if (szFlags.indexOf('a',0,Qt::CaseInsensitive) != -1){
+ KviKvsArray *pArray = new KviKvsArray();
+ pArray->set(0,pRed);
+ pArray->set(1,pGreen);
+ pArray->set(2,pBlue);
+ c->returnValue()->setArray(pArray);
+ } else if (szFlags.indexOf('h',0,Qt::CaseInsensitive) != -1){
+ KviKvsHash *pHash = new KviKvsHash();
+ pHash->set("red",pRed);
+ pHash->set("green",pGreen);
+ pHash->set("blue",pBlue);
+ }
+ return true;
+}
KVSO_CLASS_FUNCTION(pixmap,rotate)
{
kvs_real_t dAngle;
@@ -349,13 +401,12 @@ KVSO_CLASS_FUNCTION(pixmap,rotate)
KVSO_CLASS_FUNCTION(pixmap,mirrored)
{
- kvs_real_t dAngle;
- bool bHorizontal,bVertical;
+ bool bHorizontal,bVertical;
+
KVSO_PARAMETERS_BEGIN(c)
KVSO_PARAMETER("bHorizontal",KVS_PT_BOOLEAN,0,bHorizontal)
- KVSO_PARAMETER("bvertical",KVS_PT_BOOLEAN,0,bVertical)
+ KVSO_PARAMETER("bvertical",KVS_PT_BOOLEAN,0,bVertical)
KVSO_PARAMETERS_END(c)
-
if(m_currentType==Pixmap)
{
if(m_pPixmap)
@@ -382,86 +433,45 @@ KVSO_CLASS_FUNCTION(pixmap,mirrored)
}
-KVSO_CLASS_FUNCTION(pixmap,toGrayScale)
-{
- if(m_currentType==Pixmap)
- {
- if(m_pPixmap)
- {
- if(!m_pImage) m_pImage = new QImage();
- *m_pImage = m_pPixmap->toImage();
- } else {
- c->error(__tr2qs_ctx("The pixmap is null","objects"));
- return false;
- }
- } else if(m_currentType==AnimatedPixmap) {
- c->warning(__tr2qs_ctx("AnimatedPixmap not supported","objects"));
- return true;
- }
-
- if(!m_pImage)
- {
- c->error(__tr2qs_ctx("The pixmap is null","objects"));
- return false;
- }
- m_currentType = Image;
- QRgb col;
- int w=m_pImage->width();
- int h=m_pImage->height();
- int res;
- for(int y=0; y<h; y++)
- {
- QRgb *data = (QRgb *) m_pImage->scanLine(y);
- for (int x=0; x<w; x++)
- {
- col = *data;
- res = (qRed(col)+qGreen(col)+qBlue(col))/3;
- *data++ = qRgba(res, res, res,qAlpha(col));
- }
- }
- return true;
-}
KVSO_CLASS_FUNCTION(pixmap,scale)
{
- kvs_int_t iWidth,iHeight;
- QString szAspectRatio;
- KVSO_PARAMETERS_BEGIN(c)
- KVSO_PARAMETER("width",KVS_PT_INTEGER,0,iWidth)
- KVSO_PARAMETER("height",KVS_PT_INTEGER,0,iHeight)
- KVSO_PARAMETER("aspect_ratio",KVS_PT_STRING,KVS_PF_OPTIONAL,szAspectRatio)
- KVSO_PARAMETERS_END(c)
-
- Qt::AspectRatioMode ratio=Qt::KeepAspectRatio;
- if(!szAspectRatio.isEmpty())
- {
- if(KviQString::equalCI(szAspectRatio,"IgnoreAspectRatio"))
- ratio=Qt::IgnoreAspectRatio;
- else if (KviQString::equalCI(szAspectRatio,"KeepAspectRatio"))
- ratio=Qt::KeepAspectRatio;
- else if (KviQString::equalCI(szAspectRatio,"KeepAspectRatioByExpanding"))
- ratio=Qt::KeepAspectRatioByExpanding;
- else
- c->warning(__tr2qs_ctx("Unknown aspect ratio %Q - Switching to KeepAspectRatio ratio","objects"),&szAspectRatio);
- }
- if(m_currentType==Pixmap)
- {
- if(m_pPixmap)
+ kvs_int_t iWidth,iHeight;
+ QString szAspectRatio;
+ KVSO_PARAMETERS_BEGIN(c)
+ KVSO_PARAMETER("width",KVS_PT_INTEGER,0,iWidth)
+ KVSO_PARAMETER("height",KVS_PT_INTEGER,0,iHeight)
+ KVSO_PARAMETER("aspect_ratio",KVS_PT_STRING,KVS_PF_OPTIONAL,szAspectRatio)
+ KVSO_PARAMETERS_END(c)
+ Qt::AspectRatioMode ratio=Qt::KeepAspectRatio;
+ if(!szAspectRatio.isEmpty())
+ {
+ if(KviQString::equalCI(szAspectRatio,"IgnoreAspectRatio")) ratio=Qt::IgnoreAspectRatio;
+ else if (KviQString::equalCI(szAspectRatio,"KeepAspectRatio")) ratio=Qt::KeepAspectRatio;
+ else if (KviQString::equalCI(szAspectRatio,"KeepAspectRatioByExpanding")) ratio=Qt::KeepAspectRatioByExpanding;
+ else c->warning(__tr2qs_ctx("Unknown aspect ratio %Q - Switching to KeepAspectRatio ratio","objects"),&szAspectRatio);
+ }
+ if(m_currentType==Pixmap)
+ {
+ if(m_pPixmap)
+ *m_pPixmap=m_pPixmap->scaled(iWidth,iHeight,ratio,Qt::SmoothTransformation);
+ else{
+ c->error(__tr2qs_ctx("The pixmap is null","objects"));
+ return false;
+ }
+ }
+ else if (m_currentType==AnimatedPixmap)
+ m_pAnimatedPixmap->resize(QSize(iWidth,iHeight),ratio);
+ else if(m_currentType==Image)
+ {
+ if(!m_pImage)
{
- *m_pPixmap=m_pPixmap->scaled(iWidth,iHeight,ratio,Qt::SmoothTransformation);
- } else {
c->error(__tr2qs_ctx("The pixmap is null","objects"));
return false;
}
- } else if (m_currentType==AnimatedPixmap) {
- m_pAnimatedPixmap->resize(QSize(iWidth,iHeight),ratio);
- } else if(m_pImage) {
*m_pImage=m_pImage->scaled(iWidth,iHeight,ratio,Qt::SmoothTransformation);
- } else {
- c->error(__tr2qs_ctx("The pixmap is null","objects"));
- return false;
- }
- return true;
+ }
+ return true;
}
KVSO_CLASS_FUNCTION(pixmap,loadAnimation)
@@ -520,7 +530,7 @@ KVSO_CLASS_FUNCTION(pixmap,load)
}
if(!m_pImage)
m_pImage=new QImage();
-
+ m_currentType = Image;
m_pImage->load(szFile);
return true;
/*
diff --git a/src/modules/objects/KvsObject_pixmap.h b/src/modules/objects/KvsObject_pixmap.h
index 2f6dc67d3..c17740832 100644
--- a/src/modules/objects/KvsObject_pixmap.h
+++ b/src/modules/objects/KvsObject_pixmap.h
@@ -100,15 +100,14 @@ protected:
bool load(KviKvsObjectFunctionCall *c);
bool height(KviKvsObjectFunctionCall *c);
bool width(KviKvsObjectFunctionCall *c);
+ bool mirrored(KviKvsObjectFunctionCall *c);
bool grabWidget(KviKvsObjectFunctionCall *c);
bool loadFromMemoryBuffer(KviKvsObjectFunctionCall *c);
bool rotate(KviKvsObjectFunctionCall *c);
bool toGrayScale(KviKvsObjectFunctionCall *c);
- bool mirrored(KviKvsObjectFunctionCall *c);
bool setPixel(KviKvsObjectFunctionCall *c);
-
+ bool pixel(KviKvsObjectFunctionCall *c);
bool frameChangedEvent(KviKvsObjectFunctionCall *c);
-
protected slots:
void frameChanged();
};
diff --git a/src/modules/objects/KvsObject_sql.cpp b/src/modules/objects/KvsObject_sql.cpp
index 34b7b519c..3212d187d 100644
--- a/src/modules/objects/KvsObject_sql.cpp
+++ b/src/modules/objects/KvsObject_sql.cpp
@@ -164,7 +164,8 @@ KVSO_CLASS_FUNCTION(sql,setConnection)
}
}
else szDbDriver="QSQLITE";
- QSqlDatabase db=QSqlDatabase::addDatabase(szDbDriver,szConnectionName);
+ QSqlDatabase db;
+ db=QSqlDatabase::addDatabase(szDbDriver,szConnectionName);
mSzConnectionName = szConnectionName;
db.setDatabaseName(szDbName);
db.setHostName(szHostName);
@@ -176,6 +177,7 @@ KVSO_CLASS_FUNCTION(sql,setConnection)
if(m_pCurrentSQlQuery) delete m_pCurrentSQlQuery;
m_pCurrentSQlQuery = new QSqlQuery(db);
}
+ else m_pCurrentSQlQuery = 0;
c->returnValue()->setBoolean(bOk);
return true;
}
diff --git a/src/modules/objects/KvsObject_tableWidget.cpp b/src/modules/objects/KvsObject_tableWidget.cpp
index 6299b42f5..a02378ca6 100644
--- a/src/modules/objects/KvsObject_tableWidget.cpp
+++ b/src/modules/objects/KvsObject_tableWidget.cpp
@@ -132,7 +132,7 @@ const char * const itemflags_tbl[] = {
the RED component, the third and fourth digit specify the GREEN component
and the last two specify the BLUE component.
For example "FFFF00" means full red, full green and no blue that gives
- !fn: $setFlag(<row:uint>,<col:uint>,<flag1:string>, <flag2:string>, ...)
+ !fn: $setItemFlags(<row:uint>,<col:uint>,<flag1:string>, <flag2:string>, ...)
Sets the flags for the cell pointed by row and col to the given flags.
These determine whether the cell can be selected or modified.
Supported flags are:
diff --git a/src/modules/objects/KvsObject_widget.cpp b/src/modules/objects/KvsObject_widget.cpp
index e200d5da0..004d0fead 100644
--- a/src/modules/objects/KvsObject_widget.cpp
+++ b/src/modules/objects/KvsObject_widget.cpp
@@ -644,6 +644,7 @@ KVSO_BEGIN_REGISTERCLASS(KvsObject_widget,"widget","object")
// fonts
KVSO_REGISTER_HANDLER_BY_NAME(KvsObject_widget,fontDescent)
KVSO_REGISTER_HANDLER_BY_NAME(KvsObject_widget,fontAscent)
+ KVSO_REGISTER_HANDLER_BY_NAME(KvsObject_widget,fontMetricsLineSpacing)
KVSO_REGISTER_HANDLER_BY_NAME(KvsObject_widget,fontMetricsWidth)
KVSO_REGISTER_HANDLER_BY_NAME(KvsObject_widget,fontMetricsHeight)
KVSO_REGISTER_HANDLER_BY_NAME(KvsObject_widget,setFont)
@@ -957,8 +958,14 @@ bool KvsObject_widget::eventFilter(QObject *o,QEvent *e)
if(!callFunction(this,"focusOutEvent",&oReturnBuffer,0))brokenhandler = true;
break;
case QEvent::Resize:
- if(!callFunction(this,"resizeEvent",&oReturnBuffer,0))brokenhandler = true;
- break;
+ {
+ KviKvsVariantList lParams;
+ lParams.append(new KviKvsVariant((kvs_int_t)((QResizeEvent *)e)->size().width()));
+ lParams.append(new KviKvsVariant((kvs_int_t)((QResizeEvent *)e)->size().height()));
+ qDebug("new size %i - %i",((QResizeEvent *)e)->size().width(),((QResizeEvent *)e)->size().height());
+ if(!callFunction(this,"resizeEvent",&oReturnBuffer,&lParams))brokenhandler = true;
+ break;
+ }
case QEvent::Move:
if(!callFunction(this,"moveEvent",&oReturnBuffer,0))brokenhandler = true;
break;
@@ -1089,7 +1096,13 @@ KVSO_CLASS_FUNCTION(widget,fontMetricsHeight)
c->returnValue()->setInteger(fm);
return true;
}
-
+KVSO_CLASS_FUNCTION(widget,fontMetricsLineSpacing)
+{
+ CHECK_INTERNAL_POINTER(widget())
+ int fm = widget()->fontMetrics().lineSpacing();
+ c->returnValue()->setInteger(fm);
+ return true;
+}
KVSO_CLASS_FUNCTION(widget,screenResolution)
{
CHECK_INTERNAL_POINTER(widget())
@@ -1746,9 +1759,9 @@ KVSO_CLASS_FUNCTION(widget,setFont)
QString szFamily;
QStringList szListStyle;
kvs_int_t iSize;
- KVSO_PARAMETERS_BEGIN(c)
- KVSO_PARAMETER("size",KVS_PT_INTEGER,0,iSize)
+ KVSO_PARAMETERS_BEGIN(c)
KVSO_PARAMETER("family",KVS_PT_STRING,0,szFamily)
+ KVSO_PARAMETER("size",KVS_PT_INTEGER,0,iSize)
KVSO_PARAMETER("style",KVS_PT_STRINGLIST,KVS_PF_OPTIONAL,szListStyle)
KVSO_PARAMETERS_END(c)
QFont font=widget()->font();
diff --git a/src/modules/objects/KvsObject_widget.h b/src/modules/objects/KvsObject_widget.h
index 3b8b88df1..22ac4bb2b 100644
--- a/src/modules/objects/KvsObject_widget.h
+++ b/src/modules/objects/KvsObject_widget.h
@@ -72,6 +72,7 @@ protected:
bool fontDescent(KviKvsObjectFunctionCall * c);
bool fontMetricsHeight(KviKvsObjectFunctionCall * c);
bool fontMetricsWidth(KviKvsObjectFunctionCall * c);
+ bool fontMetricsLineSpacing(KviKvsObjectFunctionCall * c);
bool foregroundColor(KviKvsObjectFunctionCall *c);
bool geometry(KviKvsObjectFunctionCall *c);
bool globalCursorX(KviKvsObjectFunctionCall *c);