diff options
Diffstat (limited to 'mBot/src/mbot/functions/mb_pu.cpp')
-rw-r--r-- | mBot/src/mbot/functions/mb_pu.cpp | 198 |
1 files changed, 198 insertions, 0 deletions
diff --git a/mBot/src/mbot/functions/mb_pu.cpp b/mBot/src/mbot/functions/mb_pu.cpp new file mode 100644 index 0000000..3cafe34 --- /dev/null +++ b/mBot/src/mbot/functions/mb_pu.cpp @@ -0,0 +1,198 @@ +/*
+
+Miranda Scripting Plugin for Miranda-IM
+Copyright 2004-2006 Piotr Pawluczuk (www.pawluczuk.info)
+
+This program is free software; you can redistribute it and/or
+modify it under the terms of the GNU General Public License
+as published by the Free Software Foundation; either version 2
+of the License, or (at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+*/
+#include "../functions.h"
+
+/******************************************
+ * popups *
+ ******************************************/
+
+void MB_Popup(const char* title,const char* error,unsigned long flags,unsigned long timeout)
+{
+ MIRANDASYSTRAYNOTIFY mbp={0};
+ mbp.cbSize = sizeof(MIRANDASYSTRAYNOTIFY);
+ mbp.szProto = "MBot";
+ mbp.szInfoTitle = (char*)title;
+ mbp.szInfo = (char*)error;
+ mbp.dwInfoFlags = flags;
+ mbp.uTimeout = timeout;
+
+ if(flags == NIIF_ERROR && (DBGetContactSettingByte(NULL,MBOT,"SWOnError",0))){
+ ShowWindow(hDialog,SW_SHOW);
+ SetWindowPos(hDialog,HWND_TOPMOST,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE);
+ }
+
+ CallService(MS_CLIST_SYSTRAY_NOTIFY, (WPARAM)NULL,(LPARAM) &mbp);
+}
+
+void WINAPI MBotPUHelperThread(void* a)
+{
+ POPUPDATAEX* pde = (POPUPDATAEX*)a;
+
+ if(pde)
+ {
+ try{
+ PUAddPopUpEx(pde);
+ }catch(...){
+ pde->lchIcon = NULL;
+ }
+ my_memfree(pde);
+ }
+}
+
+ZEND_FUNCTION(mb_PUMsg)
+{
+ char* txt=NULL;
+ long tl=0,type=0;
+ POPUPDATAEX *pd;
+
+ if(zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|l",&txt,&tl,&type) == FAILURE){
+ PHP_FALSE_AND_WARNS(PHP_WARN_INVALID_PARAMS);
+ }
+
+ if(!(pd = (POPUPDATAEX*)my_malloc(sizeof(POPUPDATAEX)))){
+ RETURN_FALSE;
+ }
+
+ memset(pd,0,sizeof(POPUPDATAEX));
+ pd->iSeconds = 0;
+
+ if(type == 2){
+ pd->lchIcon = (HICON)hMBotIcon;
+ }else{
+ pd->lchIcon = (type == 2)?LoadIcon(NULL,IDI_ASTERISK):LoadIcon(NULL,IDI_INFORMATION);
+ }
+
+ strncpy(pd->lpzText,txt,sizeof(pd->lpzText));
+ strcpy(pd->lpzContactName,"MBot");
+ if(CallFunctionAsync(MBotPUHelperThread,pd)==FALSE){
+ my_memfree(pd);
+ RETURN_FALSE;
+ }
+ RETURN_TRUE;
+}
+ZEND_FUNCTION(mb_PUAdd)
+{
+ char *cname,*txt;
+ long cid=0,cl=0,tl=0,bgc=0,txc=0,hico=NULL;
+ POPUPDATAEX *pd;
+
+ if(zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "lss|lll",
+ &cid,&cname,&cl,&txt,&tl,&bgc,&txc,&hico) == FAILURE){
+ PHP_FALSE_AND_WARNS(PHP_WARN_INVALID_PARAMS);
+ }
+
+ if(!(pd = (POPUPDATAEX*)my_malloc(sizeof(POPUPDATAEX)))){
+ PHP_FALSE_AND_WARNS("Could not allocate memory!");
+ }
+
+ memset(pd,0,sizeof(POPUPDATAEX));
+ pd->iSeconds = 0;
+
+ pd->lchContact = (HANDLE)cid;
+ pd->colorText = txc;
+ pd->colorBack = bgc;
+ pd->lchIcon = (hico)?((HICON)hico):((HICON)hMBotIcon);
+ strncpy(pd->lpzContactName,cname,sizeof(pd->lpzContactName)-1);
+ strncpy(pd->lpzText,txt,sizeof(pd->lpzText)-1);
+
+ if(CallFunctionAsync(MBotPUHelperThread,pd)==FALSE){
+ my_memfree(pd);
+ RETURN_FALSE;
+ }
+ RETURN_TRUE;
+}
+
+ZEND_FUNCTION(mb_PUAddEx)
+{
+ long cid=0,cl=0,tl=0,bgc=0,txc=0,delay=0,param=0,hico=0;
+ char* cname=NULL,*txt=NULL;
+ zval* cb = NULL;
+ sMFSync* mfs = NULL;
+ POPUPDATAEX *pd;
+
+ mb_event* mbe = (mb_event*)(((sPHPENV*)SG(server_context))->c_param);
+
+ if(zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "lss|llllzl",
+ &cid,&cname,&cl,&txt,&tl,&bgc,&txc,&hico,&delay,&cb,¶m) == FAILURE || (cb && cb->type != IS_STRING)){
+ PHP_FALSE_AND_WARNS(PHP_WARN_INVALID_PARAMS);
+ }
+
+ if(cb && !zend_is_callable(cb,0,NULL)){
+ PHP_FALSE_AND_WARNS(PHP_WARN_INVALID_PARAMS);
+ }
+
+ if(!(pd = (POPUPDATAEX*)my_malloc(sizeof(POPUPDATAEX)))){
+ RETURN_FALSE;
+ }
+
+ memset(pd,0,sizeof(POPUPDATAEX));
+
+ if(cb)
+ {
+ mfs = (sMFSync*)my_malloc(sizeof(sMFSync));
+ if(!mfs)goto Error;
+ memset(mfs,0,sizeof(sMFSync));
+
+ if(!mbe->php){goto Error;}
+ mfs->php = mbe->php;
+
+ strncpy(mfs->pszFunction,cb->value.str.val,sizeof(mfs->pszFunction));
+ mfs->pParam = (void*)param;
+
+ pd->PluginWindowProc = (WNDPROC)help_popup_wndproc;
+ pd->PluginData = mfs;
+ }
+
+ pd->iSeconds = delay;
+ pd->lchContact = (HANDLE)cid;
+ pd->colorText = txc;
+ pd->colorBack = bgc;
+ pd->lchIcon = (hico)?((HICON)hico):((HICON)hMBotIcon);
+ strncpy(pd->lpzContactName,cname,sizeof(pd->lpzContactName)-1);
+ strncpy(pd->lpzText,txt,sizeof(pd->lpzText)-1);
+
+ if(CallFunctionAsync(MBotPUHelperThread,pd)==FALSE){
+ goto Error;
+ }
+ RETURN_TRUE;
+Error:
+ my_memfree(pd);
+ if(mfs)my_memfree(mfs);
+ RETURN_FALSE;
+}
+
+ZEND_FUNCTION(mb_PUSystem)
+{
+ char* body;
+ char* title;
+ unsigned long tl=0,bl=0,flags=0,timeout=5;
+
+ if(zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss|ll",&title,&tl,&body,&bl,&flags,&timeout) == FAILURE){
+ PHP_FALSE_AND_WARNS(PHP_WARN_INVALID_PARAMS);
+ }
+
+ if(!bl || !tl){
+ RETURN_FALSE;
+ }
+
+ MB_Popup(title,body,flags,timeout * 1000);
+ RETURN_TRUE;
+}
\ No newline at end of file |