[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
Freeswitch SVN
zebra at freeswitch.org
Wed Aug 30 11:21:43 EDT 2006
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 at 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 at 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 at 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 at 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 at 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 at 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 at 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 at 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
More information about the Freeswitch-svn
mailing list