[Freeswitch-svn] [commit] r2449 - in freeswitch/trunk/gtalkphone: . Setup SkinWin freeswitch freeswitch/include freeswitch/source google https imphone imphone/debug mixer mixer/include mixer/source monitor res skin skin/google skin/google/css skin/google/css/gtalkphone skin/google/js skin/google/res ui ui/include ui/source
Author: zebra Date: Wed Aug 30 11:21:42 2006 New Revision: 2449 Added: freeswitch/trunk/gtalkphone/ freeswitch/trunk/gtalkphone/Setup/ freeswitch/trunk/gtalkphone/Setup/Setup.vdproj freeswitch/trunk/gtalkphone/SkinWin/ freeswitch/trunk/gtalkphone/SkinWin/EnBitmap.cpp freeswitch/trunk/gtalkphone/SkinWin/EnBitmap.h freeswitch/trunk/gtalkphone/SkinWin/MyBitmap.cpp freeswitch/trunk/gtalkphone/SkinWin/MyBitmap.h freeswitch/trunk/gtalkphone/SkinWin/SkinWin.cpp freeswitch/trunk/gtalkphone/SkinWin/SkinWin.h freeswitch/trunk/gtalkphone/SkinWin/Subclass.cpp freeswitch/trunk/gtalkphone/SkinWin/Subclass.h freeswitch/trunk/gtalkphone/SkinWin/Utils.cpp freeswitch/trunk/gtalkphone/StdAfx.cpp freeswitch/trunk/gtalkphone/StdAfx.h freeswitch/trunk/gtalkphone/const.h freeswitch/trunk/gtalkphone/freeswitch/ freeswitch/trunk/gtalkphone/freeswitch.xml freeswitch/trunk/gtalkphone/freeswitch/include/ freeswitch/trunk/gtalkphone/freeswitch/include/freeswitch.h freeswitch/trunk/gtalkphone/freeswitch/source/ freeswitch/trunk/gtalkphone/freeswitch/source/freeswitch.cpp freeswitch/trunk/gtalkphone/google/ freeswitch/trunk/gtalkphone/google/HYPERLINK.CPP freeswitch/trunk/gtalkphone/google/HYPERLINK.H freeswitch/trunk/gtalkphone/google/StdAfx.cpp freeswitch/trunk/gtalkphone/google/StdAfx.h freeswitch/trunk/gtalkphone/google/chatButton_down.bmp (contents, props changed) freeswitch/trunk/gtalkphone/google/chatButton_up.bmp (contents, props changed) freeswitch/trunk/gtalkphone/google/cursor1.cur (contents, props changed) freeswitch/trunk/gtalkphone/google/google.aps (contents, props changed) freeswitch/trunk/gtalkphone/google/google.cpp freeswitch/trunk/gtalkphone/google/google.def freeswitch/trunk/gtalkphone/google/google.dsp freeswitch/trunk/gtalkphone/google/google.dsw freeswitch/trunk/gtalkphone/google/google.exp (contents, props changed) freeswitch/trunk/gtalkphone/google/google.h freeswitch/trunk/gtalkphone/google/google.lib (contents, props changed) freeswitch/trunk/gtalkphone/google/google.rc freeswitch/trunk/gtalkphone/google/google.vcproj freeswitch/trunk/gtalkphone/google/google.vcproj.D57JVH91.Asterlink.user freeswitch/trunk/gtalkphone/google/google2.h freeswitch/trunk/gtalkphone/google/mainbutton.bmp (contents, props changed) freeswitch/trunk/gtalkphone/google/resource.h freeswitch/trunk/gtalkphone/gtalkphone.aps (contents, props changed) freeswitch/trunk/gtalkphone/gtalkphone.cpp freeswitch/trunk/gtalkphone/gtalkphone.h freeswitch/trunk/gtalkphone/gtalkphone.ncb (contents, props changed) freeswitch/trunk/gtalkphone/gtalkphone.rc freeswitch/trunk/gtalkphone/gtalkphone.sln freeswitch/trunk/gtalkphone/gtalkphone.suo (contents, props changed) freeswitch/trunk/gtalkphone/gtalkphone.vcproj freeswitch/trunk/gtalkphone/gtalkphone.vcproj.D57JVH91.Asterlink.user freeswitch/trunk/gtalkphone/https/ freeswitch/trunk/gtalkphone/https/gtalkphone_https.cpp freeswitch/trunk/gtalkphone/https/gtalkphone_https.h freeswitch/trunk/gtalkphone/imphone/ freeswitch/trunk/gtalkphone/imphone/debug/ freeswitch/trunk/gtalkphone/imphone/debug/google.dll (contents, props changed) freeswitch/trunk/gtalkphone/imphone/debug/google.ilk (contents, props changed) freeswitch/trunk/gtalkphone/mixer/ freeswitch/trunk/gtalkphone/mixer/include/ freeswitch/trunk/gtalkphone/mixer/include/MixerBase.h freeswitch/trunk/gtalkphone/mixer/include/MixerFader.h freeswitch/trunk/gtalkphone/mixer/source/ freeswitch/trunk/gtalkphone/mixer/source/MixerBase.cpp freeswitch/trunk/gtalkphone/mixer/source/MixerFader.cpp freeswitch/trunk/gtalkphone/monitor/ freeswitch/trunk/gtalkphone/monitor/MonThread.cpp freeswitch/trunk/gtalkphone/monitor/MonThread.h freeswitch/trunk/gtalkphone/monitor/MoniWnd.cpp freeswitch/trunk/gtalkphone/monitor/MoniWnd.h freeswitch/trunk/gtalkphone/res/ freeswitch/trunk/gtalkphone/res/Toolbar.bmp (contents, props changed) freeswitch/trunk/gtalkphone/res/gtalkphone.ico (contents, props changed) freeswitch/trunk/gtalkphone/res/gtalkphone.rc2 freeswitch/trunk/gtalkphone/res/gtalkphoneDoc.ico (contents, props changed) freeswitch/trunk/gtalkphone/resource.h freeswitch/trunk/gtalkphone/skin/ freeswitch/trunk/gtalkphone/skin/google/ freeswitch/trunk/gtalkphone/skin/google/.DS_Store (contents, props changed) freeswitch/trunk/gtalkphone/skin/google/Buttons.bmp (contents, props changed) freeswitch/trunk/gtalkphone/skin/google/Checkbox.bmp (contents, props changed) freeswitch/trunk/gtalkphone/skin/google/Radio.bmp (contents, props changed) freeswitch/trunk/gtalkphone/skin/google/Thumbs.db (contents, props changed) freeswitch/trunk/gtalkphone/skin/google/bottom.bmp (contents, props changed) freeswitch/trunk/gtalkphone/skin/google/close.bmp (contents, props changed) freeswitch/trunk/gtalkphone/skin/google/css/ freeswitch/trunk/gtalkphone/skin/google/css/boxsizing.htc freeswitch/trunk/gtalkphone/skin/google/css/gtalkphone/ freeswitch/trunk/gtalkphone/skin/google/css/gtalkphone.css freeswitch/trunk/gtalkphone/skin/google/css/gtalkphone/Thumbs.db (contents, props changed) freeswitch/trunk/gtalkphone/skin/google/css/gtalkphone/gtalkphone.css freeswitch/trunk/gtalkphone/skin/google/css/gtalkphone/handl2e.horizontal.bmp (contents, props changed) freeswitch/trunk/gtalkphone/skin/google/css/gtalkphone/handle.horizontal.bmp (contents, props changed) freeswitch/trunk/gtalkphone/skin/google/css/winclassic.css freeswitch/trunk/gtalkphone/skin/google/gtalkphone.htm freeswitch/trunk/gtalkphone/skin/google/gtalkphone.htm.2 freeswitch/trunk/gtalkphone/skin/google/js/ freeswitch/trunk/gtalkphone/skin/google/js/range.js freeswitch/trunk/gtalkphone/skin/google/js/slider.js freeswitch/trunk/gtalkphone/skin/google/js/timer.js freeswitch/trunk/gtalkphone/skin/google/left.bmp (contents, props changed) freeswitch/trunk/gtalkphone/skin/google/max.bmp (contents, props changed) freeswitch/trunk/gtalkphone/skin/google/min.bmp (contents, props changed) freeswitch/trunk/gtalkphone/skin/google/res/ freeswitch/trunk/gtalkphone/skin/google/res/.DS_Store (contents, props changed) freeswitch/trunk/gtalkphone/skin/google/res/NUM#.gif (contents, props changed) freeswitch/trunk/gtalkphone/skin/google/res/NUM0.gif (contents, props changed) freeswitch/trunk/gtalkphone/skin/google/res/NUM1.gif (contents, props changed) freeswitch/trunk/gtalkphone/skin/google/res/NUM2.gif (contents, props changed) freeswitch/trunk/gtalkphone/skin/google/res/NUM3.gif (contents, props changed) freeswitch/trunk/gtalkphone/skin/google/res/NUM4.gif (contents, props changed) freeswitch/trunk/gtalkphone/skin/google/res/NUM5.gif (contents, props changed) freeswitch/trunk/gtalkphone/skin/google/res/NUM6.gif (contents, props changed) freeswitch/trunk/gtalkphone/skin/google/res/NUM7.gif (contents, props changed) freeswitch/trunk/gtalkphone/skin/google/res/NUM8.gif (contents, props changed) freeswitch/trunk/gtalkphone/skin/google/res/NUM9.gif (contents, props changed) freeswitch/trunk/gtalkphone/skin/google/res/NUM_STAR.gif (contents, props changed) freeswitch/trunk/gtalkphone/skin/google/res/Thumbs.db (contents, props changed) freeswitch/trunk/gtalkphone/skin/google/res/bignumpad_01.gif (contents, props changed) freeswitch/trunk/gtalkphone/skin/google/res/bignumpad_02.gif (contents, props changed) freeswitch/trunk/gtalkphone/skin/google/res/bignumpad_03.gif (contents, props changed) freeswitch/trunk/gtalkphone/skin/google/res/bignumpad_04.gif (contents, props changed) freeswitch/trunk/gtalkphone/skin/google/res/bignumpad_05.gif (contents, props changed) freeswitch/trunk/gtalkphone/skin/google/res/bignumpad_06.gif (contents, props changed) freeswitch/trunk/gtalkphone/skin/google/res/bignumpad_07.gif (contents, props changed) freeswitch/trunk/gtalkphone/skin/google/res/bignumpad_08.gif (contents, props changed) freeswitch/trunk/gtalkphone/skin/google/res/bignumpad_09.gif (contents, props changed) freeswitch/trunk/gtalkphone/skin/google/res/bignumpad_10.gif (contents, props changed) freeswitch/trunk/gtalkphone/skin/google/res/bignumpad_11.gif (contents, props changed) freeswitch/trunk/gtalkphone/skin/google/res/bignumpad_12.gif (contents, props changed) freeswitch/trunk/gtalkphone/skin/google/res/bignumpad_13.gif (contents, props changed) freeswitch/trunk/gtalkphone/skin/google/res/bignumpad_14.gif (contents, props changed) freeswitch/trunk/gtalkphone/skin/google/res/bignumpad_15.gif (contents, props changed) freeswitch/trunk/gtalkphone/skin/google/res/bignumpad_16.gif (contents, props changed) freeswitch/trunk/gtalkphone/skin/google/res/bignumpad_17.gif (contents, props changed) freeswitch/trunk/gtalkphone/skin/google/res/bignumpad_18.gif (contents, props changed) freeswitch/trunk/gtalkphone/skin/google/res/bignumpad_19.gif (contents, props changed) freeswitch/trunk/gtalkphone/skin/google/res/bignumpad_20.gif (contents, props changed) freeswitch/trunk/gtalkphone/skin/google/res/bignumpad_21.gif (contents, props changed) freeswitch/trunk/gtalkphone/skin/google/res/bignumpad_22.gif (contents, props changed) freeswitch/trunk/gtalkphone/skin/google/res/bignumpad_23.gif (contents, props changed) freeswitch/trunk/gtalkphone/skin/google/res/bignumpad_24.gif (contents, props changed) freeswitch/trunk/gtalkphone/skin/google/res/bignumpad_25.gif (contents, props changed) freeswitch/trunk/gtalkphone/skin/google/res/bignumpad_26.gif (contents, props changed) freeswitch/trunk/gtalkphone/skin/google/res/bignumpad_27.gif (contents, props changed) freeswitch/trunk/gtalkphone/skin/google/res/bignumpad_28.gif (contents, props changed) freeswitch/trunk/gtalkphone/skin/google/res/bignumpad_29.gif (contents, props changed) freeswitch/trunk/gtalkphone/skin/google/res/btDial.gif (contents, props changed) freeswitch/trunk/gtalkphone/skin/google/res/btDial_disable.gif (contents, props changed) freeswitch/trunk/gtalkphone/skin/google/res/btHold.gif (contents, props changed) freeswitch/trunk/gtalkphone/skin/google/res/btHold_disable.gif (contents, props changed) freeswitch/trunk/gtalkphone/skin/google/res/btReDial.gif (contents, props changed) freeswitch/trunk/gtalkphone/skin/google/res/btReDial_disable.gif (contents, props changed) freeswitch/trunk/gtalkphone/skin/google/res/cha.gif (contents, props changed) freeswitch/trunk/gtalkphone/skin/google/res/fangdajing.gif (contents, props changed) freeswitch/trunk/gtalkphone/skin/google/res/gtalkphone_logo.gif (contents, props changed) freeswitch/trunk/gtalkphone/skin/google/res/mic.gif (contents, props changed) freeswitch/trunk/gtalkphone/skin/google/res/numpad_big_cropped_01.gif (contents, props changed) freeswitch/trunk/gtalkphone/skin/google/res/numpad_big_cropped_02.gif (contents, props changed) freeswitch/trunk/gtalkphone/skin/google/res/numpad_big_cropped_03.gif (contents, props changed) freeswitch/trunk/gtalkphone/skin/google/res/numpad_big_cropped_04.gif (contents, props changed) freeswitch/trunk/gtalkphone/skin/google/res/numpad_big_cropped_05.gif (contents, props changed) freeswitch/trunk/gtalkphone/skin/google/res/numpad_big_cropped_06.gif (contents, props changed) freeswitch/trunk/gtalkphone/skin/google/res/numpad_big_cropped_07.gif (contents, props changed) freeswitch/trunk/gtalkphone/skin/google/res/numpad_big_cropped_08.gif (contents, props changed) freeswitch/trunk/gtalkphone/skin/google/res/numpad_big_cropped_09.gif (contents, props changed) freeswitch/trunk/gtalkphone/skin/google/res/numpad_big_cropped_10.gif (contents, props changed) freeswitch/trunk/gtalkphone/skin/google/res/numpad_big_cropped_11.gif (contents, props changed) freeswitch/trunk/gtalkphone/skin/google/res/numpad_big_cropped_12.gif (contents, props changed) freeswitch/trunk/gtalkphone/skin/google/res/numpad_big_cropped_13.gif (contents, props changed) freeswitch/trunk/gtalkphone/skin/google/res/numpad_big_cropped_14.gif (contents, props changed) freeswitch/trunk/gtalkphone/skin/google/res/numpad_big_cropped_15.gif (contents, props changed) freeswitch/trunk/gtalkphone/skin/google/res/numpad_big_cropped_16.gif (contents, props changed) freeswitch/trunk/gtalkphone/skin/google/res/numpad_big_cropped_17.gif (contents, props changed) freeswitch/trunk/gtalkphone/skin/google/res/numpad_big_cropped_18.gif (contents, props changed) freeswitch/trunk/gtalkphone/skin/google/res/numpad_big_cropped_19.gif (contents, props changed) freeswitch/trunk/gtalkphone/skin/google/res/numpad_big_cropped_20.gif (contents, props changed) freeswitch/trunk/gtalkphone/skin/google/res/numpad_big_cropped_21.gif (contents, props changed) freeswitch/trunk/gtalkphone/skin/google/res/numpad_big_cropped_22.gif (contents, props changed) freeswitch/trunk/gtalkphone/skin/google/res/numpad_big_cropped_23.gif (contents, props changed) freeswitch/trunk/gtalkphone/skin/google/res/numpad_big_cropped_24.gif (contents, props changed) freeswitch/trunk/gtalkphone/skin/google/res/numpad_big_cropped_25.gif (contents, props changed) freeswitch/trunk/gtalkphone/skin/google/res/numpad_big_cropped_26.gif (contents, props changed) freeswitch/trunk/gtalkphone/skin/google/res/numpad_big_cropped_27.gif (contents, props changed) freeswitch/trunk/gtalkphone/skin/google/res/numpad_big_cropped_28.gif (contents, props changed) freeswitch/trunk/gtalkphone/skin/google/res/numpad_big_cropped_29.gif (contents, props changed) freeswitch/trunk/gtalkphone/skin/google/res/phone1.gif (contents, props changed) freeswitch/trunk/gtalkphone/skin/google/res/phone2.gif (contents, props changed) freeswitch/trunk/gtalkphone/skin/google/res/ring.wav (contents, props changed) freeswitch/trunk/gtalkphone/skin/google/res/ringin.wav (contents, props changed) freeswitch/trunk/gtalkphone/skin/google/res/signin.gif (contents, props changed) freeswitch/trunk/gtalkphone/skin/google/res/spe2eker.gif (contents, props changed) freeswitch/trunk/gtalkphone/skin/google/res/speeker.gif (contents, props changed) freeswitch/trunk/gtalkphone/skin/google/res/zlwcyd.mp3 (contents, props changed) freeswitch/trunk/gtalkphone/skin/google/restore.bmp (contents, props changed) freeswitch/trunk/gtalkphone/skin/google/right.bmp (contents, props changed) freeswitch/trunk/gtalkphone/skin/google/settingsDlg.htm freeswitch/trunk/gtalkphone/skin/google/theme.ini freeswitch/trunk/gtalkphone/skin/google/top.bmp (contents, props changed) freeswitch/trunk/gtalkphone/ui/ freeswitch/trunk/gtalkphone/ui/include/ freeswitch/trunk/gtalkphone/ui/include/External.h freeswitch/trunk/gtalkphone/ui/include/gtalkphoneDlg.h freeswitch/trunk/gtalkphone/ui/include/settingsDlg.h freeswitch/trunk/gtalkphone/ui/source/ freeswitch/trunk/gtalkphone/ui/source/External.cpp freeswitch/trunk/gtalkphone/ui/source/gtalkphoneDlg.cpp freeswitch/trunk/gtalkphone/ui/source/settingsDlg.cpp Log: Added: freeswitch/trunk/gtalkphone/Setup/Setup.vdproj ============================================================================== --- (empty file) +++ freeswitch/trunk/gtalkphone/Setup/Setup.vdproj Wed Aug 30 11:21:42 2006 @@ -0,0 +1,5084 @@ +"DeployProject" +{ +"VSVersion" = "3:800" +"ProjectType" = "8:{978C614F-708E-4E1A-B201-565925725DBA}" +"IsWebType" = "8:FALSE" +"ProjectName" = "8:GtalkSetup" +"LanguageId" = "3:1033" +"CodePage" = "3:1252" +"UILanguageId" = "3:1033" +"SccProjectName" = "8:" +"SccLocalPath" = "8:" +"SccAuxPath" = "8:" +"SccProvider" = "8:" + "Hierarchy" + { + "Entry" + { + "MsmKey" = "8:_011F605D964748BDAA911C7DE2315BB1" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_03153A29D019413AB8802480F81DEF7F" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_047539112C3E461EAA74088FA9BE9E69" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_0534EE6640B342CFB755CE50728A8BCA" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_092402C810E94F1AB18DE4850CFC15AC" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_099956C2FDFB4F1D856128F2598A4B33" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_0B327B4477E04F94BD0EFF3BB08C2034" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_0E3B5842A3734D90A0EE515AEC6CA0C8" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_0E3D00F607D64FFBAB3BCCEE54868B94" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_0EB4E22D947047928070894CC314427A" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_1273F63008CF585CA0E063E436B4646F" + "OwnerKey" = "8:_EC68A140B58841DA9B9172BAFA5BEC63" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_1943D4043028471EA31B3B740572CF58" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_19FABE7F81974445A9D9548C4BD17B4A" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_1CFB1AB04E024FC993E0EB4859DF8408" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_1EA6C313E8784DB5A7269636F12F97FC" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_213875BF232B446089B248AB680A0E8C" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_219915C9DD5E446C979573CA1A77CD94" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_2573B3D1C1B64130B14C0AC58B220AAD" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_26D8B58FB52A4D269E82662406380FB8" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_2814E641538B42EFA83525986A9D5AC1" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_283AF8C6D620E7AAFAAA28E46550E979" + "OwnerKey" = "8:_4558465C50C14F60BB4E8B25025AE011" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_28F33D5DADE544A0AC0B4745FE3FBCE0" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_28FBC5A60B44423B8A2CC378347483CE" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_2D3594E151184C9B8C66BA923F3FABAA" + "OwnerKey" = "8:_8D269A170E264064951A217B1E8540A9" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_2F2FEC549F02436EB87961BD1B9E5783" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_2FE2BE6423524466AE9B6DDACA25659B" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_30D9C271D9814AB3A21BF4E254EF1516" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_318FCC99E8D143D6B4F9F534E63009B3" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_329D8DAE6C01FCF026E9DFB48B932203" + "OwnerKey" = "8:_28FBC5A60B44423B8A2CC378347483CE" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_33FEF8EC137A4CCFA2D033338AD41740" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_3481511C7FB64F80B8A15FF88674E39B" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_34F26958FC234A729D9E66BF43FB621E" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_352B3F82A641637C8A115BDBD9E815F8" + "OwnerKey" = "8:_59CFED0C4EC0492C945E4EBC04FE965F" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_3616BAFEC39B4CB3B59DDB88FF7EF234" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_38D479EDA4B149229E7683A872389B67" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_3911245A4F074600B8FDFDA13670079C" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_3AA771348091426E95001C83842B96B8" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_3B4414B23DDA4F148D65344ACDA8AD26" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_3DF8772375AA4701AFCA33BD13454741" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_3FBEFE0119944C6781F81104ECEF37CA" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_431678C6A4054132B0E5B7E13926A75E" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_449CF87BB19F4704AFC7A6EA4229E204" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_4558465C50C14F60BB4E8B25025AE011" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_4595E9E3EEE54266888939B751817D3A" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_47DF23462CAA41E18CEFE3D0A348C477" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_497942BF15E0080F895E96BC0285CB5D" + "OwnerKey" = "8:_D2EF447106B24E67907DAED3D39CFBB1" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_4CD45D17DBE94E79947507384EFFD130" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_4EDEC377C8284215B7D4E7A4EFAB86E2" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_4F3F74AA3B4F4AE98F367218EE691BC7" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_517C2A23792D45E9B359DB18D913386A" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_569D03628E41BAB30C90978B9575D98C" + "OwnerKey" = "8:_4558465C50C14F60BB4E8B25025AE011" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_59C3EF63D3C94FC7AC5E04ACC2B3B6A5" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_59CFED0C4EC0492C945E4EBC04FE965F" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_5A3512552B17420CA5D7F6043665AF6D" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_5C3E0D24513D46A4B8366006A3268EF4" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_5CFF4C7484B640B1B5756CD323CC7E58" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_5D2D1389842F47F8BEA541066B9C4098" + "OwnerKey" = "8:_4558465C50C14F60BB4E8B25025AE011" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_632D79C6771442AB9D17E66DE2C750B6" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_656873B55D354EFFAA92EA6689A00723" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_66D36239CEE44E41AC15D8745B60DA6F" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_67A562A164694F33931369E955A504D2" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_68627C5080F244F3B88EF04CAD1506F9" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_69234AE2A61247F0AC620E58F3463D48" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_6BD96A84A097442AA01020E71415DB0B" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_6CF1BB0311AD41C3BC50DB8ED0EABED1" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_6E5C001E7A314DCEA0A4BF52BF74BCAD" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_6ED2FF0583A54D71982D109F21758A5E" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_6FF2C3095A6D26FCF0D994F725656588" + "OwnerKey" = "8:_3FBEFE0119944C6781F81104ECEF37CA" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_6FF2C3095A6D26FCF0D994F725656588" + "OwnerKey" = "8:_D2EF447106B24E67907DAED3D39CFBB1" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_6FF2C3095A6D26FCF0D994F725656588" + "OwnerKey" = "8:_59CFED0C4EC0492C945E4EBC04FE965F" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_6FF2C3095A6D26FCF0D994F725656588" + "OwnerKey" = "8:_4558465C50C14F60BB4E8B25025AE011" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_7092EBC0CF264196915B5BE2B699115E" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_70C0B0406844413691C4F6D730088354" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_72A8732C0C0C4D0EAAE89DBB82073335" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_7358123D2D064AD1BC517911A8B23D1B" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_7C234E65007B484D805DEC15290CFE68" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_7D114A70FCAC4E4695D42DA8F424EC6C" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_7FB5188167F24299BEEA7D24D24A3588" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_838A91BA18C64FA9842DA0D1C4E5A575" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_87768631363249B2B301143C193612F7" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_87AB4EBFBFE940E2A5BC3A530BFDA7CD" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_881DE3D70D804FD3AF3B580BCEB0CDB8" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_8A97B08A94BF4C61953A80E160801418" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_8D269A170E264064951A217B1E8540A9" + "OwnerKey" = "8:_1CFB1AB04E024FC993E0EB4859DF8408" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_8D269A170E264064951A217B1E8540A9" + "OwnerKey" = "8:_EF14CB99F3414BB689D0CB0E6D6B8AB8" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_8D269A170E264064951A217B1E8540A9" + "OwnerKey" = "8:_D2EF447106B24E67907DAED3D39CFBB1" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_8D269A170E264064951A217B1E8540A9" + "OwnerKey" = "8:_BCB8B09BD3BF4E5889E46049601E0973" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_8D269A170E264064951A217B1E8540A9" + "OwnerKey" = "8:_BB649A2C1ABE4895859025B09A240323" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_8D269A170E264064951A217B1E8540A9" + "OwnerKey" = "8:_B20769E090034897B32E3EA4EC1BA8A0" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_8D269A170E264064951A217B1E8540A9" + "OwnerKey" = "8:_A944ADCEDF884574A23F7BA5420A6BA1" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_8D269A170E264064951A217B1E8540A9" + "OwnerKey" = "8:_A0D5F714A0F94250A1C39603B699AB82" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_8D269A170E264064951A217B1E8540A9" + "OwnerKey" = "8:_59CFED0C4EC0492C945E4EBC04FE965F" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_8D269A170E264064951A217B1E8540A9" + "OwnerKey" = "8:_4558465C50C14F60BB4E8B25025AE011" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_8D269A170E264064951A217B1E8540A9" + "OwnerKey" = "8:_3FBEFE0119944C6781F81104ECEF37CA" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_8D269A170E264064951A217B1E8540A9" + "OwnerKey" = "8:_318FCC99E8D143D6B4F9F534E63009B3" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_8D269A170E264064951A217B1E8540A9" + "OwnerKey" = "8:_2F2FEC549F02436EB87961BD1B9E5783" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_8D269A170E264064951A217B1E8540A9" + "OwnerKey" = "8:_28FBC5A60B44423B8A2CC378347483CE" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_8D269A170E264064951A217B1E8540A9" + "OwnerKey" = "8:_2814E641538B42EFA83525986A9D5AC1" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_8DC8F46624C1484B9950384102994B2F" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_8EAD91E4DA424EA6A84DCFE531858A6A" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_8F064C3BD40643E2B9CB0A070E5EB595" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_90153CA3A0E74CBE805ADA265DB7F60F" + "OwnerKey" = "8:_5D2D1389842F47F8BEA541066B9C4098" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_91114B05951A4F99A978778F9E210C5C" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_91326CA936BB4A17915EC8E1DEAE7AAF" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_914D088BFACC45918177690473C705EC" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_920E18F9C5C34C9EBFBF65840F9DD772" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_929BB78C2E9D416FB6A8126177F8D075" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_959DD5B2433842EA803B176E58C8CFD7" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_98B97716225C408E8D11F0C646D44927" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_9A293E8A356A4959BB6E541B7DC213CD" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_9C34E0D148C14DB7A206CA6E069F56FD" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_A0D5F714A0F94250A1C39603B699AB82" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_A1322143D6F741CFA29A5539F515E1EA" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_A3936A2727E73289F5804D5DA006FD0A" + "OwnerKey" = "8:_28FBC5A60B44423B8A2CC378347483CE" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_A4AC3FC3DCDF4E639A45632F0F3F7F04" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_A91DF1AAD16346E59F0BBC44F54721CB" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_A944ADCEDF884574A23F7BA5420A6BA1" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_AD2EB44FE6D548F2A8DA4F9F2CE817AC" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_B0A2E9B4C45D4098AFD734D0C4E3EAFB" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_B13EDAD78BBF4A3F9F516F864CB698A1" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_B20769E090034897B32E3EA4EC1BA8A0" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_B29014EF9EBF4C949289E10F81307693" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_B3189C4379A149C68DE68EEFA2269570" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_BA27CD4D77B1458197BAC2BB1A4237C0" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_BA6EBADA278241F281B09875DD1661B8" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_BB649A2C1ABE4895859025B09A240323" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_BC316CC13DBF4B68B36DC86C1D172509" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_BCB8B09BD3BF4E5889E46049601E0973" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_BD0F36F62CF0450CA4A5613FBBF76C45" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_BD6C52C176794E38AA7B9389EC172CBB" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_BD74B34F036F4A9782584166ED893A18" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_BE6A27F1EA5C462585E36F14FE24A5AC" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_BFC3D1F41C3243F2B40965A22F650C39" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_C105055EE271471A999CE7022E617EB7" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_C41CB5C24D2840AE8B6836AD7DB97196" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_C4358C1327914A369B402FDAF33163CD" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_C4FD5527CDD5430DBBB1329DC0BDA8C5" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_C81AC700C1BC4A55B98DF12C0CBAFD6F" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_C8BD2A446FD4454382A140CE1ED2E7C4" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_C9F7CB31F666426DA9DDBA6DC8F0A803" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_CA8E2512E246456093E1246370C11B41" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_CC490CFDB0814F92B01C1E30B786A885" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_CDBF086ABFDA4AEA9AF25BC36AEBC8D2" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_CEB75EE0E69A45C7B9650D93CAC1009A" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_D0752B769340436C8D9233BBB844535A" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_D0BB09AFB8D94B76918F0EE85BCCAD0A" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_D20F7A0A8C1445D3A5455D8ECA94D118" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_D2EF447106B24E67907DAED3D39CFBB1" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_D84D0E09AC0B46D68C56C4421EA0E03C" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_D9B558ED8D5045A18FE190B7692F089A" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_D9B95A3E108E2DC4D5FD66A98B16714F" + "OwnerKey" = "8:_D2EF447106B24E67907DAED3D39CFBB1" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_DB764FA862A546569D00535F32AA49D9" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_DBBC0473484444C1BBC8C0408FD13107" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_DDDD93BA6A644BFDB6A234872F6B544D" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_E0891F01CC67410D97B62D708B560C60" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_E1CC91FCF87955D17FC3C0A8E875B690" + "OwnerKey" = "8:_59CFED0C4EC0492C945E4EBC04FE965F" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_E2B402496C1340FAB3A7E2EE660A9B10" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_E51DA0CD3E3941299D7A22F20C1E16C0" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_E763C699DF0948B6984DDEB96A2DFD06" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_EC68A140B58841DA9B9172BAFA5BEC63" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_EF00E2B953F847BE8E2E9C25455C93EB" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_EF14CB99F3414BB689D0CB0E6D6B8AB8" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_EF83A11C5C3440848E6765E2638C2E32" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_F1F056696C2A4479BDC661D2A6FCB410" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_F1F90472DB034558ACB7B359C73F0C17" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_F70545DA1954BF3D355780C29CBEBD74" + "OwnerKey" = "8:_4558465C50C14F60BB4E8B25025AE011" + "MsmSig" = "8:_UNDEFINED" + } + } + "Configurations" + { + "Debug" + { + "DisplayName" = "8:Debug" + "IsDebugOnly" = "11:TRUE" + "IsReleaseOnly" = "11:FALSE" + "OutputFilename" = "8:Debug\\GtalkPhone.msi" + "PackageFilesAs" = "3:2" + "PackageFileSize" = "3:-2147483648" + "CabType" = "3:1" + "Compression" = "3:2" + "SignOutput" = "11:FALSE" + "CertificateFile" = "8:" + "PrivateKeyFile" = "8:" + "TimeStampServer" = "8:" + "InstallerBootstrapper" = "3:2" + "BootstrapperCfg:{63ACBE69-63AA-4F98-B2B6-99F9E24495F2}" + { + "Enabled" = "11:TRUE" + "PromptEnabled" = "11:TRUE" + "PrerequisitesLocation" = "2:2" + "Url" = "8:http://www.gtalkphone.com/" + "ComponentsUrl" = "8:" + "Items" + { + "{EDC2488A-8267-493A-A98E-7D9C3B36CDF3}:Microsoft.Visual.C++.8.0.x86" + { + "Name" = "8:Visual C++ Runtime Libraries (x86)" + "ProductCode" = "8:Microsoft.Visual.C++.8.0.x86" + } + "{EDC2488A-8267-493A-A98E-7D9C3B36CDF3}:Microsoft.Windows.Installer.3.1" + { + "Name" = "8:Windows Installer 3.1" + "ProductCode" = "8:Microsoft.Windows.Installer.3.1" + } + } + } + } + "Release" + { + "DisplayName" = "8:Release" + "IsDebugOnly" = "11:FALSE" + "IsReleaseOnly" = "11:TRUE" + "OutputFilename" = "8:Release\\GtalkPhone.msi" + "PackageFilesAs" = "3:2" + "PackageFileSize" = "3:-2147483648" + "CabType" = "3:1" + "Compression" = "3:2" + "SignOutput" = "11:FALSE" + "CertificateFile" = "8:" + "PrivateKeyFile" = "8:" + "TimeStampServer" = "8:" + "InstallerBootstrapper" = "3:2" + "BootstrapperCfg:{63ACBE69-63AA-4F98-B2B6-99F9E24495F2}" + { + "Enabled" = "11:TRUE" + "PromptEnabled" = "11:TRUE" + "PrerequisitesLocation" = "2:2" + "Url" = "8:http://www.gtalkphone.com/" + "ComponentsUrl" = "8:" + "Items" + { + "{EDC2488A-8267-493A-A98E-7D9C3B36CDF3}:Microsoft.Visual.C++.8.0.x86" + { + "Name" = "8:Visual C++ Runtime Libraries (x86)" + "ProductCode" = "8:Microsoft.Visual.C++.8.0.x86" + } + "{EDC2488A-8267-493A-A98E-7D9C3B36CDF3}:Microsoft.Windows.Installer.3.1" + { + "Name" = "8:Windows Installer 3.1" + "ProductCode" = "8:Microsoft.Windows.Installer.3.1" + } + } + } + } + } + "Deployable" + { + "CustomAction" + { + } + "DefaultFeature" + { + "Name" = "8:DefaultFeature" + "Title" = "8:" + "Description" = "8:" + } + "ExternalPersistence" + { + "LaunchCondition" + { + } + } + "File" + { + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_011F605D964748BDAA911C7DE2315BB1" + { + "SourcePath" = "8:..\\skin\\google\\res\\btDial_disable.gif" + "TargetName" = "8:btDial_disable.gif" + "Tag" = "8:" + "Folder" = "8:_9B25E0B00C2C4C7FB29BE94B8859977C" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_03153A29D019413AB8802480F81DEF7F" + { + "SourcePath" = "8:..\\skin\\google\\res\\bignumpad_25.gif" + "TargetName" = "8:bignumpad_25.gif" + "Tag" = "8:" + "Folder" = "8:_9B25E0B00C2C4C7FB29BE94B8859977C" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_047539112C3E461EAA74088FA9BE9E69" + { + "SourcePath" = "8:..\\skin\\google\\res\\NUM0.gif" + "TargetName" = "8:NUM0.gif" + "Tag" = "8:" + "Folder" = "8:_9B25E0B00C2C4C7FB29BE94B8859977C" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_0534EE6640B342CFB755CE50728A8BCA" + { + "SourcePath" = "8:..\\skin\\google\\max.bmp" + "TargetName" = "8:max.bmp" + "Tag" = "8:" + "Folder" = "8:_96055D6EF136409781FB9B9D2AA42279" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_092402C810E94F1AB18DE4850CFC15AC" + { + "SourcePath" = "8:..\\skin\\google\\res\\numpad_big_cropped_07.gif" + "TargetName" = "8:numpad_big_cropped_07.gif" + "Tag" = "8:" + "Folder" = "8:_9B25E0B00C2C4C7FB29BE94B8859977C" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_099956C2FDFB4F1D856128F2598A4B33" + { + "SourcePath" = "8:..\\skin\\google\\res\\bignumpad_29.gif" + "TargetName" = "8:bignumpad_29.gif" + "Tag" = "8:" + "Folder" = "8:_9B25E0B00C2C4C7FB29BE94B8859977C" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_0B327B4477E04F94BD0EFF3BB08C2034" + { + "SourcePath" = "8:..\\skin\\google\\res\\NUM9.gif" + "TargetName" = "8:NUM9.gif" + "Tag" = "8:" + "Folder" = "8:_9B25E0B00C2C4C7FB29BE94B8859977C" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_0E3B5842A3734D90A0EE515AEC6CA0C8" + { + "SourcePath" = "8:..\\skin\\google\\restore.bmp" + "TargetName" = "8:restore.bmp" + "Tag" = "8:" + "Folder" = "8:_96055D6EF136409781FB9B9D2AA42279" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_0E3D00F607D64FFBAB3BCCEE54868B94" + { + "SourcePath" = "8:..\\skin\\google\\res\\NUM4.gif" + "TargetName" = "8:NUM4.gif" + "Tag" = "8:" + "Folder" = "8:_9B25E0B00C2C4C7FB29BE94B8859977C" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_0EB4E22D947047928070894CC314427A" + { + "SourcePath" = "8:..\\skin\\google\\res\\bignumpad_08.gif" + "TargetName" = "8:bignumpad_08.gif" + "Tag" = "8:" + "Folder" = "8:_9B25E0B00C2C4C7FB29BE94B8859977C" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_1273F63008CF585CA0E063E436B4646F" + { + "SourcePath" = "8:iphlpapi.dll" + "TargetName" = "8:iphlpapi.dll" + "Tag" = "8:" + "Folder" = "8:_B6E020422C78490D96F78DB0E1A3F521" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:TRUE" + "IsDependency" = "11:TRUE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_1943D4043028471EA31B3B740572CF58" + { + "SourcePath" = "8:..\\skin\\google\\res\\bignumpad_28.gif" + "TargetName" = "8:bignumpad_28.gif" + "Tag" = "8:" + "Folder" = "8:_9B25E0B00C2C4C7FB29BE94B8859977C" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_19FABE7F81974445A9D9548C4BD17B4A" + { + "SourcePath" = "8:..\\skin\\google\\res\\numpad_big_cropped_08.gif" + "TargetName" = "8:numpad_big_cropped_08.gif" + "Tag" = "8:" + "Folder" = "8:_9B25E0B00C2C4C7FB29BE94B8859977C" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_1EA6C313E8784DB5A7269636F12F97FC" + { + "SourcePath" = "8:..\\skin\\google\\settingsDlg.htm" + "TargetName" = "8:settingsDlg.htm" + "Tag" = "8:" + "Folder" = "8:_96055D6EF136409781FB9B9D2AA42279" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_213875BF232B446089B248AB680A0E8C" + { + "SourcePath" = "8:..\\skin\\google\\res\\NUM#.gif" + "TargetName" = "8:NUM#.gif" + "Tag" = "8:" + "Folder" = "8:_9B25E0B00C2C4C7FB29BE94B8859977C" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_219915C9DD5E446C979573CA1A77CD94" + { + "SourcePath" = "8:..\\skin\\google\\res\\bignumpad_02.gif" + "TargetName" = "8:bignumpad_02.gif" + "Tag" = "8:" + "Folder" = "8:_9B25E0B00C2C4C7FB29BE94B8859977C" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_2573B3D1C1B64130B14C0AC58B220AAD" + { + "SourcePath" = "8:..\\skin\\google\\res\\numpad_big_cropped_24.gif" + "TargetName" = "8:numpad_big_cropped_24.gif" + "Tag" = "8:" + "Folder" = "8:_9B25E0B00C2C4C7FB29BE94B8859977C" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_26D8B58FB52A4D269E82662406380FB8" + { + "SourcePath" = "8:..\\skin\\google\\res\\numpad_big_cropped_23.gif" + "TargetName" = "8:numpad_big_cropped_23.gif" + "Tag" = "8:" + "Folder" = "8:_9B25E0B00C2C4C7FB29BE94B8859977C" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_283AF8C6D620E7AAFAAA28E46550E979" + { + "SourcePath" = "8:WININET.dll" + "TargetName" = "8:WININET.dll" + "Tag" = "8:" + "Folder" = "8:_04AC783F1C9F41AEB4E947C46CE9C9FF" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:TRUE" + "IsDependency" = "11:TRUE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_28F33D5DADE544A0AC0B4745FE3FBCE0" + { + "SourcePath" = "8:..\\skin\\google\\res\\phone2.gif" + "TargetName" = "8:phone2.gif" + "Tag" = "8:" + "Folder" = "8:_9B25E0B00C2C4C7FB29BE94B8859977C" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_2FE2BE6423524466AE9B6DDACA25659B" + { + "SourcePath" = "8:..\\skin\\google\\res\\bignumpad_13.gif" + "TargetName" = "8:bignumpad_13.gif" + "Tag" = "8:" + "Folder" = "8:_9B25E0B00C2C4C7FB29BE94B8859977C" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_30D9C271D9814AB3A21BF4E254EF1516" + { + "SourcePath" = "8:..\\skin\\google\\res\\speeker.gif" + "TargetName" = "8:speeker.gif" + "Tag" = "8:" + "Folder" = "8:_9B25E0B00C2C4C7FB29BE94B8859977C" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_329D8DAE6C01FCF026E9DFB48B932203" + { + "SourcePath" = "8:MSWSOCK.dll" + "TargetName" = "8:MSWSOCK.dll" + "Tag" = "8:" + "Folder" = "8:_04AC783F1C9F41AEB4E947C46CE9C9FF" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:TRUE" + "IsDependency" = "11:TRUE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_33FEF8EC137A4CCFA2D033338AD41740" + { + "SourcePath" = "8:..\\skin\\google\\min.bmp" + "TargetName" = "8:min.bmp" + "Tag" = "8:" + "Folder" = "8:_96055D6EF136409781FB9B9D2AA42279" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_3481511C7FB64F80B8A15FF88674E39B" + { + "SourcePath" = "8:..\\skin\\google\\res\\numpad_big_cropped_11.gif" + "TargetName" = "8:numpad_big_cropped_11.gif" + "Tag" = "8:" + "Folder" = "8:_9B25E0B00C2C4C7FB29BE94B8859977C" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_34F26958FC234A729D9E66BF43FB621E" + { + "SourcePath" = "8:..\\skin\\google\\res\\NUM1.gif" + "TargetName" = "8:NUM1.gif" + "Tag" = "8:" + "Folder" = "8:_9B25E0B00C2C4C7FB29BE94B8859977C" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_352B3F82A641637C8A115BDBD9E815F8" + { + "SourcePath" = "8:libapriconv.dll" + "TargetName" = "8:libapriconv.dll" + "Tag" = "8:" + "Folder" = "8:_04AC783F1C9F41AEB4E947C46CE9C9FF" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:TRUE" + "IsDependency" = "11:TRUE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_3616BAFEC39B4CB3B59DDB88FF7EF234" + { + "SourcePath" = "8:..\\skin\\google\\top.bmp" + "TargetName" = "8:top.bmp" + "Tag" = "8:" + "Folder" = "8:_96055D6EF136409781FB9B9D2AA42279" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_38D479EDA4B149229E7683A872389B67" + { + "SourcePath" = "8:..\\freeswitch.xml" + "TargetName" = "8:freeswitch.xml" + "Tag" = "8:" + "Folder" = "8:_06036160035041E38F4179E6DB6380C5" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_3911245A4F074600B8FDFDA13670079C" + { + "SourcePath" = "8:..\\skin\\google\\res\\numpad_big_cropped_20.gif" + "TargetName" = "8:numpad_big_cropped_20.gif" + "Tag" = "8:" + "Folder" = "8:_9B25E0B00C2C4C7FB29BE94B8859977C" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_3AA771348091426E95001C83842B96B8" + { + "SourcePath" = "8:..\\skin\\google\\res\\ring.wav" + "TargetName" = "8:ring.wav" + "Tag" = "8:" + "Folder" = "8:_9B25E0B00C2C4C7FB29BE94B8859977C" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_3B4414B23DDA4F148D65344ACDA8AD26" + { + "SourcePath" = "8:..\\skin\\google\\res\\signin.gif" + "TargetName" = "8:signin.gif" + "Tag" = "8:" + "Folder" = "8:_9B25E0B00C2C4C7FB29BE94B8859977C" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_3DF8772375AA4701AFCA33BD13454741" + { + "SourcePath" = "8:..\\skin\\google\\res\\bignumpad_05.gif" + "TargetName" = "8:bignumpad_05.gif" + "Tag" = "8:" + "Folder" = "8:_9B25E0B00C2C4C7FB29BE94B8859977C" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_431678C6A4054132B0E5B7E13926A75E" + { + "SourcePath" = "8:..\\skin\\google\\res\\bignumpad_27.gif" + "TargetName" = "8:bignumpad_27.gif" + "Tag" = "8:" + "Folder" = "8:_9B25E0B00C2C4C7FB29BE94B8859977C" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_449CF87BB19F4704AFC7A6EA4229E204" + { + "SourcePath" = "8:..\\skin\\google\\res\\numpad_big_cropped_27.gif" + "TargetName" = "8:numpad_big_cropped_27.gif" + "Tag" = "8:" + "Folder" = "8:_9B25E0B00C2C4C7FB29BE94B8859977C" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_4595E9E3EEE54266888939B751817D3A" + { + "SourcePath" = "8:..\\skin\\google\\res\\numpad_big_cropped_22.gif" + "TargetName" = "8:numpad_big_cropped_22.gif" + "Tag" = "8:" + "Folder" = "8:_9B25E0B00C2C4C7FB29BE94B8859977C" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_47DF23462CAA41E18CEFE3D0A348C477" + { + "SourcePath" = "8:..\\skin\\google\\css\\winclassic.css" + "TargetName" = "8:winclassic.css" + "Tag" = "8:" + "Folder" = "8:_861C9A164F7740888F430087CD807957" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_497942BF15E0080F895E96BC0285CB5D" + { + "SourcePath" = "8:libaprutil.dll" + "TargetName" = "8:libaprutil.dll" + "Tag" = "8:" + "Folder" = "8:_04AC783F1C9F41AEB4E947C46CE9C9FF" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:TRUE" + "IsDependency" = "11:TRUE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_4CD45D17DBE94E79947507384EFFD130" + { + "SourcePath" = "8:..\\skin\\google\\res\\numpad_big_cropped_10.gif" + "TargetName" = "8:numpad_big_cropped_10.gif" + "Tag" = "8:" + "Folder" = "8:_9B25E0B00C2C4C7FB29BE94B8859977C" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_4EDEC377C8284215B7D4E7A4EFAB86E2" + { + "SourcePath" = "8:..\\skin\\google\\res\\NUM3.gif" + "TargetName" = "8:NUM3.gif" + "Tag" = "8:" + "Folder" = "8:_9B25E0B00C2C4C7FB29BE94B8859977C" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_4F3F74AA3B4F4AE98F367218EE691BC7" + { + "SourcePath" = "8:..\\skin\\google\\res\\numpad_big_cropped_02.gif" + "TargetName" = "8:numpad_big_cropped_02.gif" + "Tag" = "8:" + "Folder" = "8:_9B25E0B00C2C4C7FB29BE94B8859977C" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_517C2A23792D45E9B359DB18D913386A" + { + "SourcePath" = "8:..\\skin\\google\\res\\bignumpad_07.gif" + "TargetName" = "8:bignumpad_07.gif" + "Tag" = "8:" + "Folder" = "8:_9B25E0B00C2C4C7FB29BE94B8859977C" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_569D03628E41BAB30C90978B9575D98C" + { + "SourcePath" = "8:google.dll" + "TargetName" = "8:google.dll" + "Tag" = "8:" + "Folder" = "8:_04AC783F1C9F41AEB4E947C46CE9C9FF" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:TRUE" + "IsDependency" = "11:TRUE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_59C3EF63D3C94FC7AC5E04ACC2B3B6A5" + { + "SourcePath" = "8:..\\skin\\google\\theme.ini" + "TargetName" = "8:theme.ini" + "Tag" = "8:" + "Folder" = "8:_96055D6EF136409781FB9B9D2AA42279" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_5A3512552B17420CA5D7F6043665AF6D" + { + "SourcePath" = "8:..\\skin\\google\\res\\bignumpad_17.gif" + "TargetName" = "8:bignumpad_17.gif" + "Tag" = "8:" + "Folder" = "8:_9B25E0B00C2C4C7FB29BE94B8859977C" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_5C3E0D24513D46A4B8366006A3268EF4" + { + "SourcePath" = "8:..\\skin\\google\\right.bmp" + "TargetName" = "8:right.bmp" + "Tag" = "8:" + "Folder" = "8:_96055D6EF136409781FB9B9D2AA42279" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_5CFF4C7484B640B1B5756CD323CC7E58" + { + "SourcePath" = "8:..\\skin\\google\\res\\bignumpad_16.gif" + "TargetName" = "8:bignumpad_16.gif" + "Tag" = "8:" + "Folder" = "8:_9B25E0B00C2C4C7FB29BE94B8859977C" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_632D79C6771442AB9D17E66DE2C750B6" + { + "SourcePath" = "8:..\\skin\\google\\res\\NUM2.gif" + "TargetName" = "8:NUM2.gif" + "Tag" = "8:" + "Folder" = "8:_9B25E0B00C2C4C7FB29BE94B8859977C" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_656873B55D354EFFAA92EA6689A00723" + { + "SourcePath" = "8:..\\skin\\google\\Radio.bmp" + "TargetName" = "8:Radio.bmp" + "Tag" = "8:" + "Folder" = "8:_96055D6EF136409781FB9B9D2AA42279" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_66D36239CEE44E41AC15D8745B60DA6F" + { + "SourcePath" = "8:..\\skin\\google\\Checkbox.bmp" + "TargetName" = "8:Checkbox.bmp" + "Tag" = "8:" + "Folder" = "8:_96055D6EF136409781FB9B9D2AA42279" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_67A562A164694F33931369E955A504D2" + { + "SourcePath" = "8:..\\skin\\google\\res\\numpad_big_cropped_25.gif" + "TargetName" = "8:numpad_big_cropped_25.gif" + "Tag" = "8:" + "Folder" = "8:_9B25E0B00C2C4C7FB29BE94B8859977C" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_68627C5080F244F3B88EF04CAD1506F9" + { + "SourcePath" = "8:..\\skin\\google\\res\\numpad_big_cropped_04.gif" + "TargetName" = "8:numpad_big_cropped_04.gif" + "Tag" = "8:" + "Folder" = "8:_9B25E0B00C2C4C7FB29BE94B8859977C" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_69234AE2A61247F0AC620E58F3463D48" + { + "SourcePath" = "8:..\\skin\\google\\res\\NUM5.gif" + "TargetName" = "8:NUM5.gif" + "Tag" = "8:" + "Folder" = "8:_9B25E0B00C2C4C7FB29BE94B8859977C" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_6BD96A84A097442AA01020E71415DB0B" + { + "SourcePath" = "8:..\\skin\\google\\gtalkphone.htm" + "TargetName" = "8:gtalkphone.htm" + "Tag" = "8:" + "Folder" = "8:_96055D6EF136409781FB9B9D2AA42279" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_6CF1BB0311AD41C3BC50DB8ED0EABED1" + { + "SourcePath" = "8:..\\skin\\google\\res\\btHold.gif" + "TargetName" = "8:btHold.gif" + "Tag" = "8:" + "Folder" = "8:_9B25E0B00C2C4C7FB29BE94B8859977C" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_6ED2FF0583A54D71982D109F21758A5E" + { + "SourcePath" = "8:..\\skin\\google\\res\\NUM_STAR.gif" + "TargetName" = "8:NUM_STAR.gif" + "Tag" = "8:" + "Folder" = "8:_9B25E0B00C2C4C7FB29BE94B8859977C" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_6FF2C3095A6D26FCF0D994F725656588" + { + "SourcePath" = "8:libapr.dll" + "TargetName" = "8:libapr.dll" + "Tag" = "8:" + "Folder" = "8:_04AC783F1C9F41AEB4E947C46CE9C9FF" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:TRUE" + "IsDependency" = "11:TRUE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_7092EBC0CF264196915B5BE2B699115E" + { + "SourcePath" = "8:..\\skin\\google\\res\\bignumpad_14.gif" + "TargetName" = "8:bignumpad_14.gif" + "Tag" = "8:" + "Folder" = "8:_9B25E0B00C2C4C7FB29BE94B8859977C" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_70C0B0406844413691C4F6D730088354" + { + "SourcePath" = "8:..\\skin\\google\\res\\numpad_big_cropped_06.gif" + "TargetName" = "8:numpad_big_cropped_06.gif" + "Tag" = "8:" + "Folder" = "8:_9B25E0B00C2C4C7FB29BE94B8859977C" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_7C234E65007B484D805DEC15290CFE68" + { + "SourcePath" = "8:..\\skin\\google\\res\\numpad_big_cropped_05.gif" + "TargetName" = "8:numpad_big_cropped_05.gif" + "Tag" = "8:" + "Folder" = "8:_9B25E0B00C2C4C7FB29BE94B8859977C" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_7D114A70FCAC4E4695D42DA8F424EC6C" + { + "SourcePath" = "8:..\\skin\\google\\res\\numpad_big_cropped_21.gif" + "TargetName" = "8:numpad_big_cropped_21.gif" + "Tag" = "8:" + "Folder" = "8:_9B25E0B00C2C4C7FB29BE94B8859977C" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_7FB5188167F24299BEEA7D24D24A3588" + { + "SourcePath" = "8:..\\skin\\google\\res\\bignumpad_15.gif" + "TargetName" = "8:bignumpad_15.gif" + "Tag" = "8:" + "Folder" = "8:_9B25E0B00C2C4C7FB29BE94B8859977C" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_838A91BA18C64FA9842DA0D1C4E5A575" + { + "SourcePath" = "8:..\\skin\\google\\left.bmp" + "TargetName" = "8:left.bmp" + "Tag" = "8:" + "Folder" = "8:_96055D6EF136409781FB9B9D2AA42279" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_87AB4EBFBFE940E2A5BC3A530BFDA7CD" + { + "SourcePath" = "8:..\\skin\\google\\res\\numpad_big_cropped_13.gif" + "TargetName" = "8:numpad_big_cropped_13.gif" + "Tag" = "8:" + "Folder" = "8:_9B25E0B00C2C4C7FB29BE94B8859977C" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_881DE3D70D804FD3AF3B580BCEB0CDB8" + { + "SourcePath" = "8:..\\skin\\google\\css\\boxsizing.htc" + "TargetName" = "8:boxsizing.htc" + "Tag" = "8:" + "Folder" = "8:_861C9A164F7740888F430087CD807957" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_8A97B08A94BF4C61953A80E160801418" + { + "SourcePath" = "8:..\\skin\\google\\res\\bignumpad_03.gif" + "TargetName" = "8:bignumpad_03.gif" + "Tag" = "8:" + "Folder" = "8:_9B25E0B00C2C4C7FB29BE94B8859977C" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_8DC8F46624C1484B9950384102994B2F" + { + "SourcePath" = "8:..\\skin\\google\\Buttons.bmp" + "TargetName" = "8:Buttons.bmp" + "Tag" = "8:" + "Folder" = "8:_96055D6EF136409781FB9B9D2AA42279" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_8EAD91E4DA424EA6A84DCFE531858A6A" + { + "SourcePath" = "8:..\\skin\\google\\res\\bignumpad_11.gif" + "TargetName" = "8:bignumpad_11.gif" + "Tag" = "8:" + "Folder" = "8:_9B25E0B00C2C4C7FB29BE94B8859977C" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_8F064C3BD40643E2B9CB0A070E5EB595" + { + "SourcePath" = "8:..\\skin\\google\\res\\bignumpad_10.gif" + "TargetName" = "8:bignumpad_10.gif" + "Tag" = "8:" + "Folder" = "8:_9B25E0B00C2C4C7FB29BE94B8859977C" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_91114B05951A4F99A978778F9E210C5C" + { + "SourcePath" = "8:..\\skin\\google\\res\\numpad_big_cropped_17.gif" + "TargetName" = "8:numpad_big_cropped_17.gif" + "Tag" = "8:" + "Folder" = "8:_9B25E0B00C2C4C7FB29BE94B8859977C" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_91326CA936BB4A17915EC8E1DEAE7AAF" + { + "SourcePath" = "8:..\\skin\\google\\res\\bignumpad_24.gif" + "TargetName" = "8:bignumpad_24.gif" + "Tag" = "8:" + "Folder" = "8:_9B25E0B00C2C4C7FB29BE94B8859977C" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_914D088BFACC45918177690473C705EC" + { + "SourcePath" = "8:..\\skin\\google\\res\\numpad_big_cropped_19.gif" + "TargetName" = "8:numpad_big_cropped_19.gif" + "Tag" = "8:" + "Folder" = "8:_9B25E0B00C2C4C7FB29BE94B8859977C" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_920E18F9C5C34C9EBFBF65840F9DD772" + { + "SourcePath" = "8:..\\skin\\google\\res\\bignumpad_01.gif" + "TargetName" = "8:bignumpad_01.gif" + "Tag" = "8:" + "Folder" = "8:_9B25E0B00C2C4C7FB29BE94B8859977C" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_929BB78C2E9D416FB6A8126177F8D075" + { + "SourcePath" = "8:..\\skin\\google\\res\\bignumpad_09.gif" + "TargetName" = "8:bignumpad_09.gif" + "Tag" = "8:" + "Folder" = "8:_9B25E0B00C2C4C7FB29BE94B8859977C" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_959DD5B2433842EA803B176E58C8CFD7" + { + "SourcePath" = "8:..\\skin\\google\\css\\gtalkphone\\handle.horizontal.bmp" + "TargetName" = "8:handle.horizontal.bmp" + "Tag" = "8:" + "Folder" = "8:_53783B5A732D49059B24D6A1105850EC" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_98B97716225C408E8D11F0C646D44927" + { + "SourcePath" = "8:..\\skin\\google\\res\\bignumpad_22.gif" + "TargetName" = "8:bignumpad_22.gif" + "Tag" = "8:" + "Folder" = "8:_9B25E0B00C2C4C7FB29BE94B8859977C" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_9C34E0D148C14DB7A206CA6E069F56FD" + { + "SourcePath" = "8:..\\skin\\google\\res\\bignumpad_23.gif" + "TargetName" = "8:bignumpad_23.gif" + "Tag" = "8:" + "Folder" = "8:_9B25E0B00C2C4C7FB29BE94B8859977C" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_A1322143D6F741CFA29A5539F515E1EA" + { + "SourcePath" = "8:..\\skin\\google\\res\\numpad_big_cropped_29.gif" + "TargetName" = "8:numpad_big_cropped_29.gif" + "Tag" = "8:" + "Folder" = "8:_9B25E0B00C2C4C7FB29BE94B8859977C" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_A3936A2727E73289F5804D5DA006FD0A" + { + "SourcePath" = "8:RPCRT4.dll" + "TargetName" = "8:RPCRT4.dll" + "Tag" = "8:" + "Folder" = "8:_04AC783F1C9F41AEB4E947C46CE9C9FF" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:TRUE" + "IsDependency" = "11:TRUE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_A4AC3FC3DCDF4E639A45632F0F3F7F04" + { + "SourcePath" = "8:..\\skin\\google\\res\\numpad_big_cropped_01.gif" + "TargetName" = "8:numpad_big_cropped_01.gif" + "Tag" = "8:" + "Folder" = "8:_9B25E0B00C2C4C7FB29BE94B8859977C" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_A91DF1AAD16346E59F0BBC44F54721CB" + { + "SourcePath" = "8:..\\skin\\google\\res\\fangdajing.gif" + "TargetName" = "8:fangdajing.gif" + "Tag" = "8:" + "Folder" = "8:_9B25E0B00C2C4C7FB29BE94B8859977C" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_B13EDAD78BBF4A3F9F516F864CB698A1" + { + "SourcePath" = "8:..\\skin\\google\\res\\NUM7.gif" + "TargetName" = "8:NUM7.gif" + "Tag" = "8:" + "Folder" = "8:_9B25E0B00C2C4C7FB29BE94B8859977C" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_B29014EF9EBF4C949289E10F81307693" + { + "SourcePath" = "8:..\\skin\\google\\res\\numpad_big_cropped_12.gif" + "TargetName" = "8:numpad_big_cropped_12.gif" + "Tag" = "8:" + "Folder" = "8:_9B25E0B00C2C4C7FB29BE94B8859977C" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_B3189C4379A149C68DE68EEFA2269570" + { + "SourcePath" = "8:..\\skin\\google\\res\\phone1.gif" + "TargetName" = "8:phone1.gif" + "Tag" = "8:" + "Folder" = "8:_9B25E0B00C2C4C7FB29BE94B8859977C" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_BA27CD4D77B1458197BAC2BB1A4237C0" + { + "SourcePath" = "8:..\\skin\\google\\res\\btReDial.gif" + "TargetName" = "8:btReDial.gif" + "Tag" = "8:" + "Folder" = "8:_9B25E0B00C2C4C7FB29BE94B8859977C" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_BA6EBADA278241F281B09875DD1661B8" + { + "SourcePath" = "8:..\\skin\\google\\res\\numpad_big_cropped_03.gif" + "TargetName" = "8:numpad_big_cropped_03.gif" + "Tag" = "8:" + "Folder" = "8:_9B25E0B00C2C4C7FB29BE94B8859977C" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_BC316CC13DBF4B68B36DC86C1D172509" + { + "SourcePath" = "8:..\\skin\\google\\res\\NUM6.gif" + "TargetName" = "8:NUM6.gif" + "Tag" = "8:" + "Folder" = "8:_9B25E0B00C2C4C7FB29BE94B8859977C" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_BD0F36F62CF0450CA4A5613FBBF76C45" + { + "SourcePath" = "8:..\\skin\\google\\js\\range.js" + "TargetName" = "8:range.js" + "Tag" = "8:" + "Folder" = "8:_083F81B59A304720B4A8BDB7FF91639D" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_BD6C52C176794E38AA7B9389EC172CBB" + { + "SourcePath" = "8:..\\skin\\google\\res\\cha.gif" + "TargetName" = "8:cha.gif" + "Tag" = "8:" + "Folder" = "8:_9B25E0B00C2C4C7FB29BE94B8859977C" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_BD74B34F036F4A9782584166ED893A18" + { + "SourcePath" = "8:..\\skin\\google\\res\\bignumpad_12.gif" + "TargetName" = "8:bignumpad_12.gif" + "Tag" = "8:" + "Folder" = "8:_9B25E0B00C2C4C7FB29BE94B8859977C" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_BE6A27F1EA5C462585E36F14FE24A5AC" + { + "SourcePath" = "8:..\\skin\\google\\js\\slider.js" + "TargetName" = "8:slider.js" + "Tag" = "8:" + "Folder" = "8:_083F81B59A304720B4A8BDB7FF91639D" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_BFC3D1F41C3243F2B40965A22F650C39" + { + "SourcePath" = "8:..\\skin\\google\\res\\numpad_big_cropped_26.gif" + "TargetName" = "8:numpad_big_cropped_26.gif" + "Tag" = "8:" + "Folder" = "8:_9B25E0B00C2C4C7FB29BE94B8859977C" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_C41CB5C24D2840AE8B6836AD7DB97196" + { + "SourcePath" = "8:..\\skin\\google\\res\\NUM8.gif" + "TargetName" = "8:NUM8.gif" + "Tag" = "8:" + "Folder" = "8:_9B25E0B00C2C4C7FB29BE94B8859977C" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_C4358C1327914A369B402FDAF33163CD" + { + "SourcePath" = "8:..\\skin\\google\\res\\bignumpad_21.gif" + "TargetName" = "8:bignumpad_21.gif" + "Tag" = "8:" + "Folder" = "8:_9B25E0B00C2C4C7FB29BE94B8859977C" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_C4FD5527CDD5430DBBB1329DC0BDA8C5" + { + "SourcePath" = "8:..\\skin\\google\\res\\btReDial_disable.gif" + "TargetName" = "8:btReDial_disable.gif" + "Tag" = "8:" + "Folder" = "8:_9B25E0B00C2C4C7FB29BE94B8859977C" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_C8BD2A446FD4454382A140CE1ED2E7C4" + { + "SourcePath" = "8:..\\skin\\google\\res\\bignumpad_20.gif" + "TargetName" = "8:bignumpad_20.gif" + "Tag" = "8:" + "Folder" = "8:_9B25E0B00C2C4C7FB29BE94B8859977C" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_C9F7CB31F666426DA9DDBA6DC8F0A803" + { + "SourcePath" = "8:..\\skin\\google\\res\\bignumpad_19.gif" + "TargetName" = "8:bignumpad_19.gif" + "Tag" = "8:" + "Folder" = "8:_9B25E0B00C2C4C7FB29BE94B8859977C" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_CA8E2512E246456093E1246370C11B41" + { + "SourcePath" = "8:..\\skin\\google\\res\\gtalkphone_logo.gif" + "TargetName" = "8:gtalkphone_logo.gif" + "Tag" = "8:" + "Folder" = "8:_9B25E0B00C2C4C7FB29BE94B8859977C" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_CC490CFDB0814F92B01C1E30B786A885" + { + "SourcePath" = "8:..\\skin\\google\\res\\numpad_big_cropped_15.gif" + "TargetName" = "8:numpad_big_cropped_15.gif" + "Tag" = "8:" + "Folder" = "8:_9B25E0B00C2C4C7FB29BE94B8859977C" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_CDBF086ABFDA4AEA9AF25BC36AEBC8D2" + { + "SourcePath" = "8:..\\skin\\google\\res\\numpad_big_cropped_16.gif" + "TargetName" = "8:numpad_big_cropped_16.gif" + "Tag" = "8:" + "Folder" = "8:_9B25E0B00C2C4C7FB29BE94B8859977C" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_CEB75EE0E69A45C7B9650D93CAC1009A" + { + "SourcePath" = "8:..\\skin\\google\\res\\bignumpad_26.gif" + "TargetName" = "8:bignumpad_26.gif" + "Tag" = "8:" + "Folder" = "8:_9B25E0B00C2C4C7FB29BE94B8859977C" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_D0752B769340436C8D9233BBB844535A" + { + "SourcePath" = "8:..\\skin\\google\\res\\btDial.gif" + "TargetName" = "8:btDial.gif" + "Tag" = "8:" + "Folder" = "8:_9B25E0B00C2C4C7FB29BE94B8859977C" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_D20F7A0A8C1445D3A5455D8ECA94D118" + { + "SourcePath" = "8:..\\skin\\google\\res\\bignumpad_18.gif" + "TargetName" = "8:bignumpad_18.gif" + "Tag" = "8:" + "Folder" = "8:_9B25E0B00C2C4C7FB29BE94B8859977C" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_D84D0E09AC0B46D68C56C4421EA0E03C" + { + "SourcePath" = "8:..\\skin\\google\\res\\bignumpad_06.gif" + "TargetName" = "8:bignumpad_06.gif" + "Tag" = "8:" + "Folder" = "8:_9B25E0B00C2C4C7FB29BE94B8859977C" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_D9B558ED8D5045A18FE190B7692F089A" + { + "SourcePath" = "8:..\\skin\\google\\res\\mic.gif" + "TargetName" = "8:mic.gif" + "Tag" = "8:" + "Folder" = "8:_9B25E0B00C2C4C7FB29BE94B8859977C" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_D9B95A3E108E2DC4D5FD66A98B16714F" + { + "SourcePath" = "8:libsqlite.dll" + "TargetName" = "8:libsqlite.dll" + "Tag" = "8:" + "Folder" = "8:_04AC783F1C9F41AEB4E947C46CE9C9FF" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:TRUE" + "IsDependency" = "11:TRUE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_DB764FA862A546569D00535F32AA49D9" + { + "SourcePath" = "8:..\\skin\\google\\close.bmp" + "TargetName" = "8:close.bmp" + "Tag" = "8:" + "Folder" = "8:_96055D6EF136409781FB9B9D2AA42279" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_DBBC0473484444C1BBC8C0408FD13107" + { + "SourcePath" = "8:..\\skin\\google\\res\\bignumpad_04.gif" + "TargetName" = "8:bignumpad_04.gif" + "Tag" = "8:" + "Folder" = "8:_9B25E0B00C2C4C7FB29BE94B8859977C" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_DDDD93BA6A644BFDB6A234872F6B544D" + { + "SourcePath" = "8:..\\skin\\google\\js\\timer.js" + "TargetName" = "8:timer.js" + "Tag" = "8:" + "Folder" = "8:_083F81B59A304720B4A8BDB7FF91639D" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_E0891F01CC67410D97B62D708B560C60" + { + "SourcePath" = "8:..\\skin\\google\\bottom.bmp" + "TargetName" = "8:bottom.bmp" + "Tag" = "8:" + "Folder" = "8:_96055D6EF136409781FB9B9D2AA42279" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_E1CC91FCF87955D17FC3C0A8E875B690" + { + "SourcePath" = "8:WLDAP32.dll" + "TargetName" = "8:WLDAP32.dll" + "Tag" = "8:" + "Folder" = "8:_04AC783F1C9F41AEB4E947C46CE9C9FF" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:TRUE" + "IsDependency" = "11:TRUE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_E2B402496C1340FAB3A7E2EE660A9B10" + { + "SourcePath" = "8:..\\skin\\google\\res\\numpad_big_cropped_18.gif" + "TargetName" = "8:numpad_big_cropped_18.gif" + "Tag" = "8:" + "Folder" = "8:_9B25E0B00C2C4C7FB29BE94B8859977C" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_E51DA0CD3E3941299D7A22F20C1E16C0" + { + "SourcePath" = "8:..\\skin\\google\\res\\numpad_big_cropped_14.gif" + "TargetName" = "8:numpad_big_cropped_14.gif" + "Tag" = "8:" + "Folder" = "8:_9B25E0B00C2C4C7FB29BE94B8859977C" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_EF00E2B953F847BE8E2E9C25455C93EB" + { + "SourcePath" = "8:..\\skin\\google\\res\\numpad_big_cropped_09.gif" + "TargetName" = "8:numpad_big_cropped_09.gif" + "Tag" = "8:" + "Folder" = "8:_9B25E0B00C2C4C7FB29BE94B8859977C" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_EF83A11C5C3440848E6765E2638C2E32" + { + "SourcePath" = "8:..\\skin\\google\\css\\gtalkphone\\gtalkphone.css" + "TargetName" = "8:gtalkphone.css" + "Tag" = "8:" + "Folder" = "8:_53783B5A732D49059B24D6A1105850EC" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_F1F056696C2A4479BDC661D2A6FCB410" + { + "SourcePath" = "8:..\\skin\\google\\res\\btHold_disable.gif" + "TargetName" = "8:btHold_disable.gif" + "Tag" = "8:" + "Folder" = "8:_9B25E0B00C2C4C7FB29BE94B8859977C" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_F1F90472DB034558ACB7B359C73F0C17" + { + "SourcePath" = "8:..\\skin\\google\\res\\numpad_big_cropped_28.gif" + "TargetName" = "8:numpad_big_cropped_28.gif" + "Tag" = "8:" + "Folder" = "8:_9B25E0B00C2C4C7FB29BE94B8859977C" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_F70545DA1954BF3D355780C29CBEBD74" + { + "SourcePath" = "8:FreeSwitch.dll" + "TargetName" = "8:FreeSwitch.dll" + "Tag" = "8:" + "Folder" = "8:_04AC783F1C9F41AEB4E947C46CE9C9FF" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:TRUE" + "IsDependency" = "11:TRUE" + "IsolateTo" = "8:" + } + } + "FileType" + { + } + "Folder" + { + "{3C67513D-01DD-4637-8A68-80971EB9504F}:_04AC783F1C9F41AEB4E947C46CE9C9FF" + { + "DefaultLocation" = "8:[ProgramFilesFolder]\\[ProductName]" + "Name" = "8:#1925" + "AlwaysCreate" = "11:FALSE" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Property" = "8:TARGETDIR" + "Folders" + { + "{9EF0B969-E518-4E46-987F-47570745A589}:_06036160035041E38F4179E6DB6380C5" + { + "Name" = "8:conf" + "AlwaysCreate" = "11:TRUE" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Property" = "8:_A95348FEFEF74A31B7C08B4201803CBD" + "Folders" + { + } + } + "{9EF0B969-E518-4E46-987F-47570745A589}:_1C97B9EB8E024EE0AA5282BFBE006743" + { + "Name" = "8:db" + "AlwaysCreate" = "11:TRUE" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Property" = "8:_9E6DFB10CEE3456A82E42EA3751A0A25" + "Folders" + { + } + } + "{9EF0B969-E518-4E46-987F-47570745A589}:_50A75B11E6984CA5933060192C4A21CC" + { + "Name" = "8:skin" + "AlwaysCreate" = "11:FALSE" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Property" = "8:_E69C08966CEF428A9479FD4CB77B7143" + "Folders" + { + "{9EF0B969-E518-4E46-987F-47570745A589}:_96055D6EF136409781FB9B9D2AA42279" + { + "Name" = "8:google" + "AlwaysCreate" = "11:FALSE" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Property" = "8:_D9E8C3693E7643D6BA2FD364CD515C6C" + "Folders" + { + "{9EF0B969-E518-4E46-987F-47570745A589}:_083F81B59A304720B4A8BDB7FF91639D" + { + "Name" = "8:js" + "AlwaysCreate" = "11:FALSE" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Property" = "8:_55E35904680847C58A01CD98DB4F57B3" + "Folders" + { + } + } + "{9EF0B969-E518-4E46-987F-47570745A589}:_861C9A164F7740888F430087CD807957" + { + "Name" = "8:css" + "AlwaysCreate" = "11:FALSE" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Property" = "8:_127A93C1C6DD4F0596068F708C75638B" + "Folders" + { + "{9EF0B969-E518-4E46-987F-47570745A589}:_53783B5A732D49059B24D6A1105850EC" + { + "Name" = "8:gtalkphone" + "AlwaysCreate" = "11:FALSE" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Property" = "8:_F2570A427C29462DB652E6CD74E87B2B" + "Folders" + { + } + } + } + } + "{9EF0B969-E518-4E46-987F-47570745A589}:_9B25E0B00C2C4C7FB29BE94B8859977C" + { + "Name" = "8:res" + "AlwaysCreate" = "11:FALSE" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Property" = "8:_0C7A7A8E013043A28422129D387F3231" + "Folders" + { + } + } + } + } + } + } + "{9EF0B969-E518-4E46-987F-47570745A589}:_B6E020422C78490D96F78DB0E1A3F521" + { + "Name" = "8:mod" + "AlwaysCreate" = "11:TRUE" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Property" = "8:_09F2F8E16214428B84412E224BAA50C1" + "Folders" + { + } + } + "{9EF0B969-E518-4E46-987F-47570745A589}:_ED8FE817D10341CEBA2571A43326876F" + { + "Name" = "8:log" + "AlwaysCreate" = "11:TRUE" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Property" = "8:_673CC6A86CF64CC2BD137EF46A3AD379" + "Folders" + { + } + } + } + } + "{1525181F-901A-416C-8A58-119130FE478E}:_47AC7012FEA1483795137E042EAAA132" + { + "Name" = "8:#1916" + "AlwaysCreate" = "11:FALSE" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Property" = "8:DesktopFolder" + "Folders" + { + } + } + "{1525181F-901A-416C-8A58-119130FE478E}:_BB9A8497D4A34C94A9F73DBAD1B4EDD5" + { + "Name" = "8:#1919" + "AlwaysCreate" = "11:FALSE" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Property" = "8:ProgramMenuFolder" + "Folders" + { + } + } + } + "LaunchCondition" + { + } + "Locator" + { + } + "MsiBootstrapper" + { + "LangId" = "3:1033" + } + "Product" + { + "Name" = "8:Microsoft Visual Studio" + "ProductName" = "8:GtalkPhone" + "ProductCode" = "8:{317A9CC0-40DC-4803-A13E-5937F05F9D2E}" + "PackageCode" = "8:{F335F38D-E000-4D11-92E4-6C534A847189}" + "UpgradeCode" = "8:{8080E3A5-7ADD-4173-8913-BDA439D1C8DD}" + "RestartWWWService" = "11:FALSE" + "RemovePreviousVersions" = "11:FALSE" + "DetectNewerInstalledVersion" = "11:TRUE" + "InstallAllUsers" = "11:FALSE" + "ProductVersion" = "8:1.0.0" + "Manufacturer" = "8:GtalkPhone" + "ARPHELPTELEPHONE" = "8:" + "ARPHELPLINK" = "8:http://www.gtalkphone.com" + "Title" = "8:GtalkPhone" + "Subject" = "8:" + "ARPCONTACT" = "8:GtalkPhone" + "Keywords" = "8:" + "ARPCOMMENTS" = "8:Gtalkphone soft phone client" + "ARPURLINFOABOUT" = "8:http://www.gtalkphone.com" + "ARPPRODUCTICON" = "8:" + "ARPIconIndex" = "3:0" + "SearchPath" = "8:" + "UseSystemSearchPath" = "11:TRUE" + "TargetPlatform" = "3:0" + "PreBuildEvent" = "8:" + "PostBuildEvent" = "8:" + "RunPostBuildEvent" = "3:0" + } + "Registry" + { + "HKLM" + { + "Keys" + { + "{60EA8692-D2D5-43EB-80DC-7906BF13D6EF}:_C86C84661E6B4F4385B0A9B46004C30A" + { + "Name" = "8:Software" + "Condition" = "8:" + "AlwaysCreate" = "11:FALSE" + "DeleteAtUninstall" = "11:FALSE" + "Transitive" = "11:FALSE" + "Keys" + { + "{60EA8692-D2D5-43EB-80DC-7906BF13D6EF}:_F9ACB3B7D8FE4C4AB1DEAAA8AFDB6625" + { + "Name" = "8:[Manufacturer]" + "Condition" = "8:" + "AlwaysCreate" = "11:FALSE" + "DeleteAtUninstall" = "11:FALSE" + "Transitive" = "11:FALSE" + "Keys" + { + } + "Values" + { + "{ADCFDA98-8FDD-45E4-90BC-E3D20B029870}:_C59781825E5B4A9AA93BDAA5A88B7390" + { + "Name" = "8:[ProductName]" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "ValueTypes" = "3:1" + "Value" = "8:" + } + } + } + } + "Values" + { + } + } + } + } + "HKCU" + { + "Keys" + { + "{60EA8692-D2D5-43EB-80DC-7906BF13D6EF}:_7F5B1AD977F741E2BA57B612CB916982" + { + "Name" = "8:Software" + "Condition" = "8:" + "AlwaysCreate" = "11:FALSE" + "DeleteAtUninstall" = "11:FALSE" + "Transitive" = "11:FALSE" + "Keys" + { + "{60EA8692-D2D5-43EB-80DC-7906BF13D6EF}:_8BE36B8912C74AE3895B662703C59F60" + { + "Name" = "8:[Manufacturer]" + "Condition" = "8:" + "AlwaysCreate" = "11:FALSE" + "DeleteAtUninstall" = "11:FALSE" + "Transitive" = "11:FALSE" + "Keys" + { + } + "Values" + { + } + } + } + "Values" + { + } + } + } + } + "HKCR" + { + "Keys" + { + } + } + "HKU" + { + "Keys" + { + } + } + "HKPU" + { + "Keys" + { + } + } + } + "Sequences" + { + } + "Shortcut" + { + "{970C0BB2-C7D0-45D7-ABFA-7EC378858BC0}:_2571AAD8CB0B4B7D8DD7AF7B936AAB41" + { + "Name" = "8:GtalkPhone" + "Arguments" = "8:" + "Description" = "8:" + "ShowCmd" = "3:1" + "IconIndex" = "3:0" + "Transitive" = "11:FALSE" + "Target" = "8:_4558465C50C14F60BB4E8B25025AE011" + "Folder" = "8:_47AC7012FEA1483795137E042EAAA132" + "WorkingFolder" = "8:_04AC783F1C9F41AEB4E947C46CE9C9FF" + "Icon" = "8:" + "Feature" = "8:" + } + } + "UserInterface" + { + "{DF760B10-853B-4699-99F2-AFF7185B4A62}:_0AC03CBC91DC47F395834FBA9E8EFA43" + { + "Name" = "8:#1902" + "Sequence" = "3:2" + "Attributes" = "3:3" + "Dialogs" + { + "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_7E723E774FA54F4DBCB57AE03DE9B912" + { + "Sequence" = "3:100" + "DisplayName" = "8:Finished" + "UseDynamicProperties" = "11:TRUE" + "IsDependency" = "11:FALSE" + "SourcePath" = "8:<VsdDialogDir>\\VsdAdminFinishedDlg.wid" + "Properties" + { + "BannerBitmap" + { + "Name" = "8:BannerBitmap" + "DisplayName" = "8:#1001" + "Description" = "8:#1101" + "Type" = "3:8" + "ContextData" = "8:Bitmap" + "Attributes" = "3:4" + "Setting" = "3:1" + "UsePlugInResources" = "11:TRUE" + } + } + } + } + } + "{DF760B10-853B-4699-99F2-AFF7185B4A62}:_885CF4FBC8524588BC68589AA4DAD7CD" + { + "Name" = "8:#1900" + "Sequence" = "3:2" + "Attributes" = "3:1" + "Dialogs" + { + "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_4BB1CFED1FBE405DA7915AE4FDAAD9E2" + { + "Sequence" = "3:300" + "DisplayName" = "8:Confirm Installation" + "UseDynamicProperties" = "11:TRUE" + "IsDependency" = "11:FALSE" + "SourcePath" = "8:<VsdDialogDir>\\VsdAdminConfirmDlg.wid" + "Properties" + { + "BannerBitmap" + { + "Name" = "8:BannerBitmap" + "DisplayName" = "8:#1001" + "Description" = "8:#1101" + "Type" = "3:8" + "ContextData" = "8:Bitmap" + "Attributes" = "3:4" + "Setting" = "3:1" + "UsePlugInResources" = "11:TRUE" + } + } + } + "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_4F779649BBA94A14A711885D453A873C" + { + "Sequence" = "3:100" + "DisplayName" = "8:Welcome" + "UseDynamicProperties" = "11:TRUE" + "IsDependency" = "11:FALSE" + "SourcePath" = "8:<VsdDialogDir>\\VsdAdminWelcomeDlg.wid" + "Properties" + { + "BannerBitmap" + { + "Name" = "8:BannerBitmap" + "DisplayName" = "8:#1001" + "Description" = "8:#1101" + "Type" = "3:8" + "ContextData" = "8:Bitmap" + "Attributes" = "3:4" + "Setting" = "3:1" + "UsePlugInResources" = "11:TRUE" + } + "CopyrightWarning" + { + "Name" = "8:CopyrightWarning" + "DisplayName" = "8:#1002" + "Description" = "8:#1102" + "Type" = "3:3" + "ContextData" = "8:" + "Attributes" = "3:0" + "Setting" = "3:1" + "Value" = "8:#1202" + "DefaultValue" = "8:#1202" + "UsePlugInResources" = "11:TRUE" + } + "Welcome" + { + "Name" = "8:Welcome" + "DisplayName" = "8:#1003" + "Description" = "8:#1103" + "Type" = "3:3" + "ContextData" = "8:" + "Attributes" = "3:0" + "Setting" = "3:1" + "Value" = "8:#1203" + "DefaultValue" = "8:#1203" + "UsePlugInResources" = "11:TRUE" + } + } + } + "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_E0F0A54AAFCF424685A4BCCA5D4FA293" + { + "Sequence" = "3:200" + "DisplayName" = "8:Installation Folder" + "UseDynamicProperties" = "11:TRUE" + "IsDependency" = "11:FALSE" + "SourcePath" = "8:<VsdDialogDir>\\VsdAdminFolderDlg.wid" + "Properties" + { + "BannerBitmap" + { + "Name" = "8:BannerBitmap" + "DisplayName" = "8:#1001" + "Description" = "8:#1101" + "Type" = "3:8" + "ContextData" = "8:Bitmap" + "Attributes" = "3:4" + "Setting" = "3:1" + "UsePlugInResources" = "11:TRUE" + } + } + } + "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_E8A0FD168FA4401FBF582E01DA819A71" + { + "Sequence" = "3:210" + "DisplayName" = "8:License Agreement" + "UseDynamicProperties" = "11:TRUE" + "IsDependency" = "11:FALSE" + "SourcePath" = "8:<VsdDialogDir>\\VsdAdminLicenseDlg.wid" + "Properties" + { + "BannerBitmap" + { + "Name" = "8:BannerBitmap" + "DisplayName" = "8:#1001" + "Description" = "8:#1101" + "Type" = "3:8" + "ContextData" = "8:Bitmap" + "Attributes" = "3:4" + "Setting" = "3:1" + "UsePlugInResources" = "11:TRUE" + } + "EulaText" + { + "Name" = "8:EulaText" + "DisplayName" = "8:#1008" + "Description" = "8:#1108" + "Type" = "3:6" + "ContextData" = "8:" + "Attributes" = "3:0" + "Setting" = "3:2" + "UsePlugInResources" = "11:TRUE" + } + "Sunken" + { + "Name" = "8:Sunken" + "DisplayName" = "8:#1007" + "Description" = "8:#1107" + "Type" = "3:5" + "ContextData" = "8:4;True=4;False=0" + "Attributes" = "3:0" + "Setting" = "3:0" + "Value" = "3:4" + "DefaultValue" = "3:4" + "UsePlugInResources" = "11:TRUE" + } + } + } + } + } + "{DF760B10-853B-4699-99F2-AFF7185B4A62}:_9237AC900FC7421096FC1C1F479A57D9" + { + "Name" = "8:#1902" + "Sequence" = "3:1" + "Attributes" = "3:3" + "Dialogs" + { + "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_87DF179163CD484DB37A39147438C87A" + { + "Sequence" = "3:100" + "DisplayName" = "8:Finished" + "UseDynamicProperties" = "11:TRUE" + "IsDependency" = "11:FALSE" + "SourcePath" = "8:<VsdDialogDir>\\VsdFinishedDlg.wid" + "Properties" + { + "BannerBitmap" + { + "Name" = "8:BannerBitmap" + "DisplayName" = "8:#1001" + "Description" = "8:#1101" + "Type" = "3:8" + "ContextData" = "8:Bitmap" + "Attributes" = "3:4" + "Setting" = "3:1" + "UsePlugInResources" = "11:TRUE" + } + "UpdateText" + { + "Name" = "8:UpdateText" + "DisplayName" = "8:#1058" + "Description" = "8:#1158" + "Type" = "3:15" + "ContextData" = "8:" + "Attributes" = "3:0" + "Setting" = "3:1" + "Value" = "8:#1258" + "DefaultValue" = "8:#1258" + "UsePlugInResources" = "11:TRUE" + } + } + } + } + } + "{DF760B10-853B-4699-99F2-AFF7185B4A62}:_9F49CF9AA2304625B214D7BF7FE0FC89" + { + "Name" = "8:#1900" + "Sequence" = "3:1" + "Attributes" = "3:1" + "Dialogs" + { + "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_008ED2DDF9EE4AAAA5A54CE5B90D7427" + { + "Sequence" = "3:100" + "DisplayName" = "8:Welcome" + "UseDynamicProperties" = "11:TRUE" + "IsDependency" = "11:FALSE" + "SourcePath" = "8:<VsdDialogDir>\\VsdWelcomeDlg.wid" + "Properties" + { + "BannerBitmap" + { + "Name" = "8:BannerBitmap" + "DisplayName" = "8:#1001" + "Description" = "8:#1101" + "Type" = "3:8" + "ContextData" = "8:Bitmap" + "Attributes" = "3:4" + "Setting" = "3:1" + "UsePlugInResources" = "11:TRUE" + } + "CopyrightWarning" + { + "Name" = "8:CopyrightWarning" + "DisplayName" = "8:#1002" + "Description" = "8:#1102" + "Type" = "3:3" + "ContextData" = "8:" + "Attributes" = "3:0" + "Setting" = "3:1" + "Value" = "8:#1202" + "DefaultValue" = "8:#1202" + "UsePlugInResources" = "11:TRUE" + } + "Welcome" + { + "Name" = "8:Welcome" + "DisplayName" = "8:#1003" + "Description" = "8:#1103" + "Type" = "3:3" + "ContextData" = "8:" + "Attributes" = "3:0" + "Setting" = "3:1" + "Value" = "8:#1203" + "DefaultValue" = "8:#1203" + "UsePlugInResources" = "11:TRUE" + } + } + } + "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_1229F6668E004795AE90C753D37CA881" + { + "Sequence" = "3:300" + "DisplayName" = "8:License Agreement" + "UseDynamicProperties" = "11:TRUE" + "IsDependency" = "11:FALSE" + "SourcePath" = "8:<VsdDialogDir>\\VsdLicenseDlg.wid" + "Properties" + { + "BannerBitmap" + { + "Name" = "8:BannerBitmap" + "DisplayName" = "8:#1001" + "Description" = "8:#1101" + "Type" = "3:8" + "ContextData" = "8:Bitmap" + "Attributes" = "3:4" + "Setting" = "3:1" + "UsePlugInResources" = "11:TRUE" + } + "EulaText" + { + "Name" = "8:EulaText" + "DisplayName" = "8:#1008" + "Description" = "8:#1108" + "Type" = "3:6" + "ContextData" = "8:" + "Attributes" = "3:0" + "Setting" = "3:2" + "UsePlugInResources" = "11:TRUE" + } + "Sunken" + { + "Name" = "8:Sunken" + "DisplayName" = "8:#1007" + "Description" = "8:#1107" + "Type" = "3:5" + "ContextData" = "8:4;True=4;False=0" + "Attributes" = "3:0" + "Setting" = "3:0" + "Value" = "3:4" + "DefaultValue" = "3:4" + "UsePlugInResources" = "11:TRUE" + } + } + } + "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_E4748A502E1E4F89B72F6B70E40E6954" + { + "Sequence" = "3:400" + "DisplayName" = "8:Confirm Installation" + "UseDynamicProperties" = "11:TRUE" + "IsDependency" = "11:FALSE" + "SourcePath" = "8:<VsdDialogDir>\\VsdConfirmDlg.wid" + "Properties" + { + "BannerBitmap" + { + "Name" = "8:BannerBitmap" + "DisplayName" = "8:#1001" + "Description" = "8:#1101" + "Type" = "3:8" + "ContextData" = "8:Bitmap" + "Attributes" = "3:4" + "Setting" = "3:1" + "UsePlugInResources" = "11:TRUE" + } + } + } + "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_F9BF3342C96C46E881504C25485FBD93" + { + "Sequence" = "3:200" + "DisplayName" = "8:Installation Folder" + "UseDynamicProperties" = "11:TRUE" + "IsDependency" = "11:FALSE" + "SourcePath" = "8:<VsdDialogDir>\\VsdFolderDlg.wid" + "Properties" + { + "BannerBitmap" + { + "Name" = "8:BannerBitmap" + "DisplayName" = "8:#1001" + "Description" = "8:#1101" + "Type" = "3:8" + "ContextData" = "8:Bitmap" + "Attributes" = "3:4" + "Setting" = "3:1" + "UsePlugInResources" = "11:TRUE" + } + "InstallAllUsersVisible" + { + "Name" = "8:InstallAllUsersVisible" + "DisplayName" = "8:#1059" + "Description" = "8:#1159" + "Type" = "3:5" + "ContextData" = "8:1;True=1;False=0" + "Attributes" = "3:0" + "Setting" = "3:0" + "Value" = "3:1" + "DefaultValue" = "3:1" + "UsePlugInResources" = "11:TRUE" + } + } + } + } + } + "{2479F3F5-0309-486D-8047-8187E2CE5BA0}:_A743B7ABADA24530AC058C2B0E78F94F" + { + "UseDynamicProperties" = "11:FALSE" + "IsDependency" = "11:FALSE" + "SourcePath" = "8:<VsdDialogDir>\\VsdUserInterface.wim" + } + "{DF760B10-853B-4699-99F2-AFF7185B4A62}:_B83060B37387437599800ADFAC074C18" + { + "Name" = "8:#1901" + "Sequence" = "3:1" + "Attributes" = "3:2" + "Dialogs" + { + "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_3C5BB3C734294ACAAB1AEF433CCCA33F" + { + "Sequence" = "3:100" + "DisplayName" = "8:Progress" + "UseDynamicProperties" = "11:TRUE" + "IsDependency" = "11:FALSE" + "SourcePath" = "8:<VsdDialogDir>\\VsdProgressDlg.wid" + "Properties" + { + "BannerBitmap" + { + "Name" = "8:BannerBitmap" + "DisplayName" = "8:#1001" + "Description" = "8:#1101" + "Type" = "3:8" + "ContextData" = "8:Bitmap" + "Attributes" = "3:4" + "Setting" = "3:1" + "UsePlugInResources" = "11:TRUE" + } + "ShowProgress" + { + "Name" = "8:ShowProgress" + "DisplayName" = "8:#1009" + "Description" = "8:#1109" + "Type" = "3:5" + "ContextData" = "8:1;True=1;False=0" + "Attributes" = "3:0" + "Setting" = "3:0" + "Value" = "3:1" + "DefaultValue" = "3:1" + "UsePlugInResources" = "11:TRUE" + } + } + } + } + } + "{DF760B10-853B-4699-99F2-AFF7185B4A62}:_BC9CAF451369479F82544986C8CF598B" + { + "Name" = "8:#1901" + "Sequence" = "3:2" + "Attributes" = "3:2" + "Dialogs" + { + "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_F33D853FB64C44D9A501F2CD9132828B" + { + "Sequence" = "3:100" + "DisplayName" = "8:Progress" + "UseDynamicProperties" = "11:TRUE" + "IsDependency" = "11:FALSE" + "SourcePath" = "8:<VsdDialogDir>\\VsdAdminProgressDlg.wid" + "Properties" + { + "BannerBitmap" + { + "Name" = "8:BannerBitmap" + "DisplayName" = "8:#1001" + "Description" = "8:#1101" + "Type" = "3:8" + "ContextData" = "8:Bitmap" + "Attributes" = "3:4" + "Setting" = "3:1" + "UsePlugInResources" = "11:TRUE" + } + "ShowProgress" + { + "Name" = "8:ShowProgress" + "DisplayName" = "8:#1009" + "Description" = "8:#1109" + "Type" = "3:5" + "ContextData" = "8:1;True=1;False=0" + "Attributes" = "3:0" + "Setting" = "3:0" + "Value" = "3:1" + "DefaultValue" = "3:1" + "UsePlugInResources" = "11:TRUE" + } + } + } + } + } + "{2479F3F5-0309-486D-8047-8187E2CE5BA0}:_E0AB16337A7946BFAEA2E0890188594D" + { + "UseDynamicProperties" = "11:FALSE" + "IsDependency" = "11:FALSE" + "SourcePath" = "8:<VsdDialogDir>\\VsdBasicDialogs.wim" + } + } + "MergeModule" + { + "{CEE29DC0-9FBA-4B99-8D47-5BC643D9B626}:_2D3594E151184C9B8C66BA923F3FABAA" + { + "UseDynamicProperties" = "11:TRUE" + "IsDependency" = "11:TRUE" + "SourcePath" = "8:policy_8_0_microsoft_vc80_crt_x86.msm" + "Properties" + { + } + "LanguageId" = "3:0" + "Exclude" = "11:FALSE" + "Folder" = "8:" + "Feature" = "8:" + "IsolateTo" = "8:" + } + "{CEE29DC0-9FBA-4B99-8D47-5BC643D9B626}:_5D2D1389842F47F8BEA541066B9C4098" + { + "UseDynamicProperties" = "11:TRUE" + "IsDependency" = "11:TRUE" + "SourcePath" = "8:Microsoft_VC80_MFC_x86.msm" + "Properties" + { + } + "LanguageId" = "3:0" + "Exclude" = "11:FALSE" + "Folder" = "8:" + "Feature" = "8:" + "IsolateTo" = "8:" + } + "{CEE29DC0-9FBA-4B99-8D47-5BC643D9B626}:_8D269A170E264064951A217B1E8540A9" + { + "UseDynamicProperties" = "11:TRUE" + "IsDependency" = "11:TRUE" + "SourcePath" = "8:Microsoft_VC80_CRT_x86.msm" + "Properties" + { + } + "LanguageId" = "3:0" + "Exclude" = "11:FALSE" + "Folder" = "8:" + "Feature" = "8:" + "IsolateTo" = "8:" + } + "{CEE29DC0-9FBA-4B99-8D47-5BC643D9B626}:_90153CA3A0E74CBE805ADA265DB7F60F" + { + "UseDynamicProperties" = "11:TRUE" + "IsDependency" = "11:TRUE" + "SourcePath" = "8:policy_8_0_microsoft_vc80_mfc_x86.msm" + "Properties" + { + } + "LanguageId" = "3:0" + "Exclude" = "11:FALSE" + "Folder" = "8:" + "Feature" = "8:" + "IsolateTo" = "8:" + } + } + "ProjectOutput" + { + "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_1CFB1AB04E024FC993E0EB4859DF8408" + { + "SourcePath" = "8:..\\release\\mod\\mod_dingaling.dll" + "TargetName" = "8:" + "Tag" = "8:" + "Folder" = "8:_B6E020422C78490D96F78DB0E1A3F521" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + "ProjectOutputGroupRegister" = "3:1" + "OutputConfiguration" = "8:" + "OutputGroupCanonicalName" = "8:Built" + "OutputProjectGuid" = "8:{FFAA4C52-3A53-4F99-90C1-D59D1F0427F3}" + "ShowKeyOutput" = "11:TRUE" + "ExcludeFilters" + { + } + } + "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_2814E641538B42EFA83525986A9D5AC1" + { + "SourcePath" = "8:..\\release\\mod\\mod_ilbc.dll" + "TargetName" = "8:" + "Tag" = "8:" + "Folder" = "8:_B6E020422C78490D96F78DB0E1A3F521" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + "ProjectOutputGroupRegister" = "3:1" + "OutputConfiguration" = "8:" + "OutputGroupCanonicalName" = "8:Built" + "OutputProjectGuid" = "8:{D3EC0AFF-76FC-4210-A825-9A17410660A3}" + "ShowKeyOutput" = "11:TRUE" + "ExcludeFilters" + { + } + } + "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_28FBC5A60B44423B8A2CC378347483CE" + { + "SourcePath" = "8:..\\release\\libapr.dll" + "TargetName" = "8:" + "Tag" = "8:" + "Folder" = "8:_04AC783F1C9F41AEB4E947C46CE9C9FF" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + "ProjectOutputGroupRegister" = "3:1" + "OutputConfiguration" = "8:" + "OutputGroupCanonicalName" = "8:Built" + "OutputProjectGuid" = "8:{F6C55D93-B927-4483-BB69-15AEF3DD2DFF}" + "ShowKeyOutput" = "11:TRUE" + "ExcludeFilters" + { + } + } + "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_2F2FEC549F02436EB87961BD1B9E5783" + { + "SourcePath" = "8:..\\release\\mod\\mod_iax.dll" + "TargetName" = "8:" + "Tag" = "8:" + "Folder" = "8:_B6E020422C78490D96F78DB0E1A3F521" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + "ProjectOutputGroupRegister" = "3:1" + "OutputConfiguration" = "8:" + "OutputGroupCanonicalName" = "8:Built" + "OutputProjectGuid" = "8:{3A5B9131-F20C-4A85-9447-6C1610941CEE}" + "ShowKeyOutput" = "11:TRUE" + "ExcludeFilters" + { + } + } + "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_318FCC99E8D143D6B4F9F534E63009B3" + { + "SourcePath" = "8:..\\release\\mod\\mod_sndfile.dll" + "TargetName" = "8:" + "Tag" = "8:" + "Folder" = "8:_B6E020422C78490D96F78DB0E1A3F521" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + "ProjectOutputGroupRegister" = "3:1" + "OutputConfiguration" = "8:" + "OutputGroupCanonicalName" = "8:Built" + "OutputProjectGuid" = "8:{AFAC0568-7548-42D5-9F6A-8D3400A1E4F6}" + "ShowKeyOutput" = "11:TRUE" + "ExcludeFilters" + { + } + } + "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_3FBEFE0119944C6781F81104ECEF37CA" + { + "SourcePath" = "8:..\\release\\libapriconv.dll" + "TargetName" = "8:" + "Tag" = "8:" + "Folder" = "8:_04AC783F1C9F41AEB4E947C46CE9C9FF" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + "ProjectOutputGroupRegister" = "3:1" + "OutputConfiguration" = "8:" + "OutputGroupCanonicalName" = "8:Built" + "OutputProjectGuid" = "8:{101130D1-3EA6-4ED2-B65D-CEB5243A20ED}" + "ShowKeyOutput" = "11:TRUE" + "ExcludeFilters" + { + } + } + "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_4558465C50C14F60BB4E8B25025AE011" + { + "SourcePath" = "8:..\\release\\gtalkphone.exe" + "TargetName" = "8:" + "Tag" = "8:" + "Folder" = "8:_04AC783F1C9F41AEB4E947C46CE9C9FF" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + "ProjectOutputGroupRegister" = "3:1" + "OutputConfiguration" = "8:" + "OutputGroupCanonicalName" = "8:Built" + "OutputProjectGuid" = "8:{14187C61-F357-4151-AEDE-F562645FB3F3}" + "ShowKeyOutput" = "11:TRUE" + "ExcludeFilters" + { + } + } + "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_59CFED0C4EC0492C945E4EBC04FE965F" + { + "SourcePath" = "8:..\\release\\libaprutil.dll" + "TargetName" = "8:" + "Tag" = "8:" + "Folder" = "8:_04AC783F1C9F41AEB4E947C46CE9C9FF" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + "ProjectOutputGroupRegister" = "3:1" + "OutputConfiguration" = "8:" + "OutputGroupCanonicalName" = "8:Built" + "OutputProjectGuid" = "8:{F057DA7F-79E5-4B00-845C-EF446EF055E3}" + "ShowKeyOutput" = "11:TRUE" + "ExcludeFilters" + { + } + } + "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_6E5C001E7A314DCEA0A4BF52BF74BCAD" + { + "SourcePath" = "8:..\\release\\mod\\mod_speex.dll" + "TargetName" = "8:" + "Tag" = "8:" + "Folder" = "8:_B6E020422C78490D96F78DB0E1A3F521" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + "ProjectOutputGroupRegister" = "3:1" + "OutputConfiguration" = "8:" + "OutputGroupCanonicalName" = "8:Built" + "OutputProjectGuid" = "8:{5580D60E-0F77-4716-9CD4-B8E5986FA375}" + "ShowKeyOutput" = "11:TRUE" + "ExcludeFilters" + { + } + } + "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_72A8732C0C0C4D0EAAE89DBB82073335" + { + "SourcePath" = "8:..\\release\\mod\\mod_playback.dll" + "TargetName" = "8:" + "Tag" = "8:" + "Folder" = "8:_B6E020422C78490D96F78DB0E1A3F521" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + "ProjectOutputGroupRegister" = "3:1" + "OutputConfiguration" = "8:" + "OutputGroupCanonicalName" = "8:Built" + "OutputProjectGuid" = "8:{78100236-7CEA-4948-96CC-E8ED3160329C}" + "ShowKeyOutput" = "11:TRUE" + "ExcludeFilters" + { + } + } + "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_7358123D2D064AD1BC517911A8B23D1B" + { + "SourcePath" = "8:..\\release\\mod\\mod_softtimer.dll" + "TargetName" = "8:" + "Tag" = "8:" + "Folder" = "8:_B6E020422C78490D96F78DB0E1A3F521" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + "ProjectOutputGroupRegister" = "3:1" + "OutputConfiguration" = "8:" + "OutputGroupCanonicalName" = "8:Built" + "OutputProjectGuid" = "8:{DCC13474-28DF-47CA-A8EB-72F8CE9A78C5}" + "ShowKeyOutput" = "11:TRUE" + "ExcludeFilters" + { + } + } + "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_87768631363249B2B301143C193612F7" + { + "SourcePath" = "8:..\\release\\mod\\mod_g711.dll" + "TargetName" = "8:" + "Tag" = "8:" + "Folder" = "8:_B6E020422C78490D96F78DB0E1A3F521" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + "ProjectOutputGroupRegister" = "3:1" + "OutputConfiguration" = "8:" + "OutputGroupCanonicalName" = "8:Built" + "OutputProjectGuid" = "8:{B1FE4613-3F4B-4DAF-9714-2472BF8F56AE}" + "ShowKeyOutput" = "11:TRUE" + "ExcludeFilters" + { + } + } + "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_9A293E8A356A4959BB6E541B7DC213CD" + { + "SourcePath" = "8:..\\release\\mod\\mod_bridgecall.dll" + "TargetName" = "8:" + "Tag" = "8:" + "Folder" = "8:_B6E020422C78490D96F78DB0E1A3F521" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + "ProjectOutputGroupRegister" = "3:1" + "OutputConfiguration" = "8:" + "OutputGroupCanonicalName" = "8:Built" + "OutputProjectGuid" = "8:{E1794405-29D4-466D-9BE3-DD2344C2A663}" + "ShowKeyOutput" = "11:TRUE" + "ExcludeFilters" + { + } + } + "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_A0D5F714A0F94250A1C39603B699AB82" + { + "SourcePath" = "8:..\\..\\libs\\libteletone\\Release\\libteletone.dll" + "TargetName" = "8:" + "Tag" = "8:" + "Folder" = "8:_04AC783F1C9F41AEB4E947C46CE9C9FF" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + "ProjectOutputGroupRegister" = "3:1" + "OutputConfiguration" = "8:" + "OutputGroupCanonicalName" = "8:Built" + "OutputProjectGuid" = "8:{89385C74-5860-4174-9CAF-A39E7C48909C}" + "ShowKeyOutput" = "11:TRUE" + "ExcludeFilters" + { + } + } + "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_A944ADCEDF884574A23F7BA5420A6BA1" + { + "SourcePath" = "8:..\\release\\libsqlite.dll" + "TargetName" = "8:" + "Tag" = "8:" + "Folder" = "8:_04AC783F1C9F41AEB4E947C46CE9C9FF" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + "ProjectOutputGroupRegister" = "3:1" + "OutputConfiguration" = "8:" + "OutputGroupCanonicalName" = "8:Built" + "OutputProjectGuid" = "8:{6EDFEFD5-3596-4FA9-8EBA-B331547B35A3}" + "ShowKeyOutput" = "11:TRUE" + "ExcludeFilters" + { + } + } + "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_AD2EB44FE6D548F2A8DA4F9F2CE817AC" + { + "SourcePath" = "8:..\\release\\mod\\mod_l16.dll" + "TargetName" = "8:" + "Tag" = "8:" + "Folder" = "8:_B6E020422C78490D96F78DB0E1A3F521" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + "ProjectOutputGroupRegister" = "3:1" + "OutputConfiguration" = "8:" + "OutputGroupCanonicalName" = "8:Built" + "OutputProjectGuid" = "8:{5844AFE1-AA3E-4BDB-A9EF-119AEF19DF88}" + "ShowKeyOutput" = "11:TRUE" + "ExcludeFilters" + { + } + } + "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_B0A2E9B4C45D4098AFD734D0C4E3EAFB" + { + "SourcePath" = "8:..\\release\\mod\\mod_conference.dll" + "TargetName" = "8:" + "Tag" = "8:" + "Folder" = "8:_B6E020422C78490D96F78DB0E1A3F521" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + "ProjectOutputGroupRegister" = "3:1" + "OutputConfiguration" = "8:" + "OutputGroupCanonicalName" = "8:Built" + "OutputProjectGuid" = "8:{C24FB505-05D7-4319-8485-7540B44C8603}" + "ShowKeyOutput" = "11:TRUE" + "ExcludeFilters" + { + } + } + "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_B20769E090034897B32E3EA4EC1BA8A0" + { + "SourcePath" = "8:..\\release\\mod\\mod_gsm.dll" + "TargetName" = "8:" + "Tag" = "8:" + "Folder" = "8:_B6E020422C78490D96F78DB0E1A3F521" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + "ProjectOutputGroupRegister" = "3:1" + "OutputConfiguration" = "8:" + "OutputGroupCanonicalName" = "8:Built" + "OutputProjectGuid" = "8:{4926323F-4EA8-4B7D-A3D3-65488725988F}" + "ShowKeyOutput" = "11:TRUE" + "ExcludeFilters" + { + } + } + "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_BB649A2C1ABE4895859025B09A240323" + { + "SourcePath" = "8:..\\release\\libpcre.dll" + "TargetName" = "8:" + "Tag" = "8:" + "Folder" = "8:_04AC783F1C9F41AEB4E947C46CE9C9FF" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + "ProjectOutputGroupRegister" = "3:1" + "OutputConfiguration" = "8:" + "OutputGroupCanonicalName" = "8:Built" + "OutputProjectGuid" = "8:{8D04B550-D240-4A44-8A18-35DA3F7038D9}" + "ShowKeyOutput" = "11:TRUE" + "ExcludeFilters" + { + } + } + "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_BCB8B09BD3BF4E5889E46049601E0973" + { + "SourcePath" = "8:..\\release\\google.dll" + "TargetName" = "8:" + "Tag" = "8:" + "Folder" = "8:_04AC783F1C9F41AEB4E947C46CE9C9FF" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + "ProjectOutputGroupRegister" = "3:1" + "OutputConfiguration" = "8:" + "OutputGroupCanonicalName" = "8:Built" + "OutputProjectGuid" = "8:{861345DE-6846-43AD-8012-043810D0E465}" + "ShowKeyOutput" = "11:TRUE" + "ExcludeFilters" + { + } + } + "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_C105055EE271471A999CE7022E617EB7" + { + "SourcePath" = "8:..\\release\\mod\\mod_commands.dll" + "TargetName" = "8:" + "Tag" = "8:" + "Folder" = "8:_B6E020422C78490D96F78DB0E1A3F521" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + "ProjectOutputGroupRegister" = "3:1" + "OutputConfiguration" = "8:" + "OutputGroupCanonicalName" = "8:Built" + "OutputProjectGuid" = "8:{30A5B29C-983E-4580-9FD0-D647CCDCC7EB}" + "ShowKeyOutput" = "11:TRUE" + "ExcludeFilters" + { + } + } + "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_C81AC700C1BC4A55B98DF12C0CBAFD6F" + { + "SourcePath" = "8:..\\release\\mod\\mod_dialplan_xml.dll" + "TargetName" = "8:" + "Tag" = "8:" + "Folder" = "8:_B6E020422C78490D96F78DB0E1A3F521" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + "ProjectOutputGroupRegister" = "3:1" + "OutputConfiguration" = "8:" + "OutputGroupCanonicalName" = "8:Built" + "OutputProjectGuid" = "8:{07113B25-D3AF-4E04-BA77-4CD1171F022C}" + "ShowKeyOutput" = "11:TRUE" + "ExcludeFilters" + { + } + } + "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_D0BB09AFB8D94B76918F0EE85BCCAD0A" + { + "SourcePath" = "8:..\\release\\mod\\mod_dptools.dll" + "TargetName" = "8:" + "Tag" = "8:" + "Folder" = "8:_B6E020422C78490D96F78DB0E1A3F521" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + "ProjectOutputGroupRegister" = "3:1" + "OutputConfiguration" = "8:" + "OutputGroupCanonicalName" = "8:Built" + "OutputProjectGuid" = "8:{B5881A85-FE70-4F64-8607-2CAAE52669C6}" + "ShowKeyOutput" = "11:TRUE" + "ExcludeFilters" + { + } + } + "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_D2EF447106B24E67907DAED3D39CFBB1" + { + "SourcePath" = "8:..\\release\\FreeSwitch.dll" + "TargetName" = "8:" + "Tag" = "8:" + "Folder" = "8:_04AC783F1C9F41AEB4E947C46CE9C9FF" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + "ProjectOutputGroupRegister" = "3:1" + "OutputConfiguration" = "8:" + "OutputGroupCanonicalName" = "8:Built" + "OutputProjectGuid" = "8:{202D7A4E-760D-4D0E-AFA1-D7459CED30FF}" + "ShowKeyOutput" = "11:TRUE" + "ExcludeFilters" + { + } + } + "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_E763C699DF0948B6984DDEB96A2DFD06" + { + "SourcePath" = "8:..\\release\\mod\\mod_PortAudio.dll" + "TargetName" = "8:" + "Tag" = "8:" + "Folder" = "8:_B6E020422C78490D96F78DB0E1A3F521" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + "ProjectOutputGroupRegister" = "3:1" + "OutputConfiguration" = "8:" + "OutputGroupCanonicalName" = "8:Built" + "OutputProjectGuid" = "8:{5FD31A25-5D83-4794-8BEE-904DAD84CE71}" + "ShowKeyOutput" = "11:TRUE" + "ExcludeFilters" + { + } + } + "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_EC68A140B58841DA9B9172BAFA5BEC63" + { + "SourcePath" = "8:..\\release\\mod\\mod_exosip.dll" + "TargetName" = "8:" + "Tag" = "8:" + "Folder" = "8:_B6E020422C78490D96F78DB0E1A3F521" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + "ProjectOutputGroupRegister" = "3:1" + "OutputConfiguration" = "8:" + "OutputGroupCanonicalName" = "8:Built" + "OutputProjectGuid" = "8:{45DF84ED-D24A-4FF6-B5B0-0A9A5FDB9552}" + "ShowKeyOutput" = "11:TRUE" + "ExcludeFilters" + { + } + } + "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_EF14CB99F3414BB689D0CB0E6D6B8AB8" + { + "SourcePath" = "8:..\\release\\mod\\mod_console.dll" + "TargetName" = "8:" + "Tag" = "8:" + "Folder" = "8:_B6E020422C78490D96F78DB0E1A3F521" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + "ProjectOutputGroupRegister" = "3:1" + "OutputConfiguration" = "8:" + "OutputGroupCanonicalName" = "8:Built" + "OutputProjectGuid" = "8:{1C453396-D912-4213-89FD-9B489162B7B5}" + "ShowKeyOutput" = "11:TRUE" + "ExcludeFilters" + { + } + } + } + "VJSharpPlugin" + { + } + } +} Added: freeswitch/trunk/gtalkphone/SkinWin/EnBitmap.cpp ============================================================================== --- (empty file) +++ freeswitch/trunk/gtalkphone/SkinWin/EnBitmap.cpp Wed Aug 30 11:21:42 2006 @@ -0,0 +1,216 @@ +// EnBitmap.cpp: implementation of the CEnBitmap class. +// +////////////////////////////////////////////////////////////////////// + +#include "stdafx.h" +#include "EnBitmap.h" + +#ifdef _DEBUG +#undef THIS_FILE +static char THIS_FILE[]=__FILE__; +#define new DEBUG_NEW +#endif + +const int HIMETRIC_INCH = 2540; + +////////////////////////////////////////////////////////////////////// +// Construction/Destruction +////////////////////////////////////////////////////////////////////// + +CEnBitmap::CEnBitmap() +{ + +} + +CEnBitmap::~CEnBitmap() +{ + +} + +BOOL CEnBitmap::LoadImage(UINT uIDRes, LPCTSTR szResourceType, HMODULE hInst, COLORREF crBack) +{ + ASSERT(m_hObject == NULL); // only attach once, detach on destroy + + if (m_hObject != NULL) + return FALSE; + + BYTE* pBuff = NULL; + int nSize = 0; + BOOL bResult = FALSE; + + // first call is to get buffer size + if (GetResource(MAKEINTRESOURCE(uIDRes), szResourceType, hInst, 0, nSize)) + { + if (nSize > 0) + { + pBuff = new BYTE[nSize]; + + // this loads it + if (GetResource(MAKEINTRESOURCE(uIDRes), szResourceType, hInst, pBuff, nSize)) + { + IPicture* pPicture = LoadFromBuffer(pBuff, nSize); + + if (pPicture) + { + bResult = Attach(pPicture, crBack); + pPicture->Release(); + } + } + + delete [] pBuff; + } + } + + return bResult; +} + +BOOL CEnBitmap::LoadImage(LPCTSTR szImagePath, COLORREF crBack) +{ + ASSERT(m_hObject == NULL); // only attach once, detach on destroy + + if (m_hObject != NULL) + return FALSE; + + BOOL bResult = FALSE; + CFile cFile; + CFileException e; + + if (cFile.Open(szImagePath, CFile::modeRead | CFile::typeBinary, &e)) + { + int nSize = (int)cFile.GetLength(); + + BYTE* pBuff = new BYTE[nSize]; + + if (cFile.Read(pBuff, nSize) > 0) + { + IPicture* pPicture = LoadFromBuffer(pBuff, nSize); + + if (pPicture) + { + bResult = Attach(pPicture, crBack); + pPicture->Release(); + } + } + + delete [] pBuff; + } + + return bResult; +} + +IPicture* CEnBitmap::LoadFromBuffer(BYTE* pBuff, int nSize) +{ + HGLOBAL hGlobal = GlobalAlloc(GMEM_MOVEABLE, nSize); + void* pData = GlobalLock(hGlobal); + memcpy(pData, pBuff, nSize); + GlobalUnlock(hGlobal); + + IStream* pStream = NULL; + IPicture* pPicture = NULL; + + if (CreateStreamOnHGlobal(hGlobal, TRUE, &pStream) == S_OK) + { + OleLoadPicture(pStream, nSize, FALSE, IID_IPicture, (LPVOID *)&pPicture); + pStream->Release(); + } + + return pPicture; // caller releases +} + +BOOL CEnBitmap::GetResource(LPCTSTR lpName, LPCTSTR lpType, HMODULE hInst, void* pResource, int& nBufSize) +{ + HRSRC hResInfo; + HANDLE hRes; + LPSTR lpRes = NULL; + bool bResult = FALSE; + + // Find the resource + hResInfo = FindResource(hInst, lpName, lpType); + + if (hResInfo == NULL) + return false; + + // Load the resource + hRes = LoadResource(hInst, hResInfo); + + if (hRes == NULL) + return false; + + // Lock the resource + lpRes = (char*)LockResource(hRes); + + if (lpRes != NULL) + { + if (pResource == NULL) + { + nBufSize = SizeofResource(hInst, hResInfo); + bResult = true; + } + else + { + if (nBufSize >= (int)SizeofResource(hInst, hResInfo)) + { + memcpy(pResource, lpRes, nBufSize); + bResult = true; + } + } + + UnlockResource(hRes); + } + + // Free the resource + FreeResource(hRes); + + return bResult; +} + +BOOL CEnBitmap::Attach(IPicture* pPicture, COLORREF crBack) +{ + ASSERT(m_hObject == NULL); // only attach once, detach on destroy + + if (m_hObject != NULL) + return FALSE; + + ASSERT(pPicture); + + if (!pPicture) + return FALSE; + + BOOL bResult = FALSE; + + CDC dcMem; + CDC* pDC = CWnd::GetDesktopWindow()->GetDC(); + + if (dcMem.CreateCompatibleDC(pDC)) + { + long hmWidth; + long hmHeight; + + pPicture->get_Width(&hmWidth); + pPicture->get_Height(&hmHeight); + + int nWidth = MulDiv(hmWidth, pDC->GetDeviceCaps(LOGPIXELSX), HIMETRIC_INCH); + int nHeight = MulDiv(hmHeight, pDC->GetDeviceCaps(LOGPIXELSY), HIMETRIC_INCH); + + CBitmap bmMem; + + if (bmMem.CreateCompatibleBitmap(pDC, nWidth, nHeight)) + { + CBitmap* pOldBM = dcMem.SelectObject(&bmMem); + + if (crBack != -1) + dcMem.FillSolidRect(0, 0, nWidth, nHeight, crBack); + + HRESULT hr = pPicture->Render(dcMem, 0, 0, nWidth, nHeight, 0, hmHeight, hmWidth, -hmHeight, NULL); + dcMem.SelectObject(pOldBM); + + if (hr == S_OK) + bResult = CBitmap::Attach(bmMem.Detach()); + } + } + + CWnd::GetDesktopWindow()->ReleaseDC(pDC); + + return bResult; +} + Added: freeswitch/trunk/gtalkphone/SkinWin/EnBitmap.h ============================================================================== --- (empty file) +++ freeswitch/trunk/gtalkphone/SkinWin/EnBitmap.h Wed Aug 30 11:21:42 2006 @@ -0,0 +1,30 @@ +// EnBitmap.h: interface for the CEnBitmap class. +// +////////////////////////////////////////////////////////////////////// + +#if !defined(AFX_ENBITMAP_H__1FDE0A4E_8AB4_11D6_95AD_EFA89432A428__INCLUDED_) +#define AFX_ENBITMAP_H__1FDE0A4E_8AB4_11D6_95AD_EFA89432A428__INCLUDED_ + +#if _MSC_VER > 1000 +#pragma once +#endif // _MSC_VER > 1000 + +class CEnBitmap : public CBitmap +{ +public: + CEnBitmap(); + virtual ~CEnBitmap(); + + BOOL LoadImage(LPCTSTR szImagePath, COLORREF crBack = 0); + BOOL LoadImage(UINT uIDRes, LPCTSTR szResourceType, HMODULE hInst = NULL, COLORREF crBack = 0); + + // helpers + static BOOL GetResource(LPCTSTR lpName, LPCTSTR lpType, HMODULE hInst, void* pResource, int& nBufSize); + static IPicture* LoadFromBuffer(BYTE* pBuff, int nSize); + +protected: + BOOL Attach(IPicture* pPicture, COLORREF crBack); + +}; + +#endif // !defined(AFX_ENBITMAP_H__1FDE0A4E_8AB4_11D6_95AD_EFA89432A428__INCLUDED_) Added: freeswitch/trunk/gtalkphone/SkinWin/MyBitmap.cpp ============================================================================== --- (empty file) +++ freeswitch/trunk/gtalkphone/SkinWin/MyBitmap.cpp Wed Aug 30 11:21:42 2006 @@ -0,0 +1,416 @@ +// MyBitmap.cpp: implementation of the CMyBitmap class. +// +// History: +// 2002.11.23 +// copy from kdphoto projects +// +// +// +// +////////////////////////////////////////////////////////////////////// + +#include "stdafx.h" +#include "MyBitmap.h" + +#ifdef _DEBUG +#undef THIS_FILE +static char THIS_FILE[]=__FILE__; +#define new DEBUG_NEW +#endif + + +// TransparentBlt - Copies a bitmap transparently onto the destination DC +// hdcDest - Handle to destination device context +// nXDest - x-coordinate of destination rectangle's upper-left corner +// nYDest - y-coordinate of destination rectangle's upper-left corner +// nWidth - Width of destination rectangle +// nHeight - height of destination rectangle +// hBitmap - Handle of the source bitmap +// nXSrc - x-coordinate of source rectangle's upper-left corner +// nYSrc - y-coordinate of source rectangle's upper-left corner +// colorTransparent - The transparent color +// hPal - Logical palette to be used with bitmap. Can be NULL + +void MyTransparentBlt( HDC hdcDest, int nXDest, int nYDest, int nWidth, + int nHeight, HBITMAP hBitmap, int nXSrc, int nYSrc, + COLORREF colorTransparent, HPALETTE hPal ) +{ + CDC dc, memDC, maskDC, tempDC; + dc.Attach( hdcDest ); + maskDC.CreateCompatibleDC(&dc); + CBitmap maskBitmap; + + //add these to store return of SelectObject() calls + CBitmap* pOldMemBmp = NULL; + CBitmap* pOldMaskBmp = NULL; + HBITMAP hOldTempBmp = NULL; + + memDC.CreateCompatibleDC(&dc); + tempDC.CreateCompatibleDC(&dc); + CBitmap bmpImage; + bmpImage.CreateCompatibleBitmap( &dc, nWidth, nHeight ); + pOldMemBmp = memDC.SelectObject( &bmpImage ); + + // Select and realize the palette + if( dc.GetDeviceCaps(RASTERCAPS) & RC_PALETTE && hPal ) + { + ::SelectPalette( dc, hPal, FALSE ); + dc.RealizePalette(); + + ::SelectPalette( memDC, hPal, FALSE ); + } + + hOldTempBmp = (HBITMAP) ::SelectObject( tempDC.m_hDC, hBitmap ); + + memDC.BitBlt( 0,0,nWidth, nHeight, &tempDC, nXSrc, nYSrc, SRCCOPY ); + + // Create monochrome bitmap for the mask + maskBitmap.CreateBitmap( nWidth, nHeight, 1, 1, NULL ); + pOldMaskBmp = maskDC.SelectObject( &maskBitmap ); + memDC.SetBkColor( colorTransparent ); + + // Create the mask from the memory DC + maskDC.BitBlt( 0, 0, nWidth, nHeight, &memDC, + 0, 0, SRCCOPY ); + + // Set the background in memDC to black. Using SRCPAINT with black + // and any other color results in the other color, thus making + // black the transparent color + memDC.SetBkColor(RGB(0,0,0)); + memDC.SetTextColor(RGB(255,255,255)); + memDC.BitBlt(0, 0, nWidth, nHeight, &maskDC, 0, 0, SRCAND); + + // Set the foreground to black. See comment above. + dc.SetBkColor(RGB(255,255,255)); + dc.SetTextColor(RGB(0,0,0)); + dc.BitBlt(nXDest, nYDest, nWidth, nHeight, &maskDC, 0, 0, SRCAND); + + // Combine the foreground with the background + dc.BitBlt(nXDest, nYDest, nWidth, nHeight, &memDC, + 0, 0, SRCPAINT); + + + if (hOldTempBmp) + ::SelectObject( tempDC.m_hDC, hOldTempBmp); + if (pOldMaskBmp) + maskDC.SelectObject( pOldMaskBmp ); + if (pOldMemBmp) + memDC.SelectObject( pOldMemBmp ); + + dc.Detach(); +} + + +////////////////////////////////////////////////////////////////////// +// Construction/Destruction +////////////////////////////////////////////////////////////////////// + +CMyBitmap::CMyBitmap() +{ + +} + +CMyBitmap::~CMyBitmap() +{ + +} + +BOOL CMyBitmap::StretchDraw(CDC *pDC, LPRECT r, LPRECT sr ) +{ + if ( !r ) return FALSE; + CDC dc; + dc.CreateCompatibleDC( pDC ); + CBitmap * bmp = dc.SelectObject( this ); + pDC->SetStretchBltMode(COLORONCOLOR); + if ( !sr ) + pDC->StretchBlt( r->left, r->top, r->right, r->bottom, &dc, 0, 0, GetWidth(), GetHeight() , + SRCCOPY ); + else + pDC->StretchBlt( r->left, r->top, r->right - r->left, r->bottom - r->top, &dc, sr->left, sr->top, + sr->right - sr->left, sr->bottom - sr->top, + SRCCOPY ); + + + dc.SelectObject( bmp ); + return TRUE; + +} + +BOOL CMyBitmap::StretchDraw(CDC *pDC, LPRECT r) +{ + CDC dc; + dc.CreateCompatibleDC( pDC ); + CBitmap * bmp = dc.SelectObject( this ); + + pDC->StretchBlt( r->left, r->top, r->right, r->bottom, &dc, 0, 0, GetWidth(), GetHeight() , + SRCCOPY ); + + dc.SelectObject( bmp ); + return TRUE; +} + +BOOL CMyBitmap::Draw( CDC *pDC, int x, int y, LPRECT sr, COLORREF colTrans, BOOL bTrans ) +{ + if ( !bTrans ) + Draw( pDC ,x, y, sr ); + else + { + MyTransparentBlt( pDC->GetSafeHdc(), x, y, sr->right - sr->left, sr->bottom - sr->top, + (HBITMAP)this->GetSafeHandle(), sr->left, sr->top, colTrans, NULL ); + } + return TRUE; +} + +//draw sub bmp to special point +BOOL CMyBitmap::Draw( CDC *pDC, int x, int y, LPRECT sr ) +{ + CDC dc; + dc.CreateCompatibleDC( pDC ); + CBitmap * bmp = dc.SelectObject( this ); + if ( sr != NULL) + pDC->BitBlt( x, y, sr->right - sr->left, sr->bottom - sr->top, &dc, + sr->left, sr->top, SRCCOPY ); + else + pDC->BitBlt( x, y, Width(), Height(), &dc, + 0, 0, SRCCOPY ); + dc.SelectObject( bmp ); + return TRUE; + +} + +BOOL CMyBitmap::Draw(CDC *pDC, LPRECT r) +{ + CDC dc; + dc.CreateCompatibleDC( pDC ); + CBitmap * bmp = dc.SelectObject( this ); + pDC->BitBlt( r->left, r->top, r->right - r->left, r->bottom - r->top, &dc, 0, 0 , + SRCCOPY ); + + dc.SelectObject( bmp ); + return TRUE; +} + + +///HOWTO: Drawing Transparent Bitmaps +//see: Microsoft Knowledge Base Article - Q79212 +BOOL CMyBitmap::DrawTransparent(CDC * pDC, int x, int y, COLORREF crColour) +{ + MyTransparentBlt( pDC->GetSafeHdc(), x, y, GetWidth(), GetHeight(), (HBITMAP)this->GetSafeHandle(), 0, 0, crColour, NULL ); +/* + COLORREF crOldBack = pDC->SetBkColor(0); + COLORREF crOldText = pDC->SetTextColor(RGB(255,255,255)); + CDC dcImage, dcTrans; + + // Create two memory dcs for the image and the mask + dcImage.CreateCompatibleDC(pDC); + dcTrans.CreateCompatibleDC(pDC); + + // Select the image into the appropriate dc + CBitmap* pOldBitmapImage = dcImage.SelectObject(this); + + // Create the mask bitmap + CBitmap bitmapTrans; + int nWidth = GetWidth(); + int nHeight = GetHeight(); + bitmapTrans.CreateBitmap(nWidth, nHeight, 1, 1, NULL); + + // Select the mask bitmap into the appropriate dc + CBitmap* pOldBitmapTrans = dcTrans.SelectObject(&bitmapTrans); + + // Build mask based on transparent colour + dcImage.SetBkColor(crColour); + dcTrans.BitBlt(0, 0, nWidth, nHeight, &dcImage, 0, 0, SRCCOPY); + + // Do the work - True Mask method - cool if not actual display + pDC->BitBlt(x, y, nWidth, nHeight, &dcImage, 0, 0, SRCINVERT); + pDC->BitBlt(x, y, nWidth, nHeight, &dcTrans, 0, 0, SRCAND); + pDC->BitBlt(x, y, nWidth, nHeight, &dcImage, 0, 0, SRCINVERT); + + // Restore settings + dcImage.SelectObject(pOldBitmapImage); + dcTrans.SelectObject(pOldBitmapTrans); + pDC->SetBkColor(crOldBack); + pDC->SetTextColor(crOldText); +*/ + return TRUE; +} + + +HRGN CMyBitmap::CreateRgnFromFile( COLORREF color ) +{ + HBITMAP hBmp = (HBITMAP)this->GetSafeHandle(); + + // get image properties + BITMAP bmp = { 0 }; + ::GetObject( hBmp, sizeof(BITMAP), &bmp ); + // allocate memory for extended image information + LPBITMAPINFO bi = (LPBITMAPINFO) new BYTE[ sizeof(BITMAPINFO) + 8 ]; + memset( bi, 0, sizeof(BITMAPINFO) + 8 ); + bi->bmiHeader.biSize = sizeof(BITMAPINFOHEADER); + // create temporary dc + HDC dc = CreateIC( _T("DISPLAY"),NULL,NULL,NULL ); + // get extended information about image (length, compression, length of color table if exist, ...) + DWORD res = GetDIBits( dc, hBmp, 0, bmp.bmHeight, 0, bi, DIB_RGB_COLORS ); + // allocate memory for image data (colors) + LPBYTE pBits = new BYTE[ bi->bmiHeader.biSizeImage + 4 ]; + // allocate memory for color table + if ( bi->bmiHeader.biBitCount == 8 ) + { + // actually color table should be appended to this header(BITMAPINFO), + // so we have to reallocate and copy it + LPBITMAPINFO old_bi = bi; + // 255 - because there is one in BITMAPINFOHEADER + bi = (LPBITMAPINFO)new char[ sizeof(BITMAPINFO) + 255 * sizeof(RGBQUAD) ]; + memcpy( bi, old_bi, sizeof(BITMAPINFO) ); + // release old header + delete old_bi; + } + // get bitmap info header + BITMAPINFOHEADER& bih = bi->bmiHeader; + // get color table (for 256 color mode contains 256 entries of RGBQUAD(=DWORD)) + LPDWORD clr_tbl = (LPDWORD)&bi->bmiColors; + // fill bits buffer + res = GetDIBits( dc, hBmp, 0, bih.biHeight, pBits, bi, DIB_RGB_COLORS ); + DeleteDC( dc ); + + BITMAP bm; + ::GetObject( hBmp, sizeof(BITMAP), &bm ); + // shift bits and byte per pixel (for comparing colors) + LPBYTE pClr = (LPBYTE)&color; + // swap red and blue components + BYTE tmp = pClr[0]; pClr[0] = pClr[2]; pClr[2] = tmp; + // convert color if curent DC is 16-bit (5:6:5) or 15-bit (5:5:5) + if ( bih.biBitCount == 16 ) + { + // for 16 bit + color = ((DWORD)(pClr[0] & 0xf8) >> 3) | + ((DWORD)(pClr[1] & 0xfc) << 3) | + ((DWORD)(pClr[2] & 0xf8) << 8); + // for 15 bit +// color = ((DWORD)(pClr[0] & 0xf8) >> 3) | +// ((DWORD)(pClr[1] & 0xf8) << 2) | +// ((DWORD)(pClr[2] & 0xf8) << 7); + } + + const DWORD RGNDATAHEADER_SIZE = sizeof(RGNDATAHEADER); + const DWORD ADD_RECTS_COUNT = 40; // number of rects to be appended + // to region data buffer + + // BitPerPixel + BYTE Bpp = (BYTE)(bih.biBitCount >> 3); // bytes per pixel + // bytes per line in pBits is DWORD aligned and bmp.bmWidthBytes is WORD aligned + // so, both of them not + DWORD m_dwAlignedWidthBytes = (bmp.bmWidthBytes & ~0x3) + (!!(bmp.bmWidthBytes & 0x3) << 2); + // DIB image is flipped that's why we scan it from the last line + LPBYTE pColor = pBits + (bih.biHeight - 1) * m_dwAlignedWidthBytes; + DWORD dwLineBackLen = m_dwAlignedWidthBytes + bih.biWidth * Bpp; // offset of previous scan line + // (after processing of current) + DWORD dwRectsCount = bih.biHeight; // number of rects in allocated buffer + INT i, j; // current position in mask image + INT first = 0; // left position of current scan line + // where mask was found + bool wasfirst = false; // set when mask has been found in current scan line + bool ismask = false; // set when current color is mask color + + // allocate memory for region data + // region data here is set of regions that are rectangles with height 1 pixel (scan line) + // that's why first allocation is <bm.biHeight> RECTs - number of scan lines in image + RGNDATAHEADER* pRgnData = + (RGNDATAHEADER*)new BYTE[ RGNDATAHEADER_SIZE + dwRectsCount * sizeof(RECT) ]; + // get pointer to RECT table + LPRECT pRects = (LPRECT)((LPBYTE)pRgnData + RGNDATAHEADER_SIZE); + // zero region data header memory (header part only) + memset( pRgnData, 0, RGNDATAHEADER_SIZE + dwRectsCount * sizeof(RECT) ); + // fill it by default + pRgnData->dwSize = RGNDATAHEADER_SIZE; + pRgnData->iType = RDH_RECTANGLES; + + for ( i = 0; i < bih.biHeight; i++ ) + { + for ( j = 0; j < bih.biWidth; j++ ) + { + // get color + switch ( bih.biBitCount ) + { + case 8: + ismask = (clr_tbl[ *pColor ] != color); + break; + case 16: + ismask = (*(LPWORD)pColor != (WORD)color); + break; + case 24: + ismask = ((*(LPDWORD)pColor & 0x00ffffff) != color); + break; + case 32: + ismask = (*(LPDWORD)pColor != color); + } + // shift pointer to next color + pColor += Bpp; + // place part of scan line as RECT region if transparent color found after mask color or + // mask color found at the end of mask image + if ( wasfirst ) + { + if ( !ismask ) + { + // save current RECT + pRects[ pRgnData->nCount++ ] = CRect( first, i, j, i + 1 ); + // if buffer full reallocate it with more room + if ( pRgnData->nCount >= dwRectsCount ) + { + dwRectsCount += ADD_RECTS_COUNT; + // allocate new buffer + LPBYTE pRgnDataNew = new BYTE[ RGNDATAHEADER_SIZE + dwRectsCount * sizeof(RECT) ]; + // copy current region data to it + memcpy( pRgnDataNew, pRgnData, RGNDATAHEADER_SIZE + pRgnData->nCount * sizeof(RECT) ); + // delte old region data buffer + delete pRgnData; + // set pointer to new regiondata buffer to current + pRgnData = (RGNDATAHEADER*)pRgnDataNew; + // correct pointer to RECT table + pRects = (LPRECT)((LPBYTE)pRgnData + RGNDATAHEADER_SIZE); + } + wasfirst = false; + } + } + else if ( ismask ) // set wasfirst when mask is found + { + first = j; + wasfirst = true; + } + } + + if ( wasfirst && ismask ) + { + // save current RECT + pRects[ pRgnData->nCount++ ] = CRect( first, i, j, i + 1 ); + // if buffer full reallocate it with more room + if ( pRgnData->nCount >= dwRectsCount ) + { + dwRectsCount += ADD_RECTS_COUNT; + // allocate new buffer + LPBYTE pRgnDataNew = new BYTE[ RGNDATAHEADER_SIZE + dwRectsCount * sizeof(RECT) ]; + // copy current region data to it + memcpy( pRgnDataNew, pRgnData, RGNDATAHEADER_SIZE + pRgnData->nCount * sizeof(RECT) ); + // delte old region data buffer + delete pRgnData; + // set pointer to new regiondata buffer to current + pRgnData = (RGNDATAHEADER*)pRgnDataNew; + // correct pointer to RECT table + pRects = (LPRECT)((LPBYTE)pRgnData + RGNDATAHEADER_SIZE); + } + wasfirst = false; + } + + pColor -= dwLineBackLen; + } + // release image data + delete pBits; + delete bi; + + // create region + HRGN hRgn = ExtCreateRegion( NULL, RGNDATAHEADER_SIZE + pRgnData->nCount * sizeof(RECT), (LPRGNDATA)pRgnData ); + // release region data + delete pRgnData; + + return hRgn; +} Added: freeswitch/trunk/gtalkphone/SkinWin/MyBitmap.h ============================================================================== --- (empty file) +++ freeswitch/trunk/gtalkphone/SkinWin/MyBitmap.h Wed Aug 30 11:21:42 2006 @@ -0,0 +1,90 @@ +// MyBitmap.h: interface for the CMyBitmap class. +// +////////////////////////////////////////////////////////////////////// + +#if !defined(AFX_MYBITMAP_H__73EF928E_90A7_461A_B879_7E3007684679__INCLUDED_) +#define AFX_MYBITMAP_H__73EF928E_90A7_461A_B879_7E3007684679__INCLUDED_ + +#if _MSC_VER > 1000 +#pragma once +#endif // _MSC_VER > 1000 + +//#include "include\Picture.h" +#include "EnBitmap.h" + +class CMyBitmap : public CEnBitmap +{ +public: + BOOL Draw( CDC *pDC, LPRECT r); + //draw sub bmp to special point + BOOL Draw( CDC *pDC, int x, int y, LPRECT sr ); + BOOL Draw( CDC *pDC, int x, int y, LPRECT sr, COLORREF colTrans, BOOL bTrans ); + + BOOL StretchDraw(CDC *pDC, LPRECT tr, LPRECT sr ); + BOOL StretchDraw(CDC *pDC, LPRECT r); + + int Width() + { + return GetWidth(); + } + + int GetWidth() + { + BITMAP bm; + memset( &bm, 0, sizeof(bm) ); + GetBitmap(&bm); + return bm.bmWidth; + } + + int Height() + { + return GetHeight(); + } + + int GetHeight() + { + BITMAP bm; + memset( &bm, 0, sizeof(bm) ); + GetBitmap(&bm); + return bm.bmHeight; + } + + CMyBitmap(); + virtual ~CMyBitmap(); + + + BOOL Attach( HBITMAP hbmp ) + { + return CBitmap::Attach( hbmp ); + } + +/* + HBITMAP hBitmap = NULL; + hBitmap = (HBITMAP)LoadImage(NULL, szFilename, IMAGE_BITMAP, 0, 0, + LR_LOADFROMFILE | LR_CREATEDIBSECTION | LR_DEFAULTSIZE); +*/ + + BOOL LoadBitmap(LPCTSTR szFilename) + { + ASSERT(szFilename); + DeleteObject(); + + /* + CClientDC dc(NULL); + CPicture pic; + if ( !pic.LoadPicture( szFilename ) ) + return FALSE; + HBITMAP hBitmap = pic.CreateDDB(&dc); + pic.DeleteObject(); + + return Attach(hBitmap); + */ + return LoadImage( szFilename ); + } + + BOOL DrawTransparent(CDC * pDC, int x, int y, COLORREF crColour); + + HRGN CreateRgnFromFile( COLORREF color ); +}; + +#endif // !defined(AFX_MYBITMAP_H__73EF928E_90A7_461A_B879_7E3007684679__INCLUDED_) Added: freeswitch/trunk/gtalkphone/SkinWin/SkinWin.cpp ============================================================================== --- (empty file) +++ freeswitch/trunk/gtalkphone/SkinWin/SkinWin.cpp Wed Aug 30 11:21:42 2006 @@ -0,0 +1,1169 @@ +#include "stdafx.h" +#include "resource.h" +#include "SkinWin.h" +#include "google.h" + +#ifdef _DEBUG +#undef THIS_FILE +static char THIS_FILE[]=__FILE__; +#define new DEBUG_NEW +#endif + +#define UM_NOTIFY WM_USER+1000 +////////////////////////////////////////////////////////////////////// +// Construction/Destruction +////////////////////////////////////////////////////////////////////// + +CSkinWin::CSkinWin() +{ + m_bInit = FALSE; + m_winstate = 0; + + m_barcolor = RGB(207,207,207); + m_menucolor = RGB(207,207,207); + + m_iconFlag = FALSE; + m_displayFlag = TRUE; + m_rectParent.bottom=0; + m_rectParent.right = 0; + m_bClose = FALSE; +} + +CSkinWin::~CSkinWin() +{ + +} + +CString GetPathName( const TCHAR * filename ); +CString GetFileName( const TCHAR * filename, int ext = 0); +TCHAR *next_token( TCHAR *buf, TCHAR *token, TCHAR *stopchars ); + +COLORREF ReadColor( CString section, CString key, CString file, COLORREF defcolor ) +{ + TCHAR buf[1000]; + GetPrivateProfileString( section, key, _T(""), buf, 1000, file ); + if ( *buf ) + { + TCHAR token[255]; + TCHAR *p = buf; + int r, g, b; + p = next_token( p, token, NULL ); + sscanf_s(token,_T("%d"),&r); + //r = atoi(token); + p = next_token( p, token, NULL ); + sscanf_s(token,_T("%d"),&g); + //g = atoi(token); + p = next_token( p, token, NULL ); + sscanf_s(token,_T("%d"),&b); + //b = atoi(token); + return RGB(r, g, b ); + } + else + return defcolor; +} + +BOOL CSkinWin::LoadSkin( const TCHAR * skinfile ) +{ + static const TCHAR * ps = _T("Personality"); + TCHAR buf[1000]; + CString path = GetPathName( skinfile ); + + if ( m_bInit ) + { + m_bmpDlg.DeleteObject(); + m_bmpTitle.DeleteObject(); + m_bmpLeft.DeleteObject(); + m_bmpRight.DeleteObject(); + m_bmpBottom.DeleteObject(); + m_bmpMaxBtn.DeleteObject(); + m_bmpRestoreBtn.DeleteObject(); + m_bmpMinBtn.DeleteObject(); + m_bmpCloseBtn.DeleteObject(); + + //set deafult + m_barcolor = RGB(207,207,207); + m_menucolor = RGB(207,207,207); + + m_bInit = FALSE; + } + + GetPrivateProfileString( ps, _T("DialogBmp"), _T(""), buf, 1000, skinfile ); + if ( *buf != 0 ) + m_bmpDlg.LoadBitmap( path + _T("/" )+ GetFileName( buf,1 )); + + + GetPrivateProfileString( ps, _T("Top"), _T(""), buf, 1000, skinfile ); + if ( *buf == 0 || !m_bmpTitle.LoadBitmap( path + _T("/" )+ GetFileName( buf,1 )) ) + return FALSE; + GetPrivateProfileString( ps, _T("Left"), _T(""), buf, 1000, skinfile ); + if ( *buf == 0 || !m_bmpLeft.LoadBitmap( path +_T( "/" )+ GetFileName( buf,1 ) )) + return FALSE; + GetPrivateProfileString( ps, _T("Right"), _T(""), buf, 1000, skinfile ); + if ( *buf == 0 || !m_bmpRight.LoadBitmap( path + _T("/" )+ GetFileName( buf,1 ) )) + return FALSE; + GetPrivateProfileString( ps, _T("Bottom"), _T(""), buf, 1000, skinfile ); + if ( *buf == 0 || !m_bmpBottom.LoadBitmap( path + _T("/" )+ GetFileName( buf,1 ) )) + return FALSE; + + m_TitleHeight = m_bmpTitle.Height()/2; + m_BorderLeftWidth = m_bmpLeft.Width()/2; + m_BorderRightWidth = m_bmpRight.Width()/2; + m_BorderBottomHeight = m_bmpBottom.Height()/2; + + m_titleoff1 = GetPrivateProfileInt( ps, _T("TopTopHeight"), 0, skinfile ); + m_titleoff2 = m_bmpTitle.Width() - GetPrivateProfileInt( ps, _T("TopBotHeight"), 0, skinfile ); + if ( m_titleoff2 <= m_titleoff1 ) + m_titleoff2 = m_titleoff1 + 1; + m_leftoff1 = GetPrivateProfileInt( ps, _T("LeftTopHeight"), 0, skinfile ); + m_leftoff2 = m_bmpLeft.Height() - GetPrivateProfileInt( ps, _T("LeftBotHeight"), 0, skinfile ); + if ( m_leftoff2 <= m_leftoff1 ) + m_leftoff2 = m_leftoff1 + 1; + + m_rightoff1 = GetPrivateProfileInt( ps, _T("RightTopHeight"), 0, skinfile ); + m_rightoff2 = m_bmpRight.Height() - GetPrivateProfileInt( ps, _T("RightBotHeight"), 0, skinfile ); + if ( m_rightoff2 <= m_rightoff1 ) + m_rightoff2 = m_rightoff1 + 1; + + m_bottomoff1 = GetPrivateProfileInt( ps, _T("BottomTopHeight"), 0, skinfile ); + m_bottomoff2 = m_bmpBottom.Width() - GetPrivateProfileInt( ps, _T("BottomBotHeight"), 0, skinfile ); + if ( m_bottomoff2 <= m_bottomoff1 ) + m_bottomoff2 = m_bottomoff1 + 1; + + //load buttons + int count = GetPrivateProfileInt( ps, _T("ButtonCount"), 0, skinfile ); + int icount = GetPrivateProfileInt( ps, _T("ButtonImgCount"), 3, skinfile ); + for ( int i = 0; i < count; i++ ) + { + CString sec; + sec.Format( _T("Button%d"), i ); + GetPrivateProfileString( sec, _T("ButtonImage"), _T(""), buf, 1000, skinfile ); + int action = GetPrivateProfileInt( sec, _T("Action"), 0, skinfile ); + int x = GetPrivateProfileInt( sec, _T("XCoord"), 0, skinfile ); + int y = GetPrivateProfileInt( sec, _T("YCoord"), 0, skinfile ); + + int state = icount; + if ( action == 0 ) + { + //close + if ( !m_bmpCloseBtn.LoadBitmap( path + _T("/" )+ GetFileName( buf,1 )) ) + return FALSE; + //state = m_bmpCloseBtn.Width()/m_bmpCloseBtn.Height(); + m_rectCloseBtn = CRect( (x-m_bmpCloseBtn.Width()/state)-8, y, x-8 , y + m_bmpCloseBtn.Height() ); + } + if ( action == 2 ) + { + //min + if ( !m_bmpMinBtn.LoadBitmap( path + _T("/" )+ GetFileName( buf,1 )) ) + return FALSE; + //state = m_bmpMinBtn.Width()/m_bmpMinBtn.Height(); + m_rectMinBtn = CRect( (x-m_bmpMinBtn.Width()/state)-40, y, x-40, y + m_bmpMinBtn.Height() ); + } + if ( action == 1 ) + { + if ( !m_bmpMaxBtn.GetSafeHandle() ) + { + //max + if ( !m_bmpMaxBtn.LoadBitmap( path + _T("/" )+ GetFileName( buf,1 )) ) + return FALSE; + //state = m_bmpMaxBtn.Width()/m_bmpMaxBtn.Height(); + m_rectMaxBtn = CRect( x-m_bmpMaxBtn.Width()/state, y, x , y + m_bmpMaxBtn.Height() ); + } + else + { + //restore + if ( !m_bmpRestoreBtn.LoadBitmap( path + _T("/" )+ GetFileName( buf,1 )) ) + return FALSE; + //state = m_bmpRestoreBtn.Width()/m_bmpRestoreBtn.Height(); + m_rectRestoreBtn = CRect( x-m_bmpRestoreBtn.Width()/state, y, x , y + m_bmpRestoreBtn.Height() ); + } + } + if ( action == 4 ) + { + } + } + m_textShift = GetPrivateProfileInt( ps, _T("TextShift"), 0, skinfile ); + m_textShiftVer = GetPrivateProfileInt( ps, _T("TextShiftVert"), 0, skinfile ); + + TCHAR * colours = _T("Colours"); + m_colTitle1 = ReadColor(colours, _T("TitleText"), skinfile, GetSysColor(COLOR_CAPTIONTEXT) ); + m_colTitle2 = ReadColor(colours, _T("InactiveTitleText"), skinfile, GetSysColor(COLOR_CAPTIONTEXT) ); + + m_bTrans = GetPrivateProfileInt( ps, _T("UsesTran"), 0, skinfile ); + if ( m_bTrans ) + m_colTrans = ReadColor(colours, _T("TransColor"), skinfile, RGB(255,0,255) ); + + + m_barcolor = ReadColor(colours, _T("BarColor"), skinfile, RGB(207,207,207) ); + m_menucolor = ReadColor(colours, _T("MenuColor"), skinfile, RGB(207,207,207) ); + + m_btnbgcolor = ReadColor(colours, _T("ButtonFace"), skinfile, GetSysColor(COLOR_BTNFACE) ); + m_btntextcolor = ReadColor(colours, _T("ButtonText"), skinfile, GetSysColor(COLOR_BTNTEXT)); + m_btnhovercolor = ReadColor(colours, _T("ButtonHilight"), skinfile, GetSysColor(COLOR_BTNFACE) ); + m_btnfocuscolor = ReadColor(colours, _T("ButtonFocus"), skinfile, GetSysColor(COLOR_BTNFACE) ); + + + m_bInit = TRUE; + return TRUE; +} + +BOOL CSkinWin::DrawTitle(CDC *pDC, int x, int y, int w, int state) +{ + int padding; + int ox = x; + padding = ( w - m_bmpTitle.Width() )/( m_titleoff2 - m_titleoff1 ) + 1 ; + if ( padding < 0 ) padding = 0; + + RECT sr; + if ( state == 0 ) + sr = CRect( 0, 0, m_titleoff1, m_TitleHeight ); + else + sr = CRect( 0, m_TitleHeight, m_titleoff1, m_bmpTitle.Height() ); + m_bmpTitle.Draw( pDC, x, y, &sr ); + + x += m_titleoff1; + if ( state == 0 ) + sr = CRect( m_titleoff1, 0, m_titleoff2, m_TitleHeight ); + else + sr = CRect( m_titleoff1, m_TitleHeight, m_titleoff2, m_bmpTitle.Height() ); + + for ( int i = 0; i <= padding; i++, x += m_titleoff2 - m_titleoff1 ) + { + int d = ( x + m_titleoff2 - m_titleoff1 - ox - w); + if ( d > 0 ) + sr.right = sr.right - d; + m_bmpTitle.Draw( pDC, x, y, &sr ); + } + + x = ox + w - ( m_bmpTitle.Width() - m_titleoff2 ) + 1 ; + if ( state == 0 ) + sr = CRect( m_titleoff2, 0, m_bmpTitle.Width()-1, m_TitleHeight); + else + sr = CRect( m_titleoff2, m_TitleHeight, m_bmpTitle.Width()-1, m_bmpTitle.Height() ); + m_bmpTitle.Draw( pDC, x, y, &sr ); + return TRUE; +} + +BOOL CSkinWin::DrawBottom(CDC *pDC, int x, int y, int w, int state) +{ + int padding; + int ox = x; + padding = ( w - m_bmpBottom.Width() )/( m_bottomoff2 - m_bottomoff1 ) + 1 ; + if ( padding < 0 ) padding = 0; + + RECT sr; + if ( state == 0 ) + sr = CRect( 0, 0, m_bottomoff1, m_BorderBottomHeight); + else + sr = CRect( 0, m_BorderBottomHeight, m_bottomoff1, m_bmpBottom.Height() ); + m_bmpBottom.Draw( pDC, x, y, &sr ); + + x += m_bottomoff1; + if ( state == 0 ) + sr = CRect( m_bottomoff1, 0, m_bottomoff2, m_BorderBottomHeight ); + else + sr = CRect( m_bottomoff1, m_BorderBottomHeight, m_bottomoff2, m_bmpBottom.Height() ); + + for ( int i = 0; i <= padding; i++, x += m_bottomoff2 - m_bottomoff1 ) + { + int d = ( x + m_bottomoff2 - m_bottomoff1 - ox - w); + if ( d > 0 ) + sr.right = sr.right - d; + m_bmpBottom.Draw( pDC, x, y, &sr ); + } + + x = ox + w - ( m_bmpBottom.Width() - m_bottomoff2 ); + if ( state == 0 ) + sr = CRect( m_bottomoff2, 0, m_bmpBottom.Width()-1, m_BorderBottomHeight ); + else + sr = CRect( m_bottomoff2, m_BorderBottomHeight, m_bmpBottom.Width()-1, m_bmpBottom.Height() ); + m_bmpBottom.Draw( pDC, x, y, &sr ); + return TRUE; +} + +BOOL CSkinWin::DrawLeft(CDC *pDC, int x, int y, int h, int state) +{ + int padding; + int oy = y; + padding = ( h - m_bmpLeft.Height() )/( m_leftoff2 - m_leftoff1 ) + 1 ; + if ( padding < 0 ) padding = 0; + + RECT sr; + if ( state == 0 ) + sr = CRect( 0, 0, m_BorderLeftWidth, m_leftoff1 ); + else + sr = CRect( m_BorderLeftWidth, 0, m_bmpLeft.Width(), m_leftoff1 ); + m_bmpLeft.Draw( pDC, x, y, &sr ); + + y += m_leftoff1; + if ( state == 0 ) + sr = CRect( 0, m_leftoff1, m_BorderLeftWidth, m_leftoff2 ); + else + sr = CRect( m_BorderLeftWidth, m_leftoff1, m_bmpLeft.Width(), m_leftoff2 ); + + for ( int i = 0; i <= padding; i++, y += m_leftoff2 - m_leftoff1 ) + { + int d = ( y + m_leftoff2 - m_leftoff1 - oy - h); + if ( d > 0 ) + sr.bottom = sr.bottom - d; + m_bmpLeft.Draw( pDC, x, y, &sr ); + } + + y = oy + h - ( m_bmpLeft.Height() - m_leftoff2 ) ; + if ( state == 0 ) + sr = CRect( 0, m_leftoff2, m_BorderLeftWidth, m_bmpLeft.Height()); + else + sr = CRect( m_BorderLeftWidth, m_leftoff2, m_bmpLeft.Width(), m_bmpLeft.Height() ); + m_bmpLeft.Draw( pDC, x, y, &sr ); + + return TRUE; +} + +BOOL CSkinWin::DrawRight(CDC *pDC, int x, int y, int h, int state) +{ + int padding; + int oy = y; + padding = ( h - m_bmpRight.Height() )/( m_rightoff2 - m_rightoff1 ) + 1 ; + if ( padding < 0 ) padding = 0; + + RECT sr; + if ( state == 0 ) + sr = CRect( 0, 0, m_BorderRightWidth, m_rightoff1 ); + else + sr = CRect( m_BorderRightWidth, 0, m_bmpRight.Width(), m_rightoff1 ); + m_bmpRight.Draw( pDC, x, y, &sr ); + + y += m_rightoff1; + if ( state == 0 ) + sr = CRect( 0, m_rightoff1, m_BorderRightWidth, m_rightoff2 ); + else + sr = CRect( m_BorderRightWidth, m_rightoff1, m_bmpRight.Width(), m_rightoff2 ); + + for ( int i = 0; i <= padding; i++, y += m_rightoff2 - m_rightoff1 ) + { + int d = ( y + m_rightoff2 - m_rightoff1 - oy - h); + if ( d > 0 ) + sr.bottom = sr.bottom - d; + m_bmpRight.Draw( pDC, x, y, &sr ); + } + + y = oy + h - ( m_bmpRight.Height() - m_rightoff2 ) ; + if ( state == 0 ) + sr = CRect( 0, m_rightoff2, m_BorderRightWidth, m_bmpRight.Height()); + else + sr = CRect( m_BorderRightWidth, m_rightoff2, m_bmpRight.Width(), m_bmpRight.Height() ); + m_bmpRight.Draw( pDC, x, y, &sr ); + + return TRUE; + +} + +BOOL CSkinWin::DrawFrame(CDC *pDC, int x, int y, int w, int h, int state, int title ) +{ + if ( title ) + DrawTitle( pDC, x + m_BorderLeftWidth , y, + w - m_BorderRightWidth - m_BorderLeftWidth + 1, state ); + DrawLeft( pDC, x, y, h, state ); + DrawRight( pDC, x + w - m_BorderRightWidth , y, h, state ); + DrawBottom( pDC, x + m_BorderLeftWidth, + y + h - m_BorderBottomHeight, w - m_BorderRightWidth - m_BorderLeftWidth, state ); + return TRUE; + +} + +BOOL CSkinWin::InstallSkin(CWnd *wnd) +{ + if ( !wnd || !m_bInit ) return FALSE; + HookWindow( (HWND)NULL); + int r = HookWindow( wnd ); + + DWORD style = GetWindowLong( m_hWnd, GWL_STYLE ); + m_sizable = style & WS_SIZEBOX; + m_minable = style & WS_MINIMIZEBOX; + m_maxable = style & WS_MAXIMIZEBOX; + //m_sysmenu = style & WS_MAXIMIZEBOX; + style &= ~(WS_MINIMIZEBOX); + style &= ~WS_MAXIMIZEBOX; + //style &= ~WS_SYSMENU; + SetWindowLong( m_hWnd, GWL_STYLE, style ); + AddTaskIcon(); + m_iconFlag = TRUE; + return r; +} + +LRESULT CSkinWin::WindowProc(UINT msg, WPARAM wp, LPARAM lp) +{ + if ( !IsWindow(m_hWnd) ) + return 0; + if ( !m_bInit ) + return Default(); + + switch ( msg ) + { + case UM_GOOGLE_NOTIFY: + case UM_NOTIFY: + if(lp == WM_LBUTTONDOWN) + { + ShowWindow(m_hWnd,SW_SHOWNORMAL); + SetWindowPos(m_hWnd,HWND_TOP,0,0,0,0,SWP_NOMOVE |SWP_NOSIZE ); + m_displayFlag = TRUE; + } + else if(lp == WM_RBUTTONDOWN) + { + CPoint pt; + GetCursorPos(&pt); + popMenu.TrackPopupMenu(0,pt.x,pt.y,CWnd::FromHandle( m_hWnd)); + + } + break; + case WM_SHOWWINDOW: + //call setwindowpos to force OnNcCalcSize when hWnd is a dialog + if ( wp ) + SetWindowPos( m_hWnd, 0, 0, 0, 400, 400, SWP_NOSIZE|SWP_NOMOVE|SWP_FRAMECHANGED ); + Default(); + return 0; + break; + //case WM_ERASEBKGND: + case WM_INITMENUPOPUP: + Default(); + return 0; + case WM_DESTROY: + case WM_NCDESTROY: + DeleteTaskIcon(); + Default(); + break; + case WM_SYSCOMMAND: + OnSysCommand( (UINT)wp, lp ); + //Default(); + return 0; + case WM_SETTEXT: + return OnSetText( wp, lp ); + case WM_NCPAINT: + OnNcPaint( (HRGN)wp ); + return 0; + case WM_NCCALCSIZE: + OnNcCalcSize( (BOOL)wp, (NCCALCSIZE_PARAMS *)lp ); + return 0; + case WM_SIZE: + OnSize( (UINT)wp, (int)(LOWORD(lp)), (int)(HIWORD(lp)) ); + return 0; + case WM_NCACTIVATE: + return OnNcActivate( (BOOL)wp ); + case WM_NCHITTEST: + return OnNcHitTest(CPoint(LOWORD(lp), HIWORD(lp))); + case WM_NCLBUTTONUP: + OnNcLButtonUp((UINT)wp, CPoint(LOWORD(lp), HIWORD(lp))); + return 0; + case WM_NCLBUTTONDOWN: + OnNcLButtonDown((UINT)wp, CPoint(LOWORD(lp), HIWORD(lp))); + return 0; + case WM_NCLBUTTONDBLCLK: + OnNcLButtonDblClk((UINT)wp, CPoint(LOWORD(lp), HIWORD(lp))); + return 0; + case WM_NCRBUTTONUP: + OnNcRButtonUp((UINT)wp, CPoint(LOWORD(lp), HIWORD(lp))); + return 0; + case WM_NCRBUTTONDOWN: + OnNcRButtonDown((UINT)wp, CPoint(LOWORD(lp), HIWORD(lp))); + return 0; + case WM_NCMOUSEMOVE: + OnNcMouseMove( (UINT)wp,CPoint(LOWORD(lp), HIWORD(lp))); + return 0; + case WM_GETMINMAXINFO: + OnGetMinMaxInfo( (MINMAXINFO *)lp ); + return 0; + case WM_WINDOWPOSCHANGING: + OnWindowPosChanging((WINDOWPOS *)lp); + return 0; + case WM_SIZING: + OnSizing( (UINT)wp, (LPRECT)lp ); + return 0; + case WM_ACTIVATE: + OnActivate( (UINT)wp, CWnd::FromHandle((HWND)lp), 0 ); + return 0; + case WM_COMMAND: + if(m_bClose) + Default(); + else if ( !HandleSysCommand( wp, lp ) ) + Default(); + return 0; + case WM_KEYDOWN: + break; + default: + return Default(); + } + return 0; +} + +void CSkinWin::OnNcPaint(HRGN rgn1) +{ + CWnd *pWnd = CWnd::FromHandle(m_hWnd); + CDC * pDC = pWnd->GetWindowDC(); + CRect wr; + pWnd->GetWindowRect( wr ); +//f ( (DWORD)rgn) +//pDC->SelectClipRgn( CRgn::FromHandle(rgn) ); + + //m_bActive = GetActiveWindow() == m_hWnd; + int state = 0; + if ( m_bActive) + state = 0; + else state = 1; + + pDC->ExcludeClipRect(0, 0, wr.Width(), m_TitleHeight ); + DrawFrame( pDC, 0, 0, wr.Width(), wr.Height(), state, 0 ); + pDC->SelectClipRgn( NULL ); + + CDC memDC, *pNewDC; + CMyBitmap bmp; + CBitmap *obmp; + memDC.CreateCompatibleDC( pDC ); + bmp.CreateCompatibleBitmap( pDC, wr.Width(), m_TitleHeight ); + obmp = memDC.SelectObject(&bmp); + pNewDC = &memDC; + + DrawTitle( pNewDC, m_BorderLeftWidth , 0, + wr.Width() - m_BorderRightWidth - m_BorderLeftWidth + 1, state ); + DrawLeft( pNewDC, 0, 0, m_bmpLeft.Height(), state ); + DrawRight( pNewDC, wr.Width() - m_BorderRightWidth , 0, m_bmpRight.Height(), state ); + + + CRgn newrgn; + newrgn.CreateRectRgn( 0, 0, wr.Width(), wr.Height() ); + if ( m_bTrans ) + { + CRgn rgn; + rgn.CreateRectRgn( 0, m_TitleHeight, wr.Width(), wr.Height() ); + HRGN hrgn = bmp.CreateRgnFromFile( m_colTrans ); + newrgn.CombineRgn( &rgn, CRgn::FromHandle(hrgn), RGN_XOR ); + pDC->SelectClipRgn( &newrgn ); + } + else + SetWindowRgn( m_hWnd, newrgn, FALSE ); + + if ( m_downHitTest == HTCLOSE ) + DrawButton( pNewDC, 0, 1 ); + else if ( m_moveHitTest == HTCLOSE) + DrawButton( pNewDC, 0, 2 ); + else + DrawButton( pNewDC, 0, 0 ); + + if ( m_downHitTest == HTMINBUTTON ) + DrawButton( pNewDC, 2, 1 ); + else if ( m_moveHitTest == HTMINBUTTON) + DrawButton( pNewDC, 2, 2 ); + else + DrawButton( pNewDC, 2, 0 ); + + if ( m_downHitTest == HTMAXBUTTON ) + DrawButton( pNewDC, 1, 1 ); + else if ( m_moveHitTest == HTMAXBUTTON) + DrawButton( pNewDC, 1, 2 ); + else + DrawButton( pNewDC, 1, 0 ); + +// int cx = GetSystemMetrics(SM_CXSMICON); +// int cy = GetSystemMetrics(SM_CYSMICON); + SendMessage( m_hWnd, WM_GETICON, ICON_SMALL, 0); + /*if ( !hi ) + { +#ifdef IDR_MAINFRAME + hi = AfxGetApp()->LoadIcon(IDR_MAINFRAME); +#endif + }*/ + //draw icon + /*::DrawIconEx( pNewDC->GetSafeHdc(), m_BorderLeftWidth, 5, (HICON) + CopyImage( hi, IMAGE_ICON, + cx, cy, 0), cx, cy, 0, 0, DI_NORMAL);*/ + //draw text + if ( m_title.IsEmpty() ) + pWnd->GetWindowText(m_title); + + if (m_bActive) + pNewDC->SetTextColor( m_colTitle1 ); + else + pNewDC->SetTextColor( m_colTitle2 ); + + CFont font, *ofont; + font.CreatePointFont( GetSystemMetrics(SM_CYSMCAPTION), _T("System") ); + ofont = pNewDC->SelectObject(&font); + + pNewDC->SetBkMode(TRANSPARENT); + pNewDC->DrawText( m_title, CRect( m_textShift, m_textShiftVer, wr.Width() - m_bmpTitle.Width() + m_titleoff2, + m_TitleHeight ), DT_SINGLELINE | DT_LEFT | DT_VCENTER | DT_WORD_ELLIPSIS ); + + pNewDC->SelectObject(&font); + + pDC->BitBlt( 0, 0, wr.Width(), + m_TitleHeight, pNewDC, 0, 0, SRCCOPY ); + memDC.SelectObject(obmp); + + pDC->SelectClipRgn(NULL); +} + +void CSkinWin::OnNcCalcSize(BOOL bCalcValidRects, NCCALCSIZE_PARAMS *lpncsp) +{ + if ( bCalcValidRects ) + { + lpncsp->rgrc[0].left = lpncsp->rgrc[0].left + m_BorderLeftWidth; + lpncsp->rgrc[0].right = lpncsp->rgrc[0].right - m_BorderRightWidth; + lpncsp->rgrc[0].top = lpncsp->rgrc[0].top + m_TitleHeight; + lpncsp->rgrc[0].bottom = lpncsp->rgrc[0].bottom - m_BorderBottomHeight; + lpncsp->rgrc[1] = lpncsp->rgrc[0]; + + } + else + { + Default(); + } + +} + +void CSkinWin::OnSizing(UINT nSide, LPRECT lpRect) +{ + //Default(); +// CWnd *pWnd = CWnd::FromHandle(m_hWnd); + CRect wr(lpRect); + + + /*if ( m_bTrans ) + SetWindowRgn( m_hWnd, GetRegion(wr.Width(), wr.Height() ), TRUE ); + else + SetWindowRgn( m_hWnd, NULL, TRUE );*/ + +} + + +void CSkinWin::OnSize(UINT nType, int cx, int cy) +{ + //Default(); + CWnd *pWnd = CWnd::FromHandle(m_hWnd); + CRect wr; + Default(); + pWnd->GetWindowRect(wr); + /*pWnd->Invalidate(); + OnNcPaint(0);*/ + + if ( m_bTrans ) + SetWindowRgn( m_hWnd, GetRegion(wr.Width(), wr.Height() ), TRUE ); + else + SetWindowRgn( m_hWnd, NULL, TRUE ); + + +} + +HRGN CSkinWin::GetRegion(int w, int h) +{ + CWnd *pWnd = CWnd::FromHandle(m_hWnd); + CRect wr; + pWnd->GetWindowRect(wr); + + CRgn rgn; + if ( m_bTrans ) + { + CDC *pDC = pWnd->GetDC(); + CDC memDC; + CMyBitmap bmp; + CBitmap *obmp; + memDC.CreateCompatibleDC(pDC); + bmp.CreateCompatibleBitmap( pDC, w, m_TitleHeight ); + obmp = memDC.SelectObject(&bmp); + /* + memDC.FillSolidRect( 0, 0, w, h, 0 ); + DrawFrame( &memDC, 0, 0, w, h, 0 ); + */ + DrawTitle( &memDC, m_BorderLeftWidth , 0, + wr.Width() - m_BorderRightWidth - m_BorderLeftWidth + 1, 0 ); + DrawLeft( &memDC, 0, 0, m_bmpLeft.Height(), 0 ); + DrawRight( &memDC, wr.Width() - m_BorderRightWidth , 0, m_bmpRight.Height(), 0 ); + + memDC.SelectObject(obmp); + pWnd->ReleaseDC( pDC ); + + rgn.CreateRectRgn( 0, m_TitleHeight, wr.Width(), wr.Height() ); + HRGN hrgn = bmp.CreateRgnFromFile( m_colTrans ); + CRgn newrgn; + newrgn.CreateRectRgn( 0, m_TitleHeight, wr.Width(), wr.Height() ); + newrgn.CombineRgn( &rgn, CRgn::FromHandle(hrgn), RGN_XOR ); + + return (HRGN)newrgn.Detach(); + } + else + rgn.CreateRectRgn( 0, 0, wr.Width(), wr.Height() ); + + + return (HRGN)rgn.Detach(); +} + + +BOOL CSkinWin::OnNcActivate(BOOL bActive) +{ + m_bActive = bActive; + OnNcPaint(0); + if ( !bActive ) + { + return 1; + } + else + return 0; +} + + + +UINT CSkinWin::OnNcHitTest(CPoint point) +{ + CWnd *pWnd = CWnd::FromHandle(m_hWnd); + CRect wr; + pWnd->GetWindowRect(wr); + + point.x -= wr.left; + point.y -= wr.top; + if ( PtInRect( GetButtonRect(0), point ) ) + return HTCLOSE; + if ( PtInRect( GetButtonRect(2), point ) && m_minable ) + return HTMINBUTTON; + if ( PtInRect( GetButtonRect(1), point ) && m_maxable ) + return HTMAXBUTTON; + + CRect r; + int cx = GetSystemMetrics(SM_CXSMICON); + int cy = GetSystemMetrics(SM_CYSMICON); + if ( PtInRect( CRect(m_BorderLeftWidth, 5, m_BorderLeftWidth + cx, cy + 5), point ) ) + return HTSYSMENU; + + r = CRect( 0, 0, m_BorderLeftWidth, m_TitleHeight ); + if ( PtInRect( r, point ) && m_sizable && m_winstate != 1 ) //!IsZoomed(m_hWnd) ) + return HTTOPLEFT; + r = CRect( wr.Width() - m_BorderLeftWidth, 0, wr.Width(), m_TitleHeight ); + if ( PtInRect( r, point ) && m_sizable && m_winstate != 1 ) //!IsZoomed(m_hWnd) ) + return HTTOPRIGHT; + r = CRect( 0, wr.Height() - m_BorderBottomHeight, m_BorderLeftWidth, wr.Height() ); + if ( PtInRect( r, point ) && m_sizable && m_winstate != 1 ) //!IsZoomed(m_hWnd) ) + return HTBOTTOMLEFT; + r = CRect( wr.Width()-m_BorderRightWidth, wr.Height() - m_BorderBottomHeight, wr.Width(), wr.Height() ); + if ( PtInRect( r, point ) && m_sizable && m_winstate != 1 ) //!IsZoomed(m_hWnd) ) + return HTBOTTOMRIGHT; + r = CRect( 0, m_TitleHeight, m_BorderLeftWidth, wr.Height() - m_BorderBottomHeight ); + if ( PtInRect( r, point ) && m_sizable && m_winstate != 1 ) //!IsZoomed(m_hWnd) ) + return HTLEFT; + r = CRect( wr.Width()-m_BorderRightWidth, m_TitleHeight, wr.Width(), wr.Height() - m_BorderBottomHeight ); + if ( PtInRect( r, point ) && m_sizable && m_winstate != 1 ) //!IsZoomed(m_hWnd) ) + return HTRIGHT; + r = CRect( m_BorderLeftWidth, wr.Height() - m_BorderBottomHeight, wr.Width()-m_BorderRightWidth, wr.Height() ); + if ( PtInRect( r, point ) && m_sizable && m_winstate != 1 ) //!IsZoomed(m_hWnd) ) + return HTBOTTOM; + r = CRect( m_BorderLeftWidth, 0, wr.Width()-m_BorderRightWidth, m_BorderBottomHeight ); + if ( PtInRect( r, point ) && m_sizable && m_winstate != 1 ) //!IsZoomed(m_hWnd) ) + return HTTOP; + //set to boder 5 + r = CRect( m_BorderLeftWidth, 5 , wr.Width()-m_BorderRightWidth, m_TitleHeight ); + if ( PtInRect( r, point ) ) + return HTCAPTION; + + + + return HTCLIENT; +} + +void CSkinWin::OnNcLButtonDblClk(UINT nHitTest, CPoint point) +{ + if ( nHitTest == HTCAPTION && m_sizable ) + { + if ( m_winstate == 1 ) + Restore(); + else + Maximize(); //ShowWindow(m_hWnd, SW_MAXIMIZE); + m_downHitTest = 0; + m_moveHitTest = 0; + OnNcPaint(0); + } +} + +void CSkinWin::OnNcLButtonDown(UINT nHitTest, CPoint point) +{ + m_downHitTest = nHitTest; + m_moveHitTest = m_downHitTest; + + OnNcPaint(0); + if ( nHitTest >= HTLEFT && nHitTest <= HTBOTTOMRIGHT || + nHitTest == HTCAPTION && m_winstate != 1 ) //!IsZoomed(m_hWnd) ) + Default(); + else if ( nHitTest == HTSYSMENU ) + { + PopupSysMenu(point); + /* + CWnd * pWnd = CWnd::FromHandle(m_hWnd); + //a tricky hack + pWnd->ModifyStyle( 0, WS_SYSMENU | WS_MINIMIZEBOX | WS_MAXIMIZEBOX ); + Default(); + pWnd->ModifyStyle( WS_SYSMENU | WS_MINIMIZEBOX | WS_MAXIMIZEBOX, 0 ); + */ + } +} + +void CSkinWin::OnNcLButtonUp(UINT nHitTest, CPoint point) +{ + if ( nHitTest == HTCLOSE ) + { + SendMessage(m_hWnd, WM_CLOSE, 0, 0); + return; + } + else if ( nHitTest == HTMINBUTTON ) + Minimize(); + else if ( nHitTest == HTMAXBUTTON ) + { + if ( m_winstate == 1 ) // IsZoomed(m_hWnd) ) + Restore(); //ShowWindow(m_hWnd, SW_RESTORE); + else + Maximize(); //ShowWindow(m_hWnd, SW_MAXIMIZE); + } + else + return; + m_downHitTest = 0; + m_moveHitTest = 0; + OnNcPaint(0); + +} + +void CSkinWin::OnNcMouseMove(UINT nHitTest, CPoint point) +{ + if ( nHitTest >= HTLEFT && nHitTest <= HTBOTTOMRIGHT || + nHitTest == HTCAPTION && m_winstate != 1 ) //!IsZoomed(m_hWnd) ) + Default(); + + m_moveHitTest = nHitTest; + m_downHitTest = 0; + if ( m_oldHitTest != nHitTest ) + { + /* + CRect r; + r = GetButtonRect(0); + r.UnionRect( r, GetButtonRect(1) ); + r.UnionRect( r, GetButtonRect(2) ); + CRgn rgn; + rgn.CreateRectRgn( r.left, r.top, r.right, r.bottom ); + */ + OnNcPaint(0); + m_oldHitTest = nHitTest; + } + +} + +void CSkinWin::OnNcRButtonDown(UINT nHitTest, CPoint point) +{ + if ( nHitTest == HTCAPTION ) + { + /* + CWnd * pWnd = CWnd::FromHandle(m_hWnd); + pWnd->ModifyStyle( 0, WS_SYSMENU | WS_MINIMIZEBOX | WS_MAXIMIZEBOX ); + Default(); + pWnd->ModifyStyle( WS_SYSMENU | WS_MINIMIZEBOX | WS_MAXIMIZEBOX, 0 ); + */ + PopupSysMenu(point); + } +} + +void CSkinWin::OnNcRButtonUp(UINT nHitTest, CPoint point) +{ + + +} + +CRect CSkinWin::GetButtonRect(int i) +{ + CWnd *pWnd = CWnd::FromHandle(m_hWnd); + CRect wr; + pWnd->GetWindowRect(wr); + + CRect r; + if ( i == 0 && m_bmpCloseBtn.GetSafeHandle() ) + { + //close + r = m_rectCloseBtn; + r.left = wr.Width() - m_rectCloseBtn.right; + r.right = wr.Width() - m_rectCloseBtn.left; + } + if ( i == 1 && m_bmpMaxBtn.GetSafeHandle()) + { + //max + + if ( m_winstate != 1 || !m_bmpRestoreBtn.GetSafeHandle() ) + { + r = m_rectMaxBtn; + r.left = wr.Width() - m_rectMaxBtn.right; + r.right = wr.Width() - m_rectMaxBtn.left; + } + else + { + r = m_rectRestoreBtn; + r.left = wr.Width() - m_rectRestoreBtn.right; + r.right = wr.Width() - m_rectRestoreBtn.left; + } + + } + if ( i == 2 && m_bmpMinBtn.GetSafeHandle()) + { + //min + r = m_rectMinBtn; + r.left = wr.Width() - m_rectMinBtn.right; + r.right = wr.Width() - m_rectMinBtn.left; + } + + return r; + +} + +BOOL CSkinWin::DrawButton( CDC * pDC, int i, int state) +{ + if ( i == 0 ) + { + if ( m_bmpCloseBtn.GetSafeHandle() ) + { + CRect r = GetButtonRect(0); + m_bmpCloseBtn.Draw( pDC, r.left, r.top, + CRect( state * r.Width(), 0, (state + 1 ) * r.Width(), m_bmpCloseBtn.Height() ), m_colTrans, m_bTrans ); + } + } + if ( i == 1 ) + { + CRect r = GetButtonRect(1); + if ( m_maxable && m_bmpMaxBtn.GetSafeHandle() ) + if ( m_winstate == 1&& m_bmpRestoreBtn.GetSafeHandle() ) + m_bmpRestoreBtn.Draw( pDC, r.left, r.top, + CRect( state * r.Width(), 0, (state + 1 ) * r.Width(), m_bmpCloseBtn.Height() ), m_colTrans, m_bTrans ); + else + m_bmpMaxBtn.Draw( pDC, r.left, r.top, + CRect( state * r.Width(), 0, (state + 1 ) * r.Width(), m_bmpCloseBtn.Height() ) , m_colTrans, m_bTrans); + } + if ( i == 2 ) + { + if ( m_minable && m_bmpMinBtn.GetSafeHandle() ) + { + CRect r = GetButtonRect(2); + m_bmpMinBtn.Draw( pDC, r.left, r.top, + CRect( state * r.Width(), 0, (state + 1 ) * r.Width(), m_bmpCloseBtn.Height() ) , m_colTrans, m_bTrans); + + } + } + return TRUE; + +} + +void CSkinWin::OnGetMinMaxInfo(MINMAXINFO *lpMMI) +{ + lpMMI->ptMinTrackSize = CPoint( m_bmpTitle.Width() + m_bmpLeft.Width() + + m_bmpRight.Width(), m_bmpLeft.Height() + 20 ); +} + + +void CSkinWin::OnWindowPosChanging(WINDOWPOS *lpwndpos) +{ +} + + +BOOL CSkinWin::OnEraseBkgnd(CDC *pDC) +{ + if ( m_bmpDlg.GetSafeHandle() ) + { + CRect r; + GetClientRect( m_hWnd, r); + for ( int i = 0; i < r.Width()/m_bmpDlg.Width() + 1; i++ ) + for ( int j = 0; j < r.Height()/m_bmpDlg.Height() + 1; j++ ) + { + m_bmpDlg.Draw( pDC, CRect( i * m_bmpDlg.Width(), j * m_bmpDlg.Height(), + i * m_bmpDlg.Width() + m_bmpDlg.Width(), j * m_bmpDlg.Height() + m_bmpDlg.Height() ) ); + } + + return TRUE; + } + else + return FALSE; +} + +CRect CSkinWin::GetMaximizeRect() +{ + CRect r; + SystemParametersInfo(SPI_GETWORKAREA, 0, r, 0); + + return r; +} + +BOOL CSkinWin::Maximize() +{ + /*CRect r = GetMaximizeRect(); + GetWindowRect( m_hWnd, m_rectRestoreWin ); + m_winstate = 1; + ::MoveWindow( m_hWnd, r.left, r.top, r.Width(), r.Height(), TRUE ); + UpdateWindow( m_hWnd );*/ + return TRUE; +} + +BOOL CSkinWin::Minimize() +{ + m_oldwinstate = m_winstate; + m_winstate = 2; + ShowWindow(m_hWnd, SW_MINIMIZE); + /* + if (m_iconFlag) + ShowWindow(m_hWnd,SW_HIDE); + else + { + //AddTaskIcon(); + m_iconFlag = TRUE; + ShowWindow(m_hWnd,SW_HIDE); + }*/ + return TRUE; +} + +BOOL CSkinWin::Restore() +{ + if ( m_winstate == 1 ) + { + ::MoveWindow( m_hWnd, m_rectRestoreWin.left, m_rectRestoreWin.top, + m_rectRestoreWin.Width(), m_rectRestoreWin.Height(), TRUE ); + m_winstate = 0; + UpdateWindow( m_hWnd ); + } + return TRUE; +} + +//void OnActivate(UINT nState,CWnd* pWndOther, BOOL bMinimized ); + +void CSkinWin::OnActivate(UINT nState, CWnd *pWndOther, BOOL bMinimized) +{ + //Default(); + m_bActive = ( nState == WA_ACTIVE || nState == WA_CLICKACTIVE ); + OnNcActivate(m_bActive); +} + +LRESULT CSkinWin::OnSetText(WPARAM wp, LPARAM lp) +{ + TCHAR * str = ( TCHAR *)lp; + + Default(); + m_title = str; + OnNcPaint(0); + return 0; +} + + + +void CSkinWin::OnSysCommand(UINT nID, LPARAM lParam) +{ + if ( nID == SC_MAXIMIZE ) + Maximize(); + else if ( nID == SC_RESTORE && m_winstate == 1 ) + Restore(); + else if ( nID == SC_RESTORE && m_winstate == 2 ) + { + ShowWindow( m_hWnd, SW_RESTORE ); + m_winstate = m_oldwinstate; + OnNcPaint(0); + } + else + Default(); +} + +BOOL CSkinWin::PopupSysMenu(CPoint point) +{ + CWnd * pWnd = CWnd::FromHandle(m_hWnd); + CMenu SysMenu; + SysMenu.Attach( GetSystemMenu(m_hWnd, FALSE) ); + + + + +/* + when gray menuitem, a strange line appears!! + + if ( m_winstate == 0 ) + { + SysMenu.EnableMenuItem( SC_MINIMIZE, MF_BYCOMMAND|MF_ENABLED ); + SysMenu.EnableMenuItem( SC_MAXIMIZE, MF_BYCOMMAND|MF_ENABLED ); + SysMenu.EnableMenuItem( SC_RESTORE, MF_BYCOMMAND|MF_DISABLED|MF_GRAYED ); + } + else if ( m_winstate == 1 ) + { + SysMenu.EnableMenuItem( SC_MAXIMIZE, MF_BYCOMMAND|MF_DISABLED|MF_GRAYED ); + SysMenu.EnableMenuItem( SC_RESTORE, MF_BYCOMMAND|MF_ENABLED ); + } + else if ( m_winstate == 2 ) + { + SysMenu.EnableMenuItem( SC_MINIMIZE, MF_BYCOMMAND|MF_DISABLED|MF_GRAYED ); + SysMenu.EnableMenuItem( SC_RESTORE, MF_BYCOMMAND|MF_ENABLED ); + } +*/ + + SysMenu.TrackPopupMenu( 0, point.x, point.y, pWnd ); + SysMenu.Detach(); + return TRUE; +} + +BOOL CSkinWin::HandleSysCommand(WPARAM wp, LPARAM lp) +{ + if ( lp == 0 ) + { + if(wp==2) + { + //Minimize(); + //ShowWindow(m_hWnd,SW_HIDE); + if (m_iconFlag) + ShowWindow(m_hWnd,SW_HIDE); + else + { + AddTaskIcon(); + m_iconFlag = TRUE; + ShowWindow(m_hWnd,SW_HIDE); + } + return TRUE; + } + CMenu SysMenu; + SysMenu.Attach( GetSystemMenu(m_hWnd, FALSE) ); + int count = SysMenu.GetMenuItemCount(); + int i = 0; + for( ; i < count ; i++ ) + if ( SysMenu.GetMenuItemID(i) == wp ) + break; + SysMenu.Detach(); + if ( i >= count ) + return FALSE; + if ( wp == SC_MAXIMIZE ) + Maximize(); + else if ( wp == SC_MINIMIZE ) + Minimize(); + else if ( wp == SC_RESTORE && m_winstate == 1 ) + Restore(); + else if ( wp == SC_RESTORE && m_winstate == 2 ) + { + ShowWindow( m_hWnd, SW_RESTORE ); + m_winstate = m_oldwinstate; + OnNcPaint(0); + } + else + SendMessage( m_hWnd, WM_SYSCOMMAND, wp, lp ); + return TRUE; + } + + return FALSE; +} + +BOOL CSkinWin::AddTaskIcon() +{ + tnid.cbSize = sizeof(NOTIFYICONDATA); + tnid.hWnd = m_hWnd; + tnid.uID = 0; + tnid.uFlags = NIF_ICON | NIF_TIP | NIF_MESSAGE; + tnid.uCallbackMessage = UM_NOTIFY; + tnid.hIcon = LoadIcon(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDR_MAINFRAME)); + strcpy_s(tnid.szTip, _T("gtalkphone")); + return Shell_NotifyIcon(NIM_ADD, &tnid); +} + +BOOL CSkinWin::DeleteTaskIcon() +{ + if (m_iconFlag) + { + return Shell_NotifyIcon(NIM_DELETE, &tnid); + } + else + return FALSE; +} \ No newline at end of file Added: freeswitch/trunk/gtalkphone/SkinWin/SkinWin.h ============================================================================== --- (empty file) +++ freeswitch/trunk/gtalkphone/SkinWin/SkinWin.h Wed Aug 30 11:21:42 2006 @@ -0,0 +1,136 @@ +// SkinWin.h: interface for the CSkinWin class. +// +////////////////////////////////////////////////////////////////////// + +#if !defined(AFX_SKINWIN_H__F010D322_E34F_4F9E_87E8_E76E9611942D__INCLUDED_) +#define AFX_SKINWIN_H__F010D322_E34F_4F9E_87E8_E76E9611942D__INCLUDED_ + +#if _MSC_VER > 1000 +#pragma once +#endif // _MSC_VER > 1000 + +#include "MyBitmap.h" +#include "Subclass.h" +#define UM_QUIT WM_USER+1001 +class CSkinWin : public CSubclassWnd +{ +public: + CString m_title; + CString m_strSkinFile; //skin definition file + CMyBitmap m_bmpTitle; //contains two bitmap; + + CMyBitmap m_bmpLeft; + CMyBitmap m_bmpRight; + CMyBitmap m_bmpBottom; + CMyBitmap m_bmpMenubg; + CMyBitmap m_bmpDlg; + + UINT m_oldHitTest; + UINT m_moveHitTest; + UINT m_downHitTest; + //offset in the bmp + int m_titleoff1, m_titleoff2; + int m_leftoff1, m_leftoff2; + int m_rightoff1, m_rightoff2; + int m_bottomoff1, m_bottomoff2; + + CMyBitmap m_bmpMinBtn; + CMyBitmap m_bmpMaxBtn; + CMyBitmap m_bmpCloseBtn; + CMyBitmap m_bmpRestoreBtn; + CRect m_rectMinBtn; + CRect m_rectMaxBtn; + CRect m_rectCloseBtn; + CRect m_rectRestoreBtn; + + CRect m_rectRestoreWin; + int m_winstate; //0 for normal, 1 for max, 2 for min + int m_oldwinstate; //save state before min + + RECT m_rectParent; + + + BOOL m_sizable; + BOOL m_minable; + BOOL m_maxable; + BOOL m_sysmenu; + + int m_TitleHeight; + int m_BorderLeftWidth; + int m_BorderRightWidth; + int m_BorderBottomHeight; + + int m_textShift, m_textShiftVer; + COLORREF m_colTitle1, m_colTitle2; + COLORREF m_colTrans; + + COLORREF m_barcolor; + COLORREF m_menucolor; + COLORREF m_btnbgcolor, m_btntextcolor, m_btnhovercolor, m_btnfocuscolor; + + BOOL m_bTrans; + + BOOL m_bInit; + BOOL m_bActive; + CMenu popMenu; + BOOL m_bClose; +public: + BOOL m_iconFlag; + BOOL m_displayFlag; + NOTIFYICONDATA tnid; + void OnUmNotify(WPARAM wParam, LPARAM lParam); + BOOL DeleteTaskIcon(); + BOOL AddTaskIcon(); + BOOL IsInited() + { + return m_bInit; + } + BOOL HandleSysCommand(WPARAM wp, LPARAM lp); + BOOL PopupSysMenu(CPoint point); + void OnSysCommand(UINT nID, LPARAM lParam ); + BOOL Restore(); + BOOL Minimize(); + BOOL Maximize(); + LRESULT OnSetText( WPARAM wp, LPARAM lp ); + void OnActivate(UINT nState,CWnd* pWndOther, BOOL bMinimized ); + CRect GetMaximizeRect(); + BOOL OnEraseBkgnd( CDC *pDC); + void OnSizing( UINT nSide, LPRECT lpRect); + void OnWindowPosChanging( WINDOWPOS* lpwndpos ); + void OnGetMinMaxInfo( MINMAXINFO* lpMMI ); + BOOL DrawButton( CDC * pDC, int i, int state ); + CRect GetButtonRect( int i ); + void OnNcRButtonUp( UINT nHitTest, CPoint point); + void OnNcRButtonDown( UINT nHitTest, CPoint point ); + void OnNcMouseMove( UINT nHitTest, CPoint point ); + void OnNcLButtonUp( UINT nHitTest, CPoint point ); + void OnNcLButtonDown( UINT nHitTest, CPoint point ); + void OnNcLButtonDblClk( UINT nHitTest, CPoint point ); + UINT OnNcHitTest( CPoint point ); + BOOL OnNcActivate( BOOL bActive ); + HRGN GetRegion( int w, int h); + void OnSize(UINT nType, int cx, int cy ); + void OnNcCalcSize( BOOL bCalcValidRects, NCCALCSIZE_PARAMS* lpncsp); + void OnNcPaint( HRGN rgn ); + BOOL InstallSkin( CWnd * wnd ); + BOOL DrawFrame( CDC *pDC, int x, int y,int w, int h, int state, int title = 1 ); + BOOL DrawRight(CDC *pDC, int x, int y, int h, int state); + BOOL DrawLeft(CDC *pDC, int x, int y, int h, int state); + BOOL DrawBottom(CDC *pDC, int x, int y, int w, int state); + BOOL DrawTitle( CDC *pDC, int x, int y, int w, int state ); + CSkinWin(); + CSkinWin( const TCHAR * skinfile ) + { + CSkinWin(); + LoadSkin( skinfile ); + } + virtual ~CSkinWin(); + + //skinfile: full path name to skin inifile + BOOL LoadSkin( const TCHAR * skinfile ); + //vitrual functions + virtual LRESULT WindowProc(UINT msg, WPARAM wp, LPARAM lp); + +}; + +#endif // !defined(AFX_SKINWIN_H__F010D322_E34F_4F9E_87E8_E76E9611942D__INCLUDED_) Added: freeswitch/trunk/gtalkphone/SkinWin/Subclass.cpp ============================================================================== --- (empty file) +++ freeswitch/trunk/gtalkphone/SkinWin/Subclass.cpp Wed Aug 30 11:21:42 2006 @@ -0,0 +1,270 @@ +#include "StdAfx.h" +#include "Subclass.h" + +#ifdef _DEBUG +#define new DEBUG_NEW +#undef THIS_FILE +static char THIS_FILE[] = __FILE__; +#endif + +////////////////// +// The message hook map is derived from CMapPtrToPtr, which associates +// a pointer with another pointer. It maps an HWND to a CSubclassWnd, like +// the way MFC's internal maps map HWND's to CWnd's. The first CSubclassWnd +// attached to a window is stored in the map; all other CSubclassWnd's for that +// window are then chained via CSubclassWnd::m_pNext. +// +class CSubclassWndMap : private CMapPtrToPtr { +public: + CSubclassWndMap(); + ~CSubclassWndMap(); + static CSubclassWndMap& GetHookMap(); + void Add(HWND hwnd, CSubclassWnd* pSubclassWnd); + void Remove(CSubclassWnd* pSubclassWnd); + void RemoveAll(HWND hwnd); + CSubclassWnd* Lookup(HWND hwnd); +}; + +// This trick is used so the hook map isn't +// instantiated until someone actually requests it. +// +#define theHookMap (CSubclassWndMap::GetHookMap()) + +IMPLEMENT_DYNAMIC(CSubclassWnd, CWnd); + +CSubclassWnd::CSubclassWnd() +{ + m_pNext = NULL; + m_pOldWndProc = NULL; + m_hWnd = NULL; +} + +CSubclassWnd::~CSubclassWnd() +{ + if (m_hWnd) + HookWindow((HWND)NULL); // unhook window +} + +////////////////// +// Hook a window. +// This installs a new window proc that directs messages to the CSubclassWnd. +// pWnd=NULL to remove. +// +BOOL CSubclassWnd::HookWindow(HWND hwnd) +{ + ASSERT_VALID(this); + if (hwnd) { + // Hook the window + ASSERT(m_hWnd==NULL); + ASSERT(::IsWindow(hwnd)); + theHookMap.Add(hwnd, this); // Add to map of hooks + + } else if (m_hWnd) { + // Unhook the window + theHookMap.Remove(this); // Remove from map + m_pOldWndProc = NULL; + } + m_hWnd = hwnd; + return TRUE; +} + +////////////////// +// Window proc-like virtual function which specific CSubclassWnds will +// override to do stuff. Default passes the message to the next hook; +// the last hook passes the message to the original window. +// You MUST call this at the end of your WindowProc if you want the real +// window to get the message. This is just like CWnd::WindowProc, except that +// a CSubclassWnd is not a window. +// +LRESULT CSubclassWnd::WindowProc(UINT msg, WPARAM wp, LPARAM lp) +{ +// ASSERT_VALID(this); // removed for speed + ASSERT(m_pOldWndProc); + return m_pNext ? m_pNext->WindowProc(msg, wp, lp) : + ::CallWindowProc(m_pOldWndProc, m_hWnd, msg, wp, lp); +} + +////////////////// +// Like calling base class WindowProc, but with no args, so individual +// message handlers can do the default thing. Like CWnd::Default +// +LRESULT CSubclassWnd::Default() +{ + // MFC stores current MSG in thread state + MSG& curMsg = AfxGetThreadState()->m_lastSentMsg; + // Note: must explicitly call CSubclassWnd::WindowProc to avoid infinte + // recursion on virtual function + return CSubclassWnd::WindowProc(curMsg.message, curMsg.wParam, curMsg.lParam); +} + +#ifdef _DEBUG +void CSubclassWnd::AssertValid() const +{ + CObject::AssertValid(); + ASSERT(m_hWnd==NULL || ::IsWindow(m_hWnd)); + if (m_hWnd) { + CSubclassWnd* p = theHookMap.Lookup(m_hWnd); + for (; p; p=p->m_pNext) { + if (p==this) + break; + } + ASSERT(p); // should have found it! + } +} + +void CSubclassWnd::Dump(CDumpContext& dc) const +{ + CObject::Dump(dc); +} + +#endif + +////////////////// +// Subclassed window proc for message hooks. Replaces AfxWndProc (or whatever +// else was there before.) +// +LRESULT CALLBACK +HookWndProc(HWND hwnd, UINT msg, WPARAM wp, LPARAM lp) +{ +#ifdef _USRDLL + // If this is a DLL, need to set up MFC state + AFX_MANAGE_STATE(AfxGetStaticModuleState()); +#endif + + // Set up MFC message state just in case anyone wants it + // This is just like AfxCallWindowProc, but we can't use that because + // a CSubclassWnd is not a CWnd. + // + MSG& curMsg = AfxGetThreadState()->m_lastSentMsg; + MSG oldMsg = curMsg; // save for nesting + curMsg.hwnd = hwnd; + curMsg.message = msg; + curMsg.wParam = wp; + curMsg.lParam = lp; + + // Get hook object for this window. Get from hook map + CSubclassWnd* pSubclassWnd = theHookMap.Lookup(hwnd); + ASSERT(pSubclassWnd); + + LRESULT lr; + if (msg==WM_NCDESTROY) { + // Window is being destroyed: unhook all hooks (for this window) + // and pass msg to orginal window proc + // + WNDPROC wndproc = pSubclassWnd->m_pOldWndProc; + theHookMap.RemoveAll(hwnd); + lr = ::CallWindowProc(wndproc, hwnd, msg, wp, lp); + + } else { + // pass to msg hook + lr = pSubclassWnd->WindowProc(msg, wp, lp); + } + curMsg = oldMsg; // pop state + return lr; +} + +//////////////////////////////////////////////////////////////// +// CSubclassWndMap implementation +// +CSubclassWndMap::CSubclassWndMap() +{ +} + +CSubclassWndMap::~CSubclassWndMap() +{ +// This assert bombs when posting WM_QUIT, so I've deleted it. +// ASSERT(IsEmpty()); // all hooks should be removed! +} + +////////////////// +// Get the one and only global hook map +// +CSubclassWndMap& CSubclassWndMap::GetHookMap() +{ + // By creating theMap here, C++ doesn't instantiate it until/unless + // it's ever used! This is a good trick to use in C++, to + // instantiate/initialize a static object the first time it's used. + // + static CSubclassWndMap theMap; + return theMap; +} + +///////////////// +// Add hook to map; i.e., associate hook with window +// +void CSubclassWndMap::Add(HWND hwnd, CSubclassWnd* pSubclassWnd) +{ + ASSERT(hwnd && ::IsWindow(hwnd)); + + // Add to front of list + pSubclassWnd->m_pNext = Lookup(hwnd); + SetAt(hwnd, pSubclassWnd); + + if (pSubclassWnd->m_pNext==NULL) { + // If this is the first hook added, subclass the window +#pragma warning(push) +#pragma warning(disable:4244 4312) + pSubclassWnd->m_pOldWndProc = + (WNDPROC)SetWindowLongPtr(hwnd, GWL_WNDPROC, (LONG_PTR)HookWndProc); +#pragma warning(pop) + + } else { + // just copy wndproc from next hook + pSubclassWnd->m_pOldWndProc = pSubclassWnd->m_pNext->m_pOldWndProc; + } + ASSERT(pSubclassWnd->m_pOldWndProc); +} + +////////////////// +// Remove hook from map +// +void CSubclassWndMap::Remove(CSubclassWnd* pUnHook) +{ + HWND hwnd = pUnHook->m_hWnd; + ASSERT(hwnd && ::IsWindow(hwnd)); + + CSubclassWnd* pHook = Lookup(hwnd); + ASSERT(pHook); + if (pHook==pUnHook) { + // hook to remove is the one in the hash table: replace w/next + if (pHook->m_pNext) + SetAt(hwnd, pHook->m_pNext); + else { + // This is the last hook for this window: restore wnd proc + RemoveKey(hwnd); +#pragma warning(push) +#pragma warning(disable:4244) + SetWindowLongPtr(hwnd, GWL_WNDPROC, (LONG_PTR)(pHook->m_pOldWndProc)); +#pragma warning(pop) + } + } else { + // Hook to remove is in the middle: just remove from linked list + while (pHook->m_pNext!=pUnHook) + pHook = pHook->m_pNext; + ASSERT(pHook && pHook->m_pNext==pUnHook); + pHook->m_pNext = pUnHook->m_pNext; + } +} + +////////////////// +// Remove all the hooks for a window +// +void CSubclassWndMap::RemoveAll(HWND hwnd) +{ + CSubclassWnd* pSubclassWnd; + while ((pSubclassWnd = Lookup(hwnd))!=NULL) + pSubclassWnd->HookWindow((HWND)NULL); // (unhook) +} + +///////////////// +// Find first hook associate with window +// +CSubclassWnd* CSubclassWndMap::Lookup(HWND hwnd) +{ + CSubclassWnd* pFound = NULL; + if (!CMapPtrToPtr::Lookup(hwnd, (void*&)pFound)) + return NULL; + ASSERT_KINDOF(CSubclassWnd, pFound); + return pFound; +} + Added: freeswitch/trunk/gtalkphone/SkinWin/Subclass.h ============================================================================== --- (empty file) +++ freeswitch/trunk/gtalkphone/SkinWin/Subclass.h Wed Aug 30 11:21:42 2006 @@ -0,0 +1,83 @@ +#ifndef _SUBCLASSW_H +#define _SUBCLASSW_H + +//////////////////////////////////////////////////////////////// +// Copyright 1998 Paul DiLascia +// If this code works, it was written by Paul DiLascia. +// If not, I don't know who wrote it. +// +///////////////////////////////////////////////////////////////////////////// +/**************************************************************************** + * + * $Date: 10/26/99 10:50p $ + * $Revision: 4 $ + * $Archive: /CodeJock/Include/Subclass.h $ + * + * $History: Subclass.h $ + * + * ***************** Version 4 ***************** + * User: Kirk Stowell Date: 10/26/99 Time: 10:50p + * Updated in $/CodeJock/Include + * Made class methods virtual for inheritance purposes. + * + * ***************** Version 3 ***************** + * User: Kirk Stowell Date: 10/14/99 Time: 12:41p + * Updated in $/CodeJock/Include + * Added source control history to file header. + * + ***************************************************************************/ +///////////////////////////////////////////////////////////////////////////// + +////////////////// +// Generic class to hook messages on behalf of a CWnd. +// Once hooked, all messages go to CSubclassWnd::WindowProc before going +// to the window. Specific subclasses can trap messages and do something. +// +// To use: +// +// * Derive a class from CSubclassWnd. +// +// * Override CSubclassWnd::WindowProc to handle messages. Make sure you call +// CSubclassWnd::WindowProc if you don't handle the message, or your +// window will never get messages. If you write seperate message handlers, +// you can call Default() to pass the message to the window. +// +// * Instantiate your derived class somewhere and call HookWindow(pWnd) +// to hook your window, AFTER it has been created. +// To unhook, call HookWindow(NULL). +// +// This is a very important class, crucial to many of the widgets Window +// widgets implemented in PixieLib. To see how it works, look at the HOOK +// sample program. +// +class CSubclassWnd : public CObject { +public: + DECLARE_DYNAMIC(CSubclassWnd); + CSubclassWnd(); + ~CSubclassWnd(); + + // Subclass a window. Hook(NULL) to unhook (automatic on WM_NCDESTROY) + virtual BOOL HookWindow(HWND hwnd); + virtual BOOL HookWindow(CWnd* pWnd) { return HookWindow(pWnd->GetSafeHwnd()); } + virtual BOOL IsHooked() { return m_hWnd!=NULL; } + + friend LRESULT CALLBACK HookWndProc(HWND, UINT, WPARAM, LPARAM); + friend class CSubclassWndMap; + +#ifdef _DEBUG + virtual void AssertValid() const; + virtual void Dump(CDumpContext& dc) const; +#endif + +protected: + HWND m_hWnd; // the window hooked + WNDPROC m_pOldWndProc; // ..and original window proc + CSubclassWnd* m_pNext; // next in chain of hooks for this window + + // Override this to handle messages in specific handlers + virtual LRESULT WindowProc(UINT msg, WPARAM wp, LPARAM lp); + virtual LRESULT Default(); // call this at the end of handler fns +}; + +#endif // _SUBCLASSW_H + Added: freeswitch/trunk/gtalkphone/SkinWin/Utils.cpp ============================================================================== --- (empty file) +++ freeswitch/trunk/gtalkphone/SkinWin/Utils.cpp Wed Aug 30 11:21:42 2006 @@ -0,0 +1,283 @@ +// 2002.11.23 +// copy from kdphoto projects + +#include "stdafx.h" + +int GetChar( TCHAR ** str ) +{ + int code = **((TCHAR **)str); + if ( !str ) return 0; + if ( !*str ) return 0; + if ( !code ) return 0; + + (*str) ++; + if ( code > 0x80 ) + { + code *= 256; + code += **((TCHAR **)str); + (*str) ++; + } + return code; +}; + +int SetChar( TCHAR **str, int chr ) +{ + int byte = 1; + + if ( !str ) return 0; + if ( !*str ) return 0; + + if ( chr < 256 ) + { + **((TCHAR **)str) = (TCHAR)(chr % 256); + (*str) ++; + } + else + { + **((TCHAR **)str) = (TCHAR)(chr / 256); + (*str) ++; + **((TCHAR **)str) = (TCHAR)(chr % 256); + (*str) ++; + byte ++; + } + + return byte; +} + +int PeekChar( TCHAR **str ) +{ + int code = **((TCHAR **)str); + + if ( !str ) return 0; + if ( !*str ) return 0; + if ( !code ) return 0; + + if ( code > 0x80 ) + { + code *= 256; + code += *((TCHAR *)(*str + 1)); + } + + return code; +} + +int CatChar( TCHAR *str, int cc) +{ + int len = 0; + while( *str ) + { + GetChar( &str ); + len++; + } + SetChar( &str, cc ); + *str = 0; + return (++len); +} + + +TCHAR *whitespaces = _T(" \t\n"); + +///ȥ���ո�ĺ��� +void trim( TCHAR *buf, TCHAR *result ) +{ + TCHAR * p; + if ( !buf || !result ) + return; + p = strlen( buf ) + buf; + while ( (*buf) && strchr( whitespaces, *buf) ) buf++; + while( (p >= buf) && strchr( whitespaces, *p) ) p--; + while ( buf <= p ) *result++ = *buf++; + *result = 0; +} + +TCHAR *next_token( TCHAR *buf, TCHAR *token, TCHAR *stopchars ) +{ + if ( !stopchars ) + stopchars = whitespaces; + int cc; + TCHAR *p = token; + + while ( (cc = GetChar(&buf)) && (!strchr( stopchars, cc)) ) + SetChar( &token, cc); + SetChar( &token, 0); + trim( p, p ); + + return buf; +} + + +CString GetPathName( const TCHAR * filename ) +{ +/* + CString path = filename; + TCHAR *file = path.GetBuffer(512); + TCHAR *p = file + strlen( file ); + for ( ; *p != '\\' && *p != '/' && p > file; p-- ); + if ( *p == '\\' || *p == '/') p++; + *p = 0; + path.ReleaseBuffer(); +*/ + TCHAR path[MAX_PATH]; + strcpy_s( path, filename ); + TCHAR *p = path + strlen( path ); + for ( ; *p != _T('\\') && *p != _T('/') && p > path; p-- ); + if ( *p == _T('\\') || *p == _T('/')) p++; + *p = 0; + return CString(path); +} + +///��ȡ�ļ���չ�� +const TCHAR * GetExt( const TCHAR * filename ) +{ + const TCHAR *p = strlen(filename) + filename; + while( p > filename && *p != _T('.') ) p--; + if ( *p != _T('.') ) + return _T("\0"); + else + return p; +} + +///��ȡ�ļ���չ�� +CString GetFileName( const TCHAR * filename, int ext = 0) +{ +/* + CString path = filename; + TCHAR *file = path.GetBuffer(512); + TCHAR *p = file + wcslen( file ); + for ( ; *p != '\\' && *p != '/' && p > file; p-- ); + if ( *p == '\\' || *p == '/') p++; + if ( !ext ) + { + TCHAR *p1 = p; + while( *p1 && *p1 != '.' ) p1++; + *p1 = 0; + } + path.ReleaseBuffer(); + return p; +*/ + TCHAR path[MAX_PATH]; + strcpy_s( path, filename ); + TCHAR *p = path + strlen(path); + for ( ; *p != _T('\\') && *p != _T('/') && p > path; p-- ); + if ( *p == _T('\\') || *p == _T('/')) p++; + if ( !ext ) + { + TCHAR *p1 = p; + while( *p1 && *p1 != _T('.') ) p1++; + *p1 = 0; + } + return CString(p); +} + +typedef HRESULT (_stdcall *RegFunc)(void); + +BOOL RegisterControl( const TCHAR * file, int reg ) +{ + HMODULE hmod = LoadLibrary( file ); + if ( !hmod ) + return FALSE; + + RegFunc func; + if ( reg ) + func = (RegFunc)GetProcAddress( hmod, "DllRegisterServer" ); + else + func = (RegFunc)GetProcAddress( hmod, "DllUnregisterServer" ); + if ( func ) + { + HRESULT hr = func(); + FreeLibrary( hmod ); + return S_OK == hr; + } + FreeLibrary( hmod ); + return FALSE; +} + + +//0:win9x +//1:winnt +//2:win2000/winxp +//3:win32s +int GetWindowVersion() +{ + DWORD ret; + DWORD dwVersion = GetVersion(); + + // Get the Windows version. + + DWORD dwWindowsMajorVersion = (DWORD)(LOBYTE(LOWORD(dwVersion))); +// DWORD dwWindowsMinorVersion = (DWORD)(HIBYTE(LOWORD(dwVersion))); + + // Get the build number. + DWORD dwBuild; + if (dwVersion < 0x80000000) // Windows NT/2000/XP + { + dwBuild = (DWORD)(HIWORD(dwVersion)); + if ( dwBuild == 5 ) + ret = 2; + else + ret = 1; + } + else if (dwWindowsMajorVersion < 4) // Win32s + { + dwBuild = (DWORD)(HIWORD(dwVersion) & ~0x8000); + ret = 3; + } + else // Windows 95/98/Me + { + dwBuild = 0; + ret = 0; + } + return ret; +} + + +CString GetSystemPath() +{ + CString systempath; + ::GetWindowsDirectory(systempath.GetBuffer(MAX_PATH), MAX_PATH); + systempath.ReleaseBuffer(); + BOOL bWin9x = ( GetWindowVersion() == 0 ); + if (systempath.Right(1) != _T("\\")) + { + //is win9x + if ( bWin9x ) + systempath += _T("\\System\\"); + else + systempath += _T("\\System32\\"); + } + return systempath; +} + + +int debug_printf(TCHAR *fmt, ...); +//be careful! +void RecursiveDelete(CString szPath) +{ + CFileFind ff; + CString path = szPath; + + if(path.Right(1) != _T("\\")) + path += _T("\\"); + + path += _T("*.*"); + + BOOL res = ff.FindFile(path); + + ///debug_printf("delete dir!:%s\n", (LPCSTR)szPath); + + while(res) + { + res = ff.FindNextFile(); + if (!ff.IsDots() && !ff.IsDirectory()) + { + DeleteFile(ff.GetFilePath()); + + } + else if (ff.IsDirectory() && !ff.IsDots() ) + { + path = ff.GetFilePath(); + RecursiveDelete(path); + RemoveDirectory(path); + } + } +} \ No newline at end of file Added: freeswitch/trunk/gtalkphone/StdAfx.cpp ============================================================================== --- (empty file) +++ freeswitch/trunk/gtalkphone/StdAfx.cpp Wed Aug 30 11:21:42 2006 @@ -0,0 +1,8 @@ +// stdafx.cpp : source file that includes just the standard includes +// gtalkphone.pch will be the pre-compiled header +// stdafx.obj will contain the pre-compiled type information + +#include "stdafx.h" + + + Added: freeswitch/trunk/gtalkphone/StdAfx.h ============================================================================== --- (empty file) +++ freeswitch/trunk/gtalkphone/StdAfx.h Wed Aug 30 11:21:42 2006 @@ -0,0 +1,90 @@ +// stdafx.h : include file for standard system include files, +// or project specific include files that are used frequently, +// but are changed infrequently + +#pragma once + +/* disable the following warnings + * C4152: non standard extension, function/data ptr conversion in expression + * C4054: A function pointer is cast (possibly incorrectly) to a data pointer. + * C4100: The formal parameter is not referenced in the body of the function. The unreferenced parameter is ignored. + * C4142: A type is redefined in a manner that has no effect on the generated code. + * C4200: Non standard extension C zero sized array + * C4204: nonstandard extension used : non-constant aggregate initializer + * C4706: assignment within conditional expression + * C4055: type cast from data pointer to function pointer (apr carries function pointers as data pointers) + * C4214: nonstandard extension used : bit field types other than int + * C4819: The file contains a character that cannot be represented in the current code page + * C4132: 'object' : const object should be initialized (fires innapropriately for prototyped forward declaration of cost var) + */ +#pragma warning(disable:4152 4054 4100 4142 4200 4204 4706 4055 4214 4819 4132 4510 4610) + +#ifndef _SECURE_ATL +#define _SECURE_ATL 1 +#endif + +#ifndef VC_EXTRALEAN +#define VC_EXTRALEAN // Exclude rarely-used stuff from Windows headers +#endif + +// Modify the following defines if you have to target a platform prior to the ones specified below. +// Refer to MSDN for the latest info on corresponding values for different platforms. +#ifndef WINVER // Allow use of features specific to Windows XP or later. +#define WINVER 0x0501 // Change this to the appropriate value to target other versions of Windows. +#endif + +#ifndef _WIN32_WINNT // Allow use of features specific to Windows XP or later. +#define _WIN32_WINNT 0x0501 // Change this to the appropriate value to target other versions of Windows. +#endif + +#ifndef _WIN32_WINDOWS // Allow use of features specific to Windows 98 or later. +#define _WIN32_WINDOWS 0x0410 // Change this to the appropriate value to target Windows Me or later. +#endif + +#ifndef _WIN32_IE // Allow use of features specific to IE 6.0 or later. +#define _WIN32_IE 0x0600 // Change this to the appropriate value to target other versions of IE. +#endif + +#define _ATL_CSTRING_EXPLICIT_CONSTRUCTORS // some CString constructors will be explicit + +// turns off MFC's hiding of some common and often safely ignored warning messages +#define _AFX_ALL_WARNINGS + +#include <afxwin.h> // MFC core and standard components +#include <afxext.h> // MFC extensions + + +#include <afxdisp.h> // MFC Automation classes + + + +#ifndef _AFX_NO_OLE_SUPPORT +#include <afxdtctl.h> // MFC support for Internet Explorer 4 Common Controls +#endif +#ifndef _AFX_NO_AFXCMN_SUPPORT +#include <afxcmn.h> // MFC support for Windows Common Controls +#endif // _AFX_NO_AFXCMN_SUPPORT + + + + + + + +#include <afxdhtml.h> // HTML Dialogs +#include <windows.h> + + +#ifdef _UNICODE +#if defined _M_IX86 +#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='x86' publicKeyToken='6595b64144ccf1df' language='*'\"") +#elif defined _M_IA64 +#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='ia64' publicKeyToken='6595b64144ccf1df' language='*'\"") +#elif defined _M_X64 +#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='amd64' publicKeyToken='6595b64144ccf1df' language='*'\"") +#else +#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"") +#endif +#endif + + Added: freeswitch/trunk/gtalkphone/const.h ============================================================================== --- (empty file) +++ freeswitch/trunk/gtalkphone/const.h Wed Aug 30 11:21:42 2006 @@ -0,0 +1,8 @@ +#ifndef _CONST_H +#define _CONST_H + +#define MAIN_FRAME_WIDTH 400 +#define MAIN_FRAME_HEIGH 550 + + +#endif \ No newline at end of file Added: freeswitch/trunk/gtalkphone/freeswitch.xml ============================================================================== --- (empty file) +++ freeswitch/trunk/gtalkphone/freeswitch.xml Wed Aug 30 11:21:42 2006 @@ -0,0 +1,140 @@ +<?xml version="1.0"?> +<document type="freeswitch/xml"> + <section name="configuration" description="Various Configuration"> + <configuration name="modules.conf" description="Modules"> + <modules> + <!-- Loggers (I'd load these first) --> + <load module="mod_console"/> + + <!-- Endpoints --> + <load module="mod_exosip"/> + <load module="mod_portaudio"/> + <load module="mod_dingaling"/> + + <!-- Applications --> + <load module="mod_bridgecall"/> + <load module="mod_commands"/> + + <!-- Dialplan Interfaces --> + <load module="mod_dialplan_xml"/> + <!-- <load module="mod_dialplan_directory"/> --> + + <!-- Codec Interfaces --> + <load module="mod_g711"/> + <load module="mod_gsm"/> + <load module="mod_l16"/> + + </modules> + </configuration> + + <configuration name="console.conf" description="Console Logger"> + <!-- pick a file name, a function name or 'all' --> + <!-- map as many as you need for specific debugging --> + <mappings> + <!-- <param name="log_event" value="DEBUG"/> --> + <param name="all" value="DEBUG"/> + </mappings> + </configuration> + + <configuration name="exosip.conf" description="Exosip Endpoint"> + <settings> + <param name="port" value="5060"/> + <param name="dialplan" value="XML"/> + <param name="dtmf-duration" value="100"/> + <param name="codec-prefs" value="PCMU,PCMA"/> + <!-- Payload number to bind DTMF to--> + <param name="rfc2833-pt" value="101"/> + <!-- disable to trade async for more calls --> + <param name="use-rtp-timer" value="true"/> + <!-- pick one (default if not specified is 'guess'); --> + <param name="rtp-ip" value="guess"/> + <!-- <param name-"rtp-ip" value="10.0.0.1"/> --> + <!-- leave commented or 0.0.0.0 for all ip --> + <!-- <param name="sip-ip" value="127.0.0.1"/> --> + + <!-- optional ; --> + <!-- <param name="ext-rtp-ip" value="stun:stun.server.com"/> --> + <!-- <param name="ext-rtp-ip" value="100.101.102.103"/> --> + + <!-- specify 'myrealm' with certian key --> + <!-- use !myrealm! at beginning of url to activate --> + <!-- exosip/!myrealm!1000@dest --> + <!-- srtp:<param name="myrealm" value="ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"/> --> + + <!-- VAD choose one (out is a good choice); --> + <!-- <param name="vad" value="in"/> --> + <!-- <param name="vad" value="out"/> --> + <!-- <param name="vad" value="both"/> --> + </settings> + </configuration> + + <configuration name="portaudio.conf" description="Soundcard Endpoint"> + <settings> + <param name="debug" value="2"/> + <param name="dialplan" value="XML"/> + + <!-- partial string match on something in the name or the device # --> + <param name="indev" value="USB"/> + <param name="outdev" value="USB"/> + + <param name="cid-name" value="FreeSwitch"/> + <param name="cid-num" value="5555551212"/> + </settings> + </configuration> + + <configuration name="dingaling.conf" description="XMPP Jingle Endpoint"> + <settings> + <param name="debug" value="0"/> + <param name="codec-prefs" value="PCMU"/> + </settings> + </configuration> + + <configuration name="xml_rpc.conf" description="XML RPC"> + <settings> + <!-- The port where you want to run the http service (default 8080) --> + <param name="http-port" value="8080"/> + <!-- The url to a gateway cgi that can generate xml similar to + what's in this file only on-the-fly (leave it commented if you dont + need it) --> + <!-- one or more |-delim of configuration|directory|dialplan --> + <!-- <param name="gateway-url" value="http://www.server.com/gateway.cgi" bindings="configuration"/> --> + </settings> + </configuration> + </section> + <section name="dialplan" description="Regex/XML Dialplan"> + <!-- Valid fields in conditions: + "dialplan, caller_id_name, ani, ani2, caller_id_number, + network_addr, rdnis, destination_number, uuid, source, + context, chan_name" --> + + <!-- *NOTE* The special context name 'any' will match any context --> + <context name="default"> + <extension name="PSTN Termination"> + <condition field="source" expression="mod_portaudio"/> + <condition field="destination_number" expression="(.*)"> + <action application="bridge" data="$1"/> + </condition> + </extension> + + <extension name="Inbound Calls"> + <condition field="destination_number" expression="(.*)"> + <action application="bridge" data="portaudio"/> + </condition> + </extension> + + <extension name="devconf"> + <condition field="destination_number" expression="^888$"> + <action application="bridge" data="exosip/888@66.250.68.194"/> + </condition> + </extension> + + </context> + </section> + + <section name="directory" description="User Directory"> + </section> + +</document> + + + Added: freeswitch/trunk/gtalkphone/freeswitch/include/freeswitch.h ============================================================================== --- (empty file) +++ freeswitch/trunk/gtalkphone/freeswitch/include/freeswitch.h Wed Aug 30 11:21:42 2006 @@ -0,0 +1,40 @@ +#ifndef _FREESWITCH_H +#define _FREESWITCH_H +#include <switch.h> +extern "C" { +#define UM_FREESWITCH_EVENT 10000 + +#define DL_EVENT_LOGIN_SUCCESS "dingaling::login_success" +#define DL_EVENT_LOGIN_FAILURE "dingaling::login_failure" +#define DL_EVENT_MESSAGE "dingaling::message" +#define PA_EVENT_RING "portaudio::ringing" +#define PA_EVENT_INFO "call_id" +#define CMDLEN 255 +class FreeswitchCall +{ +public: + static bool get_load_status(); + static int freeswitch_shutdown(); + static int freeswitch_init(); + static int freeswitch_login(char* userid,char* password,int issave); + static int freeswitch_logout(); + static int get_userinfo(char *userid,char *password,int &issave); + static int freeswitch_hangup(); +public: + FreeswitchCall(char *extension); + FreeswitchCall(int incallid);//for incoming call + ~FreeswitchCall(); + int freeswitch_send_dtmf(char *digits); + int freeswitch_answercall(); +private: + int callid; + char retbuf[100]; + int retlen ; + int freeswitch_call(char *extension); + int freeswitch_hangup(char* callnum); + int freeswitch_answercall(char* callnum); + int freeswitch_send_dtmf(char *callnum, char *digits); +}; +extern HWND mm_event_hwnd; +} +#endif \ No newline at end of file Added: freeswitch/trunk/gtalkphone/freeswitch/source/freeswitch.cpp ============================================================================== --- (empty file) +++ freeswitch/trunk/gtalkphone/freeswitch/source/freeswitch.cpp Wed Aug 30 11:21:42 2006 @@ -0,0 +1,464 @@ +#include "stdafx.h" +#include "freeswitch.h" +static char *ppath= "log.txt"; +static char *err = NULL; +static switch_event *pevent; +static bool isLoaded=false; +static int write_to_conf_file(char* userid,char* password,int issave); +static void get_internet_ip(char *outip); +static void event_callback(switch_event_t *event); +HWND mm_event_hwnd=NULL; +FreeswitchCall::FreeswitchCall(char *extension) +{ + retlen = 100; + callid = freeswitch_call(extension); + /*char acNum[100]; + sprintf(acNum,"gtalkphone%d",callid);*/ +} +FreeswitchCall::FreeswitchCall(int incallid)//for incoming call +{ + callid = incallid; + /*char acNum[10]; + sprintf(acNum,"%d",callid); + freeswitch_answercall(acNum);*/ +} +FreeswitchCall::~FreeswitchCall() +{ + char acNum[10]; + sprintf(acNum,"%d",callid); + freeswitch_hangup(acNum); +} +bool FreeswitchCall::get_load_status() +{ + return isLoaded; +} +int FreeswitchCall::freeswitch_init() +{ + const char *err = NULL; + if(isLoaded) return 0; + //if(!write_to_conf_file(userid,password)) + // return 255; + switch_core_set_globals(); + char path_buf[1024]; + snprintf(path_buf, sizeof(path_buf), "%s/%s", SWITCH_GLOBAL_dirs.log_dir, ppath); + FILE *f = fopen(path_buf,"w+"); + if(f) + { + fclose(f); + } + if (switch_core_init(ppath, &err) != SWITCH_STATUS_SUCCESS) { + //Add code here to handle the actual init error message + return 255; + } + + if (switch_event_bind("gtalkphone_main", SWITCH_EVENT_ALL, SWITCH_EVENT_SUBCLASS_ANY, event_callback, NULL) != + SWITCH_STATUS_SUCCESS) { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Couldn't bind!\n"); + return 255; + } + /*if (switch_event_bind("mod_dingaling", SWITCH_EVENT_ALL, SWITCH_EVENT_SUBCLASS_ANY, event_callback, NULL) != + SWITCH_STATUS_SUCCESS) { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Couldn't bind!\n"); + return 255; + }*/ + if (switch_loadable_module_init() != SWITCH_STATUS_SUCCESS) { + return 255; + } + isLoaded = true; + return 0; +} +int FreeswitchCall::freeswitch_hangup() +{ + char *cmd = "pahup"; + char *arg = NULL; + char *retbuf = (char*)malloc(CMDLEN); + switch_stream_handle_t stream = {0}; + memset(retbuf, 0, CMDLEN); + stream.data = retbuf; + stream.end = stream.data; + stream.data_size = CMDLEN; + stream.write_function = switch_console_stream_write; + switch_api_execute(cmd, arg,NULL, &stream); + if(retbuf!=NULL) + free(retbuf); + //switch_api_execute(cmd, arg, retbuf, retlen); + return 0; +} +int FreeswitchCall::freeswitch_shutdown() +{ + if(!isLoaded) return 0; + isLoaded = false; + switch_loadable_module_shutdown(); + switch_core_destroy(); + return 0; +} +int FreeswitchCall::freeswitch_answercall() +{ + char acNum[10]; + sprintf(acNum,"%d",callid); + freeswitch_answercall(acNum); + return 0; +} +int FreeswitchCall::freeswitch_call(char *extension) +{ + char *cmd = "pacall"; + callid=0; + + //We need to add check here for value of return buff, possible values: + // "SUCCESS: 0" where 0 is the call number. We need the call number to properly hang up calls and send dtmf + // "FAIL" + char *retbuf = (char*)malloc(CMDLEN); + switch_stream_handle_t stream = {0}; + memset(retbuf, 0, CMDLEN); + stream.data = retbuf; + stream.end = stream.data; + stream.data_size = CMDLEN; + stream.write_function = switch_console_stream_write; + switch_api_execute(cmd, extension,NULL, &stream); + + //switch_api_execute(cmd, extension, retbuf, retlen); + sscanf(retbuf,"SUCCESS: %d",&callid); + if(retbuf!=NULL) + free(retbuf); + return callid; +} +int FreeswitchCall::freeswitch_login(char* userid,char* password,int issave) +{ + write_to_conf_file(userid,password,issave); + char *cmd = "dl_login"; + char internet_ip[20] ={0}; + int nat = 0; + size_t argLen; + get_internet_ip(internet_ip); + if (internet_ip[0] == '\0') { + sprintf(internet_ip, "0.0.0.0"); + argLen = strlen("name=jingle;")+strlen("login=")+strlen(userid)+strlen("@gtalkphone.com/talk;password=")+strlen(password)+strlen(";dialplan=XML;message=Jingle all the way;rtp-ip=")+strlen("0.0.0.0;ext-rtp-ip=stun:stun.fwdnet.net")+strlen(";exten=888")+1; + nat = 1; + } else { + argLen = strlen("name=jingle;")+strlen("login=")+strlen(userid)+strlen("@gtalkphone.com/talk;password=")+strlen(password)+strlen(";dialplan=XML;message=Jingle all the way;rtp-ip=")+strlen(internet_ip)+strlen(";exten=888")+1; + } + + char *arg =(char*)malloc(argLen); + char *retbuf = (char*)malloc(CMDLEN); + switch_stream_handle_t stream = {0}; + memset(retbuf, 0, CMDLEN); + memset(arg,0,argLen); + strcpy(arg,"name=jingle;login="); + strcat(arg,userid); + if(strstr(userid,"@")==NULL) + { + strcat(arg,"@gtalkphone.com"); + } + strcat(arg,"/talk"); + strcat(arg,";"); + strcat(arg,"password="); + strcat(arg,password); + strcat(arg,";dialplan=XML;message=Jingle all the way;rtp-ip="); + strcat(arg,internet_ip); + if (nat == 1) { + strcat(arg,";ext-rtp-ip=stun:stun.fwdnet.net"); + } + strcat(arg,";exten=888"); + stream.data = retbuf; + stream.end = stream.data; + stream.data_size = CMDLEN; + stream.write_function = switch_console_stream_write; + switch_api_execute(cmd, arg,NULL, &stream); + if(retbuf!=NULL) + free(retbuf); + if(arg!=NULL) + free(arg); + //switch_api_execute(cmd, arg, retbuf, retlen); + return 0; +} +int FreeswitchCall::freeswitch_logout() +{ + char *cmd = "dl_logout"; + char *retbuf = (char*)malloc(CMDLEN); + switch_stream_handle_t stream = {0}; + memset(retbuf, 0, CMDLEN); + stream.data = retbuf; + stream.end = stream.data; + stream.data_size = CMDLEN; + stream.write_function = switch_console_stream_write; + switch_api_execute(cmd, "jingle",NULL, &stream); + if(retbuf!=NULL) + free(retbuf); + //switch_api_execute(cmd, arg, retbuf, retlen); + return 0; +} +int FreeswitchCall::freeswitch_hangup(char* callnum) +{ + char *cmd = "pahup"; + char *arg = NULL; + if (callnum) { + arg = callnum; + } + char *retbuf = (char*)malloc(CMDLEN); + switch_stream_handle_t stream = {0}; + memset(retbuf, 0, CMDLEN); + stream.data = retbuf; + stream.end = stream.data; + stream.data_size = CMDLEN; + stream.write_function = switch_console_stream_write; + switch_api_execute(cmd, arg,NULL, &stream); + if(retbuf!=NULL) + free(retbuf); + //switch_api_execute(cmd, arg, retbuf, retlen); + return 0; +} +int FreeswitchCall::freeswitch_answercall(char* callnum) +{ + char *cmd = "paoffhook"; + char *arg = callnum; + char *retbuf = (char*)malloc(CMDLEN); + switch_stream_handle_t stream = {0}; + memset(retbuf, 0, CMDLEN); + stream.data = retbuf; + stream.end = stream.data; + stream.data_size = CMDLEN; + stream.write_function = switch_console_stream_write; + switch_api_execute(cmd, arg,NULL, &stream); + if(retbuf!=NULL) + free(retbuf); + //switch_api_execute(cmd, arg, retbuf, retlen); + return 0; +} +int FreeswitchCall::freeswitch_send_dtmf(char *callnum, char *digits) +{ + char *cmd = "padtmf"; + char arg[100]; + snprintf(arg, 100, "%s %s", callnum, digits); + + + char *retbuf = (char*)malloc(CMDLEN); + switch_stream_handle_t stream = {0}; + memset(retbuf, 0, CMDLEN); + stream.data = retbuf; + stream.end = stream.data; + stream.data_size = CMDLEN; + stream.write_function = switch_console_stream_write; + switch_api_execute(cmd, arg, NULL,&stream); + if(retbuf!=NULL) + free(retbuf); + //switch_api_execute(cmd, arg, retbuf, retlen); + return 0; +} + +int FreeswitchCall::freeswitch_send_dtmf(char *digits) +{ + char acNum[10]; + sprintf(acNum,"%d",callid); + freeswitch_send_dtmf(acNum,digits); + return 0; +} +int write_to_conf_file(char* userid,char* password,int issave) +{ + /*FILE *f; + char path_buf[1024]; + snprintf(path_buf, sizeof(path_buf), "%s/%s", SWITCH_GLOBAL_dirs.conf_dir, "dingaling.conf"); + f = fopen(path_buf,"w+"); + if(!f) + { + AfxMessageBox("Error!Can't create dingaling.conf file!"); + return 0; + } + fputs("[settings]\n",f); + fputs("debug => 0\n",f); + fputs("codec_prefs => PCMU\n",f); + fputs("[interface]\n",f); + fputs("name => google\n",f); + fprintf(f,"login => %s@jabber.asterlink.com/talk\n",userid); + fprintf(f,"password => %s\n",password); + fputs("dialplan => demo\n",f); + fputs("message => Jingle all the way\n",f); + fputs("rtp-ip => 0.0.0.0\n",f); + fputs("ext-rtp-ip => stun:stun.server.com\n",f); + fputs("exten => 1000\n",f); + fclose(f);*/ + + HKEY hKey=NULL; + DWORD dwLen=0; + TCHAR szKey[255]; + BOOL bRet = 0; + DWORD dwType = 0; + sprintf(szKey,_T("SOFTWARE\\GtalkPhone")); + if(RegCreateKeyEx(HKEY_CURRENT_USER,szKey,0,NULL,REG_OPTION_NON_VOLATILE,KEY_ALL_ACCESS,NULL,&hKey,&dwLen)!=ERROR_SUCCESS) + { + return 1; + } + dwType = REG_SZ; + dwLen = (DWORD)strlen(userid)+1; + if(RegSetValueEx(hKey,_T("USERID"),0,dwType,(LPBYTE)userid,dwLen)!=ERROR_SUCCESS) + { + bRet = 1; + } + dwLen = (DWORD)strlen(password)+1; + if(RegSetValueEx(hKey,_T("PASSWORD"),0,dwType,(LPBYTE)password,dwLen)!=ERROR_SUCCESS) + { + bRet = 1; + } + dwType = REG_DWORD; + dwLen = sizeof(DWORD); + DWORD dwtmp=issave; + if(RegSetValueEx(hKey,_T("ISSAVE"),0,dwType,(LPBYTE)(&dwtmp),dwLen)!=ERROR_SUCCESS) + { + bRet = 1; + } + RegCloseKey(hKey); + return 0; +} +int FreeswitchCall::get_userinfo(char *userid,char *password,int &issave) +{ + /*switch_core_set_globals(); + if(!userid) return 0; + if(!password) return 0; + + switch_config_t cfg; + char *var, *val; + char *cf = "dingaling.conf"; + + + if (!switch_config_open_file(&cfg, cf)) { + //switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "open of %s failed\n", cf); + return 0; + } + + while (switch_config_next_pair(&cfg, &var, &val)) { + if (!strcasecmp(cfg.category, "interface")) { + if (!strcmp(var, "login")) { + char *p=strchr(val, '@'); + if(p) (*p) = '\0'; + switch_copy_string(userid, val, 256); + } else if (!strcmp(var, "password")) { + switch_copy_string(password, val, 256); + } + } + } + + switch_config_close_file(&cfg); +*/ + if(!userid) return 0; + if(!password) return 0; + (*userid) = '\0'; + (*password) = '\0'; + HKEY hKey=NULL; + DWORD dwLen=255; + TCHAR szKey[255]; + LONG lRet = 0; + DWORD dwType =REG_SZ; + sprintf(szKey,_T("SOFTWARE\\GtalkPhone")); + if(RegCreateKeyEx(HKEY_CURRENT_USER,szKey,0,NULL,REG_OPTION_NON_VOLATILE,KEY_ALL_ACCESS,NULL,&hKey,&dwLen)!=ERROR_SUCCESS) + { + return FALSE; + } + lRet = RegQueryValueEx(hKey,_T("USERID"),0,&dwType,(LPBYTE)userid,&dwLen); + lRet = RegQueryValueEx(hKey,_T("USERID"),0,&dwType,(LPBYTE)userid,&dwLen); + lRet = RegQueryValueEx(hKey,_T("PASSWORD"),0,&dwType,(LPBYTE)password,&dwLen); + dwType = REG_DWORD; + dwLen = sizeof(DWORD); + DWORD dwtmp=0; + lRet = RegQueryValueEx(hKey,_T("ISSAVE"),0,&dwType,(LPBYTE)(&dwtmp),&dwLen); + issave = dwtmp; + RegCloseKey(hKey); + return 0; +} +void event_callback(switch_event_t *event) +{ + TRACE("event coming!\n"); + if(event->event_id==SWITCH_EVENT_MODULE_LOAD) + return; + if(mm_event_hwnd!=NULL) + { + SendMessage(mm_event_hwnd,UM_FREESWITCH_EVENT,NULL,(LPARAM)event); + } +} +void get_internet_ip(char *outip) +{ + char szHostName[128]; + + BOOL bPrivateAdr = false; // Private Address area + BOOL bClassA = false; // Class A definition + BOOL bClassB = false; // Class B definition + BOOL bClassC = false; // Class C definition + BOOL bAutoNet = false; // AutoNet definition + CString str; + + if (gethostname(szHostName, 128) == 0 ) + { + // Get host adresses + struct hostent * pHost; + int i; + UINT ipb; + pHost = gethostbyname(szHostName); + + for (i = 0; + pHost!= NULL && pHost->h_addr_list[i]!= NULL; + i++ ) + { + int j; + str=""; + bClassA = bClassB = bClassC = false; + for( j = 0; j < pHost->h_length; j++ ) + { + CString addr; + + if( j > 0 ) str += "."; + ipb = (unsigned int)((unsigned char*)pHost->h_addr_list[i])[j]; + + // Define the IP range for exclusion + if(j==0) + { + if(bClassA = (ipb == 10)) break; // Class A defined + bClassB = (ipb == 172); + bClassC = (ipb == 192); + bAutoNet = (ipb == 169); + } + else if (j==1) + { + // Class B defined + if(bClassB = (bClassB && ipb >= 16 && ipb <= 31)) break; + + // Class C defined + if(bClassC = (bClassC && ipb == 168)) break; + + //AutoNet pasibility defined + if(bAutoNet = (bAutoNet && ipb == 254)) break; + } + + addr.Format("%u", ipb ); + str += addr; + } + // If any address of Private Address + // area has been found bPrivateAdr = true + bPrivateAdr = bPrivateAdr || bClassA || bClassB || bClassC; + + // If any address of Internet Address area + // has been found returns TRUE + if (!bClassA + && !bClassB + && !bClassC + && !bAutoNet + && str != "127.0.0.1" + && !str.IsEmpty()) + { + sprintf(outip,"%u.%u.%u.%u",(unsigned int)((unsigned char*)pHost->h_addr_list[i])[0], + (unsigned int)((unsigned char*)pHost->h_addr_list[i])[1],(unsigned int)((unsigned char*)pHost->h_addr_list[i])[2], + (unsigned int)((unsigned char*)pHost->h_addr_list[i])[3]); + return; + } + } + } +/* + if (bPrivateAdr) + { + // The system has IP address from Private Address + // area,only. Internet from the computer can be accessable + // via Proxy. If user turn on proxy connection flag, the + // function believe Internet accessable. + return bProxyConnection; + }*/ +outip[0] = '\0'; + return ; + +} \ No newline at end of file Added: freeswitch/trunk/gtalkphone/google/HYPERLINK.CPP ============================================================================== --- (empty file) +++ freeswitch/trunk/gtalkphone/google/HYPERLINK.CPP Wed Aug 30 11:21:42 2006 @@ -0,0 +1,428 @@ +// HyperLink.cpp : implementation file +// +// HyperLink static control. Will open the default browser with the given URL +// when the user clicks on the link. +// +// Copyright (C) 1997, 1998 Chris Maunder (chrismaunder@codeguru.com) +// All rights reserved. May not be sold for profit. +// +// Thanks to P�l K. T�nder for auto-size and window caption changes. +// +// "GotoURL" function by Stuart Patterson +// As seen in the August, 1997 Windows Developer's Journal. +// Copyright 1997 by Miller Freeman, Inc. All rights reserved. +// Modified by Chris Maunder to use TCHARs instead of chars. +// +// "Default hand cursor" from Paul DiLascia's Jan 1998 MSJ article. +// + +#include "stdafx.h" +#include "HyperLink.h" + +#ifdef _DEBUG +#define new DEBUG_NEW +#undef THIS_FILE +static char THIS_FILE[] = __FILE__; +#endif + +#define TOOLTIP_ID 1 + +///////////////////////////////////////////////////////////////////////////// +// CHyperLink + +CHyperLink::CHyperLink() +{ + m_hLinkCursor = NULL; // No cursor as yet + m_crLinkColour = RGB( 0, 0, 238); // Blue + m_crVisitedColour = RGB( 85, 26, 139); // Purple + m_crHoverColour = ::GetSysColor(COLOR_HIGHLIGHT); + m_bOverControl = FALSE; // Cursor not yet over control + m_bVisited = FALSE; // Hasn't been visited yet. + m_bUnderline = TRUE; // Underline the link? + m_bAdjustToFit = TRUE; // Resize the window to fit the text? + m_strURL.Empty(); +} + +CHyperLink::~CHyperLink() +{ + m_Font.DeleteObject(); +} + +BEGIN_MESSAGE_MAP(CHyperLink, CStatic) + //{{AFX_MSG_MAP(CHyperLink) + ON_CONTROL_REFLECT(STN_CLICKED, OnClicked) + ON_WM_CTLCOLOR_REFLECT() + ON_WM_SETCURSOR() + ON_WM_MOUSEMOVE() + //}}AFX_MSG_MAP +END_MESSAGE_MAP() + +///////////////////////////////////////////////////////////////////////////// +// CHyperLink message handlers + +BOOL CHyperLink::PreTranslateMessage(MSG* pMsg) +{ + m_ToolTip.RelayEvent(pMsg); + return CStatic::PreTranslateMessage(pMsg); +} + +void CHyperLink::OnClicked() +{ + int result = (int)GotoURL(m_strURL, SW_SHOW); + m_bVisited = (result > HINSTANCE_ERROR); + if (!m_bVisited) { + MessageBeep(MB_ICONEXCLAMATION); // Unable to follow link + ReportError(result); + } else + SetVisited(); // Repaint to show visited colour +} + +HBRUSH CHyperLink::CtlColor(CDC* pDC, UINT nCtlColor) +{ + ASSERT(nCtlColor == CTLCOLOR_STATIC); + + if (m_bOverControl) + pDC->SetTextColor(m_crHoverColour); + else if (m_bVisited) + pDC->SetTextColor(m_crVisitedColour); + else + pDC->SetTextColor(m_crLinkColour); + + // transparent text. + pDC->SetBkMode(TRANSPARENT); + return (HBRUSH)GetStockObject(NULL_BRUSH); +} + +void CHyperLink::OnMouseMove(UINT nFlags, CPoint point) +{ + CStatic::OnMouseMove(nFlags, point); + + if (m_bOverControl) // Cursor is currently over control + { + CRect rect; + GetClientRect(rect); + + if (!rect.PtInRect(point)) + { + m_bOverControl = FALSE; + ReleaseCapture(); + RedrawWindow(); + return; + } + } + else // Cursor has just moved over control + { + m_bOverControl = TRUE; + RedrawWindow(); + SetCapture(); + } +} + +BOOL CHyperLink::OnSetCursor(CWnd* /*pWnd*/, UINT /*nHitTest*/, UINT /*message*/) +{ + if (m_hLinkCursor) + { + ::SetCursor(m_hLinkCursor); + return TRUE; + } + return FALSE; +} + +void CHyperLink::PreSubclassWindow() +{ + // We want to get mouse clicks via STN_CLICKED + DWORD dwStyle = GetStyle(); + ::SetWindowLong(GetSafeHwnd(), GWL_STYLE, dwStyle | SS_NOTIFY); + + // Set the URL as the window text + if (m_strURL.IsEmpty()) + GetWindowText(m_strURL); + + // Check that the window text isn't empty. If it is, set it as the URL. + CString strWndText; + GetWindowText(strWndText); + if (strWndText.IsEmpty()) { + ASSERT(!m_strURL.IsEmpty()); // Window and URL both NULL. DUH! + SetWindowText(m_strURL); + } + + // Create the font + LOGFONT lf; + GetFont()->GetLogFont(&lf); + lf.lfUnderline = m_bUnderline; + m_Font.CreateFontIndirect(&lf); + SetFont(&m_Font); + + PositionWindow(); // Adjust size of window to fit URL if necessary + SetDefaultCursor(); // Try and load up a "hand" cursor + + // Create the tooltip + CRect rect; + GetClientRect(rect); + m_ToolTip.Create(this); + m_ToolTip.AddTool(this, m_strURL, rect, TOOLTIP_ID); + + CStatic::PreSubclassWindow(); +} + +///////////////////////////////////////////////////////////////////////////// +// CHyperLink operations + +void CHyperLink::SetURL(CString strURL) +{ + m_strURL = strURL; + + if (::IsWindow(GetSafeHwnd())) { + PositionWindow(); + m_ToolTip.UpdateTipText(strURL, this, TOOLTIP_ID); + } +} + +CString CHyperLink::GetURL() const +{ + return m_strURL; +} + +void CHyperLink::SetColours(COLORREF crLinkColour, COLORREF crVisitedColour, + COLORREF crHoverColour /* = -1 */) +{ + m_crLinkColour = crLinkColour; + m_crVisitedColour = crVisitedColour; + + if (crHoverColour == -1) + m_crHoverColour = ::GetSysColor(COLOR_HIGHLIGHT); + else + m_crHoverColour = crHoverColour; + + if (::IsWindow(m_hWnd)) + Invalidate(); +} + +COLORREF CHyperLink::GetLinkColour() const +{ + return m_crLinkColour; +} + +COLORREF CHyperLink::GetVisitedColour() const +{ + return m_crVisitedColour; +} + +COLORREF CHyperLink::GetHoverColour() const +{ + return m_crHoverColour; +} + +void CHyperLink::SetVisited(BOOL bVisited /* = TRUE */) +{ + m_bVisited = bVisited; + + if (::IsWindow(GetSafeHwnd())) + Invalidate(); +} + +BOOL CHyperLink::GetVisited() const +{ + return m_bVisited; +} + +void CHyperLink::SetLinkCursor(HCURSOR hCursor) +{ + m_hLinkCursor = hCursor; + if (m_hLinkCursor == NULL) + SetDefaultCursor(); +} + +HCURSOR CHyperLink::GetLinkCursor() const +{ + return m_hLinkCursor; +} + +void CHyperLink::SetUnderline(BOOL bUnderline /* = TRUE */) +{ + m_bUnderline = bUnderline; + + if (::IsWindow(GetSafeHwnd())) + { + LOGFONT lf; + GetFont()->GetLogFont(&lf); + lf.lfUnderline = m_bUnderline; + + m_Font.DeleteObject(); + m_Font.CreateFontIndirect(&lf); + SetFont(&m_Font); + + Invalidate(); + } +} + +BOOL CHyperLink::GetUnderline() const +{ + return m_bUnderline; +} + +void CHyperLink::SetAutoSize(BOOL bAutoSize /* = TRUE */) +{ + m_bAdjustToFit = bAutoSize; + + if (::IsWindow(GetSafeHwnd())) + PositionWindow(); +} + +BOOL CHyperLink::GetAutoSize() const +{ + return m_bAdjustToFit; +} + + +// Move and resize the window so that the window is the same size +// as the hyperlink text. This stops the hyperlink cursor being active +// when it is not directly over the text. If the text is left justified +// then the window is merely shrunk, but if it is centred or right +// justified then the window will have to be moved as well. +// +// Suggested by P�l K. T�nder + +void CHyperLink::PositionWindow() +{ + if (!::IsWindow(GetSafeHwnd()) || !m_bAdjustToFit) + return; + + // Get the current window position + CRect rect; + GetWindowRect(rect); + + CWnd* pParent = GetParent(); + if (pParent) + pParent->ScreenToClient(rect); + + // Get the size of the window text + CString strWndText; + GetWindowText(strWndText); + + CDC* pDC = GetDC(); + CFont* pOldFont = pDC->SelectObject(&m_Font); + CSize Extent = pDC->GetTextExtent(strWndText); + pDC->SelectObject(pOldFont); + ReleaseDC(pDC); + + // Get the text justification via the window style + DWORD dwStyle = GetStyle(); + + // Recalc the window size and position based on the text justification + if (dwStyle & SS_CENTERIMAGE) + rect.DeflateRect(0, (rect.Height() - Extent.cy)/2); + else + rect.bottom = rect.top + Extent.cy; + + if (dwStyle & SS_CENTER) + rect.DeflateRect((rect.Width() - Extent.cx)/2, 0); + else if (dwStyle & SS_RIGHT) + rect.left = rect.right - Extent.cx; + else // SS_LEFT = 0, so we can't test for it explicitly + rect.right = rect.left + Extent.cx; + + // Move the window + SetWindowPos(NULL, rect.left, rect.top, rect.Width(), rect.Height(), SWP_NOZORDER); +} + +///////////////////////////////////////////////////////////////////////////// +// CHyperLink implementation + +// The following appeared in Paul DiLascia's Jan 1998 MSJ articles. +// It loads a "hand" cursor from the winhlp32.exe module +void CHyperLink::SetDefaultCursor() +{ + if (m_hLinkCursor == NULL) // No cursor handle - load our own + { + // Get the windows directory + CString strWndDir; + GetWindowsDirectory(strWndDir.GetBuffer(MAX_PATH), MAX_PATH); + strWndDir.ReleaseBuffer(); + + strWndDir += _T("\\winhlp32.exe"); + // This retrieves cursor #106 from winhlp32.exe, which is a hand pointer + HMODULE hModule = LoadLibrary(strWndDir); + if (hModule) { + HCURSOR hHandCursor = ::LoadCursor(hModule, MAKEINTRESOURCE(106)); + if (hHandCursor) + m_hLinkCursor = CopyCursor(hHandCursor); + } + FreeLibrary(hModule); + } +} + +LONG CHyperLink::GetRegKey(HKEY key, LPCTSTR subkey, LPTSTR retdata) +{ + HKEY hkey; + LONG retval = RegOpenKeyEx(key, subkey, 0, KEY_QUERY_VALUE, &hkey); + + if (retval == ERROR_SUCCESS) { + long datasize = MAX_PATH; + TCHAR data[MAX_PATH]; + RegQueryValue(hkey, NULL, data, &datasize); + lstrcpy(retdata,data); + RegCloseKey(hkey); + } + + return retval; +} + +void CHyperLink::ReportError(int nError) +{ + /*CString str; + switch (nError) { + case 0: str = _T("The operating system is out\nof memory or resources."; break; + case SE_ERR_PNF: str = "The specified path was not found."; break; + case SE_ERR_FNF: str = "The specified file was not found."; break; + case ERROR_BAD_FORMAT: str = "The .EXE file is invalid\n(non-Win32 .EXE or error in .EXE image)."; break; + case SE_ERR_ACCESSDENIED: str = "The operating system denied\naccess to the specified file."; break; + case SE_ERR_ASSOCINCOMPLETE: str = "The filename association is\nincomplete or invalid."; break; + case SE_ERR_DDEBUSY: str = "The DDE transaction could not\nbe completed because other DDE transactions\nwere being processed."; break; + case SE_ERR_DDEFAIL: str = "The DDE transaction failed."; break; + case SE_ERR_DDETIMEOUT: str = "The DDE transaction could not\nbe completed because the request timed out."; break; + case SE_ERR_DLLNOTFOUND: str = "The specified dynamic-link library was not found."; break; + case SE_ERR_NOASSOC: str = "There is no application associated\nwith the given filename extension."; break; + case SE_ERR_OOM: str = "There was not enough memory to complete the operation."; break; + case SE_ERR_SHARE: str = "A sharing violation occurred. "; + default: str.Format("Unknown Error (%d) occurred.", nError); break; + } + str = "Unable to open hyperlink:\n\n" + str; + AfxMessageBox(str, MB_ICONEXCLAMATION | MB_OK);*/ +} + +HINSTANCE CHyperLink::GotoURL(LPCTSTR url, int showcmd) +{ + /*TCHAR key[MAX_PATH + MAX_PATH]; + + // First try ShellExecute() + HINSTANCE result = ShellExecute(NULL, _T("open"), url, NULL,NULL, showcmd); + + // If it failed, get the .htm regkey and lookup the program + if ((UINT)result <= HINSTANCE_ERROR) { + + if (GetRegKey(HKEY_CLASSES_ROOT, _T(".htm"), key) == ERROR_SUCCESS) { + lstrcat(key, _T("\\shell\\open\\command")); + + if (GetRegKey(HKEY_CLASSES_ROOT,key,key) == ERROR_SUCCESS) { + TCHAR *pos; + pos = _tcsstr(key, _T("\"%1\"")); + if (pos == NULL) { // No quotes found + pos = strstr(key, _T("%1")); // Check for %1, without quotes + if (pos == NULL) // No parameter at all... + pos = key+lstrlen(key)-1; + else + *pos = '\0'; // Remove the parameter + } + else + *pos = '\0'; // Remove the parameter + + lstrcat(pos, _T(" ")); + lstrcat(pos, url); + result = (HINSTANCE) WinExec(key,showcmd); + } + } + } +*/ + return NULL; +} Added: freeswitch/trunk/gtalkphone/google/HYPERLINK.H ============================================================================== --- (empty file) +++ freeswitch/trunk/gtalkphone/google/HYPERLINK.H Wed Aug 30 11:21:42 2006 @@ -0,0 +1,100 @@ +// HyperLink.h : header file +// +// +// HyperLink static control. Will open the default browser with the given URL +// when the user clicks on the link. +// +// Copyright Chris Maunder, 1997, 1998 +// Feel free to use and distribute. May not be sold for profit. + +#if !defined(AFX_HYPERLINK_H__D1625061_574B_11D1_ABBA_00A0243D1382__INCLUDED_) +#define AFX_HYPERLINK_H__D1625061_574B_11D1_ABBA_00A0243D1382__INCLUDED_ + +#if _MSC_VER >= 1000 +#pragma once +#endif // _MSC_VER >= 1000 + +///////////////////////////////////////////////////////////////////////////// +// CHyperLink window + +class CHyperLink : public CStatic +{ +// Construction/destruction +public: + CHyperLink(); + virtual ~CHyperLink(); + +// Attributes +public: + +// Operations +public: + + void SetURL(CString strURL); + CString GetURL() const; + + void SetColours(COLORREF crLinkColour, COLORREF crVisitedColour, + COLORREF crHoverColour = -1); + COLORREF GetLinkColour() const; + COLORREF GetVisitedColour() const; + COLORREF GetHoverColour() const; + + void SetVisited(BOOL bVisited = TRUE); + BOOL GetVisited() const; + + void SetLinkCursor(HCURSOR hCursor); + HCURSOR GetLinkCursor() const; + + void SetUnderline(BOOL bUnderline = TRUE); + BOOL GetUnderline() const; + + void SetAutoSize(BOOL bAutoSize = TRUE); + BOOL GetAutoSize() const; + +// Overrides + // ClassWizard generated virtual function overrides + //{{AFX_VIRTUAL(CHyperLink) + public: + virtual BOOL PreTranslateMessage(MSG* pMsg); + protected: + virtual void PreSubclassWindow(); + //}}AFX_VIRTUAL + +// Implementation +protected: + HINSTANCE GotoURL(LPCTSTR url, int showcmd); + void ReportError(int nError); + LONG GetRegKey(HKEY key, LPCTSTR subkey, LPTSTR retdata); + void PositionWindow(); + void SetDefaultCursor(); + +// Protected attributes +protected: + COLORREF m_crLinkColour, m_crVisitedColour; // Hyperlink colours + COLORREF m_crHoverColour; // Hover colour + BOOL m_bOverControl; // cursor over control? + BOOL m_bVisited; // Has it been visited? + BOOL m_bUnderline; // underline hyperlink? + BOOL m_bAdjustToFit; // Adjust window size to fit text? + CString m_strURL; // hyperlink URL + CFont m_Font; // Underline font if necessary + HCURSOR m_hLinkCursor; // Cursor for hyperlink + CToolTipCtrl m_ToolTip; // The tooltip + + // Generated message map functions +protected: + //{{AFX_MSG(CHyperLink) + afx_msg HBRUSH CtlColor(CDC* pDC, UINT nCtlColor); + afx_msg BOOL OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message); + afx_msg void OnMouseMove(UINT nFlags, CPoint point); + //}}AFX_MSG + afx_msg void OnClicked(); + DECLARE_MESSAGE_MAP() +}; + +///////////////////////////////////////////////////////////////////////////// + +//{{AFX_INSERT_LOCATION}} +// Microsoft Developer Studio will insert additional declarations immediately before the previous line. + +#endif // !defined(AFX_HYPERLINK_H__D1625061_574B_11D1_ABBA_00A0243D1382__INCLUDED_) Added: freeswitch/trunk/gtalkphone/google/StdAfx.cpp ============================================================================== --- (empty file) +++ freeswitch/trunk/gtalkphone/google/StdAfx.cpp Wed Aug 30 11:21:42 2006 @@ -0,0 +1,8 @@ +// stdafx.cpp : source file that includes just the standard includes +// test.pch will be the pre-compiled header +// stdafx.obj will contain the pre-compiled type information + +#include "stdafx.h" + + + Added: freeswitch/trunk/gtalkphone/google/StdAfx.h ============================================================================== --- (empty file) +++ freeswitch/trunk/gtalkphone/google/StdAfx.h Wed Aug 30 11:21:42 2006 @@ -0,0 +1,27 @@ +// stdafx.h : include file for standard system include files, +// or project specific include files that are used frequently, but +// are changed infrequently +// + +#if !defined(AFX_STDAFX_H__A2E12E3F_D392_4C11_BF27_F3BE2916C6C2__INCLUDED_) +#define AFX_STDAFX_H__A2E12E3F_D392_4C11_BF27_F3BE2916C6C2__INCLUDED_ + +#if _MSC_VER > 1000 +#pragma once +#endif // _MSC_VER > 1000 + +#define VC_EXTRALEAN // Exclude rarely-used stuff from Windows headers + +#include <afxwin.h> // MFC core and standard components +#include <afxext.h> // MFC extensions +#include <afxdisp.h> // MFC Automation classes +#include <afxdtctl.h> // MFC support for Internet Explorer 4 Common Controls +#ifndef _AFX_NO_AFXCMN_SUPPORT +#include <afxcmn.h> // MFC support for Windows Common Controls +#endif // _AFX_NO_AFXCMN_SUPPORT + + +//{{AFX_INSERT_LOCATION}} +// Microsoft Visual C++ will insert additional declarations immediately before the previous line. + +#endif // !defined(AFX_STDAFX_H__A2E12E3F_D392_4C11_BF27_F3BE2916C6C2__INCLUDED_) Added: freeswitch/trunk/gtalkphone/google/chatButton_down.bmp ============================================================================== Binary file. No diff available. Added: freeswitch/trunk/gtalkphone/google/chatButton_up.bmp ============================================================================== Binary file. No diff available. Added: freeswitch/trunk/gtalkphone/google/cursor1.cur ============================================================================== Binary file. No diff available. Added: freeswitch/trunk/gtalkphone/google/google.aps ============================================================================== Binary file. No diff available. Added: freeswitch/trunk/gtalkphone/google/google.cpp ============================================================================== --- (empty file) +++ freeswitch/trunk/gtalkphone/google/google.cpp Wed Aug 30 11:21:42 2006 @@ -0,0 +1,1481 @@ +#ifdef _MSC_VER +#pragma comment(lib, "kernel32.lib") +#pragma comment(lib, "user32.lib") +#pragma comment(lib, "gdi32.lib") +#pragma comment(lib, "shell32.lib") +#endif + +#include "google2.h" +#include "tchar.h" +#include "stdio.h" +#include <time.h> +#include <sys/types.h> +#include <sys/timeb.h> + +#include <stdlib.h> +#include "resource.h" + +void fDebugWriteln(TCHAR *vch); +void fDebugWritelnA(CHAR *vch); +HANDLE hfMutex = NULL; +HINSTANCE g_hThisDll; +HANDLE hFileMap; +BOOL bHookRichEdit1; +BOOL bGetText; +const int WM_MYMESSAGE2 = WM_APP + 2; +#define UM_IMSETTING WM_USER + 101 +static void DeleteAllItem(Str_hwndList *ptr); +int APIENTRY DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved) +{ + switch(dwReason) + { + case DLL_PROCESS_ATTACH: + hFileMap = CreateFileMapping(INVALID_HANDLE_VALUE,NULL,PAGE_READWRITE,0,sizeof(Str_Head)+MAX_MESSAGE_LENGTH*sizeof(TCHAR),_T("google")); + + hfMutex = CreateMutex(NULL, FALSE, _T("debug")); + g_hThisDll = hInstance; + pfnWndProc = NULL; + //bHookRichEdit1 = FALSE; + break; + case DLL_PROCESS_DETACH: + { + if(pfnWndProc) + { + + HANDLE m_hFileMap; + LPSTR m_mData; + m_hFileMap = OpenFileMapping(FILE_MAP_READ|FILE_MAP_WRITE,FALSE,_T("google")); + m_mData = (LPSTR)MapViewOfFile(m_hFileMap,FILE_MAP_READ|FILE_MAP_WRITE,0,0,0); + if(m_hFileMap==NULL) return 0; + if(m_mData==NULL) + { + CloseHandle(m_hFileMap); + return 0; + } + SendMessage(((Str_Head*)m_mData)->hwndPanel,WM_CLOSE,NULL,NULL); + SendMessage(((Str_Head*)m_mData)->hwndPhone,WM_CLOSE,NULL,NULL); + Str_hwndList *ptr = ((Str_Head*)m_mData)->chatViewList; + ((Str_Head*)m_mData)->chatViewList = NULL; + DeleteAllItem(ptr); + UnmapViewOfFile(m_mData); + CloseHandle(m_hFileMap); + if(IsWindowUnicode(g_hwndToMineWindow)) + { +#pragma warning(push) +#pragma warning(disable:4244 4312) + SetWindowLongPtrW(g_hwndToMineWindow, GWL_WNDPROC, + (LONG_PTR)(WNDPROC)pfnWndProc); +#pragma warning(pop) + } + else + { +#pragma warning(push) +#pragma warning(disable:4244 4312) + SetWindowLongPtrA(g_hwndToMineWindow, GWL_WNDPROC, + (LONG_PTR)(WNDPROC)pfnWndProc); +#pragma warning(pop) + } + } + if(pfnListViewWndProc) + { + if(IsWindowUnicode(g_hwndListViewWindow)) + { +#pragma warning(push) +#pragma warning(disable:4244 4312) + SetWindowLongPtrW(g_hwndListViewWindow, GWL_WNDPROC, + (LONG_PTR)(WNDPROC)pfnListViewWndProc); +#pragma warning(pop) + } + else + { +#pragma warning(push) +#pragma warning(disable:4244 4312) + SetWindowLongPtrA(g_hwndListViewWindow, GWL_WNDPROC, + (LONG_PTR)(WNDPROC)pfnListViewWndProc); +#pragma warning(pop) + } + } + if (NULL != hfMutex) + { + CloseHandle(hfMutex); + } + if(hFileMap!=NULL) + CloseHandle(hFileMap); + ShellDll_Unhook(); + } + } + +return TRUE; +} +void DeleteAllItem(Str_hwndList *ptr) +{ + if(ptr==NULL) return; + DeleteAllItem(ptr->next); + ptr->next = NULL; + SendMessage(ptr->childhwnd,WM_CLOSE,NULL,NULL); + + /*if(IsWindowUnicode(ptr->parenthwnd)) + { + SetWindowLongPtrW(ptr->parenthwnd, GWL_WNDPROC, + (LPARAM)(WNDPROC)ptr->proc); + } + else + { + SetWindowLongPtrA(ptr->parenthwnd, GWL_WNDPROC, + (LPARAM)(WNDPROC)ptr->proc); + } + delete ptr; */ +} + +// Sets up a hook to detect when Google starts +void APIENTRY ShellDll_Hook() +{ + g_hShellHook = SetWindowsHookEx(WH_CBT, ShellDll_MainHook, g_hThisDll, 0); +} + + +void APIENTRY ShellDll_Unhook() +{ + if(g_hShellHook != NULL) + UnhookWindowsHookEx(g_hShellHook); +} + + +LRESULT CALLBACK ShellDll_MainHook(int nCode, WPARAM wParam, LPARAM lParam) +{ + TCHAR szClass[MAX_PATH] = {0}; + + BOOL doneonce = false; + + if(nCode < 0) + return CallNextHookEx(g_hShellHook, nCode, wParam, lParam); + + // Call filter everytime a new window is created + if(nCode == HCBT_CREATEWND) + { + // Get the HWND of the window + HWND hwndToNewWindow = reinterpret_cast<HWND>(wParam); + GetClassName(hwndToNewWindow, szClass, MAX_PATH); + //fDebugWriteln(szClass); + + // Compare class name with Google's class name + if(!lstrcmpi(szClass, _T("Main View"))) + { + //add main button + HANDLE m_hFileMap; + LPSTR m_mData; + m_hFileMap = OpenFileMapping(FILE_MAP_READ|FILE_MAP_WRITE,FALSE,_T("google")); + m_mData = (LPSTR)MapViewOfFile(m_hFileMap,FILE_MAP_READ|FILE_MAP_WRITE,0,0,0); + if(m_hFileMap==NULL) return 0; + if(m_mData==NULL) + { + CloseHandle(m_hFileMap); + return 0; + } + ((Str_Head*)m_mData)->hInstance=g_hThisDll; + InitClass(); + HWND hWnd = CreateDialog(g_hThisDll,MAKEINTRESOURCE( IDD_PANEL ),hwndToNewWindow,(DLGPROC)PanelProc); + ((Str_Head*)m_mData)->hwndPanel = hWnd; + + RECT rect; + GetWindowRect(hwndToNewWindow,&rect); + MoveWindow(hWnd,rect.right-rect.left - 120,40,110, + 30,TRUE); + ShowWindow( hWnd, SW_NORMAL ); + //add subclass window + + WNDCLASSEX wcex; + + wcex.cbSize = sizeof(WNDCLASSEX); + + wcex.style = CS_HREDRAW | CS_VREDRAW; + wcex.lpfnWndProc = (WNDPROC)ChildProc; + wcex.cbClsExtra = 0; + wcex.cbWndExtra = 0; + wcex.hInstance = g_hThisDll; + wcex.hIcon = 0; + wcex.hCursor = LoadCursor(NULL, IDC_ARROW); + wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1); + wcex.lpszMenuName = 0; + wcex.lpszClassName = _T("PhoneClass"); + wcex.hIconSm = 0; + + + RegisterClassEx(&wcex); + + HWND hchildwnd=NULL; + TCHAR cBuffer[0x100]; + memset(cBuffer,0,sizeof(cBuffer)); + hchildwnd = CreateWindow(_T("PhoneClass"),_T(""),WS_CHILD ,0,0,0,0,hwndToNewWindow,NULL,g_hThisDll,NULL); + ((Str_Head*)m_mData)->hwndPhone = hchildwnd; + UnmapViewOfFile(m_mData); + CloseHandle(m_hFileMap); + + + } + /*else if(!lstrcmpi(szClass, _T("Chat View"))) + { + //add subclass window + + HANDLE m_hFileMap; + LPSTR m_mData; + m_hFileMap = OpenFileMapping(FILE_MAP_READ|FILE_MAP_WRITE,FALSE,_T("google")); + m_mData = (LPSTR)MapViewOfFile(m_hFileMap,FILE_MAP_READ|FILE_MAP_WRITE,0,0,0); + if(m_hFileMap==NULL) return 0; + if(m_mData==NULL) + { + CloseHandle(m_hFileMap); + return 0; + } + Str_hwndList *plist = new Str_hwndList; + memset((void*)plist,0,sizeof(Str_hwndList)); + //plist->next = NULL; + //plist->proc = NULL; + plist->parenthwnd = hwndToNewWindow; + Str_hwndList *ptr = ((Str_Head*)m_mData)->chatViewList; + if(ptr==NULL) + { + ((Str_Head*)m_mData)->chatViewList = plist; + } + else + { + while(ptr->next!=NULL) + { + ptr = ptr->next; + } + ptr->next = plist; + } + + WNDCLASSEX wcex; + + wcex.cbSize = sizeof(WNDCLASSEX); + + wcex.style = CS_HREDRAW | CS_VREDRAW; + wcex.lpfnWndProc = (WNDPROC)ChatChildProc; + wcex.cbClsExtra = 0; + wcex.cbWndExtra = 0; + wcex.hInstance = g_hThisDll; + wcex.hIcon = 0; + wcex.hCursor = LoadCursor(NULL, IDC_ARROW); + wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1); + wcex.lpszMenuName = 0; + wcex.lpszClassName = _T("ChatAgent"); + wcex.hIconSm = 0; + + + RegisterClassEx(&wcex); + + HWND hchildwnd=NULL; + hchildwnd = CreateWindow(_T("ChatAgent"),_T(""),WS_CHILD ,0,0,0,0,hwndToNewWindow,NULL,g_hThisDll,NULL); + plist->childhwnd = hchildwnd; + UnmapViewOfFile(m_mData); + CloseHandle(m_hFileMap); + }*/ + } + + return CallNextHookEx(NULL, nCode, wParam, lParam); +} + +//Google Subclass wndproc +LRESULT WINAPI Google_SubClassWndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) +{ + LRESULT lResult = 0; + /*HWND hchildwnd=NULL; + TCHAR cBuffer[0x100]; + memset(cBuffer,0,sizeof(cBuffer)); + swprintf(cBuffer, _T(">>>----> Google_SubClassWndProc : uMsg = %x wParam=%x lParam=%x"), uMsg,wParam,lParam); + fDebugWriteln(cBuffer);*/ + switch(uMsg) + { + case WM_ERASEBKGND: + case WM_SIZE: + { + RECT rect; + RECT prect; + GetWindowRect(hwnd,&rect); + + HANDLE m_hFileMap; + LPSTR m_mData; + m_hFileMap = OpenFileMapping(FILE_MAP_READ|FILE_MAP_WRITE,FALSE,_T("google")); + m_mData = (LPSTR)MapViewOfFile(m_hFileMap,FILE_MAP_READ|FILE_MAP_WRITE,0,0,0); + if(m_hFileMap==NULL) return 0; + if(m_mData==NULL) + { + CloseHandle(m_hFileMap); + return 0; + } + HWND hPanel = ((Str_Head*)m_mData)->hwndPanel; + UnmapViewOfFile(m_mData); + CloseHandle(m_hFileMap); + GetWindowRect(hPanel,&prect); + MoveWindow(hPanel,rect.right-rect.left - 120,50,110, + 30,TRUE); + } + break; + default: + break; + } + + // Call previous window procedure + if(IsWindowUnicode(hwnd)) + { + lResult = CallWindowProcW(pfnWndProc, hwnd, uMsg, wParam, lParam); + } + else + { + lResult = CallWindowProcA(pfnWndProc, hwnd, uMsg, wParam, lParam); + } + + return lResult; +} + +BOOL CALLBACK EnumListChildProc( + HWND hwnd, // handle to child window + LPARAM lParam // application-defined value +) +{ + TCHAR szClass[MAX_PATH] = {0}; + GetClassName(hwnd, szClass, MAX_PATH); + //AfxWnd42 +// Edit + fDebugWriteln(_T("EnumListChildProc--->")); + fDebugWriteln(szClass); + + /*if(lstrcmpi(szClass, _T("Contact List View"))==0) + { + //g_hwndToRichEditWindow1 = GetWindow(hwnd,GW_CHILD); + g_hwndListViewWindow = hwnd; + if(IsWindowUnicode(g_hwndListViewWindow)) + { + //Set new window procedure to MSN's class + pfnListViewWndProc = (WNDPROC)SetWindowLongPtrW(g_hwndListViewWindow, GWL_WNDPROC, + (LPARAM)(WNDPROC)Google_ListViewWndProc); + } + else + { + //Set new window procedure to MSN's class + pfnListViewWndProc = (WNDPROC)SetWindowLongPtrA(g_hwndListViewWindow, GWL_WNDPROC, + (LPARAM)(WNDPROC)Google_ListViewWndProc); + } + } */ + return TRUE; +} +LRESULT WINAPI Google_ListViewWndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) +{ + LRESULT lResult = 0; + HWND hchildwnd=NULL; + /*TCHAR cBuffer[0x100]; + memset(cBuffer,0,sizeof(cBuffer)); + swprintf(cBuffer, _T(">>>----> Google_ListViewWndProc : uMsg = %x wParam=%x lParam=%x"), uMsg,wParam,lParam); + fDebugWriteln(cBuffer);*/ + switch(uMsg) + { + case WM_NCCREATE: + //PostMessage(hwnd,WM_MYMESSAGE2,NULL,NULL); + break; + case WM_MYMESSAGE2: + case WM_TIMER: + ///EnumChildWindows(hwnd,EnumListChildProc,0); + break; + case WM_ERASEBKGND: + case WM_SIZE: + break; + default: + break; + } + + // Call previous window procedure + if(IsWindowUnicode(hwnd)) + { + lResult = CallWindowProcW(pfnListViewWndProc, hwnd, uMsg, wParam, lParam); + } + else + { + lResult = CallWindowProcA(pfnListViewWndProc, hwnd, uMsg, wParam, lParam); + } + + return lResult; +} + +LRESULT WINAPI DailPanelProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) +{ + LRESULT lResult = 0; + TCHAR cBuffer[0x100]; + memset(cBuffer,0,sizeof(cBuffer)); + swprintf(cBuffer,0x100, _T(">>>----> DailPanelProc : uMsg = %x wParam=%x lParam=%x"), uMsg,wParam,lParam); + fDebugWriteln(cBuffer); + switch(uMsg) + { + case WM_NCCREATE: + break; + case WM_MYMESSAGE2: + break; + case WM_COMMAND: + { + GetDlgItemText(hwnd,IDC_DAILNUM,cBuffer,0x100); + int num = LOWORD(wParam) - 300; + if((num>=0)&&(num<=9)) + { + int len = (int)wcslen(cBuffer); + cBuffer[len] = (TCHAR)(num+0x30); + cBuffer[len+1] = 0; + SetDlgItemText(hwnd,IDC_DAILNUM,cBuffer); + } + else if(num==10) + { + int len = (int)wcslen(cBuffer); + cBuffer[len] = _T('*'); + cBuffer[len+1] = 0; + SetDlgItemText(hwnd,IDC_DAILNUM,cBuffer); + } + else if(num==11) + { + int len = (int)wcslen(cBuffer); + cBuffer[len] = _T('#'); + cBuffer[len+1] = 0; + SetDlgItemText(hwnd,IDC_DAILNUM,cBuffer); + } + else if(num==20) + { + HANDLE m_hFileMap; + LPSTR m_mData; + m_hFileMap = OpenFileMapping(FILE_MAP_READ|FILE_MAP_WRITE,FALSE,_T("google")); + m_mData = (LPSTR)MapViewOfFile(m_hFileMap,FILE_MAP_READ|FILE_MAP_WRITE,0,0,0); + if(m_hFileMap==NULL) return 0; + if(m_mData==NULL) + { + CloseHandle(m_hFileMap); + return 0; + } + Str_hwndList *hwndList = ((Str_Head*)m_mData)->chatViewList; + if(hwndList!=NULL) + { + while(hwndList) + { + if(hwndList->dailpanelhwnd==hwnd) + break; + else + hwndList = hwndList->next; + } + } + SetWindowText(hwndList->redithwnd,cBuffer); + SendMessage(hwndList->redithwnd,WM_KEYDOWN,0x0d,0xe0001); + SendMessage(hwndList->redithwnd,WM_KEYUP,0x0d,0xc00e0001); + SendMessage(hwndList->redithwnd,WM_CHAR,0x0d,0xc00e0001); + UnmapViewOfFile(m_mData); + CloseHandle(m_hFileMap); + } + else if(num==21) + { + int len = (int)wcslen(cBuffer); + cBuffer[len-1] = 0; + SetDlgItemText(hwnd,IDC_DAILNUM,cBuffer); + } + + + } + break; + case WM_TIMER: + break; + case WM_SIZE: + { + HWND hPanel = GetDlgItem(hwnd, IDC_DAILPANEL); + RECT rect; + GetWindowRect(hwnd,&rect); + MoveWindow(hPanel,0,0,rect.right - rect.left ,rect.bottom - rect.top,TRUE); + } + break; + //case WM_CTLCOLORBTN: + case WM_CTLCOLORSTATIC: + case WM_CTLCOLORDLG: + { + HBRUSH brush=CreateSolidBrush(RGB(255,255,255)); + return (LRESULT)brush; + } + break; + case WM_PAINT: + + { + /*PAINTSTRUCT ps; + RECT rc; + HDC hdc1; + hdc1=BeginPaint(hwnd,&ps); + GetClientRect(hwnd,&rc); + + HBRUSH brush=CreateSolidBrush(RGB(255,255,255)); + HBRUSH oldbrush =(HBRUSH)SelectObject(hdc1,brush); + Rectangle(hdc1,rc.left-1, rc.top-1, rc.right+2, rc.bottom+2); + SelectObject(hdc1,oldbrush); + EndPaint(hwnd,&ps);*/ + + } + break; + case WM_LBUTTONDBLCLK: + break; + case WM_LBUTTONDOWN: + break; + case WM_DESTROY: + break; + default: + break; + } + + return DefWindowProc(hwnd, uMsg,wParam,lParam); +} +LRESULT WINAPI Google_ChatViewWndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) +{ + LRESULT lResult = 0; + /*HWND hchildwnd=NULL; + TCHAR cBuffer[0x100]; + memset(cBuffer,0,sizeof(cBuffer)); + swprintf(cBuffer, _T(">>>----> Google_ChatViewWndProc : uMsg = %x wParam=%x lParam=%x"), uMsg,wParam,lParam); + fDebugWriteln(cBuffer);*/ +#pragma warning(push) +#pragma warning(disable:4244 4312) + WNDPROC proc=(WNDPROC)GetWindowLongPtr(hwnd,GWL_USERDATA); +#pragma warning(pop) + switch(uMsg) + { + case WM_MYMESSAGE2: + { + //�����Ӵ��� + HANDLE m_hFileMap; + LPSTR m_mData; + m_hFileMap = OpenFileMapping(FILE_MAP_READ|FILE_MAP_WRITE,FALSE,_T("google")); + m_mData = (LPSTR)MapViewOfFile(m_hFileMap,FILE_MAP_READ|FILE_MAP_WRITE,0,0,0); + if(m_hFileMap==NULL) return 0; + if(m_mData==NULL) + { + CloseHandle(m_hFileMap); + return 0; + } + Str_hwndList *hwndList = ((Str_Head*)m_mData)->chatViewList; + if(hwndList!=NULL) + { + while(hwndList) + { + if(hwndList->parenthwnd==hwnd) + break; + else + hwndList = hwndList->next; + } + } + WNDCLASSEX wcex; + + wcex.cbSize = sizeof(WNDCLASSEX); + + wcex.style = CS_HREDRAW|CS_VREDRAW|CS_GLOBALCLASS|CS_PARENTDC; + wcex.lpfnWndProc = (WNDPROC)ChildProc; + wcex.cbClsExtra = 0; + wcex.cbWndExtra = sizeof(void*); + wcex.hInstance = ((Str_Head*)m_mData)->hInstance; + wcex.hIcon = 0; + wcex.hCursor = NULL; + wcex.hbrBackground = CreateSolidBrush(RGB(255, 255, 255)) ; + wcex.lpszMenuName = 0; + wcex.lpszClassName = _T("DialPanel"); + wcex.hIconSm = 0; + + + RegisterClassEx(&wcex); + + hwndList->dailpanelhwnd = CreateDialog(((Str_Head*)m_mData)->hInstance,MAKEINTRESOURCE( IDD_DIALPANEL ),hwnd,(DLGPROC)DailPanelProc); + + + RECT rect; + GetWindowRect(hwnd,&rect); + MoveWindow(hwndList->dailpanelhwnd,1,53,rect.right - rect.left-2 ,rect.bottom - rect.top -54-40,TRUE); + ShowWindow( hwndList->dailpanelhwnd, SW_NORMAL ); + + UnmapViewOfFile(m_mData); + CloseHandle(m_hFileMap); + } + break; + case WM_ERASEBKGND: + case WM_SIZE: + + { + HANDLE m_hFileMap; + LPSTR m_mData; + m_hFileMap = OpenFileMapping(FILE_MAP_READ|FILE_MAP_WRITE,FALSE,_T("google")); + m_mData = (LPSTR)MapViewOfFile(m_hFileMap,FILE_MAP_READ|FILE_MAP_WRITE,0,0,0); + if(m_hFileMap==NULL) return 0; + if(m_mData==NULL) + { + CloseHandle(m_hFileMap); + return 0; + } + Str_hwndList *hwndList = ((Str_Head*)m_mData)->chatViewList; + if(hwndList!=NULL) + { + while(hwndList) + { + if(hwndList->parenthwnd==hwnd) + break; + else + hwndList = hwndList->next; + } + } + //ShowWindow(hwndList->redithwnd,SW_HIDE); + ShowWindow(hwndList->redithwnd2,SW_HIDE); + ShowWindow(hwndList->iehwnd,SW_HIDE); + UnmapViewOfFile(m_mData); + CloseHandle(m_hFileMap); + } + + break; + case WM_MOVE: + case WM_ACTIVATE: + case WM_SHOWWINDOW: + { + HANDLE m_hFileMap; + LPSTR m_mData; + m_hFileMap = OpenFileMapping(FILE_MAP_READ|FILE_MAP_WRITE,FALSE,_T("google")); + m_mData = (LPSTR)MapViewOfFile(m_hFileMap,FILE_MAP_READ|FILE_MAP_WRITE,0,0,0); + if(m_hFileMap==NULL) return 0; + if(m_mData==NULL) + { + CloseHandle(m_hFileMap); + return 0; + } + Str_hwndList *hwndList = ((Str_Head*)m_mData)->chatViewList; + if(hwndList!=NULL) + { + while(hwndList) + { + if(hwndList->parenthwnd==hwnd) + break; + else + hwndList = hwndList->next; + } + } + //ShowWindow(hwndList->redithwnd,SW_HIDE); + ShowWindow(hwndList->redithwnd2,SW_HIDE); + ShowWindow(hwndList->iehwnd,SW_HIDE); + UnmapViewOfFile(m_mData); + CloseHandle(m_hFileMap); + } + + //return lResult; + break; + case WM_PAINT: + + { + HANDLE m_hFileMap; + LPSTR m_mData; + m_hFileMap = OpenFileMapping(FILE_MAP_READ|FILE_MAP_WRITE,FALSE,_T("google")); + m_mData = (LPSTR)MapViewOfFile(m_hFileMap,FILE_MAP_READ|FILE_MAP_WRITE,0,0,0); + if(m_hFileMap==NULL) return 0; + if(m_mData==NULL) + { + CloseHandle(m_hFileMap); + return 0; + } + Str_hwndList *hwndList = ((Str_Head*)m_mData)->chatViewList; + if(hwndList!=NULL) + { + while(hwndList) + { + if(hwndList->parenthwnd==hwnd) + break; + else + hwndList = hwndList->next; + } + } + RECT rect; + GetWindowRect(hwnd,&rect); + MoveWindow(hwndList->dailpanelhwnd,1,53,rect.right - rect.left-2 ,rect.bottom - rect.top -54-40,TRUE); + UnmapViewOfFile(m_mData); + CloseHandle(m_hFileMap); + } + break; + case WM_DESTROY: + default: + break; + } +/*HANDLE m_hFileMap; + LPSTR m_mData; + m_hFileMap = OpenFileMapping(FILE_MAP_READ|FILE_MAP_WRITE,FALSE,_T("google")); + m_mData = (LPSTR)MapViewOfFile(m_hFileMap,FILE_MAP_READ|FILE_MAP_WRITE,0,0,0); + if(m_hFileMap==NULL) return 0; + if(m_mData==NULL) + { + CloseHandle(m_hFileMap); + return 0; + } + HWND hparent = hwnd; + Str_hwndList *hwndList = ((Str_Head*)m_mData)->chatViewList; + while(hwndList) + { + if(hwndList->parenthwnd==hparent) + break; + else + hwndList = hwndList->next; + }*/ + // Call previous window procedure + if(IsWindowUnicode(hwnd)) + { + lResult = CallWindowProcW(proc, hwnd, uMsg, wParam, lParam); + } + else + { + lResult = CallWindowProcA(proc, hwnd, uMsg, wParam, lParam); + } + /*UnmapViewOfFile(m_mData); + CloseHandle(m_hFileMap);*/ + + + + return lResult; +} +BOOL CALLBACK EnumChildProc( + HWND hwnd, // handle to child window + LPARAM lParam // application-defined value +) +{ + TCHAR szClass[MAX_PATH] = {0}; + GetClassName(hwnd, szClass, MAX_PATH); + //AfxWnd42 +// Edit + fDebugWriteln(szClass); + + if(lstrcmpi(szClass, _T("Contact List View"))==0) + { + //g_hwndToRichEditWindow1 = GetWindow(hwnd,GW_CHILD); + g_hwndListViewWindow = hwnd; + if(IsWindowUnicode(g_hwndListViewWindow)) + { + //Set new window procedure to MSN's class +#pragma warning(push) +#pragma warning(disable:4244 4312) + pfnListViewWndProc = (WNDPROC)SetWindowLongPtrW(g_hwndListViewWindow, GWL_WNDPROC, + (LONG_PTR )(WNDPROC)Google_ListViewWndProc); +#pragma warning(pop) + } + else + { +#pragma warning(push) +#pragma warning(disable:4244 4312) + //Set new window procedure to MSN's class + pfnListViewWndProc = (WNDPROC) SetWindowLongPtrA(g_hwndListViewWindow, GWL_WNDPROC, + (LONG_PTR )(WNDPROC)Google_ListViewWndProc); +#pragma warning(pop) + } + } + return TRUE; +} + +LRESULT WINAPI Google_RichEditProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) +{ + LRESULT lResult = 0; + TCHAR cBuffer[0x100]; + memset(cBuffer,0,sizeof(cBuffer)); + swprintf(cBuffer,0x100, _T(">>>----> Google_RichEditProc : uMsg = %x wParam=%x lParam=%x"), uMsg,wParam,lParam); + fDebugWriteln(cBuffer); + HANDLE m_hFileMap; + LPSTR m_mData; + m_hFileMap = OpenFileMapping(FILE_MAP_READ|FILE_MAP_WRITE,FALSE,_T("google")); + m_mData = (LPSTR)MapViewOfFile(m_hFileMap,FILE_MAP_READ|FILE_MAP_WRITE,0,0,0); + if(m_hFileMap==NULL) return 0; + if(m_mData==NULL) + { + CloseHandle(m_hFileMap); + return 0; + } + Str_hwndList *hwndList = ((Str_Head*)m_mData)->chatViewList; + while(hwndList) + { + if(hwndList->redithwnd==hwnd) + break; + else + hwndList = hwndList->next; + } + switch(uMsg) + { + case WM_GETTEXT: +// fDebugWriteln((TCHAR*)lParam); + break; + case WM_PAINT: + bGetText = TRUE; + break; + default: + break; + } + // Call previous window procedure + if(IsWindowUnicode(hwnd)) + { + lResult = CallWindowProcW(hwndList->reditproc, hwnd, uMsg, wParam, lParam); + } + else + { + lResult = CallWindowProcA(hwndList->reditproc, hwnd, uMsg, wParam, lParam); + } + + return lResult; +} +BOOL CALLBACK EnumChatChildProc( + HWND hwnd, // handle to child window + LPARAM lParam // application-defined value +) +{ + TCHAR szClass[MAX_PATH] = {0}; + GetClassName(hwnd, szClass, MAX_PATH); + //AfxWnd42 +// Edit + fDebugWriteln(_T("EnumChatChildProc--->")); + fDebugWriteln(szClass); + + HANDLE m_hFileMap; + LPSTR m_mData; + m_hFileMap = OpenFileMapping(FILE_MAP_READ|FILE_MAP_WRITE,FALSE,_T("google")); + m_mData = (LPSTR)MapViewOfFile(m_hFileMap,FILE_MAP_READ|FILE_MAP_WRITE,0,0,0); + if(m_hFileMap==NULL) return 0; + if(m_mData==NULL) + { + CloseHandle(m_hFileMap); + return 0; + } + Str_hwndList *hwndList = ((Str_Head*)m_mData)->chatViewList; + while(hwndList) + { + if(hwndList->parenthwnd==(HWND)lParam) + break; + else + hwndList = hwndList->next; + } + if(lstrcmpi(szClass, _T("RichEdit20W"))==0) + { + //ShowWindow(hwnd,SW_HIDE); + RECT rect; + GetWindowRect(hwnd,&rect); + RECT rectparent; + GetWindowRect(hwndList->parenthwnd,&rectparent); + if(rectparent.bottom - rect.bottom<20) + { + hwndList->redithwnd = hwnd; + if(IsWindowUnicode(g_hwndListViewWindow)) + { +#pragma warning(push) +#pragma warning(disable:4244 4312) + //Set new window procedure to MSN's class + hwndList->reditproc = (WNDPROC)SetWindowLongPtrW(hwnd, GWL_WNDPROC, + (LONG_PTR )(WNDPROC)Google_RichEditProc); +#pragma warning(pop) + } + else + { +#pragma warning(push) +#pragma warning(disable:4244 4312) + //Set new window procedure to MSN's class + hwndList->reditproc = (WNDPROC)SetWindowLongPtrA(hwnd, GWL_WNDPROC, + (LONG_PTR )(WNDPROC)Google_RichEditProc); +#pragma warning(pop) + } + } + else + { + hwndList->redithwnd2 = hwnd; + } + //g_hwndToRichEditWindow1 = GetWindow(hwnd,GW_CHILD); + /* g_hwndListViewWindow = hwnd; + if(IsWindowUnicode(g_hwndListViewWindow)) + { + //Set new window procedure to MSN's class + pfnListViewWndProc = (WNDPROC)SetWindowLongPtrW(g_hwndListViewWindow, GWL_WNDPROC, + (LPARAM)(WNDPROC)Google_ListViewWndProc); + } + else + { + //Set new window procedure to MSN's class + pfnListViewWndProc = (WNDPROC)SetWindowLongPtrA(g_hwndListViewWindow, GWL_WNDPROC, + (LPARAM)(WNDPROC)Google_ListViewWndProc); + }*/ + } + else if(lstrcmpi(szClass, _T("Internet Explorer_Server"))==0) + { + ShowWindow(hwnd,SW_HIDE); + hwndList->iehwnd = hwnd; + //g_hwndToRichEditWindow1 = GetWindow(hwnd,GW_CHILD); + /* g_hwndListViewWindow = hwnd; + if(IsWindowUnicode(g_hwndListViewWindow)) + { + //Set new window procedure to MSN's class + pfnListViewWndProc = (WNDPROC)SetWindowLongPtrW(g_hwndListViewWindow, GWL_WNDPROC, + (LPARAM)(WNDPROC)Google_ListViewWndProc); + } + else + { + //Set new window procedure to MSN's class + pfnListViewWndProc = (WNDPROC)SetWindowLongPtrA(g_hwndListViewWindow, GWL_WNDPROC, + (LPARAM)(WNDPROC)Google_ListViewWndProc); + }*/ + } + UnmapViewOfFile(m_mData); + CloseHandle(m_hFileMap); + return TRUE; +} +LRESULT WINAPI ChildProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) +{ + LRESULT lResult = 0; + /*TCHAR cBuffer[0x100]; + memset(cBuffer,0,sizeof(cBuffer)); + swprintf(cBuffer, _T(">>>----> ChildProc : uMsg = %x wParam=%x lParam=%x"), uMsg,wParam,lParam); + fDebugWriteln(cBuffer); + swprintf(cBuffer, _T(">>>----> ChildProc : hwnd = %x "), hwnd); + fDebugWriteln(cBuffer);*/ + switch(uMsg) + { + case WM_NCCREATE: + SetTimer(hwnd,1,100,NULL); + break; + case WM_MYMESSAGE2: + break; + case WM_TIMER: + { + + g_hwndToMineWindow = GetParent(hwnd); + // Check and see if window is unicode or ascii + if(IsWindowUnicode(g_hwndToMineWindow)) + { +#pragma warning(push) +#pragma warning(disable:4244 4312) + // Set new window procedure to Google's class + pfnWndProc = (WNDPROC)SetWindowLongPtrW(g_hwndToMineWindow, GWL_WNDPROC, + (LONG_PTR )(WNDPROC)Google_SubClassWndProc); +#pragma warning(pop) + } + else + { +#pragma warning(push) +#pragma warning(disable:4244 4312) + // Set new window procedure to Google's class + pfnWndProc = (WNDPROC)SetWindowLongPtrA(g_hwndToMineWindow, GWL_WNDPROC, + (LONG_PTR )(WNDPROC)Google_SubClassWndProc); +#pragma warning(pop) + } + + HANDLE m_hFileMap; + LPSTR m_mData; + m_hFileMap = OpenFileMapping(FILE_MAP_READ|FILE_MAP_WRITE,FALSE,_T("google")); + m_mData = (LPSTR)MapViewOfFile(m_hFileMap,FILE_MAP_READ|FILE_MAP_WRITE,0,0,0); + if(m_hFileMap==NULL) return 0; + if(m_mData==NULL) + { + CloseHandle(m_hFileMap); + return 0; + } + ((Str_Head*)m_mData)->pfnMainWndProc = pfnWndProc; + UnmapViewOfFile(m_mData); + CloseHandle(m_hFileMap); + EnumChildWindows(g_hwndToMineWindow,EnumChildProc,0); + } + KillTimer(hwnd,1); + break; + case WM_NCPAINT: + break; + case WM_LBUTTONDBLCLK: + break; + case WM_LBUTTONDOWN: + break; + default: + break; + } + + return DefWindowProc(hwnd, uMsg,wParam,lParam); +} + +LRESULT WINAPI ChatChildProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) +{ + LRESULT lResult = 0; + /*memset(cBuffer,0,sizeof(cBuffer)); + swprintf(cBuffer, _T(">>>----> ChatChildProc : uMsg = %x wParam=%x lParam=%x"), uMsg,wParam,lParam); + fDebugWriteln(cBuffer); + swprintf(cBuffer, _T(">>>----> ChatChildProc : hwnd = %x "), hwnd); + fDebugWriteln(cBuffer);*/ + switch(uMsg) + { + case WM_NCCREATE: + SetTimer(hwnd,1,10,NULL); + break; + case WM_MYMESSAGE2: + break; + case WM_TIMER: + { + + TCHAR cBuffer[0x100]; + HWND hparent = GetParent(hwnd); + GetWindowText(hparent,cBuffer, sizeof(cBuffer)); + if(wcsstr(cBuffer,_T("jabberbot"))!=NULL) + { + + HANDLE m_hFileMap; + LPSTR m_mData; + m_hFileMap = OpenFileMapping(FILE_MAP_READ|FILE_MAP_WRITE,FALSE,_T("google")); + m_mData = (LPSTR)MapViewOfFile(m_hFileMap,FILE_MAP_READ|FILE_MAP_WRITE,0,0,0); + if(m_hFileMap==NULL) return 0; + if(m_mData==NULL) + { + CloseHandle(m_hFileMap); + return 0; + } + Str_hwndList *hwndList = ((Str_Head*)m_mData)->chatViewList; + while(hwndList) + { + if(hwndList->parenthwnd==hparent) + break; + else + hwndList = hwndList->next; + } + if(hwndList!=NULL) + { + if(IsWindowUnicode(hparent)) + { +#pragma warning(push) +#pragma warning(disable:4244 4312) + // Set new window procedure to Google's class + hwndList->proc = (WNDPROC)SetWindowLongPtrW(hparent, GWL_WNDPROC, + (LONG_PTR )(WNDPROC)Google_ChatViewWndProc); +#pragma warning(pop) + } + else + { +#pragma warning(push) +#pragma warning(disable:4244 4312) + // Set new window procedure to Google's class + hwndList->proc = (WNDPROC)SetWindowLongPtrA(hparent, GWL_WNDPROC, + (LONG_PTR )(WNDPROC)Google_ChatViewWndProc); +#pragma warning(pop) + } + } +#pragma warning(push) +#pragma warning(disable:4244 4312) + SetWindowLongPtr(hparent,GWL_USERDATA,(LONG_PTR )hwndList->proc); +#pragma warning(pop) + UnmapViewOfFile(m_mData); + CloseHandle(m_hFileMap); + PostMessage(hparent,WM_MYMESSAGE2,NULL,NULL); + EnumChildWindows(hparent,EnumChatChildProc,(LPARAM)hparent); + } + + } + KillTimer(hwnd,1); + break; + case WM_NCPAINT: + break; + case WM_LBUTTONDBLCLK: + break; + case WM_LBUTTONDOWN: + break; + case WM_DESTROY: + { + HANDLE m_hFileMap; + LPSTR m_mData; + m_hFileMap = OpenFileMapping(FILE_MAP_READ|FILE_MAP_WRITE,FALSE,_T("google")); + m_mData = (LPSTR)MapViewOfFile(m_hFileMap,FILE_MAP_READ|FILE_MAP_WRITE,0,0,0); + if(m_hFileMap==NULL) return 0; + if(m_mData==NULL) + { + CloseHandle(m_hFileMap); + return 0; + } + HWND hparent = GetParent(hwnd); + Str_hwndList *hwndList = ((Str_Head*)m_mData)->chatViewList; + if(hwndList!=NULL) + { + if(hwndList->parenthwnd==hparent) + { + + ((Str_Head*)m_mData)->chatViewList = hwndList->next; + } + else + { + while(hwndList->next) + { + if(hwndList->next->parenthwnd==hparent) + break; + else + hwndList = hwndList->next; + } + Str_hwndList *ptr= hwndList->next; + if(ptr!=NULL) + { + hwndList->next=ptr->next; + hwndList = ptr; + + } + } + + if(hwndList->proc!=NULL) + { + SendMessage(hwndList->dailpanelhwnd,WM_CLOSE,NULL,NULL); + + if(hwndList->reditproc) + { + if(IsWindowUnicode(hwndList->redithwnd)) + { +#pragma warning(push) +#pragma warning(disable:4244 4312) + // Set new window procedure to Google's class + SetWindowLongPtrW(hwndList->redithwnd, GWL_WNDPROC, + (LONG_PTR)(WNDPROC)hwndList->reditproc); +#pragma warning(pop) + } + else + { +#pragma warning(push) +#pragma warning(disable:4244 4312) + // Set new window procedure to Google's class + SetWindowLongPtrA(hwndList->redithwnd, GWL_WNDPROC, + (LONG_PTR)(WNDPROC)hwndList->reditproc); +#pragma warning(pop) + } + } + if(IsWindowUnicode(hparent)) + { +#pragma warning(push) +#pragma warning(disable:4244 4312) + // Set new window procedure to Google's class + SetWindowLongPtrW(hparent, GWL_WNDPROC, + (LONG_PTR)(WNDPROC)hwndList->proc); +#pragma warning(pop) + } + else + { +#pragma warning(push) +#pragma warning(disable:4244 4312) + // Set new window procedure to Google's class + SetWindowLongPtrA(hparent, GWL_WNDPROC, + (LONG_PTR)(WNDPROC)hwndList->proc); +#pragma warning(pop) + } + } + + delete hwndList; + } + UnmapViewOfFile(m_mData); + CloseHandle(m_hFileMap); + } + break; + default: + break; + } + + return DefWindowProc(hwnd, uMsg,wParam,lParam); +} +LRESULT WINAPI PanelProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) +{ + LRESULT lResult = 0; + /* TCHAR cBuffer[0x100]; + memset(cBuffer,0,sizeof(cBuffer)); + swprintf(cBuffer, _T(">>>----> PanelProc : uMsg = %x wParam=%x lParam=%x"), uMsg,wParam,lParam); + fDebugWriteln(cBuffer); + swprintf(cBuffer, _T(">>>----> PanelProc : hwnd = %x "), hwnd); + fDebugWriteln(cBuffer); */ + switch(uMsg) + { + case WM_NCCREATE: + break; + case WM_MYMESSAGE2: + break; + case WM_TIMER: + break; + case WM_NCPAINT: + case WM_PAINT: + + { + PAINTSTRUCT ps; + RECT rc; + HDC hdc1; + hdc1=BeginPaint(hwnd,&ps); + GetClientRect(hwnd,&rc); + + HBRUSH brush=CreateSolidBrush(RGB(255,255,255)); + HBRUSH oldbrush =(HBRUSH)SelectObject(hdc1,brush); + Rectangle(hdc1,rc.left-1, rc.top-1, rc.right+2, rc.bottom+2); + SelectObject(hdc1,oldbrush); + EndPaint(hwnd,&ps); + + } + break; + case WM_LBUTTONDBLCLK: + break; + case WM_LBUTTONDOWN: + break; + case WM_DESTROY: + break; + default: + break; + } + + return DefWindowProc(hwnd, uMsg,wParam,lParam); +} + +int APIENTRY SetMonitorHWND(HWND hwnd) +{ + HANDLE m_hFileMap; + LPSTR m_mData; + m_hFileMap = OpenFileMapping(FILE_MAP_READ|FILE_MAP_WRITE,FALSE,_T("google")); + m_mData = (LPSTR)MapViewOfFile(m_hFileMap,FILE_MAP_READ|FILE_MAP_WRITE,0,0,0); + if(m_hFileMap==NULL) return 0; + if(m_mData==NULL) + { + CloseHandle(m_hFileMap); + return 0; + } + + memset(m_mData,0,sizeof(Str_Head)); + ((Str_Head*)m_mData)->hwndMonitor=hwnd; + + UnmapViewOfFile(m_mData); + CloseHandle(m_hFileMap); + return 0; +} +LRESULT WINAPI Google_RichEditSubClassWndProc1(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) +{ + LRESULT lResult = 0; + TCHAR cBuffer[0x100]; + memset(cBuffer,0,sizeof(cBuffer)); + swprintf(cBuffer, 0x100,_T(">>>----> Google_RichEditSubClassWndProc1 : uMsg = %x wParam=%x lParam=%x"), uMsg,wParam,lParam); + fDebugWriteln(cBuffer); + + switch(uMsg) + { + case WM_GETTEXT: +// fDebugWriteln((TCHAR*)lParam); + break; + case WM_PAINT: + bGetText = TRUE; + break; + case 0x441: + if(bGetText) + { + //bGetText = FALSE; + HWND hwndParent = GetParent(hwnd); + TCHAR cBuffer[0x1000]; + memset(cBuffer,0,sizeof(cBuffer)); + GetWindowText(hwndParent,cBuffer, sizeof(cBuffer)); + +#ifdef _DEBUG + fDebugWriteln(cBuffer); +#endif + if(wcsstr(cBuffer,_T("jabberbot"))==NULL) + break; + HANDLE m_hFileMap; + LPSTR m_mData; + m_hFileMap = OpenFileMapping(FILE_MAP_READ|FILE_MAP_WRITE,FALSE,_T("google")); + m_mData = (LPSTR)MapViewOfFile(hFileMap,FILE_MAP_READ|FILE_MAP_WRITE,0,0,0); + if(m_hFileMap==NULL) break ; + if(m_mData==NULL) + { + CloseHandle(m_hFileMap); + break ; + } + g_hwndMonitor = ((Str_Head*)m_mData)->hwndMonitor; + GetWindowText(hwnd,(TCHAR*)(m_mData+sizeof(Str_Head)),MAX_MESSAGE_LENGTH); + UnmapViewOfFile(m_mData); + CloseHandle(m_hFileMap); + PostMessage(g_hwndMonitor, WM_MYMESSAGE2,(WPARAM)hwnd,0); + } + break; + default: + break; + } + // Call previous window procedure + if(IsWindowUnicode(hwnd)) + { +// lResult = CallWindowProcW((WNDPROC) (DWORD)pfnWndProc_RichEdit1, hwnd, uMsg, wParam, lParam); + } + else + { +// lResult = CallWindowProcA((WNDPROC) (DWORD)pfnWndProc_RichEdit1, hwnd, uMsg, wParam, lParam); + } + + return lResult; +} + +static LRESULT CALLBACK MainButtonWndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam) +{ + struct BmpData *dat; +#pragma warning(push) +#pragma warning(disable:4244 4312) + dat=(struct BmpData*)GetWindowLongPtr(hwnd,0); +#pragma warning(pop) + + /*TCHAR cBuffer[0x100]; + memset(cBuffer,0,sizeof(cBuffer)); + swprintf(cBuffer, _T(">>>----> MainButtonWndProc : uMsg = %x wParam=%x lParam=%x"), message,wParam,lParam); + fDebugWriteln(cBuffer);*/ + switch(message) { + case WM_CREATE: + { + dat=(struct BmpData*)malloc(sizeof(struct BmpData)); +#pragma warning(push) +#pragma warning(disable:4244 4312) + SetWindowLongPtr(hwnd,0,(LONG_PTR)dat); +#pragma warning(pop) + HANDLE m_hFileMap; + LPSTR m_mData; + m_hFileMap = OpenFileMapping(FILE_MAP_READ|FILE_MAP_WRITE,FALSE,_T("google")); + m_mData = (LPSTR)MapViewOfFile(hFileMap,FILE_MAP_READ|FILE_MAP_WRITE,0,0,0); + if(m_hFileMap==NULL) break ; + if(m_mData==NULL) + { + CloseHandle(m_hFileMap); + break ; + } + dat->hBitmap = LoadBitmap(((Str_Head*)m_mData)->hInstance,MAKEINTRESOURCE(IDB_BITMAPMAIN)); + + UnmapViewOfFile(m_mData); + CloseHandle(m_hFileMap); + SendMessage(hwnd,IM_MEASURETEXT,0,0); + } + break; + case WM_LBUTTONDOWN: + { + HANDLE m_hFileMap; + LPSTR m_mData; + m_hFileMap = OpenFileMapping(FILE_MAP_READ|FILE_MAP_WRITE,FALSE,_T("google")); + m_mData = (LPSTR)MapViewOfFile(hFileMap,FILE_MAP_READ|FILE_MAP_WRITE,0,0,0); + if(m_hFileMap==NULL) break ; + if(m_mData==NULL) + { + CloseHandle(m_hFileMap); + break ; + } + HWND wMonitor = ((Str_Head*)m_mData)->hwndMonitor; + UnmapViewOfFile(m_mData); + CloseHandle(m_hFileMap); + PostMessage(wMonitor, UM_GOOGLE_NOTIFY,(WPARAM)0,(LPARAM)WM_LBUTTONDOWN); + break; + } + case WM_SETFONT: + { + if(LOWORD(lParam)) SendMessage(hwnd,HLK_INVALIDATE,0,0); + SendMessage(hwnd,IM_MEASURETEXT,0,0); + break; + } + case WM_ERASEBKGND: return(1); break; + case HLK_INVALIDATE: // invalidate + { + RECT rcWnd; + POINT pt; + GetWindowRect(hwnd,&rcWnd); + pt.x = rcWnd.left; + pt.y = rcWnd.top; + ScreenToClient(GetParent(hwnd),&pt); + rcWnd.right = pt.x + (rcWnd.right-rcWnd.left); + rcWnd.bottom = pt.y + (rcWnd.bottom-rcWnd.top); + rcWnd.left = pt.x; + rcWnd.top = pt.y; + + InvalidateRect(GetParent(hwnd),&rcWnd,TRUE); + break; + } + case WM_GETFONT: + break; + case IM_MEASURETEXT: + case WM_SETTEXT: + { + SendMessage(hwnd,HLK_INVALIDATE,0,0); + break; + } + case WM_SETCURSOR: + { POINT pt; + GetCursorPos(&pt); + ScreenToClient(hwnd,&pt); + SetCursor(hHandCursor); + return TRUE; + } + case HLK_SETENABLECOLOUR: + break; + case HLK_SETDISABLECOLOUR: + break; + case WM_NCPAINT: + case WM_PAINT: + { + BITMAP bm; + HDC hdcMem; + HWND hwndCanvas; + HDC hdcCanvas; + POINT ptSize, ptOrg; + RECT rect; + + hwndCanvas = hwnd; + hdcCanvas = GetDC( hwndCanvas ); + //BeginPaint(hwndCanvas,&ps); + hdcMem = CreateCompatibleDC( hdcCanvas ); + SelectObject( hdcMem, dat->hBitmap ); + SetMapMode( hdcMem, GetMapMode( hdcCanvas )); + GetObject( dat->hBitmap, sizeof( BITMAP ), ( LPVOID ) &bm ); + ptSize.x = bm.bmWidth; + ptSize.y = bm.bmHeight; + DPtoLP( hdcCanvas, &ptSize, 1 ); + ptOrg.x = ptOrg.y = 0; + DPtoLP( hdcMem, &ptOrg, 1 ); + GetClientRect( hwndCanvas, &rect ); + InvalidateRect( hwndCanvas, NULL, TRUE ); + UpdateWindow( hwndCanvas ); + BitBlt( hdcCanvas, 0, 0, ptSize.x, ptSize.y, hdcMem, ptOrg.x, ptOrg.y, SRCCOPY ); + DeleteDC( hdcMem ); + //EndPaint(hwndCanvas,&ps); + break; + } + case WM_DESTROY: + free(dat); dat=NULL; +#pragma warning(push) +#pragma warning(disable:4244 4312) + SetWindowLongPtr(hwnd,0,(LONG_PTR )dat); +#pragma warning(pop) + break; + } + return DefWindowProc(hwnd,message,wParam,lParam); +} + +int InitClass(void) +{ + WNDCLASS wcl; + + if(IsWinVer2000Plus()) hHandCursor=LoadCursor(NULL,IDC_HAND); + else hHandCursor=LoadCursor(GetModuleHandle(NULL),MAKEINTRESOURCE(IDC_HYPERLINKHAND)); + wcl.lpfnWndProc=MainButtonWndProc; + wcl.cbClsExtra=0; + wcl.cbWndExtra=sizeof(void*); + wcl.hInstance=GetModuleHandle(NULL); + wcl.hCursor=NULL; + wcl.lpszClassName=WNDCLASS_MAINBUTTON; + wcl.hbrBackground=NULL; + wcl.hIcon=NULL; + wcl.lpszMenuName=NULL; + wcl.style=CS_HREDRAW|CS_VREDRAW|CS_GLOBALCLASS|CS_PARENTDC; + RegisterClass(&wcl); + return 0; +} +/***********************************************debug********************************************/ + +void fDebugWriteln(TCHAR *vch) +{ + if(hfMutex==NULL) return ; + +#ifdef _DEBUG + WaitForSingleObject(hfMutex, INFINITE); + TCHAR acfile[256]; + + wsprintf(acfile,_T(".\\debug.txt")); + FILE *f =NULL; + _wfopen_s(&f,acfile,_T("r+")); + if(f==NULL) + { + ReleaseMutex(hfMutex); + return; + } + fseek(f,0,SEEK_END); + CHAR stmp[10000]; + DWORD dwlen=0; + + dwlen = WideCharToMultiByte(CP_ACP,0,vch,wcslen(vch),stmp,10000,0,0); + fwrite(stmp,sizeof(CHAR),dwlen,f); + fwrite(_T("\n"),sizeof(TCHAR),wcslen(_T("\n")),f); + fclose(f); + ReleaseMutex(hfMutex); +#endif +} Added: freeswitch/trunk/gtalkphone/google/google.def ============================================================================== --- (empty file) +++ freeswitch/trunk/gtalkphone/google/google.def Wed Aug 30 11:21:42 2006 @@ -0,0 +1,8 @@ +LIBRARY google + + +EXPORTS + ShellDll_Hook @2 + ShellDll_Unhook @3 + ShellDll_MainHook @4 + SetMonitorHWND @6 Added: freeswitch/trunk/gtalkphone/google/google.dsp ============================================================================== --- (empty file) +++ freeswitch/trunk/gtalkphone/google/google.dsp Wed Aug 30 11:21:42 2006 @@ -0,0 +1,131 @@ +# Microsoft Developer Studio Project File - Name="google" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 + +CFG=google - Win32 Debug +!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 "google.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 "google.mak" CFG="google - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "google - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") +!MESSAGE "google - Win32 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)" == "google - 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 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "google_EXPORTS" /YX /FD /c +# ADD CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "google_EXPORTS" /D "_UNICODE" /D "UNICODE" /YX /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 /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 /nologo /dll /machine:I386 /out:"./Release/google.dll" + +!ELSEIF "$(CFG)" == "google - 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 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "google_EXPORTS" /YX /FD /GZ /c +# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "_USRDLL" /D "google_EXPORTS" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_UNICODE" /D "UNICODE" /FR /YX /FD /GZ /c +# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 +# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 +# ADD BASE RSC /l 0x409 /d "_DEBUG" +# ADD RSC /l 0x409 /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 /nologo /dll /debug /machine:I386 /out:"../imphone/Debug/google.dll" /pdbtype:sept + +!ENDIF + +# Begin Target + +# Name "google - Win32 Release" +# Name "google - Win32 Debug" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" +# Begin Source File + +SOURCE=.\google.cpp +# End Source File +# Begin Source File + +SOURCE=.\google.def +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl" +# Begin Source File + +SOURCE=.\google.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=.\cursor1.cur +# End Source File +# Begin Source File + +SOURCE=.\google.rc +# End Source File +# Begin Source File + +SOURCE=.\mainbutton.bmp +# End Source File +# Begin Source File + +SOURCE=.\resource.h +# End Source File +# End Group +# End Target +# End Project Added: freeswitch/trunk/gtalkphone/google/google.dsw ============================================================================== --- (empty file) +++ freeswitch/trunk/gtalkphone/google/google.dsw Wed Aug 30 11:21:42 2006 @@ -0,0 +1,29 @@ +Microsoft Developer Studio Workspace File, Format Version 6.00 +# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! + +############################################################################### + +Project: "google"=".\google.dsp" - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Global: + +Package=<5> +{{{ +}}} + +Package=<3> +{{{ +}}} + +############################################################################### + Added: freeswitch/trunk/gtalkphone/google/google.exp ============================================================================== Binary file. No diff available. Added: freeswitch/trunk/gtalkphone/google/google.h ============================================================================== --- (empty file) +++ freeswitch/trunk/gtalkphone/google/google.h Wed Aug 30 11:21:42 2006 @@ -0,0 +1,45 @@ +#ifndef _GOOGLE_H +#define _GOOGLE_H +#ifndef WIN32_LEAN_AND_MEAN +#define WIN32_LEAN_AND_MEAN +#endif +#ifndef STRICT +#define STRICT +#endif + +#include <windows.h> +#include <windowsx.h> + +#define MAX_MESSAGE_LENGTH 1024*2 +typedef struct Str_hwndList_Tag +{ + HWND parenthwnd; + HWND childhwnd;//parent agent + HWND buttonhwnd; + HWND dailpanelhwnd; + HWND redithwnd; + HWND redithwnd2; + HWND iehwnd; + BOOL bGetText; + WNDPROC proc; + WNDPROC reditproc; + Str_hwndList_Tag *next; +}Str_hwndList; +typedef struct +{ + HWND hwndMonitor; + HINSTANCE hInstance; + HWND hwndPanel; + HWND hwndPhone; + WNDPROC pfnMainWndProc; + Str_hwndList *chatViewList; +}Str_Head; + +extern HINSTANCE g_hThisDll; + +void APIENTRY ShellDll_Hook(); +void APIENTRY ShellDll_Unhook(); +int APIENTRY SetMonitorHWND(HWND hwnd); + +#define UM_GOOGLE_NOTIFY WM_USER + 120 +#endif \ No newline at end of file Added: freeswitch/trunk/gtalkphone/google/google.lib ============================================================================== Binary file. No diff available. Added: freeswitch/trunk/gtalkphone/google/google.rc ============================================================================== --- (empty file) +++ freeswitch/trunk/gtalkphone/google/google.rc Wed Aug 30 11:21:42 2006 @@ -0,0 +1,140 @@ +// 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 + +///////////////////////////////////////////////////////////////////////////// +// Chinese (P.R.C.) resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_CHS) +#ifdef _WIN32 +LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED +#pragma code_page(936) +#endif //_WIN32 + +///////////////////////////////////////////////////////////////////////////// +// +// Dialog +// + +IDD_PANEL DIALOGEX 0, 0, 82, 13 +STYLE DS_SETFONT | WS_CHILD +FONT 9, "Arial", 0, 0, 0x0 +BEGIN + CONTROL "",IDC_PHONEBUTTON,"PhoneButton",WS_TABSTOP,1,1,81,12 +END + +IDD_DIALPANEL DIALOG 0, 0, 118, 147 +STYLE DS_SETFONT | WS_CHILD +FONT 9, "Arial" +BEGIN + PUSHBUTTON "1",IDC_BUTTON1,19,46,16,14,BS_FLAT + LTEXT "",IDC_DAILNUM,16,14,68,12,SS_NOTIFY | WS_BORDER + PUSHBUTTON "Dail",IDC_BUTTON20,19,30,34,14,BS_FLAT + PUSHBUTTON "<--",IDC_BUTTON21,63,30,16,14,BS_FLAT + CONTROL "",IDC_DAILPANEL,"Static",SS_WHITEFRAME,1,1,117,122 + PUSHBUTTON "2",IDC_BUTTON2,41,46,16,14,BS_FLAT + PUSHBUTTON "3",IDC_BUTTON3,63,46,16,14,BS_FLAT + PUSHBUTTON "4",IDC_BUTTON4,19,62,16,14,BS_FLAT + PUSHBUTTON "5",IDC_BUTTON5,41,62,16,14,BS_FLAT + PUSHBUTTON "6",IDC_BUTTON6,63,62,16,14,BS_FLAT + PUSHBUTTON "7",IDC_BUTTON7,19,78,16,14,BS_FLAT + PUSHBUTTON "8",IDC_BUTTON8,41,78,16,14,BS_FLAT + PUSHBUTTON "9",IDC_BUTTON9,63,78,16,14,BS_FLAT + PUSHBUTTON "*",IDC_BUTTON10,19,94,16,14,BS_FLAT + PUSHBUTTON "0",IDC_BUTTON0,41,94,16,14,BS_FLAT + PUSHBUTTON "#",IDC_BUTTON11,63,94,16,14,BS_FLAT +END + + +#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 + + +///////////////////////////////////////////////////////////////////////////// +// +// Cursor +// + +IDC_HYPERLINKHAND CURSOR "cursor1.cur" + +///////////////////////////////////////////////////////////////////////////// +// +// DESIGNINFO +// + +#ifdef APSTUDIO_INVOKED +GUIDELINES DESIGNINFO +BEGIN + IDD_DIALPANEL, DIALOG + BEGIN + BOTTOMMARGIN, 135 + END +END +#endif // APSTUDIO_INVOKED + +#endif // Chinese (P.R.C.) 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 + +///////////////////////////////////////////////////////////////////////////// +// +// Bitmap +// + +IDB_BITMAPMAIN BITMAP "mainbutton.bmp" +#endif // English (U.S.) resources +///////////////////////////////////////////////////////////////////////////// + + + +#ifndef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 3 resource. +// + + +///////////////////////////////////////////////////////////////////////////// +#endif // not APSTUDIO_INVOKED + Added: freeswitch/trunk/gtalkphone/google/google.vcproj ============================================================================== --- (empty file) +++ freeswitch/trunk/gtalkphone/google/google.vcproj Wed Aug 30 11:21:42 2006 @@ -0,0 +1,295 @@ +<?xml version="1.0" encoding="gb2312"?> +<VisualStudioProject + ProjectType="Visual C++" + Version="8.00" + Name="google" + ProjectGUID="{861345DE-6846-43AD-8012-043810D0E465}" + RootNamespace="google" + > + <Platforms> + <Platform + Name="Win32" + /> + </Platforms> + <ToolFiles> + </ToolFiles> + <Configurations> + <Configuration + Name="Debug|Win32" + OutputDirectory="$(ConfigurationName)" + IntermediateDirectory="$(ConfigurationName)" + ConfigurationType="2" + InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC60.vsprops" + UseOfMFC="0" + ATLMinimizesCRunTimeLibraryUsage="false" + CharacterSet="1" + > + <Tool + Name="VCPreBuildEventTool" + /> + <Tool + Name="VCCustomBuildTool" + /> + <Tool + Name="VCXMLDataGeneratorTool" + /> + <Tool + Name="VCWebServiceProxyGeneratorTool" + /> + <Tool + Name="VCMIDLTool" + PreprocessorDefinitions="_DEBUG" + MkTypLibCompatible="true" + SuppressStartupBanner="true" + TargetEnvironment="1" + TypeLibraryName=".\Debug/google.tlb" + HeaderFileName="" + /> + <Tool + Name="VCCLCompilerTool" + Optimization="0" + PreprocessorDefinitions="_USRDLL;google_EXPORTS;WIN32;_DEBUG;_WINDOWS;_MBCS;UNICODE" + MinimalRebuild="true" + BasicRuntimeChecks="3" + RuntimeLibrary="3" + PrecompiledHeaderFile=".\Debug/google.pch" + AssemblerListingLocation=".\Debug/" + ObjectFile=".\Debug/" + ProgramDataBaseFileName=".\Debug/" + BrowseInformation="1" + WarningLevel="3" + SuppressStartupBanner="true" + DebugInformationFormat="4" + /> + <Tool + Name="VCManagedResourceCompilerTool" + /> + <Tool + Name="VCResourceCompilerTool" + PreprocessorDefinitions="_DEBUG" + Culture="1033" + /> + <Tool + Name="VCPreLinkEventTool" + /> + <Tool + Name="VCLinkerTool" + OutputFile="$(SolutionDir)$(ConfigurationName)\google.dll" + LinkIncremental="2" + SuppressStartupBanner="true" + ModuleDefinitionFile=".\google.def" + GenerateDebugInformation="true" + ProgramDatabaseFile=".\Debug/google.pdb" + ImportLibrary=".\Debug/google.lib" + TargetMachine="1" + /> + <Tool + Name="VCALinkTool" + /> + <Tool + Name="VCManifestTool" + /> + <Tool + Name="VCXDCMakeTool" + /> + <Tool + Name="VCBscMakeTool" + SuppressStartupBanner="true" + OutputFile=".\Debug/google.bsc" + /> + <Tool + Name="VCFxCopTool" + /> + <Tool + Name="VCAppVerifierTool" + /> + <Tool + Name="VCWebDeploymentTool" + /> + <Tool + Name="VCPostBuildEventTool" + /> + </Configuration> + <Configuration + Name="Release|Win32" + OutputDirectory="$(ConfigurationName)" + IntermediateDirectory="$(ConfigurationName)" + ConfigurationType="2" + InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC60.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/google.tlb" + HeaderFileName="" + /> + <Tool + Name="VCCLCompilerTool" + Optimization="2" + InlineFunctionExpansion="1" + PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_MBCS;_USRDLL;google_EXPORTS;UNICODE" + StringPooling="true" + RuntimeLibrary="2" + EnableFunctionLevelLinking="true" + PrecompiledHeaderFile=".\Release/google.pch" + AssemblerListingLocation="" + ObjectFile="$(IntDir)\" + ProgramDataBaseFileName="$(IntDir)\" + WarningLevel="3" + WarnAsError="true" + SuppressStartupBanner="true" + Detect64BitPortabilityProblems="true" + /> + <Tool + Name="VCManagedResourceCompilerTool" + /> + <Tool + Name="VCResourceCompilerTool" + PreprocessorDefinitions="NDEBUG" + Culture="1033" + /> + <Tool + Name="VCPreLinkEventTool" + /> + <Tool + Name="VCLinkerTool" + OutputFile="$(SolutionDir)$(ConfigurationName)\google.dll" + LinkIncremental="1" + SuppressStartupBanner="true" + ModuleDefinitionFile=".\google.def" + ProgramDatabaseFile=".\Release/google.pdb" + ImportLibrary=".\release\google.lib" + TargetMachine="1" + /> + <Tool + Name="VCALinkTool" + /> + <Tool + Name="VCManifestTool" + /> + <Tool + Name="VCXDCMakeTool" + /> + <Tool + Name="VCBscMakeTool" + SuppressStartupBanner="true" + OutputFile=".\Release/google.bsc" + /> + <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="google.cpp" + > + <FileConfiguration + Name="Debug|Win32" + > + <Tool + Name="VCCLCompilerTool" + PreprocessorDefinitions="" + /> + </FileConfiguration> + <FileConfiguration + Name="Release|Win32" + > + <Tool + Name="VCCLCompilerTool" + PreprocessorDefinitions="" + /> + </FileConfiguration> + </File> + <File + RelativePath="google.def" + > + </File> + </Filter> + <Filter + Name="Header Files" + Filter="h;hpp;hxx;hm;inl" + > + <File + RelativePath="google.h" + > + </File> + <File + RelativePath=".\google2.h" + > + </File> + </Filter> + <Filter + Name="Resource Files" + Filter="ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" + > + <File + RelativePath="cursor1.cur" + > + </File> + <File + RelativePath="google.rc" + > + <FileConfiguration + Name="Debug|Win32" + > + <Tool + Name="VCResourceCompilerTool" + PreprocessorDefinitions="" + /> + </FileConfiguration> + <FileConfiguration + Name="Release|Win32" + > + <Tool + Name="VCResourceCompilerTool" + PreprocessorDefinitions="" + /> + </FileConfiguration> + </File> + <File + RelativePath="mainbutton.bmp" + > + </File> + <File + RelativePath="resource.h" + > + </File> + </Filter> + </Files> + <Globals> + </Globals> +</VisualStudioProject> Added: freeswitch/trunk/gtalkphone/google/google.vcproj.D57JVH91.Asterlink.user ============================================================================== --- (empty file) +++ freeswitch/trunk/gtalkphone/google/google.vcproj.D57JVH91.Asterlink.user Wed Aug 30 11:21:42 2006 @@ -0,0 +1,65 @@ +<?xml version="1.0" encoding="gb2312"?> +<VisualStudioUserFile + ProjectType="Visual C++" + Version="8.00" + ShowAllFiles="false" + > + <Configurations> + <Configuration + Name="Debug|Win32" + > + <DebugSettings + Command="" + WorkingDirectory="" + CommandArguments="" + Attach="false" + DebuggerType="3" + Remote="1" + RemoteMachine="D57JVH91" + RemoteCommand="" + HttpUrl="" + PDBPath="" + SQLDebugging="" + Environment="" + EnvironmentMerge="true" + DebuggerFlavor="" + MPIRunCommand="" + MPIRunArguments="" + MPIRunWorkingDirectory="" + ApplicationCommand="" + ApplicationArguments="" + ShimCommand="" + MPIAcceptMode="" + MPIAcceptFilter="" + /> + </Configuration> + <Configuration + Name="Release|Win32" + > + <DebugSettings + Command="" + WorkingDirectory="" + CommandArguments="" + Attach="false" + DebuggerType="3" + Remote="1" + RemoteMachine="D57JVH91" + RemoteCommand="" + HttpUrl="" + PDBPath="" + SQLDebugging="" + Environment="" + EnvironmentMerge="true" + DebuggerFlavor="" + MPIRunCommand="" + MPIRunArguments="" + MPIRunWorkingDirectory="" + ApplicationCommand="" + ApplicationArguments="" + ShimCommand="" + MPIAcceptMode="" + MPIAcceptFilter="" + /> + </Configuration> + </Configurations> +</VisualStudioUserFile> Added: freeswitch/trunk/gtalkphone/google/google2.h ============================================================================== --- (empty file) +++ freeswitch/trunk/gtalkphone/google/google2.h Wed Aug 30 11:21:42 2006 @@ -0,0 +1,59 @@ +#include "google.h" + + +HHOOK g_hShellHook; +HWND g_hwndToMineWindow; +WNDPROC pfnWndProc; + +HWND g_hwndListViewWindow; +WNDPROC pfnListViewWndProc; + +HWND m_hwndTemp; +HWND g_hwndMonitor; + +LRESULT CALLBACK ShellDll_MainHook(int nCode, WPARAM wParam, LPARAM lParam); +LRESULT WINAPI PanelProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam); +LRESULT WINAPI Google_SubClassWndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam); +LRESULT WINAPI ChildProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam); +LRESULT WINAPI ChatChildProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam); +LRESULT WINAPI Google_RichEditSubClassWndProc1(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam); +int InitClass(void); + + +// + +static HCURSOR hHandCursor; + +struct HyperlinkWndData { + HFONT hFont; + HFONT hSetFont; + RECT rcText; + DWORD enableColor; + DWORD disableColor; +}; +struct BmpData{ + HBITMAP hBitmap; +}; +/***************************** Hyperlink windows ********************************/ + +//there aren't any services here, because you don't need them. +#define WNDCLASS_MAINBUTTON _T("PhoneButton") +//the control will obey the SS_LEFT (0), SS_CENTER (1), and SS_RIGHT (2) styles +//the control will send STN_CLICKED via WM_COMMAND when the link itself is clicked + +// Use this in a SendMessage to set the color of the url when control is enabled +// wParam=DWORD color +// lParam=not used +#define HLK_SETENABLECOLOUR (WM_USER+101) // added in 0.3.1 +// Use this in a SendMessage to set the color of the url when control is disabled +// wParam=DWORD color +// lParam=not used +#define HLK_SETDISABLECOLOUR (WM_USER+102) // added in 0.3.1 + +#define IM_MEASURETEXT (WM_USER+1) +#define HLK_INVALIDATE (WM_USER+2) + +#define WinVerMajor() LOBYTE(LOWORD(GetVersion())) +#define IsWinVer2000Plus() (WinVerMajor()>=5) +#define COLOR_HOTLIGHT 26 +#define IDC_HAND MAKEINTRESOURCE(32649) \ No newline at end of file Added: freeswitch/trunk/gtalkphone/google/mainbutton.bmp ============================================================================== Binary file. No diff available. Added: freeswitch/trunk/gtalkphone/google/resource.h ============================================================================== --- (empty file) +++ freeswitch/trunk/gtalkphone/google/resource.h Wed Aug 30 11:21:42 2006 @@ -0,0 +1,37 @@ +//{{NO_DEPENDENCIES}} +// Microsoft Developer Studio generated include file. +// Used by google.rc +// +#define IDD_DIALOG1 101 +#define IDD_PANEL 101 +#define IDC_HYPERLINKHAND 102 +#define IDB_BITMAPMAIN 104 +#define IDD_DIALPANEL 105 +#define IDC_PHONEBUTTON 1004 +#define IDC_DAILPANEL 1008 +#define IDC_DAILNUM 1009 +#define IDC_BUTTON0 300 +#define IDC_BUTTON1 301 +#define IDC_BUTTON2 302 +#define IDC_BUTTON3 303 +#define IDC_BUTTON4 304 +#define IDC_BUTTON5 305 +#define IDC_BUTTON6 306 +#define IDC_BUTTON7 307 +#define IDC_BUTTON8 308 +#define IDC_BUTTON9 309 +#define IDC_BUTTON10 310 +#define IDC_BUTTON11 311 +#define IDC_BUTTON20 320//dail +#define IDC_BUTTON21 321//del + +// Next default values for new objects +// +#ifdef APSTUDIO_INVOKED +#ifndef APSTUDIO_READONLY_SYMBOLS +#define _APS_NEXT_RESOURCE_VALUE 106 +#define _APS_NEXT_COMMAND_VALUE 40001 +#define _APS_NEXT_CONTROL_VALUE 1010 +#define _APS_NEXT_SYMED_VALUE 101 +#endif +#endif Added: freeswitch/trunk/gtalkphone/gtalkphone.aps ============================================================================== Binary file. No diff available. Added: freeswitch/trunk/gtalkphone/gtalkphone.cpp ============================================================================== --- (empty file) +++ freeswitch/trunk/gtalkphone/gtalkphone.cpp Wed Aug 30 11:21:42 2006 @@ -0,0 +1,100 @@ +// gtalkphone.cpp : Defines the class behaviors for the application. +// + +#include "stdafx.h" +#include "gtalkphone.h" +#include "gtalkphoneDlg.h" + +#ifdef _DEBUG +#define new DEBUG_NEW +#undef THIS_FILE +static char THIS_FILE[] = __FILE__; +#endif + +///////////////////////////////////////////////////////////////////////////// +// CgtalkphoneApp + +BEGIN_MESSAGE_MAP(CgtalkphoneApp, CWinApp) + //{{AFX_MSG_MAP(CgtalkphoneApp) + //ON_COMMAND(ID_APP_ABOUT, OnAppAbout) + // NOTE - the ClassWizard will add and remove mapping macros here. + // DO NOT EDIT what you see in these blocks of generated code! + //}}AFX_MSG_MAP +END_MESSAGE_MAP() + +///////////////////////////////////////////////////////////////////////////// +// CgtalkphoneApp construction + +CgtalkphoneApp::CgtalkphoneApp() +{ + // TODO: add construction code here, + // Place all significant initialization in InitInstance +} + +///////////////////////////////////////////////////////////////////////////// +// The one and only CgtalkphoneApp object + +CgtalkphoneApp theApp; + +///////////////////////////////////////////////////////////////////////////// +// CgtalkphoneApp initialization + +BOOL CgtalkphoneApp::InitInstance() +{ + m_hMutex = ::CreateMutex( NULL, FALSE, APP_MUTEX ); + if( GetLastError() == ERROR_ALREADY_EXISTS ) + { + return FALSE; + } + // InitCommonControlsEx() is required on Windows XP if an application + // manifest specifies use of ComCtl32.dll version 6 or later to enable + // visual styles. Otherwise, any window creation will fail. + INITCOMMONCONTROLSEX InitCtrls; + InitCtrls.dwSize = sizeof(InitCtrls); + // Set this to include all the common control classes you want to use + // in your application. + InitCtrls.dwICC = ICC_WIN95_CLASSES; + InitCommonControlsEx(&InitCtrls); + + CWinApp::InitInstance(); + + AfxEnableControlContainer(); + + // Standard initialization + // If you are not using these features and wish to reduce the size + // of your final executable, you should remove from the following + // the specific initialization routines you do not need + // Change the registry key under which our settings are stored + // TODO: You should modify this string to be something appropriate + // such as the name of your company or organization + SetRegistryKey(_T("Local AppWizard-Generated Applications")); + + CgtalkphoneDlg dlg; + m_pMainWnd = &dlg; + INT_PTR nResponse = dlg.DoModal(); + if (nResponse == IDOK) + { + // TODO: Place code here to handle when the dialog is + // dismissed with OK + } + else if (nResponse == IDCANCEL) + { + // TODO: Place code here to handle when the dialog is + // dismissed with Cancel + } + + // Since the dialog has been closed, return FALSE so that we exit the + // application, rather than start the application's message pump. + return FALSE; + +} + +///////////////////////////////////////////////////////////////////////////// +// CgtalkphoneApp message handlers + + +int CgtalkphoneApp::ExitInstance() +{ + // TODO: Add your specialized code here and/or call the base class + return CWinApp::ExitInstance(); +} Added: freeswitch/trunk/gtalkphone/gtalkphone.h ============================================================================== --- (empty file) +++ freeswitch/trunk/gtalkphone/gtalkphone.h Wed Aug 30 11:21:42 2006 @@ -0,0 +1,51 @@ +// gtalkphone.h : main header file for the gtalkphone application +// + +#if !defined(AFX_gtalkphone_H__FE6843B0_D2AE_4026_9256_E670EFCEE161__INCLUDED_) +#define AFX_gtalkphone_H__FE6843B0_D2AE_4026_9256_E670EFCEE161__INCLUDED_ + +#if _MSC_VER > 1000 +#pragma once +#endif // _MSC_VER > 1000 + +#ifndef __AFXWIN_H__ + #error include 'stdafx.h' before including this file for PCH +#endif + +#include "resource.h" // main symbols +#include "const.h" +#include "External.h" +///////////////////////////////////////////////////////////////////////////// +// CgtalkphoneApp: +// See gtalkphone.cpp for the implementation of this class +#define APP_MUTEX _T("{53412358-B915-4222-A250-C3D2B3190493}")//generate from guidgen.exe +class CgtalkphoneApp : public CWinApp +{ +public: + CgtalkphoneApp(); + CExternal m_external; + HANDLE m_hMutex; +// Overrides + // ClassWizard generated virtual function overrides + //{{AFX_VIRTUAL(CgtalkphoneApp) + public: + virtual BOOL InitInstance(); + virtual int ExitInstance(); + //}}AFX_VIRTUAL + +// Implementation + //{{AFX_MSG(CgtalkphoneApp) + afx_msg void OnAppAbout(); + // NOTE - the ClassWizard will add and remove member functions here. + // DO NOT EDIT what you see in these blocks of generated code ! + //}}AFX_MSG + DECLARE_MESSAGE_MAP() +}; + + +///////////////////////////////////////////////////////////////////////////// + +//{{AFX_INSERT_LOCATION}} +// Microsoft Visual C++ will insert additional declarations immediately before the previous line. + +#endif // !defined(AFX_gtalkphone_H__FE6843B0_D2AE_4026_9256_E670EFCEE161__INCLUDED_) Added: freeswitch/trunk/gtalkphone/gtalkphone.ncb ============================================================================== Binary file. No diff available. Added: freeswitch/trunk/gtalkphone/gtalkphone.rc ============================================================================== --- (empty file) +++ freeswitch/trunk/gtalkphone/gtalkphone.rc Wed Aug 30 11:21:42 2006 @@ -0,0 +1,220 @@ +// 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 + +///////////////////////////////////////////////////////////////////////////// +// 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 + +///////////////////////////////////////////////////////////////////////////// +// +// Dialog +// + +IDD_ABOUTBOX DIALOGEX 0, 0, 235, 55 +STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "About gtalkphone" +FONT 8, "MS Shell Dlg", 0, 0, 0x1 +BEGIN + ICON IDR_MAINFRAME,IDC_STATIC,11,17,20,20 + LTEXT "gtalkphone Version 1.0",IDC_STATIC,40,10,119,8,SS_NOPREFIX + LTEXT "Copyright (C) 2006",IDC_STATIC,40,25,119,8 + DEFPUSHBUTTON "OK",IDOK,178,7,50,16,WS_GROUP +END + +IDD_gtalkphone_DIALOG DIALOGEX 0, 0, 168, 271 +STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_MINIMIZEBOX | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +EXSTYLE WS_EX_APPWINDOW +CAPTION "GtalkPhone" +FONT 8, "MS Shell Dlg", 0, 0, 0x1 +BEGIN + CONTROL "",IDC_SLIDERSPEAKER,"msctls_trackbar32",TBS_BOTH | TBS_NOTICKS | NOT WS_VISIBLE | WS_TABSTOP,84,81,50,12 + CONTROL "",IDC_SLIDERMIC,"msctls_trackbar32",TBS_BOTH | TBS_NOTICKS | NOT WS_VISIBLE | WS_TABSTOP,16,81,50,12 +END + +IDD_DLGJABBERNETWORK DIALOGEX 0, 0, 313, 292 +STYLE DS_SYSMODAL | DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Jabber Network Setting" +FONT 10, "Microsoft Sans Serif", 400, 0, 0x0 +BEGIN + CONTROL "",IDC_TABJAB,"SysTabControl32",0x0,0,0,313,263 + PUSHBUTTON "OK",IDC_BTOK,210,272,50,14 + PUSHBUTTON "Cancel",IDC_BTCANCEL,263,272,50,14 +END + +IDD_SETTINGDLG DIALOGEX 0, 0, 186, 78 +STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Settings" +FONT 8, "MS Shell Dlg", 400, 0, 0x1 +BEGIN +END + + +///////////////////////////////////////////////////////////////////////////// +// +// HTML +// + +IDR_HTML_gtalkphone_DIALOG HTML "skin\\google\\gtalkphone.htm" +IDR_HTML_SETTINGSDLG HTML "skin\\google\\settingsDlg.htm" + +///////////////////////////////////////////////////////////////////////////// +// +// Version +// + +VS_VERSION_INFO VERSIONINFO + FILEVERSION 1,0,0,1 + PRODUCTVERSION 1,0,0,1 + FILEFLAGSMASK 0x3fL +#ifdef _DEBUG + FILEFLAGS 0x1L +#else + FILEFLAGS 0x0L +#endif + FILEOS 0x4L + FILETYPE 0x1L + FILESUBTYPE 0x0L +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "040904e4" + BEGIN + VALUE "CompanyName", "TODO: <Company name>" + VALUE "FileDescription", "TODO: <File description>" + VALUE "FileVersion", "1.0.0.1" + VALUE "InternalName", "gtalkphone.exe" + VALUE "LegalCopyright", "TODO: (c) <Company name>. All rights reserved." + VALUE "OriginalFilename", "gtalkphone.exe" + VALUE "ProductName", "TODO: <Product name>" + VALUE "ProductVersion", "1.0.0.1" + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x409, 1252 + END +END + + +///////////////////////////////////////////////////////////////////////////// +// +// DESIGNINFO +// + +#ifdef APSTUDIO_INVOKED +GUIDELINES DESIGNINFO +BEGIN + IDD_ABOUTBOX, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 228 + TOPMARGIN, 7 + BOTTOMMARGIN, 48 + END + + IDD_gtalkphone_DIALOG, DIALOG + BEGIN + RIGHTMARGIN, 167 + BOTTOMMARGIN, 270 + END +END +#endif // APSTUDIO_INVOKED + + +///////////////////////////////////////////////////////////////////////////// +// +// Icon +// + +// Icon with lowest ID value placed first to ensure application icon +// remains consistent on all systems. +IDI_ICON2 ICON "C:\\Documents and Settings\\mike.JERRIS\\Desktop\\icons\\gtalkphone_16x16.ico" +IDR_MAINFRAME ICON "C:\\Documents and Settings\\mike.JERRIS\\Desktop\\icons\\gtalkphone_48x48.ico" + +#ifdef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// TEXTINCLUDE +// + +1 TEXTINCLUDE +BEGIN + "resource.h\0" +END + +2 TEXTINCLUDE +BEGIN + "#include ""afxres.h""\r\n" + "\0" +END + +3 TEXTINCLUDE +BEGIN + "#define _AFX_NO_SPLITTER_RESOURCES\r\n" + "#define _AFX_NO_OLE_RESOURCES\r\n" + "#define _AFX_NO_TRACKER_RESOURCES\r\n" + "#define _AFX_NO_PROPERTY_RESOURCES\r\n" + "\r\n" + "#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_CHS)\r\n" + "LANGUAGE 4, 2\r\n" + "#pragma code_page(936)\r\n" + "#include ""res\\gtalkphone.rc2"" // non-Microsoft Visual C++ edited resources\r\n" + "#include ""afxres.rc"" // Standard components\r\n" + "#endif\r\n" + "\0" +END + +#endif // APSTUDIO_INVOKED + + +///////////////////////////////////////////////////////////////////////////// +// +// String Table +// + +STRINGTABLE +BEGIN + IDS_ABOUTBOX "&About gtalkphone..." +END + +#endif // English (U.S.) resources +///////////////////////////////////////////////////////////////////////////// + + + +#ifndef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 3 resource. +// +#define _AFX_NO_SPLITTER_RESOURCES +#define _AFX_NO_OLE_RESOURCES +#define _AFX_NO_TRACKER_RESOURCES +#define _AFX_NO_PROPERTY_RESOURCES + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_CHS) +LANGUAGE 4, 2 +#pragma code_page(936) +#include "res\gtalkphone.rc2" // non-Microsoft Visual C++ edited resources +#include "afxres.rc" // Standard components +#endif + +///////////////////////////////////////////////////////////////////////////// +#endif // not APSTUDIO_INVOKED + Added: freeswitch/trunk/gtalkphone/gtalkphone.sln ============================================================================== --- (empty file) +++ freeswitch/trunk/gtalkphone/gtalkphone.sln Wed Aug 30 11:21:42 2006 @@ -0,0 +1,605 @@ + +Microsoft Visual Studio Solution File, Format Version 9.00 +# Visual Studio 2005 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "FreeSwitchCoreLib", "..\w32\Library\FreeSwitchCore.vcproj", "{202D7A4E-760D-4D0E-AFA1-D7459CED30FF}" + ProjectSection(ProjectDependencies) = postProject + {6EDFEFD5-3596-4FA9-8EBA-B331547B35A3} = {6EDFEFD5-3596-4FA9-8EBA-B331547B35A3} + {101130D1-3EA6-4ED2-B65D-CEB5243A20ED} = {101130D1-3EA6-4ED2-B65D-CEB5243A20ED} + {EEF031CB-FED8-451E-A471-91EC8D4F6750} = {EEF031CB-FED8-451E-A471-91EC8D4F6750} + {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} + {F057DA7F-79E5-4B00-845C-EF446EF055E3} = {F057DA7F-79E5-4B00-845C-EF446EF055E3} + {8D04B550-D240-4A44-8A18-35DA3F7038D9} = {8D04B550-D240-4A44-8A18-35DA3F7038D9} + {50AD0E28-B8D7-4FCC-8FC3-599F6AC69761} = {50AD0E28-B8D7-4FCC-8FC3-599F6AC69761} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_gsm", "..\src\mod\codecs\mod_gsm\mod_gsm.vcproj", "{4926323F-4EA8-4B7D-A3D3-65488725988F}" + ProjectSection(ProjectDependencies) = postProject + {8FD2E297-4096-47E5-9258-C48FF1841523} = {8FD2E297-4096-47E5-9258-C48FF1841523} + {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_sndfile", "..\src\mod\formats\mod_sndfile\mod_sndfile.vcproj", "{AFAC0568-7548-42D5-9F6A-8D3400A1E4F6}" + ProjectSection(ProjectDependencies) = postProject + {101130D1-3EA6-4ED2-B65D-CEB5243A20ED} = {101130D1-3EA6-4ED2-B65D-CEB5243A20ED} + {3D0370CA-BED2-4657-A475-32375CBCB6E4} = {3D0370CA-BED2-4657-A475-32375CBCB6E4} + {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} + {F057DA7F-79E5-4B00-845C-EF446EF055E3} = {F057DA7F-79E5-4B00-845C-EF446EF055E3} + {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_bridgecall", "..\src\mod\applications\mod_bridgecall\mod_bridgecall.vcproj", "{E1794405-29D4-466D-9BE3-DD2344C2A663}" + ProjectSection(ProjectDependencies) = postProject + {101130D1-3EA6-4ED2-B65D-CEB5243A20ED} = {101130D1-3EA6-4ED2-B65D-CEB5243A20ED} + {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} + {F057DA7F-79E5-4B00-845C-EF446EF055E3} = {F057DA7F-79E5-4B00-845C-EF446EF055E3} + {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_exosip", "..\src\mod\endpoints\mod_exosip\mod_exosip.vcproj", "{45DF84ED-D24A-4FF6-B5B0-0A9A5FDB9552}" + ProjectSection(ProjectDependencies) = postProject + {6EDFEFD5-3596-4FA9-8EBA-B331547B35A3} = {6EDFEFD5-3596-4FA9-8EBA-B331547B35A3} + {101130D1-3EA6-4ED2-B65D-CEB5243A20ED} = {101130D1-3EA6-4ED2-B65D-CEB5243A20ED} + {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} + {F057DA7F-79E5-4B00-845C-EF446EF055E3} = {F057DA7F-79E5-4B00-845C-EF446EF055E3} + {44F46B7E-0E51-4304-9735-330DFBAB41E5} = {44F46B7E-0E51-4304-9735-330DFBAB41E5} + {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} + {4EA67539-9EE9-4065-BD39-87E517FD8262} = {4EA67539-9EE9-4065-BD39-87E517FD8262} + {85255507-5D16-4218-85E2-F683BB2F04DA} = {85255507-5D16-4218-85E2-F683BB2F04DA} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_g711", "..\src\mod\codecs\mod_g711\mod_g711.vcproj", "{B1FE4613-3F4B-4DAF-9714-2472BF8F56AE}" + ProjectSection(ProjectDependencies) = postProject + {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_iax", "..\src\mod\endpoints\mod_iax\mod_iax.vcproj", "{3A5B9131-F20C-4A85-9447-6C1610941CEE}" + ProjectSection(ProjectDependencies) = postProject + {101130D1-3EA6-4ED2-B65D-CEB5243A20ED} = {101130D1-3EA6-4ED2-B65D-CEB5243A20ED} + {5CC054B7-6DAA-46BF-9A08-3B33B83E8D3E} = {5CC054B7-6DAA-46BF-9A08-3B33B83E8D3E} + {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} + {F057DA7F-79E5-4B00-845C-EF446EF055E3} = {F057DA7F-79E5-4B00-845C-EF446EF055E3} + {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_playback", "..\src\mod\applications\mod_playback\mod_playback.vcproj", "{78100236-7CEA-4948-96CC-E8ED3160329C}" + ProjectSection(ProjectDependencies) = postProject + {101130D1-3EA6-4ED2-B65D-CEB5243A20ED} = {101130D1-3EA6-4ED2-B65D-CEB5243A20ED} + {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} + {F057DA7F-79E5-4B00-845C-EF446EF055E3} = {F057DA7F-79E5-4B00-845C-EF446EF055E3} + {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_PortAudio", "..\src\mod\endpoints\mod_portaudio\mod_PortAudio.vcproj", "{5FD31A25-5D83-4794-8BEE-904DAD84CE71}" + ProjectSection(ProjectDependencies) = postProject + {C30D35E4-7FC6-4E97-9BE5-4BC077BE0D4B} = {C30D35E4-7FC6-4E97-9BE5-4BC077BE0D4B} + {101130D1-3EA6-4ED2-B65D-CEB5243A20ED} = {101130D1-3EA6-4ED2-B65D-CEB5243A20ED} + {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} + {F057DA7F-79E5-4B00-845C-EF446EF055E3} = {F057DA7F-79E5-4B00-845C-EF446EF055E3} + {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_l16", "..\src\mod\codecs\mod_l16\mod_l16.vcproj", "{5844AFE1-AA3E-4BDB-A9EF-119AEF19DF88}" + ProjectSection(ProjectDependencies) = postProject + {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_softtimer", "..\src\mod\timers\mod_softtimer\mod_softtimer.vcproj", "{DCC13474-28DF-47CA-A8EB-72F8CE9A78C5}" + ProjectSection(ProjectDependencies) = postProject + {101130D1-3EA6-4ED2-B65D-CEB5243A20ED} = {101130D1-3EA6-4ED2-B65D-CEB5243A20ED} + {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} + {F057DA7F-79E5-4B00-845C-EF446EF055E3} = {F057DA7F-79E5-4B00-845C-EF446EF055E3} + {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_speex", "..\src\mod\codecs\mod_speex\mod_speex.vcproj", "{5580D60E-0F77-4716-9CD4-B8E5986FA375}" + ProjectSection(ProjectDependencies) = postProject + {1C469CDD-A3AF-4A94-A592-B2CF12F2D918} = {1C469CDD-A3AF-4A94-A592-B2CF12F2D918} + {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} + EndProjectSection +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Codecs", "Codecs", "{F881ADA2-2F1A-4046-9FEB-191D9422D781}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Endpoints", "Endpoints", "{9460B5F1-0A95-41C4-BEB7-9C2C96459A7C}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Applications", "Applications", "{E72B5BCB-6462-4D23-B419-3AF1A4AC3D78}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Dialplans", "Dialplans", "{C5F182F9-754A-4EC5-B50F-76ED02BE13F4}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Formats", "Formats", "{A5A27244-AD24-46E5-B01B-840CD296C91D}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Timers", "Timers", "{2D57D093-3F8D-4729-AD9A-68E945C200A5}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_dialplan_xml", "..\src\mod\dialplans\mod_dialplan_xml\mod_dialplan_xml.vcproj", "{07113B25-D3AF-4E04-BA77-4CD1171F022C}" + ProjectSection(ProjectDependencies) = postProject + {101130D1-3EA6-4ED2-B65D-CEB5243A20ED} = {101130D1-3EA6-4ED2-B65D-CEB5243A20ED} + {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} + {F057DA7F-79E5-4B00-845C-EF446EF055E3} = {F057DA7F-79E5-4B00-845C-EF446EF055E3} + {8D04B550-D240-4A44-8A18-35DA3F7038D9} = {8D04B550-D240-4A44-8A18-35DA3F7038D9} + {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} + EndProjectSection +EndProject +Project("{54435603-DBB4-11D2-8724-00A0C9A8B90C}") = "GtalkSetup", "Setup\Setup.vdproj", "{B17FFBE6-A942-4056-8346-B624FB5D995B}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libteletone", "..\libs\libteletone\libteletone.vcproj", "{89385C74-5860-4174-9CAF-A39E7C48909C}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_ilbc", "..\src\mod\codecs\mod_ilbc\mod_ilbc.vcproj", "{D3EC0AFF-76FC-4210-A825-9A17410660A3}" + ProjectSection(ProjectDependencies) = postProject + {989BB874-7AF1-44CB-8E5C-CC8113D267E8} = {989BB874-7AF1-44CB-8E5C-CC8113D267E8} + {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_dingaling", "..\src\mod\endpoints\mod_dingaling\mod_dingaling.vcproj", "{FFAA4C52-3A53-4F99-90C1-D59D1F0427F3}" + ProjectSection(ProjectDependencies) = postProject + {E727E8F6-935D-46FE-8B0E-37834748A0E3} = {E727E8F6-935D-46FE-8B0E-37834748A0E3} + {101130D1-3EA6-4ED2-B65D-CEB5243A20ED} = {101130D1-3EA6-4ED2-B65D-CEB5243A20ED} + {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} + {F057DA7F-79E5-4B00-845C-EF446EF055E3} = {F057DA7F-79E5-4B00-845C-EF446EF055E3} + {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} + {1906D736-08BD-4EE1-924F-B536249B9A54} = {1906D736-08BD-4EE1-924F-B536249B9A54} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_commands", "..\src\mod\applications\mod_commands\mod_commands.vcproj", "{30A5B29C-983E-4580-9FD0-D647CCDCC7EB}" + ProjectSection(ProjectDependencies) = postProject + {6EDFEFD5-3596-4FA9-8EBA-B331547B35A3} = {6EDFEFD5-3596-4FA9-8EBA-B331547B35A3} + {101130D1-3EA6-4ED2-B65D-CEB5243A20ED} = {101130D1-3EA6-4ED2-B65D-CEB5243A20ED} + {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} + {F057DA7F-79E5-4B00-845C-EF446EF055E3} = {F057DA7F-79E5-4B00-845C-EF446EF055E3} + {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} + EndProjectSection +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Loggers", "Loggers", "{A7AB4405-FDB7-4853-9FBB-1516B1C3D80A}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_console", "..\src\mod\loggers\mod_console\mod_console.vcproj", "{1C453396-D912-4213-89FD-9B489162B7B5}" + ProjectSection(ProjectDependencies) = postProject + {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_conference", "..\src\mod\applications\mod_conference\mod_conference.vcproj", "{C24FB505-05D7-4319-8485-7540B44C8603}" + ProjectSection(ProjectDependencies) = postProject + {101130D1-3EA6-4ED2-B65D-CEB5243A20ED} = {101130D1-3EA6-4ED2-B65D-CEB5243A20ED} + {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} + {F057DA7F-79E5-4B00-845C-EF446EF055E3} = {F057DA7F-79E5-4B00-845C-EF446EF055E3} + {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_dptools", "..\src\mod\applications\mod_dptools\mod_dptools.vcproj", "{B5881A85-FE70-4F64-8607-2CAAE52669C6}" + ProjectSection(ProjectDependencies) = postProject + {101130D1-3EA6-4ED2-B65D-CEB5243A20ED} = {101130D1-3EA6-4ED2-B65D-CEB5243A20ED} + {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} + {F057DA7F-79E5-4B00-845C-EF446EF055E3} = {F057DA7F-79E5-4B00-845C-EF446EF055E3} + {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} + EndProjectSection +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "_Libraries", "_Libraries", "{EB910B0D-F27D-4B62-B67B-DE834C99AC5B}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libgsm", "..\libs\codec\gsm\libgsm.vcproj", "{8FD2E297-4096-47E5-9258-C48FF1841523}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libilbc", "..\libs\codec\ilbc\libilbc.vcproj", "{989BB874-7AF1-44CB-8E5C-CC8113D267E8}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libiax2", "..\libs\iax\libiax2.vcproj", "{5CC054B7-6DAA-46BF-9A08-3B33B83E8D3E}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libdingaling", "..\libs\libdingaling\libdingaling.vcproj", "{1906D736-08BD-4EE1-924F-B536249B9A54}" + ProjectSection(ProjectDependencies) = postProject + {E727E8F6-935D-46FE-8B0E-37834748A0E3} = {E727E8F6-935D-46FE-8B0E-37834748A0E3} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libsrtp", "..\libs\srtp\libsrtp.vcproj", "{EEF031CB-FED8-451E-A471-91EC8D4F6750}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libsqlite", "..\libs\win32\sqlite\sqlite.vcproj", "{6EDFEFD5-3596-4FA9-8EBA-B331547B35A3}" + ProjectSection(ProjectDependencies) = postProject + {6B9217D6-8259-4817-B8A5-2FEAD349EDEB} = {6B9217D6-8259-4817-B8A5-2FEAD349EDEB} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libpcre", "..\libs\win32\pcre\libpcre.vcproj", "{8D04B550-D240-4A44-8A18-35DA3F7038D9}" + ProjectSection(ProjectDependencies) = postProject + {1CED5987-A529-46DC-B30F-870D85FF9C94} = {1CED5987-A529-46DC-B30F-870D85FF9C94} + {91695C7C-7AD1-4782-9727-508F82D9C577} = {91695C7C-7AD1-4782-9727-508F82D9C577} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libpcre Generate pcre_chartables.c", "..\libs\win32\pcre\pcre_chartables.c.vcproj", "{1CED5987-A529-46DC-B30F-870D85FF9C94}" + ProjectSection(ProjectDependencies) = postProject + {91695C7C-7AD1-4782-9727-508F82D9C577} = {91695C7C-7AD1-4782-9727-508F82D9C577} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libresample", "..\libs\win32\libresample\libresample.vcproj", "{50AD0E28-B8D7-4FCC-8FC3-599F6AC69761}" + ProjectSection(ProjectDependencies) = postProject + {C3B50FF8-E49B-4589-B07A-4D7866980669} = {C3B50FF8-E49B-4589-B07A-4D7866980669} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libapr", "..\libs\win32\apr\libapr.vcproj", "{F6C55D93-B927-4483-BB69-15AEF3DD2DFF}" + ProjectSection(ProjectDependencies) = postProject + {C4854C1D-5478-4F87-AB62-36CCDDDBA3C7} = {C4854C1D-5478-4F87-AB62-36CCDDDBA3C7} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libapriconv", "..\libs\win32\apr-iconv\libapriconv.vcproj", "{101130D1-3EA6-4ED2-B65D-CEB5243A20ED}" + ProjectSection(ProjectDependencies) = postProject + {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} + {5786D51D-1C6A-4BE1-8804-29954DB5258F} = {5786D51D-1C6A-4BE1-8804-29954DB5258F} + {C4854C1D-5478-4F87-AB62-36CCDDDBA3C7} = {C4854C1D-5478-4F87-AB62-36CCDDDBA3C7} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libaprutil", "..\libs\win32\apr-util\libaprutil.vcproj", "{F057DA7F-79E5-4B00-845C-EF446EF055E3}" + ProjectSection(ProjectDependencies) = postProject + {E969F3E0-1043-482A-AD49-787B8356BA92} = {E969F3E0-1043-482A-AD49-787B8356BA92} + {101130D1-3EA6-4ED2-B65D-CEB5243A20ED} = {101130D1-3EA6-4ED2-B65D-CEB5243A20ED} + {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} + {5786D51D-1C6A-4BE1-8804-29954DB5258F} = {5786D51D-1C6A-4BE1-8804-29954DB5258F} + {C4854C1D-5478-4F87-AB62-36CCDDDBA3C7} = {C4854C1D-5478-4F87-AB62-36CCDDDBA3C7} + EndProjectSection +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "_Downloads", "_Downloads", "{C120A020-773F-4EA3-923F-B67AF28B750D}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Download APR", "..\libs\win32\Download APR.vcproj", "{C4854C1D-5478-4F87-AB62-36CCDDDBA3C7}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Download APR-Iconv", "..\libs\win32\Download APR-Iconv.vcproj", "{5786D51D-1C6A-4BE1-8804-29954DB5258F}" + ProjectSection(ProjectDependencies) = postProject + {C4854C1D-5478-4F87-AB62-36CCDDDBA3C7} = {C4854C1D-5478-4F87-AB62-36CCDDDBA3C7} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Download APR-Util", "..\libs\win32\Download APR-Util.vcproj", "{E969F3E0-1043-482A-AD49-787B8356BA92}" + ProjectSection(ProjectDependencies) = postProject + {5786D51D-1C6A-4BE1-8804-29954DB5258F} = {5786D51D-1C6A-4BE1-8804-29954DB5258F} + {C4854C1D-5478-4F87-AB62-36CCDDDBA3C7} = {C4854C1D-5478-4F87-AB62-36CCDDDBA3C7} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Download LIBRESAMPLE", "..\libs\win32\Download LIBRESAMPLE.vcproj", "{C3B50FF8-E49B-4589-B07A-4D7866980669}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Download PCRE", "..\libs\win32\Download PCRE.vcproj", "{91695C7C-7AD1-4782-9727-508F82D9C577}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Download SQLITE", "..\libs\win32\Download SQLITE.vcproj", "{6B9217D6-8259-4817-B8A5-2FEAD349EDEB}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Download SPEEX", "..\libs\win32\Download SPEEX.vcproj", "{5C9C69D2-8B98-42DA-8D82-6E0B48446FAC}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libspeex", "..\libs\win32\speex\libspeex.vcproj", "{1C469CDD-A3AF-4A94-A592-B2CF12F2D918}" + ProjectSection(ProjectDependencies) = postProject + {5C9C69D2-8B98-42DA-8D82-6E0B48446FAC} = {5C9C69D2-8B98-42DA-8D82-6E0B48446FAC} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Download IKSEMEL", "..\libs\win32\Download IKSEMEL.vcproj", "{F8C28DF9-D76A-449E-A621-D97D869974DA}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "iksemel", "..\libs\win32\iksemel\iksemel.vcproj", "{E727E8F6-935D-46FE-8B0E-37834748A0E3}" + ProjectSection(ProjectDependencies) = postProject + {F8C28DF9-D76A-449E-A621-D97D869974DA} = {F8C28DF9-D76A-449E-A621-D97D869974DA} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Download PORTAUDIO", "..\libs\win32\Download PORTAUDIO.vcproj", "{985135DA-BBE1-42D2-8A85-1F7DF0609B3D}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "PAStaticWMME", "..\libs\win32\portaudio\PAStaticWMME.vcproj", "{C30D35E4-7FC6-4E97-9BE5-4BC077BE0D4B}" + ProjectSection(ProjectDependencies) = postProject + {985135DA-BBE1-42D2-8A85-1F7DF0609B3D} = {985135DA-BBE1-42D2-8A85-1F7DF0609B3D} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Download EXOSIP", "..\libs\win32\Download EXOSIP.vcproj", "{C038D7B4-B116-4C3E-93E2-45D295429808}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "eXosip", "..\libs\win32\exosip\eXosip.vcproj", "{4EA67539-9EE9-4065-BD39-87E517FD8262}" + ProjectSection(ProjectDependencies) = postProject + {C038D7B4-B116-4C3E-93E2-45D295429808} = {C038D7B4-B116-4C3E-93E2-45D295429808} + {44F46B7E-0E51-4304-9735-330DFBAB41E5} = {44F46B7E-0E51-4304-9735-330DFBAB41E5} + {85255507-5D16-4218-85E2-F683BB2F04DA} = {85255507-5D16-4218-85E2-F683BB2F04DA} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "osip2", "..\libs\win32\exosip\osip2.vcproj", "{85255507-5D16-4218-85E2-F683BB2F04DA}" + ProjectSection(ProjectDependencies) = postProject + {C038D7B4-B116-4C3E-93E2-45D295429808} = {C038D7B4-B116-4C3E-93E2-45D295429808} + {44F46B7E-0E51-4304-9735-330DFBAB41E5} = {44F46B7E-0E51-4304-9735-330DFBAB41E5} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "osipparser2", "..\libs\win32\exosip\osipparser2.vcproj", "{44F46B7E-0E51-4304-9735-330DFBAB41E5}" + ProjectSection(ProjectDependencies) = postProject + {C038D7B4-B116-4C3E-93E2-45D295429808} = {C038D7B4-B116-4C3E-93E2-45D295429808} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Download LIBSNDFILE", "..\libs\win32\Download LIBSNDFILE.vcproj", "{EFA9E76E-62A5-4237-B7E9-F39B8E174CD5}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libsndfile", "..\libs\win32\libsndfile\libsndfile.vcproj", "{3D0370CA-BED2-4657-A475-32375CBCB6E4}" + ProjectSection(ProjectDependencies) = postProject + {EFA9E76E-62A5-4237-B7E9-F39B8E174CD5} = {EFA9E76E-62A5-4237-B7E9-F39B8E174CD5} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Download CURL", "..\libs\win32\Download CURL.vcproj", "{831F76E8-D288-4C54-9B6D-281D9436CCC7}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "curllib", "..\libs\win32\curl\curllib.vcproj", "{87EE9DA4-DE1E-4448-8324-183C98DCA588}" + ProjectSection(ProjectDependencies) = postProject + {831F76E8-D288-4C54-9B6D-281D9436CCC7} = {831F76E8-D288-4C54-9B6D-281D9436CCC7} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "xml", "..\libs\win32\apr-util\xml.vcproj", "{155844C3-EC5F-407F-97A4-A2DDADED9B2F}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gtalkphone", "gtalkphone.vcproj", "{14187C61-F357-4151-AEDE-F562645FB3F3}" + ProjectSection(ProjectDependencies) = postProject + {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} + {F057DA7F-79E5-4B00-845C-EF446EF055E3} = {F057DA7F-79E5-4B00-845C-EF446EF055E3} + {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} + {101130D1-3EA6-4ED2-B65D-CEB5243A20ED} = {101130D1-3EA6-4ED2-B65D-CEB5243A20ED} + {861345DE-6846-43AD-8012-043810D0E465} = {861345DE-6846-43AD-8012-043810D0E465} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "google", "google\google.vcproj", "{861345DE-6846-43AD-8012-043810D0E465}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Win32 = Debug|Win32 + Release|Win32 = Release|Win32 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}.Debug|Win32.ActiveCfg = Debug|Win32 + {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}.Debug|Win32.Build.0 = Debug|Win32 + {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}.Release|Win32.ActiveCfg = Release|Win32 + {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}.Release|Win32.Build.0 = Release|Win32 + {4926323F-4EA8-4B7D-A3D3-65488725988F}.Debug|Win32.ActiveCfg = Debug|Win32 + {4926323F-4EA8-4B7D-A3D3-65488725988F}.Debug|Win32.Build.0 = Debug|Win32 + {4926323F-4EA8-4B7D-A3D3-65488725988F}.Release|Win32.ActiveCfg = Release|Win32 + {4926323F-4EA8-4B7D-A3D3-65488725988F}.Release|Win32.Build.0 = Release|Win32 + {AFAC0568-7548-42D5-9F6A-8D3400A1E4F6}.Debug|Win32.ActiveCfg = Debug|Win32 + {AFAC0568-7548-42D5-9F6A-8D3400A1E4F6}.Debug|Win32.Build.0 = Debug|Win32 + {AFAC0568-7548-42D5-9F6A-8D3400A1E4F6}.Release|Win32.ActiveCfg = Release|Win32 + {AFAC0568-7548-42D5-9F6A-8D3400A1E4F6}.Release|Win32.Build.0 = Release|Win32 + {E1794405-29D4-466D-9BE3-DD2344C2A663}.Debug|Win32.ActiveCfg = Debug|Win32 + {E1794405-29D4-466D-9BE3-DD2344C2A663}.Debug|Win32.Build.0 = Debug|Win32 + {E1794405-29D4-466D-9BE3-DD2344C2A663}.Release|Win32.ActiveCfg = Release|Win32 + {E1794405-29D4-466D-9BE3-DD2344C2A663}.Release|Win32.Build.0 = Release|Win32 + {45DF84ED-D24A-4FF6-B5B0-0A9A5FDB9552}.Debug|Win32.ActiveCfg = Debug|Win32 + {45DF84ED-D24A-4FF6-B5B0-0A9A5FDB9552}.Debug|Win32.Build.0 = Debug|Win32 + {45DF84ED-D24A-4FF6-B5B0-0A9A5FDB9552}.Release|Win32.ActiveCfg = Release|Win32 + {45DF84ED-D24A-4FF6-B5B0-0A9A5FDB9552}.Release|Win32.Build.0 = Release|Win32 + {B1FE4613-3F4B-4DAF-9714-2472BF8F56AE}.Debug|Win32.ActiveCfg = Debug|Win32 + {B1FE4613-3F4B-4DAF-9714-2472BF8F56AE}.Debug|Win32.Build.0 = Debug|Win32 + {B1FE4613-3F4B-4DAF-9714-2472BF8F56AE}.Release|Win32.ActiveCfg = Release|Win32 + {B1FE4613-3F4B-4DAF-9714-2472BF8F56AE}.Release|Win32.Build.0 = Release|Win32 + {3A5B9131-F20C-4A85-9447-6C1610941CEE}.Debug|Win32.ActiveCfg = Debug|Win32 + {3A5B9131-F20C-4A85-9447-6C1610941CEE}.Debug|Win32.Build.0 = Debug|Win32 + {3A5B9131-F20C-4A85-9447-6C1610941CEE}.Release|Win32.ActiveCfg = Release|Win32 + {3A5B9131-F20C-4A85-9447-6C1610941CEE}.Release|Win32.Build.0 = Release|Win32 + {78100236-7CEA-4948-96CC-E8ED3160329C}.Debug|Win32.ActiveCfg = Debug|Win32 + {78100236-7CEA-4948-96CC-E8ED3160329C}.Debug|Win32.Build.0 = Debug|Win32 + {78100236-7CEA-4948-96CC-E8ED3160329C}.Release|Win32.ActiveCfg = Release|Win32 + {78100236-7CEA-4948-96CC-E8ED3160329C}.Release|Win32.Build.0 = Release|Win32 + {5FD31A25-5D83-4794-8BEE-904DAD84CE71}.Debug|Win32.ActiveCfg = Debug|Win32 + {5FD31A25-5D83-4794-8BEE-904DAD84CE71}.Debug|Win32.Build.0 = Debug|Win32 + {5FD31A25-5D83-4794-8BEE-904DAD84CE71}.Release|Win32.ActiveCfg = Release|Win32 + {5FD31A25-5D83-4794-8BEE-904DAD84CE71}.Release|Win32.Build.0 = Release|Win32 + {5844AFE1-AA3E-4BDB-A9EF-119AEF19DF88}.Debug|Win32.ActiveCfg = Debug|Win32 + {5844AFE1-AA3E-4BDB-A9EF-119AEF19DF88}.Debug|Win32.Build.0 = Debug|Win32 + {5844AFE1-AA3E-4BDB-A9EF-119AEF19DF88}.Release|Win32.ActiveCfg = Release|Win32 + {5844AFE1-AA3E-4BDB-A9EF-119AEF19DF88}.Release|Win32.Build.0 = Release|Win32 + {DCC13474-28DF-47CA-A8EB-72F8CE9A78C5}.Debug|Win32.ActiveCfg = Debug|Win32 + {DCC13474-28DF-47CA-A8EB-72F8CE9A78C5}.Debug|Win32.Build.0 = Debug|Win32 + {DCC13474-28DF-47CA-A8EB-72F8CE9A78C5}.Release|Win32.ActiveCfg = Release|Win32 + {DCC13474-28DF-47CA-A8EB-72F8CE9A78C5}.Release|Win32.Build.0 = Release|Win32 + {5580D60E-0F77-4716-9CD4-B8E5986FA375}.Debug|Win32.ActiveCfg = Debug|Win32 + {5580D60E-0F77-4716-9CD4-B8E5986FA375}.Debug|Win32.Build.0 = Debug|Win32 + {5580D60E-0F77-4716-9CD4-B8E5986FA375}.Release|Win32.ActiveCfg = Release|Win32 + {5580D60E-0F77-4716-9CD4-B8E5986FA375}.Release|Win32.Build.0 = Release|Win32 + {07113B25-D3AF-4E04-BA77-4CD1171F022C}.Debug|Win32.ActiveCfg = Debug|Win32 + {07113B25-D3AF-4E04-BA77-4CD1171F022C}.Debug|Win32.Build.0 = Debug|Win32 + {07113B25-D3AF-4E04-BA77-4CD1171F022C}.Release|Win32.ActiveCfg = Release|Win32 + {07113B25-D3AF-4E04-BA77-4CD1171F022C}.Release|Win32.Build.0 = Release|Win32 + {B17FFBE6-A942-4056-8346-B624FB5D995B}.Debug|Win32.ActiveCfg = Debug + {B17FFBE6-A942-4056-8346-B624FB5D995B}.Release|Win32.ActiveCfg = Release + {89385C74-5860-4174-9CAF-A39E7C48909C}.Debug|Win32.ActiveCfg = Debug|Win32 + {89385C74-5860-4174-9CAF-A39E7C48909C}.Debug|Win32.Build.0 = Debug|Win32 + {89385C74-5860-4174-9CAF-A39E7C48909C}.Release|Win32.ActiveCfg = Release|Win32 + {89385C74-5860-4174-9CAF-A39E7C48909C}.Release|Win32.Build.0 = Release|Win32 + {D3EC0AFF-76FC-4210-A825-9A17410660A3}.Debug|Win32.ActiveCfg = Debug|Win32 + {D3EC0AFF-76FC-4210-A825-9A17410660A3}.Debug|Win32.Build.0 = Debug|Win32 + {D3EC0AFF-76FC-4210-A825-9A17410660A3}.Release|Win32.ActiveCfg = Release|Win32 + {D3EC0AFF-76FC-4210-A825-9A17410660A3}.Release|Win32.Build.0 = Release|Win32 + {FFAA4C52-3A53-4F99-90C1-D59D1F0427F3}.Debug|Win32.ActiveCfg = Debug|Win32 + {FFAA4C52-3A53-4F99-90C1-D59D1F0427F3}.Debug|Win32.Build.0 = Debug|Win32 + {FFAA4C52-3A53-4F99-90C1-D59D1F0427F3}.Release|Win32.ActiveCfg = Release|Win32 + {FFAA4C52-3A53-4F99-90C1-D59D1F0427F3}.Release|Win32.Build.0 = Release|Win32 + {30A5B29C-983E-4580-9FD0-D647CCDCC7EB}.Debug|Win32.ActiveCfg = Debug|Win32 + {30A5B29C-983E-4580-9FD0-D647CCDCC7EB}.Debug|Win32.Build.0 = Debug|Win32 + {30A5B29C-983E-4580-9FD0-D647CCDCC7EB}.Release|Win32.ActiveCfg = Release|Win32 + {30A5B29C-983E-4580-9FD0-D647CCDCC7EB}.Release|Win32.Build.0 = Release|Win32 + {1C453396-D912-4213-89FD-9B489162B7B5}.Debug|Win32.ActiveCfg = Debug|Win32 + {1C453396-D912-4213-89FD-9B489162B7B5}.Debug|Win32.Build.0 = Debug|Win32 + {1C453396-D912-4213-89FD-9B489162B7B5}.Release|Win32.ActiveCfg = Release|Win32 + {1C453396-D912-4213-89FD-9B489162B7B5}.Release|Win32.Build.0 = Release|Win32 + {C24FB505-05D7-4319-8485-7540B44C8603}.Debug|Win32.ActiveCfg = Debug|Win32 + {C24FB505-05D7-4319-8485-7540B44C8603}.Debug|Win32.Build.0 = Debug|Win32 + {C24FB505-05D7-4319-8485-7540B44C8603}.Release|Win32.ActiveCfg = Release|Win32 + {C24FB505-05D7-4319-8485-7540B44C8603}.Release|Win32.Build.0 = Release|Win32 + {B5881A85-FE70-4F64-8607-2CAAE52669C6}.Debug|Win32.ActiveCfg = Debug|Win32 + {B5881A85-FE70-4F64-8607-2CAAE52669C6}.Debug|Win32.Build.0 = Debug|Win32 + {B5881A85-FE70-4F64-8607-2CAAE52669C6}.Release|Win32.ActiveCfg = Release|Win32 + {B5881A85-FE70-4F64-8607-2CAAE52669C6}.Release|Win32.Build.0 = Release|Win32 + {8FD2E297-4096-47E5-9258-C48FF1841523}.Debug|Win32.ActiveCfg = Debug|Win32 + {8FD2E297-4096-47E5-9258-C48FF1841523}.Debug|Win32.Build.0 = Debug|Win32 + {8FD2E297-4096-47E5-9258-C48FF1841523}.Release|Win32.ActiveCfg = Release|Win32 + {8FD2E297-4096-47E5-9258-C48FF1841523}.Release|Win32.Build.0 = Release|Win32 + {989BB874-7AF1-44CB-8E5C-CC8113D267E8}.Debug|Win32.ActiveCfg = Debug|Win32 + {989BB874-7AF1-44CB-8E5C-CC8113D267E8}.Debug|Win32.Build.0 = Debug|Win32 + {989BB874-7AF1-44CB-8E5C-CC8113D267E8}.Release|Win32.ActiveCfg = Release|Win32 + {989BB874-7AF1-44CB-8E5C-CC8113D267E8}.Release|Win32.Build.0 = Release|Win32 + {5CC054B7-6DAA-46BF-9A08-3B33B83E8D3E}.Debug|Win32.ActiveCfg = Debug|Win32 + {5CC054B7-6DAA-46BF-9A08-3B33B83E8D3E}.Debug|Win32.Build.0 = Debug|Win32 + {5CC054B7-6DAA-46BF-9A08-3B33B83E8D3E}.Release|Win32.ActiveCfg = Release|Win32 + {5CC054B7-6DAA-46BF-9A08-3B33B83E8D3E}.Release|Win32.Build.0 = Release|Win32 + {1906D736-08BD-4EE1-924F-B536249B9A54}.Debug|Win32.ActiveCfg = Debug|Win32 + {1906D736-08BD-4EE1-924F-B536249B9A54}.Debug|Win32.Build.0 = Debug|Win32 + {1906D736-08BD-4EE1-924F-B536249B9A54}.Release|Win32.ActiveCfg = Release|Win32 + {1906D736-08BD-4EE1-924F-B536249B9A54}.Release|Win32.Build.0 = Release|Win32 + {EEF031CB-FED8-451E-A471-91EC8D4F6750}.Debug|Win32.ActiveCfg = Debug|Win32 + {EEF031CB-FED8-451E-A471-91EC8D4F6750}.Debug|Win32.Build.0 = Debug|Win32 + {EEF031CB-FED8-451E-A471-91EC8D4F6750}.Release|Win32.ActiveCfg = Release|Win32 + {EEF031CB-FED8-451E-A471-91EC8D4F6750}.Release|Win32.Build.0 = Release|Win32 + {6EDFEFD5-3596-4FA9-8EBA-B331547B35A3}.Debug|Win32.ActiveCfg = Debug DLL|Win32 + {6EDFEFD5-3596-4FA9-8EBA-B331547B35A3}.Debug|Win32.Build.0 = Debug DLL|Win32 + {6EDFEFD5-3596-4FA9-8EBA-B331547B35A3}.Release|Win32.ActiveCfg = Release DLL|Win32 + {6EDFEFD5-3596-4FA9-8EBA-B331547B35A3}.Release|Win32.Build.0 = Release DLL|Win32 + {8D04B550-D240-4A44-8A18-35DA3F7038D9}.Debug|Win32.ActiveCfg = Debug DLL|Win32 + {8D04B550-D240-4A44-8A18-35DA3F7038D9}.Debug|Win32.Build.0 = Debug DLL|Win32 + {8D04B550-D240-4A44-8A18-35DA3F7038D9}.Release|Win32.ActiveCfg = Release DLL|Win32 + {8D04B550-D240-4A44-8A18-35DA3F7038D9}.Release|Win32.Build.0 = Release DLL|Win32 + {1CED5987-A529-46DC-B30F-870D85FF9C94}.Debug|Win32.ActiveCfg = Debug|Win32 + {1CED5987-A529-46DC-B30F-870D85FF9C94}.Debug|Win32.Build.0 = Debug|Win32 + {1CED5987-A529-46DC-B30F-870D85FF9C94}.Release|Win32.ActiveCfg = Release|Win32 + {1CED5987-A529-46DC-B30F-870D85FF9C94}.Release|Win32.Build.0 = Release|Win32 + {50AD0E28-B8D7-4FCC-8FC3-599F6AC69761}.Debug|Win32.ActiveCfg = Debug|Win32 + {50AD0E28-B8D7-4FCC-8FC3-599F6AC69761}.Debug|Win32.Build.0 = Debug|Win32 + {50AD0E28-B8D7-4FCC-8FC3-599F6AC69761}.Release|Win32.ActiveCfg = Release|Win32 + {50AD0E28-B8D7-4FCC-8FC3-599F6AC69761}.Release|Win32.Build.0 = Release|Win32 + {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}.Debug|Win32.ActiveCfg = Debug|Win32 + {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}.Debug|Win32.Build.0 = Debug|Win32 + {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}.Release|Win32.ActiveCfg = Release|Win32 + {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}.Release|Win32.Build.0 = Release|Win32 + {101130D1-3EA6-4ED2-B65D-CEB5243A20ED}.Debug|Win32.ActiveCfg = Debug|Win32 + {101130D1-3EA6-4ED2-B65D-CEB5243A20ED}.Debug|Win32.Build.0 = Debug|Win32 + {101130D1-3EA6-4ED2-B65D-CEB5243A20ED}.Release|Win32.ActiveCfg = Release|Win32 + {101130D1-3EA6-4ED2-B65D-CEB5243A20ED}.Release|Win32.Build.0 = Release|Win32 + {F057DA7F-79E5-4B00-845C-EF446EF055E3}.Debug|Win32.ActiveCfg = Debug|Win32 + {F057DA7F-79E5-4B00-845C-EF446EF055E3}.Debug|Win32.Build.0 = Debug|Win32 + {F057DA7F-79E5-4B00-845C-EF446EF055E3}.Release|Win32.ActiveCfg = Release|Win32 + {F057DA7F-79E5-4B00-845C-EF446EF055E3}.Release|Win32.Build.0 = Release|Win32 + {C4854C1D-5478-4F87-AB62-36CCDDDBA3C7}.Debug|Win32.ActiveCfg = Debug|Win32 + {C4854C1D-5478-4F87-AB62-36CCDDDBA3C7}.Debug|Win32.Build.0 = Debug|Win32 + {C4854C1D-5478-4F87-AB62-36CCDDDBA3C7}.Release|Win32.ActiveCfg = Release|Win32 + {C4854C1D-5478-4F87-AB62-36CCDDDBA3C7}.Release|Win32.Build.0 = Release|Win32 + {5786D51D-1C6A-4BE1-8804-29954DB5258F}.Debug|Win32.ActiveCfg = Debug|Win32 + {5786D51D-1C6A-4BE1-8804-29954DB5258F}.Debug|Win32.Build.0 = Debug|Win32 + {5786D51D-1C6A-4BE1-8804-29954DB5258F}.Release|Win32.ActiveCfg = Release|Win32 + {5786D51D-1C6A-4BE1-8804-29954DB5258F}.Release|Win32.Build.0 = Release|Win32 + {E969F3E0-1043-482A-AD49-787B8356BA92}.Debug|Win32.ActiveCfg = Debug|Win32 + {E969F3E0-1043-482A-AD49-787B8356BA92}.Debug|Win32.Build.0 = Debug|Win32 + {E969F3E0-1043-482A-AD49-787B8356BA92}.Release|Win32.ActiveCfg = Release|Win32 + {E969F3E0-1043-482A-AD49-787B8356BA92}.Release|Win32.Build.0 = Release|Win32 + {C3B50FF8-E49B-4589-B07A-4D7866980669}.Debug|Win32.ActiveCfg = Debug|Win32 + {C3B50FF8-E49B-4589-B07A-4D7866980669}.Debug|Win32.Build.0 = Debug|Win32 + {C3B50FF8-E49B-4589-B07A-4D7866980669}.Release|Win32.ActiveCfg = Release|Win32 + {C3B50FF8-E49B-4589-B07A-4D7866980669}.Release|Win32.Build.0 = Release|Win32 + {91695C7C-7AD1-4782-9727-508F82D9C577}.Debug|Win32.ActiveCfg = Debug|Win32 + {91695C7C-7AD1-4782-9727-508F82D9C577}.Debug|Win32.Build.0 = Debug|Win32 + {91695C7C-7AD1-4782-9727-508F82D9C577}.Release|Win32.ActiveCfg = Release|Win32 + {91695C7C-7AD1-4782-9727-508F82D9C577}.Release|Win32.Build.0 = Release|Win32 + {6B9217D6-8259-4817-B8A5-2FEAD349EDEB}.Debug|Win32.ActiveCfg = Debug|Win32 + {6B9217D6-8259-4817-B8A5-2FEAD349EDEB}.Debug|Win32.Build.0 = Debug|Win32 + {6B9217D6-8259-4817-B8A5-2FEAD349EDEB}.Release|Win32.ActiveCfg = Release|Win32 + {6B9217D6-8259-4817-B8A5-2FEAD349EDEB}.Release|Win32.Build.0 = Release|Win32 + {5C9C69D2-8B98-42DA-8D82-6E0B48446FAC}.Debug|Win32.ActiveCfg = Debug|Win32 + {5C9C69D2-8B98-42DA-8D82-6E0B48446FAC}.Debug|Win32.Build.0 = Debug|Win32 + {5C9C69D2-8B98-42DA-8D82-6E0B48446FAC}.Release|Win32.ActiveCfg = Release|Win32 + {5C9C69D2-8B98-42DA-8D82-6E0B48446FAC}.Release|Win32.Build.0 = Release|Win32 + {1C469CDD-A3AF-4A94-A592-B2CF12F2D918}.Debug|Win32.ActiveCfg = Debug|Win32 + {1C469CDD-A3AF-4A94-A592-B2CF12F2D918}.Debug|Win32.Build.0 = Debug|Win32 + {1C469CDD-A3AF-4A94-A592-B2CF12F2D918}.Release|Win32.ActiveCfg = Release|Win32 + {1C469CDD-A3AF-4A94-A592-B2CF12F2D918}.Release|Win32.Build.0 = Release|Win32 + {F8C28DF9-D76A-449E-A621-D97D869974DA}.Debug|Win32.ActiveCfg = Debug|Win32 + {F8C28DF9-D76A-449E-A621-D97D869974DA}.Debug|Win32.Build.0 = Debug|Win32 + {F8C28DF9-D76A-449E-A621-D97D869974DA}.Release|Win32.ActiveCfg = Release|Win32 + {F8C28DF9-D76A-449E-A621-D97D869974DA}.Release|Win32.Build.0 = Release|Win32 + {E727E8F6-935D-46FE-8B0E-37834748A0E3}.Debug|Win32.ActiveCfg = Debug|Win32 + {E727E8F6-935D-46FE-8B0E-37834748A0E3}.Debug|Win32.Build.0 = Debug|Win32 + {E727E8F6-935D-46FE-8B0E-37834748A0E3}.Release|Win32.ActiveCfg = Release|Win32 + {E727E8F6-935D-46FE-8B0E-37834748A0E3}.Release|Win32.Build.0 = Release|Win32 + {985135DA-BBE1-42D2-8A85-1F7DF0609B3D}.Debug|Win32.ActiveCfg = Debug|Win32 + {985135DA-BBE1-42D2-8A85-1F7DF0609B3D}.Debug|Win32.Build.0 = Debug|Win32 + {985135DA-BBE1-42D2-8A85-1F7DF0609B3D}.Release|Win32.ActiveCfg = Release|Win32 + {985135DA-BBE1-42D2-8A85-1F7DF0609B3D}.Release|Win32.Build.0 = Release|Win32 + {C30D35E4-7FC6-4E97-9BE5-4BC077BE0D4B}.Debug|Win32.ActiveCfg = Debug|Win32 + {C30D35E4-7FC6-4E97-9BE5-4BC077BE0D4B}.Debug|Win32.Build.0 = Debug|Win32 + {C30D35E4-7FC6-4E97-9BE5-4BC077BE0D4B}.Release|Win32.ActiveCfg = Release|Win32 + {C30D35E4-7FC6-4E97-9BE5-4BC077BE0D4B}.Release|Win32.Build.0 = Release|Win32 + {C038D7B4-B116-4C3E-93E2-45D295429808}.Debug|Win32.ActiveCfg = Debug|Win32 + {C038D7B4-B116-4C3E-93E2-45D295429808}.Debug|Win32.Build.0 = Debug|Win32 + {C038D7B4-B116-4C3E-93E2-45D295429808}.Release|Win32.ActiveCfg = Release|Win32 + {C038D7B4-B116-4C3E-93E2-45D295429808}.Release|Win32.Build.0 = Release|Win32 + {4EA67539-9EE9-4065-BD39-87E517FD8262}.Debug|Win32.ActiveCfg = Debug|Win32 + {4EA67539-9EE9-4065-BD39-87E517FD8262}.Debug|Win32.Build.0 = Debug|Win32 + {4EA67539-9EE9-4065-BD39-87E517FD8262}.Release|Win32.ActiveCfg = Release|Win32 + {4EA67539-9EE9-4065-BD39-87E517FD8262}.Release|Win32.Build.0 = Release|Win32 + {85255507-5D16-4218-85E2-F683BB2F04DA}.Debug|Win32.ActiveCfg = Debug|Win32 + {85255507-5D16-4218-85E2-F683BB2F04DA}.Debug|Win32.Build.0 = Debug|Win32 + {85255507-5D16-4218-85E2-F683BB2F04DA}.Release|Win32.ActiveCfg = Release|Win32 + {85255507-5D16-4218-85E2-F683BB2F04DA}.Release|Win32.Build.0 = Release|Win32 + {44F46B7E-0E51-4304-9735-330DFBAB41E5}.Debug|Win32.ActiveCfg = Debug|Win32 + {44F46B7E-0E51-4304-9735-330DFBAB41E5}.Debug|Win32.Build.0 = Debug|Win32 + {44F46B7E-0E51-4304-9735-330DFBAB41E5}.Release|Win32.ActiveCfg = Release|Win32 + {44F46B7E-0E51-4304-9735-330DFBAB41E5}.Release|Win32.Build.0 = Release|Win32 + {EFA9E76E-62A5-4237-B7E9-F39B8E174CD5}.Debug|Win32.ActiveCfg = Debug|Win32 + {EFA9E76E-62A5-4237-B7E9-F39B8E174CD5}.Debug|Win32.Build.0 = Debug|Win32 + {EFA9E76E-62A5-4237-B7E9-F39B8E174CD5}.Release|Win32.ActiveCfg = Release|Win32 + {EFA9E76E-62A5-4237-B7E9-F39B8E174CD5}.Release|Win32.Build.0 = Release|Win32 + {3D0370CA-BED2-4657-A475-32375CBCB6E4}.Debug|Win32.ActiveCfg = Debug|Win32 + {3D0370CA-BED2-4657-A475-32375CBCB6E4}.Debug|Win32.Build.0 = Debug|Win32 + {3D0370CA-BED2-4657-A475-32375CBCB6E4}.Release|Win32.ActiveCfg = Release|Win32 + {3D0370CA-BED2-4657-A475-32375CBCB6E4}.Release|Win32.Build.0 = Release|Win32 + {831F76E8-D288-4C54-9B6D-281D9436CCC7}.Debug|Win32.ActiveCfg = Debug|Win32 + {831F76E8-D288-4C54-9B6D-281D9436CCC7}.Debug|Win32.Build.0 = Debug|Win32 + {831F76E8-D288-4C54-9B6D-281D9436CCC7}.Release|Win32.ActiveCfg = Release|Win32 + {831F76E8-D288-4C54-9B6D-281D9436CCC7}.Release|Win32.Build.0 = Release|Win32 + {87EE9DA4-DE1E-4448-8324-183C98DCA588}.Debug|Win32.ActiveCfg = Debug|Win32 + {87EE9DA4-DE1E-4448-8324-183C98DCA588}.Debug|Win32.Build.0 = Debug|Win32 + {87EE9DA4-DE1E-4448-8324-183C98DCA588}.Release|Win32.ActiveCfg = Release|Win32 + {87EE9DA4-DE1E-4448-8324-183C98DCA588}.Release|Win32.Build.0 = Release|Win32 + {155844C3-EC5F-407F-97A4-A2DDADED9B2F}.Debug|Win32.ActiveCfg = Debug|Win32 + {155844C3-EC5F-407F-97A4-A2DDADED9B2F}.Debug|Win32.Build.0 = Debug|Win32 + {155844C3-EC5F-407F-97A4-A2DDADED9B2F}.Release|Win32.ActiveCfg = Release|Win32 + {155844C3-EC5F-407F-97A4-A2DDADED9B2F}.Release|Win32.Build.0 = Release|Win32 + {14187C61-F357-4151-AEDE-F562645FB3F3}.Debug|Win32.ActiveCfg = Debug|Win32 + {14187C61-F357-4151-AEDE-F562645FB3F3}.Debug|Win32.Build.0 = Debug|Win32 + {14187C61-F357-4151-AEDE-F562645FB3F3}.Release|Win32.ActiveCfg = Release|Win32 + {14187C61-F357-4151-AEDE-F562645FB3F3}.Release|Win32.Build.0 = Release|Win32 + {861345DE-6846-43AD-8012-043810D0E465}.Debug|Win32.ActiveCfg = Debug|Win32 + {861345DE-6846-43AD-8012-043810D0E465}.Debug|Win32.Build.0 = Debug|Win32 + {861345DE-6846-43AD-8012-043810D0E465}.Release|Win32.ActiveCfg = Release|Win32 + {861345DE-6846-43AD-8012-043810D0E465}.Release|Win32.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(NestedProjects) = preSolution + {4926323F-4EA8-4B7D-A3D3-65488725988F} = {F881ADA2-2F1A-4046-9FEB-191D9422D781} + {B1FE4613-3F4B-4DAF-9714-2472BF8F56AE} = {F881ADA2-2F1A-4046-9FEB-191D9422D781} + {5844AFE1-AA3E-4BDB-A9EF-119AEF19DF88} = {F881ADA2-2F1A-4046-9FEB-191D9422D781} + {5580D60E-0F77-4716-9CD4-B8E5986FA375} = {F881ADA2-2F1A-4046-9FEB-191D9422D781} + {D3EC0AFF-76FC-4210-A825-9A17410660A3} = {F881ADA2-2F1A-4046-9FEB-191D9422D781} + {AFAC0568-7548-42D5-9F6A-8D3400A1E4F6} = {A5A27244-AD24-46E5-B01B-840CD296C91D} + {78100236-7CEA-4948-96CC-E8ED3160329C} = {E72B5BCB-6462-4D23-B419-3AF1A4AC3D78} + {E1794405-29D4-466D-9BE3-DD2344C2A663} = {E72B5BCB-6462-4D23-B419-3AF1A4AC3D78} + {30A5B29C-983E-4580-9FD0-D647CCDCC7EB} = {E72B5BCB-6462-4D23-B419-3AF1A4AC3D78} + {C24FB505-05D7-4319-8485-7540B44C8603} = {E72B5BCB-6462-4D23-B419-3AF1A4AC3D78} + {B5881A85-FE70-4F64-8607-2CAAE52669C6} = {E72B5BCB-6462-4D23-B419-3AF1A4AC3D78} + {3A5B9131-F20C-4A85-9447-6C1610941CEE} = {9460B5F1-0A95-41C4-BEB7-9C2C96459A7C} + {5FD31A25-5D83-4794-8BEE-904DAD84CE71} = {9460B5F1-0A95-41C4-BEB7-9C2C96459A7C} + {45DF84ED-D24A-4FF6-B5B0-0A9A5FDB9552} = {9460B5F1-0A95-41C4-BEB7-9C2C96459A7C} + {FFAA4C52-3A53-4F99-90C1-D59D1F0427F3} = {9460B5F1-0A95-41C4-BEB7-9C2C96459A7C} + {DCC13474-28DF-47CA-A8EB-72F8CE9A78C5} = {2D57D093-3F8D-4729-AD9A-68E945C200A5} + {07113B25-D3AF-4E04-BA77-4CD1171F022C} = {C5F182F9-754A-4EC5-B50F-76ED02BE13F4} + {89385C74-5860-4174-9CAF-A39E7C48909C} = {EB910B0D-F27D-4B62-B67B-DE834C99AC5B} + {8FD2E297-4096-47E5-9258-C48FF1841523} = {EB910B0D-F27D-4B62-B67B-DE834C99AC5B} + {989BB874-7AF1-44CB-8E5C-CC8113D267E8} = {EB910B0D-F27D-4B62-B67B-DE834C99AC5B} + {5CC054B7-6DAA-46BF-9A08-3B33B83E8D3E} = {EB910B0D-F27D-4B62-B67B-DE834C99AC5B} + {1906D736-08BD-4EE1-924F-B536249B9A54} = {EB910B0D-F27D-4B62-B67B-DE834C99AC5B} + {EEF031CB-FED8-451E-A471-91EC8D4F6750} = {EB910B0D-F27D-4B62-B67B-DE834C99AC5B} + {6EDFEFD5-3596-4FA9-8EBA-B331547B35A3} = {EB910B0D-F27D-4B62-B67B-DE834C99AC5B} + {8D04B550-D240-4A44-8A18-35DA3F7038D9} = {EB910B0D-F27D-4B62-B67B-DE834C99AC5B} + {1CED5987-A529-46DC-B30F-870D85FF9C94} = {EB910B0D-F27D-4B62-B67B-DE834C99AC5B} + {50AD0E28-B8D7-4FCC-8FC3-599F6AC69761} = {EB910B0D-F27D-4B62-B67B-DE834C99AC5B} + {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {EB910B0D-F27D-4B62-B67B-DE834C99AC5B} + {101130D1-3EA6-4ED2-B65D-CEB5243A20ED} = {EB910B0D-F27D-4B62-B67B-DE834C99AC5B} + {F057DA7F-79E5-4B00-845C-EF446EF055E3} = {EB910B0D-F27D-4B62-B67B-DE834C99AC5B} + {1C469CDD-A3AF-4A94-A592-B2CF12F2D918} = {EB910B0D-F27D-4B62-B67B-DE834C99AC5B} + {E727E8F6-935D-46FE-8B0E-37834748A0E3} = {EB910B0D-F27D-4B62-B67B-DE834C99AC5B} + {C30D35E4-7FC6-4E97-9BE5-4BC077BE0D4B} = {EB910B0D-F27D-4B62-B67B-DE834C99AC5B} + {4EA67539-9EE9-4065-BD39-87E517FD8262} = {EB910B0D-F27D-4B62-B67B-DE834C99AC5B} + {85255507-5D16-4218-85E2-F683BB2F04DA} = {EB910B0D-F27D-4B62-B67B-DE834C99AC5B} + {44F46B7E-0E51-4304-9735-330DFBAB41E5} = {EB910B0D-F27D-4B62-B67B-DE834C99AC5B} + {3D0370CA-BED2-4657-A475-32375CBCB6E4} = {EB910B0D-F27D-4B62-B67B-DE834C99AC5B} + {87EE9DA4-DE1E-4448-8324-183C98DCA588} = {EB910B0D-F27D-4B62-B67B-DE834C99AC5B} + {155844C3-EC5F-407F-97A4-A2DDADED9B2F} = {EB910B0D-F27D-4B62-B67B-DE834C99AC5B} + {1C453396-D912-4213-89FD-9B489162B7B5} = {A7AB4405-FDB7-4853-9FBB-1516B1C3D80A} + {C4854C1D-5478-4F87-AB62-36CCDDDBA3C7} = {C120A020-773F-4EA3-923F-B67AF28B750D} + {5786D51D-1C6A-4BE1-8804-29954DB5258F} = {C120A020-773F-4EA3-923F-B67AF28B750D} + {E969F3E0-1043-482A-AD49-787B8356BA92} = {C120A020-773F-4EA3-923F-B67AF28B750D} + {C3B50FF8-E49B-4589-B07A-4D7866980669} = {C120A020-773F-4EA3-923F-B67AF28B750D} + {91695C7C-7AD1-4782-9727-508F82D9C577} = {C120A020-773F-4EA3-923F-B67AF28B750D} + {6B9217D6-8259-4817-B8A5-2FEAD349EDEB} = {C120A020-773F-4EA3-923F-B67AF28B750D} + {5C9C69D2-8B98-42DA-8D82-6E0B48446FAC} = {C120A020-773F-4EA3-923F-B67AF28B750D} + {F8C28DF9-D76A-449E-A621-D97D869974DA} = {C120A020-773F-4EA3-923F-B67AF28B750D} + {985135DA-BBE1-42D2-8A85-1F7DF0609B3D} = {C120A020-773F-4EA3-923F-B67AF28B750D} + {C038D7B4-B116-4C3E-93E2-45D295429808} = {C120A020-773F-4EA3-923F-B67AF28B750D} + {EFA9E76E-62A5-4237-B7E9-F39B8E174CD5} = {C120A020-773F-4EA3-923F-B67AF28B750D} + {831F76E8-D288-4C54-9B6D-281D9436CCC7} = {C120A020-773F-4EA3-923F-B67AF28B750D} + EndGlobalSection +EndGlobal Added: freeswitch/trunk/gtalkphone/gtalkphone.suo ============================================================================== Binary file. No diff available. Added: freeswitch/trunk/gtalkphone/gtalkphone.vcproj ============================================================================== --- (empty file) +++ freeswitch/trunk/gtalkphone/gtalkphone.vcproj Wed Aug 30 11:21:42 2006 @@ -0,0 +1,462 @@ +<?xml version="1.0" encoding="gb2312"?> +<VisualStudioProject + ProjectType="Visual C++" + Version="8.00" + Name="gtalkphone" + ProjectGUID="{14187C61-F357-4151-AEDE-F562645FB3F3}" + RootNamespace="gtalkphone" + Keyword="MFCProj" + > + <Platforms> + <Platform + Name="Win32" + /> + </Platforms> + <ToolFiles> + </ToolFiles> + <Configurations> + <Configuration + Name="Debug|Win32" + OutputDirectory="$(SolutionDir)$(ConfigurationName)\" + IntermediateDirectory="$(ConfigurationName)" + ConfigurationType="1" + UseOfMFC="2" + CharacterSet="1" + > + <Tool + Name="VCPreBuildEventTool" + /> + <Tool + Name="VCCustomBuildTool" + /> + <Tool + Name="VCXMLDataGeneratorTool" + /> + <Tool + Name="VCWebServiceProxyGeneratorTool" + /> + <Tool + Name="VCMIDLTool" + PreprocessorDefinitions="_DEBUG" + MkTypLibCompatible="false" + ValidateParameters="false" + /> + <Tool + Name="VCCLCompilerTool" + UseUnicodeResponseFiles="true" + Optimization="0" + AdditionalIncludeDirectories=".\mixer\source;.\mixer\include;"$(SolutionDir)..\src\include";.\skin\google;.\ui\source;.\ui\include;.\;"$(SolutionDir)..\libs\include";.\https;.\freeswitch\include;.\monitor;.\google" + PreprocessorDefinitions="WIN32;_WINDOWS;_DEBUG;DBLOGGING;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;$(NOINHERIT); _AFXDLL" + MinimalRebuild="true" + BasicRuntimeChecks="3" + RuntimeLibrary="3" + UsePrecompiledHeader="2" + WarningLevel="4" + WarnAsError="true" + Detect64BitPortabilityProblems="true" + DebugInformationFormat="4" + /> + <Tool + Name="VCManagedResourceCompilerTool" + /> + <Tool + Name="VCResourceCompilerTool" + PreprocessorDefinitions="_DEBUG" + Culture="1033" + AdditionalIncludeDirectories="$(IntDir)" + /> + <Tool + Name="VCPreLinkEventTool" + /> + <Tool + Name="VCLinkerTool" + AdditionalDependencies="Wininet.lib winmm.lib" + OutputFile="$(Outdir)\gtalkphone.exe" + LinkIncremental="2" + AdditionalLibraryDirectories=""..\..\freeswitch\w32\vsnet\$(IntDir)"" + GenerateDebugInformation="true" + SubSystem="2" + EntryPointSymbol="" + 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" + CommandLine="if not exist $(Outdir)\skin md $(Outdir)\skin xcopy $(Projectdir)skin\*.* $(Outdir)\skin\ /C /D /Y /I xcopy $(Projectdir)skin\google\*.* $(Outdir)\skin\google\ /C /D /Y /I xcopy $(Projectdir)skin\google\res\*.* $(Outdir)\skin\google\res\ /C /D /Y /I xcopy $(Projectdir)skin\google\js\*.* $(Outdir)\skin\google\js\ /C /D /Y /I xcopy $(Projectdir)skin\google\css\*.* $(Outdir)\skin\google\css\ /C /D /Y /I xcopy $(Projectdir)skin\google\css\gtalkphone\*.* $(Outdir)\skin\google\css\gtalkphone\ /C /D /Y /I xcopy $(Projectdir)freeswitch.xml $(Outdir)\conf\ /C /Y /I " + /> + </Configuration> + <Configuration + Name="Release|Win32" + OutputDirectory="$(SolutionDir)$(ConfigurationName)\" + IntermediateDirectory="$(ConfigurationName)" + ConfigurationType="1" + UseOfMFC="2" + CharacterSet="1" + WholeProgramOptimization="1" + > + <Tool + Name="VCPreBuildEventTool" + /> + <Tool + Name="VCCustomBuildTool" + /> + <Tool + Name="VCXMLDataGeneratorTool" + /> + <Tool + Name="VCWebServiceProxyGeneratorTool" + /> + <Tool + Name="VCMIDLTool" + PreprocessorDefinitions="NDEBUG" + MkTypLibCompatible="false" + ValidateParameters="false" + /> + <Tool + Name="VCCLCompilerTool" + Optimization="1" + AdditionalIncludeDirectories=".\mixer\source;.\mixer\include;"$(SolutionDir)..\src\include";.\skin\google;.\ui\source;.\ui\include;.\;"$(SolutionDir)..\libs\include";.\https;.\freeswitch\include;.\monitor;.\google" + PreprocessorDefinitions="WIN32;_WINDOWS;NDEBUG;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;$(NOINHERIT); _AFXDLL" + MinimalRebuild="false" + RuntimeLibrary="2" + UsePrecompiledHeader="2" + WarningLevel="4" + WarnAsError="true" + Detect64BitPortabilityProblems="true" + DebugInformationFormat="0" + /> + <Tool + Name="VCManagedResourceCompilerTool" + /> + <Tool + Name="VCResourceCompilerTool" + PreprocessorDefinitions="NDEBUG" + Culture="1033" + AdditionalIncludeDirectories="$(IntDir)" + /> + <Tool + Name="VCPreLinkEventTool" + /> + <Tool + Name="VCLinkerTool" + AdditionalDependencies="Wininet.lib winmm.lib" + OutputFile="$(Outdir)\gtalkphone.exe" + LinkIncremental="1" + AdditionalLibraryDirectories=""..\..\freeswitch\w32\vsnet\$(IntDir)"" + GenerateDebugInformation="true" + SubSystem="2" + OptimizeReferences="2" + EnableCOMDATFolding="2" + EntryPointSymbol="" + 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" + CommandLine="if not exist $(Outdir)\skin md $(Outdir)\skin xcopy $(Projectdir)skin\*.* $(Outdir)\skin\ /C /D /Y /I xcopy $(Projectdir)skin\google\*.* $(Outdir)\skin\google\ /C /D /Y /I xcopy $(Projectdir)skin\google\res\*.* $(Outdir)\skin\google\res\ /C /D /Y /I xcopy $(Projectdir)skin\google\js\*.* $(Outdir)\skin\google\js\ /C /D /Y /I xcopy $(Projectdir)skin\google\css\*.* $(Outdir)\skin\google\css\ /C /D /Y /I xcopy $(Projectdir)skin\google\css\gtalkphone\*.* $(Outdir)\skin\google\css\gtalkphone\ /C /D /Y /I xcopy $(Projectdir)freeswitch.xml $(Outdir)\conf\ /C /Y /I " + /> + </Configuration> + </Configurations> + <References> + </References> + <Files> + <Filter + Name="Source Files" + Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx" + UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}" + > + <File + RelativePath=".\gtalkphone.cpp" + > + </File> + <File + RelativePath=".\stdafx.cpp" + > + <FileConfiguration + Name="Debug|Win32" + > + <Tool + Name="VCCLCompilerTool" + UsePrecompiledHeader="1" + /> + </FileConfiguration> + <FileConfiguration + Name="Release|Win32" + > + <Tool + Name="VCCLCompilerTool" + UsePrecompiledHeader="1" + /> + </FileConfiguration> + </File> + </Filter> + <Filter + Name="Header Files" + Filter="h;hpp;hxx;hm;inl;inc;xsd" + UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}" + > + <File + RelativePath=".\gtalkphone.h" + > + </File> + <File + RelativePath=".\Resource.h" + > + </File> + <File + RelativePath=".\stdafx.h" + > + </File> + </Filter> + <Filter + Name="Resource Files" + Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav" + UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}" + > + <File + RelativePath=".\res\gtalkphone.ico" + > + </File> + <File + RelativePath=".\gtalkphone.rc" + > + </File> + <File + RelativePath=".\res\gtalkphone.rc2" + > + </File> + <File + RelativePath="..\..\..\Documents and Settings\mike.JERRIS\Desktop\icons\gtalkphone_16x16.ico" + > + </File> + <File + RelativePath="..\..\..\Documents and Settings\mike.JERRIS\Desktop\icons\gtalkphone_48x48.ico" + > + </File> + </Filter> + <Filter + Name="skin" + > + <Filter + Name="source" + > + <File + RelativePath=".\SkinWin\EnBitmap.cpp" + > + </File> + <File + RelativePath=".\SkinWin\MyBitmap.cpp" + > + </File> + <File + RelativePath=".\SkinWin\SkinWin.cpp" + > + </File> + <File + RelativePath=".\SkinWin\Subclass.cpp" + > + </File> + <File + RelativePath=".\SkinWin\Utils.cpp" + > + </File> + </Filter> + <Filter + Name="head" + > + <File + RelativePath=".\SkinWin\EnBitmap.h" + > + </File> + <File + RelativePath=".\SkinWin\MyBitmap.h" + > + </File> + <File + RelativePath=".\SkinWin\SkinWin.h" + > + </File> + <File + RelativePath=".\SkinWin\Subclass.h" + > + </File> + </Filter> + </Filter> + <Filter + Name="ui" + > + <Filter + Name="include" + > + <File + RelativePath=".\ui\include\External.h" + > + </File> + <File + RelativePath=".\ui\include\gtalkphoneDlg.h" + > + </File> + <File + RelativePath=".\ui\include\settingsDlg.h" + > + </File> + </Filter> + <Filter + Name="source" + > + <File + RelativePath=".\ui\source\External.cpp" + > + </File> + <File + RelativePath=".\ui\source\gtalkphoneDlg.cpp" + > + </File> + <File + RelativePath=".\ui\source\settingsDlg.cpp" + > + </File> + </Filter> + </Filter> + <Filter + Name="FreeSwitch" + > + <Filter + Name="include" + > + <File + RelativePath=".\freeswitch\include\freeswitch.h" + > + </File> + </Filter> + <Filter + Name="source" + > + <File + RelativePath=".\freeswitch\source\freeswitch.cpp" + > + </File> + </Filter> + </Filter> + <Filter + Name="https" + > + <File + RelativePath=".\https\gtalkphone_https.cpp" + > + </File> + <File + RelativePath=".\https\gtalkphone_https.h" + > + </File> + </Filter> + <Filter + Name="mixer" + > + <Filter + Name="include" + > + <File + RelativePath=".\mixer\include\MixerBase.h" + > + </File> + <File + RelativePath=".\mixer\include\MixerFader.h" + > + </File> + </Filter> + <Filter + Name="source" + > + <File + RelativePath=".\mixer\source\MixerBase.cpp" + > + </File> + <File + RelativePath=".\mixer\source\MixerFader.cpp" + > + </File> + </Filter> + </Filter> + <Filter + Name="monitor" + > + <File + RelativePath=".\monitor\MoniWnd.cpp" + > + </File> + <File + RelativePath=".\monitor\MoniWnd.h" + > + </File> + <File + RelativePath=".\monitor\MonThread.cpp" + > + </File> + <File + RelativePath=".\monitor\MonThread.h" + > + </File> + </Filter> + <File + RelativePath=".\skin\google\gtalkphone.htm" + DeploymentContent="true" + > + </File> + <File + RelativePath=".\ReadMe.txt" + > + </File> + <File + RelativePath=".\skin\google\settingsDlg.htm" + DeploymentContent="true" + > + </File> + </Files> + <Globals> + <Global + Name="RESOURCE_FILE" + Value="gtalkphone.rc" + /> + </Globals> +</VisualStudioProject> Added: freeswitch/trunk/gtalkphone/gtalkphone.vcproj.D57JVH91.Asterlink.user ============================================================================== --- (empty file) +++ freeswitch/trunk/gtalkphone/gtalkphone.vcproj.D57JVH91.Asterlink.user Wed Aug 30 11:21:42 2006 @@ -0,0 +1,65 @@ +<?xml version="1.0" encoding="gb2312"?> +<VisualStudioUserFile + ProjectType="Visual C++" + Version="8.00" + ShowAllFiles="false" + > + <Configurations> + <Configuration + Name="Debug|Win32" + > + <DebugSettings + Command="$(TargetPath)" + WorkingDirectory="$(SolutionDir)..\..\freeswitch\w32\vsnet\$(IntDir)" + CommandArguments="" + Attach="false" + DebuggerType="3" + Remote="1" + RemoteMachine="D57JVH91" + RemoteCommand="" + HttpUrl="" + PDBPath="" + SQLDebugging="" + Environment="" + EnvironmentMerge="true" + DebuggerFlavor="0" + MPIRunCommand="" + MPIRunArguments="" + MPIRunWorkingDirectory="" + ApplicationCommand="" + ApplicationArguments="" + ShimCommand="" + MPIAcceptMode="" + MPIAcceptFilter="" + /> + </Configuration> + <Configuration + Name="Release|Win32" + > + <DebugSettings + Command="$(TargetPath)" + WorkingDirectory="" + CommandArguments="" + Attach="false" + DebuggerType="3" + Remote="1" + RemoteMachine="D57JVH91" + RemoteCommand="" + HttpUrl="" + PDBPath="" + SQLDebugging="" + Environment="" + EnvironmentMerge="true" + DebuggerFlavor="" + MPIRunCommand="" + MPIRunArguments="" + MPIRunWorkingDirectory="" + ApplicationCommand="" + ApplicationArguments="" + ShimCommand="" + MPIAcceptMode="" + MPIAcceptFilter="" + /> + </Configuration> + </Configurations> +</VisualStudioUserFile> Added: freeswitch/trunk/gtalkphone/https/gtalkphone_https.cpp ============================================================================== --- (empty file) +++ freeswitch/trunk/gtalkphone/https/gtalkphone_https.cpp Wed Aug 30 11:21:42 2006 @@ -0,0 +1,326 @@ +#include "stdafx.h" +#include <Wininet.h> +#include "gtalkphone_https.h" +/*typedef int ( *PFN_SSL_int_void ) ( void ); +typedef PVOID ( *PFN_SSL_pvoid_void ) ( void ); +typedef PVOID ( *PFN_SSL_pvoid_pvoid ) ( PVOID ); +typedef void ( *PFN_SSL_void_pvoid ) ( PVOID ); +typedef int ( *PFN_SSL_int_pvoid_int ) ( PVOID, int ); +typedef int ( *PFN_SSL_int_pvoid ) ( PVOID ); +typedef int ( *PFN_SSL_int_pvoid_pvoid_int ) ( PVOID, PVOID, int ); +typedef PVOID ( *PFN_SSL_pvoid_int ) (int ); + +PFN_SSL_int_void pfn_SSL_library_init; // int SSL_library_init() +PFN_SSL_pvoid_void pfn_SSLv23_client_method; // SSL_METHOD *SSLv23_client_method() +PFN_SSL_pvoid_pvoid pfn_SSL_CTX_new; // SSL_CTX *SSL_CTX_new( SSL_METHOD *method ) +PFN_SSL_void_pvoid pfn_SSL_CTX_free; // void SSL_CTX_free( SSL_CTX *ctx ); +PFN_SSL_pvoid_pvoid pfn_SSL_new; // SSL *SSL_new( SSL_CTX *ctx ) +PFN_SSL_void_pvoid pfn_SSL_free; // void SSL_free( SSL *ssl ); +PFN_SSL_int_pvoid_int pfn_SSL_set_fd; // int SSL_set_fd( SSL *ssl, int fd ); +PFN_SSL_int_pvoid pfn_SSL_connect; // int SSL_connect( SSL *ssl ); +PFN_SSL_int_pvoid_pvoid_int pfn_SSL_read; // int SSL_read( SSL *ssl, void *buffer, int bufsize ) +PFN_SSL_int_pvoid_pvoid_int pfn_SSL_write; // int SSL_write( SSL *ssl, void *buffer, int bufsize ) +PFN_SSL_int_void pfn_SSL_load_error_strings; // int SSL_load_error_strings(); +PFN_SSL_pvoid_int pfn_ERR_reason_error_string; // char* ERR_reason_error_string(int); +PFN_SSL_int_void pfn_ERR_get_error; // int ERR_get_error(); +static HMODULE hLibSSL=NULL; +static PVOID ssl=NULL; +static PVOID ctx=NULL;*/ +int https_init() +{ + + /*hLibSSL = LoadLibrary( "SSLEAY32.DLL" ); + + if ( !hLibSSL ) + hLibSSL = LoadLibrary( "LIBSSL32.DLL" ); + BOOL error=FALSE; + if ( hLibSSL ) { + if (( pfn_SSL_library_init=( PFN_SSL_int_void )GetProcAddress( hLibSSL, "SSL_library_init" )) == NULL ) + error = TRUE; + if (( pfn_SSLv23_client_method=( PFN_SSL_pvoid_void )GetProcAddress( hLibSSL, "SSLv23_client_method" )) == NULL ) + error = TRUE; + if (( pfn_SSL_CTX_new=( PFN_SSL_pvoid_pvoid )GetProcAddress( hLibSSL, "SSL_CTX_new" )) == NULL ) + error = TRUE; + if (( pfn_SSL_CTX_free=( PFN_SSL_void_pvoid )GetProcAddress( hLibSSL, "SSL_CTX_free" )) == NULL ) + error = TRUE; + if (( pfn_SSL_new=( PFN_SSL_pvoid_pvoid )GetProcAddress( hLibSSL, "SSL_new" )) == NULL ) + error = TRUE; + if (( pfn_SSL_free=( PFN_SSL_void_pvoid )GetProcAddress( hLibSSL, "SSL_free" )) == NULL ) + error = TRUE; + if (( pfn_SSL_set_fd=( PFN_SSL_int_pvoid_int )GetProcAddress( hLibSSL, "SSL_set_fd" )) == NULL ) + error = TRUE; + if (( pfn_SSL_connect=( PFN_SSL_int_pvoid )GetProcAddress( hLibSSL, "SSL_connect" )) == NULL ) + error = TRUE; + if (( pfn_SSL_read=( PFN_SSL_int_pvoid_pvoid_int )GetProcAddress( hLibSSL, "SSL_read" )) == NULL ) + error = TRUE; + if (( pfn_SSL_write=( PFN_SSL_int_pvoid_pvoid_int )GetProcAddress( hLibSSL, "SSL_write" )) == NULL ) + error = TRUE; + + if (( pfn_SSL_load_error_strings=( PFN_SSL_int_void )GetProcAddress( hLibSSL, "SSL_load_error_strings" )) == NULL ) + error = TRUE; + if (( pfn_ERR_reason_error_string=( PFN_SSL_pvoid_int )GetProcAddress( hLibSSL, "ERR_reason_error_string" )) == NULL ) + error = TRUE; + if (( pfn_ERR_get_error=( PFN_SSL_int_void )GetProcAddress( hLibSSL, "ERR_get_error" )) == NULL ) + error = TRUE; + + if ( error == TRUE ) { + FreeLibrary( hLibSSL ); + hLibSSL = NULL; + return 1; + } + } + + pfn_SSL_load_error_strings(); + + pfn_SSL_library_init();*/ + return 0; +} +int https_get(char *req,char *sret) +{ + /*WSADATA WsaData; + WSAStartup (0x0101, &WsaData); + sockaddr_in sin; + char buf[1024]; + int sock = socket (AF_INET, SOCK_STREAM, 0); + if (sock == -1) { + WSACleanup( ); + return 0; + } + sin.sin_family = AF_INET; + sin.sin_port = htons( (unsigned short)443); + + struct hostent * host_addr = gethostbyname("cogent.arishost.com"); + if(host_addr==NULL) { + WSACleanup( ); + return 1; + } + sin.sin_addr.s_addr = *((int*)*host_addr->h_addr_list) ; + + if( connect (sock,(const struct sockaddr *)&sin, sizeof(sockaddr_in) ) == -1 ) { + WSACleanup( ); + return 1; + } + + + sprintf(buf, "GET %s HTTP/1.0\r\nHost: %s\r\n\r\n",req, "cogent.arishost.com"); + ctx = pfn_SSL_CTX_new(pfn_SSLv23_client_method()); + if ( ctx == NULL ){ + WSACleanup( ); + return 1; + } + + ssl = pfn_SSL_new(ctx); + if ( ssl == NULL ){ + WSACleanup( ); + return 1; + } + + int ret = pfn_SSL_set_fd(ssl, sock); + if ( ret == 0 ){ + WSACleanup( ); + return 1; + } + + ret = pfn_SSL_connect(ssl); + if( ret != 1 ){ + WSACleanup( ); + return 1; + } + + // https socket write. + pfn_SSL_write(ssl, buf, strlen(buf)); + (*sret) = '\0'; + int n=0; + while((n = pfn_SSL_read(ssl, buf, 1024-1)) > 0){ + buf[n] = '\0'; + strcat(sret,buf); + } + if(n != 0){ + WSACleanup( ); + return 1; + } + pfn_SSL_free(ssl); + pfn_SSL_CTX_free(ctx); + WSACleanup( );*/ + HINTERNET hSession = InternetOpen ("gtalkphone", + PRE_CONFIG_INTERNET_ACCESS, // 2 DWORD dwAccessType + "", // 3 LPCTSTR lpszProxyName + INTERNET_INVALID_PORT_NUMBER, // 4 INTERNET_PORT nProxyPort + 0 // 5 DWORD dwFlags + ); + HINTERNET hConnect = InternetConnect ( + hSession, // InternetOpen handle + "cogent.arishost.com", // Server name + INTERNET_DEFAULT_HTTPS_PORT,// Default HTTPS port - 443 + "", // User name + "", // User password + INTERNET_SERVICE_HTTP, // Service + 0, // Flags + 0 // Context + ); + HINTERNET hReq = HttpOpenRequest ( + hConnect, // InternetConnect handle + "GET", // Method + req, // Object name + HTTP_VERSION, // Version + NULL, // Referrer + NULL, // Extra headers + INTERNET_FLAG_SECURE|INTERNET_FLAG_DONT_CACHE, // Flags + 0 // Context + ); + HttpSendRequest(hReq, NULL, 0, 0, 0); + + // Read the file into the buffer. + DWORD dwBytesRead =0; + sret[dwBytesRead] = 0 ; + char sbuf[1024]; + + BOOL bRead = InternetReadFile(hReq, + sbuf, + 1024-1, + &dwBytesRead); + while(bRead && dwBytesRead>0) + { + sbuf[dwBytesRead] = 0; + strcat(sret,sbuf); + bRead = InternetReadFile(hReq, + sbuf, + 1024-1, + &dwBytesRead); + } + // Put a zero on the end of the buffer. + + + // Close all of the Internet handles. + InternetCloseHandle(hReq); + InternetCloseHandle(hConnect) ; + InternetCloseHandle(hSession) ; + + + return 0; +} +int https_get_callback(char *req,char *sret) +{ + HINTERNET hSession = InternetOpen ("gtalkphone", + PRE_CONFIG_INTERNET_ACCESS, // 2 DWORD dwAccessType + "", // 3 LPCTSTR lpszProxyName + INTERNET_INVALID_PORT_NUMBER, // 4 INTERNET_PORT nProxyPort + 0 // 5 DWORD dwFlags + ); + HINTERNET hConnect = InternetConnect ( + hSession, // InternetOpen handle + "secure.tollfreeexpress.com", // Server name + INTERNET_DEFAULT_HTTPS_PORT,// Default HTTPS port - 443 + "", // User name + "", // User password + INTERNET_SERVICE_HTTP, // Service + 0, // Flags + 0 // Context + ); + HINTERNET hReq = HttpOpenRequest ( + hConnect, // InternetConnect handle + "GET", // Method + req, // Object name + HTTP_VERSION, // Version + NULL, // Referrer + NULL, // Extra headers + INTERNET_FLAG_SECURE|INTERNET_FLAG_DONT_CACHE, // Flags + 0 // Context + ); + HttpSendRequest(hReq, NULL, 0, 0, 0); + + // Read the file into the buffer. + DWORD dwBytesRead =0; + sret[dwBytesRead] = 0 ; + char sbuf[1024]; + memset(sbuf,0,1024); + BOOL bRead = InternetReadFile(hReq, + sbuf, + 1024-1, + &dwBytesRead); + while(bRead && dwBytesRead>0) + { + sbuf[dwBytesRead] = 0; + strcat(sret,sbuf); + bRead = InternetReadFile(hReq, + sbuf, + 1024-1, + &dwBytesRead); + } + // Put a zero on the end of the buffer. + + + // Close all of the Internet handles. + InternetCloseHandle(hReq); + InternetCloseHandle(hConnect) ; + InternetCloseHandle(hSession) ; + + + return 0; +} +int https_shutdown() +{ + /*if(hLibSSL!=NULL) + { + FreeLibrary( hLibSSL ); + hLibSSL = NULL; + }*/ + + // clear ssl resource. + return 0; +} +float info_get_balance(char *info) +{ + if(info==NULL) return (float)0; + char *ptr=strstr(info,"result=PASS"); + if(ptr==NULL) return (float)0; + ptr = strstr(info,"return_bal="); + if(ptr==NULL) return (float)0; + float f; + sscanf(ptr,"return_bal=%f",&f); + return f; +} +int info_get_rate(char *info,float &rate,int &min) +{ + rate = 0; + min = 6; + if(info==NULL) return 0; + char *ptr=strstr(info,"result=PASS"); + if(ptr==NULL) return 0; + ptr=strstr(info,"return_rate="); + if(ptr==NULL) return 0; + sscanf(ptr,"return_bal=%f",&rate); + + ptr=strstr(info,"return_incr="); + if(ptr==NULL) return 0; + sscanf(ptr,"return_incr=%d",&min); + return 1; +} + +int info_get_call(char *info,float &rate,int &min,char *callstring) +{ + rate = 0; + min = 60; + if(info==NULL) return ERROR_MEMORY_NOT_ENOUGH; + char *ptr=strstr(info,"result=PASS"); + if(ptr==NULL) return ERROR_SYSTEM; + ptr=strstr(info,"return_permit=FAIL_NOFUNDS"); + if(ptr!=NULL) return ERROR_FAIL_NOFUNDS; + ptr=strstr(info,"return_permit=FAIL_NOPLAN"); + if(ptr!=NULL) return ERROR_FAIL_NOPLAN; + ptr=strstr(info,"auth=FAIL_BADCRED"); + if(ptr!=NULL) return ERROR_FAIL_BADCRED; + ptr=strstr(info,"return_permit=PASS"); + if(ptr==NULL) return ERROR_SYSTEM; + ptr=strstr(info,"return_rate="); + if(ptr==NULL) return ERROR_SYSTEM; + sscanf(ptr,"return_rate=%f",&rate); + ptr=strstr(info,"return_dial="); + if(ptr==NULL) return ERROR_SYSTEM; + ptr += strlen("return_dial="); + strcpy(callstring,ptr); + /*ptr=strstr(info,"return_incr="); + if(ptr==NULL) return ERROR_SYSTEM; + sscanf(ptr,"return_incr=%d",&min);*/ + return ERROR_HTTP_SUCCESS; +} \ No newline at end of file Added: freeswitch/trunk/gtalkphone/https/gtalkphone_https.h ============================================================================== --- (empty file) +++ freeswitch/trunk/gtalkphone/https/gtalkphone_https.h Wed Aug 30 11:21:42 2006 @@ -0,0 +1,21 @@ +#ifndef _HTTPS_H +#define _HTTPS_H +int https_init(); +int https_get(char *req,char *sret); +int https_get_callback(char *req,char *sret); +int https_shutdown(); +float info_get_balance(char *info); +int info_get_rate(char *info,float &rate,int &min); +#define ERROR_HTTP_SUCCESS 0 +#define ERROR_MEMORY_NOT_ENOUGH 1 +#define ERROR_SYSTEM 2 +#define ERROR_FAIL_NOFUNDS 3 +#define ERROR_FAIL_NOPLAN 4 +#define ERROR_FAIL_BADCRED 5 + +int info_get_call(char *info,float &rate,int &min,char *callstring); + + + + +#endif \ No newline at end of file Added: freeswitch/trunk/gtalkphone/imphone/debug/google.dll ============================================================================== Binary file. No diff available. Added: freeswitch/trunk/gtalkphone/imphone/debug/google.ilk ============================================================================== Binary file. No diff available. Added: freeswitch/trunk/gtalkphone/mixer/include/MixerBase.h ============================================================================== --- (empty file) +++ freeswitch/trunk/gtalkphone/mixer/include/MixerBase.h Wed Aug 30 11:21:42 2006 @@ -0,0 +1,176 @@ +//============================================================================= +// Copyright Langis Pitre 1998 +// You may do whatever you want with this code, as long as you include this +// copyright notice in your implementation files. +// +// If you wish to add new classes to this collection, feel free to do so. +// But please send me your code so that I can update the collection. +// +// Comments and bug reports: lpitre@sympatico.ca +// +//============================================================================= +#ifndef _LANGIS_PITRE_MIXER_BASE_H_ +#define _LANGIS_PITRE_MIXER_BASE_H_ + +#include <mmsystem.h> + +// Comment-out the next line to prevent warnings to popup. If there was a problem +// initializing a mixer control, your program won't crash since the classes check +// the validity of values, and your controls will simply be disabled. +// For debugging, it does help to find out where the problem is though. + +//#define DO_MIXER_WARNING + + +const DWORD NO_SOURCE = MIXERLINE_COMPONENTTYPE_SRC_LAST + 1; + +//============================================================================= +// CMixerBase Class +// +// Base class of all the mixer classes +// Takes care of opening the mixer device to get a valid handler. +// This handle, along with the number of channels are stored in +// member variables. The Init() method queries the mixer interface +// for the desired mixer control. +// +// You don't use this class directly, unless you want to derive new classes +// from it, but you can use the 4 inline functions to retrieve the name and +// short name of a mixer control or mixer line: +// +// GetControlName() +// GetControlShortName() +// GetLineName() +// GetLineShortName() +// +//=========================================================================== + +//mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm +class CMixerBase +//mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm +{ +public: + + CMixerBase(); + virtual ~CMixerBase(); + + void* GetValuePtr() { return m_val; } + + int GetDestinLineIndex( MIXERLINE &line, DWORD lineType ); + int GetSourceLineIndex( MIXERLINE &line, DWORD lineType ); + + int GetMixerControlValue(); + int SetMixerControlValue(); + + CString GetControlName() const; + CString GetControlShortName() const; + CString GetLineName() const; + CString GetLineShortName() const; + + static LPCTSTR GetControlTypeString( DWORD type ); + static LPCTSTR GetLineTypeString( DWORD type ); + + +protected: + + int Init( DWORD DstType, DWORD SrcType, DWORD ControlType, HWND hwnd ); + + void CloseMixer(); + + CString m_LineName; + CString m_DestLineName; + CString m_LineShortName; + + HMIXER m_HMixer; + MIXERCONTROL m_Control; + int m_nChannels; + +private: + int InitMXDetails(); + + MIXERCONTROLDETAILS m_Details; + void *m_val; +}; + + +//mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm +inline CString CMixerBase::GetControlName() const +//mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm +{ + if( m_HMixer ) + return CString(m_Control.szName); + else + return CString(""); +} + +//mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm +inline CString CMixerBase::GetControlShortName() const +//mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm +{ + if( m_HMixer ) + return CString(m_Control.szShortName); + else + return CString(""); +} + +//mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm +inline CString CMixerBase::GetLineName() const +//mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm +{ + return m_LineName; +} + +//mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm +inline CString CMixerBase::GetLineShortName() const +//mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm +{ + return m_LineShortName; +} + +//mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm +inline void CMixerBase::CloseMixer() +//mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm +{ + if ( m_HMixer ) mixerClose( m_HMixer ); + m_HMixer = 0; + + if( m_val ) delete[] m_val; + m_val = NULL; +} + + +//mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm +// Name : PrintMessage +// +// Descr. : printf style function with variable number of arguments, but that +// displays a message box once the string has been formatted. +// +// Arg : const char *title : string to display in the caption +// Arg : const char *fmt : format string for the list of arguments +// Arg : ... : +//----------------------------------------------------------------------------- +inline void PrintMessage( const char *title, const char *fmt, ... ) +{ +#ifdef DO_MIXER_WARNING + va_list marker; + static char buffer[256]; + + va_start( marker, fmt ); + _vsnprintf( buffer, 255, fmt, marker ); + va_end( marker ); + + ::MessageBox( NULL, buffer, title, MB_OK|MB_ICONEXCLAMATION ); +#else + title; fmt; +#endif + +} + + + +//=========================================================================== +//{{AFX_INSERT_LOCATION}} +// Microsoft Developer Studio will insert additional declarations immediately before the previous line. + +#endif // _LANGIS_PITRE_MIXER_BASE_H_ + +//=========================================================================== Added: freeswitch/trunk/gtalkphone/mixer/include/MixerFader.h ============================================================================== --- (empty file) +++ freeswitch/trunk/gtalkphone/mixer/include/MixerFader.h Wed Aug 30 11:21:42 2006 @@ -0,0 +1,101 @@ +//============================================================================= +// Copyright Langis Pitre 1998 +// You may do whatever you want with this code, as long as you include this +// copyright notice in your implementation files. +// +// If you wish to add new classes to this collection, feel free to do so. +// But please send me your code so that I can update the collection. +// +// Comments and bug reports: lpitre@sympatico.ca +// +//============================================================================= +#ifndef _LANGIS_PITRE_MIXER_FADER_H_ +#define _LANGIS_PITRE_MIXER_FADER_H_ + +#include "MixerBase.h" + +//============================================================================= +// CMixerFader Class +// +// Since this class is derived from CSliderCtrl, it allows the user to associate +// a slider resource with a mixer fader control. All messages are handled +// internally through message reflection. +// +// How to use: +// +// 1) create a slider resource (either horizontal or vertical) +// 2) declare a variable of type CMixerFader in your CDialog-derived class +// declaration +// 3) In your OnInitDialog, subclass the CMixerFader object to associate it +// with the resource (or use DDE with a variable of type CMixerFader) +// 4) In your OnInitDialog, call the Init() member funcion. +// +// If the device has two channels, it is possible to either create one +// main volume and one balance slider, or to create sliders for the left +// and right channels. +// +// For example: say you want a main volume slider and a cd audio +// volume slider, the call to Init() for the main and CD volumes would be: +// +// m_mainVolume.Init( MIXERLINE_COMPONENTTYPE_DST_SPEAKERS, // destination line +// NO_SOURCE, // no source line +// MIXERCONTROL_CONTROLTYPE_VOLUME, // control type +// CMixerFader::MAIN ); +// +// m_cdVolume.Init( MIXERLINE_COMPONENTTYPE_DST_SPEAKERS, // destination line +// MIXERLINE_COMPONENTTYPE_SRC_COMPACTDISC, // source line +// MIXERCONTROL_CONTROLTYPE_VOLUME, // control type +// CMixerFader::MAIN ); +// +//============================================================================= + +//mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm +class CMixerFader : public CSliderCtrl, public CMixerBase +//mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm +{ +public: + CMixerFader(); + virtual ~CMixerFader(); + + enum { LEFT, RIGHT, MAIN, BALANCE }; + + int Init( DWORD DstType, DWORD SrcType, DWORD ControlType, int subType ); + void SetPos(int pos); + + //{{AFX_VIRTUAL(CMixerFader) + //}}AFX_VIRTUAL + +protected: + + DWORD GetSliderValue(); + void SetFaderValue(); + + void SetSliderPos( int value ); + void SetHVSliderPos(); + + int m_FaderSpan; + int m_FaderStep; + int m_SliderSpan; + int m_subType; + float m_DeltaOverMax; + + int m_pos; + + MIXERCONTROLDETAILS_UNSIGNED *m_Value; + + //{{AFX_MSG(CMixerFader) + afx_msg LONG OnMixerControlChanged( UINT, LONG ); + afx_msg void HScroll ( UINT nSBCode, UINT nPos ); + afx_msg void VScroll ( UINT nSBCode, UINT nPos ); + afx_msg void OnDestroy(); + //}}AFX_MSG + + DECLARE_MESSAGE_MAP() +}; + +//=========================================================================== + +//{{AFX_INSERT_LOCATION}} +// Microsoft Developer Studio will insert additional declarations immediately before the previous line. + +#endif // _LANGIS_PITRE_MIXER_FADER_H_ Added: freeswitch/trunk/gtalkphone/mixer/source/MixerBase.cpp ============================================================================== --- (empty file) +++ freeswitch/trunk/gtalkphone/mixer/source/MixerBase.cpp Wed Aug 30 11:21:42 2006 @@ -0,0 +1,562 @@ +//============================================================================= +// Copyright Langis Pitre 1998 +// You may do whatever you want with this code, as long as you include this +// copyright notice in your implementation files. +// +// If you wish to add new classes to this collection, feel free to do so. +// But please send me your code so that I can update the collection. +// +// Comments and bug reports: lpitre@sympatico.ca +// +//============================================================================= +//============================================================================= +// CMixerBase Class +// +// Base class of all the mixer classes +// Takes care of opening the mixer device to get a valid handler. +// This handle, along with the number of channels are stored in +// member variables. +// You can use the 4 inline functions to retrieve the name and +// short name of a mixer control or mixer line: +// +// GetControlName() +// GetControlShortName() +// GetLineName() +// GetLineShortName() +// +//============================================================================= +//============================================================================= +#include <stdarg.h> +#include "stdafx.h" +#include "MixerBase.h" + +#ifdef _DEBUG +#define new DEBUG_NEW +#undef THIS_FILE +static char THIS_FILE[] = __FILE__; +#endif + + + +//mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm +// Name : CMixerBase +// +// Descr. : +// +//----------------------------------------------------------------------------- +CMixerBase::CMixerBase() +{ + m_HMixer = 0; + m_val = NULL; +} + + +//mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm +// Name : ~CMixerBase +// +// Descr. : +// +//----------------------------------------------------------------------------- +CMixerBase::~CMixerBase() +{ + CloseMixer(); +} + + +//mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm +// Name : Init +// +// Descr. : Opens the mixer device and get a handle. Queries the mixer device for +// the desired control type. This control should belong either to a +// destination line or to a source line. +// - If the control belongs to a destination line, the 'DstType' parameter +// should specify its component type, and the 'SrcType' parameter should +// be set to NO_SOURCE. +// - If the control belongs to a source line, the 'DstType' parameter +// should specify the component type of the line that owns the source line, +// and the 'SrcType' parameter should specify the component type of the +// source line that owns the control. +// +// Called by the derived classes only ( protected ). +// If the desired mixer line is found, the specified control is queried, +// and memory il allocated to hold the values that will be sent to and +// queried from the mixer device. +// +// Return : int 1 if successful, 0 otherwise +// +// Arg : DWORD DstType : destination line component type +// +// These are valid arguments ( if available ): +// +// MIXERLINE_COMPONENTTYPE_DST_DIGITAL +// MIXERLINE_COMPONENTTYPE_DST_LINE +// MIXERLINE_COMPONENTTYPE_DST_MONITOR +// MIXERLINE_COMPONENTTYPE_DST_SPEAKERS +// MIXERLINE_COMPONENTTYPE_DST_HEADPHONES +// MIXERLINE_COMPONENTTYPE_DST_TELEPHONE +// MIXERLINE_COMPONENTTYPE_DST_WAVEIN +// MIXERLINE_COMPONENTTYPE_DST_MONITOR +// MIXERLINE_COMPONENTTYPE_DST_VOICEIN +// +// Arg : DWORD SrcType : source line component type +// +// These are valid arguments ( if available ): +// +// NO_SOURCE ( use when the desired control belongs to a destination line ) +// +// MIXERLINE_COMPONENTTYPE_SRC_DIGITAL +// MIXERLINE_COMPONENTTYPE_SRC_LINE +// MIXERLINE_COMPONENTTYPE_SRC_MICROPHONE +// MIXERLINE_COMPONENTTYPE_SRC_SYNTHESIZER +// MIXERLINE_COMPONENTTYPE_SRC_COMPACTDISC +// MIXERLINE_COMPONENTTYPE_SRC_TELEPHONE +// MIXERLINE_COMPONENTTYPE_SRC_PCSPEAKER +// MIXERLINE_COMPONENTTYPE_SRC_WAVEOUT +// MIXERLINE_COMPONENTTYPE_SRC_AUXILIARY +// MIXERLINE_COMPONENTTYPE_SRC_ANALOG +// +// Arg : DWORD ControlType : desired control type +// +// Arg : HWND hwnd : handle of window that will handle mixer specific messages +// this handle is supplied by the derived classes. +// +//----------------------------------------------------------------------------- +int CMixerBase::Init( DWORD DstType, DWORD SrcType, DWORD ControlType, HWND hwnd ) +{ + UINT nbMixers = mixerGetNumDevs(); + if( nbMixers < 1 ) + { + PrintMessage( "CMixerBase::Init", "No mixer device present" ); + return 0; + } + + // ---- open the mixer device ---- + + if ( m_HMixer ) + mixerClose( m_HMixer ); + + if( mixerOpen( &m_HMixer, 0, ( DWORD_PTR )hwnd, 0, CALLBACK_WINDOW ) != MMSYSERR_NOERROR ) + { + PrintMessage( "CMixerBase::Init", "Could not open mixer device" ); + return 0; + } + + // ----- find the desired destination line ----- + + MIXERLINE line; + + if( GetDestinLineIndex( line, DstType ) == -1 ) + { + PrintMessage( "CMixerBase::Init", + "Warning: the destination line \n%s\nwas not found.", GetLineTypeString( DstType ) ); + CloseMixer(); + return 0; + } + + m_DestLineName = line.szName; + + // ----- find the desired source line ----- + + if( SrcType != NO_SOURCE ) + { + if( GetSourceLineIndex( line, SrcType ) == -1 ) + { + PrintMessage( "CMixerBase::Init", + "Warning: the source line \n%s\n not found.\n" + "\n(Associated to Destination line \n%s)", + GetLineTypeString( SrcType ), m_DestLineName ); + CloseMixer(); + return 0; + } + } + + // we found the line! let's see if it has any controls... + + m_nChannels = line.cChannels; + m_LineName = line.szName; + m_LineShortName = line.szShortName; + + //TRACE( "Number of controls available: %d\n", line.cControls ); + if( line.cControls == 0 ) + { + PrintMessage( "CMixerBase::Init", + "No controls available for this audio line: %s", line.szName ); + CloseMixer(); + return 0; + } + + // ---------- We try and find the desired control for the mixer line --------- + + MIXERLINECONTROLS mixerLineControl; + + mixerLineControl.cbStruct = sizeof( MIXERLINECONTROLS ); + mixerLineControl.dwLineID = line.dwLineID; + mixerLineControl.dwControlType = ControlType; + mixerLineControl.cControls = 1; + mixerLineControl.cbmxctrl = sizeof( MIXERCONTROL ); + mixerLineControl.pamxctrl = &m_Control; + + if( mixerGetLineControls( ( HMIXEROBJ )m_HMixer, &mixerLineControl, + MIXER_GETLINECONTROLSF_ONEBYTYPE ) != MMSYSERR_NOERROR ) + { + TRACE( "CMixerBase::Init - mixerGetLineControls failed\n" ); + PrintMessage( "CMixerBase::Init", "Could not find specified mixer control. " + "Associated Windows control will be disabled.\n" + "Control type: %s,\n\nDest line type: %s,\nSrc line type: %s\n", + GetControlTypeString( ControlType ), + GetLineTypeString( DstType ), + GetLineTypeString( SrcType ) ); + CloseMixer(); + return 0; + } + + // we got the control, now store some values for later queries + + if( !InitMXDetails() ) + return 0; + + return 1; +} + + +//mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm +// Name : GetDestinLineIndex +// +// Descr. : Loops through all possible destination lines, and returns the +// index of the line that matches the type passed as argument. +// The MIXERLINE structure is also filled along the way by the call +// to mixerGetLineInfo(). +// +// Return : int : index of line found, otherwise -1 +// +// Arg : MIXERLINE &line : +// Arg : DWORD lineType : +//----------------------------------------------------------------------------- +int CMixerBase::GetDestinLineIndex( MIXERLINE &line, DWORD lineType ) +{ + // ----- find out how many destination lines are available ----- + + MIXERCAPS caps; + if( mixerGetDevCaps( (UINT_PTR)m_HMixer, &caps, sizeof(MIXERCAPS) ) != MMSYSERR_NOERROR ) + { + return -1; + } + + int ndest = caps.cDestinations; + for( int i = 0; i < ndest; i++ ) + { + line.cbStruct = sizeof( MIXERLINE ); + line.dwSource = 0; + line.dwDestination = i; + if( mixerGetLineInfo( ( HMIXEROBJ )m_HMixer, &line, + MIXER_GETLINEINFOF_DESTINATION ) != MMSYSERR_NOERROR ) + { + return -1; + } + + if( line.dwComponentType == lineType ) + { + return( i ); + } + } + return -1; +} + + +//mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm +// Name : GetSourceLineIndex +// +// Descr. : Loops through all possible source lines associated with a given +// destination line, and returns the index of the line that matches +// the type passed as argument. The destination line index is taken +// from the dwDestination member of the MIXERLINE structure, so this +// member must be properly set before calling this function. +// The MIXERLINE structure is also filled along the way by the call +// to mixerGetLineInfo(). +// +// Return : int +// Arg : MIXERLINE &line : +// Arg : DWORD lineType : +//----------------------------------------------------------------------------- +int CMixerBase::GetSourceLineIndex( MIXERLINE &line, DWORD lineType ) +{ + UINT nconn = line.cConnections; + DWORD DstIndex = line.dwDestination; + + for( UINT j = 0; j < nconn; j++ ) + { + line.cbStruct = sizeof( MIXERLINE ); + line.dwSource = j; + line.dwDestination = DstIndex; + if( mixerGetLineInfo( ( HMIXEROBJ )m_HMixer, &line, + MIXER_GETLINEINFOF_SOURCE ) != MMSYSERR_NOERROR ) + { + return -1; + } + + if( line.dwComponentType == lineType ) + { + return( j ); + } + } + return -1; +} + + +//mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm +// Name : InitMXDetails +// +// Descr. : prepare the MIXERCONTROLDETAILS structure for queries, and allocate +// the proper amount of memory to hold the values that will be sent to +// and queried from the mixer device. +// +// Return : void +//----------------------------------------------------------------------------- +int CMixerBase::InitMXDetails() +{ + m_Details.cbStruct = sizeof( MIXERCONTROLDETAILS ); + m_Details.dwControlID = m_Control.dwControlID; + m_Details.cMultipleItems = m_Control.cMultipleItems; + + if( m_Control.fdwControl & MIXERCONTROL_CONTROLF_UNIFORM ) + { + m_Details.cChannels = 1; + } + else + { + m_Details.cChannels = m_nChannels; + } + + switch( m_Control.dwControlType & MIXERCONTROL_CT_UNITS_MASK ) + { + case MIXERCONTROL_CT_UNITS_UNSIGNED: + case MIXERCONTROL_CT_UNITS_DECIBELS: + m_Details.cbDetails = sizeof( MIXERCONTROLDETAILS_UNSIGNED ); + break; + + case MIXERCONTROL_CT_UNITS_PERCENT: + case MIXERCONTROL_CT_UNITS_SIGNED: + m_Details.cbDetails = sizeof( MIXERCONTROLDETAILS_SIGNED ); + break; + + case MIXERCONTROL_CT_UNITS_BOOLEAN: + m_Details.cbDetails = sizeof( MIXERCONTROLDETAILS_BOOLEAN ); + break; + + default: + PrintMessage( "CMixerBase::InitMXDetails", "Control uses unknown units." ); + CloseMixer(); + return 0; + } + + int nItems = 1; + if( m_Control.fdwControl & MIXERCONTROL_CONTROLF_MULTIPLE ) + { + nItems = m_Control.cMultipleItems; + } + nItems *= m_Details.cChannels; + + if( m_val ) delete[] m_val; + m_val = new char[ nItems* m_Details.cbDetails ]; + if( m_val == NULL ) + { + PrintMessage( "CMixerBase::InitMXDetails", "Memory allocation error." ); + CloseMixer(); + return 0; + } + + m_Details.paDetails = m_val; + + return 1; +} + +//mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm +// Name : SetMixerControlValue +// +// Descr. : +// +// Return : int +// Arg : MIXERCONTROL &ctrl : +// Arg : CMControlInfo &ctInfo : +// Arg : LONG newVal : +//----------------------------------------------------------------------------- +int CMixerBase::SetMixerControlValue( ) +{ + if( mixerSetControlDetails( ( HMIXEROBJ )m_HMixer, &m_Details, + MIXER_SETCONTROLDETAILSF_VALUE ) + != MMSYSERR_NOERROR ) + { + TRACE("CMixerBase::SetMixerControlValue mixerSetControlDetails error\n"); + return 0; + } + + return 1; +} + + +//mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm +// Name : GetMixerControlValue +// +// Descr. : +// +// Return : int +// Arg : CMControlInfo &ctInfo : +//----------------------------------------------------------------------------- +int CMixerBase::GetMixerControlValue( ) +{ + if( mixerGetControlDetails( ( HMIXEROBJ )m_HMixer, &m_Details, + MIXER_SETCONTROLDETAILSF_VALUE ) + != MMSYSERR_NOERROR ) + { + TRACE("CMixerDialog::GetMixerControlValue mixerGetControlDetails error\n"); + return 0; + } + + return 1; +} + + +//mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm +// +// Utility functions. These are declared static, so they can be used outside of +// an object instance, with the namespace being CMixerBase:: +// +//mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm + +//mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm +// Name : GetControlTypeString +// +// Descr. : +// +// Return : LPCTSTR +// Arg : DWORD type : +//----------------------------------------------------------------------------- +LPCTSTR CMixerBase::GetControlTypeString( DWORD type ) +{ + switch( type ) + { + case MIXERCONTROL_CONTROLTYPE_CUSTOM: + return ( "MIXERCONTROL_CONTROLTYPE_CUSTOM" ); + case MIXERCONTROL_CONTROLTYPE_BOOLEANMETER: + return ( "MIXERCONTROL_CONTROLTYPE_BOOLEANMETER" ); + case MIXERCONTROL_CONTROLTYPE_SIGNEDMETER: + return ( "MIXERCONTROL_CONTROLTYPE_SIGNEDMETER" ); + case MIXERCONTROL_CONTROLTYPE_UNSIGNEDMETER: + return ( "MIXERCONTROL_CONTROLTYPE_UNSIGNEDMETER" ); + case MIXERCONTROL_CONTROLTYPE_PEAKMETER: + return ( "MIXERCONTROL_CONTROLTYPE_PEAKMETER" ); + case MIXERCONTROL_CONTROLTYPE_BOOLEAN: + return ( "MIXERCONTROL_CONTROLTYPE_BOOLEAN" ); + case MIXERCONTROL_CONTROLTYPE_ONOFF: + return ( "MIXERCONTROL_CONTROLTYPE_ONOFF" ); + case MIXERCONTROL_CONTROLTYPE_MUTE: + return ( "MIXERCONTROL_CONTROLTYPE_MUTE" ); + case MIXERCONTROL_CONTROLTYPE_MONO: + return ( "MIXERCONTROL_CONTROLTYPE_MONO" ); + case MIXERCONTROL_CONTROLTYPE_LOUDNESS: + return ( "MIXERCONTROL_CONTROLTYPE_LOUDNESS" ); + case MIXERCONTROL_CONTROLTYPE_STEREOENH: + return ( "MIXERCONTROL_CONTROLTYPE_STEREOENH" ); + case MIXERCONTROL_CONTROLTYPE_BUTTON: + return ( "MIXERCONTROL_CONTROLTYPE_BUTTON" ); + case MIXERCONTROL_CONTROLTYPE_DECIBELS: + return ( "MIXERCONTROL_CONTROLTYPE_DECIBELS" ); + case MIXERCONTROL_CONTROLTYPE_SIGNED: + return ( "MIXERCONTROL_CONTROLTYPE_SIGNED" ); + case MIXERCONTROL_CONTROLTYPE_UNSIGNED: + return ( "MIXERCONTROL_CONTROLTYPE_UNSIGNED" ); + case MIXERCONTROL_CONTROLTYPE_PERCENT: + return ( "MIXERCONTROL_CONTROLTYPE_PERCENT" ); + case MIXERCONTROL_CONTROLTYPE_SLIDER: + return ( "MIXERCONTROL_CONTROLTYPE_SLIDER" ); + case MIXERCONTROL_CONTROLTYPE_PAN: + return ( "MIXERCONTROL_CONTROLTYPE_PAN" ); + case MIXERCONTROL_CONTROLTYPE_QSOUNDPAN: + return ( "MIXERCONTROL_CONTROLTYPE_QSOUNDPAN" ); + case MIXERCONTROL_CONTROLTYPE_FADER: + return ( "MIXERCONTROL_CONTROLTYPE_FADER" ); + case MIXERCONTROL_CONTROLTYPE_VOLUME: + return ( "MIXERCONTROL_CONTROLTYPE_VOLUME" ); + case MIXERCONTROL_CONTROLTYPE_BASS: + return ( "MIXERCONTROL_CONTROLTYPE_BASS" ); + case MIXERCONTROL_CONTROLTYPE_TREBLE: + return ( "MIXERCONTROL_CONTROLTYPE_TREBLE" ); + case MIXERCONTROL_CONTROLTYPE_EQUALIZER: + return ( "MIXERCONTROL_CONTROLTYPE_EQUALIZER" ); + case MIXERCONTROL_CONTROLTYPE_SINGLESELECT: + return ( "MIXERCONTROL_CONTROLTYPE_SINGLESELECT" ); + case MIXERCONTROL_CONTROLTYPE_MUX: + return ( "MIXERCONTROL_CONTROLTYPE_MUX" ); + case MIXERCONTROL_CONTROLTYPE_MULTIPLESELECT: + return ( "MIXERCONTROL_CONTROLTYPE_MULTIPLESELECT" ); + case MIXERCONTROL_CONTROLTYPE_MIXER: + return ( "MIXERCONTROL_CONTROLTYPE_MIXER" ); + case MIXERCONTROL_CONTROLTYPE_MICROTIME: + return ( "MIXERCONTROL_CONTROLTYPE_MICROTIME" ); + case MIXERCONTROL_CONTROLTYPE_MILLITIME: + return ( "MIXERCONTROL_CONTROLTYPE_MILLITIME" ); + + default: + return ( "---- UNKNOWN CONTROL TYPE ----" ); + } +} + + +//mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm +// Name : GetLineTypeString +// +// Descr. : +// +// Return : LPCTSTR +// Arg : DWORD type : +//----------------------------------------------------------------------------- +LPCTSTR CMixerBase::GetLineTypeString( DWORD type ) +{ + switch( type ) + { + case MIXERLINE_COMPONENTTYPE_DST_DIGITAL: + return ( "MIXERLINE_COMPONENTTYPE_DST_DIGITAL" ); + case MIXERLINE_COMPONENTTYPE_DST_UNDEFINED: + return ( "MIXERLINE_COMPONENTTYPE_DST_UNDEFINED" ); + case MIXERLINE_COMPONENTTYPE_DST_LINE: + return ( "MIXERLINE_COMPONENTTYPE_DST_LINE"); + case MIXERLINE_COMPONENTTYPE_DST_MONITOR: + return ( "MIXERLINE_COMPONENTTYPE_DST_MONITOR"); + case MIXERLINE_COMPONENTTYPE_DST_SPEAKERS: + return ( "MIXERLINE_COMPONENTTYPE_DST_SPEAKERS"); + case MIXERLINE_COMPONENTTYPE_DST_HEADPHONES: + return ( "MIXERLINE_COMPONENTTYPE_DST_HEADPHONES"); + case MIXERLINE_COMPONENTTYPE_DST_TELEPHONE: + return ( "MIXERLINE_COMPONENTTYPE_DST_TELEPHONE"); + case MIXERLINE_COMPONENTTYPE_DST_WAVEIN: + return ( "MIXERLINE_COMPONENTTYPE_DST_WAVEIN"); + case MIXERLINE_COMPONENTTYPE_DST_VOICEIN: + return ( "MIXERLINE_COMPONENTTYPE_DST_VOICEIN"); + case MIXERLINE_COMPONENTTYPE_SRC_ANALOG: + return ( "MIXERLINE_COMPONENTTYPE_SRC_ANALOG"); + case MIXERLINE_COMPONENTTYPE_SRC_AUXILIARY: + return ( "MIXERLINE_COMPONENTTYPE_SRC_AUXILIARY"); + case MIXERLINE_COMPONENTTYPE_SRC_COMPACTDISC: + return ( "MIXERLINE_COMPONENTTYPE_SRC_COMPACTDISC"); + case MIXERLINE_COMPONENTTYPE_SRC_DIGITAL: + return ( "MIXERLINE_COMPONENTTYPE_SRC_DIGITAL"); + case MIXERLINE_COMPONENTTYPE_SRC_LINE: + return ( "MIXERLINE_COMPONENTTYPE_SRC_LINE"); + case MIXERLINE_COMPONENTTYPE_SRC_MICROPHONE: + return ( "MIXERLINE_COMPONENTTYPE_SRC_MICROPHONE"); + case MIXERLINE_COMPONENTTYPE_SRC_PCSPEAKER: + return ( "MIXERLINE_COMPONENTTYPE_SRC_PCSPEAKER"); + case MIXERLINE_COMPONENTTYPE_SRC_SYNTHESIZER: + return ( "MIXERLINE_COMPONENTTYPE_SRC_SYNTHESIZER"); + case MIXERLINE_COMPONENTTYPE_SRC_TELEPHONE: + return ( "MIXERLINE_COMPONENTTYPE_SRC_TELEPHONE"); + case MIXERLINE_COMPONENTTYPE_SRC_UNDEFINED: + return ( "MIXERLINE_COMPONENTTYPE_SRC_UNDEFINED"); + case MIXERLINE_COMPONENTTYPE_SRC_WAVEOUT: + return ( "MIXERLINE_COMPONENTTYPE_SRC_WAVEOUT"); + case NO_SOURCE: + return ( "No source line"); + default: + return ( "---- UNKNOWN LINE TYPE ----" ); + } +} Added: freeswitch/trunk/gtalkphone/mixer/source/MixerFader.cpp ============================================================================== --- (empty file) +++ freeswitch/trunk/gtalkphone/mixer/source/MixerFader.cpp Wed Aug 30 11:21:42 2006 @@ -0,0 +1,504 @@ +//============================================================================= +// Copyright Langis Pitre 1998 +// You may do whatever you want with this code, as long as you include this +// copyright notice in your implementation files. +// +// If you wish to add new classes to this collection, feel free to do so. +// But please send me your code so that I can update the collection. +// +// Comments and bug reports: lpitre@sympatico.ca +// +//============================================================================= +//============================================================================= +// CMixerFader +// +// Since this class is derived from CSliderCtrl, it allows the user to associate +// a slider resource with a mixer fader control. All messages are handled +// internally through message reflection. +// +// How to use: +// +// 1 ) create a slider resource ( either horizontal or vertical ) +// 2 ) declare a variable of type CMixerFader in your CDialog-derived class +// declaration +// 3 ) In your OnInitDialog, subclass the CMixerFader object to associate it +// with the resource ( or use DDE with a variable of type CMixerFader ) +// 4 ) In your OnInitDialog, call the Init() member funcion. +// +// If the device has two channels, it is possible to either create one +// main volume and one balance slider, or to create sliders for the left +// and right channels. +// +//============================================================================= +//============================================================================= +//============================================================================= +#include "stdafx.h" +#include "MixerFader.h" + +#ifdef _DEBUG +#define new DEBUG_NEW +#undef THIS_FILE +static char THIS_FILE[] = __FILE__; +#endif + + +//mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm +// Name : CMixerFader +// +// Descr. : +// +//----------------------------------------------------------------------------- +CMixerFader::CMixerFader() : CMixerBase() +{ + m_Value = NULL; + m_DeltaOverMax = 0; + m_pos = 50; +} + + +//mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm +// Name : ~CMixerFader +// +// Descr. : +// +//----------------------------------------------------------------------------- +CMixerFader::~CMixerFader() +{ +} + +BEGIN_MESSAGE_MAP( CMixerFader, CSliderCtrl ) + //{{AFX_MSG_MAP( CMixerFader ) + ON_MESSAGE( MM_MIXM_CONTROL_CHANGE, OnMixerControlChanged ) + ON_WM_HSCROLL_REFLECT( ) + ON_WM_VSCROLL_REFLECT( ) + ON_WM_DESTROY() + //}}AFX_MSG_MAP +END_MESSAGE_MAP() + + +//mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm +// Name : Init +// +// Descr. : Initializes the mixer control. Most of the work is done in the +// base class' implementation of Init. +// Init queries the mixer device for the specified mixer control type. +// If such a control is found, its current value is queried, and used +// to initialize the windows control. +// - If the call to CMixerBase::Init() is succesfull, m_Value is set to +// the address of the memory allocated by CMixerBase. +// +// Return : int 0 if failed, 1 otherwise +// +// Arg : DWORD DstType : see definition of CMixerBase::Init() for a description +// Arg : DWORD SrcType : see definition of CMixerBase::Init() for a description +// Arg : DWORD ControlType : type of desired fader. +// +// These are valid arguments: +// +// MIXERCONTROL_CONTROLTYPE_FADER +// MIXERCONTROL_CONTROLTYPE_VOLUME +// MIXERCONTROL_CONTROLTYPE_BASS +// MIXERCONTROL_CONTROLTYPE_TREBLE +// MIXERCONTROL_CONTROLTYPE_EQUALIZER +// +// Arg : int subType: If the mixer line has two channels, the subtype can be used to +// create a fader for the left or right channel, or as a balance +// between the channels, or as a main fader that controls both +// channels. +// If only one channel is available, only the MAIN subtype may be +// specified. +// These are valid arguments: +// +// CMixerFader::LEFT +// CMixerFader::RIGHT +// CMixerFader::MAIN +// CMixerFader::BALANCE +// +//----------------------------------------------------------------------------- +int CMixerFader::Init( DWORD DstType, DWORD SrcType, DWORD ControlType, int subType ) +{ + if ( m_hWnd == NULL ) + { + PrintMessage( "CMixerFader::Init", "No Window attached. Did you create or subclass one?" ); + return 0; + } + + EnableWindow( FALSE ); + + if( subType == BALANCE ) + { + int min, max; + GetRange( min, max ); + SetSliderPos( ( max - min )/2 ); + } + + // start by checking the type and subtypes + + if( ( ControlType & MIXERCONTROL_CT_CLASS_MASK ) != MIXERCONTROL_CT_CLASS_FADER ) + { + PrintMessage( "CMixerFader::Init", + "Wrong control type for a fader control: %s", + GetControlTypeString( ControlType ) ); + return 0; + } + if( subType < LEFT || subType > BALANCE ) + { + PrintMessage( "CMixerFader::Init", "Wrong sub-type for a fader control: %d", subType ); + return 0; + } + + m_subType = subType; + + if( CMixerBase::Init( DstType, SrcType, ControlType, m_hWnd ) == 0 ) + return 0; + + // set the slider range and number of steps from the information obtained + // on the mixer control + m_FaderSpan = m_Control.Bounds.dwMaximum - m_Control.Bounds.dwMinimum; + m_FaderStep = m_FaderSpan/m_Control.Metrics.cSteps; + m_SliderSpan = m_Control.Metrics.cSteps; + + SetRange( 0, m_SliderSpan ); + + if( m_nChannels < 2 ) + { + // a balance, left, or right control on a single channel line doesn't make sense + // abort and set the balance slider to mid-course + if( m_subType == LEFT || m_subType == RIGHT || m_subType == BALANCE ) + { + PrintMessage( "CMixerFader::Init", + "Only one channel available on this line. Use Fader type MAIN only.\n" + "Windows control will be disabled.\n" + "\nItem: %s.\n" + "\n( Line: %s )", + GetControlName(), + GetLineName() ); + + if( subType == BALANCE ) + SetSliderPos( m_SliderSpan/2 ); + CloseMixer(); + return 0; + } + } + + m_Value = (MIXERCONTROLDETAILS_UNSIGNED *)GetValuePtr(); + if( m_Value == NULL ) + { + PrintMessage( "CMixerFader::Init", "m_Value NULL." ); + CloseMixer(); + return 0; + } + + if( GetMixerControlValue() ) + { + EnableWindow( TRUE ); + SetHVSliderPos(); + } + + return 1; +} + + +//mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm +// Name : SetHVSliderPos +// +// Descr. : Updates the slider position according to the subtype of fader used. +// Since a fader can be used as a balance between the two channels, this function +// and SetFaderValue() had to work in conjunction to ensure proper behavior of all +// sliders. For example, if the balance slider is shifted to one side, the right +// and left channels sliders must react accordingly. And if the main fader slider +// is moved, the relative position of the right and left channels must be kept +// constant. +// You don't have to read the rest of this description. It was not written to +// impress anybody; I just wanted to keep it logged somewhere! +// +// For the BALANCE slider position P, the maximum value must be obtained at mid-course, +// the value decreasing linearly to 0 at both ends. +// Defining D ( Delta ) as R - L, the difference in value between the Right and +// Left channel, and M the greatest value between the the Right and Left channel, +// D / M is a function that is defined in the range [-1, 1], with a maximum at 0. +// So, m_SliderSpan / 2 * ( D/M + 1 ) will have the range [0, m_SliderSpan] with a +// maximum at half the slider range. +// +// -> P = S / 2 * ( DOM + 1 ), where DOM = D/M ( Delta-Over-Max ),and S = m_SliderSpan +// +// Whenever a new set of values are sent to the mixer device, it sends back a +// notification message to all the mixer controls. The CMixerFader handler +// for this message ( see below ) calls SetHVSliderPos() to reposition the affected +// sliders. This was a headache because the current value of DOM had to be +// protected from unwanted changes. I used a member variable ( m_DeltaOverMax ) that +// could be used by both this function and SetFaderValue(). This looked simple on +// paper, but it took me a lot of debugging to find the right way to do this. +// +// Return : void +//----------------------------------------------------------------------------- +void CMixerFader::SetHVSliderPos() +{ + float MaxVal; + + if( m_nChannels > 1 ) + { + MaxVal = ( float )max( m_Value[RIGHT].dwValue, m_Value[LEFT].dwValue ); + if( MaxVal > 0 ) + { + m_DeltaOverMax = ( ( float )m_Value[RIGHT].dwValue - ( float )m_Value[LEFT].dwValue )/MaxVal; + } + } + else + { + MaxVal = ( float )m_Value[0].dwValue; + } + + switch ( m_subType ) + { + case MAIN: // set the main fader to the maximum value + SetSliderPos( int( MaxVal/m_FaderStep ) ); + break; + + case BALANCE: // pos = m_SliderSpan/2 * ( delta/ max + 1 ) + if( MaxVal > 0 ) + { + SetSliderPos( int( m_SliderSpan*( m_DeltaOverMax + 1.0 )/2.0 ) ); + } + break; + + case LEFT: // only set the left channel slider + SetSliderPos( int( ( float )m_Value[LEFT].dwValue/m_FaderStep ) ); + break; + + case RIGHT: // only set the right channel slider + SetSliderPos( int( ( float )m_Value[RIGHT].dwValue/m_FaderStep ) ); + break; + + default: + PrintMessage( "CMixerFader::SetHVSliderPos", "Wrong sub-type for a fader control." ); + } +} + + +//mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm +// Name : SetFaderValue +// +// Descr. : the slider position changed, update the values and send to mixer device. +// +// To determine the values to send to the mixer device, this algorithm is used: +// +// - If the MAIN slider is moved: +// The idea is to keep D = R - L constant. In other words, D1/M1 = D2/M2 where +// D2 and M2 are the new values. +// Now, if D1 > 0, this means that R1 = M1. This, in the abvove equality, gives: +// -> L2 = R2( 1 - D1/R1 ) = R2( 1 - DOM1 ) +// If D1 < 0, L1 = M1, which leads to: +// -> R2 = L2( 1 + DOM1 ) +// +// - If the BALANCE slider is moved: +// This will change D. Starting from the equation P = S / 2 * ( D/M + 1 ) +// and rearranging the terms, we obtain respectively for the rigth and left channels: +// +// -> R = M ( 2P/S - 1 ) + L +// -> L = R - M ( 2P/S - 1 ) +// +// If D > 0, R = M. This gives: L = 2R ( 1 - P/S ) +// If D < 0, L = M. This gives: R = 2LP/S +// +// Return : void +//----------------------------------------------------------------------------- +void CMixerFader::SetFaderValue() +{ + DWORD newVal = GetSliderValue(); + + float MaxVal; + + if( m_nChannels > 1 ) + { + MaxVal = ( float )max( m_Value[RIGHT].dwValue, m_Value[LEFT].dwValue ); + } + else + { + MaxVal = ( float )m_Value[0].dwValue; + } + + switch ( m_subType ) + { + case MAIN: + if( m_nChannels > 1 ) + { + if( m_DeltaOverMax > 0 ) + { + m_Value[RIGHT].dwValue = newVal; + m_Value[LEFT].dwValue = DWORD( newVal*( 1.0f - m_DeltaOverMax ) ); + } + else + { + m_Value[LEFT].dwValue = newVal; + m_Value[RIGHT].dwValue = DWORD( newVal*( 1.0f + m_DeltaOverMax ) ); + } + } + else + { + m_Value[0].dwValue = newVal; + } + break; + + case BALANCE: + if( ( int )newVal > m_FaderSpan/2 ) + { + m_Value[RIGHT].dwValue = DWORD( MaxVal ); + m_Value[LEFT].dwValue = DWORD( 2*MaxVal*( 1.0 - ( float )newVal/m_FaderSpan ) ); + } + else + { + m_Value[RIGHT].dwValue = DWORD( 2*MaxVal*( float )newVal/m_FaderSpan ); + m_Value[LEFT].dwValue = DWORD( MaxVal ); + } + break; + + case LEFT: + m_Value[LEFT].dwValue = newVal; + break; + + case RIGHT: + m_Value[RIGHT].dwValue = newVal; + break; + + default: + PrintMessage( "CMixerFader::SetFaderValue", "Wrong sub-type for a fader control." ); + return; + } + + SetMixerControlValue(); +} + + +//mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm +// Name : GetSliderValue +// +// Descr. : gets the current slider position. The value returned depends on the orientation +// of the slider. +// +// Return : DWORD value corresponding to slider position +//----------------------------------------------------------------------------- +DWORD CMixerFader::GetSliderValue() +{ + /*if( ( GetStyle( ) & TBS_VERT ) == TBS_VERT ) + { + return ( ( m_SliderSpan - GetPos() ) * m_FaderStep ); + } + else + { + return ( GetPos() * m_FaderStep ); + }*/ + return m_pos*m_SliderSpan*m_FaderStep /100; +} + + +//mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm +// Name : OnMixerControlChanged +// +// Descr. : Message handler called whenever the MCI device sends the MM_MIXM_CONTROL_CHANGE +// message. The MCI mixer device will send this message for any changing +// setting, so we need to check that the MCI control that sent the message +// corresponds to the current fader control. +// +// Return : LONG +// Arg : UINT : +// Arg : LONG message : +//----------------------------------------------------------------------------- +LONG CMixerFader::OnMixerControlChanged( UINT hMix, LONG message ) +{ +// UINT id = ( UINT )message; + + /*if( id == m_Control.dwControlID && m_HMixer == ( HMIXER )hMix ) + { + if( GetMixerControlValue() ) + { + SetHVSliderPos(); + } + else + { + TRACE( "CMixerFader::OnMixerControlChanged --- error\n" ); + } + }*/ + + return 0L; +} +void CMixerFader::SetPos(int pos) +{ + m_pos = pos; + SetFaderValue(); +} + +//============================================================================= +// +// Descr. : Handler for scrolling event message sent whenever the slider is used. +// Called by a horizontal slider +// +//============================================================================= +void CMixerFader::HScroll ( UINT nSBCode, UINT /*nPos*/ ) +{ + if( m_Value == NULL ) + { + PrintMessage( "CMixerFader::HScroll", "Error: Did you call Init() first?" ); + return; + } + if( nSBCode == TB_THUMBTRACK || nSBCode == TB_ENDTRACK || nSBCode == TB_PAGEDOWN || nSBCode == TB_PAGEUP ) + { + SetFaderValue(); + } +} + +//============================================================================= +// +// Descr. : Handler for scrolling event message sent whenever the slider is used. +// Called by a vertical slider +// +//============================================================================= +void CMixerFader::VScroll ( UINT nSBCode, UINT /*nPos*/ ) +{ + if( m_Value == NULL ) + { + PrintMessage( "CMixerFader::VScroll", "Error: Did you call Init() first?" ); + return; + } + + if( nSBCode == TB_THUMBTRACK || nSBCode == TB_ENDTRACK || nSBCode == TB_PAGEDOWN || nSBCode == TB_PAGEUP ) + { + SetFaderValue(); + } +} + + +//mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm +// Name : SetSliderPos +// +// Descr. : we need to reverse the value for a vertical scrollbar +// +// Return : void +// Arg : int value : +//----------------------------------------------------------------------------- +void CMixerFader::SetSliderPos( int value ) +{ + /*if( ( GetStyle( ) & TBS_VERT ) == TBS_VERT ) + { + SetPos( m_SliderSpan - value ); + } + else + { + SetPos( value ); + }*/ + SetPos( value ); +} + + +//mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm +// Name : OnDestroy +// +// Descr. : +// +// Return : void +//----------------------------------------------------------------------------- +void CMixerFader::OnDestroy() +{ + CloseMixer(); + CSliderCtrl ::OnDestroy(); +} Added: freeswitch/trunk/gtalkphone/monitor/MonThread.cpp ============================================================================== --- (empty file) +++ freeswitch/trunk/gtalkphone/monitor/MonThread.cpp Wed Aug 30 11:21:42 2006 @@ -0,0 +1,50 @@ +// StkThread.cpp : implementation file +// + +#include "stdafx.h" +#include "MonThread.h" +#ifdef _DEBUG +#define new DEBUG_NEW +#undef THIS_FILE +static char THIS_FILE[] = __FILE__; +#endif +///////////////////////////////////////////////////////////////////////////// +// MonThread + +IMPLEMENT_DYNCREATE(CMonThread, CWinThread) + +CMonThread::CMonThread() +{ + m_parent=NULL; +} +CMonThread::CMonThread(CWnd* vparent) +{ + m_parent = vparent; +} +CMonThread::~CMonThread() +{ +} + +BOOL CMonThread::InitInstance() +{ + // TODO: perform and per-thread initialization here + m_MoniWnd.MyCreate( (CWnd*) m_parent ); + m_pMainWnd = (CWnd*)&m_MoniWnd; + SetPriorityClass(this->m_hThread,BELOW_NORMAL_PRIORITY_CLASS); + return TRUE; +} + +int CMonThread::ExitInstance() +{ + // TODO: perform any per-thread cleanup here + return CWinThread::ExitInstance(); +} + +BEGIN_MESSAGE_MAP(CMonThread, CWinThread) + //{{AFX_MSG_MAP(MonThread) + // NOTE - the ClassWizard will add and remove mapping macros here. + //}}AFX_MSG_MAP +END_MESSAGE_MAP() + +///////////////////////////////////////////////////////////////////////////// +// MonThread message handlers Added: freeswitch/trunk/gtalkphone/monitor/MonThread.h ============================================================================== --- (empty file) +++ freeswitch/trunk/gtalkphone/monitor/MonThread.h Wed Aug 30 11:21:42 2006 @@ -0,0 +1,54 @@ +#if !defined(AFX_MonThread_H__27070EFA_8EC0_4C69_A772_D055422534AB__INCLUDED_) +#define AFX_MonThread_H__27070EFA_8EC0_4C69_A772_D055422534AB__INCLUDED_ + +#if _MSC_VER > 1000 +#pragma once +#endif // _MSC_VER > 1000 +// MonThread.h : header file +// + +#include "MoniWnd.h" + +///////////////////////////////////////////////////////////////////////////// +// CMonThread thread +class CMonThread : public CWinThread +{ + DECLARE_DYNCREATE(CMonThread) +protected: + CMonThread(); // protected constructor used by dynamic creation + +// Attributes +public: + CMonThread(CWnd* vparent); + ~CMonThread(); + + CMoniWnd m_MoniWnd; + CWnd *m_parent; +protected: +// Operations +public: +// Overrides + // ClassWizard generated virtual function overrides + //{{AFX_VIRTUAL(CMonThread) + public: + virtual BOOL InitInstance(); + virtual int ExitInstance(); + //}}AFX_VIRTUAL + +// Implementation +protected: + + // Generated message map functions + //{{AFX_MSG(CMonThread) + // NOTE - the ClassWizard will add and remove member functions here. + //}}AFX_MSG + + DECLARE_MESSAGE_MAP() +}; + +///////////////////////////////////////////////////////////////////////////// + +//{{AFX_INSERT_LOCATION}} +// Microsoft Visual C++ will insert additional declarations immediately before the previous line. + +#endif // !defined(AFX_MonThread_H__27070EFA_8EC0_4C69_A772_D055422534AB__INCLUDED_) Added: freeswitch/trunk/gtalkphone/monitor/MoniWnd.cpp ============================================================================== --- (empty file) +++ freeswitch/trunk/gtalkphone/monitor/MoniWnd.cpp Wed Aug 30 11:21:42 2006 @@ -0,0 +1,99 @@ +// MoniWnd.cpp : implementation file +// +// +// +//////////////////////////////////////////////////////////////////////////////// + +#include "stdafx.h" +#include "MoniWnd.h" +#include "gtalkphone.h" +#include "gtalkphoneDlg.h" +#include "gtalkphone_https.h" +#ifdef _DEBUG +#define new DEBUG_NEW +#undef THIS_FILE +static char THIS_FILE[] = __FILE__; +#endif +///////////////////////////////////////////////////////////////////////////// +// CMoniWnd + +CMoniWnd::CMoniWnd() +{ + m_mainWnd = NULL; + m_iCount = 0; +} + +CMoniWnd::~CMoniWnd() +{ + +} + + +BEGIN_MESSAGE_MAP(CMoniWnd, CWnd) + //{{AFX_MSG_MAP(CMoniWnd) + ON_WM_PAINT() + ON_WM_DESTROY() + //}}AFX_MSG_MAP + ON_WM_TIMER() +END_MESSAGE_MAP() + + +///////////////////////////////////////////////////////////////////////////// +// CMoniWnd message handlers + +void CMoniWnd::OnPaint() +{ +} + +int CMoniWnd::MyCreate(CWnd* pWnd) +{ + CRect rect(0, 0, 0,0); + HBRUSH hBrush; + m_mainWnd = pWnd; + hBrush = (HBRUSH)GetStockObject(WHITE_BRUSH); + LPCTSTR lpszClassName = AfxRegisterWndClass(CS_HREDRAW|CS_VREDRAW,0,hBrush); + CreateEx(0,lpszClassName,"Gtalkphone_Monitor",WS_OVERLAPPEDWINDOW, + rect,pWnd, 0, NULL); + + ShowWindow(SW_HIDE); + SetTimer(1,1000,NULL); + return 1; +} + +void CMoniWnd::OnDestroy() +{ + CWnd::OnDestroy(); +} + +void CMoniWnd::OnTimer(UINT_PTR nIDEvent) +{ + // TODO: Add your message handler code here and/or call default + if(((CgtalkphoneDlg*)m_mainWnd)->m_iStatus == STATUS_LOGIN) + { + if(m_iCount>=180) m_iCount = 0; + if(m_iCount==0) + { + char info[1024]; + char path[1024]; + CString sUser = ((CgtalkphoneDlg*)m_mainWnd)->m_username; + if(sUser.Find("@")<0) + { + sUser += "@gtalkphone.com"; + } + sprintf(path,"/api.cgi?user=%s&pass=%s&act=balance",sUser,((CgtalkphoneDlg*)m_mainWnd)->m_pwd); + https_get(path,info); + float fret = -(info_get_balance(info)); + if(fret<-0.009 || fret>0.009) + { + ((CgtalkphoneDlg*)m_mainWnd)->m_balance = fret; + } + CString s; + BSTR bstr; + s.Format("Balance:%.2f",((CgtalkphoneDlg*)m_mainWnd)->m_balance); + bstr = s.AllocSysString(); + ::PostMessage(m_mainWnd->m_hWnd,UM_MONITOR_EVENT,0,(LPARAM)bstr); + } + m_iCount ++; + } + CWnd::OnTimer(nIDEvent); +} Added: freeswitch/trunk/gtalkphone/monitor/MoniWnd.h ============================================================================== --- (empty file) +++ freeswitch/trunk/gtalkphone/monitor/MoniWnd.h Wed Aug 30 11:21:42 2006 @@ -0,0 +1,56 @@ +#if !defined(AFX_MoniWnd_H__58975303_DC58_11D1_A883_00C04FCCA334__INCLUDED_) +#define AFX_MoniWnd_H__58975303_DC58_11D1_A883_00C04FCCA334__INCLUDED_ + +#if _MSC_VER >= 1000 +#pragma once +#endif // _MSC_VER >= 1000 +// MoniWnd.h : header file +// + +///////////////////////////////////////////////////////////////////////////// +// CMoniWnd window + +class CMoniWnd : public CWnd +{ +// Construction +public: + CMoniWnd(); + +// Data +public: + CWnd *m_mainWnd; + int m_iCount; +// Attributes +public: + +// Operations +public: + +// Overrides + // ClassWizard generated virtual function overrides + //{{AFX_VIRTUAL(CMoniWnd) + //}}AFX_VIRTUAL + +// Implementation +public: + virtual ~CMoniWnd(); + + // Generated message map functions +protected: + //{{AFX_MSG(CMoniWnd) + afx_msg void OnPaint(); + afx_msg void OnDestroy(); + //}}AFX_MSG + DECLARE_MESSAGE_MAP() +public: + int MyCreate(CWnd* pWnd); +public: + afx_msg void OnTimer(UINT_PTR nIDEvent); +}; + +///////////////////////////////////////////////////////////////////////////// + +//{{AFX_INSERT_LOCATION}} +// Microsoft Developer Studio will insert additional declarations immediately before the previous line. + +#endif // !defined(AFX_MoniWnd_H__58975303_DC58_11D1_A883_00C04FCCA334__INCLUDED_) Added: freeswitch/trunk/gtalkphone/res/Toolbar.bmp ============================================================================== Binary file. No diff available. Added: freeswitch/trunk/gtalkphone/res/gtalkphone.ico ============================================================================== Binary file. No diff available. Added: freeswitch/trunk/gtalkphone/res/gtalkphone.rc2 ============================================================================== --- (empty file) +++ freeswitch/trunk/gtalkphone/res/gtalkphone.rc2 Wed Aug 30 11:21:42 2006 @@ -0,0 +1,13 @@ +// +// gtalkphone.RC2 - resources Microsoft Visual C++ does not edit directly +// + +#ifdef APSTUDIO_INVOKED + #error this file is not editable by Microsoft Visual C++ +#endif //APSTUDIO_INVOKED + + +///////////////////////////////////////////////////////////////////////////// +// Add manually edited resources here... + +///////////////////////////////////////////////////////////////////////////// Added: freeswitch/trunk/gtalkphone/res/gtalkphoneDoc.ico ============================================================================== Binary file. No diff available. Added: freeswitch/trunk/gtalkphone/resource.h ============================================================================== --- (empty file) +++ freeswitch/trunk/gtalkphone/resource.h Wed Aug 30 11:21:42 2006 @@ -0,0 +1,41 @@ +//{{NO_DEPENDENCIES}} +// Microsoft Visual C++ generated include file. +// Used by gtalkphone.rc +// +#define IDI_ICON2 4 +#define IDM_ABOUTBOX 0x0010 +#define IDD_ABOUTBOX 100 +#define IDS_ABOUTBOX 101 +#define IDR_HTML_SETTINGSDLG 103 +#define IDR_HTML_gtalkphone_DIALOG 104 +#define IDR_MAINFRAME 128 +#define IDD_GEPHONE2_DIALOG 128 +#define IDD_DIALOG1 129 +#define IDD_DLGJABBERNETWORK 129 +#define IDD_gtalkphone_DIALOG 131 +#define IDD_SETTINGDLG 133 +#define IDR_MENU1 136 +#define IDR_POPMENU 136 +#define IDI_ICON1 139 +#define IDC_SLIDER1 1000 +#define IDC_TABJAB 1000 +#define IDC_SLIDERSPEAKER 1000 +#define IDC_SLIDER2 1001 +#define IDC_BTOK 1001 +#define IDC_SLIDERMIC 1001 +#define IDC_BTCANCEL 1002 +#define IDC_SLIDER3 1004 +#define IDC_OUTPUTSLIDER 1004 +#define IDC_INPUTSLIDER 1005 + +// Next default values for new objects +// +#ifdef APSTUDIO_INVOKED +#ifndef APSTUDIO_READONLY_SYMBOLS +#define _APS_3D_CONTROLS 1 +#define _APS_NEXT_RESOURCE_VALUE 141 +#define _APS_NEXT_COMMAND_VALUE 32788 +#define _APS_NEXT_CONTROL_VALUE 1006 +#define _APS_NEXT_SYMED_VALUE 104 +#endif +#endif Added: freeswitch/trunk/gtalkphone/skin/google/.DS_Store ============================================================================== Binary file. No diff available. Added: freeswitch/trunk/gtalkphone/skin/google/Buttons.bmp ============================================================================== Binary file. No diff available. Added: freeswitch/trunk/gtalkphone/skin/google/Checkbox.bmp ============================================================================== Binary file. No diff available. Added: freeswitch/trunk/gtalkphone/skin/google/Radio.bmp ============================================================================== Binary file. No diff available. Added: freeswitch/trunk/gtalkphone/skin/google/Thumbs.db ============================================================================== Binary file. No diff available. Added: freeswitch/trunk/gtalkphone/skin/google/bottom.bmp ============================================================================== Binary file. No diff available. Added: freeswitch/trunk/gtalkphone/skin/google/close.bmp ============================================================================== Binary file. No diff available. Added: freeswitch/trunk/gtalkphone/skin/google/css/boxsizing.htc ============================================================================== --- (empty file) +++ freeswitch/trunk/gtalkphone/skin/google/css/boxsizing.htc Wed Aug 30 11:21:42 2006 @@ -0,0 +1,157 @@ +<component lightWeight="true"> +<attach event="onpropertychange" onevent="checkPropertyChange()" /> +<attach event="ondetach" onevent="restore()" /> +<script> +//<![CDATA[ + +var doc = element.document; + +function init() { + updateBorderBoxWidth(); + updateBorderBoxHeight(); +} + +function restore() { + element.runtimeStyle.width = ""; + element.runtimeStyle.height = ""; +} + +/* border width getters */ +function getBorderWidth(sSide) { + if (element.currentStyle["border" + sSide + "Style"] == "none") + return 0; + var n = parseInt(element.currentStyle["border" + sSide + "Width"]); + return n || 0; +} + +function getBorderLeftWidth() { return getBorderWidth("Left"); } +function getBorderRightWidth() { return getBorderWidth("Right"); } +function getBorderTopWidth() { return getBorderWidth("Top"); } +function getBorderBottomWidth() { return getBorderWidth("Bottom"); } +/* end border width getters */ + +/* padding getters */ +function getPadding(sSide) { + var n = parseInt(element.currentStyle["padding" + sSide]); + return n || 0; +} + +function getPaddingLeft() { return getPadding("Left"); } +function getPaddingRight() { return getPadding("Right"); } +function getPaddingTop() { return getPadding("Top"); } +function getPaddingBottom() { return getPadding("Bottom"); } +/* end padding getters */ + +function getBoxSizing() { + var s = element.style; + var cs = element.currentStyle + + if (typeof s.boxSizing != "undefined" && s.boxSizing != "") + return s.boxSizing; + if (typeof s["box-sizing"] != "undefined" && s["box-sizing"] != "") + return s["box-sizing"]; + if (typeof cs.boxSizing != "undefined" && cs.boxSizing != "") + return cs.boxSizing; + if (typeof cs["box-sizing"] != "undefined" && cs["box-sizing"] != "") + return cs["box-sizing"]; + return getDocumentBoxSizing(); +} + +function getDocumentBoxSizing() { + if (doc.compatMode == null || doc.compatMode == "BackCompat") + return "border-box"; + return "content-box" +} + +/* width and height setters */ +function setBorderBoxWidth(n) { + element.runtimeStyle.width = Math.max(0, n - getBorderLeftWidth() - + getPaddingLeft() - getPaddingRight() - getBorderRightWidth()) + "px"; +} + +function setBorderBoxHeight(n) { + element.runtimeStyle.height = Math.max(0, n - getBorderTopWidth() - + getPaddingTop() - getPaddingBottom() - getBorderBottomWidth()) + "px"; +} + +function setContentBoxWidth(n) { + element.runtimeStyle.width = Math.max(0, n + getBorderLeftWidth() + + getPaddingLeft() + getPaddingRight() + getBorderRightWidth()) + "px"; +} + +function setContentBoxHeight(n) { + element.runtimeStyle.height = Math.max(0, n + getBorderTopWidth() + + getPaddingTop() + getPaddingBottom() + getBorderBottomWidth()) + "px"; +} +/* end width and height setters */ + +function updateBorderBoxWidth() { + element.runtimeStyle.width = ""; + if (getDocumentBoxSizing() == getBoxSizing()) + return; + var csw = element.currentStyle.width; + if (csw != "auto" && csw.indexOf("px") != -1) { + if (getBoxSizing() == "border-box") + setBorderBoxWidth(parseInt(csw)); + else + setContentBoxWidth(parseInt(csw)); + } +} + +function updateBorderBoxHeight() { + element.runtimeStyle.height = ""; + if (getDocumentBoxSizing() == getBoxSizing()) + return; + var csh = element.currentStyle.height; + if (csh != "auto" && csh.indexOf("px") != -1) { + if (getBoxSizing() == "border-box") + setBorderBoxHeight(parseInt(csh)); + else + setContentBoxHeight(parseInt(csh)); + } +} + +function checkPropertyChange() { + var pn = event.propertyName; + var undef; + + if (pn == "style.boxSizing" && element.style.boxSizing == "") { + element.style.removeAttribute("boxSizing"); + element.runtimeStyle.boxSizing = undef; + } + + + switch (pn) { + case "style.width": + case "style.borderLeftWidth": + case "style.borderLeftStyle": + case "style.borderRightWidth": + case "style.borderRightStyle": + case "style.paddingLeft": + case "style.paddingRight": + updateBorderBoxWidth(); + break; + + case "style.height": + case "style.borderTopWidth": + case "style.borderTopStyle": + case "style.borderBottomWidth": + case "style.borderBottomStyle": + case "style.paddingTop": + case "style.paddingBottom": + updateBorderBoxHeight(); + break; + + case "className": + case "style.boxSizing": + updateBorderBoxWidth(); + updateBorderBoxHeight(); + break; + } +} + +init(); + +//]]> +</script> +</component> \ No newline at end of file Added: freeswitch/trunk/gtalkphone/skin/google/css/gtalkphone.css ============================================================================== Added: freeswitch/trunk/gtalkphone/skin/google/css/gtalkphone/Thumbs.db ============================================================================== Binary file. No diff available. Added: freeswitch/trunk/gtalkphone/skin/google/css/gtalkphone/gtalkphone.css ============================================================================== --- (empty file) +++ freeswitch/trunk/gtalkphone/skin/google/css/gtalkphone/gtalkphone.css Wed Aug 30 11:21:42 2006 @@ -0,0 +1,80 @@ +/* + back: rgb(230,230,230) + dark: rgb(90,97,90) + medium rgb(189,190,189) + */ + +.dynamic-slider-control { + position: relative; + background-color: rgb(255,255,255); + -moz-user-focus: normal; + -moz-user-select: none; + cursor: default; +} + +.horizontal { + width: 66px; + height: 27px; +} + +.vertical { + width: 29px; + height: 200px; +} + +.dynamic-slider-control input { + display: none; +} + +.dynamic-slider-control .handle { + position: absolute; + font-size: 0px; + overflow: hidden; + -moz-user-select: none; + cursor: default; +} + +.dynamic-slider-control.horizontal .handle { + width: 11px; + height: 11px; + background-image: url("handle.horizontal.bmp"); +} + +.dynamic-slider-control.horizontal .handle div {} +.dynamic-slider-control.horizontal .handle.hover {} + +.dynamic-slider-control.vertical .handle { + width: 15px; + height: 31px; + background-image: url("handle.vertical.png"); +} + +.dynamic-slider-control.vertical .handle.hover {} + +.dynamic-slider-control .line { + position: absolute; + font-size: 0.01mm; + overflow: hidden; + border: 0px solid rgb(90,97,90); + background: rgb(104,104,104); + + behavior: url("css/boxsizing.htc"); /* ie path bug */ + box-sizing: content-box; + -moz-box-sizing: content-box; +} +.dynamic-slider-control.vertical .line { + width: 3px; +} + +.dynamic-slider-control.horizontal .line { + height: 2px; +} + +.dynamic-slider-control .line div { + width: 0px; + height: 0px; + + border: 0px solid; + border-color: rgb(230,230,230) rgb(189,190,189) + rgb(189,190,189) rgb(230,230,230); +} \ No newline at end of file Added: freeswitch/trunk/gtalkphone/skin/google/css/gtalkphone/handl2e.horizontal.bmp ============================================================================== Binary file. No diff available. Added: freeswitch/trunk/gtalkphone/skin/google/css/gtalkphone/handle.horizontal.bmp ============================================================================== Binary file. No diff available. Added: freeswitch/trunk/gtalkphone/skin/google/css/winclassic.css ============================================================================== --- (empty file) +++ freeswitch/trunk/gtalkphone/skin/google/css/winclassic.css Wed Aug 30 11:21:42 2006 @@ -0,0 +1,99 @@ +.dynamic-slider-control { + position: relative; + background-color: ThreeDFace; + -moz-user-focus: normal; + -moz-user-select: none; + cursor: default; +} + +.horizontal { + width: 200px; + height: 29px; +} + +.vertical { + width: 29px; + height: 200px; +} + +.dynamic-slider-control input { + display: none; +} + +.dynamic-slider-control .handle { + position: absolute; + -moz-user-select: none; + cursor: default; + background: ThreeDFace; + border: 1px solid; + border-color: ThreeDHighlight ThreeDDarkShadow + ThreeDDarkShadow ThreeDHighlight; +} + +/* inner border */ +.dynamic-slider-control .handle div { + font-size: 1px; + border: 1px solid; + border-color: ThreeDLightShadow ThreeDShadow + ThreeDShadow ThreeDLightShadow; + + behavior: url("css/boxsizing.htc"); /* ie path bug */ + box-sizing: content-box; + -moz-box-sizing: content-box; +} + +/* inner sets size +.dynamic-slider-control.horizontal .handle { + width: 12px; + height: 22px; +} +*/ + +.dynamic-slider-control.horizontal .handle div { + width: 8px; + height: 18px; +} + +.dynamic-slider-control.horizontal .handle.hover {} + +/* inner sets size +.dynamic-slider-control.vertical .handle { + width: 22px; + height: 12px; +} +*/ + +.dynamic-slider-control.vertical .handle div { + width: 18px; + height: 8px; +} + +.dynamic-slider-control.vertical .handle.hover {} + +.dynamic-slider-control .line { + + behavior: url("css/boxsizing.htc"); /* ie path bug */ + box-sizing: content-box; + -moz-box-sizing: content-box; + + position: absolute; + font-size: 0.01mm; + overflow: hidden; + border: 1px solid; + border-color: ThreeDShadow ThreeDHighlight + ThreeDHighlight ThreeDShadow; + background: ThreeDDarkShadow; +} + +.dynamic-slider-control.vertical .line { + width: 1px; + +} + +.dynamic-slider-control.horizontal .line { + height: 1px; +} + +.dynamic-slider-control .line div { + display: none; +} \ No newline at end of file Added: freeswitch/trunk/gtalkphone/skin/google/gtalkphone.htm ============================================================================== --- (empty file) +++ freeswitch/trunk/gtalkphone/skin/google/gtalkphone.htm Wed Aug 30 11:21:42 2006 @@ -0,0 +1,276 @@ +<HTML> +<HEAD> +<!--script type="text/javascript" src="js/range.js"></script> +<script type="text/javascript" src="js/timer.js"></script> +<script type="text/javascript" src="js/slider.js"></script> +<link type="text/css" rel="StyleSheet" href="css/gtalkphone/gtalkphone.css" /--> +</HEAD> + +<BODY ID=Cgephone2Dlg BGCOLOR=white link="#000066" alink="#000066" vlink="#000066" > +<!--script language=Javascript> + +<!-- + +var message=""; + +/////////////////////////////////// + +function clickIE() {if (document.all) {(message);return false;}} + +function clickNS(e) {if + +(document.layers||(document.getElementById&&!document.all)) { + +if (e.which==2||e.which==3) {(message);return false;}}} + +if (document.layers) + +{document.captureEvents(Event.MOUSEDOWN);document.onmousedown=clickNS;} + +else{document.onmouseup=clickNS;document.oncontextmenu=clickIE;} + +document.oncontextmenu=new Function("return false") + +// > + + + +</script--> + + <table border="0" cellpadding="2" cellspacing="2" style="left: 0px; width: 100%; + position: static; top: 0px; height: 100%; z-index: 0;"> + <tr> + <td style="width: 684px; height: 155px"> + </td> + </tr> + <tr> + <td valign="top" style="font-size: 12px; line-height: 5pt; font-family: Arial; width: 684px;"> + + GtalkPhone Login:<br /> + <br /> + <br /> + + <input id="txtAccount" style="width: 80%; height: 23px; " + type="text" /><br /><br /><br /> + Password:<br /><br /><br /> + + <input id="txtPwd" style="width: 80%; height: 23px; " + type="password" /><br /><br /><br /> + <input id="cbRem" style="border-right: silver thin; border-top: silver thin; + border-left: silver thin; border-bottom: silver thin; width: 13px; height: 15px;" type="checkbox" checked="CHECKED" />Remember Password<br /> + <br /> + <br /> + <br /> + + + <button id="btSign" style="width: 50%; height: 45px; border-top-style: none; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none;"><img src="./res/signin.gif" style="width:100%;cursor: hand" alt=""></button> <br /> + <br /> + <br /> + + <a href="http://www.gtalkphone.com" target=_blank >SignUp for GtalkPhone</a> + + <div id="dialpanel" style="left: 9px; width: 100%; position: absolute; top: 167px; height: 104%; background-color: white; z-index: 10; visibility: hidden;" > + + +<table id="Table_01" border="0" cellpadding="0" cellspacing="0" style="left: 10%; width: 173px; position: relative; top: 0%; height: 227px"> + <tr> + <td colspan="7"> + </td> + </tr> + <tr> + <td rowspan="8"> + <img src="./res/numpad_big_cropped_02.gif" width="12" height="228" alt=""></td> + <td> + <button id="bt1" style="width: 45px; height: 45px; border-top-style: none; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none;" > + <img src="./res/numpad_big_cropped_03.gif" width="45" height="45" alt=""></button></td> + <td rowspan="8"> + <img src="./res/numpad_big_cropped_04.gif" width="12" height="228" alt=""></td> + <td> + <button id="bt2" style="width: 44px; height: 45px; border-top-style: none; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none;" > + <img src="./res/numpad_big_cropped_05.gif" width="44" height="45" alt=""></button></td> + <td rowspan="8"> + <img src="./res/numpad_big_cropped_06.gif" width="12" height="228" alt=""></td> + <td> + <button id="bt3" style="width: 44px; height: 45px; border-top-style: none; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none;" > + <img src="./res/numpad_big_cropped_07.gif" width="44" height="45" alt=""></button></td> + <td rowspan="8" style="width: 20px"> + <img src="./res/numpad_big_cropped_08.gif" width="19" height="228" alt=""></td> + </tr> + <tr> + <td> + <img src="./res/numpad_big_cropped_09.gif" width="45" height="11" alt=""></td> + <td> + <img src="./res/numpad_big_cropped_10.gif" width="44" height="11" alt=""></td> + <td> + <img src="./res/numpad_big_cropped_11.gif" width="44" height="11" alt=""></td> + </tr> + <tr> + <td> + <button id="bt4" style="width: 45px; height: 45px; border-top-style: none; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none;" > + <img src="./res/numpad_big_cropped_12.gif" width="45" height="45" alt=""></button></td> + <td> + <button id="bt5" style="width: 44px; height: 45px; border-top-style: none; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none;" > + <img src="./res/numpad_big_cropped_13.gif" width="44" height="45" alt=""></button></td> + <td> + <button id="bt6" style="width: 44px; height: 45px; border-top-style: none; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none;" > + <img src="./res/numpad_big_cropped_14.gif" width="44" height="45" alt=""></button></td> + </tr> + <tr> + <td> + <img src="./res/numpad_big_cropped_15.gif" width="45" height="10" alt=""></td> + <td> + <img src="./res/numpad_big_cropped_16.gif" width="44" height="10" alt=""></td> + <td> + <img src="./res/numpad_big_cropped_17.gif" width="44" height="10" alt=""></td> + </tr> + <tr> + <td> + <button id="bt7" style="width: 45px; height: 45px; border-top-style: none; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none;" > + <img src="./res/numpad_big_cropped_18.gif" width="45" height="45" alt=""></button></td> + <td> + <button id="bt8" style="width: 44px; height: 45px; border-top-style: none; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none;" > + <img src="./res/numpad_big_cropped_19.gif" width="44" height="45" alt=""></button></td> + <td> + <button id="bt9" style="width: 44px; height: 45px; border-top-style: none; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none;" > + <img src="./res/numpad_big_cropped_20.gif" width="44" height="45" alt=""></button></td> + </tr> + <tr> + <td> + <img src="./res/numpad_big_cropped_21.gif" width="45" height="10" alt=""></td> + <td> + <img src="./res/numpad_big_cropped_22.gif" width="44" height="10" alt=""></td> + <td> + <img src="./res/numpad_big_cropped_23.gif" width="44" height="10" alt=""></td> + </tr> + <tr> + <td> + <button id="btStar" style="width: 45px; height: 45px; border-top-style: none; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none;" > + <img src="./res/numpad_big_cropped_24.gif" width="45" height="45" alt=""></button></td> + <td> + <button id="bt0" style="width: 44px; height: 45px; border-top-style: none; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none;" ><img src="./res/numpad_big_cropped_25.gif" width="44" height="45" alt=""></button></td> + <td> + <button id="btSharp" style="width: 44px; height: 45px; border-top-style: none; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none;" ><img src="./res/numpad_big_cropped_26.gif" width="44" height="45" alt=""></button></td> + </tr> + <tr> + <td> + <img src="./res/numpad_big_cropped_27.gif" width="45" height="17" alt=""></td> + <td> + <img src="./res/numpad_big_cropped_28.gif" width="44" height="17" alt=""></td> + <td> + <img src="./res/numpad_big_cropped_29.gif" width="44" height="17" alt=""></td> + </tr> +</table><br><br> + <table border=0 cellpadding=0 cellspacing=0 width=100%><Tr><td align=left><p id="status" style="font-size: 12px; color: #ff6600; font-family: Arial"> + Offline</td><td align=right style="font-size: 12px; font-family: Arial"><a href="" id="btSignout">Sign out</a></td></tr></table> + <br /> + <br /> + </td> + </tr> + </table> + <div style="left: 5px; width: 103%; position: absolute; top: 3px; height: 20px"> +<table border=0 cellpadding=0 cellspacing=0 width=100%> +<tr> +<td width=150 valign=top><img src="./res/gtalkphone_logo.gif"></td><td width=300 valign=top> + <p style="font-size: 12px; font-family: Arial" align=right><a href="" id="setting">Settings</a> | <a href="http://www.gtalkphone.com" target=_blank >Help</a> + + <p id="message" style="font-size: 12px; font-family: Arial"> + Idle </p> +</td></tr></table> + </div> + <div style="left: 5px; width: 100%; position: absolute; top: 47px; height: 60px"> + <table border="0" cellpadding="0" cellspacing="0" style="width: 100%"> + <tr> + <td style="width: 60%; height: 45px;" valign="bottom"> + <p id="Balance" style="font-size: 12px; font-family: Arial" > + Balance: </p> + </td> + <td style="width: 20%; height: 45px;" align="right" valign="bottom"></td> + <td style="width: 20%; height: 45px;" align="right" valign="bottom"> + <button id="btDial" style="border-top-style: none; border-right-style: none; border-left-style: none; background-color: transparent; border-bottom-style: none" disabled="disabled"><img src="./res/btDial_disable.gif" height="21" width="21" style="cursor: hand" id="img_dial" /></button> + <button id="btHup" style="border-top-style: none; border-right-style: none; border-left-style: none; background-color: transparent; border-bottom-style: none" disabled="disabled"><img src="./res/btHold_disable.gif" height="21" width="21" style="cursor: hand" id="img_hold" /></button> + + <button id="btCallBack" style="border-top-style: none; border-right-style: none; border-left-style: none; background-color: transparent; border-bottom-style: none" disabled="disabled"><img src="./res/btReDial_disable.gif" height="21" width="21" style="cursor: hand" id="img_redial" /></button></td> + </tr> + <tr> + <td colspan="3" style="height: 30px; width: 95%; "> + + <div style="width: 104%; border-right: #a3a3a3 1px solid; border-top: #a3a3a3 1px solid; border-left: #a3a3a3 1px solid; border-bottom: #a3a3a3 1px solid; left: 1px; position: absolute; top: 50px; height: 1px;"> + <table style="width: 100%; height: 18px; left: 2px; top: 2px;" border="0" cellpadding="0" cellspacing="0"> + <tr class="dailnum"> + <td style="width: 17px; height: 18px;"> + <button style="border-top-style: none; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none;height: 18px;"><img src="./res/fangdajing.gif" height="15" width="15" /></button></td> + <td style="height: 18px"> + <input id="dailnum" style="font-size: 12px; font-family: Arial; width: 100%; border-top-style: none; border-right-style: none; border-left-style: none; border-bottom-style: none; height: 18px;" maxlength="50" class="dailnum" disabled="disabled"/> + </td> + <td style="width: 17px; height: 18px;" align="right"> + <button style="border-top-style: none; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none;height: 18px;" id="backspace"><img src="./res/cha.gif" height="11" width="12" style="visibility: hidden" id="imgbackspace" /></button> + </td> + + + </tr> + </table> + + </div> + </td> + </tr> + <tr> + <td style="width: 60%; height: 24px;" align="right" valign="middle"> + <table border="0" cellpadding="0" cellspacing="0" style="width: 100%; height: 27px;"> + <tr> + <td align="right" valign="middle" style="width: 183px; height: 38px;" class="range_mic"> + <hr style="width: 61px; position: absolute; top: 93px; background-color: #686868; left: 35px;" id="hr_mic" class="hr_mic" /> + <img src="./css/gtalkphone/handle.horizontal.bmp" style="position: absolute; top: 88px; left: 63px;" class="handl_mic" id="handl_mic" /> + </td> +<td align="left" valign="middle" style="width: 25px; height: 38px;" > + <img src="./res/mic.gif" height="34" width="24" style="left: 91px; position: absolute; top: 75px" /> + </td> + </tr> + </table> + </td> + <td colspan="2"style="width: 40%; height: 24px;" align="right" valign="middle"> + + <table border="0" cellpadding="0" cellspacing="0" style="width: 100%"> + <tr> + <td align="right" valign="middle" style="width: 104px" class="range_speeker"> + + <hr style="width: 61px; position: absolute; top: 93px; background-color: #686868; left: 141px;" id="hr_speeker" class="hr_speeker" /> + <img src="./css/gtalkphone/handle.horizontal.bmp" style="position: absolute; top: 88px; left: 165px;" class="handl_speeker" id="handl_speeker" /> + <!--div id="slider-2" > + <!--input id="slider-input-2"/> + </div> +<script type="text/javascript"> +var s = new Slider(document.getElementById("slider-1"), document.getElementById("slider-input-1"),"horizontal"); +var s2 = new Slider(document.getElementById("slider-2"), document.getElementById("slider-input-2"),"horizontal"); +s.setValue(50); +s2.setValue(50); +s.onchange = function () { + window.external.SetMicPos(s.getValue()); + //document.getElementById("h-min").value = s.getMinimum(); + //document.getElementById("h-max").value = s.getMaximum(); +}; +s2.onchange = function () { + window.external.SetSoundPos(s2.getValue()); + //document.getElementById("h-min").value = s.getMinimum(); + //document.getElementById("h-max").value = s.getMaximum(); +}; +window.onresize = function () { + s.recalculate(); + s2.recalculate(); +}; +</script--> +</td> +<td align="left" valign="middle"> + <img src="./res/speeker.gif" height="34" width="31" style="left: 198px; position: absolute; top: 74px" /> + </td> + </tr> + </table></td> + </tr> + </table> + <hr style="height: 2px; border-top-width: 3px; border-left-width: 3px; border-left-color: #969696; left: 0px; border-bottom-width: 3px; border-bottom-color: #969696; width: 103%; border-top-color: #969696; position: absolute; top: 105px; background-color: #757575; border-right-width: 3px; border-right-color: #969696;" /> + </div> + + + + +</BODY> +</HTML> Added: freeswitch/trunk/gtalkphone/skin/google/gtalkphone.htm.2 ============================================================================== --- (empty file) +++ freeswitch/trunk/gtalkphone/skin/google/gtalkphone.htm.2 Wed Aug 30 11:21:42 2006 @@ -0,0 +1,289 @@ +<HTML> +<HEAD> +<!--script type="text/javascript" src="js/range.js"></script> +<script type="text/javascript" src="js/timer.js"></script> +<script type="text/javascript" src="js/slider.js"></script> +<link type="text/css" rel="StyleSheet" href="css/gtalkphone/gtalkphone.css" /--> +</HEAD> + +<BODY ID=Cgephone2Dlg BGCOLOR=white link="#000066" > +<!--script language=Javascript> + +<!-- + +var message=""; + +/////////////////////////////////// + +function clickIE() {if (document.all) {(message);return false;}} + +function clickNS(e) {if + +(document.layers||(document.getElementById&&!document.all)) { + +if (e.which==2||e.which==3) {(message);return false;}}} + +if (document.layers) + +{document.captureEvents(Event.MOUSEDOWN);document.onmousedown=clickNS;} + +else{document.onmouseup=clickNS;document.oncontextmenu=clickIE;} + +document.oncontextmenu=new Function("return false") + +// > + + + +</script--> + + <table border="0" cellpadding="2" cellspacing="2" style="left: 0px; width: 100%; + position: static; top: 0px; height: 100%; z-index: 0;"> + <tr> + <td style="width: 684px; height: 155px"> + </td> + </tr> + <tr> + <td valign="top" style="font-size: 12px; line-height: 5pt; font-family: Arial; width: 684px;"> + + GtalkPhone Login:<br /> + <br /> + <br /> + + <input id="txtAccount" style="width: 80%; height: 23px; " + type="text" /><br /><br /><br /> + Password:<br /><br /><br /> + + <input id="txtPwd" style="width: 80%; height: 23px; " + type="password" /><br /><br /><br /> + <input id="cbRem" style="border-right: silver thin; border-top: silver thin; + border-left: silver thin; border-bottom: silver thin; width: 13px; height: 15px;" type="checkbox" checked="CHECKED" />Remember Password<br /> + <br /> + <br /> + <br /> + + + <input id="btSign" style="width: 50%; " type="image" src="./res/signin.gif" value="Sign In" /><br /> + <br /> + <br /> + + <a href="http://www.gtalkphone.com" target=_blank >SignUp for GtalkPhone</a> + + <div id="dialpanel" style="left: 9px; width: 100%; position: absolute; top: 167px; height: 104%; background-color: white; z-index: 10; visibility: hidden;" > + + +<table id="Table_01" border="0" cellpadding="0" cellspacing="0" style="left: 10%; width: 173px; position: relative; top: 0%; height: 227px"> + <tr> + <td colspan="7"> + </td> + </tr> + <tr> + <td rowspan="8"> + <img src="./res/numpad_big_cropped_02.gif" width="12" height="228" alt=""></td> + <td> + <BUTTON id="bt1" style="width: 45px; height: 45px; border-top-style: none; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none;" > + <img src="./res/numpad_big_cropped_03.gif" width="45" height="45" alt=""> + </BUTTON></td> + <td rowspan="8"> + <img src="./res/numpad_big_cropped_04.gif" width="12" height="228" alt=""></td> + <td> + <BUTTON id="bt2" style="width: 44px; height: 45px; border-top-style: none; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none;" > + <img src="./res/numpad_big_cropped_05.gif" width="44" height="45" alt=""> + </BUTTON></td> + <td rowspan="8"> + <img src="./res/numpad_big_cropped_06.gif" width="12" height="228" alt=""></td> + <td> + <BUTTON id="bt3" style="width: 44px; height: 45px; border-top-style: none; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none;" > + <img src="./res/numpad_big_cropped_07.gif" width="44" height="45" alt=""> + </BUTTON></td> + <td rowspan="8" style="width: 20px"> + <img src="./res/numpad_big_cropped_08.gif" width="19" height="228" alt=""></td> + </tr> + <tr> + <td> + <img src="./res/numpad_big_cropped_09.gif" width="45" height="11" alt=""></td> + <td> + <img src="./res/numpad_big_cropped_10.gif" width="44" height="11" alt=""></td> + <td> + <img src="./res/numpad_big_cropped_11.gif" width="44" height="11" alt=""></td> + </tr> + <tr> + <td> + <BUTTON id="bt4" style="width: 45px; height: 45px; border-top-style: none; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none;" > + <img src="./res/numpad_big_cropped_12.gif" width="45" height="45" alt=""> + </BUTTON></td> + <td> + <BUTTON id="bt5" style="width: 44px; height: 45px; border-top-style: none; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none;" > + <img src="./res/numpad_big_cropped_13.gif" width="44" height="45" alt=""> + </BUTTON></td> + <td> + <BUTTON id="bt6" style="width: 44px; height: 45px; border-top-style: none; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none;" > + <img src="./res/numpad_big_cropped_14.gif" width="44" height="45" alt=""> + </BUTTON></td> + </tr> + <tr> + <td> + <img src="./res/numpad_big_cropped_15.gif" width="45" height="10" alt=""></td> + <td> + <img src="./res/numpad_big_cropped_16.gif" width="44" height="10" alt=""></td> + <td> + <img src="./res/numpad_big_cropped_17.gif" width="44" height="10" alt=""></td> + </tr> + <tr> + <td> + <BUTTON id="bt7" style="width: 45px; height: 45px; border-top-style: none; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none;" > + <img src="./res/numpad_big_cropped_18.gif" width="45" height="45" alt=""> + </BUTTON></td> + <td> + <BUTTON id="bt8" style="width: 44px; height: 45px; border-top-style: none; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none;" > + <img src="./res/numpad_big_cropped_19.gif" width="44" height="45" alt=""> + </BUTTON></td> + <td> + <BUTTON id="bt9" style="width: 44px; height: 45px; border-top-style: none; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none;" > + <img src="./res/numpad_big_cropped_20.gif" width="44" height="45" alt=""> + </BUTTON></td> + </tr> + <tr> + <td> + <img src="./res/numpad_big_cropped_21.gif" width="45" height="10" alt=""></td> + <td> + <img src="./res/numpad_big_cropped_22.gif" width="44" height="10" alt=""></td> + <td> + <img src="./res/numpad_big_cropped_23.gif" width="44" height="10" alt=""></td> + </tr> + <tr> + <td> + <BUTTON id="btStar" style="width: 45px; height: 45px; border-top-style: none; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none;" > + <img src="./res/numpad_big_cropped_24.gif" width="45" height="45" alt=""></BUTTON></td> + <td> + <BUTTON id="bt0" style="width: 44px; height: 45px; border-top-style: none; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none;" ><img src="./res/numpad_big_cropped_25.gif" width="44" height="45" alt=""></BUTTON></td> + <td> + <BUTTON id="btSharp" style="width: 44px; height: 45px; border-top-style: none; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none;" ><img src="./res/numpad_big_cropped_26.gif" width="44" height="45" alt=""></BUTTON></td> + </tr> + <tr> + <td> + <img src="./res/numpad_big_cropped_27.gif" width="45" height="17" alt=""></td> + <td> + <img src="./res/numpad_big_cropped_28.gif" width="44" height="17" alt=""></td> + <td> + <img src="./res/numpad_big_cropped_29.gif" width="44" height="17" alt=""></td> + </tr> +</table><br><br> + <table border=0 cellpadding=0 cellspacing=0 width=100%><Tr><td align=left><p id="status" style="font-size: 12px; color: #ff6600; font-family: Arial"> + Offline</td><td align=right style="font-size: 12px; font-family: Arial"><a href="." target="_blank">Sign Out</a></td></tr></table> + <br /> + <br /> + </td> + </tr> + </table> + <div style="left: 5px; width: 103%; position: absolute; top: 3px; height: 20px"> + <p style="font-size: 12px; font-family: Arial" align=right><a href="" id="setting">Settings</a> | <a href="http://www.gtalkphone.com" target=_blank >Help</a> + <img src="./res/gtalkphone_logo.gif" align=left> + <table style="width: 100%" border="0" cellpadding="0" cellspacing="0"> + <tr> + <td style="font-size: x-small; font-family: Arial; height: 21px; width: 55%;" align="left" valign="middle" > + <p id="message" style="font-size: 12px; font-family: Arial"> + Idle </p> + </td> + <td style="font-size: 12px; font-family: Arial; width: 45%; height: 21px;" align="right" colspan="" rowspan="" valign="top"> + <br /> + </td> + + </tr> + </table> + </div> + <div style="left: 5px; width: 100%; position: absolute; top: 47px; height: 60px"> + <table border="0" cellpadding="0" cellspacing="0" style="width: 100%"> + <tr> + <td style="width: 60%; height: 45px;" valign="bottom"> + <p id="Balance" style="font-size: 12px; font-family: Arial" > + Balance: </p> + </td> + <td style="width: 20%; height: 45px;" align="right" valign="bottom"></td> + <td style="width: 20%; height: 45px;" align="right" valign="bottom"> + <BUTTON id="btDial" style="border-top-style: none; border-right-style: none; border-left-style: none; background-color: transparent; border-bottom-style: none" disabled="disabled"><img src="./res/btDial_disable.gif" height="21" width="21" style="cursor: hand" id="img_dial" /></BUTTON> + <BUTTON id="btHup" style="border-top-style: none; border-right-style: none; border-left-style: none; background-color: transparent; border-bottom-style: none" disabled="disabled"><img src="./res/btHold_disable.gif" height="21" width="21" style="cursor: hand" id="img_hold" /></BUTTON> + + <BUTTON id="btCallBack" style="border-top-style: none; border-right-style: none; border-left-style: none; background-color: transparent; border-bottom-style: none" disabled="disabled"><img src="./res/btReDial_disable.gif" height="21" width="21" style="cursor: hand" id="img_redial" /></BUTTON></td> + </tr> + <tr> + <td colspan="3" style="height: 30px; width: 95%; "> + + <div style="height: 23px; width: 104%; border-right: #a3a3a3 1px solid; border-top: #a3a3a3 1px solid; border-left: #a3a3a3 1px solid; border-bottom: #a3a3a3 1px solid; left: 1px; position: absolute; top: 50px;"> + <table style="width: 100%; height: 22px; left: 2px; top: 2px;" border="0" cellpadding="0" cellspacing="0"> + <tr> + <td style="width: 32px; height: 23px; font-size: 10pt; font-family: Arial;"> + <BUTTON style="border-top-style: none; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"><img src="./res/fangdajing.gif" height="15" width="15" /></BUTTON></td> + <td style="height: 23px"> + <input id="dailnum" style="font-size: 12px; font-family: Arial; width: 100%; border-top-style: none; border-right-style: none; border-left-style: none; border-bottom-style: none;" maxlength="50"/> + </td> + <td style="width: 7%; height: 23px;" align="right"> + <BUTTON style="border-top-style: none; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none; width: 100%; height: 100%;" id="backspace"><img src="./res/cha.gif" height="11" width="11" /></BUTTON> + </td> + </tr> + </table> + + </div> + </td> + </tr> + <tr> + <td style="width: 60%; height: 24px;" align="right" valign="middle"> + <table border="0" cellpadding="0" cellspacing="0" style="width: 100%; height: 27px;"> + <tr> + <td align="right" valign="middle" style="width: 183px" class="range_mic"> + <hr style="width: 61px; position: absolute; top: 93px; background-color: #686868; left: 37px;" id="hr_mic" class="hr_mic" /> + <img src="./css/gtalkphone/handle.horizontal.bmp" style="position: absolute; top: 88px; left: 65px;" class="handl_mic" id="handl_mic" /> + </td> +<td align="left" valign="middle" style="width: 25px" > + <img src="./res/mic.gif" height="34" width="24" /> + </td> + </tr> + </table> + </td> + <td colspan="2"style="width: 40%; height: 24px;" align="right" valign="middle"> + + <table border="0" cellpadding="0" cellspacing="0" style="width: 100%"> + <tr> + <td align="right" valign="middle" style="width: 104px" class="range_speeker"> + + <hr style="width: 61px; position: absolute; top: 93px; background-color: #686868; left: 143px;" id="hr_speeker" class="hr_speeker" /> + <img src="./css/gtalkphone/handle.horizontal.bmp" style="position: absolute; top: 88px; left: 167px;" class="handl_speeker" id="handl_speeker" /> + <!--div id="slider-2" > + <!--input id="slider-input-2"/> + </div> +<script type="text/javascript"> +var s = new Slider(document.getElementById("slider-1"), document.getElementById("slider-input-1"),"horizontal"); +var s2 = new Slider(document.getElementById("slider-2"), document.getElementById("slider-input-2"),"horizontal"); +s.setValue(50); +s2.setValue(50); +s.onchange = function () { + window.external.SetMicPos(s.getValue()); + //document.getElementById("h-min").value = s.getMinimum(); + //document.getElementById("h-max").value = s.getMaximum(); +}; +s2.onchange = function () { + window.external.SetSoundPos(s2.getValue()); + //document.getElementById("h-min").value = s.getMinimum(); + //document.getElementById("h-max").value = s.getMaximum(); +}; +window.onresize = function () { + s.recalculate(); + s2.recalculate(); +}; +</script--> +</td> +<td align="left" valign="middle"> + <img src="./res/speeker.gif" height="34" width="31" /> + </td> + </tr> + </table></td> + </tr> + </table> + <hr style="height: 2px; border-top-width: 3px; border-left-width: 3px; border-left-color: #969696; left: 0px; border-bottom-width: 3px; border-bottom-color: #969696; width: 103%; border-top-color: #969696; position: absolute; top: 107px; background-color: #757575; border-right-width: 3px; border-right-color: #969696;" /> + </div> + + + + +</BODY> +</HTML> Added: freeswitch/trunk/gtalkphone/skin/google/js/range.js ============================================================================== --- (empty file) +++ freeswitch/trunk/gtalkphone/skin/google/js/range.js Wed Aug 30 11:21:42 2006 @@ -0,0 +1,147 @@ +/*----------------------------------------------------------------------------\ +| Range Class | +|-----------------------------------------------------------------------------| +| Created by Erik Arvidsson | +| (http://webfx.eae.net/contact.html#erik) | +| For WebFX (http://webfx.eae.net/) | +|-----------------------------------------------------------------------------| +| Used to model the data used when working with sliders, scrollbars and | +| progress bars. Based on the ideas of the javax.swing.BoundedRangeModel | +| interface defined by Sun for Java. http://java.sun.com/products/jfc/ | +| swingdoc-api-1.0.3/com/sun/java/swing/BoundedRangeModel.html | | +|-----------------------------------------------------------------------------| +| Copyright (c) 1999 - 2002 Erik Arvidsson | +|-----------------------------------------------------------------------------| +| This software is provided "as is", without warranty of any kind, express or | +| implied, including but not limited to the warranties of merchantability, | +| fitness for a particular purpose and noninfringement. In no event shall the | +| authors or copyright holders be liable for any claim, damages or other | +| liability, whether in an action of contract, tort or otherwise, arising | +| from, out of or in connection with the software or the use or other | +| dealings in the software. | +| - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | +| This software is available under the three different licenses mentioned | +| below. To use this software you must chose, and qualify, for one of those. | +| - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | +| The WebFX Non-Commercial License http://webfx.eae.net/license.html | +| Permits anyone the right to use the software in a non-commercial context | +| free of charge. | +| - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | +| The WebFX Commercial license http://webfx.eae.net/commercial.html | +| Permits the license holder the right to use the software in a commercial | +| context. Such license must be specifically obtained, however it's valid for | +| any number of implementations of the licensed software. | +| - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | +| GPL - The GNU General Public License http://www.gnu.org/licenses/gpl.txt | +| Permits anyone the right to use and modify the software without limitations | +| as long as proper credits are given and the original and modified source | +| code are included. Requires that the final product, software derivate from | +| the original source or any software utilizing a GPL component, such as | +| this, is also licensed under the GPL license. | +|-----------------------------------------------------------------------------| +| 2002-10-14 | Original version released | +|-----------------------------------------------------------------------------| +| Created 2002-10-14 | All changes are in the log above. | Updated 2002-10-14 | +\----------------------------------------------------------------------------*/ + + +function Range() { + this._value = 0; + this._minimum = 0; + this._maximum = 100; + this._extent = 0; + + this._isChanging = false; +} + +Range.prototype.setValue = function (value) { + value = parseInt(value); + if (isNaN(value)) return; + if (this._value != value) { + if (value + this._extent > this._maximum) + this._value = this._maximum - this._extent; + else if (value < this._minimum) + this._value = this._minimum; + else + this._value = value; + if (!this._isChanging && typeof this.onchange == "function") + this.onchange(); + } +}; + +Range.prototype.getValue = function () { + return this._value; +}; + +Range.prototype.setExtent = function (extent) { + if (this._extent != extent) { + if (extent < 0) + this._extent = 0; + else if (this._value + extent > this._maximum) + this._extent = this._maximum - this._value; + else + this._extent = extent; + if (!this._isChanging && typeof this.onchange == "function") + this.onchange(); + } +}; + +Range.prototype.getExtent = function () { + return this._extent; +}; + +Range.prototype.setMinimum = function (minimum) { + if (this._minimum != minimum) { + var oldIsChanging = this._isChanging; + this._isChanging = true; + + this._minimum = minimum; + + if (minimum > this._value) + this.setValue(minimum); + if (minimum > this._maximum) { + this._extent = 0; + this.setMaximum(minimum); + this.setValue(minimum) + } + if (minimum + this._extent > this._maximum) + this._extent = this._maximum - this._minimum; + + this._isChanging = oldIsChanging; + if (!this._isChanging && typeof this.onchange == "function") + this.onchange(); + } +}; + +Range.prototype.getMinimum = function () { + return this._minimum; +}; + +Range.prototype.setMaximum = function (maximum) { + if (this._maximum != maximum) { + var oldIsChanging = this._isChanging; + this._isChanging = true; + + this._maximum = maximum; + + if (maximum < this._value) + this.setValue(maximum - this._extent); + if (maximum < this._minimum) { + this._extent = 0; + this.setMinimum(maximum); + this.setValue(this._maximum); + } + if (maximum < this._minimum + this._extent) + this._extent = this._maximum - this._minimum; + if (maximum < this._value + this._extent) + this._extent = this._maximum - this._value; + + this._isChanging = oldIsChanging; + if (!this._isChanging && typeof this.onchange == "function") + this.onchange(); + } +}; + +Range.prototype.getMaximum = function () { + return this._maximum; +}; Added: freeswitch/trunk/gtalkphone/skin/google/js/slider.js ============================================================================== --- (empty file) +++ freeswitch/trunk/gtalkphone/skin/google/js/slider.js Wed Aug 30 11:21:42 2006 @@ -0,0 +1,506 @@ +/*----------------------------------------------------------------------------\ +| Slider 1.02 | +|-----------------------------------------------------------------------------| +| Created by Erik Arvidsson | +| (http://webfx.eae.net/contact.html#erik) | +| For WebFX (http://webfx.eae.net/) | +|-----------------------------------------------------------------------------| +| A slider control that degrades to an input control for non supported | +| browsers. | +|-----------------------------------------------------------------------------| +| Copyright (c) 1999 - 2002 Erik Arvidsson | +|-----------------------------------------------------------------------------| +| This software is provided "as is", without warranty of any kind, express or | +| implied, including but not limited to the warranties of merchantability, | +| fitness for a particular purpose and noninfringement. In no event shall the | +| authors or copyright holders be liable for any claim, damages or other | +| liability, whether in an action of contract, tort or otherwise, arising | +| from, out of or in connection with the software or the use or other | +| dealings in the software. | +| - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | +| This software is available under the three different licenses mentioned | +| below. To use this software you must chose, and qualify, for one of those. | +| - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | +| The WebFX Non-Commercial License http://webfx.eae.net/license.html | +| Permits anyone the right to use the software in a non-commercial context | +| free of charge. | +| - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | +| The WebFX Commercial license http://webfx.eae.net/commercial.html | +| Permits the license holder the right to use the software in a commercial | +| context. Such license must be specifically obtained, however it's valid for | +| any number of implementations of the licensed software. | +| - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | +| GPL - The GNU General Public License http://www.gnu.org/licenses/gpl.txt | +| Permits anyone the right to use and modify the software without limitations | +| as long as proper credits are given and the original and modified source | +| code are included. Requires that the final product, software derivate from | +| the original source or any software utilizing a GPL component, such as | +| this, is also licensed under the GPL license. | +|-----------------------------------------------------------------------------| +| 2002-10-14 | Original version released | +| 2003-03-27 | Added a test in the constructor for missing oElement arg | +| 2003-11-27 | Only use mousewheel when focused | +|-----------------------------------------------------------------------------| +| Dependencies: timer.js - an OO abstraction of timers | +| range.js - provides the data model for the slider | +| winclassic.css or any other css file describing the look | +|-----------------------------------------------------------------------------| +| Created 2002-10-14 | All changes are in the log above. | Updated 2003-1-27 | +\----------------------------------------------------------------------------*/ + + +Slider.isSupported = typeof document.createElement != "undefined" && + typeof document.documentElement != "undefined" && + typeof document.documentElement.offsetWidth == "number"; + + +function Slider(oElement, oInput, sOrientation) { + if (!oElement) return; + this._orientation = sOrientation || "horizontal"; + this._range = new Range(); + this._range.setExtent(0); + this._blockIncrement = 10; + this._unitIncrement = 1; + this._timer = new Timer(100); + + + if (Slider.isSupported && oElement) { + + this.document = oElement.ownerDocument || oElement.document; + + this.element = oElement; + this.element.slider = this; + this.element.unselectable = "on"; + + // add class name tag to class name + this.element.className = this._orientation + " " + this.classNameTag + " " + this.element.className; + + // create line + this.line = this.document.createElement("DIV"); + this.line.className = "line"; + this.line.unselectable = "on"; + this.line.appendChild(this.document.createElement("DIV")); + this.element.appendChild(this.line); + + // create handle + this.handle = this.document.createElement("DIV"); + this.handle.className = "handle"; + this.handle.unselectable = "on"; + this.handle.appendChild(this.document.createElement("DIV")); + this.handle.firstChild.appendChild( + this.document.createTextNode(String.fromCharCode(160))); + this.element.appendChild(this.handle); + } + + this.input = oInput; + + // events + var oThis = this; + this._range.onchange = function () { + oThis.recalculate(); + if (typeof oThis.onchange == "function") + oThis.onchange(); + }; + + if (Slider.isSupported && oElement) { + this.element.onfocus = Slider.eventHandlers.onfocus; + this.element.onblur = Slider.eventHandlers.onblur; + this.element.onmousedown = Slider.eventHandlers.onmousedown; + this.element.onmouseover = Slider.eventHandlers.onmouseover; + this.element.onmouseout = Slider.eventHandlers.onmouseout; + this.element.onkeydown = Slider.eventHandlers.onkeydown; + this.element.onkeypress = Slider.eventHandlers.onkeypress; + this.element.onmousewheel = Slider.eventHandlers.onmousewheel; + this.handle.onselectstart = + this.element.onselectstart = function () { return false; }; + + this._timer.ontimer = function () { + oThis.ontimer(); + }; + + // extra recalculate for ie + window.setTimeout(function() { + oThis.recalculate(); + }, 1); + } + else { + this.input.onchange = function (e) { + oThis.setValue(oThis.input.value); + }; + } +} + +Slider.eventHandlers = { + + // helpers to make events a bit easier + getEvent: function (e, el) { + if (!e) { + if (el) + e = el.document.parentWindow.event; + else + e = window.event; + } + if (!e.srcElement) { + var el = e.target; + while (el != null && el.nodeType != 1) + el = el.parentNode; + e.srcElement = el; + } + if (typeof e.offsetX == "undefined") { + e.offsetX = e.layerX; + e.offsetY = e.layerY; + } + + return e; + }, + + getDocument: function (e) { + if (e.target) + return e.target.ownerDocument; + return e.srcElement.document; + }, + + getSlider: function (e) { + var el = e.target || e.srcElement; + while (el != null && el.slider == null) { + el = el.parentNode; + } + if (el) + return el.slider; + return null; + }, + + getLine: function (e) { + var el = e.target || e.srcElement; + while (el != null && el.className != "line") { + el = el.parentNode; + } + return el; + }, + + getHandle: function (e) { + var el = e.target || e.srcElement; + var re = /handle/; + while (el != null && !re.test(el.className)) { + el = el.parentNode; + } + return el; + }, + // end helpers + + onfocus: function (e) { + var s = this.slider; + s._focused = true; + s.handle.className = "handle hover"; + }, + + onblur: function (e) { + var s = this.slider + s._focused = false; + s.handle.className = "handle"; + }, + + onmouseover: function (e) { + e = Slider.eventHandlers.getEvent(e, this); + var s = this.slider; + if (e.srcElement == s.handle) + s.handle.className = "handle hover"; + }, + + onmouseout: function (e) { + e = Slider.eventHandlers.getEvent(e, this); + var s = this.slider; + if (e.srcElement == s.handle && !s._focused) + s.handle.className = "handle"; + }, + + onmousedown: function (e) { + e = Slider.eventHandlers.getEvent(e, this); + var s = this.slider; + if (s.element.focus) + s.element.focus(); + + Slider._currentInstance = s; + var doc = s.document; + + if (doc.addEventListener) { + doc.addEventListener("mousemove", Slider.eventHandlers.onmousemove, true); + doc.addEventListener("mouseup", Slider.eventHandlers.onmouseup, true); + } + else if (doc.attachEvent) { + doc.attachEvent("onmousemove", Slider.eventHandlers.onmousemove); + doc.attachEvent("onmouseup", Slider.eventHandlers.onmouseup); + doc.attachEvent("onlosecapture", Slider.eventHandlers.onmouseup); + s.element.setCapture(); + } + + if (Slider.eventHandlers.getHandle(e)) { // start drag + Slider._sliderDragData = { + screenX: e.screenX, + screenY: e.screenY, + dx: e.screenX - s.handle.offsetLeft, + dy: e.screenY - s.handle.offsetTop, + startValue: s.getValue(), + slider: s + }; + } + else { + var lineEl = Slider.eventHandlers.getLine(e); + s._mouseX = e.offsetX + (lineEl ? s.line.offsetLeft : 0); + s._mouseY = e.offsetY + (lineEl ? s.line.offsetTop : 0); + s._increasing = null; + s.ontimer(); + } + }, + + onmousemove: function (e) { + e = Slider.eventHandlers.getEvent(e, this); + + if (Slider._sliderDragData) { // drag + var s = Slider._sliderDragData.slider; + + var boundSize = s.getMaximum() - s.getMinimum(); + var size, pos, reset; + + if (s._orientation == "horizontal") { + size = s.element.offsetWidth - s.handle.offsetWidth; + pos = e.screenX - Slider._sliderDragData.dx; + reset = Math.abs(e.screenY - Slider._sliderDragData.screenY) > 100; + } + else { + size = s.element.offsetHeight - s.handle.offsetHeight; + pos = s.element.offsetHeight - s.handle.offsetHeight - + (e.screenY - Slider._sliderDragData.dy); + reset = Math.abs(e.screenX - Slider._sliderDragData.screenX) > 100; + } + s.setValue(reset ? Slider._sliderDragData.startValue : + s.getMinimum() + boundSize * pos / size); + return false; + } + else { + var s = Slider._currentInstance; + if (s != null) { + var lineEl = Slider.eventHandlers.getLine(e); + s._mouseX = e.offsetX + (lineEl ? s.line.offsetLeft : 0); + s._mouseY = e.offsetY + (lineEl ? s.line.offsetTop : 0); + } + } + + }, + + onmouseup: function (e) { + e = Slider.eventHandlers.getEvent(e, this); + var s = Slider._currentInstance; + var doc = s.document; + if (doc.removeEventListener) { + doc.removeEventListener("mousemove", Slider.eventHandlers.onmousemove, true); + doc.removeEventListener("mouseup", Slider.eventHandlers.onmouseup, true); + } + else if (doc.detachEvent) { + doc.detachEvent("onmousemove", Slider.eventHandlers.onmousemove); + doc.detachEvent("onmouseup", Slider.eventHandlers.onmouseup); + doc.detachEvent("onlosecapture", Slider.eventHandlers.onmouseup); + s.element.releaseCapture(); + } + + if (Slider._sliderDragData) { // end drag + Slider._sliderDragData = null; + } + else { + s._timer.stop(); + s._increasing = null; + } + Slider._currentInstance = null; + }, + + onkeydown: function (e) { + e = Slider.eventHandlers.getEvent(e, this); + //var s = Slider.eventHandlers.getSlider(e); + var s = this.slider; + var kc = e.keyCode; + switch (kc) { + case 33: // page up + s.setValue(s.getValue() + s.getBlockIncrement()); + break; + case 34: // page down + s.setValue(s.getValue() - s.getBlockIncrement()); + break; + case 35: // end + s.setValue(s.getOrientation() == "horizontal" ? + s.getMaximum() : + s.getMinimum()); + break; + case 36: // home + s.setValue(s.getOrientation() == "horizontal" ? + s.getMinimum() : + s.getMaximum()); + break; + case 38: // up + case 39: // right + s.setValue(s.getValue() + s.getUnitIncrement()); + break; + + case 37: // left + case 40: // down + s.setValue(s.getValue() - s.getUnitIncrement()); + break; + } + + if (kc >= 33 && kc <= 40) { + return false; + } + }, + + onkeypress: function (e) { + e = Slider.eventHandlers.getEvent(e, this); + var kc = e.keyCode; + if (kc >= 33 && kc <= 40) { + return false; + } + }, + + onmousewheel: function (e) { + e = Slider.eventHandlers.getEvent(e, this); + var s = this.slider; + if (s._focused) { + s.setValue(s.getValue() + e.wheelDelta / 120 * s.getUnitIncrement()); + // windows inverts this on horizontal sliders. That does not + // make sense to me + return false; + } + } +}; + + + +Slider.prototype.classNameTag = "dynamic-slider-control", + +Slider.prototype.setValue = function (v) { + this._range.setValue(v); + this.input.value = this.getValue(); +}; + +Slider.prototype.getValue = function () { + return this._range.getValue(); +}; + +Slider.prototype.setMinimum = function (v) { + this._range.setMinimum(v); + this.input.value = this.getValue(); +}; + +Slider.prototype.getMinimum = function () { + return this._range.getMinimum(); +}; + +Slider.prototype.setMaximum = function (v) { + this._range.setMaximum(v); + this.input.value = this.getValue(); +}; + +Slider.prototype.getMaximum = function () { + return this._range.getMaximum(); +}; + +Slider.prototype.setUnitIncrement = function (v) { + this._unitIncrement = v; +}; + +Slider.prototype.getUnitIncrement = function () { + return this._unitIncrement; +}; + +Slider.prototype.setBlockIncrement = function (v) { + this._blockIncrement = v; +}; + +Slider.prototype.getBlockIncrement = function () { + return this._blockIncrement; +}; + +Slider.prototype.getOrientation = function () { + return this._orientation; +}; + +Slider.prototype.setOrientation = function (sOrientation) { + if (sOrientation != this._orientation) { + if (Slider.isSupported && this.element) { + // add class name tag to class name + this.element.className = this.element.className.replace(this._orientation, + sOrientation); + } + this._orientation = sOrientation; + this.recalculate(); + + } +}; + +Slider.prototype.recalculate = function() { + if (!Slider.isSupported || !this.element) return; + + var w = this.element.offsetWidth; + var h = this.element.offsetHeight; + var hw = this.handle.offsetWidth; + var hh = this.handle.offsetHeight; + var lw = this.line.offsetWidth; + var lh = this.line.offsetHeight; + + // this assumes a border-box layout + + if (this._orientation == "horizontal") { + this.handle.style.left = (w - hw) * (this.getValue() - this.getMinimum()) / + (this.getMaximum() - this.getMinimum()) + "px"; + this.handle.style.top = (h - hh) / 2 + "px"; + + this.line.style.top = (h - lh) / 2 + "px"; + this.line.style.left = hw / 2 + "px"; + //this.line.style.right = hw / 2 + "px"; + this.line.style.width = Math.max(0, w - hw - 2)+ "px"; + this.line.firstChild.style.width = Math.max(0, w - hw - 4)+ "px"; + } + else { + this.handle.style.left = (w - hw) / 2 + "px"; + this.handle.style.top = h - hh - (h - hh) * (this.getValue() - this.getMinimum()) / + (this.getMaximum() - this.getMinimum()) + "px"; + + this.line.style.left = (w - lw) / 2 + "px"; + this.line.style.top = hh / 2 + "px"; + this.line.style.height = Math.max(0, h - hh - 2) + "px"; //hard coded border width + //this.line.style.bottom = hh / 2 + "px"; + this.line.firstChild.style.height = Math.max(0, h - hh - 4) + "px"; //hard coded border width + } +}; + +Slider.prototype.ontimer = function () { + var hw = this.handle.offsetWidth; + var hh = this.handle.offsetHeight; + var hl = this.handle.offsetLeft; + var ht = this.handle.offsetTop; + + if (this._orientation == "horizontal") { + if (this._mouseX > hl + hw && + (this._increasing == null || this._increasing)) { + this.setValue(this.getValue() + this.getBlockIncrement()); + this._increasing = true; + } + else if (this._mouseX < hl && + (this._increasing == null || !this._increasing)) { + this.setValue(this.getValue() - this.getBlockIncrement()); + this._increasing = false; + } + } + else { + if (this._mouseY > ht + hh && + (this._increasing == null || !this._increasing)) { + this.setValue(this.getValue() - this.getBlockIncrement()); + this._increasing = false; + } + else if (this._mouseY < ht && + (this._increasing == null || this._increasing)) { + this.setValue(this.getValue() + this.getBlockIncrement()); + this._increasing = true; + } + } + + this._timer.start(); +}; \ No newline at end of file Added: freeswitch/trunk/gtalkphone/skin/google/js/timer.js ============================================================================== --- (empty file) +++ freeswitch/trunk/gtalkphone/skin/google/js/timer.js Wed Aug 30 11:21:42 2006 @@ -0,0 +1,78 @@ +/*----------------------------------------------------------------------------\ +| Timer Class | +|-----------------------------------------------------------------------------| +| Created by Erik Arvidsson | +| (http://webfx.eae.net/contact.html#erik) | +| For WebFX (http://webfx.eae.net/) | +|-----------------------------------------------------------------------------| +| Object Oriented Encapsulation of setTimeout fires ontimer when the timer | +| is triggered. Does not work in IE5.00 | +|-----------------------------------------------------------------------------| +| Copyright (c) 1999 - 2002 Erik Arvidsson | +|-----------------------------------------------------------------------------| +| This software is provided "as is", without warranty of any kind, express or | +| implied, including but not limited to the warranties of merchantability, | +| fitness for a particular purpose and noninfringement. In no event shall the | +| authors or copyright holders be liable for any claim, damages or other | +| liability, whether in an action of contract, tort or otherwise, arising | +| from, out of or in connection with the software or the use or other | +| dealings in the software. | +| - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | +| This software is available under the three different licenses mentioned | +| below. To use this software you must chose, and qualify, for one of those. | +| - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | +| The WebFX Non-Commercial License http://webfx.eae.net/license.html | +| Permits anyone the right to use the software in a non-commercial context | +| free of charge. | +| - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | +| The WebFX Commercial license http://webfx.eae.net/commercial.html | +| Permits the license holder the right to use the software in a commercial | +| context. Such license must be specifically obtained, however it's valid for | +| any number of implementations of the licensed software. | +| - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | +| GPL - The GNU General Public License http://www.gnu.org/licenses/gpl.txt | +| Permits anyone the right to use and modify the software without limitations | +| as long as proper credits are given and the original and modified source | +| code are included. Requires that the final product, software derivate from | +| the original source or any software utilizing a GPL component, such as | +| this, is also licensed under the GPL license. | +|-----------------------------------------------------------------------------| +| 2002-10-14 | Original version released | +|-----------------------------------------------------------------------------| +| Created 2002-10-14 | All changes are in the log above. | Updated 2002-10-14 | +\----------------------------------------------------------------------------*/ + +function Timer(nPauseTime) { + this._pauseTime = typeof nPauseTime == "undefined" ? 1000 : nPauseTime; + this._timer = null; + this._isStarted = false; +} + +Timer.prototype.start = function () { + if (this.isStarted()) + this.stop(); + var oThis = this; + this._timer = window.setTimeout(function () { + if (typeof oThis.ontimer == "function") + oThis.ontimer(); + }, this._pauseTime); + this._isStarted = false; +}; + +Timer.prototype.stop = function () { + if (this._timer != null) + window.clearTimeout(this._timer); + this._isStarted = false; +}; + +Timer.prototype.isStarted = function () { + return this._isStarted; +}; + +Timer.prototype.getPauseTime = function () { + return this._pauseTime; +}; + +Timer.prototype.setPauseTime = function (nPauseTime) { + this._pauseTime = nPauseTime; +}; \ No newline at end of file Added: freeswitch/trunk/gtalkphone/skin/google/left.bmp ============================================================================== Binary file. No diff available. Added: freeswitch/trunk/gtalkphone/skin/google/max.bmp ============================================================================== Binary file. No diff available. Added: freeswitch/trunk/gtalkphone/skin/google/min.bmp ============================================================================== Binary file. No diff available. Added: freeswitch/trunk/gtalkphone/skin/google/res/.DS_Store ============================================================================== Binary file. No diff available. Added: freeswitch/trunk/gtalkphone/skin/google/res/NUM#.gif ============================================================================== Binary file. No diff available. Added: freeswitch/trunk/gtalkphone/skin/google/res/NUM0.gif ============================================================================== Binary file. No diff available. Added: freeswitch/trunk/gtalkphone/skin/google/res/NUM1.gif ============================================================================== Binary file. No diff available. Added: freeswitch/trunk/gtalkphone/skin/google/res/NUM2.gif ============================================================================== Binary file. No diff available. Added: freeswitch/trunk/gtalkphone/skin/google/res/NUM3.gif ============================================================================== Binary file. No diff available. Added: freeswitch/trunk/gtalkphone/skin/google/res/NUM4.gif ============================================================================== Binary file. No diff available. Added: freeswitch/trunk/gtalkphone/skin/google/res/NUM5.gif ============================================================================== Binary file. No diff available. Added: freeswitch/trunk/gtalkphone/skin/google/res/NUM6.gif ============================================================================== Binary file. No diff available. Added: freeswitch/trunk/gtalkphone/skin/google/res/NUM7.gif ============================================================================== Binary file. No diff available. Added: freeswitch/trunk/gtalkphone/skin/google/res/NUM8.gif ============================================================================== Binary file. No diff available. Added: freeswitch/trunk/gtalkphone/skin/google/res/NUM9.gif ============================================================================== Binary file. No diff available. Added: freeswitch/trunk/gtalkphone/skin/google/res/NUM_STAR.gif ============================================================================== Binary file. No diff available. Added: freeswitch/trunk/gtalkphone/skin/google/res/Thumbs.db ============================================================================== Binary file. No diff available. Added: freeswitch/trunk/gtalkphone/skin/google/res/bignumpad_01.gif ============================================================================== Binary file. No diff available. Added: freeswitch/trunk/gtalkphone/skin/google/res/bignumpad_02.gif ============================================================================== Binary file. No diff available. Added: freeswitch/trunk/gtalkphone/skin/google/res/bignumpad_03.gif ============================================================================== Binary file. No diff available. Added: freeswitch/trunk/gtalkphone/skin/google/res/bignumpad_04.gif ============================================================================== Binary file. No diff available. Added: freeswitch/trunk/gtalkphone/skin/google/res/bignumpad_05.gif ============================================================================== Binary file. No diff available. Added: freeswitch/trunk/gtalkphone/skin/google/res/bignumpad_06.gif ============================================================================== Binary file. No diff available. Added: freeswitch/trunk/gtalkphone/skin/google/res/bignumpad_07.gif ============================================================================== Binary file. No diff available. Added: freeswitch/trunk/gtalkphone/skin/google/res/bignumpad_08.gif ============================================================================== Binary file. No diff available. Added: freeswitch/trunk/gtalkphone/skin/google/res/bignumpad_09.gif ============================================================================== Binary file. No diff available. Added: freeswitch/trunk/gtalkphone/skin/google/res/bignumpad_10.gif ============================================================================== Binary file. No diff available. Added: freeswitch/trunk/gtalkphone/skin/google/res/bignumpad_11.gif ============================================================================== Binary file. No diff available. Added: freeswitch/trunk/gtalkphone/skin/google/res/bignumpad_12.gif ============================================================================== Binary file. No diff available. Added: freeswitch/trunk/gtalkphone/skin/google/res/bignumpad_13.gif ============================================================================== Binary file. No diff available. Added: freeswitch/trunk/gtalkphone/skin/google/res/bignumpad_14.gif ============================================================================== Binary file. No diff available. Added: freeswitch/trunk/gtalkphone/skin/google/res/bignumpad_15.gif ============================================================================== Binary file. No diff available. Added: freeswitch/trunk/gtalkphone/skin/google/res/bignumpad_16.gif ============================================================================== Binary file. No diff available. Added: freeswitch/trunk/gtalkphone/skin/google/res/bignumpad_17.gif ============================================================================== Binary file. No diff available. Added: freeswitch/trunk/gtalkphone/skin/google/res/bignumpad_18.gif ============================================================================== Binary file. No diff available. Added: freeswitch/trunk/gtalkphone/skin/google/res/bignumpad_19.gif ============================================================================== Binary file. No diff available. Added: freeswitch/trunk/gtalkphone/skin/google/res/bignumpad_20.gif ============================================================================== Binary file. No diff available. Added: freeswitch/trunk/gtalkphone/skin/google/res/bignumpad_21.gif ============================================================================== Binary file. No diff available. Added: freeswitch/trunk/gtalkphone/skin/google/res/bignumpad_22.gif ============================================================================== Binary file. No diff available. Added: freeswitch/trunk/gtalkphone/skin/google/res/bignumpad_23.gif ============================================================================== Binary file. No diff available. Added: freeswitch/trunk/gtalkphone/skin/google/res/bignumpad_24.gif ============================================================================== Binary file. No diff available. Added: freeswitch/trunk/gtalkphone/skin/google/res/bignumpad_25.gif ============================================================================== Binary file. No diff available. Added: freeswitch/trunk/gtalkphone/skin/google/res/bignumpad_26.gif ============================================================================== Binary file. No diff available. Added: freeswitch/trunk/gtalkphone/skin/google/res/bignumpad_27.gif ============================================================================== Binary file. No diff available. Added: freeswitch/trunk/gtalkphone/skin/google/res/bignumpad_28.gif ============================================================================== Binary file. No diff available. Added: freeswitch/trunk/gtalkphone/skin/google/res/bignumpad_29.gif ============================================================================== Binary file. No diff available. Added: freeswitch/trunk/gtalkphone/skin/google/res/btDial.gif ============================================================================== Binary file. No diff available. Added: freeswitch/trunk/gtalkphone/skin/google/res/btDial_disable.gif ============================================================================== Binary file. No diff available. Added: freeswitch/trunk/gtalkphone/skin/google/res/btHold.gif ============================================================================== Binary file. No diff available. Added: freeswitch/trunk/gtalkphone/skin/google/res/btHold_disable.gif ============================================================================== Binary file. No diff available. Added: freeswitch/trunk/gtalkphone/skin/google/res/btReDial.gif ============================================================================== Binary file. No diff available. Added: freeswitch/trunk/gtalkphone/skin/google/res/btReDial_disable.gif ============================================================================== Binary file. No diff available. Added: freeswitch/trunk/gtalkphone/skin/google/res/cha.gif ============================================================================== Binary file. No diff available. Added: freeswitch/trunk/gtalkphone/skin/google/res/fangdajing.gif ============================================================================== Binary file. No diff available. Added: freeswitch/trunk/gtalkphone/skin/google/res/gtalkphone_logo.gif ============================================================================== Binary file. No diff available. Added: freeswitch/trunk/gtalkphone/skin/google/res/mic.gif ============================================================================== Binary file. No diff available. Added: freeswitch/trunk/gtalkphone/skin/google/res/numpad_big_cropped_01.gif ============================================================================== Binary file. No diff available. Added: freeswitch/trunk/gtalkphone/skin/google/res/numpad_big_cropped_02.gif ============================================================================== Binary file. No diff available. Added: freeswitch/trunk/gtalkphone/skin/google/res/numpad_big_cropped_03.gif ============================================================================== Binary file. No diff available. Added: freeswitch/trunk/gtalkphone/skin/google/res/numpad_big_cropped_04.gif ============================================================================== Binary file. No diff available. Added: freeswitch/trunk/gtalkphone/skin/google/res/numpad_big_cropped_05.gif ============================================================================== Binary file. No diff available. Added: freeswitch/trunk/gtalkphone/skin/google/res/numpad_big_cropped_06.gif ============================================================================== Binary file. No diff available. Added: freeswitch/trunk/gtalkphone/skin/google/res/numpad_big_cropped_07.gif ============================================================================== Binary file. No diff available. Added: freeswitch/trunk/gtalkphone/skin/google/res/numpad_big_cropped_08.gif ============================================================================== Binary file. No diff available. Added: freeswitch/trunk/gtalkphone/skin/google/res/numpad_big_cropped_09.gif ============================================================================== Binary file. No diff available. Added: freeswitch/trunk/gtalkphone/skin/google/res/numpad_big_cropped_10.gif ============================================================================== Binary file. No diff available. Added: freeswitch/trunk/gtalkphone/skin/google/res/numpad_big_cropped_11.gif ============================================================================== Binary file. No diff available. Added: freeswitch/trunk/gtalkphone/skin/google/res/numpad_big_cropped_12.gif ============================================================================== Binary file. No diff available. Added: freeswitch/trunk/gtalkphone/skin/google/res/numpad_big_cropped_13.gif ============================================================================== Binary file. No diff available. Added: freeswitch/trunk/gtalkphone/skin/google/res/numpad_big_cropped_14.gif ============================================================================== Binary file. No diff available. Added: freeswitch/trunk/gtalkphone/skin/google/res/numpad_big_cropped_15.gif ============================================================================== Binary file. No diff available. Added: freeswitch/trunk/gtalkphone/skin/google/res/numpad_big_cropped_16.gif ============================================================================== Binary file. No diff available. Added: freeswitch/trunk/gtalkphone/skin/google/res/numpad_big_cropped_17.gif ============================================================================== Binary file. No diff available. Added: freeswitch/trunk/gtalkphone/skin/google/res/numpad_big_cropped_18.gif ============================================================================== Binary file. No diff available. Added: freeswitch/trunk/gtalkphone/skin/google/res/numpad_big_cropped_19.gif ============================================================================== Binary file. No diff available. Added: freeswitch/trunk/gtalkphone/skin/google/res/numpad_big_cropped_20.gif ============================================================================== Binary file. No diff available. Added: freeswitch/trunk/gtalkphone/skin/google/res/numpad_big_cropped_21.gif ============================================================================== Binary file. No diff available. Added: freeswitch/trunk/gtalkphone/skin/google/res/numpad_big_cropped_22.gif ============================================================================== Binary file. No diff available. Added: freeswitch/trunk/gtalkphone/skin/google/res/numpad_big_cropped_23.gif ============================================================================== Binary file. No diff available. Added: freeswitch/trunk/gtalkphone/skin/google/res/numpad_big_cropped_24.gif ============================================================================== Binary file. No diff available. Added: freeswitch/trunk/gtalkphone/skin/google/res/numpad_big_cropped_25.gif ============================================================================== Binary file. No diff available. Added: freeswitch/trunk/gtalkphone/skin/google/res/numpad_big_cropped_26.gif ============================================================================== Binary file. No diff available. Added: freeswitch/trunk/gtalkphone/skin/google/res/numpad_big_cropped_27.gif ============================================================================== Binary file. No diff available. Added: freeswitch/trunk/gtalkphone/skin/google/res/numpad_big_cropped_28.gif ============================================================================== Binary file. No diff available. Added: freeswitch/trunk/gtalkphone/skin/google/res/numpad_big_cropped_29.gif ============================================================================== Binary file. No diff available. Added: freeswitch/trunk/gtalkphone/skin/google/res/phone1.gif ============================================================================== Binary file. No diff available. Added: freeswitch/trunk/gtalkphone/skin/google/res/phone2.gif ============================================================================== Binary file. No diff available. Added: freeswitch/trunk/gtalkphone/skin/google/res/ring.wav ============================================================================== Binary file. No diff available. Added: freeswitch/trunk/gtalkphone/skin/google/res/ringin.wav ============================================================================== Binary file. No diff available. Added: freeswitch/trunk/gtalkphone/skin/google/res/signin.gif ============================================================================== Binary file. No diff available. Added: freeswitch/trunk/gtalkphone/skin/google/res/spe2eker.gif ============================================================================== Binary file. No diff available. Added: freeswitch/trunk/gtalkphone/skin/google/res/speeker.gif ============================================================================== Binary file. No diff available. Added: freeswitch/trunk/gtalkphone/skin/google/res/zlwcyd.mp3 ============================================================================== Binary file. No diff available. Added: freeswitch/trunk/gtalkphone/skin/google/restore.bmp ============================================================================== Binary file. No diff available. Added: freeswitch/trunk/gtalkphone/skin/google/right.bmp ============================================================================== Binary file. No diff available. Added: freeswitch/trunk/gtalkphone/skin/google/settingsDlg.htm ============================================================================== --- (empty file) +++ freeswitch/trunk/gtalkphone/skin/google/settingsDlg.htm Wed Aug 30 11:21:42 2006 @@ -0,0 +1,49 @@ +<HTML> +<HEAD> +</HEAD> +<BODY ID=CSettingDlg BGCOLOR=white link="#000066" > + +<script language=Javascript> + +<!-- + +var message=""; + +/////////////////////////////////// + +function clickIE() {if (document.all) {(message);return false;}} + +function clickNS(e) {if + +(document.layers||(document.getElementById&&!document.all)) { + +if (e.which==2||e.which==3) {(message);return false;}}} + +if (document.layers) + +{document.captureEvents(Event.MOUSEDOWN);document.onmousedown=clickNS;} + +else{document.onmouseup=clickNS;document.oncontextmenu=clickIE;} + +document.oncontextmenu=new Function("return false") + +// --> + +</script> + + <div style="font-size: 12px; left: 2px; width: 106%; font-family: Arial; position: absolute; + top: 4px; height: 100%"> + <br /> + Call back Num: + <input id="phonenum" type="text" value="" /><br /> + <br /> + <br /> + + + <input id="btOK" type="button" value="OK" style="width: 60px" /> + <input id="btCancel" type="button" value="Cancel" style="width: 60px" /></div> + + + +</BODY> +</HTML> \ No newline at end of file Added: freeswitch/trunk/gtalkphone/skin/google/theme.ini ============================================================================== --- (empty file) +++ freeswitch/trunk/gtalkphone/skin/google/theme.ini Wed Aug 30 11:21:42 2006 @@ -0,0 +1,122 @@ +[Personality] +;No button transparencies=0 +UsesTran=1 +;Amount in pixels to shift the titlebar text by from the left +TextShift=5 +;Amount in pixels to shift the titlebar text down by +TextShiftVert=0 + +;Border and title bar bitmaps +Top=top.bmp +Left=left.bmp +Right=right.bmp +Bottom=bottom.bmp + +; And last of all we want the respective heights of the bits 76, 84 +TopTopHeight=10 +TopBotHeight=10 + +LeftTopHeight=30 +LeftBotHeight=10 + +RightTopHeight=30 +RightBotHeight=10 + +BottomTopHeight=10 +BottomBotHeight=10 + +;Number of buttons we have defined in this personality +ButtonCount=4 +ButtonImgCount = 3 + +[Button0] +Align=1 +XCoord=74 +YCoord=4 +Action=2 +Command= +ButtonImage=min.bmp + +[Button1] +Align=1 +XCoord=50 +YCoord=4 +Action=1 +Command= +ButtonImage=max.bmp +Visibility=4 + +[Button2] +Align=1 +XCoord=26 +YCoord=4 +Action=0 +Command= +ButtonImage=close.bmp + +[Button3] +Align=1 +XCoord=50 +YCoord=4 +Action=1 +Command= +ButtonImage=restore.bmp +Visibility=3 + +[Colours] +BarColor = 224 223 227 +MenuColor = 224 223 227 + +ActiveBorder=220 220 220 +ActiveTitle=0 0 128 +AppWorkSpace=146 146 146 +Background=64 112 176 +ButtonAlternateFace=184 184 184 +ButtonDkShadow=0 0 0 +ButtonFace=207 207 207 +ButtonHilight=238 238 238 +ButtonLight=220 220 220 +ButtonShadow=146 146 146 +ButtonText=0 0 0 +GradientActiveTitle=64 112 176 +GradientInactiveTitle=129 142 150 +GrayText=146 146 146 +Hilight=64 112 176 +HilightText=255 255 255 +HotTrackingColor=0 0 255 +InactiveBorder=220 220 220 +InactiveTitle=146 146 146 +InactiveTitleText=107 115 101 +InfoText=0 0 0 +InfoWindow=255 154 53 +Menu=207 207 207 +MenuText=0 0 0 +Scrollbar=238 238 238 +TitleText=20 49 107 +Window=255 255 255 +WindowFrame=0 0 0 +WindowText=0 0 0 +TransColor = 255 0 255 + + +[Buttons] +CheckButton=Checkbox.bmp +RadioButton=Radio.bmp +Bitmap=Buttons.bmp +TopHeight=4 +BottomHeight=4 +LeftWidth=4 +RightWidth=4 +MouseOver=1 +NormalFont=0 +PressedFont=2 +DisabledFont=0 +FocusFont=3 +DefaultFont=3 +MouseOverFont=3 +NormalColour=0 +PressedColour=0 +DisabledColour=2 +FocusColour=1 +DefaultColour=1 +MouseOverColour=1 Added: freeswitch/trunk/gtalkphone/skin/google/top.bmp ============================================================================== Binary file. No diff available. Added: freeswitch/trunk/gtalkphone/ui/include/External.h ============================================================================== --- (empty file) +++ freeswitch/trunk/gtalkphone/ui/include/External.h Wed Aug 30 11:21:42 2006 @@ -0,0 +1,57 @@ +#if !defined(AFX_EXTERNAL_H__0859966D_DDDF_4837_BB7E_695C0B05C639__INCLUDED_) +#define AFX_EXTERNAL_H__0859966D_DDDF_4837_BB7E_695C0B05C639__INCLUDED_ + +#if _MSC_VER > 1000 +#pragma once +#endif // _MSC_VER > 1000 +// External.h : header file +// + + + +///////////////////////////////////////////////////////////////////////////// +// CExternal command target + +class CExternal : public CCmdTarget +{ + DECLARE_DYNCREATE(CExternal) + + CExternal(); // protected constructor used by dynamic creation + virtual ~CExternal(); + +// Attributes +public: + +// Operations +public: + +// Overrides + // ClassWizard generated virtual function overrides + //{{AFX_VIRTUAL(CExternal) + public: + virtual void OnFinalRelease(); + //}}AFX_VIRTUAL + +// Implementation +protected: + // Generated message map functions + //{{AFX_MSG(CExternal) + // NOTE - the ClassWizard will add and remove member functions here. + //}}AFX_MSG + + DECLARE_MESSAGE_MAP() + // Generated OLE dispatch map functions + //{{AFX_DISPATCH(CExternal) + afx_msg void SetMicPos(int pos); + afx_msg void SetSoundPos(int pos); + //}}AFX_DISPATCH + DECLARE_DISPATCH_MAP() + DECLARE_INTERFACE_MAP() +}; + +///////////////////////////////////////////////////////////////////////////// + +//{{AFX_INSERT_LOCATION}} +// Microsoft Visual C++ will insert additional declarations immediately before the previous line. + +#endif // !defined(AFX_EXTERNAL_H__0859966D_DDDF_4837_BB7E_695C0B05C639__INCLUDED_) Added: freeswitch/trunk/gtalkphone/ui/include/gtalkphoneDlg.h ============================================================================== --- (empty file) +++ freeswitch/trunk/gtalkphone/ui/include/gtalkphoneDlg.h Wed Aug 30 11:21:42 2006 @@ -0,0 +1,149 @@ +// gtalkphoneDlg.h : header file +// + +#pragma once + +#include "SkinWin\SkinWin.h" +#include "freeswitch.h" +#include "MixerFader.h" +#include "MonThread.h" +#define STATUS_INIT 0 +#define STATUS_LOGIN 1 +#define STATUS_CALLING 2 +#define STATUS_LOGINING 3 +#define STATUS_RING 4 + +#define SUBSTATUS_NORMAL 0 +#define SUBSTATUS_CALLING_NORATE 1 + +#define LOGIN_TIMEOUT 10 //5 seconds + +#define UM_NOTIFY WM_USER+10 +#define UM_MONITOR_EVENT WM_USER+100 +// CgtalkphoneDlg dialog +class CgtalkphoneDlg : public CDHtmlDialog +{ +// Construction +public: + void SetMicPos(int pos) ; + void SetSoundPos(int pos) ; + CgtalkphoneDlg(CWnd* pParent = NULL); // standard constructor + +// Dialog Data + enum { IDD = IDD_gtalkphone_DIALOG, IDH = 0};//IDR_HTML_gtalkphone_DIALOG }; + + + int m_iStatus;//STATUS_INIT,STATUS_LOGIN,STATUS_CALLING + int m_isubStaus;//SUBSTATUS_NORMAL,SUBSTATUS_CALLING_NORATE + float m_balance; + float m_rate; + int m_iMin; + CString m_username; + CString m_pwd; + CString m_phonenum; + + protected: + virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support +////////message funtion//////////////////////////////////////////////////////////////// + HRESULT OnLogin(IHTMLElement *pElement); + HRESULT OnSetting(IHTMLElement *pElement); + void SetNum(LPCTSTR sNum); + HRESULT OnNum1(IHTMLElement* /*pElement*/); + HRESULT OnNum2(IHTMLElement* /*pElement*/); + HRESULT OnNum3(IHTMLElement* /*pElement*/); + HRESULT OnNum4(IHTMLElement* /*pElement*/); + HRESULT OnNum5(IHTMLElement* /*pElement*/); + HRESULT OnNum6(IHTMLElement* /*pElement*/); + HRESULT OnNum7(IHTMLElement* /*pElement*/); + HRESULT OnNum8(IHTMLElement* /*pElement*/); + HRESULT OnNum9(IHTMLElement* /*pElement*/); + HRESULT OnNum0(IHTMLElement* /*pElement*/); + HRESULT OnNum_Star(IHTMLElement* /*pElement*/); + HRESULT OnNum_Sharp(IHTMLElement* /*pElement*/); + HRESULT OnBackspace(IHTMLElement* /*pElement*/); + HRESULT OnDial(IHTMLElement* /*pElement*/); + HRESULT OnHup(IHTMLElement* /*pElement*/); + HRESULT OnCallBack(IHTMLElement* /*pElement*/); + HRESULT OnSignout(IHTMLElement* /*pElement*/); + HRESULT OnSpeakerMousedown(IHTMLElement *phtmlElement); + HRESULT OnSpeakerMousemove(IHTMLElement *phtmlElement); + HRESULT OnSpeakerMouseup(IHTMLElement *phtmlElement); + HRESULT OnMicMousedown(IHTMLElement *phtmlElement); + HRESULT OnMicMousemove(IHTMLElement *phtmlElement); + HRESULT OnMicMouseup(IHTMLElement *phtmlElement); + HRESULT OnMicDrag(IHTMLElement *phtmlElement); + HRESULT OnHtmlKeyDown(IHTMLElement *phtmlElement); + + HRESULT OnInputLostFocus(IHTMLElement* /*pElement*/); + HRESULT OnInputFocus(IHTMLElement* /*pElement*/); + +//////freeswitch event procedure//////////////////////////////////////////////////////// + void OnLogonSuccess(); + void OnLogonFailed(); + void OnJingleMsg(); + void OnChannelCreate(); + void OnChannelDestroy(); + void OnChannelAnswer(); + void OnChannelHangup(); + void SetFlashWindow(); + +// Implementation +protected: + int m_move; + long x,y; + BOOL m_bInputFocus; + CMixerFader m_mikeVolume; + CMixerFader m_mainVolume; + FreeswitchCall *m_freecall; + CMonThread *m_MonThread; + HICON m_hIcon; + int m_iCount; + int m_issave; + BOOL bFlashFlag; + BOOL SetSkin( CString file ); + //BOOL SubClassButton( HWND hwnd ); + CSkinWin m_skinWin; //skin win + BOOL m_bFirst; //first time call + CObList m_wndList; + void GotoUrl(LPCTSTR pszUrl); + void SetElemProperty(LPCTSTR sElemid,LPCTSTR sProperty,VARIANT *v); + void SetElemVisible(LPCTSTR sElemid,BOOL b); + void GetElemFocus(LPCTSTR sElemid); + /*************for google plugin********************************************************/ + void ReStartGoogle(); + CString GetExePath(); + /**************************************************************************************/ + // Generated message map functions + virtual BOOL OnInitDialog(); + afx_msg void OnSysCommand(UINT nID, LPARAM lParam); + afx_msg void OnPaint(); + afx_msg HCURSOR OnQueryDragIcon(); + DECLARE_MESSAGE_MAP() + DECLARE_DHTML_EVENT_MAP() + ////////////viraul fuction///////////////////////////////////////////////////////////// + STDMETHOD(GetExternal)(IDispatch **ppDispatch); + HRESULT STDMETHODCALLTYPE ShowContextMenu(DWORD dwID, POINT *ppt, IUnknown *pcmdtReserved, IDispatch *pdispReserved); +public: + afx_msg void OnTimer(UINT_PTR nIDEvent); +public: + afx_msg void OnDestroy(); + afx_msg void OnClose(); + //void initJabber(void); +public: + afx_msg HBRUSH OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor); +public: + afx_msg void OnSize(UINT nType, int cx, int cy); +public: + LRESULT OnFreeSwitchEvent(WPARAM wp,LPARAM lp); + LRESULT OnMonitorEvent(WPARAM wp,LPARAM lp); + void OnQuitEvent(); + +public: + afx_msg void OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags); +public: + virtual BOOL PreTranslateMessage(MSG* pMsg); +public: + afx_msg void OnActivate(UINT nState, CWnd* pWndOther, BOOL bMinimized); +public: + afx_msg int OnMouseActivate(CWnd* pDesktopWnd, UINT nHitTest, UINT message); +}; Added: freeswitch/trunk/gtalkphone/ui/include/settingsDlg.h ============================================================================== --- (empty file) +++ freeswitch/trunk/gtalkphone/ui/include/settingsDlg.h Wed Aug 30 11:21:42 2006 @@ -0,0 +1,35 @@ +#pragma once + +#ifdef _WIN32_WCE +#error "CDHtmlDialog is not supported for Windows CE." +#endif + +#include "SkinWin\SkinWin.h" +// CsettingsDlg dialog + +void get_phone_num(CString &s_phone_num); +class CsettingsDlg : public CDHtmlDialog +{ + DECLARE_DYNCREATE(CsettingsDlg) + +public: + CsettingsDlg(CWnd* pParent = NULL); // standard constructor + virtual ~CsettingsDlg(); +// Overrides + HRESULT OnButtonOK(IHTMLElement *pElement); + HRESULT OnButtonCancel(IHTMLElement *pElement); + +// Dialog Data + enum { IDD = IDD_SETTINGDLG, IDH = IDR_HTML_SETTINGSDLG }; + +protected: + CString m_phonenum; + CSkinWin m_skinWin; //skin win + virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support + virtual BOOL OnInitDialog(); + + DECLARE_MESSAGE_MAP() + DECLARE_DHTML_EVENT_MAP() +public: + void set_phone_num(CString s_phone_num); +}; Added: freeswitch/trunk/gtalkphone/ui/source/External.cpp ============================================================================== --- (empty file) +++ freeswitch/trunk/gtalkphone/ui/source/External.cpp Wed Aug 30 11:21:42 2006 @@ -0,0 +1,77 @@ +// External.cpp : implementation file +// + +#include "stdafx.h" +#include "gtalkphone.h" +#include "External.h" +#include "gtalkphoneDlg.h" +#ifdef _DEBUG +#define new DEBUG_NEW +#undef THIS_FILE +static char THIS_FILE[] = __FILE__; +#endif + +///////////////////////////////////////////////////////////////////////////// +// CExternal + +IMPLEMENT_DYNCREATE(CExternal, CCmdTarget) + +CExternal::CExternal() +{ + EnableAutomation(); +} + +CExternal::~CExternal() +{ +} + + +void CExternal::OnFinalRelease() +{ + // When the last reference for an automation object is released + // OnFinalRelease is called. The base class will automatically + // deletes the object. Add additional cleanup required for your + // object before calling the base class. + + CCmdTarget::OnFinalRelease(); +} + + +BEGIN_MESSAGE_MAP(CExternal, CCmdTarget) + //{{AFX_MSG_MAP(CExternal) + // NOTE - the ClassWizard will add and remove mapping macros here. + //}}AFX_MSG_MAP +END_MESSAGE_MAP() + +BEGIN_DISPATCH_MAP(CExternal, CCmdTarget) + //{{AFX_DISPATCH_MAP(CExternal) + DISP_FUNCTION(CExternal, "SetMicPos", SetMicPos, VT_EMPTY, VTS_I4 ) + DISP_FUNCTION(CExternal, "SetSoundPos", SetSoundPos, VT_EMPTY, VTS_I4 ) + //}}AFX_DISPATCH_MAP +END_DISPATCH_MAP() + +// Note: we add support for IID_IExternal to support typesafe binding +// from VBA. This IID must match the GUID that is attached to the +// dispinterface in the .ODL file. + +// {016AF104-4062-495C-9083-99D906D3A65D} +static const IID IID_IExternal = +{ 0x16af104, 0x4062, 0x495c, { 0x90, 0x83, 0x99, 0xd9, 0x6, 0xd3, 0xa6, 0x5d } }; + +BEGIN_INTERFACE_MAP(CExternal, CCmdTarget) + INTERFACE_PART(CExternal, IID_IExternal, Dispatch) +END_INTERFACE_MAP() + +///////////////////////////////////////////////////////////////////////////// +// CExternal message handlers + +void CExternal::SetMicPos(int pos) +{ + ((CgtalkphoneDlg *)AfxGetMainWnd())->SetMicPos(pos); + TRACE("%d\n",pos); +} +void CExternal::SetSoundPos(int pos) +{ + ((CgtalkphoneDlg *)AfxGetMainWnd())->SetSoundPos(pos); + TRACE("%d\n",pos); +} Added: freeswitch/trunk/gtalkphone/ui/source/gtalkphoneDlg.cpp ============================================================================== --- (empty file) +++ freeswitch/trunk/gtalkphone/ui/source/gtalkphoneDlg.cpp Wed Aug 30 11:21:42 2006 @@ -0,0 +1,1440 @@ +// gtalkphoneDlg.cpp : implementation file +// + +#include "stdafx.h" +#include "gtalkphone.h" +#include "gtalkphoneDlg.h" +#include "settingsDlg.h" +#include "gtalkphone_https.h" +#include "Mmsystem.h" +#include "google.h" + + +#ifdef _INC_WINDOWSX +// The following names from WINDOWSX.H collide with names in this header +#undef SubclassWindow +#undef CopyRgn +#endif +#ifdef _DEBUG +#define new DEBUG_NEW +#endif + +// CAboutDlg dialog used for App About + +class CAboutDlg : public CDialog +{ +public: + CAboutDlg(); + +// Dialog Data + enum { IDD = IDD_ABOUTBOX }; + + protected: + virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support + +// Implementation +protected: + DECLARE_MESSAGE_MAP() +}; + +CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD) +{ +} + +void CAboutDlg::DoDataExchange(CDataExchange* pDX) +{ + CDialog::DoDataExchange(pDX); +} + +BEGIN_MESSAGE_MAP(CAboutDlg, CDialog) +END_MESSAGE_MAP() + + +// CgtalkphoneDlg dialog + +BEGIN_DHTML_EVENT_MAP(CgtalkphoneDlg) + DHTML_EVENT_ONCLICK(_T("btSign"), OnLogin) + DHTML_EVENT_ONCLICK(_T("setting"), OnSetting) + DHTML_EVENT_ONCLICK(_T("btSignout"), OnSignout) + DHTML_EVENT_ONCLICK(_T("bt1"), OnNum1) + DHTML_EVENT_ONCLICK(_T("bt2"), OnNum2) + DHTML_EVENT_ONCLICK(_T("bt3"), OnNum3) + DHTML_EVENT_ONCLICK(_T("bt4"), OnNum4) + DHTML_EVENT_ONCLICK(_T("bt5"), OnNum5) + DHTML_EVENT_ONCLICK(_T("bt6"), OnNum6) + DHTML_EVENT_ONCLICK(_T("bt7"), OnNum7) + DHTML_EVENT_ONCLICK(_T("bt8"), OnNum8) + DHTML_EVENT_ONCLICK(_T("bt9"), OnNum9) + DHTML_EVENT_ONCLICK(_T("bt0"), OnNum0) + DHTML_EVENT_ONCLICK(_T("btStar"), OnNum_Star) + DHTML_EVENT_ONCLICK(_T("btSharp"), OnNum_Sharp) + DHTML_EVENT_ONCLICK(_T("backspace"), OnBackspace) + DHTML_EVENT_ONCLICK(_T("btDial"), OnDial) + DHTML_EVENT_ONCLICK(_T("btHup"), OnHup) + DHTML_EVENT_ONCLICK(_T("btCallBack"), OnCallBack) + DHTML_EVENT_ONKEYDOWN(_T("Cgephone2Dlg"),OnHtmlKeyDown) + + //DHTML_EVENT_CLASS(DISPID_HTMLELEMENTEVENTS_ONLOSECAPTURE,_T("dailnum"),OnInputLostFocus) + DHTML_EVENT_CLASS(DISPID_HTMLELEMENTEVENTS_ONCLICK,_T("dailnum"),OnInputFocus) + + //speaker + DHTML_EVENT_CLASS(DISPID_HTMLELEMENTEVENTS_ONMOUSEDOWN, _T("handl_speeker"), OnSpeakerMousedown) + DHTML_EVENT_CLASS(DISPID_HTMLELEMENTEVENTS_ONMOUSEMOVE, _T("handl_speeker"), OnSpeakerMousemove) + DHTML_EVENT_CLASS(DISPID_HTMLELEMENTEVENTS_ONMOUSEMOVE, _T("range_speeker"), OnSpeakerMousemove) + DHTML_EVENT_CLASS(DISPID_HTMLELEMENTEVENTS_ONMOUSEMOVE, _T("hr_speeker"), OnSpeakerMousemove) + DHTML_EVENT_CLASS(DISPID_HTMLELEMENTEVENTS_ONMOUSEUP, _T("handl_speeker"), OnSpeakerMouseup) + DHTML_EVENT_CLASS(DISPID_HTMLELEMENTEVENTS_ONMOUSEUP, _T("range_speeker"), OnSpeakerMouseup) + DHTML_EVENT_CLASS(DISPID_HTMLELEMENTEVENTS_ONMOUSEUP, _T("hr_speeker"), OnSpeakerMouseup) + DHTML_EVENT_CLASS(DISPID_HTMLELEMENTEVENTS_ONMOUSEOUT, _T("range_speeker"), OnSpeakerMouseup) + DHTML_EVENT_CLASS(DISPID_HTMLELEMENTEVENTS_ONDRAGSTART, _T("handl_speeker"), OnMicDrag) + //mic + DHTML_EVENT_CLASS(DISPID_HTMLELEMENTEVENTS_ONMOUSEDOWN, _T("handl_mic"), OnMicMousedown) + DHTML_EVENT_CLASS(DISPID_HTMLELEMENTEVENTS_ONMOUSEMOVE, _T("range_mic"), OnMicMousemove) + DHTML_EVENT_CLASS(DISPID_HTMLELEMENTEVENTS_ONMOUSEMOVE, _T("handl_mic"), OnMicMousemove) + DHTML_EVENT_CLASS(DISPID_HTMLELEMENTEVENTS_ONMOUSEMOVE, _T("hr_mic"), OnMicMousemove) + DHTML_EVENT_CLASS(DISPID_HTMLELEMENTEVENTS_ONMOUSEUP, _T("handl_mic"), OnMicMouseup) + DHTML_EVENT_CLASS(DISPID_HTMLELEMENTEVENTS_ONMOUSEUP, _T("range_mic"), OnMicMouseup) + DHTML_EVENT_CLASS(DISPID_HTMLELEMENTEVENTS_ONMOUSEUP, _T("hr_mic"), OnMicMouseup) + DHTML_EVENT_CLASS(DISPID_HTMLELEMENTEVENTS_ONMOUSEOUT, _T("range_mic"), OnMicMouseup) + DHTML_EVENT_CLASS(DISPID_HTMLELEMENTEVENTS_ONDRAGSTART, _T("handl_mic"), OnMicDrag) +END_DHTML_EVENT_MAP() + + + +CgtalkphoneDlg::CgtalkphoneDlg(CWnd* pParent /*=NULL*/) + : CDHtmlDialog(CgtalkphoneDlg::IDD, CgtalkphoneDlg::IDH, pParent) +{ + m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); + m_freecall = NULL; + m_iStatus = STATUS_INIT; + m_isubStaus = SUBSTATUS_NORMAL; + m_iCount=0; + m_balance = (float)0; + m_rate=(float)0; + m_phonenum = ""; + m_move=0; + m_MonThread = NULL; + bFlashFlag = TRUE; + m_bInputFocus = FALSE; +} + +void CgtalkphoneDlg::DoDataExchange(CDataExchange* pDX) +{ + CDHtmlDialog::DoDataExchange(pDX); + DDX_DHtml_ElementValue(pDX,"txtAccount",m_username); + DDX_DHtml_ElementValue(pDX,"txtPwd",m_pwd); + DDX_DHtml_ElementValue(pDX,"dailnum",m_phonenum); + DDX_DHtml_CheckBox(pDX,"cbRem",m_issave); +} + +BEGIN_MESSAGE_MAP(CgtalkphoneDlg, CDHtmlDialog) + ON_WM_SYSCOMMAND() + //}}AFX_MSG_MAP + ON_WM_CLOSE() + ON_WM_TIMER() + ON_WM_DESTROY() + ON_WM_CTLCOLOR() + ON_WM_SIZE() + ON_MESSAGE(UM_FREESWITCH_EVENT,OnFreeSwitchEvent) + ON_WM_KEYDOWN() + ON_WM_ACTIVATE() + ON_WM_MOUSEACTIVATE() + ON_MESSAGE(UM_MONITOR_EVENT,OnMonitorEvent) + ON_COMMAND(UM_QUIT,OnQuitEvent) + +END_MESSAGE_MAP() + + +// CgtalkphoneDlg message handlers + +BOOL CgtalkphoneDlg::OnInitDialog() +{ + CDHtmlDialog::OnInitDialog(); + + // Add "About..." menu item to system menu. + + // IDM_ABOUTBOX must be in the system command range. + ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX); + ASSERT(IDM_ABOUTBOX < 0xF000); + + ModifyStyle(WS_CAPTION,0); + // Set the icon for this dialog. The framework does this automatically + // when the application's main window is not a dialog + SetIcon(m_hIcon, TRUE); // Set big icon + SetIcon(m_hIcon, FALSE); // Set small icon + + // TODO: Add extra initialization here + mm_event_hwnd = this->m_hWnd; + m_bFirst = TRUE; + + m_skinWin.popMenu.CreatePopupMenu(); + m_skinWin.popMenu.AppendMenu(MF_STRING,UM_QUIT,"quit"); + SetSkin( _T("skin\\google\\theme.ini") ); + GotoUrl(_T("skin\\google\\gtalkphone.htm")); + SetTimer(1,1000,NULL); + char userid[256]; + char password[256]; + FreeswitchCall::get_userinfo(userid,password,m_issave); + if(FreeswitchCall::freeswitch_init()!=0) + { + AfxMessageBox("Freeswitch inital failed!"); + return FALSE; + } + m_username = userid; + if(m_issave) + m_pwd = password; + m_phonenum = "Input phone number here"; + UpdateData(false); + + m_mainVolume.SubclassDlgItem( IDC_SLIDERSPEAKER, this ); + m_mainVolume.Init( MIXERLINE_COMPONENTTYPE_DST_SPEAKERS, + NO_SOURCE, + MIXERCONTROL_CONTROLTYPE_VOLUME, + CMixerFader::MAIN ); + m_mikeVolume.SubclassDlgItem( IDC_SLIDERMIC, this ); + m_mikeVolume.Init( MIXERLINE_COMPONENTTYPE_DST_WAVEIN, + MIXERLINE_COMPONENTTYPE_SRC_MICROPHONE, + MIXERCONTROL_CONTROLTYPE_VOLUME, + CMixerFader::MAIN ); + m_MonThread = new CMonThread(this); + m_MonThread->CreateThread(); + + +#ifdef _DEBUG + FILE *f = fopen(".\\debug.txt","w+"); + fclose(f); +#endif + SetMonitorHWND(m_hWnd); + ShellDll_Hook(); + ReStartGoogle(); + + return TRUE; // return TRUE unless you set the focus to a control +} +void CgtalkphoneDlg::GotoUrl(LPCTSTR pszUrl) +{ + CString strPath,str; + DWORD dwSize=MAX_PATH; + ::GetModuleFileName(NULL,strPath.GetBuffer(MAX_PATH),dwSize); //AfxGetResourceHandle() + strPath.ReleaseBuffer(dwSize); + str=strPath.Left(strPath.ReverseFind(_T('\\'))+1); + ASSERT(pszUrl!=NULL); + if(pszUrl!=NULL) + { + CString strUrl; + strUrl=str+pszUrl; + Navigate(_T("file:///")+strUrl); + } +} + + + +void CgtalkphoneDlg::OnSysCommand(UINT nID, LPARAM lParam) +{ + if ((nID & 0xFFF0) == IDM_ABOUTBOX) + { + CAboutDlg dlgAbout; + dlgAbout.DoModal(); + } + else + { + CDHtmlDialog::OnSysCommand(nID, lParam); + } +} + +// If you add a minimize button to your dialog, you will need the code below +// to draw the icon. For MFC applications using the document/view model, +// this is automatically done for you by the framework. + +void CgtalkphoneDlg::OnPaint() +{ + if (IsIconic()) + { + CPaintDC dc(this); // device context for painting + + SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0); + + // Center icon in client rectangle + int cxIcon = GetSystemMetrics(SM_CXICON); + int cyIcon = GetSystemMetrics(SM_CYICON); + CRect rect; + GetClientRect(&rect); + int x = (rect.Width() - cxIcon + 1) / 2; + int y = (rect.Height() - cyIcon + 1) / 2; + + // Draw the icon + dc.DrawIcon(x, y, m_hIcon); + } + else + { + CDHtmlDialog::OnPaint(); + } +} + +// The system calls this function to obtain the cursor to display while the user drags +// the minimized window. +HCURSOR CgtalkphoneDlg::OnQueryDragIcon() +{ + return static_cast<HCURSOR>(m_hIcon); +} + +HRESULT CgtalkphoneDlg::OnDial(IHTMLElement* pElement) +{ + m_bInputFocus = TRUE; + VARIANT v; + CString sname="disabled"; + pElement->getAttribute(sname.AllocSysString(),0,&v); + if(v.boolVal!=0) return S_OK; + if(!FreeswitchCall::get_load_status()) + return S_OK; + UpdateData(); + CString s; + char callstring[1024]; + s=m_phonenum; + if(STATUS_RING==m_iStatus) + { + if(m_freecall!=NULL) + { + m_freecall->freeswitch_answercall(); + } + + + v.vt = VT_BOOL; + v.boolVal = -1; + SetElemProperty("btDial","disabled",&v); + v.boolVal = 0; + SetElemProperty("btHup","disabled",&v); + //set img + + CString src; + v.vt = VT_BSTR; + src="./res/btDial_disable.gif"; + v.bstrVal = src.AllocSysString(); + SetElemProperty("img_dial","src",&v); + + + v.vt = VT_BSTR; + src="./res/btHold.gif"; + v.bstrVal = src.AllocSysString(); + SetElemProperty("img_hold","src",&v); + PlaySound(NULL,NULL,NULL); + } + else + { + if(s.Find("@")<0) + { + char info[1024]; + char path[1024]; + CString sUser = m_username; + if(sUser.Find("@")<0) + { + sUser += "@gtalkphone.com"; + } + sprintf(path,"/api.cgi?user=%s&pass=%s&act=call&arg0=%s",sUser,m_pwd,s); + https_get(path,info); + int ret = info_get_call(info,m_rate,m_iMin,callstring); + TRACE("%s", callstring); + switch(ret) + { + case ERROR_MEMORY_NOT_ENOUGH: + AfxMessageBox("Out of memory error!"); + return S_OK; + case ERROR_SYSTEM: + AfxMessageBox("Phone number is incorrect!"); + return S_OK; + case ERROR_FAIL_NOFUNDS: + AfxMessageBox("There isn't enough funds !"); + return S_OK; + case ERROR_FAIL_NOPLAN: + AfxMessageBox("The number isn' in there call plan!"); + return S_OK; + case ERROR_FAIL_BADCRED: + AfxMessageBox("Bad Cred!"); + return S_OK; + default: + break; + } + m_isubStaus = SUBSTATUS_NORMAL; + } + else + { + sprintf(callstring,"dingaling/jingle/%s",s); + m_rate = 0; + m_iMin = 60; + m_isubStaus = SUBSTATUS_CALLING_NORATE; + } + if(m_freecall!=NULL) + { + delete m_freecall; + m_freecall =NULL; + } + FreeswitchCall::freeswitch_hangup(); + + + v.vt = VT_BOOL; + v.boolVal = -1; + SetElemProperty("btDial","disabled",&v); + v.boolVal = 0; + SetElemProperty("btHup","disabled",&v); + //set img + + CString src; + v.vt = VT_BSTR; + src="./res/btDial_disable.gif"; + v.bstrVal = src.AllocSysString(); + SetElemProperty("img_dial","src",&v); + + + v.vt = VT_BSTR; + src="./res/btHold.gif"; + v.bstrVal = src.AllocSysString(); + SetElemProperty("img_hold","src",&v); + m_freecall = new FreeswitchCall(callstring); + } + m_iStatus = STATUS_CALLING; + + return S_OK; +} +HRESULT CgtalkphoneDlg::OnCallBack(IHTMLElement* pElement) +{ + + m_bInputFocus = TRUE; + VARIANT v; + CString sname="disabled"; + pElement->getAttribute(sname.AllocSysString(),0,&v); + if(v.boolVal!=0) return S_OK; + if(STATUS_LOGIN != m_iStatus) + return S_OK; + UpdateData(); + CString s; + s=m_phonenum; + if(s.GetLength()<=0) + { + AfxMessageBox("Please input phone num!"); + return S_OK; + } + char info[1024]; + char path[1024]; +// char callstring[1024]; + CString loc_phone_num; + get_phone_num(loc_phone_num); + + CString sUser = m_username; + if(sUser.Find("@")<0) + { + sUser += "@gtalkphone.com"; + } + sprintf(path,"/cbx.cgi?user=%s&pass=%s&phone1=%s&phone2=%s",sUser,m_pwd,loc_phone_num,s); + https_get_callback(path,info); + char *ptr=strstr(info,"</"); + if(ptr!=NULL) (*ptr) = '\0'; + ptr = strstr(info,">"); + if(ptr!=NULL) + ptr ++; + else + ptr = info; + AfxMessageBox(ptr); + + return S_OK; +} +HRESULT CgtalkphoneDlg::OnHup(IHTMLElement* pElement) +{ + + m_bInputFocus = TRUE; + VARIANT v; + CString sname="disabled"; + if(pElement!=NULL) + { + pElement->getAttribute(sname.AllocSysString(),0,&v); + if(v.boolVal!=0) return S_OK; + } + if(!FreeswitchCall::get_load_status()) + return S_OK; + if(m_freecall!=NULL) + { + delete m_freecall; + m_freecall = NULL; + } + FreeswitchCall::freeswitch_hangup(); + v.vt = VT_BOOL; + v.boolVal = 0; + SetElemProperty("btDial","disabled",&v); + v.boolVal = -1; + SetElemProperty("btHup","disabled",&v); + + //set img + + CString src; + v.vt = VT_BSTR; + src="./res/btDial.gif"; + v.bstrVal = src.AllocSysString(); + SetElemProperty("img_dial","src",&v); + + + v.vt = VT_BSTR; + src="./res/btHold_disable.gif"; + v.bstrVal = src.AllocSysString(); + SetElemProperty("img_hold","src",&v); + + if(m_iStatus==STATUS_RING) + { + PlaySound(NULL,NULL,NULL); + } + m_iStatus = STATUS_LOGIN; + + CString s = _T("Idle"); + BSTR bstr = s.AllocSysString(); + SetElementHtml(_T("message"),bstr); + return S_OK; +} +HRESULT CgtalkphoneDlg::OnLogin(IHTMLElement* /*pElement*/) +{ + //https_init(); + UpdateData(); + VARIANT v; + v.vt = VT_BOOL; + v.boolVal = -1; + SetElemProperty("btSign","disabled",&v); + CString s = _T("Connecting..."); + BSTR bstr = s.AllocSysString(); + SetElementHtml(_T("status"),bstr); + FreeswitchCall::freeswitch_login(m_username.GetBuffer(0),m_pwd.GetBuffer(0),m_issave); + m_username.ReleaseBuffer(); + m_pwd.ReleaseBuffer(); + //set login time out + m_iCount = 0; + m_iStatus = STATUS_LOGINING; + return S_OK; +} + +HRESULT CgtalkphoneDlg::OnBackspace(IHTMLElement* /*pElement*/) +{ + UpdateData(); + CString s; + s=m_phonenum; + if(s.GetLength()>0) + { + s.Delete(s.GetLength()-1); + } + //m_phonenum = s; + m_phonenum=""; + UpdateData(false); + + return S_OK; +} +HRESULT CgtalkphoneDlg::OnNum1(IHTMLElement* /*pElement*/) +{ + SetNum("1"); + + + return S_OK; +} + +HRESULT CgtalkphoneDlg::OnNum2(IHTMLElement* /*pElement*/) +{ + SetNum("2"); + + + return S_OK; +} + +HRESULT CgtalkphoneDlg::OnNum3(IHTMLElement* /*pElement*/) +{ + SetNum("3"); + + + return S_OK; +} + +HRESULT CgtalkphoneDlg::OnNum4(IHTMLElement* /*pElement*/) +{ + SetNum("4"); + + + return S_OK; +} +HRESULT CgtalkphoneDlg::OnNum5(IHTMLElement* /*pElement*/) +{ + SetNum("5"); + + + return S_OK; +} + +HRESULT CgtalkphoneDlg::OnNum6(IHTMLElement* /*pElement*/) +{ + SetNum("6"); + + + return S_OK; +} +HRESULT CgtalkphoneDlg::OnNum7(IHTMLElement* /*pElement*/) +{ + SetNum("7"); + + + return S_OK; +} +HRESULT CgtalkphoneDlg::OnNum8(IHTMLElement* /*pElement*/) +{ + SetNum("8"); + + + return S_OK; +} +HRESULT CgtalkphoneDlg::OnNum9(IHTMLElement* /*pElement*/) +{ + SetNum("9"); + + + return S_OK; +} +HRESULT CgtalkphoneDlg::OnNum0(IHTMLElement* /*pElement*/) +{ + SetNum("0"); + + + return S_OK; +} +HRESULT CgtalkphoneDlg::OnNum_Star(IHTMLElement* /*pElement*/) +{ + SetNum("*"); + + + return S_OK; +} +HRESULT CgtalkphoneDlg::OnNum_Sharp(IHTMLElement* /*pElement*/) +{ + SetNum("#"); + + + return S_OK; +} +void CgtalkphoneDlg::SetNum(LPCTSTR sNum) +{ + m_bInputFocus = TRUE; + UpdateData(); + if(m_phonenum.Compare("Input phone number here")==0) + { + m_phonenum=""; + } + CString s; + s=m_phonenum; + if(s.GetLength()>20) return; + if(m_freecall!=NULL) + { + m_freecall->freeswitch_send_dtmf((char*)sNum); + } + s += sNum; + m_phonenum = s; + UpdateData(false); +} +HRESULT CgtalkphoneDlg::OnSetting(IHTMLElement* /*pElement*/) +{ + CsettingsDlg dlg; + dlg.DoModal(); + return 1; +} + +BOOL CgtalkphoneDlg::SetSkin(CString file) +{ + m_skinWin.LoadSkin( file ); + if ( m_bFirst ) + { + m_skinWin.InstallSkin( this ); + m_bFirst = FALSE; + } + SetWindowPos( 0, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE |SWP_FRAMECHANGED ); + return TRUE; + +} + + +void CgtalkphoneDlg::OnTimer(UINT_PTR nIDEvent) +{ + // TODO: Add your message handler code here and/or call default + if(nIDEvent==2) + { + FlashWindow(bFlashFlag); + bFlashFlag = ~bFlashFlag; + } + else + { + CTime t=CTime::GetCurrentTime(); + CString s=t.Format(_T("%m/%d/%Y %H:%M")); + BSTR bstr = s.AllocSysString(); + SetElementHtml(_T("Timer"),bstr); + switch(m_iStatus) + { + case STATUS_LOGIN: + /* + if(m_iCount>=2000) m_iCount = 0; + if(m_iCount==0) + { + char info[1024]; + char path[1024]; + CString sUser = m_username; + if(sUser.Find("@")<0) + { + sUser += "@gtalkphone.com"; + } + sprintf(path,"/api.cgi?user=%s&pass=%s&act=balance",sUser,m_pwd); + https_get(path,info); + float fret = -(info_get_balance(info)); + if(fret<-0.009 || fret>0.009) + { + m_balance = fret; + } + s.Format("Balance:%.2f",m_balance); + bstr = s.AllocSysString(); + SetElementHtml(_T("balance"),bstr); + } + m_iCount ++; + */ + break; + case STATUS_CALLING: + if(m_iCount>=m_iMin) m_iCount = 0; + if(m_iCount==0) + { + m_balance -= m_rate; + s.Format("Balance:%.2f",m_balance); + bstr = s.AllocSysString(); + SetElementHtml(_T("balance"),bstr); + } + m_iCount ++; + break; + case STATUS_LOGINING: + if(m_iCount>=LOGIN_TIMEOUT) + { + m_iCount = 0; + OnLogonFailed(); + AfxMessageBox("Login failed!Connect to server time out!"); + break; + } + else + { + m_iCount ++; + } + break; + default: + break; + } + } + + CDHtmlDialog::OnTimer(nIDEvent); +} + +void CgtalkphoneDlg::OnDestroy() +{ + + KillTimer(1); + if(m_freecall!=NULL) + { + delete m_freecall; + m_freecall = NULL; + } + //FreeswitchCall::freeswitch_logout(); + FreeswitchCall::freeswitch_shutdown(); + https_shutdown(); + if(m_MonThread!=NULL) + { + delete m_MonThread; + m_MonThread = NULL; + } + ShellDll_Unhook(); + CDHtmlDialog::OnDestroy(); + + // TODO: Add your message handler code here +} + +void CgtalkphoneDlg::SetElemProperty(LPCTSTR sElemid,LPCTSTR sProperty,VARIANT *v) +{ + + CComPtr<IDispatch> spdispElem; + GetElement(sElemid,&spdispElem); + if (spdispElem) + { + + DISPID dispid; + USES_CONVERSION; + LPOLESTR pPropName = (LPOLESTR)T2COLE(sProperty); + HRESULT hr = spdispElem->GetIDsOfNames(IID_NULL, &pPropName, 1, LOCALE_USER_DEFAULT, &dispid); + if (SUCCEEDED(hr)) + { + SetElementProperty(sElemid,dispid,v); + } + } +} +void CgtalkphoneDlg::GetElemFocus(LPCTSTR sElemid) +{ + IHTMLElement* spdispElem; + GetElement(sElemid,&spdispElem); + if (spdispElem) + { + IHTMLElement2* spdispElem2; + spdispElem->QueryInterface(IID_IHTMLElement2, (void**)&spdispElem2); + if(spdispElem2) + { + spdispElem2->focus(); + } + } + m_bInputFocus = TRUE; + +} +void CgtalkphoneDlg::SetElemVisible(LPCTSTR sElemid,BOOL b) +{ + + CComPtr<IHTMLElement> spdispElem; + GetElement(sElemid,&spdispElem); + CString s; + if(b) + { + s = "visible"; + } + else + { + s = "hidden"; + } + if (spdispElem) + { + CComPtr<IHTMLStyle> styleElem; + spdispElem->get_style(&styleElem); + if(styleElem) + { + BSTR bstr = s.AllocSysString(); + styleElem->put_visibility(bstr); + } + } +} + +STDMETHODIMP CgtalkphoneDlg::GetExternal( + /* [out] */ IDispatch **ppDispatch) +{ + *ppDispatch = ((CgtalkphoneApp *)AfxGetApp())->m_external.GetIDispatch(TRUE); + return S_OK; +} +HBRUSH CgtalkphoneDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) +{ + CDHtmlDialog::OnCtlColor(pDC, pWnd, nCtlColor); + CBrush brush; + brush.CreateSolidBrush(RGB(255,255,255)); + // TODO: Change any attributes of the DC here + if(pWnd==this) + return brush; + else + // TODO: Return a different brush if the default is not desired + return brush; +} + +void CgtalkphoneDlg::OnSize(UINT nType, int cx, int cy) +{ + CDHtmlDialog::OnSize(nType, cx, cy); + // TODO: Add your message handler code here +} + +void CgtalkphoneDlg::OnQuitEvent() +{ + m_skinWin.m_bClose = TRUE; + if(m_MonThread!=NULL) + { + + ::SendMessage(m_MonThread->m_pMainWnd->m_hWnd,WM_CLOSE, 0, 0 ); + //delete m_MonThread; + m_MonThread = NULL; + } + PostMessage( WM_CLOSE, 0, 0 ); + return ; +} +LRESULT CgtalkphoneDlg::OnMonitorEvent(WPARAM wp,LPARAM lp) +{ + + SetElementHtml(_T("balance"),(BSTR)lp); + return 0; +} +LRESULT CgtalkphoneDlg::OnFreeSwitchEvent(WPARAM wp,LPARAM lp) +{ + switch_event_t *event = (switch_event_t *)lp; + if(event==NULL) return 0; + while(event->next!=NULL) + { + event = event->next; + } + switch(event->event_id) + { + case SWITCH_EVENT_CUSTOM: + if(!strcmp(event->subclass->name,DL_EVENT_LOGIN_SUCCESS)) + { + OnLogonSuccess(); + } + else if(!strcmp(event->subclass->name,DL_EVENT_LOGIN_FAILURE)) + { + OnLogonFailed(); + AfxMessageBox("Login failed!The user name or password is incorrect!"); + } + else if(!strcmp(event->subclass->name,DL_EVENT_MESSAGE)) + { + OnJingleMsg(); + } + else if(!strcmp(event->subclass->name,PA_EVENT_RING)) + { + if(m_iStatus!=STATUS_RING) + { + PlaySound("./skin/google/res/ring.wav",NULL,SND_FILENAME|SND_ASYNC|SND_LOOP); + SetFlashWindow(); + char* scallid = switch_event_get_header(event,PA_EVENT_INFO); + if(scallid!=NULL) + { + int icallid = atoi(scallid); + if(m_freecall!=NULL) + { + delete m_freecall; + m_freecall =NULL; + } + m_freecall = new FreeswitchCall(icallid); + + VARIANT v; + v.vt = VT_BOOL; + v.boolVal = 0; + SetElemProperty("btDial","disabled",&v); + v.boolVal = 0; + SetElemProperty("btHup","disabled",&v); + + CString src; + v.vt = VT_BSTR; + src="./res/btDial.gif"; + v.bstrVal = src.AllocSysString(); + SetElemProperty("img_dial","src",&v); + + + v.vt = VT_BSTR; + src="./res/btHold.gif"; + v.bstrVal = src.AllocSysString(); + SetElemProperty("img_hold","src",&v); + m_iStatus = STATUS_RING; + } + } + } + break; + case SWITCH_EVENT_CHANNEL_CREATE: + OnChannelCreate(); + break; + case SWITCH_EVENT_CHANNEL_DESTROY: + OnChannelDestroy(); + break; + case SWITCH_EVENT_CHANNEL_STATE: + break; + case SWITCH_EVENT_CHANNEL_ANSWER: + OnChannelAnswer(); + break; + case SWITCH_EVENT_CHANNEL_HANGUP: + OnChannelHangup(); + break; + case SWITCH_EVENT_CHANNEL_EXECUTE: + break; + case SWITCH_EVENT_CHANNEL_BRIDGE: + break; + case SWITCH_EVENT_CHANNEL_UNBRIDGE: + break; + case SWITCH_EVENT_API: + break; + case SWITCH_EVENT_INBOUND_CHAN: + break; + case SWITCH_EVENT_OUTBOUND_CHAN: + break; + default: + break; + } + return 0; +} +void CgtalkphoneDlg::OnLogonSuccess() +{ + VARIANT v; + SetElemVisible("dialpanel",TRUE); + v.vt = VT_BOOL; + v.boolVal = 0; + SetElemProperty("btDial","disabled",&v); + v.boolVal = -1; + SetElemProperty("btHup","disabled",&v); + v.boolVal = 0; + SetElemProperty("btCallBack","disabled",&v); + CString s = _T("Online"); + BSTR bstr = s.AllocSysString(); + SetElementHtml(_T("status"),bstr); + //set img + + CString src; + v.vt = VT_BSTR; + src="./res/btDial.gif"; + v.bstrVal = src.AllocSysString(); + SetElemProperty("img_dial","src",&v); + + + v.vt = VT_BSTR; + src="./res/btHold_disable.gif"; + v.bstrVal = src.AllocSysString(); + SetElemProperty("img_hold","src",&v); + + v.vt = VT_BSTR; + src="./res/btReDial.gif"; + v.bstrVal = src.AllocSysString(); + SetElemProperty("img_redial","src",&v); + if(m_MonThread!=NULL) + m_MonThread->m_MoniWnd.m_iCount = 0; + m_iCount = 0; + m_iStatus = STATUS_LOGIN; + GetElemFocus("dailnum"); + +} +void CgtalkphoneDlg::OnLogonFailed() +{ + VARIANT v; + SetElemVisible("dialpanel",FALSE); + v.vt = VT_BOOL; + v.boolVal = -1; + SetElemProperty("btDial","disabled",&v); + v.boolVal = -1; + SetElemProperty("btHup","disabled",&v); + v.boolVal = -1; + SetElemProperty("btCallBack","disabled",&v); + v.boolVal = 0; + SetElemProperty("btSign","disabled",&v); + //set img + + CString src; + v.vt = VT_BSTR; + src="./res/btDial_disable.gif"; + v.bstrVal = src.AllocSysString(); + SetElemProperty("img_dial","src",&v); + + + v.vt = VT_BSTR; + src="./res/btHold_disable.gif"; + v.bstrVal = src.AllocSysString(); + SetElemProperty("img_hold","src",&v); + + v.vt = VT_BSTR; + src="./res/btReDial_disable.gif"; + v.bstrVal = src.AllocSysString(); + SetElemProperty("img_redial","src",&v); + CString s = _T("Offline"); + BSTR bstr = s.AllocSysString(); + SetElementHtml(_T("status"),bstr); + if(m_freecall!=NULL) + { + delete m_freecall; + m_freecall = NULL; + } + //FreeswitchCall::freeswitch_shutdown(); + m_iStatus = STATUS_INIT; +} +void CgtalkphoneDlg::OnJingleMsg() +{ +} +void CgtalkphoneDlg::OnChannelCreate() +{ + CString s = _T("Call Active"); + BSTR bstr = s.AllocSysString(); + SetElementHtml(_T("message"),bstr); +} +void CgtalkphoneDlg::OnChannelDestroy() +{ + CString s = _T("Call Disconnected"); + BSTR bstr = s.AllocSysString(); + SetElementHtml(_T("message"),bstr); + OnHup(NULL); + //m_iStatus = STATUS_LOGIN; +} +void CgtalkphoneDlg::OnChannelAnswer() +{ + CString s = _T("Call in Progress"); + BSTR bstr = s.AllocSysString(); + SetElementHtml(_T("message"),bstr); + m_iStatus = STATUS_CALLING; + if(m_MonThread!=NULL) + m_MonThread->m_MoniWnd.m_iCount = 0; + m_iCount = 1; +} +void CgtalkphoneDlg::OnChannelHangup() +{ + /*CString s = _T("Channel Hangup"); + BSTR bstr = s.AllocSysString(); + SetElementHtml(_T("message"),bstr); + m_iStatus = STATUS_LOGIN; + OnHup(NULL);*/ +} + +void CgtalkphoneDlg::SetMicPos(int pos) +{ + m_mikeVolume.SetPos(pos); +} +void CgtalkphoneDlg::SetSoundPos(int pos) +{ + m_mainVolume.SetPos(pos); +} + +void CgtalkphoneDlg::OnClose() +{ + // TODO: Add your message handler code here and/or call default + + CDHtmlDialog::OnClose(); +} + +HRESULT STDMETHODCALLTYPE CgtalkphoneDlg::ShowContextMenu(DWORD /*dwID*/, POINT *ppt, IUnknown* /*pcmdtReserved*/, IDispatch* /*pdispReserved*/) +{ + /*CMenu ctxMenu; + + m_strCtxFileName.Empty(); + if (m_spCurrElement != NULL) + { + + CComBSTR bstrFileName; + m_spCurrElement->get_innerText(&bstrFileName); + if (bstrFileName) + m_strCtxFileName = bstrFileName; + } + ctxMenu.LoadMenu(IDR_CONTEXT_MENU); + + ctxMenu.GetSubMenu(0)->EnableMenuItem(ID_CONTEXT_PROPERTIES, MF_BYCOMMAND | + ((m_spCurrElement==NULL) ? MF_GRAYED : MF_ENABLED)); + ctxMenu.GetSubMenu(0)->TrackPopupMenu(TPM_LEFTALIGN, ppt->x, ppt->y, this, NULL);*/ + return S_OK; +} +HRESULT CgtalkphoneDlg::OnSignout(IHTMLElement* /*pElement*/) +{ + // TODO: Add your message handler code here and/or call default + OnLogonFailed(); + FreeswitchCall::freeswitch_logout(); + return 1; +} + +HRESULT CgtalkphoneDlg::OnSpeakerMousedown(IHTMLElement *phtmlElement) +{ + + IHTMLStyle *phtmlStyle; + phtmlElement->get_style(&phtmlStyle); + if (phtmlStyle) + { + /*VARIANT varColor; + varColor.vt = VT_I4; + varColor.lVal = 0xff0000; + phtmlStyle->put_textDecorationUnderline(VARIANT_TRUE); + phtmlStyle->put_color(varColor); + phtmlStyle->put_cursor(L"hand");*/ + long p; + POINT pot; + GetCursorPos(&pot); + phtmlStyle->get_pixelLeft(&p); + x = pot.x - p; + phtmlStyle->get_pixelTop(&p); + y = pot.y - p; + m_move = 1; + phtmlStyle->Release(); + } + return S_OK; +} + +HRESULT CgtalkphoneDlg::OnSpeakerMousemove(IHTMLElement *phtmlElement) +{ + + if (m_move) { + + IHTMLStyle *phtmlStyle; + IHTMLElement *pelemt; + GetElement("handl_speeker",&pelemt); + pelemt->get_style(&phtmlStyle); + if (phtmlStyle) + { + /*VARIANT varColor; + varColor.vt = VT_I4; + varColor.lVal = 0xff0000;*/ + long p; + POINT pot; + GetCursorPos(&pot); + p = pot.x - x; + + IHTMLStyle *phrStyle; + IHTMLElement *phrelemt; + GetElement("hr_speeker",&phrelemt); + phrelemt->get_style(&phrStyle); + if (phrStyle) + { + long hr_left,hr_with; + phrStyle->get_pixelLeft(&hr_left); + phrStyle->get_pixelWidth(&hr_with); + if(p>hr_left-2 && p<hr_left+hr_with-5) + { + phtmlStyle->put_pixelLeft(p); + SetSoundPos((int)((p - (hr_left-2))*100/(hr_with-3))); + } + phrStyle->Release(); + } + //p = pot.y - y; + //phtmlStyle->put_pixelTop(p); + phtmlStyle->Release(); + } + //m_spCurrElement = phtmlElement; + } + + return S_OK; +} + +HRESULT CgtalkphoneDlg::OnSpeakerMouseup(IHTMLElement *phtmlElement) +{ + m_move = 0; + + return S_OK; +} + +HRESULT CgtalkphoneDlg::OnMicMousedown(IHTMLElement *phtmlElement) +{ + + IHTMLStyle *phtmlStyle; + phtmlElement->get_style(&phtmlStyle); + if (phtmlStyle) + { + /*VARIANT varColor; + varColor.vt = VT_I4; + varColor.lVal = 0xff0000; + phtmlStyle->put_textDecorationUnderline(VARIANT_TRUE); + phtmlStyle->put_color(varColor); + phtmlStyle->put_cursor(L"hand");*/ + long p; + POINT pot; + GetCursorPos(&pot); + phtmlStyle->get_pixelLeft(&p); + x = pot.x - p; + phtmlStyle->get_pixelTop(&p); + y = pot.y - p; + m_move = 1; + phtmlStyle->Release(); + } + //return S_OK; + return 1; +} + +HRESULT CgtalkphoneDlg::OnMicMousemove(IHTMLElement *phtmlElement) +{ + + if (m_move) { + //dragObj.style.left = window.event.x - clickleft + //dragObj.style.top = window.event.y - clicktop + + IHTMLStyle *phtmlStyle; + IHTMLElement *pelemt; + GetElement("handl_mic",&pelemt); + pelemt->get_style(&phtmlStyle); + if (phtmlStyle) + { + /*VARIANT varColor; + varColor.vt = VT_I4; + varColor.lVal = 0xff0000;*/ + long p; + POINT pot; + GetCursorPos(&pot); + p = pot.x - x; + + IHTMLStyle *phrStyle; + IHTMLElement *phrelemt; + GetElement("hr_mic",&phrelemt); + phrelemt->get_style(&phrStyle); + if (phrStyle) + { + long hr_left,hr_with; + phrStyle->get_pixelLeft(&hr_left); + phrStyle->get_pixelWidth(&hr_with); + if(p>hr_left-2 && p<hr_left+hr_with-5) + { + phtmlStyle->put_pixelLeft(p); + + SetMicPos((int)((p - (hr_left-2))*100/(hr_with-3))); + } + phrStyle->Release(); + } + //p = pot.y - y; + //phtmlStyle->put_pixelTop(p); + phtmlStyle->Release(); + } + //m_spCurrElement = phtmlElement; + } + + return S_OK; +} + +HRESULT CgtalkphoneDlg::OnMicMouseup(IHTMLElement *phtmlElement) +{ + m_move = 0; + + return S_OK; +} + +HRESULT CgtalkphoneDlg::OnMicDrag(IHTMLElement *phtmlElement) +{ + return 1; +} +HRESULT CgtalkphoneDlg::OnHtmlKeyDown(IHTMLElement *phtmlElement) +{ + return 1; +} + +void CgtalkphoneDlg::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags) +{ + // TODO: Add your message handler code here and/or call default + + CDHtmlDialog::OnKeyDown(nChar, nRepCnt, nFlags); +} + +BOOL CgtalkphoneDlg::PreTranslateMessage(MSG* pMsg) +{ + // TODO: Add your specialized code here and/or call the base class + if((WM_LBUTTONUP == pMsg->message)||(WM_KEYDOWN == pMsg->message)) + { + m_bInputFocus = FALSE; + } + if (pMsg->message == WM_KEYDOWN) + { + if(m_iStatus == STATUS_INIT) + { + if(pMsg->wParam==13) + {//enter key + OnLogin(NULL); + return TRUE; + //pMsg->wParam = 9; + } + } + else + { + if(pMsg->wParam==13) + { + CComPtr<IHTMLElement> spdispElem; + GetElement("btDial",&spdispElem); + OnDial(spdispElem); + return TRUE; + } + GetElemFocus("dailnum"); + } + + } + BOOL ret = CDHtmlDialog::PreTranslateMessage(pMsg); + + if((WM_LBUTTONUP == pMsg->message)||(WM_KEYDOWN == pMsg->message)) + { + + CComPtr<IDispatch> spdispElem; + GetElement("dailnum",&spdispElem); + if (spdispElem) + { + DISPID dispid; + USES_CONVERSION; + CString sname="disabled"; + LPOLESTR pPropName = (LPOLESTR)T2COLE(sname); + HRESULT hr = spdispElem->GetIDsOfNames(IID_NULL, &pPropName, 1, LOCALE_USER_DEFAULT, &dispid); + if (SUCCEEDED(hr)) + { + VARIANT v = GetElementProperty("dailnum",dispid); + if(m_bInputFocus) + { + if(v.boolVal!=0) + { + SetElemVisible("imgbackspace",TRUE); + v.vt = VT_BOOL; + v.boolVal = 0; + SetElemProperty("dailnum","disabled",&v); + UpdateData(); + + if(m_phonenum.Compare("Input phone number here")==0) + { + m_phonenum=""; + } + UpdateData(false); + } + } + else + { + + if(v.boolVal==0) + { + SetElemVisible("imgbackspace",FALSE); + v.vt = VT_BOOL; + v.boolVal = -1; + SetElemProperty("dailnum","disabled",&v); + m_phonenum = "Input phone number here"; + UpdateData(false); + } + } + } + } + } + + return ret; +} +HRESULT CgtalkphoneDlg::OnInputLostFocus(IHTMLElement *phtmlElement) +{ + return S_OK; +} +HRESULT CgtalkphoneDlg::OnInputFocus(IHTMLElement *phtmlElement) +{ + if(m_iStatus != STATUS_INIT) + { + m_bInputFocus = TRUE; + } + return S_OK; +} +void CgtalkphoneDlg::SetFlashWindow() +{ + if(GetActiveWindow() != this || GetForegroundWindow() != this) + SetTimer(2,1000,NULL); +} +void CgtalkphoneDlg::OnActivate(UINT nState, CWnd* pWndOther, BOOL bMinimized) +{ + KillTimer(2); + CDHtmlDialog::OnActivate(nState, pWndOther, bMinimized); + + // TODO: Add your message handler code here +} + +int CgtalkphoneDlg::OnMouseActivate(CWnd* pDesktopWnd, UINT nHitTest, UINT message) +{ + // TODO: Add your message handler code here and/or call default + + KillTimer(2); + return CDHtmlDialog::OnMouseActivate(pDesktopWnd, nHitTest, message); +} +/*************for google plugin***********************************************************/ +void CgtalkphoneDlg::ReStartGoogle() +{ + HWND hwnd = ::FindWindow(_T("Google Talk - Google Xmpp Client GUI Window"),NULL); + if(hwnd==NULL) + { + hwnd = ::FindWindow(NULL,_T("Google Talk")); + } + if(hwnd!=NULL) + { + ::SendMessage(hwnd,WM_CLOSE,NULL,NULL); + } + + CString sdir = GetExePath(); + CString sexe = sdir + _T("\\googletalk.exe"); + TRACE(sexe); + ShellExecute(NULL,_T("open"),sexe,_T("/autostart"),sdir,SW_MINIMIZE); + + +} +CString CgtalkphoneDlg::GetExePath() +{ + DWORD dwType=0,dwLen=MAX_PATH; + TCHAR szValue[MAX_PATH]; + memset(szValue,0,MAX_PATH); + HKEY vhKey; + if(RegOpenKey(HKEY_CURRENT_USER,_T("Software\\Google\\Google Talk\\Autoupdate"),&vhKey)!=ERROR_SUCCESS) + { + return CString(_T("")); + } + if(vhKey == NULL) return CString(_T("")); + if(RegQueryValueEx(vhKey,_T("AppPath"),0,&dwType,(BYTE*)szValue,&dwLen)!=ERROR_SUCCESS) + { + RegCloseKey(vhKey); + return CString(_T("")); + } + RegCloseKey(vhKey); + return CString(szValue); +} + Added: freeswitch/trunk/gtalkphone/ui/source/settingsDlg.cpp ============================================================================== --- (empty file) +++ freeswitch/trunk/gtalkphone/ui/source/settingsDlg.cpp Wed Aug 30 11:21:42 2006 @@ -0,0 +1,138 @@ +// settingsDlg.cpp : implementation file +// + +#include "stdafx.h" +#include "gtalkphone.h" +#include "settingsDlg.h" + +// CsettingsDlg dialog + +IMPLEMENT_DYNCREATE(CsettingsDlg, CDHtmlDialog) + +CsettingsDlg::CsettingsDlg(CWnd* pParent /*=NULL*/) + : CDHtmlDialog(CsettingsDlg::IDD, CsettingsDlg::IDH, pParent) +{ + +} + +CsettingsDlg::~CsettingsDlg() +{ +} + +BOOL CsettingsDlg::OnInitDialog() +{ + CDHtmlDialog::OnInitDialog(); + +// SetSkin( _T("skin\\google\\theme.ini") ); + + m_skinWin.LoadSkin( _T("skin\\google\\theme.ini") ); + m_skinWin.InstallSkin( this ); + SetWindowPos( 0, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE |SWP_FRAMECHANGED ); +// GotoUrl(_T("skin\\google\\gtalkphone.htm")); + LPCTSTR pszUrl = _T("skin\\google\\settingsDlg.htm"); + CString strPath,str; + DWORD dwSize=MAX_PATH; + ::GetModuleFileName(NULL,strPath.GetBuffer(MAX_PATH),dwSize); //AfxGetResourceHandle() + strPath.ReleaseBuffer(dwSize); + str=strPath.Left(strPath.ReverseFind(_T('\\'))+1); + ASSERT(pszUrl!=NULL); + if(pszUrl!=NULL) + { + CString strUrl; + strUrl=str+pszUrl; + Navigate(_T("file:///")+strUrl); + } + get_phone_num(m_phonenum); + UpdateData(false); + return TRUE; // return TRUE unless you set the focus to a control +} + +BEGIN_MESSAGE_MAP(CsettingsDlg, CDHtmlDialog) +END_MESSAGE_MAP() + +BEGIN_DHTML_EVENT_MAP(CsettingsDlg) + DHTML_EVENT_ONCLICK(_T("btOK"), OnButtonOK) + DHTML_EVENT_ONCLICK(_T("btCancel"), OnButtonCancel) +END_DHTML_EVENT_MAP() + + + +// CsettingsDlg message handlers + +HRESULT CsettingsDlg::OnButtonOK(IHTMLElement* /*pElement*/) +{ + UpdateData(); + set_phone_num(m_phonenum); + OnOK(); + return S_OK; +} + +HRESULT CsettingsDlg::OnButtonCancel(IHTMLElement* /*pElement*/) +{ + OnCancel(); + return S_OK; +} + +void CsettingsDlg::DoDataExchange(CDataExchange* pDX) +{ + CDHtmlDialog::DoDataExchange(pDX); + //// for html ddx + DDX_DHtml_ElementValue(pDX,"phonenum",m_phonenum); +} +void get_phone_num(CString &s_phone_num) +{ + /*FILE *f; + f = fopen("debug.log","w+"); + if(!f) + { + return ; + } + fputs("get_phone_num begin\n",f);*/ + HKEY hKey=NULL; + DWORD dwLen=1024; + TCHAR szKey[255]; + TCHAR sztmp[1024]; + LONG lRet = 0; + DWORD dwType =REG_SZ; + sprintf(szKey,_T("SOFTWARE\\GtalkPhone")); + int ret = RegCreateKeyEx(HKEY_CURRENT_USER,szKey,0,NULL,REG_OPTION_NON_VOLATILE,KEY_ALL_ACCESS,NULL,&hKey,&dwLen); + if(ret!=ERROR_SUCCESS) + { + //fprintf(f,"error:%d\n",ret); + //fclose(f); + return ; + } + dwLen=1024; + lRet = RegQueryValueEx(hKey,_T("PHONENUM"),0,&dwType,(LPBYTE)sztmp,&dwLen); + if(lRet==ERROR_SUCCESS) + s_phone_num = sztmp; + else + s_phone_num = ""; + //fprintf(f,"RegQueryValueEx %s ret=%d\n",s_phone_num,lRet); + RegCloseKey(hKey); + //fputs("get_phone_num end\n",f); + //fclose(f); +} +void CsettingsDlg::set_phone_num(CString s_phone_num) +{ + HKEY hKey=NULL; + DWORD dwLen=255; + TCHAR szKey[255]; + TCHAR sztmp[255]; + BOOL bRet = 0; + DWORD dwType = 0; + sprintf(szKey,_T("SOFTWARE\\GtalkPhone")); + if(RegCreateKeyEx(HKEY_CURRENT_USER,szKey,0,NULL,REG_OPTION_NON_VOLATILE,KEY_ALL_ACCESS,NULL,&hKey,&dwLen)!=ERROR_SUCCESS) + { + return ; + } + dwType = REG_SZ; + strcpy(sztmp,s_phone_num); + dwLen=255; + if(RegSetValueEx(hKey,_T("PHONENUM"),0,dwType,(LPBYTE)sztmp,dwLen)!=ERROR_SUCCESS) + { + bRet = 1; + } + s_phone_num.ReleaseBuffer(); + RegCloseKey(hKey); +} \ No newline at end of file
participants (1)
-
Freeswitch SVN