#include #include "xuiquerydrag.h" #include #include #include char QueryDragXuiObjectStr[] = "QueryDrag"; // This is the xml tag char QueryDragXuiSvcName[] = "QueryDrag xui object"; // and this is the name of the service XMLParamPair QueryDrag::params[] = { {QUERYDRAG_SETIMAGE, "image"}, {QUERYDRAG_SETSOURCE, "source"}, }; QueryDrag::QueryDrag() { setVirtual(0); // fucko myxuihandle = newXuiHandle(); int numParams = sizeof(params) / sizeof(params[0]); hintNumberOfParams(numParams); for (int i = 0;i < numParams;i++) addParam(myxuihandle, params[i], XUI_ATTRIBUTE_IMPLIED); fn = NULL; } QueryDrag::~QueryDrag() { } int QueryDrag::setXuiParam(int xuihandle, int xmlattributeid, const wchar_t *xmlattributename, const wchar_t *value) { if (xuihandle != myxuihandle) return QUERYDRAG_PARENT::setXuiParam(xuihandle, xmlattributeid, xmlattributename, value); switch (xmlattributeid) { case QUERYDRAG_SETIMAGE: setImage(value); break; case QUERYDRAG_SETSOURCE: setSource(value); break; default: return 0; } return 1; } int QueryDrag::onPaint(Canvas *canvas) { QUERYDRAG_PARENT::onPaint(canvas); RECT r; getClientRect(&r); RenderBaseTexture(canvas, r, 255); if (image.getBitmap()) image.getBitmap()->stretchToRectAlpha(canvas, &r, getPaintingAlpha()); return 1; } void QueryDrag::setImage(const char *elementname) { image = elementname; if (isInited()) invalidate(); } void QueryDrag::setSource(const char *elementname) { source = elementname; } int QueryDrag::getPreferences(int what) { switch (what) { case SUGGESTED_W: if (image.getBitmap()) return image.getBitmap()->getWidth(); case SUGGESTED_H: if (image.getBitmap()) return image.getBitmap()->getHeight(); } return QUERYDRAG_PARENT::getPreferences(what); } int QueryDrag::onMouseMove(int x, int y) { QUERYDRAG_PARENT::onMouseMove(x,y); if (isInClick()) onBeginDrag(); return 1; } void QueryDrag::onBeginDrag() { api_window *mqsw = NULL; if (source.isempty()) mqsw = findWindowByInterface(multiQueryServerGuid); else mqsw = findWindow(source); if (!mqsw) return; MultiQueryServer *mqs = static_cast(mqsw->getInterface(multiQueryServerGuid)); // multiquery is now available in mqs->mqs_getMultiQuery(); using format "table guid;query;table guid;query;etc..." fn = new FilenameI(StringPrintf("query://%s.nsq", mqs->mqs_getMultiQuery())); addDragItem(Filename::dragitem_getDatatype(), static_cast(fn)); handleDrag(); } int QueryDrag::dragComplete(int success) { ASSERT(fn != NULL); delete fn; fn = NULL; return 1; }