summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--QuickMessages/Utils.c615
-rw-r--r--QuickMessages/Utils.h78
-rw-r--r--QuickMessages/icons/qicon.icobin0 -> 2038 bytes
-rw-r--r--QuickMessages/main.c409
-rw-r--r--QuickMessages/options.c1169
-rw-r--r--QuickMessages/quickmessages.dsp301
-rw-r--r--QuickMessages/quickmessages.dsw29
-rw-r--r--QuickMessages/quickmessages.h93
-rw-r--r--QuickMessages/quickmessages.rc234
-rw-r--r--QuickMessages/quickmessages.sln31
-rw-r--r--QuickMessages/quickmessages.vcproj645
-rw-r--r--QuickMessages/resource.h47
-rw-r--r--wbOSD/buildnumber.h6
-rw-r--r--wbOSD/events.cpp218
-rw-r--r--wbOSD/lpgen.pl212
-rw-r--r--wbOSD/main.cpp105
-rw-r--r--wbOSD/options.cpp426
-rw-r--r--wbOSD/pack.cmd31
-rw-r--r--wbOSD/readme84
-rw-r--r--wbOSD/resource.h57
-rw-r--r--wbOSD/wbOSD-translation.txt42
-rw-r--r--wbOSD/wbOSD.cpp332
-rw-r--r--wbOSD/wbOSD.dep24
-rw-r--r--wbOSD/wbOSD.dsp200
-rw-r--r--wbOSD/wbOSD.dsw29
-rw-r--r--wbOSD/wbOSD.h144
-rw-r--r--wbOSD/wbOSD.mak336
-rw-r--r--wbOSD/wbOSD.rc188
-rw-r--r--wbOSD/wbOSD.vcproj191
-rw-r--r--wbOSD/wbOSD_10.vcxproj182
-rw-r--r--wbOSD/wbOSD_10.vcxproj.filters44
-rw-r--r--wbOSD/wbOSD_9.vcproj423
32 files changed, 6925 insertions, 0 deletions
diff --git a/QuickMessages/Utils.c b/QuickMessages/Utils.c
new file mode 100644
index 0000000..da6ef4e
--- /dev/null
+++ b/QuickMessages/Utils.c
@@ -0,0 +1,615 @@
+/*
+Quick Messages plugin for Miranda IM
+
+Copyright (C) 2008 Danil Mozhar
+
+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 3 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, see <http://www.gnu.org/licenses/>.
+*/
+
+#include "quickmessages.h"
+
+ListData* ButtonsList[100];
+
+SortedList* QuickList=NULL;
+
+
+typedef void (*ItemDestuctor)(void*);
+
+
+int sstSortButtons(const void * vmtbi1, const void * vmtbi2)
+ {
+ ButtonData * mtbi1=(ButtonData *)*((ButtonData ** )vmtbi1);
+ ButtonData * mtbi2=(ButtonData *)*((ButtonData ** )vmtbi2);
+ if (mtbi1==NULL || mtbi2==NULL) return (mtbi1-mtbi2);
+ return mtbi1->dwPos-mtbi2->dwPos;
+ }
+
+int sstQuickSortButtons(const void * vmtbi1, const void * vmtbi2)
+ {
+ QuickData * mtbi1=(QuickData *)*((QuickData ** )vmtbi1);
+ QuickData * mtbi2=(QuickData *)*((QuickData ** )vmtbi2);
+ if (mtbi1==NULL || mtbi2==NULL) return (mtbi1-mtbi2);
+ return mtbi1->dwPos-mtbi2->dwPos;
+ }
+
+
+int sstOpSortButtons(const void * vmtbi1, const void * vmtbi2)
+ {
+ ButtonData * mtbi1=(ButtonData *)*((ButtonData ** )vmtbi1);
+ ButtonData * mtbi2=(ButtonData *)*((ButtonData ** )vmtbi2);
+ if (mtbi1==NULL || mtbi2==NULL) return (mtbi1-mtbi2);
+ return mtbi1->dwOPPos-mtbi2->dwOPPos;
+ }
+
+
+void li_ListDestruct(SortedList *pList, ItemDestuctor pItemDestructor)
+ {
+ int i=0;
+ if (!pList) return;
+ for (i=0; i<pList->realCount; i++) pItemDestructor(pList->items[i]);
+ li.List_Destroy(pList);
+ mir_free(pList);
+ }
+
+void li_RemoveDestruct(SortedList *pList, int index, ItemDestuctor pItemDestructor)
+ {
+ if (index>=0 && index<pList->realCount)
+ {
+ pItemDestructor(pList->items[index]);
+ li.List_Remove(pList, index);
+ }
+ }
+
+void li_RemovePtrDestruct(SortedList *pList, void * ptr, ItemDestuctor pItemDestructor)
+ {
+ if (li.List_RemovePtr(pList, ptr))
+ pItemDestructor(ptr);
+ }
+
+void li_SortList(SortedList *pList, FSortFunc pSortFunct)
+ {
+ FSortFunc pOldSort=pList->sortFunc;
+ int i;
+ if (!pSortFunct) pSortFunct=pOldSort;
+ pList->sortFunc=NULL;
+ for (i=0; i<pList->realCount-1; i++)
+ if (pOldSort(pList->items[i],pList->items[i+1])<0)
+ {
+ void * temp=pList->items[i];
+ pList->items[i]=pList->items[i+1];
+ pList->items[i+1]=temp;
+ i--;
+ if (i>0) i--;
+ }
+ pList->sortFunc=pOldSort;
+ }
+
+void li_ZeroQuickList(SortedList *pList)
+ {
+ int i;
+ for (i=0; i<pList->realCount; i++)
+ {
+ QuickData * qd=(QuickData *)pList->items[i];
+ qd->dwPos=0;
+ qd->bIsService=0;
+ qd->ptszValue=NULL;
+ qd->ptszValueName=NULL;
+ li.List_Remove(pList, i);
+ i--;
+ }
+ }
+
+static void listdestructor(void * input)
+ {
+ ButtonData * cbdi=(ButtonData *)input;
+
+ if(cbdi->pszName!=cbdi->pszOpName)
+ {
+ if(cbdi->pszOpName)
+ mir_free(cbdi->pszOpName);
+ if(cbdi->pszName)
+ mir_free(cbdi->pszName);
+ }
+ else if(cbdi->pszName)
+ mir_free(cbdi->pszName);
+
+ if(cbdi->pszValue!=cbdi->pszOpValue)
+ {
+ if(cbdi->pszOpValue)
+ mir_free(cbdi->pszOpValue);
+ if(cbdi->pszValue)
+ mir_free(cbdi->pszValue);
+ }
+ else if(cbdi->pszValue)
+ mir_free(cbdi->pszValue);
+
+ mir_free(cbdi);
+ }
+
+void RemoveMenuEntryNode(SortedList *pList, int index)
+ {
+ li_RemoveDestruct(pList,index,listdestructor);
+ }
+
+void DestroyButton(int listnum)
+ {
+ int i=listnum;
+ ListData* ld=ButtonsList[listnum];
+
+ if(ld->ptszButtonName) mir_free(ld->ptszButtonName);
+
+ if(ld->ptszOPQValue!=ld->ptszQValue)
+ if(ld->ptszOPQValue) mir_free(ld->ptszOPQValue);
+
+ if (ld->ptszQValue) mir_free(ld->ptszQValue);
+
+ li_ListDestruct((SortedList*)ld->sl,listdestructor);
+
+
+ mir_free(ld);
+ ButtonsList[i]=NULL;
+ while(ButtonsList[i+1])
+ {
+ ButtonsList[i]=ButtonsList[i+1];
+ ButtonsList[i+1]=NULL;
+ i++;
+ }
+}
+
+
+void SaveModuleSettings(int buttonnum,ButtonData* bd)
+ {
+ char szMEntry[256]={'\0'};
+
+ mir_snprintf(szMEntry,255,"EntryName_%u_%u",buttonnum,bd->dwPos);
+ DBWriteContactSettingTString(NULL, PLGNAME,szMEntry,bd->pszName );
+
+ mir_snprintf(szMEntry,255,"EntryValue_%u_%u",buttonnum,bd->dwPos);
+ if(bd->pszValue)
+ DBWriteContactSettingTString(NULL, PLGNAME,szMEntry,bd->pszValue );
+ else
+ DBDeleteContactSetting(NULL, PLGNAME,szMEntry);
+
+ mir_snprintf(szMEntry,255,"EntryRel_%u_%u",buttonnum,bd->dwPos);
+ DBWriteContactSettingByte(NULL, PLGNAME,szMEntry,bd->fEntryType );
+
+ mir_snprintf(szMEntry,255,"EntryToQMenu_%u_%u",buttonnum,bd->dwPos);
+ DBWriteContactSettingByte(NULL, PLGNAME,szMEntry,bd->bInQMenu);
+
+ mir_snprintf(szMEntry,255,"EntryIsServiceName_%u_%u",buttonnum,bd->dwPos);
+ DBWriteContactSettingByte(NULL, PLGNAME,szMEntry,bd->bIsServName);
+ }
+
+void CleanSettings(int buttonnum,int from)
+ {
+ char szMEntry[256]={'\0'};
+ DBVARIANT dbv = {0};
+ if(from==-1){
+ mir_snprintf(szMEntry,255,"ButtonName_%u",buttonnum);
+ DBDeleteContactSetting(NULL, PLGNAME,szMEntry);
+ mir_snprintf(szMEntry,255,"ButtonValue_%u",buttonnum);
+ DBDeleteContactSetting(NULL, PLGNAME,szMEntry);
+ mir_snprintf(szMEntry,255,"RCEntryIsServiceName_%u",buttonnum);
+ DBDeleteContactSetting(NULL, PLGNAME,szMEntry);
+ }
+
+ mir_snprintf(szMEntry,255,"EntryName_%u_%u",buttonnum,from);
+ while(!DBGetContactSettingTString(NULL, PLGNAME,szMEntry,&dbv)){
+ DBDeleteContactSetting(NULL, PLGNAME,szMEntry);
+ mir_snprintf(szMEntry,255,"EntryValue_%u_%u",buttonnum,from);
+ DBDeleteContactSetting(NULL, PLGNAME,szMEntry);
+ mir_snprintf(szMEntry,255,"EntryRel_%u_%u",buttonnum,from);
+ DBDeleteContactSetting(NULL, PLGNAME,szMEntry);
+ mir_snprintf(szMEntry,255,"EntryToQMenu_%u_%u",buttonnum,from);
+ DBDeleteContactSetting(NULL, PLGNAME,szMEntry);
+ mir_snprintf(szMEntry,255,"EntryIsServiceName_%u_%u",buttonnum,from);
+ DBDeleteContactSetting(NULL, PLGNAME,szMEntry);
+
+ mir_snprintf(szMEntry,255,"EntryName_%u_%u",buttonnum,++from);
+ }
+ DBFreeVariant(&dbv);
+ }
+
+BYTE getEntryByte(int buttonnum,int entrynum,BOOL mode)
+ {
+ char szMEntry[256]={'\0'};
+ if (mode==0)
+ mir_snprintf(szMEntry,255,"EntryToQMenu_%u_%u",buttonnum,entrynum);
+ else if (mode==1)
+ mir_snprintf(szMEntry,255,"EntryRel_%u_%u",buttonnum,entrynum);
+ else if (mode==2)
+ mir_snprintf(szMEntry,255,"EntryIsServiceName_%u_%u",buttonnum,entrynum);
+ else if (mode==3)
+ mir_snprintf(szMEntry,255,"RCEntryIsServiceName_%u",buttonnum);
+ return DBGetContactSettingByte(NULL, PLGNAME,szMEntry, 0);
+ }
+
+DWORD BalanceButtons(int buttonsWas,int buttonsNow)
+ {
+ if (ServiceExists(MS_BB_ADDBUTTON))
+ {
+ BBButton bb={0};
+ bb.cbSize=sizeof(BBButton);
+ bb.pszModuleName=PLGNAME;
+
+ while(buttonsWas>(buttonsNow))
+ {
+ bb.dwButtonID=--buttonsWas;
+ CallService(MS_BB_REMOVEBUTTON,0,(LPARAM)&bb);
+ }
+ while (buttonsWas<(buttonsNow))
+ {
+ if (ServiceExists(MS_BB_ADDBUTTON))
+ {
+ char iconname[20]={'\0'};
+ mir_snprintf(iconname,SIZEOF(iconname),"QMessagesButton_%u",buttonsWas);
+ bb.bbbFlags=BBBF_ISIMBUTTON|BBBF_ISCHATBUTTON|BBBF_ISLSIDEBUTTON;
+ bb.dwButtonID=buttonsWas++;
+ bb.dwDefPos=300+buttonsWas;
+ bb.hIcon=(HANDLE)AddIcon(hIcon, iconname, iconname);
+ CallService(MS_BB_ADDBUTTON, 0, (LPARAM)&bb);
+ }
+ }
+ }
+ return buttonsNow;
+ }
+
+
+void InitButtonsList()
+ {
+ int i,j,k=0;
+ QuickList=li.List_Create(0,1);
+ for(i=0;i<g_iButtonsCount;i++)
+ {
+ TCHAR* pszBName=NULL;
+ ListData* ld=NULL;
+ if(!(pszBName=getMenuEntry(i,0,3))){
+ g_iButtonsCount=i;
+ DBWriteContactSettingByte(NULL, PLGNAME,"ButtonsCount", (BYTE)g_iButtonsCount);
+ break;}
+
+ ld=mir_alloc(sizeof(ListData));
+ ButtonsList[i]=ld;
+ ld->sl=li.List_Create(0,1);
+ ld->ptszQValue=ld->ptszOPQValue=getMenuEntry(i,0,2);
+ ld->ptszButtonName=pszBName;
+ ld->dwPos=ld->dwOPPos=i;
+ ld->dwOPFlags=0;
+ ld->bIsServName=ld->bIsOpServName=getEntryByte(i,0,3);
+ for(j=0;;j++)
+ {
+ TCHAR* pszEntry=NULL;
+ ButtonData *bd=NULL;
+
+ if(!(pszEntry=getMenuEntry(i,j,0)))
+ break;
+
+ bd=mir_alloc(sizeof(ButtonData));
+ memset(bd,0,sizeof(ButtonData));
+
+ bd->dwPos=bd->dwOPPos=j;
+ bd->pszName=bd->pszOpName=pszEntry;
+ bd->pszValue=bd->pszOpValue=getMenuEntry(i,j,1);
+ bd->fEntryType=bd->fEntryOpType=getEntryByte(i,j,1);
+ bd->bInQMenu=bd->bOpInQMenu=getEntryByte(i,j,0);
+ bd->bIsServName=bd->bIsOpServName=getEntryByte(i,j,2);
+ if(bd->bInQMenu){
+ QuickData* qd=mir_alloc(sizeof(QuickData));
+ qd->dwPos=k++;
+ qd->ptszValue=bd->pszValue;
+ qd->ptszValueName=bd->pszName;
+ li.List_InsertPtr(QuickList,qd);
+ }
+ li.List_InsertPtr((SortedList*)ld->sl,bd);
+ }
+ }
+
+ }
+
+void DestructButtonsList()
+{
+ int i=0;
+// for ( i=0; i < g_iButtonsCount; i++ )
+while(ButtonsList[i])
+ {
+ li_ListDestruct(ButtonsList[i]->sl,listdestructor);
+ mir_free(ButtonsList[i]->ptszButtonName);
+ if(ButtonsList[i]->ptszOPQValue!=ButtonsList[i]->ptszQValue)
+ if (ButtonsList[i]->ptszOPQValue) mir_free(ButtonsList[i]->ptszOPQValue);
+ if (ButtonsList[i]->ptszQValue) mir_free(ButtonsList[i]->ptszQValue);
+ i++;
+ }
+if(QuickList)
+ {
+ li_ZeroQuickList(QuickList);
+ li.List_Destroy(QuickList);
+ }
+}
+
+TCHAR* getMenuEntry(int buttonnum,int entrynum,BYTE mode)
+ {
+ TCHAR* buffer=NULL;
+ char szMEntry[256]={'\0'};
+ DBVARIANT dbv = {0};
+
+ if(mode==0)
+ mir_snprintf(szMEntry,255,"EntryName_%u_%u",buttonnum,entrynum);
+ else if (mode==1)
+ mir_snprintf(szMEntry,255,"EntryValue_%u_%u",buttonnum,entrynum);
+ else if (mode==2)
+ mir_snprintf(szMEntry,255,"ButtonValue_%u",buttonnum);
+ else if (mode==3)
+ mir_snprintf(szMEntry,255,"ButtonName_%u",buttonnum);
+
+
+ DBGetContactSettingTString(NULL, PLGNAME,szMEntry, &dbv);
+
+ if(dbv.ptszVal&&_tcslen(dbv.ptszVal))
+ {
+ buffer=mir_tstrdup(dbv.ptszVal);
+ DBFreeVariant(&dbv);
+ }
+
+ return buffer;
+ }
+
+
+int AddIcon(HICON icon, char *name, char *description)
+ {
+ SKINICONDESC sid = {0};
+ sid.cbSize = sizeof(SKINICONDESC);
+ sid.pszSection = "Quick Messages";
+ sid.cx = sid.cy = 16;
+ sid.pszDescription = description;
+ sid.pszName = name;
+ sid.hDefaultIcon = icon;
+
+ return CallService(MS_SKIN2_ADDICON, 0, (LPARAM) &sid);
+ }
+
+int RegisterCustomButton(WPARAM wParam,LPARAM lParam)
+ {
+ if (ServiceExists(MS_BB_ADDBUTTON))
+ {
+ int i;
+ for(i=0;i<g_iButtonsCount;i++)
+ {
+ BBButton bbd={0};
+ ListData* ld=ButtonsList[i];
+ char iconname[20]={'\0'};
+ mir_snprintf(iconname,SIZEOF(iconname),"QMessagesButton_%u",i);
+
+ bbd.cbSize=sizeof(BBButton);
+ bbd.bbbFlags=BBBF_ISIMBUTTON|BBBF_ISCHATBUTTON|BBBF_ISLSIDEBUTTON;
+ bbd.dwButtonID=i;
+ bbd.dwDefPos=320+i;
+ bbd.hIcon=(HANDLE)AddIcon(hIcon, iconname, iconname);
+ bbd.pszModuleName=PLGNAME;
+ bbd.ptszTooltip=ld->ptszButtonName;
+ CallService(MS_BB_ADDBUTTON, 0, (LPARAM)&bbd);
+ }
+ return 0;
+ }
+ return 1;
+ }
+
+TCHAR* ParseString(HANDLE hContact,TCHAR* ptszQValIn,TCHAR* ptszText,TCHAR* ptszClip,int QVSize,int TextSize ,int ClipSize)
+ {
+ int i=0,iOffset=0,iCount=0;
+ TCHAR* tempPointer=NULL;
+ TCHAR* ptszQValue=_tcsdup(ptszQValIn);
+ TCHAR* tempQValue=ptszQValue;
+ TCHAR varstr=_T('%');
+
+ if(TextSize&&ptszText[TextSize-1]=='\0') TextSize--;
+ if(ClipSize&&ptszClip[ClipSize-1]=='\0') ClipSize--;
+
+ if(!_tcschr(ptszQValue,varstr))
+ return ptszQValue;
+
+ while(ptszQValue[i])
+ {
+ if(ptszQValue[i]=='%'){
+ switch(ptszQValue[i+1])
+ {
+ case 't':{
+ TCHAR* p=NULL;
+ p=realloc(tempQValue, (QVSize+TextSize+1)*sizeof(TCHAR));
+ if(p){
+ int test=0;
+ i=iOffset;
+ tempQValue=ptszQValue=p;
+
+ tempPointer=memmove(ptszQValue+i+TextSize,ptszQValue+i+2,(QVSize-i-1)*sizeof(TCHAR));
+
+ if(TextSize) memcpy(ptszQValue+i, ptszText, TextSize*sizeof(TCHAR));
+
+ QVSize+=(TextSize-2);
+
+ ptszQValue[QVSize]='\0';
+
+ if(!_tcschr(ptszQValue,varstr))
+ return ptszQValue;
+
+ ptszQValue=tempPointer;
+ iOffset+=TextSize-1;
+ i=-1;
+ }
+ }break;
+
+ case 'c':{
+ TCHAR* p=NULL;
+ p=realloc(tempQValue, (QVSize+ClipSize+1)*sizeof(TCHAR));
+ if(p){
+ i=iOffset;
+ tempQValue=ptszQValue=p;
+
+ tempPointer=memmove(ptszQValue+i+ClipSize,ptszQValue+i+2,(QVSize-i-1)*sizeof(TCHAR));
+ if(ClipSize) memcpy(ptszQValue+i, ptszClip, ClipSize*sizeof(TCHAR));
+ QVSize+=(ClipSize-2);
+
+ ptszQValue[QVSize]='\0';
+
+ if(!_tcschr(ptszQValue,varstr))
+ return ptszQValue;
+
+ ptszQValue=tempPointer;
+ iOffset+=ClipSize-1;
+ i=-1;
+ }
+ }break;
+
+ case 'P':{
+ TCHAR* p=NULL;
+ int NameLenght=0;
+ TCHAR* ptszName=NULL;
+#ifdef _UNICODE
+ ptszName=mir_a2u((char*)CallService(MS_PROTO_GETCONTACTBASEPROTO, (WPARAM)hContact, 0));
+#else
+ ptszName=(char*)CallService(MS_PROTO_GETCONTACTBASEPROTO, (WPARAM)hContact, 0);
+#endif
+ NameLenght=_tcslen(ptszName);
+
+ p=realloc(tempQValue, (QVSize+NameLenght+1)*sizeof(TCHAR));
+ if(p){
+ i=iOffset;
+ tempQValue=ptszQValue=p;
+
+ tempPointer=memmove(ptszQValue+i+NameLenght,ptszQValue+i+2,(QVSize-i-1)*sizeof(TCHAR));
+ if(NameLenght) memcpy(ptszQValue+i, ptszName, NameLenght*sizeof(TCHAR));
+ QVSize+=(NameLenght-2);
+
+ ptszQValue[QVSize]='\0';
+ if(ptszName) mir_free(ptszName);
+
+ if(!_tcschr(ptszQValue,varstr))
+ return ptszQValue;
+
+ ptszQValue=tempPointer;
+ iOffset+=NameLenght-1;
+ i=-1;
+ }
+ }break;
+
+ case 'n':{
+ TCHAR* p=NULL;
+ int NameLenght=0;
+ TCHAR* ptszName=NULL;
+
+ ptszName=(TCHAR *)CallService(MS_CLIST_GETCONTACTDISPLAYNAME, (WPARAM)hContact, GCDNF_TCHAR);
+ NameLenght=_tcslen(ptszName);
+ p=realloc(tempQValue, (QVSize+NameLenght+1)*sizeof(TCHAR));
+ if(p){
+ i=iOffset;
+ tempQValue=ptszQValue=p;
+
+ tempPointer=memmove(ptszQValue+i+NameLenght,ptszQValue+i+2,(QVSize-i-1)*sizeof(TCHAR));
+ if(NameLenght)memcpy(ptszQValue+i, ptszName, NameLenght*sizeof(TCHAR));
+ QVSize+=(NameLenght-2);
+
+ //if(ptszName) mir_free(ptszName);
+
+ ptszQValue[QVSize]='\0';
+
+ if(!_tcschr(ptszQValue,varstr))
+ return ptszQValue;
+
+ ptszQValue=tempPointer;
+ iOffset+=NameLenght-1;
+ i=-1;
+ }
+ }break;
+ case 'F':{
+ TCHAR* p=NULL;
+ int NameLenght=0;
+ TCHAR* ptszName=NULL;
+ CONTACTINFO ci;
+ ZeroMemory(&ci,sizeof(CONTACTINFO));
+ ci.cbSize = sizeof(CONTACTINFO);
+ ci.hContact = hContact;
+#ifdef UNICODE
+ ci.dwFlag =CNF_FIRSTNAME|CNF_UNICODE;
+#else
+ ci.dwFlag =CNF_FIRSTNAME;
+#endif
+ ci.szProto=(char*)CallService(MS_PROTO_GETCONTACTBASEPROTO, (WPARAM)hContact, 0);
+ if(!CallService(MS_CONTACT_GETCONTACTINFO,(WPARAM)0,(LPARAM)&ci)&&ci.pszVal){
+ NameLenght=_tcslen(ci.pszVal);
+ ptszName=ci.pszVal;
+ }
+ p=realloc(tempQValue, (QVSize+NameLenght+1)*sizeof(TCHAR));
+ if(p){
+ i=iOffset;
+ tempQValue=ptszQValue=p;
+
+ tempPointer=memmove(ptszQValue+i+NameLenght,ptszQValue+i+2,(QVSize-i-1)*sizeof(TCHAR));
+ if(NameLenght)memcpy(ptszQValue+i, ptszName, NameLenght*sizeof(TCHAR));
+ QVSize+=(NameLenght-2);
+
+ if(ptszName) mir_free(ptszName);
+
+ ptszQValue[QVSize]='\0';
+
+ if(!_tcschr(ptszQValue,varstr))
+ return ptszQValue;
+
+ ptszQValue=tempPointer;
+ iOffset+=NameLenght-1;
+ i=-1;
+ }
+ }break;
+ case 'L':{
+ TCHAR* p=NULL;
+ int NameLenght=0;
+ TCHAR* ptszName=NULL;
+ CONTACTINFO ci;
+ ZeroMemory(&ci,sizeof(CONTACTINFO));
+ ci.cbSize = sizeof(CONTACTINFO);
+ ci.hContact = hContact;
+ ci.szProto=(char*)CallService(MS_PROTO_GETCONTACTBASEPROTO, (WPARAM)hContact, 0);
+#ifdef UNICODE
+ ci.dwFlag =CNF_LASTNAME|CNF_UNICODE;
+#else
+ ci.dwFlag =CNF_LASTNAME;
+#endif
+ if(!CallService(MS_CONTACT_GETCONTACTINFO,(WPARAM)0,(LPARAM)&ci)&&ci.pszVal){
+ NameLenght=_tcslen(ci.pszVal);
+ ptszName=ci.pszVal;
+ }
+ p=realloc(tempQValue, (QVSize+NameLenght+1)*sizeof(TCHAR));
+ if(p){
+ i=iOffset;
+ tempQValue=ptszQValue=p;
+
+ tempPointer=memmove(ptszQValue+i+NameLenght,ptszQValue+i+2,(QVSize-i-1)*sizeof(TCHAR));
+ if(NameLenght)memcpy(ptszQValue+i, ptszName, NameLenght*sizeof(TCHAR));
+ QVSize+=(NameLenght-2);
+
+ ptszQValue[QVSize]='\0';
+
+ if(!_tcschr(ptszQValue,varstr))
+ return ptszQValue;
+
+ ptszQValue=tempPointer;
+ iOffset+=NameLenght-1;
+ i=-1;
+ }
+ }break;
+ }
+ }
+ iOffset++;
+ i++;
+ }
+ return ptszQValue;
+ } \ No newline at end of file
diff --git a/QuickMessages/Utils.h b/QuickMessages/Utils.h
new file mode 100644
index 0000000..c136459
--- /dev/null
+++ b/QuickMessages/Utils.h
@@ -0,0 +1,78 @@
+/*
+Quick Messages plugin for Miranda IM
+
+Copyright (C) 2008 Danil Mozhar
+
+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 3 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, see <http://www.gnu.org/licenses/>.
+*/
+#define QMF_NEW (1<<0)
+#define QMF_DELETNEEDED (1<<1)
+#define QMF_RENAMED (1<<2)
+
+#define QMF_EX_CHILD (1<<0)
+#define QMF_EX_SEPARATOR (1<<1)
+
+typedef struct _tagButtonData
+ {
+ DWORD dwPos;
+ DWORD dwOPPos;
+ BYTE fEntryType;
+ BYTE fEntryOpType;
+ BYTE bIsServName;
+ BYTE bIsOpServName;
+ BYTE bInQMenu;
+ BYTE bOpInQMenu;
+ DWORD dwOPFlags;
+ TCHAR *pszName;
+ TCHAR *pszValue;
+ TCHAR *pszOpValue;
+ TCHAR *pszOpName;
+ }ButtonData;
+
+typedef struct _tagListData
+ {
+ SortedList* sl;
+ DWORD dwPos;
+ DWORD dwOPPos;
+ TCHAR* ptszQValue;
+ TCHAR* ptszOPQValue;
+ TCHAR* ptszButtonName;
+ BYTE bIsServName;
+ BYTE bIsOpServName;
+ DWORD dwOPFlags;
+ }ListData;
+
+typedef struct _tagQuickData
+ {
+ DWORD dwPos;
+ BOOL bIsService;
+ BYTE fEntryType;
+ TCHAR* ptszValue;
+ TCHAR* ptszValueName;
+ }QuickData;
+
+void InitButtonsList();
+void DestructButtonsList();
+int sstSortButtons(const void * vmtbi1, const void * vmtbi2);
+int sstOpSortButtons(const void * vmtbi1, const void * vmtbi2);
+int sstQuickSortButtons(const void * vmtbi1, const void * vmtbi2);
+void li_ZeroQuickList(SortedList *pList);
+TCHAR* getMenuEntry(int entrynum,int buttonnum,BYTE mode) ;
+int RegisterCustomButton(WPARAM wParam,LPARAM lParam);
+void RemoveMenuEntryNode(SortedList *pList, int index);
+void DestroyButton(int listnum);
+void SaveModuleSettings(int buttonnum,ButtonData* bd);
+void CleanSettings(int buttonnum,int from);
+DWORD BalanceButtons(int buttonsWas,int buttonsNow);
+TCHAR* ParseString(HANDLE hContact,TCHAR* ptszQValueIn,TCHAR* ptszText,TCHAR* ptszClip,int QVSize,int TextSize ,int ClipSize); \ No newline at end of file
diff --git a/QuickMessages/icons/qicon.ico b/QuickMessages/icons/qicon.ico
new file mode 100644
index 0000000..a46ae2b
--- /dev/null
+++ b/QuickMessages/icons/qicon.ico
Binary files differ
diff --git a/QuickMessages/main.c b/QuickMessages/main.c
new file mode 100644
index 0000000..001aae9
--- /dev/null
+++ b/QuickMessages/main.c
@@ -0,0 +1,409 @@
+/*
+Quick Messages plugin for Miranda IM
+
+Copyright (C) 2008 Danil Mozhar
+
+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 3 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, see <http://www.gnu.org/licenses/>.
+*/
+
+#include "quickmessages.h"
+
+HINSTANCE hinstance;
+
+WNDPROC mainProc;
+
+HANDLE hEventCBButtonPressed, hEventCBInit,hEventInputMenu, hEventDbOptionsInit, hEventDbPluginsLoaded,
+hEventDbPreShutdown, hIcon ;
+
+int g_iButtonsCount=0;
+int g_bShutDown=0;
+int g_bStartup=0;
+BOOL g_bRClickAuto=0;
+BOOL g_bLClickAuto=0;
+BOOL g_bQuickMenu=0;
+
+struct MM_INTERFACE mmi;
+struct LIST_INTERFACE li;
+
+PLUGINLINK *pluginLink;
+
+PLUGININFOEX pluginInfo = {
+ sizeof(PLUGININFOEX),
+ MODULENAME,
+ PLUGIN_MAKE_VERSION(0,0,4,2),
+ "Plugin for quick insert pre-defined messages in message input area.",
+ "MaD_CLuSTeR",
+ "daniok@yandex.ru",
+ "© 2008 Danil Mozhar",
+ "http://miranda.radicaled.ru/index.php?plugin=3",
+ UNICODE_AWARE,
+ 0,
+#ifdef _UNICODE
+ // {37ED754B-6CF9-40ed-9EB6-0FEF8E822475}
+ { 0x37ed754b, 0x6cf9, 0x40ed, { 0x9e, 0xb6, 0xf, 0xef, 0x8e, 0x82, 0x24, 0x75 } }
+#else
+ // {A15C6605-75F3-4be2-9193-6D3DDD0A13B7}
+ { 0xa15c6605, 0x75f3, 0x4be2, { 0x91, 0x93, 0x6d, 0x3d, 0xdd, 0xa, 0x13, 0xb7 } }
+#endif
+ };
+
+
+int PreShutdown(WPARAM wparam,LPARAM lparam)
+ {
+ g_bShutDown=1;
+ DestructButtonsList();
+
+ if(hEventCBButtonPressed) UnhookEvent(hEventCBButtonPressed);
+ if(hEventCBInit) UnhookEvent(hEventCBInit);
+ if(hEventInputMenu) UnhookEvent(hEventInputMenu);
+ UnhookEvent(hEventDbPluginsLoaded);
+ UnhookEvent(hEventDbOptionsInit);
+ UnhookEvent(hEventDbPreShutdown);
+
+ return 0;
+ }
+static int InputMenuPopup(WPARAM wParam,LPARAM lParam)
+ {
+ HMENU hSubMenu=NULL;
+ int i=0;
+ MessageWindowPopupData * mwpd = (MessageWindowPopupData *)lParam;
+ if(mwpd->uFlags==MSG_WINDOWPOPUP_LOG||!g_bQuickMenu||!QuickList->realCount) return 0;
+
+ if(mwpd->uType==MSG_WINDOWPOPUP_SHOWING)
+ {
+ hSubMenu = CreatePopupMenu();
+
+ InsertMenu((HMENU)mwpd->hMenu,6,MF_STRING|MF_POPUP|MF_BYPOSITION,(UINT_PTR)hSubMenu,TranslateT("Quick Messages"));
+ InsertMenu((HMENU)mwpd->hMenu,7,MF_SEPARATOR|MF_BYPOSITION,0,0);
+ qsort(QuickList->items,QuickList->realCount,sizeof(QuickData *),sstQuickSortButtons);
+ for(i=0;i<QuickList->realCount;i++)
+ {
+ QuickData* qd= (QuickData *)QuickList->items[i];
+ if(qd->fEntryType&QMF_EX_SEPARATOR)
+ AppendMenu(hSubMenu,MF_SEPARATOR,0,NULL);
+ else
+ AppendMenu(hSubMenu,MF_STRING,qd->dwPos+254,qd->ptszValueName);
+ }
+ }
+ else if(mwpd->uType==MSG_WINDOWPOPUP_SELECTED&&mwpd->selection>=254)
+ {
+ for(i=0;i<QuickList->realCount;i++)
+ {
+ QuickData* qd= (QuickData *)QuickList->items[i];
+ if((qd->dwPos+254)==mwpd->selection)
+ {
+ CHARRANGE cr;
+ UINT textlenght=0;
+ TCHAR* pszText=NULL;
+ TCHAR* ptszQValue=NULL;
+ TCHAR* pszCBText=NULL;
+ BOOL bIsService=0;
+
+ if(IsClipboardFormatAvailable(CF_TEXT)){
+ if (OpenClipboard(mwpd->hwnd)){
+ HANDLE hData=NULL;
+ TCHAR* chBuffer=NULL;
+ int textLength=0;
+#ifdef _UNICODE
+ hData= GetClipboardData(CF_UNICODETEXT);
+#else
+ hData = GetClipboardData(CF_TEXT);
+#endif
+ chBuffer= (TCHAR*)GlobalLock(hData);
+ textLength=_tcslen(chBuffer);
+ pszCBText=mir_tstrdup(chBuffer);
+ GlobalUnlock(hData);
+ CloseClipboard();
+ }
+ }
+
+ SendMessage(mwpd->hwnd, EM_EXGETSEL, 0, (LPARAM)&cr);
+ textlenght=cr.cpMax-cr.cpMin;
+
+ if(textlenght)
+ {
+ pszText=mir_alloc((textlenght+10)*sizeof(TCHAR));
+ ZeroMemory(pszText,(textlenght+10)*sizeof(TCHAR));
+ SendMessage(mwpd->hwnd,EM_GETSELTEXT, 0, (LPARAM)pszText);
+ }
+ if(qd->ptszValue){
+ ptszQValue=ParseString(mwpd->hContact,qd->ptszValue,pszText?pszText:_T(""),pszCBText?pszCBText:_T(""),_tcslen(qd->ptszValue),textlenght,pszCBText?_tcslen(pszCBText):0);
+ if((bIsService=qd->bIsService)&&ptszQValue)
+#ifdef _UNICODE
+ CallService(mir_u2a(ptszQValue),(WPARAM)mwpd->hContact,0);
+#else
+ CallService(ptszQValue,(WPARAM)mwpd->hContact,0);
+#endif
+ }
+
+ if(ptszQValue)
+ SendMessage(mwpd->hwnd, EM_REPLACESEL, TRUE, (LPARAM)ptszQValue);
+
+ if(pszText) mir_free(pszText);
+ if(ptszQValue) free(ptszQValue);
+ if(pszCBText) mir_free(pszCBText);
+ break;
+ }
+ }
+ return 1;
+ }
+ return 0;
+ }
+
+static int CustomButtonPressed(WPARAM wParam,LPARAM lParam)
+ {
+ CustomButtonClickData *cbcd=(CustomButtonClickData *)lParam;
+
+ CHARRANGE cr;
+ HWND hEdit=NULL;
+ int i=0;
+ BOOL bCTRL=0;
+ BOOL bIsService=0;
+ TCHAR* pszText=NULL;
+ TCHAR* pszCBText=NULL;
+ TCHAR* pszFormatedText=NULL;
+ TCHAR* ptszQValue=NULL;
+ int cblenght=0,qvlenght=0;
+ int count=0,mode=0;
+ UINT textlenght=0;
+ BBButton bbd={0};
+ SortedList* sl=NULL;
+ int state=0;
+
+ if(strcmp(cbcd->pszModule,PLGNAME)) return 0;
+
+ if(!ButtonsList[cbcd->dwButtonId]) return 1;
+
+ sl=ButtonsList[cbcd->dwButtonId]->sl;
+
+ if(!sl) return 1;
+
+ if(IsClipboardFormatAvailable(CF_TEXT)){
+ if (OpenClipboard(cbcd->hwndFrom)){
+ HANDLE hData=NULL;
+ TCHAR* chBuffer=NULL;
+ int textLength=0;
+#ifdef _UNICODE
+ hData= GetClipboardData(CF_UNICODETEXT);
+#else
+ hData = GetClipboardData(CF_TEXT);
+#endif
+ chBuffer= (TCHAR*)GlobalLock(hData);
+ textLength=_tcslen(chBuffer);
+ pszCBText=mir_tstrdup(chBuffer);
+ GlobalUnlock(hData);
+ CloseClipboard();
+ }
+ }
+
+
+
+
+ qsort(sl->items,sl->realCount,sizeof(ButtonData *),sstSortButtons);
+
+ hEdit=GetDlgItem(cbcd->hwndFrom,IDC_MESSAGE);
+ if(!hEdit) hEdit=GetDlgItem(cbcd->hwndFrom,IDC_CHATMESSAGE);
+
+ cr.cpMin = cr.cpMax = 0;
+ SendMessage(hEdit, EM_EXGETSEL, 0, (LPARAM)&cr);
+
+ textlenght=cr.cpMax-cr.cpMin;
+ if(textlenght)
+ {
+ pszText=mir_alloc((textlenght+10)*sizeof(TCHAR));
+ ZeroMemory(pszText,(textlenght+10)*sizeof(TCHAR));
+ SendMessage(hEdit,EM_GETSELTEXT, 0, (LPARAM)pszText);
+ }
+
+ if(cbcd->flags&BBCF_RIGHTBUTTON)
+ state=1;
+ else if(sl->realCount==1)
+ state=2;
+ else
+ state=3;
+
+
+ switch(state)
+ {
+ case 1:
+ if(ButtonsList[cbcd->dwButtonId]->ptszQValue)
+ ptszQValue=ParseString(cbcd->hContact,ButtonsList[cbcd->dwButtonId]->ptszQValue,pszText?pszText:_T(""),pszCBText?pszCBText:_T(""),_tcslen(ButtonsList[cbcd->dwButtonId]->ptszQValue),textlenght,pszCBText?_tcslen(pszCBText):0);
+ if((bIsService=ButtonsList[cbcd->dwButtonId]->bIsServName)&&ptszQValue)
+#ifdef _UNICODE
+ CallService(mir_u2a(ptszQValue),(WPARAM)cbcd->hContact,0);
+#else
+ CallService(ptszQValue,(WPARAM)cbcd->hContact,0);
+#endif
+ break;
+ case 2:
+ {
+ ButtonData * bd=NULL;
+ bd=(ButtonData *)sl->items[0];
+ if(bd&&bd->pszValue){
+ ptszQValue=ParseString(cbcd->hContact,bd->pszValue,pszText?pszText:_T(""),pszCBText?pszCBText:_T(""),_tcslen(bd->pszValue),textlenght,pszCBText?_tcslen(pszCBText):0);
+ if((bIsService=bd->bIsServName)&&ptszQValue)
+#ifdef _UNICODE
+ CallService(mir_u2a(ptszQValue),(WPARAM)cbcd->hContact,0);
+#else
+ CallService(ptszQValue,(WPARAM)cbcd->hContact,0);
+#endif
+ }
+ }
+ break;
+ case 3:{
+ int res=0;
+ int menunum;
+ ButtonData * bd=NULL;
+ HMENU hMenu=NULL,hSubMenu=NULL;
+ BOOL bSetPopUpMark=FALSE;
+
+ if(g_iButtonsCount){
+ hMenu = CreatePopupMenu();
+ }
+ else break;
+ for(menunum=0;menunum<sl->realCount;menunum++)
+ {
+ bd=(ButtonData *)sl->items[menunum];
+ if(bd->dwOPFlags&QMF_NEW)
+ continue;
+
+ bSetPopUpMark=FALSE;
+ if(bd->pszValue==0&&bd->fEntryType==0)
+ {
+ hSubMenu = CreatePopupMenu();
+ bSetPopUpMark=TRUE;
+ }
+
+ if(bd->pszValue&&bd->fEntryType==0)
+ hSubMenu=NULL;
+
+ if(bd->fEntryType&QMF_EX_SEPARATOR)
+ AppendMenu((HMENU)((hSubMenu&&!bSetPopUpMark)?hSubMenu:hMenu),MF_SEPARATOR,0,NULL);
+ else
+ AppendMenu((HMENU)((hSubMenu&&!bSetPopUpMark)?hSubMenu:hMenu),
+ MF_STRING|(bSetPopUpMark?MF_POPUP:0),
+ (bSetPopUpMark?(UINT_PTR)hSubMenu:(menunum+1)), bd->pszName);
+ }
+
+ res = TrackPopupMenu(hMenu, TPM_RETURNCMD, cbcd->pt.x, cbcd->pt.y, 0, cbcd->hwndFrom, NULL);
+ if(res==0) break;
+
+ bd= (ButtonData *)sl->items[res-1];
+ bCTRL=(GetKeyState(VK_CONTROL)&0x8000)?1:0;
+ if(bd->pszValue){
+ ptszQValue=ParseString(cbcd->hContact,bd->pszValue,pszText?pszText:_T(""),pszCBText?pszCBText:_T(""),_tcslen(bd->pszValue),textlenght,pszCBText?_tcslen(pszCBText):0);
+ if((bIsService=bd->bIsServName)&&ptszQValue)
+#ifdef _UNICODE
+ CallService(mir_u2a(ptszQValue),(WPARAM)cbcd->hContact,0);
+#else
+ CallService(ptszQValue,(WPARAM)cbcd->hContact,0);
+#endif
+ }
+ }break;
+ }
+
+
+ if(ptszQValue){
+ if(!bIsService){
+ SendMessage(hEdit, EM_REPLACESEL, TRUE, (LPARAM)ptszQValue);
+
+ if((g_bLClickAuto&&state!=1)||(g_bRClickAuto&&state==1)||cbcd->flags&BBCF_CONTROLPRESSED||bCTRL)
+ SendMessage(cbcd->hwndFrom, WM_COMMAND,IDOK,0);
+ }
+ free(ptszQValue);
+ }
+
+
+ if(pszText) mir_free(pszText);
+ if(pszCBText) mir_free(pszCBText);
+ return 1;
+ }
+
+
+static int PluginInit(WPARAM wparam,LPARAM lparam)
+ {
+ g_bStartup=1;
+ hEventDbOptionsInit=HookEvent(ME_OPT_INITIALISE,OptionsInit);
+ hEventCBButtonPressed=HookEvent(ME_MSG_BUTTONPRESSED,CustomButtonPressed);
+ hEventCBInit=HookEvent(ME_MSG_TOOLBARLOADED,RegisterCustomButton);
+
+ hEventInputMenu=HookEvent(ME_MSG_WINDOWPOPUP,InputMenuPopup);
+
+
+ g_bRClickAuto=DBGetContactSettingByte(NULL,PLGNAME,"RClickAuto",0);
+ g_bLClickAuto=DBGetContactSettingByte(NULL,PLGNAME,"LClickAuto",0);
+ g_iButtonsCount=DBGetContactSettingByte(NULL, PLGNAME,"ButtonsCount", 0);
+ g_bQuickMenu=DBGetContactSettingByte(NULL, PLGNAME,"QuickMenu", 1);
+
+ if(ServiceExists(MS_UPDATE_REGISTER)) {
+ char buffer[1024];
+ Update update = {0};
+ update.cbSize = sizeof(Update);
+ update.szComponentName = pluginInfo.shortName;
+ update.pbVersion = (BYTE *) CreateVersionString(pluginInfo.version, buffer);
+ update.cpbVersion = strlen((char *) update.pbVersion);
+ //update.szUpdateURL = UPDATER_AUTOREGISTER;
+ update.szBetaVersionURL = QMESSAGES_VERSION_URL;
+ update.szBetaUpdateURL = QMESSAGES_UPDATE_URL;
+ update.pbBetaVersionPrefix = (BYTE *) QMESSAGES_VERSION_PREFIX;
+ update.cpbBetaVersionPrefix = strlen(QMESSAGES_VERSION_PREFIX);
+ update.szBetaChangelogURL=QMESSAGES_CHAGELOG_URL;
+ CallService(MS_UPDATE_REGISTER, 0, (LPARAM) &update);
+ }
+
+ hIcon = LoadIcon(hinstance, MAKEINTRESOURCE(IDI_QICON));
+
+ InitButtonsList();
+
+ g_bStartup=0;
+ return 0;
+ }
+
+
+// {651EAD6E-00C6-47e4-94A3-C63789ED89F9}
+static const MUUID interfaces[] = {{ 0x651ead6e, 0xc6, 0x47e4, { 0x94, 0xa3, 0xc6, 0x37, 0x89, 0xed, 0x89, 0xf9 } }, MIID_LAST};
+const __declspec(dllexport) MUUID* MirandaPluginInterfaces(void){
+ return interfaces;}
+
+__declspec(dllexport) PLUGININFOEX* MirandaPluginInfoEx(DWORD mirandaVersion)
+ {
+
+ if (mirandaVersion < PLUGIN_MAKE_VERSION(0, 7, 0, 0))
+ return NULL;
+
+ return &pluginInfo;
+ }
+
+__declspec(dllexport)int Unload(void)
+ {
+ return 0;
+ }
+
+BOOL WINAPI DllMain(HINSTANCE hinst,DWORD fdwReason,LPVOID lpvReserved)
+ {
+ hinstance=hinst;
+ return 1;
+ }
+
+int __declspec(dllexport)Load(PLUGINLINK *link)
+ {
+
+ pluginLink=link;
+ mir_getMMI(&mmi);
+ mir_getLI(&li);
+
+ hEventDbPluginsLoaded=HookEvent(ME_SYSTEM_MODULESLOADED,PluginInit);
+ hEventDbPreShutdown=HookEvent(ME_SYSTEM_PRESHUTDOWN,PreShutdown);
+ return 0;
+ }
diff --git a/QuickMessages/options.c b/QuickMessages/options.c
new file mode 100644
index 0000000..840f629
--- /dev/null
+++ b/QuickMessages/options.c
@@ -0,0 +1,1169 @@
+/*
+Quick Messages plugin for Miranda IM
+
+Copyright (C) 2008 Danil Mozhar
+
+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 3 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, see <http://www.gnu.org/licenses/>.
+*/
+
+#include "quickmessages.h"
+
+static BOOL bOptionsInit;
+
+int g_iOPButtonsCount;
+BOOL bNeedRestart=FALSE;
+BOOL drag=FALSE,bOptionsInit=TRUE;
+HANDLE hDragItem=NULL;
+HANDLE hButtonsList=NULL;
+HANDLE hMenuTree=NULL;
+HWND hwndEdit=NULL;
+WNDPROC oldEditProc=0, oldBNameProc=0, oldMNameProc=0;
+
+HWND g_opHdlg=NULL,g_varhelpDlg=NULL;
+
+BOOL CALLBACK HelpDlgProc(HWND hdlg,UINT msg,WPARAM wparam,LPARAM lparam)
+ {
+ switch(msg){
+ case WM_INITDIALOG:{
+ LOGFONT logFont;
+ HFONT hFont;
+ RECT rc;
+ g_varhelpDlg=hdlg;
+ TranslateDialogDefault(hdlg);
+ hFont = (HFONT)SendMessage(GetDlgItem(hdlg, IDC_STATICTITLE), WM_GETFONT, 0, 0);
+ GetObject(hFont, sizeof logFont, &logFont);
+ logFont.lfWeight = FW_BOLD;
+ hFont = CreateFontIndirect(&logFont);
+ SendMessage(GetDlgItem(hdlg, IDC_STATICTITLE), WM_SETFONT, (WPARAM)hFont, 0);
+ SendMessage(GetDlgItem(hdlg, IDC_STATICTITLE2), WM_SETFONT, (WPARAM)hFont, 0);
+ SendMessage(GetDlgItem(hdlg, IDC_VARTEXT), WM_SETFONT, (WPARAM)hFont, 0);
+ SendMessage(GetDlgItem(hdlg, IDC_VARCLIP), WM_SETFONT, (WPARAM)hFont, 0);
+ SendMessage(GetDlgItem(hdlg, IDC_VARPUNAME), WM_SETFONT, (WPARAM)hFont, 0);
+ SendMessage(GetDlgItem(hdlg, IDC_VARPLNAME), WM_SETFONT, (WPARAM)hFont, 0);
+ SendMessage(GetDlgItem(hdlg, IDC_VARCNAME), WM_SETFONT, (WPARAM)hFont, 0);
+ SendMessage(GetDlgItem(hdlg, IDC_VARCFNAME), WM_SETFONT, (WPARAM)hFont, 0);
+ SendMessage(GetDlgItem(hdlg, IDC_VARCLNAME), WM_SETFONT, (WPARAM)hFont, 0);
+
+ GetWindowRect(g_opHdlg,&rc);
+ SetWindowPos(hdlg,0,rc.left,rc.top,0,0,SWP_SHOWWINDOW|SWP_NOSIZE);
+ }break;
+
+ case WM_LBUTTONDOWN:{
+ PostMessage( hdlg,WM_NCLBUTTONDOWN, HTCAPTION,lparam);
+ }break;
+
+ case WM_CLOSE:
+ case WM_DESTROY:
+ DestroyWindow(g_varhelpDlg);
+ g_varhelpDlg=NULL;
+ break;
+ default:
+ return FALSE;
+ }
+ return TRUE;
+ }
+
+static LRESULT CALLBACK LabelEditSubclassProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
+ {
+ switch (msg) {
+ case WM_GETDLGCODE:
+ return DLGC_WANTALLKEYS;
+ }
+ return CallWindowProc(oldEditProc, hwnd, msg, wParam, lParam);
+ }
+
+static LRESULT CALLBACK EditSubclassProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
+ {
+ HWND hParent=GetParent(hwnd);
+ switch (msg) {
+ case WM_GETDLGCODE:
+ return DLGC_WANTALLKEYS|DLGC_HASSETSEL;
+ case WM_SETFOCUS:
+ PostMessage(hwnd,EM_SETSEL,0,-1);
+ break;
+ case WM_KEYDOWN:
+ {
+ if(wParam==VK_RETURN)
+ if(hwnd==GetDlgItem(hParent,IDC_BUTTONNAME))
+ SendMessage(hParent,WM_COMMAND,IDC_BLISTADD,0);
+ else
+ SendMessage(hParent,WM_COMMAND,IDC_MTREEADD,0);
+ }break;
+ }
+ if(hwnd==GetDlgItem(hParent,IDC_BUTTONNAME))
+ return CallWindowProc(oldBNameProc, hwnd, msg, wParam, lParam);
+ else
+ return CallWindowProc(oldMNameProc, hwnd, msg, wParam, lParam);
+ }
+
+void SetMenuEntryProperties(HWND hdlg)
+ {
+ TVITEM tvi;
+ HTREEITEM hItem=NULL;
+ ButtonData* bd=NULL;
+ int pos=0;
+
+ if(TreeView_GetCount(hButtonsList)&&(tvi.hItem=TreeView_GetSelection(hButtonsList)))
+ {
+ tvi.mask=TVIF_HANDLE|TVIF_PARAM;
+ TreeView_GetItem(hButtonsList,&tvi);
+
+ if (tvi.lParam)
+ {
+ ListData* ld = ( ListData* )tvi.lParam;
+ TCHAR szValue[256];
+ GetWindowText(GetDlgItem(hdlg,IDC_RCLICKVALUE), szValue, sizeof(szValue));
+ if(_tcslen(szValue))
+ {
+ if(ld->ptszOPQValue&&(ld->ptszOPQValue!=ld->ptszQValue))
+ mir_free(ld->ptszOPQValue);
+ ld->ptszOPQValue=mir_tstrdup(szValue);
+ }
+ ld->bIsOpServName=IsDlgButtonChecked(hdlg,IDC_ISSERVNAME2);
+ }
+ }
+
+ tvi.hItem=NULL;
+ if(TreeView_GetCount(hMenuTree)&&(tvi.hItem=TreeView_GetSelection(hMenuTree)))
+ {
+ tvi.mask=TVIF_HANDLE|TVIF_PARAM;
+ TreeView_GetItem(hMenuTree,&tvi);
+
+ if (tvi.lParam)
+ {
+ ButtonData* bd = ( ButtonData* )tvi.lParam;
+ TCHAR szValue[256];
+ GetWindowText(GetDlgItem(hdlg,IDC_MENUVALUE), szValue, sizeof(szValue));
+ if(_tcslen(szValue))
+ {
+ if(_tcslen(bd->pszOpValue)&&(bd->pszOpValue!=bd->pszValue))
+ mir_free(bd->pszOpValue);
+ bd->pszOpValue=mir_tstrdup(szValue);
+ }
+ bd->bOpInQMenu=IsDlgButtonChecked(hdlg,IDC_INQMENU);
+ bd->bIsOpServName=IsDlgButtonChecked(hdlg,IDC_ISSERVNAME);
+ }
+
+ tvi.mask = TVIF_HANDLE | TVIF_PARAM;
+ tvi.hItem = TreeView_GetRoot(hMenuTree);
+ }
+ while (tvi.hItem) {
+ TreeView_GetItem(hMenuTree, &tvi);
+ bd= (ButtonData*)tvi.lParam;
+
+ bd->dwOPPos=pos++;
+
+ if(hItem=TreeView_GetChild(hMenuTree, tvi.hItem)){
+
+ bd->fEntryOpType&=~QMF_EX_CHILD;
+
+ if(bd->pszOpValue){
+ mir_free(bd->pszOpValue);
+ bd->pszOpValue=NULL;
+ }
+ tvi.hItem=hItem;
+ continue;
+ }
+ else
+ {
+ if(bd->fEntryOpType&QMF_EX_SEPARATOR){
+ if(bd->pszOpValue){
+ mir_free(bd->pszOpValue);
+ bd->pszOpValue=NULL;
+ }}
+ else
+ {
+ if(!bd->pszOpValue)
+ bd->pszOpValue=mir_tstrdup(_T("Enter Value"));
+ }
+ if(TreeView_GetParent(hMenuTree, tvi.hItem))
+ bd->fEntryOpType|=QMF_EX_CHILD;
+ else bd->fEntryOpType&=~QMF_EX_CHILD;
+
+ if(!(hItem=TreeView_GetNextSibling(hMenuTree, tvi.hItem)))
+ tvi.hItem=TreeView_GetNextSibling(hMenuTree, TreeView_GetParent(hMenuTree,tvi.hItem));
+ else
+ tvi.hItem=hItem;
+
+ }
+ }
+ }
+
+void SaveMenuTree(HWND hdlg)
+ {
+ int iBl=0,i=0,k=0;
+ int iBtd=g_iButtonsCount;
+ BOOL bDeleted=FALSE;
+ char szMEntry[256]={'\0'};
+ TCHAR strbuf[256];
+ HTREEITEM hti=NULL;
+ TVITEM tvi;
+
+ g_iButtonsCount=TreeView_GetCount(hButtonsList);
+
+ tvi.pszText = strbuf;
+ tvi.cchTextMax = 256;
+ tvi.mask=TVIF_HANDLE|TVIF_TEXT ;
+ tvi.hItem=TreeView_GetRoot(hButtonsList);
+
+ TreeView_GetItem(hButtonsList,&tvi);
+
+ li_ZeroQuickList(QuickList);
+
+ BalanceButtons(iBtd,g_iButtonsCount);
+
+ while(ButtonsList[iBl])
+ {
+ SortedList * sl=NULL;
+ ListData* ld=ButtonsList[iBl];
+
+ if(!ld->sl) break;
+
+ sl=ld->sl;
+
+ if(ld->dwOPFlags&QMF_DELETNEEDED)
+ {
+ bDeleted=(ld->dwOPFlags&QMF_NEW)?FALSE:TRUE;
+ if(bDeleted) CleanSettings(ld->dwPos,-1);
+ DestroyButton(iBl);
+ continue;
+ }
+ if(ld->ptszQValue!=ld->ptszOPQValue)
+ {
+ if(ld->ptszQValue)
+ mir_free(ld->ptszQValue);
+
+ ld->ptszQValue=(ld->ptszOPQValue)?ld->ptszOPQValue:NULL;
+ }
+
+ if(ld->ptszButtonName)
+ mir_free(ld->ptszButtonName);
+ if(iBl>0)
+ if(hti=TreeView_GetNextSibling(hButtonsList,hti?hti:tvi.hItem))
+ {
+ tvi.hItem=hti;
+ TreeView_GetItem(hButtonsList,&tvi);
+ }
+
+ ld->ptszButtonName=mir_tstrdup(tvi.pszText);
+
+ if(ld->ptszQValue)
+ {
+ mir_snprintf(szMEntry,255,"ButtonValue_%u",iBl);
+ DBWriteContactSettingTString(NULL, PLGNAME,szMEntry,ld->ptszQValue);
+ }
+
+
+ if (ServiceExists(MS_BB_MODIFYBUTTON)&&((ld->dwOPFlags&QMF_NEW)||(ld->dwOPFlags&QMF_RENAMED)||bDeleted))
+ {
+ BBButton bb={0};
+ bb.cbSize=sizeof(BBButton);
+ bb.pszModuleName=PLGNAME;
+ bb.dwButtonID=iBl;
+ bb.ptszTooltip=ld->ptszButtonName;
+ CallService(MS_BB_MODIFYBUTTON,0,(LPARAM)&bb);
+ }
+
+
+ mir_snprintf(szMEntry,255,"ButtonName_%u",iBl);
+ DBWriteContactSettingTString(NULL, PLGNAME,szMEntry,ld->ptszButtonName);
+
+ ld->dwOPFlags=0;
+ ld->dwPos=iBl;
+ ld->bIsServName=ld->bIsOpServName;
+ mir_snprintf(szMEntry,255,"RCEntryIsServiceName_%u",iBl);
+ DBWriteContactSettingByte(NULL, PLGNAME,szMEntry,ld->bIsServName);
+
+ bDeleted=FALSE;
+
+ qsort(sl->items,sl->realCount,sizeof(ButtonData *),sstSortButtons);
+
+ for ( i=0; i < sl->realCount; i++ ) {
+ ButtonData * bd= (ButtonData *)sl->items[i];
+
+ if(bd->dwOPFlags&QMF_DELETNEEDED){
+ RemoveMenuEntryNode(sl, i--);
+ continue;
+ }
+ bd->bIsServName=bd->bIsOpServName;
+ bd->bInQMenu=bd->bOpInQMenu;
+ bd->dwPos=bd->dwOPPos;
+ bd->fEntryType=bd->fEntryOpType;
+ bd->dwOPFlags=0;
+
+ if(bd->pszName!=bd->pszOpName)
+ {
+ if(bd->pszName)
+ mir_free(bd->pszName);
+ bd->pszName=bd->pszOpName?bd->pszOpName:NULL;
+ }
+
+ if(bd->pszValue!=bd->pszOpValue)
+ {
+ if(bd->pszValue)
+ mir_free(bd->pszValue);
+ bd->pszValue=bd->pszOpValue?bd->pszOpValue:NULL;
+ }
+ if(bd->bInQMenu)
+ {
+ QuickData* qd=mir_alloc(sizeof(QuickData));
+ qd->dwPos=k++;
+ qd->fEntryType=bd->fEntryType;
+ qd->bIsService=bd->bIsServName;
+ qd->ptszValue=bd->pszValue;
+ qd->ptszValueName=bd->pszName;
+ li.List_InsertPtr(QuickList,qd);
+ }
+
+ SaveModuleSettings(iBl,bd);
+ }
+ CleanSettings(iBl,sl->realCount);
+
+ iBl++;
+ }
+
+ DBWriteContactSettingByte(NULL, PLGNAME,"ButtonsCount", (BYTE)g_iButtonsCount);
+ }
+
+void RestoreModuleData(HWND hdlg)
+ {
+ int iBl=0,i=0;
+ char szMEntry[256]={'\0'};
+ while(ButtonsList[iBl])
+ {
+ SortedList * sl=NULL;
+ ListData* ld=ButtonsList[iBl];
+
+ if(!(sl=ld->sl)) break;
+
+ if(ld->dwOPFlags&QMF_NEW)
+ {
+ DestroyButton(iBl);
+ continue;
+ }
+
+ if(ld->ptszQValue!=ld->ptszOPQValue)
+ {
+ if(ld->ptszOPQValue)
+ mir_free(ld->ptszOPQValue);
+
+ ld->ptszOPQValue=(ld->ptszQValue)?ld->ptszQValue:NULL;
+ }
+
+ ld->bIsOpServName=ld->bIsServName;
+ ld->dwOPFlags=0;
+
+ qsort(sl->items,sl->realCount,sizeof(ButtonData *),sstSortButtons);
+
+ for ( i=0; i < sl->realCount; i++ ) {
+ ButtonData * bd= (ButtonData *)sl->items[i];
+
+ if(bd->dwOPFlags&QMF_NEW){
+ RemoveMenuEntryNode(sl, i--);
+ continue;
+ }
+ bd->bIsOpServName=bd->bIsServName;
+ bd->bOpInQMenu=bd->bInQMenu;
+ bd->dwOPPos=bd->dwPos;
+ bd->fEntryOpType=bd->fEntryType;
+ bd->dwOPFlags=0;
+
+ if(bd->pszName!=bd->pszOpName)
+ {
+ if(bd->pszOpName)
+ mir_free(bd->pszOpName);
+ bd->pszOpName=bd->pszName?bd->pszName:NULL;
+ }
+
+ if(bd->pszValue!=bd->pszOpValue)
+ {
+ if(bd->pszOpValue)
+ mir_free(bd->pszOpValue);
+ bd->pszOpValue=bd->pszValue?bd->pszValue:NULL;
+ }
+ }
+ iBl++;
+ }
+ }
+
+static int BuildMenuTree(HWND hToolBarTree,SortedList * sl)
+ {
+ TVINSERTSTRUCT tvis;
+ int i;
+ HTREEITEM hParent=NULL;
+ tvis.hParent = NULL;
+ tvis.hInsertAfter = TVI_LAST;
+ tvis.item.mask = TVIF_PARAM | TVIF_TEXT;
+
+ TreeView_DeleteAllItems( hToolBarTree );
+ if (!sl) return 1;
+
+ qsort(sl->items,sl->realCount,sizeof(ButtonData *),sstOpSortButtons);
+
+ for ( i=0; i < sl->realCount; i++ ) {
+ ButtonData * bd= (ButtonData *)sl->items[i];
+
+ if(bd->dwOPFlags&QMF_DELETNEEDED)
+ continue;
+
+ tvis.item.lParam= (LPARAM) bd;
+ tvis.item.pszText= bd->pszOpName;
+
+ if(bd->fEntryOpType==0)
+ tvis.hParent = NULL;
+
+ hParent=TreeView_InsertItem( hToolBarTree, &tvis );
+ if(tvis.hParent) TreeView_Expand( hMenuTree, tvis.hParent, TVE_EXPAND );
+ if(!bd->pszOpValue&&bd->fEntryOpType==0)
+ {
+ tvis.hParent = hParent;
+ }
+// else if(!(bd->fEntryOpType&QMF_EX_CHILD))
+// tvis.hParent = NULL;
+ }
+
+ return 1;
+ }
+
+static int BuildButtonsList(HWND hToolBarTree)
+ {
+ TVINSERTSTRUCT tvis;
+ int i=0;
+ tvis.hParent = NULL;
+ tvis.hInsertAfter = TVI_LAST;
+ tvis.item.mask =TVIF_PARAM | TVIF_TEXT;
+
+ TreeView_DeleteAllItems( hToolBarTree );
+
+ //for(i=0;i<g_iButtonsCount;i++)
+ while(ButtonsList[i])
+ {
+ tvis.item.lParam =(LPARAM) ButtonsList[i];
+ tvis.item.pszText = ButtonsList[i]->ptszButtonName;
+
+ TreeView_InsertItem( hToolBarTree, &tvis );
+ i++;
+ }
+ return 1;
+ }
+///////////////////////////////////
+//From UserInfoEx by DeathAxe
+//
+void MoveItem( HTREEITEM hItem, HTREEITEM hInsertAfter, BOOLEAN bAsChild )
+ {
+ TVINSERTSTRUCT tvis;
+ //TCHAR strbuf[128];
+ HTREEITEM hParent, hChild, hNewItem;
+
+ if( !hItem || !hInsertAfter )
+ return;
+ if( hItem == hInsertAfter )
+ return;
+
+ switch( ( ULONG_PTR )hInsertAfter ) {
+ case TVI_ROOT:
+ case TVI_FIRST:
+ case TVI_LAST:
+ hParent = NULL;
+ bAsChild = FALSE;
+ break;
+ default:
+ hParent = TreeView_GetParent( hMenuTree, hInsertAfter );
+ break;
+ }
+ // do not move a parent next to its own children!
+ if( hItem == hParent )
+ return;
+
+ // prepare the insert structure
+ {
+ TCHAR strbuf[128];
+ tvis.item.mask=TVIF_HANDLE|TVIF_PARAM|TVIF_TEXT;
+
+ tvis.item.pszText=strbuf;
+ tvis.item.cchTextMax=sizeof(strbuf);
+ tvis.item.hItem=hItem;
+ TreeView_GetItem(hMenuTree,&tvis.item);
+ }
+
+ // item should be inserted as the first child of an existing root item
+ if( bAsChild ) {
+ tvis.hParent = hInsertAfter;
+ tvis.hInsertAfter = ( bAsChild == 2 ) ? TVI_LAST : TVI_FIRST ;
+ }
+ // item should be inserted after an existing item
+ else {
+ tvis.hParent = hParent;
+ tvis.hInsertAfter = hInsertAfter;
+ }
+ // insert the item
+ if( !( hNewItem = TreeView_InsertItem( hMenuTree, &tvis ) ) )
+ return;
+
+ // move children
+ hInsertAfter = hNewItem;
+ while( hChild = TreeView_GetChild( hMenuTree, hItem ) ) {
+ MoveItem( hChild, hInsertAfter, 2 );
+ }
+ // delete old tree
+ TreeView_DeleteItem( hMenuTree, hItem );
+
+ TreeView_SelectItem( hMenuTree, hNewItem );
+ //TreeView_Expand( hMenuTree, hNewItem, TVE_EXPAND );
+ }
+
+
+///////
+BOOL CALLBACK OptionsProc(HWND hdlg,UINT msg,WPARAM wparam,LPARAM lparam)
+ {
+ switch(msg){
+ case WM_INITDIALOG:{
+ DWORD style;
+ g_opHdlg=hdlg;
+ bOptionsInit=TRUE;
+ TranslateDialogDefault(hdlg);
+ if(g_iButtonsCount!=DBGetContactSettingByte(NULL, PLGNAME,"ButtonsCount", 0))
+ {
+ LOGFONT logFont;
+ HFONT hFont;
+ bNeedRestart=TRUE;
+ EnableWindow(GetDlgItem(hdlg,IDC_BUTTONSLIST),FALSE);
+ EnableWindow(GetDlgItem(hdlg,IDC_BLISTADD),FALSE);
+ EnableWindow(GetDlgItem(hdlg,IDC_BLISTREMOVE),FALSE);
+ EnableWindow(GetDlgItem(hdlg,IDC_MENUTREE),FALSE);
+ EnableWindow(GetDlgItem(hdlg,IDC_MTREEADD),FALSE);
+ EnableWindow(GetDlgItem(hdlg,IDC_MTREEREMOVE),FALSE);
+ EnableWindow(GetDlgItem(hdlg,IDC_MENUVALUE),FALSE);
+ EnableWindow(GetDlgItem(hdlg,IDC_RCLICKVALUE),FALSE);
+ EnableWindow(GetDlgItem(hdlg,IDC_BUTTONNAME),FALSE);
+ EnableWindow(GetDlgItem(hdlg,IDC_INQMENU),FALSE);
+ EnableWindow(GetDlgItem(hdlg,IDC_ISSERVNAME),FALSE);
+ EnableWindow(GetDlgItem(hdlg,IDC_MENUNAME),FALSE);
+ ShowWindow(GetDlgItem(hdlg,IDC_WARNING),SW_SHOW);
+
+ hFont = (HFONT)SendMessage(GetDlgItem(hdlg, IDC_WARNING), WM_GETFONT, 0, 0);
+ GetObject(hFont, sizeof logFont, &logFont);
+ logFont.lfWeight = FW_BOLD;
+ hFont = CreateFontIndirect(&logFont);
+ SendMessage(GetDlgItem(hdlg, IDC_WARNING), WM_SETFONT, (WPARAM)hFont, 0);
+ break;
+ }
+
+ g_iOPButtonsCount=g_iButtonsCount;
+
+ hButtonsList=GetDlgItem(hdlg,IDC_BUTTONSLIST);
+ hMenuTree=GetDlgItem(hdlg,IDC_MENUTREE);
+
+ style = GetWindowLong(hButtonsList,GWL_STYLE);
+ style |=TVS_NOHSCROLL;
+ SetWindowLong(hButtonsList,GWL_STYLE, style);
+
+ style = GetWindowLong(hMenuTree,GWL_STYLE);
+ style |=TVS_NOHSCROLL;
+ SetWindowLong(hMenuTree,GWL_STYLE, style);
+ BuildButtonsList(hButtonsList);
+
+ if(!TreeView_GetCount(hButtonsList)) EnableWindow(GetDlgItem(hdlg,IDC_RCLICKVALUE),FALSE);
+
+ oldBNameProc = (WNDPROC) SetWindowLong(GetDlgItem(hdlg,IDC_BUTTONNAME), GWL_WNDPROC, (LONG) EditSubclassProc);
+ oldMNameProc = (WNDPROC) SetWindowLong(GetDlgItem(hdlg,IDC_MENUNAME) , GWL_WNDPROC, (LONG) EditSubclassProc);
+
+
+ EnableWindow(GetDlgItem(hdlg,IDC_MENUVALUE),FALSE);
+ EnableWindow(GetDlgItem(hdlg,IDC_INQMENU),FALSE);
+ EnableWindow(GetDlgItem(hdlg,IDC_ISSERVNAME),FALSE);
+ CheckDlgButton(hdlg,IDC_RAUTOSEND,(g_bRClickAuto=DBGetContactSettingByte(NULL,PLGNAME,"RClickAuto",0)));
+ CheckDlgButton(hdlg,IDC_LAUTOSEND,(g_bLClickAuto=DBGetContactSettingByte(NULL,PLGNAME,"LClickAuto",0)));
+ CheckDlgButton(hdlg,IDC_ENABLEQUICKMENU,(g_bQuickMenu=DBGetContactSettingByte(NULL, PLGNAME,"QuickMenu", 1)));
+
+ bOptionsInit=FALSE;
+ }break;
+
+ case WM_LBUTTONUP:
+ if(drag) {
+ TVHITTESTINFO hti;
+ HTREEITEM htiAfter=NULL;
+ ButtonData* bd=NULL;
+ TVITEM tvi;
+ RECT rc;
+ BYTE height;
+ BOOLEAN bAsChild = FALSE;
+
+ TreeView_SetInsertMark(hMenuTree, NULL, 0 );
+ ReleaseCapture();
+ SetCursor( LoadCursor( NULL, IDC_ARROW ) );
+
+ hti.pt.x = ( SHORT )LOWORD( lparam );
+ hti.pt.y = ( SHORT )HIWORD( lparam );
+ ClientToScreen(hdlg,&hti.pt);
+ ScreenToClient(hMenuTree,&hti.pt);
+ TreeView_HitTest( hMenuTree, &hti );
+
+ if(TreeView_GetParent(hMenuTree,hti.hItem)&&TreeView_GetChild(hMenuTree,hDragItem))
+ break;
+
+ if(TreeView_GetChild(hMenuTree,hti.hItem)&&TreeView_GetChild(hMenuTree,hDragItem))
+ break;
+
+
+ if( hti.flags & TVHT_ABOVE ) {
+ htiAfter = TVI_FIRST;
+ }
+ else
+ if( hti.flags & ( TVHT_NOWHERE|TVHT_BELOW ) ) {
+ htiAfter = TVI_LAST;
+ }
+ else
+ if( hti.flags & ( TVHT_ONITEM|TVHT_ONITEMRIGHT ) ) {
+ // check where over the item, the pointer is
+ if( !TreeView_GetItemRect( hMenuTree, hti.hItem, &rc, FALSE ) ) {
+ drag=0;
+ break;
+ }
+ height = ( BYTE )( rc.bottom - rc.top );
+
+ if( hti.pt.y - ( height / 3 ) < rc.top ) {
+ HTREEITEM hItem = hti.hItem;
+
+ if( !( hti.hItem = TreeView_GetPrevSibling( hMenuTree, hItem ) ) ) {
+ if( !( hti.hItem = TreeView_GetParent(hMenuTree, hItem ) ))
+ htiAfter = TVI_FIRST;
+ else
+ bAsChild = TRUE;
+ }
+ }
+ else
+ if( hti.pt.y + ( height / 3 ) <= rc.bottom ) {
+ bAsChild = TRUE;
+ }
+ }
+
+
+ if(TreeView_GetChild(hMenuTree,hDragItem)&&bAsChild)
+ break;
+
+
+ if(hti.hItem){
+ tvi.hItem=hti.hItem;
+ tvi.mask=TVIF_PARAM |TVIF_HANDLE;
+ TreeView_GetItem(hMenuTree,&tvi);
+ if((bd=(ButtonData*)tvi.lParam)&&(bd->fEntryOpType&QMF_EX_SEPARATOR))
+ bAsChild = FALSE;
+ }
+
+ if(TreeView_GetParent(hMenuTree,hti.hItem))
+ bAsChild = FALSE;
+
+
+ MoveItem( hDragItem, htiAfter?htiAfter:hti.hItem, bAsChild );
+ SendMessage(GetParent(hdlg),PSM_CHANGED,0,0);
+ drag=0;
+
+ }
+ break;
+
+ ///////////////////////////////////
+ //From UserInfoEx by DeathAxe
+ //
+ case WM_MOUSEMOVE:
+ {
+ if (!drag) break;
+ {
+ TVHITTESTINFO hti;
+
+ hti.pt.x=(short)LOWORD(lparam);
+ hti.pt.y=(short)HIWORD(lparam);
+ ClientToScreen(hdlg,&hti.pt);
+ ScreenToClient(hMenuTree,&hti.pt);
+ TreeView_HitTest(hMenuTree,&hti);
+ if( hti.flags & ( TVHT_ONITEM|TVHT_ONITEMRIGHT ) ) {
+ RECT rc;
+ BYTE height;
+
+ if( TreeView_GetItemRect(hMenuTree, hti.hItem, &rc, FALSE ) ) {
+ height = ( BYTE )( rc.bottom - rc.top );
+
+ if( hti.pt.y - ( height / 3 ) < rc.top ) {
+ SetCursor( LoadCursor( NULL, IDC_ARROW ) );
+ TreeView_SetInsertMark( hMenuTree, hti.hItem, 0 );
+ }
+ else
+ if( hti.pt.y + ( height / 3 ) > rc.bottom ) {
+ SetCursor( LoadCursor( NULL, IDC_ARROW ) );
+ TreeView_SetInsertMark( hMenuTree, hti.hItem, 1 );
+ }
+ else {
+ TreeView_SetInsertMark( hMenuTree, NULL, 0 );
+ SetCursor( LoadCursor( GetModuleHandle(NULL), MAKEINTRESOURCE( 183 ) ) );
+ }
+ }
+ }
+ else {
+ if( hti.flags & TVHT_ABOVE ) SendMessage( hMenuTree, WM_VSCROLL, MAKEWPARAM( SB_LINEUP, 0 ), 0 );
+ if( hti.flags & TVHT_BELOW ) SendMessage( hMenuTree, WM_VSCROLL, MAKEWPARAM( SB_LINEDOWN, 0 ), 0 );
+ TreeView_SetInsertMark( hMenuTree, NULL, 0 );
+ }
+ }
+ }break;
+ /////////////
+ case WM_DESTROY:
+ if (g_varhelpDlg)
+ DestroyWindow(g_varhelpDlg);
+ g_varhelpDlg=NULL;
+ break;
+
+ case WM_NOTIFY:{
+ switch(((LPNMHDR)lparam)->idFrom) {
+ case 0:{
+ if (((LPNMHDR)lparam)->code == PSN_APPLY ) {
+ if(!bNeedRestart){
+ SetMenuEntryProperties(hdlg);
+ SaveMenuTree(hdlg);
+ }
+ DBWriteContactSettingByte(NULL,PLGNAME,"RClickAuto",(BYTE)(g_bRClickAuto=IsDlgButtonChecked(hdlg,IDC_RAUTOSEND)));
+ DBWriteContactSettingByte(NULL,PLGNAME,"LClickAuto",(BYTE)(g_bLClickAuto=IsDlgButtonChecked(hdlg,IDC_LAUTOSEND)));
+ DBWriteContactSettingByte(NULL,PLGNAME,"QuickMenu",(BYTE)(g_bQuickMenu=IsDlgButtonChecked(hdlg,IDC_ENABLEQUICKMENU)));
+ return 1;
+ }
+ else if (((LPNMHDR)lparam)->code == PSN_RESET ) {
+ if(!bNeedRestart)
+ RestoreModuleData(hdlg);
+ return 1;
+ }
+ }
+ break;
+
+ case IDC_MENUTREE:
+ switch (((LPNMHDR)lparam)->code){
+
+ case TVN_KEYDOWN:{
+ TV_KEYDOWN* pTVKeyDown = (TV_KEYDOWN*) ((LPNMHDR)lparam);
+ if ( pTVKeyDown->wVKey == VK_F2 )
+ TreeView_EditLabel(hMenuTree,TreeView_GetSelection(hMenuTree));
+ else if ( pTVKeyDown->wVKey == VK_DELETE )
+ SendMessage(hdlg,WM_COMMAND,IDC_MTREEREMOVE,0);
+ }break;
+
+ case TVN_BEGINLABELEDITA:
+ case TVN_BEGINLABELEDITW:
+ hwndEdit=TreeView_GetEditControl(hMenuTree);
+ oldEditProc = (WNDPROC) SetWindowLong(hwndEdit, GWL_WNDPROC, (LONG) LabelEditSubclassProc);
+ break;
+
+ case TVN_ENDLABELEDITA:
+ case TVN_ENDLABELEDITW:
+ {
+ TVITEM tvi;
+ ButtonData* bd=NULL;
+ TCHAR strbuf[256];
+ TCHAR szLabel[256];
+
+ SetWindowLong(hwndEdit, GWL_WNDPROC, (LONG) oldEditProc);
+
+ tvi.pszText = strbuf;
+ tvi.cchTextMax = sizeof(strbuf);
+ tvi.mask=TVIF_TEXT |TVIF_HANDLE|TVIF_PARAM;
+ tvi.hItem=TreeView_GetSelection(hMenuTree);
+ TreeView_GetItem(hMenuTree,&tvi);
+
+ GetWindowText(hwndEdit, szLabel, sizeof(szLabel));
+ hwndEdit=NULL;
+ if(!_tcslen(szLabel)) break;
+ if (bd = (ButtonData*)tvi.lParam){
+ if(!_tcscmp(szLabel,_T("---"))){
+ if(TreeView_GetChild(hMenuTree,tvi.hItem))
+ break;
+ else{
+ bd->fEntryOpType=QMF_EX_SEPARATOR;
+ EnableWindow(GetDlgItem(hdlg,IDC_MENUVALUE),FALSE);
+ EnableWindow(GetDlgItem(hdlg,IDC_ISSERVNAME),FALSE);
+ SetWindowText(GetDlgItem(hdlg,IDC_MENUVALUE),_T(""));
+ }
+ }
+ else {
+ bd->fEntryOpType&=~QMF_EX_SEPARATOR;
+ EnableWindow(GetDlgItem(hdlg,IDC_MENUVALUE),TRUE);
+ EnableWindow(GetDlgItem(hdlg,IDC_ISSERVNAME),TRUE);
+ SetWindowText(GetDlgItem(hdlg,IDC_MENUVALUE),bd->pszOpValue/*?bd->pszOpValue:bd->pszValue*/);
+ }
+
+ bd->pszOpName=mir_tstrdup(szLabel);
+
+ tvi.pszText=szLabel;
+ TreeView_SetItem(hMenuTree, &tvi);
+ SendMessage(GetParent(hdlg),PSM_CHANGED,0,0);
+ }
+ }break;
+
+ case NM_KILLFOCUS:
+ TreeView_EndEditLabelNow(hButtonsList, 1);
+ break;
+
+ case TVN_BEGINDRAGA:
+ case TVN_BEGINDRAGW:
+ SetCapture(hdlg);
+ drag=1;
+ hDragItem=((LPNMTREEVIEW)lparam)->itemNew.hItem;
+ TreeView_SelectItem(hMenuTree,hDragItem);
+ break;
+
+ case TVN_SELCHANGINGA:
+ case TVN_SELCHANGINGW:
+ {
+ TVITEM tvi;
+ HTREEITEM hti;
+ ButtonData* bd;
+
+ hti=TreeView_GetSelection(hMenuTree);
+
+ if (hti==NULL)
+ break;
+
+ tvi.hItem=hti;
+ tvi.mask=TVIF_HANDLE|TVIF_PARAM;
+ TreeView_GetItem(hMenuTree,&tvi);
+
+ if (tvi.lParam == 0)
+ break;
+
+ bd = ( ButtonData* )tvi.lParam;
+ if (bd) {
+ TCHAR szValue[256];
+ GetWindowText(GetDlgItem(hdlg,IDC_MENUVALUE), szValue, sizeof(szValue));
+ if(_tcslen(szValue))
+ {
+ if(bd->pszOpValue&&(bd->pszOpValue!=bd->pszValue))
+ mir_free(bd->pszOpValue);
+ bd->pszOpValue=mir_tstrdup(szValue);
+ }
+ bd->bOpInQMenu=IsDlgButtonChecked(hdlg,IDC_INQMENU);
+ bd->bIsOpServName=IsDlgButtonChecked(hdlg,IDC_ISSERVNAME);
+ }
+ }break;
+ case TVN_SELCHANGEDA:
+ case TVN_SELCHANGEDW:
+ {
+ TVITEM tvi;
+ HTREEITEM hti;
+ ButtonData* bd=NULL;
+
+ hti=TreeView_GetSelection(hMenuTree);
+
+ if (hti==NULL)
+ break;
+
+ tvi.mask=TVIF_HANDLE|TVIF_PARAM;
+
+ tvi.hItem=hti;
+ TreeView_GetItem(hMenuTree,&tvi);
+
+
+ bd = ( ButtonData* )tvi.lParam;
+ if (bd) {
+ if(!TreeView_GetChild(hMenuTree, tvi.hItem)&&!(bd->fEntryOpType&QMF_EX_SEPARATOR))
+ {
+ EnableWindow(GetDlgItem(hdlg,IDC_MENUVALUE),TRUE);
+ EnableWindow(GetDlgItem(hdlg,IDC_ISSERVNAME),TRUE);
+ EnableWindow(GetDlgItem(hdlg,IDC_INQMENU),TRUE);
+ SetWindowText(GetDlgItem(hdlg,IDC_MENUVALUE),bd->pszOpValue/*?bd->pszOpValue:bd->pszValue*/);
+ }
+ else
+ {
+ EnableWindow(GetDlgItem(hdlg,IDC_MENUVALUE),FALSE);
+ EnableWindow(GetDlgItem(hdlg,IDC_ISSERVNAME),FALSE);
+ if(!(bd->fEntryOpType&QMF_EX_SEPARATOR))
+ EnableWindow(GetDlgItem(hdlg,IDC_INQMENU),FALSE);
+ SetWindowText(GetDlgItem(hdlg,IDC_MENUVALUE),_T(""));
+ }
+ CheckDlgButton(hdlg,IDC_INQMENU,bd->bOpInQMenu);
+ CheckDlgButton(hdlg,IDC_ISSERVNAME,bd->bIsOpServName);
+ }
+ }
+ }break;
+
+ case IDC_BUTTONSLIST:
+ switch (((LPNMHDR)lparam)->code) {
+
+ case TVN_KEYDOWN:{
+ TV_KEYDOWN* pTVKeyDown = (TV_KEYDOWN*) ((LPNMHDR)lparam);
+ if ( pTVKeyDown->wVKey == VK_F2 )
+ TreeView_EditLabel(hButtonsList,TreeView_GetSelection(hButtonsList));
+ else if ( pTVKeyDown->wVKey == VK_DELETE )
+ SendMessage(hdlg,WM_COMMAND,IDC_BLISTREMOVE,0);
+ }break;
+
+ case TVN_BEGINLABELEDITA:
+ case TVN_BEGINLABELEDITW:
+ hwndEdit=TreeView_GetEditControl(hButtonsList);
+ oldEditProc = (WNDPROC) SetWindowLong(hwndEdit, GWL_WNDPROC, (LONG) LabelEditSubclassProc);
+ break;
+
+ case TVN_ENDLABELEDITA:
+ case TVN_ENDLABELEDITW:{
+ TVITEM tvi;
+ TCHAR strbuf[128];
+ TCHAR szLabel[128];
+
+ SetWindowLong(hwndEdit, GWL_WNDPROC, (LONG) oldEditProc);
+
+ tvi.pszText = strbuf;
+ tvi.cchTextMax = sizeof(strbuf);
+ tvi.mask=TVIF_TEXT |TVIF_HANDLE|TVIF_PARAM;
+ tvi.hItem=TreeView_GetSelection(hButtonsList);
+ TreeView_GetItem(hButtonsList,&tvi);
+
+ GetWindowText(hwndEdit, szLabel, sizeof(szLabel));
+ hwndEdit=NULL;
+ if(!_tcslen(szLabel)) break;
+
+ tvi.pszText=szLabel;
+ ((ListData*)tvi.lParam)->dwOPFlags|=QMF_RENAMED;
+
+ TreeView_SetItem(hButtonsList, &tvi);
+ SendMessage(GetParent(hdlg),PSM_CHANGED,0,0);
+ }break;
+
+ case TVN_SELCHANGINGA:
+ case TVN_SELCHANGINGW:
+ SetMenuEntryProperties(hdlg);
+ break;
+
+ case TVN_SELCHANGEDA:
+ case TVN_SELCHANGEDW:{
+ TVITEM tvi;
+ HTREEITEM hti;
+
+ hti=TreeView_GetSelection(hButtonsList);
+
+ if(hti==NULL||!TreeView_GetCount(hButtonsList)){
+ EnableWindow(GetDlgItem(hdlg,IDC_MENUVALUE),FALSE);
+ EnableWindow(GetDlgItem(hdlg,IDC_ISSERVNAME),FALSE);
+ EnableWindow(GetDlgItem(hdlg,IDC_INQMENU),FALSE);
+ EnableWindow(GetDlgItem(hdlg,IDC_ISSERVNAME2),FALSE);
+ SetWindowText(GetDlgItem(hdlg,IDC_MENUVALUE),_T(""));
+ break;
+ }
+
+ tvi.mask=TVIF_HANDLE|TVIF_PARAM;
+ tvi.hItem=hti;
+ TreeView_GetItem(hButtonsList,&tvi);
+
+ if(tvi.lParam==0) break;
+
+ BuildMenuTree(hMenuTree,(SortedList *)((ListData*)tvi.lParam)->sl);
+
+ SetWindowText(GetDlgItem(hdlg,IDC_MENUVALUE),_T(""));
+ EnableWindow(GetDlgItem(hdlg,IDC_RCLICKVALUE),TRUE);
+ EnableWindow(GetDlgItem(hdlg,IDC_ISSERVNAME2),TRUE);
+ CheckDlgButton(hdlg,IDC_ISSERVNAME2,((ListData*)tvi.lParam)->bIsOpServName);
+
+ if(((ListData*)tvi.lParam)->ptszOPQValue)
+ SetWindowText(GetDlgItem(hdlg,IDC_RCLICKVALUE),((ListData*)tvi.lParam)->ptszOPQValue);
+ else
+ SetWindowText(GetDlgItem(hdlg,IDC_RCLICKVALUE),_T(""));
+
+ }break;
+ }break;
+ }
+ }break;
+
+ case WM_COMMAND:{
+ switch(LOWORD(wparam)){
+ case IDC_VARHELP:{
+ if(!g_varhelpDlg)
+ g_varhelpDlg=CreateDialog(hinstance,MAKEINTRESOURCE(IDD_HELPDIALOG), 0, HelpDlgProc);
+ else
+ //ShowWindow(g_varhelpDlg,SW_SHOWDEFAULT);
+ SetWindowPos(g_varhelpDlg,0,0,0,0,0,SWP_SHOWWINDOW|SWP_NOMOVE|SWP_NOSIZE);
+ }break;
+ case IDC_BLISTADD:{
+ TVINSERTSTRUCT tvis;
+ ListData* ld=NULL;
+ TCHAR namebuff[MAX_PATH]={'\0'};
+ int count=TreeView_GetCount(hButtonsList);
+ if (count>10) break;
+ if(g_iOPButtonsCount==99){
+ MessageBox(NULL,_T("Congratulation!\n\
+ You have clicked this button 100 times!\n\
+ There was access violation at this point...\n\
+ And now function for freeing resources must be called...\n\
+ But no! there's only break :D"),_T("You win!"),MB_OK);
+ break;
+ }
+
+ ld=mir_alloc(sizeof(ListData));
+ ButtonsList[g_iOPButtonsCount++]=ld;
+
+ ld->sl=li.List_Create(0,1);
+ ld->dwOPFlags=QMF_NEW;
+ ld->bIsOpServName=0;
+ ld->ptszButtonName=NULL;
+ ld->ptszOPQValue=NULL;
+ ld->ptszQValue=NULL;
+ tvis.hParent = NULL;
+ tvis.hInsertAfter = TVI_LAST;
+
+ GetWindowText(GetDlgItem(hdlg,IDC_BUTTONNAME),namebuff,MAX_PATH);
+
+ tvis.item.mask=TVIF_PARAM|TVIF_TEXT;
+ tvis.item.pszText=(_tcslen(namebuff))?namebuff:TranslateT("New Button");
+ tvis.item.lParam=(LPARAM)ld;
+ TreeView_SelectItem(hButtonsList,TreeView_InsertItem(hButtonsList,&tvis));
+
+ }break;
+
+ case IDC_BLISTREMOVE:{
+ TVITEM tvi;
+ ListData* ld;
+
+ if(!(tvi.hItem=TreeView_GetSelection(hButtonsList)))
+ break;
+
+ tvi.mask=TVIF_HANDLE|TVIF_PARAM;
+ TreeView_GetItem(hButtonsList,&tvi);
+
+ ld= (ListData*)tvi.lParam;
+
+ ld->dwOPFlags|=QMF_DELETNEEDED;
+
+ TreeView_DeleteItem(hButtonsList,tvi.hItem);
+ if(!TreeView_GetCount(hButtonsList))
+ {
+ TreeView_DeleteAllItems(hMenuTree);
+ EnableWindow(GetDlgItem(hdlg,IDC_MENUVALUE),FALSE);
+ EnableWindow(GetDlgItem(hdlg,IDC_RCLICKVALUE),FALSE);
+ EnableWindow(GetDlgItem(hdlg,IDC_ISSERVNAME),FALSE);
+ EnableWindow(GetDlgItem(hdlg,IDC_INQMENU),FALSE);
+ EnableWindow(GetDlgItem(hdlg,IDC_ISSERVNAME2),FALSE);
+ SetWindowText(GetDlgItem(hdlg,IDC_MENUVALUE),_T(""));
+ SetWindowText(GetDlgItem(hdlg,IDC_RCLICKVALUE),_T(""));
+ }
+ }break;
+
+ case IDC_MTREEADD:{
+ TVINSERTSTRUCT tvis;
+ TVITEM tvi;
+ ButtonData *bd=NULL;
+ SortedList *sl=NULL;
+ TCHAR namebuff[MAX_PATH]={'\0'};
+
+ if(!TreeView_GetCount(hButtonsList)) break;
+ if(!(tvi.hItem=TreeView_GetSelection(hButtonsList))) break;
+
+ bd=mir_alloc(sizeof(ButtonData));
+ memset(bd,0,sizeof(ButtonData));
+
+ GetWindowText(GetDlgItem(hdlg,IDC_MENUNAME),namebuff,MAX_PATH);
+
+ bd->dwOPPos=TreeView_GetCount(hMenuTree)-1;
+ bd->pszOpName=_tcslen(namebuff)?mir_tstrdup(namebuff):mir_tstrdup(TranslateT("New Menu Entry"));
+ bd->pszOpValue=mir_tstrdup(bd->pszOpName);
+ bd->fEntryOpType=!_tcscmp(namebuff,_T("---"))?QMF_EX_SEPARATOR:0;
+ bd->dwOPFlags=QMF_NEW;
+ bd->pszName=NULL;
+ bd->pszValue=NULL;
+
+
+ tvi.mask=TVIF_HANDLE|TVIF_PARAM;
+
+ TreeView_GetItem(hButtonsList,&tvi);
+
+ sl=((ListData*)tvi.lParam)->sl;
+
+ li.List_InsertPtr(sl,bd);
+
+ tvis.hParent = NULL;
+ tvis.hInsertAfter = TVI_LAST;
+ tvis.item.mask=TVIF_PARAM|TVIF_TEXT;
+ tvis.item.pszText=bd->pszOpName;
+ tvis.item.lParam=(LPARAM)bd;
+ TreeView_SelectItem(hMenuTree,TreeView_InsertItem(hMenuTree,&tvis));
+ }break;
+
+ case IDC_MTREEREMOVE:{
+ TVITEM tvi;
+ TVINSERTSTRUCT tvis;
+ HTREEITEM hti=NULL;
+ ButtonData *bd=NULL;
+ tvi.mask=TVIF_HANDLE|TVIF_PARAM;
+ if(!(tvi.hItem=TreeView_GetSelection(hMenuTree)))
+ break;
+ TreeView_GetItem(hMenuTree,&tvi);
+ hti=tvi.hItem;
+
+ bd= (ButtonData*)tvi.lParam;
+ bd->dwOPFlags|=QMF_DELETNEEDED;
+
+ if(tvi.hItem=TreeView_GetChild(hMenuTree,tvi.hItem)){
+ TCHAR strbuf[128];
+ while(tvi.hItem){
+ tvis.hInsertAfter=hti;
+ tvi.pszText = strbuf;
+ tvi.cchTextMax = sizeof(strbuf);
+ tvi.mask=TVIF_HANDLE|TVIF_PARAM|TVIF_TEXT;
+
+ TreeView_GetItem(hMenuTree,&tvi);
+ tvis.hParent=NULL;
+ tvis.item=tvi;
+ TreeView_InsertItem(hMenuTree,&tvis);
+ tvi.hItem=TreeView_GetNextSibling(hMenuTree,tvi.hItem);
+ }
+ }
+
+ TreeView_DeleteItem(hMenuTree,hti);
+ if(!TreeView_GetCount(hMenuTree)){
+ EnableWindow(GetDlgItem(hdlg,IDC_MENUVALUE),FALSE);
+ EnableWindow(GetDlgItem(hdlg,IDC_ISSERVNAME),FALSE);
+ EnableWindow(GetDlgItem(hdlg,IDC_INQMENU),FALSE);
+ SetWindowText(GetDlgItem(hdlg,IDC_MENUVALUE),_T(""));
+ }
+
+ }break;
+
+ }
+ }break;
+
+ case WM_NCDESTROY:
+ if(oldBNameProc) SetWindowLong(GetDlgItem(hdlg,IDC_BUTTONNAME), GWL_WNDPROC, (LONG) oldBNameProc);
+ if(oldMNameProc) SetWindowLong(GetDlgItem(hdlg,IDC_MENUNAME) , GWL_WNDPROC, (LONG) oldMNameProc);
+ break;
+
+ case WM_CLOSE:
+ EndDialog(hdlg,0);
+ return 0;
+ }
+ if (HIWORD(wparam)==BN_CLICKED && GetFocus()==(HWND)lparam)
+ SendMessage(GetParent(hdlg),PSM_CHANGED,0,0);
+ else if ((HIWORD(wparam) == EN_CHANGE)&&(GetFocus()==(HWND)lparam))
+ if (!bOptionsInit) SendMessage(GetParent(hdlg),PSM_CHANGED,0,0);
+
+ return 0;
+ }
+
+int OptionsInit(WPARAM wparam,LPARAM lparam)
+ {
+ OPTIONSDIALOGPAGE odp={0};
+
+ odp.cbSize=sizeof(odp);
+ odp.position=940000000;
+ odp.hInstance=hinstance;
+ odp.pszTemplate=MAKEINTRESOURCEA(IDD_OPTIONS);
+ odp.pszTitle=LPGEN("Quick Messages");
+ odp.pfnDlgProc=OptionsProc;
+ odp.pszGroup=LPGEN("Plugins");
+ odp.flags=ODPF_BOLDGROUPS;
+
+ CallService(MS_OPT_ADDPAGE,wparam,(LPARAM)&odp);
+ return 0;
+ }
diff --git a/QuickMessages/quickmessages.dsp b/QuickMessages/quickmessages.dsp
new file mode 100644
index 0000000..c918568
--- /dev/null
+++ b/QuickMessages/quickmessages.dsp
@@ -0,0 +1,301 @@
+# Microsoft Developer Studio Project File - Name="quickmessages" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
+
+CFG=quickmessages - Win32 Release
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "quickmessages.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "quickmessages.mak" CFG="quickmessages - Win32 Release"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "quickmessages - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "quickmessages - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "quickmessages - Win32 Unicode Release" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "quickmessages - Win32 Unicode Debug" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+MTL=midl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "quickmessages - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir ".\Release"
+# PROP BASE Intermediate_Dir ".\Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir ".\Release"
+# PROP Intermediate_Dir ".\Release"
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /GX /O1 /Ob2 /GF PRECOMP_VC7_TOBEREMOVED /c
+# ADD CPP /nologo /MD /W3 /GX /O1 /Ob2 /c
+# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x419 /d "NDEBUG"
+# ADD RSC /l 0x419 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib msimg32.lib /nologo /base:"0x67100000" /subsystem:windows /dll /map /machine:IX86 /out:".\$(ConfigurationName)\quickmessages.dll" /pdbtype:sept /filealign:0x200
+# SUBTRACT BASE LINK32 /pdb:none
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib msimg32.lib /nologo /base:"0x67100000" /subsystem:windows /dll /map /machine:IX86 /pdbtype:sept /filealign:0x200
+# SUBTRACT LINK32 /pdb:none
+
+!ELSEIF "$(CFG)" == "quickmessages - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir ".\debug"
+# PROP BASE Intermediate_Dir ".\debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir ".\Debug"
+# PROP Intermediate_Dir ".\Debug"
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /GX /ZI /Od /FR /GZ PRECOMP_VC7_TOBEREMOVED /c
+# ADD CPP /nologo /MD /W3 /GX /ZI /Od /FR /GZ PRECOMP_VC7_TOBEREMOVED /c
+# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x417 /d "NDEBUG"
+# ADD RSC /l 0x417 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib msimg32.lib /nologo /base:"0x67100000" /subsystem:windows /dll /incremental:no /pdb:".\release\quickmessages.pdb" /map /debug /machine:IX86 /out:"$(ConfigurationName)\quickmessages.dll" /implib:".\release/quickmessages.lib" /pdbtype:sept /filealign:0x200
+# SUBTRACT BASE LINK32 /pdb:none
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib msimg32.lib /nologo /base:"0x67100000" /subsystem:windows /dll /incremental:no /pdb:".\release\quickmessages.pdb" /map /debug /machine:IX86 /out:"$(ConfigurationName)\quickmessages.dll" /implib:".\release/quickmessages.lib" /pdbtype:sept /filealign:0x200
+# SUBTRACT LINK32 /pdb:none
+
+!ELSEIF "$(CFG)" == "quickmessages - Win32 Unicode Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "$(ConfigurationName)"
+# PROP BASE Intermediate_Dir "$(ConfigurationName)"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir ".\UNICODE_RELEASE"
+# PROP Intermediate_Dir ".\UNICODE_RELEASE"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /GX /O1 /Ob2 /D "_UNICODE" /Fo".\Release/" /GF PRECOMP_VC7_TOBEREMOVED /c
+# ADD CPP /nologo /MD /W3 /GX /O2 /Ob0 /D "_UNICODE" /D "UNICODE" /c
+# SUBTRACT CPP /WX
+# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x419 /d "NDEBUG"
+# ADD RSC /l 0x419 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib msimg32.lib /nologo /base:"0x67100000" /subsystem:windows /dll /pdb:".\Release\quickmessages.pdb" /map:".\Release\quickmessages.map" /machine:IX86 /out:".\$(ConfigurationName)\quickmessages.dll" /implib:".\Release/quickmessages.lib" /pdbtype:sept /filealign:0x200
+# SUBTRACT BASE LINK32 /pdb:none
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib msimg32.lib /nologo /base:"0x67100000" /subsystem:windows /dll /map /machine:IX86 /pdbtype:sept /filealign:0x200
+# SUBTRACT LINK32 /pdb:none
+
+!ELSEIF "$(CFG)" == "quickmessages - Win32 Unicode Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "$(ConfigurationName)"
+# PROP BASE Intermediate_Dir "$(ConfigurationName)"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir ".\UNICODE_DEBUG"
+# PROP Intermediate_Dir ".\UNICODE_DEBUG"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /GX /ZI /Od /D "_UNICODE" /D "PRECOMP_VC7_TOBEREMOVED" /FR /Fo".\debug/" /Fd".\debug/" /GZ "DEBUG" /c
+# ADD CPP /nologo /MD /W3 /GX /ZI /Od /D "_UNICODE" /D "UNICODE" /FR /GZ "UNICODE_DEBUG" /c
+# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x417 /d "NDEBUG"
+# ADD RSC /l 0x417 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /base:"0x67100000" /subsystem:windows /dll /incremental:no /pdb:".\release\quickmessages.pdb" /map:".\debug\quickmessages.map" /debug /machine:IX86 /implib:".\release/quickmessages.lib" /pdbtype:sept /filealign:0x200
+# SUBTRACT BASE LINK32 /pdb:none
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /base:"0x67100000" /subsystem:windows /dll /incremental:no /map /debug /debugtype:both /machine:IX86 /pdbtype:sept /filealign:0x200
+# SUBTRACT LINK32 /pdb:none
+
+!ENDIF
+
+# Begin Target
+
+# Name "quickmessages - Win32 Release"
+# Name "quickmessages - Win32 Debug"
+# Name "quickmessages - Win32 Unicode Release"
+# Name "quickmessages - Win32 Unicode Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=main.c
+DEP_CPP_MAIN_=\
+ "..\..\include\m_clist.h"\
+ "..\..\include\m_database.h"\
+ "..\..\include\m_icolib.h"\
+ "..\..\include\m_langpack.h"\
+ "..\..\include\m_message.h"\
+ "..\..\include\m_options.h"\
+ "..\..\include\m_plugins.h"\
+ "..\..\include\m_protocols.h"\
+ "..\..\include\m_protomod.h"\
+ "..\..\include\m_system.h"\
+ "..\..\include\m_utils.h"\
+ "..\..\include\newpluginapi.h"\
+ "..\..\include\statusmodes.h"\
+ ".\m_msg_buttonsbar.h"\
+ ".\m_updater.h"\
+ ".\quickmessages.h"\
+ ".\Utils.h"\
+
+
+!IF "$(CFG)" == "quickmessages - Win32 Release"
+
+# ADD CPP /nologo /GX /O1
+
+!ELSEIF "$(CFG)" == "quickmessages - Win32 Debug"
+
+# ADD CPP /nologo /GX /Od /FR /GZ
+
+!ELSEIF "$(CFG)" == "quickmessages - Win32 Unicode Release"
+
+# ADD CPP /nologo /GX /O1
+
+!ELSEIF "$(CFG)" == "quickmessages - Win32 Unicode Debug"
+
+# ADD CPP /nologo /GX /Od /FR /GZ
+
+!ENDIF
+
+# End Source File
+# Begin Source File
+
+SOURCE=options.c
+DEP_CPP_OPTIO=\
+ "..\..\include\m_clist.h"\
+ "..\..\include\m_database.h"\
+ "..\..\include\m_icolib.h"\
+ "..\..\include\m_langpack.h"\
+ "..\..\include\m_message.h"\
+ "..\..\include\m_options.h"\
+ "..\..\include\m_plugins.h"\
+ "..\..\include\m_protocols.h"\
+ "..\..\include\m_protomod.h"\
+ "..\..\include\m_system.h"\
+ "..\..\include\m_utils.h"\
+ "..\..\include\newpluginapi.h"\
+ "..\..\include\statusmodes.h"\
+ ".\m_msg_buttonsbar.h"\
+ ".\m_updater.h"\
+ ".\quickmessages.h"\
+ ".\Utils.h"\
+
+
+!IF "$(CFG)" == "quickmessages - Win32 Release"
+
+# ADD CPP /nologo /GX /O1
+
+!ELSEIF "$(CFG)" == "quickmessages - Win32 Debug"
+
+# ADD CPP /nologo /GX /Od /FR /GZ
+
+!ELSEIF "$(CFG)" == "quickmessages - Win32 Unicode Release"
+
+# ADD CPP /nologo /GX /O1
+
+!ELSEIF "$(CFG)" == "quickmessages - Win32 Unicode Debug"
+
+# ADD CPP /nologo /GX /Od /FR /GZ
+
+!ENDIF
+
+# End Source File
+# Begin Source File
+
+SOURCE=.\Utils.c
+DEP_CPP_UTILS=\
+ "..\..\include\m_clist.h"\
+ "..\..\include\m_database.h"\
+ "..\..\include\m_icolib.h"\
+ "..\..\include\m_langpack.h"\
+ "..\..\include\m_message.h"\
+ "..\..\include\m_options.h"\
+ "..\..\include\m_plugins.h"\
+ "..\..\include\m_protocols.h"\
+ "..\..\include\m_protomod.h"\
+ "..\..\include\m_system.h"\
+ "..\..\include\m_utils.h"\
+ "..\..\include\newpluginapi.h"\
+ "..\..\include\statusmodes.h"\
+ ".\m_msg_buttonsbar.h"\
+ ".\m_updater.h"\
+ ".\quickmessages.h"\
+ ".\Utils.h"\
+
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# Begin Source File
+
+SOURCE=.\m_msg_buttonsbar.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\m_updater.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\quickmessages.h
+# End Source File
+# Begin Source File
+
+SOURCE=resource.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Utils.h
+# End Source File
+# End Group
+# Begin Group "Resource Files"
+
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+# Begin Source File
+
+SOURCE=.\icons\qicon.ico
+# End Source File
+# Begin Source File
+
+SOURCE=.\quickmessages.rc
+# End Source File
+# End Group
+# End Target
+# End Project
diff --git a/QuickMessages/quickmessages.dsw b/QuickMessages/quickmessages.dsw
new file mode 100644
index 0000000..1c6bc0c
--- /dev/null
+++ b/QuickMessages/quickmessages.dsw
@@ -0,0 +1,29 @@
+Microsoft Developer Studio Workspace File, Format Version 6.00
+# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!
+
+###############################################################################
+
+Project: "quickmessages"=.\quickmessages.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Global:
+
+Package=<5>
+{{{
+}}}
+
+Package=<3>
+{{{
+}}}
+
+###############################################################################
+
diff --git a/QuickMessages/quickmessages.h b/QuickMessages/quickmessages.h
new file mode 100644
index 0000000..bc8e372
--- /dev/null
+++ b/QuickMessages/quickmessages.h
@@ -0,0 +1,93 @@
+/*
+Quick Messages plugin for Miranda IM
+
+Copyright (C) 2008 Danil Mozhar
+
+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 3 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, see <http://www.gnu.org/licenses/>.
+*/
+#define _CRT_SECURE_NO_DEPRECATE
+
+
+#include <tchar.h>
+#include <windows.h>
+#include "resource.h"
+#include <stdio.h>
+#include <commctrl.h>
+#include <Richedit.h>
+
+#define MIRANDA_VER 0x0600
+#include "..\..\include\m_plugins.h"
+#include "..\..\include\newpluginapi.h"
+#include "..\..\include\m_utils.h"
+#include "..\..\include\m_system.h"
+#include "..\..\include\m_clist.h"
+#include "..\..\include\m_options.h"
+#include "..\..\include\m_database.h"
+#include "..\..\include\m_protomod.h"
+#include "..\..\include\m_langpack.h"
+#include "..\..\include\m_icolib.h"
+#include "..\..\include\m_message.h"
+#include "..\..\include\m_contacts.h"
+
+#include "Utils.h"
+#include "m_msg_buttonsbar.h"
+#include "m_updater.h"
+
+#pragma optimize("gsy",on)
+
+#define MODULENAME "Quick Messages"
+#define PLGNAME "QuickMessages"
+
+extern struct LIST_INTERFACE li;
+extern HINSTANCE hinstance;
+extern HANDLE hIcon;
+extern ListData* ButtonsList[100];
+extern SortedList* QuickList;
+extern BOOL g_bRClickAuto;
+extern BOOL g_bLClickAuto;
+extern BOOL g_bQuickMenu;
+extern int g_iButtonsCount;
+
+//#define MIIM_STRING 0x00000040
+
+
+
+int AddIcon(HICON icon, char *name, char *description);
+int OptionsInit(WPARAM,LPARAM);
+
+
+#define IDC_MESSAGE 1002
+#define IDC_CHATMESSAGE 1009
+
+#define SIZEOF(X)(sizeof(X)/sizeof(X[0]))
+
+#ifdef _UNICODE
+#define QMESSAGES_NAME "quickmessages_u"
+#else
+#define QMESSAGES_NAME "quickmessages_a"
+#endif
+
+#define QMESSAGES_VERSION_URL "http://miranda.radicaled.ru/public/updater/quickmessages.txt"
+
+#define QMESSAGES_CHAGELOG_URL "http://miranda.radicaled.ru/public/quickmessages/changelog_en.txt"
+
+#define QMESSAGES_UPDATE_URL "http://miranda.radicaled.ru/public/quickmessages/"QMESSAGES_NAME".zip"
+
+#define QMESSAGES_UPDATE_URL "http://miranda.radicaled.ru/public/quickmessages/"QMESSAGES_NAME".zip"
+
+#define QMESSAGES_VERSION_PREFIX "QuickMessages "
+
+
+
+
diff --git a/QuickMessages/quickmessages.rc b/QuickMessages/quickmessages.rc
new file mode 100644
index 0000000..e44b078
--- /dev/null
+++ b/QuickMessages/quickmessages.rc
@@ -0,0 +1,234 @@
+// Microsoft Visual C++ generated resource script.
+//
+#include "resource.h"
+
+#define APSTUDIO_READONLY_SYMBOLS
+/////////////////////////////////////////////////////////////////////////////
+//
+// Generated from the TEXTINCLUDE 2 resource.
+//
+#include <windows.h>
+
+/////////////////////////////////////////////////////////////////////////////
+#undef APSTUDIO_READONLY_SYMBOLS
+
+/////////////////////////////////////////////////////////////////////////////
+// Neutral resources
+
+#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_NEU)
+#ifdef _WIN32
+LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
+#pragma code_page(1251)
+#endif //_WIN32
+
+#ifdef APSTUDIO_INVOKED
+/////////////////////////////////////////////////////////////////////////////
+//
+// TEXTINCLUDE
+//
+
+1 TEXTINCLUDE
+BEGIN
+ "resource.h\0"
+ "version.rc\0"
+END
+
+2 TEXTINCLUDE
+BEGIN
+ "#include <windows.h>\r\n"
+ "\0"
+END
+
+3 TEXTINCLUDE
+BEGIN
+ "\r\n"
+ "\0"
+END
+
+#endif // APSTUDIO_INVOKED
+
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// Dialog
+//
+
+IDD_OPTIONS DIALOGEX 0, 0, 316, 257
+STYLE DS_SETFONT | DS_FIXEDSYS | DS_CONTROL | WS_CHILD | WS_VISIBLE
+FONT 8, "MS Shell Dlg", 0, 0, 0x1
+BEGIN
+ CONTROL "",IDC_BUTTONSLIST,"SysTreeView32",TVS_EDITLABELS | TVS_DISABLEDRAGDROP | TVS_SHOWSELALWAYS | TVS_NOTOOLTIPS | TVS_FULLROWSELECT | WS_TABSTOP,6,19,95,130,WS_EX_STATICEDGE
+ PUSHBUTTON "+",IDC_BLISTADD,70,152,16,14,BS_FLAT
+ PUSHBUTTON "-",IDC_BLISTREMOVE,86,152,16,14,BS_FLAT
+ CONTROL "",IDC_MENUTREE,"SysTreeView32",TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT | TVS_EDITLABELS | TVS_SHOWSELALWAYS | TVS_NOTOOLTIPS | WS_TABSTOP,114,19,95,130,WS_EX_STATICEDGE
+ PUSHBUTTON "+",IDC_MTREEADD,178,152,16,14,BS_FLAT
+ PUSHBUTTON "-",IDC_MTREEREMOVE,194,152,16,14,BS_FLAT
+ EDITTEXT IDC_MENUVALUE,212,49,93,14,ES_AUTOHSCROLL
+ EDITTEXT IDC_RCLICKVALUE,114,182,193,14,ES_AUTOHSCROLL
+ GROUPBOX "Button Right-Click value",IDC_STATIC,110,172,204,47
+ GROUPBOX "Button Left-Click menu",IDC_STATIC,110,9,204,160
+ GROUPBOX "Buttons",IDC_STATIC,2,9,103,160
+ LTEXT "Menu entry value:",IDC_STATIC,214,37,86,8
+ EDITTEXT IDC_BUTTONNAME,6,152,63,14,ES_AUTOHSCROLL | ES_WANTRETURN
+ EDITTEXT IDC_MENUNAME,114,152,63,14,ES_AUTOHSCROLL | ES_WANTRETURN
+ GROUPBOX "Misc.",IDC_STATIC,2,172,103,66
+ CONTROL "Auto-send on Left-Click",IDC_LAUTOSEND,"Button",BS_AUTOCHECKBOX | BS_MULTILINE | WS_TABSTOP,6,181,98,16
+ CONTROL "Auto-send on Right-Click",IDC_RAUTOSEND,"Button",BS_AUTOCHECKBOX | BS_MULTILINE | WS_TABSTOP,6,199,98,16
+ CONTROL "Add to QuickMenu",IDC_INQMENU,"Button",BS_AUTOCHECKBOX | BS_MULTILINE | WS_TABSTOP,214,66,99,20
+ CONTROL "Enable QuickMenu",IDC_ENABLEQUICKMENU,"Button",BS_AUTOCHECKBOX | BS_MULTILINE | WS_TABSTOP,6,217,98,16
+ CONTROL "Consider as ServiceName",IDC_ISSERVNAME,"Button",BS_AUTOCHECKBOX | BS_MULTILINE | WS_TABSTOP,214,90,99,20
+ LTEXT "You have changed the plugin settings via database.\nThis requires restart!",IDC_WARNING,110,223,179,28,NOT WS_VISIBLE
+ PUSHBUTTON "?",IDC_VARHELP,291,223,16,14
+ CONTROL "Consider as ServiceName",IDC_ISSERVNAME2,"Button",BS_AUTOCHECKBOX | BS_MULTILINE | WS_TABSTOP,117,196,189,20
+END
+
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// DESIGNINFO
+//
+
+#ifdef APSTUDIO_INVOKED
+GUIDELINES DESIGNINFO
+BEGIN
+ IDD_OPTIONS, DIALOG
+ BEGIN
+ RIGHTMARGIN, 314
+ VERTGUIDE, 5
+ VERTGUIDE, 105
+ VERTGUIDE, 110
+ VERTGUIDE, 114
+ VERTGUIDE, 307
+ BOTTOMMARGIN, 251
+ HORZGUIDE, 9
+ HORZGUIDE, 19
+ HORZGUIDE, 149
+ HORZGUIDE, 152
+ HORZGUIDE, 166
+ HORZGUIDE, 169
+ END
+END
+#endif // APSTUDIO_INVOKED
+
+#endif // Neutral resources
+/////////////////////////////////////////////////////////////////////////////
+
+
+/////////////////////////////////////////////////////////////////////////////
+// Russian resources
+
+#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_RUS)
+#ifdef _WIN32
+LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT
+#pragma code_page(1251)
+#endif //_WIN32
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// Dialog
+//
+
+IDD_HELPDIALOG DIALOGEX 0, 0, 202, 210
+STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_CAPTION | WS_SYSMENU
+EXSTYLE WS_EX_TOOLWINDOW
+CAPTION "Quick Messages Help"
+FONT 8, "MS Shell Dlg", 400, 0, 0x1
+BEGIN
+ LTEXT "- Selected text",IDC_STATIC,68,20,127,17
+ LTEXT "List of variables:",IDC_STATICTITLE,12,7,113,8
+ LTEXT "- Text from Clipboard",IDC_STATIC,68,41,127,17
+ LTEXT "- Contacts Protocol name (upper case)",IDC_STATIC,68,62,127,17
+ LTEXT "- Contact display name",IDC_STATIC,68,83,127,17
+ LTEXT "%t",IDC_VARTEXT,18,20,15,12
+ LTEXT "%c",IDC_VARCLIP,18,41,15,12
+ LTEXT "%P",IDC_VARPUNAME,18,62,15,12
+ LTEXT "%n",IDC_VARCNAME,18,83,15,12
+ LTEXT "Tips:",IDC_STATICTITLE2,12,149,113,8
+ LTEXT "*Rename menu item into ""---"" to insert separator",IDC_STATIC,18,160,177,17
+ LTEXT "*Use drag'n'drop for arranging menu items",IDC_STATIC,18,179,177,17
+ LTEXT "- Contact first name",IDC_STATIC,68,104,127,17
+ LTEXT "%F",IDC_VARCFNAME,18,104,15,12
+ LTEXT "- Contact last name",IDC_STATIC,68,125,127,17
+ LTEXT "%L",IDC_VARCLNAME,18,125,15,12
+END
+
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// DESIGNINFO
+//
+
+#ifdef APSTUDIO_INVOKED
+GUIDELINES DESIGNINFO
+BEGIN
+ IDD_HELPDIALOG, DIALOG
+ BEGIN
+ LEFTMARGIN, 7
+ RIGHTMARGIN, 195
+ TOPMARGIN, 7
+ BOTTOMMARGIN, 203
+ END
+END
+#endif // APSTUDIO_INVOKED
+
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// Icon
+//
+
+// Icon with lowest ID value placed first to ensure application icon
+// remains consistent on all systems.
+IDI_QICON ICON "icons\\qicon.ico"
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// Version
+//
+
+VS_VERSION_INFO VERSIONINFO
+ FILEVERSION 0,0,4,2
+ PRODUCTVERSION 0,0,4,2
+ FILEFLAGSMASK 0x17L
+#ifdef _DEBUG
+ FILEFLAGS 0x1L
+#else
+ FILEFLAGS 0x0L
+#endif
+ FILEOS 0x4L
+ FILETYPE 0x2L
+ FILESUBTYPE 0x0L
+BEGIN
+ BLOCK "StringFileInfo"
+ BEGIN
+ BLOCK "041904b0"
+ BEGIN
+ VALUE "Author", "MaD_CLuSTeR"
+ VALUE "FileDescription", "Quick Messages"
+ VALUE "FileVersion", "0.0.4.2"
+ VALUE "InternalName", "quick messages"
+ VALUE "LegalCopyright", "Copyright © 2008 Danil Mozhar"
+ VALUE "ProductVersion", "0, 0, 4, 2"
+ END
+ END
+ BLOCK "VarFileInfo"
+ BEGIN
+ VALUE "Translation", 0x419, 1200
+ END
+END
+
+#endif // Russian resources
+/////////////////////////////////////////////////////////////////////////////
+
+
+
+#ifndef APSTUDIO_INVOKED
+/////////////////////////////////////////////////////////////////////////////
+//
+// Generated from the TEXTINCLUDE 3 resource.
+//
+
+
+/////////////////////////////////////////////////////////////////////////////
+#endif // not APSTUDIO_INVOKED
+
diff --git a/QuickMessages/quickmessages.sln b/QuickMessages/quickmessages.sln
new file mode 100644
index 0000000..b5f6626
--- /dev/null
+++ b/QuickMessages/quickmessages.sln
@@ -0,0 +1,31 @@
+Microsoft Visual Studio Solution File, Format Version 9.00
+# Visual Studio 2005
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "quickmessages", "quickmessages.vcproj", "{DD76B998-ED0D-4BFD-9660-3ADC3A334872}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug Unicode Static|Win32 = Debug Unicode Static|Win32
+ Debug Unicode|Win32 = Debug Unicode|Win32
+ Debug|Win32 = Debug|Win32
+ Release Unicode|Win32 = Release Unicode|Win32
+ Release|Win32 = Release|Win32
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {DD76B998-ED0D-4BFD-9660-3ADC3A334872}.Debug Unicode Static|Win32.ActiveCfg = Debug Unicode Static|Win32
+ {DD76B998-ED0D-4BFD-9660-3ADC3A334872}.Debug Unicode Static|Win32.Build.0 = Debug Unicode Static|Win32
+ {DD76B998-ED0D-4BFD-9660-3ADC3A334872}.Debug Unicode|Win32.ActiveCfg = Unicode Debug|Win32
+ {DD76B998-ED0D-4BFD-9660-3ADC3A334872}.Debug Unicode|Win32.Build.0 = Unicode Debug|Win32
+ {DD76B998-ED0D-4BFD-9660-3ADC3A334872}.Debug|Win32.ActiveCfg = Debug|Win32
+ {DD76B998-ED0D-4BFD-9660-3ADC3A334872}.Debug|Win32.Build.0 = Debug|Win32
+ {DD76B998-ED0D-4BFD-9660-3ADC3A334872}.Release Unicode|Win32.ActiveCfg = Unicode Release|Win32
+ {DD76B998-ED0D-4BFD-9660-3ADC3A334872}.Release Unicode|Win32.Build.0 = Unicode Release|Win32
+ {DD76B998-ED0D-4BFD-9660-3ADC3A334872}.Release|Win32.ActiveCfg = Release|Win32
+ {DD76B998-ED0D-4BFD-9660-3ADC3A334872}.Release|Win32.Build.0 = Release|Win32
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ VisualSVNWorkingCopyRoot =
+ EndGlobalSection
+EndGlobal
diff --git a/QuickMessages/quickmessages.vcproj b/QuickMessages/quickmessages.vcproj
new file mode 100644
index 0000000..492d4b5
--- /dev/null
+++ b/QuickMessages/quickmessages.vcproj
@@ -0,0 +1,645 @@
+<?xml version="1.0" encoding="windows-1251"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8,00"
+ Name="quickmessages"
+ ProjectGUID="{DD76B998-ED0D-4BFD-9660-3ADC3A334872}"
+ RootNamespace="quickmessages"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory=".\Release"
+ IntermediateDirectory=".\Release"
+ ConfigurationType="2"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="false"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ PreprocessorDefinitions="NDEBUG"
+ MkTypLibCompatible="true"
+ SuppressStartupBanner="true"
+ TargetEnvironment="1"
+ TypeLibraryName=".\Release/quickmessages.tlb"
+ HeaderFileName=""
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="1"
+ InlineFunctionExpansion="2"
+ StringPooling="true"
+ RuntimeLibrary="2"
+ EnableFunctionLevelLinking="true"
+ UsePrecompiledHeader="0"
+ PrecompiledHeaderFile=".\Release/quickmessages.pch"
+ AssemblerListingLocation=".\Release/"
+ ObjectFile=".\Release/"
+ ProgramDataBaseFileName=".\Release/"
+ WarningLevel="3"
+ SuppressStartupBanner="true"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="NDEBUG"
+ Culture="1049"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="true"
+ AdditionalOptions="/filealign:0x200"
+ AdditionalDependencies="msimg32.lib"
+ OutputFile=".\$(ConfigurationName)/quickmessages.dll"
+ LinkIncremental="1"
+ SuppressStartupBanner="true"
+ ProgramDatabaseFile=".\Release/quickmessages.pdb"
+ GenerateMapFile="true"
+ MapFileName=".\Release/quickmessages.map"
+ BaseAddress="0x67100000"
+ ImportLibrary=".\Release/quickmessages.lib"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory=".\debug"
+ IntermediateDirectory=".\debug"
+ ConfigurationType="2"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="false"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ PreprocessorDefinitions="NDEBUG"
+ MkTypLibCompatible="true"
+ SuppressStartupBanner="true"
+ TargetEnvironment="1"
+ TypeLibraryName=".\release/quickmessages.tlb"
+ HeaderFileName=""
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ RuntimeLibrary="2"
+ UsePrecompiledHeader="0"
+ PrecompiledHeaderFile=".\debug/quickmessages.pch"
+ AssemblerListingLocation=".\debug/"
+ ObjectFile=".\debug/"
+ ProgramDataBaseFileName=".\debug/"
+ BrowseInformation="1"
+ WarningLevel="3"
+ SuppressStartupBanner="true"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="NDEBUG"
+ Culture="1047"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalOptions="/filealign:0x200"
+ AdditionalDependencies="msimg32.lib"
+ OutputFile="$(ConfigurationName)\quickmessages.dll"
+ LinkIncremental="1"
+ SuppressStartupBanner="true"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile=".\release/quickmessages.pdb"
+ GenerateMapFile="true"
+ MapFileName=".\debug/quickmessages.map"
+ BaseAddress="0x67100000"
+ ImportLibrary=".\release/quickmessages.lib"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Unicode Release|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="2"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="false"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ PreprocessorDefinitions="NDEBUG"
+ MkTypLibCompatible="true"
+ SuppressStartupBanner="true"
+ TargetEnvironment="1"
+ TypeLibraryName=".\Release/quickmessages.tlb"
+ HeaderFileName=""
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="1"
+ InlineFunctionExpansion="2"
+ StringPooling="true"
+ RuntimeLibrary="2"
+ EnableFunctionLevelLinking="true"
+ UsePrecompiledHeader="0"
+ PrecompiledHeaderFile=".\Release/quickmessages.pch"
+ AssemblerListingLocation=".\Release/"
+ ObjectFile=".\Release/"
+ ProgramDataBaseFileName=".\Release/"
+ WarningLevel="3"
+ SuppressStartupBanner="true"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="NDEBUG"
+ Culture="1049"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="true"
+ AdditionalOptions="/filealign:0x200"
+ AdditionalDependencies="msimg32.lib"
+ OutputFile=".\$(ConfigurationName)/quickmessages.dll"
+ LinkIncremental="1"
+ SuppressStartupBanner="true"
+ ProgramDatabaseFile=".\Release/quickmessages.pdb"
+ GenerateMapFile="true"
+ MapFileName=".\Release/quickmessages.map"
+ BaseAddress="0x67100000"
+ ImportLibrary=".\Release/quickmessages.lib"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Unicode Debug|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="2"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="false"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ PreprocessorDefinitions="NDEBUG"
+ MkTypLibCompatible="true"
+ SuppressStartupBanner="true"
+ TargetEnvironment="1"
+ TypeLibraryName=".\release/quickmessages.tlb"
+ HeaderFileName=""
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalOptions=" /D &quot;DEBUG&quot;"
+ Optimization="0"
+ RuntimeLibrary="2"
+ UsePrecompiledHeader="0"
+ PrecompiledHeaderFile=".\debug/quickmessages.pch"
+ AssemblerListingLocation=".\debug/"
+ ObjectFile=".\debug/"
+ ProgramDataBaseFileName=".\debug/"
+ BrowseInformation="1"
+ WarningLevel="3"
+ SuppressStartupBanner="true"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="NDEBUG"
+ Culture="1047"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalOptions="/filealign:0x200"
+ OutputFile="$(ConfigurationName)\quickmessages.dll"
+ LinkIncremental="1"
+ SuppressStartupBanner="true"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile=".\release/quickmessages.pdb"
+ GenerateMapFile="true"
+ MapFileName=".\debug/quickmessages.map"
+ BaseAddress="0x67100000"
+ ImportLibrary=".\release/quickmessages.lib"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug Unicode Static|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="2"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="false"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ PreprocessorDefinitions="NDEBUG"
+ MkTypLibCompatible="true"
+ SuppressStartupBanner="true"
+ TargetEnvironment="1"
+ TypeLibraryName=".\release/quickmessages.tlb"
+ HeaderFileName=""
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalOptions=" /D &quot;DEBUG&quot;"
+ Optimization="0"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
+ PrecompiledHeaderFile=".\debug/quickmessages.pch"
+ AssemblerListingLocation=".\debug/"
+ ObjectFile=".\debug/"
+ ProgramDataBaseFileName=".\debug/"
+ BrowseInformation="1"
+ WarningLevel="3"
+ SuppressStartupBanner="true"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="NDEBUG"
+ Culture="1047"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalOptions="/filealign:0x200"
+ OutputFile="$(ConfigurationName)\quickmessages.dll"
+ LinkIncremental="1"
+ SuppressStartupBanner="true"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile=".\release/quickmessages.pdb"
+ GenerateMapFile="true"
+ MapFileName=".\debug/quickmessages.map"
+ BaseAddress="0x67100000"
+ ImportLibrary=".\release/quickmessages.lib"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+ >
+ <File
+ RelativePath="main.c"
+ >
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="1"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ BrowseInformation="1"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Unicode Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="1"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Unicode Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ BrowseInformation="1"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Unicode Static|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ BrowseInformation="1"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="options.c"
+ >
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="1"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ BrowseInformation="1"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Unicode Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="1"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Unicode Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ BrowseInformation="1"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Unicode Static|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ BrowseInformation="1"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath=".\Utils.c"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl"
+ >
+ <File
+ RelativePath=".\m_msg_buttonsbar.h"
+ >
+ </File>
+ <File
+ RelativePath=".\m_updater.h"
+ >
+ </File>
+ <File
+ RelativePath=".\quickmessages.h"
+ >
+ </File>
+ <File
+ RelativePath="resource.h"
+ >
+ </File>
+ <File
+ RelativePath=".\Utils.h"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Resource Files"
+ Filter="ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+ >
+ <File
+ RelativePath=".\icons\qicon.ico"
+ >
+ </File>
+ <File
+ RelativePath=".\quickmessages.rc"
+ >
+ </File>
+ </Filter>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/QuickMessages/resource.h b/QuickMessages/resource.h
new file mode 100644
index 0000000..9facd53
--- /dev/null
+++ b/QuickMessages/resource.h
@@ -0,0 +1,47 @@
+//{{NO_DEPENDENCIES}}
+// Microsoft Visual C++ generated include file.
+// Used by quickmessages.rc
+//
+#define IDD_OPTIONS 101
+#define IDI_QICON 102
+#define IDC_BUTTONSLIST 104
+#define IDC_BLISTADD 105
+#define IDC_BLISTREMOVE 106
+#define IDC_MENUTREE 107
+#define IDC_MTREEADD 108
+#define IDC_MTREEREMOVE 109
+#define IDC_MENUVALUE 110
+#define IDC_RCLICKVALUE 111
+#define IDD_HELPDIALOG 112
+#define IDC_BUTTONNAME 1076
+#define IDC_MENUNAME 1077
+#define IDC_LAUTOSEND 1079
+#define IDC_RAUTOSEND 1080
+#define IDC_INQMENU 1081
+#define IDC_RAUTOSEND2 1082
+#define IDC_ENABLEQUICKMENU 1082
+#define IDC_ISSERVNAME 1083
+#define IDC_WARNING 1084
+#define IDC_VARHELP 1085
+#define IDC_VARTEXT 1086
+#define IDC_ISSERVNAME2 1086
+#define IDC_VARCLIP 1087
+#define IDC_VARPUNAME 1088
+#define IDC_VARPLNAME 1089
+#define IDC_VARCNAME 1090
+#define IDC_STATICTITLE 1091
+#define IDC_STATICTITLE2 1092
+#define IDC_VARCFNAME 1093
+#define IDC_VARCLNAME 1094
+#define IDC_STATIC -1
+
+// Next default values for new objects
+//
+#ifdef APSTUDIO_INVOKED
+#ifndef APSTUDIO_READONLY_SYMBOLS
+#define _APS_NEXT_RESOURCE_VALUE 113
+#define _APS_NEXT_COMMAND_VALUE 40015
+#define _APS_NEXT_CONTROL_VALUE 1092
+#define _APS_NEXT_SYMED_VALUE 1125
+#endif
+#endif
diff --git a/wbOSD/buildnumber.h b/wbOSD/buildnumber.h
new file mode 100644
index 0000000..b777277
--- /dev/null
+++ b/wbOSD/buildnumber.h
@@ -0,0 +1,6 @@
+#ifndef _BUILDNUMBER_
+#define BUILDNUMBER 0
+#define __FILEVERSION_STRING 0,2,1,0
+#define __VERSION_STRING "0.2.1.0"
+#define __VERSION_DWORD 0x20100
+#endif //_BUILDNUMBER_
diff --git a/wbOSD/events.cpp b/wbOSD/events.cpp
new file mode 100644
index 0000000..34dd361
--- /dev/null
+++ b/wbOSD/events.cpp
@@ -0,0 +1,218 @@
+/*
+Wannabe OSD
+This plugin tries to become miranda's standard OSD ;-)
+
+(C) 2005 Andrej Krutak
+
+Distributed under GNU's GPL 2 or later
+*/
+
+#include "wbOSD.h"
+#include <m_message.h>
+
+extern HWND hwnd;
+extern HANDLE hHookContactStatusChanged;
+
+void logmsg2(char *str)
+{
+ FILE *f=fopen("c:\\logm.txt", "a");
+ fprintf(f, "%s\n", str);
+ fclose(f);
+}
+
+void showmsgwnd(unsigned int param)
+{
+ logmsg("showmsgwnd");
+ if (DBGetContactSettingByte(NULL,THIS_MODULE, "showMessageWindow", DEFAULT_SHOWMSGWIN))
+ CallService(MS_MSG_SENDMESSAGE, (WPARAM)param, 0);
+}
+
+LRESULT ShowOSD(TCHAR *str, int timeout, COLORREF color, HANDLE user)
+{
+ osdmsg om;
+
+ logmsg("ShowOSD");
+
+ if (!hwnd)
+ return 0;
+
+ if (timeout==0)
+ timeout=DBGetContactSettingDword(NULL,THIS_MODULE, "timeout", DEFAULT_TIMEOUT);
+ om.text=str;
+ om.timeout=timeout;
+ om.color=color;
+ om.param=(unsigned int)user;
+ om.callback=showmsgwnd;
+
+ return SendMessage(hwnd, WM_USER+4, (WPARAM)&om, 0);
+}
+
+int ProtoAck(WPARAM wparam,LPARAM lparam)
+{
+ ACKDATA *ack=(ACKDATA *)lparam;
+
+ logmsg("ProtoAck");
+
+ if (!DBGetContactSettingByte(NULL,THIS_MODULE, "a_user", DEFAULT_ANNOUNCESTATUS))
+ return 0;
+
+ if (!(DBGetContactSettingDword(NULL,THIS_MODULE,"showWhen", DEFAULT_SHOWWHEN)&(1<<(DBGetContactSettingWord(NULL, "CList", "Status", ID_STATUS_OFFLINE)-ID_STATUS_OFFLINE))))
+ return 0;
+
+ if ( ack->type == ACKTYPE_STATUS ) {
+ if (!DBGetContactSettingByte(NULL,THIS_MODULE, "showMyStatus", DEFAULT_SHOWMYSTATUS))
+ return 0;
+
+ if ( ack->result == ACKRESULT_SUCCESS && (LPARAM)ack->hProcess != ack->lParam ) {
+ DWORD ann = DBGetContactSettingDword( NULL, THIS_MODULE, "announce", DEFAULT_ANNOUNCE );
+ if ( ann & ( 1 << ( ack->lParam - ID_STATUS_OFFLINE ))) {
+ TCHAR* ptszName = (TCHAR*)CallService(MS_CLIST_GETCONTACTDISPLAYNAME, (WPARAM)ack->hContact, GCDNF_TCHAR);
+ TCHAR buffer[512];
+ mir_sntprintf(buffer, SIZEOF(buffer), TranslateT("%s is %s"), ptszName, TranslateTS(statusValues[ack->lParam-ID_STATUS_OFFLINE].szDescr));
+ ShowOSD(buffer, 0, DBGetContactSettingDword(NULL,THIS_MODULE, "clr_status", DEFAULT_CLRSTATUS), ack->hContact);
+ } } }
+
+ return 0;
+}
+
+int ContactSettingChanged(WPARAM wParam,LPARAM lParam)
+{
+ DBCONTACTWRITESETTING *cws=(DBCONTACTWRITESETTING*)lParam;
+ WORD newStatus = 0,oldStatus = 0;
+ DWORD dwStatuses = 0;
+
+ logmsg("ContactSettingChanged1");
+
+ if((HANDLE)wParam==NULL || lstrcmpA(cws->szSetting,"Status")) return 0;
+
+ newStatus = cws->value.wVal;
+ oldStatus = DBGetContactSettingRangedWord((HANDLE)wParam,"UserOnline","OldStatus2",ID_STATUS_OFFLINE, ID_STATUS_MIN, ID_STATUS_MAX);
+
+ if (oldStatus == newStatus) return 0;
+
+ logmsg("ContactSettingChanged2");
+
+ DBWriteContactSettingWord((HANDLE)wParam,"UserOnline","OldStatus2",(WORD)newStatus);
+
+ if(CallService(MS_IGNORE_ISIGNORED,wParam,IGNOREEVENT_USERONLINE)) return 0;
+
+ dwStatuses = MAKELPARAM(oldStatus, newStatus);
+ NotifyEventHooks(hHookContactStatusChanged, (WPARAM)wParam, (LPARAM)dwStatuses);
+
+ return 0;
+}
+
+int ContactStatusChanged(WPARAM wParam, LPARAM lParam)
+{
+ WORD oldStatus = LOWORD(lParam);
+ WORD newStatus = HIWORD(lParam);
+ DWORD ann=DBGetContactSettingDword(NULL,THIS_MODULE,"announce", DEFAULT_ANNOUNCE);
+ char buffer[512];
+#if defined(_UNICODE)
+ wchar_t bufferW[512];
+#endif
+
+ logmsg("ContactStatusChanged1");
+
+ if (!DBGetContactSettingByte(NULL,THIS_MODULE, "a_user", DEFAULT_ANNOUNCESTATUS))
+ return 0;
+
+ if (!(DBGetContactSettingDword(NULL,THIS_MODULE,"showWhen", DEFAULT_SHOWWHEN)&(1<<(DBGetContactSettingWord(NULL, "CList", "Status", ID_STATUS_OFFLINE)-ID_STATUS_OFFLINE))))
+ return 0;
+
+ if (!(ann&(1<<(newStatus-ID_STATUS_OFFLINE))) )
+ return 0;
+
+ logmsg("ContactStatusChanged2");
+
+ if (DBGetContactSettingByte((HANDLE)wParam,"CList","NotOnList",0) ||
+ DBGetContactSettingByte((HANDLE)wParam,"CList","Hidden",0) ||
+ (CallService(MS_IGNORE_ISIGNORED,wParam,IGNOREEVENT_USERONLINE) && newStatus==ID_STATUS_ONLINE)
+ )
+ return 0;
+
+ mir_snprintf(buffer, sizeof(buffer), Translate("%s is %s"), (char*)CallService(MS_CLIST_GETCONTACTDISPLAYNAME, wParam, 0), Translate(statusValues[newStatus-ID_STATUS_OFFLINE].szDescr));
+#if defined(_UNICODE)
+ MultiByteToWideChar(CP_ACP, 0, buffer, -1, bufferW, 511);
+ bufferW[511] = 0;
+ ShowOSD(bufferW, 0, DBGetContactSettingDword(NULL,THIS_MODULE, "clr_status", DEFAULT_CLRSTATUS), (HANDLE)wParam);
+#else
+ ShowOSD(buffer, 0, DBGetContactSettingDword(NULL,THIS_MODULE, "clr_status", DEFAULT_CLRSTATUS), (HANDLE)wParam);
+#endif
+ return 0;
+}
+
+int HookedNewEvent(WPARAM wParam, LPARAM lParam)
+{
+ logmsg("HookedNewEvent1");
+
+ DBEVENTINFO dbe;
+ dbe.cbSize = sizeof(dbe);
+ dbe.cbBlob = CallService(MS_DB_EVENT_GETBLOBSIZE, (WPARAM) lParam, 0);
+ if (dbe.cbBlob == -1)
+ return 0;
+
+ dbe.pBlob = (PBYTE) malloc(dbe.cbBlob);
+ CallService(MS_DB_EVENT_GET, (WPARAM)lParam, (LPARAM)&dbe);
+
+ if (dbe.flags & DBEF_SENT || dbe.eventType == 25368)
+ return 0;
+
+ if (DBGetContactSettingByte(NULL,THIS_MODULE, "messages", DEFAULT_ANNOUNCEMESSAGES)==0)
+ return 0;
+
+ if (!(DBGetContactSettingDword(NULL,THIS_MODULE,"showWhen", DEFAULT_SHOWWHEN)&(1<<(DBGetContactSettingWord(NULL, "CList", "Status", ID_STATUS_OFFLINE)-ID_STATUS_OFFLINE))))
+ return 0;
+
+ logmsg("HookedNewEvent2");
+
+ TCHAR buf[512];
+ _tcscpy(buf, DEFAULT_MESSAGEFORMAT);
+
+ DBVARIANT dbv;
+ if(!DBGetContactSettingTString(NULL,THIS_MODULE,"message_format",&dbv)) {
+ _tcscpy(buf, dbv.ptszVal);
+ DBFreeVariant(&dbv);
+ }
+
+ int i1=-1, i2=-1;
+ TCHAR* pbuf = buf;
+ while (*pbuf) {
+ if (*pbuf=='%') {
+ if (*(pbuf+1)=='n') {
+ if (i1==-1)
+ i1=1;
+ else i2=1;
+ *(pbuf+1)='s';
+ } else if (*(pbuf+1)=='m') {
+ if (i1==-1)
+ i1=2;
+ else i2=2;
+ *(pbuf+1)='s';
+ } else if (*(pbuf+1)=='l') {
+ *pbuf=0x0d;
+ *(pbuf+1)=0x0a;
+ }
+ }
+ pbuf++;
+ }
+
+ TCHAR *c1 = 0, *c2 = 0;
+ if ( i1 == 1 )
+ c1 = mir_tstrdup(( TCHAR* )CallService(MS_CLIST_GETCONTACTDISPLAYNAME, wParam, GCDNF_TCHAR));
+ else if ( i1 == 2 )
+ c1 = DbGetEventTextT( &dbe, 0 );
+
+ if ( i2 == 1 )
+ c2 = mir_tstrdup(( TCHAR* )CallService(MS_CLIST_GETCONTACTDISPLAYNAME, wParam, GCDNF_TCHAR));
+ else if ( i2 == 2 )
+ c2 = DbGetEventTextT( &dbe, 0 );
+
+ TCHAR buffer[512];
+ mir_sntprintf(buffer, SIZEOF(buffer), buf, c1, c2);
+ ShowOSD(buffer, 0, DBGetContactSettingDword(NULL,THIS_MODULE, "clr_msg", DEFAULT_CLRMSG), (HANDLE)wParam);
+
+ mir_free( c1 );
+ mir_free( c2 );
+ return 0;
+}
diff --git a/wbOSD/lpgen.pl b/wbOSD/lpgen.pl
new file mode 100644
index 0000000..6593868
--- /dev/null
+++ b/wbOSD/lpgen.pl
@@ -0,0 +1,212 @@
+#!/usr/bin/perl
+
+use POSIX;
+use File::Find;
+use strict;
+
+my $rootdir = '';
+my %hash = ();
+my $clines = 0;
+
+my $version = '0.7svn';
+my $time = localtime();
+
+if (@ARGV && $ARGV[0] eq "version") {
+ shift @ARGV;
+ # 1st arg version major i.e. 07 for "0.7"
+ if (@ARGV) {
+ my $vermaj = shift @ARGV;
+ if ($vermaj =~ /^([0-9]*)([0-9])$/) {
+ if ($1 eq "") {
+ $version = $2;
+ } else {
+ $version = "$1.$2";
+ }
+ } else {
+ $version = $vermaj;
+ }
+ }
+ # 2nd arg version minor i.e. 1 for "0.7.1"
+ if (@ARGV) {
+ my $vermin = shift @ARGV;
+ if ($vermin =~ /^[0-9]+$/) {
+ $version .= ".$vermin";
+ } else {
+ $version .= $vermin;
+ }
+ }
+ # 3rd arg build number i.e. 36 for "0.7.1 build 36"
+ if (@ARGV) {
+ my $build = shift @ARGV;
+ if ($build =~ /^[0-9]+$/) {
+ $version .= " build $build";
+ } else {
+ $version .= $build;
+ }
+ }
+}
+
+#Language Files
+if (!@ARGV) {
+ create_langfile(
+ '../../miranda',
+ '../../miranda/i18n/langpack_english.txt',
+ 'English (US)', '0809',
+ 'Miranda IM Development Team',
+ 'project-info@miranda-im.org',
+ 'Scriver,avs,chat,clist,clist_nicer,db3x,db3x_mmap,dbrw,advaimg,import,modernb,mwclist,png2dib,srmm,tabsrmm,AimOscar,Gadu-Gadu,IRC,IcqOscarJ,JabberG,MSN,Yahoo');
+}
+elsif ($ARGV[0] eq "core") {
+ create_langfile('../../miranda/src',
+ '../../miranda/i18n/core-translation.txt',
+ 'English (US)', '0809',
+ 'Miranda IM Development Team',
+ 'project-info@miranda-im.org');
+}
+elsif ($ARGV[0] eq "srmm") {
+ create_langfile('../../miranda/plugins/SRMM/',
+ '../../miranda/plugins/SRMM/Docs/srmm-translation.txt',
+ 'English (US)', '0809',
+ 'Miranda IM Development Team',
+ 'project-info@miranda-im.org');
+}
+elsif ($ARGV[0] eq "import") {
+ create_langfile('../../miranda/plugins/Import/',
+ '../../miranda/plugins/Import/docs/import-translation.txt',
+ 'English (US)', '0809',
+ 'Miranda IM Development Team',
+ 'project-info@miranda-im.org');
+}
+elsif ($ARGV[0] eq "wbOSD") {
+ create_langfile('./',
+ 'wbOSD-translation.txt',
+ 'English (US)', '0809',
+ 'Andrej Krutak',
+ 'andree182 {at} gmail (dot) com');
+}
+else {
+ print "Error: Unknown module $ARGV[0]\n";
+ exit 1;
+}
+
+sub create_langfile {
+ $rootdir = shift(@_);
+ my $outfile = shift(@_);
+ my $lang = shift(@_);
+ my $locale = shift(@_);
+ my $author = shift(@_);
+ my $email = shift(@_);
+ my $plugins = @_ ? shift(@_) : '';
+ %hash = ();
+ my %common = ();
+ $clines = 0;
+ print "Building language file for $rootdir:\n";
+ find({ wanted => \&csearch, preprocess => \&pre_dir }, $rootdir);
+ find({ wanted => \&rcsearch, preprocess => \&pre_dir }, $rootdir);
+ open(WRITE, "> $outfile") or die;
+ print WRITE <<HEADER;
+Miranda Language Pack Version 1
+Locale: $locale
+Authors: $author
+Author-email: $email
+Last-Modified-Using: Miranda IM $version
+Plugins-included: $plugins
+; Generated by lpgen on $time
+; Translations: $clines
+
+HEADER
+ foreach my $trans (keys %hash) {
+ if ($hash{$trans} =~ /^\d+$/) {
+ $common{$trans} = $hash{$trans};
+ delete $hash{$trans};
+ }
+ }
+
+ my @sorted = sort { (floor($common{$b}/20) == floor($common{$a}/20)) ? ($a cmp $b) : ($common{$b} <=> $common{$a}) } keys %common;
+ print WRITE "; Common strings that belong to many files\n;[";
+ print WRITE join "]\n;[", @sorted;
+ print WRITE "]\n";
+
+ my $file = '';
+ foreach my $trans (sort { ($hash{$a} eq $hash{$b}) ? ($a cmp $b) : ($hash{$a} cmp $hash{$b}) } keys %hash) {
+ if ($hash{$trans} ne $file) {
+ $file = $hash{$trans};
+ print WRITE "\n; $file\n";
+ }
+ print WRITE ";[$trans]\n";
+ }
+
+ close(WRITE);
+ print " $outfile is complete ($clines)\n\n";
+}
+
+sub pre_dir {
+ # avoid parsing some ext SDKs
+ my @files = ();
+ return @files if (
+ $File::Find::name =~/..\/extplugins/ or
+ $File::Find::name =~/freeimage\/Source/ or
+ $File::Find::name =~/dbrw\/sqlite3/);
+ @files = grep { not /^\.\.?$/ } @_;
+ return sort @files;
+}
+
+sub append_str {
+ my $str = shift(@_);
+ my $found = shift(@_);
+ $str = substr($str, 1, length($str) - 2);
+ if (length($str) gt 0 and $str ne "List1" and $str ne "Tree1" and $str =~ /[a-zA-Z]+/g) {
+ my $path = $File::Find::name;
+ $path =~ s/(\.\.\/)+miranda\///;
+ if (!$hash{$str}) {
+ $hash{$str} = $path;
+ $clines ++;
+ return 1;
+ } elsif ($hash{$str} ne $path) {
+ if ($hash{$str} =~ /^\d+$/) {
+ $hash{$str} ++;
+ } else {
+ $hash{$str} = 1;
+ }
+ }
+ }
+ return 0;
+}
+
+sub csearch {
+ if (-f $_ and ($_ =~ m/\.c(pp)?$/i or $_ =~ m/\.h(pp)?$/i)) {
+ my $found = 0;
+ my $file = $_;
+ print " Processing $_ ";
+ open(READ, "< $_") or return;
+ my $all = '';
+ while (my $lines = <READ>) {
+ $all = $all.$lines;
+ }
+ close(READ);
+ $_ = $all;
+ while (/(?:Button_SetIcon_IcoLib|Translate[A-Z]{0,2}|LPGENT?|ICQTranslateUtfStatic)\s*\(\s*(\".*?\")\s*[,\)]/g) {
+ $found += append_str($1, $found);
+ }
+ print "($found)\n";
+ }
+}
+
+sub rcsearch {
+ if ( -f $_ and $_ =~ m/\.rc$/i) {
+ my $found = 0;
+ my $file = $_;
+ print " Processing $_ ";
+ open(READ, "< $_") or return;
+ my $all = '';
+ while (my $lines = <READ>) {
+ $all = $all.$lines;
+ }
+ close(READ);
+ $_ = $all;
+ while (/\s*(?:CONTROL|(?:DEF)?PUSHBUTTON|[LRC]TEXT|GROUPBOX|CAPTION|MENUITEM|POPUP)\s*(\".*?\")/g) {
+ $found += append_str($1, $found);
+ }
+ print "($found)\n";
+ }
+}
diff --git a/wbOSD/main.cpp b/wbOSD/main.cpp
new file mode 100644
index 0000000..4a888dd
--- /dev/null
+++ b/wbOSD/main.cpp
@@ -0,0 +1,105 @@
+/*
+Wannabe OSD
+This plugin tries to become miranda's standard OSD ;-)
+
+(C) 2005 Andrej Krutak
+
+Distributed under GNU's GPL 2 or later
+*/
+
+#include "wbOSD.h"
+#include "buildnumber.h"
+
+HINSTANCE hI;
+MM_INTERFACE mmi;
+
+HWND hwnd=0;
+HANDLE hservosda;
+PLUGINLINK *pluginLink;
+HANDLE hHookedNewEvent, hHookedInit, hProtoAck, hContactSettingChanged, hHookContactStatusChanged, hContactStatusChanged, hpluginShutDown;
+HINSTANCE hUser32;
+BOOL (WINAPI*pSetLayeredWindowAttributes)(HWND, COLORREF, BYTE, DWORD);
+
+void logmsg2(char *str);
+int MainInit(WPARAM wparam,LPARAM lparam);
+
+/////////////////////////////////////////////////////////////////////////////////////////
+
+extern "C" int __declspec(dllexport)Load(PLUGINLINK *link)
+{
+ pluginLink=link;
+ mir_getMMI( &mmi );
+
+ logmsg("Load");
+ pSetLayeredWindowAttributes=0;
+
+#ifndef FORCE_9XDRAWING
+ hUser32=LoadLibraryA("user32.dll");
+#else
+ hUser32=0;
+#endif
+
+ if (hUser32) {
+ pSetLayeredWindowAttributes=(BOOL(WINAPI*)(HWND, COLORREF, BYTE, DWORD))GetProcAddress(hUser32, "SetLayeredWindowAttributes");
+ if (!pSetLayeredWindowAttributes) {
+ FreeLibrary(hUser32);
+ hUser32=0;
+ }
+ }
+
+ hHookedInit = HookEvent(ME_SYSTEM_MODULESLOADED, MainInit);
+ return 0;
+}
+
+/////////////////////////////////////////////////////////////////////////////////////////
+
+extern "C" __declspec(dllexport) int Unload(void)
+{
+ logmsg("Unload");
+ UnhookEvent(hpluginShutDown);
+ UnhookEvent(hProtoAck);
+ UnhookEvent(hContactSettingChanged);
+ UnhookEvent(hContactStatusChanged);
+ UnhookEvent(hHookedNewEvent);
+ UnhookEvent(hHookedInit);
+
+ if (hUser32)
+ FreeLibrary(hUser32);
+ pSetLayeredWindowAttributes=0;
+
+ DestroyServiceFunction(hservosda);
+ DestroyHookableEvent(hHookContactStatusChanged);
+ return 0;
+}
+
+/////////////////////////////////////////////////////////////////////////////////////////
+
+static PLUGININFO pluginInfo={
+ sizeof(PLUGININFO),
+ #ifdef UNICODE
+ "WannaBe OSD (Unicode)",
+ #else
+ "WannaBe OSD",
+ #endif
+ __VERSION_DWORD,
+ "Show new message/status change info using onscreen display",
+ "Andrej Krutak",
+ "andree182 {at} gmail (dot) com",
+ "©2005 Andrej Krutak",
+ "http://urtax.ms.mff.cuni.cz/~andree/",
+ UNICODE_AWARE,
+ 0
+};
+
+extern "C" __declspec(dllexport) PLUGININFO* MirandaPluginInfo(DWORD mirandaVersion)
+{
+ return &pluginInfo;
+}
+
+/////////////////////////////////////////////////////////////////////////////////////////
+
+BOOL WINAPI DllMain(HINSTANCE hinst,DWORD fdwReason,LPVOID lpvReserved)
+{
+ hI = hinst;
+ return 1;
+}
diff --git a/wbOSD/options.cpp b/wbOSD/options.cpp
new file mode 100644
index 0000000..16106c8
--- /dev/null
+++ b/wbOSD/options.cpp
@@ -0,0 +1,426 @@
+/*
+Wannabe OSD
+This plugin tries to become miranda's standard OSD ;-)
+
+(C) 2005 Andrej Krutak
+
+Distributed under GNU's GPL 2 or later
+*/
+
+#include "wbOSD.h"
+
+COLORREF pencustcolors[16];
+
+const static osdmsg defstr={_T(""), 0, RGB(0, 0, 0), 0, 0};
+
+void FillCheckBoxTree(HWND hwndTree,const struct CheckBoxValues_t *values,int nValues,DWORD style)
+{
+ logmsg("FillCheckBoxTree");
+
+ TVINSERTSTRUCT tvis;
+ tvis.hParent = NULL;
+ tvis.hInsertAfter = TVI_LAST;
+ tvis.item.mask = TVIF_PARAM|TVIF_TEXT|TVIF_STATE;
+ for ( int i=0; i < nValues; i++ ) {
+ tvis.item.lParam = values[i].style - ID_STATUS_OFFLINE;
+ tvis.item.pszText = TranslateTS( values[i].szDescr );
+ tvis.item.stateMask = TVIS_STATEIMAGEMASK;
+ tvis.item.state = INDEXTOSTATEIMAGEMASK(( style & ( 1 << tvis.item.lParam )) != 0 ? 2 : 1 );
+ TreeView_InsertItem( hwndTree, &tvis );
+ }
+}
+
+DWORD MakeCheckBoxTreeFlags(HWND hwndTree)
+{
+ DWORD flags=0;
+ TVITEM tvi;
+
+ logmsg("MakeCheckBoxTreeFlags");
+
+ tvi.mask=TVIF_HANDLE|TVIF_PARAM|TVIF_STATE;
+ tvi.hItem=TreeView_GetRoot(hwndTree);
+ while(tvi.hItem) {
+ TreeView_GetItem(hwndTree,&tvi);
+ if(((tvi.state&TVIS_STATEIMAGEMASK)>>12==2)) flags|=1<<tvi.lParam;
+ tvi.hItem=TreeView_GetNextSibling(hwndTree,tvi.hItem);
+ }
+ return flags;
+}
+
+int selectColor(HWND hwnd, COLORREF *clr)
+{
+ CHOOSECOLOR cc;
+
+ logmsg("SelectColor");
+
+ cc.lStructSize = sizeof(cc);
+ cc.hwndOwner = hwnd;
+ cc.hInstance = (HWND)hI;
+ cc.rgbResult = *clr;
+ cc.lpCustColors = pencustcolors;
+ cc.Flags = CC_FULLOPEN|CC_RGBINIT;
+ if (!ChooseColor(&cc))
+ return 1;
+
+ *clr=cc.rgbResult;
+ return 0;
+}
+
+int selectFont(HWND hDlg, LOGFONTA *lf)
+{
+ CHOOSEFONTA cf;
+ HDC hDC;
+ COLORREF color=RGB(0, 0, 0);
+
+ logmsg("SelectFont");
+
+ ZeroMemory(&cf, sizeof(CHOOSEFONT));
+ hDC = GetDC(hDlg);
+ cf.lStructSize = sizeof(cf);
+ cf.hwndOwner = hDlg;
+ cf.hDC = hDC;
+ cf.lpLogFont = lf;
+ cf.rgbColors = 0;
+ cf.Flags = CF_INITTOLOGFONTSTRUCT | CF_EFFECTS | CF_BOTH | CF_FORCEFONTEXIST;
+ cf.nFontType = 0;
+ cf.rgbColors=color;
+
+ if (!ChooseFontA(&cf)) {
+ if (cf.hDC)
+ DeleteDC(cf.hDC);
+
+ ReleaseDC(hDlg, hDC);
+ return 1;
+ }
+
+ if (cf.hDC)
+ DeleteDC(cf.hDC);
+
+ ReleaseDC(hDlg, hDC);
+ return 0;
+}
+
+void loadDBSettings(plgsettings *ps)
+{
+ DBVARIANT dbv;
+
+ logmsg("loadDBSettings");
+
+ ps->align=DBGetContactSettingByte(NULL,THIS_MODULE, "align", DEFAULT_ALIGN);
+ ps->salign=DBGetContactSettingByte(NULL,THIS_MODULE, "salign", DEFAULT_SALIGN);
+ ps->altShadow=DBGetContactSettingByte(NULL,THIS_MODULE, "altShadow", DEFAULT_ALTSHADOW);
+ ps->transparent=DBGetContactSettingByte(NULL,THIS_MODULE, "transparent", DEFAULT_TRANPARENT);
+ ps->showShadow=DBGetContactSettingByte(NULL,THIS_MODULE, "showShadow", DEFAULT_SHOWSHADOW);
+ ps->messages=DBGetContactSettingByte(NULL,THIS_MODULE, "messages", DEFAULT_ANNOUNCEMESSAGES);
+ ps->a_user=DBGetContactSettingByte(NULL,THIS_MODULE, "a_user", DEFAULT_ANNOUNCESTATUS);
+ ps->distance=DBGetContactSettingByte(NULL,THIS_MODULE, "distance", DEFAULT_DISTANCE);
+ ps->winx=DBGetContactSettingDword(NULL,THIS_MODULE, "winx", DEFAULT_WINX);
+ ps->winy=DBGetContactSettingDword(NULL,THIS_MODULE, "winy", DEFAULT_WINY);
+ ps->winxpos=DBGetContactSettingDword(NULL,THIS_MODULE, "winxpos", DEFAULT_WINXPOS);
+ ps->winypos=DBGetContactSettingDword(NULL,THIS_MODULE, "winypos", DEFAULT_WINYPOS);
+ ps->alpha=DBGetContactSettingByte(NULL,THIS_MODULE, "alpha", DEFAULT_ALPHA);
+ ps->showmystatus=DBGetContactSettingByte(NULL,THIS_MODULE, "showMyStatus", DEFAULT_SHOWMYSTATUS);
+ ps->timeout=DBGetContactSettingDword(NULL,THIS_MODULE, "timeout", DEFAULT_TIMEOUT);
+ ps->clr_msg=DBGetContactSettingDword(NULL,THIS_MODULE, "clr_msg", DEFAULT_CLRMSG);
+ ps->clr_status=DBGetContactSettingDword(NULL,THIS_MODULE, "clr_status", DEFAULT_CLRSTATUS);
+ ps->clr_shadow=DBGetContactSettingDword(NULL,THIS_MODULE, "clr_shadow", DEFAULT_CLRSHADOW);
+ ps->bkclr=DBGetContactSettingDword(NULL,THIS_MODULE, "bkclr", DEFAULT_BKCLR);
+
+ ps->showMsgWindow=DBGetContactSettingByte(NULL,THIS_MODULE, "showMessageWindow", DEFAULT_SHOWMSGWIN);
+ ps->showWhen=DBGetContactSettingDword(NULL,THIS_MODULE,"showWhen", DEFAULT_SHOWWHEN);
+
+ _tcscpy(ps->msgformat, DEFAULT_MESSAGEFORMAT);
+ if ( !DBGetContactSettingTString( NULL, THIS_MODULE, "message_format", &dbv )) {
+ _tcscpy(ps->msgformat, dbv.ptszVal);
+ DBFreeVariant(&dbv);
+ }
+
+ ps->announce=DBGetContactSettingDword(NULL,THIS_MODULE,"announce", DEFAULT_ANNOUNCE);
+
+ ps->lf.lfHeight=DBGetContactSettingDword(NULL,THIS_MODULE, "fntHeight", DEFAULT_FNT_HEIGHT);
+ ps->lf.lfWidth=DBGetContactSettingDword(NULL,THIS_MODULE, "fntWidth", DEFAULT_FNT_WIDTH);
+ ps->lf.lfEscapement=DBGetContactSettingDword(NULL,THIS_MODULE, "fntEscapement", DEFAULT_FNT_ESCAPEMENT);
+ ps->lf.lfOrientation=DBGetContactSettingDword(NULL,THIS_MODULE, "fntOrientation", DEFAULT_FNT_ORIENTATION);
+ ps->lf.lfWeight=DBGetContactSettingDword(NULL,THIS_MODULE, "fntWeight", DEFAULT_FNT_WEIGHT);
+ ps->lf.lfItalic=DBGetContactSettingByte(NULL,THIS_MODULE, "fntItalic", DEFAULT_FNT_ITALIC);
+ ps->lf.lfUnderline=DBGetContactSettingByte(NULL,THIS_MODULE, "fntUnderline", DEFAULT_FNT_UNDERLINE);
+ ps->lf.lfStrikeOut=DBGetContactSettingByte(NULL,THIS_MODULE, "fntStrikeout", DEFAULT_FNT_STRIKEOUT);
+ ps->lf.lfCharSet=DBGetContactSettingByte(NULL,THIS_MODULE, "fntCharSet", DEFAULT_FNT_CHARSET);
+ ps->lf.lfOutPrecision=DBGetContactSettingByte(NULL,THIS_MODULE, "fntOutPrecision", DEFAULT_FNT_OUTPRECISION);
+ ps->lf.lfClipPrecision=DBGetContactSettingByte(NULL,THIS_MODULE, "fntClipPrecision", DEFAULT_FNT_CLIPRECISION);
+ ps->lf.lfQuality=DBGetContactSettingByte(NULL,THIS_MODULE, "fntQuality", DEFAULT_FNT_QUALITY);
+ ps->lf.lfPitchAndFamily=DBGetContactSettingByte(NULL,THIS_MODULE, "fntPitchAndFamily", DEFAULT_FNT_PITCHANDFAM);
+ strcpy(ps->lf.lfFaceName, DEFAULT_FNT_FACENAME);
+ if(!DBGetContactSetting(NULL,THIS_MODULE,"fntFaceName",&dbv)) {
+ strcpy(ps->lf.lfFaceName, dbv.pszVal);
+ DBFreeVariant(&dbv);
+ }
+}
+
+void saveDBSettings(plgsettings *ps)
+{
+ logmsg("saveDBSettings");
+
+ DBWriteContactSettingByte(NULL,THIS_MODULE,"showShadow", ps->showShadow);
+ DBWriteContactSettingByte(NULL,THIS_MODULE,"altShadow",ps->altShadow);
+ DBWriteContactSettingByte(NULL,THIS_MODULE,"distance",ps->distance);
+
+ DBWriteContactSettingDword(NULL,THIS_MODULE,"winx",ps->winx);
+ DBWriteContactSettingDword(NULL,THIS_MODULE,"winy",ps->winy);
+ DBWriteContactSettingDword(NULL,THIS_MODULE,"winxpos", ps->winxpos);
+ DBWriteContactSettingDword(NULL,THIS_MODULE,"winypos", ps->winypos);
+
+ DBWriteContactSettingByte(NULL,THIS_MODULE,"alpha",ps->alpha);
+ DBWriteContactSettingDword(NULL,THIS_MODULE,"timeout", ps->timeout);
+
+ DBWriteContactSettingByte(NULL,THIS_MODULE,"transparent",ps->transparent);
+ DBWriteContactSettingByte(NULL,THIS_MODULE,"messages",ps->messages);
+ DBWriteContactSettingByte(NULL,THIS_MODULE,"a_user",ps->a_user);
+ DBWriteContactSettingTString(NULL,THIS_MODULE, "message_format", ps->msgformat);
+
+ DBWriteContactSettingByte(NULL,THIS_MODULE,"align",ps->align);
+ DBWriteContactSettingByte(NULL,THIS_MODULE,"salign",ps->salign);
+
+ DBWriteContactSettingByte(NULL,THIS_MODULE,"showMyStatus",ps->showmystatus);
+
+ DBWriteContactSettingDword(NULL,THIS_MODULE,"clr_msg", ps->clr_msg);
+ DBWriteContactSettingDword(NULL,THIS_MODULE,"clr_shadow", ps->clr_shadow);
+ DBWriteContactSettingDword(NULL,THIS_MODULE,"clr_status", ps->clr_status);
+ DBWriteContactSettingDword(NULL,THIS_MODULE,"bkclr", ps->bkclr);
+
+ DBWriteContactSettingDword(NULL,THIS_MODULE, "fntHeight", ps->lf.lfHeight);
+ DBWriteContactSettingDword(NULL,THIS_MODULE, "fntWidth", ps->lf.lfWidth);
+ DBWriteContactSettingDword(NULL,THIS_MODULE, "fntEscapement", ps->lf.lfEscapement);
+ DBWriteContactSettingDword(NULL,THIS_MODULE, "fntOrientation", ps->lf.lfOrientation);
+ DBWriteContactSettingDword(NULL,THIS_MODULE, "fntWeight", ps->lf.lfWeight);
+ DBWriteContactSettingByte(NULL,THIS_MODULE, "fntItalic", ps->lf.lfItalic);
+ DBWriteContactSettingByte(NULL,THIS_MODULE, "fntUnderline", ps->lf.lfUnderline);
+ DBWriteContactSettingByte(NULL,THIS_MODULE, "fntStrikeout", ps->lf.lfStrikeOut);
+ DBWriteContactSettingByte(NULL,THIS_MODULE, "fntCharSet", ps->lf.lfCharSet);
+ DBWriteContactSettingByte(NULL,THIS_MODULE, "fntOutPrecision", ps->lf.lfOutPrecision);
+ DBWriteContactSettingByte(NULL,THIS_MODULE, "fntClipPrecision", ps->lf.lfClipPrecision);
+ DBWriteContactSettingByte(NULL,THIS_MODULE, "fntQuality", ps->lf.lfQuality);
+ DBWriteContactSettingByte(NULL,THIS_MODULE, "fntPitchAndFamily", ps->lf.lfPitchAndFamily);
+ DBWriteContactSettingString(NULL,THIS_MODULE, "fntFaceName", ps->lf.lfFaceName);
+
+ DBWriteContactSettingDword(NULL,THIS_MODULE,"announce", ps->announce);
+
+ DBWriteContactSettingByte(NULL,THIS_MODULE, "showMessageWindow", ps->showMsgWindow);
+ DBWriteContactSettingDword(NULL,THIS_MODULE,"showWhen", ps->showWhen);
+}
+
+BOOL CALLBACK OptDlgProc(HWND hDlg,UINT msg,WPARAM wparam,LPARAM lparam)
+{
+ RECT rect;
+ plgsettings *ps; //0: current; 1: original
+
+ logmsg("OptDlgProc");
+
+ switch(msg){
+ case WM_INITDIALOG:
+ logmsg("OptDlgProc::INITDIALOG");
+ TranslateDialogDefault(hDlg);
+
+ ps=(plgsettings*)malloc(sizeof(plgsettings)*2);
+ loadDBSettings(&ps[0]);
+ ps[1]=ps[0];
+ SetWindowLong(hDlg, GWL_USERDATA, (LONG)ps);
+ SetWindowLong(hwnd, GWL_STYLE, (LONG)(pSetLayeredWindowAttributes?0:WS_CLIPSIBLINGS)|WS_POPUP|WS_SIZEBOX);
+ SetWindowPos(hwnd, 0, 0, 0, 0, 0, SWP_NOZORDER|SWP_NOSIZE|SWP_NOMOVE|SWP_NOACTIVATE|SWP_FRAMECHANGED);
+
+ SetWindowLong(GetDlgItem(hDlg,IDC_TREE1),GWL_STYLE,GetWindowLong(GetDlgItem(hDlg,IDC_TREE1),GWL_STYLE)|TVS_NOHSCROLL|TVS_CHECKBOXES);
+ SetWindowLong(GetDlgItem(hDlg,IDC_TREE2),GWL_STYLE,GetWindowLong(GetDlgItem(hDlg,IDC_TREE1),GWL_STYLE)|TVS_NOHSCROLL|TVS_CHECKBOXES);
+
+ CheckDlgButton(hDlg, IDC_RADIO1+ps->align-1, BST_CHECKED);
+ CheckDlgButton(hDlg, IDC_RADIO10+9-ps->salign, BST_CHECKED);
+ CheckDlgButton(hDlg, IDC_CHECK1, ps->altShadow);
+ CheckDlgButton(hDlg, IDC_CHECK2, ps->showMsgWindow);
+ CheckDlgButton(hDlg, IDC_CHECK3, ps->transparent);
+ CheckDlgButton(hDlg, IDC_CHECK4, ps->showShadow);
+ CheckDlgButton(hDlg, IDC_CHECK5, ps->messages);
+
+ SetDlgItemText(hDlg, IDC_EDIT2, ps->msgformat);
+
+ CheckDlgButton(hDlg, IDC_CHECK6, ps->a_user);
+ CheckDlgButton(hDlg, IDC_CHECK7, ps->showmystatus);
+ SetDlgItemInt(hDlg, IDC_EDIT1, ps->distance, 0);
+
+ SendDlgItemMessage(hDlg, IDC_SLIDER1, TBM_SETRANGE, (WPARAM)0, MAKELONG(0, 255));
+ SendDlgItemMessage(hDlg, IDC_SLIDER1, TBM_SETPOS, (WPARAM)TRUE, (LPARAM)ps->alpha);
+
+ {
+ TCHAR buf[20];
+ mir_sntprintf(buf, SIZEOF(buf), _T("%d %%"), ps->alpha*100/255);
+ SetDlgItemText(hDlg, IDC_ALPHATXT, buf);
+ }
+
+ SetDlgItemInt(hDlg, IDC_EDIT5, ps->timeout, 0);
+ FillCheckBoxTree(GetDlgItem(hDlg, IDC_TREE1), statusValues, SIZEOF(statusValues), ps->announce);
+ FillCheckBoxTree(GetDlgItem(hDlg, IDC_TREE2), statusValues, SIZEOF(statusValues), ps->showWhen);
+ return 0;
+
+ case WM_HSCROLL:
+ if (LOWORD(wparam)==SB_ENDSCROLL||LOWORD(wparam)==SB_THUMBPOSITION||LOWORD(wparam)==SB_ENDSCROLL)
+ return 0;
+ ps=(plgsettings*)GetWindowLong(hDlg, GWL_USERDATA);
+ ps->alpha=SendDlgItemMessage(hDlg, IDC_SLIDER1, TBM_GETPOS, 0, 0);
+ {
+ TCHAR buf[20];
+ mir_sntprintf(buf, SIZEOF(buf), _T("%d %%"), ps->alpha*100/255);
+ SetDlgItemText(hDlg, IDC_ALPHATXT, buf);
+ }
+ goto xxx;
+ case WM_DESTROY:
+ logmsg("OptDlgProc::DESTROY");
+ ps=(plgsettings*)GetWindowLong(hDlg, GWL_USERDATA);
+ ps[0]=ps[1];
+ saveDBSettings(&ps[0]);
+
+ SetWindowLong(hwnd, GWL_STYLE, (LONG)(pSetLayeredWindowAttributes?0:WS_CLIPSIBLINGS)|WS_POPUP);
+ SetWindowPos(hwnd, 0, 0, 0, 0, 0, SWP_NOZORDER|SWP_NOSIZE|SWP_NOMOVE|SWP_NOACTIVATE|SWP_FRAMECHANGED);
+
+ SetWindowPos(hwnd, 0, ps->winxpos, ps->winypos, ps->winx, ps->winy, SWP_NOZORDER|SWP_NOACTIVATE);
+ if (pSetLayeredWindowAttributes)
+ pSetLayeredWindowAttributes(hwnd, ps->bkclr, ps->alpha, (ps->transparent?LWA_COLORKEY:0)|LWA_ALPHA);
+
+ free((void*)GetWindowLong(hDlg, GWL_USERDATA));
+ return 0;
+ case WM_COMMAND:
+ logmsg("OptDlgProc::COMMAND");
+ ps=(plgsettings*)GetWindowLong(hDlg, GWL_USERDATA);
+ switch (LOWORD(wparam)) {
+ case IDC_BUTTON7:
+ MessageBox(hDlg, _T("Variables:\n %n : Nick\n %m : Message\n %l : New line"), _T("Help"), MB_ICONINFORMATION|MB_OK);
+ return 0;
+ case IDC_BUTTON5:
+ SendMessage(hwnd, WM_USER+1, (WPARAM)_T("miranda is gr8 and this is a long message ;-)"), 0);
+ break;
+ case IDC_BUTTON1:
+ selectFont(hDlg, &(ps->lf));
+ break;
+ case IDC_BUTTON2:
+ selectColor(hDlg, &ps->clr_status);
+ break;
+ case IDC_BUTTON6:
+ selectColor(hDlg, &ps->clr_msg);
+ break;
+ case IDC_BUTTON3:
+ selectColor(hDlg, &ps->clr_shadow);
+ break;
+ case IDC_BUTTON4:
+ selectColor(hDlg, &ps->bkclr);
+ break;
+ case IDC_CHECK4:
+ ps->showShadow=IsDlgButtonChecked(hDlg, IDC_CHECK4);
+ break;
+ case IDC_CHECK1:
+ ps->altShadow=IsDlgButtonChecked(hDlg, IDC_CHECK1);
+ break;
+ case IDC_CHECK2:
+ ps->showMsgWindow=IsDlgButtonChecked(hDlg, IDC_CHECK2);
+ case IDC_EDIT1:
+ ps->distance=GetDlgItemInt(hDlg, IDC_EDIT1, 0, 0);
+ break;
+ case IDC_EDIT5:
+ ps->timeout=GetDlgItemInt(hDlg, IDC_EDIT5, 0, 0);
+ break;
+ case IDC_CHECK3:
+ ps->transparent=IsDlgButtonChecked(hDlg, IDC_CHECK3);
+ break;
+ case IDC_CHECK5:
+ ps->messages=IsDlgButtonChecked(hDlg, IDC_CHECK5);
+ break;
+ case IDC_CHECK6:
+ ps->a_user=IsDlgButtonChecked(hDlg, IDC_CHECK6);
+ break;
+ case IDC_CHECK7:
+ ps->showmystatus=IsDlgButtonChecked(hDlg, IDC_CHECK7);
+ break;
+ case IDC_RADIO1:
+ case IDC_RADIO2:
+ case IDC_RADIO3:
+ case IDC_RADIO4:
+ case IDC_RADIO5:
+ case IDC_RADIO6:
+ case IDC_RADIO7:
+ case IDC_RADIO8:
+ case IDC_RADIO9:
+ if (IsDlgButtonChecked(hDlg, LOWORD(wparam)))
+ ps->align=LOWORD(wparam)-IDC_RADIO1+1;
+ break;
+ case IDC_RADIO10:
+ case IDC_RADIO11:
+ case IDC_RADIO12:
+ case IDC_RADIO13:
+ case IDC_RADIO14:
+ case IDC_RADIO15:
+ case IDC_RADIO16:
+ case IDC_RADIO17:
+ case IDC_RADIO18:
+ if (IsDlgButtonChecked(hDlg, LOWORD(wparam)))
+ ps->salign=10-(LOWORD(wparam)-IDC_RADIO10+1);
+ break;
+ }
+xxx:
+ saveDBSettings(ps);
+ SetWindowPos(hwnd, 0, 0, 0, ps->winx, ps->winy, SWP_NOMOVE|SWP_NOZORDER|SWP_NOACTIVATE);
+ if (pSetLayeredWindowAttributes)
+ pSetLayeredWindowAttributes(hwnd, DBGetContactSettingDword(NULL,THIS_MODULE, "bkclr", DEFAULT_BKCLR), DBGetContactSettingByte(NULL,THIS_MODULE, "alpha", DEFAULT_ALPHA), (DBGetContactSettingByte(NULL,THIS_MODULE, "transparent", DEFAULT_TRANPARENT)?LWA_COLORKEY:0)|LWA_ALPHA);
+ InvalidateRect(hwnd, 0, TRUE);
+ SendMessage(GetParent(hDlg),PSM_CHANGED,0,0);
+
+ return 0;
+
+ case WM_NOTIFY:
+ logmsg("OptDlgProc::NOTIFY");
+ switch(((LPNMHDR)lparam)->code){
+ case TVN_SETDISPINFO:
+ case NM_CLICK:
+ case NM_RETURN:
+ case TVN_SELCHANGED:
+ if (((LPNMHDR)lparam)->idFrom==IDC_TREE1)
+ SendMessage(GetParent(hDlg),PSM_CHANGED,0,0);
+ break;
+ case PSN_APPLY:
+ ps=(plgsettings*)GetWindowLong(hDlg, GWL_USERDATA);
+
+ GetWindowRect(hwnd, &rect);
+ ps->winx=rect.right-rect.left;
+ ps->winy=rect.bottom-rect.top;
+ ps->winxpos=rect.left;
+ ps->winypos=rect.top;
+ ps->announce=MakeCheckBoxTreeFlags(GetDlgItem(hDlg, IDC_TREE1));
+ ps->showWhen=MakeCheckBoxTreeFlags(GetDlgItem(hDlg, IDC_TREE2));
+ GetDlgItemText(hDlg, IDC_EDIT2, ps->msgformat, 255);
+ ps[1]=ps[0]; //apply current settings at closing
+
+ saveDBSettings(ps);
+ if (pSetLayeredWindowAttributes)
+ pSetLayeredWindowAttributes(hwnd, DBGetContactSettingDword(NULL,THIS_MODULE, "bkclr", DEFAULT_BKCLR), DBGetContactSettingByte(NULL,THIS_MODULE, "alpha", DEFAULT_ALPHA), (DBGetContactSettingByte(NULL,THIS_MODULE, "transparent", DEFAULT_TRANPARENT)?LWA_COLORKEY:0)|LWA_ALPHA);
+ InvalidateRect(hwnd, 0, TRUE);
+ break;
+ }
+ break;
+ }
+
+ return 0;
+}
+
+int OptionsInit(WPARAM wparam,LPARAM lparam)
+{
+ OPTIONSDIALOGPAGE odp;
+
+ logmsg("OptionsInit");
+ ZeroMemory(&odp,sizeof(odp));
+ odp.cbSize=sizeof(odp);
+ odp.position=150000000;
+ odp.pszGroup="Plugins";
+ odp.groupPosition=950000000;
+ odp.hInstance=hI;
+ odp.pszTemplate=MAKEINTRESOURCEA(IDD_DIALOG1);
+ odp.pszTitle="OSD";
+ odp.pfnDlgProc=(DLGPROC)OptDlgProc;
+ odp.flags=ODPF_BOLDGROUPS;
+ CallService(MS_OPT_ADDPAGE,wparam,(LPARAM)&odp);
+ return 0;
+}
diff --git a/wbOSD/pack.cmd b/wbOSD/pack.cmd
new file mode 100644
index 0000000..bd37e4d
--- /dev/null
+++ b/wbOSD/pack.cmd
@@ -0,0 +1,31 @@
+@echo off
+nmake -f wbOSD.mak CFG="wbOSD - Win32 Release"
+if errorlevel 1 (
+ echo "Make failed"
+ goto :eof )
+nmake -f wbOSD.mak CFG="wbOSD - Win32 Release Unicode"
+if errorlevel 1 (
+ echo "Make failed"
+ goto :eof )
+
+del "%temp%\wbOSD.zip" > nul
+del "%temp%\wbOSDW.zip" > nul
+del "%temp%\wbOSDSrc.zip" > nul
+del *.user > nul
+
+for /F "tokens=1-6 delims=, " %%i in (buildnumber.h) do call :Translate %%i %%j %%k %%l %%m %%n
+
+"%PROGRAMFILES%\7-zip\7z.exe" a -tzip -r- -mx=9 "%temp%\wbOSD.zip" ./Release/wbOSD.dll wbOSD-translation.txt
+"%PROGRAMFILES%\7-zip\7z.exe" a -tzip -r- -mx=9 "%temp%\wbOSDW.zip" ./Release_Unicode/wbOSD.dll wbOSD-translation.txt
+
+rd /S /Q Release
+rd /S /Q Release_Unicode
+
+"%PROGRAMFILES%\7-zip\7z.exe" a -tzip -r0 -mx=9 "%temp%\wbOSDSrc.zip" -xr!.svn -x!*.cmd
+goto :eof
+
+:Translate
+if %2 == __FILEVERSION_STRING (
+ perl lpgen.pl wbOSD version %3 %4 %5 %6 )
+
+goto :eof
diff --git a/wbOSD/readme b/wbOSD/readme
new file mode 100644
index 0000000..09815bf
--- /dev/null
+++ b/wbOSD/readme
@@ -0,0 +1,84 @@
+Wannabe (Miranda's) OSD
+(c)2005 Andrej Krutak
+Distribute under the GNU GPL 2.0 license
+
+=======================================================
+
+Hello there, I'm happy you are trying out my OSD plugin... I've just started
+to make it (in fact, it's the first miranda plugin i ever made ;-) so please
+excuse bugs etc. (but you may report them, of course ;-)
+
+The plugin is trying to implement all the functionality of the 'old' OSD plugin.
+However, I never got to it's documentation, so I can't tell if everything's gonna
+work the way it should... Let me know :o)
+
+And I'll be happy if you send some suggestions/code parts etc., but please,
+send it into the forum of this project on miranda's web ;-)
+
+
+
+------| Short tips: |----------------------------------
+
+Moving the OSD:
+Simply drag it by pressing left mouse button and then move the cursor ;-)
+Note that only position changes done while settings dialog is shown are
+saved.
+
+Closing the actual OSD:
+Press the right button over the OSD - that will close the OSD and
+show a message window for the contact who caused the OSD activity.
+
+
+
+------| Changelog: |-----------------------------------
+
+0.2.0.5
+ New: Enable/disable OSD announces for specific own statuses
+ Fix: User interface improvemets...
+ Fix: used 100% of the processor time sometimes
+
+0.2.0.1
+ Fix: Help button
+ Fix: Translation of status announces
+
+0.2.0.0
+ Fix: multiline output
+ New: separate color for status & message announces
+ New: by pressing the right mouse button you can send message
+ New: message announce format can be customized a little
+ Fix: User interface improvemets...
+ Fix: again a little bit more compatible to win9x ;-)
+ Info: The unicode version might be broken, sorry if it is
+
+0.1.5.0
+ New: unicode support (thanx to SilverCircle)
+ New: multiline output (thanx to SilverCircle)
+ (Hopefully)Fix: win9x-workaround memory leak
+0.1.0.0
+ New: more comfortable OSD positioning
+ New: possibility to not show own status changes
+ New: translation support
+ Fix: should work under win9x, however the transparency doesn't work well
+ Fix: some small bugfixes (e.g. saving of announce settings) ;-)
+
+0.0.2.0
+ New: some more documentation
+ New: settings applied to osd instantly, saved after apply
+ New: user offline notification
+ Fix: only showing status of people in the contact list
+
+0.0.1.1
+ Tiny little fix ;-)
+
+0.0.1.0
+ Initial release
+
+
+
+
+------| Some TODOs: |----------------------------------
+
+* different color schemes for messages/online notifications etc. (in progess)
+* test (and make work in case it doesn't) under other os than winxp
+* add some other formatting options (not sure if it's worth the work)
+* other things ;-)
diff --git a/wbOSD/resource.h b/wbOSD/resource.h
new file mode 100644
index 0000000..64e57a5
--- /dev/null
+++ b/wbOSD/resource.h
@@ -0,0 +1,57 @@
+//{{NO_DEPENDENCIES}}
+// Microsoft Visual C++ generated include file.
+// Used by wbOSD.rc
+//
+#define IDD_DIALOG1 101
+#define IDC_BUTTON1 1001
+#define IDC_BUTTON2 1002
+#define IDC_BUTTON3 1003
+#define IDC_BUTTON6 1004
+#define IDC_BUTTON4 1008
+#define IDC_EDIT1 1009
+#define IDC_CHECK1 1010
+#define IDC_CHECK3 1013
+#define IDC_EDIT4 1015
+#define IDC_EDIT5 1016
+#define IDC_CHECK4 1017
+#define IDC_TREE1 1018
+#define IDC_CHECK5 1019
+#define IDC_CHECK6 1020
+#define IDC_BUTTON5 1021
+#define IDC_CHECK7 1022
+#define IDC_CHECK8 1023
+#define IDC_CHECK2 1023
+#define IDC_SLIDER1 1024
+#define IDC_ALPHATXT 1025
+#define IDC_EDIT2 1027
+#define IDC_BUTTON7 1028
+#define IDC_TREE2 1029
+#define IDC_RADIO1 1101
+#define IDC_RADIO2 1102
+#define IDC_RADIO3 1103
+#define IDC_RADIO4 1104
+#define IDC_RADIO5 1105
+#define IDC_RADIO6 1106
+#define IDC_RADIO7 1107
+#define IDC_RADIO8 1108
+#define IDC_RADIO9 1109
+#define IDC_RADIO10 1120
+#define IDC_RADIO11 1121
+#define IDC_RADIO12 1122
+#define IDC_RADIO13 1123
+#define IDC_RADIO14 1124
+#define IDC_RADIO15 1125
+#define IDC_RADIO16 1126
+#define IDC_RADIO17 1127
+#define IDC_RADIO18 1128
+
+// Next default values for new objects
+//
+#ifdef APSTUDIO_INVOKED
+#ifndef APSTUDIO_READONLY_SYMBOLS
+#define _APS_NEXT_RESOURCE_VALUE 102
+#define _APS_NEXT_COMMAND_VALUE 40001
+#define _APS_NEXT_CONTROL_VALUE 1029
+#define _APS_NEXT_SYMED_VALUE 101
+#endif
+#endif
diff --git a/wbOSD/wbOSD-translation.txt b/wbOSD/wbOSD-translation.txt
new file mode 100644
index 0000000..29236a7
--- /dev/null
+++ b/wbOSD/wbOSD-translation.txt
@@ -0,0 +1,42 @@
+Miranda Language Pack Version 1
+Locale: 0809
+Authors: Andrej Krutak
+Author-email: andree182 {at} gmail (dot) com
+Last-Modified-Using: Miranda IM 0.7svn
+Plugins-included:
+; Generated by lpgen on Thu Jan 13 21:36:28 2011
+; Translations: 27
+
+; Common strings that belong to many files
+;[]
+
+; ./events.cpp
+;[%s is %s]
+
+; ./wbOSD.rc
+;[Align]
+;[Alpha:]
+;[Alternative shadow]
+;[Announce]
+;[Background color]
+;[Dialog]
+;[Format:]
+;[General]
+;[Other]
+;[Radio1]
+;[Select font]
+;[Shadow]
+;[Shadow align]
+;[Shadow color]
+;[Shadow distance:]
+;[Show]
+;[Show events]
+;[Show message window after click]
+;[Show my status changes]
+;[Show testing OSD]
+;[Show when my status is:]
+;[Static]
+;[Status changes]
+;[Text color]
+;[Timeout (ms):]
+;[Transparent]
diff --git a/wbOSD/wbOSD.cpp b/wbOSD/wbOSD.cpp
new file mode 100644
index 0000000..d4f9cf7
--- /dev/null
+++ b/wbOSD/wbOSD.cpp
@@ -0,0 +1,332 @@
+/*
+Wannabe OSD
+This plugin tries to become miranda's standard OSD ;-)
+
+(C) 2005 Andrej Krutak
+
+Distributed under GNU's GPL 2 or later
+*/
+
+#include "wbOSD.h"
+
+#define WORKAROUND_9X //transparent window support on 9x workaround...
+//#define FORCE_9XDRAWING
+
+TCHAR szClassName[] = _T("wbOSD");
+const static osdmsg defstr={_T(""), 0, RGB(0, 0, 0), 0, 0};
+
+int DrawMe(HWND hwnd, TCHAR *string, COLORREF color)
+{
+ HDC hdc;
+ PAINTSTRUCT ps;
+ RECT rect, rect2;
+ HGDIOBJ oo;
+ UINT talign=0;
+ HBRUSH bkb;
+ int sxo, syo;
+ HFONT fh;
+ plgsettings plgs;
+
+ logmsg("DrawMe");
+ if (!string) string=_T("bullshit");
+
+ loadDBSettings(&plgs);
+ fh=CreateFontIndirectA(&(plgs.lf));
+
+ hdc=BeginPaint(hwnd, &ps);
+ SetBkMode(hdc, TRANSPARENT);
+
+ GetClientRect(hwnd, &rect);
+ bkb=CreateSolidBrush(plgs.bkclr);
+
+#ifdef WORKAROUND_9X
+ //workaround for 9x, needs to get fixed...
+ if (!pSetLayeredWindowAttributes && DBGetContactSettingByte(NULL,THIS_MODULE, "transparent", DEFAULT_TRANPARENT)) {
+ HDC shdc;
+
+ logmsg("DrawMe::w9x");
+
+ shdc=CreateDC(TEXT("DISPLAY"), 0, 0, 0);
+ GetWindowRect(hwnd, &rect2);
+ BitBlt(hdc, 0, 0, rect2.right-rect2.left, rect2.bottom-rect2.top, shdc, rect2.left, rect2.top, SRCCOPY);
+ DeleteDC(shdc);
+ } else
+#endif
+ FillRect(hdc, &rect, bkb);
+
+ DeleteObject(bkb);
+
+ oo=SelectObject(hdc, fh);
+
+// rect2.left=0;
+// rect2.top=0;
+// DrawText(hdc, string, -1, &rect2, DT_SINGLELINE|DT_CALCRECT);
+ rect2 = rect;
+ DrawText(hdc, string, -1, &rect2, DT_WORDBREAK|DT_CALCRECT);
+
+ if (plgs.align>=1 && plgs.align<=3)
+ rect.top=0;
+ if (plgs.align>=4 && plgs.align<=6)
+ rect.top=(rect.bottom-rect2.bottom)/2;
+ if (plgs.align>=7 && plgs.align<=9)
+ rect.top=rect.bottom-rect2.bottom;
+
+ if (((plgs.align-1)%3)==0)
+ rect.left=0;
+ else if (((plgs.align-2)%3)==0)
+ rect.left=(rect.right-rect2.right)/2;
+ else if (((plgs.align-3)%3)==0)
+ rect.left=rect.right-rect2.right;
+
+ rect.bottom=rect.top+rect2.bottom;
+ rect.right=rect.left+rect2.right;
+
+ //draw shadow
+ if (plgs.showShadow) {
+ logmsg("DrawMe::showShadow");
+ if (plgs.salign>=1 && plgs.salign<=3) syo=-plgs.distance;
+ if (plgs.salign>=4 && plgs.salign<=6) syo=0;
+ if (plgs.salign>=7 && plgs.salign<=9) syo=plgs.distance;
+
+ if (((plgs.salign-1)%3)==0) sxo=-plgs.distance;
+ else if (((plgs.salign-2)%3)==0) sxo=0;
+ else if (((plgs.salign-3)%3)==0) sxo=plgs.distance;
+
+ SetTextColor(hdc, plgs.clr_shadow);
+ if (plgs.altShadow==0) {
+ rect2=rect;
+ OffsetRect(&rect, sxo, syo);
+
+ DrawText(hdc, string, -1, &rect2, DT_WORDBREAK|talign);
+ } else {
+ rect2=rect;
+ rect2.left+=plgs.distance;
+ DrawText(hdc, string, -1, &rect2, DT_WORDBREAK|talign);
+
+ rect2=rect;
+ rect2.left-=plgs.distance;
+ DrawText(hdc, string, -1, &rect2, DT_WORDBREAK|talign);
+
+ rect2=rect;
+ rect2.top-=plgs.distance;
+ DrawText(hdc, string, -1, &rect2, DT_WORDBREAK|talign);
+
+ rect2=rect;
+ rect2.top+=plgs.distance;
+ DrawText(hdc, string, -1, &rect2, DT_WORDBREAK|talign);
+
+ OffsetRect(&rect, sxo/2, syo/2);
+ }
+ }
+
+ //draw text
+ SetTextColor(hdc, color);
+ DrawText(hdc, string, -1, &rect, DT_WORDBREAK);
+
+ SelectObject(hdc, oo);
+ DeleteObject(fh);
+ EndPaint(hwnd, &ps);
+
+ return 0;
+}
+
+LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
+{
+ osdmsg* ms;
+
+ switch (message) {
+ case WM_CREATE:
+ logmsg("WindowProcedure::CREATE");
+ SetWindowLong(hwnd, GWL_USERDATA, (LONG)&defstr);
+ return 0;
+
+ case WM_DESTROY:
+ logmsg("WindowProcedure::DESTROY");
+ return 0;
+
+ case WM_PAINT:
+ logmsg("WindowProcedure::PAINT");
+
+ ms=(osdmsg*)GetWindowLong(hwnd, GWL_USERDATA);
+ if (ms)
+ return DrawMe(hwnd, ms->text, ms->color);
+
+ PAINTSTRUCT ps;
+ BeginPaint(hwnd, &ps);
+ EndPaint(hwnd, &ps);
+ return 0;
+
+ case WM_NCRBUTTONDOWN:
+ logmsg("WindowProcedure::NCRBUTTONDOWN");
+
+ ms = (osdmsg*)GetWindowLong(hwnd, GWL_USERDATA);
+ if ( ms ) {
+ if ( ms->callback) ms->callback(ms->param);
+ SendMessage(hwnd, WM_USER+3, 0, 0);
+ }
+ return 0;
+
+ case WM_TIMER:
+ logmsg("WindowProcedure::TIMER");
+ SendMessage(hwnd, WM_USER+3, wParam, 0);
+ return 0;
+
+ case WM_USER+1: //draw text ((char *)string, (int) timeout
+ logmsg("WindowProcedure::USER+1");
+
+ ms=(osdmsg*)mir_alloc(sizeof(osdmsg));
+ ms->text = mir_tstrdup((TCHAR *)wParam );
+ if ( lParam == 0 )
+ lParam = DBGetContactSettingDword( NULL,THIS_MODULE, "timeout", DEFAULT_TIMEOUT );
+ ms->timeout = lParam;
+ ms->callback = 0;
+ ms->color = DBGetContactSettingDword(NULL,THIS_MODULE, "clr_msg", DEFAULT_CLRMSG);
+ ms->param = 0;
+ SendMessage(hwnd, WM_USER+4, (WPARAM)ms, 0);
+ mir_free(ms->text);
+ mir_free(ms);
+ return 0;
+
+ case WM_USER+2: //show
+ logmsg("WindowProcedure::USER+2");
+ SetWindowPos(hwnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE|SWP_NOSIZE|SWP_SHOWWINDOW|SWP_NOACTIVATE);
+ return 0;
+
+ case WM_USER+3: //hide
+ ms = ( osdmsg* )GetWindowLong(hwnd, GWL_USERDATA);
+ logmsg("WindowProcedure::USER+3");
+ if ( !ms )
+ return 0;
+
+ logmsg("WindowProcedure::USER+3/om");
+ KillTimer(hwnd, (UINT)ms);
+ mir_free(ms->text);
+ mir_free(ms);
+ SetWindowLong(hwnd, GWL_USERDATA, 0);
+ ShowWindow(hwnd, SW_HIDE);
+ return 0;
+
+ case WM_USER+4:
+ logmsg("WindowProcedure::USER+4");
+
+ ms = (osdmsg*)GetWindowLong(hwnd, GWL_USERDATA);
+ if ( ms != 0 ) {
+ logmsg("WindowProcedure::USER+4/old");
+ KillTimer(hwnd, (UINT)ms);
+ mir_free(ms->text);
+ mir_free(ms);
+ SetWindowLong(hwnd, GWL_USERDATA, 0);
+ if (!pSetLayeredWindowAttributes) {
+ logmsg("WindowProcedure::USER+4/old+9x");
+ ShowWindow(hwnd, SW_HIDE);
+ Sleep(50);
+ } }
+
+ ms =(osdmsg*)mir_alloc(sizeof(osdmsg));
+ memcpy(ms, (osdmsg*)wParam, sizeof(osdmsg));
+ ms->text = mir_tstrdup( ms->text );
+
+ SetWindowLong(hwnd, GWL_USERDATA, (LONG)ms);
+ SetTimer(hwnd, (UINT)ms, (int)ms->timeout, 0);
+ InvalidateRect(hwnd, 0, TRUE);
+ SendMessage(hwnd, WM_USER+2, 0, 0);
+ return 0;
+
+ case WM_NCHITTEST:
+ {
+ RECT rect;
+ GetWindowRect(hwnd, &rect);
+
+ logmsg("WindowProcedure::NCHITTEST");
+
+ if (LOWORD(lParam)>=(rect.left+5) && LOWORD(lParam)<=(rect.right-5) &&
+ HIWORD(lParam)>=(rect.top+5) && HIWORD(lParam)<=(rect.bottom-5))
+ return HTCAPTION;
+ return DefWindowProc (hwnd, message, wParam, lParam);
+ }
+ //here will be the doubleclick => open-message-window solution ;-)
+ //case WM_NCLBUTTONDBLCLK:
+ // CallService(MS_MSG_SENDMESSAGE, wparam,(LPARAM)&odp);
+ // return 0;
+ default:
+ return DefWindowProc (hwnd, message, wParam, lParam);
+ }
+
+ return 0;
+}
+
+int OSDAnnounce(WPARAM wParam, LPARAM lParam)
+{
+ logmsg("OSDAnnounce");
+ return SendMessage(hwnd, WM_USER+1, wParam, lParam);
+}
+
+int pluginShutDown(WPARAM wparam,LPARAM lparam)
+{
+ logmsg("pluginShutDown");
+ if (hwnd) {
+ logmsg("pluginShutDown/hwnd");
+ SendMessage(hwnd, WM_USER+3, 0, 0);
+ DestroyWindow(hwnd);
+ hwnd=0;
+ }
+ return 0;
+}
+
+int MainInit(WPARAM wparam,LPARAM lparam)
+{
+ logmsg("MainInit");
+ HookEvent(ME_OPT_INITIALISE,OptionsInit);
+
+ WNDCLASSEX wincl;
+ wincl.hInstance = hI;
+ wincl.lpszClassName = szClassName;
+ wincl.lpfnWndProc = WindowProcedure;
+ wincl.style = CS_DBLCLKS;
+ wincl.cbSize = sizeof (WNDCLASSEX);
+
+ wincl.hIcon = LoadIcon (NULL, IDI_APPLICATION);
+ wincl.hIconSm = LoadIcon (NULL, IDI_APPLICATION);
+ wincl.hCursor = LoadCursor (NULL, IDC_ARROW);
+ wincl.lpszMenuName = NULL;
+ wincl.cbClsExtra = 0;
+ wincl.cbWndExtra = 0;
+ wincl.hbrBackground = 0;
+
+ if ( !RegisterClassEx( &wincl ))
+ return 0;
+
+ hwnd = CreateWindowEx((pSetLayeredWindowAttributes?WS_EX_LAYERED:0)|WS_EX_TOOLWINDOW, szClassName, _T("WannaBeOSD"),
+ (pSetLayeredWindowAttributes?0:WS_CLIPSIBLINGS) | WS_POPUP,
+ DBGetContactSettingDword(NULL,THIS_MODULE, "winxpos", DEFAULT_WINXPOS),
+ DBGetContactSettingDword(NULL,THIS_MODULE, "winypos", DEFAULT_WINYPOS),
+ DBGetContactSettingDword(NULL,THIS_MODULE, "winx", DEFAULT_WINX),
+ DBGetContactSettingDword(NULL,THIS_MODULE, "winy", DEFAULT_WINY),
+ HWND_DESKTOP, NULL, hI, NULL);
+
+ SetWindowLong(hwnd, GWL_USERDATA, 0);
+
+ if (pSetLayeredWindowAttributes)
+ pSetLayeredWindowAttributes(hwnd, DBGetContactSettingDword(NULL,THIS_MODULE, "bkclr", DEFAULT_BKCLR), DBGetContactSettingByte(NULL,THIS_MODULE, "alpha", DEFAULT_ALPHA), (DBGetContactSettingByte(NULL,THIS_MODULE, "transparent", DEFAULT_TRANPARENT)?LWA_COLORKEY:0)|LWA_ALPHA);
+
+ hservosda=CreateServiceFunction("OSD/Announce", OSDAnnounce);
+
+#if !defined(UNICODE_SERVICE_ONLY)
+ hHookedNewEvent = HookEvent(ME_DB_EVENT_ADDED, HookedNewEvent);
+
+ // try to create ME_STATUSCHANGE_CONTACTSTATUSCHANGED event... I hope it fails when newstatusnotify or equal creates it before ;-)
+
+ hContactStatusChanged = HookEvent(ME_STATUSCHANGE_CONTACTSTATUSCHANGED,ContactStatusChanged);
+ if (!hContactStatusChanged) {
+ hHookContactStatusChanged = CreateHookableEvent(ME_STATUSCHANGE_CONTACTSTATUSCHANGED);
+ hContactSettingChanged = HookEvent(ME_DB_CONTACT_SETTINGCHANGED,ContactSettingChanged);
+
+ hContactStatusChanged = HookEvent(ME_STATUSCHANGE_CONTACTSTATUSCHANGED,ContactStatusChanged);
+ }
+ hProtoAck=HookEvent(ME_PROTO_ACK,ProtoAck);
+#endif
+
+ hpluginShutDown=HookEvent(ME_SYSTEM_SHUTDOWN,pluginShutDown);
+
+ return 0;
+}
diff --git a/wbOSD/wbOSD.dep b/wbOSD/wbOSD.dep
new file mode 100644
index 0000000..7b3cf35
--- /dev/null
+++ b/wbOSD/wbOSD.dep
@@ -0,0 +1,24 @@
+# Microsoft Developer Studio Generated Dependency File, included by wbOSD.mak
+
+.\events.cpp : \
+ "..\..\include\m_message.h"\
+
+
+.\main.cpp : \
+ "..\..\include\m_clc.h"\
+ "..\..\include\m_clist.h"\
+ "..\..\include\m_contacts.h"\
+ "..\..\include\m_database.h"\
+ "..\..\include\m_ignore.h"\
+ "..\..\include\m_langpack.h"\
+ "..\..\include\m_options.h"\
+ "..\..\include\m_plugins.h"\
+ "..\..\include\m_protocols.h"\
+ "..\..\include\m_protosvc.h"\
+ "..\..\include\m_system.h"\
+ "..\..\include\m_utils.h"\
+ "..\..\include\newpluginapi.h"\
+ "..\..\include\statusmodes.h"\
+ "..\..\include\win2k.h"\
+ ".\wbOSD.h"\
+
diff --git a/wbOSD/wbOSD.dsp b/wbOSD/wbOSD.dsp
new file mode 100644
index 0000000..212f620
--- /dev/null
+++ b/wbOSD/wbOSD.dsp
@@ -0,0 +1,200 @@
+# Microsoft Developer Studio Project File - Name="wbOSD" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
+
+CFG=wbOSD - Win32 Release Unicode
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "wbOSD.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "wbOSD.mak" CFG="wbOSD - Win32 Release Unicode"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "wbOSD - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "wbOSD - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "wbOSD - Win32 Debug Unicode" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "wbOSD - Win32 Release Unicode" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+MTL=midl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "wbOSD - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Ignore_Export_Lib 1
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "wbOSD_EXPORTS" /YX /FD /c
+# ADD CPP /nologo /MD /W3 /GX /Zi /O1 /I "../../include" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /Yu"wbOSD.h" /FD /c
+# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x40d /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib comctl32.lib wsock32.lib /nologo /base:"0x32240000" /dll /machine:I386 /out:"./Release/wbOSD.dll" /filealign:512
+# SUBTRACT LINK32 /pdb:none
+
+!ELSEIF "$(CFG)" == "wbOSD - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# PROP Ignore_Export_Lib 1
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "wbOSD_EXPORTS" /YX /FD /GZ /c
+# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "../../include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /Yu"wbOSD.h" /FD /GZ /c
+# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x40d /d "_DEBUG"
+# ADD RSC /l 0x40d /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib comctl32.lib /nologo /dll /debug /machine:I386 /out:"./Debug/wbOSD.dll" /pdbtype:sept
+# SUBTRACT LINK32 /verbose /pdb:none /map
+
+!ELSEIF "$(CFG)" == "wbOSD - Win32 Debug Unicode"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug_Unicode"
+# PROP BASE Intermediate_Dir "Debug_Unicode"
+# PROP BASE Ignore_Export_Lib 1
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug_Unicode"
+# PROP Intermediate_Dir "Debug_Unicode"
+# PROP Ignore_Export_Lib 1
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "wbOSD_EXPORTS" /YX /FD /GZ /c
+# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "../../include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_UNICODE" /D "UNICODE" /D "_USRDLL" /Yu"wbOSD.h" /FD /GZ /c
+# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x40d /d "_DEBUG"
+# ADD RSC /l 0x40d /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib comctl32.lib wsock.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
+# SUBTRACT BASE LINK32 /verbose /map
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib comctl32.lib wsock.lib /nologo /dll /debug /machine:I386 /out:"./Debug_Unicode/wbOSD.dll" /pdbtype:sept
+# SUBTRACT LINK32 /verbose /pdb:none /map
+
+!ELSEIF "$(CFG)" == "wbOSD - Win32 Release Unicode"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release_Unicode"
+# PROP BASE Intermediate_Dir "Release_Unicode"
+# PROP BASE Ignore_Export_Lib 1
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release_Unicode"
+# PROP Intermediate_Dir "Release_Unicode"
+# PROP Ignore_Export_Lib 1
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /GX /Zi /O1 /I "../../include" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "wbOSD_EXPORTS" /YX /FD /c
+# ADD CPP /nologo /MD /W3 /GX /Zi /O1 /I "../../include" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_UNICODE" /D "UNICODE" /D "_USRDLL" /D "wbOSD_EXPORTS" /Yu"wbOSD.h" /FD /c
+# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib comctl32.lib wsock32.lib /nologo /base:"0x32240000" /dll /pdb:none /map /machine:I386
+# SUBTRACT BASE LINK32 /verbose
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib comctl32.lib wsock32.lib /nologo /base:"0x32240000" /dll /machine:I386 /out:"./Release_Unicode/wbOSD.dll" /filealign:512
+# SUBTRACT LINK32 /pdb:none
+
+!ENDIF
+
+# Begin Target
+
+# Name "wbOSD - Win32 Release"
+# Name "wbOSD - Win32 Debug"
+# Name "wbOSD - Win32 Debug Unicode"
+# Name "wbOSD - Win32 Release Unicode"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=.\events.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=.\main.cpp
+# ADD CPP /Yc"wbOSD.h"
+# End Source File
+# Begin Source File
+
+SOURCE=.\options.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=.\wbOSD.cpp
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# Begin Source File
+
+SOURCE=.\wbOSD.h
+# End Source File
+# End Group
+# Begin Group "Resource Files"
+
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+# Begin Source File
+
+SOURCE=.\wbOSD.rc
+# End Source File
+# End Group
+# Begin Source File
+
+SOURCE=.\copying.txt
+# End Source File
+# Begin Source File
+
+SOURCE=.\Notes.txt
+# End Source File
+# End Target
+# End Project
diff --git a/wbOSD/wbOSD.dsw b/wbOSD/wbOSD.dsw
new file mode 100644
index 0000000..b48606c
--- /dev/null
+++ b/wbOSD/wbOSD.dsw
@@ -0,0 +1,29 @@
+Microsoft Developer Studio Workspace File, Format Version 6.00
+# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!
+
+###############################################################################
+
+Project: "wbOSD"=.\wbOSD.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Global:
+
+Package=<5>
+{{{
+}}}
+
+Package=<3>
+{{{
+}}}
+
+###############################################################################
+
diff --git a/wbOSD/wbOSD.h b/wbOSD/wbOSD.h
new file mode 100644
index 0000000..680f791
--- /dev/null
+++ b/wbOSD/wbOSD.h
@@ -0,0 +1,144 @@
+/*
+Wannabe OSD
+This plugin tries to become miranda's standard OSD ;-)
+
+(C) 2005 Andrej Krutak
+
+Distributed under GNU's GPL 2 or later
+*/
+
+#define _WIN32_WINNT 0x0500
+#define _CRT_SECURE_NO_WARNINGS
+
+#include <tchar.h>
+#include <windows.h>
+#include <shlwapi.h>
+#include <commctrl.h>
+#include <stdio.h>
+
+#include "resource.h"
+#include <newpluginapi.h>
+#include <m_langpack.h>
+#include <m_database.h>
+#include <m_options.h>
+#include <m_clc.h>
+#include <m_system.h>
+#include <m_clist.h>
+#include <m_protocols.h>
+#include <m_protosvc.h>
+#include <m_utils.h>
+#include <m_contacts.h>
+#include <m_ignore.h>
+#include <win2k.h>
+
+#define THIS_MODULE "mirandaosd"
+
+//SETTINGS DEFAULTS
+#define DEFAULT_FNT_HEIGHT -30
+#define DEFAULT_FNT_WIDTH 0
+#define DEFAULT_FNT_ESCAPEMENT 0
+#define DEFAULT_FNT_ORIENTATION 0
+#define DEFAULT_FNT_WEIGHT 700
+#define DEFAULT_FNT_ITALIC 0
+#define DEFAULT_FNT_UNDERLINE 0
+#define DEFAULT_FNT_STRIKEOUT 0
+#define DEFAULT_FNT_CHARSET 0
+#define DEFAULT_FNT_OUTPRECISION 3
+#define DEFAULT_FNT_CLIPRECISION 2
+#define DEFAULT_FNT_QUALITY 1
+#define DEFAULT_FNT_PITCHANDFAM 49
+#define DEFAULT_FNT_FACENAME "Arial"
+
+#define DEFAULT_CLRMSG RGB(255, 100, 0) //fore
+#define DEFAULT_CLRSTATUS RGB(40, 160, 255) //fore
+#define DEFAULT_CLRSHADOW RGB(0, 0, 0) //bk
+#define DEFAULT_BKCLR RGB(255, 255, 255)
+#define DEFAULT_ALIGN 1
+#define DEFAULT_SALIGN 1
+#define DEFAULT_DISTANCE 2
+#define DEFAULT_ALTSHADOW 0
+#define DEFAULT_TRANPARENT 1
+#define DEFAULT_WINX 500
+#define DEFAULT_WINY 100
+#define DEFAULT_WINXPOS 10
+#define DEFAULT_WINYPOS 10
+#define DEFAULT_ALPHA 175
+#define DEFAULT_TIMEOUT 3000
+#define DEFAULT_SHOWSHADOW 1
+#define DEFAULT_ANNOUNCEMESSAGES 1
+#define DEFAULT_ANNOUNCESTATUS 1
+#define DEFAULT_ANNOUNCE 0x00000002 //status mask
+#define DEFAULT_SHOWMYSTATUS 1
+#define DEFAULT_MESSAGEFORMAT _T("Message from %n: %m")
+#define DEFAULT_SHOWMSGWIN 1
+#define DEFAULT_SHOWWHEN 0x00000002
+
+//HOOKS
+#define ME_STATUSCHANGE_CONTACTSTATUSCHANGED "Miranda/StatusChange/ContactStatusChanged"
+
+int ContactStatusChanged(WPARAM wParam, LPARAM lParam);
+int ProtoAck(WPARAM wparam,LPARAM lparam);
+int ContactSettingChanged(WPARAM wparam,LPARAM lparam);
+int HookedNewEvent(WPARAM wParam, LPARAM lParam);
+
+//ANNOUNCING MESSAGES FROM OUTSIDE ;-)
+int OSDAnnounce(WPARAM wParam, LPARAM lParam);
+
+struct CheckBoxValues_t {
+ DWORD style;
+ TCHAR* szDescr;
+};
+
+static const struct CheckBoxValues_t statusValues[]={
+ {ID_STATUS_OFFLINE,_T("offline")},
+ {ID_STATUS_ONLINE,_T("online")},
+ {ID_STATUS_AWAY,_T("away")},
+ {ID_STATUS_DND,_T("DND")},
+ {ID_STATUS_NA,_T("NA")},
+ {ID_STATUS_OCCUPIED,_T("occupied")},
+ {ID_STATUS_FREECHAT,_T("free for chat")},
+ {ID_STATUS_INVISIBLE,_T("invisible")},
+ {ID_STATUS_ONTHEPHONE,_T("on the phone")},
+ {ID_STATUS_OUTTOLUNCH,_T("out to lunch")}
+};
+
+#define ID_STATUS_MIN ID_STATUS_OFFLINE
+#define ID_STATUS_MAX ID_STATUS_OUTTOLUNCH
+
+typedef struct _plgsettings {
+ int align, salign, altShadow, showShadow, a_user, distance, onlyfromlist, showmystatus;
+ int showMsgWindow;
+ int messages; //also other events...
+ TCHAR msgformat[256];
+ int winx, winy, winxpos, winypos, alpha, transparent, timeout;
+ COLORREF clr_msg, clr_status, clr_shadow, bkclr;
+ DWORD announce, showWhen;
+ LOGFONTA lf;
+} plgsettings;
+
+typedef struct _osdmsg {
+ TCHAR *text;
+ int timeout; //ms
+ COLORREF color;
+ void (*callback)(unsigned int param);
+ int param;
+} osdmsg;
+
+//#define logmsg(x) logmsg2(x)
+
+#ifndef logmsg
+#define logmsg(x) //x
+#endif
+
+int OptionsInit(WPARAM wparam,LPARAM lparam);
+
+extern BOOL (WINAPI*pSetLayeredWindowAttributes)(HWND, COLORREF, BYTE, DWORD);
+
+void loadDBSettings(plgsettings *ps);
+
+extern HINSTANCE hI;
+extern HWND hwnd;
+extern HANDLE hservosda;
+extern HANDLE hHookedNewEvent, hHookedInit, hProtoAck, hContactSettingChanged, hHookContactStatusChanged, hContactStatusChanged, hpluginShutDown;
+extern HINSTANCE hUser32;
+
diff --git a/wbOSD/wbOSD.mak b/wbOSD/wbOSD.mak
new file mode 100644
index 0000000..1c2c285
--- /dev/null
+++ b/wbOSD/wbOSD.mak
@@ -0,0 +1,336 @@
+# Microsoft Developer Studio Generated NMAKE File, Based on wbOSD.dsp
+!IF "$(CFG)" == ""
+CFG=wbOSD - Win32 Release Unicode
+!MESSAGE No configuration specified. Defaulting to wbOSD - Win32 Release Unicode.
+!ENDIF
+
+!IF "$(CFG)" != "wbOSD - Win32 Release" && "$(CFG)" != "wbOSD - Win32 Debug" && "$(CFG)" != "wbOSD - Win32 Debug Unicode" && "$(CFG)" != "wbOSD - Win32 Release Unicode"
+!MESSAGE Invalid configuration "$(CFG)" specified.
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "wbOSD.mak" CFG="wbOSD - Win32 Release Unicode"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "wbOSD - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "wbOSD - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "wbOSD - Win32 Debug Unicode" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "wbOSD - Win32 Release Unicode" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE
+!ERROR An invalid configuration is specified.
+!ENDIF
+
+!IF "$(OS)" == "Windows_NT"
+NULL=
+!ELSE
+NULL=nul
+!ENDIF
+
+CPP=cl.exe
+MTL=midl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "wbOSD - Win32 Release"
+
+OUTDIR=.\Release
+INTDIR=.\Release
+# Begin Custom Macros
+OutDir=.\Release
+# End Custom Macros
+
+ALL : "$(OUTDIR)\wbOSD.dll"
+
+
+CLEAN :
+ -@erase "$(INTDIR)\events.obj"
+ -@erase "$(INTDIR)\main.obj"
+ -@erase "$(INTDIR)\options.obj"
+ -@erase "$(INTDIR)\vc60.idb"
+ -@erase "$(INTDIR)\vc60.pdb"
+ -@erase "$(INTDIR)\wbOSD.obj"
+ -@erase "$(INTDIR)\wbOSD.pch"
+ -@erase "$(INTDIR)\wbOSD.res"
+ -@erase "$(OUTDIR)\wbOSD.dll"
+ -@erase "$(OUTDIR)\wbOSD.exp"
+
+"$(OUTDIR)" :
+ if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
+
+CPP_PROJ=/nologo /MD /W3 /GX /Zi /O1 /I "../../include" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /Fp"$(INTDIR)\wbOSD.pch" /Yu"wbOSD.h" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c
+MTL_PROJ=/nologo /D "NDEBUG" /mktyplib203 /win32
+RSC_PROJ=/l 0x409 /fo"$(INTDIR)\wbOSD.res" /d "NDEBUG"
+BSC32=bscmake.exe
+BSC32_FLAGS=/nologo /o"$(OUTDIR)\wbOSD.bsc"
+BSC32_SBRS= \
+
+LINK32=link.exe
+LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib comctl32.lib wsock32.lib /nologo /base:"0x32240000" /dll /incremental:no /pdb:"$(OUTDIR)\wbOSD.pdb" /machine:I386 /out:"$(OUTDIR)\wbOSD.dll" /implib:"$(OUTDIR)\wbOSD.lib" /filealign:512
+LINK32_OBJS= \
+ "$(INTDIR)\events.obj" \
+ "$(INTDIR)\main.obj" \
+ "$(INTDIR)\options.obj" \
+ "$(INTDIR)\wbOSD.obj" \
+ "$(INTDIR)\wbOSD.res"
+
+"$(OUTDIR)\wbOSD.dll" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
+ $(LINK32) @<<
+ $(LINK32_FLAGS) $(LINK32_OBJS)
+<<
+
+!ELSEIF "$(CFG)" == "wbOSD - Win32 Debug"
+
+OUTDIR=.\Debug
+INTDIR=.\Debug
+# Begin Custom Macros
+OutDir=.\Debug
+# End Custom Macros
+
+ALL : "$(OUTDIR)\wbOSD.dll"
+
+
+CLEAN :
+ -@erase "$(INTDIR)\events.obj"
+ -@erase "$(INTDIR)\main.obj"
+ -@erase "$(INTDIR)\options.obj"
+ -@erase "$(INTDIR)\vc60.idb"
+ -@erase "$(INTDIR)\vc60.pdb"
+ -@erase "$(INTDIR)\wbOSD.obj"
+ -@erase "$(INTDIR)\wbOSD.pch"
+ -@erase "$(INTDIR)\wbOSD.res"
+ -@erase "$(OUTDIR)\wbOSD.dll"
+ -@erase "$(OUTDIR)\wbOSD.exp"
+ -@erase "$(OUTDIR)\wbOSD.ilk"
+ -@erase "$(OUTDIR)\wbOSD.pdb"
+
+"$(OUTDIR)" :
+ if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
+
+CPP_PROJ=/nologo /MDd /W3 /Gm /GX /ZI /Od /I "../../include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /Fp"$(INTDIR)\wbOSD.pch" /Yu"wbOSD.h" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /GZ /c
+MTL_PROJ=/nologo /D "_DEBUG" /mktyplib203 /win32
+RSC_PROJ=/l 0x40d /fo"$(INTDIR)\wbOSD.res" /d "_DEBUG"
+BSC32=bscmake.exe
+BSC32_FLAGS=/nologo /o"$(OUTDIR)\wbOSD.bsc"
+BSC32_SBRS= \
+
+LINK32=link.exe
+LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib comctl32.lib /nologo /dll /incremental:yes /pdb:"$(OUTDIR)\wbOSD.pdb" /debug /machine:I386 /out:"$(OUTDIR)\wbOSD.dll" /implib:"$(OUTDIR)\wbOSD.lib" /pdbtype:sept
+LINK32_OBJS= \
+ "$(INTDIR)\events.obj" \
+ "$(INTDIR)\main.obj" \
+ "$(INTDIR)\options.obj" \
+ "$(INTDIR)\wbOSD.obj" \
+ "$(INTDIR)\wbOSD.res"
+
+"$(OUTDIR)\wbOSD.dll" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
+ $(LINK32) @<<
+ $(LINK32_FLAGS) $(LINK32_OBJS)
+<<
+
+!ELSEIF "$(CFG)" == "wbOSD - Win32 Debug Unicode"
+
+OUTDIR=.\Debug_Unicode
+INTDIR=.\Debug_Unicode
+# Begin Custom Macros
+OutDir=.\Debug_Unicode
+# End Custom Macros
+
+ALL : "$(OUTDIR)\wbOSD.dll"
+
+
+CLEAN :
+ -@erase "$(INTDIR)\events.obj"
+ -@erase "$(INTDIR)\main.obj"
+ -@erase "$(INTDIR)\options.obj"
+ -@erase "$(INTDIR)\vc60.idb"
+ -@erase "$(INTDIR)\vc60.pdb"
+ -@erase "$(INTDIR)\wbOSD.obj"
+ -@erase "$(INTDIR)\wbOSD.pch"
+ -@erase "$(INTDIR)\wbOSD.res"
+ -@erase "$(OUTDIR)\wbOSD.dll"
+ -@erase "$(OUTDIR)\wbOSD.exp"
+ -@erase "$(OUTDIR)\wbOSD.ilk"
+ -@erase "$(OUTDIR)\wbOSD.pdb"
+
+"$(OUTDIR)" :
+ if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
+
+CPP_PROJ=/nologo /MDd /W3 /Gm /GX /ZI /Od /I "../../include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_UNICODE" /D "UNICODE" /D "_USRDLL" /Fp"$(INTDIR)\wbOSD.pch" /Yu"wbOSD.h" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /GZ /c
+MTL_PROJ=/nologo /D "_DEBUG" /mktyplib203 /win32
+RSC_PROJ=/l 0x40d /fo"$(INTDIR)\wbOSD.res" /d "_DEBUG"
+BSC32=bscmake.exe
+BSC32_FLAGS=/nologo /o"$(OUTDIR)\wbOSD.bsc"
+BSC32_SBRS= \
+
+LINK32=link.exe
+LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib comctl32.lib wsock.lib /nologo /dll /incremental:yes /pdb:"$(OUTDIR)\wbOSD.pdb" /debug /machine:I386 /out:"$(OUTDIR)\wbOSD.dll" /implib:"$(OUTDIR)\wbOSD.lib" /pdbtype:sept
+LINK32_OBJS= \
+ "$(INTDIR)\events.obj" \
+ "$(INTDIR)\main.obj" \
+ "$(INTDIR)\options.obj" \
+ "$(INTDIR)\wbOSD.obj" \
+ "$(INTDIR)\wbOSD.res"
+
+"$(OUTDIR)\wbOSD.dll" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
+ $(LINK32) @<<
+ $(LINK32_FLAGS) $(LINK32_OBJS)
+<<
+
+!ELSEIF "$(CFG)" == "wbOSD - Win32 Release Unicode"
+
+OUTDIR=.\Release_Unicode
+INTDIR=.\Release_Unicode
+# Begin Custom Macros
+OutDir=.\Release_Unicode
+# End Custom Macros
+
+ALL : "$(OUTDIR)\wbOSD.dll"
+
+
+CLEAN :
+ -@erase "$(INTDIR)\events.obj"
+ -@erase "$(INTDIR)\main.obj"
+ -@erase "$(INTDIR)\options.obj"
+ -@erase "$(INTDIR)\vc60.idb"
+ -@erase "$(INTDIR)\vc60.pdb"
+ -@erase "$(INTDIR)\wbOSD.obj"
+ -@erase "$(INTDIR)\wbOSD.pch"
+ -@erase "$(INTDIR)\wbOSD.res"
+ -@erase "$(OUTDIR)\wbOSD.dll"
+ -@erase "$(OUTDIR)\wbOSD.exp"
+
+"$(OUTDIR)" :
+ if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
+
+CPP_PROJ=/nologo /MD /W3 /GX /Zi /O1 /I "../../include" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_UNICODE" /D "UNICODE" /D "_USRDLL" /D "wbOSD_EXPORTS" /Fp"$(INTDIR)\wbOSD.pch" /Yu"wbOSD.h" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c
+MTL_PROJ=/nologo /D "NDEBUG" /mktyplib203 /win32
+RSC_PROJ=/l 0x409 /fo"$(INTDIR)\wbOSD.res" /d "NDEBUG"
+BSC32=bscmake.exe
+BSC32_FLAGS=/nologo /o"$(OUTDIR)\wbOSD.bsc"
+BSC32_SBRS= \
+
+LINK32=link.exe
+LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib comctl32.lib wsock32.lib /nologo /base:"0x32240000" /dll /incremental:no /pdb:"$(OUTDIR)\wbOSD.pdb" /machine:I386 /out:"$(OUTDIR)\wbOSD.dll" /implib:"$(OUTDIR)\wbOSD.lib" /filealign:512
+LINK32_OBJS= \
+ "$(INTDIR)\events.obj" \
+ "$(INTDIR)\main.obj" \
+ "$(INTDIR)\options.obj" \
+ "$(INTDIR)\wbOSD.obj" \
+ "$(INTDIR)\wbOSD.res"
+
+"$(OUTDIR)\wbOSD.dll" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
+ $(LINK32) @<<
+ $(LINK32_FLAGS) $(LINK32_OBJS)
+<<
+
+!ENDIF
+
+.c{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cpp{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cxx{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.c{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cpp{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cxx{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+
+!IF "$(NO_EXTERNAL_DEPS)" != "1"
+!IF EXISTS("wbOSD.dep")
+!INCLUDE "wbOSD.dep"
+!ELSE
+!MESSAGE Warning: cannot find "wbOSD.dep"
+!ENDIF
+!ENDIF
+
+
+!IF "$(CFG)" == "wbOSD - Win32 Release" || "$(CFG)" == "wbOSD - Win32 Debug" || "$(CFG)" == "wbOSD - Win32 Debug Unicode" || "$(CFG)" == "wbOSD - Win32 Release Unicode"
+SOURCE=.\events.cpp
+
+"$(INTDIR)\events.obj" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\wbOSD.pch"
+
+
+SOURCE=.\main.cpp
+
+!IF "$(CFG)" == "wbOSD - Win32 Release"
+
+CPP_SWITCHES=/nologo /MD /W3 /GX /Zi /O1 /I "../../include" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /Fp"$(INTDIR)\wbOSD.pch" /Yc"wbOSD.h" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c
+
+"$(INTDIR)\main.obj" "$(INTDIR)\wbOSD.pch" : $(SOURCE) "$(INTDIR)"
+ $(CPP) @<<
+ $(CPP_SWITCHES) $(SOURCE)
+<<
+
+
+!ELSEIF "$(CFG)" == "wbOSD - Win32 Debug"
+
+CPP_SWITCHES=/nologo /MDd /W3 /Gm /GX /ZI /Od /I "../../include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /Fp"$(INTDIR)\wbOSD.pch" /Yc"wbOSD.h" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /GZ /c
+
+"$(INTDIR)\main.obj" "$(INTDIR)\wbOSD.pch" : $(SOURCE) "$(INTDIR)"
+ $(CPP) @<<
+ $(CPP_SWITCHES) $(SOURCE)
+<<
+
+
+!ELSEIF "$(CFG)" == "wbOSD - Win32 Debug Unicode"
+
+CPP_SWITCHES=/nologo /MDd /W3 /Gm /GX /ZI /Od /I "../../include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_UNICODE" /D "UNICODE" /D "_USRDLL" /Fp"$(INTDIR)\wbOSD.pch" /Yc"wbOSD.h" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /GZ /c
+
+"$(INTDIR)\main.obj" "$(INTDIR)\wbOSD.pch" : $(SOURCE) "$(INTDIR)"
+ $(CPP) @<<
+ $(CPP_SWITCHES) $(SOURCE)
+<<
+
+
+!ELSEIF "$(CFG)" == "wbOSD - Win32 Release Unicode"
+
+CPP_SWITCHES=/nologo /MD /W3 /GX /Zi /O1 /I "../../include" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_UNICODE" /D "UNICODE" /D "_USRDLL" /D "wbOSD_EXPORTS" /Fp"$(INTDIR)\wbOSD.pch" /Yc"wbOSD.h" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c
+
+"$(INTDIR)\main.obj" "$(INTDIR)\wbOSD.pch" : $(SOURCE) "$(INTDIR)"
+ $(CPP) @<<
+ $(CPP_SWITCHES) $(SOURCE)
+<<
+
+
+!ENDIF
+
+SOURCE=.\options.cpp
+
+"$(INTDIR)\options.obj" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\wbOSD.pch"
+
+
+SOURCE=.\wbOSD.cpp
+
+"$(INTDIR)\wbOSD.obj" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\wbOSD.pch"
+
+
+SOURCE=.\wbOSD.rc
+
+"$(INTDIR)\wbOSD.res" : $(SOURCE) "$(INTDIR)"
+ $(RSC) $(RSC_PROJ) $(SOURCE)
+
+
+
+!ENDIF
+
diff --git a/wbOSD/wbOSD.rc b/wbOSD/wbOSD.rc
new file mode 100644
index 0000000..0dad96f
--- /dev/null
+++ b/wbOSD/wbOSD.rc
@@ -0,0 +1,188 @@
+// Microsoft Visual C++ generated resource script.
+//
+#include "resource.h"
+
+#define APSTUDIO_READONLY_SYMBOLS
+/////////////////////////////////////////////////////////////////////////////
+//
+// Generated from the TEXTINCLUDE 2 resource.
+//
+#include "afxres.h"
+
+/////////////////////////////////////////////////////////////////////////////
+#undef APSTUDIO_READONLY_SYMBOLS
+
+/////////////////////////////////////////////////////////////////////////////
+// Slovak resources
+
+#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_SKY)
+#ifdef _WIN32
+LANGUAGE LANG_SLOVAK, SUBLANG_DEFAULT
+#pragma code_page(1250)
+#endif //_WIN32
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// Dialog
+//
+
+IDD_DIALOG1 DIALOGEX 0, 0, 316, 250
+STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION
+CAPTION "Dialog"
+FONT 8, "MS Shell Dlg", 400, 0, 0x1
+BEGIN
+ CONTROL "Radio1",IDC_RADIO1,"Button",BS_AUTORADIOBUTTON |
+ WS_GROUP,21,22,8,8
+ CONTROL "Radio1",IDC_RADIO2,"Button",BS_AUTORADIOBUTTON,39,22,8,
+ 8
+ CONTROL "Radio1",IDC_RADIO3,"Button",BS_AUTORADIOBUTTON,59,22,8,
+ 8
+ CONTROL "Radio1",IDC_RADIO4,"Button",BS_AUTORADIOBUTTON,21,33,8,
+ 8
+ CONTROL "Radio1",IDC_RADIO5,"Button",BS_AUTORADIOBUTTON,39,33,8,
+ 8
+ CONTROL "Radio1",IDC_RADIO6,"Button",BS_AUTORADIOBUTTON,59,33,8,
+ 8
+ CONTROL "Radio1",IDC_RADIO7,"Button",BS_AUTORADIOBUTTON,21,45,8,
+ 8
+ CONTROL "Radio1",IDC_RADIO8,"Button",BS_AUTORADIOBUTTON,39,45,8,
+ 8
+ CONTROL "Radio1",IDC_RADIO9,"Button",BS_AUTORADIOBUTTON,59,45,8,
+ 8
+ PUSHBUTTON "Select font",IDC_BUTTON1,80,17,68,14
+ PUSHBUTTON "Text color",IDC_BUTTON2,175,91,68,14
+ PUSHBUTTON "Background color",IDC_BUTTON4,11,182,67,14
+ CONTROL "Transparent",IDC_CHECK3,"Button",BS_AUTOCHECKBOX |
+ WS_TABSTOP,11,199,72,10
+ CONTROL "Radio1",IDC_RADIO10,"Button",BS_AUTORADIOBUTTON |
+ WS_GROUP,21,99,8,8
+ CONTROL "Radio1",IDC_RADIO11,"Button",BS_AUTORADIOBUTTON,39,99,8,
+ 8
+ CONTROL "Radio1",IDC_RADIO12,"Button",BS_AUTORADIOBUTTON,59,99,8,
+ 8
+ CONTROL "Radio1",IDC_RADIO13,"Button",BS_AUTORADIOBUTTON,21,110,
+ 8,8
+ CONTROL "Radio1",IDC_RADIO14,"Button",BS_AUTORADIOBUTTON,39,110,
+ 8,8
+ CONTROL "Radio1",IDC_RADIO15,"Button",BS_AUTORADIOBUTTON,59,110,
+ 8,8
+ CONTROL "Radio1",IDC_RADIO16,"Button",BS_AUTORADIOBUTTON,21,121,
+ 8,8
+ CONTROL "Radio1",IDC_RADIO17,"Button",BS_AUTORADIOBUTTON,39,121,
+ 8,8
+ CONTROL "Radio1",IDC_RADIO18,"Button",BS_AUTORADIOBUTTON,59,121,
+ 8,8
+ PUSHBUTTON "Shadow color",IDC_BUTTON3,80,92,67,14
+ CONTROL "Alternative shadow",IDC_CHECK1,"Button",BS_AUTOCHECKBOX |
+ WS_TABSTOP,13,135,133,10
+ EDITTEXT IDC_EDIT1,79,148,27,14,ES_AUTOHSCROLL | ES_NUMBER
+ GROUPBOX "Shadow align",IDC_STATIC,13,89,62,43
+ GROUPBOX "General",IDC_STATIC,6,0,150,66
+ GROUPBOX "Shadow",IDC_STATIC,5,70,151,99
+ GROUPBOX "Align",IDC_STATIC,13,13,61,43
+ LTEXT "Shadow distance:",IDC_STATIC,10,151,64,8,
+ SS_PATHELLIPSIS,WS_EX_RIGHT
+ GROUPBOX "Other",IDC_STATIC,5,171,152,75
+ LTEXT "Alpha:",IDC_STATIC,92,183,60,8,SS_PATHELLIPSIS
+ GROUPBOX "Announce",IDC_STATIC,162,0,150,246
+ LTEXT "Timeout (ms):",IDC_STATIC,91,213,62,8,SS_PATHELLIPSIS
+ EDITTEXT IDC_EDIT5,91,224,27,14,ES_AUTOHSCROLL | ES_NUMBER
+ CONTROL "",IDC_TREE1,"SysTreeView32",TVS_DISABLEDRAGDROP |
+ TVS_NOTOOLTIPS | WS_BORDER | WS_TABSTOP | 0x4000,170,22,
+ 138,55
+ CONTROL "Show",IDC_CHECK4,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,
+ 13,80,85,10
+ CONTROL "Show events",IDC_CHECK5,"Button",BS_AUTOCHECKBOX |
+ WS_TABSTOP,167,110,139,10
+ CONTROL "Status changes",IDC_CHECK6,"Button",BS_AUTOCHECKBOX |
+ WS_TABSTOP,167,10,136,10
+ PUSHBUTTON "Show testing OSD",IDC_BUTTON5,11,224,67,14
+ CONTROL "Show my status changes",IDC_CHECK7,"Button",
+ BS_AUTOCHECKBOX | WS_TABSTOP,175,80,133,10
+ CONTROL "Show message window after click",IDC_CHECK2,"Button",
+ BS_AUTOCHECKBOX | WS_TABSTOP,167,156,138,10
+ CONTROL "",IDC_SLIDER1,"msctls_trackbar32",TBS_BOTH |
+ TBS_NOTICKS | WS_TABSTOP,87,193,45,15
+ LTEXT "Static",IDC_ALPHATXT,136,195,17,8
+ PUSHBUTTON "Text color",IDC_BUTTON6,175,121,68,14
+ EDITTEXT IDC_EDIT2,214,137,81,14,ES_AUTOHSCROLL
+ LTEXT "Format:",IDC_STATIC,177,140,35,8
+ PUSHBUTTON "?",IDC_BUTTON7,298,137,10,14
+ CONTROL "",IDC_TREE2,"SysTreeView32",TVS_DISABLEDRAGDROP |
+ TVS_NOTOOLTIPS | WS_BORDER | WS_TABSTOP | 0x4000,170,182,
+ 138,59
+ LTEXT "Show when my status is:",IDC_STATIC,168,171,139,8
+END
+
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// DESIGNINFO
+//
+
+#ifdef APSTUDIO_INVOKED
+GUIDELINES DESIGNINFO
+BEGIN
+ IDD_DIALOG1, DIALOG
+ BEGIN
+ LEFTMARGIN, 7
+ RIGHTMARGIN, 309
+ TOPMARGIN, 7
+ BOTTOMMARGIN, 243
+ END
+END
+#endif // APSTUDIO_INVOKED
+
+#endif // Slovak resources
+/////////////////////////////////////////////////////////////////////////////
+
+
+/////////////////////////////////////////////////////////////////////////////
+// English (U.S.) resources
+
+#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
+#ifdef _WIN32
+LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
+#pragma code_page(1252)
+#endif //_WIN32
+
+#ifdef APSTUDIO_INVOKED
+/////////////////////////////////////////////////////////////////////////////
+//
+// TEXTINCLUDE
+//
+
+1 TEXTINCLUDE
+BEGIN
+ "resource.h\0"
+END
+
+2 TEXTINCLUDE
+BEGIN
+ "#include ""afxres.h""\r\n"
+ "\0"
+END
+
+3 TEXTINCLUDE
+BEGIN
+ "\r\n"
+ "\0"
+END
+
+#endif // APSTUDIO_INVOKED
+
+#endif // English (U.S.) resources
+/////////////////////////////////////////////////////////////////////////////
+
+
+
+#ifndef APSTUDIO_INVOKED
+/////////////////////////////////////////////////////////////////////////////
+//
+// Generated from the TEXTINCLUDE 3 resource.
+//
+
+
+/////////////////////////////////////////////////////////////////////////////
+#endif // not APSTUDIO_INVOKED
+
diff --git a/wbOSD/wbOSD.vcproj b/wbOSD/wbOSD.vcproj
new file mode 100644
index 0000000..a6bdec2
--- /dev/null
+++ b/wbOSD/wbOSD.vcproj
@@ -0,0 +1,191 @@
+<?xml version="1.0" encoding="windows-1250"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="wbOSD"
+ ProjectGUID="{DA450122-7F0B-45DA-9EAA-421887AD8450}"
+ Keyword="Win32Proj">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="2"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;WBOSD_EXPORTS"
+ MinimalRebuild="TRUE"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="4"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ OutputFile="$(OutDir)/wbOSD.dll"
+ LinkIncremental="2"
+ GenerateDebugInformation="TRUE"
+ ProgramDatabaseFile="$(OutDir)/wbOSD.pdb"
+ SubSystem="2"
+ ImportLibrary="$(OutDir)/wbOSD.lib"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="2"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;WBOSD_EXPORTS"
+ RuntimeLibrary="0"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ DebugInformationFormat="3"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ OutputFile="..\..\bin\release\plugins\wbOSD.dll"
+ LinkIncremental="1"
+ GenerateDebugInformation="TRUE"
+ SubSystem="2"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ ImportLibrary="$(OutDir)/wbOSD.lib"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Release UNICODE|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="2"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;WBOSD_EXPORTS;UNICODE;_UNICODE"
+ RuntimeLibrary="0"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ DebugInformationFormat="3"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ OutputFile="..\..\bin\release\plugins\wbOSDW.dll"
+ LinkIncremental="1"
+ GenerateDebugInformation="TRUE"
+ SubSystem="2"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ ImportLibrary="$(OutDir)/wbOSD.lib"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}">
+ <File
+ RelativePath=".\events.c">
+ </File>
+ <File
+ RelativePath=".\wbOSD.c">
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}">
+ <File
+ RelativePath=".\wbOSD.h">
+ </File>
+ </Filter>
+ <Filter
+ Name="Resource Files"
+ Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx"
+ UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}">
+ <File
+ RelativePath=".\resource.h">
+ </File>
+ <File
+ RelativePath=".\wbOSD.rc">
+ </File>
+ </Filter>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/wbOSD/wbOSD_10.vcxproj b/wbOSD/wbOSD_10.vcxproj
new file mode 100644
index 0000000..606c60f
--- /dev/null
+++ b/wbOSD/wbOSD_10.vcxproj
@@ -0,0 +1,182 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug Unicode|Win32">
+ <Configuration>Debug Unicode</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release Unicode|Win32">
+ <Configuration>Release Unicode</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectName>wbOSD</ProjectName>
+ <ProjectGuid>{DA450122-7F0B-45DA-9EAA-421887AD8450}</ProjectGuid>
+ <Keyword>Win32Proj</Keyword>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <CharacterSet>Unicode</CharacterSet>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup>
+ <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)$(Configuration)/Plugins\</OutDir>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">$(SolutionDir)$(Configuration)/Plugins\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)$(Configuration)/Obj/$(ProjectName)\</IntDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">$(SolutionDir)$(Configuration)/Obj/$(ProjectName)\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">true</LinkIncremental>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)$(Configuration)/Plugins\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)$(Configuration)/Obj/$(ProjectName)\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'">$(SolutionDir)$(Configuration)/Plugins\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'">$(SolutionDir)$(Configuration)/Obj/$(ProjectName)\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'">false</LinkIncremental>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;WBOSD_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MinimalRebuild>true</MinimalRebuild>
+ <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+ <PrecompiledHeader>Use</PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
+ <AdditionalIncludeDirectories>../../include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PrecompiledHeaderFile>wbOSD.h</PrecompiledHeaderFile>
+ </ClCompile>
+ <Link>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <ProgramDatabaseFile>$(OutDir)wbOSD.pdb</ProgramDatabaseFile>
+ <SubSystem>Windows</SubSystem>
+ <ImportLibrary>$(OutDir)wbOSD.lib</ImportLibrary>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;WBOSD_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MinimalRebuild>true</MinimalRebuild>
+ <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+ <PrecompiledHeader>Use</PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
+ <AdditionalIncludeDirectories>../../include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PrecompiledHeaderFile>wbOSD.h</PrecompiledHeaderFile>
+ </ClCompile>
+ <Link>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <ProgramDatabaseFile>$(OutDir)wbOSD.pdb</ProgramDatabaseFile>
+ <SubSystem>Windows</SubSystem>
+ <ImportLibrary>$(OutDir)wbOSD.lib</ImportLibrary>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ClCompile>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;WBOSD_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <PrecompiledHeader>Use</PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ <Optimization>Full</Optimization>
+ <FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
+ <AdditionalIncludeDirectories>../../include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PrecompiledHeaderFile>wbOSD.h</PrecompiledHeaderFile>
+ </ClCompile>
+ <Link>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Windows</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <ImportLibrary>$(OutDir)wbOSD.lib</ImportLibrary>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'">
+ <ClCompile>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;WBOSD_EXPORTS;UNICODE;_UNICODE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <PrecompiledHeader>Use</PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ <Optimization>Full</Optimization>
+ <FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ <AdditionalIncludeDirectories>../../include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PrecompiledHeaderFile>wbOSD.h</PrecompiledHeaderFile>
+ </ClCompile>
+ <Link>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Windows</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <ImportLibrary>$(OutDir)wbOSD.lib</ImportLibrary>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClCompile Include="events.cpp" />
+ <ClCompile Include="main.cpp">
+ <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Create</PrecompiledHeader>
+ <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release UNICODE|Win32'">Create</PrecompiledHeader>
+ <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Create</PrecompiledHeader>
+ <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">Create</PrecompiledHeader>
+ </ClCompile>
+ <ClCompile Include="options.cpp" />
+ <ClCompile Include="wbOSD.cpp" />
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="wbOSD.h" />
+ <ClInclude Include="resource.h" />
+ </ItemGroup>
+ <ItemGroup>
+ <ResourceCompile Include="wbOSD.rc" />
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project> \ No newline at end of file
diff --git a/wbOSD/wbOSD_10.vcxproj.filters b/wbOSD/wbOSD_10.vcxproj.filters
new file mode 100644
index 0000000..e50c5a8
--- /dev/null
+++ b/wbOSD/wbOSD_10.vcxproj.filters
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup>
+ <Filter Include="Source Files">
+ <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
+ <Extensions>cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
+ </Filter>
+ <Filter Include="Header Files">
+ <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
+ <Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
+ </Filter>
+ <Filter Include="Resource Files">
+ <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
+ <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx</Extensions>
+ </Filter>
+ </ItemGroup>
+ <ItemGroup>
+ <ClCompile Include="events.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="wbOSD.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="main.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="options.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="wbOSD.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="resource.h">
+ <Filter>Resource Files</Filter>
+ </ClInclude>
+ </ItemGroup>
+ <ItemGroup>
+ <ResourceCompile Include="wbOSD.rc">
+ <Filter>Resource Files</Filter>
+ </ResourceCompile>
+ </ItemGroup>
+</Project> \ No newline at end of file
diff --git a/wbOSD/wbOSD_9.vcproj b/wbOSD/wbOSD_9.vcproj
new file mode 100644
index 0000000..acf4980
--- /dev/null
+++ b/wbOSD/wbOSD_9.vcproj
@@ -0,0 +1,423 @@
+<?xml version="1.0" encoding="windows-1250"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="9,00"
+ Name="wbOSD"
+ ProjectGUID="{DA450122-7F0B-45DA-9EAA-421887AD8450}"
+ RootNamespace="wbOSD"
+ Keyword="Win32Proj"
+ TargetFrameworkVersion="131072"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)/Plugins"
+ IntermediateDirectory="$(SolutionDir)$(ConfigurationName)/Obj/$(ProjectName)"
+ ConfigurationType="2"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="../../include"
+ PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;WBOSD_EXPORTS"
+ MinimalRebuild="true"
+ ExceptionHandling="0"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ UsePrecompiledHeader="2"
+ PrecompiledHeaderThrough="wbOSD.h"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/wbOSD.pdb"
+ SubSystem="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ ImportLibrary="$(OutDir)/wbOSD.lib"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)/Plugins"
+ IntermediateDirectory="$(SolutionDir)$(ConfigurationName)/Obj/$(ProjectName)"
+ ConfigurationType="2"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="../../include"
+ PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;WBOSD_EXPORTS"
+ ExceptionHandling="0"
+ RuntimeLibrary="2"
+ UsePrecompiledHeader="2"
+ PrecompiledHeaderThrough="wbOSD.h"
+ WarningLevel="3"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="2"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ ImportLibrary="$(OutDir)/wbOSD.lib"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release Unicode|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)/Plugins"
+ IntermediateDirectory="$(SolutionDir)$(ConfigurationName)/Obj/$(ProjectName)"
+ ConfigurationType="2"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="3"
+ FavorSizeOrSpeed="2"
+ AdditionalIncludeDirectories="../../include"
+ PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;WBOSD_EXPORTS;UNICODE;_UNICODE"
+ StringPooling="true"
+ ExceptionHandling="0"
+ RuntimeLibrary="2"
+ UsePrecompiledHeader="2"
+ PrecompiledHeaderThrough="wbOSD.h"
+ WarningLevel="3"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="2"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ ImportLibrary="$(OutDir)/wbOSD.lib"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug Unicode|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)/Plugins"
+ IntermediateDirectory="$(SolutionDir)$(ConfigurationName)/Obj/$(ProjectName)"
+ ConfigurationType="2"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="../../include"
+ PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;WBOSD_EXPORTS"
+ MinimalRebuild="true"
+ ExceptionHandling="0"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ UsePrecompiledHeader="2"
+ PrecompiledHeaderThrough="wbOSD.h"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/wbOSD.pdb"
+ SubSystem="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ ImportLibrary="$(OutDir)/wbOSD.lib"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+ >
+ <File
+ RelativePath=".\events.cpp"
+ >
+ </File>
+ <File
+ RelativePath=".\main.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ UsePrecompiledHeader="1"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ UsePrecompiledHeader="1"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Unicode|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ UsePrecompiledHeader="1"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Unicode|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ UsePrecompiledHeader="1"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath=".\options.cpp"
+ >
+ </File>
+ <File
+ RelativePath=".\wbOSD.cpp"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
+ >
+ <File
+ RelativePath=".\wbOSD.h"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Resource Files"
+ Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx"
+ UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
+ >
+ <File
+ RelativePath=".\resource.h"
+ >
+ </File>
+ <File
+ RelativePath=".\wbOSD.rc"
+ >
+ </File>
+ </Filter>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>