From 1216b6c0235d6f55c29671c6b2b1074c8962da38 Mon Sep 17 00:00:00 2001 From: Kirill Volinsky Date: Wed, 10 Oct 2012 09:06:13 +0000 Subject: mRadio moved to protocols in fpc.cfg added pathes for protocols folder git-svn-id: http://svn.miranda-ng.org/main/trunk@1859 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c --- protocols/mRadio/i_tray_api.inc | 125 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 125 insertions(+) create mode 100644 protocols/mRadio/i_tray_api.inc (limited to 'protocols/mRadio/i_tray_api.inc') diff --git a/protocols/mRadio/i_tray_api.inc b/protocols/mRadio/i_tray_api.inc new file mode 100644 index 0000000000..9339a10613 --- /dev/null +++ b/protocols/mRadio/i_tray_api.inc @@ -0,0 +1,125 @@ +{} +type + pTrayRadioStation = ^tTrayRadioStation; + tTrayRadioStation = record + name:pWideChar; + handle:THANDLE; + end; + +function MyStrSort(para1:pointer; para2:pointer):int; cdecl; +begin + result:=StrCmpW(pTrayRadioStation(para1).name,pTrayRadioStation(para2).name); +end; + +function MakeStationsMenu:HMENU; +var + hContact:Cardinal; + sl:TSortedList; + p:pWideChar; + i:integer; + flag:integer; + tmp:pTrayRadioStation; +begin + result:=CreatePopupMenu; + if result<>0 then + begin + FillChar(sl,SizeOf(sl),0); + sl.increment:=16; + sl.sortFunc:=@MyStrSort; + hContact:=CallService(MS_DB_CONTACT_FINDFIRST,0,0); + while hContact<>0 do + begin + if StrCmp(PAnsiChar(CallService(MS_PROTO_GETCONTACTBASEPROTO,hContact,0)),cPluginName)=0 then + begin + p:=DBReadUnicode(hContact,strCList,'MyHandle',nil); + if p<>nil then + begin + mGetMem(tmp,SizeOf(tTrayRadioStation)); + tmp.name:=p; + tmp.handle:=hContact; + List_InsertPtr(@sl,tmp); + end; + end; + hContact:=CallService(MS_DB_CONTACT_FINDNEXT,hContact,0); + end; + + for i:=0 to sl.realCount-1 do + begin + if (i=0) or ((i mod 20)<>0) then + flag:=MF_STRING + else + flag:=MF_STRING or MF_MENUBARBREAK; + tmp:=sl.Items[i]; + AppendMenuW(result,flag,tmp.handle,tmp.name); + mFreeMem(tmp.name); + mFreeMem(tmp); + end; + List_Destroy(@sl); + end; +end; + +function CreateTrayMenu(wParam:WPARAM;lParam:LPARAM):int; cdecl; +const + startid = 100; +var + menu:HMENU; + flag,id:integer; + pt:TPOINT; + playstr:pWideChar; +begin + id:=0; + menu:=CreatePopupMenu; + if menu<>0 then + begin + if gVolume<0 then + flag:=MF_STRING+MF_CHECKED + else + flag:=MF_STRING+MF_UNCHECKED; + + if CallService(MS_RADIO_COMMAND,MRC_STATUS,RD_STATUS_GET)<>RD_STATUS_PAUSED then + playstr:='Pause' + else + playstr:='Play'; + + AppendMenuW(menu,flag ,startid+1,TranslateW('Mute')); + AppendMenuW(menu,MF_STRING,startid+2,TranslateW(playstr)); + AppendMenuW(menu,MF_STRING,startid+3,TranslateW('Stop')); + AppendMenuW(menu,MF_SEPARATOR,0,nil); + AppendMenuW(menu,MF_POPUP,MakeStationsMenu,TranslateW('Play Station')); + GetCursorPos(pt); + id:=integer(TrackPopupMenu(menu,TPM_RETURNCMD+TPM_NONOTIFY,pt.x,pt.y,0,hiddenwindow,nil)); + case id of + 0: ; // nothing + startid+1: begin // mute + Service_RadioMute(0,0); + end; + startid+2: begin // play/pause + CallService(MS_RADIO_COMMAND,MRC_PAUSE,0); + end; + startid+3: begin // stop + CallService(MS_RADIO_COMMAND,MRC_STOP,0); + end; + else // choose station + Service_RadioPlayStop(id,0); + end; + DestroyMenu(menu); + end; + result:=id; +end; + +procedure CreateMIMTrayMenu; +var + mi:TCListMenuItem; +begin + if ServiceExists(MS_CLIST_ADDTRAYMENUITEM)<>0 then +// if hiddenwindow<>0 then + begin + FillChar(mi, sizeof(mi), 0); + mi.cbSize :=sizeof(mi); + mi.pszService:=MS_RADIO_TRAYMENU; + mi.szName.a :=cPluginName; + mi.hIcon :=CallService(MS_SKIN2_GETICON,0,lparam(IcoBtnSettings)); + Menu_AddTrayMenuItem(@mi); + end; +end; + -- cgit v1.2.3