diff --git a/sflphone-gtk/pixmaps/Makefile.am b/sflphone-gtk/pixmaps/Makefile.am index 05dd51bf392d2dd916004f1ed2c3cb9fbf58b691..dddc174e5fbb57de5efb782d4f8b623d93555658 100644 --- a/sflphone-gtk/pixmaps/Makefile.am +++ b/sflphone-gtk/pixmaps/Makefile.am @@ -2,6 +2,6 @@ icondir = $(datadir)/pixmaps icon_DATA = sflphone.png -buttons_DATA = accept.svg current.svg transfert.svg hang_up.svg hold.svg unhold.svg refuse.svg call.svg ring.svg dial.svg mic.svg mic_25.svg mic_50.svg mic_75.svg speaker.svg speaker_25.svg speaker_50.svg speaker_75.svg fail.svg incoming.svg outgoing.svg missed.svg mailbox.svg busy.svg icon_accept.svg icon_hold.svg icon_unhold.svg icon_hangup.svg icon_call.svg icon_dialpad.svg icon_volume.svg icon_dialpad_off.svg icon_volume_off.svg history.svg history2.svg sflphone.png stock_person.svg +buttons_DATA = accept.svg current.svg transfert.svg hang_up.svg hold.svg unhold.svg refuse.svg call.svg ring.svg dial.svg mic.svg mic_25.svg mic_50.svg mic_75.svg speaker.svg speaker_25.svg speaker_50.svg speaker_75.svg fail.svg incoming.svg outgoing.svg missed.svg mailbox.svg busy.svg icon_accept.svg icon_hold.svg icon_unhold.svg icon_hangup.svg icon_call.svg icon_dialpad.svg icon_volume.svg icon_dialpad_off.svg icon_volume_off.svg history.svg history2.svg sflphone.png stock_person.svg rec_call.svg record.svg icon_rec.svg buttonsdir = $(datadir)/sflphone EXTRA_DIST = $(buttons_DATA) $(icon_DATA) diff --git a/sflphone-gtk/pixmaps/icon_rec.svg b/sflphone-gtk/pixmaps/icon_rec.svg new file mode 100644 index 0000000000000000000000000000000000000000..309aa07807f19d8345afcc68129121c6a91cc9a3 --- /dev/null +++ b/sflphone-gtk/pixmaps/icon_rec.svg @@ -0,0 +1,1677 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:xlink="http://www.w3.org/1999/xlink" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="16" + height="16" + id="svg2" + sodipodi:version="0.32" + inkscape:version="0.46" + version="1.0" + sodipodi:docbase="/home-local/plbeaudoin/SFLPhone/sflphone/sflphone-gtk/pixmaps" + sodipodi:docname="icon_rec.svg" + inkscape:output_extension="org.inkscape.output.svg.inkscape"> + <defs + id="defs4"> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4269" + id="linearGradient2491" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(-1,0,0,1,32.04188,-2.86473)" + x1="2.0651877" + y1="12.625902" + x2="6.8378897" + y2="13.920053" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4269" + id="linearGradient2489" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(0.426158,-2.762136)" + x1="7.8517423" + y1="15.912388" + x2="7.1114841" + y2="11.597325" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4183" + id="linearGradient2487" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-0.947018,-0.885198)" + x1="31.692968" + y1="11.264216" + x2="23.888865" + y2="13.35532" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4183" + id="linearGradient2485" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(1.262691,-1.100752)" + x1="10.57493" + y1="12.115559" + x2="-0.68574232" + y2="12.115559" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4183" + id="linearGradient2483" + gradientUnits="userSpaceOnUse" + x1="15.647213" + y1="2.7028866" + x2="14.013638" + y2="10.576721" /> + <linearGradient + inkscape:collect="always" + id="linearGradient2433"> + <stop + style="stop-color:#008000;stop-opacity:1;" + offset="0" + id="stop2435" /> + <stop + style="stop-color:#008000;stop-opacity:0;" + offset="1" + id="stop2437" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient2433" + id="linearGradient2439" + x1="2.965755" + y1="-0.80084854" + x2="32.578228" + y2="16.739393" + gradientUnits="userSpaceOnUse" /> + <inkscape:perspective + sodipodi:type="inkscape:persp3d" + inkscape:vp_x="0 : 8 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_z="16 : 8 : 1" + inkscape:persp3d-origin="8 : 5.3333333 : 1" + id="perspective4283" /> + <linearGradient + id="linearGradient3370"> + <stop + style="stop-color:#d7d7d7;stop-opacity:1;" + offset="0" + id="stop3372" /> + <stop + style="stop-color:#7c7c7c;stop-opacity:1;" + offset="1" + id="stop3374" /> + </linearGradient> + <linearGradient + id="linearGradient3362"> + <stop + style="stop-color:#000000;stop-opacity:1;" + offset="0" + id="stop3364" /> + <stop + style="stop-color:#ffffff;stop-opacity:1;" + offset="1" + id="stop3366" /> + </linearGradient> + <linearGradient + id="linearGradient4045"> + <stop + style="stop-color:#ffffff;stop-opacity:0" + offset="0" + id="stop4047" /> + <stop + style="stop-color:#fcfbcb;stop-opacity:1" + offset="1" + id="stop4049" /> + </linearGradient> + <linearGradient + id="linearGradient4269"> + <stop + style="stop-color:#1db000;stop-opacity:1;" + offset="0" + id="stop4271" /> + <stop + style="stop-color:#1db000;stop-opacity:0;" + offset="1" + id="stop4273" /> + </linearGradient> + <linearGradient + id="linearGradient4183"> + <stop + id="stop4185" + offset="0" + style="stop-color:#1db000;stop-opacity:1;" /> + <stop + id="stop4187" + offset="1" + style="stop-color:#0f5f00;stop-opacity:1;" /> + </linearGradient> + <linearGradient + id="linearGradient4167"> + <stop + style="stop-color:#80000e;stop-opacity:1;" + offset="0" + id="stop4169" /> + <stop + style="stop-color:#b00014;stop-opacity:0;" + offset="1" + id="stop4171" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4183" + id="linearGradient2224" + x1="16.826796" + y1="6.7288713" + x2="27.5625" + y2="22.512505" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.875025,0,0,0.875025,0.666703,0.177907)" /> + <linearGradient + y2="13.920053" + x2="6.8378897" + y1="12.625902" + x1="2.0651877" + gradientTransform="matrix(-1,0,0,1,32.04188,-2.86473)" + gradientUnits="userSpaceOnUse" + id="linearGradient1388" + xlink:href="#linearGradient4269" + inkscape:collect="always" /> + <linearGradient + gradientTransform="translate(0.426158,-2.762136)" + gradientUnits="userSpaceOnUse" + y2="13.920053" + x2="6.8378897" + y1="12.625902" + x1="2.0651877" + id="linearGradient1386" + xlink:href="#linearGradient4269" + inkscape:collect="always" /> + <linearGradient + gradientUnits="userSpaceOnUse" + y2="10.576721" + x2="14.013638" + y1="2.7028866" + x1="15.647213" + id="linearGradient1384" + xlink:href="#linearGradient4183" + inkscape:collect="always" /> + <linearGradient + gradientTransform="translate(-0.947018,-0.885198)" + gradientUnits="userSpaceOnUse" + y2="12.535715" + x2="31.31678" + y1="12.535715" + x1="24.397505" + id="linearGradient1382" + xlink:href="#linearGradient4183" + inkscape:collect="always" /> + <linearGradient + gradientTransform="translate(1.262691,-1.100752)" + gradientUnits="userSpaceOnUse" + y2="12.825893" + x2="7.9239235" + y1="12.825893" + x1="1.0046476" + id="linearGradient1380" + xlink:href="#linearGradient4183" + inkscape:collect="always" /> + <linearGradient + id="linearGradient1374"> + <stop + id="stop1376" + offset="0" + style="stop-color:#80000e;stop-opacity:1;" /> + <stop + id="stop1378" + offset="1" + style="stop-color:#b00014;stop-opacity:0;" /> + </linearGradient> + <linearGradient + id="linearGradient1368"> + <stop + style="stop-color:#26b000;stop-opacity:1;" + offset="0" + id="stop1370" /> + <stop + style="stop-color:#145f00;stop-opacity:1;" + offset="1" + id="stop1372" /> + </linearGradient> + <linearGradient + id="linearGradient1362"> + <stop + id="stop1364" + offset="0" + style="stop-color:#26b000;stop-opacity:1;" /> + <stop + id="stop1366" + offset="1" + style="stop-color:#26b000;stop-opacity:0;" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4183" + id="linearGradient1406" + gradientUnits="userSpaceOnUse" + x1="15.647213" + y1="2.7028866" + x2="14.013638" + y2="10.576721" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4183" + id="linearGradient1408" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(1.262691,-1.100752)" + x1="10.57493" + y1="12.115559" + x2="-0.68574232" + y2="12.115559" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4183" + id="linearGradient1410" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-0.947018,-0.885198)" + x1="31.692968" + y1="11.264216" + x2="23.888865" + y2="13.35532" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4269" + id="linearGradient1412" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(0.426158,-2.762136)" + x1="7.8517423" + y1="15.912388" + x2="7.1114841" + y2="11.597325" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4269" + id="linearGradient1414" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(-1,0,0,1,32.04188,-2.86473)" + x1="2.0651877" + y1="12.625902" + x2="6.8378897" + y2="13.920053" /> + <linearGradient + y2="13.920053" + x2="6.8378897" + y1="12.625902" + x1="2.0651877" + gradientTransform="matrix(-1,0,0,1,32.04188,-2.86473)" + gradientUnits="userSpaceOnUse" + id="linearGradient2925" + xlink:href="#linearGradient4269" + inkscape:collect="always" /> + <linearGradient + y2="12.113755" + x2="7.293807" + y1="16.110582" + x1="11.408385" + gradientTransform="translate(0.426158,-2.762136)" + gradientUnits="userSpaceOnUse" + id="linearGradient3160" + xlink:href="#linearGradient4269" + inkscape:collect="always" /> + <linearGradient + y2="13.35532" + x2="23.888865" + y1="11.264216" + x1="31.692968" + gradientTransform="translate(-0.947018,-0.885198)" + gradientUnits="userSpaceOnUse" + id="linearGradient2921" + xlink:href="#linearGradient4183" + inkscape:collect="always" /> + <linearGradient + y2="12.949513" + x2="2.7672646" + y1="12.115559" + x1="10.57493" + gradientTransform="translate(1.262691,-1.100752)" + gradientUnits="userSpaceOnUse" + id="linearGradient2919" + xlink:href="#linearGradient4183" + inkscape:collect="always" /> + <linearGradient + y2="10.576721" + x2="14.013638" + y1="2.7028866" + x1="15.647213" + gradientUnits="userSpaceOnUse" + id="linearGradient2917" + xlink:href="#linearGradient4183" + inkscape:collect="always" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4269" + id="linearGradient2762" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(-1,0,0,1,32.04188,-2.86473)" + x1="2.0651877" + y1="12.625902" + x2="6.8378897" + y2="13.920053" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4269" + id="linearGradient2764" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(0.426158,-2.762136)" + x1="7.8517423" + y1="15.912388" + x2="7.1114841" + y2="11.597325" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4183" + id="linearGradient2766" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-0.947018,-0.885198)" + x1="31.692968" + y1="11.264216" + x2="23.888865" + y2="13.35532" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4183" + id="linearGradient2768" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(1.262691,-1.100752)" + x1="10.57493" + y1="12.115559" + x2="-0.68574232" + y2="12.115559" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4183" + id="linearGradient2770" + gradientUnits="userSpaceOnUse" + x1="15.647213" + y1="2.7028866" + x2="14.013638" + y2="10.576721" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient2433" + id="linearGradient3144" + x1="2.965755" + y1="-0.80084854" + x2="32.578228" + y2="16.739393" + gradientUnits="userSpaceOnUse" /> + <inkscape:perspective + sodipodi:type="inkscape:persp3d" + inkscape:vp_x="0 : 8 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_z="16 : 8 : 1" + inkscape:persp3d-origin="8 : 5.3333333 : 1" + id="perspective3142" /> + <linearGradient + id="linearGradient3136"> + <stop + style="stop-color:#d7d7d7;stop-opacity:1;" + offset="0" + id="stop3138" /> + <stop + style="stop-color:#7c7c7c;stop-opacity:1;" + offset="1" + id="stop3140" /> + </linearGradient> + <linearGradient + id="linearGradient3130"> + <stop + style="stop-color:#000000;stop-opacity:1;" + offset="0" + id="stop3132" /> + <stop + style="stop-color:#ffffff;stop-opacity:1;" + offset="1" + id="stop3134" /> + </linearGradient> + <linearGradient + id="linearGradient2783"> + <stop + style="stop-color:#ffffff;stop-opacity:0" + offset="0" + id="stop2785" /> + <stop + style="stop-color:#fcfbcb;stop-opacity:1" + offset="1" + id="stop2787" /> + </linearGradient> + <linearGradient + id="linearGradient2789"> + <stop + style="stop-color:#1db000;stop-opacity:1;" + offset="0" + id="stop2791" /> + <stop + style="stop-color:#1db000;stop-opacity:0;" + offset="1" + id="stop2793" /> + </linearGradient> + <linearGradient + id="linearGradient2795"> + <stop + id="stop2797" + offset="0" + style="stop-color:#1db000;stop-opacity:1;" /> + <stop + id="stop2799" + offset="1" + style="stop-color:#0f5f00;stop-opacity:1;" /> + </linearGradient> + <linearGradient + id="linearGradient2801"> + <stop + style="stop-color:#80000e;stop-opacity:1;" + offset="0" + id="stop2803" /> + <stop + style="stop-color:#b00014;stop-opacity:0;" + offset="1" + id="stop2805" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4183" + id="linearGradient2807" + x1="16.826796" + y1="6.7288713" + x2="27.5625" + y2="22.512505" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.875025,0,0,0.875025,0.666703,0.177907)" /> + <linearGradient + y2="13.920053" + x2="6.8378897" + y1="12.625902" + x1="2.0651877" + gradientTransform="matrix(-1,0,0,1,32.04188,-2.86473)" + gradientUnits="userSpaceOnUse" + id="linearGradient2809" + xlink:href="#linearGradient4269" + inkscape:collect="always" /> + <linearGradient + gradientTransform="translate(0.426158,-2.762136)" + gradientUnits="userSpaceOnUse" + y2="13.920053" + x2="6.8378897" + y1="12.625902" + x1="2.0651877" + id="linearGradient2811" + xlink:href="#linearGradient4269" + inkscape:collect="always" /> + <linearGradient + gradientUnits="userSpaceOnUse" + y2="10.576721" + x2="14.013638" + y1="2.7028866" + x1="15.647213" + id="linearGradient2813" + xlink:href="#linearGradient4183" + inkscape:collect="always" /> + <linearGradient + gradientTransform="translate(-0.947018,-0.885198)" + gradientUnits="userSpaceOnUse" + y2="12.535715" + x2="31.31678" + y1="12.535715" + x1="24.397505" + id="linearGradient2815" + xlink:href="#linearGradient4183" + inkscape:collect="always" /> + <linearGradient + gradientTransform="translate(1.262691,-1.100752)" + gradientUnits="userSpaceOnUse" + y2="12.825893" + x2="7.9239235" + y1="12.825893" + x1="1.0046476" + id="linearGradient2817" + xlink:href="#linearGradient4183" + inkscape:collect="always" /> + <linearGradient + id="linearGradient2819"> + <stop + id="stop2821" + offset="0" + style="stop-color:#80000e;stop-opacity:1;" /> + <stop + id="stop2823" + offset="1" + style="stop-color:#b00014;stop-opacity:0;" /> + </linearGradient> + <linearGradient + id="linearGradient2825"> + <stop + style="stop-color:#26b000;stop-opacity:1;" + offset="0" + id="stop2827" /> + <stop + style="stop-color:#145f00;stop-opacity:1;" + offset="1" + id="stop2829" /> + </linearGradient> + <linearGradient + id="linearGradient2831"> + <stop + id="stop2833" + offset="0" + style="stop-color:#26b000;stop-opacity:1;" /> + <stop + id="stop2835" + offset="1" + style="stop-color:#26b000;stop-opacity:0;" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4183" + id="linearGradient2837" + gradientUnits="userSpaceOnUse" + x1="15.647213" + y1="2.7028866" + x2="14.013638" + y2="10.576721" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4183" + id="linearGradient2839" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(1.262691,-1.100752)" + x1="10.57493" + y1="12.115559" + x2="-0.68574232" + y2="12.115559" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4183" + id="linearGradient2841" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-0.947018,-0.885198)" + x1="31.692968" + y1="11.264216" + x2="23.888865" + y2="13.35532" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4269" + id="linearGradient2843" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(0.426158,-2.762136)" + x1="7.8517423" + y1="15.912388" + x2="7.1114841" + y2="11.597325" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4269" + id="linearGradient2845" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(-1,0,0,1,32.04188,-2.86473)" + x1="2.0651877" + y1="12.625902" + x2="6.8378897" + y2="13.920053" /> + <linearGradient + y2="65.800499" + x2="226.90887" + y1="259.03506" + x1="175.13184" + gradientUnits="userSpaceOnUse" + id="linearGradient3374" + xlink:href="#linearGradient3193" + inkscape:collect="always" /> + <linearGradient + y2="66.61824" + x2="172.07999" + y1="259.7438" + x1="224.26379" + gradientUnits="userSpaceOnUse" + id="linearGradient3372" + xlink:href="#linearGradient3289" + inkscape:collect="always" /> + <linearGradient + y2="168.2903" + x2="224.82684" + y1="-5.1353641" + x1="160.2529" + gradientTransform="matrix(-1.1122783,-0.2980341,0.2980341,-1.1122783,747.63347,397.26819)" + gradientUnits="userSpaceOnUse" + id="linearGradient2646" + xlink:href="#linearGradient3308" + inkscape:collect="always" /> + <linearGradient + y2="65.800499" + x2="226.90887" + y1="259.03506" + x1="175.13184" + gradientUnits="userSpaceOnUse" + id="linearGradient3368" + xlink:href="#linearGradient3193" + inkscape:collect="always" /> + <linearGradient + y2="66.61824" + x2="172.07999" + y1="259.7438" + x1="224.26379" + gradientUnits="userSpaceOnUse" + id="linearGradient3366" + xlink:href="#linearGradient3289" + inkscape:collect="always" /> + <linearGradient + y2="168.2903" + x2="224.82684" + y1="-5.1353641" + x1="160.2529" + gradientTransform="matrix(-1.1122783,-0.2980341,0.2980341,-1.1122783,558.73494,665.96877)" + gradientUnits="userSpaceOnUse" + id="linearGradient3364" + xlink:href="#linearGradient3308" + inkscape:collect="always" /> + <linearGradient + y2="65.800499" + x2="226.90887" + y1="259.03506" + x1="175.13184" + gradientUnits="userSpaceOnUse" + id="linearGradient2641" + xlink:href="#linearGradient3193" + inkscape:collect="always" /> + <linearGradient + y2="66.61824" + x2="172.07999" + y1="259.7438" + x1="224.26379" + gradientUnits="userSpaceOnUse" + id="linearGradient3360" + xlink:href="#linearGradient3289" + inkscape:collect="always" /> + <linearGradient + y2="168.2903" + x2="224.82684" + y1="-5.1353641" + x1="160.2529" + gradientTransform="matrix(-1.1122783,-0.2980341,0.2980341,-1.1122783,558.73494,665.96877)" + gradientUnits="userSpaceOnUse" + id="linearGradient3340" + xlink:href="#linearGradient3308" + inkscape:collect="always" /> + <linearGradient + y2="65.800499" + x2="226.90887" + y1="259.03506" + x1="175.13184" + gradientUnits="userSpaceOnUse" + id="linearGradient3338" + xlink:href="#linearGradient3193" + inkscape:collect="always" /> + <linearGradient + y2="66.61824" + x2="172.07999" + y1="259.7438" + x1="224.26379" + gradientUnits="userSpaceOnUse" + id="linearGradient3336" + xlink:href="#linearGradient3289" + inkscape:collect="always" /> + <linearGradient + y2="168.2903" + x2="224.82684" + y1="-5.1353641" + x1="160.2529" + gradientTransform="matrix(-1.1122783,-0.2980341,0.2980341,-1.1122783,747.63347,397.26819)" + gradientUnits="userSpaceOnUse" + id="linearGradient3326" + xlink:href="#linearGradient3308" + inkscape:collect="always" /> + <linearGradient + y2="65.800499" + x2="226.90887" + y1="259.03506" + x1="175.13184" + gradientUnits="userSpaceOnUse" + id="linearGradient3324" + xlink:href="#linearGradient3193" + inkscape:collect="always" /> + <linearGradient + y2="66.61824" + x2="172.07999" + y1="259.7438" + x1="224.26379" + gradientUnits="userSpaceOnUse" + id="linearGradient3322" + xlink:href="#linearGradient3289" + inkscape:collect="always" /> + <linearGradient + y2="168.2903" + x2="224.82684" + y1="-5.1353641" + x1="160.2529" + gradientTransform="matrix(-1.1122783,-0.2980341,0.2980341,-1.1122783,306.50437,364.59668)" + gradientUnits="userSpaceOnUse" + id="linearGradient3306" + xlink:href="#linearGradient3308" + inkscape:collect="always" /> + <linearGradient + gradientTransform="matrix(-1.1122783,-0.2980341,0.2980341,-1.1122783,376.2049,402.98248)" + y2="66.61824" + x2="172.07999" + y1="259.7438" + x1="224.26379" + gradientUnits="userSpaceOnUse" + id="linearGradient3301" + xlink:href="#linearGradient3289" + inkscape:collect="always" /> + <linearGradient + y2="66.61824" + x2="172.07999" + y1="259.7438" + x1="224.26379" + gradientUnits="userSpaceOnUse" + id="linearGradient3287" + xlink:href="#linearGradient3289" + inkscape:collect="always" /> + <linearGradient + y2="62.412689" + x2="204.55589" + y1="262.45413" + x1="204.55589" + gradientUnits="userSpaceOnUse" + id="linearGradient3213" + xlink:href="#linearGradient3193" + inkscape:collect="always" /> + <linearGradient + y2="62.412689" + x2="204.55589" + y1="262.45413" + x1="204.55589" + gradientUnits="userSpaceOnUse" + id="linearGradient3211" + xlink:href="#linearGradient3193" + inkscape:collect="always" /> + <linearGradient + y2="65.800499" + x2="226.90887" + y1="259.03506" + x1="175.13184" + gradientUnits="userSpaceOnUse" + id="linearGradient3203" + xlink:href="#linearGradient3193" + inkscape:collect="always" /> + <linearGradient + gradientUnits="userSpaceOnUse" + y2="62.412689" + x2="204.55589" + y1="262.45413" + x1="204.55589" + id="linearGradient3199" + xlink:href="#linearGradient3193" + inkscape:collect="always" /> + <linearGradient + gradientUnits="userSpaceOnUse" + y2="23.016739" + x2="184.85791" + y1="316.97113" + x1="175.76654" + id="linearGradient3179" + xlink:href="#linearGradient3181" + inkscape:collect="always" /> + <radialGradient + gradientUnits="userSpaceOnUse" + r="140.91121" + fy="163.42795" + fx="184.85791" + cy="163.42795" + cx="184.85791" + id="radialGradient3163" + xlink:href="#linearGradient2385" + inkscape:collect="always" /> + <inkscape:perspective + id="perspective10" + inkscape:persp3d-origin="372.04724 : 350.78739 : 1" + inkscape:vp_z="744.09448 : 526.18109 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 526.18109 : 1" + sodipodi:type="inkscape:persp3d" /> + <linearGradient + id="linearGradient2385"> + <stop + id="stop2387" + offset="0" + style="stop-color:#ff0000;stop-opacity:1;" /> + <stop + style="stop-color:#ff0000;stop-opacity:0.55172414;" + offset="0.87037039" + id="stop3175" /> + <stop + id="stop2389" + offset="1" + style="stop-color:#ff0000;stop-opacity:1;" /> + </linearGradient> + <linearGradient + id="linearGradient3169"> + <stop + style="stop-color:#ff0000;stop-opacity:1;" + offset="0" + id="stop3171" /> + <stop + style="stop-color:#ff0000;stop-opacity:0;" + offset="1" + id="stop3173" /> + </linearGradient> + <linearGradient + id="linearGradient3181"> + <stop + style="stop-color:#ff0000;stop-opacity:1;" + offset="0" + id="stop3183" /> + <stop + id="stop3185" + offset="0.11529652" + style="stop-color:#ff0000;stop-opacity:0.65271967" /> + <stop + style="stop-color:#000000;stop-opacity:0.15481172" + offset="1" + id="stop3187" /> + </linearGradient> + <linearGradient + id="linearGradient3193" + inkscape:collect="always"> + <stop + id="stop3195" + offset="0" + style="stop-color:#ffffff;stop-opacity:1" /> + <stop + id="stop3197" + offset="1" + style="stop-color:#000000;stop-opacity:1" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + id="linearGradient3289"> + <stop + style="stop-color:#999999;stop-opacity:1" + offset="0" + id="stop3291" /> + <stop + style="stop-color:#000000;stop-opacity:1" + offset="1" + id="stop3293" /> + </linearGradient> + <linearGradient + id="linearGradient3308" + inkscape:collect="always"> + <stop + id="stop3310" + offset="0" + style="stop-color:#ffffff;stop-opacity:1" /> + <stop + id="stop3312" + offset="1" + style="stop-color:#ffffff;stop-opacity:0" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3169" + id="linearGradient2702" + x1="192.86734" + y1="118.36168" + x2="189.20502" + y2="355.44769" + gradientUnits="userSpaceOnUse" /> + <linearGradient + id="linearGradient2278"> + <stop + style="stop-color:#ffffff;stop-opacity:0" + offset="0" + id="stop2280" /> + <stop + style="stop-color:#fefee7;stop-opacity:0.89308178" + offset="1" + id="stop2282" /> + </linearGradient> + <linearGradient + id="linearGradient2284"> + <stop + style="stop-color:#1db000;stop-opacity:1;" + offset="0" + id="stop2286" /> + <stop + style="stop-color:#1db000;stop-opacity:0;" + offset="1" + id="stop2288" /> + </linearGradient> + <linearGradient + id="linearGradient2290"> + <stop + id="stop2292" + offset="0" + style="stop-color:#1db000;stop-opacity:1;" /> + <stop + id="stop2294" + offset="1" + style="stop-color:#0f5f00;stop-opacity:1;" /> + </linearGradient> + <linearGradient + id="linearGradient2296"> + <stop + style="stop-color:#80000e;stop-opacity:1;" + offset="0" + id="stop2298" /> + <stop + style="stop-color:#b00014;stop-opacity:0;" + offset="1" + id="stop2300" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4183" + id="linearGradient2302" + x1="16.826796" + y1="6.7288713" + x2="27.5625" + y2="22.512505" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.875025,0,0,0.875025,0.666703,0.177907)" /> + <linearGradient + y2="13.920053" + x2="6.8378897" + y1="12.625902" + x1="2.0651877" + gradientTransform="matrix(-1,0,0,1,32.04188,-2.86473)" + gradientUnits="userSpaceOnUse" + id="linearGradient2304" + xlink:href="#linearGradient4269" + inkscape:collect="always" /> + <linearGradient + gradientTransform="translate(0.426158,-2.762136)" + gradientUnits="userSpaceOnUse" + y2="13.920053" + x2="6.8378897" + y1="12.625902" + x1="2.0651877" + id="linearGradient2306" + xlink:href="#linearGradient4269" + inkscape:collect="always" /> + <linearGradient + gradientUnits="userSpaceOnUse" + y2="10.576721" + x2="14.013638" + y1="2.7028866" + x1="15.647213" + id="linearGradient2308" + xlink:href="#linearGradient4183" + inkscape:collect="always" /> + <linearGradient + gradientTransform="translate(-0.947018,-0.885198)" + gradientUnits="userSpaceOnUse" + y2="12.535715" + x2="31.31678" + y1="12.535715" + x1="24.397505" + id="linearGradient2310" + xlink:href="#linearGradient4183" + inkscape:collect="always" /> + <linearGradient + gradientTransform="translate(1.262691,-1.100752)" + gradientUnits="userSpaceOnUse" + y2="12.825893" + x2="7.9239235" + y1="12.825893" + x1="1.0046476" + id="linearGradient2312" + xlink:href="#linearGradient4183" + inkscape:collect="always" /> + <linearGradient + id="linearGradient2314"> + <stop + id="stop2316" + offset="0" + style="stop-color:#80000e;stop-opacity:1;" /> + <stop + id="stop2318" + offset="1" + style="stop-color:#b00014;stop-opacity:0;" /> + </linearGradient> + <linearGradient + id="linearGradient2320"> + <stop + style="stop-color:#26b000;stop-opacity:1;" + offset="0" + id="stop2322" /> + <stop + style="stop-color:#145f00;stop-opacity:1;" + offset="1" + id="stop2324" /> + </linearGradient> + <linearGradient + id="linearGradient2326"> + <stop + id="stop2328" + offset="0" + style="stop-color:#26b000;stop-opacity:1;" /> + <stop + id="stop2330" + offset="1" + style="stop-color:#26b000;stop-opacity:0;" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4183" + id="linearGradient2332" + gradientUnits="userSpaceOnUse" + x1="15.647213" + y1="2.7028866" + x2="14.013638" + y2="10.576721" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4183" + id="linearGradient2334" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(1.262691,-1.100752)" + x1="10.57493" + y1="12.115559" + x2="-0.68574232" + y2="12.115559" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4183" + id="linearGradient2336" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-0.947018,-0.885198)" + x1="31.692968" + y1="11.264216" + x2="23.888865" + y2="13.35532" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4269" + id="linearGradient2338" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(0.426158,-2.762136)" + x1="7.8517423" + y1="15.912388" + x2="7.1114841" + y2="11.597325" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4269" + id="linearGradient2340" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(-1,0,0,1,32.04188,-2.86473)" + x1="2.0651877" + y1="12.625902" + x2="6.8378897" + y2="13.920053" /> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient4045" + id="radialGradient2342" + cx="19.285715" + cy="9.8571424" + fx="19.285715" + fy="9.8571424" + r="10.885714" + gradientUnits="userSpaceOnUse" + spreadMethod="reflect" + gradientTransform="matrix(0.418975,2.444023e-18,-2.444023e-18,0.418975,11.20548,5.727248)" /> + <linearGradient + gradientTransform="matrix(1.256521,0,0,-1.256521,-7.854319,28.773309)" + gradientUnits="userSpaceOnUse" + y2="8.5305319" + x2="15.630395" + y1="22.874208" + x1="15.630395" + id="linearGradient2444" + xlink:href="#linearGradient4269" + inkscape:collect="always" /> + <linearGradient + y2="13.920053" + x2="6.8378897" + y1="12.625902" + x1="2.0651877" + gradientTransform="matrix(-1,0,0,1,31.179578,-2.86473)" + gradientUnits="userSpaceOnUse" + id="linearGradient2442" + xlink:href="#linearGradient4269" + inkscape:collect="always" /> + <linearGradient + gradientTransform="translate(1.1362892,-2.762136)" + gradientUnits="userSpaceOnUse" + y2="13.920053" + x2="6.8378897" + y1="12.625902" + x1="2.0651877" + id="linearGradient2440" + xlink:href="#linearGradient4269" + inkscape:collect="always" /> + <linearGradient + gradientUnits="userSpaceOnUse" + y2="10.576721" + x2="14.013638" + y1="2.7028866" + x1="15.647213" + id="linearGradient2438" + xlink:href="#linearGradient4183" + inkscape:collect="always" /> + <linearGradient + gradientTransform="translate(-1.9107675,-0.885198)" + gradientUnits="userSpaceOnUse" + y2="12.535715" + x2="31.31678" + y1="12.535715" + x1="24.397505" + id="linearGradient2436" + xlink:href="#linearGradient4183" + inkscape:collect="always" /> + <linearGradient + gradientTransform="translate(1.9220986,-1.100752)" + gradientUnits="userSpaceOnUse" + y2="12.825893" + x2="7.9239235" + y1="12.825893" + x1="1.0046476" + id="linearGradient2434" + xlink:href="#linearGradient4183" + inkscape:collect="always" /> + <linearGradient + id="linearGradient2428"> + <stop + id="stop2430" + offset="0" + style="stop-color:#80000e;stop-opacity:1;" /> + <stop + id="stop2432" + offset="1" + style="stop-color:#b00014;stop-opacity:0;" /> + </linearGradient> + <linearGradient + id="linearGradient2422"> + <stop + style="stop-color:#26b000;stop-opacity:1;" + offset="0" + id="stop2424" /> + <stop + style="stop-color:#145f00;stop-opacity:1;" + offset="1" + id="stop2426" /> + </linearGradient> + <linearGradient + id="linearGradient2416"> + <stop + id="stop2418" + offset="0" + style="stop-color:#26b000;stop-opacity:1;" /> + <stop + id="stop2420" + offset="1" + style="stop-color:#26b000;stop-opacity:0;" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4183" + id="linearGradient3003" + gradientUnits="userSpaceOnUse" + x1="15.647213" + y1="2.7028866" + x2="14.013638" + y2="10.576721" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4183" + id="linearGradient3001" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(1.262691,-1.100752)" + x1="10.57493" + y1="12.115559" + x2="2.7672646" + y2="12.949513" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4183" + id="linearGradient2999" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-0.947018,-0.885198)" + x1="31.692968" + y1="11.264216" + x2="23.888865" + y2="13.35532" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4269" + id="linearGradient2997" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(0.426158,-2.762136)" + x1="11.408385" + y1="16.110582" + x2="7.293807" + y2="12.113755" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4269" + id="linearGradient2995" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(-1,0,0,1,32.04188,-2.86473)" + x1="2.0651877" + y1="12.625902" + x2="6.8378897" + y2="13.920053" /> + <radialGradient + gradientTransform="matrix(0.418975,0,0,0.418975,11.20548,5.727248)" + spreadMethod="reflect" + gradientUnits="userSpaceOnUse" + r="10.885714" + fy="9.8571424" + fx="19.285715" + cy="9.8571424" + cx="19.285715" + id="radialGradient2993" + xlink:href="#linearGradient4045" + inkscape:collect="always" /> + <linearGradient + y2="13.920053" + x2="6.8378897" + y1="12.625902" + x1="2.0651877" + gradientTransform="matrix(-1,0,0,1,32.04188,-2.86473)" + gradientUnits="userSpaceOnUse" + id="linearGradient2991" + xlink:href="#linearGradient4269" + inkscape:collect="always" /> + <linearGradient + y2="11.597325" + x2="7.1114841" + y1="15.912388" + x1="7.8517423" + gradientTransform="translate(0.426158,-2.762136)" + gradientUnits="userSpaceOnUse" + id="linearGradient2989" + xlink:href="#linearGradient4269" + inkscape:collect="always" /> + <linearGradient + y2="13.35532" + x2="23.888865" + y1="11.264216" + x1="31.692968" + gradientTransform="translate(-0.947018,-0.885198)" + gradientUnits="userSpaceOnUse" + id="linearGradient2987" + xlink:href="#linearGradient4183" + inkscape:collect="always" /> + <linearGradient + y2="12.115559" + x2="-0.68574232" + y1="12.115559" + x1="10.57493" + gradientTransform="translate(1.262691,-1.100752)" + gradientUnits="userSpaceOnUse" + id="linearGradient2985" + xlink:href="#linearGradient4183" + inkscape:collect="always" /> + <linearGradient + y2="10.576721" + x2="14.013638" + y1="2.7028866" + x1="15.647213" + gradientUnits="userSpaceOnUse" + id="linearGradient2983" + xlink:href="#linearGradient4183" + inkscape:collect="always" /> + <linearGradient + id="linearGradient2977"> + <stop + style="stop-color:#26b000;stop-opacity:1;" + offset="0" + id="stop2979" /> + <stop + style="stop-color:#26b000;stop-opacity:0;" + offset="1" + id="stop2981" /> + </linearGradient> + <linearGradient + id="linearGradient2971"> + <stop + id="stop2973" + offset="0" + style="stop-color:#26b000;stop-opacity:1;" /> + <stop + id="stop2975" + offset="1" + style="stop-color:#145f00;stop-opacity:1;" /> + </linearGradient> + <linearGradient + id="linearGradient2965"> + <stop + style="stop-color:#80000e;stop-opacity:1;" + offset="0" + id="stop2967" /> + <stop + style="stop-color:#b00014;stop-opacity:0;" + offset="1" + id="stop2969" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4183" + id="linearGradient2963" + x1="1.0046476" + y1="12.825893" + x2="7.9239235" + y2="12.825893" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(1.262691,-1.100752)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4183" + id="linearGradient2961" + x1="24.397505" + y1="12.535715" + x2="31.31678" + y2="12.535715" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-0.947018,-0.885198)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4183" + id="linearGradient2959" + x1="15.647213" + y1="2.7028866" + x2="14.013638" + y2="10.576721" + gradientUnits="userSpaceOnUse" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4269" + id="linearGradient2957" + x1="2.0651877" + y1="12.625902" + x2="6.8378897" + y2="13.920053" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(0.426158,-2.762136)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4269" + id="linearGradient2955" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(-1,0,0,1,32.04188,-2.86473)" + x1="2.0651877" + y1="12.625902" + x2="6.8378897" + y2="13.920053" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4269" + id="linearGradient4275" + x1="15.630395" + y1="22.874208" + x2="15.806232" + y2="6.6770978" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(1.62913,0,0,-1.62913,-10.06608,39.71987)" /> + <linearGradient + gradientTransform="matrix(0.875025,0,0,0.875025,0.666703,0.177907)" + gradientUnits="userSpaceOnUse" + y2="22.512505" + x2="27.5625" + y1="6.7288713" + x1="16.826796" + id="linearGradient2952" + xlink:href="#linearGradient4183" + inkscape:collect="always" /> + <linearGradient + y2="13.920053" + x2="6.8378897" + y1="12.625902" + x1="2.0651877" + gradientTransform="matrix(-1,0,0,1,32.04188,-2.86473)" + gradientUnits="userSpaceOnUse" + id="linearGradient4260" + xlink:href="#linearGradient4269" + inkscape:collect="always" /> + <linearGradient + gradientTransform="translate(0.426158,-2.762136)" + gradientUnits="userSpaceOnUse" + y2="11.597325" + x2="7.1114841" + y1="15.912388" + x1="7.8517423" + id="linearGradient4256" + xlink:href="#linearGradient4269" + inkscape:collect="always" /> + <linearGradient + gradientUnits="userSpaceOnUse" + y2="10.576721" + x2="14.013638" + y1="2.7028866" + x1="15.647213" + id="linearGradient4203" + xlink:href="#linearGradient4183" + inkscape:collect="always" /> + <linearGradient + gradientTransform="translate(-0.947018,-0.885198)" + gradientUnits="userSpaceOnUse" + y2="13.35532" + x2="23.888865" + y1="11.264216" + x1="31.692968" + id="linearGradient4195" + xlink:href="#linearGradient4183" + inkscape:collect="always" /> + <linearGradient + gradientTransform="translate(1.262691,-1.100752)" + gradientUnits="userSpaceOnUse" + y2="12.115559" + x2="-0.68574232" + y1="12.115559" + x1="10.57493" + id="linearGradient4181" + xlink:href="#linearGradient4183" + inkscape:collect="always" /> + <linearGradient + id="linearGradient2941"> + <stop + id="stop2943" + offset="0" + style="stop-color:#80000e;stop-opacity:1;" /> + <stop + id="stop2945" + offset="1" + style="stop-color:#b00014;stop-opacity:0;" /> + </linearGradient> + <linearGradient + id="linearGradient2935"> + <stop + style="stop-color:#1db000;stop-opacity:1;" + offset="0" + id="stop2937" /> + <stop + style="stop-color:#0f5f00;stop-opacity:1;" + offset="1" + id="stop2939" /> + </linearGradient> + <linearGradient + id="linearGradient2929"> + <stop + id="stop2931" + offset="0" + style="stop-color:#1db000;stop-opacity:1;" /> + <stop + id="stop2933" + offset="1" + style="stop-color:#1db000;stop-opacity:0;" /> + </linearGradient> + <linearGradient + id="linearGradient2923"> + <stop + id="stop2925" + offset="0" + style="stop-color:#ffffff;stop-opacity:0" /> + <stop + id="stop2927" + offset="1" + style="stop-color:#fcfbcb;stop-opacity:1" /> + </linearGradient> + <inkscape:perspective + id="perspective4757" + inkscape:persp3d-origin="12 : 8 : 1" + inkscape:vp_z="24 : 12 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 12 : 1" + sodipodi:type="inkscape:persp3d" /> + </defs> + <sodipodi:namedview + id="base" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:pageopacity="0.0" + inkscape:pageshadow="2" + inkscape:zoom="11.313708" + inkscape:cx="20.635709" + inkscape:cy="3.1660007" + inkscape:document-units="px" + inkscape:current-layer="g2892" + width="16px" + height="16px" + showguides="true" + inkscape:guide-bbox="true" + inkscape:window-width="1014" + inkscape:window-height="726" + inkscape:window-x="336" + inkscape:window-y="209" + showgrid="false"> + <sodipodi:guide + orientation="vertical" + position="24.821428" + id="guide3146" /> + </sodipodi:namedview> + <metadata + id="metadata7"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + </cc:Work> + </rdf:RDF> + </metadata> + <g + inkscape:label="Calque 1" + inkscape:groupmode="layer" + id="layer1"> + <g + id="g2446" + inkscape:label="Calque 1" + transform="matrix(0.7408994,0,0,0.6585858,15.041353,0.5591868)"> + <g + style="fill:none;stroke:#000000;stroke-opacity:0.44968555" + transform="matrix(-0.4376782,-0.758081,0.7581751,-0.4377326,3.5952686,30.820492)" + id="g2181"> + <path + sodipodi:nodetypes="csccczccsccccc" + id="path2183" + d="M 41.109694,-0.41817229 C 40.505298,0.20454826 39.040867,0.77635346 37.592239,0.77635106 C 36.102089,0.77635106 34.114653,0.15682998 33.532659,-0.49267807 L 33.569913,-2.0031726 L 33.569913,-3.0835065 C 31.027414,-3.5787101 30.997014,-3.8285637 27.525623,-3.8285643 C 24.054233,-3.8285649 23.830777,-3.5759718 21.29017,-3.0462535 L 21.29017,-0.3436665 C 20.685773,0.27905404 19.221343,0.87609843 17.772714,0.87609724 C 16.282564,0.87609724 14.623294,0.43325774 13.915083,-0.41817229 L 14.138601,-5.7646408 C 18.129172,-7.3187814 22.030595,-8.3970767 27.437882,-8.5586077 C 32.38601,-8.450833 36.259126,-7.7053161 40.886177,-5.8763994 L 41.109694,-0.41817229 z" + style="opacity:1;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.65573961;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.44968555" /> + </g> + <g + transform="matrix(-0.4400595,-0.7622054,0.7622054,-0.4400595,-10.917299,27.830684)" + id="g2451"> + <path + style="opacity:1;fill:url(#linearGradient2483);fill-opacity:1;stroke:#0f5600;stroke-width:0.625;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + d="M 16.100095,4.59375 C 10.946289,4.7477067 7.2256019,5.7999634 3.4220983,7.28125 L 3.2345983,10.227679 C 3.7846813,10.972881 5.0136533,11.508929 6.4220983,11.508929 C 7.7912983,11.508929 8.9758403,11.004648 9.5470983,10.290179 L 9.5470983,9.1875 C 11.968608,8.682612 12.862258,8.4375 16.125,8.4375 C 19.479577,8.4375001 20.38467,8.6842603 22.807982,9.15625 L 22.807982,10.165179 C 23.37924,10.879648 24.563781,11.383929 25.932982,11.383929 C 27.341427,11.383929 28.53915,10.847881 29.089232,10.102679 L 28.901732,7.15625 C 24.491586,5.413068 20.816266,4.6964725 16.100095,4.59375 z" + id="path2453" + sodipodi:nodetypes="cccsccsccsccc" /> + <path + style="opacity:1;fill:url(#linearGradient2485);fill-opacity:1;stroke:#0f5600;stroke-width:0.57204324;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + d="M 6.4075414,13.019293 C 7.7882612,13.019293 8.983936,12.610489 9.5600003,12.01696 L 9.5600003,10.430989 C 8.8231919,11.109285 7.789205,11.494948 6.4075414,11.494948 C 4.9854414,11.494948 3.9881276,11.13019 3.2127675,10.48174 L 3.2127675,11.966208 C 3.7674786,12.585269 4.9872465,13.019293 6.4075414,13.019293 z" + id="path2455" + sodipodi:nodetypes="cccsccc" /> + <path + style="opacity:1;fill:url(#linearGradient2487);fill-opacity:1;stroke:#0f5600;stroke-width:0.57204324;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + d="M 25.967532,12.944669 C 27.348252,12.944669 28.543927,12.535865 29.119991,11.942336 L 29.119991,10.356365 C 28.383183,11.034661 27.349196,11.420324 25.967532,11.420324 C 24.545432,11.420324 23.548118,11.055566 22.772758,10.407116 L 22.772758,11.891584 C 23.327469,12.510645 24.547237,12.944669 25.967532,12.944669 z" + id="path2457" + sodipodi:nodetypes="cccsccc" /> + <path + style="opacity:1;fill:url(#linearGradient2489);fill-opacity:1;stroke:none;stroke-width:0.57204324;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + d="M 6.6822725,11.157918 C 8.0629923,11.157918 8.7535908,10.73333 9.3296551,10.139801 L 9.0644746,7.3100024 C 8.3276662,7.9882984 8.1270706,8.5445024 6.745407,8.5445024 C 5.323307,8.5445024 4.4996132,8.1797444 3.7242531,7.5312944 L 3.4874986,10.104833 C 4.0422097,10.723894 5.2619776,11.157918 6.6822725,11.157918 z" + id="path2459" + sodipodi:nodetypes="cccsccc" /> + <path + style="opacity:1;fill:url(#linearGradient2491);fill-opacity:1;stroke:none;stroke-width:0.57204324;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + d="M 25.633599,11.055324 C 24.252879,11.055324 23.56228,10.630736 22.986216,10.037207 L 22.418005,7.3779497 C 23.154814,8.0562457 24.188801,8.4419087 25.570464,8.4419087 C 26.992564,8.4419087 27.816258,8.0771507 28.591618,7.4287007 L 28.828373,10.002239 C 28.273662,10.6213 27.053894,11.055324 25.633599,11.055324 z" + id="path2461" + sodipodi:nodetypes="cccsccc" /> + </g> + </g> + <g + id="g3163" + inkscape:label="Calque 1" + transform="matrix(0.9893246,0,0,1,21.699174,-4.0949332)"> + <path + style="opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#008000;stroke-width:0.50400001;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0;visibility:visible;display:inline;overflow:visible" + d="M 18.019888,12.625004 C 18.48189,11.534667 18.765826,10.027007 18.765826,8.3750001 C 18.765826,6.7229936 18.48189,5.2153338 18.019888,4.1249963" + id="path3488" + sodipodi:nodetypes="csc" /> + <g + transform="matrix(0.642707,0,0,0.6390328,-37.329383,5.2087423)" + inkscape:label="Calque 1" + id="g2892"> + <g + id="g2651" + inkscape:label="Layer 1" + transform="matrix(4.9064853e-2,-8.3536268e-2,8.8523433e-2,4.8433051e-2,19.350371,10.666504)"> + <g + transform="matrix(0.4480735,0,0,0.4170774,98.907461,118.01666)" + id="g3342"> + <path + sodipodi:type="arc" + style="opacity:1;fill:url(#linearGradient3372);fill-opacity:1;stroke:none" + id="path3209" + sodipodi:cx="201.02036" + sodipodi:cy="162.41779" + sodipodi:rx="100.0051" + sodipodi:ry="100.0051" + d="M 301.02545,162.41779 A 100.0051,100.0051 0 1 1 101.01526,162.41779 A 100.0051,100.0051 0 1 1 301.02545,162.41779 z" + transform="matrix(-1.1122783,-0.2980341,0.2980341,-1.1122783,306.50437,364.59668)" /> + <path + sodipodi:type="arc" + style="opacity:0.24886876;fill:url(#linearGradient3374);fill-opacity:1;stroke:none" + id="path3201" + sodipodi:cx="201.02036" + sodipodi:cy="162.41779" + sodipodi:rx="100.0051" + sodipodi:ry="100.0051" + d="M 301.02545,162.41779 A 100.0051,100.0051 0 1 1 101.01526,162.41779 A 100.0051,100.0051 0 1 1 301.02545,162.41779 z" + transform="matrix(0.9122383,-0.2444335,0.2444335,0.9122383,-91.758986,25.004372)" /> + <path + sodipodi:type="arc" + style="opacity:0.59728507;fill:url(#linearGradient2702);fill-opacity:1;stroke:none" + id="path3295" + sodipodi:cx="201.02036" + sodipodi:cy="162.41779" + sodipodi:rx="78.284782" + sodipodi:ry="79.05574" + d="M 279.30514,162.41779 A 78.284782,79.05574 0 1 1 122.73557,162.41779 A 78.284782,79.05574 0 1 1 279.30514,162.41779 z" + transform="matrix(-1.1122783,-0.2980341,0.2980341,-1.1122783,306.50437,364.59668)" /> + </g> + </g> + </g> + </g> + </g> +</svg> diff --git a/sflphone-gtk/pixmaps/rec_call.svg b/sflphone-gtk/pixmaps/rec_call.svg new file mode 100644 index 0000000000000000000000000000000000000000..45b6bf69abd8adab3e14d4eaa3c4e1e7edfc5c5d --- /dev/null +++ b/sflphone-gtk/pixmaps/rec_call.svg @@ -0,0 +1,1406 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:xlink="http://www.w3.org/1999/xlink" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="24" + height="24" + id="svg2" + sodipodi:version="0.32" + inkscape:version="0.46" + version="1.0" + sodipodi:docbase="/home/plbeaudoin/SFLPhone/sflphone/sflphone-gtk/pixmaps" + sodipodi:docname="rec_call.svg" + inkscape:output_extension="org.inkscape.output.svg.inkscape" + sodipodi:modified="true"> + <defs + id="defs4"> + <inkscape:perspective + sodipodi:type="inkscape:persp3d" + inkscape:vp_x="0 : 12 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_z="24 : 12 : 1" + inkscape:persp3d-origin="12 : 8 : 1" + id="perspective4757" /> + <linearGradient + id="linearGradient4045"> + <stop + style="stop-color:#ffffff;stop-opacity:0" + offset="0" + id="stop4047" /> + <stop + style="stop-color:#fcfbcb;stop-opacity:1" + offset="1" + id="stop4049" /> + </linearGradient> + <linearGradient + id="linearGradient4269"> + <stop + style="stop-color:#1db000;stop-opacity:1;" + offset="0" + id="stop4271" /> + <stop + style="stop-color:#1db000;stop-opacity:0;" + offset="1" + id="stop4273" /> + </linearGradient> + <linearGradient + id="linearGradient4183"> + <stop + id="stop4185" + offset="0" + style="stop-color:#1db000;stop-opacity:1;" /> + <stop + id="stop4187" + offset="1" + style="stop-color:#0f5f00;stop-opacity:1;" /> + </linearGradient> + <linearGradient + id="linearGradient4167"> + <stop + style="stop-color:#80000e;stop-opacity:1;" + offset="0" + id="stop4169" /> + <stop + style="stop-color:#b00014;stop-opacity:0;" + offset="1" + id="stop4171" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4183" + id="linearGradient4181" + x1="10.57493" + y1="12.115559" + x2="-0.68574232" + y2="12.115559" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(1.262691,-1.100752)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4183" + id="linearGradient4195" + x1="31.692968" + y1="11.264216" + x2="23.888865" + y2="13.35532" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-0.947018,-0.885198)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4183" + id="linearGradient4203" + x1="15.647213" + y1="2.7028866" + x2="14.013638" + y2="10.576721" + gradientUnits="userSpaceOnUse" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4269" + id="linearGradient4256" + x1="7.8517423" + y1="15.912388" + x2="7.1114841" + y2="11.597325" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(0.426158,-2.762136)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4269" + id="linearGradient4260" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(-1,0,0,1,32.04188,-2.86473)" + x1="2.0651877" + y1="12.625902" + x2="6.8378897" + y2="13.920053" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4183" + id="linearGradient2224" + x1="16.826796" + y1="6.7288713" + x2="27.5625" + y2="22.512505" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.875025,0,0,0.875025,0.666703,0.177907)" /> + <linearGradient + gradientTransform="matrix(1.62913,0,0,-1.62913,-10.06608,39.71987)" + gradientUnits="userSpaceOnUse" + y2="6.6770978" + x2="15.806232" + y1="22.874208" + x1="15.630395" + id="linearGradient4275" + xlink:href="#linearGradient4269" + inkscape:collect="always" /> + <linearGradient + y2="13.920053" + x2="6.8378897" + y1="12.625902" + x1="2.0651877" + gradientTransform="matrix(-1,0,0,1,32.04188,-2.86473)" + gradientUnits="userSpaceOnUse" + id="linearGradient1388" + xlink:href="#linearGradient4269" + inkscape:collect="always" /> + <linearGradient + gradientTransform="translate(0.426158,-2.762136)" + gradientUnits="userSpaceOnUse" + y2="13.920053" + x2="6.8378897" + y1="12.625902" + x1="2.0651877" + id="linearGradient1386" + xlink:href="#linearGradient4269" + inkscape:collect="always" /> + <linearGradient + gradientUnits="userSpaceOnUse" + y2="10.576721" + x2="14.013638" + y1="2.7028866" + x1="15.647213" + id="linearGradient1384" + xlink:href="#linearGradient4183" + inkscape:collect="always" /> + <linearGradient + gradientTransform="translate(-0.947018,-0.885198)" + gradientUnits="userSpaceOnUse" + y2="12.535715" + x2="31.31678" + y1="12.535715" + x1="24.397505" + id="linearGradient1382" + xlink:href="#linearGradient4183" + inkscape:collect="always" /> + <linearGradient + gradientTransform="translate(1.262691,-1.100752)" + gradientUnits="userSpaceOnUse" + y2="12.825893" + x2="7.9239235" + y1="12.825893" + x1="1.0046476" + id="linearGradient1380" + xlink:href="#linearGradient4183" + inkscape:collect="always" /> + <linearGradient + id="linearGradient1374"> + <stop + id="stop1376" + offset="0" + style="stop-color:#80000e;stop-opacity:1;" /> + <stop + id="stop1378" + offset="1" + style="stop-color:#b00014;stop-opacity:0;" /> + </linearGradient> + <linearGradient + id="linearGradient1368"> + <stop + style="stop-color:#26b000;stop-opacity:1;" + offset="0" + id="stop1370" /> + <stop + style="stop-color:#145f00;stop-opacity:1;" + offset="1" + id="stop1372" /> + </linearGradient> + <linearGradient + id="linearGradient1362"> + <stop + id="stop1364" + offset="0" + style="stop-color:#26b000;stop-opacity:1;" /> + <stop + id="stop1366" + offset="1" + style="stop-color:#26b000;stop-opacity:0;" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4183" + id="linearGradient1406" + gradientUnits="userSpaceOnUse" + x1="15.647213" + y1="2.7028866" + x2="14.013638" + y2="10.576721" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4183" + id="linearGradient1408" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(1.262691,-1.100752)" + x1="10.57493" + y1="12.115559" + x2="-0.68574232" + y2="12.115559" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4183" + id="linearGradient1410" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-0.947018,-0.885198)" + x1="31.692968" + y1="11.264216" + x2="23.888865" + y2="13.35532" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4269" + id="linearGradient1412" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(0.426158,-2.762136)" + x1="7.8517423" + y1="15.912388" + x2="7.1114841" + y2="11.597325" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4269" + id="linearGradient1414" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(-1,0,0,1,32.04188,-2.86473)" + x1="2.0651877" + y1="12.625902" + x2="6.8378897" + y2="13.920053" /> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient4045" + id="radialGradient4051" + cx="19.285715" + cy="9.8571424" + fx="19.285715" + fy="9.8571424" + r="10.885714" + gradientUnits="userSpaceOnUse" + spreadMethod="reflect" + gradientTransform="matrix(0.418975,0,0,0.418975,11.20548,5.727248)" /> + <linearGradient + y2="13.920053" + x2="6.8378897" + y1="12.625902" + x1="2.0651877" + gradientTransform="matrix(-1,0,0,1,32.04188,-2.86473)" + gradientUnits="userSpaceOnUse" + id="linearGradient2491" + xlink:href="#linearGradient4269" + inkscape:collect="always" /> + <linearGradient + y2="12.113755" + x2="7.293807" + y1="16.110582" + x1="11.408385" + gradientTransform="translate(0.426158,-2.762136)" + gradientUnits="userSpaceOnUse" + id="linearGradient2489" + xlink:href="#linearGradient4269" + inkscape:collect="always" /> + <linearGradient + y2="13.35532" + x2="23.888865" + y1="11.264216" + x1="31.692968" + gradientTransform="translate(-0.947018,-0.885198)" + gradientUnits="userSpaceOnUse" + id="linearGradient2487" + xlink:href="#linearGradient4183" + inkscape:collect="always" /> + <linearGradient + y2="12.949513" + x2="2.7672646" + y1="12.115559" + x1="10.57493" + gradientTransform="translate(1.262691,-1.100752)" + gradientUnits="userSpaceOnUse" + id="linearGradient2485" + xlink:href="#linearGradient4183" + inkscape:collect="always" /> + <linearGradient + y2="10.576721" + x2="14.013638" + y1="2.7028866" + x1="15.647213" + gradientUnits="userSpaceOnUse" + id="linearGradient2483" + xlink:href="#linearGradient4183" + inkscape:collect="always" /> + <linearGradient + id="linearGradient2416"> + <stop + style="stop-color:#26b000;stop-opacity:1;" + offset="0" + id="stop2418" /> + <stop + style="stop-color:#26b000;stop-opacity:0;" + offset="1" + id="stop2420" /> + </linearGradient> + <linearGradient + id="linearGradient2422"> + <stop + id="stop2424" + offset="0" + style="stop-color:#26b000;stop-opacity:1;" /> + <stop + id="stop2426" + offset="1" + style="stop-color:#145f00;stop-opacity:1;" /> + </linearGradient> + <linearGradient + id="linearGradient2428"> + <stop + style="stop-color:#80000e;stop-opacity:1;" + offset="0" + id="stop2430" /> + <stop + style="stop-color:#b00014;stop-opacity:0;" + offset="1" + id="stop2432" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4183" + id="linearGradient2434" + x1="1.0046476" + y1="12.825893" + x2="7.9239235" + y2="12.825893" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(1.9220986,-1.100752)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4183" + id="linearGradient2436" + x1="24.397505" + y1="12.535715" + x2="31.31678" + y2="12.535715" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-1.9107675,-0.885198)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4183" + id="linearGradient2438" + x1="15.647213" + y1="2.7028866" + x2="14.013638" + y2="10.576721" + gradientUnits="userSpaceOnUse" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4269" + id="linearGradient2440" + x1="2.0651877" + y1="12.625902" + x2="6.8378897" + y2="13.920053" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(1.1362892,-2.762136)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4269" + id="linearGradient2442" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(-1,0,0,1,31.179578,-2.86473)" + x1="2.0651877" + y1="12.625902" + x2="6.8378897" + y2="13.920053" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4269" + id="linearGradient2444" + x1="15.630395" + y1="22.874208" + x2="15.630395" + y2="8.5305319" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(1.256521,0,0,-1.256521,-7.854319,28.773309)" /> + <radialGradient + gradientTransform="matrix(0.418975,2.444023e-18,-2.444023e-18,0.418975,11.20548,5.727248)" + spreadMethod="reflect" + gradientUnits="userSpaceOnUse" + r="10.885714" + fy="9.8571424" + fx="19.285715" + cy="9.8571424" + cx="19.285715" + id="radialGradient2342" + xlink:href="#linearGradient4045" + inkscape:collect="always" /> + <linearGradient + y2="13.920053" + x2="6.8378897" + y1="12.625902" + x1="2.0651877" + gradientTransform="matrix(-1,0,0,1,32.04188,-2.86473)" + gradientUnits="userSpaceOnUse" + id="linearGradient2340" + xlink:href="#linearGradient4269" + inkscape:collect="always" /> + <linearGradient + y2="11.597325" + x2="7.1114841" + y1="15.912388" + x1="7.8517423" + gradientTransform="translate(0.426158,-2.762136)" + gradientUnits="userSpaceOnUse" + id="linearGradient2338" + xlink:href="#linearGradient4269" + inkscape:collect="always" /> + <linearGradient + y2="13.35532" + x2="23.888865" + y1="11.264216" + x1="31.692968" + gradientTransform="translate(-0.947018,-0.885198)" + gradientUnits="userSpaceOnUse" + id="linearGradient2336" + xlink:href="#linearGradient4183" + inkscape:collect="always" /> + <linearGradient + y2="12.115559" + x2="-0.68574232" + y1="12.115559" + x1="10.57493" + gradientTransform="translate(1.262691,-1.100752)" + gradientUnits="userSpaceOnUse" + id="linearGradient2334" + xlink:href="#linearGradient4183" + inkscape:collect="always" /> + <linearGradient + y2="10.576721" + x2="14.013638" + y1="2.7028866" + x1="15.647213" + gradientUnits="userSpaceOnUse" + id="linearGradient2332" + xlink:href="#linearGradient4183" + inkscape:collect="always" /> + <linearGradient + id="linearGradient2326"> + <stop + style="stop-color:#26b000;stop-opacity:1;" + offset="0" + id="stop2328" /> + <stop + style="stop-color:#26b000;stop-opacity:0;" + offset="1" + id="stop2330" /> + </linearGradient> + <linearGradient + id="linearGradient2320"> + <stop + id="stop2322" + offset="0" + style="stop-color:#26b000;stop-opacity:1;" /> + <stop + id="stop2324" + offset="1" + style="stop-color:#145f00;stop-opacity:1;" /> + </linearGradient> + <linearGradient + id="linearGradient2314"> + <stop + style="stop-color:#80000e;stop-opacity:1;" + offset="0" + id="stop2316" /> + <stop + style="stop-color:#b00014;stop-opacity:0;" + offset="1" + id="stop2318" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4183" + id="linearGradient2312" + x1="1.0046476" + y1="12.825893" + x2="7.9239235" + y2="12.825893" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(1.262691,-1.100752)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4183" + id="linearGradient2310" + x1="24.397505" + y1="12.535715" + x2="31.31678" + y2="12.535715" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-0.947018,-0.885198)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4183" + id="linearGradient2308" + x1="15.647213" + y1="2.7028866" + x2="14.013638" + y2="10.576721" + gradientUnits="userSpaceOnUse" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4269" + id="linearGradient2306" + x1="2.0651877" + y1="12.625902" + x2="6.8378897" + y2="13.920053" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(0.426158,-2.762136)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4269" + id="linearGradient2304" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(-1,0,0,1,32.04188,-2.86473)" + x1="2.0651877" + y1="12.625902" + x2="6.8378897" + y2="13.920053" /> + <linearGradient + gradientTransform="matrix(0.875025,0,0,0.875025,0.666703,0.177907)" + gradientUnits="userSpaceOnUse" + y2="22.512505" + x2="27.5625" + y1="6.7288713" + x1="16.826796" + id="linearGradient2302" + xlink:href="#linearGradient4183" + inkscape:collect="always" /> + <linearGradient + id="linearGradient2296"> + <stop + id="stop2298" + offset="0" + style="stop-color:#80000e;stop-opacity:1;" /> + <stop + id="stop2300" + offset="1" + style="stop-color:#b00014;stop-opacity:0;" /> + </linearGradient> + <linearGradient + id="linearGradient2290"> + <stop + style="stop-color:#1db000;stop-opacity:1;" + offset="0" + id="stop2292" /> + <stop + style="stop-color:#0f5f00;stop-opacity:1;" + offset="1" + id="stop2294" /> + </linearGradient> + <linearGradient + id="linearGradient2284"> + <stop + id="stop2286" + offset="0" + style="stop-color:#1db000;stop-opacity:1;" /> + <stop + id="stop2288" + offset="1" + style="stop-color:#1db000;stop-opacity:0;" /> + </linearGradient> + <linearGradient + id="linearGradient2278"> + <stop + id="stop2280" + offset="0" + style="stop-color:#ffffff;stop-opacity:0" /> + <stop + id="stop2282" + offset="1" + style="stop-color:#fefee7;stop-opacity:0.89308178" /> + </linearGradient> + <linearGradient + gradientUnits="userSpaceOnUse" + y2="355.44769" + x2="189.20502" + y1="118.36168" + x1="192.86734" + id="linearGradient2702" + xlink:href="#linearGradient3169" + inkscape:collect="always" /> + <linearGradient + inkscape:collect="always" + id="linearGradient3308"> + <stop + style="stop-color:#ffffff;stop-opacity:1" + offset="0" + id="stop3310" /> + <stop + style="stop-color:#ffffff;stop-opacity:0" + offset="1" + id="stop3312" /> + </linearGradient> + <linearGradient + id="linearGradient3289" + inkscape:collect="always"> + <stop + id="stop3291" + offset="0" + style="stop-color:#999999;stop-opacity:1" /> + <stop + id="stop3293" + offset="1" + style="stop-color:#000000;stop-opacity:1" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + id="linearGradient3193"> + <stop + style="stop-color:#ffffff;stop-opacity:1" + offset="0" + id="stop3195" /> + <stop + style="stop-color:#000000;stop-opacity:1" + offset="1" + id="stop3197" /> + </linearGradient> + <linearGradient + id="linearGradient3181"> + <stop + id="stop3183" + offset="0" + style="stop-color:#ff0000;stop-opacity:1;" /> + <stop + style="stop-color:#ff0000;stop-opacity:0.65271967" + offset="0.11529652" + id="stop3185" /> + <stop + id="stop3187" + offset="1" + style="stop-color:#000000;stop-opacity:0.15481172" /> + </linearGradient> + <linearGradient + id="linearGradient3169"> + <stop + id="stop3171" + offset="0" + style="stop-color:#ff0000;stop-opacity:1;" /> + <stop + id="stop3173" + offset="1" + style="stop-color:#ff0000;stop-opacity:0;" /> + </linearGradient> + <linearGradient + id="linearGradient2385"> + <stop + style="stop-color:#ff0000;stop-opacity:1;" + offset="0" + id="stop2387" /> + <stop + id="stop3175" + offset="0.87037039" + style="stop-color:#ff0000;stop-opacity:0.55172414;" /> + <stop + style="stop-color:#ff0000;stop-opacity:1;" + offset="1" + id="stop2389" /> + </linearGradient> + <inkscape:perspective + sodipodi:type="inkscape:persp3d" + inkscape:vp_x="0 : 526.18109 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_z="744.09448 : 526.18109 : 1" + inkscape:persp3d-origin="372.04724 : 350.78739 : 1" + id="perspective10" /> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient2385" + id="radialGradient3163" + cx="184.85791" + cy="163.42795" + fx="184.85791" + fy="163.42795" + r="140.91121" + gradientUnits="userSpaceOnUse" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3181" + id="linearGradient3179" + x1="175.76654" + y1="316.97113" + x2="184.85791" + y2="23.016739" + gradientUnits="userSpaceOnUse" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3193" + id="linearGradient3199" + x1="204.55589" + y1="262.45413" + x2="204.55589" + y2="62.412689" + gradientUnits="userSpaceOnUse" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3193" + id="linearGradient3203" + gradientUnits="userSpaceOnUse" + x1="175.13184" + y1="259.03506" + x2="226.90887" + y2="65.800499" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3193" + id="linearGradient3211" + gradientUnits="userSpaceOnUse" + x1="204.55589" + y1="262.45413" + x2="204.55589" + y2="62.412689" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3193" + id="linearGradient3213" + gradientUnits="userSpaceOnUse" + x1="204.55589" + y1="262.45413" + x2="204.55589" + y2="62.412689" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3289" + id="linearGradient3287" + gradientUnits="userSpaceOnUse" + x1="224.26379" + y1="259.7438" + x2="172.07999" + y2="66.61824" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3289" + id="linearGradient3301" + gradientUnits="userSpaceOnUse" + x1="224.26379" + y1="259.7438" + x2="172.07999" + y2="66.61824" + gradientTransform="matrix(-1.1122783,-0.2980341,0.2980341,-1.1122783,376.2049,402.98248)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3308" + id="linearGradient3306" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(-1.1122783,-0.2980341,0.2980341,-1.1122783,306.50437,364.59668)" + x1="160.2529" + y1="-5.1353641" + x2="224.82684" + y2="168.2903" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3289" + id="linearGradient3322" + gradientUnits="userSpaceOnUse" + x1="224.26379" + y1="259.7438" + x2="172.07999" + y2="66.61824" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3193" + id="linearGradient3324" + gradientUnits="userSpaceOnUse" + x1="175.13184" + y1="259.03506" + x2="226.90887" + y2="65.800499" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3308" + id="linearGradient3326" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(-1.1122783,-0.2980341,0.2980341,-1.1122783,747.63347,397.26819)" + x1="160.2529" + y1="-5.1353641" + x2="224.82684" + y2="168.2903" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3289" + id="linearGradient3336" + gradientUnits="userSpaceOnUse" + x1="224.26379" + y1="259.7438" + x2="172.07999" + y2="66.61824" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3193" + id="linearGradient3338" + gradientUnits="userSpaceOnUse" + x1="175.13184" + y1="259.03506" + x2="226.90887" + y2="65.800499" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3308" + id="linearGradient3340" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(-1.1122783,-0.2980341,0.2980341,-1.1122783,558.73494,665.96877)" + x1="160.2529" + y1="-5.1353641" + x2="224.82684" + y2="168.2903" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3289" + id="linearGradient3360" + gradientUnits="userSpaceOnUse" + x1="224.26379" + y1="259.7438" + x2="172.07999" + y2="66.61824" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3193" + id="linearGradient2641" + gradientUnits="userSpaceOnUse" + x1="175.13184" + y1="259.03506" + x2="226.90887" + y2="65.800499" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3308" + id="linearGradient3364" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(-1.1122783,-0.2980341,0.2980341,-1.1122783,558.73494,665.96877)" + x1="160.2529" + y1="-5.1353641" + x2="224.82684" + y2="168.2903" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3289" + id="linearGradient3366" + gradientUnits="userSpaceOnUse" + x1="224.26379" + y1="259.7438" + x2="172.07999" + y2="66.61824" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3193" + id="linearGradient3368" + gradientUnits="userSpaceOnUse" + x1="175.13184" + y1="259.03506" + x2="226.90887" + y2="65.800499" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3308" + id="linearGradient2646" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(-1.1122783,-0.2980341,0.2980341,-1.1122783,747.63347,397.26819)" + x1="160.2529" + y1="-5.1353641" + x2="224.82684" + y2="168.2903" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3289" + id="linearGradient3372" + gradientUnits="userSpaceOnUse" + x1="224.26379" + y1="259.7438" + x2="172.07999" + y2="66.61824" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3193" + id="linearGradient3374" + gradientUnits="userSpaceOnUse" + x1="175.13184" + y1="259.03506" + x2="226.90887" + y2="65.800499" /> + <linearGradient + y2="13.920053" + x2="6.8378897" + y1="12.625902" + x1="2.0651877" + gradientTransform="matrix(-1,0,0,1,32.04188,-2.86473)" + gradientUnits="userSpaceOnUse" + id="linearGradient2845" + xlink:href="#linearGradient4269" + inkscape:collect="always" /> + <linearGradient + y2="11.597325" + x2="7.1114841" + y1="15.912388" + x1="7.8517423" + gradientTransform="translate(0.426158,-2.762136)" + gradientUnits="userSpaceOnUse" + id="linearGradient2843" + xlink:href="#linearGradient4269" + inkscape:collect="always" /> + <linearGradient + y2="13.35532" + x2="23.888865" + y1="11.264216" + x1="31.692968" + gradientTransform="translate(-0.947018,-0.885198)" + gradientUnits="userSpaceOnUse" + id="linearGradient2841" + xlink:href="#linearGradient4183" + inkscape:collect="always" /> + <linearGradient + y2="12.115559" + x2="-0.68574232" + y1="12.115559" + x1="10.57493" + gradientTransform="translate(1.262691,-1.100752)" + gradientUnits="userSpaceOnUse" + id="linearGradient2839" + xlink:href="#linearGradient4183" + inkscape:collect="always" /> + <linearGradient + y2="10.576721" + x2="14.013638" + y1="2.7028866" + x1="15.647213" + gradientUnits="userSpaceOnUse" + id="linearGradient2837" + xlink:href="#linearGradient4183" + inkscape:collect="always" /> + <linearGradient + id="linearGradient2831"> + <stop + style="stop-color:#26b000;stop-opacity:1;" + offset="0" + id="stop2833" /> + <stop + style="stop-color:#26b000;stop-opacity:0;" + offset="1" + id="stop2835" /> + </linearGradient> + <linearGradient + id="linearGradient2825"> + <stop + id="stop2827" + offset="0" + style="stop-color:#26b000;stop-opacity:1;" /> + <stop + id="stop2829" + offset="1" + style="stop-color:#145f00;stop-opacity:1;" /> + </linearGradient> + <linearGradient + id="linearGradient2819"> + <stop + style="stop-color:#80000e;stop-opacity:1;" + offset="0" + id="stop2821" /> + <stop + style="stop-color:#b00014;stop-opacity:0;" + offset="1" + id="stop2823" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4183" + id="linearGradient2817" + x1="1.0046476" + y1="12.825893" + x2="7.9239235" + y2="12.825893" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(1.262691,-1.100752)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4183" + id="linearGradient2815" + x1="24.397505" + y1="12.535715" + x2="31.31678" + y2="12.535715" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-0.947018,-0.885198)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4183" + id="linearGradient2813" + x1="15.647213" + y1="2.7028866" + x2="14.013638" + y2="10.576721" + gradientUnits="userSpaceOnUse" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4269" + id="linearGradient2811" + x1="2.0651877" + y1="12.625902" + x2="6.8378897" + y2="13.920053" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(0.426158,-2.762136)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4269" + id="linearGradient2809" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(-1,0,0,1,32.04188,-2.86473)" + x1="2.0651877" + y1="12.625902" + x2="6.8378897" + y2="13.920053" /> + <linearGradient + gradientTransform="matrix(0.875025,0,0,0.875025,0.666703,0.177907)" + gradientUnits="userSpaceOnUse" + y2="22.512505" + x2="27.5625" + y1="6.7288713" + x1="16.826796" + id="linearGradient2807" + xlink:href="#linearGradient4183" + inkscape:collect="always" /> + <linearGradient + id="linearGradient2801"> + <stop + id="stop2803" + offset="0" + style="stop-color:#80000e;stop-opacity:1;" /> + <stop + id="stop2805" + offset="1" + style="stop-color:#b00014;stop-opacity:0;" /> + </linearGradient> + <linearGradient + id="linearGradient2795"> + <stop + style="stop-color:#1db000;stop-opacity:1;" + offset="0" + id="stop2797" /> + <stop + style="stop-color:#0f5f00;stop-opacity:1;" + offset="1" + id="stop2799" /> + </linearGradient> + <linearGradient + id="linearGradient2789"> + <stop + id="stop2791" + offset="0" + style="stop-color:#1db000;stop-opacity:1;" /> + <stop + id="stop2793" + offset="1" + style="stop-color:#1db000;stop-opacity:0;" /> + </linearGradient> + <linearGradient + id="linearGradient2783"> + <stop + id="stop2785" + offset="0" + style="stop-color:#ffffff;stop-opacity:0" /> + <stop + id="stop2787" + offset="1" + style="stop-color:#fcfbcb;stop-opacity:1" /> + </linearGradient> + <linearGradient + id="linearGradient3362"> + <stop + id="stop3364" + offset="0" + style="stop-color:#000000;stop-opacity:1;" /> + <stop + id="stop3366" + offset="1" + style="stop-color:#ffffff;stop-opacity:1;" /> + </linearGradient> + <linearGradient + id="linearGradient3370"> + <stop + id="stop3372" + offset="0" + style="stop-color:#d7d7d7;stop-opacity:1;" /> + <stop + id="stop3374" + offset="1" + style="stop-color:#7c7c7c;stop-opacity:1;" /> + </linearGradient> + <inkscape:perspective + id="perspective4283" + inkscape:persp3d-origin="8 : 5.3333333 : 1" + inkscape:vp_z="16 : 8 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 8 : 1" + sodipodi:type="inkscape:persp3d" /> + <linearGradient + gradientUnits="userSpaceOnUse" + y2="16.739393" + x2="32.578228" + y1="-0.80084854" + x1="2.965755" + id="linearGradient2439" + xlink:href="#linearGradient2433" + inkscape:collect="always" /> + <linearGradient + id="linearGradient2433" + inkscape:collect="always"> + <stop + id="stop2435" + offset="0" + style="stop-color:#008000;stop-opacity:1;" /> + <stop + id="stop2437" + offset="1" + style="stop-color:#008000;stop-opacity:0;" /> + </linearGradient> + <linearGradient + y2="10.576721" + x2="14.013638" + y1="2.7028866" + x1="15.647213" + gradientUnits="userSpaceOnUse" + id="linearGradient2770" + xlink:href="#linearGradient4183" + inkscape:collect="always" /> + <linearGradient + y2="12.115559" + x2="-0.68574232" + y1="12.115559" + x1="10.57493" + gradientTransform="translate(1.262691,-1.100752)" + gradientUnits="userSpaceOnUse" + id="linearGradient2768" + xlink:href="#linearGradient4183" + inkscape:collect="always" /> + <linearGradient + y2="13.35532" + x2="23.888865" + y1="11.264216" + x1="31.692968" + gradientTransform="translate(-0.947018,-0.885198)" + gradientUnits="userSpaceOnUse" + id="linearGradient2766" + xlink:href="#linearGradient4183" + inkscape:collect="always" /> + <linearGradient + y2="11.597325" + x2="7.1114841" + y1="15.912388" + x1="7.8517423" + gradientTransform="translate(0.426158,-2.762136)" + gradientUnits="userSpaceOnUse" + id="linearGradient2764" + xlink:href="#linearGradient4269" + inkscape:collect="always" /> + <linearGradient + y2="13.920053" + x2="6.8378897" + y1="12.625902" + x1="2.0651877" + gradientTransform="matrix(-1,0,0,1,32.04188,-2.86473)" + gradientUnits="userSpaceOnUse" + id="linearGradient2762" + xlink:href="#linearGradient4269" + inkscape:collect="always" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4183" + id="linearGradient2917" + gradientUnits="userSpaceOnUse" + x1="15.647213" + y1="2.7028866" + x2="14.013638" + y2="10.576721" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4183" + id="linearGradient2919" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(1.262691,-1.100752)" + x1="10.57493" + y1="12.115559" + x2="2.7672646" + y2="12.949513" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4183" + id="linearGradient2921" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-0.947018,-0.885198)" + x1="31.692968" + y1="11.264216" + x2="23.888865" + y2="13.35532" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4269" + id="linearGradient2923" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(0.426158,-2.762136)" + x1="11.408385" + y1="16.110582" + x2="7.293807" + y2="12.113755" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4269" + id="linearGradient2925" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(-1,0,0,1,32.04188,-2.86473)" + x1="2.0651877" + y1="12.625902" + x2="6.8378897" + y2="13.920053" /> + </defs> + <sodipodi:namedview + id="base" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:pageopacity="0.0" + inkscape:pageshadow="2" + inkscape:zoom="7.919596" + inkscape:cx="15.568279" + inkscape:cy="13.617397" + inkscape:document-units="px" + inkscape:current-layer="layer1" + width="32px" + height="32px" + showguides="true" + inkscape:guide-bbox="true" + inkscape:window-width="1600" + inkscape:window-height="926" + inkscape:window-x="0" + inkscape:window-y="220" + showgrid="false"> + <sodipodi:guide + orientation="vertical" + position="11.237947" + id="guide3146" /> + </sodipodi:namedview> + <metadata + id="metadata7"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + </cc:Work> + </rdf:RDF> + </metadata> + <g + inkscape:label="Calque 1" + inkscape:groupmode="layer" + id="layer1"> + <g + id="g2364" + inkscape:label="Calque 1" + transform="translate(14.730114,-3.4355522)"> + <g + transform="translate(7.9455775,4.2707653)" + inkscape:label="Calque 1" + id="g2446"> + <g + id="g2181" + transform="matrix(-0.4376782,-0.758081,0.7581751,-0.4377326,3.5952686,30.820492)" + style="fill:none;stroke:#000000;stroke-opacity:0.44968555"> + <path + style="opacity:1;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.65573961;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.44968555" + d="M 41.109694,-0.41817229 C 40.505298,0.20454826 39.040867,0.77635346 37.592239,0.77635106 C 36.102089,0.77635106 34.114653,0.15682998 33.532659,-0.49267807 L 33.569913,-2.0031726 L 33.569913,-3.0835065 C 31.027414,-3.5787101 30.997014,-3.8285637 27.525623,-3.8285643 C 24.054233,-3.8285649 23.830777,-3.5759718 21.29017,-3.0462535 L 21.29017,-0.3436665 C 20.685773,0.27905404 19.221343,0.87609843 17.772714,0.87609724 C 16.282564,0.87609724 14.623294,0.43325774 13.915083,-0.41817229 L 14.138601,-5.7646408 C 18.129172,-7.3187814 22.030595,-8.3970767 27.437882,-8.5586077 C 32.38601,-8.450833 36.259126,-7.7053161 40.886177,-5.8763994 L 41.109694,-0.41817229 z " + id="path2183" + sodipodi:nodetypes="csccczccsccccc" /> + </g> + <g + id="g2451" + transform="matrix(-0.4400595,-0.7622054,0.7622054,-0.4400595,-10.917299,27.830684)"> + <path + sodipodi:nodetypes="cccsccsccsccc" + id="path2453" + d="M 16.100095,4.59375 C 10.946289,4.7477067 7.2256019,5.7999634 3.4220983,7.28125 L 3.2345983,10.227679 C 3.7846813,10.972881 5.0136533,11.508929 6.4220983,11.508929 C 7.7912983,11.508929 8.9758403,11.004648 9.5470983,10.290179 L 9.5470983,9.1875 C 11.968608,8.682612 12.862258,8.4375 16.125,8.4375 C 19.479577,8.4375001 20.38467,8.6842603 22.807982,9.15625 L 22.807982,10.165179 C 23.37924,10.879648 24.563781,11.383929 25.932982,11.383929 C 27.341427,11.383929 28.53915,10.847881 29.089232,10.102679 L 28.901732,7.15625 C 24.491586,5.413068 20.816266,4.6964725 16.100095,4.59375 z " + style="opacity:1;fill:url(#linearGradient2483);fill-opacity:1;stroke:#0f5600;stroke-width:0.625;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> + <path + sodipodi:nodetypes="cccsccc" + id="path2455" + d="M 6.4075414,13.019293 C 7.7882612,13.019293 8.983936,12.610489 9.5600003,12.01696 L 9.5600003,10.430989 C 8.8231919,11.109285 7.789205,11.494948 6.4075414,11.494948 C 4.9854414,11.494948 3.9881276,11.13019 3.2127675,10.48174 L 3.2127675,11.966208 C 3.7674786,12.585269 4.9872465,13.019293 6.4075414,13.019293 z " + style="opacity:1;fill:url(#linearGradient2485);fill-opacity:1;stroke:#0f5600;stroke-width:0.57204324;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> + <path + sodipodi:nodetypes="cccsccc" + id="path2457" + d="M 25.967532,12.944669 C 27.348252,12.944669 28.543927,12.535865 29.119991,11.942336 L 29.119991,10.356365 C 28.383183,11.034661 27.349196,11.420324 25.967532,11.420324 C 24.545432,11.420324 23.548118,11.055566 22.772758,10.407116 L 22.772758,11.891584 C 23.327469,12.510645 24.547237,12.944669 25.967532,12.944669 z " + style="opacity:1;fill:url(#linearGradient2487);fill-opacity:1;stroke:#0f5600;stroke-width:0.57204324;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> + <path + sodipodi:nodetypes="cccsccc" + id="path2459" + d="M 6.6822725,11.157918 C 8.0629923,11.157918 8.7535908,10.73333 9.3296551,10.139801 L 9.0644746,7.3100024 C 8.3276662,7.9882984 8.1270706,8.5445024 6.745407,8.5445024 C 5.323307,8.5445024 4.4996132,8.1797444 3.7242531,7.5312944 L 3.4874986,10.104833 C 4.0422097,10.723894 5.2619776,11.157918 6.6822725,11.157918 z " + style="opacity:1;fill:url(#linearGradient2489);fill-opacity:1;stroke:none;stroke-width:0.57204324;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> + <path + sodipodi:nodetypes="cccsccc" + id="path2461" + d="M 25.633599,11.055324 C 24.252879,11.055324 23.56228,10.630736 22.986216,10.037207 L 22.418005,7.3779497 C 23.154814,8.0562457 24.188801,8.4419087 25.570464,8.4419087 C 26.992564,8.4419087 27.816258,8.0771507 28.591618,7.4287007 L 28.828373,10.002239 C 28.273662,10.6213 27.053894,11.055324 25.633599,11.055324 z " + style="opacity:1;fill:url(#linearGradient2491);fill-opacity:1;stroke:none;stroke-width:0.57204324;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> + </g> + </g> + </g> + <path + sodipodi:nodetypes="csc" + id="path3488" + d="M 18.019888,12.625004 C 18.48189,11.534667 18.765826,10.027007 18.765826,8.3750001 C 18.765826,6.7229936 18.48189,5.2153338 18.019888,4.1249963" + style="opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#008000;stroke-width:0.50400000000000000;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0;visibility:visible;display:inline;overflow:visible" /> + <g + id="g2892" + inkscape:label="Calque 1" + transform="translate(-53.149937,4.9260696)"> + <g + transform="matrix(4.9064853e-2,-8.3536268e-2,8.8523433e-2,4.8433051e-2,48.54228,7.2086084)" + inkscape:label="Layer 1" + id="g2651"> + <g + id="g3342" + transform="matrix(0.4480735,0,0,0.4170774,98.907461,118.01666)"> + <path + transform="matrix(-1.1122783,-0.2980341,0.2980341,-1.1122783,306.50437,364.59668)" + d="M 301.02545,162.41779 A 100.0051,100.0051 0 1 1 101.01526,162.41779 A 100.0051,100.0051 0 1 1 301.02545,162.41779 z" + sodipodi:ry="100.0051" + sodipodi:rx="100.0051" + sodipodi:cy="162.41779" + sodipodi:cx="201.02036" + id="path3209" + style="opacity:1;fill:url(#linearGradient3372);fill-opacity:1;stroke:none" + sodipodi:type="arc" /> + <path + transform="matrix(0.9122383,-0.2444335,0.2444335,0.9122383,-91.758986,25.004372)" + d="M 301.02545,162.41779 A 100.0051,100.0051 0 1 1 101.01526,162.41779 A 100.0051,100.0051 0 1 1 301.02545,162.41779 z" + sodipodi:ry="100.0051" + sodipodi:rx="100.0051" + sodipodi:cy="162.41779" + sodipodi:cx="201.02036" + id="path3201" + style="opacity:0.24886876;fill:url(#linearGradient3374);fill-opacity:1;stroke:none" + sodipodi:type="arc" /> + <path + transform="matrix(-1.1122783,-0.2980341,0.2980341,-1.1122783,306.50437,364.59668)" + d="M 279.30514,162.41779 A 78.284782,79.05574 0 1 1 122.73557,162.41779 A 78.284782,79.05574 0 1 1 279.30514,162.41779 z" + sodipodi:ry="79.05574" + sodipodi:rx="78.284782" + sodipodi:cy="162.41779" + sodipodi:cx="201.02036" + id="path3295" + style="opacity:0.59728507;fill:url(#linearGradient2702);fill-opacity:1;stroke:none" + sodipodi:type="arc" /> + </g> + </g> + </g> + </g> +</svg> diff --git a/sflphone-gtk/pixmaps/record.svg b/sflphone-gtk/pixmaps/record.svg new file mode 100644 index 0000000000000000000000000000000000000000..9147567fec03ead2e355bc685db957fd18da2db0 --- /dev/null +++ b/sflphone-gtk/pixmaps/record.svg @@ -0,0 +1,1057 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:xlink="http://www.w3.org/1999/xlink" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="24" + height="24" + id="svg2" + sodipodi:version="0.32" + inkscape:version="0.46" + version="1.0" + sodipodi:docbase="/home/plbeaudoin/SFLPhone/sflphone/sflphone-gtk/pixmaps" + sodipodi:docname="rec_call2.svg" + inkscape:output_extension="org.inkscape.output.svg.inkscape" + sodipodi:modified="true"> + <defs + id="defs4"> + <inkscape:perspective + sodipodi:type="inkscape:persp3d" + inkscape:vp_x="0 : 12 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_z="24 : 12 : 1" + inkscape:persp3d-origin="12 : 8 : 1" + id="perspective77" /> + <linearGradient + id="linearGradient4045"> + <stop + style="stop-color:#ffffff;stop-opacity:0" + offset="0" + id="stop4047" /> + <stop + style="stop-color:#fefee7;stop-opacity:0.89308178" + offset="1" + id="stop4049" /> + </linearGradient> + <linearGradient + id="linearGradient4269"> + <stop + style="stop-color:#1db000;stop-opacity:1;" + offset="0" + id="stop4271" /> + <stop + style="stop-color:#1db000;stop-opacity:0;" + offset="1" + id="stop4273" /> + </linearGradient> + <linearGradient + id="linearGradient4183"> + <stop + id="stop4185" + offset="0" + style="stop-color:#1db000;stop-opacity:1;" /> + <stop + id="stop4187" + offset="1" + style="stop-color:#0f5f00;stop-opacity:1;" /> + </linearGradient> + <linearGradient + id="linearGradient4167"> + <stop + style="stop-color:#80000e;stop-opacity:1;" + offset="0" + id="stop4169" /> + <stop + style="stop-color:#b00014;stop-opacity:0;" + offset="1" + id="stop4171" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4183" + id="linearGradient2224" + x1="16.826796" + y1="6.7288713" + x2="27.5625" + y2="22.512505" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.875025,0,0,0.875025,0.666703,0.177907)" /> + <linearGradient + y2="13.920053" + x2="6.8378897" + y1="12.625902" + x1="2.0651877" + gradientTransform="matrix(-1,0,0,1,32.04188,-2.86473)" + gradientUnits="userSpaceOnUse" + id="linearGradient1388" + xlink:href="#linearGradient4269" + inkscape:collect="always" /> + <linearGradient + gradientTransform="translate(0.426158,-2.762136)" + gradientUnits="userSpaceOnUse" + y2="13.920053" + x2="6.8378897" + y1="12.625902" + x1="2.0651877" + id="linearGradient1386" + xlink:href="#linearGradient4269" + inkscape:collect="always" /> + <linearGradient + gradientUnits="userSpaceOnUse" + y2="10.576721" + x2="14.013638" + y1="2.7028866" + x1="15.647213" + id="linearGradient1384" + xlink:href="#linearGradient4183" + inkscape:collect="always" /> + <linearGradient + gradientTransform="translate(-0.947018,-0.885198)" + gradientUnits="userSpaceOnUse" + y2="12.535715" + x2="31.31678" + y1="12.535715" + x1="24.397505" + id="linearGradient1382" + xlink:href="#linearGradient4183" + inkscape:collect="always" /> + <linearGradient + gradientTransform="translate(1.262691,-1.100752)" + gradientUnits="userSpaceOnUse" + y2="12.825893" + x2="7.9239235" + y1="12.825893" + x1="1.0046476" + id="linearGradient1380" + xlink:href="#linearGradient4183" + inkscape:collect="always" /> + <linearGradient + id="linearGradient1374"> + <stop + id="stop1376" + offset="0" + style="stop-color:#80000e;stop-opacity:1;" /> + <stop + id="stop1378" + offset="1" + style="stop-color:#b00014;stop-opacity:0;" /> + </linearGradient> + <linearGradient + id="linearGradient1368"> + <stop + style="stop-color:#26b000;stop-opacity:1;" + offset="0" + id="stop1370" /> + <stop + style="stop-color:#145f00;stop-opacity:1;" + offset="1" + id="stop1372" /> + </linearGradient> + <linearGradient + id="linearGradient1362"> + <stop + id="stop1364" + offset="0" + style="stop-color:#26b000;stop-opacity:1;" /> + <stop + id="stop1366" + offset="1" + style="stop-color:#26b000;stop-opacity:0;" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4183" + id="linearGradient1406" + gradientUnits="userSpaceOnUse" + x1="15.647213" + y1="2.7028866" + x2="14.013638" + y2="10.576721" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4183" + id="linearGradient1408" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(1.262691,-1.100752)" + x1="10.57493" + y1="12.115559" + x2="-0.68574232" + y2="12.115559" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4183" + id="linearGradient1410" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-0.947018,-0.885198)" + x1="31.692968" + y1="11.264216" + x2="23.888865" + y2="13.35532" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4269" + id="linearGradient1412" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(0.426158,-2.762136)" + x1="7.8517423" + y1="15.912388" + x2="7.1114841" + y2="11.597325" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4269" + id="linearGradient1414" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(-1,0,0,1,32.04188,-2.86473)" + x1="2.0651877" + y1="12.625902" + x2="6.8378897" + y2="13.920053" /> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient4045" + id="radialGradient4051" + cx="19.285715" + cy="9.8571424" + fx="19.285715" + fy="9.8571424" + r="10.885714" + gradientUnits="userSpaceOnUse" + spreadMethod="reflect" + gradientTransform="matrix(0.418975,0,0,0.418975,11.20548,5.727248)" /> + <linearGradient + gradientTransform="matrix(1.256521,0,0,-1.256521,-7.854319,28.773309)" + gradientUnits="userSpaceOnUse" + y2="8.5305319" + x2="15.630395" + y1="22.874208" + x1="15.630395" + id="linearGradient2444" + xlink:href="#linearGradient4269" + inkscape:collect="always" /> + <linearGradient + y2="13.920053" + x2="6.8378897" + y1="12.625902" + x1="2.0651877" + gradientTransform="matrix(-1,0,0,1,31.179578,-2.86473)" + gradientUnits="userSpaceOnUse" + id="linearGradient2442" + xlink:href="#linearGradient4269" + inkscape:collect="always" /> + <linearGradient + gradientTransform="translate(1.1362892,-2.762136)" + gradientUnits="userSpaceOnUse" + y2="13.920053" + x2="6.8378897" + y1="12.625902" + x1="2.0651877" + id="linearGradient2440" + xlink:href="#linearGradient4269" + inkscape:collect="always" /> + <linearGradient + gradientUnits="userSpaceOnUse" + y2="10.576721" + x2="14.013638" + y1="2.7028866" + x1="15.647213" + id="linearGradient2438" + xlink:href="#linearGradient4183" + inkscape:collect="always" /> + <linearGradient + gradientTransform="translate(-1.9107675,-0.885198)" + gradientUnits="userSpaceOnUse" + y2="12.535715" + x2="31.31678" + y1="12.535715" + x1="24.397505" + id="linearGradient2436" + xlink:href="#linearGradient4183" + inkscape:collect="always" /> + <linearGradient + gradientTransform="translate(1.9220986,-1.100752)" + gradientUnits="userSpaceOnUse" + y2="12.825893" + x2="7.9239235" + y1="12.825893" + x1="1.0046476" + id="linearGradient2434" + xlink:href="#linearGradient4183" + inkscape:collect="always" /> + <linearGradient + id="linearGradient2428"> + <stop + id="stop2430" + offset="0" + style="stop-color:#80000e;stop-opacity:1;" /> + <stop + id="stop2432" + offset="1" + style="stop-color:#b00014;stop-opacity:0;" /> + </linearGradient> + <linearGradient + id="linearGradient2422"> + <stop + style="stop-color:#26b000;stop-opacity:1;" + offset="0" + id="stop2424" /> + <stop + style="stop-color:#145f00;stop-opacity:1;" + offset="1" + id="stop2426" /> + </linearGradient> + <linearGradient + id="linearGradient2416"> + <stop + id="stop2418" + offset="0" + style="stop-color:#26b000;stop-opacity:1;" /> + <stop + id="stop2420" + offset="1" + style="stop-color:#26b000;stop-opacity:0;" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4183" + id="linearGradient2483" + gradientUnits="userSpaceOnUse" + x1="15.647213" + y1="2.7028866" + x2="14.013638" + y2="10.576721" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4183" + id="linearGradient2485" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(1.262691,-1.100752)" + x1="10.57493" + y1="12.115559" + x2="-0.68574232" + y2="12.115559" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4183" + id="linearGradient2487" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-0.947018,-0.885198)" + x1="31.692968" + y1="11.264216" + x2="23.888865" + y2="13.35532" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4269" + id="linearGradient2489" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(0.426158,-2.762136)" + x1="7.8517423" + y1="15.912388" + x2="7.1114841" + y2="11.597325" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4269" + id="linearGradient2491" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(-1,0,0,1,32.04188,-2.86473)" + x1="2.0651877" + y1="12.625902" + x2="6.8378897" + y2="13.920053" /> + <linearGradient + gradientUnits="userSpaceOnUse" + y2="355.44769" + x2="189.20502" + y1="118.36168" + x1="192.86734" + id="linearGradient2702" + xlink:href="#linearGradient3169" + inkscape:collect="always" /> + <linearGradient + inkscape:collect="always" + id="linearGradient3308"> + <stop + style="stop-color:#ffffff;stop-opacity:1" + offset="0" + id="stop3310" /> + <stop + style="stop-color:#ffffff;stop-opacity:0" + offset="1" + id="stop3312" /> + </linearGradient> + <linearGradient + id="linearGradient3289" + inkscape:collect="always"> + <stop + id="stop3291" + offset="0" + style="stop-color:#999999;stop-opacity:1" /> + <stop + id="stop3293" + offset="1" + style="stop-color:#000000;stop-opacity:1" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + id="linearGradient3193"> + <stop + style="stop-color:#ffffff;stop-opacity:1" + offset="0" + id="stop3195" /> + <stop + style="stop-color:#000000;stop-opacity:1" + offset="1" + id="stop3197" /> + </linearGradient> + <linearGradient + id="linearGradient3181"> + <stop + id="stop3183" + offset="0" + style="stop-color:#ff0000;stop-opacity:1;" /> + <stop + style="stop-color:#ff0000;stop-opacity:0.65271967" + offset="0.11529652" + id="stop3185" /> + <stop + id="stop3187" + offset="1" + style="stop-color:#000000;stop-opacity:0.15481172" /> + </linearGradient> + <linearGradient + id="linearGradient3169"> + <stop + id="stop3171" + offset="0" + style="stop-color:#ff0000;stop-opacity:1;" /> + <stop + id="stop3173" + offset="1" + style="stop-color:#ff0000;stop-opacity:0;" /> + </linearGradient> + <linearGradient + id="linearGradient2385"> + <stop + style="stop-color:#ff0000;stop-opacity:1;" + offset="0" + id="stop2387" /> + <stop + id="stop3175" + offset="0.87037039" + style="stop-color:#ff0000;stop-opacity:0.55172414;" /> + <stop + style="stop-color:#ff0000;stop-opacity:1;" + offset="1" + id="stop2389" /> + </linearGradient> + <inkscape:perspective + sodipodi:type="inkscape:persp3d" + inkscape:vp_x="0 : 526.18109 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_z="744.09448 : 526.18109 : 1" + inkscape:persp3d-origin="372.04724 : 350.78739 : 1" + id="perspective10" /> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient2385" + id="radialGradient3163" + cx="184.85791" + cy="163.42795" + fx="184.85791" + fy="163.42795" + r="140.91121" + gradientUnits="userSpaceOnUse" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3181" + id="linearGradient3179" + x1="175.76654" + y1="316.97113" + x2="184.85791" + y2="23.016739" + gradientUnits="userSpaceOnUse" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3193" + id="linearGradient3199" + x1="204.55589" + y1="262.45413" + x2="204.55589" + y2="62.412689" + gradientUnits="userSpaceOnUse" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3193" + id="linearGradient3203" + gradientUnits="userSpaceOnUse" + x1="175.13184" + y1="259.03506" + x2="226.90887" + y2="65.800499" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3193" + id="linearGradient3211" + gradientUnits="userSpaceOnUse" + x1="204.55589" + y1="262.45413" + x2="204.55589" + y2="62.412689" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3193" + id="linearGradient3213" + gradientUnits="userSpaceOnUse" + x1="204.55589" + y1="262.45413" + x2="204.55589" + y2="62.412689" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3289" + id="linearGradient3287" + gradientUnits="userSpaceOnUse" + x1="224.26379" + y1="259.7438" + x2="172.07999" + y2="66.61824" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3289" + id="linearGradient3301" + gradientUnits="userSpaceOnUse" + x1="224.26379" + y1="259.7438" + x2="172.07999" + y2="66.61824" + gradientTransform="matrix(-1.1122783,-0.2980341,0.2980341,-1.1122783,376.2049,402.98248)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3308" + id="linearGradient3306" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(-1.1122783,-0.2980341,0.2980341,-1.1122783,306.50437,364.59668)" + x1="160.2529" + y1="-5.1353641" + x2="224.82684" + y2="168.2903" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3289" + id="linearGradient3322" + gradientUnits="userSpaceOnUse" + x1="224.26379" + y1="259.7438" + x2="172.07999" + y2="66.61824" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3193" + id="linearGradient3324" + gradientUnits="userSpaceOnUse" + x1="175.13184" + y1="259.03506" + x2="226.90887" + y2="65.800499" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3308" + id="linearGradient3326" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(-1.1122783,-0.2980341,0.2980341,-1.1122783,747.63347,397.26819)" + x1="160.2529" + y1="-5.1353641" + x2="224.82684" + y2="168.2903" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3289" + id="linearGradient3336" + gradientUnits="userSpaceOnUse" + x1="224.26379" + y1="259.7438" + x2="172.07999" + y2="66.61824" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3193" + id="linearGradient3338" + gradientUnits="userSpaceOnUse" + x1="175.13184" + y1="259.03506" + x2="226.90887" + y2="65.800499" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3308" + id="linearGradient3340" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(-1.1122783,-0.2980341,0.2980341,-1.1122783,558.73494,665.96877)" + x1="160.2529" + y1="-5.1353641" + x2="224.82684" + y2="168.2903" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3289" + id="linearGradient3360" + gradientUnits="userSpaceOnUse" + x1="224.26379" + y1="259.7438" + x2="172.07999" + y2="66.61824" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3193" + id="linearGradient2641" + gradientUnits="userSpaceOnUse" + x1="175.13184" + y1="259.03506" + x2="226.90887" + y2="65.800499" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3308" + id="linearGradient3364" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(-1.1122783,-0.2980341,0.2980341,-1.1122783,558.73494,665.96877)" + x1="160.2529" + y1="-5.1353641" + x2="224.82684" + y2="168.2903" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3289" + id="linearGradient3366" + gradientUnits="userSpaceOnUse" + x1="224.26379" + y1="259.7438" + x2="172.07999" + y2="66.61824" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3193" + id="linearGradient3368" + gradientUnits="userSpaceOnUse" + x1="175.13184" + y1="259.03506" + x2="226.90887" + y2="65.800499" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3308" + id="linearGradient2646" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(-1.1122783,-0.2980341,0.2980341,-1.1122783,747.63347,397.26819)" + x1="160.2529" + y1="-5.1353641" + x2="224.82684" + y2="168.2903" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3289" + id="linearGradient3372" + gradientUnits="userSpaceOnUse" + x1="224.26379" + y1="259.7438" + x2="172.07999" + y2="66.61824" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3193" + id="linearGradient3374" + gradientUnits="userSpaceOnUse" + x1="175.13184" + y1="259.03506" + x2="226.90887" + y2="65.800499" /> + <linearGradient + y2="13.920053" + x2="6.8378897" + y1="12.625902" + x1="2.0651877" + gradientTransform="matrix(-1,0,0,1,32.04188,-2.86473)" + gradientUnits="userSpaceOnUse" + id="linearGradient2809" + xlink:href="#linearGradient4269" + inkscape:collect="always" /> + <linearGradient + y2="11.597325" + x2="7.1114841" + y1="15.912388" + x1="7.8517423" + gradientTransform="translate(0.426158,-2.762136)" + gradientUnits="userSpaceOnUse" + id="linearGradient2807" + xlink:href="#linearGradient4269" + inkscape:collect="always" /> + <linearGradient + y2="13.35532" + x2="23.888865" + y1="11.264216" + x1="31.692968" + gradientTransform="translate(-0.947018,-0.885198)" + gradientUnits="userSpaceOnUse" + id="linearGradient2805" + xlink:href="#linearGradient4183" + inkscape:collect="always" /> + <linearGradient + y2="12.115559" + x2="-0.68574232" + y1="12.115559" + x1="10.57493" + gradientTransform="translate(1.262691,-1.100752)" + gradientUnits="userSpaceOnUse" + id="linearGradient2803" + xlink:href="#linearGradient4183" + inkscape:collect="always" /> + <linearGradient + y2="10.576721" + x2="14.013638" + y1="2.7028866" + x1="15.647213" + gradientUnits="userSpaceOnUse" + id="linearGradient2801" + xlink:href="#linearGradient4183" + inkscape:collect="always" /> + <linearGradient + id="linearGradient2795"> + <stop + style="stop-color:#26b000;stop-opacity:1;" + offset="0" + id="stop2797" /> + <stop + style="stop-color:#26b000;stop-opacity:0;" + offset="1" + id="stop2799" /> + </linearGradient> + <linearGradient + id="linearGradient2789"> + <stop + id="stop2791" + offset="0" + style="stop-color:#26b000;stop-opacity:1;" /> + <stop + id="stop2793" + offset="1" + style="stop-color:#145f00;stop-opacity:1;" /> + </linearGradient> + <linearGradient + id="linearGradient2783"> + <stop + style="stop-color:#80000e;stop-opacity:1;" + offset="0" + id="stop2785" /> + <stop + style="stop-color:#b00014;stop-opacity:0;" + offset="1" + id="stop2787" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4183" + id="linearGradient2781" + x1="1.0046476" + y1="12.825893" + x2="7.9239235" + y2="12.825893" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(1.262691,-1.100752)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4183" + id="linearGradient2779" + x1="24.397505" + y1="12.535715" + x2="31.31678" + y2="12.535715" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-0.947018,-0.885198)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4183" + id="linearGradient2777" + x1="15.647213" + y1="2.7028866" + x2="14.013638" + y2="10.576721" + gradientUnits="userSpaceOnUse" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4269" + id="linearGradient2775" + x1="2.0651877" + y1="12.625902" + x2="6.8378897" + y2="13.920053" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(0.426158,-2.762136)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4269" + id="linearGradient2773" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(-1,0,0,1,32.04188,-2.86473)" + x1="2.0651877" + y1="12.625902" + x2="6.8378897" + y2="13.920053" /> + <linearGradient + gradientTransform="matrix(0.875025,0,0,0.875025,0.666703,0.177907)" + gradientUnits="userSpaceOnUse" + y2="22.512505" + x2="27.5625" + y1="6.7288713" + x1="16.826796" + id="linearGradient2771" + xlink:href="#linearGradient4183" + inkscape:collect="always" /> + <linearGradient + id="linearGradient2765"> + <stop + id="stop2767" + offset="0" + style="stop-color:#80000e;stop-opacity:1;" /> + <stop + id="stop2769" + offset="1" + style="stop-color:#b00014;stop-opacity:0;" /> + </linearGradient> + <linearGradient + id="linearGradient2759"> + <stop + style="stop-color:#1db000;stop-opacity:1;" + offset="0" + id="stop2761" /> + <stop + style="stop-color:#0f5f00;stop-opacity:1;" + offset="1" + id="stop2763" /> + </linearGradient> + <linearGradient + id="linearGradient2753"> + <stop + id="stop2755" + offset="0" + style="stop-color:#1db000;stop-opacity:1;" /> + <stop + id="stop2757" + offset="1" + style="stop-color:#1db000;stop-opacity:0;" /> + </linearGradient> + <linearGradient + id="linearGradient2747"> + <stop + id="stop2749" + offset="0" + style="stop-color:#ffffff;stop-opacity:0" /> + <stop + id="stop2751" + offset="1" + style="stop-color:#fcfbcb;stop-opacity:1" /> + </linearGradient> + <linearGradient + id="linearGradient3362"> + <stop + id="stop3364" + offset="0" + style="stop-color:#000000;stop-opacity:1;" /> + <stop + id="stop3366" + offset="1" + style="stop-color:#ffffff;stop-opacity:1;" /> + </linearGradient> + <linearGradient + id="linearGradient3370"> + <stop + id="stop3372" + offset="0" + style="stop-color:#d7d7d7;stop-opacity:1;" /> + <stop + id="stop3374" + offset="1" + style="stop-color:#7c7c7c;stop-opacity:1;" /> + </linearGradient> + <inkscape:perspective + id="perspective4283" + inkscape:persp3d-origin="8 : 5.3333333 : 1" + inkscape:vp_z="16 : 8 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 8 : 1" + sodipodi:type="inkscape:persp3d" /> + <linearGradient + gradientUnits="userSpaceOnUse" + y2="16.739393" + x2="32.578228" + y1="-0.80084854" + x1="2.965755" + id="linearGradient2439" + xlink:href="#linearGradient2433" + inkscape:collect="always" /> + <linearGradient + id="linearGradient2433" + inkscape:collect="always"> + <stop + id="stop2435" + offset="0" + style="stop-color:#008000;stop-opacity:1;" /> + <stop + id="stop2437" + offset="1" + style="stop-color:#008000;stop-opacity:0;" /> + </linearGradient> + <linearGradient + y2="10.576721" + x2="14.013638" + y1="2.7028866" + x1="15.647213" + gradientUnits="userSpaceOnUse" + id="linearGradient2734" + xlink:href="#linearGradient4183" + inkscape:collect="always" /> + <linearGradient + y2="12.115559" + x2="-0.68574232" + y1="12.115559" + x1="10.57493" + gradientTransform="translate(1.262691,-1.100752)" + gradientUnits="userSpaceOnUse" + id="linearGradient2732" + xlink:href="#linearGradient4183" + inkscape:collect="always" /> + <linearGradient + y2="13.35532" + x2="23.888865" + y1="11.264216" + x1="31.692968" + gradientTransform="translate(-0.947018,-0.885198)" + gradientUnits="userSpaceOnUse" + id="linearGradient2730" + xlink:href="#linearGradient4183" + inkscape:collect="always" /> + <linearGradient + y2="11.597325" + x2="7.1114841" + y1="15.912388" + x1="7.8517423" + gradientTransform="translate(0.426158,-2.762136)" + gradientUnits="userSpaceOnUse" + id="linearGradient2728" + xlink:href="#linearGradient4269" + inkscape:collect="always" /> + <linearGradient + y2="13.920053" + x2="6.8378897" + y1="12.625902" + x1="2.0651877" + gradientTransform="matrix(-1,0,0,1,32.04188,-2.86473)" + gradientUnits="userSpaceOnUse" + id="linearGradient2726" + xlink:href="#linearGradient4269" + inkscape:collect="always" /> + </defs> + <sodipodi:namedview + id="base" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:pageopacity="0.0" + inkscape:pageshadow="2" + inkscape:zoom="8" + inkscape:cx="22.991745" + inkscape:cy="-5.4508769" + inkscape:document-units="px" + inkscape:current-layer="layer1" + width="32px" + height="32px" + showguides="true" + inkscape:guide-bbox="true" + inkscape:window-width="1014" + inkscape:window-height="726" + inkscape:window-x="513" + inkscape:window-y="291" + showgrid="false"> + <sodipodi:guide + orientation="vertical" + position="15.982143" + id="guide3146" /> + </sodipodi:namedview> + <metadata + id="metadata7"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + </cc:Work> + </rdf:RDF> + </metadata> + <g + inkscape:label="Calque 1" + inkscape:groupmode="layer" + id="layer1"> + <path + sodipodi:type="arc" + style="fill:url(#radialGradient4051);fill-opacity:1;stroke:none;stroke-width:5.69999981;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + id="path3162" + sodipodi:cx="19.285715" + sodipodi:cy="9.8571424" + sodipodi:rx="8.0357141" + sodipodi:ry="8.0357141" + d="M 27.321429,9.8571424 A 8.0357141,8.0357141 0 1 1 11.250001,9.8571424 A 8.0357141,8.0357141 0 1 1 27.321429,9.8571424 z" + transform="matrix(0.723409,0,0,0.723409,6.772732,3.51761)" /> + <g + id="g2856" + inkscape:label="Calque 1" + transform="matrix(2.1932723,0,0,2.2300726,-70.331114,24.270266)"> + <g + transform="matrix(4.3630449e-2,-7.2802504e-2,7.8718613e-2,4.2209779e-2,17.455978,-1.2908081)" + inkscape:label="Layer 1" + id="g2651"> + <g + id="g3342" + transform="matrix(0.4480735,0,0,0.4170774,98.907461,118.01666)"> + <path + transform="matrix(-1.1122783,-0.2980341,0.2980341,-1.1122783,306.50437,364.59668)" + d="M 301.02545,162.41779 A 100.0051,100.0051 0 1 1 101.01526,162.41779 A 100.0051,100.0051 0 1 1 301.02545,162.41779 z" + sodipodi:ry="100.0051" + sodipodi:rx="100.0051" + sodipodi:cy="162.41779" + sodipodi:cx="201.02036" + id="path3209" + style="opacity:1;fill:url(#linearGradient3372);fill-opacity:1;stroke:none" + sodipodi:type="arc" /> + <path + transform="matrix(0.9122383,-0.2444335,0.2444335,0.9122383,-91.758986,25.004372)" + d="M 301.02545,162.41779 A 100.0051,100.0051 0 1 1 101.01526,162.41779 A 100.0051,100.0051 0 1 1 301.02545,162.41779 z" + sodipodi:ry="100.0051" + sodipodi:rx="100.0051" + sodipodi:cy="162.41779" + sodipodi:cx="201.02036" + id="path3201" + style="opacity:0.24886876;fill:url(#linearGradient3374);fill-opacity:1;stroke:none" + sodipodi:type="arc" /> + <path + transform="matrix(-1.1122783,-0.2980341,0.2980341,-1.1122783,306.50437,364.59668)" + d="M 279.30514,162.41779 A 78.284782,79.05574 0 1 1 122.73557,162.41779 A 78.284782,79.05574 0 1 1 279.30514,162.41779 z" + sodipodi:ry="79.05574" + sodipodi:rx="78.284782" + sodipodi:cy="162.41779" + sodipodi:cx="201.02036" + id="path3295" + style="opacity:0.59728507;fill:url(#linearGradient2702);fill-opacity:1;stroke:none" + sodipodi:type="arc" /> + </g> + </g> + </g> + </g> +</svg> diff --git a/sflphone-gtk/src/actions.c b/sflphone-gtk/src/actions.c index 6efb5cbcc125d58bc629f2cddcf0b1107a4e7471..4f5e911a52a0d6e32584a4d8c7dbf6744d265a06 100644 --- a/sflphone-gtk/src/actions.c +++ b/sflphone-gtk/src/actions.c @@ -259,6 +259,7 @@ sflphone_hang_up() case CALL_STATE_HOLD: case CALL_STATE_BUSY: case CALL_STATE_FAILURE: + case CALL_STATE_RECORD: dbus_hang_up (selectedCall); selectedCall->state = CALL_STATE_DIALING; (void) time(&selectedCall->_stop); @@ -330,6 +331,10 @@ sflphone_on_hold () case CALL_STATE_CURRENT: dbus_hold (selectedCall); break; + case CALL_STATE_RECORD: + dbus_hold (selectedCall); + break; + default: g_warning("Should not happen in sflphone_on_hold!"); break; @@ -382,6 +387,16 @@ sflphone_current( call_t * c ) update_menus(); } +void +sflphone_record( call_t * c ) +{ + if( c->state != CALL_STATE_HOLD ) + (void) time(&c->_start); + c->state = CALL_STATE_RECORD; + update_call_tree(current_calls,c); + update_menus(); +} + void sflphone_set_transfert() { @@ -702,6 +717,30 @@ sflphone_place_call ( call_t * c ) } } + +void +sflphone_rec_call() +{ + call_t * selectedCall = call_get_selected(current_calls); + dbus_set_record(selectedCall); + + + switch(selectedCall->state) + { + case CALL_STATE_CURRENT: + selectedCall->state = CALL_STATE_RECORD; + break; + case CALL_STATE_RECORD: + selectedCall->state = CALL_STATE_CURRENT; + break; + default: + g_warning("Should not happen in sflphone_off_hold ()!"); + break; + } + update_call_tree(current_calls,selectedCall); + update_menus(); +} + /* Internal to action - set the __CURRENT_ACCOUNT variable */ void sflphone_set_current_account() @@ -736,7 +775,7 @@ sflphone_fill_codec_list() c->_bandwidth = atof(details[3]); codec_list_add(c); } - + for(pl=codecs; *codecs; codecs++) { details = (gchar **)dbus_codec_details(atoi(*codecs)); diff --git a/sflphone-gtk/src/calllist.h b/sflphone-gtk/src/calllist.h index c6d28c175104ce9afa4b1d4fdf62cc51fe76e41b..98ed11dd7d3791f91b925aab902e15d1ef804a68 100644 --- a/sflphone-gtk/src/calllist.h +++ b/sflphone-gtk/src/calllist.h @@ -47,7 +47,9 @@ typedef enum /** Call is busy */ CALL_STATE_BUSY, /** Call is being transfert. During this state, the user can enter the new number. */ - CALL_STATE_TRANSFERT + CALL_STATE_TRANSFERT, + /** Call is on hold */ + CALL_STATE_RECORD } call_state_t; /** diff --git a/sflphone-gtk/src/callmanager-glue.h b/sflphone-gtk/src/callmanager-glue.h index ca92aa95cbb5057f884b5e900520c84773adb39a..c4123cd1e39732f6931696431c5de88d78df6c31 100644 --- a/sflphone-gtk/src/callmanager-glue.h +++ b/sflphone-gtk/src/callmanager-glue.h @@ -1,7 +1,6 @@ /* Generated by dbus-binding-tool; do not edit! */ -#include <glib/gtypes.h> -#include <glib/gerror.h> +#include <glib.h> #include <dbus/dbus-glib.h> G_BEGIN_DECLS @@ -422,6 +421,43 @@ static inline #endif gboolean +org_sflphone_SFLphone_CallManager_set_recording (DBusGProxy *proxy, const char * IN_callID, GError **error) + +{ + return dbus_g_proxy_call (proxy, "setRecording", error, G_TYPE_STRING, IN_callID, G_TYPE_INVALID, G_TYPE_INVALID); +} + +typedef void (*org_sflphone_SFLphone_CallManager_set_recording_reply) (DBusGProxy *proxy, GError *error, gpointer userdata); + +static void +org_sflphone_SFLphone_CallManager_set_recording_async_callback (DBusGProxy *proxy, DBusGProxyCall *call, void *user_data) +{ + DBusGAsyncData *data = (DBusGAsyncData*) user_data; + GError *error = NULL; + dbus_g_proxy_end_call (proxy, call, &error, G_TYPE_INVALID); + (*(org_sflphone_SFLphone_CallManager_set_recording_reply)data->cb) (proxy, error, data->userdata); + return; +} + +static +#ifdef G_HAVE_INLINE +inline +#endif +DBusGProxyCall* +org_sflphone_SFLphone_CallManager_set_recording_async (DBusGProxy *proxy, const char * IN_callID, org_sflphone_SFLphone_CallManager_set_recording_reply callback, gpointer userdata) + +{ + DBusGAsyncData *stuff; + stuff = g_new (DBusGAsyncData, 1); + stuff->cb = G_CALLBACK (callback); + stuff->userdata = userdata; + return dbus_g_proxy_begin_call (proxy, "setRecording", org_sflphone_SFLphone_CallManager_set_recording_async_callback, stuff, g_free, G_TYPE_STRING, IN_callID, G_TYPE_INVALID); +} +static +#ifdef G_HAVE_INLINE +inline +#endif +gboolean org_sflphone_SFLphone_CallManager_get_call_details (DBusGProxy *proxy, const char * IN_callID, GHashTable** OUT_infos, GError **error) { diff --git a/sflphone-gtk/src/calltree.c b/sflphone-gtk/src/calltree.c index 2e27a0a6485866e8af7cdde62112943c44fdb38e..6a8888ea830c500c775c7c000e0ef77725375c78 100644 --- a/sflphone-gtk/src/calltree.c +++ b/sflphone-gtk/src/calltree.c @@ -39,6 +39,7 @@ GtkToolItem * transfertButton; GtkToolItem * unholdButton; GtkToolItem * historyButton; GtkToolItem * mailboxButton; +GtkToolItem * recButton; guint transfertButtonConnId; //The button toggled signal connection ID gboolean history_shown; @@ -219,6 +220,18 @@ call_mailbox( GtkWidget* widget UNUSED, gpointer data UNUSED) if( active_calltree == history ) switch_tab(); } + + +/** + * Static rec_button + */ +static void +rec_button( GtkWidget *widget UNUSED, gpointer data UNUSED) +{ + sflphone_rec_call(); +} + + void toolbar_update_buttons () { @@ -228,6 +241,7 @@ toolbar_update_buttons () gtk_widget_set_sensitive( GTK_WIDGET(transfertButton), FALSE); gtk_widget_set_sensitive( GTK_WIDGET(mailboxButton) , FALSE); gtk_widget_set_sensitive( GTK_WIDGET(unholdButton), FALSE); + gtk_widget_set_sensitive( GTK_WIDGET(recButton), FALSE); g_object_ref(holdButton); g_object_ref(unholdButton); if( is_inserted( GTK_WIDGET(holdButton) ) ) gtk_container_remove(GTK_CONTAINER(toolbar), GTK_WIDGET(holdButton)); @@ -238,6 +252,7 @@ toolbar_update_buttons () if( is_inserted( GTK_WIDGET(callButton) ) ) gtk_container_remove(GTK_CONTAINER(toolbar), GTK_WIDGET(callButton)); if( is_inserted( GTK_WIDGET(pickupButton) ) ) gtk_container_remove(GTK_CONTAINER(toolbar), GTK_WIDGET(pickupButton)); gtk_toolbar_insert(GTK_TOOLBAR(toolbar), callButton, 0); + //gtk_toolbar_insert(GTK_TOOLBAR(toolbar), recButton, 0); gtk_signal_handler_block(GTK_OBJECT(transfertButton),transfertButtonConnId); @@ -280,6 +295,7 @@ toolbar_update_buttons () gtk_widget_set_sensitive( GTK_WIDGET(holdButton), TRUE); gtk_widget_set_sensitive( GTK_WIDGET(transfertButton), TRUE); gtk_widget_set_sensitive( GTK_WIDGET(callButton), TRUE); + gtk_widget_set_sensitive( GTK_WIDGET(recButton), TRUE); break; case CALL_STATE_BUSY: case CALL_STATE_FAILURE: @@ -294,6 +310,13 @@ toolbar_update_buttons () gtk_widget_set_sensitive( GTK_WIDGET(holdButton), TRUE); gtk_widget_set_sensitive( GTK_WIDGET(transfertButton), TRUE); break; + case CALL_STATE_RECORD: + gtk_widget_set_sensitive( GTK_WIDGET(hangupButton), TRUE); + gtk_widget_set_sensitive( GTK_WIDGET(holdButton), TRUE); + gtk_widget_set_sensitive( GTK_WIDGET(transfertButton), TRUE); + gtk_widget_set_sensitive( GTK_WIDGET(callButton), TRUE); + gtk_widget_set_sensitive( GTK_WIDGET(recButton), TRUE); + break; default: g_warning("Should not happen!"); break; @@ -312,6 +335,9 @@ toolbar_update_buttons () } } } + + + /* Call back when the user click on a call in the list */ static void selected(GtkTreeSelection *sel, void* data UNUSED ) @@ -487,6 +513,18 @@ create_toolbar () G_CALLBACK (call_mailbox), NULL); gtk_toolbar_insert(GTK_TOOLBAR(ret), GTK_TOOL_ITEM(mailboxButton), -1); + + image = gtk_image_new_from_file( ICONS_DIR "/record.svg"); + recButton = gtk_tool_button_new (image, _("Record a call")); +#if GTK_CHECK_VERSION(2,12,0) + gtk_widget_set_tooltip_text(GTK_WIDGET(recButton), _("Record a call")); +#endif + gtk_widget_set_state( GTK_WIDGET(recButton), GTK_STATE_INSENSITIVE); + g_signal_connect (G_OBJECT (recButton), "clicked", + G_CALLBACK (rec_button), NULL); + gtk_toolbar_insert(GTK_TOOLBAR(ret), GTK_TOOL_ITEM(recButton), -1); + + return ret; } @@ -679,6 +717,9 @@ update_call_tree (calltab_t* tab, call_t * c) break; case CALL_STATE_TRANSFERT: pixbuf = gdk_pixbuf_new_from_file(ICONS_DIR "/transfert.svg", NULL); + break; + case CALL_STATE_RECORD: + pixbuf = gdk_pixbuf_new_from_file(ICONS_DIR "/rec_call.svg", NULL); break; default: g_warning("Should not happen!"); diff --git a/sflphone-gtk/src/dbus.c b/sflphone-gtk/src/dbus.c index aa2edb87b9cb287bc1924d1fc5f0ba3a901321b4..c1d5d616a27547e5f8185a6b534fa9dbd7039d7f 100644 --- a/sflphone-gtk/src/dbus.c +++ b/sflphone-gtk/src/dbus.c @@ -115,10 +115,14 @@ call_state_cb (DBusGProxy *proxy UNUSED, sflphone_hung_up (c); update_call_tree( history, c ); } - else if ( strcmp(state, "UNHOLD") == 0 ) + else if ( strcmp(state, "UNHOLD_CURRENT") == 0 ) { sflphone_current (c); } + else if ( strcmp(state, "UNHOLD_RECORD") == 0 ) + { + sflphone_record (c); + } else if ( strcmp(state, "HOLD") == 0 ) { sflphone_hold (c); @@ -1278,6 +1282,21 @@ dbus_set_volume_controls( ) g_print("DBus called set_volume_controls on ConfigurationManager\n"); } + +void +dbus_set_record(const call_t * c) +{ + g_print("calling dbus_set_record on CallManager\n"); + printf("CallID : %s \n", c->callID); + GError* error = NULL; + org_sflphone_SFLphone_CallManager_set_recording ( + callManagerProxy, + c->callID, + error); + g_print("called dbus_set_record on CallManager\n"); +} + + void dbus_set_max_calls( const guint calls ) { diff --git a/sflphone-gtk/src/dbus.h b/sflphone-gtk/src/dbus.h index f621cd04b10d75cf9bd98792b34bfa8d368f9432..7f12192c54485903511356c7bdcfb6d454b9d9d0 100644 --- a/sflphone-gtk/src/dbus.h +++ b/sflphone-gtk/src/dbus.h @@ -435,4 +435,5 @@ void dbus_set_stun_server( gchar* server); guint dbus_stun_is_enabled (void); void dbus_enable_stun (void); +void dbus_set_record (const call_t * c); #endif diff --git a/sflphone-gtk/src/mainwindow.c b/sflphone-gtk/src/mainwindow.c index 6565d512fb425f0d724819f0e917055b4972a12d..e2490be9cc8bbcb06b7c3e4a15a3a5e4979b0e43 100644 --- a/sflphone-gtk/src/mainwindow.c +++ b/sflphone-gtk/src/mainwindow.c @@ -101,7 +101,7 @@ create_main_window () window = gtk_window_new (GTK_WINDOW_TOPLEVEL); gtk_container_set_border_width (GTK_CONTAINER (window), 0); gtk_window_set_title (GTK_WINDOW (window), PACKAGE); - gtk_window_set_default_size (GTK_WINDOW (window), 230, 320); + gtk_window_set_default_size (GTK_WINDOW (window), 260, 320); gtk_window_set_default_icon_from_file (ICONS_DIR "/sflphone.png", NULL); gtk_window_set_position( GTK_WINDOW( window ) , GTK_WIN_POS_MOUSE); diff --git a/sflphone-gtk/src/menus.c b/sflphone-gtk/src/menus.c index 2f7a36f156e6520a97137cae06b0b1c7f952df82..e933a6b24686fb0cd07aadc71dd3beaca7de1aa5 100644 --- a/sflphone-gtk/src/menus.c +++ b/sflphone-gtk/src/menus.c @@ -92,6 +92,11 @@ void update_menus() case CALL_STATE_FAILURE: gtk_widget_set_sensitive( GTK_WIDGET(hangUpMenu), TRUE); break; + case CALL_STATE_RECORD: + gtk_widget_set_sensitive( GTK_WIDGET(hangUpMenu), TRUE); + gtk_widget_set_sensitive( GTK_WIDGET(holdMenu), TRUE); + gtk_widget_set_sensitive( GTK_WIDGET(newCallMenu),TRUE); + break; default: g_warning("Should not happen in update_menus()!"); break; diff --git a/src/audio/audiorecord.cpp b/src/audio/audiorecord.cpp deleted file mode 100644 index 65f63803942947e3cac58e91adcab2e76e1a9cf4..0000000000000000000000000000000000000000 --- a/src/audio/audiorecord.cpp +++ /dev/null @@ -1,177 +0,0 @@ -/* - * Copyright (C) 2008 Savoir-Faire Linux inc. - * Author: Alexandre Savard <alexandre.savard@savoirfairelinux.com> - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -#include "audiorecord.h" - -AudioRecord::AudioRecord(){ - sndSmplRate_ = 44100; - channels_ = 1; - byteCounter_ = 0; - -} - - -void AudioRecord::setSndSamplingRate(int smplRate){ - sndSmplRate_ = smplRate; -} - - -void AudioRecord::openFile(std::string fileName, FILE_TYPE type, SOUND_FORMAT format) { - - channels_ =1; - fileType_ = type; - byteCounter_ = 0; - sndFormat_ = format; - - bool result = false; - - if(fileType_ == FILE_RAW){ - result = setRawFile( fileName.c_str() ); - } - else if (fileType_ == FILE_WAV){ - result = setWavFile( fileName.c_str() ); - } - -} - - -void AudioRecord::closeFile() { - - if (fp == 0) return; - - if (fileType_ == FILE_RAW) - fclose(fp); - else if (fileType_ == FILE_WAV) - this->closeWavFile(); - -} - - -bool AudioRecord::isOpenFile() { - - if(fp) - return true; - else - return false; -} - - -bool AudioRecord::setRawFile(const char *fileName) { - - char name[8192]; - strncpy(name, fileName, 8192); - if ( strstr(name, ".raw") == NULL) strcat(name, ".raw"); - fp = fopen(name, "wb"); - if ( !fp ) { - cout << "AudioRecord: could not create RAW file: " << name << '.'; - return false; - } - - if ( sndFormat_ != INT16 ) { // TODO need to change INT16 to SINT16 - sndFormat_ = INT16; - cout << "AudioRecord: using 16-bit signed integer data format for file " << name << '.'; - } - - cout << "AudioRecord: creating RAW file: " << name; - return true; -} - - -bool AudioRecord::setWavFile(const char *fileName) { - - char name[8192]; - strncpy(name, fileName, 8192); - if ( strstr(name, ".wav") == NULL) strcat(name, ".wav"); - fp = fopen(name, "wb"); - if ( !fp ) { - cout << "AudioRecord: could not create WAV file: " << name; - return false; - } - - struct wavhdr hdr = {"RIF", 44, "WAV", "fmt", 16, 1, 1, - 44100, 0, 2, 16, "dat", 0}; - hdr.riff[3] = 'F'; - hdr.wave[3] = 'E'; - hdr.fmt[3] = ' '; - hdr.data[3] = 'a'; - hdr.num_chans = channels_; - if ( sndFormat_ == INT16 ) { // TODO need to write INT16 to SINT16 - hdr.bits_per_samp = 16; - } - hdr.bytes_per_samp = (SINT16) (channels_ * hdr.bits_per_samp / 8); - hdr.bytes_per_sec = (SINT32) (hdr.sample_rate * hdr.bytes_per_samp); - - - if ( fwrite(&hdr, 4, 11, fp) != 11 ) { - cout << "AudioRecord: could not write WAV header for file " << name << '.'; - return false; - } - - cout << "AudioRecord: creating WAV file: " << name; - return true; -} - - -void AudioRecord::closeWavFile() -{ - int bytes_per_sample = 1; - if ( sndFormat_ == INT16 ) - bytes_per_sample = 2; - - - SINT32 bytes = byteCounter_ * channels_ * bytes_per_sample; - fseek(fp, 40, SEEK_SET); // jump to data length - fwrite(&bytes, 4, 1, fp); - - bytes = byteCounter_ * channels_ * bytes_per_sample + 44; // + 44 for the wave header - fseek(fp, 4, SEEK_SET); // jump to file size - fwrite(&bytes, 4, 1, fp); - fclose( fp ); -} - - -void AudioRecord::recData(SFLDataFormat* buffer, int nSamples) { - - if (fp == 0){ - cout << "AudioRecord: Can't record data, a file has not yet been opened!"; - return; - } - - if ( sndFormat_ == INT16 ) { // TODO change INT16 to SINT16 - if (nSamples <= 1){ - if ( fwrite(buffer, 2, 1, fp) != 1) - cout << "AudioRecord: Could not record data!"; - } - else { - for ( int k=0; k<nSamples; k++ ) { - cout << "Buffer[" << k << "] : " << buffer[k] << "\n"; - if ( fwrite(&buffer[k], 2, 1, fp) != 1 ) - cout << "AudioRecord: Could not record data!"; - } - } - } - - - - - byteCounter_ += (unsigned long)(sizeof(buffer) / sizeof(SINT16)); - - return; -} - diff --git a/src/audio/audiorecord.h b/src/audio/audiorecord.h deleted file mode 100644 index b38eefb29a59be117d896e9c2c6147ff43011ef3..0000000000000000000000000000000000000000 --- a/src/audio/audiorecord.h +++ /dev/null @@ -1,127 +0,0 @@ -/* - * Copyright (C) 2008 Savoir-Faire Linux inc. - * Author: Alexandre Savard <alexandre.savard@savoirfairelinux.com> - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - */ - - -#include <iostream> -#include <string.h> - -#include "global.h" - -using namespace std; - - -// structure for the wave header -struct wavhdr { - char riff[4]; // "RIFF" - SINT32 file_size; // in bytes - char wave[4]; // "WAVE" - char fmt[4]; // "fmt " - SINT32 chunk_size; // in bytes (16 for PCM) - SINT16 format_tag; // 1=PCM, 2=ADPCM, 3=IEEE float, 6=A-Law, 7=Mu-Law - SINT16 num_chans; // 1=mono, 2=stereo - SINT32 sample_rate; - SINT32 bytes_per_sec; - SINT16 bytes_per_samp; // 2=16-bit mono, 4=16-bit stereo - SINT16 bits_per_samp; - char data[4]; // "data" - SINT32 data_length; // in bytes -}; - -class AudioRecord -{ - -public: - - AudioRecord(); - - void setSndSamplingRate(int smplRate); - - /** - * Check if no otehr file is opened, then create a new one - * @param fileName A string containing teh file (with/without extension) - * @param type The sound file format (FILE_RAW, FILE_WAVE) - * @param format Internal sound format (INT16 / INT32) - */ - void openFile(std::string fileName, FILE_TYPE type, SOUND_FORMAT format); - - /** - * Close the opend recording file. If wave: cout the number of byte - */ - void closeFile(); - - /** - * Check if a file is already opened - */ - bool isOpenFile(); - - /** - * Record a chunk of data in an openend file - * @param buffer The data chunk to be recorded - * @param nSamples Number of samples (number of bytes) to be recorded - */ - void recData(SFLDataFormat* buffer, int nSamples); // TODO ad the data to rec - -protected: - - /** - * Set the header for raw files - */ - bool setRawFile(const char* fileName); - - /** - * Set the header for wave files - */ - bool setWavFile(const char* fileName); - - /** - * Compute the number of byte recorded and close the file - */ - void closeWavFile(); - - /** - * Pointer to the recorded file - */ - FILE *fp; //file pointer - - /** - * File format (RAW / WAVE) - */ - FILE_TYPE fileType_; - - /** - * Sound format (SINT16/SINT32) - */ - SOUND_FORMAT sndFormat_; - - /** - * Number of channels - */ - int channels_; - - /** - * Number f byte recorded - */ - unsigned long byteCounter_; - - /** - * Sampling rate - */ - int sndSmplRate_; - -}; diff --git a/src/audio/audiortp.cpp b/src/audio/audiortp.cpp index 34adf65db881d1e5fba25db81fd217e2315169c6..9a58c7ec0a3d65f6b17a3f475400a7855cc1413f 100644 --- a/src/audio/audiortp.cpp +++ b/src/audio/audiortp.cpp @@ -29,6 +29,7 @@ #include <math.h> #include <dlfcn.h> #include <iostream> +#include <sstream> #include "../global.h" #include "../manager.h" @@ -52,6 +53,7 @@ AudioRtp::~AudioRtp (void) { int AudioRtp::createNewSession (SIPCall *ca) { + ost::MutexLock m(_threadMutex); // something should stop the thread before... @@ -74,16 +76,19 @@ AudioRtp::createNewSession (SIPCall *ca) { _debugException("! ARTP Failure: when trying to start a thread"); throw; } + return 0; } void AudioRtp::closeRtpSession () { + ost::MutexLock m(_threadMutex); // This will make RTP threads finish. _debug("Stopping AudioRTP\n"); try { + delete _RTXThread; _RTXThread = 0; } catch(...) { _debugException("! ARTP Exception: when stopping audiortp\n"); @@ -93,6 +98,17 @@ AudioRtp::closeRtpSession () { audiolayer->stopStream(); } + +void +AudioRtp::setRecording() { + + _debug("AudioRtp::setRecording\n"); + _RTXThread->_ca->setRecording(); + +} + + + //////////////////////////////////////////////////////////////////////////////// // AudioRtpRTX Class // //////////////////////////////////////////////////////////////////////////////// @@ -133,7 +149,7 @@ AudioRtpRTX::~AudioRtpRTX () { } else { delete _session; _session = NULL; } - + delete [] micData; micData = NULL; delete [] micDataConverted; micDataConverted = NULL; delete [] micDataEncoded; micDataEncoded = NULL; @@ -177,7 +193,7 @@ AudioRtpRTX::initAudioRtpSession (void) return; } - // Initialization + if (!_sym) { _sessionRecv->setSchedulingTimeout (10000); _sessionRecv->setExpireTimeout(1000000); @@ -226,6 +242,8 @@ AudioRtpRTX::initAudioRtpSession (void) } } } + + } catch(...) { _debugException("! ARTP Failure: initialisation failed"); throw; @@ -260,6 +278,10 @@ AudioRtpRTX::sendSessionFromMic(int timestamp) //_debug("get data from mic\n"); int nbSample = audiolayer->getMic( micData , bytesAvail ) / sizeof(SFLDataFormat); int nb_sample_up = nbSample; + + // Store the length of the mic buffer in samples for recording + _nSamplesMic = nbSample; + int nbSamplesMax = _layerFrameSize * _audiocodec->getClockRate() / 1000; //_debug("resample data = %i\n", nb_sample_up); @@ -322,6 +344,7 @@ AudioRtpRTX::receiveSessionForSpkr (int& countTime) } if (_audiocodec != NULL) { + int expandedSize = _audiocodec->codecDecode( spkrDataDecoded , spkrData , size ); //buffer _receiveDataDecoded ----> short int or int16, coded on 2 bytes @@ -339,7 +362,10 @@ AudioRtpRTX::receiveSessionForSpkr (int& countTime) #ifdef DATAFORMAT_IS_FLOAT #else #endif - + + // Stor the number of samples for recording + _nSamplesSpkr = nbSample; + //audiolayer->playSamples( spkrDataConverted, nbSample * sizeof(SFLDataFormat), true); audiolayer->putMain (spkrDataConverted, nbSample * sizeof(SFLDataFormat)); @@ -419,10 +445,14 @@ AudioRtpRTX::run () { //////////////////////////// receiveSessionForSpkr(countTime); // Let's wait for the next transmit cycle - Thread::sleep(TimerPort::getTimer()); + + _ca->recAudio.recData(spkrDataConverted,micData,_nSamplesSpkr,_nSamplesMic); + + Thread::sleep(TimerPort::getTimer()); TimerPort::incTimer(_layerFrameSize); // 'frameSize' ms } - //_debug("stop stream for audiortp loop\n"); + + // _debug("stop stream for audiortp loop\n"); audiolayer->stopStream(); _debug("- ARTP Action: Stop\n"); //} catch(std::exception &e) { @@ -434,6 +464,7 @@ AudioRtpRTX::run () { //_debugException("* ARTP Action: Stop"); //throw; //} + } diff --git a/src/audio/audiortp.h b/src/audio/audiortp.h index 030840f94ee3f19041e27914e6b633e737fd75f1..fe75441c0ee6ad36a84f77a103707e5daf2c8064 100644 --- a/src/audio/audiortp.h +++ b/src/audio/audiortp.h @@ -29,6 +29,7 @@ #include <cc++/numbers.h> #include "../global.h" +// #include "plug-in/audiorecorder/audiorecord.h" #include "../samplerateconverter.h" #define UP_SAMPLING 0 @@ -39,6 +40,7 @@ * @brief Manage the real-time data transport in a SIP call */ + class SIPCall; /////////////////////////////////////////////////////////////////////////////// @@ -51,7 +53,7 @@ class AudioRtpRTX : public ost::Thread, public ost::TimerPort { * @param sipcall The pointer on the SIP call * @param sym Tells whether or not the voip links are symmetric */ - AudioRtpRTX (SIPCall* sipcall, bool sym); + AudioRtpRTX (SIPCall* sipcall, bool sym); /** * Destructor @@ -64,6 +66,14 @@ class AudioRtpRTX : public ost::Thread, public ost::TimerPort { /** Thread associated method */ virtual void run (); + /** + * Audio recording object + */ + AudioRecord recAudio; + + /** A SIP call */ + SIPCall* _ca; + private: // copy constructor @@ -72,9 +82,6 @@ class AudioRtpRTX : public ost::Thread, public ost::TimerPort { // assignment operator AudioRtpRTX& operator=(const AudioRtpRTX& rh); - /** A SIP call */ - SIPCall* _ca; - /** RTP session to send data */ ost::RTPSession *_sessionSend; @@ -105,12 +112,24 @@ class AudioRtpRTX : public ost::Thread, public ost::TimerPort { /** Variables to process audio stream: sample rate for playing sound (typically 44100HZ) */ int _layerSampleRate; - /** Sample rate of the codec we use to encode and decode (most of time 8000HZ) */ + /** Sample rate of te codec we use to encode and decode (most of time 8000HZ) */ int _codecSampleRate; /** Length of the sound frame we capture in ms(typically 20ms) */ int _layerFrameSize; + /** Speaker buffer length in samples once the data are resampled + * (used for mixing and recording) + */ + int _nSamplesSpkr; + + /** Mic buffer length in samples once the data are resampled + * (used for mixing and recording) + */ + int _nSamplesMic; + + + /** * Init the RTP session. Create either symmetric or double sessions to manage data transport * Set the payloads according to the manager preferences @@ -146,7 +165,12 @@ class AudioRtpRTX : public ost::Thread, public ost::TimerPort { int reSampleData(int sampleRate_codec, int nbSamples, int status); /** The audio codec used during the session */ - AudioCodec* _audiocodec; + AudioCodec* _audiocodec; + + /** + * Audio recording object + */ + // AudioRecord recAudio; }; /////////////////////////////////////////////////////////////////////////////// @@ -175,6 +199,12 @@ class AudioRtp { */ void closeRtpSession( void ); + /** + * Start recording + */ + void setRecording (); + + private: // copy constructor AudioRtp(const AudioRtp& rh); diff --git a/src/audio/pulselayer.cpp b/src/audio/pulselayer.cpp index 8882ebe09ae56b369768b4b09a8b23e8034925e5..a3566314fb0d4ad4a05f1b6ec961f0eac334d672 100644 --- a/src/audio/pulselayer.cpp +++ b/src/audio/pulselayer.cpp @@ -89,6 +89,7 @@ PulseLayer::connectPulseAudioServer( void ) //serverinfo(); //muteAudioApps(99); _debug("Context creation done\n"); + } void PulseLayer::context_state_callback( pa_context* c, void* user_data ) @@ -202,6 +203,7 @@ PulseLayer::startStream (void) pa_threaded_mainloop_lock(m); pa_stream_cork( record->pulseStream(), NULL, NULL, NULL); pa_threaded_mainloop_unlock(m); + } void @@ -251,7 +253,8 @@ PulseLayer::processData( void ) } } -void PulseLayer::writeToSpeaker( void ) +void +PulseLayer::writeToSpeaker( void ) { /** Bytes available in the urgent ringbuffer ( reserved for DTMF ) */ int urgentAvail; diff --git a/src/audio/pulselayer.h b/src/audio/pulselayer.h index 36ca8057ce47dccc78c23455dfa9b4ae40cb6ce7..7476d6052ec41fe04013e9068c2f863ef82e6109 100644 --- a/src/audio/pulselayer.h +++ b/src/audio/pulselayer.h @@ -22,7 +22,6 @@ #include "audiolayer.h" #include "audiostream.h" -#include "plug-in/audiorecorder/audiorecord.h" #include <pulse/pulseaudio.h> @@ -190,6 +189,7 @@ class PulseLayer : public AudioLayer { int spkrVolume; int micVolume; + public: static int streamState; }; diff --git a/src/audio/ringbuffer.cpp b/src/audio/ringbuffer.cpp index 12cac26c34e9ed63b1881c9bacf84f05b20ba424..52317ffffb90225e9c000a8f1da91d0cddb4228d 100644 --- a/src/audio/ringbuffer.cpp +++ b/src/audio/ringbuffer.cpp @@ -82,7 +82,8 @@ RingBuffer::Put(void* buffer, int toCopy, unsigned short volume) { toCopy = (mBufferSize-4) - len; src = (samplePtr) buffer; - + + copied = 0; pos = mEnd; diff --git a/src/call.cpp b/src/call.cpp index a29c60adfa092110ec1f2372d09e7f62ddc0c984..08d64d88351f032fab655f4c91589a7fd8efcdaa 100644 --- a/src/call.cpp +++ b/src/call.cpp @@ -36,11 +36,51 @@ Call::Call(const CallID& id, Call::CallType type) , _peerName() , _peerNumber() { + time_t rawtime; + struct tm * timeinfo; + + rawtime = std::time(NULL); + timeinfo = localtime ( &rawtime ); + + std::stringstream out; + + out << timeinfo->tm_year+1900; + if (timeinfo->tm_mon < 9) // january is 01, not 1 + out << 0; + out << timeinfo->tm_mon+1; + if (timeinfo->tm_mday < 10) // 01 02 03, not 1 2 3 + out << 0; + out << timeinfo->tm_mday; + if (timeinfo->tm_hour < 10) // 01 02 03, not 1 2 3 + out << 0; + out << timeinfo->tm_hour; + if (timeinfo->tm_min < 10) // 01 02 03, not 1 2 3 + out << 0; + out << timeinfo->tm_min; + if (timeinfo->tm_sec < 10) // 01 02 03, not 1 2 3 + out << 0; + out << timeinfo->tm_sec; + + _filename = out.str(); + + printf("Call::constructor filename for this call %s \n",_filename.c_str()); + + FILE_TYPE fileType = FILE_WAV; + SOUND_FORMAT soundFormat = INT16; + recAudio.setRecordingOption(_filename.c_str(),fileType,soundFormat,44100); + + _debug("CALL::Constructor for this clss is called \n"); } Call::~Call() { + _debug("CALL::~Call(): Destructor for this clss is called \n"); + + if(recAudio.isOpenFile()) { + _debug("CALL::~Call(): A recording file is open, close it \n"); + recAudio.closeFile(); + } } void @@ -127,3 +167,15 @@ Call::isAudioStarted() return _audioStarted; } +void +Call::setRecording() +{ + recAudio.setRecording(); +} + +bool +Call::isRecording() +{ + return recAudio.isRecording(); +} + diff --git a/src/call.h b/src/call.h index 32ce4f30e7a8c6085228765d9ea7ec1eef4163cf..b549e360f292675f90a3a6a53158172a657baad6 100644 --- a/src/call.h +++ b/src/call.h @@ -21,8 +21,10 @@ #define CALL_H #include <cc++/thread.h> // for mutex +#include <sstream> #include "audio/codecDescriptor.h" +#include "plug-in/audiorecorder/audiorecord.h" /* * @file call.h @@ -208,6 +210,26 @@ class Call{ */ AudioCodecType getAudioCodec(); + /** + * @return Return the file name for this call + */ + std::string getFileName() {return _filename;} + + /** + * A recorder for this call + */ + AudioRecord recAudio; + + /** + * SetRecording + */ + void setRecording(); + + /** + * Return Recording state + */ + bool isRecording(); + protected: /** Protect every attribute that can be changed by two threads */ ost::Mutex _callMutex; @@ -257,6 +279,7 @@ class Call{ private: + /** Unique ID of the call */ CallID _id; @@ -273,6 +296,8 @@ class Call{ /** Number of the peer */ std::string _peerNumber; + /** File name for his call : time YY-MM-DD */ + std::string _filename; }; #endif diff --git a/src/dbus/callmanager-glue.h b/src/dbus/callmanager-glue.h index 8490479e50b5ceddd353c99eba8863581298d111..4abf94d05cbb97ae8bb735547f9d401f251307aa 100644 --- a/src/dbus/callmanager-glue.h +++ b/src/dbus/callmanager-glue.h @@ -31,6 +31,7 @@ public: register_method(CallManager_adaptor, startTone, _startTone_stub); register_method(CallManager_adaptor, setVolume, _setVolume_stub); register_method(CallManager_adaptor, getVolume, _getVolume_stub); + register_method(CallManager_adaptor, setRecording, _setRecording_stub); register_method(CallManager_adaptor, getCallDetails, _getCallDetails_stub); register_method(CallManager_adaptor, getCurrentCallID, _getCurrentCallID_stub); } @@ -98,6 +99,11 @@ public: { "value", "d", false }, { 0, 0, 0 } }; + static ::DBus::IntrospectedArgument setRecording_args[] = + { + { "callID", "s", true }, + { 0, 0, 0 } + }; static ::DBus::IntrospectedArgument getCallDetails_args[] = { { "callID", "s", true }, @@ -158,6 +164,7 @@ public: { "startTone", startTone_args }, { "setVolume", setVolume_args }, { "getVolume", getVolume_args }, + { "setRecording", setRecording_args }, { "getCallDetails", getCallDetails_args }, { "getCurrentCallID", getCurrentCallID_args }, { 0, 0 } @@ -208,6 +215,7 @@ public: virtual void startTone(const int32_t& start, const int32_t& type) = 0; virtual void setVolume(const std::string& device, const double& value) = 0; virtual double getVolume(const std::string& device) = 0; + virtual void setRecording(const std::string& callID) = 0; virtual std::map< std::string, std::string > getCallDetails(const std::string& callID) = 0; virtual std::string getCurrentCallID() = 0; @@ -374,6 +382,15 @@ private: wi << argout1; return reply; } + ::DBus::Message _setRecording_stub(const ::DBus::CallMessage &call) + { + ::DBus::MessageIter ri = call.reader(); + + std::string argin1; ri >> argin1; + setRecording(argin1); + ::DBus::ReturnMessage reply(call); + return reply; + } ::DBus::Message _getCallDetails_stub(const ::DBus::CallMessage &call) { ::DBus::MessageIter ri = call.reader(); diff --git a/src/dbus/callmanager-introspec.xml b/src/dbus/callmanager-introspec.xml index 29caa7f0fc4f737fcaf906023e6fd8762aeeaa2e..6e415f9bfb71c26a48d3495733a9ced0545b1f32 100644 --- a/src/dbus/callmanager-introspec.xml +++ b/src/dbus/callmanager-introspec.xml @@ -51,6 +51,10 @@ <arg type="s" name="device" direction="in"/> <arg type="d" name="value" direction="out"/> </method> + + <method name="setRecording"> + <arg type="s" name="callID" direction="in"/> + </method> <method name="getCallDetails"> <arg type="s" name="callID" direction="in"/> @@ -87,6 +91,8 @@ <arg type="s" name="device" direction="out"/> <arg type="d" name="value" direction="out"/> </signal> + + <signal name="error"> <arg type="a{ss}" name="details" direction="out"/> diff --git a/src/dbus/callmanager.cpp b/src/dbus/callmanager.cpp index 2fa7a779edcfad17266412642454f1eb177a218a..d516dba31b305fe9c8e30e30cbb7ed5b8d628e46 100644 --- a/src/dbus/callmanager.cpp +++ b/src/dbus/callmanager.cpp @@ -115,6 +115,14 @@ CallManager::getVolume( const std::string& device ) return 0; } +void +CallManager::setRecording(const std::string& callID) +{ + _debug("CallManager::setRecording received\n"); + Manager::instance().setRecordingCall(callID); +} + + std::map< std::string, std::string > CallManager::getCallDetails( const std::string& callID UNUSED ) { diff --git a/src/dbus/callmanager.h b/src/dbus/callmanager.h index aa825a80ee30241db93b628348a233787b414262..a8c4c0c2ed8dba4bc841d258ab7fa6a9c70bc2bc 100644 --- a/src/dbus/callmanager.h +++ b/src/dbus/callmanager.h @@ -48,6 +48,7 @@ public: void transfert( const std::string& callID, const std::string& to ); void setVolume( const std::string& device, const double& value ); double getVolume( const std::string& device ); + void setRecording( const std::string& callID ); std::map< std::string, std::string > getCallDetails( const std::string& callID ); std::string getCurrentCallID( ); void playDTMF( const std::string& key ); diff --git a/src/iaxvoiplink.cpp b/src/iaxvoiplink.cpp index bb7d060895507de250eb10054c742b15e51c565a..9f95f699050679e4ec34c1419eee9e2d78dcaf5e 100644 --- a/src/iaxvoiplink.cpp +++ b/src/iaxvoiplink.cpp @@ -501,11 +501,28 @@ IAXVoIPLink::refuse(const CallID& id) _mutexIAX.enterMutex(); iax_reject(call->getSession(), (char*) reason.c_str()); _mutexIAX.leaveMutex(); + removeCall(id); return true; } + +void +IAXVoIPLink::setRecording(const CallID& id) +{ + _debug("IAXVoIPLink::setRecording!"); +} + +bool +IAXVoIPLink::isRecording(const CallID& id) +{ + _debug("IAXVoIPLink::setRecording!"); +} + + + + bool IAXVoIPLink::carryingDTMFdigits(const CallID& id, char code) { diff --git a/src/iaxvoiplink.h b/src/iaxvoiplink.h index b82949f640760b474913204c596616018ece1c98..c66112d1b2fe63027d04a0436fa46c35cf6a2788 100644 --- a/src/iaxvoiplink.h +++ b/src/iaxvoiplink.h @@ -151,7 +151,19 @@ class IAXVoIPLink : public VoIPLink * false otherwise */ bool refuse (const CallID& id); - + + /** + * Set Recording + * @param id The call identifier + */ + void setRecording(const CallID& id); + + /** + * Return recording state + * @param id The call identifier + */ + bool isRecording(const CallID& id); + /** * Send DTMF * @param id The ID of the call diff --git a/src/managerimpl.cpp b/src/managerimpl.cpp index 1881dae46c12cd08ff1fcf14523063e72758215a..8019eac48a39cf7da1f56f393531eada1bca573a 100644 --- a/src/managerimpl.cpp +++ b/src/managerimpl.cpp @@ -342,8 +342,23 @@ ManagerImpl::offHoldCall(const CallID& id) _debug("Setting OFFHOLD, Account %s, callid %s\n", accountid.c_str(), id.c_str()); + bool rec = getAccountLink(accountid)->isRecording(id); + + /* + if(rec) + _debug("ManagerImpl::offHoldCall(): Record state is true \n"); + else + _debug("ManagerImpl::offHoldCall(): Record state is false \n"); + */ + bool returnValue = getAccountLink(accountid)->offhold(id); - if (_dbus) _dbus->getCallManager()->callStateChanged(id, "UNHOLD"); + + if (_dbus){ + if (rec) + _dbus->getCallManager()->callStateChanged(id, "UNHOLD_RECORD"); + else + _dbus->getCallManager()->callStateChanged(id, "UNHOLD_CURRENT"); + } switchCall(id); return returnValue; @@ -1435,6 +1450,25 @@ ManagerImpl::setVolumeControls( void ) ( getConfigInt( PREFERENCES , CONFIG_VOLUME ) == DISPLAY_VOLUME_CONTROLS )? setConfig(PREFERENCES , CONFIG_VOLUME , NO_STR ) : setConfig( PREFERENCES , CONFIG_VOLUME , YES_STR ); } +void +ManagerImpl::setRecordingCall(const CallID& id) +{ + _debug("ManagerImpl::setRecording()! \n"); + AccountID accountid = getAccountFromCall( id ); + + // printf("ManagerImpl::CallID: %s", id); + getAccountLink(accountid)->setRecording(id); +} + +bool +ManagerImpl::isRecording(const CallID& id) +{ + _debug("ManagerImpl::isRecording()! \n"); + AccountID accountid = getAccountFromCall( id ); + + return getAccountLink(accountid)->isRecording(id); +} + void ManagerImpl::startHidden( void ) { diff --git a/src/managerimpl.h b/src/managerimpl.h index 45471b7b211e5b23a93d2c40d74eceb958cbd85a..82a067298feea8136ebd9b49a354549b87c5d8e4 100644 --- a/src/managerimpl.h +++ b/src/managerimpl.h @@ -61,6 +61,9 @@ typedef std::map<CallID, AccountID> CallAccountMap; /** Define a type for CallID vector (waiting list, incoming not answered) */ typedef std::set<CallID> CallIDSet; +/** Define a type for recorded audio file names vector */ +typedef std::map<CallID, std::string> RecFileNames; + /** To send multiple string */ typedef std::list<std::string> TokenList; @@ -454,6 +457,18 @@ class ManagerImpl { */ void setVolumeControls( void ); + /** + * Set recording on / off + * Start recording + * @param id The call identifier + */ + void setRecordingCall(const CallID& id); + + /** + * Return true if the call is currently recorded + */ + bool isRecording(const CallID& id); + /** * Set the maximum number of calls to keep in the history * @param calls The number of calls @@ -970,7 +985,8 @@ class ManagerImpl { */ bool removeCallAccount(const CallID& callID); - /** Contains a list of account (sip, aix, etc) and their respective voiplink/calls */ + /** + *Contains a list of account (sip, aix, etc) and their respective voiplink/calls */ AccountMap _accountMap; /** @@ -992,6 +1008,12 @@ class ManagerImpl { */ bool accountExists(const AccountID& accountID); + /** + * Map the call id to coresponding call + */ + RecFileNames _fileNamesMap; + + public: /** * Get an account pointer diff --git a/src/plug-in/audiorecorder/Makefile.am b/src/plug-in/audiorecorder/Makefile.am index 37a2ce4ed072fc300b0d85771f72e81d2fdf42e6..ca2d7602155ec58a9f093eccce5c412670517a4b 100644 --- a/src/plug-in/audiorecorder/Makefile.am +++ b/src/plug-in/audiorecorder/Makefile.am @@ -4,4 +4,4 @@ noinst_LTLIBRARIES = libaudiorecorder.la libaudiorecorder_la_SOURCES = \ audiorecord.cpp - + libsndfile.h diff --git a/src/plug-in/audiorecorder/audiorecord.cpp b/src/plug-in/audiorecorder/audiorecord.cpp index 65f63803942947e3cac58e91adcab2e76e1a9cf4..b547d06933a5aab43ed1db249b46f6b9b033a617 100644 --- a/src/plug-in/audiorecorder/audiorecord.cpp +++ b/src/plug-in/audiorecorder/audiorecord.cpp @@ -19,35 +19,72 @@ #include "audiorecord.h" + + AudioRecord::AudioRecord(){ + sndSmplRate_ = 44100; channels_ = 1; byteCounter_ = 0; + recordingEnabled_ = false; + fp = 0; } void AudioRecord::setSndSamplingRate(int smplRate){ - sndSmplRate_ = smplRate; + sndSmplRate_ = smplRate; } +void AudioRecord::setRecordingOption(std::string name, FILE_TYPE type, SOUND_FORMAT format, int sndSmplRate){ -void AudioRecord::openFile(std::string fileName, FILE_TYPE type, SOUND_FORMAT format) { - - channels_ =1; + strncpy(fileName_, name.c_str(), 8192); + fileType_ = type; - byteCounter_ = 0; sndFormat_ = format; + channels_ = 1; + sndSmplRate_ = sndSmplRate; + + if (fileType_ == FILE_RAW){ + if ( strstr(fileName_, ".raw") == NULL){ + printf("AudioRecord::openFile::concatenate .raw file extension: name : %s \n", fileName_); + strcat(fileName_, ".raw"); + } + } + else if (fileType_ == FILE_WAV){ + if ( strstr(fileName_, ".wav") == NULL){ + printf("AudioRecord::openFile::concatenate .wav file extension: name : %s \n", fileName_); + strcat(fileName_, ".wav"); + } + } +} - bool result = false; - - if(fileType_ == FILE_RAW){ - result = setRawFile( fileName.c_str() ); - } - else if (fileType_ == FILE_WAV){ - result = setWavFile( fileName.c_str() ); - } - +void AudioRecord::openFile(){ + + _debug("AudioRecord::openFile()\n"); + + bool result = false; + + if(isFileExist()) { + _debug("AudioRecord::Filename does not exist, creating one \n"); + byteCounter_ = 0; + + if(fileType_ == FILE_RAW){ + result = setRawFile(); + } + else if (fileType_ == FILE_WAV){ + result = setWavFile(); + } + } + else { + _debug("AudioRecord::Filename already exist opening it \n"); + if(fileType_ == FILE_RAW){ + result = openExistingRawFile(); + } + else if (fileType_ == FILE_WAV){ + result = openExistingWavFile(); + } + } } @@ -65,42 +102,80 @@ void AudioRecord::closeFile() { bool AudioRecord::isOpenFile() { - if(fp) + if(fp){ + _debug("AudioRecord::isOpenFile(): file already openend\n"); return true; - else + } + else { + _debug("AudioRecord::isOpenFIle(): file not openend \n"); return false; + } } -bool AudioRecord::setRawFile(const char *fileName) { +bool AudioRecord::isFileExist() { + + printf("AudioRecord::isFileExist(): try to open name : %s \n", fileName_); + if(fopen(fileName_,"rb")==0) { + return true; + } + + return false; +} + +bool AudioRecord::isRecording() { + _debug("AudioRecording::setRecording() \n"); + + if(recordingEnabled_) + return true; + else + return false; +} - char name[8192]; - strncpy(name, fileName, 8192); - if ( strstr(name, ".raw") == NULL) strcat(name, ".raw"); - fp = fopen(name, "wb"); + +bool AudioRecord::setRecording() { + _debug("AudioRecord::setRecording()\n"); + + if (isOpenFile()){ + _debug("AuioRecord::setRecording()::file already opened\n"); + if(!recordingEnabled_) + recordingEnabled_ = true; + else + recordingEnabled_ = false; + } + else { + _debug("AudioRecord::setRecording():Opening the wave file in call during call instantiation\n"); + openFile(); + + recordingEnabled_ = true; // once opend file, start recording + } + +} + + +bool AudioRecord::setRawFile() { + + fp = fopen(fileName_, "wb"); if ( !fp ) { - cout << "AudioRecord: could not create RAW file: " << name << '.'; + _debug("AudioRecord::setRawFile() : could not create RAW file!\n"); return false; } if ( sndFormat_ != INT16 ) { // TODO need to change INT16 to SINT16 sndFormat_ = INT16; - cout << "AudioRecord: using 16-bit signed integer data format for file " << name << '.'; + _debug("AudioRecord::setRawFile() : using 16-bit signed integer data format for file.\n"); } - cout << "AudioRecord: creating RAW file: " << name; + _debug("AudioRecord:setRawFile() : created RAW file.\n"); return true; } -bool AudioRecord::setWavFile(const char *fileName) { +bool AudioRecord::setWavFile() { - char name[8192]; - strncpy(name, fileName, 8192); - if ( strstr(name, ".wav") == NULL) strcat(name, ".wav"); - fp = fopen(name, "wb"); + fp = fopen(fileName_, "wb"); if ( !fp ) { - cout << "AudioRecord: could not create WAV file: " << name; + _debug("AudioRecord::setWavFile() : could not create WAV file.\n"); return false; } @@ -117,61 +192,189 @@ bool AudioRecord::setWavFile(const char *fileName) { hdr.bytes_per_samp = (SINT16) (channels_ * hdr.bits_per_samp / 8); hdr.bytes_per_sec = (SINT32) (hdr.sample_rate * hdr.bytes_per_samp); - - if ( fwrite(&hdr, 4, 11, fp) != 11 ) { - cout << "AudioRecord: could not write WAV header for file " << name << '.'; + + if ( fwrite(&hdr, 4, 11, fp) != 11) { + _debug("AudioRecord::setWavFile() : could not write WAV header for file. \n"); return false; } - cout << "AudioRecord: creating WAV file: " << name; + _debug("AudioRecord::setWavFile() : created WAV file. \n"); return true; } -void AudioRecord::closeWavFile() +bool AudioRecord::openExistingRawFile() +{ + fp = fopen(fileName_, "ab+"); + if ( !fp ) { + _debug("AudioRecord::openExistingRawFile() : could not create RAW file!\n"); + return false; + } +} + + +bool AudioRecord::openExistingWavFile() +{ + _debug("AudioRecord::openExistingWavFile() \n"); + + fp = fopen(fileName_, "rb+"); + if ( !fp ) { + _debug("AudioRecord::openExistingWavFile() : could not open WAV file rb+!\n"); + return false; + } + + printf("AudioRecord::openExistingWavFile()::Tried to open %s \n",fileName_); + + if(fseek(fp, 40, SEEK_SET) != 0) // jump to data length + _debug("AudioRecord::OpenExistingWavFile: 1.Couldn't seek offset 40 in the file \n"); + + if(fread(&byteCounter_, 4, 1, fp)) + _debug("AudioRecord::OpenExistingWavFile : bytecounter Read successfully \n"); + + if(fseek (fp, 0 , SEEK_END) != 0) + _debug("AudioRecors::OpenExistingWavFile : 2.Couldn't seek at the en of the file \n"); + + printf("AudioRecord::OpenExistingWavFile : Byte counter after oppening : %d \n",(int)byteCounter_); + + if ( fclose( fp ) != 0) + _debug("AudioRecord::openExistingWavFile()::ERROR: can't close file r+ \n"); + + + + fp = fopen(fileName_, "ab+"); + if ( !fp ) { + _debug("AudioRecord::openExistingWavFile() : could not createopen WAV file ab+!\n"); + return false; + } + + if(fseek (fp, 4 , SEEK_END) != 0) + _debug("AudioRecors::OpenExistingWavFile : 2.Couldn't seek at the en of the file \n"); + +} + + +void AudioRecord::closeWavFile() { - int bytes_per_sample = 1; - if ( sndFormat_ == INT16 ) - bytes_per_sample = 2; + if (fp == 0){ + _debug("AudioRecord:: Can't closeWavFile, a file has not yet been opened!\n"); + return; + } + + _debug("AudioRecord::closeWavFile() \n"); + if ( fclose( fp ) != 0) + _debug("AudioRecord::closeWavFile()::ERROR: can't close file ab \n"); - SINT32 bytes = byteCounter_ * channels_ * bytes_per_sample; + + + fp = fopen(fileName_, "rb+"); + if ( !fp ) { + _debug("AudioRecord::closeWavFile() : could not open WAV file rb+!\n"); + return; + } + + + SINT32 bytes = byteCounter_ * channels_; fseek(fp, 40, SEEK_SET); // jump to data length - fwrite(&bytes, 4, 1, fp); + if (ferror(fp))perror("AudioRecord::closeWavFile()::ERROR: can't reach offset 40\n"); + + fwrite(&bytes, sizeof(SINT32), 1, fp); + if (ferror(fp))perror("AudioRecord::closeWavFile()::ERROR: can't write bytes for data length \n"); + printf("AudioRecord::closeWavFile : data bytes: %i \n",(int)bytes); - bytes = byteCounter_ * channels_ * bytes_per_sample + 44; // + 44 for the wave header - fseek(fp, 4, SEEK_SET); // jump to file size + bytes = byteCounter_ * channels_ + 44; // + 44 for the wave header + fseek(fp, 4, SEEK_SET); // jump to file size + if (ferror(fp))perror("AudioRecord::closeWavFile()::ERROR: can't reach offset 4\n"); + fwrite(&bytes, 4, 1, fp); - fclose( fp ); + if (ferror(fp))perror("AudioRecord::closeWavFile()::ERROR: can't reach offset 4\n"); + + printf("AudioRecord::closeWavFile : bytes : %i \n",(int)bytes); + + if ( fclose( fp ) != 0) + _debug("AudioRecord::closeWavFile()::ERROR: can't close file\n"); + + // i = fclose(fp); + // printf("AudioRecord::closeWavFile : indicator i : %i \n",i); + } void AudioRecord::recData(SFLDataFormat* buffer, int nSamples) { - if (fp == 0){ - cout << "AudioRecord: Can't record data, a file has not yet been opened!"; - return; - } - - if ( sndFormat_ == INT16 ) { // TODO change INT16 to SINT16 - if (nSamples <= 1){ - if ( fwrite(buffer, 2, 1, fp) != 1) - cout << "AudioRecord: Could not record data!"; + if (recordingEnabled_) { + + if (fp == 0){ + _debug("AudioRecord: Can't record data, a file has not yet been opened!\n"); + return; } - else { - for ( int k=0; k<nSamples; k++ ) { - cout << "Buffer[" << k << "] : " << buffer[k] << "\n"; - if ( fwrite(&buffer[k], 2, 1, fp) != 1 ) - cout << "AudioRecord: Could not record data!"; + + // int size = nSamples * (sizeof(SFLDataFormat)); + // int size = sizeof(buffer); + // int count = sizeof(buffer) / sizeof(SFLDataFormat); + + // printf("AudioRecord : sizeof(buffer) : %d \n",size); + // printf("AudioRecord : sizeof(buffer) / sizeof(SFLDataFormat) : %d \n",count); + // printf("AudioRecord : nSamples : %d \n",nSamples); + // printf("AudioRecord : buffer: %x : ", buffer); + + if ( sndFormat_ == INT16 ) { // TODO change INT16 to SINT16 + if ( fwrite(buffer, sizeof(SFLDataFormat), nSamples, fp) != nSamples) + _debug("AudioRecord: Could not record data! \n"); + else { + // printf("Buffer : %x \n",*buffer); + fflush(fp); + // _debug("Flushing!\n"); + byteCounter_ += (unsigned long)(nSamples*sizeof(SFLDataFormat)); } - } + } } + return; +} + + +void AudioRecord::recData(SFLDataFormat* buffer_1, SFLDataFormat* buffer_2, int nSamples_1, int nSamples_2) { + + if (recordingEnabled_) { + + if (fp == 0){ + _debug("AudioRecord: Can't record data, a file has not yet been opened!\n"); + return; + } + + mixBuffer_ = new SFLDataFormat[nSamples_1]; + + // int size = nSamples * (sizeof(SFLDataFormat)); + // int size = sizeof(buffer); + // int count = sizeof(buffer) / sizeof(SFLDataFormat); + // printf("AudioRecord : sizeof(buffer) : %d \n",size); + // printf("AudioRecord : sizeof(buffer) / sizeof(SFLDataFormat) : %d \n",count); + // printf("AudioRecord : nSamples : %d \n",nSamples); + // printf("AudioRecord : buffer: %x : ", buffer); + + if ( sndFormat_ == INT16 ) { // TODO change INT16 to SINT16 + for (int k=0; k<nSamples_1; k++){ + + mixBuffer_[k] = (buffer_1[k]+buffer_2[k])/2; + + if ( fwrite(&buffer_1[k], 2, 1, fp) != 1) + _debug("AudioRecord: Could not record data!\n"); + else { + // printf("Buffer : %x \n",*buffer); + fflush(fp); + // _debug("Flushing!\n"); + } + } + } + + byteCounter_ += (unsigned long)(nSamples_1*sizeof(SFLDataFormat)); + printf("AudioRecord::recData():: byteCounter_ : %i \n",(int)byteCounter_ ); - byteCounter_ += (unsigned long)(sizeof(buffer) / sizeof(SINT16)); + delete [] mixBuffer_; + } return; } - diff --git a/src/plug-in/audiorecorder/audiorecord.h b/src/plug-in/audiorecorder/audiorecord.h index b38eefb29a59be117d896e9c2c6147ff43011ef3..69ed651225517f0539377dc18a2f6c9bc0f66a13 100644 --- a/src/plug-in/audiorecorder/audiorecord.h +++ b/src/plug-in/audiorecorder/audiorecord.h @@ -20,6 +20,7 @@ #include <iostream> #include <string.h> +#include <sndfile.h> #include "global.h" @@ -43,6 +44,8 @@ struct wavhdr { SINT32 data_length; // in bytes }; +typedef std::string CallID; + class AudioRecord { @@ -52,13 +55,15 @@ public: void setSndSamplingRate(int smplRate); + void setRecordingOption(std::string name, FILE_TYPE type, SOUND_FORMAT format, int sndSmplRate); + /** * Check if no otehr file is opened, then create a new one * @param fileName A string containing teh file (with/without extension) * @param type The sound file format (FILE_RAW, FILE_WAVE) * @param format Internal sound format (INT16 / INT32) */ - void openFile(std::string fileName, FILE_TYPE type, SOUND_FORMAT format); + void openFile(); /** * Close the opend recording file. If wave: cout the number of byte @@ -70,30 +75,69 @@ public: */ bool isOpenFile(); + /** + * Check if a file already exist + */ + bool isFileExist(); + + /** + * Check recording state + */ + bool isRecording(); + + /** + * Set recording flag + */ + bool setRecording(); + /** * Record a chunk of data in an openend file * @param buffer The data chunk to be recorded * @param nSamples Number of samples (number of bytes) to be recorded */ - void recData(SFLDataFormat* buffer, int nSamples); // TODO ad the data to rec + void recData(SFLDataFormat* buffer, int nSamples); + + /** + * Record a chunk of data in an openend file, Mix two differnet buffer + * @param buffer_1 The first data chunk to be recorded + * @param buffer_2 The second data chunk to be recorded + * @param nSamples_1 Number of samples (number of bytes) of buffer_1 + * @param nSamples_2 Number of samples (number of bytes) of buffer_2 + */ + void recData(SFLDataFormat* buffer_1, SFLDataFormat* buffer_2, int nSamples_1, int nSamples_2); protected: /** * Set the header for raw files */ - bool setRawFile(const char* fileName); + bool setRawFile(); /** * Set the header for wave files */ - bool setWavFile(const char* fileName); + bool setWavFile(); + + /** + * Open an existing raw file, used when the call is set on hold + */ + bool openExistingRawFile(); + + /** + * Open an existing wav file, used when the call is set on hold + */ + bool openExistingWavFile(); /** * Compute the number of byte recorded and close the file */ void closeWavFile(); + /** + * Given two buffers, return one mixed audio buffer + */ + void mixBuffers(SFLDataFormat* buffer_1, SFLDataFormat* buffer_2, int nSamples_1, int nSamples_2); + /** * Pointer to the recorded file */ @@ -115,7 +159,7 @@ protected: int channels_; /** - * Number f byte recorded + * Number of byte recorded */ unsigned long byteCounter_; @@ -124,4 +168,20 @@ protected: */ int sndSmplRate_; + /** + * Recording flage + */ + bool recordingEnabled_; + + /** + * Buffer used for mixing two channels + */ + SFLDataFormat* mixBuffer_; + + /** + * Filename for this recording + */ + char fileName_[8192]; + + }; diff --git a/src/sipcall.cpp b/src/sipcall.cpp index d43ea938ac230ce691722de456a39a3dcaa7c32a..74a183c84f47f3c75025f99eac799e26be4480a7 100644 --- a/src/sipcall.cpp +++ b/src/sipcall.cpp @@ -37,10 +37,13 @@ SIPCall::SIPCall(const CallID& id, Call::CallType type) : Call(id, type) , _xferSub(NULL) , _invSession(NULL) { + _debug("SIPCALL::Constructor for this clss is called \n"); } SIPCall::~SIPCall() { + + _debug("SIPCALL::Destructor for this clss is called \n"); } diff --git a/src/sipvoiplink.cpp b/src/sipvoiplink.cpp index c1a747292f40b3a856c135f9834d1e126ac6782e..77bdde30a9cc3f4fd5367d4f0d45f832b1254348 100644 --- a/src/sipvoiplink.cpp +++ b/src/sipvoiplink.cpp @@ -223,6 +223,7 @@ SIPVoIPLink::terminateSIPCall() call = dynamic_cast<SIPCall*>(iter->second); if (call) { // terminate the sip call + _debug("SIPVoIPLink::terminateSIPCall()::the call is deleted, should close recording file \n"); delete call; call = 0; } iter++; @@ -501,7 +502,7 @@ SIPVoIPLink::hangup(const CallID& id) return false; call->getInvSession()->mod_data[getModId()] = NULL; - + // Release RTP thread if (Manager::instance().isCurrentCall(id)) { _debug("* SIP Info: Stopping AudioRTP for hangup\n"); @@ -739,6 +740,26 @@ SIPVoIPLink::refuse (const CallID& id) return true; } +void +SIPVoIPLink::setRecording(const CallID& id) +{ + //SIPCall *call; + //call = getSIPCall(id); + + //call->setRecording(); + + _audiortp->setRecording(); +} + +bool +SIPVoIPLink::isRecording(const CallID& id) +{ + SIPCall *call; + call = getSIPCall(id); + + return call->isRecording(); +} + bool SIPVoIPLink::carryingDTMFdigits(const CallID& id, char code) { @@ -950,6 +971,8 @@ SIPVoIPLink::SIPCallServerFailure(SIPCall *call) void SIPVoIPLink::SIPCallClosed(SIPCall *call) { + + _debug("SIPVoIPLink::SIPCallClosed():: function called when peer hangup"); // it was without did before //SIPCall* call = findSIPCallWithCid(event->cid); if (!call) { return; } @@ -984,9 +1007,9 @@ SIPVoIPLink::SIPCallReleased(SIPCall *call) removeCall(id); } - void - SIPVoIPLink::SIPCallAnswered(SIPCall *call, pjsip_rx_data *rdata) - { +void +SIPVoIPLink::SIPCallAnswered(SIPCall *call, pjsip_rx_data *rdata) +{ //SIPCall* call = dynamic_cast<SIPCall *>(theCall);//findSIPCallWithCid(event->cid); if (!call) { _debug("! SIP Failure: unknown call\n"); diff --git a/src/sipvoiplink.h b/src/sipvoiplink.h index 4a87f111c9d25160e947e0009f5fcea14404cac5..5c3490ea40b6c8f75463e4edd719dd632c63a7e5 100644 --- a/src/sipvoiplink.h +++ b/src/sipvoiplink.h @@ -279,6 +279,18 @@ class SIPVoIPLink : public VoIPLink /** Decrement the number of SIP account connected to this link */ void decrementClients (void); + /** + * Set Recording + * @param id The call identifier + */ + void setRecording(const CallID& id); + + /** + * Returning state (true recording) + * @param id The call identifier + */ + bool isRecording(const CallID& id); + private: /** * Constructor @@ -338,7 +350,6 @@ class SIPVoIPLink : public VoIPLink /* Number of SIP accounts connected to the link */ int _clients; - }; #endif diff --git a/src/voiplink.h b/src/voiplink.h index 4038394ccf6446663bba7e5d0d465d7cd955c2a8..fa216a39acb914c797ecbca7fa8a3970570a9958 100644 --- a/src/voiplink.h +++ b/src/voiplink.h @@ -40,7 +40,6 @@ typedef std::map<CallID, Call*> CallMap; * @brief Listener and manager interface for each VoIP protocol */ class VoIPLink { - public: /** * Constructor @@ -155,6 +154,18 @@ class VoIPLink { */ virtual bool carryingDTMFdigits(const CallID& id, char code) = 0; + /** + * Set Recording + * @param id The call identifier + */ + virtual void setRecording(const CallID& id) = 0; + + /** + * Return recording state + * @param id The call identifier + */ + virtual bool isRecording(const CallID& id) = 0; + bool initDone (void) { return _initDone; } void initDone (bool state) { _initDone = state; }